diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000000000000000000000000000000000000..60cf9d536e56d8675468717814ffb5698298cf1e --- /dev/null +++ b/.clang-format @@ -0,0 +1,11 @@ +--- +# https://clang.llvm.org/docs/ClangFormatStyleOptions.html# +# the "Visual Studio" style is similar to: +BasedOnStyle: LLVM +UseTab: Never +IndentWidth: 4 +BreakBeforeBraces: Allman +AccessModifierOffset: -4 +SortIncludes: false +ColumnLimit: 0 +... diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000000000000000000000000000000000..de6044b96d078e062de7f658aef508ff77461564 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,8 @@ +# EditorConfig is awesome: https://EditorConfig.org + +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 4 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..c75d6969122a3061d7857371e186724cef740f0d --- /dev/null +++ b/.gitignore @@ -0,0 +1,66 @@ +# Compiled Object files +*.slo +*.lo +*.o + +# Compiled Dynamic libraries +*.so +*.dylib + +# Compiled Static libraries +*.lai +*.la +*.a + +# Misc +core +*.pyc +__pycache__/ +*.*~ + +# OS +.DS_Store +*.swp +*.bak + +# Workspace +workspace +workspace.tar.gz +*.tar.gz +*.tgz + +# build dir +build + +# gitlab-ci / clang-format +patches + +# Ansys +*.apdl +!*_lfs.apdl +*.ansys +!*_lfs.ansys + +# Gmsh +*.pos +*.msh # do not commit the mesh... +!*_lfs.msh # ... except in the lfs +#*.opt + +# sge output +*.o* +*.po* + +# matlab +*.asv + +# paraview +*.ogv +*.pvsm + +# IDE +.project +.pydevproject +.settings +.vscode +.vscode/* diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..f0452719b5350c1e8cef54b62a2b0353d2490708 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,104 @@ +# gitlab-ci file for Katoptron + +default: + image: rboman/waves-py3:2020.3 + before_script: + - source /opt/intel/mkl/bin/mklvars.sh intel64 + - source /opt/intel/tbb/bin/tbbvars.sh intel64 + - echo $(nproc) + - printenv | sort + +.global_tag: &global_tag_def + tags: + - mn2l +# - warson # you can choose a set of runners here + +variables: + GIT_SUBMODULE_STRATEGY: recursive + GIT_STRATEGY: clone # workaround full clone for each pipeline (https://gitlab.com/gitlab-org/gitlab-runner/-/issues/26993) + GIT_LFS_SKIP_SMUDGE: 1 # do not pull LFS + +stages: + - build + - test + +format: + <<: *global_tag_def + stage: build + script: + - clang-format --version # we use clang-format-10 exclusively + - ./ext/amfe/scripts/format_code.py + - mkdir -p patches + - if git diff --patch --exit-code > patches/clang-format.patch; then echo "Clang format changed nothing"; else echo "Clang format found changes to make!"; false; fi + artifacts: + paths: + - patches/ + expire_in: 1 day + when: on_failure + allow_failure: true + +build: + <<: *global_tag_def + stage: build + script: + - git submodule init + - git submodule update + - rm -rf build workspace + - mkdir build + - cd build + - cmake -Wno-dev .. + - make -j 8 + artifacts: + paths: + - build/ + expire_in: 1 day + +build-red: + <<: *global_tag_def + image: rboman/waves-py3-red:2020.3 + stage: build + script: + - git submodule init + - git submodule update + - rm -rf build workspace + - mkdir build + - cd build + - cmake -Wno-dev .. + - make -j 8 + artifacts: + paths: + - build/ + expire_in: 1 day + +doxygen: + <<: *global_tag_def + stage: test + script: + - cd build + - make dox + artifacts: + paths: + - build/doxygen/ + expire_in: 1 week + dependencies: + - build + +ctest: + <<: *global_tag_def + stage: test + script: + - cd build + - ctest --output-on-failure -j 8 + #timeout: 10 hours # will be available in 12.3 + dependencies: + - build + +ctest-red: + <<: *global_tag_def + image: rboman/waves-py3-red:2020.3 + stage: test + script: + - cd build + - ctest --output-on-failure -j 8 -R katoptron + dependencies: + - build-red diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000000000000000000000000000000000..e84a099a335811239805e43e471f8ab027d40310 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "ext/amfe"] + path = ext/amfe + url = ../amfe.git diff --git a/CMake/FindMPI4PY.cmake b/CMake/FindMPI4PY.cmake new file mode 100644 index 0000000000000000000000000000000000000000..9d4bb340d58c73fc7c83993c0c269de40e42c53a --- /dev/null +++ b/CMake/FindMPI4PY.cmake @@ -0,0 +1,42 @@ +# Copyright 2022 University of Liège +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +if(NOT MPI4PY_INCLUDE_DIR) + execute_process(COMMAND + "${PYTHON_EXECUTABLE}" "-c" "import mpi4py; print(mpi4py.get_include())" + OUTPUT_VARIABLE MPI4PY_INCLUDE_DIR + RESULT_VARIABLE MPI4PY_COMMAND_RESULT + OUTPUT_STRIP_TRAILING_WHITESPACE) + if(MPI4PY_COMMAND_RESULT) + message("waves/CMake/FindMPI4PY: mpi4py not found") + set(MPI4PY_FOUND FALSE) + else(MPI4PY_COMMAND_RESULT) + if (MPI4PY_INCLUDE_DIR MATCHES "Traceback") + message("waves/CMake/FindMPI4PY: mpi4py matches traceback") + ## Did not successfully include MPI4PY + set(MPI4PY_FOUND FALSE) + else (MPI4PY_INCLUDE_DIR MATCHES "Traceback") + ## successful + set(MPI4PY_FOUND TRUE) + set(MPI4PY_INCLUDE_DIR ${MPI4PY_INCLUDE_DIR} CACHE STRING "mpi4py include path") + endif (MPI4PY_INCLUDE_DIR MATCHES "Traceback") + endif(MPI4PY_COMMAND_RESULT) +else(NOT MPI4PY_INCLUDE_DIR) + set(MPI4PY_FOUND TRUE) +endif(NOT MPI4PY_INCLUDE_DIR) +# ---------------------------------------------------------------------------- + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(MPI4PY DEFAULT_MSG + MPI4PY_INCLUDE_DIR) diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..657ff36cb2345d3403347765b5b6572c8386e6ca --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,144 @@ +# Copyright 2022 University of Liège +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# ---------------------------------------------------------------------------- +PROJECT(Katoptron) +# ---------------------------------------------------------------------------- +CMAKE_MINIMUM_REQUIRED(VERSION 3.1) +IF(${CMAKE_VERSION} VERSION_GREATER "3.14.0") # we might want to update the project and use the NEW behavior here + cmake_policy(SET CMP0078 OLD) + cmake_policy(SET CMP0086 OLD) +ENDIF() + +# -- I/O +# Lib/Exe dir +SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin CACHE PATH + "Single output directory for building all libraries.") +SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin CACHE PATH + "Single output directory for building all executables.") +MARK_AS_ADVANCED(LIBRARY_OUTPUT_PATH EXECUTABLE_OUTPUT_PATH) + +# Build type +IF(NOT CMAKE_BUILD_TYPE) + SET( CMAKE_BUILD_TYPE "Release" CACHE STRING + "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." + FORCE) +ENDIF(NOT CMAKE_BUILD_TYPE) + +LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMake") + +# -- C++11 +SET(CMAKE_CXX_STANDARD 11) # newer way to set C++11 (requires cmake>=3.1) +SET(CMAKE_CXX_STANDARD_REQUIRED ON) + +# Set specific languages flags +IF((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Intel")) + IF(NOT APPLE) + SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-as-needed") + ENDIF() + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") # add verbosity + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp -Wno-unknown-pragmas -Wno-sign-compare") # merge trilinos +ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_DEPRECATE) + ADD_DEFINITIONS(-D_USE_MATH_DEFINES) # otherwise M_PI is undefined + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") # parallel build with MSVC + #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") # add verbosity +ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-register") + #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Weverything") # add verbosity +ENDIF() + +# -- OS related (from Kim) +IF(APPLE) + SET(CMAKE_MACOSX_RPATH TRUE) +ENDIF() + +# -- Search for Python +IF (CMAKE_VERSION VERSION_LESS 3.12.0) + FIND_PACKAGE(PythonInterp 3.6 REQUIRED) + FIND_PACKAGE(PythonLibs 3.6 REQUIRED) +ELSE() + FIND_PACKAGE(Python3 COMPONENTS Interpreter Development) + # use Python3_ROOT_DIR if wrong python found (e.g. anaconda) + SET(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) + SET(PYTHON_LIBRARIES ${Python3_LIBRARIES}) + SET(PYTHON_INCLUDE_PATH ${Python3_INCLUDE_DIRS}) + SET(PYTHONLIBS_VERSION_STRING ${Python3_VERSION}) +ENDIF() +MESSAGE(STATUS "PYTHON_EXECUTABLE:FILEPATH=${PYTHON_EXECUTABLE}") +MESSAGE(STATUS "PYTHON_LIBRARIES:FILEPATH=${PYTHON_LIBRARIES}") +MESSAGE(STATUS "PYTHON_INCLUDE_PATH:FILEPATH=${PYTHON_INCLUDE_PATH}") +MESSAGE(STATUS "PYTHON_FRAMEWORK_INCLUDES=${PYTHON_FRAMEWORK_INCLUDES}") +MESSAGE(STATUS "PYTHONLIBS_VERSION_STRING=${PYTHONLIBS_VERSION_STRING}") +MESSAGE(STATUS "Python_FRAMEWORKS=${Python_FRAMEWORKS}") + +# -- Search for SWIG +FIND_PACKAGE(SWIG REQUIRED) +IF(CMAKE_GENERATOR MATCHES "Visual Studio") # not MSVC because of nmake & jom + SET(CMAKE_SWIG_OUTDIR "${EXECUTABLE_OUTPUT_PATH}/$(Configuration)/") +ELSE() + SET(CMAKE_SWIG_OUTDIR "${EXECUTABLE_OUTPUT_PATH}") +ENDIF() + +# Doxygen (https://vicrucann.github.io/tutorials/quick-cmake-doxygen/) +FIND_PACKAGE(Doxygen) # check if Doxygen is installed +IF(DOXYGEN_FOUND) + # set input and output files + SET(DOXYGEN_IN ${PROJECT_SOURCE_DIR}/Doxyfile.in) + SET(DOXYGEN_OUT ${PROJECT_BINARY_DIR}/Doxyfile) + # request to configure the file + CONFIGURE_FILE(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY) + # note the option ALL which allows to build the docs together with the application + # "make dox" rebuilds the doc + ADD_CUSTOM_TARGET( dox #ALL + COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generating API documentation with Doxygen" + VERBATIM ) +ELSE() + MESSAGE("Doxygen needs to be installed to generate the doxygen documentation") +ENDIF() + +# -- DEFINE (for SWIG to detect definitions) +INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}) # to find "amfe_def.h" + +# -- CTest +ENABLE_TESTING() + +# -- INSTALL +IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -m site --user-site OUTPUT_VARIABLE PY_SITE OUTPUT_STRIP_TRAILING_WHITESPACE) + SET(CMAKE_INSTALL_PREFIX "${PY_SITE}/katoptron" CACHE STRING "Install location" FORCE) + SET(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT FALSE) +ENDIF() +IF(UNIX AND NOT APPLE) + SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}") +ENDIF() + +# -- Sub directories +ADD_SUBDIRECTORY( ext ) +ADD_SUBDIRECTORY( katoptron ) +ADD_SUBDIRECTORY( tlnos ) + + +# -- FINAL +MESSAGE(STATUS "PROJECT: ${CMAKE_PROJECT_NAME}") +MESSAGE(STATUS "* SYSTEM NAME=\"${CMAKE_SYSTEM_NAME}\"") +MESSAGE(STATUS "* CXX COMPILER: ${CMAKE_CXX_COMPILER_ID}") +MESSAGE(STATUS "* CXX STANDARD: ${CMAKE_CXX_STANDARD}") +MESSAGE(STATUS "* INSTALL DIR: ${CMAKE_INSTALL_PREFIX}") +MESSAGE(STATUS "* BUILD TYPE: ${CMAKE_BUILD_TYPE}") +MESSAGE(STATUS "* VTK SUPPORT: ${USE_VTK}") +MESSAGE(STATUS "* MKL SUPPORT: ${USE_MKL}") +MESSAGE(STATUS "* MUMPS SUPPORT: ${USE_MUMPS}") diff --git a/Doxyfile.in b/Doxyfile.in new file mode 100644 index 0000000000000000000000000000000000000000..35e844030eb19ce12964918c0fc6716bfed7f930 --- /dev/null +++ b/Doxyfile.in @@ -0,0 +1,2490 @@ +# Doxyfile 1.8.11 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = Katoptron + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = "Katoptron" + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = @PROJECT_SOURCE_DIR@/dox/logo.jpg + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = @PROJECT_BINARY_DIR@/doxygen + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO, these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if <section_label> ... \endif and \cond <section_label> +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = @PROJECT_SOURCE_DIR@/README.md \ + @PROJECT_SOURCE_DIR@/ext/amfe/fwk/src \ + @PROJECT_SOURCE_DIR@/ext/amfe/tbox/src \ + @PROJECT_SOURCE_DIR@/ext/amfe/tboxVtk/src \ + @PROJECT_SOURCE_DIR@/katoptron/src + + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f, *.for, *.tcl, +# *.vhd, *.vhdl, *.ucf, *.qsf, *.as and *.js. + +FILE_PATTERNS = *.c \ + *.cpp \ + *.h \ + *.hpp \ + *.md + +#FILE_PATTERNS = *.c \ +# *.cc \ +# *.cxx \ +# *.cpp \ +# *.c++ \ +# *.java \ +# *.ii \ +# *.ixx \ +# *.ipp \ +# *.i++ \ +# *.inl \ +# *.idl \ +# *.ddl \ +# *.odl \ +# *.h \ +# *.hh \ +# *.hxx \ +# *.hpp \ +# *.h++ \ +# *.cs \ +# *.d \ +# *.php \ +# *.php4 \ +# *.php5 \ +# *.phtml \ +# *.inc \ +# *.m \ +# *.markdown \ +# *.md \ +# *.mm \ +# *.dox \ +# *.py \ +# *.pyw \ +# *.f90 \ +# *.f \ +# *.for \ +# *.tcl \ +# *.vhd \ +# *.vhdl \ +# *.ucf \ +# *.qsf \ +# *.as \ +# *.js + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = @PROJECT_SOURCE_DIR@/dox/ + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# <filter> <input-file> +# +# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = README.md + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the +# cost of reduced performance. This can be particularly helpful with template +# rich C++ code for which doxygen's built-in parser lacks the necessary type +# information. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse-libclang=ON option for CMake. +# The default value is: NO. + +CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_OPTIONS = + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = NO + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = YES + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = YES + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use <access key> + S +# (what the <access key> is depends on the OS and browser, but it is typically +# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down +# key> to jump into the search results window, the results can be navigated +# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel +# the search. The filter options can be selected when the cursor is inside the +# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> +# to select a filter and <Enter> or <escape> to activate or cancel the filter +# option. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a web server instead of a web client using Javascript. There +# are two flavors of web server based searching depending on the EXTERNAL_SEARCH +# setting. When disabled, doxygen will generate a PHP script for searching and +# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing +# and searching needs to be provided by external tools. See the section +# "External Indexing and Searching" for details. +# The default value is: NO. +# This tag requires that the tag SEARCHENGINE is set to YES. + +SERVER_BASED_SEARCH = NO + +# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP +# script for searching. Instead the search results are written to an XML file +# which needs to be processed by an external indexer. Doxygen will invoke an +# external search engine pointed to by the SEARCHENGINE_URL option to obtain the +# search results. +# +# Doxygen ships with an example indexer (doxyindexer) and search engine +# (doxysearch.cgi) which are based on the open source search engine library +# Xapian (see: http://xapian.org/). +# +# See the section "External Indexing and Searching" for details. +# The default value is: NO. +# This tag requires that the tag SEARCHENGINE is set to YES. + +EXTERNAL_SEARCH = NO + +# The SEARCHENGINE_URL should point to a search engine hosted by a web server +# which will return the search results when EXTERNAL_SEARCH is enabled. +# +# Doxygen ships with an example indexer (doxyindexer) and search engine +# (doxysearch.cgi) which are based on the open source search engine library +# Xapian (see: http://xapian.org/). See the section "External Indexing and +# Searching" for details. +# This tag requires that the tag SEARCHENGINE is set to YES. + +SEARCHENGINE_URL = + +# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed +# search data is written to a file for indexing by an external tool. With the +# SEARCHDATA_FILE tag the name of this file can be specified. +# The default file is: searchdata.xml. +# This tag requires that the tag SEARCHENGINE is set to YES. + +SEARCHDATA_FILE = searchdata.xml + +# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the +# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is +# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple +# projects and redirect the results back to the right project. +# This tag requires that the tag SEARCHENGINE is set to YES. + +EXTERNAL_SEARCH_ID = + +# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen +# projects other than the one defined by this configuration file, but that are +# all added to the same external search index. Each project needs to have a +# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of +# to a relative location where the documentation can be found. The format is: +# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... +# This tag requires that the tag SEARCHENGINE is set to YES. + +EXTRA_SEARCH_MAPPINGS = + +#--------------------------------------------------------------------------- +# Configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. +# The default value is: YES. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: latex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. +# +# Note that when enabling USE_PDFLATEX this option is only used for generating +# bitmaps for formulas in the HTML output, but not in the Makefile that is +# written to the output directory. +# The default file is: latex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate +# index for LaTeX. +# The default file is: makeindex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX +# documents. This may be useful for small projects and may help to save some +# trees in general. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used by the +# printer. +# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x +# 14 inches) and executive (7.25 x 10.5 inches). +# The default value is: a4. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names +# that should be included in the LaTeX output. The package can be specified just +# by its name or with the correct syntax as to be used with the LaTeX +# \usepackage command. To get the times font for instance you can specify : +# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times} +# To use the option intlimits with the amsmath package you can specify: +# EXTRA_PACKAGES=[intlimits]{amsmath} +# If left blank no extra packages will be included. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +EXTRA_PACKAGES = amsmath + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the +# generated LaTeX document. The header should contain everything until the first +# chapter. If it is left blank doxygen will generate a standard header. See +# section "Doxygen usage" for information on how to let doxygen write the +# default header to a separate file. +# +# Note: Only use a user-defined header if you know what you are doing! The +# following commands have a special meaning inside the header: $title, +# $datetime, $date, $doxygenversion, $projectname, $projectnumber, +# $projectbrief, $projectlogo. Doxygen will replace $title with the empty +# string, for the replacement values of the other commands the user is referred +# to HTML_HEADER. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the +# generated LaTeX document. The footer should contain everything after the last +# chapter. If it is left blank doxygen will generate a standard footer. See +# LATEX_HEADER for more information on how to generate a default footer and what +# special commands can be used inside the footer. +# +# Note: Only use a user-defined footer if you know what you are doing! +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_FOOTER = + +# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# LaTeX style sheets that are included after the standard style sheets created +# by doxygen. Using this option one can overrule certain style aspects. Doxygen +# will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EXTRA_STYLESHEET = + +# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the LATEX_OUTPUT output +# directory. Note that the files will be copied as-is; there are no commands or +# markers available. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EXTRA_FILES = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is +# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will +# contain links (just like the HTML output) instead of page references. This +# makes the output suitable for online browsing using a PDF viewer. +# The default value is: YES. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate +# the PDF file directly from the LaTeX files. Set this option to YES, to get a +# higher quality PDF documentation. +# The default value is: YES. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode +# command to the generated LaTeX files. This will instruct LaTeX to keep running +# if errors occur, instead of asking the user for help. This option is also used +# when generating formulas in HTML. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_BATCHMODE = NO + +# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the +# index chapters (such as File Index, Compound Index, etc.) in the output. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_HIDE_INDICES = NO + +# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source +# code with syntax highlighting in the LaTeX output. +# +# Note that which sources are shown also depends on other settings such as +# SOURCE_BROWSER. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. See +# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. +# The default value is: plain. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_BIB_STYLE = plain + +# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_TIMESTAMP = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The +# RTF output is optimized for Word 97 and may not look too pretty with other RTF +# readers/editors. +# The default value is: NO. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: rtf. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF +# documents. This may be useful for small projects and may help to save some +# trees in general. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will +# contain hyperlink fields. The RTF file will contain links (just like the HTML +# output) instead of page references. This makes the output suitable for online +# browsing using Word or some other Word compatible readers that support those +# fields. +# +# Note: WordPad (write) and others do not support links. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's config +# file, i.e. a series of assignments. You only have to provide replacements, +# missing definitions are set to their default value. +# +# See also section "Doxygen usage" for information on how to generate the +# default style sheet that doxygen normally uses. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an RTF document. Syntax is +# similar to doxygen's config file. A template extensions file can be generated +# using doxygen -e rtf extensionFile. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_EXTENSIONS_FILE = + +# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code +# with syntax highlighting in the RTF output. +# +# Note that which sources are shown also depends on other settings such as +# SOURCE_BROWSER. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_SOURCE_CODE = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for +# classes and files. +# The default value is: NO. + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. A directory man3 will be created inside the directory specified by +# MAN_OUTPUT. +# The default directory is: man. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to the generated +# man pages. In case the manual section does not start with a number, the number +# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is +# optional. +# The default value is: .3. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_EXTENSION = .3 + +# The MAN_SUBDIR tag determines the name of the directory created within +# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by +# MAN_EXTENSION with the initial . removed. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_SUBDIR = + +# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it +# will generate one additional man file for each entity documented in the real +# man page(s). These additional files only source the real man page, but without +# them the man command would be unable to find the correct page. +# The default value is: NO. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that +# captures the structure of the code including all documentation. +# The default value is: NO. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: xml. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_OUTPUT = xml + +# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program +# listings (including syntax highlighting and cross-referencing information) to +# the XML output. Note that enabling this will significantly increase the size +# of the XML output. +# The default value is: YES. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the DOCBOOK output +#--------------------------------------------------------------------------- + +# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files +# that can be used to generate PDF. +# The default value is: NO. + +GENERATE_DOCBOOK = NO + +# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in +# front of it. +# The default directory is: docbook. +# This tag requires that the tag GENERATE_DOCBOOK is set to YES. + +DOCBOOK_OUTPUT = docbook + +# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the +# program listings (including syntax highlighting and cross-referencing +# information) to the DOCBOOK output. Note that enabling this will significantly +# increase the size of the DOCBOOK output. +# The default value is: NO. +# This tag requires that the tag GENERATE_DOCBOOK is set to YES. + +DOCBOOK_PROGRAMLISTING = NO + +#--------------------------------------------------------------------------- +# Configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an +# AutoGen Definitions (see http://autogen.sf.net) file that captures the +# structure of the code including all documentation. Note that this feature is +# still experimental and incomplete at the moment. +# The default value is: NO. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module +# file that captures the structure of the code including all documentation. +# +# Note that this feature is still experimental and incomplete at the moment. +# The default value is: NO. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary +# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI +# output from the Perl module output. +# The default value is: NO. +# This tag requires that the tag GENERATE_PERLMOD is set to YES. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely +# formatted so it can be parsed by a human reader. This is useful if you want to +# understand what is going on. On the other hand, if this tag is set to NO, the +# size of the Perl module output will be much smaller and Perl will parse it +# just the same. +# The default value is: YES. +# This tag requires that the tag GENERATE_PERLMOD is set to YES. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file are +# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful +# so different doxyrules.make files included by the same Makefile don't +# overwrite each other's variables. +# This tag requires that the tag GENERATE_PERLMOD is set to YES. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all +# C-preprocessor directives found in the sources and include files. +# The default value is: YES. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names +# in the source code. If set to NO, only conditional compilation will be +# performed. Macro expansion can be done in a controlled way by setting +# EXPAND_ONLY_PREDEF to YES. +# The default value is: NO. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then +# the macro expansion is limited to the macros specified with the PREDEFINED and +# EXPAND_AS_DEFINED tags. +# The default value is: NO. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES, the include files in the +# INCLUDE_PATH will be searched if a #include is found. +# The default value is: YES. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by the +# preprocessor. +# This tag requires that the tag SEARCH_INCLUDES is set to YES. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will be +# used. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that are +# defined before the preprocessor is started (similar to the -D option of e.g. +# gcc). The argument of the tag is a list of macros of the form: name or +# name=definition (no spaces). If the definition and the "=" are omitted, "=1" +# is assumed. To prevent a macro definition from being undefined via #undef or +# recursively expanded use the := operator instead of the = operator. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this +# tag can be used to specify a list of macro names that should be expanded. The +# macro definition that is found in the sources will be used. Use the PREDEFINED +# tag if you want to use a different macro definition that overrules the +# definition found in the source code. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will +# remove all references to function-like macros that are alone on a line, have +# an all uppercase name, and do not end with a semicolon. Such function macros +# are typically used for boiler-plate code, and will confuse the parser if not +# removed. +# The default value is: YES. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES tag can be used to specify one or more tag files. For each tag +# file the location of the external documentation should be added. The format of +# a tag file without this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where loc1 and loc2 can be relative or absolute paths or URLs. See the +# section "Linking to external documentation" for more information about the use +# of tag files. +# Note: Each tag file must have a unique name (where the name does NOT include +# the path). If a tag file is not located in the directory in which doxygen is +# run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create a +# tag file that is based on the input files it reads. See section "Linking to +# external documentation" for more information about the usage of tag files. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES, all external class will be listed in +# the class index. If set to NO, only the inherited external classes will be +# listed. +# The default value is: NO. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will be +# listed. +# The default value is: YES. + +EXTERNAL_GROUPS = YES + +# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in +# the related pages index. If set to NO, only the current project's pages will +# be listed. +# The default value is: YES. + +EXTERNAL_PAGES = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of 'which perl'). +# The default file (with absolute path) is: /usr/bin/perl. + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram +# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to +# NO turns the diagrams off. Note that this option also works with HAVE_DOT +# disabled, but it is recommended to install and use dot, since it yields more +# powerful graphs. +# The default value is: YES. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see: +# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# You can include diagrams made with dia in doxygen documentation. Doxygen will +# then run dia to produce the diagram and insert it in the documentation. The +# DIA_PATH tag allows you to specify the directory where the dia binary resides. +# If left empty dia is assumed to be found in the default search path. + +DIA_PATH = + +# If set to YES the inheritance and collaboration graphs will hide inheritance +# and usage relations if the target is undocumented or is not a class. +# The default value is: YES. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz (see: +# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent +# Bell Labs. The other options in this section have no effect if this option is +# set to NO +# The default value is: YES. + +HAVE_DOT = YES + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed +# to run in parallel. When set to 0 doxygen will base this on the number of +# processors available in the system. You can set it explicitly to a value +# larger than 0 to get control over the balance between CPU load and processing +# speed. +# Minimum value: 0, maximum value: 32, default value: 0. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_NUM_THREADS = 0 + +# When you want a differently looking font in the dot files that doxygen +# generates you can specify the font name using DOT_FONTNAME. You need to make +# sure dot is able to find the font, which can be done by putting it in a +# standard location or by setting the DOTFONTPATH environment variable or by +# setting DOT_FONTPATH to the directory containing the font. +# The default value is: Helvetica. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of +# dot graphs. +# Minimum value: 4, maximum value: 24, default value: 10. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the default font as specified with +# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set +# the path where dot can find it using this tag. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_FONTPATH = + +# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for +# each documented class showing the direct and indirect inheritance relations. +# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a +# graph for each documented class showing the direct and indirect implementation +# dependencies (inheritance, containment, and class references variables) of the +# class with other documented classes. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for +# groups, showing the direct groups dependencies. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +UML_LOOK = NO + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside the +# class node. If there are many fields or methods and many nodes the graph may +# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the +# number of items for each type to make the size more manageable. Set this to 0 +# for no limit. Note that the threshold may be exceeded by 50% before the limit +# is enforced. So when you set the threshold to 10, up to 15 fields may appear, +# but if the number exceeds 15, the total amount of fields shown is limited to +# 10. +# Minimum value: 0, maximum value: 100, default value: 10. +# This tag requires that the tag HAVE_DOT is set to YES. + +UML_LIMIT_NUM_FIELDS = 10 + +# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and +# collaboration graphs will show the relations between templates and their +# instances. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +TEMPLATE_RELATIONS = NO + +# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to +# YES then doxygen will generate a graph for each documented file showing the +# direct and indirect include dependencies of the file with other documented +# files. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +INCLUDE_GRAPH = YES + +# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are +# set to YES then doxygen will generate a graph for each documented file showing +# the direct and indirect include dependencies of the file with other documented +# files. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH tag is set to YES then doxygen will generate a call +# dependency graph for every global function or class method. +# +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. Disabling a call graph can be +# accomplished by means of the command \hidecallgraph. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller +# dependency graph for every global function or class method. +# +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. Disabling a caller graph can be +# accomplished by means of the command \hidecallergraph. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical +# hierarchy of all classes instead of a textual one. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the +# dependencies a directory has on other directories in a graphical way. The +# dependency relations are determined by the #include relations between the +# files in the directories. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. For an explanation of the image formats see the section +# output formats in the documentation of the dot tool (Graphviz (see: +# http://www.graphviz.org/)). +# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order +# to make the SVG files visible in IE 9+ (other browsers do not have this +# requirement). +# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd, +# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo, +# gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd, png:cairo, +# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and +# png:gdiplus:gdiplus. +# The default value is: png. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_IMAGE_FORMAT = png + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# +# Note that this requires a modern browser other than Internet Explorer. Tested +# and working are Firefox, Chrome, Safari, and Opera. +# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make +# the SVG files visible. Older versions of IE do not have SVG support. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +INTERACTIVE_SVG = NO + +# The DOT_PATH tag can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the \dotfile +# command). +# This tag requires that the tag HAVE_DOT is set to YES. + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the \mscfile +# command). + +MSCFILE_DIRS = + +# The DIAFILE_DIRS tag can be used to specify one or more directories that +# contain dia files that are included in the documentation (see the \diafile +# command). + +DIAFILE_DIRS = + +# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the +# path where java can find the plantuml.jar file. If left blank, it is assumed +# PlantUML is not used or called during a preprocessing step. Doxygen will +# generate a warning when it encounters a \startuml command in this case and +# will not generate output for the diagram. + +PLANTUML_JAR_PATH = + +# When using plantuml, the specified paths are searched for files specified by +# the !include statement in a plantuml block. + +PLANTUML_INCLUDE_PATH = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes +# that will be shown in the graph. If the number of nodes in a graph becomes +# larger than this value, doxygen will truncate the graph, which is visualized +# by representing a node as a red box. Note that doxygen if the number of direct +# children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that +# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. +# Minimum value: 0, maximum value: 10000, default value: 50. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs +# generated by dot. A depth value of 3 means that only nodes reachable from the +# root by following a path via at most 3 edges will be shown. Nodes that lay +# further from the root node will be omitted. Note that setting this option to 1 +# or 2 may greatly reduce the computation time needed for large code bases. Also +# note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. +# Minimum value: 0, maximum value: 1000, default value: 0. +# This tag requires that the tag HAVE_DOT is set to YES. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not seem +# to support this out of the box. +# +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) support +# this, this feature is disabled by default. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page +# explaining the meaning of the various boxes and arrows in the dot generated +# graphs. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot +# files that are used to generate the various graphs. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_CLEANUP = YES diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..8dada3edaf50dbc082c9a125058f25def75e625a --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md index d3b87c5aa3d8868f4e6ab807b8b50f0e31383138..ba0dab60cd311826e96aa7a33555d1808cf10357 100644 --- a/README.md +++ b/README.md @@ -1,92 +1,10 @@ -# katoptron +# Katoptron +Themomechanical Finite Element solver based on [Trilinos](https://trilinos.github.io/) from Kim Liegeois's Phd thesis. +This code was previously part of [waves](https://gitlab.uliege.be/am-dept/waves). -## Getting started +### References +Liegeois K., [GMRES with embedded ensemble propagation for the efficient solution of parametric linear systems in uncertainty quantification of computational models with application to the thermomechanical simulation of an ITER front mirror](http://hdl.handle.net/2268/249334), University of Liège, 2020. -To make it easy for you to get started with GitLab, here's a list of recommended next steps. - -Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)! - -## Add your files - -- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files -- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command: - -``` -cd existing_repo -git remote add origin https://gitlab.uliege.be/am-dept/katoptron.git -git branch -M main -git push -uf origin main -``` - -## Integrate with your tools - -- [ ] [Set up project integrations](https://gitlab.uliege.be/am-dept/katoptron/-/settings/integrations) - -## Collaborate with your team - -- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/) -- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html) -- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically) -- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/) -- [ ] [Automatically merge when pipeline succeeds](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html) - -## Test and Deploy - -Use the built-in continuous integration in GitLab. - -- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html) -- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://docs.gitlab.com/ee/user/application_security/sast/) -- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html) -- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/) -- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html) - -*** - -# Editing this README - -When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://www.makeareadme.com/) for this template. - -## Suggestions for a good README -Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information. - -## Name -Choose a self-explaining name for your project. - -## Description -Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors. - -## Badges -On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge. - -## Visuals -Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method. - -## Installation -Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection. - -## Usage -Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README. - -## Support -Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc. - -## Roadmap -If you have ideas for releases in the future, it is a good idea to list them in the README. - -## Contributing -State if you are open to contributions and what your requirements are for accepting them. - -For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self. - -You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser. - -## Authors and acknowledgment -Show your appreciation to those who have contributed to the project. - -## License -For open source projects, say how it is licensed. - -## Project status -If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers. +Liegeois K., Boman R., Phipps E., Wiesner T., and Arnst M., [GMRES with embedded ensemble propagation for the efficient solution of parametric linear systems in uncertainty quantification of computational models](http://hdl.handle.net/2268/248201), Computer Methods in Applied Mechanics and Engineering, Vol. 369, 2020. diff --git a/dox/logo.jpg b/dox/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..17aeb3377b96b8ec85fed719dd8b3fdc25bd6913 Binary files /dev/null and b/dox/logo.jpg differ diff --git a/ext/CMakeLists.txt b/ext/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..3c75cd0707ae6ec472aabfbed5bcf7d2af61160b --- /dev/null +++ b/ext/CMakeLists.txt @@ -0,0 +1 @@ +ADD_SUBDIRECTORY(amfe) diff --git a/ext/amfe b/ext/amfe new file mode 160000 index 0000000000000000000000000000000000000000..7b5a21b0c5fc3885a11e98ebc2e5acbd19bc55bf --- /dev/null +++ b/ext/amfe @@ -0,0 +1 @@ +Subproject commit 7b5a21b0c5fc3885a11e98ebc2e5acbd19bc55bf diff --git a/katoptron/CMAME/MG/beam.geo b/katoptron/CMAME/MG/beam.geo new file mode 100644 index 0000000000000000000000000000000000000000..df548c673ab4448e1e1f407c69487267e7c0e279 --- /dev/null +++ b/katoptron/CMAME/MG/beam.geo @@ -0,0 +1,81 @@ +SetFactory("OpenCASCADE"); +If(GMSH_MAJOR_VERSION!=3 || GMSH_MINOR_VERSION!=0 || GMSH_PATCH_VERSION!=6) + Printf("gmsh %g.%g.%g is not supported by this .geo",GMSH_MAJOR_VERSION,GMSH_MINOR_VERSION,GMSH_PATCH_VERSION); +Else + LX = 10; + LY = 10; + lx2 = 2; + ly1 = 2; + ly2 = 7; + LZ = 1; + + lc = 0.1; + + nX1 = 5; + nY1 = 3; + nX2 = 3; + nX3 = 4; + nY2 = 6; + nZ = 1; + + Point(1) = { 0., LY-ly1, 0., lc}; + Point(2) = { 0., LY, 0., lc}; + Point(3) = { LX-lx2, LY, 0., lc}; + Point(4) = { LX-lx2, LY-ly1, 0., lc}; + Point(5) = { LX, LY, 0., lc}; + Point(6) = { LX, LY-ly1, 0., lc}; + + Point(7) = { LX-lx2, 0., 0., lc}; + Point(8) = { LX-lx2, ly2, 0., lc}; + Point(9) = { LX, ly2, 0., lc}; + Point(10) = { LX, 0., 0., lc}; + + Line(1) = {1, 2}; + Line(2) = {2, 3}; + Line(3) = {3, 4}; + Line(4) = {4, 1}; + Line(5) = {3, 5}; + Line(6) = {5, 6}; + Line(7) = {6, 4}; + + Line(8) = {7, 8}; + Line(9) = {8, 9}; + Line(10) = {9, 10}; + Line(11) = {10, 7}; + + Transfinite Line {1, 3, 6} = nY1 Using Progression 1; + Transfinite Line {2, 4} = nX1 Using Progression 1; + Transfinite Line {5, 7} = nX3 Using Progression 1; + + Transfinite Line {8, 10} = nY2 Using Progression 1; + Transfinite Line {9, 11} = nX2 Using Progression 1; + + Line Loop(9) = {1, 2, 3, 4}; + Plane Surface(9) = {9}; + Transfinite Surface {9}; + Recombine Surface {9}; + + Line Loop(10) = {-3, 5, 6, 7}; + Plane Surface(10) = {10}; + Transfinite Surface {10}; + Recombine Surface {10}; + + Line Loop(12) = {8, 9, 10, 11}; + Plane Surface(12) = {12}; + Transfinite Surface {12}; + Recombine Surface {12}; + + Extrude {0, 0, LZ} + { + Surface{9,10,12}; Layers{nZ}; Recombine; + } + + Physical Volume("body") = {1,2,3}; + + Physical Surface("load 1") = {14}; + Physical Surface("load 2") = {20}; + Physical Surface("clamped 1") = {13}; + Physical Surface("clamped 2") = {25}; + Physical Surface("conctact 1") = {18}; + Physical Surface("conctact 2") = {23}; +EndIf diff --git a/katoptron/CMAME/MG/beam.py b/katoptron/CMAME/MG/beam.py new file mode 100644 index 0000000000000000000000000000000000000000..3dc43478b270e76b9d05c167918efeff76d3a502 --- /dev/null +++ b/katoptron/CMAME/MG/beam.py @@ -0,0 +1,240 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + + + + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_beam_test(msh, comm, test_case): + + directory = str(test_case) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + work_dir = os.getcwd() + args = parseargs() + + pbl = m.Problem(msh, comm) + + ensemble_size = 1 + + # Units are in mm + E = 70000 * np.ones(ensemble_size) # 70e9 Pa = 70000 MPa + nu = 0.35 * np.ones(ensemble_size) + k = 0. + d = 0. + m.Medium(pbl, "body", "test", E, nu, k, d) + + m.Dirichlet(pbl, "clamped 1", "Clamped", 1, 0., 1, 0., 1, 0., 0, 0., + ensemble_size) + m.Dirichlet(pbl, "clamped 2", "Clamped", 1, 0., 1, 0., 1, 0., 0, 0., + ensemble_size) + + f = 70 * np.ones(ensemble_size) # 700e6 Pa = 700 MPa + zero = np.zeros(ensemble_size) + one = np.ones(ensemble_size) + m.Neumann(pbl, 'load 1', 'load', 0, zero, 1, -f, 0, zero, 0, one, + ensemble_size) + m.Neumann(pbl, 'load 2', 'load', 0, zero, 1, -f, 0, zero, 0, one, + ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Ensemble Convergence Tolerance'] = 1e-8 + solverList['Maximum Iterations'] = 200 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + if test_case == 1: + mueluParams = Teuchos.ParameterList() + mueluParams['number of equations'] = 3 + mueluParams['max levels'] = 1 + mueluParams['coarse: type'] = "RELAXATION" + + mueluParamsSub2 = Teuchos.ParameterList() + mueluParamsSub2['relaxation: type'] = "Gauss-Seidel" + mueluParamsSub2['relaxation: sweeps'] = 3 + mueluParamsSub2['relaxation: damping factor'] = 0.75 + + mueluParams['verbosity'] = "high" + + mueluParams['coarse: params'] = mueluParamsSub2 + + solverList['mueluParams'] = mueluParams + + elif test_case == 2: + file_dir = os.path.dirname(__file__) + muelu_xml_in = file_dir + '/../../preconditioners/gs_lvl.xml.in' + + old_strings = ['$BLOCK_00_STRIDING_INFO', '$BLOCK_11_STRIDING_INFO', + '$BLOCK_00_GS_sweeps', '$BLOCK_00_GS_damping', + '$SCHUR_omega', '$SimpleSmoother_damping', "$N_LVLS", "$N_SIZES", "$EXPORT_DATA"] + new_strings = [ + '3', + '3', + '3', + '0.75', + '1', + '1', + '2', + '18', + "true" + ] + u.replace_strings(muelu_xml_in, work_dir + '/gs.xml', + old_strings, new_strings) + solverList['use xml file'] = True + solverList['MueLu xml file name'] = work_dir + '/gs.xml' + + elif test_case == 2.5: + mueluParams = Teuchos.ParameterList() + mueluParams['number of equations'] = 3 + mueluParams['max levels'] = 2 + mueluParams['smoother: type'] = "RELAXATION" + + mueluParamsSub2 = Teuchos.ParameterList() + mueluParamsSub2['relaxation: type'] = "MT Gauss-Seidel" + mueluParamsSub2['relaxation: type'] = "Gauss-Seidel" + mueluParamsSub2['relaxation: sweeps'] = 3 + mueluParamsSub2['relaxation: damping factor'] = 0.75 + + mueluParams['verbosity'] = "high" + mueluParams['smoother: params'] = mueluParamsSub2 + mueluParams['coarse: type'] = "Klu" + mueluParams['coarse: max size'] = 18 + #mueluParams['aggregation: min agg size'] = 5 + #mueluParams['aggregation: max selected neighbors'] = 1 + mueluParams['aggregation: export visualization data'] = True + exportdata = Teuchos.ParameterList() + exportdata['A'] = '{0,1}' + exportdata['P'] = '{0}' + exportdata['R'] = '{0}' + exportdata['Aggregates'] = '{0}' + mueluParams['export data'] = exportdata + solverList['mueluParams'] = mueluParams + + else: + norm = tbox.Vector3d(0, 1, 0) + cont = m.Contact(pbl, "conctact 1", "contact", norm) + cont.setInitialyOpen() + cont.setNoUpdate() + if test_case == 4 or test_case == 6: + cont.setSticking() + cont.setMaster(pbl, "conctact 2", norm) + + file_dir = os.path.dirname(__file__) + + if test_case == 3 or test_case == 4: + muelu_xml_in = file_dir + '/../../preconditioners/SIMPLE_gs_direct.xml.in' + + old_strings = ['$BLOCK_00_STRIDING_INFO', '$BLOCK_11_STRIDING_INFO', + '$BLOCK_00_GS_sweeps', '$BLOCK_00_GS_damping', + '$SCHUR_omega', '$SimpleSmoother_damping'] + if test_case == 4: + new_strings = [ + '3', + '3', + '3', + '0.75', + '1', + '1' + ] + else: + new_strings = [ + '3', + '1', + '3', + '0.75', + '1', + '1' + ] + else: + muelu_xml_in = file_dir + '/../../preconditioners/SIMPLE_gs_direct_lvl.xml.in' + + old_strings = ['$BLOCK_00_STRIDING_INFO', '$BLOCK_11_STRIDING_INFO', + '$BLOCK_00_GS_sweeps', '$BLOCK_00_GS_damping', + '$SCHUR_omega', '$SimpleSmoother_damping', "$N_LVLS", "$N_SIZES", "$EXPORT_DATA"] + if test_case == 6: + new_strings = [ + '3', + '3', + '3', + '0.75', + '1', + '1', + '2', + '18', + "true" + ] + else: + new_strings = [ + '3', + '1', + '3', + '0.75', + '1', + '1', + '2', + '18', + "true" + ] + u.replace_strings(muelu_xml_in, work_dir + '/SIMPLE_gs_direct.xml', + old_strings, new_strings) + solverList['MueLu xml file name'] = work_dir + '/SIMPLE_gs_direct.xml' + + solverList['convert MueLu xml file'] = True + solverList['Create Preconditioned Matrix'] = True + + solverList['Print Teuchos timers'] = True + + solverList['Use preconditioner'] = True + + solverList['type'] = 'BlockGmres' + solverList['Maximum active set iteration'] = 1 + + solverList['Write matrix and vectors'] = True + solverList['Write txt files'] = True + + slv = m.IterativeSolver(pbl, args.k, solverList, 3, ensemble_size) + slv.start() + f = open('timers.txt', 'w') + print(slv.getTimers(), file=f) + f.closed + + os.chdir('..') + + +def main(): + comm, rank, size = m.utilities.import_MPI() + + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = gmsh.MeshLoader('beam.geo', file_dir).execute() + + for i in range(1, 7): + evaluate_beam_test(msh, comm, i) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/MG/post.py b/katoptron/CMAME/MG/post.py new file mode 100644 index 0000000000000000000000000000000000000000..405eab92ab1e85f38415afa4af55b2e32b6cb553 --- /dev/null +++ b/katoptron/CMAME/MG/post.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + +from katoptron.eigenvalues import * +from katoptron.readers import * +import os +import fwk + +import vtk +import tboxVtk +import tboxVtk.reader as vtkR +import tboxVtk.cutter as vtkC + + +def main(): + import matplotlib.pyplot as plt + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + display = False + + input_file_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_MG_beam_12/' + + filename_A_1 = input_file_dir + '1/Applied_Matrix_mm.txt' + filename_A_2 = input_file_dir + '2/Applied_Matrix_mm.txt' + filename_A_3 = input_file_dir + '3/Applied_Matrix_mm.txt' + filename_A_4 = input_file_dir + '4/Applied_Matrix_mm.txt' + filename_A_5 = input_file_dir + '5/Applied_Matrix_mm.txt' + filename_A_6 = input_file_dir + '6/Applied_Matrix_mm.txt' + + filename_AQ_1 = input_file_dir + '1/Applied_Preconditioned_Matrix_mm.txt' + filename_AQ_2 = input_file_dir + '2/Applied_Preconditioned_Matrix_mm.txt' + filename_AQ_3 = input_file_dir + '3/Applied_Preconditioned_Matrix_mm.txt' + filename_AQ_4 = input_file_dir + '4/Applied_Preconditioned_Matrix_mm.txt' + filename_AQ_5 = input_file_dir + '5/Applied_Preconditioned_Matrix_mm.txt' + filename_AQ_6 = input_file_dir + '6/Applied_Preconditioned_Matrix_mm.txt' + + filename_Q_1 = input_file_dir + '1/Applied_Preconditioner_mm.txt' + filename_Q_2 = input_file_dir + '2/Applied_Preconditioner_mm.txt' + filename_Q_3 = input_file_dir + '3/Applied_Preconditioner_mm.txt' + filename_Q_4 = input_file_dir + '4/Applied_Preconditioner_mm.txt' + filename_Q_5 = input_file_dir + '5/Applied_Preconditioner_mm.txt' + filename_Q_6 = input_file_dir + '6/Applied_Preconditioner_mm.txt' + + filename_b = input_file_dir + '1/b_mm_after_bc.txt' + + b = read_mm(filename_b, is_sparse=False) + + Q_1 = read_mm(filename_Q_1, is_sparse=False) + Q_2 = read_mm(filename_Q_2, is_sparse=False) + Q_3 = read_mm(filename_Q_3, is_sparse=False) + Q_4 = read_mm(filename_Q_4, is_sparse=False) + Q_5 = read_mm(filename_Q_5, is_sparse=False) + Q_6 = read_mm(filename_Q_6, is_sparse=False) + + b_1 = np.zeros((Q_1.shape[0],)) + b_2 = np.zeros((Q_2.shape[0],)) + b_3 = np.zeros((Q_3.shape[0],)) + b_4 = np.zeros((Q_4.shape[0],)) + b_5 = np.zeros((Q_5.shape[0],)) + b_6 = np.zeros((Q_6.shape[0],)) + + b_1[0:len(b)] = b + b_2[0:len(b)] = b + b_3[0:len(b)] = b + b_4[0:len(b)] = b + b_5[0:len(b)] = b + b_6[0:len(b)] = b + + x_1 = np.zeros((len(b_1),)) + x_2 = np.zeros((len(b_2),)) + x_3 = np.zeros((len(b_3),)) + x_4 = np.zeros((len(b_4),)) + x_5 = np.zeros((len(b_5),)) + x_6 = np.zeros((len(b_6),)) + + A_1 = read_mm(filename_A_1, is_sparse=False) + A_2 = read_mm(filename_A_2, is_sparse=False) + A_3 = read_mm(filename_A_3, is_sparse=False) + A_4 = read_mm(filename_A_4, is_sparse=False) + A_5 = read_mm(filename_A_5, is_sparse=False) + A_6 = read_mm(filename_A_6, is_sparse=False) + + r_1 = A_1.dot(x_1) - b_1 + r_2 = A_2.dot(x_2) - b_2 + r_3 = A_3.dot(x_3) - b_3 + r_4 = A_4.dot(x_4) - b_4 + r_5 = A_5.dot(x_5) - b_5 + r_6 = A_6.dot(x_6) - b_6 + + AQ_1 = read_mm(filename_AQ_1, is_sparse=False) + AQ_2 = read_mm(filename_AQ_2, is_sparse=False) + AQ_3 = read_mm(filename_AQ_3, is_sparse=False) + AQ_4 = read_mm(filename_AQ_4, is_sparse=False) + AQ_5 = read_mm(filename_AQ_5, is_sparse=False) + AQ_6 = read_mm(filename_AQ_6, is_sparse=False) + + plt.figure() + plt.plot(Q_2.dot(r_2)) + plt.plot(Q_5.dot(r_5)) + plt.figure() + tmp = Q_5.dot(r_5) + tmp[0:len(r_2)] = tmp[0:len(r_2)] - Q_2.dot(r_2) + plt.plot(tmp) + # plt.plot(Q_2.dot(r_2)) + + # plt.plot(Q_4.dot(r_4)) + # plt.figure() + # plt.spy(A_1) + # plt.figure() + # plt.spy(A_3) + plt.figure() + plt.spy(Q_2, precision=1e-8) + plt.figure() + plt.spy(Q_5, precision=1e-8) + plt.figure() + tmp = Q_5 + tmp[0:252, 0:252] = tmp[0:252, 0:252] - Q_2 + plt.spy(tmp, precision=1e-8) + + plt.figure() + tmp = A_5 + tmp[0:252, 0:252] = tmp[0:252, 0:252] - A_2 + plt.spy(tmp, precision=1e-8) + + tmp = np.abs(A_1.flatten()) + print(np.min(tmp[tmp != 0.])) + tmp = np.abs(A_3.flatten()) + print(np.min(tmp[tmp != 0.])) + + plt.figure() + tmp = AQ_5 + tmp[0:252, 0:252] = tmp[0:252, 0:252] - AQ_2 + plt.spy(tmp, precision=1e-8) + plt.show() + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/__init__.py b/katoptron/CMAME/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0129f3671930ba00414020c8f5609e6f07b7162c --- /dev/null +++ b/katoptron/CMAME/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8; -*- diff --git a/katoptron/CMAME/mesh/plate.geo b/katoptron/CMAME/mesh/plate.geo new file mode 100644 index 0000000000000000000000000000000000000000..d157a23f3f167a14eb15578a16486d9d0c747ca9 --- /dev/null +++ b/katoptron/CMAME/mesh/plate.geo @@ -0,0 +1,86 @@ +SetFactory("OpenCASCADE"); +If(GMSH_MAJOR_VERSION<=3 && GMSH_MINOR_VERSION<=0 && GMSH_PATCH_VERSION<=6) + Printf("gmsh %g.%g.%g is not supported by this .geo",GMSH_MAJOR_VERSION,GMSH_MINOR_VERSION,GMSH_PATCH_VERSION); +Else + LX = 10; + LY = 10; + LZ = 1; + + CX = LX/2; + CY = LY/2; + + R = 2; + dR = 0; + + nT = 40; + nZ = 3; + ndR = 20; + + PI = Acos (-1.); + + lc = 1; + + Point(201) = { CX, CY, 0., lc}; + + Point(202) = { CX+(R+dR)*Cos(1*PI/4), CY+(R+dR)*Sin(1*PI/4), 0., lc}; + Point(203) = { CX+(R+dR)*Cos(3*PI/4), CY+(R+dR)*Sin(3*PI/4), 0., lc}; + Point(204) = { CX+(R+dR)*Cos(5*PI/4), CY+(R+dR)*Sin(5*PI/4), 0., lc}; + Point(205) = { CX+(R+dR)*Cos(7*PI/4), CY+(R+dR)*Sin(7*PI/4), 0., lc}; + + Point(206) = { LX, LY, 0., lc}; + Point(207) = { 0., LY, 0., lc}; + Point(208) = { 0., 0., 0., lc}; + Point(209) = { LX, 0., 0., lc}; + + Circle(2101) = {202, 201, 203}; + Circle(2102) = {203, 201, 204}; + Circle(2103) = {204, 201, 205}; + Circle(2104) = {205, 201, 202}; + + Line(2105) = {206, 207}; + Line(2106) = {207, 208}; + Line(2107) = {208, 209}; + Line(2108) = {209, 206}; + + Line(2201) = {202, 206}; + Line(2202) = {203, 207}; + Line(2203) = {204, 208}; + Line(2204) = {205, 209}; + + Transfinite Line {2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108} = nT Using Progression 1; + Transfinite Line {2201, 2202, 2203, 2204} = ndR Using Progression 1; + + Line Loop(201) = {2101, 2202, -2105, -2201}; + Plane Surface(201) = {201}; + Transfinite Surface {201}; + Recombine Surface {201}; + + Line Loop(202) = {2202, 2106, -2203, -2102}; + Plane Surface(202) = {202}; + Transfinite Surface {202}; + Recombine Surface {202}; + + Line Loop(203) = {2103, 2204, -2107, -2203}; + Plane Surface(203) = {203}; + Transfinite Surface {203}; + Recombine Surface {203}; + + Line Loop(204) = {2104, 2201, -2108, -2204}; + Plane Surface(204) = {204}; + Transfinite Surface {204}; + Recombine Surface {204}; + + Extrude {0, 0, LZ} + { + Surface{201,202,203,204}; Layers{nZ}; Recombine; + } + + Physical Volume("body") = {1,2,3,4}; + //+ + Physical Surface("outer part boundary") = {205,212,214,218}; + Physical Surface("load 1") = {207}; + Physical Surface("load 2") = {216}; + Physical Point("clamped xyz") = {214}; + Physical Point("clamped xy") = {208}; + Physical Point("clamped y") = {217}; +EndIf diff --git a/katoptron/CMAME/mesh/plate_1.geo b/katoptron/CMAME/mesh/plate_1.geo new file mode 100644 index 0000000000000000000000000000000000000000..719e836d804c00f8dc09fca51fa2fa006fe51fbe --- /dev/null +++ b/katoptron/CMAME/mesh/plate_1.geo @@ -0,0 +1,81 @@ +SetFactory("OpenCASCADE"); +If(GMSH_MAJOR_VERSION<=3 && GMSH_MINOR_VERSION<=0 && GMSH_PATCH_VERSION<6) + Printf("gmsh %g.%g.%g is not supported by this .geo",GMSH_MAJOR_VERSION,GMSH_MINOR_VERSION,GMSH_PATCH_VERSION); +Else + LX = 10; + LY = 10; + LZ = 1; + + CX = LX/2; + CY = LY/2; + + R = 2; + dR = 1; + + nT = 30; + nZ = 5; + ndR = 10; + + PI = Acos (-1.); + + lc = 1; + + Point(1) = { CX, CY, 0., lc}; + Point(2) = { CX+R*Cos(1*PI/4), CY+R*Sin(1*PI/4), 0., lc}; + Point(3) = { CX+R*Cos(3*PI/4), CY+R*Sin(3*PI/4), 0., lc}; + Point(4) = { CX+R*Cos(5*PI/4), CY+R*Sin(5*PI/4), 0., lc}; + Point(5) = { CX+R*Cos(7*PI/4), CY+R*Sin(7*PI/4), 0., lc}; + + Point(6) = { CX+(R+dR)*Cos(1*PI/4), CY+(R+dR)*Sin(1*PI/4), 0., lc}; + Point(7) = { CX+(R+dR)*Cos(3*PI/4), CY+(R+dR)*Sin(3*PI/4), 0., lc}; + Point(8) = { CX+(R+dR)*Cos(5*PI/4), CY+(R+dR)*Sin(5*PI/4), 0., lc}; + Point(9) = { CX+(R+dR)*Cos(7*PI/4), CY+(R+dR)*Sin(7*PI/4), 0., lc}; + + Circle(101) = {2, 1, 3}; + Circle(102) = {3, 1, 4}; + Circle(103) = {4, 1, 5}; + Circle(104) = {5, 1, 2}; + + Circle(105) = {6, 1, 7}; + Circle(106) = {7, 1, 8}; + Circle(107) = {8, 1, 9}; + Circle(108) = {9, 1, 6}; + + Line(201) = {2, 6}; + Line(202) = {3, 7}; + Line(203) = {4, 8}; + Line(204) = {5, 9}; + + Transfinite Line {101, 102, 103, 104, 105, 106, 107, 108} = nT Using Progression 1; + Transfinite Line {201, 202, 203, 204} = ndR Using Progression 1; + + Line Loop(1) = {101, 202, -105, -201}; + Plane Surface(1) = {1}; + Transfinite Surface {1}; + Recombine Surface {1}; + + Line Loop(2) = {202, 106, -203, -102}; + Plane Surface(2) = {2}; + Transfinite Surface {2}; + Recombine Surface {2}; + + Line Loop(3) = {103, 204, -107, -203}; + Plane Surface(3) = {3}; + Transfinite Surface {3}; + Recombine Surface {3}; + + Line Loop(4) = {104, 201, -108, -204}; + Plane Surface(4) = {4}; + Transfinite Surface {4}; + Recombine Surface {4}; + + Extrude {0, 0, LZ} + { + Surface{1,2,3,4}; Layers{nZ}; Recombine; + } + Physical Volume("body") = {1,2,3,4}; + //+ + Physical Surface("inner part boundary") = {7,10,16,19}; + //+ + Physical Surface("inner boundary") = {12, 5, 18, 14}; +EndIf diff --git a/katoptron/CMAME/mesh/plate_2.geo b/katoptron/CMAME/mesh/plate_2.geo new file mode 100644 index 0000000000000000000000000000000000000000..9b35b6d8eaf4b8d07904146748d07d427aaa6763 --- /dev/null +++ b/katoptron/CMAME/mesh/plate_2.geo @@ -0,0 +1,86 @@ +SetFactory("OpenCASCADE"); +If(GMSH_MAJOR_VERSION<=3 && GMSH_MINOR_VERSION<=0 && GMSH_PATCH_VERSION<6) + Printf("gmsh %g.%g.%g is not supported by this .geo",GMSH_MAJOR_VERSION,GMSH_MINOR_VERSION,GMSH_PATCH_VERSION); +Else + LX = 10; + LY = 10; + LZ = 1; + + CX = LX/2; + CY = LY/2; + + R = 2; + dR = 1; + + nT = 20; + nZ = 3; + ndR = 10; + + PI = Acos (-1.); + + lc = 1; + + Point(201) = { CX, CY, 0., lc}; + + Point(202) = { CX+(R+dR)*Cos(1*PI/4), CY+(R+dR)*Sin(1*PI/4), 0., lc}; + Point(203) = { CX+(R+dR)*Cos(3*PI/4), CY+(R+dR)*Sin(3*PI/4), 0., lc}; + Point(204) = { CX+(R+dR)*Cos(5*PI/4), CY+(R+dR)*Sin(5*PI/4), 0., lc}; + Point(205) = { CX+(R+dR)*Cos(7*PI/4), CY+(R+dR)*Sin(7*PI/4), 0., lc}; + + Point(206) = { LX, LY, 0., lc}; + Point(207) = { 0., LY, 0., lc}; + Point(208) = { 0., 0., 0., lc}; + Point(209) = { LX, 0., 0., lc}; + + Circle(2101) = {202, 201, 203}; + Circle(2102) = {203, 201, 204}; + Circle(2103) = {204, 201, 205}; + Circle(2104) = {205, 201, 202}; + + Line(2105) = {206, 207}; + Line(2106) = {207, 208}; + Line(2107) = {208, 209}; + Line(2108) = {209, 206}; + + Line(2201) = {202, 206}; + Line(2202) = {203, 207}; + Line(2203) = {204, 208}; + Line(2204) = {205, 209}; + + Transfinite Line {2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108} = nT Using Progression 1; + Transfinite Line {2201, 2202, 2203, 2204} = ndR Using Progression 1; + + Line Loop(201) = {2101, 2202, -2105, -2201}; + Plane Surface(201) = {201}; + Transfinite Surface {201}; + Recombine Surface {201}; + + Line Loop(202) = {2202, 2106, -2203, -2102}; + Plane Surface(202) = {202}; + Transfinite Surface {202}; + Recombine Surface {202}; + + Line Loop(203) = {2103, 2204, -2107, -2203}; + Plane Surface(203) = {203}; + Transfinite Surface {203}; + Recombine Surface {203}; + + Line Loop(204) = {2104, 2201, -2108, -2204}; + Plane Surface(204) = {204}; + Transfinite Surface {204}; + Recombine Surface {204}; + + Extrude {0, 0, LZ} + { + Surface{201,202,203,204}; Layers{nZ}; Recombine; + } + + Physical Volume("body") = {1,2,3,4}; + //+ + Physical Surface("outer part boundary") = {205,212,214,218}; + Physical Surface("load 1") = {207}; + Physical Surface("load 2") = {216}; + Physical Point("clamped xyz") = {214}; + Physical Point("clamped xy") = {208}; + Physical Point("clamped y") = {217}; +EndIf diff --git a/katoptron/CMAME/mesh/plate_2_extended.geo b/katoptron/CMAME/mesh/plate_2_extended.geo new file mode 100644 index 0000000000000000000000000000000000000000..130383a3e1f03c82b7fe2e9ea45868f7ada1ff15 --- /dev/null +++ b/katoptron/CMAME/mesh/plate_2_extended.geo @@ -0,0 +1,174 @@ +SetFactory("OpenCASCADE"); +If(GMSH_MAJOR_VERSION<=3 && GMSH_MINOR_VERSION<=0 && GMSH_PATCH_VERSION<6) + Printf("gmsh %g.%g.%g is not supported by this .geo",GMSH_MAJOR_VERSION,GMSH_MINOR_VERSION,GMSH_PATCH_VERSION); +Else + LX = 10; + LY = 10; + LZ = 1; + + NX = 4; + NY = 4; + + CX = LX/2; + CY = LY/2; + + R = 2; + dR = 1; + + nT = 20; + nZ = 3; + ndR = 10; + + PI = Acos (-1.); + + lc = 1; + + Point(201) = { CX, CY, 0., lc}; + + Point(202) = { CX+(R+dR)*Cos(1*PI/4), CY+(R+dR)*Sin(1*PI/4), 0., lc}; + Point(203) = { CX+(R+dR)*Cos(3*PI/4), CY+(R+dR)*Sin(3*PI/4), 0., lc}; + Point(204) = { CX+(R+dR)*Cos(5*PI/4), CY+(R+dR)*Sin(5*PI/4), 0., lc}; + Point(205) = { CX+(R+dR)*Cos(7*PI/4), CY+(R+dR)*Sin(7*PI/4), 0., lc}; + + Point(206) = { LX, LY, 0., lc}; + Point(207) = { 0., LY, 0., lc}; + Point(208) = { 0., 0., 0., lc}; + Point(209) = { LX, 0., 0., lc}; + + Circle(2101) = {202, 201, 203}; + Circle(2102) = {203, 201, 204}; + Circle(2103) = {204, 201, 205}; + Circle(2104) = {205, 201, 202}; + + Line(2105) = {206, 207}; + Line(2106) = {207, 208}; + Line(2107) = {208, 209}; + Line(2108) = {209, 206}; + + Line(2201) = {202, 206}; + Line(2202) = {203, 207}; + Line(2203) = {204, 208}; + Line(2204) = {205, 209}; + + Point(301) = { -NX*LX, NY*LY+LY, 0., lc}; + Point(302) = { 0, NY*LY+LY, 0., lc}; + Point(303) = { -NX*LX, LY, 0., lc}; + + Line(311) = {301, 302}; + Line(312) = {302, 207}; + Line(313) = {207, 303}; + Line(314) = {303, 301}; + + Point(501) = { LX, NY*LY+LY, 0., lc}; + Point(502) = { LX+NX*LX, NY*LY+LY, 0., lc}; + Point(503) = { LX+NX*LX, LY, 0., lc}; + + Line(511) = {501, 502}; + Line(512) = {502, 503}; + Line(513) = {503, 206}; + Line(514) = {206, 501}; + + Point(801) = { -NX*LX, 0, 0., lc}; + Point(802) = { 0, -NY*LY, 0., lc}; + Point(803) = { -NX*LX, -NY*LY, 0., lc}; + + Line(811) = {801, 208}; + Line(812) = {208, 802}; + Line(813) = {802, 803}; + Line(814) = {803, 801}; + + Point(1001) = { LX+NX*LX, 0, 0., lc}; + Point(1002) = { LX+NX*LX, -NY*LY, 0., lc}; + Point(1003) = { LX, -NY*LY, 0., lc}; + + Line(1011) = {209, 1001}; + Line(1012) = {1001, 1002}; + Line(1013) = {1002, 1003}; + Line(1014) = {1003, 209}; + + Line(411) = {302, 501}; + Line(611) = {801, 303}; + Line(711) = {503, 1001}; + Line(911) = {1003, 802}; + + Transfinite Line {2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 411, 611, 711, 911} = nT Using Progression 1; + Transfinite Line {2201, 2202, 2203, 2204} = ndR Using Progression 1; + Transfinite Line {311,511,313,513,811,1011,813,1013} = NX*nT Using Progression 1; + Transfinite Line {314,814,312,812,514,1014,512,1012} = NY*nT Using Progression 1; + + Line Loop(201) = {2101, 2202, -2105, -2201}; + Plane Surface(201) = {201}; + Transfinite Surface {201}; + Recombine Surface {201}; + + Line Loop(202) = {2202, 2106, -2203, -2102}; + Plane Surface(202) = {202}; + Transfinite Surface {202}; + Recombine Surface {202}; + + Line Loop(203) = {2103, 2204, -2107, -2203}; + Plane Surface(203) = {203}; + Transfinite Surface {203}; + Recombine Surface {203}; + + Line Loop(204) = {2104, 2201, -2108, -2204}; + Plane Surface(204) = {204}; + Transfinite Surface {204}; + Recombine Surface {204}; + + Line Loop(205) = {311, 312, 313, 314}; + Plane Surface(205) = {205}; + Transfinite Surface {205}; + Recombine Surface {205}; + + Line Loop(206) = {511, 512, 513, 514}; + Plane Surface(206) = {206}; + Transfinite Surface {206}; + Recombine Surface {206}; + + Line Loop(207) = {811, 812, 813, 814}; + Plane Surface(207) = {207}; + Transfinite Surface {207}; + Recombine Surface {207}; + + Line Loop(208) = {1011, 1012, 1013, 1014}; + Plane Surface(208) = {208}; + Transfinite Surface {208}; + Recombine Surface {208}; + + Line Loop(209) = {411, -514, 2105, -312}; + Plane Surface(209) = {209}; + Transfinite Surface {209}; + Recombine Surface {209}; + + Line Loop(210) = {-313, 2106, -811, 611}; + Plane Surface(210) = {210}; + Transfinite Surface {210}; + Recombine Surface {210}; + + Line Loop(1211) = {-513, 711, -1011, 2108}; + Plane Surface(1211) = {1211}; + Transfinite Surface {1211}; + Recombine Surface {1211}; + + Line Loop(2212) = {2107, -1014, 911, -812}; + Plane Surface(2212) = {2212}; + Transfinite Surface {2212}; + Recombine Surface {2212}; + + allSurfaces[] = Surface "*"; + Extrude {0, 0, LZ} + { + Surface{allSurfaces[]}; Layers{nZ}; Recombine; + } + + Physical Volume("body") = {1,2,3,4,5,6,7,8,9,10,11,12}; + //+ + Physical Surface("outer part boundary") = {2226,2213,2220,2222}; + Physical Surface("load 1") = {2229,2234,2249}; + Physical Surface("load 2") = {2241,2246,2255}; + Physical Point("clamped xyz") = {1020}; + Physical Point("clamped xy") = {803}; + Physical Point("clamped y") = {1022}; + +EndIf diff --git a/katoptron/CMAME/model.py b/katoptron/CMAME/model.py new file mode 100644 index 0000000000000000000000000000000000000000..e6d85a72c1e4b8c16322c7b2ef9261058bd95c4f --- /dev/null +++ b/katoptron/CMAME/model.py @@ -0,0 +1,369 @@ +#!/usr/bin/env python3 + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + +defaut_params = { + 'Is exp': + True, + 'Is random': + True, + 'Correlation length X': + 20., + 'Correlation length Y': + 20., + 'Correlation length Z': + 0., + 'Number of KL Terms X': + 5, + 'Number of KL Terms Y': + 5, + 'Number of KL Terms Z': + 3, + 'Dispersion level': + 0.1, + 'gamma': + 4368992., + 'MueLu xml from current_dir': + True, + 'MueLu xml use template': + True, + 'MueLu xml file name': + '/SIMPLE_gs.xml', + 'MueLu xml template file name': + '/../preconditioners/SIMPLE_gs.xml.in', + 'MueLu xml params name': [ + '$BLOCK_00_STRIDING_INFO', '$BLOCK_11_STRIDING_INFO', + '$BLOCK_00_GS_sweeps', '$BLOCK_11_GS_sweeps', '$BLOCK_00_GS_damping', + '$BLOCK_11_GS_damping', '$SCHUR_omega', '$SimpleSmoother_damping' + ], + 'MueLu xml params': ['3', '3', '10', '10', '1.6', '1.6', '0.5', '1.'], + 'Write matrix and vectors': + False, + 'Write txt files': + False, + 'inner clamped': + False +} + + +def get_parameters(case_id, first_sample_id): + """ + This function returns the python dictionary that includes + the parameters for a given test case + """ + p = defaut_params + + if case_id == 0: + p['Is random'] = False + elif case_id == 1: + nuw = 128 + p['Correlation length'] = 20. + p['Dispersion level'] = 0.1 + elif case_id == 2: + nuw = 128 + p['Correlation length'] = 20. + p['Dispersion level'] = 0.3 + elif case_id == 3: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.1 + elif case_id == 4: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.3 + elif case_id == 5: + nuw = 128 + p['Correlation length'] = 2. + p['Dispersion level'] = 0.1 + elif case_id == 6: + nuw = 128 + p['Correlation length'] = 2. + p['Dispersion level'] = 0.3 + elif case_id == 7: + nuw = 128 + p['Correlation length'] = 20. + p['Dispersion level'] = 0.01 + elif case_id == 8: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.01 + elif case_id == 9: + nuw = 128 + p['Correlation length'] = 2. + p['Dispersion level'] = 0.01 + + if p['Is random'] == True: + p['Wavenumber cutoff'] = 8. + p['Wavenumber discretization points'] = nuw + p['Number Z of previously drawn samples'] = first_sample_id * nuw**2 + p['Number Phi of previously drawn samples'] = first_sample_id * nuw**2 + + p['MueLu xml file name'] = '/SIMPLE_MG.xml' + p['MueLu xml template file name'] = '/../preconditioners/SIMPLE_gs_direct_lvl.xml.in' + p['MueLu xml params name'] = [ + '$BLOCK_00_STRIDING_INFO', '$BLOCK_11_STRIDING_INFO', + '$BLOCK_00_GS_sweeps', '$BLOCK_00_GS_damping', '$SCHUR_omega', + '$SimpleSmoother_damping', "$N_LVLS", "$N_SIZES", "$EXPORT_DATA", + "$SimpleSmoother_sweeps" + ] + p['MueLu xml params'] = [ + '3', '3', '3', '0.8', '0.8', '1', '2', '18', "true", '1' + ] + + p['Is exp'] = False + p['gamma'] = 0. + p['Write vtk files'] = False + return p + + +def Compute_QoIs(filename): + import tboxVtk.reader as vtkR + import tboxVtk.lineExtractor as vtkC + + QoI = np.zeros((4, )) + reader = vtkR.Reader() + reader.open(filename) + cutter = vtkC.LineExtractor(reader.reader.GetOutputPort()) + c_output = cutter.cut(1, [ + 5., + 5., + 0.5, + ], [ + 10., + 5., + 0.5, + ], + tag_name='volume_id') + pts, tri, vals = cutter.extract(c_output, ['von Mises'], atPoint=False) + QoI[0] = vals['von Mises'][0] + + c_output = cutter.cut(1, [ + 5., + 5., + 0.5, + ], [ + 5., + 10., + 0.5, + ], + tag_name='volume_id') + pts, tri, vals = cutter.extract(c_output, ['von Mises'], atPoint=False) + QoI[1] = vals['von Mises'][0] + + c_output = cutter.cut(1, [ + 5., + 5., + 0.5, + ], [ + 0., + 5., + 0.5, + ], + tag_name='volume_id') + pts, tri, vals = cutter.extract(c_output, ['von Mises'], atPoint=False) + QoI[2] = vals['von Mises'][0] + + c_output = cutter.cut(1, [ + 5., + 5., + 0.5, + ], [ + 5., + 0., + 0.5, + ], + tag_name='volume_id') + pts, tri, vals = cutter.extract(c_output, ['von Mises'], atPoint=False) + QoI[3] = vals['von Mises'][0] + return QoI + + +class plate_model: + def __init__(self, + ensemble_size, + randomVariable, + msh, + comm, + file_dir, + current_dir, + p=defaut_params): + + if p['MueLu xml use template']: + old_strings = p['MueLu xml params name'] + new_strings = p['MueLu xml params'] + + muelu_xml_in = file_dir + p['MueLu xml template file name'] + u.replace_strings(muelu_xml_in, + current_dir + p['MueLu xml file name'], + old_strings, new_strings) + + pbl = m.Problem(msh, comm) + + # Units are in mm + E = 70000 * np.ones(ensemble_size) # 70e9 Pa = 70000 MPa + nu = 0.35 * np.ones(ensemble_size) + k = 0. + d = 0. + m.Medium(pbl, "body", "test", E, nu, k, d) + + m.Dirichlet(pbl, "clamped xyz", "Clamped", 1, 0., 1, 0., 1, 0., 0, 0., + ensemble_size) + m.Dirichlet(pbl, "clamped xy", "Clamped", 1, 0., 1, 0., 0, 0., 0, 0., + ensemble_size) + m.Dirichlet(pbl, "clamped y", "Clamped", 0, 0., 1, 0., 0, 0., 0, 0., + ensemble_size) + + if p['inner clamped']: + m.Dirichlet(pbl, "inner boundary", "Clamped", 1, 0., 1, 0., 1, 0., + 0, 0., ensemble_size) + + norm = tbox.Vector3d(0, 0, -1) + cont = m.Contact(pbl, 'inner part boundary', 'contact', norm) + cont.setMeshTying() + cont.setMaster(pbl, 'outer part boundary', norm) + f = 700 * np.ones(ensemble_size) # 700e6 Pa = 700 MPa + zero = np.zeros(ensemble_size) + one = np.ones(ensemble_size) + + m.Neumann(pbl, 'load 1', 'load', 0, zero, 1, f, 0, zero, 0, one, + ensemble_size) + m.Neumann(pbl, 'load 2', 'load', 0, zero, 1, -f, 0, zero, 0, one, + ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Ensemble Convergence Tolerance'] = 1e-7 + solverList['Maximum Iterations'] = 500 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + if p['MueLu xml from current_dir']: + solverList['MueLu xml file name'] = current_dir + \ + p['MueLu xml file name'] + else: + solverList['MueLu xml file name'] = file_dir + \ + p['MueLu xml file name'] + solverList['convert MueLu xml file'] = True + solverList['Print Teuchos timers'] = True + + solverList['gamma'] = p['gamma'] + solverList['Use preconditioner'] = True + + solverList['type'] = 'BlockGmres' + solverList['Maximum active set iteration'] = 1 + + solverList['Write matrix and vectors'] = p['Write matrix and vectors'] + solverList['Write txt files'] = p['Write txt files'] + solverList['Write vtk files'] = p['Write vtk files'] + + if p["Is exp"]: + num_random_variables = randomVariable.shape[1] + else: + num_random_variables = 0 + + for i in range(0, num_random_variables): + rand = randomVariable[:, i] + pbl.add(m.RandomVariable(rand)) + + randomParams = Teuchos.ParameterList() + + randomParams['Is random'] = p['Is random'] + if randomParams['Is random']: + randomParams['Is exp'] = p['Is exp'] + if p["Is exp"]: + randomParams['Begin X'] = 0. + randomParams['Begin Y'] = 0. + randomParams['Begin Z'] = 0. + randomParams['End X'] = 10. + randomParams['End Y'] = 10. + randomParams['End Z'] = 1. + randomParams['Number random variables'] = num_random_variables + randomParams['Correlation length X'] = p[ + 'Correlation length X'] + randomParams['Correlation length Y'] = p[ + 'Correlation length Y'] + randomParams['Correlation length Z'] = p[ + 'Correlation length Z'] + randomParams['Number of KL Terms X'] = p[ + 'Number of KL Terms X'] + randomParams['Number of KL Terms Y'] = p[ + 'Number of KL Terms Y'] + randomParams['Number of KL Terms Z'] = p[ + 'Number of KL Terms Z'] + randomParams['Maximum Nonlinear Solver Iterations'] = 5000 + randomParams['Bound Perturbation Size'] = 1E-10 + else: + randomParams['Correlation length'] = p['Correlation length'] + randomParams['Wavenumber cutoff'] = p['Wavenumber cutoff'] + randomParams['Wavenumber discretization points'] = p[ + 'Wavenumber discretization points'] + randomParams['Number Z of previously drawn samples'] = p[ + 'Number Z of previously drawn samples'] + randomParams['Number Phi of previously drawn samples'] = p[ + 'Number Phi of previously drawn samples'] + + randomParams['Mean'] = E[0] / (2. * (1. + nu[0])) + randomParams['Dispersion level'] = p['Dispersion level'] + + solverList['randomParams'] = randomParams + + self.pbl = pbl + self.solverList = solverList + self.ensemble_size = ensemble_size + + def run(self): + self.slv = m.IterativeSolver(self.pbl, self.solverList, 3, + self.ensemble_size) + self.slv.start() + f = open('timers.txt', 'w') + print(self.slv.getTimers(), file=f) + f.closed + + +def main(): + comm, rank, size = m.utilities.import_MPI() + + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.geo', 'plate_1_tmp', 'plate_2.geo', + 'plate_2_tmp', 'plate_fused', file_dir + '/mesh', + work_dir, comm, rank, size) + + np.random.seed(42) + N = 1 + num_random_variables = 20 + randomVariable = np.zeros((N, num_random_variables)) + + p = get_parameters(0, 0) + p['Write txt files'] = True + p['Write vtk files'] = True + + ensemble_size = 1 + + pm = plate_model(ensemble_size, randomVariable, msh, comm, file_dir, + work_dir, p) + + nThreads = u.Initialize_Kokkos() + pm.run() + u.Finalize_Kokkos() + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_slurm/blake_GS_omega.slurm.sh b/katoptron/CMAME/old_slurm/blake_GS_omega.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..1f044eaa36fdedc073a248d3fff1f5fa08a3a76a --- /dev/null +++ b/katoptron/CMAME/old_slurm/blake_GS_omega.slurm.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=omega_GS +#SBATCH --time=41:59:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/omega_GS.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +python run.py katoptron/CMAME/post_process/plate_mean_GS.py diff --git a/katoptron/CMAME/old_slurm/blake_MC_GS.slurm.sh b/katoptron/CMAME/old_slurm/blake_MC_GS.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..48a666834853d34b4bfb7480d8a14040752a6224 --- /dev/null +++ b/katoptron/CMAME/old_slurm/blake_MC_GS.slurm.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=MC_G +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/MC_GS.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_PLACE_THREADS=24c,2t +export KMP_AFFINITY=compact + +python run.py -k ${OMP_NUM_THREADS} katoptron/CMAME/tests/plate_MC_GS_all_cases.py diff --git a/katoptron/CMAME/old_slurm/blake_MC_GS_direct.slurm.sh b/katoptron/CMAME/old_slurm/blake_MC_GS_direct.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..f30104798978b5cc1733c6416b9fdc3e5801c134 --- /dev/null +++ b/katoptron/CMAME/old_slurm/blake_MC_GS_direct.slurm.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=GS_direct +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/MC_GS_direct.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=48 +export KMP_PLACE_THREADS=24c,2t +export KMP_AFFINITY=compact + +export MKL_NUM_THREADS=${OMP_NUM_THREADS} + +python run.py -k ${OMP_NUM_THREADS} katoptron/CMAME/tests/plate_MC_GS_direct_all_cases.py diff --git a/katoptron/CMAME/old_slurm/blake_MC_GS_fused.slurm.sh b/katoptron/CMAME/old_slurm/blake_MC_GS_fused.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..1014b6e9efd5a73833c7dd8505b528265f1b5954 --- /dev/null +++ b/katoptron/CMAME/old_slurm/blake_MC_GS_fused.slurm.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=MC_G +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/MC_GS.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_PLACE_THREADS=24c,2t +export KMP_AFFINITY=compact + +python run.py -k ${OMP_NUM_THREADS} katoptron/CMAME/fused_plate_MC_GS_all_cases.py diff --git a/katoptron/CMAME/old_slurm/blake_MC_GS_fused_prec.slurm.sh b/katoptron/CMAME/old_slurm/blake_MC_GS_fused_prec.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..c001d63b881ef57d3951cb8c451c7610b18b2457 --- /dev/null +++ b/katoptron/CMAME/old_slurm/blake_MC_GS_fused_prec.slurm.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=MC_G +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/MC_GS.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_PLACE_THREADS=24c,2t +export KMP_AFFINITY=compact + +python run.py -k ${OMP_NUM_THREADS} katoptron/CMAME/fused_plate_mean_prec_GS.py diff --git a/katoptron/CMAME/old_slurm/blake_MC_MG.slurm.sh b/katoptron/CMAME/old_slurm/blake_MC_MG.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..4fa094a91e6caf25ffca2d6ef0c498516921fd02 --- /dev/null +++ b/katoptron/CMAME/old_slurm/blake_MC_MG.slurm.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=MC_MG +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/MC_MG.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=48 +export KMP_PLACE_THREADS=24c,2t +export KMP_AFFINITY=compact + +export MKL_NUM_THREADS=${OMP_NUM_THREADS} + +python run.py -k ${OMP_NUM_THREADS} katoptron/CMAME/tests/plate_MC_MG_all_cases.py diff --git a/katoptron/CMAME/old_slurm/blake_MC_MG_2.slurm.sh b/katoptron/CMAME/old_slurm/blake_MC_MG_2.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..a20dca603fdf917fcc9b9d3f0e2ad7fd2ef6b71b --- /dev/null +++ b/katoptron/CMAME/old_slurm/blake_MC_MG_2.slurm.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=MC_MG +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/MC_MG.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=48 +export KMP_PLACE_THREADS=24c,2t +export KMP_AFFINITY=compact + +export MKL_NUM_THREADS=${OMP_NUM_THREADS} + +python run.py -k ${OMP_NUM_THREADS} katoptron/CMAME/tests/plate_MC_MG_all_cases_2.py diff --git a/katoptron/CMAME/old_slurm/blake_MC_direct.slurm.sh b/katoptron/CMAME/old_slurm/blake_MC_direct.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..dd624883b53a710ce025f36bc1768ce2b759c2a2 --- /dev/null +++ b/katoptron/CMAME/old_slurm/blake_MC_direct.slurm.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=plate_UQ +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/MC_direct.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_PLACE_THREADS=24c,2t +export KMP_AFFINITY=compact + +python run.py -k ${OMP_NUM_THREADS} katoptron/CMAME/tests/plate_MC_direct_case_1.py +python run.py -k ${OMP_NUM_THREADS} katoptron/CMAME/tests/plate_MC_direct_case_2.py +python run.py -k ${OMP_NUM_THREADS} katoptron/CMAME/tests/plate_MC_direct_case_3.py +python run.py -k ${OMP_NUM_THREADS} katoptron/CMAME/tests/plate_MC_direct_case_4.py diff --git a/katoptron/CMAME/old_slurm/blake_NO_EP.slurm.sh b/katoptron/CMAME/old_slurm/blake_NO_EP.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..844b9c3cbf8e6f77b40e994dac121d5bfe0e8a34 --- /dev/null +++ b/katoptron/CMAME/old_slurm/blake_NO_EP.slurm.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=plate_UQ +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/plate_UQ.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +python run.py -k 24 katoptron/CMAME/tests/plate_MC_NO_EP_case_1.py +python run.py -k 24 katoptron/CMAME/tests/plate_MC_NO_EP_case_2.py +python run.py -k 24 katoptron/CMAME/tests/plate_MC_NO_EP_case_3.py +python run.py -k 24 katoptron/CMAME/tests/plate_MC_NO_EP_case_4.py diff --git a/katoptron/CMAME/old_slurm/blake_convergence_direct.slurm.sh b/katoptron/CMAME/old_slurm/blake_convergence_direct.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..e9d6c2c28c5edaadc94d7e97cabb378a34c31ed1 --- /dev/null +++ b/katoptron/CMAME/old_slurm/blake_convergence_direct.slurm.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=conv_KLU +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/plate_convergence_direct.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +python run.py katoptron/CMAME/tests/plate_convergence_direct.py diff --git a/katoptron/CMAME/old_slurm/blake_correlation.slurm.sh b/katoptron/CMAME/old_slurm/blake_correlation.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..436291f1c8c2ee3d0a4203bb3ec0f6d399328f18 --- /dev/null +++ b/katoptron/CMAME/old_slurm/blake_correlation.slurm.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=plate_corr +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/plate_corr.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_PLACE_THREADS=24c,2t +export KMP_AFFINITY=compact + +python run.py -k ${OMP_NUM_THREADS} katoptron/CMAME/tests/plate_correlation.py diff --git a/katoptron/CMAME/old_slurm/blake_eigenvalues_direct.slurm.sh b/katoptron/CMAME/old_slurm/blake_eigenvalues_direct.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..5695e45bfa466311f4d5ab48affaec938ec35c5d --- /dev/null +++ b/katoptron/CMAME/old_slurm/blake_eigenvalues_direct.slurm.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=omegas_KLU +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/plate_deltas_omegas_direct.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +mpirun -np 8 python run.py katoptron/CMAME/tests/plate_deltas_omegas_direct.py diff --git a/katoptron/CMAME/old_slurm/blake_eigenvalues_gs.slurm.sh b/katoptron/CMAME/old_slurm/blake_eigenvalues_gs.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..fb90109d96a3f84f119f249e8a26f24f85255253 --- /dev/null +++ b/katoptron/CMAME/old_slurm/blake_eigenvalues_gs.slurm.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=omegas_GS +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 2 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/plate_deltas_omegas_GS.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +mpirun -np 16 python run.py katoptron/CMAME/tests/plate_deltas_omegas_GS.py diff --git a/katoptron/CMAME/old_slurm/blake_gamma.slurm.sh b/katoptron/CMAME/old_slurm/blake_gamma.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..5f70c54daf42dfaf5e1b7b8751bef10b7790319a --- /dev/null +++ b/katoptron/CMAME/old_slurm/blake_gamma.slurm.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=plate_gamma +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/plate_gamma.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_PLACE_THREADS=24c,2t +export KMP_AFFINITY=compact + +python run.py -k ${OMP_NUM_THREADS} katoptron/CMAME/tests/plate_mean_gamma.py diff --git a/katoptron/CMAME/old_slurm/blake_prec.slurm.sh b/katoptron/CMAME/old_slurm/blake_prec.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..79eba568e43f34a937460d13710795097a18adb1 --- /dev/null +++ b/katoptron/CMAME/old_slurm/blake_prec.slurm.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=plate_prec +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/plate_prec.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_PLACE_THREADS=24c,2t +export KMP_AFFINITY=compact + +python run.py -k ${OMP_NUM_THREADS} katoptron/CMAME/tests/plate_mean_prec.py diff --git a/katoptron/CMAME/old_slurm/blake_prec_GS_direct.slurm.sh b/katoptron/CMAME/old_slurm/blake_prec_GS_direct.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..10a5cadbf20a969ce310c256bd942453c80b7cc4 --- /dev/null +++ b/katoptron/CMAME/old_slurm/blake_prec_GS_direct.slurm.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=plate_prec +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/plate_prec.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_PLACE_THREADS=24c,2t +export KMP_AFFINITY=compact + +python run.py -k ${OMP_NUM_THREADS} katoptron/CMAME/tests/plate_mean_prec_GS_direct.py diff --git a/katoptron/CMAME/old_slurm/blake_prec_GS_direct_lvl.slurm.sh b/katoptron/CMAME/old_slurm/blake_prec_GS_direct_lvl.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..5644e3fad8b0adff01f208dbfb905ab0a8e010f2 --- /dev/null +++ b/katoptron/CMAME/old_slurm/blake_prec_GS_direct_lvl.slurm.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=plate_prec +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/plate_prec.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_PLACE_THREADS=24c,2t +export KMP_AFFINITY=compact + +python run.py -k ${OMP_NUM_THREADS} katoptron/CMAME/tests/plate_mean_prec_GS_direct_lvl.py diff --git a/katoptron/CMAME/old_slurm/bowman.slurm.sh b/katoptron/CMAME/old_slurm/bowman.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..27b82e587a646bb00665a842ea714d7c6eb1d71f --- /dev/null +++ b/katoptron/CMAME/old_slurm/bowman.slurm.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Submission script for Bowman +#SBATCH --job-name=plate_UQ +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p knl-delta +# +#SBATCH --comment=test +#SBATCH --output=workspace/plate_UQ.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=256 + +export KMP_HW_SUBSET=64c,4t +export KMP_AFFINITY=balanced + +python run.py -k ${OMP_NUM_THREADS} katoptron/CMAME/tests/plate_MC.py diff --git a/katoptron/CMAME/old_tests/2_cubes_patch_GS.py b/katoptron/CMAME/old_tests/2_cubes_patch_GS.py new file mode 100644 index 0000000000000000000000000000000000000000..c589f5103d43a67d8d3f6d98c12643d0448828fe --- /dev/null +++ b/katoptron/CMAME/old_tests/2_cubes_patch_GS.py @@ -0,0 +1,153 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +#import matplotlib.pyplot as plt + +from katoptron.eigenvalues import * +from katoptron.convergence import * + +import shlex +import subprocess +import os +import numpy as np + +from PyTrilinos import Teuchos + + +def evaluate_cubes(args, msh, comm, ensemble_size, _E, file_dir): + + pbl = m.Problem(msh, comm) + + #E = np.linspace(0.5,1.5,ensemble_size) + E = 10. * np.ones(ensemble_size) + nu = 0.4 * np.ones(ensemble_size) + k = 0.114 + d = 0. + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + m.Medium(pbl, "Body 2", "test", E, nu, k, d) + m.Dirichlet(pbl, "Clamped", "Clamped", 1, 0., + 1, 0., 1, 0., 0, 0., ensemble_size) + #m.Dirichlet(pbl, "Clamped xy", "Clamped",1,0.,1,0.,1,0.,0,0.,ensemble_size) + + norm = tbox.Vector3d(0, 0, -1) + cont = m.Contact(pbl, "Contact 2", "contact", norm) + cont.setMeshTying() + cont.setMaster(pbl, "Contact 1", norm) + + zero = np.zeros(ensemble_size) + p = -0.2 * np.ones(ensemble_size) + + m.Neumann(pbl, "Load", "Load 1", 0, zero, 0, + zero, 1, p, 0, zero, ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 1000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['gamma'] = 29.58164477018121 + + solverList["MueLu xml file name"] = file_dir + \ + '/../preconditioners/SIMPLE_gs.xml' + solverList["convert MueLu xml file"] = True + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + solverList['Write matrix and vectors'] = True + solverList['Write txt files'] = True + if ensemble_size == 1: + solverList['Create Preconditioned Matrix'] = True + + if ensemble_size > 1: + slv = m.IterativeSolver(pbl, args.k, solverList, + 3, True, ensemble_size) + else: + slv = m.IterativeSolver(pbl, args.k, solverList, + 3, ensemble_size) + + slv.start() + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + + from fwk.wutils import parseargs + args = parseargs() + + geo_name = '../tests/2_cubes_patch.geo' + mesh_name = '2_cubes_patch.msh' + partitioned_mesh_name = '2_cubes_patch.msh' + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + gmsh.MeshLoader(geo_name, __file__).execute() + + if rank == 0: + command_line = 'gmsh -3 ' + work_dir + '/' + mesh_name + ' -o ' + \ + work_dir + '/' + partitioned_mesh_name + ' -part ' + str(siz) + print(command_line) + tmp = shlex.split(command_line) + fileout = open('gmsh.log', 'w') + p = subprocess.Popen(tmp, stdin=subprocess.PIPE, stdout=fileout, + stderr=fileout, env=os.environ, shell=False, close_fds=True) + retcode = p.wait() + for i in range(1, siz): + comm.send(1, dest=i, tag=11) + else: + data = comm.recv(source=0, tag=11) + + if siz == 1: + msh = gmsh.MeshLoader(mesh_name, work_dir).execute() + else: + msh = gmsh.MeshLoader(mesh_name, work_dir).myrank_execute(rank) + + N = 32 + + E = np.linspace(5., 15.0, num=N) + + ensemble_sizes = [1, 8, 16, 32] + + for e in range(0, len(ensemble_sizes)): + directory = str(ensemble_sizes[e]) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + for i in range(0, (N // ensemble_sizes[e])): + directory = str(i) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + evaluate_cubes( + args, msh, comm, ensemble_sizes[e], E[i*ensemble_sizes[e]:(i+1)*ensemble_sizes[e]], file_dir) + os.chdir('..') + + os.chdir('..') + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/2_cubes_patch_GS_klu.py b/katoptron/CMAME/old_tests/2_cubes_patch_GS_klu.py new file mode 100644 index 0000000000000000000000000000000000000000..324f09890ef83114e4310f5b2d454ffb35bbe7c4 --- /dev/null +++ b/katoptron/CMAME/old_tests/2_cubes_patch_GS_klu.py @@ -0,0 +1,169 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +#import matplotlib.pyplot as plt + +from katoptron.eigenvalues import * +from katoptron.convergence import * + +import shlex +import subprocess +import os +import numpy as np + +from PyTrilinos import Teuchos + + +def evaluate_cubes(args, msh, comm, ensemble_size, _E, file_dir): + + pbl = m.Problem(msh, comm) + + #E = np.linspace(0.5,1.5,ensemble_size) + E = 10. * np.ones(ensemble_size) + nu = 0.4 * np.ones(ensemble_size) + k = 0.114 + d = 0. + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + m.Medium(pbl, "Body 2", "test", E, nu, k, d) + m.Dirichlet(pbl, "Clamped", "Clamped", 1, 0., + 1, 0., 1, 0., 0, 0., ensemble_size) + #m.Dirichlet(pbl, "Clamped xy", "Clamped",1,0.,1,0.,1,0.,0,0.,ensemble_size) + + norm = tbox.Vector3d(0, 0, -1) + cont = m.Contact(pbl, "Contact 2", "contact", norm) + cont.setMeshTying() + cont.setMaster(pbl, "Contact 1", norm) + + zero = np.zeros(ensemble_size) + p = -0.2 * np.ones(ensemble_size) + + m.Neumann(pbl, "Load", "Load 1", 0, zero, 0, + zero, 1, p, 0, zero, ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 1000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['gamma'] = 29.58164477018121 + + old_strings = ['$BLOCK_00_STRIDING_INFO', '$BLOCK_11_STRIDING_INFO', + '$BLOCK_00_GS_sweeps', '$BLOCK_00_GS_damping', + '$SCHUR_omega', '$SimpleSmoother_damping'] + new_strings = ['3', '3', '100', '1.75', '0.05', '1.'] + + muelu_xml_in = file_dir + p['MueLu xml template file name'] + u.replace_strings(muelu_xml_in, current_dir + + p['MueLu xml file name'], old_strings, new_strings) + + p['MueLu xml template file name'] = '/../preconditioners/SIMPLE_gs.xml.in' + p['MueLu xml params name'] = ['$BLOCK_00_STRIDING_INFO', '$BLOCK_11_STRIDING_INFO', + '$BLOCK_00_GS_sweeps', '$BLOCK_11_GS_sweeps', + '$BLOCK_00_GS_damping', '$BLOCK_11_GS_damping', + '$SCHUR_omega', '$SimpleSmoother_damping'] + p['MueLu xml params'] = ['3', '3', '100', '1.75', '0.05', '1.'] + + solverList["MueLu xml file name"] = file_dir + \ + '/../preconditioners/SIMPLE_gs.xml' + solverList["convert MueLu xml file"] = True + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + solverList['Write matrix and vectors'] = True + solverList['Write txt files'] = True + if ensemble_size == 1: + solverList['Create Preconditioned Matrix'] = True + + if ensemble_size > 1: + slv = m.IterativeSolver(pbl, args.k, solverList, + 3, True, ensemble_size) + else: + slv = m.IterativeSolver(pbl, args.k, solverList, + 3, ensemble_size) + + slv.start() + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + + from fwk.wutils import parseargs + args = parseargs() + + geo_name = '../tests/2_cubes_patch.geo' + mesh_name = '2_cubes_patch.msh' + partitioned_mesh_name = '2_cubes_patch.msh' + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + gmsh.MeshLoader(geo_name, __file__).execute() + + if rank == 0: + command_line = 'gmsh -3 ' + work_dir + '/' + mesh_name + ' -o ' + \ + work_dir + '/' + partitioned_mesh_name + ' -part ' + str(siz) + print(command_line) + tmp = shlex.split(command_line) + fileout = open('gmsh.log', 'w') + p = subprocess.Popen(tmp, stdin=subprocess.PIPE, stdout=fileout, + stderr=fileout, env=os.environ, shell=False, close_fds=True) + retcode = p.wait() + for i in range(1, siz): + comm.send(1, dest=i, tag=11) + else: + data = comm.recv(source=0, tag=11) + + if siz == 1: + msh = gmsh.MeshLoader(mesh_name, work_dir).execute() + else: + msh = gmsh.MeshLoader(mesh_name, work_dir).myrank_execute(rank) + + N = 32 + + E = np.linspace(5., 15.0, num=N) + + ensemble_sizes = [1, 8, 16, 32] + + for e in range(0, len(ensemble_sizes)): + directory = str(ensemble_sizes[e]) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + for i in range(0, (N // ensemble_sizes[e])): + directory = str(i) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + evaluate_cubes( + args, msh, comm, ensemble_sizes[e], E[i*ensemble_sizes[e]:(i+1)*ensemble_sizes[e]], file_dir) + os.chdir('..') + + os.chdir('..') + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/2_cubes_patch_direct.py b/katoptron/CMAME/old_tests/2_cubes_patch_direct.py new file mode 100644 index 0000000000000000000000000000000000000000..b3b8224215a58ed920217e28c801568471284615 --- /dev/null +++ b/katoptron/CMAME/old_tests/2_cubes_patch_direct.py @@ -0,0 +1,153 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +#import matplotlib.pyplot as plt + +from katoptron.eigenvalues import * +from katoptron.convergence import * + +import shlex +import subprocess +import os +import numpy as np + +from PyTrilinos import Teuchos + + +def evaluate_cubes(args, msh, comm, ensemble_size, _E, file_dir): + + pbl = m.Problem(msh, comm) + + #E = np.linspace(0.5,1.5,ensemble_size) + E = 10. * np.ones(ensemble_size) + nu = 0.4 * np.ones(ensemble_size) + k = 0.114 + d = 0. + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + m.Medium(pbl, "Body 2", "test", E, nu, k, d) + m.Dirichlet(pbl, "Clamped", "Clamped", 1, 0., + 1, 0., 1, 0., 0, 0., ensemble_size) + #m.Dirichlet(pbl, "Clamped xy", "Clamped",1,0.,1,0.,1,0.,0,0.,ensemble_size) + + norm = tbox.Vector3d(0, 0, -1) + cont = m.Contact(pbl, "Contact 2", "contact", norm) + cont.setMeshTying() + cont.setMaster(pbl, "Contact 1", norm) + + zero = np.zeros(ensemble_size) + p = -0.2 * np.ones(ensemble_size) + + m.Neumann(pbl, "Load", "Load 1", 0, zero, 0, + zero, 1, p, 0, zero, ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 1000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['gamma'] = 29.58164477018121 + + solverList["MueLu xml file name"] = file_dir + \ + '/../preconditioners/SIMPLE_direct.xml' + solverList["convert MueLu xml file"] = True + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + solverList['Write matrix and vectors'] = True + solverList['Write txt files'] = True + if ensemble_size == 1: + solverList['Create Preconditioned Matrix'] = True + + if ensemble_size > 1: + slv = m.IterativeSolver(pbl, args.k, solverList, + 3, True, ensemble_size) + else: + slv = m.IterativeSolver(pbl, args.k, solverList, + 3, ensemble_size) + + slv.start() + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + + from fwk.wutils import parseargs + args = parseargs() + + geo_name = '../tests/2_cubes_patch.geo' + mesh_name = '2_cubes_patch.msh' + partitioned_mesh_name = '2_cubes_patch.msh' + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + gmsh.MeshLoader(geo_name, __file__).execute() + + if rank == 0: + command_line = 'gmsh -3 ' + work_dir + '/' + mesh_name + ' -o ' + \ + work_dir + '/' + partitioned_mesh_name + ' -part ' + str(siz) + print(command_line) + tmp = shlex.split(command_line) + fileout = open('gmsh.log', 'w') + p = subprocess.Popen(tmp, stdin=subprocess.PIPE, stdout=fileout, + stderr=fileout, env=os.environ, shell=False, close_fds=True) + retcode = p.wait() + for i in range(1, siz): + comm.send(1, dest=i, tag=11) + else: + data = comm.recv(source=0, tag=11) + + if siz == 1: + msh = gmsh.MeshLoader(mesh_name, work_dir).execute() + else: + msh = gmsh.MeshLoader(mesh_name, work_dir).myrank_execute(rank) + + N = 32 + + E = np.linspace(5., 15.0, num=N) + + ensemble_sizes = [1, 8, 16, 32] + + for e in range(0, len(ensemble_sizes)): + directory = str(ensemble_sizes[e]) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + for i in range(0, (N // ensemble_sizes[e])): + directory = str(i) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + evaluate_cubes( + args, msh, comm, ensemble_sizes[e], E[i*ensemble_sizes[e]:(i+1)*ensemble_sizes[e]], file_dir) + os.chdir('..') + + os.chdir('..') + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/clean_A_B.py b/katoptron/CMAME/old_tests/clean_A_B.py new file mode 100644 index 0000000000000000000000000000000000000000..98b2e7b30a76ecd1daee1d9ee212751a0c25aaaf --- /dev/null +++ b/katoptron/CMAME/old_tests/clean_A_B.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +from katoptron.eigenvalues import * +import os +import fwk +from scipy import sparse + + +def write_mm(filename, matrix, drow=0, dcol=0): + f = open(filename, 'w') + print('%%MatrixMarket matrix', file=f) + print(str(int(matrix.shape[0])) + ' ' + str(int(matrix.shape[1])) + ' ' + str(int(matrix.count_nonzero())), file=f) + + row, col = matrix.nonzero() + for i in range(0, matrix.count_nonzero()): + print(str(int(row[i]+1+drow)) + ' ' + str(int(col[i]+1+dcol)) + ' ' + '{0:1.17e}'.format(matrix[row[i], col[i]]), file=f) + + f.closed + + +def write_vector_mm(filename, vec, n): + f = open(filename, 'w') + print('%%MatrixMarket matrix', file=f) + print(str(int(n)), file=f) + for i in range(0, n): + if i < vec.size: + print('{0:1.17e}'.format(vec[i]), file=f) + else: + print('{0:1.17e}'.format(0.), file=f) + + f.closed + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + input_file_dir = '/Users/kimliegeois/Desktop/workspace 5/katoptron_tests_beam' + + filename_Q = input_file_dir + '/ApCTC_mm.txt' + filename_GT = input_file_dir + '/B_mm.txt' + filename_f = input_file_dir + '/b_mm_after_bc.txt' + + Q = read_mm(filename_Q) + Q = get_symmetrical_part(Q) + GT = read_mm(filename_GT) + G = GT.transpose() + f = read_mm(filename_f, is_sparse=False) + + print(Q.shape) + print(Q.count_nonzero()) + + write_vector_mm('f_mm.txt', f, G.shape[0]+G.shape[1]) + + write_mm('Q_mm.txt', Q) + write_mm('G_mm.txt', G, dcol=Q.shape[0]) + write_mm('GT_mm.txt', GT, drow=Q.shape[0]) + + Afull = read_mm( + "/Users/kimliegeois/Desktop/workspace 7/katoptron_tests_beam/Applied_Matrix_mm.txt", is_sparse=False) + A = sparse.csr_matrix(Afull) + + print(A.count_nonzero()) + + write_mm('A_full_mm.txt', A) + write_mm('C_mm.txt', A[Q.shape[0]:A.shape[0], Q.shape[1]:A.shape[1]]) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/compare_GB.py b/katoptron/CMAME/old_tests/compare_GB.py new file mode 100644 index 0000000000000000000000000000000000000000..640c83fa7fa2dda5d12577393249009d8d2f6441 --- /dev/null +++ b/katoptron/CMAME/old_tests/compare_GB.py @@ -0,0 +1,181 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +from katoptron.eigenvalues import * +import os +import fwk +from scipy import sparse +import matplotlib.pyplot as plt + +def test1(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + input_file_dir = '/Users/kimliegeois/Desktop/gaston' + + filename_GT = input_file_dir + '/B_mm.txt' + + GT_gaston = read_mm(filename_GT) + + X = np.loadtxt(filename_GT, skiprows=2) + + row_gaston = X[:, 0].astype(int)-1 + col_gaston = X[:, 1].astype(int)-1 + data_gaston = X[:, 2] + + input_file_dir = '/Users/kimliegeois/Desktop/blake' + + filename_GT = input_file_dir + '/B_mm.txt' + + GT_blake = read_mm(filename_GT) + + X = np.loadtxt(filename_GT, skiprows=2) + + row_blake = X[:, 0].astype(int)-1 + col_blake = X[:, 1].astype(int)-1 + data_blake = X[:, 2] + + nNode = 341 + + plot_indices = np.arange(80,120,1,dtype=int) + + print(col_gaston[plot_indices]) + print(col_blake[plot_indices]) + + indT = np.argwhere(col_gaston <= nNode) + indMech = np.argwhere(col_gaston > nNode) + + + col_gaston_2 = np.copy(col_gaston) + + col_gaston_2[indT] = (col_gaston[indT]+1)*4-1 + + indexNodes = np.floor((col_gaston_2[indMech] - nNode)/3.) + rest = (col_gaston_2[indMech] - nNode) - 3*indexNodes + + plt.figure() + plt.plot(indexNodes[plot_indices],'*') + + plt.figure() + plt.plot(rest[plot_indices],'*') + + col_gaston_2[indMech] = indexNodes*4+rest + + #print(col_gaston[0:30]) + print(col_gaston_2[plot_indices]) + print(col_blake[plot_indices]) + + print(np.amax(np.abs(data_gaston-data_blake))) + print(np.amax(np.abs(col_gaston_2-col_blake))) + print(np.amax(np.abs(row_gaston-row_blake))) + + plt.figure() + plt.plot(col_gaston_2[plot_indices]-col_blake[plot_indices],'*') + #plt.show() + +def test2(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + input_file_dir = '/Users/kimliegeois/Desktop/gaston' + + filename_GT = input_file_dir + '/B_T_mm.txt' + + GT_gaston = read_mm(filename_GT) + + X = np.loadtxt(filename_GT, skiprows=2) + + row_gaston = X[:, 0].astype(int)-1 + col_gaston = X[:, 1].astype(int)-1 + data_gaston = X[:, 2] + + input_file_dir = '/Users/kimliegeois/Desktop/blake' + + filename_GT = input_file_dir + '/B_T_mm.txt' + + GT_blake = read_mm(filename_GT) + + X = np.loadtxt(filename_GT, skiprows=2) + + row_blake = X[:, 0].astype(int)-1 + col_blake = X[:, 1].astype(int)-1 + data_blake = X[:, 2] + + nNode = 341 + + indT = np.argwhere(row_gaston <= nNode) + indMech = np.argwhere(row_gaston > nNode) + + plot_indices = np.arange(80,120,1,dtype=int) + + row_gaston_2 = np.copy(row_gaston) + + row_gaston_2[indT] = (row_gaston[indT]+1)*4-1 + + indexNodes = np.floor((row_gaston_2[indMech] - nNode)/3.) + rest = (row_gaston_2[indMech] - nNode) - 3*indexNodes + + plt.figure() + plt.plot(indexNodes[plot_indices],'*') + + plt.figure() + plt.plot(rest[plot_indices],'*') + + row_gaston_2[indMech] = indexNodes*4+rest + + + + row_gaston_order = row_gaston_2*100+col_gaston + row_blake_order = row_blake*100+col_blake + + order_gaston = np.argsort(row_gaston_order) + order_blake = np.argsort(row_blake_order) + + print(row_gaston_2[plot_indices]) + print(row_blake[plot_indices]) + + print(np.amax(np.abs(data_gaston[order_gaston]-data_blake[order_blake]))) + print(np.amax(np.abs(row_gaston_2[order_gaston]-row_blake[order_blake]))) + print(np.amax(np.abs(col_gaston[order_gaston]-col_blake[order_blake]))) + + + #print(np.sum(row_gaston_2-row_blake)) + + plt.figure() + plt.plot(row_gaston_2[order_gaston]-row_blake[order_blake],'*') + #plt.show() + +def main(): + test2() + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/cube_deltas_omegas_GS.py b/katoptron/CMAME/old_tests/cube_deltas_omegas_GS.py new file mode 100644 index 0000000000000000000000000000000000000000..23505af4b1907f11feef21cb7bba95742265f2df --- /dev/null +++ b/katoptron/CMAME/old_tests/cube_deltas_omegas_GS.py @@ -0,0 +1,132 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +from katoptron.eigenvalues import * +import os +import fwk + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + n_sweeps_Q = 10 + damp_Q = 1.6 + + n_sweeps_R = 10 + damp_R = 1.6 + + omega = 0.5 + + N = 32 + + input_file_dir = file_dir + \ + '/../../workspace/katoptron_CMAME_tests_2_cubes_patch_convergence/1/' + + sample_per_rank = np.ceil((N / siz)) + i_min = rank*sample_per_rank + i_max = i_min+sample_per_rank + + if i_min > N: + i_min = N + if i_max > N: + i_max = N + + i_min = int(i_min) + i_max = int(i_max) + + print('Rank ' + str(rank) + ' from sample ' + str(i_min) + ':' + str(i_max)) + + for i in range(i_min, i_max): + timers = fwk.Timers() + + filename_Q = input_file_dir + str(i) + '/ApCTC_mm.txt' + filename_GT = input_file_dir + str(i) + '/B_mm.txt' + filename_f = input_file_dir + str(i) + '/b_mm_after_bc.txt' + + timers['Read files'].start() + Q = read_mm(filename_Q) + Q = get_symmetrical_part(Q) + GT = read_mm(filename_GT) + G = GT.transpose() + f = read_mm(filename_f, is_sparse=False) + timers['Read files'].stop() + + timers['Compute R'].start() + R = approx_Schur_complement(Q, G, GT) + timers['Compute R'].stop() + + timers['Compute invR'].start() + invR = Gauss_Seidel(R, n=n_sweeps_R, damping=damp_R) + timers['Compute invR'].stop() + + print(timers) + + timers['Compute the inverse of Q'].start() + invQ = Gauss_Seidel(Q, n=n_sweeps_Q, damping=damp_Q) + timers['Compute the inverse of Q'].stop() + + print(timers) + + timers['Compute the preconditioned matrix'].start() + AinvP = SIMPLE_preconditioned_matrix( + Q, invQ, G, GT, R, invR, omega=omega) + timers['Compute the preconditioned matrix'].stop() + + print(timers) + + tmp = np.zeros(AinvP.shape) + for i in range(0, AinvP.shape[0]): + tmp[i, i] = 1 + tmp[:, i] = AinvP.dot(tmp[:, i]) + + print(AinvP.shape) + + w, v, cond = compute_eig_and_departure_from_orthogonality(tmp) + print(cond) + + return + timers['Compute the basis'].start() + + n = Q.shape[0]+R.shape[0] + b = np.zeros((n,)) + b[0:len(f)] = f + + N = 2 + m_max = 6000 + V, W = compute_VW(AinvP, b, m=m_max, N=N) + timers['Compute the basis'].stop() + + print(timers) + + timers['Compute the eigenvalues'].start() + deltas, omegas = compute_deltas_omegas(V, W, b) + timers['Compute the eigenvalues'].stop() + + print(timers) + + timers['Write the eigenvalues'].start() + write_eigenvalues(deltas, work_dir+'/deltas_GS_GS_' + str(i) + '.txt') + np.savetxt(work_dir+'/omegas_GS_GS_' + str(i) + '.txt', omegas) + timers['Write the eigenvalues'].stop() + + f = open('timers_' + str(i) + '.txt', 'w') + print(timers, file=f) + f.closed + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/fused_plate_MC_GS_all_cases.py b/katoptron/CMAME/old_tests/fused_plate_MC_GS_all_cases.py new file mode 100644 index 0000000000000000000000000000000000000000..858bfe315088bf522bb34403d133e96840fa7f30 --- /dev/null +++ b/katoptron/CMAME/old_tests/fused_plate_MC_GS_all_cases.py @@ -0,0 +1,273 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""@package docstring +This test runs the four different cases as defined in table 2 of the paper +with a SIMPLE-GS-GS preconditioner. +""" + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def get_parameters(case_id, first_sample_id): + """ + This function returns the python dictionary that includes + the parameters for a given test case + """ + p = model.defaut_params + + if case_id == 1: + nuw = 128 + p['Correlation length'] = 20. + p['Dispersion level'] = 0.1 + elif case_id == 2: + nuw = 128 + p['Correlation length'] = 20. + p['Dispersion level'] = 0.3 + elif case_id == 3: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.1 + elif case_id == 4: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.3 + elif case_id == 5: + nuw = 128 + p['Correlation length'] = 2. + p['Dispersion level'] = 0.1 + elif case_id == 6: + nuw = 128 + p['Correlation length'] = 2. + p['Dispersion level'] = 0.3 + + p['Wavenumber cutoff'] = 8. + p['Wavenumber discretization points'] = nuw + p['Number Z of previously drawn samples'] = first_sample_id * nuw**2 + p['Number Phi of previously drawn samples'] = first_sample_id * nuw**2 + + p['Is exp'] = False + return p + + +def evaluate_one_ensemble(ensemble_size, case_id, first_sample_id, msh, comm, + file_dir): + """ + This function evaluates one ensemble for a given test case + """ + work_dir = os.getcwd() + args = parseargs() + + p = get_parameters(case_id, first_sample_id) + + pbl = m.Problem(msh, comm) + + # Units are in mm + E = 70000 * np.ones(ensemble_size) # 70e9 Pa = 70000 MPa + nu = 0.35 * np.ones(ensemble_size) + k = 0. + d = 0. + m.Medium(pbl, "body", "test", E, nu, k, d) + + m.Dirichlet(pbl, "clamped xyz", "Clamped", 1, 0., 1, 0., 1, 0., 0, 0., + ensemble_size) + m.Dirichlet(pbl, "clamped xy", "Clamped", 1, 0., 1, 0., 0, 0., 0, 0., + ensemble_size) + m.Dirichlet(pbl, "clamped y", "Clamped", 0, 0., 1, 0., 0, 0., 0, 0., + ensemble_size) + + f = 700 * np.ones(ensemble_size) # 700e6 Pa = 700 MPa + zero = np.zeros(ensemble_size) + one = np.ones(ensemble_size) + m.Neumann(pbl, 'load 1', 'load', 0, zero, 1, f, 0, zero, 0, one, + ensemble_size) + m.Neumann(pbl, 'load 2', 'load', 0, zero, 1, -f, 0, zero, 0, one, + ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Ensemble Convergence Tolerance'] = 1e-6 + solverList['Maximum Iterations'] = 1000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + prec = 3 + + if prec == 1: + mueluParams = Teuchos.ParameterList() + mueluParams['number of equations'] = 3 + mueluParams['max levels'] = 1 + mueluParams['coarse: type'] = "CHEBYSHEV" + + mueluParamsSub2 = Teuchos.ParameterList() + mueluParamsSub2['chebyshev: degree'] = 20 + + mueluParams['verbosity'] = "high" + + mueluParams['coarse: params'] = mueluParamsSub2 + elif prec == 2: + mueluParams = Teuchos.ParameterList() + mueluParams['number of equations'] = 3 + mueluParams['max levels'] = 1 + mueluParams['coarse: type'] = "RELAXATION" + + mueluParamsSub2 = Teuchos.ParameterList() + mueluParamsSub2['relaxation: type'] = "MT Gauss-Seidel" + mueluParamsSub2['relaxation: sweeps'] = 10 + mueluParamsSub2['relaxation: damping factor'] = 1.75 + + mueluParams['verbosity'] = "high" + + mueluParams['coarse: params'] = mueluParamsSub2 + elif prec == 3: + mueluParams = Teuchos.ParameterList() + mueluParams['number of equations'] = 3 + mueluParams['max levels'] = 2 + mueluParams['smoother: type'] = "RELAXATION" + + mueluParamsSub2 = Teuchos.ParameterList() + mueluParamsSub2['relaxation: type'] = "MT Gauss-Seidel" + mueluParamsSub2['relaxation: sweeps'] = 10 + mueluParamsSub2['relaxation: damping factor'] = 1.75 + + mueluParams['verbosity'] = "high" + + mueluParams['smoother: params'] = mueluParamsSub2 + + mueluParams['coarse: type'] = "Klu" + mueluParams['coarse: max size'] = 18 + + solverList['convert MueLu xml file'] = True + solverList['mueluParams'] = mueluParams + + solverList['Print Teuchos timers'] = True + + solverList['gamma'] = p['gamma'] + solverList['Use preconditioner'] = True + + solverList['type'] = 'BlockGmres' + solverList['Maximum active set iteration'] = 1 + + solverList['Write matrix and vectors'] = p['Write matrix and vectors'] + solverList['Write txt files'] = p['Write txt files'] + + if p["Is exp"]: + num_random_variables = randomVariable.shape[1] + else: + num_random_variables = 0 + + for i in range(0, num_random_variables): + rand = randomVariable[:, i] + pbl.add(m.RandomVariable(rand)) + + randomParams = Teuchos.ParameterList() + + randomParams['Is random'] = True + randomParams['Is exp'] = p['Is exp'] + if p["Is exp"]: + randomParams['Begin X'] = 0. + randomParams['Begin Y'] = 0. + randomParams['Begin Z'] = 0. + randomParams['End X'] = 10. + randomParams['End Y'] = 10. + randomParams['End Z'] = 1. + randomParams['Number random variables'] = num_random_variables + randomParams['Correlation length X'] = p['Correlation length X'] + randomParams['Correlation length Y'] = p['Correlation length Y'] + randomParams['Correlation length Z'] = p['Correlation length Z'] + randomParams['Number of KL Terms X'] = p['Number of KL Terms X'] + randomParams['Number of KL Terms Y'] = p['Number of KL Terms Y'] + randomParams['Number of KL Terms Z'] = p['Number of KL Terms Z'] + randomParams['Maximum Nonlinear Solver Iterations'] = 5000 + randomParams['Bound Perturbation Size'] = 1E-10 + else: + randomParams['Correlation length'] = p['Correlation length'] + randomParams['Wavenumber cutoff'] = p['Wavenumber cutoff'] + randomParams['Wavenumber discretization points'] = p[ + 'Wavenumber discretization points'] + randomParams['Number Z of previously drawn samples'] = p[ + 'Number Z of previously drawn samples'] + randomParams['Number Phi of previously drawn samples'] = p[ + 'Number Phi of previously drawn samples'] + + randomParams['Mean'] = E[0] / (2. * (1. + nu[0])) + randomParams['Dispersion level'] = p['Dispersion level'] + + solverList['randomParams'] = randomParams + + slv = m.IterativeSolver(pbl, args.k, solverList, 3, ensemble_size) + slv.start() + f = open('timers.txt', 'w') + print(slv.getTimers(), file=f) + f.closed + + +def evaluate_all_ensembles(ensemble_sizes, case_ids, N, msh, comm, file_dir): + """ + This function loop over the test cases, the ensemble sizes, + and the ensembles + """ + for case_id in case_ids: + directory_case_id = 'case_' + str(case_id) + if not os.path.exists(directory_case_id): + os.makedirs(directory_case_id) + os.chdir(directory_case_id) + for ensemble_size in ensemble_sizes: + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + first_sample_id = ensemble_index * ensemble_size + + evaluate_one_ensemble(ensemble_size, case_id, first_sample_id, + msh, comm, file_dir) + os.chdir('..') + os.chdir('..') + os.chdir('..') + + +def main(): + """ + This loads the mesh and define the case ids and ensemble sizes + """ + comm, rank, size = m.utilities.import_MPI() + + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = gmsh.MeshLoader('plate.geo', file_dir).execute() + + N = 32 + ensemble_sizes = [1, 8, 16, 32] + case_ids = [1, 2, 3, 4, 5, 6] + + evaluate_all_ensembles(ensemble_sizes, case_ids, N, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/fused_plate_mean_prec_GS.py b/katoptron/CMAME/old_tests/fused_plate_mean_prec_GS.py new file mode 100644 index 0000000000000000000000000000000000000000..262ff4e3df65b4a25957c38de0f6fd763f348c7b --- /dev/null +++ b/katoptron/CMAME/old_tests/fused_plate_mean_prec_GS.py @@ -0,0 +1,248 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_prec(msh, comm, file_dir, Ngs, omegags, ensemble_size=1): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + + N = ensemble_size + num_random_variables = 20 + randomVariable = np.zeros((N, num_random_variables)) + if ensemble_size is not 1: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.1 + + p['Wavenumber cutoff'] = 8. + p['Wavenumber discretization points'] = nuw + p['Number Z of previously drawn samples'] = 0 + p['Number Phi of previously drawn samples'] = 0 + p['Is exp'] = False + + pbl = m.Problem(msh, comm) + + # Units are in mm + E = 70000 * np.ones(ensemble_size) # 70e9 Pa = 70000 MPa + nu = 0.35 * np.ones(ensemble_size) + k = 0. + d = 0. + m.Medium(pbl, "body", "test", E, nu, k, d) + + m.Dirichlet(pbl, "clamped xyz", "Clamped", 1, 0., + 1, 0., 1, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "clamped xy", "Clamped", 1, 0., + 1, 0., 0, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "clamped y", "Clamped", 0, 0., + 1, 0., 0, 0., 0, 0., ensemble_size) + + f = 700 * np.ones(ensemble_size) # 700e6 Pa = 700 MPa + zero = np.zeros(ensemble_size) + one = np.ones(ensemble_size) + m.Neumann(pbl, 'load 1', 'load', 0, zero, 1, + f, 0, zero, 0, one, ensemble_size) + m.Neumann(pbl, 'load 2', 'load', 0, zero, 1, - + f, 0, zero, 0, one, ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Ensemble Convergence Tolerance'] = 1e-6 + solverList['Maximum Iterations'] = 1000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + mueluParams = Teuchos.ParameterList() + mueluParams['number of equations'] = 3 + mueluParams['max levels'] = 1 + mueluParams['coarse: type'] = "RELAXATION" + + mueluParamsSub2 = Teuchos.ParameterList() + mueluParamsSub2['relaxation: type'] = "MT Gauss-Seidel" + mueluParamsSub2['relaxation: sweeps'] = Ngs + mueluParamsSub2['relaxation: damping factor'] = omegags + + mueluParams['verbosity'] = "high" + + mueluParams['coarse: params'] = mueluParamsSub2 + + solverList['convert MueLu xml file'] = True + solverList['mueluParams'] = mueluParams + + solverList['Print Teuchos timers'] = True + + solverList['gamma'] = p['gamma'] + solverList['Use preconditioner'] = True + + solverList['type'] = 'BlockGmres' + solverList['Maximum active set iteration'] = 1 + + solverList['Write matrix and vectors'] = p['Write matrix and vectors'] + solverList['Write txt files'] = p['Write txt files'] + + if p["Is exp"]: + num_random_variables = randomVariable.shape[1] + else: + num_random_variables = 0 + + for i in range(0, num_random_variables): + rand = randomVariable[:, i] + pbl.add(m.RandomVariable(rand)) + + randomParams = Teuchos.ParameterList() + + randomParams['Is random'] = True + randomParams['Is exp'] = p['Is exp'] + if p["Is exp"]: + randomParams['Begin X'] = 0. + randomParams['Begin Y'] = 0. + randomParams['Begin Z'] = 0. + randomParams['End X'] = 10. + randomParams['End Y'] = 10. + randomParams['End Z'] = 1. + randomParams['Number random variables'] = num_random_variables + randomParams['Correlation length X'] = p['Correlation length X'] + randomParams['Correlation length Y'] = p['Correlation length Y'] + randomParams['Correlation length Z'] = p['Correlation length Z'] + randomParams['Number of KL Terms X'] = p['Number of KL Terms X'] + randomParams['Number of KL Terms Y'] = p['Number of KL Terms Y'] + randomParams['Number of KL Terms Z'] = p['Number of KL Terms Z'] + randomParams['Maximum Nonlinear Solver Iterations'] = 5000 + randomParams['Bound Perturbation Size'] = 1E-10 + else: + randomParams['Correlation length'] = p['Correlation length'] + randomParams['Wavenumber cutoff'] = p['Wavenumber cutoff'] + randomParams['Wavenumber discretization points'] = p['Wavenumber discretization points'] + randomParams['Number Z of previously drawn samples'] = p['Number Z of previously drawn samples'] + randomParams['Number Phi of previously drawn samples'] = p['Number Phi of previously drawn samples'] + + randomParams['Mean'] = E[0] / (2.*(1.+nu[0])) + randomParams['Dispersion level'] = p['Dispersion level'] + + solverList['randomParams'] = randomParams + + slv = m.IterativeSolver(pbl, args.k, solverList, 3, ensemble_size) + slv.start() + f = open('timers.txt', 'w') + print(slv.getTimers(), file=f) + f.closed + + +def evaluate_all_prec(msh, comm, file_dir, prec_params): + + N = prec_params.shape[0] + + for i in range(0, N): + directory = str(i) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + current_dir = os.getcwd() + + Ngs = int(prec_params[i, 0]) + omegags = prec_params[i, 1] + + directory = 'mean_case' + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + evaluate_prec(msh, comm, file_dir, Ngs, omegags) + os.chdir('..') + + for ensemble_size in [8]: + directory = 'ensemble_reduction_' + str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + evaluate_prec(msh, + comm, + file_dir, + Ngs, omegags, + ensemble_size=ensemble_size) + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = gmsh.MeshLoader('plate.geo', file_dir).execute() + + GS_sweeps_00_min = 1 + GS_sweeps_00_max = 41 + delta_GS_sweeps_00 = 1 + + N_GS_sweeps_00 = int( + np.ceil( + ((GS_sweeps_00_max - GS_sweeps_00_min * 1.) / delta_GS_sweeps_00))) + + # Damping has to be between 0 and 2 + GS_damping_00_min = 0.001 + GS_damping_00_max = 1.999 + N_GS_damping_00 = 50 + + sweeps_00 = np.arange(GS_sweeps_00_min, GS_sweeps_00_max, + delta_GS_sweeps_00) + damping_00 = np.linspace(GS_damping_00_min, GS_damping_00_max, + N_GS_damping_00) + + N = N_GS_sweeps_00 * N_GS_damping_00 + + prec_params = np.zeros((N, 2)) + + i = 0 + + for i_0 in range(0, N_GS_sweeps_00): + for i_1 in range(0, N_GS_damping_00): + prec_params[i, :] = [ + sweeps_00[i_0], damping_00[i_1] + ] + i = i + 1 + + np.savetxt('prec_params.txt', prec_params) + + evaluate_all_prec(msh, comm, file_dir, prec_params) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/fused_plate_mean_prec_GS_2.py b/katoptron/CMAME/old_tests/fused_plate_mean_prec_GS_2.py new file mode 100644 index 0000000000000000000000000000000000000000..a0ec61755b5f0f29edcddff3ccedbc45de7975e4 --- /dev/null +++ b/katoptron/CMAME/old_tests/fused_plate_mean_prec_GS_2.py @@ -0,0 +1,248 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_prec(msh, comm, file_dir, Ngs, omegags, ensemble_size=1): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + + N = ensemble_size + num_random_variables = 20 + randomVariable = np.zeros((N, num_random_variables)) + if ensemble_size is not 1: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.1 + + p['Wavenumber cutoff'] = 8. + p['Wavenumber discretization points'] = nuw + p['Number Z of previously drawn samples'] = 0 + p['Number Phi of previously drawn samples'] = 0 + p['Is exp'] = False + + pbl = m.Problem(msh, comm) + + # Units are in mm + E = 70000 * np.ones(ensemble_size) # 70e9 Pa = 70000 MPa + nu = 0.35 * np.ones(ensemble_size) + k = 0. + d = 0. + m.Medium(pbl, "body", "test", E, nu, k, d) + + m.Dirichlet(pbl, "clamped xyz", "Clamped", 1, 0., + 1, 0., 1, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "clamped xy", "Clamped", 1, 0., + 1, 0., 0, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "clamped y", "Clamped", 0, 0., + 1, 0., 0, 0., 0, 0., ensemble_size) + + f = 700 * np.ones(ensemble_size) # 700e6 Pa = 700 MPa + zero = np.zeros(ensemble_size) + one = np.ones(ensemble_size) + m.Neumann(pbl, 'load 1', 'load', 0, zero, 1, + f, 0, zero, 0, one, ensemble_size) + m.Neumann(pbl, 'load 2', 'load', 0, zero, 1, - + f, 0, zero, 0, one, ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Ensemble Convergence Tolerance'] = 1e-6 + solverList['Maximum Iterations'] = 1000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + mueluParams = Teuchos.ParameterList() + mueluParams['number of equations'] = 3 + mueluParams['max levels'] = 1 + mueluParams['coarse: type'] = "RELAXATION" + + mueluParamsSub2 = Teuchos.ParameterList() + mueluParamsSub2['relaxation: type'] = "MT Gauss-Seidel" + mueluParamsSub2['relaxation: sweeps'] = Ngs + mueluParamsSub2['relaxation: damping factor'] = omegags + + mueluParams['verbosity'] = "high" + + mueluParams['coarse: params'] = mueluParamsSub2 + + solverList['convert MueLu xml file'] = True + solverList['mueluParams'] = mueluParams + + solverList['Print Teuchos timers'] = True + + solverList['gamma'] = p['gamma'] + solverList['Use preconditioner'] = True + + solverList['type'] = 'BlockGmres' + solverList['Maximum active set iteration'] = 1 + + solverList['Write matrix and vectors'] = p['Write matrix and vectors'] + solverList['Write txt files'] = p['Write txt files'] + + if p["Is exp"]: + num_random_variables = randomVariable.shape[1] + else: + num_random_variables = 0 + + for i in range(0, num_random_variables): + rand = randomVariable[:, i] + pbl.add(m.RandomVariable(rand)) + + randomParams = Teuchos.ParameterList() + + randomParams['Is random'] = True + randomParams['Is exp'] = p['Is exp'] + if p["Is exp"]: + randomParams['Begin X'] = 0. + randomParams['Begin Y'] = 0. + randomParams['Begin Z'] = 0. + randomParams['End X'] = 10. + randomParams['End Y'] = 10. + randomParams['End Z'] = 1. + randomParams['Number random variables'] = num_random_variables + randomParams['Correlation length X'] = p['Correlation length X'] + randomParams['Correlation length Y'] = p['Correlation length Y'] + randomParams['Correlation length Z'] = p['Correlation length Z'] + randomParams['Number of KL Terms X'] = p['Number of KL Terms X'] + randomParams['Number of KL Terms Y'] = p['Number of KL Terms Y'] + randomParams['Number of KL Terms Z'] = p['Number of KL Terms Z'] + randomParams['Maximum Nonlinear Solver Iterations'] = 5000 + randomParams['Bound Perturbation Size'] = 1E-10 + else: + randomParams['Correlation length'] = p['Correlation length'] + randomParams['Wavenumber cutoff'] = p['Wavenumber cutoff'] + randomParams['Wavenumber discretization points'] = p['Wavenumber discretization points'] + randomParams['Number Z of previously drawn samples'] = p['Number Z of previously drawn samples'] + randomParams['Number Phi of previously drawn samples'] = p['Number Phi of previously drawn samples'] + + randomParams['Mean'] = E[0] / (2.*(1.+nu[0])) + randomParams['Dispersion level'] = p['Dispersion level'] + + solverList['randomParams'] = randomParams + + slv = m.IterativeSolver(pbl, args.k, solverList, 3, ensemble_size) + slv.start() + f = open('timers.txt', 'w') + print(slv.getTimers(), file=f) + f.closed + + +def evaluate_all_prec(msh, comm, file_dir, prec_params): + + N = prec_params.shape[0] + + for i in range(500, 1000): + directory = str(i) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + current_dir = os.getcwd() + + Ngs = int(prec_params[i, 0]) + omegags = prec_params[i, 1] + + directory = 'mean_case' + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + evaluate_prec(msh, comm, file_dir, Ngs, omegags) + os.chdir('..') + + for ensemble_size in [8]: + directory = 'ensemble_reduction_' + str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + evaluate_prec(msh, + comm, + file_dir, + Ngs, omegags, + ensemble_size=ensemble_size) + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = gmsh.MeshLoader('plate.geo', file_dir).execute() + + GS_sweeps_00_min = 1 + GS_sweeps_00_max = 41 + delta_GS_sweeps_00 = 1 + + N_GS_sweeps_00 = int( + np.ceil( + ((GS_sweeps_00_max - GS_sweeps_00_min * 1.) / delta_GS_sweeps_00))) + + # Damping has to be between 0 and 2 + GS_damping_00_min = 0.001 + GS_damping_00_max = 1.999 + N_GS_damping_00 = 50 + + sweeps_00 = np.arange(GS_sweeps_00_min, GS_sweeps_00_max, + delta_GS_sweeps_00) + damping_00 = np.linspace(GS_damping_00_min, GS_damping_00_max, + N_GS_damping_00) + + N = N_GS_sweeps_00 * N_GS_damping_00 + + prec_params = np.zeros((N, 2)) + + i = 0 + + for i_0 in range(0, N_GS_sweeps_00): + for i_1 in range(0, N_GS_damping_00): + prec_params[i, :] = [ + sweeps_00[i_0], damping_00[i_1] + ] + i = i + 1 + + np.savetxt('prec_params.txt', prec_params) + + evaluate_all_prec(msh, comm, file_dir, prec_params) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/fused_plate_mean_prec_GS_3.py b/katoptron/CMAME/old_tests/fused_plate_mean_prec_GS_3.py new file mode 100644 index 0000000000000000000000000000000000000000..db9723d0711e5cfdf0f0d932bc61230896b144ea --- /dev/null +++ b/katoptron/CMAME/old_tests/fused_plate_mean_prec_GS_3.py @@ -0,0 +1,248 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_prec(msh, comm, file_dir, Ngs, omegags, ensemble_size=1): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + + N = ensemble_size + num_random_variables = 20 + randomVariable = np.zeros((N, num_random_variables)) + if ensemble_size is not 1: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.1 + + p['Wavenumber cutoff'] = 8. + p['Wavenumber discretization points'] = nuw + p['Number Z of previously drawn samples'] = 0 + p['Number Phi of previously drawn samples'] = 0 + p['Is exp'] = False + + pbl = m.Problem(msh, comm) + + # Units are in mm + E = 70000 * np.ones(ensemble_size) # 70e9 Pa = 70000 MPa + nu = 0.35 * np.ones(ensemble_size) + k = 0. + d = 0. + m.Medium(pbl, "body", "test", E, nu, k, d) + + m.Dirichlet(pbl, "clamped xyz", "Clamped", 1, 0., + 1, 0., 1, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "clamped xy", "Clamped", 1, 0., + 1, 0., 0, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "clamped y", "Clamped", 0, 0., + 1, 0., 0, 0., 0, 0., ensemble_size) + + f = 700 * np.ones(ensemble_size) # 700e6 Pa = 700 MPa + zero = np.zeros(ensemble_size) + one = np.ones(ensemble_size) + m.Neumann(pbl, 'load 1', 'load', 0, zero, 1, + f, 0, zero, 0, one, ensemble_size) + m.Neumann(pbl, 'load 2', 'load', 0, zero, 1, - + f, 0, zero, 0, one, ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Ensemble Convergence Tolerance'] = 1e-6 + solverList['Maximum Iterations'] = 1000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + mueluParams = Teuchos.ParameterList() + mueluParams['number of equations'] = 3 + mueluParams['max levels'] = 1 + mueluParams['coarse: type'] = "RELAXATION" + + mueluParamsSub2 = Teuchos.ParameterList() + mueluParamsSub2['relaxation: type'] = "MT Gauss-Seidel" + mueluParamsSub2['relaxation: sweeps'] = Ngs + mueluParamsSub2['relaxation: damping factor'] = omegags + + mueluParams['verbosity'] = "high" + + mueluParams['coarse: params'] = mueluParamsSub2 + + solverList['convert MueLu xml file'] = True + solverList['mueluParams'] = mueluParams + + solverList['Print Teuchos timers'] = True + + solverList['gamma'] = p['gamma'] + solverList['Use preconditioner'] = True + + solverList['type'] = 'BlockGmres' + solverList['Maximum active set iteration'] = 1 + + solverList['Write matrix and vectors'] = p['Write matrix and vectors'] + solverList['Write txt files'] = p['Write txt files'] + + if p["Is exp"]: + num_random_variables = randomVariable.shape[1] + else: + num_random_variables = 0 + + for i in range(0, num_random_variables): + rand = randomVariable[:, i] + pbl.add(m.RandomVariable(rand)) + + randomParams = Teuchos.ParameterList() + + randomParams['Is random'] = True + randomParams['Is exp'] = p['Is exp'] + if p["Is exp"]: + randomParams['Begin X'] = 0. + randomParams['Begin Y'] = 0. + randomParams['Begin Z'] = 0. + randomParams['End X'] = 10. + randomParams['End Y'] = 10. + randomParams['End Z'] = 1. + randomParams['Number random variables'] = num_random_variables + randomParams['Correlation length X'] = p['Correlation length X'] + randomParams['Correlation length Y'] = p['Correlation length Y'] + randomParams['Correlation length Z'] = p['Correlation length Z'] + randomParams['Number of KL Terms X'] = p['Number of KL Terms X'] + randomParams['Number of KL Terms Y'] = p['Number of KL Terms Y'] + randomParams['Number of KL Terms Z'] = p['Number of KL Terms Z'] + randomParams['Maximum Nonlinear Solver Iterations'] = 5000 + randomParams['Bound Perturbation Size'] = 1E-10 + else: + randomParams['Correlation length'] = p['Correlation length'] + randomParams['Wavenumber cutoff'] = p['Wavenumber cutoff'] + randomParams['Wavenumber discretization points'] = p['Wavenumber discretization points'] + randomParams['Number Z of previously drawn samples'] = p['Number Z of previously drawn samples'] + randomParams['Number Phi of previously drawn samples'] = p['Number Phi of previously drawn samples'] + + randomParams['Mean'] = E[0] / (2.*(1.+nu[0])) + randomParams['Dispersion level'] = p['Dispersion level'] + + solverList['randomParams'] = randomParams + + slv = m.IterativeSolver(pbl, args.k, solverList, 3, ensemble_size) + slv.start() + f = open('timers.txt', 'w') + print(slv.getTimers(), file=f) + f.closed + + +def evaluate_all_prec(msh, comm, file_dir, prec_params): + + N = prec_params.shape[0] + + for i in range(1000, 1500): + directory = str(i) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + current_dir = os.getcwd() + + Ngs = int(prec_params[i, 0]) + omegags = prec_params[i, 1] + + directory = 'mean_case' + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + evaluate_prec(msh, comm, file_dir, Ngs, omegags) + os.chdir('..') + + for ensemble_size in [8]: + directory = 'ensemble_reduction_' + str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + evaluate_prec(msh, + comm, + file_dir, + Ngs, omegags, + ensemble_size=ensemble_size) + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = gmsh.MeshLoader('plate.geo', file_dir).execute() + + GS_sweeps_00_min = 1 + GS_sweeps_00_max = 41 + delta_GS_sweeps_00 = 1 + + N_GS_sweeps_00 = int( + np.ceil( + ((GS_sweeps_00_max - GS_sweeps_00_min * 1.) / delta_GS_sweeps_00))) + + # Damping has to be between 0 and 2 + GS_damping_00_min = 0.001 + GS_damping_00_max = 1.999 + N_GS_damping_00 = 50 + + sweeps_00 = np.arange(GS_sweeps_00_min, GS_sweeps_00_max, + delta_GS_sweeps_00) + damping_00 = np.linspace(GS_damping_00_min, GS_damping_00_max, + N_GS_damping_00) + + N = N_GS_sweeps_00 * N_GS_damping_00 + + prec_params = np.zeros((N, 2)) + + i = 0 + + for i_0 in range(0, N_GS_sweeps_00): + for i_1 in range(0, N_GS_damping_00): + prec_params[i, :] = [ + sweeps_00[i_0], damping_00[i_1] + ] + i = i + 1 + + np.savetxt('prec_params.txt', prec_params) + + evaluate_all_prec(msh, comm, file_dir, prec_params) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/fused_plate_mean_prec_GS_4.py b/katoptron/CMAME/old_tests/fused_plate_mean_prec_GS_4.py new file mode 100644 index 0000000000000000000000000000000000000000..714a034ba706d98176b7a3cee36a0a43411ea7d2 --- /dev/null +++ b/katoptron/CMAME/old_tests/fused_plate_mean_prec_GS_4.py @@ -0,0 +1,248 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_prec(msh, comm, file_dir, Ngs, omegags, ensemble_size=1): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + + N = ensemble_size + num_random_variables = 20 + randomVariable = np.zeros((N, num_random_variables)) + if ensemble_size is not 1: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.1 + + p['Wavenumber cutoff'] = 8. + p['Wavenumber discretization points'] = nuw + p['Number Z of previously drawn samples'] = 0 + p['Number Phi of previously drawn samples'] = 0 + p['Is exp'] = False + + pbl = m.Problem(msh, comm) + + # Units are in mm + E = 70000 * np.ones(ensemble_size) # 70e9 Pa = 70000 MPa + nu = 0.35 * np.ones(ensemble_size) + k = 0. + d = 0. + m.Medium(pbl, "body", "test", E, nu, k, d) + + m.Dirichlet(pbl, "clamped xyz", "Clamped", 1, 0., + 1, 0., 1, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "clamped xy", "Clamped", 1, 0., + 1, 0., 0, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "clamped y", "Clamped", 0, 0., + 1, 0., 0, 0., 0, 0., ensemble_size) + + f = 700 * np.ones(ensemble_size) # 700e6 Pa = 700 MPa + zero = np.zeros(ensemble_size) + one = np.ones(ensemble_size) + m.Neumann(pbl, 'load 1', 'load', 0, zero, 1, + f, 0, zero, 0, one, ensemble_size) + m.Neumann(pbl, 'load 2', 'load', 0, zero, 1, - + f, 0, zero, 0, one, ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Ensemble Convergence Tolerance'] = 1e-6 + solverList['Maximum Iterations'] = 1000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + mueluParams = Teuchos.ParameterList() + mueluParams['number of equations'] = 3 + mueluParams['max levels'] = 1 + mueluParams['coarse: type'] = "RELAXATION" + + mueluParamsSub2 = Teuchos.ParameterList() + mueluParamsSub2['relaxation: type'] = "MT Gauss-Seidel" + mueluParamsSub2['relaxation: sweeps'] = Ngs + mueluParamsSub2['relaxation: damping factor'] = omegags + + mueluParams['verbosity'] = "high" + + mueluParams['coarse: params'] = mueluParamsSub2 + + solverList['convert MueLu xml file'] = True + solverList['mueluParams'] = mueluParams + + solverList['Print Teuchos timers'] = True + + solverList['gamma'] = p['gamma'] + solverList['Use preconditioner'] = True + + solverList['type'] = 'BlockGmres' + solverList['Maximum active set iteration'] = 1 + + solverList['Write matrix and vectors'] = p['Write matrix and vectors'] + solverList['Write txt files'] = p['Write txt files'] + + if p["Is exp"]: + num_random_variables = randomVariable.shape[1] + else: + num_random_variables = 0 + + for i in range(0, num_random_variables): + rand = randomVariable[:, i] + pbl.add(m.RandomVariable(rand)) + + randomParams = Teuchos.ParameterList() + + randomParams['Is random'] = True + randomParams['Is exp'] = p['Is exp'] + if p["Is exp"]: + randomParams['Begin X'] = 0. + randomParams['Begin Y'] = 0. + randomParams['Begin Z'] = 0. + randomParams['End X'] = 10. + randomParams['End Y'] = 10. + randomParams['End Z'] = 1. + randomParams['Number random variables'] = num_random_variables + randomParams['Correlation length X'] = p['Correlation length X'] + randomParams['Correlation length Y'] = p['Correlation length Y'] + randomParams['Correlation length Z'] = p['Correlation length Z'] + randomParams['Number of KL Terms X'] = p['Number of KL Terms X'] + randomParams['Number of KL Terms Y'] = p['Number of KL Terms Y'] + randomParams['Number of KL Terms Z'] = p['Number of KL Terms Z'] + randomParams['Maximum Nonlinear Solver Iterations'] = 5000 + randomParams['Bound Perturbation Size'] = 1E-10 + else: + randomParams['Correlation length'] = p['Correlation length'] + randomParams['Wavenumber cutoff'] = p['Wavenumber cutoff'] + randomParams['Wavenumber discretization points'] = p['Wavenumber discretization points'] + randomParams['Number Z of previously drawn samples'] = p['Number Z of previously drawn samples'] + randomParams['Number Phi of previously drawn samples'] = p['Number Phi of previously drawn samples'] + + randomParams['Mean'] = E[0] / (2.*(1.+nu[0])) + randomParams['Dispersion level'] = p['Dispersion level'] + + solverList['randomParams'] = randomParams + + slv = m.IterativeSolver(pbl, args.k, solverList, 3, ensemble_size) + slv.start() + f = open('timers.txt', 'w') + print(slv.getTimers(), file=f) + f.closed + + +def evaluate_all_prec(msh, comm, file_dir, prec_params): + + N = prec_params.shape[0] + + for i in range(1500, N): + directory = str(i) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + current_dir = os.getcwd() + + Ngs = int(prec_params[i, 0]) + omegags = prec_params[i, 1] + + directory = 'mean_case' + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + evaluate_prec(msh, comm, file_dir, Ngs, omegags) + os.chdir('..') + + for ensemble_size in [8]: + directory = 'ensemble_reduction_' + str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + evaluate_prec(msh, + comm, + file_dir, + Ngs, omegags, + ensemble_size=ensemble_size) + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = gmsh.MeshLoader('plate.geo', file_dir).execute() + + GS_sweeps_00_min = 1 + GS_sweeps_00_max = 41 + delta_GS_sweeps_00 = 1 + + N_GS_sweeps_00 = int( + np.ceil( + ((GS_sweeps_00_max - GS_sweeps_00_min * 1.) / delta_GS_sweeps_00))) + + # Damping has to be between 0 and 2 + GS_damping_00_min = 0.001 + GS_damping_00_max = 1.999 + N_GS_damping_00 = 50 + + sweeps_00 = np.arange(GS_sweeps_00_min, GS_sweeps_00_max, + delta_GS_sweeps_00) + damping_00 = np.linspace(GS_damping_00_min, GS_damping_00_max, + N_GS_damping_00) + + N = N_GS_sweeps_00 * N_GS_damping_00 + + prec_params = np.zeros((N, 2)) + + i = 0 + + for i_0 in range(0, N_GS_sweeps_00): + for i_1 in range(0, N_GS_damping_00): + prec_params[i, :] = [ + sweeps_00[i_0], damping_00[i_1] + ] + i = i + 1 + + np.savetxt('prec_params.txt', prec_params) + + evaluate_all_prec(msh, comm, file_dir, prec_params) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate.py b/katoptron/CMAME/old_tests/plate.py new file mode 100644 index 0000000000000000000000000000000000000000..01b9e96d1d7de425bf68cee0af702590b3da72c7 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def main(): + + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2.msh', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + np.random.seed(42) + N = 1 + num_random_variables = 20 + #randomVariable = np.random.normal(0, 1, num_random_variables*N) + #randomVariable = np.resize(randomVariable,(N,num_random_variables)) + randomVariable = np.zeros((N, num_random_variables)) + + p = model.defaut_params + p['MueLu xml from current_dir'] = False + p['MueLu xml use template'] = False + p['MueLu xml file name'] = '/../tests/direct_solver.xml' + p['Write txt files'] = True + p['Write matrix and vectors'] = True + + ensemble_size = 1 + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_MC_GS_all_cases.py b/katoptron/CMAME/old_tests/plate_MC_GS_all_cases.py new file mode 100644 index 0000000000000000000000000000000000000000..e54831daca88d57f95f38baa39a0ea01b2a8aa83 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_MC_GS_all_cases.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""@package docstring +This test runs the four different cases as defined in table 2 of the paper +with a SIMPLE-GS-GS preconditioner. +""" + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def get_parameters(case_id, first_sample_id): + """ + This function returns the python dictionary that includes + the parameters for a given test case + """ + p = model.defaut_params + + if case_id == 1: + nuw = 128 + p['Correlation length'] = 20. + p['Dispersion level'] = 0.1 + elif case_id == 2: + nuw = 128 + p['Correlation length'] = 20. + p['Dispersion level'] = 0.3 + elif case_id == 3: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.1 + elif case_id == 4: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.3 + elif case_id == 5: + nuw = 128 + p['Correlation length'] = 2. + p['Dispersion level'] = 0.1 + elif case_id == 6: + nuw = 128 + p['Correlation length'] = 2. + p['Dispersion level'] = 0.3 + + p['Wavenumber cutoff'] = 8. + p['Wavenumber discretization points'] = nuw + p['Number Z of previously drawn samples'] = first_sample_id * nuw**2 + p['Number Phi of previously drawn samples'] = first_sample_id * nuw**2 + + p['Is exp'] = False + return p + + +def evaluate_one_ensemble(ensemble_size, case_id, first_sample_id, msh, comm, + file_dir): + """ + This function evaluates one ensemble for a given test case + """ + work_dir = os.getcwd() + args = parseargs() + + p = get_parameters(case_id, first_sample_id) + + pm = model.plate_model(ensemble_size, np.array([0]), msh, comm, file_dir, + work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_sizes, case_ids, N, msh, comm, file_dir): + """ + This function loop over the test cases, the ensemble sizes, + and the ensembles + """ + for case_id in case_ids: + directory_case_id = 'case_' + str(case_id) + if not os.path.exists(directory_case_id): + os.makedirs(directory_case_id) + os.chdir(directory_case_id) + for ensemble_size in ensemble_sizes: + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + first_sample_id = ensemble_index * ensemble_size + + evaluate_one_ensemble(ensemble_size, case_id, first_sample_id, + msh, comm, file_dir) + os.chdir('..') + os.chdir('..') + os.chdir('..') + + +def main(): + """ + This loads the mesh and define the case ids and ensemble sizes + """ + comm, rank, size = m.utilities.import_MPI() + + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.geo', 'plate_1_tmp', 'plate_2.geo', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + N = 960 + ensemble_sizes = [1, 8, 16, 32] + case_ids = [1, 2, 3, 4, 5, 6] + + evaluate_all_ensembles(ensemble_sizes, case_ids, N, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_MC_GS_case_1.py b/katoptron/CMAME/old_tests/plate_MC_GS_case_1.py new file mode 100644 index 0000000000000000000000000000000000000000..872bc1f46a08ca476cb27bd73d3477e29b88a0ec --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_MC_GS_case_1.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_one_ensemble(ensemble_size, randomVariable, msh, comm, file_dir): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir): + + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N = randomVariable.shape[0] + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + evaluate_one_ensemble(ensemble_size, randomVariable[ensemble_index:( + ensemble_index+ensemble_size), :], msh, comm, file_dir) + + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2.msh', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + np.random.seed(42) + N = 96 + num_random_variables = 20 + randomVariable = np.random.normal(0, 1, num_random_variables*N) + randomVariable = np.resize(randomVariable, (N, num_random_variables)) + + np.savetxt('randomVariable.txt', randomVariable) + + evaluate_all_ensembles(1, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(8, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(16, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(32, randomVariable, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_MC_GS_case_2.py b/katoptron/CMAME/old_tests/plate_MC_GS_case_2.py new file mode 100644 index 0000000000000000000000000000000000000000..b0ae7acfb4698a304ad80f181b481345b0ab12e9 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_MC_GS_case_2.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_one_ensemble(ensemble_size, randomVariable, msh, comm, file_dir): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + p['Dispersion level'] = 0.3 + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir): + + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N = randomVariable.shape[0] + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + evaluate_one_ensemble(ensemble_size, randomVariable[ensemble_index:( + ensemble_index+ensemble_size), :], msh, comm, file_dir) + + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2.msh', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + np.random.seed(42) + N = 96 + num_random_variables = 20 + randomVariable = np.random.normal(0, 1, num_random_variables*N) + randomVariable = np.resize(randomVariable, (N, num_random_variables)) + + np.savetxt('randomVariable.txt', randomVariable) + + evaluate_all_ensembles(1, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(8, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(16, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(32, randomVariable, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_MC_GS_case_3.py b/katoptron/CMAME/old_tests/plate_MC_GS_case_3.py new file mode 100644 index 0000000000000000000000000000000000000000..5a370e812d645c16487f4dc60d5c62c1d893e836 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_MC_GS_case_3.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_one_ensemble(ensemble_size, randomVariable, msh, comm, file_dir): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + p['Correlation length X'] = 10. + p['Correlation length Y'] = 10. + p['Number of KL Terms X'] = 15 + p['Number of KL Terms Y'] = 15 + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir): + + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N = randomVariable.shape[0] + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + evaluate_one_ensemble(ensemble_size, randomVariable[ensemble_index:( + ensemble_index+ensemble_size), :], msh, comm, file_dir) + + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2.msh', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + np.random.seed(42) + N = 96 + num_random_variables = 70 + randomVariable = np.random.normal(0, 1, num_random_variables*N) + randomVariable = np.resize(randomVariable, (N, num_random_variables)) + + np.savetxt('randomVariable.txt', randomVariable) + + evaluate_all_ensembles(1, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(8, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(16, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(32, randomVariable, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_MC_GS_case_4.py b/katoptron/CMAME/old_tests/plate_MC_GS_case_4.py new file mode 100644 index 0000000000000000000000000000000000000000..9dd999aa86d728fc936e3bbe1ff974c24ec11609 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_MC_GS_case_4.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_one_ensemble(ensemble_size, randomVariable, msh, comm, file_dir): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + p['Correlation length X'] = 10. + p['Correlation length Y'] = 10. + p['Number of KL Terms X'] = 15 + p['Number of KL Terms Y'] = 15 + p['Dispersion level'] = 0.3 + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir): + + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N = randomVariable.shape[0] + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + evaluate_one_ensemble(ensemble_size, randomVariable[ensemble_index:( + ensemble_index+ensemble_size), :], msh, comm, file_dir) + + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2.msh', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + np.random.seed(42) + N = 96 + num_random_variables = 70 + randomVariable = np.random.normal(0, 1, num_random_variables*N) + randomVariable = np.resize(randomVariable, (N, num_random_variables)) + + np.savetxt('randomVariable.txt', randomVariable) + + evaluate_all_ensembles(1, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(8, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(16, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(32, randomVariable, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_MC_GS_direct_all_cases.py b/katoptron/CMAME/old_tests/plate_MC_GS_direct_all_cases.py new file mode 100644 index 0000000000000000000000000000000000000000..7019bce94e8a132f14b98fed594605458677c0e5 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_MC_GS_direct_all_cases.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""@package docstring +This test runs the four different cases as defined in table 2 of the paper +with a SIMPLE-GS-GS preconditioner. +""" +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def get_parameters(case_id, first_sample_id): + """ + This function returns the python dictionary that includes + the parameters for a given test case + """ + p = model.defaut_params + + if case_id == 1: + nuw = 128 + p['Correlation length'] = 20. + p['Dispersion level'] = 0.1 + elif case_id == 2: + nuw = 128 + p['Correlation length'] = 20. + p['Dispersion level'] = 0.3 + elif case_id == 3: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.1 + elif case_id == 4: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.3 + elif case_id == 5: + nuw = 128 + p['Correlation length'] = 2. + p['Dispersion level'] = 0.1 + elif case_id == 6: + nuw = 128 + p['Correlation length'] = 2. + p['Dispersion level'] = 0.3 + + p['Wavenumber cutoff'] = 8. + p['Wavenumber discretization points'] = nuw + p['Number Z of previously drawn samples'] = first_sample_id * nuw**2 + p['Number Phi of previously drawn samples'] = first_sample_id * nuw**2 + + p['MueLu xml file name'] = '/SIMPLE_GS_direct.xml' + p['MueLu xml template file name'] = '/../preconditioners/SIMPLE_gs_direct.xml.in' + p['MueLu xml params name'] = ['$BLOCK_00_STRIDING_INFO', '$BLOCK_11_STRIDING_INFO', + '$BLOCK_00_GS_sweeps', '$BLOCK_00_GS_damping', + '$SCHUR_omega', '$SimpleSmoother_damping'] + p['MueLu xml params'] = [ + '3', '3', '16', '1.8', '1', '1' + ] + + p['Is exp'] = False + p['gamma'] = 0. + return p + + +def evaluate_one_ensemble(ensemble_size, case_id, first_sample_id, msh, comm, + file_dir): + """ + This function evaluates one ensemble for a given test case + """ + work_dir = os.getcwd() + args = parseargs() + + p = get_parameters(case_id, first_sample_id) + + pm = model.plate_model(ensemble_size, np.array([0]), msh, comm, file_dir, + work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_sizes, case_ids, N, msh, comm, file_dir): + """ + This function loop over the test cases, the ensemble sizes, + and the ensembles + """ + for case_id in case_ids: + directory_case_id = 'case_' + str(case_id) + if not os.path.exists(directory_case_id): + os.makedirs(directory_case_id) + os.chdir(directory_case_id) + for ensemble_size in ensemble_sizes: + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N_ensemble = (N // ensemble_size) + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + first_sample_id = ensemble_index * ensemble_size + + evaluate_one_ensemble(ensemble_size, case_id, first_sample_id, + msh, comm, file_dir) + os.chdir('..') + os.chdir('..') + os.chdir('..') + + +def main(): + """ + This loads the mesh and define the case ids and ensemble sizes + """ + comm, rank, size = m.utilities.import_MPI() + + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.geo', 'plate_1_tmp', 'plate_2.geo', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + N = 96 + ensemble_sizes = [1, 8, 16, 32] + case_ids = [1, 2, 3, 4, 5, 6] + + evaluate_all_ensembles(ensemble_sizes, case_ids, N, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_MC_MG_all_cases.py b/katoptron/CMAME/old_tests/plate_MC_MG_all_cases.py new file mode 100644 index 0000000000000000000000000000000000000000..b31f9c5dca56f17403df33823b6a67eec7f222d6 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_MC_MG_all_cases.py @@ -0,0 +1,156 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""@package docstring +This test runs the four different cases as defined in table 2 of the paper +with a SIMPLE-GS-GS preconditioner. +""" + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def get_parameters(case_id, first_sample_id): + """ + This function returns the python dictionary that includes + the parameters for a given test case + """ + p = model.defaut_params + + if case_id == 0: + p['Is random'] = False + elif case_id == 1: + nuw = 128 + p['Correlation length'] = 20. + p['Dispersion level'] = 0.1 + elif case_id == 2: + nuw = 128 + p['Correlation length'] = 20. + p['Dispersion level'] = 0.3 + elif case_id == 3: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.1 + elif case_id == 4: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.3 + elif case_id == 5: + nuw = 128 + p['Correlation length'] = 2. + p['Dispersion level'] = 0.1 + elif case_id == 6: + nuw = 128 + p['Correlation length'] = 2. + p['Dispersion level'] = 0.3 + + if p['Is random'] == True: + p['Wavenumber cutoff'] = 8. + p['Wavenumber discretization points'] = nuw + p['Number Z of previously drawn samples'] = first_sample_id * nuw**2 + p['Number Phi of previously drawn samples'] = first_sample_id * nuw**2 + + p['MueLu xml file name'] = '/SIMPLE_MG.xml' + p['MueLu xml template file name'] = '/../preconditioners/SIMPLE_gs_direct_lvl.xml.in' + p['MueLu xml params name'] = ['$BLOCK_00_STRIDING_INFO', '$BLOCK_11_STRIDING_INFO', + '$BLOCK_00_GS_sweeps', '$BLOCK_00_GS_damping', + '$SCHUR_omega', '$SimpleSmoother_damping', "$N_LVLS", "$N_SIZES", "$EXPORT_DATA", "$SimpleSmoother_sweeps"] + p['MueLu xml params'] = [ + '3', '3', '3', '0.8', '0.8', '1', '2', '18', "true", '1' + ] + + p['Is exp'] = False + p['gamma'] = 0. + return p + + +def evaluate_one_ensemble(ensemble_size, case_id, first_sample_id, msh, comm, + file_dir): + """ + This function evaluates one ensemble for a given test case + """ + work_dir = os.getcwd() + args = parseargs() + + p = get_parameters(case_id, first_sample_id) + + pm = model.plate_model(ensemble_size, np.array([0]), msh, comm, file_dir, + work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_sizes, case_ids, N, msh, comm, file_dir): + """ + This function loop over the test cases, the ensemble sizes, + and the ensembles + """ + for case_id in case_ids: + directory_case_id = 'case_' + str(case_id) + if not os.path.exists(directory_case_id): + os.makedirs(directory_case_id) + os.chdir(directory_case_id) + for ensemble_size in ensemble_sizes: + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N_ensemble = (N // ensemble_size) + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + first_sample_id = ensemble_index * ensemble_size + + evaluate_one_ensemble(ensemble_size, case_id, first_sample_id, + msh, comm, file_dir) + os.chdir('..') + os.chdir('..') + os.chdir('..') + + +def main(): + """ + This loads the mesh and define the case ids and ensemble sizes + """ + comm, rank, size = m.utilities.import_MPI() + + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.geo', 'plate_1_tmp', 'plate_2.geo', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + deterministic = True + + if deterministic: + N = 1 + ensemble_sizes = [1] + case_ids = [0] + else: + N = 64 + ensemble_sizes = [1, 8, 16, 32] + case_ids = [1, 2, 3, 4, 5, 6] + + evaluate_all_ensembles(ensemble_sizes, case_ids, N, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_MC_MG_all_cases_2.py b/katoptron/CMAME/old_tests/plate_MC_MG_all_cases_2.py new file mode 100644 index 0000000000000000000000000000000000000000..7c90bac1a9d4e1c9986af47bea1a60697e9eeef4 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_MC_MG_all_cases_2.py @@ -0,0 +1,162 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""@package docstring +This test runs the four different cases as defined in table 2 of the paper +with a SIMPLE-GS-GS preconditioner. +""" + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def get_parameters(case_id, first_sample_id): + """ + This function returns the python dictionary that includes + the parameters for a given test case + """ + p = model.defaut_params + + if case_id == 0: + p['Is random'] = False + elif case_id == 1: + nuw = 128 + p['Correlation length'] = 20. + p['Dispersion level'] = 0.1 + elif case_id == 2: + nuw = 128 + p['Correlation length'] = 20. + p['Dispersion level'] = 0.3 + elif case_id == 3: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.1 + elif case_id == 4: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.3 + elif case_id == 5: + nuw = 128 + p['Correlation length'] = 2. + p['Dispersion level'] = 0.1 + elif case_id == 6: + nuw = 128 + p['Correlation length'] = 2. + p['Dispersion level'] = 0.3 + + if p['Is random'] == True: + p['Wavenumber cutoff'] = 8. + p['Wavenumber discretization points'] = nuw + p['Number Z of previously drawn samples'] = first_sample_id * nuw**2 + p['Number Phi of previously drawn samples'] = first_sample_id * nuw**2 + + p['MueLu xml file name'] = '/SIMPLE_MG.xml' + p['MueLu xml template file name'] = '/../../preconditioners/SIMPLE_gs_direct_lvl_MT.xml.in' + p['MueLu xml params name'] = [ + '$BLOCK_00_STRIDING_INFO', '$BLOCK_11_STRIDING_INFO', + '$BLOCK_00_GS_sweeps', '$BLOCK_00_GS_damping', '$SCHUR_omega', + '$SimpleSmoother_damping', "$N_LVLS", "$N_SIZES", "$EXPORT_DATA", + "$SimpleSmoother_sweeps" + ] + p['MueLu xml params'] = [ + '3', '3', '3', '0.8', '0.8', '1', '2', '18', "true", '1' + ] + + p['Is exp'] = False + #p['gamma'] = 0. + return p + + +def evaluate_one_ensemble(ensemble_size, case_id, first_sample_id, msh, comm, + file_dir): + """ + This function evaluates one ensemble for a given test case + """ + work_dir = os.getcwd() + args = parseargs() + + p = get_parameters(case_id, first_sample_id) + + pm = model.plate_model(ensemble_size, np.array([0]), msh, comm, file_dir, + work_dir, p) + pm.run() + + +def evaluate_all_ensembles(ensemble_sizes, case_ids, N, msh, comm, file_dir): + """ + This function loop over the test cases, the ensemble sizes, + and the ensembles + """ + for case_id in case_ids: + directory_case_id = 'case_' + str(case_id) + if not os.path.exists(directory_case_id): + os.makedirs(directory_case_id) + os.chdir(directory_case_id) + for ensemble_size in ensemble_sizes: + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N_ensemble = (N // ensemble_size) + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + first_sample_id = ensemble_index * ensemble_size + + evaluate_one_ensemble(ensemble_size, case_id, first_sample_id, + msh, comm, file_dir) + os.chdir('..') + os.chdir('..') + os.chdir('..') + + +def main(): + """ + This loads the mesh and define the case ids and ensemble sizes + """ + comm, rank, size = m.utilities.import_MPI() + + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.geo', 'plate_1_tmp', 'plate_2.geo', + 'plate_2_tmp', 'plate_fused', file_dir + '/../mesh', + work_dir, comm, rank, size) + + deterministic = False + + if deterministic: + N = 1 + ensemble_sizes = [1] + case_ids = [0] + else: + N = 64 + ensemble_sizes = [1, 8, 16, 32] + case_ids = [1, 2, 3, 4, 5, 6] + + nThreads = u.Initialize_Kokkos() + evaluate_all_ensembles(ensemble_sizes, case_ids, N, msh, comm, file_dir) + u.Finalize_Kokkos() + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_MC_NO_EP_case_1.py b/katoptron/CMAME/old_tests/plate_MC_NO_EP_case_1.py new file mode 100644 index 0000000000000000000000000000000000000000..b6cbaf524a89270bc961791b974a5dcc4cfaf544 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_MC_NO_EP_case_1.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_one_ensemble(ensemble_size, randomVariable, msh, comm, file_dir): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + p['MueLu xml from current_dir'] = False + p['MueLu xml use template'] = False + p['MueLu xml file name'] = '/../preconditioners/SIMPLE_direct.xml' + + p['Write txt files'] = True + p['Write matrix and vectors'] = True + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir): + + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N = randomVariable.shape[0] + N_ensemble = (N // ensemble_size) + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + evaluate_one_ensemble(ensemble_size, randomVariable[ensemble_index:( + ensemble_index+ensemble_size), :], msh, comm, file_dir) + + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2.msh', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + np.random.seed(42) + N = 32 + num_random_variables = 20 + randomVariable = np.random.normal(0, 1, num_random_variables*N) + randomVariable = np.resize(randomVariable, (N, num_random_variables)) + + np.savetxt('randomVariable.txt', randomVariable) + + evaluate_all_ensembles(1, randomVariable, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_MC_NO_EP_case_1_sp.py b/katoptron/CMAME/old_tests/plate_MC_NO_EP_case_1_sp.py new file mode 100644 index 0000000000000000000000000000000000000000..17fbd571975da088033fa4c70ed1e613694bb810 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_MC_NO_EP_case_1_sp.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_one_ensemble(ensemble_size, index, msh, comm, file_dir): + + work_dir = os.getcwd() + args = parseargs() + + nuw = 128 + + p = model.defaut_params + p["Correlation length"] = 5. + p["Wavenumber cutoff"] = 8. + p["Wavenumber discretization points"] = nuw + + p["Number Z of previously drawn samples"] = index*nuw**2 + p["Number Phi of previously drawn samples"] = index*nuw**2 + + p["Is exp"] = False + + pm = model.plate_model( + ensemble_size, [0.], msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_size, N, msh, comm, file_dir): + + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N_ensemble = (N // ensemble_size) + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + evaluate_one_ensemble( + ensemble_size, ensemble_index, msh, comm, file_dir) + + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2.msh', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + N = 2 + + evaluate_all_ensembles(1, N, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_MC_NO_EP_case_2.py b/katoptron/CMAME/old_tests/plate_MC_NO_EP_case_2.py new file mode 100644 index 0000000000000000000000000000000000000000..d1b1b4a2141b4b2378fd7a6ef588a297e19fe23e --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_MC_NO_EP_case_2.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_one_ensemble(ensemble_size, randomVariable, msh, comm, file_dir): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + p['MueLu xml from current_dir'] = False + p['MueLu xml use template'] = False + p['MueLu xml file name'] = '/../preconditioners/SIMPLE_direct.xml' + + p['Dispersion level'] = 0.3 + + p['Write txt files'] = True + p['Write matrix and vectors'] = True + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir): + + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N = randomVariable.shape[0] + N_ensemble = (N // ensemble_size) + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + evaluate_one_ensemble(ensemble_size, randomVariable[ensemble_index:( + ensemble_index+ensemble_size), :], msh, comm, file_dir) + + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2.msh', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + np.random.seed(42) + N = 32 + num_random_variables = 20 + randomVariable = np.random.normal(0, 1, num_random_variables*N) + randomVariable = np.resize(randomVariable, (N, num_random_variables)) + + np.savetxt('randomVariable.txt', randomVariable) + + evaluate_all_ensembles(1, randomVariable, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_MC_NO_EP_case_3.py b/katoptron/CMAME/old_tests/plate_MC_NO_EP_case_3.py new file mode 100644 index 0000000000000000000000000000000000000000..901fc84f1649892c674b8c6f599fc3f3e73cd7fe --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_MC_NO_EP_case_3.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_one_ensemble(ensemble_size, randomVariable, msh, comm, file_dir): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + p['MueLu xml from current_dir'] = False + p['MueLu xml use template'] = False + p['MueLu xml file name'] = '/../preconditioners/SIMPLE_direct.xml' + + p['Correlation length X'] = 5. + p['Correlation length Y'] = 5. + p['Number of KL Terms X'] = 15 + p['Number of KL Terms Y'] = 15 + + p['Write txt files'] = True + p['Write matrix and vectors'] = True + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir): + + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N = randomVariable.shape[0] + N_ensemble = (N // ensemble_size) + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + evaluate_one_ensemble(ensemble_size, randomVariable[ensemble_index:( + ensemble_index+ensemble_size), :], msh, comm, file_dir) + + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2.msh', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + np.random.seed(42) + N = 32 + num_random_variables = 105 + randomVariable = np.random.normal(0, 1, num_random_variables*N) + randomVariable = np.resize(randomVariable, (N, num_random_variables)) + + np.savetxt('randomVariable.txt', randomVariable) + + evaluate_all_ensembles(1, randomVariable, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_MC_NO_EP_case_4.py b/katoptron/CMAME/old_tests/plate_MC_NO_EP_case_4.py new file mode 100644 index 0000000000000000000000000000000000000000..e35f3a2ab75e7ffd99781d2fcc2e649c45ccc7d0 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_MC_NO_EP_case_4.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_one_ensemble(ensemble_size, randomVariable, msh, comm, file_dir): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + p['MueLu xml from current_dir'] = False + p['MueLu xml use template'] = False + p['MueLu xml file name'] = '/../preconditioners/SIMPLE_direct.xml' + + p['Correlation length X'] = 5. + p['Correlation length Y'] = 5. + p['Number of KL Terms X'] = 15 + p['Number of KL Terms Y'] = 15 + p['Dispersion level'] = 0.3 + + p['Write txt files'] = True + p['Write matrix and vectors'] = True + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir): + + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N = randomVariable.shape[0] + N_ensemble = (N // ensemble_size) + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + evaluate_one_ensemble(ensemble_size, randomVariable[ensemble_index:( + ensemble_index+ensemble_size), :], msh, comm, file_dir) + + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2.msh', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + np.random.seed(42) + N = 32 + num_random_variables = 105 + randomVariable = np.random.normal(0, 1, num_random_variables*N) + randomVariable = np.resize(randomVariable, (N, num_random_variables)) + + np.savetxt('randomVariable.txt', randomVariable) + + evaluate_all_ensembles(1, randomVariable, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_MC_direct_case_1.py b/katoptron/CMAME/old_tests/plate_MC_direct_case_1.py new file mode 100644 index 0000000000000000000000000000000000000000..dc5cebe5267b6b5b8ffc35c510c3cb3611dfb734 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_MC_direct_case_1.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_one_ensemble(ensemble_size, randomVariable, msh, comm, file_dir): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + p['MueLu xml from current_dir'] = False + p['MueLu xml use template'] = False + p['MueLu xml file name'] = '/../preconditioners/SIMPLE_direct.xml' + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir): + + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N = randomVariable.shape[0] + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + evaluate_one_ensemble(ensemble_size, randomVariable[ensemble_index:( + ensemble_index+ensemble_size), :], msh, comm, file_dir) + + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2.msh', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + np.random.seed(42) + N = 96 + num_random_variables = 20 + randomVariable = np.random.normal(0, 1, num_random_variables*N) + randomVariable = np.resize(randomVariable, (N, num_random_variables)) + + np.savetxt('randomVariable.txt', randomVariable) + + evaluate_all_ensembles(1, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(8, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(16, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(32, randomVariable, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_MC_direct_case_2.py b/katoptron/CMAME/old_tests/plate_MC_direct_case_2.py new file mode 100644 index 0000000000000000000000000000000000000000..e8f8366c416d86496694231a2d746a9d3488815d --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_MC_direct_case_2.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_one_ensemble(ensemble_size, randomVariable, msh, comm, file_dir): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + p['MueLu xml from current_dir'] = False + p['MueLu xml use template'] = False + p['MueLu xml file name'] = '/../preconditioners/SIMPLE_direct.xml' + + p['Dispersion level'] = 0.3 + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir): + + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N = randomVariable.shape[0] + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + evaluate_one_ensemble(ensemble_size, randomVariable[ensemble_index:( + ensemble_index+ensemble_size), :], msh, comm, file_dir) + + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2.msh', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + np.random.seed(42) + N = 96 + num_random_variables = 20 + randomVariable = np.random.normal(0, 1, num_random_variables*N) + randomVariable = np.resize(randomVariable, (N, num_random_variables)) + + np.savetxt('randomVariable.txt', randomVariable) + + evaluate_all_ensembles(1, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(8, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(16, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(32, randomVariable, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_MC_direct_case_3.py b/katoptron/CMAME/old_tests/plate_MC_direct_case_3.py new file mode 100644 index 0000000000000000000000000000000000000000..72d3dfd3095ae156baaf7e0e22e7d03b35709332 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_MC_direct_case_3.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_one_ensemble(ensemble_size, randomVariable, msh, comm, file_dir): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + p['MueLu xml from current_dir'] = False + p['MueLu xml use template'] = False + p['MueLu xml file name'] = '/../preconditioners/SIMPLE_direct.xml' + + p['Correlation length X'] = 10. + p['Correlation length Y'] = 10. + p['Number of KL Terms X'] = 15 + p['Number of KL Terms Y'] = 15 + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir): + + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N = randomVariable.shape[0] + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + evaluate_one_ensemble(ensemble_size, randomVariable[ensemble_index:( + ensemble_index+ensemble_size), :], msh, comm, file_dir) + + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2.msh', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + np.random.seed(42) + N = 96 + num_random_variables = 70 + randomVariable = np.random.normal(0, 1, num_random_variables*N) + randomVariable = np.resize(randomVariable, (N, num_random_variables)) + + np.savetxt('randomVariable.txt', randomVariable) + + evaluate_all_ensembles(1, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(8, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(16, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(32, randomVariable, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_MC_direct_case_4.py b/katoptron/CMAME/old_tests/plate_MC_direct_case_4.py new file mode 100644 index 0000000000000000000000000000000000000000..b3c8cb6ca1b424d82a53c16c64dc810931ddccf0 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_MC_direct_case_4.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_one_ensemble(ensemble_size, randomVariable, msh, comm, file_dir): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + p['MueLu xml from current_dir'] = False + p['MueLu xml use template'] = False + p['MueLu xml file name'] = '/../preconditioners/SIMPLE_direct.xml' + + p['Correlation length X'] = 10. + p['Correlation length Y'] = 10. + p['Number of KL Terms X'] = 15 + p['Number of KL Terms Y'] = 15 + p['Dispersion level'] = 0.3 + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir): + + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N = randomVariable.shape[0] + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + evaluate_one_ensemble(ensemble_size, randomVariable[ensemble_index:( + ensemble_index+ensemble_size), :], msh, comm, file_dir) + + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2.msh', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + np.random.seed(42) + N = 96 + num_random_variables = 70 + randomVariable = np.random.normal(0, 1, num_random_variables*N) + randomVariable = np.resize(randomVariable, (N, num_random_variables)) + + np.savetxt('randomVariable.txt', randomVariable) + + evaluate_all_ensembles(1, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(8, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(16, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(32, randomVariable, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_convergence_direct.py b/katoptron/CMAME/old_tests/plate_convergence_direct.py new file mode 100644 index 0000000000000000000000000000000000000000..e133243e9c203d0a399c723cef617fb1aef144fa --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_convergence_direct.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +from katoptron.eigenvalues import * +from katoptron.convergence import * +import os +import fwk + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + N = 32 + + k_max = 20 + + matrix_input_file_dir = file_dir + \ + '/../../workspace/katoptron_CMAME_tests_plate_MC_NO_EP/1/' + deltas_input_file_dir = file_dir + \ + '/../../workspace/katoptron_CMAME_tests_plate_deltas_omegas_direct/' + + for i in range(0, N): + timers = fwk.Timers() + + filename_Q = matrix_input_file_dir + str(i) + '/ApCTC_mm.txt' + filename_GT = matrix_input_file_dir + str(i) + '/B_mm.txt' + filename_f = matrix_input_file_dir + str(i) + '/b_mm_after_bc.txt' + + timers['Read files'].start() + Q = read_mm(filename_Q) + Q = get_symmetrical_part(Q) + GT = read_mm(filename_GT) + G = GT.transpose() + f = read_mm(filename_f, is_sparse=False) + A = create_block(Q, G, GT, None) + n = A.shape[0] + x0 = np.zeros((n,)) + b = np.zeros((n,)) + b[0:len(f)] = f + omegas = np.loadtxt(deltas_input_file_dir + + '/omegas_direct_direct_' + str(i) + '.txt') + n_omegas = len(omegas) + + tmp = np.loadtxt(deltas_input_file_dir + + '/deltas_direct_direct_' + str(i) + '.txt') + + deltas = np.zeros((n_omegas,), dtype=np.complex128) + deltas.real = tmp[:, 0] + deltas.imag = tmp[:, 1] + + timers['Read files'].stop() + print(timers) + + timers['Compute the convergence'].start() + convergence = compute_convergence( + k_max, n_omegas, omegas, deltas, A, b, x0, verbose=True) + timers['Compute the basconvergenceis'].stop() + print(timers) + + np.savetxt(work_dir+'/convergence_' + str(i) + '.txt', convergence) + + f = open('timers_' + str(i) + '.txt', 'w') + print(timers, file=f) + f.closed + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_correlation.py b/katoptron/CMAME/old_tests/plate_correlation.py new file mode 100644 index 0000000000000000000000000000000000000000..8ddb22f99a7cbd6342509ae99a77043ab3c7bc56 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_correlation.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_correlation(correlation, msh, comm, file_dir, ensemble_size=1): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + + N = ensemble_size + num_random_variables = 20 + randomVariable = np.zeros((N, num_random_variables)) + + nuw = 128 + p['Correlation length'] = correlation + p['Dispersion level'] = 0.1 + + p['Wavenumber cutoff'] = 8. + p['Wavenumber discretization points'] = nuw + p['Number Z of previously drawn samples'] = 0 + p['Number Phi of previously drawn samples'] = 0 + p['Is exp'] = False + + pm = model.plate_model(ensemble_size, randomVariable, msh, comm, file_dir, + work_dir, p) + pm.run(args.k) + + +def evaluate_all_correlation(correlations, msh, comm, file_dir): + + N = correlations.shape[0] + for i in range(0, N): + directory = str(i) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + for ensemble_size in [1, 8]: + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + evaluate_correlation( + correlations[i], msh, comm, file_dir, ensemble_size) + os.chdir('..') + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2.msh', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + N = 200 + correlation_min_exp = -1 + correlation_max_exp = np.log10(2) + + correlations = np.logspace( + correlation_min_exp, correlation_max_exp, N, endpoint=True) + + np.savetxt('correlations.txt', correlations) + + evaluate_all_correlation(correlations, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_deltas_omegas_GS.py b/katoptron/CMAME/old_tests/plate_deltas_omegas_GS.py new file mode 100644 index 0000000000000000000000000000000000000000..8ac06ecd6245230d32f0db90ae89faafa7141ffe --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_deltas_omegas_GS.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +from katoptron.eigenvalues import * +import os +import fwk + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + n_sweeps_Q = 10 + damp_Q = 1.6 + + n_sweeps_R = 10 + damp_R = 1.6 + + omega = 0.5 + + N = 32 + + input_file_dir = file_dir + '/../../workspace/katoptron_CMAME_tests_plate_MC_NO_EP/1/' + + sample_per_rank = np.ceil((N / siz)) + i_min = rank*sample_per_rank + i_max = i_min+sample_per_rank + + if i_min > N: + i_min = N + if i_max > N: + i_max = N + + i_min = int(i_min) + i_max = int(i_max) + + print('Rank ' + str(rank) + ' from sample ' + str(i_min) + ':' + str(i_max)) + + for i in range(i_min, i_max): + timers = fwk.Timers() + + filename_Q = input_file_dir + str(i) + '/ApCTC_mm.txt' + filename_GT = input_file_dir + str(i) + '/B_mm.txt' + filename_f = input_file_dir + str(i) + '/b_mm_after_bc.txt' + + timers['Read files'].start() + Q = read_mm(filename_Q) + Q = get_symmetrical_part(Q) + GT = read_mm(filename_GT) + G = GT.transpose() + f = read_mm(filename_f, is_sparse=False) + timers['Read files'].stop() + + timers['Compute R'].start() + R = approx_Schur_complement(Q, G, GT) + timers['Compute R'].stop() + + timers['Compute invR'].start() + invR = Gauss_Seidel(R, n=n_sweeps_R, damping=damp_R) + timers['Compute invR'].stop() + + print(timers) + + timers['Compute the inverse of Q'].start() + invQ = Gauss_Seidel(Q, n=n_sweeps_Q, damping=damp_Q) + timers['Compute the inverse of Q'].stop() + + print(timers) + + timers['Compute the preconditioned matrix'].start() + AinvP = SIMPLE_preconditioned_matrix( + Q, invQ, G, GT, R, invR, omega=omega) + timers['Compute the preconditioned matrix'].stop() + + print(timers) + + timers['Compute the basis'].start() + + n = Q.shape[0]+R.shape[0] + b = np.zeros((n,)) + b[0:len(f)] = f + + N = 2 + m_max = 6000 + V, W = compute_VW(AinvP, b, m=m_max, N=N) + timers['Compute the basis'].stop() + + print(timers) + + timers['Compute the eigenvalues'].start() + deltas, omegas = compute_deltas_omegas(V, W, b) + timers['Compute the eigenvalues'].stop() + + print(timers) + + timers['Write the eigenvalues'].start() + write_eigenvalues(deltas, work_dir+'/deltas_GS_GS_' + str(i) + '.txt') + np.savetxt(work_dir+'/omegas_GS_GS_' + str(i) + '.txt', omegas) + timers['Write the eigenvalues'].stop() + + f = open('timers_' + str(i) + '.txt', 'w') + print(timers, file=f) + f.closed + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_deltas_omegas_direct.py b/katoptron/CMAME/old_tests/plate_deltas_omegas_direct.py new file mode 100644 index 0000000000000000000000000000000000000000..1172faeeebefa0511fbb20357e3100cb69216a96 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_deltas_omegas_direct.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +from katoptron.eigenvalues import * +import os +import fwk + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + N = 32 + + input_file_dir = file_dir + '/../../workspace/katoptron_CMAME_tests_plate_MC_NO_EP/1/' + + sample_per_rank = np.ceil((N / siz)) + i_min = rank*sample_per_rank + i_max = (rank+1)*sample_per_rank + + if i_min > N: + i_min = N + if i_max > N: + i_max = N + + i_min = int(i_min) + i_max = int(i_max) + + for i in range(i_min, i_max): + timers = fwk.Timers() + + filename_Q = input_file_dir + str(i) + '/ApCTC_mm.txt' + filename_GT = input_file_dir + str(i) + '/B_mm.txt' + filename_f = input_file_dir + str(i) + '/b_mm_after_bc.txt' + + timers['Read files'].start() + Q = read_mm(filename_Q) + Q = get_symmetrical_part(Q) + GT = read_mm(filename_GT) + G = GT.transpose() + f = read_mm(filename_f, is_sparse=False) + timers['Read files'].stop() + + timers['Compute R'].start() + R = approx_Schur_complement(Q, G, GT) + timers['Compute R'].stop() + + timers['Compute invR'].start() + invR = compute_inv(R) + timers['Compute invR'].stop() + + print(timers) + + timers['Compute the inverse of Q'].start() + invQG = compute_inv_on_image(Q, G) + timers['Compute the inverse of Q'].stop() + + print(timers) + + timers['Compute the preconditioned matrix'].start() + AinvP = SIMPLE_prec(Q, invQG, G, GT, R, invR, True) + timers['Compute the preconditioned matrix'].stop() + + print(timers) + + timers['Compute the basis'].start() + + n = Q.shape[0]+R.shape[0] + b = np.zeros((n,)) + b[0:len(f)] = f + + N = 1 + V = compute_V(AinvP, b, m=0, N=N) + W = compute_W(AinvP, b, V, N=N) + + timers['Compute the basis'].stop() + + print(timers) + + timers['Compute the eigenvalues'].start() + deltas, omegas = compute_deltas_omegas(V, W, b) + timers['Compute the eigenvalues'].stop() + + print(timers) + + timers['Write the eigenvalues'].start() + write_eigenvalues(deltas, work_dir + + '/deltas_direct_direct_' + str(i) + '.txt') + np.savetxt(work_dir+'/omegas_direct_direct_' + str(i) + '.txt', omegas) + timers['Write the eigenvalues'].stop() + + f = open('timers_' + str(i) + '.txt', 'w') + print(timers, file=f) + f.closed + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_eigenvalues.py b/katoptron/CMAME/old_tests/plate_eigenvalues.py new file mode 100644 index 0000000000000000000000000000000000000000..7a05cca60a0b7eaf9998c8b242b92135b21c5831 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_eigenvalues.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +from katoptron.eigenvalues import * +import os +import fwk + + +def main(): + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + N = 32 + + input_file_dir = file_dir + '/../../workspace/katoptron_CMAME_tests_plate_MC_NO_EP/1/' + + i_min = 0 + i_max = N + + for i in range(i_min, i_max): + timers = fwk.Timers() + + filename_Q = input_file_dir + str(i) + '/ApCTC_mm.txt' + filename_GT = input_file_dir + str(i) + '/B_mm.txt' + + timers['Read files'].start() + Q = read_mm(filename_Q) + GT = read_mm(filename_GT) + G = GT.transpose() + timers['Read files'].stop() + + timers['Compute R'].start() + R = approx_Schur_complement(Q, G, GT) + timers['Compute R'].stop() + + print(timers) + + timers['Compute the inverse of Q'].start() + invQG = compute_inv_on_image(Q, G) + timers['Compute the inverse of Q'].stop() + + print(timers) + + timers['Compute the eigenvalues'].start() + v = eigenvalues_SR(invQG, G, GT, R, True) + timers['Compute the eigenvalues'].stop() + + print(timers) + + timers['Write the eigenvalues'].start() + write_eigenvalues( + v, work_dir+'/eigenvalues_direct_direct_' + str(i) + '.txt') + timers['Write the eigenvalues'].stop() + + f = open('timers_' + str(i) + '.txt', 'w') + print(timers, file=f) + f.closed + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_eigenvalues_gamma.py b/katoptron/CMAME/old_tests/plate_eigenvalues_gamma.py new file mode 100644 index 0000000000000000000000000000000000000000..ff8a16ee70b62bb3f79a967709561ee03db6cc9d --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_eigenvalues_gamma.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +from katoptron.eigenvalues import * +import os +import fwk + +from scipy.sparse import eye + + +def main(): + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + N = 200 + gamma_min_exp = -2 + gamma_max_exp = 10 + + gammas = np.logspace(gamma_min_exp, gamma_max_exp, N, endpoint=True) + + input_file_dir = file_dir + '/../../workspace/katoptron_CMAME_tests_plate_MC_NO_EP/1/' + + filename_K = input_file_dir + '0/A_mm_after_bc.txt' + filename_GT = input_file_dir + '0/B_mm.txt' + + K = read_mm(filename_K) + GT = read_mm(filename_GT) + G = GT.transpose() + + for i in range(0, N): + timers = fwk.Timers() + + Q = K + gammas[i] * G * GT + + timers['Compute R'].start() + R = approx_Schur_complement(Q, G, GT) + timers['Compute R'].stop() + + print(timers) + + timers['Compute the inverse of Q'].start() + invQG = compute_inv_on_image(Q, G) + timers['Compute the inverse of Q'].stop() + + print(timers) + + timers['Compute the eigenvalues'].start() + v = eigenvalues_SR(invQG, G, GT, R, True) + timers['Compute the eigenvalues'].stop() + + print(timers) + + timers['Write the eigenvalues'].start() + write_eigenvalues( + v, work_dir+'/eigenvalues_direct_direct_' + str(i) + '.txt') + timers['Write the eigenvalues'].stop() + + f = open('timers_' + str(i) + '.txt', 'w') + print(timers, file=f) + f.closed + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_extended.py b/katoptron/CMAME/old_tests/plate_extended.py new file mode 100644 index 0000000000000000000000000000000000000000..1330383146f5d00d3a89862c52727feed2e4163c --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_extended.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def main(): + + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2_extended.msh', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + np.random.seed(42) + N = 1 + num_random_variables = 20 + #randomVariable = np.random.normal(0, 1, num_random_variables*N) + #randomVariable = np.resize(randomVariable,(N,num_random_variables)) + randomVariable = np.zeros((N, num_random_variables)) + + p = model.defaut_params + p['MueLu xml from current_dir'] = False + p['MueLu xml use template'] = False + p['MueLu xml file name'] = '/../preconditioners/SIMPLE_direct.xml' + + ensemble_size = 1 + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_mean_gamma.py b/katoptron/CMAME/old_tests/plate_mean_gamma.py new file mode 100644 index 0000000000000000000000000000000000000000..5b4324bcbbb04f74325b954ffef137f121f6bccc --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_mean_gamma.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_gamma(gamma, msh, comm, file_dir, ensemble_size=1): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + p['gamma'] = gamma + + N = ensemble_size + num_random_variables = 20 + randomVariable = np.zeros((N, num_random_variables)) + if ensemble_size is not 1: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.1 + + p['Wavenumber cutoff'] = 8. + p['Wavenumber discretization points'] = nuw + p['Number Z of previously drawn samples'] = 0 + p['Number Phi of previously drawn samples'] = 0 + p['Is exp'] = False + + pm = model.plate_model(ensemble_size, randomVariable, msh, comm, file_dir, + work_dir, p) + pm.run(args.k) + + +def evaluate_all_gamma(gammas, msh, comm, file_dir): + + N = gammas.shape[0] + for i in range(0, N): + directory = str(i) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + for ensemble_size in [1, 8]: + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + evaluate_gamma(gammas[i], msh, comm, file_dir, ensemble_size) + os.chdir('..') + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2.msh', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + N = 200 + gamma_min_exp = -2 + gamma_max_exp = 10 + + gammas = np.logspace(gamma_min_exp, gamma_max_exp, N, endpoint=True) + + np.savetxt('gammas.txt', gammas) + + evaluate_all_gamma(gammas, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_mean_prec.py b/katoptron/CMAME/old_tests/plate_mean_prec.py new file mode 100644 index 0000000000000000000000000000000000000000..69e0663ecdda95b050249c4b1a9d76974fffceaa --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_mean_prec.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_prec(msh, comm, file_dir, muelu_xml): + + work_dir = os.getcwd() + + p = model.defaut_params + p['MueLu xml use template'] = False + + N = 1 + num_random_variables = 20 + randomVariable = np.zeros((N, num_random_variables)) + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +def evaluate_all_prec(msh, comm, file_dir, muelu_xml_in, prec_params): + + N = prec_params.shape[0] + + for i in range(0, N): + directory = str(i) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + current_dir = os.getcwd() + + old_strings = ['$BLOCK_00_STRIDING_INFO', '$BLOCK_11_STRIDING_INFO', + '$BLOCK_00_GS_sweeps', '$BLOCK_11_GS_sweeps', + '$BLOCK_00_GS_damping', '$BLOCK_11_GS_damping', + '$SCHUR_omega', '$SimpleSmoother_damping'] + new_strings = ['3', '3', str(int(prec_params[i, 0])), str(int(prec_params[i, 1])), str( + prec_params[i, 2]), str(prec_params[i, 3]), str(prec_params[i, 4]), str(prec_params[i, 5])] + + u.replace_strings(muelu_xml_in, current_dir + + '/SIMPLE_gs.xml', old_strings, new_strings) + + evaluate_prec(msh, comm, file_dir, current_dir+'/SIMPLE_gs.xml') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2.msh', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + muelu_xml_in = file_dir + '/../preconditioners/SIMPLE_gs.xml.in' + + N_GS_sweeps_00 = 1 + N_GS_sweeps_11 = 1 + N_GS_damping_00 = 6 + N_GS_damping_11 = 6 + N_SS_omega = 6 + N_SS_damping = 6 + + GS_sweeps_00_min = 10 + GS_sweeps_00_max = 11 + + GS_sweeps_11_min = 10 + GS_sweeps_11_max = 11 + + GS_damping_00_min = 0.9 + GS_damping_00_max = 1.5 + + GS_damping_11_min = 0.9 + GS_damping_11_max = 1.5 + + SS_omega_min = 0.7 + SS_omega_max = 1.1 + + SS_damping_min = 0.8 + SS_damping_max = 1.2 + + sweeps_00 = np.arange(GS_sweeps_00_min, GS_sweeps_00_max, N_GS_sweeps_00) + sweeps_11 = np.arange(GS_sweeps_11_min, GS_sweeps_11_max, N_GS_sweeps_11) + damping_00_min = np.linspace( + GS_damping_00_min, GS_damping_00_max, N_GS_damping_00) + damping_11_min = np.linspace( + GS_damping_11_min, GS_damping_11_max, N_GS_damping_11) + SS_omega = np.linspace(SS_omega_min, SS_omega_max, N_SS_omega) + SS_damping = np.linspace(SS_damping_min, SS_damping_max, N_SS_damping) + + N = N_GS_sweeps_00 * N_GS_sweeps_11 * N_GS_damping_00 * \ + N_GS_damping_11 * N_SS_omega * N_SS_damping + + prec_params = np.zeros((N, 6)) + + i = 0 + + for i_0 in range(0, N_GS_sweeps_00): + for i_1 in range(0, N_GS_sweeps_11): + for i_2 in range(0, N_GS_damping_00): + for i_3 in range(0, N_GS_damping_11): + for i_4 in range(0, N_SS_omega): + for i_5 in range(0, N_SS_damping): + prec_params[i, :] = [sweeps_00[i_0], sweeps_11[i_1], damping_00_min[i_2], + damping_11_min[i_3], SS_omega[i_4], SS_damping[i_5]] + i = i + 1 + + np.savetxt('prec_params.txt', prec_params) + + evaluate_all_prec(msh, comm, file_dir, muelu_xml_in, prec_params) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_mean_prec_GS_direct.py b/katoptron/CMAME/old_tests/plate_mean_prec_GS_direct.py new file mode 100644 index 0000000000000000000000000000000000000000..0e35fc87bae80870d35ef46dacc225d16ad3f182 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_mean_prec_GS_direct.py @@ -0,0 +1,196 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_prec(msh, comm, file_dir, muelu_xml, ensemble_size=1): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + p['MueLu xml use template'] = False + p['MueLu xml from current_dir'] = True + p['MueLu xml file name'] = '/../SIMPLE_gs_direct.xml' + p['gamma'] = 0. + + N = ensemble_size + num_random_variables = 20 + randomVariable = np.zeros((N, num_random_variables)) + if ensemble_size is not 1: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.1 + + p['Wavenumber cutoff'] = 8. + p['Wavenumber discretization points'] = nuw + p['Number Z of previously drawn samples'] = 0 + p['Number Phi of previously drawn samples'] = 0 + p['Is exp'] = False + + pm = model.plate_model(ensemble_size, randomVariable, msh, comm, file_dir, + work_dir, p) + pm.run(args.k) + + +def evaluate_all_prec(msh, comm, file_dir, muelu_xml_in, prec_params): + + N = prec_params.shape[0] + + for i in range(0, N): + directory = str(i) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + current_dir = os.getcwd() + + old_strings = ['$BLOCK_00_STRIDING_INFO', '$BLOCK_11_STRIDING_INFO', + '$BLOCK_00_GS_sweeps', '$BLOCK_00_GS_damping', + '$SCHUR_omega', '$SimpleSmoother_damping'] + new_strings = [ + '3', '3', + str(int(prec_params[i, 0])), + str(prec_params[i, 1]), + str(prec_params[i, 2]), + str(prec_params[i, 3]) + ] + + print(muelu_xml_in) + u.replace_strings(muelu_xml_in, current_dir + '/SIMPLE_gs_direct.xml', + old_strings, new_strings) + print(current_dir + '/SIMPLE_gs_direct.xml') + + directory = 'mean_case' + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + evaluate_prec(msh, comm, file_dir, + current_dir + '/SIMPLE_gs_direct.xml') + os.chdir('..') + + for ensemble_size in [8]: + directory = 'ensemble_reduction_' + str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + evaluate_prec(msh, + comm, + file_dir, + current_dir + '/SIMPLE_gs_direct.xml', + ensemble_size=ensemble_size) + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2.msh', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + muelu_xml_in = file_dir + '/../preconditioners/SIMPLE_gs_direct.xml.in' + + GS_sweeps_00_min = 16 + GS_sweeps_00_max = 41 + delta_GS_sweeps_00 = 2 + + N_GS_sweeps_00 = int( + np.ceil( + ((GS_sweeps_00_max - GS_sweeps_00_min * 1.) / delta_GS_sweeps_00))) + + # Damping has to be between 0 and 2 + GS_damping_00_min = 0.001 + GS_damping_00_max = 1.999 + N_GS_damping_00 = 20 + + # Omega has to be between 0 and 1 + SS_omega_min = 1. + SS_omega_max = 1.2 + N_SS_omega = 1 + + SS_damping_min = 1. + SS_damping_max = 1.2 + N_SS_damping = 1 + + sweeps_00 = np.arange(GS_sweeps_00_min, GS_sweeps_00_max, + delta_GS_sweeps_00) + damping_00 = np.linspace(GS_damping_00_min, GS_damping_00_max, + N_GS_damping_00) + SS_omega = np.linspace(SS_omega_min, SS_omega_max, N_SS_omega) + SS_damping = np.linspace(SS_damping_min, SS_damping_max, N_SS_damping) + + N = N_GS_sweeps_00 * N_GS_damping_00 * N_SS_omega * N_SS_damping + ''' + N = 12 + + prec_params = np.array([[8, 1.75, 0.46363636363636374, 1.], + [10, 1.75, 0.3545454545454546, 1.], + [12, 1.75, 0.390909090909091, 1.], + [14, 1.8045454545454545, 0.42727272727272736, 1.], + [16, 1.8227272727272728, 0.42727272727272736, 1.], + [18, 1.8045454545454545, 0.3545454545454546, 1.], + [20, 1.8227272727272728, 0.390909090909091, 1.], + [22, 1.8227272727272728, 0.390909090909091, 1.], + [24, 1.8590909090909091, 0.390909090909091, 1.], + [26, 1.8590909090909091, 0.3545454545454546, 1.], + [28, 1.8590909090909091, 0.3545454545454546, 1.], + [30, 1.8772727272727272, 0.390909090909091, 1.]]) + + ''' + prec_params = np.zeros((N, 4)) + + i = 0 + + for i_0 in range(0, N_GS_sweeps_00): + for i_1 in range(0, N_GS_damping_00): + for i_2 in range(0, N_SS_omega): + for i_3 in range(0, N_SS_damping): + prec_params[i, :] = [ + sweeps_00[i_0], damping_00[i_1], SS_omega[i_2], + SS_damping[i_3] + ] + i = i + 1 + + np.savetxt('prec_params.txt', prec_params) + + evaluate_all_prec(msh, comm, file_dir, muelu_xml_in, prec_params) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_mean_prec_GS_direct_lvl.py b/katoptron/CMAME/old_tests/plate_mean_prec_GS_direct_lvl.py new file mode 100644 index 0000000000000000000000000000000000000000..4b4b46e3653857f8a376983c7fd2328c72525e26 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_mean_prec_GS_direct_lvl.py @@ -0,0 +1,197 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_prec(msh, comm, file_dir, muelu_xml, ensemble_size=1): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + p['MueLu xml use template'] = False + p['MueLu xml from current_dir'] = True + p['MueLu xml file name'] = '/../SIMPLE_gs_direct.xml' + #p['gamma'] = 0. + + N = ensemble_size + num_random_variables = 20 + randomVariable = np.zeros((N, num_random_variables)) + if ensemble_size is not 1: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.1 + + p['Wavenumber cutoff'] = 8. + p['Wavenumber discretization points'] = nuw + p['Number Z of previously drawn samples'] = 0 + p['Number Phi of previously drawn samples'] = 0 + p['Is exp'] = False + + pm = model.plate_model(ensemble_size, randomVariable, msh, comm, file_dir, + work_dir, p) + pm.run(args.k) + + +def evaluate_all_prec(msh, comm, file_dir, muelu_xml_in, prec_params): + + N = prec_params.shape[0] + + for i in range(0, N): + directory = str(i) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + current_dir = os.getcwd() + + old_strings = ['$BLOCK_00_STRIDING_INFO', '$BLOCK_11_STRIDING_INFO', + '$BLOCK_00_GS_sweeps', '$BLOCK_00_GS_damping', + '$SCHUR_omega', '$SimpleSmoother_damping', "$N_LVLS"] + new_strings = [ + '3', '3', + str(int(prec_params[i, 0])), + str(prec_params[i, 1]), + str(prec_params[i, 2]), + str(prec_params[i, 3]), + '2' + ] + + print(muelu_xml_in) + u.replace_strings(muelu_xml_in, current_dir + '/SIMPLE_gs_direct.xml', + old_strings, new_strings) + print(current_dir + '/SIMPLE_gs_direct.xml') + + directory = 'mean_case' + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + evaluate_prec(msh, comm, file_dir, + current_dir + '/SIMPLE_gs_direct.xml') + os.chdir('..') + + for ensemble_size in [8]: + directory = 'ensemble_reduction_' + str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + evaluate_prec(msh, + comm, + file_dir, + current_dir + '/SIMPLE_gs_direct.xml', + ensemble_size=ensemble_size) + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2.msh', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + muelu_xml_in = file_dir + '/../preconditioners/SIMPLE_gs_direct_lvl.xml.in' + + GS_sweeps_00_min = 6 + GS_sweeps_00_max = 7 + delta_GS_sweeps_00 = 1 + + N_GS_sweeps_00 = int( + np.ceil( + ((GS_sweeps_00_max - GS_sweeps_00_min * 1.) / delta_GS_sweeps_00))) + + # Damping has to be between 0 and 2 + GS_damping_00_min = 0.01 + GS_damping_00_max = 1.99 + N_GS_damping_00 = 8 + + # Omega has to be between 0 and 1 + SS_omega_min = 0.5 + SS_omega_max = 1. + N_SS_omega = 8 + + SS_damping_min = 1. + SS_damping_max = 1. + N_SS_damping = 1 + + sweeps_00 = np.arange(GS_sweeps_00_min, GS_sweeps_00_max, + delta_GS_sweeps_00) + damping_00 = np.linspace(GS_damping_00_min, GS_damping_00_max, + N_GS_damping_00) + SS_omega = np.linspace(SS_omega_min, SS_omega_max, N_SS_omega) + SS_damping = np.linspace(SS_damping_min, SS_damping_max, N_SS_damping) + + N = N_GS_sweeps_00 * N_GS_damping_00 * N_SS_omega * N_SS_damping + ''' + N = 12 + + prec_params = np.array([[8, 1.75, 0.46363636363636374, 1.], + [10, 1.75, 0.3545454545454546, 1.], + [12, 1.75, 0.390909090909091, 1.], + [14, 1.8045454545454545, 0.42727272727272736, 1.], + [16, 1.8227272727272728, 0.42727272727272736, 1.], + [18, 1.8045454545454545, 0.3545454545454546, 1.], + [20, 1.8227272727272728, 0.390909090909091, 1.], + [22, 1.8227272727272728, 0.390909090909091, 1.], + [24, 1.8590909090909091, 0.390909090909091, 1.], + [26, 1.8590909090909091, 0.3545454545454546, 1.], + [28, 1.8590909090909091, 0.3545454545454546, 1.], + [30, 1.8772727272727272, 0.390909090909091, 1.]]) + + ''' + prec_params = np.zeros((N, 4)) + + i = 0 + + for i_0 in range(0, N_GS_sweeps_00): + for i_1 in range(0, N_GS_damping_00): + for i_2 in range(0, N_SS_omega): + for i_3 in range(0, N_SS_damping): + prec_params[i, :] = [ + sweeps_00[i_0], damping_00[i_1], SS_omega[i_2], + SS_damping[i_3] + ] + i = i + 1 + + np.savetxt('prec_params.txt', prec_params) + + evaluate_all_prec(msh, comm, file_dir, muelu_xml_in, prec_params) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_mean_prec_GS_direct_opti.py b/katoptron/CMAME/old_tests/plate_mean_prec_GS_direct_opti.py new file mode 100644 index 0000000000000000000000000000000000000000..b48d802ef3254ace083d5c21ef7526c7f9e96661 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_mean_prec_GS_direct_opti.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u +from katoptron.readers import * + + +def f(x): + import sys + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + orig_stdout = sys.stdout + sys.stdout = open('file', 'w') + file_dir = os.path.dirname(__file__) + muelu_xml_in = file_dir + '/../preconditioners/SIMPLE_gs_direct.xml.in' + + directory = 'tmp' + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + N = 8 + + current_dir = os.getcwd() + + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2.msh', + 'plate_2_tmp', 'plate_fused', file_dir, current_dir) + + old_strings = ['$BLOCK_00_STRIDING_INFO', '$BLOCK_11_STRIDING_INFO', + '$BLOCK_00_GS_sweeps', '$BLOCK_00_GS_damping', + '$SCHUR_omega', '$SimpleSmoother_damping'] + new_strings = ['3', '3', str(N), str(x[0]), str(x[1]), '0'] + + u.replace_strings(muelu_xml_in, current_dir + + '/SIMPLE_gs_direct.xml', old_strings, new_strings) + + evaluate_prec(msh, comm, file_dir, current_dir+'/SIMPLE_gs_direct.xml') + + iter_indices, residuals = read_Belos(current_dir+'/belos_out.txt', 1) + os.chdir('..') + sys.stdout.close() + sys.stdout = orig_stdout + return iter_indices[-1] + + +def fp(x): + epsi = 1e-5 + jaco = np.zeros((2, 1)) + jaco[0] = ((f(x+epsi*np.array([1, 0])) - + f(x-epsi*np.array([1, 0]))) / (2*epsi)) + jaco[1] = ((f(x+epsi*np.array([0, 1])) - + f(x-epsi*np.array([0, 1]))) / (2*epsi)) + return jaco + + +def evaluate_prec(msh, comm, file_dir, muelu_xml, ensemble_size=1): + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + p['MueLu xml use template'] = False + p['MueLu xml file name'] = '/SIMPLE_gs_direct.xml' + + N = ensemble_size + num_random_variables = 20 + randomVariable = np.zeros((N, num_random_variables)) + if ensemble_size is not 1: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.1 + + p['Wavenumber cutoff'] = 8. + p['Wavenumber discretization points'] = nuw + p['Number Z of previously drawn samples'] = 0 + p['Number Phi of previously drawn samples'] = 0 + p['Is exp'] = False + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +def main(): + from scipy import optimize + import numpy as np + + x0 = np.array([1.7, 0.5]) + bnds = ((1., 2.), (0., 1.)) + xopt = optimize.minimize(f, x0, jac=fp, bounds=bnds, options={ + 'maxiter': 200, 'disp': 1}) + + print(xopt) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_vd_Direct_200.py b/katoptron/CMAME/old_tests/plate_vd_Direct_200.py new file mode 100644 index 0000000000000000000000000000000000000000..5af82db3eddf093fa8e6c90de1c182bd4247817d --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_vd_Direct_200.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + + + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_one_ensemble(ensemble_size, randomVariable, msh, comm, file_dir): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + p['MueLu xml from current_dir'] = False + p['MueLu xml use template'] = False + p['MueLu xml file name'] = '/../preconditioners/SIMPLE_direct.xml' + p['Dispersion level'] = 0.1 + p['gamma'] = 0. + p['inner clamped'] = True + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir): + + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N = randomVariable.shape[0] + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + evaluate_one_ensemble(ensemble_size, randomVariable[ensemble_index:( + ensemble_index+ensemble_size), :], msh, comm, file_dir) + + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.geo', 'plate_1_tmp', 'plate_2.geo', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + np.random.seed(42) + N = 8 + num_random_variables = 200 + randomVariable = np.random.normal(0, 1, num_random_variables*N) + randomVariable = np.resize(randomVariable, (N, num_random_variables)) + + np.savetxt('randomVariable.txt', randomVariable) + + evaluate_all_ensembles(1, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(8, randomVariable, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_vd_Direct_3.py b/katoptron/CMAME/old_tests/plate_vd_Direct_3.py new file mode 100644 index 0000000000000000000000000000000000000000..27ca8e1e8307ea136bad616bdcdec5af02bcf59b --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_vd_Direct_3.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + + + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_one_ensemble(ensemble_size, randomVariable, msh, comm, file_dir): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + p['MueLu xml from current_dir'] = False + p['MueLu xml use template'] = False + p['MueLu xml file name'] = '/../preconditioners/SIMPLE_direct.xml' + p['Dispersion level'] = 0.1 + p['gamma'] = 0. + p['inner clamped'] = True + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir): + + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N = randomVariable.shape[0] + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + evaluate_one_ensemble(ensemble_size, randomVariable[ensemble_index:( + ensemble_index+ensemble_size), :], msh, comm, file_dir) + + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.geo', 'plate_1_tmp', 'plate_2.geo', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + np.random.seed(42) + N = 8 + num_random_variables = 3 + randomVariable = np.random.normal(0, 1, num_random_variables*N) + randomVariable = np.resize(randomVariable, (N, num_random_variables)) + + np.savetxt('randomVariable.txt', randomVariable) + + evaluate_all_ensembles(1, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(8, randomVariable, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_vd_GS_200.py b/katoptron/CMAME/old_tests/plate_vd_GS_200.py new file mode 100644 index 0000000000000000000000000000000000000000..eee345c867c99ade9aac6def6e64bbd8c3d2ac41 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_vd_GS_200.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + + + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_one_ensemble(ensemble_size, randomVariable, msh, comm, file_dir): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + p['Dispersion level'] = 0.1 + p['gamma'] = 0. + p['inner clamped'] = True + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir): + + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N = randomVariable.shape[0] + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + evaluate_one_ensemble(ensemble_size, randomVariable[ensemble_index:( + ensemble_index+ensemble_size), :], msh, comm, file_dir) + + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.geo', 'plate_1_tmp', 'plate_2.geo', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + np.random.seed(42) + N = 8 + num_random_variables = 200 + randomVariable = np.random.normal(0, 1, num_random_variables*N) + randomVariable = np.resize(randomVariable, (N, num_random_variables)) + + pert = 1e-2 + randomVariable = np.zeros((N, num_random_variables)) + randomVariable[0, :] = np.random.normal(0, 1, num_random_variables) + for i in range(1, N): + randomVariable[i, :] = randomVariable[0, :] + pert * \ + np.random.uniform(-1, 1, num_random_variables) + + np.savetxt('randomVariable.txt', randomVariable) + + evaluate_all_ensembles(1, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(8, randomVariable, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_vd_GS_200_with_gamma.py b/katoptron/CMAME/old_tests/plate_vd_GS_200_with_gamma.py new file mode 100644 index 0000000000000000000000000000000000000000..d38b5905ac24b656f1ff58d4b50b9082e9be382d --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_vd_GS_200_with_gamma.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + + + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_one_ensemble(ensemble_size, randomVariable, msh, comm, file_dir): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + p['Dispersion level'] = 0.1 + p['inner clamped'] = True + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir): + + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N = randomVariable.shape[0] + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + evaluate_one_ensemble(ensemble_size, randomVariable[ensemble_index:( + ensemble_index+ensemble_size), :], msh, comm, file_dir) + + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.geo', 'plate_1_tmp', 'plate_2.geo', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + np.random.seed(42) + N = 8 + num_random_variables = 200 + randomVariable = np.random.normal(0, 1, num_random_variables*N) + randomVariable = np.resize(randomVariable, (N, num_random_variables)) + + pert = 1e-2 + randomVariable = np.zeros((N, num_random_variables)) + randomVariable[0, :] = np.random.normal(0, 1, num_random_variables) + for i in range(1, N): + randomVariable[i, :] = randomVariable[0, :] + pert * \ + np.random.uniform(-1, 1, num_random_variables) + + np.savetxt('randomVariable.txt', randomVariable) + + evaluate_all_ensembles(1, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(8, randomVariable, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_vd_GS_3.py b/katoptron/CMAME/old_tests/plate_vd_GS_3.py new file mode 100644 index 0000000000000000000000000000000000000000..a52659a9f4bf5845666566d0d49d643386faa4ba --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_vd_GS_3.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + + + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_one_ensemble(ensemble_size, randomVariable, msh, comm, file_dir): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + p['Dispersion level'] = 0.1 + #p['gamma'] = '{4663653.515942637,5000307.969231523,5125491.581727843,4650754.5340228975,4802461.555172057,4330669.2615991,4289095.323914186,4521634.142120181}' + p['MueLu xml template file name'] = '/../preconditioners/SIMPLE_gs_direct.xml.in' + p['MueLu xml params name'] = ['$BLOCK_00_STRIDING_INFO', '$BLOCK_11_STRIDING_INFO', + '$BLOCK_00_GS_sweeps', '$BLOCK_00_GS_damping', + '$SCHUR_omega', '$SimpleSmoother_damping'] + p['MueLu xml params'] = ['3', '3', '100', '1.75', '0.05', '1.'] + + #p['inner clamped'] = True + + #p['Write txt files'] = True + #p['Write matrix and vectors'] = True + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir): + + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N = randomVariable.shape[0] + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + evaluate_one_ensemble(ensemble_size, randomVariable[ensemble_index:( + ensemble_index+ensemble_size), :], msh, comm, file_dir) + + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.geo', 'plate_1_tmp', 'plate_2.geo', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + np.random.seed(42) + N = 8 + num_random_variables = 3 + randomVariable = np.random.normal(0, 1, num_random_variables*N) + randomVariable = np.resize(randomVariable, (N, num_random_variables)) + + np.savetxt('randomVariable.txt', randomVariable) + + evaluate_all_ensembles(1, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(8, randomVariable, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_vd_GS_3_with_gamma.py b/katoptron/CMAME/old_tests/plate_vd_GS_3_with_gamma.py new file mode 100644 index 0000000000000000000000000000000000000000..ed1538f676c24c7b5a3c454aae99324275e718b6 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_vd_GS_3_with_gamma.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + + + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_one_ensemble(ensemble_size, randomVariable, msh, comm, file_dir): + + work_dir = os.getcwd() + args = parseargs() + + p = model.defaut_params + p['Dispersion level'] = 0.1 + p['inner clamped'] = True + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + +def evaluate_all_ensembles(ensemble_size, randomVariable, msh, comm, file_dir): + + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N = randomVariable.shape[0] + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + evaluate_one_ensemble(ensemble_size, randomVariable[ensemble_index:( + ensemble_index+ensemble_size), :], msh, comm, file_dir) + + os.chdir('..') + + os.chdir('..') + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.geo', 'plate_1_tmp', 'plate_2.geo', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + np.random.seed(42) + N = 8 + num_random_variables = 3 + randomVariable = np.random.normal(0, 1, num_random_variables*N) + randomVariable = np.resize(randomVariable, (N, num_random_variables)) + + np.savetxt('randomVariable.txt', randomVariable) + + evaluate_all_ensembles(1, randomVariable, msh, comm, file_dir) + evaluate_all_ensembles(8, randomVariable, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/old_tests/plate_vd_conf.py b/katoptron/CMAME/old_tests/plate_vd_conf.py new file mode 100644 index 0000000000000000000000000000000000000000..90d65d7a12e87375f2e4d0e4436bb3d6bfc36e76 --- /dev/null +++ b/katoptron/CMAME/old_tests/plate_vd_conf.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def main(): + + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.msh', 'plate_1_tmp', 'plate_2.msh', + 'plate_2_tmp', 'plate_fused', file_dir, work_dir) + + directory = str(1) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + np.random.seed(42) + N = 1 + num_random_variables = 20 + #randomVariable = np.random.normal(0, 1, num_random_variables*N) + #randomVariable = np.resize(randomVariable,(N,num_random_variables)) + randomVariable = np.zeros((N, num_random_variables)) + + p = model.defaut_params + p['MueLu xml from current_dir'] = False + p['MueLu xml use template'] = False + p['MueLu xml file name'] = '/../preconditioners/SIMPLE_direct.xml' + p['Write txt files'] = True + p['Write matrix and vectors'] = True + p['gamma'] = 100. + + ensemble_size = 1 + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + os.chdir('..') + + directory = str(2) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + np.random.seed(42) + N = 1 + num_random_variables = 20 + #randomVariable = np.random.normal(0, 1, num_random_variables*N) + #randomVariable = np.resize(randomVariable,(N,num_random_variables)) + randomVariable = np.zeros((N, num_random_variables)) + + p = model.defaut_params + p['MueLu xml from current_dir'] = False + p['MueLu xml use template'] = False + p['MueLu xml file name'] = '/../preconditioners/SIMPLE_direct.xml' + p['Write txt files'] = True + p['Write matrix and vectors'] = True + p['gamma'] = 4368992. + + ensemble_size = 1 + + pm = model.plate_model(ensemble_size, randomVariable, + msh, comm, file_dir, work_dir, p) + pm.run(args.k) + + os.chdir('..') + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/plate_SPD/blake.slurm.sh b/katoptron/CMAME/plate_SPD/blake.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..122ec86a3e7dfd973ab8df41dc0a12d61a4521b8 --- /dev/null +++ b/katoptron/CMAME/plate_SPD/blake.slurm.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=plate +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/plate.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_PLACE_THREADS=24c,2t +export KMP_AFFINITY=compact + +python run.py -k ${OMP_NUM_THREADS} katoptron/CMAME/tests/plate_SPD/plate.py diff --git a/katoptron/CMAME/plate_SPD/plate.geo b/katoptron/CMAME/plate_SPD/plate.geo new file mode 100644 index 0000000000000000000000000000000000000000..4e9dedd0fcc7201f4d2f43b60f32b4edcece3731 --- /dev/null +++ b/katoptron/CMAME/plate_SPD/plate.geo @@ -0,0 +1,43 @@ +SetFactory("OpenCASCADE"); +If(GMSH_MAJOR_VERSION!=3 || GMSH_MINOR_VERSION!=0 || GMSH_PATCH_VERSION!=6) + Printf("gmsh %g.%g.%g is not supported by this .geo",GMSH_MAJOR_VERSION,GMSH_MINOR_VERSION,GMSH_PATCH_VERSION); +Else + LX = 10; + LY = 10; + LZ = 1; + + nX = 15; + nY = 15; + nZ = 1; + + Point(1) = { 0., 0., 0., lc}; + Point(2) = { 0., LY, 0., lc}; + Point(3) = { LX, LY, 0., lc}; + Point(4) = { LX, 0., 0., lc}; + + Line(1) = {1, 2}; + Line(2) = {2, 3}; + Line(3) = {3, 4}; + Line(4) = {4, 1}; + + Transfinite Line {1, 3} = nY Using Progression 1; + Transfinite Line {2, 4} = nX Using Progression 1; + + Line Loop(5) = {1, 2, 3, 4}; + Plane Surface(5) = {5}; + Transfinite Surface {5}; + Recombine Surface {5}; + + Extrude {0, 0, LZ} + { + Surface{5}; Layers{nZ}; Recombine; + } + + Physical Volume("body") = {1}; + + Physical Surface("load 1") = {7}; + Physical Surface("load 2") = {9}; + Physical Point("clamped xyz") = {1}; + Physical Point("clamped xy") = {5}; + Physical Point("clamped y") = {4}; +EndIf diff --git a/katoptron/CMAME/plate_SPD/plate.py b/katoptron/CMAME/plate_SPD/plate.py new file mode 100644 index 0000000000000000000000000000000000000000..24508e884e7d2036eb6c04e74832a364e1c20376 --- /dev/null +++ b/katoptron/CMAME/plate_SPD/plate.py @@ -0,0 +1,288 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""@package docstring +This test runs the four different cases as defined in table 2 of the paper +with a SIMPLE-GS-GS preconditioner. +""" + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def get_parameters(case_id, first_sample_id): + """ + This function returns the python dictionary that includes + the parameters for a given test case + """ + p = model.defaut_params + + if case_id == 1: + nuw = 128 + p['Correlation length'] = 20. + p['Dispersion level'] = 0.1 + elif case_id == 2: + nuw = 128 + p['Correlation length'] = 20. + p['Dispersion level'] = 0.3 + elif case_id == 3: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.1 + elif case_id == 4: + nuw = 128 + p['Correlation length'] = 5. + p['Dispersion level'] = 0.3 + elif case_id == 5: + nuw = 128 + p['Correlation length'] = 2. + p['Dispersion level'] = 0.1 + elif case_id == 6: + nuw = 128 + p['Correlation length'] = 2. + p['Dispersion level'] = 0.3 + + p['Wavenumber cutoff'] = 8. + p['Wavenumber discretization points'] = nuw + p['Number Z of previously drawn samples'] = first_sample_id * nuw**2 + p['Number Phi of previously drawn samples'] = first_sample_id * nuw**2 + p['Write matrix and vectors'] = False + p['Write txt files'] = False + + p['Is exp'] = False + return p + + +def evaluate_one_ensemble(ensemble_size, case_id, first_sample_id, msh, comm, + file_dir, max_iter): + """ + This function evaluates one ensemble for a given test case + """ + work_dir = os.getcwd() + args = parseargs() + + p = get_parameters(case_id, first_sample_id) + + pbl = m.Problem(msh, comm) + + # Units are in mm + E = 70000 * np.ones(ensemble_size) # 70e9 Pa = 70000 MPa + nu = 0.35 * np.ones(ensemble_size) + k = 0. + d = 0. + m.Medium(pbl, "body", "test", E, nu, k, d) + + m.Dirichlet(pbl, "clamped xyz", "Clamped", 1, 0., 1, 0., 1, 0., 0, 0., + ensemble_size) + m.Dirichlet(pbl, "clamped xy", "Clamped", 1, 0., 1, 0., 0, 0., 0, 0., + ensemble_size) + m.Dirichlet(pbl, "clamped y", "Clamped", 0, 0., 1, 0., 0, 0., 0, 0., + ensemble_size) + + f = 700 * np.ones(ensemble_size) # 700e6 Pa = 700 MPa + zero = np.zeros(ensemble_size) + one = np.ones(ensemble_size) + m.Neumann(pbl, 'load 1', 'load', 0, zero, 1, f, 0, zero, 0, one, + ensemble_size) + m.Neumann(pbl, 'load 2', 'load', 0, zero, 1, -f, 0, zero, 0, one, + ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Ensemble Convergence Tolerance'] = 1e-8 + solverList['Maximum Iterations'] = max_iter + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + prec = 2 + + if prec == 1: + mueluParams = Teuchos.ParameterList() + mueluParams['number of equations'] = 3 + mueluParams['max levels'] = 1 + mueluParams['coarse: type'] = "CHEBYSHEV" + + mueluParamsSub2 = Teuchos.ParameterList() + mueluParamsSub2['chebyshev: degree'] = 20 + + mueluParams['verbosity'] = "high" + + mueluParams['coarse: params'] = mueluParamsSub2 + elif prec == 2: + mueluParams = Teuchos.ParameterList() + mueluParams['number of equations'] = 3 + mueluParams['max levels'] = 1 + mueluParams['coarse: type'] = "RELAXATION" + + mueluParamsSub2 = Teuchos.ParameterList() + mueluParamsSub2['relaxation: type'] = "MT Gauss-Seidel" + mueluParamsSub2['relaxation: sweeps'] = 3 + mueluParamsSub2['relaxation: damping factor'] = 1.75 + + mueluParams['verbosity'] = "high" + + mueluParams['coarse: params'] = mueluParamsSub2 + elif prec == 3: + mueluParams = Teuchos.ParameterList() + mueluParams['number of equations'] = 3 + mueluParams['max levels'] = 2 + mueluParams['smoother: type'] = "RELAXATION" + + mueluParamsSub2 = Teuchos.ParameterList() + mueluParamsSub2['relaxation: type'] = "MT Gauss-Seidel" + mueluParamsSub2['relaxation: sweeps'] = 10 + mueluParamsSub2['relaxation: damping factor'] = 1.75 + + mueluParams['verbosity'] = "high" + + mueluParams['smoother: params'] = mueluParamsSub2 + + mueluParams['coarse: type'] = "Klu" + mueluParams['coarse: max size'] = 18 + + solverList['convert MueLu xml file'] = True + solverList['mueluParams'] = mueluParams + + solverList['Print Teuchos timers'] = True + + solverList['gamma'] = p['gamma'] + solverList['Use preconditioner'] = True + + solverList['type'] = 'BlockGmres' + solverList['Maximum active set iteration'] = 1 + + solverList['Write matrix and vectors'] = p['Write matrix and vectors'] + solverList['Write txt files'] = p['Write txt files'] + + if p["Is exp"]: + num_random_variables = randomVariable.shape[1] + else: + num_random_variables = 0 + + for i in range(0, num_random_variables): + rand = randomVariable[:, i] + pbl.add(m.RandomVariable(rand)) + + randomParams = Teuchos.ParameterList() + + randomParams['Is random'] = True + randomParams['Is exp'] = p['Is exp'] + if p["Is exp"]: + randomParams['Begin X'] = 0. + randomParams['Begin Y'] = 0. + randomParams['Begin Z'] = 0. + randomParams['End X'] = 10. + randomParams['End Y'] = 10. + randomParams['End Z'] = 1. + randomParams['Number random variables'] = num_random_variables + randomParams['Correlation length X'] = p['Correlation length X'] + randomParams['Correlation length Y'] = p['Correlation length Y'] + randomParams['Correlation length Z'] = p['Correlation length Z'] + randomParams['Number of KL Terms X'] = p['Number of KL Terms X'] + randomParams['Number of KL Terms Y'] = p['Number of KL Terms Y'] + randomParams['Number of KL Terms Z'] = p['Number of KL Terms Z'] + randomParams['Maximum Nonlinear Solver Iterations'] = 5000 + randomParams['Bound Perturbation Size'] = 1E-10 + else: + randomParams['Correlation length'] = p['Correlation length'] + randomParams['Wavenumber cutoff'] = p['Wavenumber cutoff'] + randomParams['Wavenumber discretization points'] = p[ + 'Wavenumber discretization points'] + randomParams['Number Z of previously drawn samples'] = p[ + 'Number Z of previously drawn samples'] + randomParams['Number Phi of previously drawn samples'] = p[ + 'Number Phi of previously drawn samples'] + + randomParams['Mean'] = (E[0] / (2. * (1. + nu[0]))) + randomParams['Dispersion level'] = p['Dispersion level'] + + solverList['randomParams'] = randomParams + + slv = m.IterativeSolver(pbl, args.k, solverList, 3, ensemble_size) + slv.start() + f = open('timers.txt', 'w') + print(slv.getTimers(), file=f) + f.closed + + +def evaluate_all_ensembles(ensemble_sizes, case_ids, N, msh, comm, file_dir): + """ + This function loop over the test cases, the ensemble sizes, + and the ensembles + """ + for case_id in case_ids: + directory_case_id = 'case_' + str(case_id) + if not os.path.exists(directory_case_id): + os.makedirs(directory_case_id) + os.chdir(directory_case_id) + for ensemble_size in ensemble_sizes: + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + first_sample_id = ensemble_index * ensemble_size + + n_iter = np.arange(1, 105) + n_it = len(n_iter) + #n_it = 6 + # np.linspace(10,200,n_it,dtype=int) + + for i_it in range(0, n_it): + max_iter = n_iter[i_it] + directory = str(max_iter) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + evaluate_one_ensemble(ensemble_size, case_id, first_sample_id, + msh, comm, file_dir, max_iter) + os.chdir('..') + + os.chdir('..') + os.chdir('..') + os.chdir('..') + + +def main(): + """ + This loads the mesh and define the case ids and ensemble sizes + """ + comm, rank, size = m.utilities.import_MPI() + + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = gmsh.MeshLoader('plate.geo', file_dir).execute() + + N = 8 + ensemble_sizes = [1, 8] + case_ids = [1] + + evaluate_all_ensembles(ensemble_sizes, case_ids, N, msh, comm, file_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/plate_SPD/plate_convergence.py b/katoptron/CMAME/plate_SPD/plate_convergence.py new file mode 100644 index 0000000000000000000000000000000000000000..d05f89e9836a89722ac71a63d39e9af5aeb0c8a1 --- /dev/null +++ b/katoptron/CMAME/plate_SPD/plate_convergence.py @@ -0,0 +1,345 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +from katoptron.eigenvalues import * +import os +import fwk +"""@package docstring +This file is used to loop over cases and samples and plot their mechanical properties and solution fields. +""" + +import vtk +import tboxVtk +import tboxVtk.reader as vtkR +import tboxVtk.cutter as vtkC + +from katoptron.CMAME.model import Compute_QoIs + + +def plot_2D_mesh(pts, quad, ax): + """ + This function plots a 2D quad mesh on a given matplotlib axis + """ + import matplotlib.pyplot as plt + for i in range(0, quad.shape[0]): + x = np.zeros((quad.shape[1] + 1, )) + y = np.zeros((quad.shape[1] + 1, )) + for j in range(0, quad.shape[1]): + x[j] = pts[quad[i, j], 0] + y[j] = pts[quad[i, j], 1] + x[-1] = pts[quad[i, 0], 0] + y[-1] = pts[quad[i, 0], 1] + ax.plot(x, y, '--k', linewidth=0.5) + + +def cut_of_one_case(case_id, + ensemble_size, + n_samples, + iters, + file_MC_base_dir): + """ + This function loops over the samples of a given test case and plot them + """ + import matplotlib.pyplot as plt + + base_directory = 'case_' + str(case_id) + if not os.path.exists(base_directory): + os.makedirs(base_directory) + os.makedirs(base_directory + '/sample') + os.makedirs(base_directory + '/sample_ER_dif') + base_directory_sample = base_directory + '/sample' + base_directory_sample_ER_dif = base_directory + '/sample_ER_dif' + for i in range(0, n_samples): + + input_MC_file_dir = file_MC_base_dir + \ + str(case_id) + '/1/' + str(i) + '/104/' + mshName_sample_no_EP = input_MC_file_dir + 'plate_ast1_s0_0' + pts, tri, vals = cut_plate(mshName_sample_no_EP, False) + pts_2, quad = extract_quad_msh(mshName_sample_no_EP) + + x = pts[:, 0] + y = pts[:, 1] + + plot_one_sampel(x, y, tri, vals, pts_2, quad, False) + plt.savefig(base_directory_sample + '/' + str(i) + '.png', dpi=400) + + for i_it in range(0, len(iters)): + + i_ensemble = (i // ensemble_size) + i_sample = np.mod(i, ensemble_size) + + #input_MC_file_dir = file_MC_base_dir + str(case_id) + '/1/' + str(i) + '/' + str(iters[i_it]) + '/' + + input_MC_file_dir = file_MC_base_dir + str(case_id) + '/' + str( + ensemble_size) + '/' + str(i_ensemble) + '/' + str(iters[i_it]) + '/' + mshName_sample_EP = input_MC_file_dir + 'plate_ast1_s' + str( + i_sample) + '_0' + + pts_EP, tri_EP, vals_EP = cut_plate(mshName_sample_EP, False) + + plot_one_sampel(x, y, tri, vals_EP, pts_2, quad, False) + plt.savefig(base_directory_sample + '/' + str(i) + '_' + + str(iters[i_it]) + '_e_' + str(ensemble_size) + '.png', dpi=400) + + plot_diff_abs(x, y, tri, vals, vals_EP, pts_2, quad, False) + plt.savefig(base_directory_sample_ER_dif + '/' + str(i) + '_' + + str(iters[i_it]) + '_e_' + str(ensemble_size) + '.png', dpi=400) + + input_MC_file_dir = file_MC_base_dir + \ + str(case_id) + '/1/' + str(i) + '/' + str(iters[i_it]) + '/' + mshName_sample_EP = input_MC_file_dir + 'plate_ast1_s0_0' + + pts_EP, tri_EP, vals_EP = cut_plate(mshName_sample_EP, False) + + plot_one_sampel(x, y, tri, vals_EP, pts_2, quad, False) + plt.savefig(base_directory_sample + '/' + str(i) + + '_' + str(iters[i_it]) + '_e_1.png', dpi=400) + + plot_diff_abs(x, y, tri, vals, vals_EP, pts_2, quad, False) + plt.savefig(base_directory_sample_ER_dif + '/' + + str(i) + '_' + str(iters[i_it]) + '_e_1.png', dpi=400) + + plt.close('all') + + +def extract_quad_msh(mshName): + """ + This function extracts the 2D quad mesh out of a hexahedron mesh + """ + reader = vtkR.Reader() + reader.open(mshName) + rdata = reader.reader.GetOutput() + + _pts = rdata.GetPoints() + pts = np.zeros((_pts.GetNumberOfPoints(), 2)) + pts_indices = np.zeros((_pts.GetNumberOfPoints(), ), dtype=int) + for i in range(0, pts.shape[0]): + if _pts.GetPoint(i)[2] <= 0.01: + for j in range(0, 2): + pts[i][j] = _pts.GetPoint(i)[j] + pts_indices[i] = 1 + n_elems = rdata.GetNumberOfCells() + quad = [] + for i in range(0, n_elems): + elem = rdata.GetCell(i) + for j in range(0, 6): + face = elem.GetFace(j) + points_id = np.zeros((4, ), dtype=int) + good_face = True + for k in range(0, 4): + points_id[k] = face.GetPointId(k) + if pts_indices[points_id[k]] != 1: + good_face = False + break + if good_face: + if len(quad) == 0: + quad = points_id.reshape((1, 4)) + else: + quad = np.append(quad, points_id.reshape((1, 4)), axis=0) + return pts, quad + + +def cut_plate(mshName, at_point=False): + """ + This function cuts the vtk files in the middle and extracts both point + and element data. + """ + reader = vtkR.Reader() + reader.open(mshName) + cutter = vtkC.Cutter(reader.reader.GetOutputPort()) + c_output = cutter.cut(1, [0., 0., 0.5], [0., 0., 1.], tag_name='volume_id') + if at_point: + pts, tri, vals = cutter.extract(c_output, + 3, + ['u', 'x', 'y', 'z', 'G', 'von Mises'], + atPoint=True) + else: + pts, tri, vals = cutter.extract(c_output, + 3, ['u', 'x', 'y', 'z'], + atPoint=True) + pts_2, tri_2, vals_2 = cutter.extract(c_output, + 3, ['G', 'von Mises'], + atPoint=False) + vals.update(vals_2) + + return pts, tri, vals + + +def plot_2D_cut_values_at_node(x, y, tri, value, n_levels=16): + """ + This function plots data at node. + """ + import matplotlib.pyplot as plt + value = value.reshape((len(x), )) + if max(value) - min(value) > 0: + levels = np.linspace(min(value), max(value), n_levels) + plt.set_cmap('coolwarm') + plt.tricontour(x, + y, + tri, + value, + levels, + linestyles='-', + colors='black', + linewidths=0.5) + axtri = plt.tricontourf(x, y, tri, value, levels) + else: + axtri = plt.tricontourf(x, y, tri, value) + plt.gca().set_aspect('equal') + return axtri + + +def plot_2D_cut_values_at_elem(x, + y, + tri_1, + value, + v_min=0, + v_max=0, + n_levels=16, + shading=False): + """ + This function plots data at element. + """ + import matplotlib.pyplot as plt + + value = value.reshape((tri_1.shape[0], )) + if v_min == v_max: + v_min = min(value) + v_max = max(value) + + levels = np.linspace(v_min, v_max, n_levels) + plt.set_cmap('coolwarm') + if shading: + axtri = plt.tripcolor(x, y, tri_1, value, shading='gouraud') + else: + axtri = plt.tripcolor(x, y, tri_1, value, levels) + plt.gca().set_aspect('equal') + return axtri + + +def plot_one_sampel(x, y, tri, vals_s, pts_2, quad, at_point=False): + """ + This function plots data of a given sample. + """ + import matplotlib.pyplot as plt + + fig = plt.figure(figsize=(15, 4)) + + ax = plt.subplot(131) + if not at_point: + tmp = plot_2D_cut_values_at_elem(x, y, tri, vals_s['G']) + plot_2D_mesh(pts_2, quad, ax) + else: + tmp = plot_2D_cut_values_at_node(x, y, tri, vals_s['G']) + fig.colorbar(tmp, ax=plt.gca(), orientation='horizontal') + plt.title('G') + + plt.subplot(132) + tmp = plot_2D_cut_values_at_node(x, y, tri, vals_s['y']) + fig.colorbar(tmp, ax=plt.gca(), orientation='horizontal', format='%.0e') + plt.title('y') + + ax = plt.subplot(133) + if not at_point: + tmp = plot_2D_cut_values_at_elem(x, y, tri, vals_s['von Mises']) + plot_2D_mesh(pts_2, quad, ax) + else: + tmp = plot_2D_cut_values_at_node(x, y, tri, vals_s['von Mises']) + fig.colorbar(tmp, ax=plt.gca(), orientation='horizontal') + plt.title('von Mises') + + +def plot_diff_abs(x, y, tri, vals, vals_s, pts_2, quad, at_point=False): + """ + This function plots the difference between data of a given sample and the mean sample. + """ + import matplotlib.pyplot as plt + + fig = plt.figure(figsize=(15, 4)) + + plt.subplot(131) + tmp = plot_2D_cut_values_at_node(x, y, tri, vals_s['x'] - vals['x']) + fig.colorbar(tmp, ax=plt.gca(), orientation='horizontal', format='%.0e') + plt.title('delta x') + + plt.subplot(132) + tmp = plot_2D_cut_values_at_node(x, y, tri, vals_s['y'] - vals['y']) + fig.colorbar(tmp, ax=plt.gca(), orientation='horizontal', format='%.0e') + plt.title('delta y') + + plt.subplot(133) + tmp = plot_2D_cut_values_at_node(x, y, tri, vals_s['z'] - vals['z']) + fig.colorbar(tmp, ax=plt.gca(), orientation='horizontal', format='%.0e') + plt.title('delta z') + + +def plot_diff_rel(x, + y, + tri, + vals, + vals_s, + pts_2, + quad, + v_min=-10, + v_max=10, + at_point=False): + """ + This function plots the relative difference between data of a given sample and the mean sample. + """ + import matplotlib.pyplot as plt + + fig = plt.figure(figsize=(15, 4)) + + diff_G = vals_s['G'] - vals['G'] + diff_G_rel = (100 * diff_G / vals['G']) + + plt.subplot(121) + if not at_point: + tmp = plot_2D_cut_values_at_elem(x, + y, + tri, + diff_G_rel, + v_min=v_min, + v_max=v_max) + plot_2D_mesh(pts_2, quad, plt.gca()) + else: + tmp = plot_2D_cut_values_at_node(x, y, tri, diff_G_rel) + fig.colorbar(tmp, ax=plt.gca(), orientation='horizontal') + plt.clim(v_min, v_max) + plt.title('delta G relative') + + diff_vM = vals_s['von Mises'] - vals['von Mises'] + diff_vM_rel = (100 * diff_vM / vals['von Mises']) + + plt.subplot(122) + if not at_point: + tmp = plot_2D_cut_values_at_elem(x, + y, + tri, + diff_vM_rel, + v_min=v_min, + v_max=v_max) + plot_2D_mesh(pts_2, quad, plt.gca()) + else: + tmp = plot_2D_cut_values_at_node(x, y, tri, diff_vM_rel) + fig.colorbar(tmp, ax=plt.gca(), orientation='horizontal') + plt.clim(v_min, v_max) + plt.title('delta von Mises relative') + + +def main(): + import matplotlib.pyplot as plt + + file_dir = os.path.dirname(__file__) + + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/fused/katoptron_CMAME_tests_plate_SPD_plate_MG/case_' + + n_it = 6 + iters = np.arange(1, 60) # np.linspace(10,200,n_it,dtype=int) + + n_samples = 8 + cut_of_one_case(1, 8, n_samples, iters, file_MC_base_dir) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/2_cube.py b/katoptron/CMAME/post_process/2_cube.py new file mode 100644 index 0000000000000000000000000000000000000000..2fc5d4403ddc8797f9377409a3c0cc76d5d3b0c1 --- /dev/null +++ b/katoptron/CMAME/post_process/2_cube.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +from katoptron.eigenvalues import * +from katoptron.readers import * +import os +import fwk + + +def main(): + import matplotlib.pyplot as plt + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + display = False + + input_file_dir = '/Users/kimliegeois/Desktop/katoptron/katoptron_tests_2_cubes_patch/' + + filename_Q = input_file_dir + 'A_mm_after_bc.txt' + filename_GT = input_file_dir + 'B_mm.txt' + + Q = read_mm(filename_Q) + Q = get_symmetrical_part(Q) + GT = read_mm(filename_GT) + + norm_Q = sparse_matrix_2_norm(Q) + norm_GT = sparse_matrix_2_norm(GT) + + print(norm_Q) + print(norm_GT) + print((norm_Q / norm_GT)) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/grouping.py b/katoptron/CMAME/post_process/grouping.py new file mode 100644 index 0000000000000000000000000000000000000000..bb53ff5ba961550fd29605578b08c88d07b9127c --- /dev/null +++ b/katoptron/CMAME/post_process/grouping.py @@ -0,0 +1,73 @@ + + +# require a git clone https://github.com/kliegeois/Same-Size-K-Means.git + + + + +from clustering.equal_groups import EqualGroupsKMeans +import numpy as np +import matplotlib.pyplot as plt +from sklearn.decomposition import PCA +from mpl_toolkits.mplot3d import Axes3D + + +def compute_the_groups(N, ensemble_size, num_random_variables): + + np.random.seed(42) + + n_clusters = int(N // ensemble_size) + + randomVariable = np.random.normal(0, 1, num_random_variables*N) + X = np.resize(randomVariable, (N, num_random_variables)) + + clf = EqualGroupsKMeans(n_clusters=n_clusters) + + clf.fit(X) + + Z = clf.predict(X) + Z = Z.astype(int) + + for i in range(0, n_clusters): + l_s = len(np.argwhere(Z == i)) + if l_s != ensemble_size: + print('Ensemble ' + str(i) + ' has ' + str(l_s) + + ' samples instead of ' + str(ensemble_size)) + + np.savetxt('Groupe_id_s_'+str(ensemble_size) + + '_'+str(N)+'.txt', Z, fmt='%i') + + indices = np.argsort(Z) + + np.savetxt('Reordering_s_'+str(ensemble_size) + + '_'+str(N)+'.txt', indices, fmt='%i') + + ''' + reduced_data = PCA(n_components=3).fit_transform(X) + + fig = plt.figure() + ax = fig.add_subplot(111, projection='3d') + + x_min, x_max = reduced_data[:, 0].min() - 1, reduced_data[:, 0].max() + 1 + y_min, y_max = reduced_data[:, 1].min() - 1, reduced_data[:, 1].max() + 1 + z_min, z_max = reduced_data[:, 2].min() - 1, reduced_data[:, 2].max() + 1 + ax.scatter(reduced_data[:, 0], reduced_data[:, 1],reduced_data[:, 2], s = 20, c=Z) + ax.set_xlim(x_min, x_max) + ax.set_ylim(y_min, y_max) + ax.set_zlim(z_min, z_max) + plt.show() + ''' + + +def main(): + + N = 960 + num_random_variables = 20 + + compute_the_groups(N, 8, num_random_variables) + compute_the_groups(N, 16, num_random_variables) + compute_the_groups(N, 32, num_random_variables) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/juelich_speedup.py b/katoptron/CMAME/post_process/juelich_speedup.py new file mode 100644 index 0000000000000000000000000000000000000000..f09084b76346f7eeed3d139100dfb68acab1c87e --- /dev/null +++ b/katoptron/CMAME/post_process/juelich_speedup.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +from katoptron.speedup import * + + +def speedup_of_one_case(n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, use_teuchos_timers, + per_iteration): + import matplotlib.pyplot as plt + + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_Juelich_tests_M1_assembly_fused_MC_ER_2/' + # try: + speedup = compute_speedup(n_samples, ensemble_sizes, file_MC_base_dir, + querylines, per_iteration, quantiles, + use_waves_timers, use_teuchos_timers, True) + + plot_speedup(speedup, ensemble_sizes, np.arange(0, len(querylines)), + 'case_', querylines, per_iteration) + plt.savefig('case_.png', dpi=400) + + save_speedup(speedup, ensemble_sizes, querylines, 'case_') + + R = compute_R(n_samples, ensemble_sizes, file_MC_base_dir, quantiles, + True) + save_R(R, 'case_') + # except: + # print '/Volumes/HD_SONY/CMAME/Plate/katoptron_CMAME_tests_plate_MC_case_' + case_id + ' has not all the files' + + +def main(): + import matplotlib.pyplot as plt + + n_samples = 64 + ensemble_sizes = [1, 8, 16, 32] + quantiles = [0, 0.33, 0.5, 0.66, 1.] + + querylines = [ + 'computeMatrices', 'Belos: Operation Op*x', 'Belos: Operation Prec*x', + 'Belos: DGKS[2]: Orthogonalization', + 'Belos: DGKS[2]: Ortho (Inner Product)', + 'Belos: DGKS[2]: Ortho (Norm)', 'Belos: DGKS[2]: Ortho (Update)', + 'total', 'write results', 'MueLu: Hierarchy: Solve (level=0)', + 'MueLu: Hierarchy: Solve (level=1)', + 'MueLu: Hierarchy: Solve : smoothing (level=0)', + 'MueLu: Hierarchy: Solve : prolongation (level=0)', + 'MueLu: Hierarchy: Solve : residual calculation (level=0)', + 'MueLu: Hierarchy: Solve : restriction (level=0)', + 'MueLu: SimpleSmoother: Apply: total (total)', + 'MueLu: SimpleSmoother: Correction step: Compute rhs (total)', + 'MueLu: SimpleSmoother: Correction step: Solve block 11 (total)', + 'MueLu: SimpleSmoother: Prediction step: Compute rhs (total)', + 'MueLu: SimpleSmoother: Prediction step: Solve block 00 (total)' + ] + use_waves_timers = np.array([0, 7, 8], dtype=int) + use_teuchos_timers = np.array( + [1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], dtype=int) + per_iteration = [ + False, True, True, False, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True + ] + + speedup_of_one_case(n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, use_teuchos_timers, + per_iteration) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_G.py b/katoptron/CMAME/post_process/plate_G.py new file mode 100644 index 0000000000000000000000000000000000000000..f250efcd4cd4ded953eca7804825c242c2d7610d --- /dev/null +++ b/katoptron/CMAME/post_process/plate_G.py @@ -0,0 +1,212 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +from katoptron.eigenvalues import * +from katoptron.readers import * +import os +import fwk + +import vtk +import tboxVtk +import tboxVtk.reader as vtkR +import tboxVtk.cutter as vtkC + + +def Kirsch_equations(x, y, center_x, center_y, a, sigma_inf): + + centered_x = x-center_x + centered_y = y-center_y + + r = np.abs(centered_x+centered_y*1.0j) + theta = np.angle(centered_x+centered_y*1.0j) - (np.pi / 2) + + half_sigma_inf = ((sigma_inf / 2)) + + ar = (a / r) + ar_p_2 = np.power(ar, 2) + ar_p_4 = np.power(ar, 4) + + cos2theta = np.cos(2*theta) + sin2theta = np.sin(2*theta) + + sigma_rr = half_sigma_inf*(1-ar_p_2)+half_sigma_inf * \ + (1-4*ar_p_2+3*ar_p_4)*cos2theta + sigma_thetatheta = half_sigma_inf * \ + (1+ar_p_2)-half_sigma_inf*(1+3*ar_p_4)*cos2theta + tau_rtheta = -half_sigma_inf*(1+2*ar_p_2-3*ar_p_4)*sin2theta + + VM = np.sqrt(np.square(sigma_rr)+np.square(sigma_thetatheta) - + sigma_rr*sigma_thetatheta+3*np.square(tau_rtheta)) + + return VM + + +def cut_plate(mshName): + reader = vtkR.Reader() + reader.open(mshName) + cutter = vtkC.Cutter(reader.reader.GetOutputPort()) + c_output = cutter.cut(1, [0., 0., 0.5], [0., 0., 1.], tag_name='volume_id') + pts, tri, vals = cutter.extract( + c_output, 3, ['u', 'x', 'y', 'z', 'G_point'], atPoint=True) + pts_2, tri_2, vals_2 = cutter.extract( + c_output, 3, ['G', 'von Mises'], atPoint=False) + vals.update(vals_2) + + return pts, tri, vals + + +def extract_quad_msh(mshName): + reader = vtkR.Reader() + reader.open(mshName) + rdata = reader.reader.GetOutput() + + _pts = rdata.GetPoints() + pts = np.zeros((_pts.GetNumberOfPoints(), 2)) + pts_indices = np.zeros((_pts.GetNumberOfPoints(),), dtype=int) + for i in range(0, pts.shape[0]): + if _pts.GetPoint(i)[2] <= 0.01: + for j in range(0, 2): + pts[i][j] = _pts.GetPoint(i)[j] + pts_indices[i] = 1 + n_elems = rdata.GetNumberOfCells() + quad = [] + for i in range(0, n_elems): + elem = rdata.GetCell(i) + for j in range(0, 6): + face = elem.GetFace(j) + points_id = np.zeros((4,), dtype=int) + good_face = True + for k in range(0, 4): + points_id[k] = face.GetPointId(k) + if pts_indices[points_id[k]] != 1: + good_face = False + break + if good_face: + if len(quad) == 0: + quad = points_id.reshape((1, 4)) + else: + quad = np.append(quad, points_id.reshape((1, 4)), axis=0) + return pts, quad + + +def plot_2D_cut_values_at_node(x, y, tri, value, v_min, v_max, n_levels=16): + import matplotlib.pyplot as plt + value = value.reshape((len(x),)) + levels = np.linspace(v_min, v_max, n_levels) + #print levels + + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + plt.tricontour(x, y, tri, value, levels, linestyles='-', + colors='black', linewidths=0.5) + axtri = plt.tricontourf(x, y, tri, value, levels) + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, + hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + + +def plot_2D_cut_values_at_elem(x, y, tri_1, value, v_min, v_max, n_levels=16, shading=False): + import matplotlib.pyplot as plt + + value = value.reshape((tri_1.shape[0],)) + + levels = np.linspace(v_min, v_max, n_levels) + #print levels + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + if shading: + plt.tripcolor(x, y, tri_1, value, shading='gouraud') + else: + plt.tripcolor(x, y, tri_1, value, levels) + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, + hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + + +def plot_2D_mesh(pts, quad): + import matplotlib.pyplot as plt + fig = plt.figure(figsize=(8, 8)) + f = open('mesh_2.tex', 'w') + print('\begin{tikzpicture}', file=f) + for i in range(0, quad.shape[0]): + x = np.zeros((quad.shape[1]+1,)) + y = np.zeros((quad.shape[1]+1,)) + for j in range(0, quad.shape[1]): + x[j] = pts[quad[i, j], 0] + y[j] = pts[quad[i, j], 1] + x[-1] = pts[quad[i, 0], 0] + y[-1] = pts[quad[i, 0], 1] + string_1 = '\draw[thick] ' + for j in range(0, quad.shape[1]+1): + string_1 = string_1 + '(' + str(x[j]) + ',' + str(y[j]) + ')' + if j == quad.shape[1]: + string_1 = string_1 + ';' + else: + string_1 = string_1 + '--' + + print(string_1, file=f) + plt.plot(x, y, 'black') + plt.gca().set_aspect('equal') + + print('\end{tikzpicture}', file=f) + f.closed + + +def main(): + import matplotlib.pyplot as plt + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + display = False + + n_samples = 8 + n_cases = 6 + + for i in range(0, n_cases): + min_G = 1e9 + max_G = 0 + for j in range(0, n_samples): + input_file_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_MC_MG_all_cases_2/case_' + \ + str(i+1)+'/8/0/' + + mshName = input_file_dir+'plate_fused_ast1_s'+str(j)+'_0' + + pts, tri, vals = cut_plate(mshName) + + if max_G <= np.amax(vals['G_point']): + max_G = np.amax(vals['G_point']) + if min_G >= np.amin(vals['G_point']): + min_G = np.amin(vals['G_point']) + + print('Case ' + str(i)) + print(min_G) + print(max_G) + + for j in range(0, n_samples): + input_file_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_MC_MG_all_cases_2/case_' + \ + str(i+1)+'/8/0/' + + mshName = input_file_dir+'plate_fused_ast1_s'+str(j)+'_0' + + pts, tri, vals = cut_plate(mshName) + + x = pts[:, 0] + y = pts[:, 1] + + plot_2D_cut_values_at_node( + x, y, tri, vals['G_point'], min_G, max_G) + plt.savefig("G_"+str(i)+"_"+str(j)+".pdf", + transparent=True, bbox_inches='tight', pad_inches=-0.05) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_GS_direct.py b/katoptron/CMAME/post_process/plate_GS_direct.py new file mode 100644 index 0000000000000000000000000000000000000000..bde36488700304d2ba85e1e18b6662793695863a --- /dev/null +++ b/katoptron/CMAME/post_process/plate_GS_direct.py @@ -0,0 +1,318 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +from katoptron.eigenvalues import * +from katoptron.readers import * +from katoptron.readers import * +import os +import fwk +"""@package docstring +This file is used to investigate the choice of prec parameters. +""" + + +def read_timer_all(n_cases, sub_cases, file_MC_base_dir): + querylines = ['Belos: Operation Op*x', + 'Belos: Operation Prec*x', + 'Belos: DGKS[2]: Orthogonalization', + 'Belos: DGKS[2]: Ortho (Inner Product)', + 'Belos: DGKS[2]: Ortho (Norm)', + 'Belos: DGKS[2]: Ortho (Update)', + 'Belos: PseudoBlockGmresSolMgr total solve time'] + timer = np.zeros((n_cases, len(sub_cases), len(querylines))) + for i in range(0, n_cases): + file_MC_base_dir_2 = file_MC_base_dir + '/' + str(i)+'/' + for j in range(0, len(sub_cases)): + input_MC_file_dir = file_MC_base_dir_2 + str(sub_cases[j])+'/' + timer[i, j, :] = read_teuchos_timers( + input_MC_file_dir+'teuchos_timers.txt', querylines) + return timer + + +def read_iter_all(n_cases, sub_cases, file_MC_base_dir): + iter = np.zeros((n_cases, len(sub_cases))) + for i in range(0, n_cases): + file_MC_base_dir_2 = file_MC_base_dir + '/' + str(i)+'/' + for j in range(0, len(sub_cases)): + input_MC_file_dir = file_MC_base_dir_2 + str(sub_cases[j])+'/' + iter_indices, residuals = read_Belos( + input_MC_file_dir + 'belos_out.txt', 1) + iter[i][j] = iter_indices[-1] + return iter + + +def read_timer_tensor(n_cases, sub_cases, file_MC_base_dir, sizes): + import numpy as np + timer = read_timer_all(n_cases, sub_cases, file_MC_base_dir) + + n_0 = sizes[0] + n_1 = sizes[1] + n_2 = sizes[2] + n_3 = sizes[3] + + timer_tensor = np.zeros( + (n_0, n_1, n_2, n_3, len(sub_cases), timer.shape[2])) + + i = 0 + + for i_0 in range(0, n_0): + for i_1 in range(0, n_1): + for i_2 in range(0, n_2): + for i_3 in range(0, n_3): + if i < timer.shape[0]: + timer_tensor[i_0, i_1, i_2, i_3, :, :] = timer[i, :, :] + i = i + 1 + else: + return timer_tensor + + return timer_tensor + + +def read_iter_tensor(n_cases, sub_cases, file_MC_base_dir, sizes): + import numpy as np + iter = read_iter_all(n_cases, sub_cases, file_MC_base_dir) + + n_0 = sizes[0] + n_1 = sizes[1] + n_2 = sizes[2] + n_3 = sizes[3] + + iter_tensor = np.zeros((n_0, n_1, n_2, n_3, len(sub_cases))) + + i = 0 + + for i_0 in range(0, n_0): + for i_1 in range(0, n_1): + for i_2 in range(0, n_2): + for i_3 in range(0, n_3): + if i < iter.shape[0]: + iter_tensor[i_0, i_1, i_2, i_3, :] = iter[i, :] + i = i + 1 + else: + return iter_tensor + + return iter_tensor + + +def main(): + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + test = 1 + EP = True + if test == 1: + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/gaussian/katoptron_CMAME_tests_plate_mean_prec_GS_direct/' + #file_dir + '/../../../workspace/katoptron_CMAME_tests_plate_mean_prec_GS_direct/' + sub_cases = ['mean_case', 'ensemble_reduction_8'] + + GS_sweeps_00_min = 16 + GS_sweeps_00_max = 41 + delta_GS_sweeps_00 = 2 + + N_GS_sweeps_00 = int( + np.ceil( + ((GS_sweeps_00_max - GS_sweeps_00_min * 1.) / delta_GS_sweeps_00))) + + # Damping has to be between 0 and 2 + GS_damping_00_min = 1.75 + GS_damping_00_max = 1.9 + N_GS_damping_00 = 8 + + # Omega has to be between 0 and 1 + SS_omega_min = 0.001 + SS_omega_max = 0.5 + N_SS_omega = 12 + + SS_damping_min = 1. + SS_damping_max = 1.2 + N_SS_damping = 1 + + n_cases = 1248 + elif test == 2: + file_MC_base_dir = file_dir + \ + '/../../../workspace/katoptron_CMAME_tests_plate_mean_prec_GS_direct_alphabeta_1/' + sub_cases = ['mean_case', 'ensemble_reduction_8'] + + GS_sweeps_00_min = 16 + GS_sweeps_00_max = 41 + delta_GS_sweeps_00 = 2 + + N_GS_sweeps_00 = int( + np.ceil( + ((GS_sweeps_00_max - GS_sweeps_00_min * 1.) / delta_GS_sweeps_00))) + + # Damping has to be between 0 and 2 + GS_damping_00_min = 0.001 + GS_damping_00_max = 1.999 + N_GS_damping_00 = 20 + + # Omega has to be between 0 and 1 + SS_omega_min = 1. + SS_omega_max = 1.2 + N_SS_omega = 1 + + SS_damping_min = 1. + SS_damping_max = 1.2 + N_SS_damping = 1 + + n_cases = 260 + + elif test == 3: + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/katoptron_CMAME_tests_plate_mean_prec_GS_direct_lvl/' + sub_cases = ['mean_case'] + + GS_sweeps_00_min = 16 + GS_sweeps_00_max = 17 + delta_GS_sweeps_00 = 1 + + N_GS_sweeps_00 = int( + np.ceil( + ((GS_sweeps_00_max - GS_sweeps_00_min * 1.) / delta_GS_sweeps_00))) + + # Damping has to be between 0 and 2 + GS_damping_00_min = 0.001 + GS_damping_00_max = 0.8 + N_GS_damping_00 = 50 + + # Omega has to be between 0 and 1 + SS_omega_min = 0.75 + SS_omega_max = 1.1 + N_SS_omega = 5 + + SS_damping_min = 1. + SS_damping_max = 1. + N_SS_damping = 1 + + n_cases = 181 + EP = False + + iter = read_iter_tensor(n_cases, sub_cases, file_MC_base_dir, [ + N_GS_sweeps_00, N_GS_damping_00, N_SS_omega, N_SS_damping]) + timer = read_timer_tensor(n_cases, sub_cases, file_MC_base_dir, [ + N_GS_sweeps_00, N_GS_damping_00, N_SS_omega, N_SS_damping]) + + sweeps_00 = np.arange( + GS_sweeps_00_min, GS_sweeps_00_max, delta_GS_sweeps_00) + damping_00 = np.linspace( + GS_damping_00_min, GS_damping_00_max, N_GS_damping_00) + SS_omega = np.linspace(SS_omega_min, SS_omega_max, N_SS_omega) + SS_damping = np.linspace(SS_damping_min, SS_damping_max, N_SS_damping) + + from mpl_toolkits.mplot3d import Axes3D + import matplotlib.pyplot as plt + from matplotlib import cm + + opti = np.zeros((N_GS_sweeps_00, 3), dtype=int) + opti_2 = np.zeros((N_GS_sweeps_00, 3), dtype=int) + opti_iter = np.zeros((N_GS_sweeps_00, 1), dtype=int) + opti_iter_2 = np.zeros((N_GS_sweeps_00, 1), dtype=int) + opti_iter_2_one = np.zeros((N_GS_sweeps_00, 1), dtype=int) + R = np.zeros((N_GS_sweeps_00, 1)) + opti_time = np.zeros((N_GS_sweeps_00, 7)) + opti_time_2 = np.zeros((N_GS_sweeps_00, 7)) + opti_time_per_iter = np.zeros((N_GS_sweeps_00, 7)) + + #opti_iter_8 = np.array([500,469,382,338,280,255,254,239,218,213,204,197],dtype=int) + + for i in range(0, N_GS_sweeps_00): + tmp = iter[i, :, :, :, 0] + tmp[tmp == 0] = 1000 + opti[i, :] = np.unravel_index(np.argmin(tmp, axis=None), tmp.shape) + print(str(sweeps_00[i]) + ' ' + str(damping_00[opti[i, 0]] + ) + ' ' + str(SS_omega[opti[i, 1]])) + opti_iter[i] = iter[i, opti[i, 0], opti[i, 1], 0, 0] + opti_time[i, :] = timer[i, opti[i, 0], opti[i, 1], 0, 0, :] + if EP: + tmp2 = iter[i, :, :, :, 1] + opti_2[i, :] = np.unravel_index( + np.argmin(tmp2, axis=None), tmp.shape) + print(str(sweeps_00[i]) + ' ' + str(damping_00[opti_2[i, 0]] + ) + ' ' + str(SS_omega[opti_2[i, 1]])) + opti_iter_2[i] = iter[i, opti_2[i, 0], opti_2[i, 1], 0, 1] + opti_iter_2_one[i] = iter[i, opti_2[i, 0], opti_2[i, 1], 0, 0] + opti_time_2[i, :] = timer[i, opti_2[i, 0], opti_2[i, 1], 0, 1, :] + if opti_iter_2[i] == 1000: + R[i] = 10. + else: + R[i] = opti_iter_2[i]*1. / opti_iter[i] + for j in range(0, 7): + opti_time_per_iter[i, j] = ( + opti_time[i, j] / opti_iter[i]) + #R[i] = opti_iter_8[i]*1. / opti_iter[i] + + tmp = np.zeros((N_GS_sweeps_00, 2)) + tmp[:, 0] = sweeps_00[:] + tmp[:, 1] = np.reshape(opti_iter, (N_GS_sweeps_00,)) + np.savetxt('opti_iter.txt', tmp) + if EP: + tmp[:, 1] = np.reshape(opti_iter_2, (N_GS_sweeps_00,)) + np.savetxt('opti_iter_2.txt', tmp) + tmp[:, 1] = np.reshape(opti_iter_2_one, (N_GS_sweeps_00,)) + np.savetxt('opti_iter_2_one.txt', tmp) + + plt.subplot(511) + plt.plot(sweeps_00, opti_iter) + plt.grid() + plt.subplot(512) + plt.plot(sweeps_00, opti_iter) + if EP: + plt.plot(sweeps_00, opti_iter_2) + plt.plot(sweeps_00, opti_iter_2_one) + plt.grid() + plt.subplot(513) + if EP: + plt.plot(sweeps_00, R) + plt.grid() + plt.subplot(514) + plt.plot(sweeps_00, damping_00[opti[:, 0]]) + if EP: + plt.plot(sweeps_00, damping_00[opti_2[:, 0]]) + plt.grid() + plt.subplot(515) + plt.plot(sweeps_00, SS_omega[opti[:, 1]]) + if EP: + plt.plot(sweeps_00, SS_omega[opti_2[:, 1]]) + plt.grid() + print(np.argmin(opti_time[:, 6])) + print(opti) + plt.figure() + for i in range(0, N_GS_sweeps_00): + plt.subplot(2, N_GS_sweeps_00, 1+i) + plt.plot(damping_00, iter[i, :, opti[i, 1], 0, 0]) + plt.scatter(damping_00[opti[i, 0]], opti_iter[i], c='red') + plt.subplot(2, N_GS_sweeps_00, 1+i+N_GS_sweeps_00) + plt.plot(SS_omega, iter[i, opti[i, 0], :, 0, 0]) + plt.scatter(SS_omega[opti[i, 1]], opti_iter[i], c='red') + ''' + plt.figure() + plt.plot(sweeps_00,damping_00[opti[:,0]]) + + plt.figure() + plt.plot(sweeps_00,SS_omega[opti[:,1]]) + + plt.figure() + for i in range(0,8): + plt.plot(damping_00,iter[0,:,i,0,0]) + + plt.figure() + for i in range(0,8): + plt.plot(SS_omega,iter[0,i,:,0,0]) + + plt.figure() + for i in range(0,6): + plt.plot(SS_omega,iter[i,5,:,0,0]) + + for i in range(0,N_GS_sweeps_00): + fig = plt.figure() + ax = fig.add_subplot(111, projection='3d') + X, Y = np.meshgrid(SS_omega,damping_00) + ax.plot_surface(X, Y, iter[i,:,:,0,0], cmap=cm.coolwarm, + linewidth=0, alpha=0.8) + ax.set_zlim(0, 400) + ax.scatter(SS_omega[opti[i,1]],damping_00[opti[i,0]],opti_iter[i], c='red') + ''' + plt.show() + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_GS_direct_fused.py b/katoptron/CMAME/post_process/plate_GS_direct_fused.py new file mode 100644 index 0000000000000000000000000000000000000000..ea15b89935bf1c7260d7b5b59a6115fb149ec9b8 --- /dev/null +++ b/katoptron/CMAME/post_process/plate_GS_direct_fused.py @@ -0,0 +1,278 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +from katoptron.eigenvalues import * +from katoptron.readers import * +from katoptron.readers import * +import os +import fwk +"""@package docstring +This file is used to investigate the choice of prec parameters. +""" + + +def read_timer_all(n_cases, sub_cases, file_MC_base_dir): + querylines = ['Belos: Operation Op*x', + 'Belos: Operation Prec*x', + 'Belos: DGKS[2]: Orthogonalization', + 'Belos: DGKS[2]: Ortho (Inner Product)', + 'Belos: DGKS[2]: Ortho (Norm)', + 'Belos: DGKS[2]: Ortho (Update)', + 'Belos: PseudoBlockGmresSolMgr total solve time'] + timer = np.zeros((n_cases, len(sub_cases), len(querylines))) + for i in range(0, n_cases): + file_MC_base_dir_2 = file_MC_base_dir + '/' + str(i)+'/' + for j in range(0, len(sub_cases)): + input_MC_file_dir = file_MC_base_dir_2 + str(sub_cases[j])+'/' + timer[i, j, :] = read_teuchos_timers( + input_MC_file_dir+'teuchos_timers.txt', querylines) + return timer + + +def read_iter_all(n_cases, sub_cases, file_MC_base_dir): + iter = np.zeros((n_cases, len(sub_cases))) + for i in range(0, n_cases): + file_MC_base_dir_2 = file_MC_base_dir + '/' + str(i)+'/' + for j in range(0, len(sub_cases)): + input_MC_file_dir = file_MC_base_dir_2 + str(sub_cases[j])+'/' + iter_indices, residuals = read_Belos( + input_MC_file_dir + 'belos_out.txt', 1) + iter[i][j] = iter_indices[-1] + return iter + + +def read_timer_tensor(n_cases, sub_cases, file_MC_base_dir, sizes): + import numpy as np + timer = read_timer_all(n_cases, sub_cases, file_MC_base_dir) + + n_0 = sizes[0] + n_1 = sizes[1] + n_2 = sizes[2] + n_3 = sizes[3] + + timer_tensor = np.zeros( + (n_0, n_1, n_2, n_3, len(sub_cases), timer.shape[2])) + + i = 0 + + for i_0 in range(0, n_0): + for i_1 in range(0, n_1): + for i_2 in range(0, n_2): + for i_3 in range(0, n_3): + if i < timer.shape[0]: + timer_tensor[i_0, i_1, i_2, i_3, :, :] = timer[i, :, :] + i = i + 1 + else: + return timer_tensor + + return timer_tensor + + +def read_iter_tensor(n_cases, sub_cases, file_MC_base_dir, sizes): + import numpy as np + iter = read_iter_all(n_cases, sub_cases, file_MC_base_dir) + + n_0 = sizes[0] + n_1 = sizes[1] + n_2 = sizes[2] + n_3 = sizes[3] + + iter_tensor = np.zeros((n_0, n_1, n_2, n_3, len(sub_cases))) + + i = 0 + + for i_0 in range(0, n_0): + for i_1 in range(0, n_1): + for i_2 in range(0, n_2): + for i_3 in range(0, n_3): + if i < iter.shape[0]: + iter_tensor[i_0, i_1, i_2, i_3, :] = iter[i, :] + i = i + 1 + else: + return iter_tensor + + return iter_tensor + + +def main(): + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + test = 2 + if test == 1: + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/gaussian/katoptron_CMAME_tests_plate_mean_prec_GS_direct/' + #file_dir + '/../../../workspace/katoptron_CMAME_tests_plate_mean_prec_GS_direct/' + sub_cases = ['mean_case', 'ensemble_reduction_8'] + + GS_sweeps_00_min = 16 + GS_sweeps_00_max = 41 + delta_GS_sweeps_00 = 2 + + N_GS_sweeps_00 = int( + np.ceil( + ((GS_sweeps_00_max - GS_sweeps_00_min * 1.) / delta_GS_sweeps_00))) + + # Damping has to be between 0 and 2 + GS_damping_00_min = 1.75 + GS_damping_00_max = 1.9 + N_GS_damping_00 = 8 + + # Omega has to be between 0 and 1 + SS_omega_min = 0.001 + SS_omega_max = 0.5 + N_SS_omega = 12 + + SS_damping_min = 1. + SS_damping_max = 1.2 + N_SS_damping = 1 + + n_cases = 1248 + elif test == 2: + file_MC_base_dir = file_dir + \ + '/../../../workspace/katoptron_CMAME_tests_fused_plate_mean_prec_GS/' + sub_cases = ['mean_case', 'ensemble_reduction_8'] + + GS_sweeps_00_min = 1 + GS_sweeps_00_max = 41 + delta_GS_sweeps_00 = 1 + + N_GS_sweeps_00 = int( + np.ceil( + ((GS_sweeps_00_max - GS_sweeps_00_min * 1.) / delta_GS_sweeps_00))) + + # Damping has to be between 0 and 2 + GS_damping_00_min = 0.001 + GS_damping_00_max = 1.999 + N_GS_damping_00 = 50 + + # Omega has to be between 0 and 1 + SS_omega_min = 1. + SS_omega_max = 1.2 + N_SS_omega = 1 + + SS_damping_min = 1. + SS_damping_max = 1.2 + N_SS_damping = 1 + + n_cases = 2000 + + iter = read_iter_tensor(n_cases, sub_cases, file_MC_base_dir, [ + N_GS_sweeps_00, N_GS_damping_00, N_SS_omega, N_SS_damping]) + timer = read_timer_tensor(n_cases, sub_cases, file_MC_base_dir, [ + N_GS_sweeps_00, N_GS_damping_00, N_SS_omega, N_SS_damping]) + + sweeps_00 = np.arange( + GS_sweeps_00_min, GS_sweeps_00_max, delta_GS_sweeps_00) + damping_00 = np.linspace( + GS_damping_00_min, GS_damping_00_max, N_GS_damping_00) + SS_omega = np.linspace(SS_omega_min, SS_omega_max, N_SS_omega) + SS_damping = np.linspace(SS_damping_min, SS_damping_max, N_SS_damping) + + from mpl_toolkits.mplot3d import Axes3D + import matplotlib.pyplot as plt + from matplotlib import cm + + opti = np.zeros((N_GS_sweeps_00, 3), dtype=int) + opti_2 = np.zeros((N_GS_sweeps_00, 3), dtype=int) + opti_iter = np.zeros((N_GS_sweeps_00, 1), dtype=int) + opti_iter_2 = np.zeros((N_GS_sweeps_00, 1), dtype=int) + opti_iter_2_one = np.zeros((N_GS_sweeps_00, 1), dtype=int) + R = np.zeros((N_GS_sweeps_00, 1)) + opti_time = np.zeros((N_GS_sweeps_00, 7)) + opti_time_2 = np.zeros((N_GS_sweeps_00, 7)) + opti_time_per_iter = np.zeros((N_GS_sweeps_00, 7)) + + #opti_iter_8 = np.array([500,469,382,338,280,255,254,239,218,213,204,197],dtype=int) + + for i in range(0, N_GS_sweeps_00): + tmp = iter[i, :, :, :, 0] + tmp2 = iter[i, :, :, :, 1] + tmp3 = np.copy(tmp) + tmp3[tmp3 >= 1000] = 1 + opti[i, :] = np.unravel_index(np.argmin(tmp, axis=None), tmp.shape) + opti_2[i, :] = np.unravel_index(np.argmin(tmp2, axis=None), tmp.shape) + print(str(sweeps_00[i]) + ' ' + str(damping_00[opti[i, 0]] + ) + ' ' + str(SS_omega[opti[i, 1]])) + print(str(sweeps_00[i]) + ' ' + str(damping_00[opti_2[i, 0]] + ) + ' ' + str(SS_omega[opti_2[i, 1]])) + opti_iter[i] = iter[i, opti[i, 0], opti[i, 1], 0, 0] + opti_iter_2[i] = iter[i, opti_2[i, 0], opti_2[i, 1], 0, 1] + opti_iter_2_one[i] = iter[i, opti_2[i, 0], opti_2[i, 1], 0, 0] + opti_time[i, :] = timer[i, opti[i, 0], opti[i, 1], 0, 0, :] + opti_time_2[i, :] = timer[i, opti_2[i, 0], opti_2[i, 1], 0, 1, :] + if opti_iter_2[i] == 1000: + R[i] = 10. + else: + R[i] = opti_iter_2[i]*1. / opti_iter[i] + for j in range(0, 7): + opti_time_per_iter[i, j] = (opti_time[i, j] / opti_iter[i]) + #R[i] = opti_iter_8[i]*1. / opti_iter[i] + + plt.subplot(411) + plt.plot(sweeps_00, opti_iter) + plt.grid() + plt.subplot(412) + plt.plot(sweeps_00, opti_iter) + plt.plot(sweeps_00, opti_iter_2) + plt.plot(sweeps_00, opti_iter_2_one) + plt.grid() + plt.subplot(413) + plt.plot(sweeps_00, R) + plt.grid() + plt.subplot(414) + plt.plot(sweeps_00, damping_00[opti[:, 0]]) + plt.plot(sweeps_00, damping_00[opti_2[:, 0]]) + plt.grid() + #print np.argmin(opti_time[:,6]) + #print opti + + tmp = np.zeros((N_GS_sweeps_00, 2)) + tmp[:, 0] = sweeps_00[:] + tmp[:, 1] = np.reshape(opti_iter, (N_GS_sweeps_00,)) + np.savetxt('opti_iter.txt', tmp) + tmp[:, 1] = np.reshape(opti_iter_2, (N_GS_sweeps_00,)) + np.savetxt('opti_iter_2.txt', tmp) + tmp[:, 1] = np.reshape(opti_iter_2_one, (N_GS_sweeps_00,)) + np.savetxt('opti_iter_2_one.txt', tmp) + ''' + plt.figure() + for i in range(0,N_GS_sweeps_00): + plt.subplot(2,N_GS_sweeps_00,1+i) + plt.plot(damping_00,iter[i,:,opti[i,1],0,0]) + plt.scatter(damping_00[opti[i,0]],opti_iter[i], c='red') + plt.subplot(2,N_GS_sweeps_00,1+i+N_GS_sweeps_00) + plt.plot(SS_omega,iter[i,opti[i,0],:,0,0]) + plt.scatter(SS_omega[opti[i,1]],opti_iter[i], c='red') + + plt.figure() + plt.plot(sweeps_00,damping_00[opti[:,0]]) + + plt.figure() + plt.plot(sweeps_00,SS_omega[opti[:,1]]) + + plt.figure() + for i in range(0,8): + plt.plot(damping_00,iter[0,:,i,0,0]) + + plt.figure() + for i in range(0,8): + plt.plot(SS_omega,iter[0,i,:,0,0]) + + plt.figure() + for i in range(0,6): + plt.plot(SS_omega,iter[i,5,:,0,0]) + + for i in range(0,N_GS_sweeps_00): + fig = plt.figure() + ax = fig.add_subplot(111, projection='3d') + X, Y = np.meshgrid(SS_omega,damping_00) + ax.plot_surface(X, Y, iter[i,:,:,0,0], cmap=cm.coolwarm, + linewidth=0, alpha=0.8) + ax.set_zlim(0, 400) + ax.scatter(SS_omega[opti[i,1]],damping_00[opti[i,0]],opti_iter[i], c='red') + ''' + plt.show() + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_MC.py b/katoptron/CMAME/post_process/plate_MC.py new file mode 100644 index 0000000000000000000000000000000000000000..e30d13413bd3d5c76d42c100e23c37a4f6faf2e9 --- /dev/null +++ b/katoptron/CMAME/post_process/plate_MC.py @@ -0,0 +1,357 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +from katoptron.eigenvalues import * +import os +import fwk +"""@package docstring +This file is used to loop over cases and samples and plot their mechanical properties and solution fields. +""" + +import vtk +import tboxVtk +import tboxVtk.reader as vtkR +import tboxVtk.cutter as vtkC + +from katoptron.CMAME.model import Compute_QoIs + + +def plot_2D_mesh(pts, quad, ax): + """ + This function plots a 2D quad mesh on a given matplotlib axis + """ + import matplotlib.pyplot as plt + for i in range(0, quad.shape[0]): + x = np.zeros((quad.shape[1] + 1, )) + y = np.zeros((quad.shape[1] + 1, )) + for j in range(0, quad.shape[1]): + x[j] = pts[quad[i, j], 0] + y[j] = pts[quad[i, j], 1] + x[-1] = pts[quad[i, 0], 0] + y[-1] = pts[quad[i, 0], 1] + ax.plot(x, y, '--k', linewidth=0.5) + + +def cut_of_one_case(case_id, + ensemble_size, + n_samples, + v_min, + v_max, + file_MC_mean, + file_MC_base_dir, + at_point=False): + """ + This function loops over the samples of a given test case and plot them + """ + import matplotlib.pyplot as plt + + pts, tri, vals = cut_plate(file_MC_mean, at_point) + pts_2, quad = extract_quad_msh(file_MC_mean) + + x = pts[:, 0] + y = pts[:, 1] + + QoIs = np.zeros((4, n_samples)) + + plot_one_sampel(x, y, tri, vals, pts_2, quad, at_point) + plt.savefig('mean_case.png', dpi=400) + + file_MC_base_dir_tmp = file_MC_base_dir + str(case_id) + '/' + str( + ensemble_size) + '/' + + directory = 'case_' + str(case_id) + if not os.path.exists(directory): + os.makedirs(directory) + os.makedirs(directory + '/sample') + os.makedirs(directory + '/abs') + os.makedirs(directory + '/rel') + + for i in range(0, n_samples): + i_ensemble = (i // ensemble_size) + i_sample = np.mod(i, ensemble_size) + input_MC_file_dir = file_MC_base_dir_tmp + str(i_ensemble) + '/' + mshName_sample = input_MC_file_dir + 'plate_fused_ast1_s' + str( + i_sample) + '_0' + + QoIs[:, i] = Compute_QoIs(mshName_sample) + + pts_s, tri_s, vals_s = cut_plate(mshName_sample, at_point) + + plot_one_sampel(x, y, tri, vals_s, pts_2, quad, at_point) + plt.savefig(directory + '/sample/' + str(i) + '.png', dpi=400) + plot_diff_rel(x, + y, + tri, + vals, + vals_s, + pts_2, + quad, + v_min=v_min, + v_max=v_max, + at_point=at_point) + plt.savefig(directory + '/rel/' + str(i) + '.png', dpi=400) + plot_diff_abs(x, y, tri, vals, vals_s, pts_2, quad, at_point) + plt.savefig(directory + '/abs/' + str(i) + '.png', dpi=400) + plt.close('all') + for i in range(0, 4): + plt.figure() + plt.hist(QoIs[i, :], bins=80, density=True) + plt.xlabel('[MPa]') + plt.savefig('QoI_' + str(i) + '_case_' + str(case_id) + '.png', + dpi=400) + + plt.close('all') + + +def extract_quad_msh(mshName): + """ + This function extracts the 2D quad mesh out of a hexahedron mesh + """ + reader = vtkR.Reader() + reader.open(mshName) + rdata = reader.reader.GetOutput() + + _pts = rdata.GetPoints() + pts = np.zeros((_pts.GetNumberOfPoints(), 2)) + pts_indices = np.zeros((_pts.GetNumberOfPoints(), ), dtype=int) + for i in range(0, pts.shape[0]): + if _pts.GetPoint(i)[2] <= 0.01: + for j in range(0, 2): + pts[i][j] = _pts.GetPoint(i)[j] + pts_indices[i] = 1 + n_elems = rdata.GetNumberOfCells() + quad = [] + for i in range(0, n_elems): + elem = rdata.GetCell(i) + for j in range(0, 6): + face = elem.GetFace(j) + points_id = np.zeros((4, ), dtype=int) + good_face = True + for k in range(0, 4): + points_id[k] = face.GetPointId(k) + if pts_indices[points_id[k]] != 1: + good_face = False + break + if good_face: + if len(quad) == 0: + quad = points_id.reshape((1, 4)) + else: + quad = np.append(quad, points_id.reshape((1, 4)), axis=0) + return pts, quad + + +def cut_plate(mshName, at_point=False): + """ + This function cuts the vtk files in the middle and extracts both point + and element data. + """ + reader = vtkR.Reader() + reader.open(mshName) + cutter = vtkC.Cutter(reader.reader.GetOutputPort()) + c_output = cutter.cut(1, [0., 0., 0.5], [0., 0., 1.], tag_name='volume_id') + if at_point: + pts, tri, vals = cutter.extract(c_output, + 3, + ['u', 'x', 'y', 'z', 'G', 'von Mises'], + atPoint=True) + else: + pts, tri, vals = cutter.extract(c_output, + 3, ['u', 'x', 'y', 'z'], + atPoint=True) + pts_2, tri_2, vals_2 = cutter.extract(c_output, + 3, ['G', 'von Mises'], + atPoint=False) + vals.update(vals_2) + + return pts, tri, vals + + +def plot_2D_cut_values_at_node(x, y, tri, value, n_levels=16): + """ + This function plots data at node. + """ + import matplotlib.pyplot as plt + value = value.reshape((len(x), )) + if max(value) - min(value) > 0: + levels = np.linspace(min(value), max(value), n_levels) + plt.set_cmap('coolwarm') + plt.tricontour(x, + y, + tri, + value, + levels, + linestyles='-', + colors='black', + linewidths=0.5) + axtri = plt.tricontourf(x, y, tri, value, levels) + else: + axtri = plt.tricontourf(x, y, tri, value) + plt.gca().set_aspect('equal') + return axtri + + +def plot_2D_cut_values_at_elem(x, + y, + tri_1, + value, + v_min=0, + v_max=0, + n_levels=16, + shading=False): + """ + This function plots data at element. + """ + import matplotlib.pyplot as plt + + value = value.reshape((tri_1.shape[0], )) + if v_min == v_max: + v_min = min(value) + v_max = max(value) + + levels = np.linspace(v_min, v_max, n_levels) + plt.set_cmap('coolwarm') + if shading: + axtri = plt.tripcolor(x, y, tri_1, value, shading='gouraud') + else: + axtri = plt.tripcolor(x, y, tri_1, value, levels) + plt.gca().set_aspect('equal') + return axtri + + +def plot_one_sampel(x, y, tri, vals_s, pts_2, quad, at_point=False): + """ + This function plots data of a given sample. + """ + import matplotlib.pyplot as plt + + fig = plt.figure(figsize=(15, 4)) + + ax = plt.subplot(131) + if not at_point: + tmp = plot_2D_cut_values_at_elem(x, y, tri, vals_s['G']) + plot_2D_mesh(pts_2, quad, ax) + else: + tmp = plot_2D_cut_values_at_node(x, y, tri, vals_s['G']) + fig.colorbar(tmp, ax=plt.gca(), orientation='horizontal') + plt.title('G') + + plt.subplot(132) + tmp = plot_2D_cut_values_at_node(x, y, tri, vals_s['y']) + fig.colorbar(tmp, ax=plt.gca(), orientation='horizontal', format='%.0e') + plt.title('y') + + ax = plt.subplot(133) + if not at_point: + tmp = plot_2D_cut_values_at_elem(x, y, tri, vals_s['von Mises']) + plot_2D_mesh(pts_2, quad, ax) + else: + tmp = plot_2D_cut_values_at_node(x, y, tri, vals_s['von Mises']) + fig.colorbar(tmp, ax=plt.gca(), orientation='horizontal') + plt.title('von Mises') + + +def plot_diff_abs(x, y, tri, vals, vals_s, pts_2, quad, at_point=False): + """ + This function plots the difference between data of a given sample and the mean sample. + """ + import matplotlib.pyplot as plt + + fig = plt.figure(figsize=(15, 4)) + + plt.subplot(131) + if not at_point: + tmp = plot_2D_cut_values_at_elem(x, y, tri, vals_s['G'] - vals['G']) + plot_2D_mesh(pts_2, quad, plt.gca()) + else: + tmp = plot_2D_cut_values_at_node(x, y, tri, vals_s['G'] - vals['G']) + fig.colorbar(tmp, ax=plt.gca(), orientation='horizontal') + plt.title('delta G') + + plt.subplot(132) + tmp = plot_2D_cut_values_at_node(x, y, tri, vals_s['y'] - vals['y']) + fig.colorbar(tmp, ax=plt.gca(), orientation='horizontal', format='%.0e') + plt.title('delta y') + + plt.subplot(133) + if not at_point: + tmp = plot_2D_cut_values_at_elem( + x, y, tri, vals_s['von Mises'] - vals['von Mises']) + plot_2D_mesh(pts_2, quad, plt.gca()) + else: + tmp = plot_2D_cut_values_at_node( + x, y, tri, vals_s['von Mises'] - vals['von Mises']) + fig.colorbar(tmp, ax=plt.gca(), orientation='horizontal') + plt.title('delta von Mises') + + +def plot_diff_rel(x, + y, + tri, + vals, + vals_s, + pts_2, + quad, + v_min=-10, + v_max=10, + at_point=False): + """ + This function plots the relative difference between data of a given sample and the mean sample. + """ + import matplotlib.pyplot as plt + + fig = plt.figure(figsize=(15, 4)) + + diff_G = vals_s['G'] - vals['G'] + diff_G_rel = (100 * diff_G / vals['G']) + + plt.subplot(121) + if not at_point: + tmp = plot_2D_cut_values_at_elem(x, + y, + tri, + diff_G_rel, + v_min=v_min, + v_max=v_max) + plot_2D_mesh(pts_2, quad, plt.gca()) + else: + tmp = plot_2D_cut_values_at_node(x, y, tri, diff_G_rel) + fig.colorbar(tmp, ax=plt.gca(), orientation='horizontal') + plt.clim(v_min, v_max) + plt.title('delta G relative') + + diff_vM = vals_s['von Mises'] - vals['von Mises'] + diff_vM_rel = (100 * diff_vM / vals['von Mises']) + + plt.subplot(122) + if not at_point: + tmp = plot_2D_cut_values_at_elem(x, + y, + tri, + diff_vM_rel, + v_min=v_min, + v_max=v_max) + plot_2D_mesh(pts_2, quad, plt.gca()) + else: + tmp = plot_2D_cut_values_at_node(x, y, tri, diff_vM_rel) + fig.colorbar(tmp, ax=plt.gca(), orientation='horizontal') + plt.clim(v_min, v_max) + plt.title('delta von Mises relative') + + +def main(): + import matplotlib.pyplot as plt + + file_dir = os.path.dirname(__file__) + + file_MC_mean = file_dir + \ + '/../../../workspace/katoptron_CMAME_tests_plate/plate_fused_ast1_s0_0' + + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/gaussian/katoptron_CMAME_tests_plate_MC_GS_all_cases/case_' + n_samples = 96 + for i in range(1, 7): + cut_of_one_case(i, 32, n_samples, -10, 10, file_MC_mean, + file_MC_base_dir, False) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_MC_MG_speedup.py b/katoptron/CMAME/post_process/plate_MC_MG_speedup.py new file mode 100644 index 0000000000000000000000000000000000000000..f7a178a3ca80379d8df101a0d60eddcb409a2c44 --- /dev/null +++ b/katoptron/CMAME/post_process/plate_MC_MG_speedup.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + +from katoptron.speedup import * + + +def speedup_of_one_case(case_id, n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, use_teuchos_timers, + per_iteration): + import matplotlib.pyplot as plt + + case_id = str(case_id) + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_MC_MG_all_cases_4_NER/case_' + case_id + #'/Volumes/HD_SONY/CMAME/Plate/MG/all/katoptron_CMAME_tests_plate_MC_MG_all_cases 2/case_' + case_id + # try: + speedup = compute_speedup(n_samples, ensemble_sizes, file_MC_base_dir, + querylines, per_iteration, quantiles, + use_waves_timers, use_teuchos_timers, False) + + plot_speedup(speedup, ensemble_sizes, np.arange(0, len(querylines)), + 'case_' + case_id, querylines, per_iteration) + plt.savefig('case_' + case_id + '.png', dpi=400) + + save_speedup(speedup, ensemble_sizes, querylines, 'case_' + case_id) + + R = compute_R(n_samples, ensemble_sizes, file_MC_base_dir, quantiles, + False) + save_R(R, 'case_' + case_id) + # except: + # print '/Volumes/HD_SONY/CMAME/Plate/katoptron_CMAME_tests_plate_MC_case_' + case_id + ' has not all the files' + + +def main(): + import matplotlib.pyplot as plt + + n_samples = 64 + ensemble_sizes = [1, 8, 16, 32] + quantiles = [0, 0.33, 0.5, 0.66, 1.] + + querylines = [ + 'computeMatrices', 'Belos: Operation Op*x', 'Belos: Operation Prec*x', + 'Belos: DGKS[2]: Orthogonalization', + 'Belos: DGKS[2]: Ortho (Inner Product)', + 'Belos: DGKS[2]: Ortho (Norm)', 'Belos: DGKS[2]: Ortho (Update)', + 'total', 'write results', 'MueLu: Hierarchy: Solve (level=0)', + 'MueLu: Hierarchy: Solve (level=1)', + 'MueLu: Hierarchy: Solve : smoothing (level=0)', + 'MueLu: Hierarchy: Solve : prolongation (level=0)', + 'MueLu: Hierarchy: Solve : residual calculation (level=0)', + 'MueLu: Hierarchy: Solve : restriction (level=0)', + 'MueLu: SIMPLE: Apply: Update step - level 0', + 'MueLu: SIMPLE: Apply: Prediction step: Solve block 00 - level 0', + 'MueLu: SIMPLE: Apply: Prediction step: Compute RHS - level 0', + 'MueLu: SIMPLE: Apply: Correction step: Solve block 11 - level 0', + 'MueLu: SIMPLE: Apply: Correction step: Compute RHS - level 0' + ] + use_waves_timers = np.array([0, 7, 8], dtype=int) + use_teuchos_timers = np.array( + [1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], dtype=int) + per_iteration = [ + False, True, True, False, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True + ] + + for i in range(1, 7): + speedup_of_one_case(i, n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, use_teuchos_timers, + per_iteration) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_MC_MG_speedup_200_ER.py b/katoptron/CMAME/post_process/plate_MC_MG_speedup_200_ER.py new file mode 100644 index 0000000000000000000000000000000000000000..fd58d82a05546b81e5f52759aefb28f4f9198497 --- /dev/null +++ b/katoptron/CMAME/post_process/plate_MC_MG_speedup_200_ER.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + +from katoptron.speedup import * + + +def speedup_of_one_case(case_id, n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, use_teuchos_timers, + per_iteration): + import matplotlib.pyplot as plt + + case_id = str(case_id) + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Final_MT/katoptron_CMAME_tests_plate_MC_MG_all_cases_200/case_' + case_id + #'/Volumes/HD_SONY/CMAME/Plate/MG/all/katoptron_CMAME_tests_plate_MC_MG_all_cases 2/case_' + case_id + # try: + speedup = compute_speedup(n_samples, ensemble_sizes, file_MC_base_dir, + querylines, per_iteration, quantiles, + use_waves_timers, use_teuchos_timers, True) + + plot_speedup(speedup, ensemble_sizes, np.arange(0, len(querylines)), + 'case_' + case_id, querylines, per_iteration) + plt.savefig('case_' + case_id + '.png', dpi=400) + + save_speedup(speedup, ensemble_sizes, querylines, 'case_' + case_id) + + R = compute_R(n_samples, ensemble_sizes, file_MC_base_dir, quantiles, True) + save_R(R, 'case_' + case_id) + # except: + # print '/Volumes/HD_SONY/CMAME/Plate/katoptron_CMAME_tests_plate_MC_case_' + case_id + ' has not all the files' + + +def main(): + import matplotlib.pyplot as plt + + n_samples = 32 + ensemble_sizes = [1, 8, 16, 32] + quantiles = [0, 0.33, 0.5, 0.66, 1.] + + querylines = [ + 'computeMatrices', 'Belos: Operation Op*x', 'Belos: Operation Prec*x', + 'Belos: DGKS[2]: Orthogonalization', + 'Belos: DGKS[2]: Ortho (Inner Product)', + 'Belos: DGKS[2]: Ortho (Norm)', 'Belos: DGKS[2]: Ortho (Update)', + 'total', 'write results', 'MueLu: Hierarchy: Solve (level=0)', + 'MueLu: Hierarchy: Solve (level=1)', + 'MueLu: Hierarchy: Solve : smoothing (level=0)', + 'MueLu: Hierarchy: Solve : prolongation (level=0)', + 'MueLu: Hierarchy: Solve : residual calculation (level=0)', + 'MueLu: Hierarchy: Solve : restriction (level=0)', + 'MueLu: SIMPLE: Apply: Update step - level 0', + 'MueLu: SIMPLE: Apply: Prediction step: Solve block 00 - level 0', + 'MueLu: SIMPLE: Apply: Prediction step: Compute RHS - level 0', + 'MueLu: SIMPLE: Apply: Correction step: Solve block 11 - level 0', + 'MueLu: SIMPLE: Apply: Correction step: Compute RHS - level 0' + ] + use_waves_timers = np.array([0, 7, 8], dtype=int) + use_teuchos_timers = np.array( + [1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], + dtype=int) + per_iteration = [ + False, True, True, False, False, False, False, False, False, True, + True, True, True, True, True, True, True, True, True, True + ] + + for i in range(1, 2): + speedup_of_one_case(i, n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, use_teuchos_timers, + per_iteration) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_MC_MG_speedup_ER.py b/katoptron/CMAME/post_process/plate_MC_MG_speedup_ER.py new file mode 100644 index 0000000000000000000000000000000000000000..5356e91aeb3a6e880f3c47bd11e47b10814b89a0 --- /dev/null +++ b/katoptron/CMAME/post_process/plate_MC_MG_speedup_ER.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + +from katoptron.speedup import * + + +def speedup_of_one_case(case_id, n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, use_teuchos_timers, + per_iteration): + import matplotlib.pyplot as plt + + case_id = str(case_id) + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Final_MT/katoptron_CMAME_tests_plate_MC_MG_all_cases_2_ER_2/case_' + case_id + #'/Volumes/HD_SONY/CMAME/Plate/MG/all/katoptron_CMAME_tests_plate_MC_MG_all_cases 2/case_' + case_id + # try: + speedup = compute_speedup(n_samples, ensemble_sizes, file_MC_base_dir, + querylines, per_iteration, quantiles, + use_waves_timers, use_teuchos_timers, True) + + plot_speedup(speedup, ensemble_sizes, np.arange(0, len(querylines)), + 'case_' + case_id, querylines, per_iteration) + plt.savefig('case_' + case_id + '.png', dpi=400) + + save_speedup(speedup, ensemble_sizes, querylines, 'case_' + case_id) + + R = compute_R(n_samples, ensemble_sizes, file_MC_base_dir, quantiles, True) + save_R(R, 'case_' + case_id) + # except: + # print '/Volumes/HD_SONY/CMAME/Plate/katoptron_CMAME_tests_plate_MC_case_' + case_id + ' has not all the files' + + +def main(): + import matplotlib.pyplot as plt + + n_samples = 64 + ensemble_sizes = [1, 8, 16, 32] + quantiles = [0, 0.33, 0.5, 0.66, 1.] + + querylines = [ + 'computeMatrices', 'Belos: Operation Op*x', 'Belos: Operation Prec*x', + 'Belos: DGKS[2]: Orthogonalization', + 'Belos: DGKS[2]: Ortho (Inner Product)', + 'Belos: DGKS[2]: Ortho (Norm)', 'Belos: DGKS[2]: Ortho (Update)', + 'total', 'write results', 'MueLu: Hierarchy: Solve (level=0)', + 'MueLu: Hierarchy: Solve (level=1)', + 'MueLu: Hierarchy: Solve : smoothing (level=0)', + 'MueLu: Hierarchy: Solve : prolongation (level=0)', + 'MueLu: Hierarchy: Solve : residual calculation (level=0)', + 'MueLu: Hierarchy: Solve : restriction (level=0)', + 'MueLu: SIMPLE: Apply: Update step - level 0', + 'MueLu: SIMPLE: Apply: Prediction step: Solve block 00 - level 0', + 'MueLu: SIMPLE: Apply: Prediction step: Compute RHS - level 0', + 'MueLu: SIMPLE: Apply: Correction step: Solve block 11 - level 0', + 'MueLu: SIMPLE: Apply: Correction step: Compute RHS - level 0' + ] + use_waves_timers = np.array([0, 7, 8], dtype=int) + use_teuchos_timers = np.array( + [1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], + dtype=int) + per_iteration = [ + False, True, True, False, False, False, False, False, False, True, + True, True, True, True, True, True, True, True, True, True + ] + + for i in range(1, 7): + speedup_of_one_case(i, n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, use_teuchos_timers, + per_iteration) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_MC_MG_speedup_NER.py b/katoptron/CMAME/post_process/plate_MC_MG_speedup_NER.py new file mode 100644 index 0000000000000000000000000000000000000000..b96fb608ace8440ffd5c4d65b97f62725f52f19f --- /dev/null +++ b/katoptron/CMAME/post_process/plate_MC_MG_speedup_NER.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + +from katoptron.speedup import * + + +def speedup_of_one_case(case_id, n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, use_teuchos_timers, + per_iteration): + import matplotlib.pyplot as plt + + case_id = str(case_id) + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Final_MT/katoptron_CMAME_tests_plate_MC_MG_all_cases_2_NER_2/case_' + case_id + #'/Volumes/HD_SONY/CMAME/Plate/MG/all/katoptron_CMAME_tests_plate_MC_MG_all_cases 2/case_' + case_id + # try: + speedup = compute_speedup(n_samples, ensemble_sizes, file_MC_base_dir, + querylines, per_iteration, quantiles, + use_waves_timers, use_teuchos_timers, False) + + plot_speedup(speedup, ensemble_sizes, np.arange(0, len(querylines)), + 'case_' + case_id, querylines, per_iteration) + plt.savefig('case_' + case_id + '.png', dpi=400) + + save_speedup(speedup, ensemble_sizes, querylines, 'case_' + case_id) + + R = compute_R(n_samples, ensemble_sizes, file_MC_base_dir, quantiles, + False) + save_R(R, 'case_' + case_id) + # except: + # print '/Volumes/HD_SONY/CMAME/Plate/katoptron_CMAME_tests_plate_MC_case_' + case_id + ' has not all the files' + + +def main(): + import matplotlib.pyplot as plt + + n_samples = 64 + ensemble_sizes = [1, 8, 16, 32] + quantiles = [0, 0.33, 0.5, 0.66, 1.] + + querylines = [ + 'computeMatrices', 'Belos: Operation Op*x', 'Belos: Operation Prec*x', + 'Belos: DGKS[2]: Orthogonalization', + 'Belos: DGKS[2]: Ortho (Inner Product)', + 'Belos: DGKS[2]: Ortho (Norm)', 'Belos: DGKS[2]: Ortho (Update)', + 'total', 'write results', 'MueLu: Hierarchy: Solve (level=0)', + 'MueLu: Hierarchy: Solve (level=1)', + 'MueLu: Hierarchy: Solve : smoothing (level=0)', + 'MueLu: Hierarchy: Solve : prolongation (level=0)', + 'MueLu: Hierarchy: Solve : residual calculation (level=0)', + 'MueLu: Hierarchy: Solve : restriction (level=0)', + 'MueLu: SIMPLE: Apply: Update step - level 0', + 'MueLu: SIMPLE: Apply: Prediction step: Solve block 00 - level 0', + 'MueLu: SIMPLE: Apply: Prediction step: Compute RHS - level 0', + 'MueLu: SIMPLE: Apply: Correction step: Solve block 11 - level 0', + 'MueLu: SIMPLE: Apply: Correction step: Compute RHS - level 0' + ] + use_waves_timers = np.array([0, 7, 8], dtype=int) + use_teuchos_timers = np.array( + [1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], + dtype=int) + per_iteration = [ + False, True, True, False, False, False, False, False, False, True, + True, True, True, True, True, True, True, True, True, True + ] + + for i in range(1, 7): + speedup_of_one_case(i, n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, use_teuchos_timers, + per_iteration) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_MC_MG_total.py b/katoptron/CMAME/post_process/plate_MC_MG_total.py new file mode 100644 index 0000000000000000000000000000000000000000..213eaf0c7cb49f1c7a5200820be257aa2befe376 --- /dev/null +++ b/katoptron/CMAME/post_process/plate_MC_MG_total.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +from katoptron.speedup import * + + +def CPU_time_per_one_case(case_id, n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, use_teuchos_timers, + per_iteration): + import matplotlib.pyplot as plt + + case_id = str(case_id) + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Final_MT/katoptron_CMAME_tests_plate_MC_MG_all_cases_2_NER_2/case_' + case_id + timers = read_timers_all_ensemble_sizes(n_samples, ensemble_sizes, + file_MC_base_dir, querylines, + use_waves_timers, + use_teuchos_timers) + + print(timers.shape) + + for i in range(0, timers.shape[2]): + print(querylines[i]) + string = '' + for e in range(0, timers.shape[0]): + string = string + str( + round(np.sum(((timers[e, :, i] / ensemble_sizes[e]) / n_samples)), + 3)) + ' & ' + print(string) + print(' ') + + +def main(): + import matplotlib.pyplot as plt + + n_samples = 64 + ensemble_sizes = [1, 8, 16, 32] + quantiles = [0, 0.33, 0.5, 0.66, 1.] + + querylines = [ + 'computeMatrices', 'Belos: Operation Op*x', 'Belos: Operation Prec*x', + 'Belos: DGKS[2]: Orthogonalization', + 'Belos: PseudoBlockGmresSolMgr total solve time', + 'MueLu: Hierarchy: Setup (total)', 'Belos: DGKS[2]: Ortho (Update)', + 'total', 'write results', 'MueLu: Hierarchy: Solve (level=0)', + 'MueLu: Hierarchy: Solve (level=1)', + 'MueLu: Hierarchy: Solve : smoothing (level=0)', + 'MueLu: Hierarchy: Solve : prolongation (level=0)', + 'MueLu: Hierarchy: Solve : residual calculation (level=0)', + 'MueLu: Hierarchy: Solve : restriction (level=0)', + 'MueLu: SIMPLE: Apply: Update step - level 0', + 'MueLu: SIMPLE: Apply: Prediction step: Solve block 00 - level 0', + 'MueLu: SIMPLE: Apply: Prediction step: Compute RHS - level 0', + 'MueLu: SIMPLE: Apply: Correction step: Solve block 11 - level 0', + 'MueLu: SIMPLE: Apply: Correction step: Compute RHS - level 0', + 'compute contact matrices', 'compute block 00 matrix', 'graph' + ] + use_waves_timers = np.array([0, 7, 8, 20, 21, 22], dtype=int) + use_teuchos_timers = np.array( + [1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], + dtype=int) + per_iteration = [ + False, True, True, False, False, False, False, False, False, True, + True, True, True, True, True, True, True, True, True, True + ] + + for i in range(6, 7): + CPU_time_per_one_case(i, n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, use_teuchos_timers, + per_iteration) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_MC_MG_total_2.py b/katoptron/CMAME/post_process/plate_MC_MG_total_2.py new file mode 100644 index 0000000000000000000000000000000000000000..3d62c68ed5340414912f7343b9a8fa635e688280 --- /dev/null +++ b/katoptron/CMAME/post_process/plate_MC_MG_total_2.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +from katoptron.speedup import * + + +def CPU_time_per_one_case(case_id, n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, use_teuchos_timers, + per_iteration): + import matplotlib.pyplot as plt + + case_id = str(case_id) + file_MC_base_dir = '/Volumes/HD_SEAGATE/CMAME/Plate/MC/katoptron_CMAME_tests_plate_MC_MG_all_cases/case_' + case_id + timers = read_timers_all_ensemble_sizes(n_samples, ensemble_sizes, + file_MC_base_dir, querylines, + use_waves_timers, + use_teuchos_timers) + + print(timers.shape) + + for i in range(0, timers.shape[2]): + print(querylines[i]) + string = '' + for e in range(0, timers.shape[0]): + string = string + str( + round(np.sum((timers[e, :, i] / ensemble_sizes[e])), 3)) + ' & ' + print(string) + print(' ') + + for e in range(0, timers.shape[0]): + tmp = timers[0, :, 7] - timers[0, :, 8] - timers[0, :, 0] + np.savez('total_s' + str(ensemble_sizes[e]), time=tmp) + + +def main(): + import matplotlib.pyplot as plt + + n_samples = 6400 + ensemble_sizes = [1] + quantiles = [0, 0.33, 0.5, 0.66, 1.] + + querylines = [ + 'domain', 'Belos: Operation Op*x', 'Belos: Operation Prec*x', + 'Belos: DGKS[2]: Orthogonalization', + 'Belos: PseudoBlockGmresSolMgr total solve time', + 'MueLu: Hierarchy: Setup (total)', 'Belos: DGKS[2]: Ortho (Update)', + 'total', 'write results', 'MueLu: Hierarchy: Solve (level=0)', + 'MueLu: Hierarchy: Solve (level=1)', + 'MueLu: Hierarchy: Solve : smoothing (level=0)', + 'MueLu: Hierarchy: Solve : prolongation (level=0)', + 'MueLu: Hierarchy: Solve : residual calculation (level=0)', + 'MueLu: Hierarchy: Solve : restriction (level=0)', + 'MueLu: SIMPLE: Apply: Update step - level 0', + 'MueLu: SIMPLE: Apply: Prediction step: Solve block 00 - level 0', + 'MueLu: SIMPLE: Apply: Prediction step: Compute RHS - level 0', + 'MueLu: SIMPLE: Apply: Correction step: Solve block 11 - level 0', + 'MueLu: SIMPLE: Apply: Correction step: Compute RHS - level 0', + 'compute contact matrices', 'compute block 00 matrix', 'dp' + ] + use_waves_timers = np.array([0, 7, 8, 20, 21, 22], dtype=int) + use_teuchos_timers = np.array( + [1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], + dtype=int) + per_iteration = [ + False, True, True, False, False, False, False, False, False, True, + True, True, True, True, True, True, True, True, True, True + ] + + for i in range(6, 7): + CPU_time_per_one_case(i, n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, use_teuchos_timers, + per_iteration) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_MC_MG_total_2_analysis.py b/katoptron/CMAME/post_process/plate_MC_MG_total_2_analysis.py new file mode 100644 index 0000000000000000000000000000000000000000..af77082d2b24c494bc814fb1b9aaf9109d81e7fc --- /dev/null +++ b/katoptron/CMAME/post_process/plate_MC_MG_total_2_analysis.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +from katoptron.speedup import * +import os +import matplotlib2tikz + + +def main(): + import matplotlib.pyplot as plt + + file_dir = os.path.dirname(__file__) + + current_dir = os.getcwd() + + npzfile = np.load( + current_dir + + '/../katoptron_CMAME_tests_post_process_plate_MC_MG_total_2/total_s1.npz' + ) + time_s1 = npzfile['time'] + npzfile = np.load( + current_dir + + '/../katoptron_CMAME_tests_post_process_plate_MC_MG_total_2/total_s32.npz' + ) + time_s32 = npzfile['time'] + + ensemble_size = 32 + + cum_sp = np.zeros((200, )) + each_sp = np.zeros((200, )) + + time_s1_s32 = np.zeros((200, )) + time_s32_s32 = np.zeros((200, )) + + cum_time_s1 = 0. + cum_time_s32 = 0. + + for i in range(0, 200): + current_s1 = np.sum(time_s1[i * ensemble_size:(i + 1) * ensemble_size]) + current_s32 = time_s32[i * ensemble_size] + + time_s1_s32[i] = current_s1 + time_s32_s32[i] = current_s32 + + cum_time_s1 = cum_time_s1 + current_s1 + cum_time_s32 = cum_time_s32 + current_s32 + + each_sp[i] = (current_s1 / current_s32) + cum_sp[i] = (cum_time_s1 / cum_time_s32) + + plt.figure() + plt.plot(time_s1) + + plt.figure() + plt.plot(time_s32) + + print(np.sum(time_s1_s32)) + print(np.sum(time_s32_s32)) + + plt.figure() + plt.plot(time_s1_s32) + plt.plot(time_s32_s32) + plt.figure() + plt.plot(each_sp) + plt.figure() + plt.plot(cum_sp) + matplotlib2tikz.save("speedup.tex") + plt.show() + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_MC_QoI.py b/katoptron/CMAME/post_process/plate_MC_QoI.py new file mode 100644 index 0000000000000000000000000000000000000000..6cb7730046505c7eeb5bdeb69a7314a9ee7ad7e0 --- /dev/null +++ b/katoptron/CMAME/post_process/plate_MC_QoI.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +from katoptron.eigenvalues import * +import os +import fwk +"""@package docstring +This file is used to loop over cases and samples and plot their mechanical properties and solution fields. +""" + +import vtk +import tboxVtk +import tboxVtk.reader as vtkR +import tboxVtk.cutter as vtkC + +from katoptron.CMAME.model import Compute_QoIs + + +def main(): + import matplotlib.pyplot as plt + + file_dir = os.path.dirname(__file__) + + file_MC_base_dir = '/Volumes/HD_SEAGATE/CMAME/Plate/MC/katoptron_CMAME_tests_plate_MC_MG_all_cases_2/case_6/' + n_samples = 6400 + + QoIs = np.zeros((4, n_samples)) + + ensemble_size = 32 + + for i in range(0, n_samples): + i_ensemble = (i // ensemble_size) + i_sample = np.mod(i, ensemble_size) + input_MC_file_dir = file_MC_base_dir + str(ensemble_size) + '/' + str( + i_ensemble) + '/' + mshName_sample = input_MC_file_dir + 'plate_fused_ast1_s' + str( + i_sample) + '_0' + + QoIs[:, i] = Compute_QoIs(mshName_sample) + + print(QoIs) + + np.savez('qois_s' + str(ensemble_size), QoIs=QoIs) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_MC_QoI_analysis.py b/katoptron/CMAME/post_process/plate_MC_QoI_analysis.py new file mode 100644 index 0000000000000000000000000000000000000000..275aa2b31ec702be0e4c02eb0bdf7dba0c4c70c5 --- /dev/null +++ b/katoptron/CMAME/post_process/plate_MC_QoI_analysis.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + + + + +from katoptron.eigenvalues import * +import os +import fwk +"""@package docstring +This file is used to loop over cases and samples and plot their mechanical properties and solution fields. +""" + +import vtk +import tboxVtk +import tboxVtk.reader as vtkR +import tboxVtk.cutter as vtkC + +from katoptron.CMAME.model import Compute_QoIs +import matplotlib2tikz +from scipy import stats + + +def write_tikz_hist(filename, bins, n): + f = open(filename, 'w') + print('\\path [fill=c2, fill opacity=0.5] (axis cs:' + str( + bins[0]) + ', 0)', file=f) + for i in range(0, len(n)): + print('--(axis cs:' + str(bins[i]) + ', ' + str(n[i]) + ')', file=f) + print('--(axis cs:' + str(bins[i + 1]) + ', ' + str(n[i]) + ')', file=f) + print('--(axis cs:' + str(bins[-1]) + ', 0)', file=f) + print('--cycle;', file=f) + f.closed + + +def main(): + import matplotlib.pyplot as plt + + file_dir = os.path.dirname(__file__) + + current_dir = os.getcwd() + + npzfile = np.load( + current_dir + + '/../katoptron_CMAME_tests_post_process_plate_MC_QoI/qois_s1.npz') + QoIs = npzfile['QoIs'] + + n, bins, patches = plt.hist(QoIs[0, :], + 100, + density=True, + facecolor='g', + alpha=0.75) + write_tikz_hist('QoI_s1.tex', bins, n) + + kde = stats.gaussian_kde(QoIs[0, :]) + + x = np.linspace(1500., 5000., 100) + + p = kde(x) + + plt.figure() + plt.plot(x, p) + matplotlib2tikz.save("kde_s1.tex") + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_MC_convergence.py b/katoptron/CMAME/post_process/plate_MC_convergence.py new file mode 100644 index 0000000000000000000000000000000000000000..08d16027f4635ad625040a517028349923cba442 --- /dev/null +++ b/katoptron/CMAME/post_process/plate_MC_convergence.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +from katoptron.readers import * + + +def read_iter_all_ensemble_sizes(n_samples, ensemble_sizes, file_MC_base_dir, reduction=False): + iter = np.zeros((len(ensemble_sizes), n_samples)) + for i in range(0, len(ensemble_sizes)): + file_MC_base_dir_2 = file_MC_base_dir + \ + '/' + str(ensemble_sizes[i])+'/' + for j in range(0, int((n_samples // ensemble_sizes[i]))): + input_MC_file_dir = file_MC_base_dir_2 + str(j)+'/' + es = ensemble_sizes[i] + if reduction: + es = 1 + iter_indices, residuals = read_Belos( + input_MC_file_dir + 'belos_out.txt', es) + for k in range(0, ensemble_sizes[i]): + iter[i][j*ensemble_sizes[i]+k] = iter_indices[-1] + return iter + + +def plot_iter_all_ensemble_sizes(n_samples, iter): + import matplotlib.pyplot as plt + plt.figure() + plt.plot(list(range(0, n_samples)), + iter[0][:], 'bo', markersize=8, zorder=1) + plt.plot(list(range(0, n_samples)), + iter[1][:], 'ro', markersize=6, zorder=2) + plt.plot(list(range(0, n_samples)), + iter[2][:], 'go', markersize=4, zorder=2) + plt.plot(list(range(0, n_samples)), + iter[3][:], 'ko', markersize=2, zorder=3) + plt.xlabel('sample') + plt.ylabel('Number of iterations to converge') + + +def main(): + import matplotlib.pyplot as plt + + n_samples = 960 + ensemble_sizes = [1, 8, 16, 32] + for case_id in range(1, 5): + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/katoptron_CMAME_tests_plate_MC_GS_case_' + \ + str(case_id)+'_ER' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter) + plt.savefig('GS_case_'+str(case_id)+'_ER.png', dpi=400) + np.savetxt('GS_case_'+str(case_id)+'_ER.txt', iter, delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/katoptron_CMAME_tests_plate_MC_direct_case_' + \ + str(case_id)+'_ER' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter) + plt.savefig('direct_case_'+str(case_id)+'_ER.png', dpi=400) + np.savetxt('direct_case_'+str(case_id) + + '_ER.txt', iter, delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/katoptron_CMAME_tests_plate_MC_GS_case_' + \ + str(case_id)+'_NER' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir) + plot_iter_all_ensemble_sizes(n_samples, iter) + plt.savefig('GS_case_'+str(case_id)+'_NER.png', dpi=400) + np.savetxt('GS_case_'+str(case_id)+'_NER.txt', iter, delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/katoptron_CMAME_tests_plate_MC_direct_case_' + \ + str(case_id)+'_NER' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir) + plot_iter_all_ensemble_sizes(n_samples, iter) + plt.savefig('direct_case_'+str(case_id)+'_NER.png', dpi=400) + np.savetxt('direct_case_'+str(case_id) + + '_NER.txt', iter, delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_MC_convergence_2.py b/katoptron/CMAME/post_process/plate_MC_convergence_2.py new file mode 100644 index 0000000000000000000000000000000000000000..b0eba9e452b219b6928f50d2c18d122fbffaa3a6 --- /dev/null +++ b/katoptron/CMAME/post_process/plate_MC_convergence_2.py @@ -0,0 +1,573 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +from katoptron.readers import * + + +def read_iter_all_ensemble_sizes(n_samples, ensemble_sizes, file_MC_base_dir, reduction=False): + iter = np.zeros((len(ensemble_sizes), n_samples)) + for i in range(0, len(ensemble_sizes)): + file_MC_base_dir_2 = file_MC_base_dir + \ + '/' + str(ensemble_sizes[i])+'/' + for j in range(0, int((n_samples // ensemble_sizes[i]))): + input_MC_file_dir = file_MC_base_dir_2 + str(j)+'/' + es = ensemble_sizes[i] + if reduction: + es = 1 + iter_indices, residuals = read_Belos( + input_MC_file_dir + 'belos_out.txt', es) + for k in range(0, ensemble_sizes[i]): + iter[i][j*ensemble_sizes[i]+k] = iter_indices[-1] + return iter + + +def plot_iter_all_ensemble_sizes(n_samples, iter, print_all=False): + import matplotlib.pyplot as plt + plt.figure() + plt.plot(list(range(0, n_samples)), + iter[0][:], 'bo', markersize=8, zorder=1) + ensemble_size = 8 + for i in range(0, int(np.ceil(n_samples*1./ensemble_size))): + plt.plot(list(range(ensemble_size*i, ensemble_size*(i+1))), + iter[1][ensemble_size*i:ensemble_size*(i+1)], '-ro', linewidth=3, markersize=6, zorder=2) + if print_all: + ensemble_size = 16 + for i in range(0, int(np.ceil(n_samples*1./ensemble_size))): + plt.plot(list(range(ensemble_size*i, ensemble_size*(i+1))), + iter[2][ensemble_size*i:ensemble_size*(i+1)], '-go', linewidth=2, markersize=4, zorder=2) + ensemble_size = 32 + for i in range(0, int(np.ceil(n_samples*1./ensemble_size))): + plt.plot(list(range(ensemble_size*i, ensemble_size*(i+1))), + iter[3][ensemble_size*i:ensemble_size*(i+1)], '-ko', linewidth=1, markersize=2, zorder=3) + plt.xlabel('sample') + plt.ylabel('Number of iterations to converge') + + +def main(): + import matplotlib.pyplot as plt + + n_samples = 8 + ensemble_sizes = [1, 8] + for case_id in range(1, 2): + file_MC_base_dir = '/Users/kimliegeois/Desktop/tests_plate_vd/katoptron_CMAME_tests_plate_vd_Direct_3' + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter) + plt.savefig('Direct_3.png', dpi=400) + np.savetxt('Direct_3.txt', iter, delimiter=' ') + file_MC_base_dir = '/Users/kimliegeois/Desktop/tests_plate_vd/katoptron_CMAME_tests_plate_vd_Direct_200' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter) + plt.savefig('Direct_200.png', dpi=400) + np.savetxt('Direct_200.txt', iter, delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/tests_plate_vd/katoptron_CMAME_tests_plate_vd_GS_3' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter) + plt.grid() + plt.ylim([0, 850]) + plt.savefig('GS_3.png', dpi=400) + np.savetxt('GS_3.txt', iter, delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/tests_plate_vd/katoptron_CMAME_tests_plate_vd_GS_200' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter) + plt.grid() + plt.ylim([0, 850]) + plt.savefig('GS_200.png', dpi=400) + np.savetxt('GS_200.txt', iter, delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_vd_GS/katoptron_CMAME_tests_plate_vd_GS_3' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter) + plt.grid() + plt.ylim([0, 850]) + plt.savefig('GS_3_005.png', dpi=400) + np.savetxt('GS_3_005.txt', iter, delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_vd_GS/katoptron_CMAME_tests_plate_vd_GS_200' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter) + plt.grid() + plt.ylim([0, 850]) + plt.savefig('GS_200_005.png', dpi=400) + np.savetxt('GS_200_005.txt', iter, delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_vd_GS_2/katoptron_CMAME_tests_plate_vd_GS_3' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter) + plt.grid() + plt.ylim([0, 850]) + plt.savefig('GS_3_0005.png', dpi=400) + np.savetxt('GS_3_0005.txt', iter, delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_vd_GS_2/katoptron_CMAME_tests_plate_vd_GS_200' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter) + plt.grid() + plt.ylim([0, 850]) + plt.savefig('GS_200_0005.png', dpi=400) + np.savetxt('GS_200_0005.txt', iter, delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_vd_GS_3/katoptron_CMAME_tests_plate_vd_GS_3' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter) + plt.grid() + plt.ylim([0, 850]) + plt.savefig('GS_3_0005_group.png', dpi=400) + np.savetxt('GS_3_0005_group.txt', iter, delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_vd_GS_3/katoptron_CMAME_tests_plate_vd_GS_200' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter) + plt.grid() + plt.ylim([0, 850]) + plt.savefig('GS_200_0005_group.png', dpi=400) + np.savetxt('GS_200_0005_group.txt', iter, delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_vd_GS_3_2' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter) + plt.grid() + plt.ylim([0, 850]) + plt.savefig('GS_3_no_gamma.png', dpi=400) + np.savetxt('GS_3_no_gamma.txt', iter, delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + n_samples = 32 + ensemble_sizes = [1, 8, 16, 32] + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/fused/katoptron_CMAME_tests_fused_plate_MC_GS_all_cases/case_1' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([40, 100]) + plt.savefig('SPD_case_1_MG.png', dpi=400) + np.savetxt('SPD_case_1_MG.txt', iter, delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/fused/katoptron_CMAME_tests_fused_plate_MC_GS_all_cases/case_2' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([40, 100]) + plt.savefig('SPD_case_2_MG.png', dpi=400) + np.savetxt('SPD_case_2_MG.txt', iter, delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/fused/katoptron_CMAME_tests_fused_plate_MC_GS_all_cases/case_3' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([0, 150]) + plt.savefig('SPD_case_3_MG.png', dpi=400) + np.savetxt('SPD_case_3_MG.txt', iter, delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/fused/katoptron_CMAME_tests_fused_plate_MC_GS_all_cases/case_4' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([0, 150]) + plt.savefig('SPD_case_4_MG.png', dpi=400) + np.savetxt('SPD_case_4_MG.txt', iter, delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/fused/katoptron_CMAME_tests_fused_plate_MC_GS_all_cases/case_5' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([0, 150]) + plt.savefig('SPD_case_5_MG.png', dpi=400) + np.savetxt('SPD_case_5_MG.txt', iter, delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/fused/katoptron_CMAME_tests_fused_plate_MC_GS_all_cases/case_6' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([0, 150]) + plt.savefig('SPD_case_6_MG.png', dpi=400) + np.savetxt('SPD_case_6_MG.txt', iter, delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + + n_samples = 896 + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/MG/all/katoptron_CMAME_tests_plate_MC_MG_all_cases/case_1' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, False) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([75, 150]) + plt.savefig('MC_MG_case_1.png', dpi=400) + np.savetxt('MC_MG_case_1.txt', np.transpose(iter), delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/MG/all/katoptron_CMAME_tests_plate_MC_MG_all_cases/case_2' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, False) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([75, 150]) + plt.savefig('MC_MG_case_2.png', dpi=400) + np.savetxt('MC_MG_case_2.txt', np.transpose(iter), delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/MG/all/katoptron_CMAME_tests_plate_MC_MG_all_cases/case_3' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, False) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([75, 150]) + plt.savefig('MC_MG_case_3.png', dpi=400) + np.savetxt('MC_MG_case_3.txt', np.transpose(iter), delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/MG/all/katoptron_CMAME_tests_plate_MC_MG_all_cases/case_4' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, False) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([75, 150]) + plt.savefig('MC_MG_case_4.png', dpi=400) + np.savetxt('MC_MG_case_4.txt', np.transpose(iter), delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/MG/all/katoptron_CMAME_tests_plate_MC_MG_all_cases/case_5' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, False) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([75, 150]) + plt.savefig('MC_MG_case_5.png', dpi=400) + np.savetxt('MC_MG_case_5.txt', np.transpose(iter), delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/MG/all/katoptron_CMAME_tests_plate_MC_MG_all_cases/case_6' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, False) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([75, 150]) + plt.savefig('MC_MG_case_6.png', dpi=400) + np.savetxt('MC_MG_case_6.txt', np.transpose(iter), delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + n_samples = 96 + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_Juelich_tests_M1_assembly_fused_MC_NER_2' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, False) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([190, 210]) + plt.savefig('Juelich_NER.png', dpi=400) + np.savetxt('Juelich_NER.txt', np.transpose(iter), delimiter=' ') + iter2 = np.transpose(iter) + sum_iter = np.zeros((4, 1)) + for i in range(0, 4): + sum_iter[i] = np.sum(iter2[:, i]) + print(sum_iter / sum_iter[0]) + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_Juelich_tests_M1_assembly_fused_MC_ER_2' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([190, 310]) + plt.savefig('Juelich_ER.png', dpi=400) + np.savetxt('Juelich_ER.txt', np.transpose(iter), delimiter=' ') + iter2 = np.transpose(iter) + sum_iter = np.zeros((4, 1)) + for i in range(0, 4): + sum_iter[i] = np.sum(iter2[:, i]) + print(sum_iter / sum_iter[0]) + except: + print(file_MC_base_dir + ' has not all the files') + + n_samples = 64 + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_MC_MG_all_cases/case_1' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, False) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([50, 150]) + plt.savefig('MC_MG_case_1_2.png', dpi=400) + np.savetxt('MC_MG_case_1_2.txt', np.transpose(iter), delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_MC_MG_all_cases/case_2' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, False) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([50, 150]) + plt.savefig('MC_MG_case_2_2.png', dpi=400) + np.savetxt('MC_MG_case_2_2.txt', np.transpose(iter), delimiter=' ') + except: + print(file_MC_base_dir + ' has not all the files') + + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_MC_MG_all_cases_4_ER/case_1' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([50, 400]) + plt.savefig('MC_MG_case_1_ER.png', dpi=400) + np.savetxt('MC_MG_case_1_ER.txt', + np.transpose(iter), delimiter=' ') + print('MC_MG_case_1_ER') + iter2 = np.transpose(iter) + sum_iter = np.zeros((4, 1)) + for i in range(0, 4): + sum_iter[i] = np.sum(iter2[:, i]) + print(sum_iter / sum_iter[0]) + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_MC_MG_all_cases_4_ER/case_2' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([50, 400]) + plt.savefig('MC_MG_case_2_ER.png', dpi=400) + np.savetxt('MC_MG_case_2_ER.txt', + np.transpose(iter), delimiter=' ') + print('MC_MG_case_2_ER') + iter2 = np.transpose(iter) + sum_iter = np.zeros((4, 1)) + for i in range(0, 4): + sum_iter[i] = np.sum(iter2[:, i]) + print(sum_iter / sum_iter[0]) + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_MC_MG_all_cases_4_ER/case_3' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([50, 400]) + plt.savefig('MC_MG_case_3_ER.png', dpi=400) + np.savetxt('MC_MG_case_3_ER.txt', + np.transpose(iter), delimiter=' ') + print('MC_MG_case_3_ER') + iter2 = np.transpose(iter) + sum_iter = np.zeros((4, 1)) + for i in range(0, 4): + sum_iter[i] = np.sum(iter2[:, i]) + print(sum_iter / sum_iter[0]) + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_MC_MG_all_cases_4_ER/case_4' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([50, 400]) + plt.savefig('MC_MG_case_4_ER.png', dpi=400) + np.savetxt('MC_MG_case_4_ER.txt', + np.transpose(iter), delimiter=' ') + print('MC_MG_case_4_ER') + iter2 = np.transpose(iter) + sum_iter = np.zeros((4, 1)) + for i in range(0, 4): + sum_iter[i] = np.sum(iter2[:, i]) + print(sum_iter / sum_iter[0]) + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_MC_MG_all_cases_4_ER/case_5' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([50, 400]) + plt.savefig('MC_MG_case_5_ER.png', dpi=400) + np.savetxt('MC_MG_case_5_ER.txt', + np.transpose(iter), delimiter=' ') + print('MC_MG_case_5_ER') + iter2 = np.transpose(iter) + sum_iter = np.zeros((4, 1)) + for i in range(0, 4): + sum_iter[i] = np.sum(iter2[:, i]) + print(sum_iter / sum_iter[0]) + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_MC_MG_all_cases_4_ER/case_6' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([50, 400]) + plt.savefig('MC_MG_case_6_ER.png', dpi=400) + np.savetxt('MC_MG_case_6_ER.txt', + np.transpose(iter), delimiter=' ') + print('MC_MG_case_6_ER') + iter2 = np.transpose(iter) + sum_iter = np.zeros((4, 1)) + for i in range(0, 4): + sum_iter[i] = np.sum(iter2[:, i]) + print(sum_iter / sum_iter[0]) + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_MC_MG_all_cases_4_NER/case_1' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, False) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([100, 150]) + plt.savefig('MC_MG_case_1_NER.png', dpi=400) + np.savetxt('MC_MG_case_1_NER.txt', + np.transpose(iter), delimiter=' ') + iter2 = np.transpose(iter) + sum_iter = np.zeros((4, 1)) + for i in range(0, 4): + sum_iter[i] = np.sum(iter2[:, i]) + print(sum_iter / sum_iter[0]) + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_MC_MG_all_cases_4_NER/case_2' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, False) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([100, 150]) + plt.savefig('MC_MG_case_2_NER.png', dpi=400) + np.savetxt('MC_MG_case_2_NER.txt', + np.transpose(iter), delimiter=' ') + iter2 = np.transpose(iter) + sum_iter = np.zeros((4, 1)) + for i in range(0, 4): + sum_iter[i] = np.sum(iter2[:, i]) + print(sum_iter / sum_iter[0]) + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_MC_MG_all_cases_4_NER/case_3' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, False) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([100, 150]) + plt.savefig('MC_MG_case_3_NER.png', dpi=400) + np.savetxt('MC_MG_case_3_NER.txt', + np.transpose(iter), delimiter=' ') + iter2 = np.transpose(iter) + sum_iter = np.zeros((4, 1)) + for i in range(0, 4): + sum_iter[i] = np.sum(iter2[:, i]) + print(sum_iter / sum_iter[0]) + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_MC_MG_all_cases_4_NER/case_4' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, False) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([100, 150]) + plt.savefig('MC_MG_case_4_NER.png', dpi=400) + np.savetxt('MC_MG_case_4_NER.txt', + np.transpose(iter), delimiter=' ') + iter2 = np.transpose(iter) + sum_iter = np.zeros((4, 1)) + for i in range(0, 4): + sum_iter[i] = np.sum(iter2[:, i]) + print(sum_iter / sum_iter[0]) + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_MC_MG_all_cases_4_NER/case_5' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, False) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([100, 150]) + plt.savefig('MC_MG_case_5_NER.png', dpi=400) + np.savetxt('MC_MG_case_5_NER.txt', + np.transpose(iter), delimiter=' ') + iter2 = np.transpose(iter) + sum_iter = np.zeros((4, 1)) + for i in range(0, 4): + sum_iter[i] = np.sum(iter2[:, i]) + print(sum_iter / sum_iter[0]) + except: + print(file_MC_base_dir + ' has not all the files') + file_MC_base_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_MC_MG_all_cases_4_NER/case_6' + try: + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_MC_base_dir, False) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + plt.grid() + plt.ylim([100, 150]) + plt.savefig('MC_MG_case_6_NER.png', dpi=400) + np.savetxt('MC_MG_case_6_NER.txt', + np.transpose(iter), delimiter=' ') + iter2 = np.transpose(iter) + sum_iter = np.zeros((4, 1)) + for i in range(0, 4): + sum_iter[i] = np.sum(iter2[:, i]) + print(sum_iter / sum_iter[0]) + except: + print(file_MC_base_dir + ' has not all the files') + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_MC_convergence_3.py b/katoptron/CMAME/post_process/plate_MC_convergence_3.py new file mode 100644 index 0000000000000000000000000000000000000000..94b16298b71658dd1ca725188e5035ff801959fd --- /dev/null +++ b/katoptron/CMAME/post_process/plate_MC_convergence_3.py @@ -0,0 +1,159 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +from katoptron.readers import * + + +def read_iter_all_ensemble_sizes(n_samples, + ensemble_sizes, + file_MC_base_dir, + reduction=False): + iter = np.zeros((len(ensemble_sizes), n_samples)) + for i in range(0, len(ensemble_sizes)): + file_MC_base_dir_2 = file_MC_base_dir + '/' + str( + ensemble_sizes[i]) + '/' + for j in range(0, int((n_samples // ensemble_sizes[i]))): + input_MC_file_dir = file_MC_base_dir_2 + str(j) + '/' + es = ensemble_sizes[i] + if reduction: + es = 1 + iter_indices, residuals = read_Belos( + input_MC_file_dir + 'belos_out.txt', es) + for k in range(0, ensemble_sizes[i]): + iter[i][j * ensemble_sizes[i] + k] = iter_indices[-1] + return iter + + +def plot_iter_all_ensemble_sizes(n_samples, iter, print_all=False): + import matplotlib.pyplot as plt + plt.figure() + plt.plot(list(range(0, n_samples)), + iter[0][:], 'bo', markersize=8, zorder=1) + ensemble_size = 8 + for i in range(0, int(np.ceil(n_samples * 1. / ensemble_size))): + plt.plot(list(range(ensemble_size * i, ensemble_size * (i + 1))), + iter[1][ensemble_size * i:ensemble_size * (i + 1)], + '-ro', + linewidth=3, + markersize=6, + zorder=2) + if print_all: + ensemble_size = 16 + for i in range(0, int(np.ceil(n_samples * 1. / ensemble_size))): + plt.plot(list(range(ensemble_size * i, ensemble_size * (i + 1))), + iter[2][ensemble_size * i:ensemble_size * (i + 1)], + '-go', + linewidth=2, + markersize=4, + zorder=2) + ensemble_size = 32 + for i in range(0, int(np.ceil(n_samples * 1. / ensemble_size))): + plt.plot(list(range(ensemble_size * i, ensemble_size * (i + 1))), + iter[3][ensemble_size * i:ensemble_size * (i + 1)], + '-ko', + linewidth=1, + markersize=2, + zorder=3) + plt.xlabel('sample') + plt.ylabel('Number of iterations to converge') + + +def write_tex(n_samples, iter, filename): + f = open(filename, 'w') + print('\\addplot [c1, mark=*, mark size=2pt, mark options={solid}, only marks]', file=f) + print('table [row sep=crcr] {%', file=f) + for i in range(0, n_samples): + print(str(i) + ' ' + str(iter[0][i]) + '\\\\', file=f) + print('};', file=f) + print('\\label{pgfplots:noEP}', file=f) + ensemble_size = 8 + for i in range(0, int(np.ceil(n_samples * 1. / ensemble_size))): + print('\\addplot [line width=2pt, c2]', file=f) + print('table [row sep=crcr] {%', file=f) + print(str(ensemble_size * i) + ' ' + str( + iter[1][ensemble_size * i]) + '\\\\', file=f) + print(str(ensemble_size * + (i + 1)) + ' ' + str(iter[1][ensemble_size * + (i + 1) - 1]) + '\\\\', file=f) + print('};', file=f) + print('\\label{pgfplots:s8}', file=f) + ensemble_size = 16 + for i in range(0, int(np.ceil(n_samples * 1. / ensemble_size))): + print('\\addplot [line width=1.5pt, c3]', file=f) + print('table [row sep=crcr] {%', file=f) + print(str(ensemble_size * i) + ' ' + str( + iter[2][ensemble_size * i]) + '\\\\', file=f) + print(str(ensemble_size * + (i + 1)) + ' ' + str(iter[2][ensemble_size * + (i + 1) - 1]) + '\\\\', file=f) + print('};', file=f) + print('\\label{pgfplots:s16}', file=f) + ensemble_size = 32 + for i in range(0, int(np.ceil(n_samples * 1. / ensemble_size))): + print('\\addplot [line width=1.pt, c4]', file=f) + print('table [row sep=crcr] {%', file=f) + print(str(ensemble_size * i) + ' ' + str( + iter[3][ensemble_size * i]) + '\\\\', file=f) + print(str(ensemble_size * + (i + 1)) + ' ' + str(iter[3][ensemble_size * + (i + 1) - 1]) + '\\\\', file=f) + print('};', file=f) + print('\\label{pgfplots:s32}', file=f) + f.closed + + +def main(): + import matplotlib.pyplot as plt + + n_samples = 64 + ensemble_sizes = [1, 8, 16, 32] + + for case_id in [1, 2, 3, 4, 5, 6]: + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Final_MT/katoptron_CMAME_tests_plate_MC_MG_all_cases_2_ER_2/case_' + str( + case_id) + try: + iter = read_iter_all_ensemble_sizes(n_samples, ensemble_sizes, + file_MC_base_dir, True) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + write_tex(n_samples, iter, + 'MC_MG_case_' + str(case_id) + '_ER.tex') + plt.grid() + plt.ylim([100, 400]) + plt.savefig('MC_MG_case_' + str(case_id) + '_ER.png', dpi=400) + np.savetxt('MC_MG_case_' + str(case_id) + '_ER.txt', + np.transpose(iter), + delimiter=' ') + print('MC_MG_case_' + str(case_id) + '_ER') + iter2 = np.transpose(iter) + sum_iter = np.zeros((4, 1)) + for i in range(0, 4): + sum_iter[i] = np.sum(iter2[:, i]) + print(sum_iter / sum_iter[0]) + except: + print(file_MC_base_dir + ' has not all the files') + + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Final_MT/katoptron_CMAME_tests_plate_MC_MG_all_cases_2_NER_2/case_' + str( + case_id) + try: + iter = read_iter_all_ensemble_sizes(n_samples, ensemble_sizes, + file_MC_base_dir, False) + plot_iter_all_ensemble_sizes(n_samples, iter, True) + write_tex(n_samples, iter, + 'MC_MG_case_' + str(case_id) + '_NER.tex') + plt.grid() + plt.ylim([100, 400]) + plt.savefig('MC_MG_case_' + str(case_id) + '_NER.png', dpi=400) + np.savetxt('MC_MG_case_' + str(case_id) + '_NER.txt', + np.transpose(iter), + delimiter=' ') + iter2 = np.transpose(iter) + sum_iter = np.zeros((4, 1)) + for i in range(0, 4): + sum_iter[i] = np.sum(iter2[:, i]) + print(sum_iter / sum_iter[0]) + except: + print(file_MC_base_dir + ' has not all the files') + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_MC_speedup.py b/katoptron/CMAME/post_process/plate_MC_speedup.py new file mode 100644 index 0000000000000000000000000000000000000000..f60e31c2d4a7f26281169ea86c4a07aa5f0266c7 --- /dev/null +++ b/katoptron/CMAME/post_process/plate_MC_speedup.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +from katoptron.speedup import * + + +def speedup_of_one_case(case_id, GS, ensemble_reduction, n_samples, ensemble_sizes, quantiles, querylines, use_waves_timers, use_teuchos_timers, per_iteration): + import matplotlib.pyplot as plt + if GS: + prec = 'GS_' + else: + prec = 'direct_' + + if ensemble_reduction: + case_id = str(case_id)+'_ER' + else: + case_id = str(case_id)+'_NER' + + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/katoptron_CMAME_tests_plate_MC_' + \ + prec+'case_' + case_id + try: + speedup = compute_speedup(n_samples, ensemble_sizes, file_MC_base_dir, querylines, + per_iteration, quantiles, use_waves_timers, use_teuchos_timers, ensemble_reduction) + + plot_speedup(speedup, ensemble_sizes, np.arange( + 0, len(querylines)), prec+'case_' + case_id, querylines, per_iteration) + plt.savefig(prec+'case_' + case_id + '.png', dpi=400) + + save_speedup(speedup, ensemble_sizes, + querylines, prec+'case_' + case_id) + + R = compute_R(n_samples, ensemble_sizes, file_MC_base_dir, + quantiles, ensemble_reduction) + save_R(R, 'R_'+prec+'case_' + case_id) + except: + print('/Volumes/HD_SONY/CMAME/Plate/katoptron_CMAME_tests_plate_MC_' + + prec+'case_' + case_id + ' has not all the files') + + +def main(): + import matplotlib.pyplot as plt + + n_samples = 32 + ensemble_sizes = [1, 8, 16, 32] + quantiles = [0, 0.33, 0.5, 0.66, 1.] + + querylines = ['computeMatrices', 'Belos: Operation Op*x', 'Belos: Operation Prec*x', 'Belos: DGKS[2]: Orthogonalization', + 'Belos: DGKS[2]: Ortho (Inner Product)', 'Belos: DGKS[2]: Ortho (Norm)', 'Belos: DGKS[2]: Ortho (Update)', 'total'] + use_waves_timers = np.array([0, 7], dtype=int) + use_teuchos_timers = np.array([1, 2, 3, 4, 5, 6], dtype=int) + per_iteration = [False, True, True, False, False, False, False, False] + + for i in range(1, 5): + speedup_of_one_case(i, False, True, n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, use_teuchos_timers, per_iteration) + speedup_of_one_case(i, True, True, n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, use_teuchos_timers, per_iteration) + speedup_of_one_case(i, False, False, n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, use_teuchos_timers, per_iteration) + speedup_of_one_case(i, True, False, n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, use_teuchos_timers, per_iteration) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_convergence.py b/katoptron/CMAME/post_process/plate_convergence.py new file mode 100644 index 0000000000000000000000000000000000000000..5e76dd278c8c0c85b742e13f037cbde52a2d46bc --- /dev/null +++ b/katoptron/CMAME/post_process/plate_convergence.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + +from katoptron.readers import * + + +def main(): + import matplotlib.pyplot as plt + + file_base_dir = '/Volumes/HD_SONY/CMAME/Final_MT/katoptron_CMAME_tests_plate_MC_MG_all_cases_2_NER/case_2/1/2/' + iter_indices_1, residuals_1 = read_Belos( + file_base_dir + 'belos_out.txt', 1) + + file_base_dir = '/Volumes/HD_SONY/CMAME/Final_MT/katoptron_CMAME_tests_plate_MC_MG_all_cases_2_NER/case_2/32/0/' + iter_indices_2, residuals_2 = read_Belos( + file_base_dir + 'belos_out.txt', 3) + + print(residuals_2.shape) + + plt.figure() + plt.plot(iter_indices_1, residuals_1) + plt.plot(iter_indices_2, residuals_2[:, 2]) + plt.yscale('log') + plt.grid(True) + + plt.show() + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_cor_R.py b/katoptron/CMAME/post_process/plate_cor_R.py new file mode 100644 index 0000000000000000000000000000000000000000..e2ad9dcc73f881cf50a85aad0d8f7ebdd23a83fe --- /dev/null +++ b/katoptron/CMAME/post_process/plate_cor_R.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + + + +from katoptron.eigenvalues import * +from katoptron.readers import * +from katoptron.readers import * +import os +import fwk +"""@package docstring +This file is used to investigate the choice of prec parameters. +""" + + +def read_timer_all(n_cases, sub_cases, file_MC_base_dir): + querylines = ['Belos: Operation Op*x', + 'Belos: Operation Prec*x', + 'Belos: DGKS[2]: Orthogonalization', + 'Belos: DGKS[2]: Ortho (Inner Product)', + 'Belos: DGKS[2]: Ortho (Norm)', + 'Belos: DGKS[2]: Ortho (Update)', + 'Belos: PseudoBlockGmresSolMgr total solve time'] + timer = np.zeros((n_cases, len(sub_cases), len(querylines))) + for i in range(0, n_cases): + file_MC_base_dir_2 = file_MC_base_dir + '/' + str(i)+'/' + for j in range(0, len(sub_cases)): + input_MC_file_dir = file_MC_base_dir_2 + str(sub_cases[j])+'/' + timer[i, j, :] = read_teuchos_timers( + input_MC_file_dir+'teuchos_timers.txt', querylines) + return timer + + +def read_iter_all(n_cases, sub_cases, file_MC_base_dir): + iter = np.zeros((n_cases, len(sub_cases))) + for i in range(0, n_cases): + file_MC_base_dir_2 = file_MC_base_dir + '/' + str(i)+'/' + for j in range(0, len(sub_cases)): + input_MC_file_dir = file_MC_base_dir_2 + str(sub_cases[j])+'/' + iter_indices, residuals = read_Belos( + input_MC_file_dir + 'belos_out.txt', 1) + iter[i][j] = iter_indices[-1] + return iter + + +def main(): + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/gaussian/katoptron_CMAME_tests_plate_correlation/' + #file_dir + '/../../../workspace/katoptron_CMAME_tests_plate_mean_prec_GS_direct/' + sub_cases = ['1', '8'] + + N = 200 + correlation_min_exp = -1 + correlation_max_exp = np.log10(2) + + correlations = np.logspace( + correlation_min_exp, correlation_max_exp, N, endpoint=True) + + iter = read_iter_all(N, sub_cases, file_MC_base_dir) + timer = read_timer_all(N, sub_cases, file_MC_base_dir) + + from mpl_toolkits.mplot3d import Axes3D + import matplotlib.pyplot as plt + from matplotlib import cm + + plt.subplot(211) + plt.semilogx(correlations, iter[:, 0]) + plt.semilogx(correlations, iter[:, 1]) + plt.xlabel('correlation length') + plt.ylabel('iter') + plt.subplot(212) + plt.semilogx(correlations, np.divide(iter[:, 1], iter[:, 0])) + plt.xlabel('correlation length') + plt.ylabel('R') + + plt.figure() + plt.subplot(211) + plt.plot(1./correlations, iter[:, 0]) + plt.plot(1./correlations, iter[:, 1]) + plt.xlabel('1./correlation length') + plt.ylabel('iter') + plt.subplot(212) + plt.plot(1./correlations, np.divide(iter[:, 1], iter[:, 0])) + plt.xlabel('1./correlation length') + plt.ylabel('R') + plt.show() + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_deltas_omegas.py b/katoptron/CMAME/post_process/plate_deltas_omegas.py new file mode 100644 index 0000000000000000000000000000000000000000..fb834496840884216c793de5dfba1dd085d372dc --- /dev/null +++ b/katoptron/CMAME/post_process/plate_deltas_omegas.py @@ -0,0 +1,207 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +from katoptron.eigenvalues import * +import os +import fwk + + +def plot_as_bar_plot(x, y, semilog=False): + import matplotlib.pyplot as plt + plt.figure() + + for i in range(0, len(x)): + if i == 0: + x_bar = np.array([x[0], 0.5*x[0]+0.5*x[1]]) + y_bar = np.array([y[0], y[0]]) + elif i != len(x)-1: + x_bar = np.append(x_bar, [x_bar[-1], 0.5*x[i]+0.5*x[i+1]]) + y_bar = np.append(y_bar, [y[i], y[i]]) + else: + x_bar = np.append(x_bar, [x_bar[-1], x[i]]) + y_bar = np.append(y_bar, [y[i], y[i]]) + break + if semilog: + plt.semilogy(x_bar, y_bar) + else: + plt.plot(x_bar, y_bar) + + +def analysis_deltas_omegas(n_samples, base_dir, GS, write): + import matplotlib.pyplot as plt + current_n = 1 + + theta = np.zeros((current_n, n_samples)) + omegas = np.zeros((current_n, n_samples)) + deltas = np.zeros((current_n, n_samples), dtype=np.complex128) + + if GS: + base_dir_omega = base_dir + 'GS/omegas_GS_GS_' + base_dir_delta = base_dir + 'GS/deltas_GS_GS_' + else: + base_dir_omega = base_dir + 'direct/omegas_direct_direct_' + base_dir_delta = base_dir + 'direct/deltas_direct_direct_' + for i in range(0, n_samples): + tmp_delta = np.loadtxt(base_dir_delta+str(i)+'.txt') + omegas_c = np.loadtxt(base_dir_omega+str(i)+'.txt') + + n = tmp_delta.shape[0] + + if current_n < n: + + theta_tmp = np.zeros((n, n_samples)) + omegas_tmp = np.zeros((n, n_samples)) + deltas_tmp = np.zeros((n, n_samples), dtype=np.complex128) + + theta_tmp[0:current_n, :] = theta + omegas_tmp[0:current_n, :] = omegas + deltas_tmp[0:current_n, :] = deltas + + theta = theta_tmp + omegas = omegas_tmp + deltas = deltas_tmp + + current_n = n + + deltas_c = np.zeros((n,), dtype=np.complex128) + + deltas_c.real = tmp_delta[:, 0] + deltas_c.imag = tmp_delta[:, 1] + + deltas[0:n, i] = deltas_c + + omegas[0:n, i] = omegas_c + + theta_c = compute_theta(deltas_c) + + theta[0:n, i] = theta_c + + sort_indices = np.argsort(theta_c) + theta_c = theta_c[sort_indices] + deltas_c = deltas_c[sort_indices] + omegas_c = omegas_c[sort_indices] + + N = 720 + theta_discrete, cum_delta, deriv_delta, cum_delta_omega, deriv_delta_omega, percent_delta, percent_delta_omega = compute_cum_delta( + theta_c, deltas_c, omegas_c, N) + + indices = np.zeros((n,)) + sort_indices = np.argsort(-omegas_c) + indices[sort_indices[0:30]] = 1 + plot_eigenvalues_on_unit_circle_highlight(deltas_c, indices) + plot_polar_function(theta_discrete, deriv_delta, 1.5, 2.5) + plot_polar_function(theta_discrete, deriv_delta_omega, 3, 4) + plt.title('Sample ' + str(i)) + if GS: + plt.savefig('fig_GS_'+str(i)+'.png') + else: + plt.savefig('fig_direct_'+str(i)+'.png') + + plot_as_bar_plot(theta_discrete, deriv_delta_omega) + plt.title('Sample ' + str(i)) + if GS: + plt.savefig('fig_GS_omegas_'+str(i)+'.png') + else: + plt.savefig('fig_direct_omegas_'+str(i)+'.png') + + tmp = np.ones((len(theta[0:n, i]), 2)) + tmp[:, 0] = theta[0:n, i] + if write: + if GS: + np.savetxt('theta_GS_'+str(i)+'.txt', tmp) + else: + np.savetxt('theta_direct_'+str(i)+'.txt', tmp) + + tmp = np.ones((len(theta_discrete), 2)) + tmp[:, 0] = theta_discrete + + if write: + if GS: + np.savetxt('theta_GS_discrete_'+str(i)+'.txt', tmp) + np.savetxt('deriv_GS_delta_'+str(i)+'.tex', deriv_delta) + np.savetxt('deriv_GS_delta_omega_' + + str(i)+'.tex', deriv_delta_omega) + else: + np.savetxt('theta_direct_discrete_'+str(i)+'.txt', tmp) + np.savetxt('deriv_direct_delta_'+str(i)+'.tex', deriv_delta) + np.savetxt('deriv_direct_delta_omega_' + + str(i)+'.tex', deriv_delta_omega) + + if write: + if GS: + np.savetxt('omegas_GS_all.txt', omegas) + else: + np.savetxt('omegas_direct_all.txt', omegas) + + ensemble_sizes = np.array([8, 16, 32]) + + for i_s in range(0, len(ensemble_sizes)): + s = ensemble_sizes[i_s] + for i in range(0, n_samples, s): + i_sample_min = i + i_sample_max = i_sample_min + s + + omegas_s = omegas[:, i_sample_min:i_sample_max].flatten('F') + deltas_s = deltas[:, i_sample_min:i_sample_max].flatten('F') + theta_s = theta[:, i_sample_min:i_sample_max].flatten('F') + index = np.argwhere(np.absolute(deltas_s) >= 0.9) + + omegas_s = omegas_s[index] + deltas_s = deltas_s[index] + theta_s = theta_s[index] + + sort_indices = np.argsort(theta_s) + theta_s = theta_s[sort_indices] + deltas_s = deltas_s[sort_indices] + omegas_s = omegas_s[sort_indices] + + N = 720 + theta_discrete, cum_delta, deriv_delta, cum_delta_omega, deriv_delta_omega, percent_delta, percent_delta_omega = compute_cum_delta( + theta_s, deltas_s, omegas_s, N) + + n = len(omegas_s) + indices = np.zeros((n,)) + sort_indices = np.argsort(-omegas_s) + indices[sort_indices[0:30]] = 1 + plot_eigenvalues_on_unit_circle_highlight(deltas_s, indices) + plot_polar_function(theta_discrete, deriv_delta, 1.5, 2.5) + plot_polar_function(theta_discrete, deriv_delta_omega, 3, 4) + plt.title('Ensemble ' + str(int((i // s))) + + ' of ensemble size ' + str(s)) + if GS: + plt.savefig('fig_s_GS_' + str(s) + '_' + + str(int((i // s))) + '.png') + else: + plt.savefig('fig_s_direct_' + str(s) + '_' + + str(int((i // s))) + '.png') + plt.clf() + plt.close() + plot_as_bar_plot(theta_discrete, deriv_delta_omega) + plt.title('Ensemble ' + str(int((i // s))) + + ' of ensemble size ' + str(s)) + if GS: + plt.savefig('fig_s_GS_omegas_' + str(s) + '_' + + str(int((i // s))) + '.png') + else: + plt.savefig('fig_s_direct_omegas_' + str(s) + + '_' + str(int((i // s))) + '.png') + plt.clf() + plt.close() + + +def main(): + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + n_samples = 32 + + base_dir = file_dir + '/../../../workspace/katoptron_CMAME_tests_plate_deltas_omegas_' + write = False + + analysis_deltas_omegas(n_samples, base_dir, True, write) + analysis_deltas_omegas(n_samples, base_dir, False, write) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_deltas_omegas_direct_analysis.py b/katoptron/CMAME/post_process/plate_deltas_omegas_direct_analysis.py new file mode 100644 index 0000000000000000000000000000000000000000..9bd4fea0a32e11a14257cc570ba4bc565115e9d7 --- /dev/null +++ b/katoptron/CMAME/post_process/plate_deltas_omegas_direct_analysis.py @@ -0,0 +1,168 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +from katoptron.eigenvalues import * +import os +import fwk + + +def plot_as_bar_plot(x, y, semilog=False): + import matplotlib.pyplot as plt + plt.figure(figsize=(15, 4)) + + for i in range(0, len(x)): + if i == 0: + x_bar = np.array([x[0], 0.5*x[0]+0.5*x[1]]) + y_bar = np.array([y[0], y[0]]) + elif i != len(x)-1: + x_bar = np.append(x_bar, [x_bar[-1], 0.5*x[i]+0.5*x[i+1]]) + y_bar = np.append(y_bar, [y[i], y[i]]) + else: + x_bar = np.append(x_bar, [x_bar[-1], x[i]]) + y_bar = np.append(y_bar, [y[i], y[i]]) + break + if semilog: + plt.semilogy(x_bar, y_bar) + else: + plt.plot(x_bar, y_bar) + + +def main(): + import matplotlib.pyplot as plt + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + display = False + + current_n = 1 + n_samples = 32 + + theta = np.zeros((current_n, n_samples)) + omegas = np.zeros((current_n, n_samples)) + deltas = np.zeros((current_n, n_samples), dtype=np.complex128) + + for i in range(0, n_samples): + tmp_delta = np.loadtxt( + file_dir + '/../../../workspace/katoptron_CMAME_tests_plate_deltas_omegas_direct/deltas_direct_direct_'+str(i)+'.txt') + omegas_c = np.loadtxt( + file_dir + '/../../../workspace/katoptron_CMAME_tests_plate_deltas_omegas_direct/omegas_direct_direct_'+str(i)+'.txt') + + n = tmp_delta.shape[0] + + if current_n < n: + + theta_tmp = np.zeros((n, n_samples)) + omegas_tmp = np.zeros((n, n_samples)) + deltas_tmp = np.zeros((n, n_samples), dtype=np.complex128) + + theta_tmp[0:current_n, :] = theta + omegas_tmp[0:current_n, :] = omegas + deltas_tmp[0:current_n, :] = deltas + + theta = theta_tmp + omegas = omegas_tmp + deltas = deltas_tmp + + current_n = n + + deltas_c = np.zeros((n,), dtype=np.complex128) + + deltas_c.real = tmp_delta[:, 0] + deltas_c.imag = tmp_delta[:, 1] + + deltas[0:n, i] = deltas_c + + omegas[0:n, i] = omegas_c + + theta_c = compute_theta(deltas_c) + + theta[0:n, i] = theta_c + + sort_indices = np.argsort(theta_c) + theta_c = theta_c[sort_indices] + deltas_c = deltas_c[sort_indices] + omegas_c = omegas_c[sort_indices] + + N = 720 + theta_discrete, cum_delta, deriv_delta, cum_delta_omega, deriv_delta_omega, percent_delta, percent_delta_omega = compute_cum_delta( + theta_c, deltas_c, omegas_c, N) + + indices = np.zeros((n,)) + sort_indices = np.argsort(-omegas_c) + indices[sort_indices[0:30]] = 1 + plot_eigenvalues_on_unit_circle_highlight(deltas_c, indices) + plot_polar_function(theta_discrete, deriv_delta, 1.5, 2.5) + plot_polar_function(theta_discrete, deriv_delta_omega, 3, 4) + plt.title('Sample ' + str(i)) + plt.savefig('fig_'+str(i)+'.png') + + plot_as_bar_plot(theta_discrete, deriv_delta_omega) + plt.title('Sample ' + str(i)) + plt.savefig('fig_omegas_'+str(i)+'.png') + + tmp = np.ones((len(theta[0:n, i]), 2)) + tmp[:, 0] = theta[0:n, i] + np.savetxt('theta_'+str(i)+'.txt', tmp) + + tmp = np.ones((len(theta_discrete), 2)) + tmp[:, 0] = theta_discrete + np.savetxt('theta_discrete_'+str(i)+'.txt', tmp) + np.savetxt('deriv_delta_'+str(i)+'.tex', deriv_delta) + np.savetxt('deriv_delta_omega_'+str(i)+'.tex', deriv_delta_omega) + + np.savetxt('omegas_all.txt', omegas) + + ensemble_sizes = np.array([8, 16, 32]) + + for i_s in range(0, len(ensemble_sizes)): + s = ensemble_sizes[i_s] + for i in range(0, n_samples, s): + i_sample_min = i + i_sample_max = i_sample_min + s + + omegas_s = omegas[:, i_sample_min:i_sample_max].flatten('F') + deltas_s = deltas[:, i_sample_min:i_sample_max].flatten('F') + theta_s = theta[:, i_sample_min:i_sample_max].flatten('F') + index = np.argwhere(np.absolute(deltas_s) >= 0.9) + + omegas_s = omegas_s[index] + deltas_s = deltas_s[index] + theta_s = theta_s[index] + + sort_indices = np.argsort(theta_s) + theta_s = theta_s[sort_indices] + deltas_s = deltas_s[sort_indices] + omegas_s = omegas_s[sort_indices] + + N = 720 + theta_discrete, cum_delta, deriv_delta, cum_delta_omega, deriv_delta_omega, percent_delta, percent_delta_omega = compute_cum_delta( + theta_s, deltas_s, omegas_s, N) + + n = len(omegas_s) + indices = np.zeros((n,)) + sort_indices = np.argsort(-omegas_s) + indices[sort_indices[0:30]] = 1 + plot_eigenvalues_on_unit_circle_highlight(deltas_s, indices) + plot_polar_function(theta_discrete, deriv_delta, 1.5, 2.5) + plot_polar_function(theta_discrete, deriv_delta_omega, 3, 4) + plt.title('Ensemble ' + str(int((i // s))) + + ' of ensemble size ' + str(s)) + + plt.savefig('fig_s_' + str(s) + '_' + + str(int((i // s))) + '.png') + plt.clf() + plt.close() + plot_as_bar_plot(theta_discrete, deriv_delta_omega) + plt.title('Ensemble ' + str(int((i // s))) + + ' of ensemble size ' + str(s)) + plt.savefig('fig_s_omegas_' + str(s) + '_' + + str(int((i // s))) + '.png') + plt.clf() + plt.close() + if display: + plt.show() + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_deltas_omegas_gs_analysis.py b/katoptron/CMAME/post_process/plate_deltas_omegas_gs_analysis.py new file mode 100644 index 0000000000000000000000000000000000000000..1a9609a27d3faba4671c8f3422bc3151cb8f0009 --- /dev/null +++ b/katoptron/CMAME/post_process/plate_deltas_omegas_gs_analysis.py @@ -0,0 +1,170 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + +from katoptron.eigenvalues import * +import os +import fwk + + +def plot_as_bar_plot(x, y, semilog=False): + import matplotlib.pyplot as plt + plt.figure() + + for i in range(0, len(x)): + if i == 0: + x_bar = np.array([x[0], 0.5*x[0]+0.5*x[1]]) + y_bar = np.array([y[0], y[0]]) + elif i != len(x)-1: + x_bar = np.append(x_bar, [x_bar[-1], 0.5*x[i]+0.5*x[i+1]]) + y_bar = np.append(y_bar, [y[i], y[i]]) + else: + x_bar = np.append(x_bar, [x_bar[-1], x[i]]) + y_bar = np.append(y_bar, [y[i], y[i]]) + break + if semilog: + plt.semilogy(x_bar, y_bar) + else: + plt.plot(x_bar, y_bar) + + +def main(): + import matplotlib.pyplot as plt + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + display = True + + current_n = 1 + n_samples = 32 + + theta = np.zeros((current_n, n_samples)) + omegas = np.zeros((current_n, n_samples)) + deltas = np.zeros((current_n, n_samples), dtype=np.complex128) + + for i in range(0, n_samples): + tmp_delta = np.loadtxt( + file_dir + '/../../../workspace/katoptron_CMAME_tests_plate_deltas_omegas_GS/deltas_GS_GS_'+str(i)+'.txt') + omegas_c = np.loadtxt( + file_dir + '/../../../workspace/katoptron_CMAME_tests_plate_deltas_omegas_GS/omegas_GS_GS_'+str(i)+'.txt') + + n = tmp_delta.shape[0] + + deltas_c = np.zeros((n,), dtype=np.complex128) + + deltas_c.real = tmp_delta[:, 0] + deltas_c.imag = tmp_delta[:, 1] + + index = np.argwhere(np.absolute(deltas_c) >= 0.95) + n = len(index) + + deltas_c = deltas_c[index].reshape((n,)) + omegas_c = omegas_c[index].reshape((n,)) + + if current_n < n: + + theta_tmp = np.zeros((n, n_samples)) + omegas_tmp = np.zeros((n, n_samples)) + deltas_tmp = np.zeros((n, n_samples), dtype=np.complex128) + + theta_tmp[0:current_n, :] = theta + omegas_tmp[0:current_n, :] = omegas + deltas_tmp[0:current_n, :] = deltas + + theta = theta_tmp + omegas = omegas_tmp + deltas = deltas_tmp + + current_n = n + + deltas[0:n, i] = deltas_c + omegas[0:n, i] = omegas_c + + theta_c = compute_theta(deltas_c) + + theta[0:n, i] = theta_c + + N = 720 + theta_discrete, cum_delta, deriv_delta, cum_delta_omega, deriv_delta_omega, percent_delta, percent_delta_omega = compute_cum_delta( + theta_c, deltas_c, omegas_c, N) + + # plot_as_bar_plot(theta_discrete,deriv_delta_omega) + + indices = np.zeros((n,)) + sort_indices = np.argsort(-omegas_c) + indices[sort_indices[0:30]] = 1 + # plot_eigenvalues_on_unit_circle_highlight(deltas_c,indices) + # plot_polar_function(theta_discrete,deriv_delta,1.5,2.5) + # plot_polar_function(theta_discrete,deriv_delta_omega,3,4) + #plt.title('Sample ' + str(i)) + # plt.savefig('fig_'+str(i)+'.png') + + #sort_indices = np.argsort(theta_c) + # plt.figure() + #plt.bar(theta_c[sort_indices],omegas_c[sort_indices], width=0.1, alpha=0.6, align="center") + # plt.plot(theta_c[sort_indices],omegas_c[sort_indices]) + + #tmp = np.ones((len(theta[0:n,i]),2)) + #tmp[:,0] = theta[0:n,i] + # np.savetxt('theta_'+str(i)+'.txt',tmp) + + #tmp = np.ones((len(theta_discrete),2)) + #tmp[:,0] = theta_discrete + # np.savetxt('theta_discrete_'+str(i)+'.txt',tmp) + # np.savetxt('deriv_delta_'+str(i)+'.tex',deriv_delta) + # np.savetxt('deriv_delta_omega_'+str(i)+'.tex',deriv_delta_omega) + + # np.savetxt('omegas_all.txt',omegas) + + theta = theta.flatten('F') + deltas = deltas.flatten('F') + omegas = omegas.flatten('F') + + N = 720 + theta_discrete, cum_delta, deriv_delta, cum_delta_omega, deriv_delta_omega, percent_delta, percent_delta_omega = compute_cum_delta( + theta, deltas, omegas, N) + plot_as_bar_plot(theta_discrete, deriv_delta_omega) + #sort_indices = np.argsort(theta) + # plt.figure() + #plt.bar(theta[sort_indices],omegas[sort_indices], width=0.1, alpha=0.6, align="center") + + ''' + ensemble_sizes = np.array([8,16,32]) + + for i_s in range(0,len(ensemble_sizes)): + s = ensemble_sizes[i_s] + for i in range(0,n_samples,s): + i_sample_min = i + i_sample_max = i_sample_min + s + + omegas_s = omegas[:,i_sample_min:i_sample_max].flatten('F') + deltas_s = deltas[:,i_sample_min:i_sample_max].flatten('F') + theta_s = theta[:,i_sample_min:i_sample_max].flatten('F') + index = np.argwhere(np.absolute(deltas_s)>=0.9) + + omegas_s = omegas_s[index] + deltas_s = deltas_s[index] + theta_s = theta_s[index] + + N = 1000 + theta_discrete, cum_delta, deriv_delta, cum_delta_omega, deriv_delta_omega, percent_delta, percent_delta_omega = compute_cum_delta(theta_s,deltas_s,omegas_s,N) + + n = len(omegas_s) + indices = np.zeros((n,)) + sort_indices = np.argsort(-omegas_s) + indices[sort_indices[0:30]] = 1 + plot_eigenvalues_on_unit_circle_highlight(deltas_s,indices) + plot_polar_function(theta_discrete,deriv_delta,1.5,2.5) + plot_polar_function(theta_discrete,deriv_delta_omega,3,4) + plt.title('Ensemble ' + str(int(i/s)) + ' of ensemble size ' + str(s)) + + plt.savefig('fig_s_'+ str(s) +'_' + str(int(i/s)) + '.png') + ''' + if display: + plt.show() + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_gamma.py b/katoptron/CMAME/post_process/plate_gamma.py new file mode 100644 index 0000000000000000000000000000000000000000..eaaa22a8424d1949a123c16a0f7e60d10122720c --- /dev/null +++ b/katoptron/CMAME/post_process/plate_gamma.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + + + +from katoptron.eigenvalues import * +from katoptron.readers import * +import os +import fwk + + +def main(): + import matplotlib.pyplot as plt + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + display = False + + input_file_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_vd_GS_3_3/1/' + + for i in range(0, 8): + filename_Q = input_file_dir + str(i) + '/A_mm_after_bc.txt' + filename_GT = input_file_dir + str(i) + '/B_mm.txt' + + Q = read_mm(filename_Q) + #Q = get_symmetrical_part(Q) + GT = read_mm(filename_GT) + + norm_Q = sparse_matrix_2_norm(Q) + norm_GT = sparse_matrix_2_norm(GT) + + print((norm_Q / norm_GT)) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_gamma_R.py b/katoptron/CMAME/post_process/plate_gamma_R.py new file mode 100644 index 0000000000000000000000000000000000000000..3902d82d4f24460b5d14207263b338d3753ac60b --- /dev/null +++ b/katoptron/CMAME/post_process/plate_gamma_R.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + + + +from katoptron.eigenvalues import * +from katoptron.readers import * +from katoptron.readers import * +import os +import fwk +"""@package docstring +This file is used to investigate the choice of prec parameters. +""" + + +def read_timer_all(n_cases, sub_cases, file_MC_base_dir): + querylines = ['Belos: Operation Op*x', + 'Belos: Operation Prec*x', + 'Belos: DGKS[2]: Orthogonalization', + 'Belos: DGKS[2]: Ortho (Inner Product)', + 'Belos: DGKS[2]: Ortho (Norm)', + 'Belos: DGKS[2]: Ortho (Update)', + 'Belos: PseudoBlockGmresSolMgr total solve time'] + timer = np.zeros((n_cases, len(sub_cases), len(querylines))) + for i in range(0, n_cases): + file_MC_base_dir_2 = file_MC_base_dir + '/' + str(i)+'/' + for j in range(0, len(sub_cases)): + input_MC_file_dir = file_MC_base_dir_2 + str(sub_cases[j])+'/' + timer[i, j, :] = read_teuchos_timers( + input_MC_file_dir+'teuchos_timers.txt', querylines) + return timer + + +def read_iter_all(n_cases, sub_cases, file_MC_base_dir): + iter = np.zeros((n_cases, len(sub_cases))) + for i in range(0, n_cases): + file_MC_base_dir_2 = file_MC_base_dir + '/' + str(i)+'/' + for j in range(0, len(sub_cases)): + input_MC_file_dir = file_MC_base_dir_2 + str(sub_cases[j])+'/' + iter_indices, residuals = read_Belos( + input_MC_file_dir + 'belos_out.txt', 1) + iter[i][j] = iter_indices[-1] + return iter + + +def main(): + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + file_MC_base_dir = '/Volumes/HD_SONY/CMAME/Plate/gaussian/katoptron_CMAME_tests_plate_mean_gamma/' + #file_dir + '/../../../workspace/katoptron_CMAME_tests_plate_mean_prec_GS_direct/' + sub_cases = ['1', '8'] + + N = 200 + gamma_min_exp = -2 + gamma_max_exp = 10 + + gammas = np.logspace(gamma_min_exp, gamma_max_exp, N, endpoint=True) + + iter = read_iter_all(N, sub_cases, file_MC_base_dir) + timer = read_timer_all(N, sub_cases, file_MC_base_dir) + + from mpl_toolkits.mplot3d import Axes3D + import matplotlib.pyplot as plt + from matplotlib import cm + + plt.subplot(211) + plt.semilogx(gammas, iter[:, 0]) + plt.semilogx(gammas, iter[:, 1]) + plt.semilogx([4368992., 4368992.], [200, 1000], '--k') + plt.xlabel('gamma') + plt.ylabel('iter') + plt.subplot(212) + plt.semilogx(gammas, np.divide(iter[:, 1], iter[:, 0])) + plt.xlabel('gamma') + plt.ylabel('R') + plt.semilogx([4368992., 4368992.], [1, 5], '--k') + plt.show() + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_mean.py b/katoptron/CMAME/post_process/plate_mean.py new file mode 100644 index 0000000000000000000000000000000000000000..545e96f8659d48d3d59e9e5e0ed48c66087b2773 --- /dev/null +++ b/katoptron/CMAME/post_process/plate_mean.py @@ -0,0 +1,196 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +from katoptron.eigenvalues import * +from katoptron.readers import * +import os + +import vtk +import tboxVtk +import tboxVtk.reader as vtkR +import tboxVtk.cutter as vtkC + + +def Kirsch_equations(x, y, center_x, center_y, a, sigma_inf): + + centered_x = x-center_x + centered_y = y-center_y + + r = np.abs(centered_x+centered_y*1.0j) + theta = np.angle(centered_x+centered_y*1.0j) - (np.pi / 2) + + half_sigma_inf = ((sigma_inf / 2)) + + ar = (a / r) + ar_p_2 = np.power(ar, 2) + ar_p_4 = np.power(ar, 4) + + cos2theta = np.cos(2*theta) + sin2theta = np.sin(2*theta) + + sigma_rr = half_sigma_inf*(1-ar_p_2)+half_sigma_inf * \ + (1-4*ar_p_2+3*ar_p_4)*cos2theta + sigma_thetatheta = half_sigma_inf * \ + (1+ar_p_2)-half_sigma_inf*(1+3*ar_p_4)*cos2theta + tau_rtheta = -half_sigma_inf*(1+2*ar_p_2-3*ar_p_4)*sin2theta + + VM = np.sqrt(np.square(sigma_rr)+np.square(sigma_thetatheta) - + sigma_rr*sigma_thetatheta+3*np.square(tau_rtheta)) + + return VM + + +def cut_plate(mshName): + reader = vtkR.Reader() + reader.open(mshName) + cutter = vtkC.Cutter(reader.reader.GetOutputPort()) + c_output = cutter.cut(1, [0., 0., 0.5], [0., 0., 1.], tag_name='volume_id') + pts, tri, vals = cutter.extract( + c_output, 3, ['u', 'x', 'y', 'z'], atPoint=True) + pts_2, tri_2, vals_2 = cutter.extract( + c_output, 3, ['G', 'von Mises'], atPoint=False) + vals.update(vals_2) + + return pts, tri, vals + + +def extract_quad_msh(mshName): + reader = vtkR.Reader() + reader.open(mshName) + rdata = reader.reader.GetOutput() + + _pts = rdata.GetPoints() + pts = np.zeros((_pts.GetNumberOfPoints(), 2)) + pts_indices = np.zeros((_pts.GetNumberOfPoints(),), dtype=int) + for i in range(0, pts.shape[0]): + if _pts.GetPoint(i)[2] <= 0.01: + for j in range(0, 2): + pts[i][j] = _pts.GetPoint(i)[j] + pts_indices[i] = 1 + n_elems = rdata.GetNumberOfCells() + quad = [] + for i in range(0, n_elems): + elem = rdata.GetCell(i) + for j in range(0, 6): + face = elem.GetFace(j) + points_id = np.zeros((4,), dtype=int) + good_face = True + for k in range(0, 4): + points_id[k] = face.GetPointId(k) + if pts_indices[points_id[k]] != 1: + good_face = False + break + if good_face: + if len(quad) == 0: + quad = points_id.reshape((1, 4)) + else: + quad = np.append(quad, points_id.reshape((1, 4)), axis=0) + return pts, quad + + +def plot_2D_cut_values_at_node(x, y, tri, value, v_min, v_max, n_levels=16): + import matplotlib.pyplot as plt + value = value.reshape((len(x),)) + levels = np.linspace(v_min, v_max, n_levels) + print(levels) + + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + plt.tricontour(x, y, tri, value, levels, linestyles='-', + colors='black', linewidths=0.5) + axtri = plt.tricontourf(x, y, tri, value, levels) + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, + hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + + +def plot_2D_cut_values_at_elem(x, y, tri_1, value, v_min, v_max, n_levels=16, shading=False): + import matplotlib.pyplot as plt + + value = value.reshape((tri_1.shape[0],)) + + levels = np.linspace(v_min, v_max, n_levels) + print(levels) + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + if shading: + plt.tripcolor(x, y, tri_1, value, shading='gouraud') + else: + plt.tripcolor(x, y, tri_1, value, levels) + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, + hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + + +def plot_2D_mesh(pts, quad): + import matplotlib.pyplot as plt + fig = plt.figure(figsize=(8, 8)) + f = open('mesh_2.tex', 'w') + print('\begin{tikzpicture}', file=f) + for i in range(0, quad.shape[0]): + x = np.zeros((quad.shape[1]+1,)) + y = np.zeros((quad.shape[1]+1,)) + for j in range(0, quad.shape[1]): + x[j] = pts[quad[i, j], 0] + y[j] = pts[quad[i, j], 1] + x[-1] = pts[quad[i, 0], 0] + y[-1] = pts[quad[i, 0], 1] + string_1 = '\draw[thick] ' + for j in range(0, quad.shape[1]+1): + string_1 = string_1 + '(' + str(x[j]) + ',' + str(y[j]) + ')' + if j == quad.shape[1]: + string_1 = string_1 + ';' + else: + string_1 = string_1 + '--' + + print(string_1, file=f) + plt.plot(x, y, 'black') + plt.gca().set_aspect('equal') + + print('\end{tikzpicture}', file=f) + f.closed + + +def main(): + import matplotlib.pyplot as plt + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + display = False + + input_file_dir = '/Users/kimliegeois/Desktop/katoptron_CMAME_tests_plate_MC_MG_all_cases_2/case_1/8/0/' + + mshName = input_file_dir+'plate_fused_ast1_s0_0' + + pts, tri, vals = cut_plate(mshName) + pts_2, quad = extract_quad_msh(mshName) + + plot_2D_mesh(pts_2, quad) + + x = pts[:, 0] + y = pts[:, 1] + + VM_theory = Kirsch_equations(x, y, 5, 5, 2, 700) + plot_2D_cut_values_at_node(x, y, tri, VM_theory, 0, 3100) + plt.savefig("mean_VM_theory.pdf", transparent=True, + bbox_inches='tight', pad_inches=-0.05) + + # plot_2D_cut_values_at_node(x,y,tri,vals['u']) + plot_2D_cut_values_at_node(x, y, tri, vals['G'], -0.07967112, 0.15190813) + plt.savefig("G_0.pdf", transparent=True, + bbox_inches='tight', pad_inches=-0.05) + + plt.show() + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_mean_GS.py b/katoptron/CMAME/post_process/plate_mean_GS.py new file mode 100644 index 0000000000000000000000000000000000000000..0fefac3ea2396c7c05646ad7e20b5e54cc86fff9 --- /dev/null +++ b/katoptron/CMAME/post_process/plate_mean_GS.py @@ -0,0 +1,292 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +from katoptron.eigenvalues import * +from katoptron.readers import * +import os +import fwk +"""@package docstring +This file is used to investigate the convergence of the SOR (Gauss-Seidel with damping factor in [0,2]). +""" + +Verbose = False + +algo_inverse = 4 + + +def save_data(name, omegas, rhos): + tmp = np.zeros((len(omegas), 2)) + tmp[:, 0] = omegas + tmp[:, 1] = rhos + np.savetxt(name, tmp) + + +def Inv_triangular_matrix_1(A): + """ + This function computes the inverse of a triangular matrix based on + https://math.stackexchange.com/questions/1003801/inverse-of-an-invertible-upper-triangular-matrix-of-order-3 + + This one is slow but precise! + """ + from scipy.sparse import eye + n = A.shape[0] + invA = eye(n) + tmp = A + for i in range(1, n - 1): + invA = invA + tmp + tmp = tmp * A + return invA + + +def Inv_triangular_matrix_2(A): + """ + This function computes the inverse of a triangular matrix based on + forward substitution + + This one is fast but not precise! + """ + from scipy.sparse import eye + from scipy.sparse import csr_matrix + n = A.shape[0] + invA = np.zeros((n, n)) + tmpA = A.todense() + for i in range(0, n): + invA[i, :] = invA[i, :] - A[i, 0:(i - 1)].dot(invA[0:(i - 1), :]) + invA[i, i] = 1. + return csr_matrix(invA) + + +def Inv_triangular_matrix_3(A, B): + from scipy.sparse.linalg import spsolve_triangular + n = A.shape[0] + X = np.zeros((n, n)) + + for i in range(1, n): + #X[:,[i]] = spsolve_triangular(A, B[:,i]) + tmp = A.tocsr()[0:i, :].tocsc()[:, 0:i] + X[0:i, [i]] = spsolve_triangular(tmp, B[0:i, i]) + return X + + +def Inv_triangular_matrix_4(A): + """ + This function computes the inverse of a triangular matrix based on + a recursive approach + + This one is fast and precise! + """ + from scipy.sparse import csr_matrix + from scipy.sparse import eye + n = A.shape[0] + + n_max = 100 + + if n < n_max: + return Inv_triangular_matrix_1(eye(n) - A).todense() + else: + n1 = n // 2 + invA = np.zeros((n, n)) + invA[0:n1, 0:n1] = Inv_triangular_matrix_4(A[0:n1, 0:n1]) + invA[n1:n, n1:n] = Inv_triangular_matrix_4(A[n1:n, n1:n]) + tmp = invA[n1:n, n1:n] * A[n1:n, 0:n1] + invA[n1:n, 0:n1] = -tmp.dot(invA[0:n1, 0:n1]) + return invA + + +def M_Jac(A): + """ + This function returns the iterative matrix of the Jacobi approach applied on A + If this matrix has a spectral radius strictly smaller than 1, the optimal + damping parameters of the SOR applied on A can be deduced analytically. + """ + from scipy.sparse import diags + from scipy.sparse import eye + invD = diags(1. / A.diagonal(), 0) + n = A.shape[0] + return eye(n) - invD * A + + +def M_SOR(A, omega): + """ + This function returns the iterative matrix of the SOR approach applied on A. + """ + from scipy.sparse import tril + from scipy.sparse import triu + from scipy.sparse import eye + from scipy.sparse import diags + from scipy.sparse.linalg import inv + from scipy.sparse.linalg import spsolve_triangular + + E = -tril(A, -1) + F = -triu(A, 1) + invD = diags(1. / A.diagonal(), 0) + + L = invD * E + U = invD * F + I = eye(A.shape[0]) + + if algo_inverse == 1: + x = Inv_triangular_matrix_1(omega * L) * ((1. - omega) * I + omega * U) + elif algo_inverse == 2: + x = Inv_triangular_matrix_2(I - omega * L) * ( + (1. - omega) * I + omega * U) + elif algo_inverse == 3: + x = Inv_triangular_matrix_3(I - omega * L, + ((1. - omega) * I + omega * U).todense()) + elif algo_inverse == 4: + x = Inv_triangular_matrix_4(I - omega * L) * ( + (1. - omega) * I + omega * U) + return x + + +def spectral_radius_analysis(A, + N, + timers, + tmp_name, + omega_min=0., + omega_max=2.): + """ + This function computes the spectral radii. + """ + timers['Compute M_Jac'].start() + m_Jac = M_Jac(A) + timers['Compute M_Jac'].stop() + timers['Compute rho_Jac'].start() + rho_Jac = spectral_radius(m_Jac) + timers['Compute rho_Jac'].stop() + + if Verbose: + if rho_Jac >= 1.: + print('The Jacobi approach does not converge on this matrix as rho(M_Jac) = ' + str( + rho_Jac)) + else: + print('The Jacobi approach does converge on this matrix as rho(M_Jac) = ' + str( + rho_Jac)) + + omegas = np.linspace(omega_min, omega_max, N) + rho_SOR = np.ones(omegas.shape) + + for i in range(0, N): + if 0. < omegas[i] and omegas[i] < 2.: + timers['Compute M_SOR'].start() + m_SOR = M_SOR(A, omegas[i]) + timers['Compute M_SOR'].stop() + timers['Compute rho_SOR'].start() + try: + rho_SOR[i] = spectral_radius(m_SOR) + except: + rho_SOR[i:(N + 1)] = 1. + timers['Compute M_SOR'].stop() + break + timers['Compute M_SOR'].stop() + + if Verbose: + if rho_SOR[i] >= 1.: + print('The SOR approach does not converge on this matrix as rho(M_SOR) = ' + str( + rho_SOR[i]) + ' with omega = ' + str(omegas[i])) + else: + print('The SOR approach does converge on this matrix as rho(M_SOR) = ' + str( + rho_SOR[i]) + ' with omega = ' + str(omegas[i])) + print(str(((100. * i) // N)) + + ' % of the omegas are evaluated ') + save_data(tmp_name, omegas, rho_SOR) + if Verbose: + print(timers) + + return rho_Jac, omegas, rho_SOR + + +def main(): + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + timers = fwk.Timers() + + timers['Read data'].start() + input_file_dir = file_dir + '/../../../workspace/katoptron_CMAME_tests_plate/' + filename_K = input_file_dir + 'A_mm_after_bc.txt' + filename_GT = input_file_dir + 'B_mm.txt' + filename_rhs = input_file_dir + 'b_mm_after_bc.txt' + + K = read_mm(filename_K) + K = get_symmetrical_part(K) + GT = read_mm(filename_GT) + G = GT.transpose() + timers['Read data'].stop() + timers['Compute and apply gamma'].start() + norm_K = sparse_matrix_2_norm(K) + norm_GT = sparse_matrix_2_norm(GT) + + b = read_mm(filename_rhs, is_sparse=False) + b0 = b[0:K.shape[0]] + + gamma = (norm_K / norm_GT) + + Q = K + gamma * G * GT + timers['Compute and apply gamma'].stop() + + from numpy import linalg as LA + + n = 20 + gs = Gauss_Seidel(K, n=n, damping=1.) + xn, norm_res_K = gs.dot_with_norm(b0) + gs = Gauss_Seidel(K, n=n, damping=0.8) + xn, norm_res_Q = gs.dot_with_norm(b0) + + n_omegas = 50 + omegas = np.linspace(0., 2., n_omegas) + res_omegas = np.zeros((n_omegas, n+2)) + res_omegas[:, 0] = omegas + import matplotlib.pyplot as plt + plt.figure() + for i in range(0, n_omegas): + gs = Gauss_Seidel(K, n=n, damping=omegas[i]) + xn, norm_res = gs.dot_with_norm(b0) + tmp = (norm_res / norm_res[0]) + res_omegas[i, 1:n+2] = np.reshape(tmp[:], (n+1,)) + plt.plot(tmp) + plt.grid() + + plt.figure() + plt.plot(omegas, res_omegas[:, 1]) + plt.plot(omegas, res_omegas[:, 2]) + plt.plot(omegas, res_omegas[:, 3]) + print(res_omegas) + for i in range(1, n+1): + j = np.argmin(res_omegas[:, i+1]) + print(omegas[j]) + np.savetxt('res_omegas.txt', res_omegas) + + plt.show() + + print(timers) + + ''' + R = approx_Schur_complement(Q, G, GT) + + N = 5 + + timers_R = fwk.Timers() + timers_Q = fwk.Timers() + rho_Jac_R, omegas_R, rho_SOR_R = spectral_radius_analysis(R, + N, + timers_R, + 'tmp_SOR_R.out', + omega_min=0., + omega_max=1.) + save_data('SOR_R.out', omegas_R, rho_SOR_R) + print timers_R + rho_Jac_Q, omegas_Q, rho_SOR_Q = spectral_radius_analysis(Q, + N, + timers_Q, + 'tmp_SOR_Q.out', + omega_min=0.8, + omega_max=2.) + save_data('SOR_Q.out', omegas_Q, rho_SOR_Q) + np.savetxt('Jac.out', (rho_Jac_R, rho_Jac_Q)) + print timers_Q + ''' + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_mean_GS_omega.py b/katoptron/CMAME/post_process/plate_mean_GS_omega.py new file mode 100644 index 0000000000000000000000000000000000000000..b4df656e35a4710d32086df0a960db855990d9f3 --- /dev/null +++ b/katoptron/CMAME/post_process/plate_mean_GS_omega.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + +from katoptron.eigenvalues import * +from katoptron.readers import * +import os +import fwk + + +def main(): + import matplotlib.pyplot as plt + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + display = False + + input_file_dir = file_dir + '/../../../workspace/katoptron_CMAME_tests_plate/' + + mshName = input_file_dir+'plate_fused_ast1_s0_0' + + filename_Q = input_file_dir + 'ApCTC_mm.txt' # 'A_mm_after_bc.txt' # + filename_GT = input_file_dir + 'B_mm.txt' + + Q = read_mm(filename_Q) + Q = get_symmetrical_part(Q) + GT = read_mm(filename_GT) + G = GT.transpose() + + R = approx_Schur_complement(Q, G, GT) + + if diagonal_dominance(R): + print('R is diagonally dominant') + else: + print('R is not diagonally dominant') + if diagonal_dominance(Q): + print('Q is diagonally dominant') + else: + print('Q is not diagonally dominant') + + if is_SPD(R): + print('R is SPD') + else: + print('R is not SPD') + + if is_SPD(Q): + print('Q is SPD') + else: + print('Q is not SPD') + #Qjac = jacobi_iteration_matrix(Q) + #Rjac = jacobi_iteration_matrix(R) + + #mu_Q = np.absolute(spectral_radius(Qjac)) + #mu_R = np.absolute(spectral_radius(Rjac)) + + #print mu_Q + #print mu_R + + #print 2/(1+np.sqrt(1-mu_Q**2)) + #print 2/(1+np.sqrt(1-mu_R**2)) + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/post_process/plate_mean_convergence.py b/katoptron/CMAME/post_process/plate_mean_convergence.py new file mode 100644 index 0000000000000000000000000000000000000000..7ba726c6d4d0adff77cdd448cd8e8607007ad9e5 --- /dev/null +++ b/katoptron/CMAME/post_process/plate_mean_convergence.py @@ -0,0 +1,223 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +from katoptron.eigenvalues import * +import os +import fwk + +import vtk +import tboxVtk +import tboxVtk.reader as vtkR +import tboxVtk.lineExtractor as vtkC + + +def Kirsch_equations(x, y, center_x, center_y, a, sigma_inf): + + centered_x = x-center_x + centered_y = y-center_y + + r = np.abs(centered_x+centered_y*1.0j) + theta = np.angle(centered_x+centered_y*1.0j) - (np.pi / 2) + + half_sigma_inf = ((sigma_inf / 2)) + + ar = (a / r) + ar_p_2 = np.power(ar, 2) + ar_p_4 = np.power(ar, 4) + + cos2theta = np.cos(2*theta) + sin2theta = np.sin(2*theta) + + sigma_rr = half_sigma_inf*(1-ar_p_2)+half_sigma_inf * \ + (1-4*ar_p_2+3*ar_p_4)*cos2theta + sigma_thetatheta = half_sigma_inf * \ + (1+ar_p_2)-half_sigma_inf*(1+3*ar_p_4)*cos2theta + tau_rtheta = -half_sigma_inf*(1+2*ar_p_2-3*ar_p_4)*sin2theta + + VM = np.sqrt(np.square(sigma_rr)+np.square(sigma_thetatheta) - + sigma_rr*sigma_thetatheta+3*np.square(tau_rtheta)) + + return VM + + +def cut_plate(mshName): + reader = vtkR.Reader() + reader.open(mshName) + cutter = vtkC.Cutter(reader.reader.GetOutputPort()) + c_output = cutter.cut(1, [0., 0., 0.5], [0., 0., 1.], tag_name='volume_id') + pts, tri, vals = cutter.extract( + c_output, 3, ['u', 'x', 'y', 'z'], atPoint=True) + pts_2, tri_2, vals_2 = cutter.extract( + c_output, 3, ['G', 'von Mises'], atPoint=False) + vals.update(vals_2) + + return pts, tri, vals + + +def cut_line(mshName, P1, P2): + reader = vtkR.Reader() + reader.open(mshName) + cutter = vtkC.LineExtractor(reader.reader.GetOutputPort()) + c_output = cutter.cut(1, P1, P2, tag_name='volume_id') + pts, tri, vals = cutter.extract( + c_output, ['u', 'x', 'y', 'z'], atPoint=True) + pts_2, tri_2, vals_2 = cutter.extract( + c_output, ['G', 'von Mises'], atPoint=False) + vals.update(vals_2) + + return pts, tri, vals + + +def extract_quad_msh(mshName): + reader = vtkR.Reader() + reader.open(mshName) + rdata = reader.reader.GetOutput() + + _pts = rdata.GetPoints() + pts = np.zeros((_pts.GetNumberOfPoints(), 2)) + pts_indices = np.zeros((_pts.GetNumberOfPoints(),), dtype=int) + for i in range(0, pts.shape[0]): + if _pts.GetPoint(i)[2] <= 0.01: + for j in range(0, 2): + pts[i][j] = _pts.GetPoint(i)[j] + pts_indices[i] = 1 + n_elems = rdata.GetNumberOfCells() + quad = [] + for i in range(0, n_elems): + elem = rdata.GetCell(i) + for j in range(0, 6): + face = elem.GetFace(j) + points_id = np.zeros((4,), dtype=int) + good_face = True + for k in range(0, 4): + points_id[k] = face.GetPointId(k) + if pts_indices[points_id[k]] != 1: + good_face = False + break + if good_face: + if len(quad) == 0: + quad = points_id.reshape((1, 4)) + else: + quad = np.append(quad, points_id.reshape((1, 4)), axis=0) + return pts, quad + + +def plot_2D_cut_values_at_node(x, y, tri, value, v_min, v_max, n_levels=16): + import matplotlib.pyplot as plt + value = value.reshape((len(x),)) + levels = np.linspace(v_min, v_max, n_levels) + print(levels) + + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + plt.tricontour(x, y, tri, value, levels, linestyles='-', + colors='black', linewidths=0.5) + axtri = plt.tricontourf(x, y, tri, value, levels) + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, + hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + + +def plot_2D_cut_values_at_elem(x, y, tri_1, value, v_min, v_max, n_levels=16, shading=False): + import matplotlib.pyplot as plt + + value = value.reshape((tri_1.shape[0],)) + + levels = np.linspace(v_min, v_max, n_levels) + print(levels) + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + if shading: + plt.tripcolor(x, y, tri_1, value, shading='gouraud') + else: + plt.tripcolor(x, y, tri_1, value, levels) + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, + hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + + +def plot_2D_mesh(pts, quad): + import matplotlib.pyplot as plt + fig = plt.figure(figsize=(8, 8)) + f = open('mesh_2.tex', 'w') + print('\begin{tikzpicture}', file=f) + for i in range(0, quad.shape[0]): + x = np.zeros((quad.shape[1]+1,)) + y = np.zeros((quad.shape[1]+1,)) + for j in range(0, quad.shape[1]): + x[j] = pts[quad[i, j], 0] + y[j] = pts[quad[i, j], 1] + x[-1] = pts[quad[i, 0], 0] + y[-1] = pts[quad[i, 0], 1] + string_1 = '\draw[thick] ' + for j in range(0, quad.shape[1]+1): + string_1 = string_1 + '(' + str(x[j]) + ',' + str(y[j]) + ')' + if j == quad.shape[1]: + string_1 = string_1 + ';' + else: + string_1 = string_1 + '--' + + print(string_1, file=f) + plt.plot(x, y, 'black') + plt.gca().set_aspect('equal') + + print('\end{tikzpicture}', file=f) + f.closed + + +def plot_1D_data_per_elem(pts, elems, vals): + import matplotlib.pyplot as plt + + plt.figure() + for i in range(0, elems.shape[0]): + if i == 0: + x = np.array([pts[elems[i][0]], pts[elems[i][1]]]) + y = np.array([vals[i], vals[i]]) + else: + x = np.append(x, [pts[elems[i][0]], pts[elems[i][1]]]) + y = np.append(y, [vals[i], vals[i]]) + + plt.plot(x, y, 'r') + + +def main(): + import matplotlib.pyplot as plt + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + display = False + + mshName_extended_1 = file_dir + \ + '/../../../workspace/katoptron_CMAME_tests_plate_extended/plate_fused_ast1_s0_0' + mshName_extended_2 = file_dir + \ + '/../../../workspace/katoptron_CMAME_tests_plate_extended_1/plate_fused_ast1_s0_0' + mshName_mean = file_dir + \ + '/../../../workspace/katoptron_CMAME_tests_plate/plate_fused_ast1_s0_0' + + i = 0 + for mshName in [mshName_extended_1, mshName_extended_2, mshName_mean]: + if i == 2: + pts, tri, vals = cut_line(mshName, [5., 5., 0.5], [10, 5., 0.5]) + else: + pts, tri, vals = cut_line(mshName, [5., 5., 0.5], [50, 5., 0.5]) + VM_theory = Kirsch_equations(pts+5, np.zeros(pts.shape), 5, 0, 2, 700) + plot_1D_data_per_elem(pts, tri, vals['von Mises']) + plt.plot(pts, VM_theory) + plt.ylabel('[MPa]') + plt.xlabel('Pos') + plt.savefig('fig_'+str(i)+'.png') + i = i + 1 + # plt.show() + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMAME/slurm/blake_MC_MG.slurm.sh b/katoptron/CMAME/slurm/blake_MC_MG.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..a1025926185c079e1e975f6e5644fc338556ce85 --- /dev/null +++ b/katoptron/CMAME/slurm/blake_MC_MG.slurm.sh @@ -0,0 +1,53 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=MC_MG +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/MC_MG.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=48 +export KMP_PLACE_THREADS=24c,2t +export KMP_AFFINITY=compact + +export MKL_NUM_THREADS=${OMP_NUM_THREADS} + +function setEnsembleReduction(){ + remove2env INCLUDE "${Trilinos_DIR}/include" + remove2env LIB "${Trilinos_DIR}/lib" + remove2env PYTHONPATH "${Trilinos_DIR}/lib/python2.7/site-packages" + remove2env LD_LIBRARY_PATH "${Trilinos_DIR}/lib/python2.7/site-packages/PyTrilinos" + remove2env LD_LIBRARY_PATH "${Trilinos_DIR}/lib/python2.7/site-packages" + remove2env LD_LIBRARY_PATH "${Trilinos_DIR}/lib" + if [ “$1†== “false†]; then + export Trilinos_DIR=$Trilinos_DIR_NO_ER + export Waves_DIR=$Waves_DIR_NO_ER + export ensemble_reduction="false" + else + export Trilinos_DIR=$Trilinos_DIR_ER + export Waves_DIR=$Waves_DIR_ER + export ensemble_reduction="true" + fi + add2env INCLUDE "${Trilinos_DIR}/include" end + add2env LIB "${Trilinos_DIR}/lib" end + add2env PYTHONPATH "${Trilinos_DIR}/lib/python2.7/site-packages" front + add2env LD_LIBRARY_PATH "${Trilinos_DIR}/lib/python2.7/site-packages/PyTrilinos" end + add2env LD_LIBRARY_PATH "${Trilinos_DIR}/lib/python2.7/site-packages" end + add2env LD_LIBRARY_PATH "${Trilinos_DIR}/lib" end + cd $Waves_DIR +} + +setEnsembleReduction false + +python run.py -k ${OMP_NUM_THREADS} katoptron/CMAME/tests/plate_MC_MG_all_cases.py + +setEnsembleReduction true + +python run.py -k ${OMP_NUM_THREADS} katoptron/CMAME/tests/plate_MC_MG_all_cases.py diff --git a/katoptron/CMAME/tests/plate_MC_MG_all_cases.py b/katoptron/CMAME/tests/plate_MC_MG_all_cases.py new file mode 100644 index 0000000000000000000000000000000000000000..fa7ce38900da4bdd8c47c37498590af122e0b0ae --- /dev/null +++ b/katoptron/CMAME/tests/plate_MC_MG_all_cases.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""@package docstring +This test runs the four different cases as defined in table 2 of the paper +with a SIMPLE-GS-GS preconditioner. +""" + + + + + +import katoptron.CMAME.model as model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + + +def evaluate_one_ensemble(ensemble_size, case_id, first_sample_id, msh, comm, + file_dir): + """ + This function evaluates one ensemble for a given test case + """ + work_dir = os.getcwd() + args = parseargs() + + p = model.get_parameters(case_id, first_sample_id) + p['MueLu xml template file name'] = '/../../preconditioners/SIMPLE_gs_direct_lvl_MT.xml.in' + + pm = model.plate_model(ensemble_size, np.array([0]), msh, comm, file_dir, + work_dir, p) + pm.run() + + +def evaluate_all_ensembles(ensemble_sizes, case_ids, N, msh, comm, file_dir): + """ + This function loop over the test cases, the ensemble sizes, + and the ensembles + """ + for case_id in case_ids: + directory_case_id = 'case_' + str(case_id) + if not os.path.exists(directory_case_id): + os.makedirs(directory_case_id) + os.chdir(directory_case_id) + for ensemble_size in ensemble_sizes: + directory = str(ensemble_size) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + directory = str(ensemble_index) + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + first_sample_id = ensemble_index * ensemble_size + + evaluate_one_ensemble(ensemble_size, case_id, first_sample_id, + msh, comm, file_dir) + os.chdir('..') + os.chdir('..') + os.chdir('..') + + +def main(): + """ + This loads the mesh and define the case ids and ensemble sizes + """ + comm, rank, size = m.utilities.import_MPI() + + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.geo', 'plate_1_tmp', 'plate_2.geo', + 'plate_2_tmp', 'plate_fused', file_dir + '/../mesh', + work_dir, comm, rank, size) + + deterministic = False + + if deterministic: + N = 1 + ensemble_sizes = [1] + case_ids = [0] + else: + N = 96 + ensemble_sizes = [1, 8, 16, 24, 32] + case_ids = [1, 2, 3, 4, 5, 6, 7, 8, 9] + + nThreads = u.Initialize_Kokkos() + evaluate_all_ensembles(ensemble_sizes, case_ids, N, msh, comm, file_dir) + u.Finalize_Kokkos() + + +if __name__ == "__main__": + main() diff --git a/katoptron/CMakeLists.txt b/katoptron/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..3b458a4307803b318d9b063163bec505e0e357bf --- /dev/null +++ b/katoptron/CMakeLists.txt @@ -0,0 +1,12 @@ +# Kim, you need to set your dependencies here! + +# Add source and exe dir +ADD_SUBDIRECTORY( src ) +ADD_SUBDIRECTORY( _src ) + +ADD_SUBDIRECTORY( exe ) + +# Add test dir +MACRO_AddTest(${CMAKE_CURRENT_SOURCE_DIR}/tests) +MACRO_AddTest(${CMAKE_CURRENT_SOURCE_DIR}/tests 2) + diff --git a/katoptron/Juelich/UQ/GS.py b/katoptron/Juelich/UQ/GS.py new file mode 100644 index 0000000000000000000000000000000000000000..34ad8a5f57fe01f22726ccd9374fb36421e916aa --- /dev/null +++ b/katoptron/Juelich/UQ/GS.py @@ -0,0 +1,290 @@ +import numpy + +from katoptron.eigenvalues import * +from scipy.sparse import eye +import matplotlib.pyplot as plt +import scipy + +import katoptron.utilities as u + + +def spectral_radii_bound(A, omega_min=0., omega_max=2., n_omega=100): + from scipy.sparse import tril + from scipy.sparse import triu + from scipy.sparse import eye + from scipy.sparse import diags + from scipy.sparse import issparse + + omegas = np.linspace(omega_min, omega_max, n_omega) + rhos = np.ones((n_omega, )) + + Adiag = A.diagonal() + + invD = diags(1. / Adiag, 0) + + scaled_A = invD * A + + L = -tril(scaled_A, -1) + U = -triu(scaled_A, 1) + + n = A.shape[0] + + #n = 100 + + l_n = np.zeros((n, )) + u_n = np.zeros((n, )) + + l_2n = np.zeros((n, n - 1)) + u_2n = np.zeros((n, n - 1)) + + T_l_n = np.zeros((n, )) + T_u_n = np.zeros((n, )) + L_abs = np.abs(L) + U_abs = np.abs(U) + + l_n = L_abs.sum(axis=1) + u_n = U_abs.sum(axis=1) + + T_l_n = L_abs.max(axis=1) + T_u_n = U_abs.max(axis=1) + + if np.max(l_n) > 1: + print('error') + return omegas, rhos + if np.max(T_l_n) > 1: + print('error') + return omegas, rhos + ''' + for i in range(0,n): + print i + print n + tmp = L.getrow(i) + T_l_n[i] = np.max(np.abs(tmp)) + tmp = U.getrow(i) + T_l_n[i] = np.max(np.abs(tmp)) + ''' + + for i in range(0, n): + for j in range(0, i): + u_2n[i, j] = u_n[i] + u_n[j] + l_2n[i, j] = l_n[i] + l_n[j] + for j in range(i + 1, n): + u_2n[i, j - 1] = u_n[i] + u_n[j] + l_2n[i, j - 1] = l_n[i] + l_n[j] + + for omega_i in range(0, n_omega): + omega = omegas[omega_i] + + tmp_1 = np.divide(2 * np.abs(1 - omega) + omega * u_2n, + 2. - omega * l_2n) + + max_1 = np.amax(tmp_1) + + tmp_2 = np.zeros((n, )) + for i in range(0, n): + scalar_1 = ((np.abs(1 - omega) + omega * u_n[i]) / (1 - + omega * l_n[i])) + scalar_2 = ((np.abs(1 - omega)) / (1 - omega * T_u_n[i])) + scalar_3 = np.abs(1 - omega) + omega * u_n[i] + scalar_4 = np.max([scalar_2, scalar_3]) + tmp_2[i] = np.min([scalar_1, scalar_4]) + + max_2 = np.max(tmp_2) + + rhos[i] = np.max([max_1, max_2]) + + return omegas, rhos + + +def is_Z_matrix(A): + from scipy.sparse import diags + Adiag = A.diagonal() + + D = diags(Adiag, 0) + + Aoff = A - D + + max_row = Aoff.max(axis=1) + + if np.max(max_row) <= 0: + return True + else: + return False + + +def is_M_matrix(A): + is_Z = is_Z_matrix(A) + if not is_Z: + return False + is_spd = is_SPD(A) + + return is_spd + + +def spectral_radii(A, omegas, n_power=10): + from scipy.sparse import tril + from scipy.sparse import triu + from scipy.sparse import eye + from scipy.sparse import diags + from scipy.sparse import issparse + + n_omega = len(omegas) + rhos = np.ones((n_omega, )) + + E = -tril(A, -1) + F = -triu(A, 1) + invD = diags(1. / A.diagonal(), 0) + n = A.shape[0] + I = eye(n) + + for omega_i in range(0, n_omega): + #print omega_i + omega = omegas[omega_i] + if omega == 0. or omega == 2.: + rhos[omega_i] = 1. + else: + N = I - omega * invD * E + M = (1. - omega) * I + omega * invD * F + rhos[omega_i] = np.min([gen_power_method(M, N, n=n_power), 1.]) + + #print rhos + + return rhos + + +def main(): + comm, rank, siz = u.import_MPI() + + post_process = True + + #base_dir = '/Volumes/HD_SONY/Thesis/Juelich/GS/order_44/1/0/' + + #A_u = read_mm(base_dir+'A_00_mm.txt', -1, True, True, False) + #A_T = read_mm(base_dir+'A_11_mm.txt', -1, True, True, True) + + # scipy.sparse.save_npz('A_T.npz',A_T) + # scipy.sparse.save_npz('A_u.npz',A_u) + + if post_process: + omegas = np.loadtxt('omegas.txt') + rho_T = np.loadtxt('rho_T.txt') + rho_u = np.loadtxt('rho_u.txt') + + omegas = np.loadtxt('results_3/omegas.txt') + rho_T = np.loadtxt('results_3/rho_T.txt') + rho_u_A = np.loadtxt('results_3/rho_u_A.txt') + rho_u_B = np.loadtxt('results_3/rho_u_B.txt') + + rho_T[omegas >= 1.75] = 1. + i_T = np.argmin(rho_T) + i_u_A = np.argmin(rho_u_A) + i_u_B = np.argmin(rho_u_B) + + print(omegas[i_T]) + print(omegas[i_u_A]) + print(omegas[i_u_B]) + + plt.figure() + plt.plot(omegas, rho_T) + plt.plot(omegas, rho_u_A) + plt.plot(omegas, rho_u_B) + plt.show() + + else: + print('Read data: start') + + A_T = scipy.sparse.load_npz('A_T.npz') + A_u_A = scipy.sparse.load_npz('A_u.npz') + A_u_B = scipy.sparse.load_npz('A_u_B.npz') + + print('Read data: end ' + str(siz)) + + print('Spectral radius computation') + + n_omega = 201 + n_power = 100 + omegas = np.linspace(0., 2., n_omega) + + n_omega_per_MPI = int(np.floor(float(n_omega) / siz)) + my_first_i = n_omega_per_MPI * rank + my_last_i = my_first_i + n_omega_per_MPI + n_my_data = my_last_i-my_first_i + + omegas_tmp = omegas[my_first_i:my_last_i] + + rho_u_A = np.ones((n_omega, 1)) + rho_u_B = np.ones((n_omega, 1)) + rho_T = np.zeros((n_omega, 1)) + + rho_u_A_tmp = spectral_radii(A_u_A, omegas_tmp, n_power=n_power) + rho_u_B_tmp = spectral_radii(A_u_B, omegas_tmp, n_power=n_power) + rho_T_tmp = spectral_radii(A_T, omegas_tmp, n_power=n_power) + + if rank == 0: + np.savetxt('omegas_'+str(rank)+'.txt', omegas_tmp) + np.savetxt('rho_T_'+str(rank)+'.txt', rho_T_tmp) + np.savetxt('rho_u_'+str(rank)+'_A.txt', rho_u_A_tmp) + np.savetxt('rho_u_'+str(rank)+'_B.txt', rho_u_B_tmp) + + if n_my_data > 1: + for j in range(0, n_my_data): + rho_u_A[my_first_i+j] = rho_u_A_tmp[j] + rho_u_B[my_first_i+j] = rho_u_B_tmp[j] + rho_T[my_first_i+j] = rho_T_tmp[j] + else: + rho_u_A[my_first_i] = rho_u_A_tmp + rho_u_B[my_first_i] = rho_u_B_tmp + rho_T[my_first_i] = rho_T_tmp + + for i in range(1, siz): + first_i = n_omega_per_MPI * i + last_i = first_i + n_omega_per_MPI + + n_data = last_i-first_i + + data = comm.recv(source=i, tag=11) + + if n_data > 1: + for j in range(0, n_data): + rho_u_A[first_i+j] = data[j] + else: + rho_u_A[first_i] = data + + data = comm.recv(source=i, tag=11) + + if n_data > 1: + for j in range(0, n_data): + rho_u_B[first_i+j] = data[j] + else: + rho_u_B[first_i] = data + + data = comm.recv(source=i, tag=11) + + if n_data > 1: + for j in range(0, n_data): + rho_T[first_i+j] = data[j] + else: + rho_T[first_i] = data + else: + np.savetxt('omegas_'+str(rank)+'.txt', omegas_tmp) + np.savetxt('rho_T_'+str(rank)+'.txt', rho_T_tmp) + np.savetxt('rho_u_'+str(rank)+'_A.txt', rho_u_A_tmp) + np.savetxt('rho_u_'+str(rank)+'_B.txt', rho_u_B_tmp) + comm.send(rho_u_A_tmp, dest=0, tag=11) + comm.send(rho_u_B_tmp, dest=0, tag=11) + comm.send(rho_T_tmp, dest=0, tag=11) + + if rank == 0: + print(omegas) + print(rho_T) + print(rho_u_A) + print(rho_u_B) + + np.savetxt('omegas.txt', omegas) + np.savetxt('rho_T.txt', rho_T) + np.savetxt('rho_u_A.txt', rho_u_A) + np.savetxt('rho_u_B.txt', rho_u_B) + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/UQ/GS_2.py b/katoptron/Juelich/UQ/GS_2.py new file mode 100644 index 0000000000000000000000000000000000000000..ca05f67529eab9ed0812d4f5bccff866aed7a016 --- /dev/null +++ b/katoptron/Juelich/UQ/GS_2.py @@ -0,0 +1,198 @@ +import numpy + +from katoptron.eigenvalues import * +from scipy.sparse import eye +import matplotlib.pyplot as plt +import scipy + +import katoptron.utilities as u + + +def spectral_radii_bound(A, omega_min=0., omega_max=2., n_omega=100): + from scipy.sparse import tril + from scipy.sparse import triu + from scipy.sparse import eye + from scipy.sparse import diags + from scipy.sparse import issparse + + omegas = np.linspace(omega_min, omega_max, n_omega) + rhos = np.ones((n_omega, )) + + Adiag = A.diagonal() + + invD = diags(1. / Adiag, 0) + + scaled_A = invD * A + + L = -tril(scaled_A, -1) + U = -triu(scaled_A, 1) + + n = A.shape[0] + + #n = 100 + + l_n = np.zeros((n, )) + u_n = np.zeros((n, )) + + l_2n = np.zeros((n, n - 1)) + u_2n = np.zeros((n, n - 1)) + + T_l_n = np.zeros((n, )) + T_u_n = np.zeros((n, )) + L_abs = np.abs(L) + U_abs = np.abs(U) + + l_n = L_abs.sum(axis=1) + u_n = U_abs.sum(axis=1) + + T_l_n = L_abs.max(axis=1) + T_u_n = U_abs.max(axis=1) + + if np.max(l_n) > 1: + print('error') + return omegas, rhos + if np.max(T_l_n) > 1: + print('error') + return omegas, rhos + ''' + for i in range(0,n): + print i + print n + tmp = L.getrow(i) + T_l_n[i] = np.max(np.abs(tmp)) + tmp = U.getrow(i) + T_l_n[i] = np.max(np.abs(tmp)) + ''' + + for i in range(0, n): + for j in range(0, i): + u_2n[i, j] = u_n[i] + u_n[j] + l_2n[i, j] = l_n[i] + l_n[j] + for j in range(i + 1, n): + u_2n[i, j - 1] = u_n[i] + u_n[j] + l_2n[i, j - 1] = l_n[i] + l_n[j] + + for omega_i in range(0, n_omega): + omega = omegas[omega_i] + + tmp_1 = np.divide(2 * np.abs(1 - omega) + omega * u_2n, + 2. - omega * l_2n) + + max_1 = np.amax(tmp_1) + + tmp_2 = np.zeros((n, )) + for i in range(0, n): + scalar_1 = ((np.abs(1 - omega) + omega * u_n[i]) / (1 - + omega * l_n[i])) + scalar_2 = ((np.abs(1 - omega)) / (1 - omega * T_u_n[i])) + scalar_3 = np.abs(1 - omega) + omega * u_n[i] + scalar_4 = np.max([scalar_2, scalar_3]) + tmp_2[i] = np.min([scalar_1, scalar_4]) + + max_2 = np.max(tmp_2) + + rhos[i] = np.max([max_1, max_2]) + + return omegas, rhos + + +def is_Z_matrix(A): + from scipy.sparse import diags + Adiag = A.diagonal() + + D = diags(Adiag, 0) + + Aoff = A - D + + max_row = Aoff.max(axis=1) + + if np.max(max_row) <= 0: + return True + else: + return False + + +def is_M_matrix(A): + is_Z = is_Z_matrix(A) + if not is_Z: + return False + is_spd = is_SPD(A) + + return is_spd + + +def spectral_radii(A, omegas, n_power=10): + from scipy.sparse import tril + from scipy.sparse import triu + from scipy.sparse import eye + from scipy.sparse import diags + from scipy.sparse import issparse + + n_omega = len(omegas) + rhos = np.ones((n_omega, )) + + E = -tril(A, -1) + F = -triu(A, 1) + invD = diags(1. / A.diagonal(), 0) + n = A.shape[0] + I = eye(n) + + for omega_i in range(0, n_omega): + #print omega_i + omega = omegas[omega_i] + if omega == 0. or omega == 2.: + rhos[omega_i] = 1. + else: + N = I - omega * invD * E + M = (1. - omega) * I + omega * invD * F + rhos[omega_i] = np.min([gen_power_method(M, N, n=n_power), 1.]) + + #print rhos + + return rhos + + +def main(): + comm, rank, siz = u.import_MPI() + + post_process = True + + base_dir = '/Users/kimliegeois/Desktop/preload/katoptron_tests_1_cube_tet_block_5/1/' + + A = read_mm(base_dir+'A_mm_after_bc.txt', -1) + A_u = read_mm(base_dir+'A_00_mm.txt', -1, True, True, False) + A_T = read_mm(base_dir+'A_11_mm.txt', -1, True, True, True) + + B = jacobi_iteration_matrix(A) + B_u = jacobi_iteration_matrix(get_symmetrical_part(A_u)) + B_T = jacobi_iteration_matrix(A_T) + + sp = spectral_radius(B) + sp_u = spectral_radius(B_u) + sp_T = spectral_radius(B_T) + + A_u_f = A_u.todense() + index = np.array([3, 4, 5, 15, 16, 17, 18, 19, 20, 21, 22, 23]) + # => rho = 0.875 (sum off diag = 1.8904321, diag = 2.16049383) nu = 0.2 + index = np.array([3, 15, 18, 21]) + index = np.array([4, 16, 19, 22]) # => rho = 0.875 + # index = np.array([5,17,20,23]) #=> rho = 0.4285714285714285 nu = 0.2 + # => rho = .3035714285714295 (sum off diag = 3.2793209800000005, diag = 2.16049383) nu = 0.2 + index = np.array([3, 4, 15, 16, 18, 19, 21, 22]) + # if nu = 0 OK! rho(B_u) = 0.8125 + A_u_f_1 = A_u_f[index, :] + A_u_f_2 = A_u_f_1[:, index] + print(A_u_f_2) + print(sp) + print(sp_u) + print(sp_T) + + B_u = jacobi_iteration_matrix(scipy.sparse.csr_matrix(A_u_f_2)) + + print(B_u.todense()) + sp_u = spectral_radius(B_u) + print(sp_u) + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/UQ/__init__.py b/katoptron/Juelich/UQ/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e8aed8a0e2f77220f1adb944a0e00d317b1934bc --- /dev/null +++ b/katoptron/Juelich/UQ/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +# katoptron.Juelich.post_process MODULE initialization file diff --git a/katoptron/Juelich/UQ/copulas.py b/katoptron/Juelich/UQ/copulas.py new file mode 100644 index 0000000000000000000000000000000000000000..118c368de56f2a0c05ddace73064aeaa7644403f --- /dev/null +++ b/katoptron/Juelich/UQ/copulas.py @@ -0,0 +1,12 @@ + +from scipy.stats import lognorm +import numpy as np + + +def lognormal(points, means, sigmas): + randomVariable = np.zeros(points.shape) + for i in range(0, points.shape[0]): + randomVariable[i, :] = lognorm.ppf(points[i, :], + sigmas[i], + scale=np.exp(means[i])) + return randomVariable diff --git a/katoptron/Juelich/UQ/halton.py b/katoptron/Juelich/UQ/halton.py new file mode 100644 index 0000000000000000000000000000000000000000..0fc60976907f756741fc1ea70b9bb9512eec8248 --- /dev/null +++ b/katoptron/Juelich/UQ/halton.py @@ -0,0 +1,392 @@ +def halton ( i, m ): + +#*****************************************************************************80 +# +## HALTON computes an element of a Halton sequence. +# +# Licensing: +# +# This code is distributed under the GNU LGPL license. +# +# Modified: +# +# 10 August 2016 +# +# Author: +# +# John Burkardt +# +# Reference: +# +# John Halton, +# On the efficiency of certain quasi-random sequences of points +# in evaluating multi-dimensional integrals, +# Numerische Mathematik, +# Volume 2, pages 84-90, 1960. +# +# Parameters: +# +# Input, integer I, the index of the element of the sequence. +# 0 <= I. +# +# Input, integer M, the spatial dimension. +# 1 <= M <= 1600. +# +# Output, real R(M), the element of the sequence with index I. +# + import numpy as np + + i = int ( i ) + + t = np.ones ( m ) + + t = i * t +# +# Carry out the computation. +# + prime_inv = np.zeros ( m ) + for j in range ( 0, m ): + prime_inv[j] = 1.0 / float ( prime ( j ) ) + + r = np.zeros ( m ) + + while ( 0 < np.sum ( t ) ): + for j in range ( 0, m ): + d = ( t[j] % prime ( j ) ) + r[j] = r[j] + float ( d ) * prime_inv[j] + prime_inv[j] = (prime_inv[j] / prime ( j )) + t[j] = ( t[j] // prime ( j ) ) + + return r + +def halton_base ( i, m, b ): + +#*****************************************************************************80 +# +## HALTON_BASE computes an element of a Halton sequence with user bases. +# +# Licensing: +# +# This code is distributed under the GNU LGPL license. +# +# Modified: +# +# 11 August 2016 +# +# Author: +# +# John Burkardt +# +# Reference: +# +# John Halton, +# On the efficiency of certain quasi-random sequences of points +# in evaluating multi-dimensional integrals, +# Numerische Mathematik, +# Volume 2, pages 84-90, 1960. +# +# Parameters: +# +# Input, integer I, the index of the element of the sequence. +# 0 <= I. +# +# Input, integer M, the spatial dimension. +# +# Input, integer B(M), the bases to use for each dimension. +# +# Output, real R(M), the element of the sequence with index I. +# + import numpy as np + + i = int ( i ) + + t = np.ones ( m ) + + t = i * t +# +# Carry out the computation. +# + b_inv = np.zeros ( m ) + for j in range ( 0, m ): + b_inv[j] = 1.0 / b[j] + + r = np.zeros ( m ) + + while ( 0 < np.sum ( t ) ): + for j in range ( 0, m ): + d = ( t[j] % b[j] ) + r[j] = r[j] + float ( d ) * b_inv[j] + b_inv[j] = (b_inv[j] / b[j]) + t[j] = ( t[j] // b[j] ) + + return r + +def halton_inverse ( r, m ): + +#*****************************************************************************80 +# +## HALTON_INVERSE inverts an element of the Halton sequence. +# +# Licensing: +# +# This code is distributed under the GNU LGPL license. +# +# Modified: +# +# 10 August 2016 +# +# Author: +# +# John Burkardt +# +# Parameters: +# +# Input, real R(M), the I-th element of the Halton sequence. +# 0 <= R < 1.0 +# +# Input, integer M, the spatial dimension. +# +# Output, integer I, the index of the element of the sequence. +# + import numpy as np + from sys import exit + + for j in range ( 0, m ): + if ( r[j] < 0.0 or 1.0 <= r[j] ): + print ( '' ) + print ( 'HALTON_INVERSE - Fatal error!' ) + print ( ' 0 <= R < 1.0 is required.' ) + exit ( 'HALTON_INVERSE - Fatal error!' ) +# +# Compute the index based on the first component, +# because base 2 is reliable. +# + t = r[0] + i = 0 + p = 1 + + while ( t != 0 ): + t = t * 2.0 + d = np.floor ( t ) + i = i + d * p + p = p * 2 + t = t - d + + return i + +def prime ( n ): + +#*****************************************************************************80 +# +## PRIME returns returns any of the first PRIME_MAX prime numbers. +# +# Discussion: +# +# PRIME_MAX is 1600, and the largest prime stored is 13499. +# +# Thanks to Bart Vandewoestyne for pointing out a typo, 18 February 2005. +# +# Licensing: +# +# This code is distributed under the GNU LGPL license. +# +# Modified: +# +# 05 December 2014 +# +# Author: +# +# John Burkardt +# +# Reference: +# +# Milton Abramowitz and Irene Stegun, +# Handbook of Mathematical Functions, +# US Department of Commerce, 1964, pages 870-873. +# +# Daniel Zwillinger, +# CRC Standard Mathematical Tables and Formulae, +# 30th Edition, +# CRC Press, 1996, pages 95-98. +# +# Parameters: +# +# Input, integer N, the index of the desired prime number. +# In general, is should be true that 0 <= N < PRIME_MAX. +# +# Output, integer P, the N-th prime. +# + import numpy as np + from sys import exit + + prime_max = 1600 + + prime_vector = np.array ( [ + 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, \ + 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, \ + 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, \ + 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, \ + 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, \ + 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, \ + 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, \ + 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, \ + 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, \ + 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, \ + 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, \ + 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, \ + 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, \ + 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, \ + 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, \ + 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, \ + 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, \ + 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, \ + 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, \ + 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, \ + 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291, \ + 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, \ + 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, \ + 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, \ + 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583, \ + 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657, \ + 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733, \ + 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, \ + 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879, 1889, \ + 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987, \ + 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053, \ + 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, \ + 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213, \ + 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287, \ + 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, \ + 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423, \ + 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521, 2531, \ + 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609, 2617, \ + 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, \ + 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741, \ + 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803, 2819, \ + 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903, \ + 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, \ + 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, \ + 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, 3169, 3181, \ + 3187, 3191, 3203, 3209, 3217, 3221, 3229, 3251, 3253, 3257, \ + 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331, \ + 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413, \ + 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511, \ + 3517, 3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571, \ + 3581, 3583, 3593, 3607, 3613, 3617, 3623, 3631, 3637, 3643, \ + 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727, \ + 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821, \ + 3823, 3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889, 3907, \ + 3911, 3917, 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989, \ + 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, \ + 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, 4133, 4139, \ + 4153, 4157, 4159, 4177, 4201, 4211, 4217, 4219, 4229, 4231, \ + 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297, \ + 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409, \ + 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493, \ + 4507, 4513, 4517, 4519, 4523, 4547, 4549, 4561, 4567, 4583, \ + 4591, 4597, 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657, \ + 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751, \ + 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817, 4831, \ + 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937, \ + 4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999, 5003, \ + 5009, 5011, 5021, 5023, 5039, 5051, 5059, 5077, 5081, 5087, \ + 5099, 5101, 5107, 5113, 5119, 5147, 5153, 5167, 5171, 5179, \ + 5189, 5197, 5209, 5227, 5231, 5233, 5237, 5261, 5273, 5279, \ + 5281, 5297, 5303, 5309, 5323, 5333, 5347, 5351, 5381, 5387, \ + 5393, 5399, 5407, 5413, 5417, 5419, 5431, 5437, 5441, 5443, \ + 5449, 5471, 5477, 5479, 5483, 5501, 5503, 5507, 5519, 5521, \ + 5527, 5531, 5557, 5563, 5569, 5573, 5581, 5591, 5623, 5639, \ + 5641, 5647, 5651, 5653, 5657, 5659, 5669, 5683, 5689, 5693, \ + 5701, 5711, 5717, 5737, 5741, 5743, 5749, 5779, 5783, 5791, \ + 5801, 5807, 5813, 5821, 5827, 5839, 5843, 5849, 5851, 5857, \ + 5861, 5867, 5869, 5879, 5881, 5897, 5903, 5923, 5927, 5939, \ + 5953, 5981, 5987, 6007, 6011, 6029, 6037, 6043, 6047, 6053, \ + 6067, 6073, 6079, 6089, 6091, 6101, 6113, 6121, 6131, 6133, \ + 6143, 6151, 6163, 6173, 6197, 6199, 6203, 6211, 6217, 6221, \ + 6229, 6247, 6257, 6263, 6269, 6271, 6277, 6287, 6299, 6301, \ + 6311, 6317, 6323, 6329, 6337, 6343, 6353, 6359, 6361, 6367, \ + 6373, 6379, 6389, 6397, 6421, 6427, 6449, 6451, 6469, 6473, \ + 6481, 6491, 6521, 6529, 6547, 6551, 6553, 6563, 6569, 6571, \ + 6577, 6581, 6599, 6607, 6619, 6637, 6653, 6659, 6661, 6673, \ + 6679, 6689, 6691, 6701, 6703, 6709, 6719, 6733, 6737, 6761, \ + 6763, 6779, 6781, 6791, 6793, 6803, 6823, 6827, 6829, 6833, \ + 6841, 6857, 6863, 6869, 6871, 6883, 6899, 6907, 6911, 6917, \ + 6947, 6949, 6959, 6961, 6967, 6971, 6977, 6983, 6991, 6997, \ + 7001, 7013, 7019, 7027, 7039, 7043, 7057, 7069, 7079, 7103, \ + 7109, 7121, 7127, 7129, 7151, 7159, 7177, 7187, 7193, 7207, \ + 7211, 7213, 7219, 7229, 7237, 7243, 7247, 7253, 7283, 7297, \ + 7307, 7309, 7321, 7331, 7333, 7349, 7351, 7369, 7393, 7411, \ + 7417, 7433, 7451, 7457, 7459, 7477, 7481, 7487, 7489, 7499, \ + 7507, 7517, 7523, 7529, 7537, 7541, 7547, 7549, 7559, 7561, \ + 7573, 7577, 7583, 7589, 7591, 7603, 7607, 7621, 7639, 7643, \ + 7649, 7669, 7673, 7681, 7687, 7691, 7699, 7703, 7717, 7723, \ + 7727, 7741, 7753, 7757, 7759, 7789, 7793, 7817, 7823, 7829, \ + 7841, 7853, 7867, 7873, 7877, 7879, 7883, 7901, 7907, 7919, \ + 7927, 7933, 7937, 7949, 7951, 7963, 7993, 8009, 8011, 8017, \ + 8039, 8053, 8059, 8069, 8081, 8087, 8089, 8093, 8101, 8111, \ + 8117, 8123, 8147, 8161, 8167, 8171, 8179, 8191, 8209, 8219, \ + 8221, 8231, 8233, 8237, 8243, 8263, 8269, 8273, 8287, 8291, \ + 8293, 8297, 8311, 8317, 8329, 8353, 8363, 8369, 8377, 8387, \ + 8389, 8419, 8423, 8429, 8431, 8443, 8447, 8461, 8467, 8501, \ + 8513, 8521, 8527, 8537, 8539, 8543, 8563, 8573, 8581, 8597, \ + 8599, 8609, 8623, 8627, 8629, 8641, 8647, 8663, 8669, 8677, \ + 8681, 8689, 8693, 8699, 8707, 8713, 8719, 8731, 8737, 8741, \ + 8747, 8753, 8761, 8779, 8783, 8803, 8807, 8819, 8821, 8831, \ + 8837, 8839, 8849, 8861, 8863, 8867, 8887, 8893, 8923, 8929, \ + 8933, 8941, 8951, 8963, 8969, 8971, 8999, 9001, 9007, 9011, \ + 9013, 9029, 9041, 9043, 9049, 9059, 9067, 9091, 9103, 9109, \ + 9127, 9133, 9137, 9151, 9157, 9161, 9173, 9181, 9187, 9199, \ + 9203, 9209, 9221, 9227, 9239, 9241, 9257, 9277, 9281, 9283, \ + 9293, 9311, 9319, 9323, 9337, 9341, 9343, 9349, 9371, 9377, \ + 9391, 9397, 9403, 9413, 9419, 9421, 9431, 9433, 9437, 9439, \ + 9461, 9463, 9467, 9473, 9479, 9491, 9497, 9511, 9521, 9533, \ + 9539, 9547, 9551, 9587, 9601, 9613, 9619, 9623, 9629, 9631, \ + 9643, 9649, 9661, 9677, 9679, 9689, 9697, 9719, 9721, 9733, \ + 9739, 9743, 9749, 9767, 9769, 9781, 9787, 9791, 9803, 9811, \ + 9817, 9829, 9833, 9839, 9851, 9857, 9859, 9871, 9883, 9887, \ + 9901, 9907, 9923, 9929, 9931, 9941, 9949, 9967, 9973,10007, \ + 10009,10037,10039,10061,10067,10069,10079,10091,10093,10099, \ + 10103,10111,10133,10139,10141,10151,10159,10163,10169,10177, \ + 10181,10193,10211,10223,10243,10247,10253,10259,10267,10271, \ + 10273,10289,10301,10303,10313,10321,10331,10333,10337,10343, \ + 10357,10369,10391,10399,10427,10429,10433,10453,10457,10459, \ + 10463,10477,10487,10499,10501,10513,10529,10531,10559,10567, \ + 10589,10597,10601,10607,10613,10627,10631,10639,10651,10657, \ + 10663,10667,10687,10691,10709,10711,10723,10729,10733,10739, \ + 10753,10771,10781,10789,10799,10831,10837,10847,10853,10859, \ + 10861,10867,10883,10889,10891,10903,10909,10937,10939,10949, \ + 10957,10973,10979,10987,10993,11003,11027,11047,11057,11059, \ + 11069,11071,11083,11087,11093,11113,11117,11119,11131,11149, \ + 11159,11161,11171,11173,11177,11197,11213,11239,11243,11251, \ + 11257,11261,11273,11279,11287,11299,11311,11317,11321,11329, \ + 11351,11353,11369,11383,11393,11399,11411,11423,11437,11443, \ + 11447,11467,11471,11483,11489,11491,11497,11503,11519,11527, \ + 11549,11551,11579,11587,11593,11597,11617,11621,11633,11657, \ + 11677,11681,11689,11699,11701,11717,11719,11731,11743,11777, \ + 11779,11783,11789,11801,11807,11813,11821,11827,11831,11833, \ + 11839,11863,11867,11887,11897,11903,11909,11923,11927,11933, \ + 11939,11941,11953,11959,11969,11971,11981,11987,12007,12011, \ + 12037,12041,12043,12049,12071,12073,12097,12101,12107,12109, \ + 12113,12119,12143,12149,12157,12161,12163,12197,12203,12211, \ + 12227,12239,12241,12251,12253,12263,12269,12277,12281,12289, \ + 12301,12323,12329,12343,12347,12373,12377,12379,12391,12401, \ + 12409,12413,12421,12433,12437,12451,12457,12473,12479,12487, \ + 12491,12497,12503,12511,12517,12527,12539,12541,12547,12553, \ + 12569,12577,12583,12589,12601,12611,12613,12619,12637,12641, \ + 12647,12653,12659,12671,12689,12697,12703,12713,12721,12739, \ + 12743,12757,12763,12781,12791,12799,12809,12821,12823,12829, \ + 12841,12853,12889,12893,12899,12907,12911,12917,12919,12923, \ + 12941,12953,12959,12967,12973,12979,12983,13001,13003,13007, \ + 13009,13033,13037,13043,13049,13063,13093,13099,13103,13109, \ + 13121,13127,13147,13151,13159,13163,13171,13177,13183,13187, \ + 13217,13219,13229,13241,13249,13259,13267,13291,13297,13309, \ + 13313,13327,13331,13337,13339,13367,13381,13397,13399,13411, \ + 13417,13421,13441,13451,13457,13463,13469,13477,13487,13499 ] ) + + if ( n < 0 or prime_max <= n ): + print ( '' ) + print ( 'PRIME - Fatal error!' ) + print ( ' 0 <= N < %d' % ( prime_max ) ) + exit ( 'PRIME - Fatal error!' ) + + return prime_vector[n] \ No newline at end of file diff --git a/katoptron/Juelich/UQ/kde.py b/katoptron/Juelich/UQ/kde.py new file mode 100644 index 0000000000000000000000000000000000000000..bec1e921e19a1e1f26381fdfa924bd02a4c9ddc0 --- /dev/null +++ b/katoptron/Juelich/UQ/kde.py @@ -0,0 +1,70 @@ + +import numpy as np +import matplotlib.pyplot as plt +import scipy.stats as st + + +def compute_kde(A): + # Take a 2D array of m x n entries where n is the number of samples + # and m the number of QoI + + kernel = st.gaussian_kde(A) + return kernel + + +def resample_kde(kernel, n_samples): + # Sample the QoI based on the estimated pdf + + samples = kernel.resample(size=n_samples) + return samples + + +def box_prob_MC(kernel, min_bounds, max_bounds, n_samples): + # Evaluate the probability to be in a box + + samples = resample_kde(kernel, n_samples) + + insamples = np.ones((n_samples,)) + for j in range(0, n_samples): + for i in range(0, len(min_bounds)): + insamples[j] = bool(insamples[j]) & ( + samples[i, j] >= min_bounds[i]) & (samples[i, j] <= max_bounds[i]) + + prob = np.sum(insamples)/float(n_samples) + + return prob + + +def plot_kde(kernel, xbounds, ybounds, fixed_values, random_index): + + xx, yy = np.mgrid[xbounds[0]:xbounds[1]:100j, ybounds[0]:ybounds[1]:100j] + + positions_x = xx.ravel() + positions_y = yy.ravel() + + positions = np.zeros((len(fixed_values)+2, len(positions_x))) + + fixed_i = 0 + + for i in range(0, positions.shape[0]): + if i == random_index[0]: + positions[i, :] = positions_x + elif i == random_index[1]: + positions[i, :] = positions_y + else: + positions[i, :] = fixed_values[fixed_i] * \ + np.ones(positions[i, :].shape) + fixed_i = fixed_i + 1 + + f = np.reshape(kernel(positions).T, xx.shape) + + fig = plt.figure(figsize=(8, 8)) + ax = fig.gca() + ax.set_xlim(xbounds[0], xbounds[1]) + ax.set_ylim(ybounds[0], ybounds[1]) + cfset = ax.contourf(xx, yy, f, cmap='coolwarm') + ax.imshow(np.rot90(f), cmap='coolwarm', extent=[ + xbounds[0], xbounds[1], ybounds[0], ybounds[1]]) + cset = ax.contour(xx, yy, f, colors='k') + ax.clabel(cset, inline=1, fontsize=10) + return fig, ax diff --git a/katoptron/Juelich/UQ/mirror.py b/katoptron/Juelich/UQ/mirror.py new file mode 100644 index 0000000000000000000000000000000000000000..5a79cdafbea109a8678e9de9e71707946ff24600 --- /dev/null +++ b/katoptron/Juelich/UQ/mirror.py @@ -0,0 +1,605 @@ + + + + + +import numpy as np +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import axes3d +import matplotlib.tri as mtri + +from katoptron.Juelich.UQ.kde import * +import katoptron.utilities as u + + +def convergence_qoi(qoi): + mean_qoi = np.zeros((len(qoi), )) + for i in range(0, len(qoi)): + mean_qoi[i] = np.mean(qoi[0:i]) + return mean_qoi + + +def compute_qoi(base_dir, ensemble_size, ensemble_index, l): + OAX, OAY = 0.0595, 0.017 + npzfile = np.load(base_dir + str(ensemble_size) + '/' + + str(ensemble_index) + '/mirror_data_all.npz') + x = npzfile['x'] + y = npzfile['y'] + z = 0. * x + dz = npzfile['dz'] + T = npzfile['T'] + tri = npzfile['tri'] + optical_coefficients, dz_residual = u.compute_RBM_Curvature_Irreg( + x, y, z, tri, dz[:, l], "m", np.array([OAX, OAY])) + print(optical_coefficients) + return [ + np.max(T[:, l]), + np.min(T[:, l]), + np.mean(T[:, l]), 1000 * np.mean(dz[:, l]), optical_coefficients[0], + optical_coefficients[1], optical_coefficients[2], + optical_coefficients[3], optical_coefficients[4] + ] # optical_coefficients[0]] + + +def irregularly_plot(x, + y, + z, + x_min, + x_max, + y_min, + y_max, + ngridx=400, + ngridy=400, + scale=1): + + xi = np.linspace(x_min, x_max, ngridx) + yi = np.linspace(y_min, y_max, ngridy) + + triang = mtri.Triangulation(x, y) + interpolator = mtri.LinearTriInterpolator(triang, z) + Xi, Yi = np.meshgrid(xi, yi) + zi = interpolator(Xi, Yi) + + #fig = plt.figure() + #ax = fig.gca(projection='3d') + #ax.plot_surface(Xi, Yi, zi, cmap='jet',vmin=np.amin(z),vmax=np.amax(z)) + #ax.scatter(x,y,z) + + fig = plt.figure() + ax = fig.gca() + levels = np.linspace(np.amin(z * scale), + np.amax(z * scale), + 16, + endpoint=True) + + cf = ax.contourf(Xi, Yi, zi * scale, levels, cmap="jet") + ax.contour(xi, yi, zi * scale, levels, linewidths=0.5, colors='k') + ax.set_aspect('equal') + + cbar = fig.colorbar(cf, ticks=levels) + + return fig, cbar + + +def irregularly_tol_plot(x, + y, + QoI, + x_min, + x_max, + y_min, + y_max, + ngridx=200, + ngridy=200, + scale=1.): + + xi = np.linspace(x_min, x_max, ngridx) + yi = np.linspace(y_min, y_max, ngridy) + + triang = mtri.Triangulation(x, y) + interpolator_0 = mtri.LinearTriInterpolator(triang, QoI[0, :]) + interpolator_1 = mtri.LinearTriInterpolator(triang, QoI[1, :]) + interpolator_2 = mtri.LinearTriInterpolator(triang, QoI[2, :]) + interpolator_3 = mtri.LinearTriInterpolator(triang, QoI[3, :]) + interpolator_4 = mtri.LinearTriInterpolator(triang, QoI[4, :]) + + Xi, Yi = np.meshgrid(xi, yi) + + z_0 = interpolator_0(Xi, Yi) + z_1 = interpolator_1(Xi, Yi) + z_2 = interpolator_2(Xi, Yi) + z_3 = interpolator_3(Xi, Yi) + z_4 = interpolator_4(Xi, Yi) + + z_5 = np.copy(z_0) + + for i in range(0, z_0.shape[0]): + for j in range(0, z_0.shape[1]): + if np.isfinite(z_0[i, j]): + z_5[i, j] = u.check_optical_tolerance( + [z_0[i, j], z_1[i, j], z_2[i, j], z_3[i, j], z_4[i, j]], + "mm", + scale=scale) + else: + z_5[i, j] = z_0[i, j] + + #fig = plt.figure() + #ax = fig.gca(projection='3d') + #ax.plot_surface(Xi, Yi, zi, cmap='jet',vmin=np.amin(z),vmax=np.amax(z)) + #ax.scatter(x,y,z) + + fig = plt.figure() + ax = fig.gca() + levels = np.linspace(0., 1., 3, endpoint=True) + + cf = ax.contourf(Xi, Yi, z_5, levels, cmap="jet") + ax.contour(xi, yi, z_5, levels, linewidths=0.5, colors='k') + ax.set_aspect('equal') + + cbar = fig.colorbar(cf, ticks=levels) + + +def clip_scater(x, y, z, x_lim, y_lim, z_lim): + x_new = np.array([]) + y_new = np.array([]) + z_new = np.array([]) + for i in np.arange(len(x)): + if x[i] >= x_lim[0] and x[i] <= x_lim[1] and y[i] >= y_lim[0] and y[ + i] <= y_lim[1] and z[i] >= z_lim[0] and z[i] <= z_lim[1]: + x_new = np.append(x_new, x[i]) + y_new = np.append(y_new, y[i]) + z_new = np.append(z_new, z[i]) + return x_new, y_new, z_new + + +def plot_kde_2D(x, y, x_min, x_max, y_min, y_max, ngridx=200, ngridy=200): + + xi = np.linspace(x_min, x_max, ngridx) + yi = np.linspace(y_min, y_max, ngridy) + + xx, yy = np.meshgrid(xi, yi) + positions = np.vstack([xx.ravel(), yy.ravel()]) + values = np.vstack([x, y]) + kernel = st.gaussian_kde(values) + f = np.reshape(kernel(positions).T, xx.shape) + + fig = plt.figure() + ax = fig.gca() + ax.set_xlim(x_min, x_max) + ax.set_ylim(y_min, y_max) + + levels = np.linspace(np.amin(f), np.amax(f), 16, endpoint=True) + + # Contourf plot + cfset = ax.contourf(xx, yy, f, levels, cmap='Blues') + ## Or kernel density estimate plot instead of the contourf plot + #ax.imshow(np.rot90(f), cmap='Blues', extent=[xmin, xmax, ymin, ymax]) + # Contour plot + cset = ax.contour(xx, yy, f, levels, linewidths=0.5, colors='k') + # Label plot + # ax.clabel(cset, inline=1, fontsize=10) + plt.xlabel('Heat conductivity spacer 1 $[$W/mK$]$') + plt.ylabel('Heat conductivity spacer 2 $[$W/mK$]$') + #plt.plot(345,345,'+') + ax.set_aspect('equal') + cbar = fig.colorbar(cfset, ticks=levels) + cbar.set_label('pdf $[m^2K^2/W^2]$') + plt.savefig("kde.pdf", dpi=100) + + +def plot_kde_1D(qoi, id, xlabel, ylabel, x_min, x_max, nx=200): + + min_qoi = x_min + max_qoi = x_max + + kernel = compute_kde(qoi) + + qoi_lin = np.linspace(min_qoi, max_qoi, nx) + plt.figure() + plt.plot(qoi_lin, kernel(qoi_lin)) + plt.xlabel(xlabel) + plt.ylabel(ylabel) + plt.savefig('kde_' + id + '.pdf', dpi=100) + + +def main(): + + N = 640 + base_dir = '/Users/kimliegeois/Desktop/QoI_results_27/' + ensemble_size = 1 + + N = 640 + base_dir = '/Users/kimliegeois/Desktop/QoI_results_2_AlN/' + ensemble_size = 16 + + N = 453 + base_dir = '/Users/kimliegeois/Desktop/QoI_results_3/' + ensemble_size = 1 + + N = 453 + base_dir = '/Volumes/HD_SONY/Thesis/Juelich/all_results_NER/' + ensemble_size = 1 + data_name = 'qois_xiao_2.data' + + N = 79 + base_dir = '/Users/kimliegeois/Desktop/Juelich/order_2_30/order_20/' + ensemble_size = 1 + data_name = 'A2_xiao_20.data' + + N = 79 + base_dir = '/Users/kimliegeois/Desktop/Juelich/ER/MPI_2/' + ensemble_size = 1 + data_name = 'B2_xiao_20.data' + + #N = 3200 + #base_dir = '/Volumes/HD_SONY/juelich/k_conductivity/QoI_results_8/' + #ensemble_size = 32 + + n_qoi = 10 + n_rand = 3 + + optical_coefficients_all = np.zeros((n_qoi, N)) + random_variables = np.zeros((n_rand, N)) + + x = random_variables[0, :] + y = random_variables[2, :] + + for i in range(0, n_rand): + filename = base_dir + 'randomVariable_' + str(i + 1) + '.txt' + tmp = np.loadtxt(filename) + #print tmp[2741] + random_variables[i, :] = tmp[0:N] + + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + for l in range(0,ensemble_size): + filename = base_dir+str(ensemble_size)+'/'+str(ensemble_index)+'/mirror_optical_results_'+str(l)+'.npz' + npzfile = np.load(filename) + optical_coefficients = npzfile['optical_coefficients'] + optical_coefficients_all[0:9,ensemble_index*ensemble_size+l] = compute_qoi(base_dir,ensemble_size,ensemble_index,l) #optical_coefficients + #optical_coefficients_all[4:9,ensemble_index*ensemble_size+l] = optical_coefficients + optical_coefficients_all[9,ensemble_index*ensemble_size+l] = u.check_optical_tolerance(optical_coefficients_all[4:9,ensemble_index*ensemble_size+l], "mm", max_fringe = 0.0056) + np.save(data_name,optical_coefficients_all) + + optical_coefficients_all = np.load(data_name + '.npy') + optical_coefficients_all_1 = np.copy(optical_coefficients_all) + print(optical_coefficients_all_1) + print(optical_coefficients_all_1.shape) + ''' + ensemble_size = 8 + + N_ensemble = N / ensemble_size + for ensemble_index in range(0, N_ensemble): + print ensemble_index + for l in range(0,ensemble_size): + filename = base_dir+str(ensemble_size)+'/'+str(ensemble_index)+'/mirror_optical_results_'+str(l)+'.npz' + npzfile = np.load(filename) + optical_coefficients = npzfile['optical_coefficients'] + optical_coefficients_all[:,ensemble_index*ensemble_size+l] = compute_qoi(base_dir,ensemble_size,ensemble_index,l) #optical_coefficients + + optical_coefficients_all_8 = np.copy(optical_coefficients_all) + + + print optical_coefficients_all_1 + print optical_coefficients_all_8 + + print optical_coefficients_all_8-optical_coefficients_all_1 + print (optical_coefficients_all_8-optical_coefficients_all_1)/optical_coefficients_all_1 + ''' + + qoi = optical_coefficients_all_1[0, :] + + kernel = compute_kde(qoi) + + T = np.linspace(100, 170, 200) + plt.figure() + plt.plot(T, kernel(T)) + #plt.show() + + print('-----') + print(np.mean(qoi)) + #print np.mean(qoi[random_variables[0,:]<=random_variables[1,:]]) + #print np.mean(qoi[random_variables[0,:]>random_variables[1,:]]) + print('-----') + + mean_qoi = convergence_qoi(qoi) + plt.figure() + plt.plot(mean_qoi - mean_qoi[-1]) + + qoi = optical_coefficients_all_1[3, :] + + print(np.min(qoi)) + print(np.max(qoi)) + + kernel = compute_kde(qoi) + + max_dz = np.linspace(0.000135, 0.00015, 200) + plt.figure() + plt.plot(max_dz, kernel(max_dz)) + max_dz = np.linspace(0.000145, 0.00015, 100) + ax = plt.gca() + ax.fill_between(max_dz, + 0, + kernel(max_dz), + facecolor='red', + interpolate=True) + + print('-----') + print(np.mean(qoi)) + #print np.mean(qoi[random_variables[0,:]<=random_variables[1,:]]) + #print np.mean(qoi[random_variables[0,:]>random_variables[1,:]]) + print('-----') + + mean_qoi = convergence_qoi(qoi) + plt.figure() + plt.plot(mean_qoi - mean_qoi[-1]) + + print(np.sum(kernel(max_dz)) * (max_dz[1] - max_dz[0])) + #plot_kde(kernel,[370,380],[330,340],[],[0,1]) + ''' + ensemble_size = 1 + ensemble_index = 3 + for i in range(0, 8): + npzfile = np.load(base_dir+str(ensemble_size)+'/'+str(ensemble_index)+'/mirror_data_' + str(i) + '.npz') + x_i = npzfile['x'] + y_i = npzfile['y'] + z_i = 0. * x_i + dz_i = npzfile['dz'] + tri_i = npzfile['tri'] + if i == 0: + x = x_i + y = y_i + z = z_i + dz = dz_i + tri = tri_i + nNodes = len(x) + else: + x = np.append(x, x_i, axis=0) + y = np.append(y, y_i, axis=0) + z = np.append(z, z_i, axis=0) + dz = np.append(dz, dz_i, axis=0) + tri = np.append(tri, tri_i + nNodes, axis=0) + nNodes = len(x) + x_1_0 = dz[:,0] + ensemble_size = 8 + ensemble_index = 0 + for i in range(0, 8): + npzfile = np.load(base_dir+str(ensemble_size)+'/'+str(ensemble_index)+'/mirror_data_' + str(i) + '.npz') + x_i = npzfile['x'] + y_i = npzfile['y'] + z_i = 0. * x_i + dz_i = npzfile['dz'] + tri_i = npzfile['tri'] + if i == 0: + x = x_i + y = y_i + z = z_i + dz = dz_i + tri = tri_i + nNodes = len(x) + else: + x = np.append(x, x_i, axis=0) + y = np.append(y, y_i, axis=0) + z = np.append(z, z_i, axis=0) + dz = np.append(dz, dz_i, axis=0) + tri = np.append(tri, tri_i + nNodes, axis=0) + nNodes = len(x) + x_8_0 = dz[:,3] + + plt.figure() + plt.plot(x_1_0) + plt.plot(x_8_0) + + plt.figure() + plt.plot(x_1_0-x_8_0) + ''' + + #triang = mtri.Triangulation(x, y) + + plot_kde_2D(x, y, 50, 230, 50, 230, ngridx=200, ngridy=200) + + scales = np.linspace(0.2, 0.3, 20) + + for scale in scales: + #150,800,150,800 + print(x.shape) + print(y.shape) + print(optical_coefficients_all_1.shape) + irregularly_tol_plot(x, + y, + optical_coefficients_all_1[4:9, :], + 50, + 230, + 50, + 230, + ngridx=200, + ngridy=200, + scale=scale) + + plt.xlabel('Heat conductivity spacer 1 $[$W/mK$]$') + plt.ylabel('Heat conductivity spacer 2 $[$W/mK$]$') + + #plt.plot(345,345,'+') + + scale_name = str(scale).replace(".", "_") + plt.savefig('qoi_scale_' + scale_name + '.pdf', dpi=100) + + for i in range(0, n_qoi - 1): + #fig = plt.figure() + #ax = fig.gca(projection='3d') + #ax.plot_trisurf(triang, optical_coefficients_all_1[i,:], cmap='jet') + #irregularly_plot(x,y,optical_coefficients_all_1[i,:],150,1000,150,1000) + #irregularly_plot(x,y,optical_coefficients_all_1[i,:],100,800,100,800) + scale = 1 + if i == 5 or i == 6: + scale = 1000 + + fig, cbar = irregularly_plot(x, + y, + optical_coefficients_all_1[i, :], + 50, + 230, + 50, + 230, + ngridx=2000, + ngridy=2000, + scale=scale) + + plt.xlabel('Heat conductivity spacer 1 $[$W/mK$]$') + plt.ylabel('Heat conductivity spacer 2 $[$W/mK$]$') + + #plt.plot(345,345,'+') + + if i == 0: + plt.title('Maximal temperature on the mirror surface') + cbar.set_label('Temperature $[^\circ$C$]$') + id_name = 'max_temp' + xlabel = 'Temperature $[^\circ$C$]$' + ylabel = 'pdf $[1/ \,^\circ$C$]$' + x_min = 100 + x_max = 150 + if i == 1: + plt.title('Minimal temperature on the mirror surface') + cbar.set_label('Temperature $[^\circ$C$]$') + id_name = 'min_temp' + xlabel = 'Temperature $[^\circ$C$]$' + ylabel = 'pdf $[1/ \,^\circ$C$]$' + x_min = 100 + x_max = 150 + if i == 2: + plt.title('Mean temperature on the mirror surface') + cbar.set_label('Temperature $[^\circ$C$]$') + id_name = 'mean_temp' + xlabel = 'Temperature $[^\circ$C$]$' + ylabel = 'pdf $[1/ \,^\circ$C$]$' + x_min = 100 + x_max = 150 + if i == 3: + plt.title('Mean z displacement of the mirror surface') + cbar.set_label('Displacement $[$mm$]$') + id_name = 'mean_z' + xlabel = 'Displacement $[$mm$]$' + ylabel = 'pdf $[1/ mm]$' + x_min = 0.008 + x_max = 0.016 + if i == 4: + plt.title('Translation') + cbar.set_label('Displacement $[$mm$]$') + id_name = 'translation' + xlabel = 'Displacement $[$mm$]$' + ylabel = 'pdf $[1/ mm]$' + x_min = 0.024 + x_max = 0.03 + if i == 5: + plt.title('Rotation y') + cbar.set_label('$[$mrads$]$') + id_name = 'rotation_y' + xlabel = '$[$mrads$]$' + ylabel = 'pdf $[1/ mrads]$' + x_min = 0. + x_max = 0.1 + if i == 6: + plt.title('Rotation x') + cbar.set_label('$[$mrads$]$') + id_name = 'rotation_x' + xlabel = '$[$mrads$]$' + ylabel = 'pdf $[1/ mrads]$' + x_min = -0.1 + x_max = 0.01 + if i == 7: + plt.title('Curvature') + cbar.set_label('$[$mm$]$') + id_name = 'curvature' + xlabel = '$[$mm$]$' + ylabel = 'pdf $[1/ mm]$' + x_min = -0.02 + x_max = 0.01 + if i == 8: + plt.title('Irregularity') + cbar.set_label('$[$mm$]$') + id_name = 'irregularity' + xlabel = '$[$mm$]$' + ylabel = 'pdf $[1/ mm]$' + x_min = 0.004 + x_max = 0.007 + + plt.savefig("qoi_" + str(i) + ".pdf", dpi=100) + + plot_kde_1D(optical_coefficients_all_1[i, :] * scale, + id_name, + xlabel, + ylabel, + x_min, + x_max, + nx=1000) + + tmp = np.zeros((len(x), 3)) + tmp[:, 0] = x + tmp[:, 1] = y + tmp[:, 2] = optical_coefficients_all_1[i, :] + + np.savetxt("qoi_" + str(i) + ".txt", tmp) + + if i == n_qoi - 1: + radius = 578.8807505281204 + x_circle = np.linspace(130, 560, 1000) + #plt.plot(x_circle,np.sqrt(radius**2-x_circle**2)) + #ax.scatter(x, y, optical_coefficients_all_1[i,:]) + + for i in range(0, n_qoi): + fig = plt.figure() + ax = fig.gca(projection='3d') + + print('-------') + print(np.amax(optical_coefficients_all_1[i, :])) + print(np.amin(optical_coefficients_all_1[i, :])) + + #if i == n_qoi-1: + # z_max = 0.000133 + # z_min = 0.000131 + + # x_new,y_new,z_new = clip_scater(x, y, optical_coefficients_all_1[i,:],[300, 400],[300, 400],[z_min, z_max]) + #else: + x_new, y_new, z_new = x, y, optical_coefficients_all_1[i, :] + + ax.scatter(x_new, y_new, z_new) + + #if i == n_qoi-1: + # ax.set_xlim(300, 400) + # ax.set_ylim(300, 400) + # ax.set_zlim(z_min, z_max) + + #fig = plt.figure() + #ax = fig.gca(projection='3d') + #for i in range(0, 3): + # ax.plot_trisurf(triang, optical_coefficients_all_1[i,:], cmap='jet') + ''' + fig = plt.figure() + ax = fig.gca(projection='3d') + ax.scatter(optical_coefficients_all[0,:], optical_coefficients_all[1,:], optical_coefficients_all[2,:]) + fig = plt.figure() + ax = fig.gca(projection='3d') + ax.scatter(optical_coefficients_all[0,:], optical_coefficients_all[1,:], optical_coefficients_all[3,:]) + fig = plt.figure() + ax = fig.gca(projection='3d') + ax.scatter(optical_coefficients_all[0,:], optical_coefficients_all[1,:], optical_coefficients_all[4,:]) + ''' + + #kernel = compute_kde(optical_coefficients_all) + + #plot_kde(kernel,[0.0915,0.94],[1.78638639e-04,2.01983639e-04],[-5.16471018e-05,-6.05417325e-02,4.14012494e-02],[0,1]) + + qoi = optical_coefficients_all_1[-1, :] + + not_blurred = np.sum(qoi) / float(len(qoi)) + blurred = 1. - not_blurred + + print('not blurred') + print(not_blurred) + print('blurred') + print(blurred) + + plt.show() + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/UQ/mirror_2.py b/katoptron/Juelich/UQ/mirror_2.py new file mode 100644 index 0000000000000000000000000000000000000000..ac1edaee3c213c3f1f65aca575e273e2d4a55a7a --- /dev/null +++ b/katoptron/Juelich/UQ/mirror_2.py @@ -0,0 +1,73 @@ +import numpy as np +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import axes3d +import matplotlib.tri as mtri + +from katoptron.Juelich.UQ.kde import * +import katoptron.utilities as u +from numpy import linalg as LA + + +def compute_qoi(base_dir, ensemble_size, ensemble_index, l): + OAX, OAY = 0.0595, 0.017 + npzfile = np.load(base_dir + str(ensemble_size) + '/' + + str(ensemble_index) + '/mirror_data_all.npz') + x = npzfile['x'] + y = npzfile['y'] + z = 0. * x + dz = npzfile['dz'] + T = npzfile['T'] + tri = npzfile['tri'] + + fig = plt.figure() + axtri = plt.tricontourf(x, y, tri, T[:, l], vmin=330., vmax=375.) + cb = fig.colorbar(axtri, orientation="horizontal") + return x, y, tri, T[:, l] + + +def main(): + + N = 8 + # '/Volumes/HD_SONY/juelich/k_conductivity/QoI_results_7/' + base_dir = '/Users/kimliegeois/Desktop/QoI_results_7/' + n_qoi = 5 + n_rand = 3 + ensemble_size = 1 + + optical_coefficients_all = np.zeros((n_qoi, N)) + random_variables = np.zeros((n_rand, N)) + + ensemble_size = 1 + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + for l in range(0, ensemble_size): + x, y, tri, dz = compute_qoi(base_dir, ensemble_size, + ensemble_index, l) + if l == 0 and ensemble_index == 0: + dz_1 = dz.reshape((len(dz), 1)) + else: + dz_1 = np.append(dz_1, dz.reshape((len(dz), 1)), axis=1) + ensemble_size = 8 + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + for l in range(0, ensemble_size): + x, y, tri, dz = compute_qoi(base_dir, ensemble_size, + ensemble_index, l) + if l == 0 and ensemble_index == 0: + dz_8 = dz.reshape((len(dz), 1)) + else: + dz_8 = np.append(dz_8, dz.reshape((len(dz), 1)), axis=1) + + for i in range(0, N): + #fig = plt.figure() + #axtri = plt.tricontourf(x, y, tri, np.abs(dz_1[:,i]-dz_8[:,i])/dz_1[:,i] ) + #cb = fig.colorbar(axtri, orientation="horizontal") + print(LA.norm(dz_1[:, i] - dz_8[:, i])) + print(LA.norm(dz_1[:, i])) + print((LA.norm(dz_1[:, i] - dz_8[:, i]) / LA.norm(dz_1[:, i]))) + print('-----') + plt.show() + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/UQ/mirror_PCE.py b/katoptron/Juelich/UQ/mirror_PCE.py new file mode 100644 index 0000000000000000000000000000000000000000..1e01230b35d8f865f3ddec6dbe8ff8c48a93a90b --- /dev/null +++ b/katoptron/Juelich/UQ/mirror_PCE.py @@ -0,0 +1,235 @@ +import numpy as np +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import axes3d +import matplotlib.tri as mtri +from matplotlib import cm + +import os + +from katoptron.Juelich.UQ.kde import * +import katoptron.utilities as u + +import scipy as sc + + +def build_exponents_L2(order): + exponents = np.zeros(((order + 1)**2, 2), dtype=int) + exponents[:, 0], exponents[:, 1] = np.divmod(np.arange((order + 1)**2), + order + 1) + return exponents + + +def build_exponents_L1(order): + exponents = build_exponents_L2(order) + tmp = exponents[np.where((exponents.T[0] + exponents.T[1]) <= order), :] + return tmp[0, :, :] + + +def build_PCE_system(x, + y, + weights, + exponents, + p0=np.array([0, 0]), + scale=np.array([1, 1]), + monomial=True): + n = len(x) + m = exponents.shape[0] + Z = np.zeros((n, m)) + W = np.zeros((n, n)) + + if not monomial: + u = 1. - (x - 30.) / 76. + v = -1. + (y - 30.) / 76. + + for i in range(0, m): + if monomial: + Z[:, i] = (((x - p0[0]) / scale[0]))**exponents[i, 0] * ( + ((y - p0[1]) / scale[1]))**exponents[i, 1] + else: + p_m_x = np.ones(u.shape) + index = np.argwhere(v < 1) + p_m_x[index] = ( + (2 * u[index] + v[index] + 1) / (1 - v[index])) + p_m = sc.special.eval_legendre(exponents[i, 0], p_m_x) + p_n = sc.special.eval_jacobi(exponents[i, 1], + 2 * exponents[i, 0] + 1, 0, v) + Z[:, i] = p_m * (((1 - v) / 2))**exponents[i, 0] * p_n + for i in range(0, n): + W[i, i] = weights[i] + + ZTW = Z.T.dot(W) + ZTWZ = ZTW.dot(Z) + + ZTWZinv = np.linalg.pinv(ZTWZ) + Ainv = ZTWZinv.dot(ZTW) + return Ainv + + +def evaluate_PCE(x, + y, + coefficients, + exponents, + p0=np.array([0, 0]), + scale=np.array([1, 1]), + monomial=True): + n = len(x) + m = exponents.shape[0] + z = np.zeros((n, )) + + if not monomial: + u = 1. - (x - 30.) / 76. + v = -1. + (y - 30.) / 76. + + for i in range(0, m): + if monomial: + z = z + coefficients[i] * ( + ((x - p0[0]) / scale[0]))**exponents[i, 0] * ( + ((y - p0[1]) / scale[1]))**exponents[i, 1] + else: + p_m_x = np.ones(u.shape) + index = np.argwhere(v < 1) + p_m_x[index] = ( + (2 * u[index] + v[index] + 1) / (1 - v[index])) + p_m = sc.special.eval_legendre(exponents[i, 0], p_m_x) + p_n = sc.special.eval_jacobi(exponents[i, 1], + 2 * exponents[i, 0] + 1, 0, v) + z = z + coefficients[i] * p_m * ( + ((1 - v) / 2))**exponents[i, 0] * p_n + return z + + +def triangular_mesh(n_x, n_y, x_min=30, x_max=180, y_min=30, y_max=180): + x = np.linspace(x_min, x_max, n_x, endpoint=True) + y = np.linspace(y_min, y_max, n_y, endpoint=True) + x, y = np.meshgrid(x, y) + x = x.flatten() + y = y.flatten() + + x_TRI = x[np.where(x >= y)] + y_TRI = y[np.where(x >= y)] + + tri = mtri.Triangulation(x_TRI, y_TRI) + + return x_TRI, y_TRI, tri + + +def compute_coeff(Ainv, z): + coefficients = Ainv.dot(z) + return coefficients + + +def write_patch(tri, z, filename): + f = open(filename + "_data.txt", "w+") + print("x y c", file=f) + for i in range(0, tri.triangles.shape[0]): + for j in range(0, 3): + index = tri.triangles[i, j] + print(str(tri.x[index]) + " " + str( + tri.y[index]) + " " + str(z[index]), file=f) + print(" ", file=f) + + f.close() + f = open(filename + "_range.txt", "w+") + print(np.amin(z), file=f) + print(np.amax(z), file=f) + f.close() + + +def main(): + file_dir = os.path.dirname(__file__) + + N = 20 + loaded = np.load(file_dir + '/../samples_files/Xiao_' + str(N) + '.npz') + samples = loaded['samples'] + N = samples.shape[0] + + x = samples[0:N, 0] + y = samples[0:N, 1] + weights = loaded['weights'] + + #qois = np.load('../katoptron_Juelich_UQ_mirror/qois_xiao.data.npy') + qois = np.load('../katoptron_Juelich_UQ_mirror/qois_xiao_2.data.npy') + qois = np.load('../katoptron_Juelich_UQ_mirror/A2_xiao_20.data.npy') + qois = np.load('../katoptron_Juelich_UQ_mirror/B2_xiao_20.data.npy') + + preloads_A2_N = np.loadtxt( + '../katoptron_Juelich_UQ_preload/preloads_A2_N.txt') + preloads_B2_N = np.loadtxt( + '../katoptron_Juelich_UQ_preload/preloads_B2_N.txt') + + x_0 = [30, 30] + scale = [150, 150] + + n_x = 30 + n_y = 30 + + monomial = False + + order = 10 + exponents = build_exponents_L1(order) + Ainv = build_PCE_system(x, + y, + weights, + exponents, + x_0, + scale, + monomial=monomial) + + for z_index in range(0, 9): + z = qois[z_index, :] + filename = 'qoi_' + str(z_index) + + coefficients = compute_coeff(Ainv, z) + print(len(coefficients)) + + x_PCE, y_PCE, tri = triangular_mesh(n_x, n_y) + + z_PCE = evaluate_PCE(x_PCE, + y_PCE, + coefficients, + exponents, + x_0, + scale, + monomial=monomial) + + write_patch(tri, z_PCE, filename) + + for z_index in range(0, 3): + z = preloads_A2_N[:, z_index] + filename = 'qoi_preload_A_' + str(z_index) + + coefficients = compute_coeff(Ainv, z) + print(len(coefficients)) + + x_PCE, y_PCE, tri = triangular_mesh(n_x, n_y) + + z_PCE = evaluate_PCE(x_PCE, + y_PCE, + coefficients, + exponents, + x_0, + scale, + monomial=monomial) + + write_patch(tri, -0.001 * z_PCE, filename) + z = preloads_B2_N[:, z_index] + filename = 'qoi_preload_B_' + str(z_index) + + coefficients = compute_coeff(Ainv, z) + print(len(coefficients)) + + x_PCE, y_PCE, tri = triangular_mesh(n_x, n_y) + + z_PCE = evaluate_PCE(x_PCE, + y_PCE, + coefficients, + exponents, + x_0, + scale, + monomial=monomial) + + write_patch(tri, -0.001 * z_PCE, filename) + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/UQ/mirror_PCE_convergence.py b/katoptron/Juelich/UQ/mirror_PCE_convergence.py new file mode 100644 index 0000000000000000000000000000000000000000..2072879413aa8528191ed4f196cb477d2af9866b --- /dev/null +++ b/katoptron/Juelich/UQ/mirror_PCE_convergence.py @@ -0,0 +1,353 @@ +import numpy as np +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import axes3d +import matplotlib.tri as mtri +from matplotlib import cm + +import os + +from katoptron.Juelich.UQ.kde import * +import katoptron.utilities as u + +import scipy as sc + + +def build_exponents_L2(order): + exponents = np.zeros(((order + 1)**2, 2), dtype=int) + exponents[:, 0], exponents[:, 1] = np.divmod(np.arange((order + 1)**2), + order + 1) + return exponents + + +def build_exponents_L1(order): + exponents = build_exponents_L2(order) + tmp = exponents[np.where((exponents.T[0] + exponents.T[1]) <= order), :] + return tmp[0, :, :] + + +def build_PCE_system(x, + y, + weights, + exponents, + p0=np.array([0, 0]), + scale=np.array([1, 1]), + monomial=True): + n = len(x) + m = exponents.shape[0] + Z = np.zeros((n, m)) + W = np.zeros((n, n)) + + if not monomial: + u = 1. - (x - 30.) / 76. + v = -1. + (y - 30.) / 76. + + for i in range(0, m): + if monomial: + Z[:, i] = (((x - p0[0]) / scale[0]))**exponents[i, 0] * ( + ((y - p0[1]) / scale[1]))**exponents[i, 1] + else: + p_m_x = np.ones(u.shape) + index = np.argwhere(v < 1) + p_m_x[index] = ( + (2 * u[index] + v[index] + 1) / (1 - v[index])) + p_m = sc.special.eval_legendre(exponents[i, 0], p_m_x) + p_n = sc.special.eval_jacobi(exponents[i, 1], + 2 * exponents[i, 0] + 1, 0, v) + Z[:, i] = p_m * (((1 - v) / 2))**exponents[i, 0] * p_n + for i in range(0, n): + W[i, i] = weights[i] + + ZTW = Z.T.dot(W) + ZTWZ = ZTW.dot(Z) + + ZTWZinv = np.linalg.pinv(ZTWZ) + Ainv = ZTWZinv.dot(ZTW) + return Ainv + + +def evaluate_PCE(x, + y, + coefficients, + exponents, + p0=np.array([0, 0]), + scale=np.array([1, 1]), + monomial=True): + n = len(x) + m = exponents.shape[0] + z = np.zeros((n, )) + + if not monomial: + u = 1. - (x - 30.) / 76. + v = -1. + (y - 30.) / 76. + + for i in range(0, m): + if monomial: + z = z + coefficients[i] * ( + ((x - p0[0]) / scale[0]))**exponents[i, 0] * ( + ((y - p0[1]) / scale[1]))**exponents[i, 1] + else: + p_m_x = np.ones(u.shape) + index = np.argwhere(v < 1) + p_m_x[index] = ( + (2 * u[index] + v[index] + 1) / (1 - v[index])) + p_m = sc.special.eval_legendre(exponents[i, 0], p_m_x) + p_n = sc.special.eval_jacobi(exponents[i, 1], + 2 * exponents[i, 0] + 1, 0, v) + z = z + coefficients[i] * p_m * ( + ((1 - v) / 2))**exponents[i, 0] * p_n + return z + + +def triangular_mesh(n_x, n_y, x_min=30, x_max=180, y_min=30, y_max=180): + x = np.linspace(x_min, x_max, n_x, endpoint=True) + y = np.linspace(y_min, y_max, n_y, endpoint=True) + x, y = np.meshgrid(x, y) + x = x.flatten() + y = y.flatten() + + x_TRI = x[np.where(x >= y)] + y_TRI = y[np.where(x >= y)] + + tri = mtri.Triangulation(x_TRI, y_TRI) + + return x_TRI, y_TRI, tri + + +def compute_coeff(Ainv, z): + coefficients = Ainv.dot(z) + return coefficients + + +def write_patch(tri, z, filename): + f = open(filename + "_data.txt", "w+") + print("x y c", file=f) + for i in range(0, tri.triangles.shape[0]): + for j in range(0, 3): + index = tri.triangles[i, j] + print(str(tri.x[index]) + " " + str( + tri.y[index]) + " " + str(z[index]), file=f) + print(" ", file=f) + + f.close() + f = open(filename + "_range.txt", "w+") + print(np.amin(z), file=f) + print(np.amax(z), file=f) + f.close() + + +def compute_qoi(base_dir, ensemble_size, ensemble_index, l): + OAX, OAY = 0.0595, 0.017 + npzfile = np.load(base_dir + str(ensemble_size) + '/' + + str(ensemble_index) + '/mirror_data_all.npz') + x = npzfile['x'] + y = npzfile['y'] + z = 0. * x + dz = npzfile['dz'] + T = npzfile['T'] + tri = npzfile['tri'] + optical_coefficients, dz_residual = u.compute_RBM_Curvature_Irreg( + x, y, z, tri, dz[:, l], "m", np.array([OAX, OAY])) + print(optical_coefficients) + return [ + np.max(T[:, l]), + np.min(T[:, l]), + np.mean(T[:, l]), 1000 * np.mean(dz[:, l]), optical_coefficients[0], + optical_coefficients[1], optical_coefficients[2], + optical_coefficients[3], optical_coefficients[4] + ] + + +def read_data(order, base_dir, ax, display=False): + + result_file = 'qois_' + str(order) + '.npz' + if os.path.isfile(result_file): + loaded = np.load(result_file) + qois = loaded['qois'] + samples = loaded['samples'] + weights = loaded['weights'] + if display: + #fig = plt.figure() + #ax = fig.gca(projection='3d') + ax.scatter(samples[:, 0], samples[:, 1], qois[:, -2]) + + else: + file_dir = os.path.dirname(__file__) + loaded = np.load(file_dir + '/../samples_files/Xiao_' + str(order) + + '.npz') + samples = loaded['samples'] + weights = loaded['weights'] + N = samples.shape[0] + + order_base_dir = base_dir + str(order) + '/1/' + + n_qois = 9 + + qois = np.zeros((N, n_qois)) + + for i in range(0, N): + + loaded = np.load(order_base_dir + str(i) + '/mirror_data_all.npz') + T = loaded['T'] + loaded = np.load(order_base_dir + str(i) + + '/mirror_optical_results_0.npz') + optical_coefficients = loaded['optical_coefficients'] + + #qois[i, 0] = np.min(T) + #qois[i, 1] = np.mean(T) + #qois[i, 2] = np.max(T) + #qois[i, 3:8] = optical_coefficients + + qois[i, :] = compute_qoi(base_dir + str(order) + '/', 1, i, 0) + + np.savez('qois_' + str(order), + qois=qois, + samples=samples, + weights=weights) + + return qois, samples, weights + + +def generate_random_samples(N): + tmp = np.random.rand(3*N, 2) + index = np.argwhere(tmp[:, 0] >= tmp[:, 1]) + + tmp_2 = tmp[index[0:N], :] + + samples = 30. + 150*tmp_2 + + samples = np.reshape(samples, (N, 2)) + + return samples + + +def main(): + base_dir = "/Users/kimliegeois/Desktop/Juelich/order_2_30/order_" + + orders = np.arange(2, 32, 2) + n_orders = len(orders) + + x_0 = [30, 30] + scale = [150, 150] + + monomial = False + + x_PCE = np.array([180., 30.]) + y_PCE = np.array([180., 30.]) + + #value = np.array([0.0109, -0.04723]) + #which_qoi = -2 + + value = np.array([0.00688, 0.00742]) + which_qoi = -1 + + #value = np.array([105.13469634968574, 172.45597099271995]) + #which_qoi = 1 + + #value = np.array([120.26643788294894, 189.0950734335578]) + #which_qoi = 0 + + error = np.zeros((n_orders, 2)) + + cauchy_error = np.zeros((n_orders-1, )) + + N_vec = np.zeros((n_orders, 1)) + N_vec_2 = np.zeros((n_orders, 1)) + + fig = plt.figure() + ax = fig.gca(projection='3d') + + n_real = 100000 + + rand_samples = generate_random_samples(n_real) + + rand_z = np.zeros((n_real, len(orders))) + + for i in range(0, n_orders): + order = orders[i] + qois, samples, weights = read_data(order, base_dir, ax, True) + + N = len(samples[:, 0]) + + N_vec[i] = N + + d = (order / 2) + + x = samples[0:N, 0] + y = samples[0:N, 1] + + exponents = build_exponents_L1(d) + Ainv = build_PCE_system(x, + y, + weights, + exponents, + x_0, + scale, + monomial=monomial) + + coefficients = compute_coeff(Ainv, qois[:, which_qoi]) + + N_vec_2[i] = len(coefficients) + + z_PCE = evaluate_PCE(x_PCE, + y_PCE, + coefficients, + exponents, + x_0, + scale, + monomial=monomial) + + rand_z[:, i] = evaluate_PCE(rand_samples[:, 0], + rand_samples[:, 1], + coefficients, + exponents, + x_0, + scale, + monomial=monomial) + + error[i, 0] = np.abs(z_PCE[0] - value[0]) + error[i, 1] = np.abs(z_PCE[1] - value[1]) + + if i != 0: + cauchy_error[i - + 1] = np.mean(np.power(rand_z[:, i]-rand_z[:, i-1], 2)) + + print((error[:, 0] / value[0])) + print((error[:, 1] / value[1])) + + tmp = np.zeros((len(orders), 2)) + tmp[:, 0] = (orders / 2) + + tmp[:, 1] = np.abs((error[:, 0] / value[0])) + np.savetxt('birr.txt', tmp) + + tmp[:, 1] = np.abs((error[:, 1] / value[1])) + np.savetxt('airr.txt', tmp) + + plt.figure() + plt.plot((orders / 2), np.abs((error[:, 0] / value[0]))) + plt.plot((orders / 2), np.abs((error[:, 1] / value[1]))) + + plt.figure() + plt.plot((orders / 2), N_vec) + plt.plot((orders / 2), N_vec_2) + + print(cauchy_error) + plt.figure() + plt.plot(cauchy_error) + + plt.figure() + plt.semilogy(cauchy_error) + + tmp = np.zeros((len(orders)-1, 2)) + tmp[:, 0] = np.arange(2, 16, 1) + tmp[:, 1] = cauchy_error + np.savetxt('cauchy_error.txt', tmp) + + plt.figure() + plt.semilogy((orders / 2), np.abs((error[:, 0] / value[0]))) + plt.semilogy((orders / 2), np.abs((error[:, 1] / value[1]))) + plt.show() + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/UQ/preload.py b/katoptron/Juelich/UQ/preload.py new file mode 100644 index 0000000000000000000000000000000000000000..a4006b93657229fd792d9ed8278eb1d634a1bea5 --- /dev/null +++ b/katoptron/Juelich/UQ/preload.py @@ -0,0 +1,159 @@ + + + + + +import numpy +import vtk + +from katoptron.Juelich.post_process.vtk_post_process import * +import os + + +def compute_qoi(filename, mm=True, scale_x=1.): + reader = vtk.vtkXMLPUnstructuredGridReader() + reader.SetFileName(filename) + reader.Update() + + scale = 1. + if mm: + scale = 1000. + + OX = 0.0529999991413206 * scale * scale_x # *10 + OY = 0.0440000002272427 * scale * scale_x # *10 + OZ = -0.038604540600378885 * scale * scale_x # *10 + # Previously: -0.0413666241463175 + + F1 = compute_integrated_F(6, 8, OX, OY, OZ, 0, 0, 1, reader) + F2 = compute_integrated_F(7, 8, OX, OY, OZ, 0, 0, 1, reader) + F3 = compute_integrated_F(8, 8, OX, OY, OZ, 0, 0, 1, reader) + return F1, F2, F3 + + +def compute_and_write_preloads(base_dir, filename_out, N, ensemble_size, + n_qoi): + preloads = np.zeros((N, n_qoi)) + + N_ensemble = N // ensemble_size + for ensemble_index in range(0, N_ensemble): + for l in range(0, ensemble_size): + filename = base_dir + str(ensemble_size) + '/' + str( + ensemble_index + ) + '/fused_mirror_assembly_mm_part_2_ast1_s' + str(l) + '.pvtu' + F1, F2, F3 = compute_qoi(filename) + preloads[ensemble_index * ensemble_size + l, 0] = F1 + preloads[ensemble_index * ensemble_size + l, 1] = F2 + preloads[ensemble_index * ensemble_size + l, 2] = F3 + + np.savetxt(filename_out, preloads) + return preloads + + +def main(): + + file_dir = os.path.dirname(__file__) + + compute = False + if compute: + N = 2 + ensemble_size = 1 + n_qoi = 3 + + base_dir = file_dir + \ + '/../../../workspace/katoptron_Juelich_tests_M1_assembly_fused/MPI_2/A2/' + preloads_A2 = compute_and_write_preloads(base_dir, 'preloads_A2.txt', + N, ensemble_size, n_qoi) + print(preloads_A2) + + base_dir = file_dir + \ + '/../../../workspace/katoptron_Juelich_tests_M1_assembly_fused/MPI_2/A2_baking/' + preloads_A2_baking = compute_and_write_preloads( + base_dir, 'preloads_A2_baking.txt', N, ensemble_size, n_qoi) + print(preloads_A2_baking) + + base_dir = file_dir + \ + '/../../../workspace/katoptron_Juelich_tests_M1_assembly_fused/MPI_2/B2/' + preloads_B2 = compute_and_write_preloads(base_dir, 'preloads_B2.txt', + N, ensemble_size, n_qoi) + print(preloads_B2) + + base_dir = file_dir + \ + '/../../../workspace/katoptron_Juelich_tests_M1_assembly_fused/MPI_2/B2_baking/' + preloads_B2_baking = compute_and_write_preloads( + base_dir, 'preloads_B2_baking.txt', N, ensemble_size, n_qoi) + print(preloads_B2_baking) + + np.savetxt('preloads_A2_dif.txt', preloads_A2 - preloads_A2_baking) + np.savetxt('preloads_B2_dif.txt', preloads_B2 - preloads_B2_baking) + + N = 79 + + base_dir = file_dir + \ + '/../../../workspace/katoptron_Juelich_tests_M1_assembly_fused_preload/MPI_2/A2/' + preloads_A2_N = compute_and_write_preloads(base_dir, + 'preloads_A2_N.txt', N, + ensemble_size, n_qoi) + + print(preloads_A2_N) + + np.savetxt('preloads_A2_N_dif.txt', + preloads_A2_N - preloads_A2_baking[0]) + + base_dir = file_dir + \ + '/../../../workspace/katoptron_Juelich_tests_M1_assembly_fused_preload/MPI_2/B2/' + preloads_B2_N = compute_and_write_preloads(base_dir, + 'preloads_B2_N.txt', N, + ensemble_size, n_qoi) + + print(preloads_B2_N) + + np.savetxt('preloads_B2_N_dif.txt', + preloads_B2_N - preloads_B2_baking[0]) + else: + N = 20 + loaded = np.load(file_dir + '/../samples_files/Xiao_' + str(N) + + '.npz') + samples = loaded['samples'] + N = samples.shape[0] + + preloads_A2_N = np.loadtxt('preloads_A2_N.txt') + preloads_B2_N = np.loadtxt('preloads_B2_N.txt') + + tmp = np.zeros((N, 3)) + tmp[:, 0] = samples[:, 0] + tmp[:, 1] = samples[:, 1] + tmp[:, 2] = preloads_A2_N[:, 0] + np.savetxt('qoi_A_P1.txt', tmp, fmt='%f') + tmp[:, 2] = preloads_A2_N[:, 1] + np.savetxt('qoi_A_P2.txt', tmp, fmt='%f') + tmp[:, 2] = preloads_A2_N[:, 2] + np.savetxt('qoi_A_P3.txt', tmp, fmt='%f') + + tmp[:, 2] = preloads_B2_N[:, 0] + np.savetxt('qoi_B_P1.txt', tmp, fmt='%f') + tmp[:, 2] = preloads_B2_N[:, 1] + np.savetxt('qoi_B_P2.txt', tmp, fmt='%f') + tmp[:, 2] = preloads_B2_N[:, 2] + np.savetxt('qoi_B_P3.txt', tmp, fmt='%f') + + print(np.amin(preloads_A2_N[:, 0])) + print(np.amax(preloads_A2_N[:, 0])) + + print(np.amin(preloads_A2_N[:, 1])) + print(np.amax(preloads_A2_N[:, 1])) + + print(np.amin(preloads_A2_N[:, 2])) + print(np.amax(preloads_A2_N[:, 2])) + + print(np.amin(preloads_B2_N[:, 0])) + print(np.amax(preloads_B2_N[:, 0])) + + print(np.amin(preloads_B2_N[:, 1])) + print(np.amax(preloads_B2_N[:, 1])) + + print(np.amin(preloads_B2_N[:, 2])) + print(np.amax(preloads_B2_N[:, 2])) + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/UQ/speedup.py b/katoptron/Juelich/UQ/speedup.py new file mode 100644 index 0000000000000000000000000000000000000000..de8d588c19ebf686ec85bc9a2462e0ca584bbea0 --- /dev/null +++ b/katoptron/Juelich/UQ/speedup.py @@ -0,0 +1,409 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +from katoptron.speedup import * +import matplotlib.pyplot as plt +import os + + +def plot_iter_all_ensemble_sizes(n_samples, iter): + import matplotlib.pyplot as plt + plt.figure() + plt.plot(list(range(0, n_samples)), + iter[0][:], 'bo', markersize=8, zorder=1) + if iter.shape[0] >= 2: + plt.plot(list(range(0, n_samples)), + iter[1][:], 'ro', markersize=6, zorder=2) + if iter.shape[0] >= 3: + plt.plot(list(range(0, n_samples)), + iter[2][:], 'go', markersize=4, zorder=2) + if iter.shape[0] >= 4: + plt.plot(list(range(0, n_samples)), + iter[3][:], 'ko', markersize=2, zorder=3) + plt.xlabel('sample') + plt.ylabel('Number of iterations to converge') + + +def speedup_of_one_case(file_MC_base_dir, + n_samples, + ensemble_sizes, + quantiles, + querylines, + use_waves_timers, + use_teuchos_timers, + per_iteration, + iter_2, + reduction=False): + import matplotlib.pyplot as plt + + if reduction: + name = 'case_ER' + else: + name = 'case' + + speedup = compute_speedup(n_samples, + ensemble_sizes, + file_MC_base_dir, + querylines, + per_iteration, + quantiles, + use_waves_timers, + use_teuchos_timers, + reduction, + remove_write=True, + remove_block=True) + + plot_speedup(speedup, ensemble_sizes, np.arange(0, len(querylines)), name, + querylines, per_iteration) + plt.savefig(name + '.png', dpi=400) + + save_speedup(speedup, ensemble_sizes, querylines, name) + + R = compute_R(n_samples, ensemble_sizes, file_MC_base_dir, quantiles, + reduction) + + save_R(R, name) + + iter = read_iter_all_ensemble_sizes(n_samples, ensemble_sizes, + file_MC_base_dir, reduction) + + # if not reduction: + # iter[0][:] = iter_2[0][:] + if len(ensemble_sizes) == 4: + plot_iter_all_ensemble_sizes(n_samples, iter) + plt.savefig(name + '_convergence.png', dpi=400) + np.savetxt(name + '_convergence.txt', iter, delimiter=' ') + + return iter + + +def write_tex(n_samples, iter, filename): + f = open(filename, 'w') + print('\\addplot [c1, mark=*, mark size=2pt, mark options={solid}, only marks]', file=f) + print('table [row sep=crcr] {%', file=f) + for i in range(0, n_samples): + print(str(i) + ' ' + str(iter[0][i]) + '\\\\', file=f) + print('};', file=f) + print('\\label{pgfplots:noEP}', file=f) + if iter.shape[0] >= 2: + ensemble_size = 8 + for i in range(0, int(np.ceil(n_samples * 1. / ensemble_size))): + print('\\addplot [line width=2pt, c2]', file=f) + print('table [row sep=crcr] {%', file=f) + print(str(ensemble_size * i) + ' ' + str( + iter[1][ensemble_size * i]) + '\\\\', file=f) + print(str(ensemble_size * + (i + 1)) + ' ' + str(iter[1][ensemble_size * + (i + 1) - 1]) + '\\\\', file=f) + print('};', file=f) + print('\\label{pgfplots:s8}', file=f) + if iter.shape[0] >= 3: + ensemble_size = 16 + for i in range(0, int(np.ceil(n_samples * 1. / ensemble_size))): + print('\\addplot [line width=1.5pt, c3]', file=f) + print('table [row sep=crcr] {%', file=f) + print(str(ensemble_size * i) + ' ' + str( + iter[2][ensemble_size * i]) + '\\\\', file=f) + print(str(ensemble_size * + (i + 1)) + ' ' + str(iter[2][ensemble_size * + (i + 1) - 1]) + '\\\\', file=f) + print('};', file=f) + print('\\label{pgfplots:s16}', file=f) + if iter.shape[0] >= 4: + ensemble_size = 32 + for i in range(0, int(np.ceil(n_samples * 1. / ensemble_size))): + print('\\addplot [line width=1.pt, c4]', file=f) + print('table [row sep=crcr] {%', file=f) + print(str(ensemble_size * i) + ' ' + str( + iter[3][ensemble_size * i]) + '\\\\', file=f) + print(str(ensemble_size * + (i + 1)) + ' ' + str(iter[3][ensemble_size * + (i + 1) - 1]) + '\\\\', file=f) + print('};', file=f) + print('\\label{pgfplots:s32}', file=f) + f.closed + + +def plot_iter_all(base_dir_ER, base_dir_NER, ensemble_sizes, n_samples): + + iter_NER = read_iter_all_ensemble_sizes(n_samples, ensemble_sizes, + base_dir_NER, False) + iter_ER = read_iter_all_ensemble_sizes(n_samples, ensemble_sizes, + base_dir_ER, True) + plot_iter_all_ensemble_sizes(n_samples, iter_NER) + write_tex(n_samples, iter_NER, 'NER_conv.tex') + np.savetxt('NER_conv.txt', iter_NER) + np.savetxt('ordering_1.txt', + np.argsort(iter_NER[0, :]).astype(int), + fmt='%i') + np.savetxt('ordering_2.txt', + np.argsort(iter_NER[0][:]).astype(int), + fmt='%i') + plot_iter_all_ensemble_sizes(n_samples, iter_ER) + write_tex(n_samples, iter_ER, 'ER_conv.tex') + np.savetxt('ER_conv.txt', iter_ER) + + order = np.argsort(iter_NER[0, :]) + + tmp = iter_NER[0][order] + + plt.figure() + plt.plot(iter_NER[0][:]) + plt.savefig('no_order_1.png', dpi=400) + + iter_NER[0][:] = tmp + + plt.figure() + plt.plot(tmp) + plt.savefig('order_1.png', dpi=400) + + tmp = iter_ER[0][order] + + plt.figure() + plt.plot(iter_ER[0][:]) + plt.savefig('no_order_2.png', dpi=400) + + iter_ER[0][:] = tmp + + write_tex(n_samples, iter_NER, 'NER_conv_2.tex') + write_tex(n_samples, iter_ER, 'ER_conv_2.tex') + + plt.figure() + plt.plot(tmp) + plt.savefig('order_2.png', dpi=400) + + +def CPU_time_per_one_case(base_dir, + n_samples, + ensemble_sizes, + quantiles, + querylines, + use_waves_timers, + use_teuchos_timers, + per_iteration, + filename_CPU, + filename_speed_up, + total_id, + write_id, + block_id, + per_ensemble=True): + + timers = read_timers_all_ensemble_sizes(n_samples, ensemble_sizes, + base_dir, querylines, + use_waves_timers, + use_teuchos_timers) + + f = open(filename_CPU, 'w') + print(timers.shape, file=f) + + for i in range(0, timers.shape[2]): + print(querylines[i], file=f) + string = '' + for e in range(0, timers.shape[0]): + if per_ensemble: + current_timer = (np.sum(timers[e, :, i]) / n_samples) + if i == total_id: + current_timer -= ( + np.sum(timers[e, :, write_id]) / n_samples) + current_timer -= ( + np.sum(timers[e, :, block_id]) / n_samples) + + else: + current_timer = (np.sum( + timers[e, :, i]) / (n_samples * ensemble_sizes[e])) + if i == total_id: + current_timer -= (np.sum(timers[e, :, write_id]) / ( + n_samples * ensemble_sizes[e])) + current_timer -= (np.sum(timers[e, :, block_id]) / ( + n_samples * ensemble_sizes[e])) + + string = string + str(round(current_timer, 3)) + ' & ' + print(string, file=f) + print(' ', file=f) + f.closed + + f = open(filename_speed_up, 'w') + print(timers.shape, file=f) + + for i in range(0, timers.shape[2]): + print(querylines[i], file=f) + string = '' + for e in range(0, timers.shape[0]): + if e == 0: + current_timer_s1 = np.sum(timers[0, :, i]) + if i == total_id: + current_timer_s1 -= np.sum(timers[0, :, write_id]) + current_timer_s1 -= np.sum(timers[0, :, block_id]) + + current_timer = (np.sum(timers[e, :, i]) / ensemble_sizes[e]) + if i == total_id: + current_timer -= (np.sum( + timers[e, :, write_id]) / ensemble_sizes[e]) + current_timer -= (np.sum( + timers[e, :, block_id]) / ensemble_sizes[e]) + + string = string + str(round((current_timer_s1 / current_timer), + 3)) + ' & ' + print(string, file=f) + print(' ', file=f) + f.closed + + +def analysis_one_case(directory, + base_dir, + n_samples, + ensemble_sizes, + quantiles, + querylines, + use_waves_timers, + use_teuchos_timers, + per_iteration, + ensemble_reduction=False): + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + iter = speedup_of_one_case(base_dir, n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, + use_teuchos_timers, per_iteration, np.array([]), + ensemble_reduction) + + CPU_time_per_one_case(base_dir, n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, use_teuchos_timers, + per_iteration, 'average_CPU.txt', + 'average_speed_up.txt', 7, 8, 21) + + #plot_iter_all(base_dir_ER, base_dir_NER, ensemble_sizes, n_samples) + iters = read_iter_all_ensemble_sizes(n_samples, ensemble_sizes, base_dir, + ensemble_reduction) + plot_iter_all_ensemble_sizes(n_samples, iters) + write_tex(n_samples, iters, 'conv.tex') + + os.chdir('..') + + +def main(): + import matplotlib.pyplot as plt + + ensemble_sizes = [1, 8, 16, 32] + quantiles = [0, 0.33, 0.5, 0.66, 1.] + + querylines = [ + 'computeMatrices', 'Belos: Operation Op*x', 'Belos: Operation Prec*x', + 'Belos: DGKS[2]: Orthogonalization', + 'Belos: DGKS[2]: Ortho (Inner Product)', + 'Belos: DGKS[2]: Ortho (Norm)', 'Belos: DGKS[2]: Ortho (Update)', + 'total', 'write results', 'MueLu: Hierarchy: Solve (level=0)', + 'MueLu: Hierarchy: Solve (level=1)', + 'MueLu: Hierarchy: Solve (level=2)', + 'MueLu: Hierarchy: Solve : smoothing (level=0)', + 'MueLu: Hierarchy: Solve : prolongation (level=0)', + 'MueLu: Hierarchy: Solve : residual calculation (level=0)', + 'MueLu: Hierarchy: Solve : restriction (level=0)', + 'MueLu: Hierarchy: Solve : smoothing (level=0)', + 'MueLu: Hierarchy: Solve : smoothing (level=1)', + 'MueLu: Hierarchy: Solve : coarse (level=2)', + 'Belos: PseudoBlockGmresSolMgr total solve time', + 'MueLu: Hierarchy: Setup (total)', 'create the block matrix' + ] + use_waves_timers = np.array([0, 7, 8, 21], dtype=int) + use_teuchos_timers = np.array( + [1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], + dtype=int) + per_iteration = [ + False, True, True, False, False, False, False, False, False, True, + True, True, True, True, True, True, True, True, True, False, False, + False + ] + + n_samples = 64 + + ensemble_sizes = [1, 8, 16] + + base_dir = '/Users/kimliegeois/Desktop/Juelich/ER/mpi_ER/MPI_2' + + directory = 'option_A_mpi_2_ER' + analysis_one_case(directory, base_dir, n_samples, ensemble_sizes, + quantiles, querylines, use_waves_timers, + use_teuchos_timers, per_iteration, True) + + base_dir = '/Users/kimliegeois/Desktop/Juelich/NER/mpi_NER/MPI_2' + + directory = 'option_A_mpi_2_NER' + analysis_one_case(directory, base_dir, n_samples, ensemble_sizes, + quantiles, querylines, use_waves_timers, + use_teuchos_timers, per_iteration, False) + + ensemble_sizes = [1, 8, 16, 32] + + base_dir = '/Users/kimliegeois/Desktop/Juelich/ER/mpi_ER/MPI_4' + + directory = 'option_A_mpi_4_ER' + analysis_one_case(directory, base_dir, n_samples, ensemble_sizes, + quantiles, querylines, use_waves_timers, + use_teuchos_timers, per_iteration, True) + + base_dir = '/Users/kimliegeois/Desktop/Juelich/NER/mpi_NER/MPI_4' + + directory = 'option_A_mpi_4_NER' + analysis_one_case(directory, base_dir, n_samples, ensemble_sizes, + quantiles, querylines, use_waves_timers, + use_teuchos_timers, per_iteration, False) + + base_dir = '/Users/kimliegeois/Desktop/Juelich/ER/mpi_ER/MPI_8' + + directory = 'option_A_mpi_8_ER' + analysis_one_case(directory, base_dir, n_samples, ensemble_sizes, + quantiles, querylines, use_waves_timers, + use_teuchos_timers, per_iteration, True) + + base_dir = '/Users/kimliegeois/Desktop/Juelich/NER/mpi_NER/MPI_8' + + directory = 'option_A_mpi_8_NER' + analysis_one_case(directory, base_dir, n_samples, ensemble_sizes, + quantiles, querylines, use_waves_timers, + use_teuchos_timers, per_iteration, False) + + n_samples = 32 + ensemble_sizes = [1, 8, 16] + base_dir = '/Users/kimliegeois/Desktop/Juelich/mpi_4/MPI_16' + + directory = 'option_A_mpi_16_all' + print(directory) + analysis_one_case(directory, base_dir, n_samples, ensemble_sizes, + quantiles, querylines, use_waves_timers, + use_teuchos_timers, per_iteration, False) + + n_samples = 32 + ensemble_sizes = [1, 8, 16, 32] + base_dir = '/Users/kimliegeois/Desktop/Juelich/mpi_4/MPI_32' + + directory = 'option_A_mpi_32_all' + print(directory) + analysis_one_case(directory, base_dir, n_samples, ensemble_sizes, + quantiles, querylines, use_waves_timers, + use_teuchos_timers, per_iteration, False) + + n_samples = 16 + ensemble_sizes = [1, 8, 16] + base_dir = '/Users/kimliegeois/Desktop/Juelich/mpi_5/MPI_32' + + directory = 'option_A_mpi_32_all_2' + print(directory) + analysis_one_case(directory, base_dir, n_samples, ensemble_sizes, + quantiles, querylines, use_waves_timers, + use_teuchos_timers, per_iteration, False) + + n_samples = 32 + ensemble_sizes = [1, 8, 16, 32] + base_dir = '/Users/kimliegeois/Desktop/Juelich/mpi_6/MPI_32' + + directory = 'option_A_mpi_32_all_3' + print(directory) + analysis_one_case(directory, base_dir, n_samples, ensemble_sizes, + quantiles, querylines, use_waves_timers, + use_teuchos_timers, per_iteration, False) + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/UQ/test_halton.py b/katoptron/Juelich/UQ/test_halton.py new file mode 100644 index 0000000000000000000000000000000000000000..64864a76cd78895b4bd91c4345374b0364535b2d --- /dev/null +++ b/katoptron/Juelich/UQ/test_halton.py @@ -0,0 +1,67 @@ + +import numpy as np +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import axes3d +import matplotlib.tri as mtri + +from katoptron.Juelich.UQ.halton import * +from katoptron.Juelich.UQ.copulas import * +import katoptron.utilities as u +from scipy.stats import lognorm + + +def main(): + + N = 640 + n_rand = 2 + + halton_points = np.zeros((n_rand, N)) + + for i in range(0, N): + halton_points[:, i] = halton(i + 1, n_rand) + + #fig = plt.figure() + # plt.scatter(halton_points[0,:],halton_points[1,:]) + #ax = fig.gca() + # ax.set_aspect('equal') + + np.random.seed(42) + + sigma = 0.15 + mu = np.log(345) + sigma**2 # mode = 345 + + randomVariable_1 = np.random.lognormal(mu, sigma, N) + randomVariable_2 = np.random.lognormal(mu, sigma, N) + + randomVariable_1_halton = lognorm.ppf(halton_points[0, :], + sigma, + scale=np.exp(mu)) + randomVariable_2_halton = lognorm.ppf(halton_points[1, :], + sigma, + scale=np.exp(mu)) + + randomVariable_halton = lognormal(halton_points, [mu, mu], [sigma, sigma]) + + #randomVariable_1_halton = lognorm.rvs(sigma,scale=np.exp(mu), size=N, random_state=42) + #randomVariable_2_halton = lognorm.rvs(sigma,scale=np.exp(mu), size=N) + + #fig = plt.figure() + # plt.scatter(randomVariable_1,randomVariable_2) + #ax = fig.gca() + # ax.set_aspect('equal') + + #fig = plt.figure() + # plt.scatter(randomVariable_1_halton,randomVariable_2_halton) + #ax = fig.gca() + # ax.set_aspect('equal') + + fig = plt.figure() + plt.scatter(randomVariable_1, randomVariable_2) + plt.scatter(randomVariable_halton[0, :], randomVariable_halton[1, :]) + ax = fig.gca() + ax.set_aspect('equal') + plt.show() + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/UQ/test_kde.py b/katoptron/Juelich/UQ/test_kde.py new file mode 100644 index 0000000000000000000000000000000000000000..569dd1d3dfc0cfd6f081c4a5f77081cbb302add0 --- /dev/null +++ b/katoptron/Juelich/UQ/test_kde.py @@ -0,0 +1,49 @@ + +import numpy as np +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import axes3d + +from katoptron.Juelich.UQ.kde import * + + +def main(): + + N = 1000 + g1 = np.array([0.6 + 0.6 * np.random.rand(N), + np.random.rand(N), 0.4+0.1*np.random.rand(N)]) + g2 = np.array([0.4+0.3 * np.random.rand(N), 0.5 * + np.random.rand(N), 0.1*np.random.rand(N)]) + g3 = np.array([0.3*np.random.rand(N), 0.3 * + np.random.rand(N), 0.3*np.random.rand(N)]) + + g_total = np.concatenate((g1, g2, g3), axis=1) + x, y, z = g_total + + fig = plt.figure() + ax = fig.gca(projection='3d') + ax.scatter(x, y, z) + + kernel = compute_kde(g_total) + plot_kde(kernel, [-0.5, 1.5], [-0.5, 1.5], [0.05], [0, 1]) + plot_kde(kernel, [-0.5, 1.5], [-0.5, 1.5], [0.15], [0, 1]) + plot_kde(kernel, [-0.5, 1.5], [-0.5, 1.5], [0.25], [0, 1]) + plot_kde(kernel, [-0.5, 1.5], [-0.5, 1.5], [0.35], [0, 1]) + plot_kde(kernel, [-0.5, 1.5], [-0.5, 1.5], [0.45], [0, 1]) + plot_kde(kernel, [-0.5, 1.5], [-0.5, 1.5], [0.55], [0, 1]) + + np.random.seed(42) + p1 = box_prob_MC(kernel, [0, -0.5, 0.3], [1.5, 1.5, 0.6], 100000) + np.random.seed(42) + p2 = box_prob_MC(kernel, [0, -0.5, 0.3], [0.6, 1.5, 0.6], 100000) + np.random.seed(42) + p3 = box_prob_MC(kernel, [0.6, -0.5, 0.3], [1.5, 1.5, 0.6], 100000) + + print(p1) + print(p3) + print(p1-(p2+p3)) + + plt.show() + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/__init__.py b/katoptron/Juelich/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..14a7f2a30c059200731e5ce5986eeb93683a0329 --- /dev/null +++ b/katoptron/Juelich/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +# katoptron.Juelich MODULE initialization file diff --git a/katoptron/Juelich/broken/M1.py b/katoptron/Juelich/broken/M1.py new file mode 100644 index 0000000000000000000000000000000000000000..c3a57826a97e5df99a310ea3c59aa74243486464 --- /dev/null +++ b/katoptron/Juelich/broken/M1.py @@ -0,0 +1,315 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + + from fwk.wutils import parseargs + args = parseargs() + + from PyTrilinos import Teuchos + import numpy as np + + precondList = Teuchos.ParameterList() + precondList = Teuchos.ParameterList() + precondSubList = Teuchos.ParameterList() + precondSubSubList = Teuchos.ParameterList() + precondSubSubList['fact: iluk level-of-fill'] = 2 + precondSubList['Prec Type'] = "RILUK" + precondSubList['Overlap'] = 1 + precondSubList['Ifpack2 Settings'] = precondSubSubList + precondList['Ifpack2'] = precondSubList + + mueluParams = Teuchos.ParameterList() + #mueluParamsSub1 = Teuchos.ParameterList() + #mueluParamsSub1['PDE equations'] = 4 + #mueluParams['Matrix'] = mueluParamsSub1 + mueluParams['number of equations'] = 4 + mueluParams['max levels'] = 2 + mueluParams['multigrid algorithm'] = "unsmoothed" + mueluParams['smoother: type'] = "RELAXATION" + + mueluParamsSub2 = Teuchos.ParameterList() + + mueluParamsSub2['relaxation: type'] = "Symmetric Gauss-Seidel" + mueluParamsSub2['relaxation: sweeps'] = 4 + mueluParamsSub2['relaxation: damping factor'] = 1.25 + + mueluParams['coarse: type'] = "RELAXATION" + + mueluParamsSub3 = Teuchos.ParameterList() + + mueluParamsSub3['relaxation: type'] = "Symmetric Gauss-Seidel" + mueluParamsSub3['relaxation: sweeps'] = 4 + mueluParamsSub3['relaxation: damping factor'] = 1.25 + + mueluParams['smoother: params'] = mueluParamsSub2 + mueluParams['coarse: params'] = mueluParamsSub3 + + solverList = Teuchos.ParameterList() + solverList['type'] = "BlockGmres" + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 1000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 100 + solverList['ifpackParams'] = precondList + solverList['mueluParams'] = mueluParams + + solverList['Use preconditioner'] = True + + solverList['Maximum active set iteration'] = 10 + + solverList['Print Teuchos timers'] = False + #solverList['Write matrix and vectors'] = True + #solverList['Write txt files'] = True + + geo_name = 'M1_FEM_7.msh' + mesh_name = 'M1_FEM_7.msh' + + import shlex + import subprocess + import os + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + #solverList["MueLu xml file name"] = file_dir + '/finest_level_prec_2.xml' + solverList["MueLu xml file name"] = file_dir + \ + '/finest_level_prec_simple_heat.xml' + #solverList["MueLu xml file name"] = file_dir + '/nested_multigrid_2_lvls_chebyshev_heat.xml' + #solverList["MueLu xml file name"] = file_dir + '/nested_multigrid_2_lvls_chebyshev.xml' + + if rank == 0: + command_line = 'gmsh -3 ' + file_dir + '/mesh/' + geo_name + \ + ' -o ' + work_dir + '/' + mesh_name + ' -part ' + str(siz) + print(command_line) + tmp = shlex.split(command_line) + fileout = open('gmsh.log', 'w') + p = subprocess.Popen(tmp, stdin=subprocess.PIPE, stdout=fileout, + stderr=fileout, env=os.environ, shell=False, close_fds=True) + retcode = p.wait() + for i in range(1, siz): + comm.send(1, dest=i, tag=11) + else: + data = comm.recv(source=0, tag=11) + + if siz == 1: + msh = gmsh.MeshLoader(mesh_name, work_dir).execute() + else: + msh = gmsh.MeshLoader(mesh_name, work_dir).myrank_execute(rank) + + pbl = m.Problem(msh, comm) + + ensemble_size = 1 + + E = 330000 * np.ones(ensemble_size) + nu = 0.36 * np.ones(ensemble_size) + k = 0.114 + d = 0.5E-05 + + E_rhodium = 379000 * np.ones(ensemble_size) + nu_rhodium = 0.26 * np.ones(ensemble_size) + k_rhodium = 0.150 + d_rhodium = 0.781E-05 + + E_WCu = 280000 * np.ones(ensemble_size) + nu_WCu = 0.26 * np.ones(ensemble_size) + k_WCu = 0.180 + d_WCu = 0.88E-05 + + E_SS = 180000 * np.ones(ensemble_size) + nu_SS = 0.26 * np.ones(ensemble_size) + k_SS = 0.020 + d_SS = 1.6E-05 + + E_CuCrZr = 130000 * np.ones(ensemble_size) + nu_CuCrZr = 0.26 * np.ones(ensemble_size) + k_CuCrZr = 0.280 + d_CuCrZr = 1.6E-05 + + E_I718 = 180000 * np.ones(ensemble_size) + nu_I718 = 0.26 * np.ones(ensemble_size) + k_I718 = 0.020 + d_I718 = 1.4E-05 + + m.Medium(pbl, "Mirror", "Rhodium", E_rhodium, + nu_rhodium, k_rhodium, d_rhodium) + m.Medium(pbl, "Substrate", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + m.Medium(pbl, "Shaft 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 3", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Holder", "SS", E_SS, nu_SS, k_SS, d_SS) + + m.Medium(pbl, "Spacer 1-2", "CuCrZr", E_CuCrZr, + nu_CuCrZr, k_CuCrZr, d_CuCrZr) + m.Medium(pbl, "Spacer 3", "CuCrZr", E_CuCrZr, + nu_CuCrZr, k_CuCrZr, d_CuCrZr) + + m.Medium(pbl, "Spacer 1-2 part 2", "CuCrZr", + E_CuCrZr, nu_CuCrZr, k_CuCrZr, d_CuCrZr) + m.Medium(pbl, "Spacer 3 part 2", "CuCrZr", + E_CuCrZr, nu_CuCrZr, k_CuCrZr, d_CuCrZr) + + m.Medium(pbl, "Washer 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Nut 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Dirichlet(pbl, "Holder Clamping", "Clamped", 1, + 0., 1, 0., 1, 0., 0, 0., ensemble_size) + + m.Dirichlet(pbl, "Cooling top", "Clamped", 0, 0., + 0, 0., 0, 0., 1, 70., ensemble_size) + m.Dirichlet(pbl, "Cooling bot", "Clamped", 0, 0., + 0, 0., 0, 0., 1, 70., ensemble_size) + + norm1 = tbox.Vector3d(0, 0, -1) + norm2 = tbox.Vector3d(0, 0, 1) + + cont1 = m.Contact(pbl, "Nut 1 to Holder", "contact", norm1, -0.3) + cont1.setMaster(pbl, "Holder to Nut 1", norm1) + + cont2 = m.Contact(pbl, "Nut 2 to Holder", "contact", norm1, -0.3) + cont2.setMaster(pbl, "Holder to Nut 2", norm1) + + cont3 = m.Contact(pbl, "Nut 3 to Holder", "contact", norm1, -0.3) + cont3.setMaster(pbl, "Holder to Nut 3", norm1) + + cont4 = m.Contact(pbl, "Spacer 1-2 to Substrate", "contact", norm1, 0.) + cont4.setMaster(pbl, "Substrate to Spacer 1-2", norm1) + + cont5 = m.Contact(pbl, "Spacer 3 to Substrate", "contact", norm1, 0.) + cont5.setMaster(pbl, "Substrate to Spacer 3", norm1) + + cont6 = m.Contact(pbl, "Spacer 1-2 part 2 to Holder", "contact", norm1, 0.) + cont6.setMaster(pbl, "Holder to Spacer 1-2 part 2", norm1) + + cont7 = m.Contact(pbl, "Spacer 3 part 2 to Holder", "contact", norm1, 0.) + cont7.setMaster(pbl, "Holder to Spacer 3 part 2", norm1) + + cont8 = m.Contact(pbl, "Spacer 1-2 to Spacer 1-2 part 2", + "contact", norm1, 0.) + cont8.setMaster(pbl, "Spacer 1-2 part 2 to Spacer 1-2", norm1) + + cont9 = m.Contact(pbl, "Spacer 3 to Spacer 3 part 2", "contact", norm1, 0.) + cont9.setMaster(pbl, "Spacer 3 part 2 to Spacer 3", norm1) + + cont10 = m.Contact(pbl, "Spacer 1-2 to Washer 1", "contact", norm1, 0.) + cont10.setMaster(pbl, "Washer 1 to Spacer 1-2", norm1) + # cont10.setInitialyOpen() + + cont11 = m.Contact(pbl, "Washer 1 to Spacer 1-2 part 2", + "contact", norm1, 0.) + cont11.setMaster(pbl, "Spacer 1-2 part 2 to Washer 1", norm1) + # cont11.setInitialyOpen() + + cont12 = m.Contact(pbl, "Washer 1 to Shaft 1", "contact", norm1, 0.) + cont12.setMaster(pbl, "Shaft 1 to Washer 1", norm1) + # cont12.setInitialyOpen() + + cont13 = m.Contact(pbl, "Spacer 1-2 to Washer 2", "contact", norm1, 0.) + cont13.setMaster(pbl, "Washer 2 to Spacer 1-2", norm1) + # cont13.setInitialyOpen() + + cont14 = m.Contact(pbl, "Washer 2 to Spacer 1-2 part 2", + "contact", norm1, 0.) + cont14.setMaster(pbl, "Spacer 1-2 part 2 to Washer 2", norm1) + # cont14.setInitialyOpen() + + cont15 = m.Contact(pbl, "Shaft 2 to Washer 2", "contact", norm1, 0.) + cont15.setMaster(pbl, "Washer 2 to Shaft 2", norm1) + # cont15.setInitialyOpen() + + cont16 = m.Contact(pbl, "Spacer 3 to Washer 3", "contact", norm1, 0.) + cont16.setMaster(pbl, "Washer 3 to Spacer 3", norm1) + # cont16.setInitialyOpen() + + cont17 = m.Contact(pbl, "Washer 3 to Spacer 3 part 2", + "contact", norm1, 0.) + cont17.setMaster(pbl, "Spacer 3 part 2 to Washer 3", norm1) + # cont17.setInitialyOpen() + + cont18 = m.Contact(pbl, "Washer 3 to Shaft 3", "contact", norm1, 0.) + cont18.setMaster(pbl, "Shaft 3 to Washer 3", norm1) + # cont18.setInitialyOpen() + + #m.Dirichlet(pbl, "Nut 1 to Holder", "Clamped",1,0.,1,0.,1,0.,1,100.,ensemble_size) + #m.Dirichlet(pbl, "Nut 2 to Holder", "Clamped",1,0.,1,0.,1,0.,1,100.,ensemble_size) + #m.Dirichlet(pbl, "Nut 3 to Holder", "Clamped",1,0.,1,0.,1,0.,1,100.,ensemble_size) + + #m.Dirichlet(pbl, "Holder to Nut 1", "Clamped",1,0.,1,0.,1,0.,1,100.,ensemble_size) + #m.Dirichlet(pbl, "Holder to Nut 2", "Clamped",1,0.,1,0.,1,0.,1,100.,ensemble_size) + #m.Dirichlet(pbl, "Holder to Nut 3", "Clamped",1,0.,1,0.,1,0.,1,100.,ensemble_size) + + #m.Dirichlet(pbl, "Washer 1 to Spacer 1-2", "Clamped",1,0.,1,0.,1,0.,1,70.,ensemble_size) + #m.Dirichlet(pbl, "Washer 2 to Spacer 1-2", "Clamped",1,0.,1,0.,1,0.,1,70.,ensemble_size) + #m.Dirichlet(pbl, "Washer 3 to Spacer 3", "Clamped",1,0.,1,0.,1,0.,1,70.,ensemble_size) + + #m.Dirichlet(pbl, "Spacer 1-2 to Substrate", "Clamped",1,0.,1,0.,1,0.,1,70.,ensemble_size) + #m.Dirichlet(pbl, "Spacer 3 to Substrate", "Clamped",1,0.,1,0.,1,0.,1,70.,ensemble_size) + + #m.Dirichlet(pbl, "Spacer 1-2 part 2 to Holder", "Clamped",1,0.,1,0.,1,0.,1,70.,ensemble_size) + #m.Dirichlet(pbl, "Spacer 3 part 2 to Holder", "Clamped",1,0.,1,0.,1,0.,1,70.,ensemble_size) + + zero = np.zeros(ensemble_size) + hf = (70/0.0121)*0.001 * np.ones(ensemble_size) + + m.Neumann(pbl, "Mirror surface", "moved", 0, zero, + 0, zero, 0, zero, 1, hf, ensemble_size) + m.Source(pbl, "Mirror", "ihg", 2.45*1000) + m.Source(pbl, "Substrate", "ihg", 2.45*1000) + m.Source(pbl, "Holder", "ihg", 0.7*1000) + + m.Dirichlet(pbl, "XY Clamping", "Clamped", 1, 0., + 1, 0., 0, 0., 0, 0., ensemble_size) + #m.Dirichlet(pbl, "Mirror surface", "Clamped",0,0.,0,0.,1,-0.1,1,300.,ensemble_size) + + slv = m.IterativeSolver(pbl, args.k, solverList, 4, ensemble_size) + + if not args.nogui: + if rank == 0: + all_msh = gmsh.MeshLoader(mesh_name, work_dir).execute() + import katoptron.viewer as v + gui = v.MeshViewer(pbl, slv, all_msh) + gui.vmin = 0 + gui.vmax = 1 + gui.start() + else: + slv.start() + else: + slv.start() + + from fwk.testing import * + tests = CTests() + tests.add(CTest('mean(Tbottom)', 0, 0)) + tests.run() + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/broken/M1_assembly.py b/katoptron/Juelich/broken/M1_assembly.py new file mode 100644 index 0000000000000000000000000000000000000000..de619728029c696da755c5c045232b698839679c --- /dev/null +++ b/katoptron/Juelich/broken/M1_assembly.py @@ -0,0 +1,236 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + + from fwk.wutils import parseargs + args = parseargs() + + from PyTrilinos import Teuchos + import numpy as np + + precondList = Teuchos.ParameterList() + precondList = Teuchos.ParameterList() + precondSubList = Teuchos.ParameterList() + precondSubSubList = Teuchos.ParameterList() + precondSubSubList['fact: iluk level-of-fill'] = 2 + precondSubList['Prec Type'] = "RILUK" + precondSubList['Overlap'] = 1 + precondSubList['Ifpack2 Settings'] = precondSubSubList + precondList['Ifpack2'] = precondSubList + + mueluParams = Teuchos.ParameterList() + #mueluParamsSub1 = Teuchos.ParameterList() + #mueluParamsSub1['PDE equations'] = 4 + #mueluParams['Matrix'] = mueluParamsSub1 + mueluParams['number of equations'] = 4 + mueluParams['max levels'] = 1 + mueluParams['multigrid algorithm'] = "unsmoothed" + mueluParams['smoother: type'] = "RELAXATION" + + mueluParamsSub2 = Teuchos.ParameterList() + + mueluParamsSub2['relaxation: type'] = "Symmetric Gauss-Seidel" + mueluParamsSub2['relaxation: sweeps'] = 4 + mueluParamsSub2['relaxation: damping factor'] = 1.25 + + mueluParams['coarse: type'] = "RELAXATION" + + mueluParamsSub3 = Teuchos.ParameterList() + + mueluParamsSub3['relaxation: type'] = "Symmetric Gauss-Seidel" + mueluParamsSub3['relaxation: sweeps'] = 4 + mueluParamsSub3['relaxation: damping factor'] = 1.25 + + mueluParams['smoother: params'] = mueluParamsSub2 + mueluParams['coarse: params'] = mueluParamsSub3 + + solverList = Teuchos.ParameterList() + solverList['type'] = "BlockGmres" + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 100 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 100 + solverList['ifpackParams'] = precondList + solverList['mueluParams'] = mueluParams + + solverList['Use preconditioner'] = True + + solverList['Maximum active set iteration'] = 10 + + solverList['Print Teuchos timers'] = True + #solverList['Write matrix and vectors'] = True + solverList['Write txt files'] = True + + geo_name = 'MIRROR_1_ASSEMBLY_5.msh' + mesh_name = 'MIRROR_1_ASSEMBLY_5.msh' + + import shlex + import subprocess + import os + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + #solverList["MueLu xml file name"] = file_dir + '/finest_level_prec_2.xml' + solverList["MueLu xml file name"] = file_dir + \ + '/nested_multigrid_2_lvls_old.xml' + #solverList["MueLu xml file name"] = file_dir + '/nested_multigrid_2_lvls_chebyshev_heat.xml' + #solverList["MueLu xml file name"] = file_dir + '/nested_multigrid_2_lvls_chebyshev.xml' + + if rank == 0: + command_line = 'gmsh -3 ' + file_dir + '/mesh/' + geo_name + \ + ' -o ' + work_dir + '/' + mesh_name + ' -part ' + str(siz) + print(command_line) + tmp = shlex.split(command_line) + fileout = open('gmsh.log', 'w') + p = subprocess.Popen(tmp, stdin=subprocess.PIPE, stdout=fileout, + stderr=fileout, env=os.environ, shell=False, close_fds=True) + retcode = p.wait() + for i in range(1, siz): + comm.send(1, dest=i, tag=11) + else: + data = comm.recv(source=0, tag=11) + + if siz == 1: + msh = gmsh.MeshLoader(mesh_name, work_dir).execute() + else: + msh = gmsh.MeshLoader(mesh_name, work_dir).myrank_execute(rank) + + pbl = m.Problem(msh, comm) + + ensemble_size = 1 + + E = 330000 * np.ones(ensemble_size) + nu = 0.36 * np.ones(ensemble_size) + k = 0.114 + d = 0.5E-05 + + E_rhodium = 379000 * np.ones(ensemble_size) + nu_rhodium = 0.26 * np.ones(ensemble_size) + k_rhodium = 0.150 + d_rhodium = 0.781E-05 + + E_WCu = 280000 * np.ones(ensemble_size) + nu_WCu = 0.26 * np.ones(ensemble_size) + k_WCu = 0.180 + d_WCu = 0.88E-05 + + E_SS = 180000 * np.ones(ensemble_size) + nu_SS = 0.26 * np.ones(ensemble_size) + k_SS = 0.020 + d_SS = 1.6E-05 + + E_CuCrZr = 130000 * np.ones(ensemble_size) + nu_CuCrZr = 0.26 * np.ones(ensemble_size) + k_CuCrZr = 0.280 + d_CuCrZr = 1.6E-05 + + E_I718 = 180000 * np.ones(ensemble_size) + nu_I718 = 0.26 * np.ones(ensemble_size) + k_I718 = 0.020 + d_I718 = 1.4E-05 + + m.Medium(pbl, "Mirror", "SS", E_rhodium, nu_rhodium, k_rhodium, d_rhodium) + m.Medium(pbl, "Substrate", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + + m.Medium(pbl, "Holder", "SS", E_SS, nu_SS, k_SS, d_SS) + m.Medium(pbl, "Holder 2", "SS", E_SS, nu_SS, k_SS, d_SS) + + m.Medium(pbl, "Pipe 1", "SS", E_SS, nu_SS, k_SS, d_SS) + m.Medium(pbl, "Pipe 2", "SS", E_SS, nu_SS, k_SS, d_SS) + m.Medium(pbl, "Pipe 3", "SS", E_SS, nu_SS, k_SS, d_SS) + m.Medium(pbl, "Pipe 4", "SS", E_SS, nu_SS, k_SS, d_SS) + + m.Medium(pbl, "Washer 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Shaft 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Bolt 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Bolt 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Bolt 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Pin 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Pin 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Pin 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Nut 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Spacer 1", "CuCrZr", E_CuCrZr, + nu_CuCrZr, k_CuCrZr, d_CuCrZr) + m.Medium(pbl, "Spacer 2", "CuCrZr", E_I718, nu_CuCrZr, k_CuCrZr, d_CuCrZr) + m.Medium(pbl, "Spacer 3", "CuCrZr", E_I718, nu_CuCrZr, k_CuCrZr, d_CuCrZr) + + m.Dirichlet(pbl, "Holder 2 Clamping", "Clamped", 1, + 0., 1, 0., 1, 0., 1, 70., ensemble_size) + + m.Dirichlet(pbl, "Holder to bolt 1", "Clamped", 0, + 0., 0, 0., 0, 0., 1, 140., ensemble_size) + m.Dirichlet(pbl, "Holder to bolt 2", "Clamped", 0, + 0., 0, 0., 0, 0., 1, 140., ensemble_size) + m.Dirichlet(pbl, "Holder to bolt 3", "Clamped", 0, + 0., 0, 0., 0, 0., 1, 140., ensemble_size) + + m.Dirichlet(pbl, "Bolt 1 to holder", "Clamped", 1, + 0., 1, 0., 1, 0., 1, 140., ensemble_size) + m.Dirichlet(pbl, "Bolt 2 to holder", "Clamped", 0, + 0., 0, 0., 0, 0., 1, 140., ensemble_size) + m.Dirichlet(pbl, "Bolt 3 to holder", "Clamped", 0, + 0., 0, 0., 0, 0., 1, 140., ensemble_size) + + m.Dirichlet(pbl, "Mirror surface", "Clamped", 0, 0., + 0, 0., 0, 0., 1, 210., ensemble_size) + + slv = m.IterativeSolver(pbl, args.k, solverList, 4, ensemble_size) + + if not args.nogui: + if rank == 0: + all_msh = gmsh.MeshLoader(mesh_name, work_dir).execute() + import katoptron.viewer as v + gui = v.MeshViewer(pbl, slv, all_msh) + gui.vmin = 0 + gui.vmax = 1 + gui.start() + else: + slv.start() + else: + slv.start() + + from fwk.testing import * + tests = CTests() + tests.add(CTest('mean(Tbottom)', 0, 0)) + tests.run() + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/broken/M1_assembly_fused_all.py b/katoptron/Juelich/broken/M1_assembly_fused_all.py new file mode 100644 index 0000000000000000000000000000000000000000..2fad06b14a9b264b8ad1e13bc8d22706adb429f6 --- /dev/null +++ b/katoptron/Juelich/broken/M1_assembly_fused_all.py @@ -0,0 +1,354 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + + from fwk.wutils import parseargs + args = parseargs() + + from PyTrilinos import Teuchos + import numpy as np + + mueluParams = Teuchos.ParameterList() + #mueluParamsSub1 = Teuchos.ParameterList() + #mueluParamsSub1['PDE equations'] = 4 + #mueluParams['Matrix'] = mueluParamsSub1 + mueluParams['number of equations'] = 4 + mueluParams['max levels'] = 5 + mueluParams['multigrid algorithm'] = "unsmoothed" + mueluParams['smoother: type'] = "RELAXATION" + mueluParams['coarse: max size'] = 3000 + + mueluParamsSub2 = Teuchos.ParameterList() + + mueluParamsSub2['relaxation: type'] = "Symmetric Gauss-Seidel" + mueluParamsSub2['relaxation: sweeps'] = 5 + mueluParamsSub2['relaxation: damping factor'] = 1.25 + + mueluParams['coarse: type'] = "Klu" + mueluParams['verbosity'] = "low" + + mueluParamsSub3 = Teuchos.ParameterList() + + mueluParamsSub3['relaxation: type'] = "Symmetric Gauss-Seidel" + mueluParamsSub3['relaxation: sweeps'] = 4 + mueluParamsSub3['relaxation: damping factor'] = 1.25 + + mueluParams['smoother: params'] = mueluParamsSub2 + #mueluParams['coarse: params'] = mueluParamsSub3 + + solverList = Teuchos.ParameterList() + solverList['type'] = "BlockGmres" + solverList['Convergence Tolerance'] = 10**(-7) + solverList['Maximum Iterations'] = 2000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 100 + solverList['mueluParams'] = mueluParams + + solverList['Use preconditioner'] = True + + solverList['Maximum active set iteration'] = 10 + + solverList['Print Teuchos timers'] = True + #solverList['Write matrix and vectors'] = True + solverList['Write txt files'] = True + + geo_name = 'MIRROR_1_ASSEMBLY_fused_all.msh' + mesh_name = 'MIRROR_1_ASSEMBLY_fused_all.msh' + + import shlex + import subprocess + import os + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + #solverList["MueLu xml file name"] = file_dir + '/finest_level_prec_2.xml' + solverList["MueLu xml file name"] = file_dir + \ + '/nested_multigrid_2_lvls_old.xml' + #solverList["MueLu xml file name"] = file_dir + '/nested_multigrid_2_lvls_chebyshev_heat.xml' + #solverList["MueLu xml file name"] = file_dir + '/nested_multigrid_2_lvls_chebyshev.xml' + + if rank == 0: + command_line = 'gmsh -3 ' + file_dir + '/mesh/' + geo_name + \ + ' -o ' + work_dir + '/' + mesh_name + ' -part ' + str(siz) + print(command_line) + tmp = shlex.split(command_line) + fileout = open('gmsh.log', 'w') + p = subprocess.Popen(tmp, stdin=subprocess.PIPE, stdout=fileout, + stderr=fileout, env=os.environ, shell=False, close_fds=True) + retcode = p.wait() + for i in range(1, siz): + comm.send(1, dest=i, tag=11) + else: + data = comm.recv(source=0, tag=11) + + if siz == 1: + msh = gmsh.MeshLoader(mesh_name, work_dir).execute() + else: + msh = gmsh.MeshLoader(mesh_name, work_dir).myrank_execute(rank) + + pbl = m.Problem(msh, comm) + + # Distance in the mesh are represented in meters + + ensemble_size = 1 + + # 379 000 MPa = 379 GPa = 379E9 Pa + E_rhodium = 379E9 * np.ones(ensemble_size) + nu_rhodium = 0.26 * np.ones(ensemble_size) + # 0.150 kW/(m K) = 150 W/(m K) + k_rhodium = 150 + d_rhodium = 0.781E-05 + + E_WCu = 280E9 * np.ones(ensemble_size) + nu_WCu = 0.26 * np.ones(ensemble_size) + k_WCu = 180 + d_WCu = 0.88E-05 + + E_SS = 180E9 * np.ones(ensemble_size) + nu_SS = 0.26 * np.ones(ensemble_size) + k_SS = 20 + d_SS = 1.6E-05 + + E_CuCrZr = 130E9 * np.ones(ensemble_size) + nu_CuCrZr = 0.26 * np.ones(ensemble_size) + k_CuCrZr = 280 + d_CuCrZr = 1.6E-05 + + E_I718 = 180E9 * np.ones(ensemble_size) + nu_I718 = 0.26 * np.ones(ensemble_size) + k_I718 = 20 + d_I718 = 1.4E-05 + + m.Medium(pbl, "Mirror", "rhodium", E_rhodium, + nu_rhodium, k_rhodium, d_rhodium) + m.Medium(pbl, "Substrate", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + + m.Medium(pbl, "Holder", "SS", E_SS, nu_SS, k_SS, d_SS) + + m.Medium(pbl, "Holder 2", "SS", E_SS, nu_SS, k_SS, d_SS) + + m.Medium(pbl, "Pipe 1", "SS", E_SS, nu_SS, k_SS, d_SS) + m.Medium(pbl, "Pipe 2", "SS", E_SS, nu_SS, k_SS, d_SS) + m.Medium(pbl, "Pipe 3", "SS", E_SS, nu_SS, k_SS, d_SS) + + m.Medium(pbl, "Washer 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Shaft 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Bolt 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Bolt 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Bolt 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Nut 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Spacer 1 part 1", "CuCrZr", + E_CuCrZr, nu_CuCrZr, k_CuCrZr, d_CuCrZr) + m.Medium(pbl, "Spacer 2 part 1", "CuCrZr", + E_CuCrZr, nu_CuCrZr, k_CuCrZr, d_CuCrZr) + m.Medium(pbl, "Spacer 3 part 1", "CuCrZr", + E_CuCrZr, nu_CuCrZr, k_CuCrZr, d_CuCrZr) + + m.Medium(pbl, "Spacer 1 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + m.Medium(pbl, "Spacer 2 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + m.Medium(pbl, "Spacer 3 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + + m.Dirichlet(pbl, "Holder x clamping", "Clamped", 1, + 0., 0, 0., 0, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder y-z clamping", "Clamped", 0, + 0., 1, 0., 1, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "Cooling channels", "Clamped", 0, + 0., 0, 0., 0, 0., 1, 70., ensemble_size) + + zero = np.zeros(ensemble_size) + hf = (70/0.0121) * np.ones(ensemble_size) # 70 W / (0.0121 m^2) + + m.Neumann(pbl, "Mirror surface", "heat fluxes", 0, + zero, 0, zero, 0, zero, 1, hf, ensemble_size) + + m.Source(pbl, "Mirror", "ihg", 70E6) + m.Source(pbl, "Substrate", "ihg", 2.45E6) + m.Source(pbl, "Holder", "ihg", 0.7E6) + m.Source(pbl, "Holder 2", "ihg", 0.7E6) + m.Source(pbl, "Pipe 1", "ihg", 0.7E6) + m.Source(pbl, "Pipe 2", "ihg", 0.7E6) + m.Source(pbl, "Pipe 3", "ihg", 0.7E6) + + m.Source(pbl, "Spacer 1 part 1", "ihg", 0.7E6) + m.Source(pbl, "Spacer 2 part 1", "ihg", 0.7E6) + m.Source(pbl, "Spacer 3 part 1", "ihg", 0.7E6) + + m.Source(pbl, "Spacer 1 part 2", "ihg", 2.45E6) + m.Source(pbl, "Spacer 2 part 2", "ihg", 2.45E6) + m.Source(pbl, "Spacer 3 part 2", "ihg", 2.45E6) + + m.Source(pbl, "Shaft 1", "ihg", 0.7E6) + m.Source(pbl, "Shaft 2", "ihg", 0.7E6) + m.Source(pbl, "Shaft 3", "ihg", 0.7E6) + + m.Source(pbl, "Bolt 1", "ihg", 0.7E6) + m.Source(pbl, "Bolt 2", "ihg", 0.7E6) + m.Source(pbl, "Bolt 3", "ihg", 0.7E6) + + m.Source(pbl, "Nut 1", "ihg", 0.7E6) + m.Source(pbl, "Nut 2", "ihg", 0.7E6) + m.Source(pbl, "Nut 3", "ihg", 0.7E6) + + m.Source(pbl, "Washer 1", "ihg", 0.7E6) + m.Source(pbl, "Washer 2", "ihg", 0.7E6) + m.Source(pbl, "Washer 3", "ihg", 0.7E6) + + slv = m.IterativeSolver(pbl, args.k, solverList, 4, ensemble_size) + + if not args.nogui: + if rank == 0: + all_msh = gmsh.MeshLoader(mesh_name, work_dir).execute() + import katoptron.viewer as v + gui = v.MeshViewer(pbl, slv, all_msh) + gui.vmin = 0 + gui.vmax = 1 + gui.start() + else: + slv.start() + else: + slv.start() + ''' + + ## Extract results + if rank == 0: + import katoptron.utilities as u + + tag_name = "Mirror surface" + name_sol = "x_mm.txt" + + DOFperNode = 4 + + if siz > 1: + x,y,z,tri,sol = u.extract_2D_all_rotated(msh2, tag_name, DOFperNode, ensemble_size, name_sol,[0,1]) + else: + x,y,z,tri,sol = u.extract_2D_all_rotated(msh, tag_name, DOFperNode, ensemble_size, name_sol,[0,1]) + + Zernike_coeff, Zernike_functions, theta, rho = u.compute_Zernike(x,y,z,tri,sol[:,2],10,np.array([-0.015,0.005])) + + colors = {0:(0,0.4470,0.7410), 1:(0.8500,0.3250,0.0980), 2:(0.9290,0.6940,0.1250), 3:(0.4940,0.1840,0.5560), 4:(0.4660,0.6740,0.1880), 5:(0.3010,0.7450,0.9330), 6:(0.6350,0.0780,0.1840), 7:(0,0.4470,0.7410)} + + import matplotlib.pyplot as plt + #plt.style.use('ggplot') + + plt_linewidth = 4.0 + + print max(z) + print min(z) + + print max(sol[:,2]) + print min(sol[:,2]) + + print Zernike_coeff + + print u.check_optical_tolerance(Zernike_coeff, Zernike_functions, sol[:,2],"m") + + + for which_dof in range(0,DOFperNode): + levels = np.linspace(min(sol[:,which_dof]), max(sol[:,which_dof]), 15) + # Velocity x-component + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('jet') + plt.tricontour(x, y, tri, sol[:,which_dof], levels, linestyles='-', + colors='black', linewidths=0.5) + axtri = plt.tricontourf(x, y, tri, sol[:,which_dof], levels) + #plt.triplot(x, y, tri) + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + + cb = fig.colorbar(axtri, orientation="horizontal") + if which_dof == 0: + cb.set_label('displacement along x [m]', rotation=0) + plt.savefig("ux.pdf", transparent=True, bbox_inches='tight', pad_inches=0.05) + elif which_dof == 1: + cb.set_label('displacement along y [m]', rotation=0) + plt.savefig("uy.pdf", transparent=True, bbox_inches='tight', pad_inches=0.05) + elif which_dof == 2: + cb.set_label('displacement along z [m]', rotation=0) + plt.savefig("uz.pdf", transparent=True, bbox_inches='tight', pad_inches=0.05) + elif which_dof == 3: + cb.set_label('Temperature [C]', rotation=0) + plt.savefig("T.pdf", transparent=True, bbox_inches='tight', pad_inches=0.05) + + #plt.minorticks_on() + #plt.gca().set_xticklabels([]) + #plt.gca().set_yticklabels([]) + #plt.gca().set_axis_off() + #plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0) + #plt.margins(0,0) + #plt.gca().xaxis.set_major_locator(plt.NullLocator()) + #plt.gca().yaxis.set_major_locator(plt.NullLocator()) + + zernike_fit = np.dot(Zernike_functions,Zernike_coeff) + + levels = np.linspace(min(zernike_fit), max(zernike_fit), 16) + # Velocity x-component + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('jet') + plt.tricontour(x, y, tri, zernike_fit, levels, linestyles='-', + colors='black', linewidths=0.5) + axtri = plt.tricontourf(x, y, tri, zernike_fit, levels) + #plt.triplot(x, y, tri) + plt.gca().set_aspect('equal') + + cb = fig.colorbar(axtri) + + levels = np.linspace(min(sol[:,2]-zernike_fit), max(sol[:,2]-zernike_fit), 16) + # Velocity x-component + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('jet') + plt.tricontour(x, y, tri, sol[:,2]-zernike_fit, levels, linestyles='-', + colors='black', linewidths=0.5) + axtri = plt.tricontourf(x, y, tri, sol[:,2]-zernike_fit, levels) + #plt.triplot(x, y, tri) + plt.gca().set_aspect('equal') + + cb = fig.colorbar(axtri) + + + + plt.show() + ''' + from fwk.testing import * + tests = CTests() + tests.add(CTest('mean(Tbottom)', 0, 0)) + tests.run() + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/broken/M1_assembly_fused_mm.py b/katoptron/Juelich/broken/M1_assembly_fused_mm.py new file mode 100644 index 0000000000000000000000000000000000000000..e0d0f5f2dfd52dbf528608935a0ec13060350764 --- /dev/null +++ b/katoptron/Juelich/broken/M1_assembly_fused_mm.py @@ -0,0 +1,355 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron as m +import tbox +import tbox.gmsh as gmsh + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + + from fwk.wutils import parseargs + args = parseargs() + + from PyTrilinos import Teuchos + import numpy as np + + mueluParams = Teuchos.ParameterList() + #mueluParamsSub1 = Teuchos.ParameterList() + #mueluParamsSub1['PDE equations'] = 4 + #mueluParams['Matrix'] = mueluParamsSub1 + mueluParams['number of equations'] = 4 + mueluParams['max levels'] = 1 + mueluParams['multigrid algorithm'] = "unsmoothed" + mueluParams['smoother: type'] = "RELAXATION" + mueluParams['coarse: max size'] = 3000 + + mueluParamsSub2 = Teuchos.ParameterList() + + mueluParamsSub2['relaxation: type'] = "Symmetric Gauss-Seidel" + mueluParamsSub2['relaxation: sweeps'] = 5 + mueluParamsSub2['relaxation: damping factor'] = 1.25 + + mueluParams['coarse: type'] = "Klu" + mueluParams['verbosity'] = "low" + + mueluParamsSub3 = Teuchos.ParameterList() + + mueluParamsSub3['relaxation: type'] = "Symmetric Gauss-Seidel" + mueluParamsSub3['relaxation: sweeps'] = 4 + mueluParamsSub3['relaxation: damping factor'] = 1.25 + + mueluParams['smoother: params'] = mueluParamsSub2 + #mueluParams['coarse: params'] = mueluParamsSub3 + + solverList = Teuchos.ParameterList() + solverList['type'] = "BlockGmres" + solverList['Convergence Tolerance'] = 10**(-7) + solverList['Maximum Iterations'] = 2000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + solverList['mueluParams'] = mueluParams + + solverList['Use preconditioner'] = True + + solverList['Maximum active set iteration'] = 10 + + solverList['Print Teuchos timers'] = True + #solverList['Write matrix and vectors'] = True + solverList['Write txt files'] = True + + geo_name = 'MIRROR_1_ASSEMBLY_fused_mm.msh' + mesh_name = 'MIRROR_1_ASSEMBLY_fused_mm.msh' + + import shlex + import subprocess + import os + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + #solverList["MueLu xml file name"] = file_dir + '/finest_level_prec_2.xml' + solverList["MueLu xml file name"] = file_dir + \ + '/nested_multigrid_2_lvls_old.xml' + #solverList["MueLu xml file name"] = file_dir + '/nested_multigrid_2_lvls_chebyshev_heat.xml' + #solverList["MueLu xml file name"] = file_dir + '/nested_multigrid_2_lvls_chebyshev.xml' + + if rank == 0: + command_line = 'gmsh -3 ' + file_dir + '/mesh/' + geo_name + \ + ' -o ' + work_dir + '/' + mesh_name + ' -part ' + str(siz) + print(command_line) + tmp = shlex.split(command_line) + fileout = open('gmsh.log', 'w') + p = subprocess.Popen(tmp, stdin=subprocess.PIPE, stdout=fileout, + stderr=fileout, env=os.environ, shell=False, close_fds=True) + retcode = p.wait() + for i in range(1, siz): + comm.send(1, dest=i, tag=11) + else: + data = comm.recv(source=0, tag=11) + + if siz == 1: + msh = gmsh.MeshLoader(mesh_name, work_dir).execute() + else: + msh = gmsh.MeshLoader(mesh_name, work_dir).myrank_execute(rank) + + pbl = m.Problem(msh, comm) + + # Distance in the mesh are represented in minimeters + + ensemble_size = 1 + + # 379 000 MPa = 379 GPa = 379E9 Pa + E_rhodium = 379000 * np.ones(ensemble_size) + nu_rhodium = 0.26 * np.ones(ensemble_size) + # 0.150 kW/(m K) = 150 W/(m K) = 0.150 W/(mm K) + k_rhodium = 0.150 + d_rhodium = 0.781E-05 + + E_WCu = 280000 * np.ones(ensemble_size) + nu_WCu = 0.298 * np.ones(ensemble_size) + k_WCu = 0.180 + d_WCu = 0.88E-05 + + E_SS = 200000 * np.ones(ensemble_size) + nu_SS = 0.3 * np.ones(ensemble_size) + k_SS = 0.0153 + d_SS = 1.57E-05 + + E_CuCrZr = 118000 * np.ones(ensemble_size) + nu_CuCrZr = 0.33 * np.ones(ensemble_size) + k_CuCrZr = 0.345 + d_CuCrZr = 1.8E-05 + + E_I718 = 183000 * np.ones(ensemble_size) + nu_I718 = 0.31 * np.ones(ensemble_size) + k_I718 = 0.0158 + d_I718 = 1.38E-05 + + T_ref = 22. + + m.Medium(pbl, "Mirror", "rhodium", E_rhodium, + nu_rhodium, k_rhodium, d_rhodium) + m.Medium(pbl, "Substrate", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + + m.Medium(pbl, "Holder", "SS", E_SS, nu_SS, k_SS, d_SS) + + m.Medium(pbl, "Washer 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Shaft 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Nut 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Spacer 1 part 1", "CuCrZr", + E_CuCrZr, nu_CuCrZr, k_CuCrZr, d_CuCrZr) + m.Medium(pbl, "Spacer 2 part 1", "CuCrZr", + E_CuCrZr, nu_CuCrZr, k_CuCrZr, d_CuCrZr) + m.Medium(pbl, "Spacer 3 part 1", "CuCrZr", + E_CuCrZr, nu_CuCrZr, k_CuCrZr, d_CuCrZr) + + m.Medium(pbl, "Spacer 1 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + m.Medium(pbl, "Spacer 2 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + m.Medium(pbl, "Spacer 3 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + + if 0: + m.Dirichlet(pbl, "Holder z clamping", "Clamped", 0, + 0., 0, 0., 1, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder x-y clamping", "Clamped", 1, + 0., 1, 0., 0, 0., 0, 0., ensemble_size) + else: + m.Dirichlet(pbl, "Holder z clamping points", "Clamped", + 0, 0., 0, 0., 1, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder y clamping points", "Clamped", + 0, 0., 1, 0., 0, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder x clamping points", "Clamped", + 1, 0., 0, 0., 0, 0., 0, 0., ensemble_size) + + m.Dirichlet(pbl, "Cooling channels", "Clamped", 0, 0., + 0, 0., 0, 0., 1, 70.-T_ref, ensemble_size) + + zero = np.zeros(ensemble_size) + hf = ((70 / (0.0121*1000**2))) * \ + np.ones(ensemble_size) # 70 W / (0.0121 m^2) + + m.Neumann(pbl, "Mirror surface", "heat fluxes", 0, + zero, 0, zero, 0, zero, 1, hf, ensemble_size) + + m.Source(pbl, "Mirror", "ihg", 70E-03) + m.Source(pbl, "Substrate", "ihg", 2.45E-03) + m.Source(pbl, "Holder", "ihg", 0.7E-03) + + m.Source(pbl, "Spacer 1 part 1", "ihg", 0.6E-03) + m.Source(pbl, "Spacer 2 part 1", "ihg", 0.6E-03) + m.Source(pbl, "Spacer 3 part 1", "ihg", 0.6E-03) + + m.Source(pbl, "Spacer 1 part 2", "ihg", 2.45E-03) + m.Source(pbl, "Spacer 2 part 2", "ihg", 2.45E-03) + m.Source(pbl, "Spacer 3 part 2", "ihg", 2.45E-03) + + m.Source(pbl, "Shaft 1", "ihg", 0.8E-03) + m.Source(pbl, "Shaft 2", "ihg", 0.8E-03) + m.Source(pbl, "Shaft 3", "ihg", 0.8E-03) + + m.Source(pbl, "Nut 1", "ihg", 0.8E-03) + m.Source(pbl, "Nut 2", "ihg", 0.8E-03) + m.Source(pbl, "Nut 3", "ihg", 0.8E-03) + + m.Source(pbl, "Washer 1", "ihg", 0.8E-03) + m.Source(pbl, "Washer 2", "ihg", 0.8E-03) + m.Source(pbl, "Washer 3", "ihg", 0.8E-03) + + slv = m.IterativeSolver(pbl, args.k, solverList, 4, ensemble_size) + + slv.start() + + ''' + ## Extract results + if rank == 0: + import katoptron.utilities as u + + tag_name = "Mirror surface" + name_sol = "x_mm.txt" + + DOFperNode = 4 + + if siz > 1: + x,y,z,tri,sol = u.extract_2D_all(msh2, tag_name, DOFperNode, ensemble_size, name_sol) + else: + x,y,z,tri,sol = u.extract_2D_all(msh, tag_name, DOFperNode, ensemble_size, name_sol) + + Zernike_coeff, Zernike_functions, theta, rho = u.compute_Zernike(x,y,z,tri,sol[:,2],10,np.array([-0.015,0.005])) + + colors = {0:(0,0.4470,0.7410), 1:(0.8500,0.3250,0.0980), 2:(0.9290,0.6940,0.1250), 3:(0.4940,0.1840,0.5560), 4:(0.4660,0.6740,0.1880), 5:(0.3010,0.7450,0.9330), 6:(0.6350,0.0780,0.1840), 7:(0,0.4470,0.7410)} + + import matplotlib.pyplot as plt + from matplotlib import cm + #plt.style.use('ggplot') + + plt_linewidth = 4.0 + + print max(z) + print min(z) + + print max(sol[:,2]) + print min(sol[:,2]) + + print Zernike_coeff + + print u.check_optical_tolerance(Zernike_coeff, Zernike_functions, sol[:,2],"m") + + + for which_dof in range(0,DOFperNode): + levels = np.linspace(min(sol[:,which_dof]), max(sol[:,which_dof]), 15) + # Velocity x-component + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('jet') + plt.tricontour(x, y, tri, sol[:,which_dof], levels, linestyles='-', + colors='black', linewidths=0.5) + axtri = plt.tricontourf(x, y, tri, sol[:,which_dof], levels, cmap='coolwarm') + #plt.triplot(x, y, tri) + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + + + + #coolwarm + + #cb = fig.colorbar(axtri, orientation="horizontal") + #x = np.linspace(0.0, 1.0, 15) + #rgb = cm.get_cmap('coolwarm')(x)[np.newaxis, :, :3] + #print rgb + + if which_dof == 0: + #cb.set_label('displacement along x [m]', rotation=0) + plt.savefig("ux.pdf", transparent=True, bbox_inches='tight', pad_inches=0.05) + print "ux" + print max(sol[:,which_dof]) + print min(sol[:,which_dof]) + elif which_dof == 1: + #cb.set_label('displacement along y [m]', rotation=0) + plt.savefig("uy.pdf", transparent=True, bbox_inches='tight', pad_inches=0.05) + print "uy" + print max(sol[:,which_dof]) + print min(sol[:,which_dof]) + elif which_dof == 2: + #cb.set_label('displacement along z [m]', rotation=0) + plt.savefig("uz.pdf", transparent=True, bbox_inches='tight', pad_inches=0.05) + print "uz" + print max(sol[:,which_dof]) + print min(sol[:,which_dof]) + elif which_dof == 3: + #cb.set_label('Temperature [C]', rotation=0) + plt.savefig("T.pdf", transparent=True, bbox_inches='tight', pad_inches=0.05) + print "T" + print max(sol[:,which_dof]) + print min(sol[:,which_dof]) + + #plt.minorticks_on() + #plt.gca().set_xticklabels([]) + #plt.gca().set_yticklabels([]) + #plt.gca().set_axis_off() + #plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0) + #plt.margins(0,0) + #plt.gca().xaxis.set_major_locator(plt.NullLocator()) + #plt.gca().yaxis.set_major_locator(plt.NullLocator()) + + zernike_fit = np.dot(Zernike_functions,Zernike_coeff) + + levels = np.linspace(min(zernike_fit), max(zernike_fit), 16) + # Velocity x-component + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('jet') + plt.tricontour(x, y, tri, zernike_fit, levels, linestyles='-', + colors='black', linewidths=0.5) + axtri = plt.tricontourf(x, y, tri, zernike_fit, levels) + #plt.triplot(x, y, tri) + plt.gca().set_aspect('equal') + + cb = fig.colorbar(axtri) + + levels = np.linspace(min(sol[:,2]-zernike_fit), max(sol[:,2]-zernike_fit), 16) + # Velocity x-component + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('jet') + plt.tricontour(x, y, tri, sol[:,2]-zernike_fit, levels, linestyles='-', + colors='black', linewidths=0.5) + axtri = plt.tricontourf(x, y, tri, sol[:,2]-zernike_fit, levels) + #plt.triplot(x, y, tri) + plt.gca().set_aspect('equal') + + cb = fig.colorbar(axtri) + + + + plt.show() + ''' + from fwk.testing import * + tests = CTests() + tests.add(CTest('mean(Tbottom)', 0, 0)) + tests.run() + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/broken/M1_assembly_mm.py b/katoptron/Juelich/broken/M1_assembly_mm.py new file mode 100644 index 0000000000000000000000000000000000000000..a73619acd8510624b4e1feb1408e205d991a61d4 --- /dev/null +++ b/katoptron/Juelich/broken/M1_assembly_mm.py @@ -0,0 +1,454 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron as m +import tbox +import tbox.gmsh as gmsh + + +def main(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print("info: MPI found") + except: + comm = None + rank = 0 + siz = 1 + name = "noname" + print("info: MPI not found => MPI disabled") + + from fwk.wutils import parseargs + args = parseargs() + + from PyTrilinos import Teuchos + import numpy as np + + mueluParams = Teuchos.ParameterList() + #mueluParamsSub1 = Teuchos.ParameterList() + #mueluParamsSub1['PDE equations'] = 4 + #mueluParams['Matrix'] = mueluParamsSub1 + mueluParams['number of equations'] = 4 + mueluParams['max levels'] = 5 + mueluParams['multigrid algorithm'] = "unsmoothed" + mueluParams['smoother: type'] = "RELAXATION" + mueluParams['coarse: max size'] = 3000 + + mueluParamsSub2 = Teuchos.ParameterList() + + mueluParamsSub2['relaxation: type'] = "Symmetric Gauss-Seidel" + mueluParamsSub2['relaxation: sweeps'] = 5 + mueluParamsSub2['relaxation: damping factor'] = 1.25 + + mueluParams['coarse: type'] = "Klu" + mueluParams['verbosity'] = "low" + + mueluParamsSub3 = Teuchos.ParameterList() + + mueluParamsSub3['relaxation: type'] = "Symmetric Gauss-Seidel" + mueluParamsSub3['relaxation: sweeps'] = 4 + mueluParamsSub3['relaxation: damping factor'] = 1.25 + + mueluParams['smoother: params'] = mueluParamsSub2 + #mueluParams['coarse: params'] = mueluParamsSub3 + + solverList = Teuchos.ParameterList() + solverList['type'] = "BlockGmres" + solverList['Convergence Tolerance'] = 10**(-7) + solverList['Maximum Iterations'] = 2000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 100 + solverList['mueluParams'] = mueluParams + + solverList['Use preconditioner'] = True + + solverList['Maximum active set iteration'] = 10 + + solverList['Print Teuchos timers'] = True + #solverList['Write matrix and vectors'] = True + solverList['Write txt files'] = True + + geo_name = 'MIRROR_1_ASSEMBLY_mm.msh' + mesh_name = 'MIRROR_1_ASSEMBLY_mm.msh' + + import shlex + import subprocess + import os + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + #solverList["MueLu xml file name"] = file_dir + '/finest_level_prec_2.xml' + #solverList["MueLu xml file name"] = file_dir + '/finest_level_prec_simple_heat.xml' + solverList["MueLu xml file name"] = file_dir + \ + '/nested_multigrid_2_lvls_chebyshev_heat.xml' + #solverList["MueLu xml file name"] = file_dir + '/nested_multigrid_2_lvls_old.xml' + #solverList["MueLu xml file name"] = file_dir + '/nested_multigrid_2_lvls_chebyshev_heat.xml' + #solverList["MueLu xml file name"] = file_dir + '/nested_multigrid_2_lvls_chebyshev.xml' + + if rank == 0: + command_line = 'gmsh -3 ' + file_dir + '/mesh/' + geo_name + \ + ' -o ' + work_dir + '/' + mesh_name + ' -part ' + str(siz) + print(command_line) + tmp = shlex.split(command_line) + fileout = open('gmsh.log', 'w') + p = subprocess.Popen(tmp, stdin=subprocess.PIPE, stdout=fileout, + stderr=fileout, env=os.environ, shell=False, close_fds=True) + retcode = p.wait() + for i in range(1, siz): + comm.send(1, dest=i, tag=11) + else: + data = comm.recv(source=0, tag=11) + + if siz == 1: + msh = gmsh.MeshLoader(mesh_name, work_dir).execute() + else: + msh = gmsh.MeshLoader(mesh_name, work_dir).myrank_execute(rank) + + pbl = m.Problem(msh, comm) + + # Distance in the mesh are represented in minimeters + + ensemble_size = 1 + + # 379 000 MPa = 379 GPa = 379E9 Pa + E_rhodium = 379000 * np.ones(ensemble_size) + nu_rhodium = 0.26 * np.ones(ensemble_size) + # 0.150 kW/(m K) = 150 W/(m K) = 0.150 W/(mm K) + k_rhodium = 0.150 + d_rhodium = 0.781E-05 + + E_WCu = 280000 * np.ones(ensemble_size) + nu_WCu = 0.26 * np.ones(ensemble_size) + k_WCu = 0.180 + d_WCu = 0.88E-05 + + E_SS = 180000 * np.ones(ensemble_size) + nu_SS = 0.26 * np.ones(ensemble_size) + k_SS = 0.020 + d_SS = 1.6E-05 + + E_CuCrZr = 130000 * np.ones(ensemble_size) + nu_CuCrZr = 0.26 * np.ones(ensemble_size) + k_CuCrZr = 0.280 + d_CuCrZr = 1.6E-05 + + E_I718 = 180000 * np.ones(ensemble_size) + nu_I718 = 0.26 * np.ones(ensemble_size) + k_I718 = 0.020 + d_I718 = 1.4E-05 + + T_ref = 22. + + m.Medium(pbl, "Mirror", "rhodium", E_rhodium, + nu_rhodium, k_rhodium, d_rhodium) + m.Medium(pbl, "Substrate", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + + m.Medium(pbl, "Holder", "SS", E_SS, nu_SS, k_SS, d_SS) + + m.Medium(pbl, "Washer 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Shaft 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Nut 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Spacer 1 part 1", "CuCrZr", + E_CuCrZr, nu_CuCrZr, k_CuCrZr, d_CuCrZr) + m.Medium(pbl, "Spacer 2 part 1", "CuCrZr", + E_CuCrZr, nu_CuCrZr, k_CuCrZr, d_CuCrZr) + m.Medium(pbl, "Spacer 3 part 1", "CuCrZr", + E_CuCrZr, nu_CuCrZr, k_CuCrZr, d_CuCrZr) + + m.Medium(pbl, "Spacer 1 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + m.Medium(pbl, "Spacer 2 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + m.Medium(pbl, "Spacer 3 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + + if 1: + m.Dirichlet(pbl, "Holder z clamping", "Clamped", 0, + 0., 0, 0., 1, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder x-y clamping", "Clamped", 1, + 0., 1, 0., 0, 0., 0, 0., ensemble_size) + else: + m.Dirichlet(pbl, "Holder z clamping points", "Clamped", + 0, 0., 0, 0., 1, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder y clamping points", "Clamped", + 0, 0., 1, 0., 0, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder x clamping points", "Clamped", + 1, 0., 0, 0., 0, 0., 0, 0., ensemble_size) + + m.Dirichlet(pbl, "Cooling channels", "Clamped", 0, 0., + 0, 0., 0, 0., 1, 70.-T_ref, ensemble_size) + + zero = np.zeros(ensemble_size) + hf = ((70 / (0.0121*1000**2))) * \ + np.ones(ensemble_size) # 70 W / (0.0121 m^2) + + m.Neumann(pbl, "Mirror surface", "heat fluxes", 0, + zero, 0, zero, 0, zero, 1, hf, ensemble_size) + + m.Source(pbl, "Mirror", "ihg", 70E-03) + m.Source(pbl, "Substrate", "ihg", 2.45E-03) + m.Source(pbl, "Holder", "ihg", 0.7E-03) + + m.Source(pbl, "Spacer 1 part 1", "ihg", 0.7E-03) + m.Source(pbl, "Spacer 2 part 1", "ihg", 0.7E-03) + m.Source(pbl, "Spacer 3 part 1", "ihg", 0.7E-03) + + m.Source(pbl, "Spacer 1 part 2", "ihg", 2.45E-03) + m.Source(pbl, "Spacer 2 part 2", "ihg", 2.45E-03) + m.Source(pbl, "Spacer 3 part 2", "ihg", 2.45E-03) + + m.Source(pbl, "Shaft 1", "ihg", 0.7E-03) + m.Source(pbl, "Shaft 2", "ihg", 0.7E-03) + m.Source(pbl, "Shaft 3", "ihg", 0.7E-03) + + m.Source(pbl, "Nut 1", "ihg", 0.7E-03) + m.Source(pbl, "Nut 2", "ihg", 0.7E-03) + m.Source(pbl, "Nut 3", "ihg", 0.7E-03) + + m.Source(pbl, "Washer 1", "ihg", 0.7E-03) + m.Source(pbl, "Washer 2", "ihg", 0.7E-03) + m.Source(pbl, "Washer 3", "ihg", 0.7E-03) + + norm1 = tbox.Vector3d(0, 0, -1) + norm2 = tbox.Vector3d(0, 0, 1) + + # Bolt 1 + cont = m.Contact(pbl, "Bolt 1 to holder", "contact", norm1, 0.) + cont.setNoUpdate() + cont.setSticking() + # cont.setInitialyOpen() + cont.setMaster(pbl, "Holder to bolt 1", norm1) + + cont = m.Contact(pbl, "Spacer 1 to holder", "contact", norm1, 0.) + cont.setNoUpdate() + cont.setSticking() + cont.setMaster(pbl, "Holder to spacer 1", norm1) + + cont = m.Contact(pbl, "Bolt 1 to washer 1", "contact", norm1, 0.) + cont.setNoUpdate() + cont.setSticking() + cont.setMaster(pbl, "Washer 1 to bolt 1", norm1) + + cont = m.Contact(pbl, "Spacer 1 to washer 1 part 1", "contact", norm1, 0.) + cont.setNoUpdate() + cont.setSticking() + cont.setMaster(pbl, "Washer 1 to spacer 1 part 1", norm1) + + cont = m.Contact(pbl, "Spacer 1 to washer 1 part 2", "contact", norm1, 0.) + cont.setNoUpdate() + cont.setSticking() + cont.setMaster(pbl, "Washer 1 to spacer 1 part 2", norm1) + + cont = m.Contact(pbl, "Spacer 1 to substrate", "contact", norm1, 0.) + cont.setNoUpdate() + cont.setSticking() + cont.setMaster(pbl, "Substrate to spacer 1", norm1) + + # Bolt 2 + cont = m.Contact(pbl, "Bolt 2 to holder", "contact", norm1, 0.) + cont.setNoUpdate() + cont.setSticking() + cont.setMaster(pbl, "Holder to bolt 2", norm1) + + cont = m.Contact(pbl, "Spacer 2 to holder", "contact", norm1, 0.) + cont.setNoUpdate() + cont.setSticking() + cont.setMaster(pbl, "Holder to spacer 2", norm1) + + cont = m.Contact(pbl, "Bolt 2 to washer 2", "contact", norm1, 0.) + cont.setNoUpdate() + cont.setSticking() + cont.setMaster(pbl, "Washer 2 to bolt 2", norm1) + + cont = m.Contact(pbl, "Spacer 2 to washer 2 part 1", "contact", norm1, 0.) + cont.setNoUpdate() + cont.setSticking() + cont.setMaster(pbl, "Washer 2 to spacer 2 part 1", norm1) + + cont = m.Contact(pbl, "Spacer 2 to washer 2 part 2", "contact", norm1, 0.) + cont.setNoUpdate() + cont.setSticking() + cont.setMaster(pbl, "Washer 2 to spacer 2 part 2", norm1) + + cont = m.Contact(pbl, "Spacer 2 to substrate", "contact", norm1, 0.) + cont.setNoUpdate() + cont.setSticking() + cont.setMaster(pbl, "Substrate to spacer 2", norm1) + + # Bolt 3 + cont = m.Contact(pbl, "Bolt 3 to holder", "contact", norm1, 0.) + cont.setNoUpdate() + cont.setSticking() + cont.setMaster(pbl, "Holder to bolt 3", norm1) + + cont = m.Contact(pbl, "Spacer 3 to holder", "contact", norm1, 0.) + cont.setNoUpdate() + cont.setSticking() + cont.setMaster(pbl, "Holder to spacer 3", norm1) + + cont = m.Contact(pbl, "Bolt 3 to washer 3", "contact", norm1, 0.) + cont.setNoUpdate() + cont.setSticking() + cont.setMaster(pbl, "Washer 3 to bolt 3", norm1) + + cont = m.Contact(pbl, "Spacer 3 to washer 3 part 1", "contact", norm1, 0.) + cont.setNoUpdate() + cont.setSticking() + cont.setMaster(pbl, "Washer 3 to spacer 3 part 1", norm1) + + cont = m.Contact(pbl, "Spacer 3 to washer 3 part 2", "contact", norm1, 0.) + cont.setNoUpdate() + cont.setSticking() + cont.setMaster(pbl, "Washer 3 to spacer 3 part 2", norm1) + + cont = m.Contact(pbl, "Spacer 3 to substrate", "contact", norm1, 0.) + cont.setNoUpdate() + cont.setSticking() + cont.setMaster(pbl, "Substrate to spacer 3", norm1) + + slv = m.IterativeSolver(pbl, args.k, solverList, 4, ensemble_size) + + slv.start() + + ''' + ## Extract results + if rank == 0: + import katoptron.utilities as u + + tag_name = "Mirror surface" + name_sol = "x_mm.txt" + + DOFperNode = 4 + + if siz > 1: + x,y,z,tri,sol = u.extract_2D_all(msh2, tag_name, DOFperNode, ensemble_size, name_sol) + else: + x,y,z,tri,sol = u.extract_2D_all(msh, tag_name, DOFperNode, ensemble_size, name_sol) + + Zernike_coeff, Zernike_functions, theta, rho = u.compute_Zernike(x,y,z,tri,sol[:,2],10,np.array([-0.015,0.005])) + + colors = {0:(0,0.4470,0.7410), 1:(0.8500,0.3250,0.0980), 2:(0.9290,0.6940,0.1250), 3:(0.4940,0.1840,0.5560), 4:(0.4660,0.6740,0.1880), 5:(0.3010,0.7450,0.9330), 6:(0.6350,0.0780,0.1840), 7:(0,0.4470,0.7410)} + + import matplotlib.pyplot as plt + from matplotlib import cm + #plt.style.use('ggplot') + + plt_linewidth = 4.0 + + print max(z) + print min(z) + + print max(sol[:,2]) + print min(sol[:,2]) + + print Zernike_coeff + + print u.check_optical_tolerance(Zernike_coeff, Zernike_functions, sol[:,2],"m") + + + for which_dof in range(0,DOFperNode): + levels = np.linspace(min(sol[:,which_dof]), max(sol[:,which_dof]), 15) + # Velocity x-component + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('jet') + plt.tricontour(x, y, tri, sol[:,which_dof], levels, linestyles='-', + colors='black', linewidths=0.5) + axtri = plt.tricontourf(x, y, tri, sol[:,which_dof], levels, cmap='coolwarm') + #plt.triplot(x, y, tri) + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + + + + #coolwarm + + #cb = fig.colorbar(axtri, orientation="horizontal") + #x = np.linspace(0.0, 1.0, 15) + #rgb = cm.get_cmap('coolwarm')(x)[np.newaxis, :, :3] + #print rgb + + if which_dof == 0: + #cb.set_label('displacement along x [m]', rotation=0) + plt.savefig("ux.pdf", transparent=True, bbox_inches='tight', pad_inches=0.05) + print "ux" + print max(sol[:,which_dof]) + print min(sol[:,which_dof]) + elif which_dof == 1: + #cb.set_label('displacement along y [m]', rotation=0) + plt.savefig("uy.pdf", transparent=True, bbox_inches='tight', pad_inches=0.05) + print "uy" + print max(sol[:,which_dof]) + print min(sol[:,which_dof]) + elif which_dof == 2: + #cb.set_label('displacement along z [m]', rotation=0) + plt.savefig("uz.pdf", transparent=True, bbox_inches='tight', pad_inches=0.05) + print "uz" + print max(sol[:,which_dof]) + print min(sol[:,which_dof]) + elif which_dof == 3: + #cb.set_label('Temperature [C]', rotation=0) + plt.savefig("T.pdf", transparent=True, bbox_inches='tight', pad_inches=0.05) + print "T" + print max(sol[:,which_dof]) + print min(sol[:,which_dof]) + + #plt.minorticks_on() + #plt.gca().set_xticklabels([]) + #plt.gca().set_yticklabels([]) + #plt.gca().set_axis_off() + #plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0) + #plt.margins(0,0) + #plt.gca().xaxis.set_major_locator(plt.NullLocator()) + #plt.gca().yaxis.set_major_locator(plt.NullLocator()) + + zernike_fit = np.dot(Zernike_functions,Zernike_coeff) + + levels = np.linspace(min(zernike_fit), max(zernike_fit), 16) + # Velocity x-component + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('jet') + plt.tricontour(x, y, tri, zernike_fit, levels, linestyles='-', + colors='black', linewidths=0.5) + axtri = plt.tricontourf(x, y, tri, zernike_fit, levels) + #plt.triplot(x, y, tri) + plt.gca().set_aspect('equal') + + cb = fig.colorbar(axtri) + + levels = np.linspace(min(sol[:,2]-zernike_fit), max(sol[:,2]-zernike_fit), 16) + # Velocity x-component + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('jet') + plt.tricontour(x, y, tri, sol[:,2]-zernike_fit, levels, linestyles='-', + colors='black', linewidths=0.5) + axtri = plt.tricontourf(x, y, tri, sol[:,2]-zernike_fit, levels) + #plt.triplot(x, y, tri) + plt.gca().set_aspect('equal') + + cb = fig.colorbar(axtri) + + + + plt.show() + ''' + from fwk.testing import * + tests = CTests() + tests.add(CTest('mean(Tbottom)', 0, 0)) + tests.run() + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/broken/M1_mirror_optic.py b/katoptron/Juelich/broken/M1_mirror_optic.py new file mode 100644 index 0000000000000000000000000000000000000000..7647f64d659cf96cc8169faf81029da46ca022d7 --- /dev/null +++ b/katoptron/Juelich/broken/M1_mirror_optic.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + +from fwk.testing import * +import matplotlib.tri as tri +from mpl_toolkits.mplot3d import Axes3D +from matplotlib import cm +import matplotlib.pyplot as plt +import katoptron.utilities as u +import numpy as np +import os +import matplotlib +matplotlib.use('TkAgg') # <-- THIS MAKES IT FAST! + + +def main(): + + file_dir = os.path.dirname(__file__) + + npzfile = np.load(file_dir+'/mirror_data_1A.npz') + x_1A = npzfile['x'] + y_1A = npzfile['y'] + z_1A = npzfile['z'] + sol_1A = npzfile['sol'] + tri_1A = npzfile['tri'] + dz_1A = npzfile['dz'] + + npzfile = np.load(file_dir+'/mirror_data_1B.npz') + x_1B = npzfile['x'] + y_1B = npzfile['y'] + z_1B = npzfile['z'] + sol_1B = npzfile['sol'] + tri_1B = npzfile['tri'] + dz_1B = npzfile['dz'] + + npzfile = np.load(file_dir+'/mirror_data_2A.npz') + x_2A = npzfile['x'] + y_2A = npzfile['y'] + z_2A = npzfile['z'] + sol_2A = npzfile['sol'] + tri_2A = npzfile['tri'] + dz_2A = npzfile['dz'] + + npzfile = np.load(file_dir+'/mirror_data_2B.npz') + x_2B = npzfile['x'] + y_2B = npzfile['y'] + z_2B = npzfile['z'] + sol_2B = npzfile['sol'] + tri_2B = npzfile['tri'] + dz_2B = npzfile['dz'] + + x = x_1A + y = y_1A + tri = tri_1A + dz = dz_1A + levels = np.linspace(min(dz), max(dz), 15) + # Velocity x-component + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('jet') + plt.tricontour(x, y, tri, dz, levels, linestyles='-', + colors='black', linewidths=0.5) + axtri = plt.tricontourf(x, y, tri, dz, levels, cmap='coolwarm') + plt.plot(0.0365, 0.017, 'ko') + plt.gca().set_aspect('equal') + + fig = plt.figure(figsize=(16, 9)) + ax = fig.gca(projection='3d', proj_type='ortho') + ax.plot_trisurf(x, y, dz, triangles=tri, cmap='coolwarm') + plt.show() + + optical_coefficients_1A, dz_residual_1A = u.compute_RBM_Curvature_Irreg( + x_1A, y_1A, z_1A, tri_1A, dz_1A, "m", np.array([0.0365, 0.017])) + + optical_coefficients_1B, dz_residual_1B = u.compute_RBM_Curvature_Irreg( + x_1B, y_1B, z_1B, tri_1B, dz_1B, "m", np.array([0.0365, 0.017])) + + optical_coefficients_2A, dz_residual_2A = u.compute_RBM_Curvature_Irreg( + x_2A, y_2A, z_2A, tri_2A, dz_2A, "m", np.array([0.0365, 0.017])) + + optical_coefficients_2B, dz_residual_2B = u.compute_RBM_Curvature_Irreg( + x_2B, y_2B, z_2B, tri_2B, dz_2B, "m", np.array([0.0365, 0.017])) + + print(optical_coefficients_1A) + print(optical_coefficients_1B) + print(optical_coefficients_2A) + print(optical_coefficients_2B) + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/broken/M1_optic_test.py b/katoptron/Juelich/broken/M1_optic_test.py new file mode 100644 index 0000000000000000000000000000000000000000..c48f6945c915e2931d4b8da270995df681f31476 --- /dev/null +++ b/katoptron/Juelich/broken/M1_optic_test.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +from fwk.testing import * +import matplotlib.tri as tri +from mpl_toolkits.mplot3d import Axes3D +from matplotlib import cm +import matplotlib.pyplot as plt +import katoptron.utilities as u +import numpy as np +import os +import matplotlib +matplotlib.use('TkAgg') # <-- THIS MAKES IT FAST! + + +def rigid_body_mode(dz, theta_x, theta_y, x, y, x_c, y_c): + dz_test = np.zeros(x.shape) + dz_test = -np.sin(theta_x)*(y-y_c)+np.cos(theta_x)*dz_test + dz_test = -np.sin(theta_y)*(x-x_c)+np.cos(theta_y)*dz_test + dz_test = dz_test + dz + return dz_test + + +def main(): + + file_dir = os.path.dirname(__file__) + + npzfile = np.load(file_dir+'/mirror_data.npz') + x = npzfile['x'] + y = npzfile['y'] + z = np.zeros(x.shape) + tri = npzfile['tri'] + dz = npzfile['dz'] + + dz_1 = 0 + dz_2 = 0.5/1000 + dz_3 = 0.87/1000 + dz_4 = (-2. / 1000) + + theta_x_1 = 0 + theta_x_2 = 0.0015 + theta_x_3 = -0.0005 + theta_x_4 = -0.0002 + + theta_y_1 = -0.2 + theta_y_2 = -0.0005 + theta_y_3 = 0.0015 + theta_y_4 = 0.0008 + + passed_1 = 0 + passed_2 = 1 + passed_3 = 1 + passed_4 = 0 + + dz_test_1 = rigid_body_mode(dz_1, theta_x_1, theta_y_1, x, y, 0.069, 0.04) + dz_test_2 = rigid_body_mode(dz_2, theta_x_2, theta_y_2, x, y, 0.069, 0.04) + dz_test_3 = rigid_body_mode(dz_3, theta_x_3, theta_y_3, x, y, 0.069, 0.04) + dz_test_4 = rigid_body_mode(dz_4, theta_x_4, theta_y_4, x, y, 0.069, 0.04) + + ''' + levels = np.linspace(min(dz), max(dz), 15) + # Velocity x-component + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('jet') + plt.tricontour(x, y, tri, dz, levels, linestyles='-', + colors='black', linewidths=0.5) + axtri = plt.tricontourf(x, y, tri, dz, levels, cmap='coolwarm') + plt.plot(0.069,0.04,'ko') + plt.gca().set_aspect('equal') + + fig = plt.figure(figsize=(16,9)) + ax = fig.gca(projection='3d', proj_type = 'ortho') + ax.plot_trisurf(x,y,dz_test_1,triangles=tri, cmap='coolwarm') + ''' + # plt.show() + + optical_coefficients_1, dz_residual_1 = u.compute_RBM_Curvature_Irreg( + x, y, z, tri, dz_test_1, "m", np.array([0.069, 0.04])) + + optical_coefficients_2, dz_residual_2 = u.compute_RBM_Curvature_Irreg( + x, y, z, tri, dz_test_2, "m", np.array([0.069, 0.04])) + + optical_coefficients_3, dz_residual_3 = u.compute_RBM_Curvature_Irreg( + x, y, z, tri, dz_test_3, "m", np.array([0.069, 0.04])) + + optical_coefficients_4, dz_residual_4 = u.compute_RBM_Curvature_Irreg( + x, y, z, tri, dz_test_4, "m", np.array([0.069, 0.04])) + + tests = CTests() + measured_dz_1 = optical_coefficients_1[0] + tests.add(CTest('piston mode test 1', measured_dz_1, dz_1*1000, 0.05)) + measured_dz_2 = optical_coefficients_2[0] + tests.add(CTest('piston mode test 2', measured_dz_2, dz_2*1000, 0.05)) + measured_dz_3 = optical_coefficients_3[0] + tests.add(CTest('piston mode test 3', measured_dz_3, dz_3*1000, 0.05)) + measured_dz_4 = optical_coefficients_4[0] + tests.add(CTest('piston mode test 4', measured_dz_4, dz_4*1000, 0.05)) + + measured_ry_1 = optical_coefficients_1[1] + tests.add(CTest('y rotation test 1', measured_ry_1, theta_y_1, 0.05)) + measured_ry_2 = optical_coefficients_2[1] + tests.add(CTest('y rotation test 2', measured_ry_2, theta_y_2, 0.05)) + measured_ry_3 = optical_coefficients_3[1] + tests.add(CTest('y rotation test 3', measured_ry_3, theta_y_3, 0.05)) + measured_ry_4 = optical_coefficients_4[1] + tests.add(CTest('y rotation test 4', measured_ry_4, theta_y_4, 0.05)) + + measured_rx_1 = optical_coefficients_1[2] + tests.add(CTest('x rotation test 1', measured_rx_1, theta_x_1, 0.05)) + measured_rx_2 = optical_coefficients_2[2] + tests.add(CTest('x rotation test 2', measured_rx_2, theta_x_2, 0.05)) + measured_rx_3 = optical_coefficients_3[2] + tests.add(CTest('x rotation test 3', measured_rx_3, theta_x_3, 0.05)) + measured_rx_4 = optical_coefficients_4[2] + tests.add(CTest('x rotation test 4', measured_rx_4, theta_x_4, 0.05)) + + measured_cur_1 = optical_coefficients_1[3] + tests.add(CTest('curvature change test 1', measured_cur_1, 0., 1e-10)) + measured_cur_2 = optical_coefficients_2[3] + tests.add(CTest('curvature change test 2', measured_cur_2, 0., 1e-10)) + measured_cur_3 = optical_coefficients_3[3] + tests.add(CTest('curvature change test 3', measured_cur_3, 0., 1e-10)) + measured_cur_4 = optical_coefficients_4[3] + tests.add(CTest('curvature change test 4', measured_cur_4, 0., 1e-10)) + + measured_irr_1 = optical_coefficients_1[4] + tests.add(CTest('irregularity change test 1', measured_irr_1, 0., 1e-10)) + measured_irr_2 = optical_coefficients_2[4] + tests.add(CTest('irregularity change test 2', measured_irr_2, 0., 1e-10)) + measured_irr_3 = optical_coefficients_3[4] + tests.add(CTest('irregularity change test 3', measured_irr_3, 0., 1e-10)) + measured_irr_4 = optical_coefficients_4[4] + tests.add(CTest('irregularity change test 4', measured_irr_4, 0., 1e-10)) + + blurred_1 = u.check_optical_tolerance(optical_coefficients_1, 'mm') + blurred_2 = u.check_optical_tolerance(optical_coefficients_2, 'mm') + blurred_3 = u.check_optical_tolerance(optical_coefficients_3, 'mm') + blurred_4 = u.check_optical_tolerance(optical_coefficients_4, 'mm') + tests.add(CTest('checl optical tolerance test 1', blurred_1, passed_1)) + tests.add(CTest('checl optical tolerance test 2', blurred_2, passed_2)) + tests.add(CTest('checl optical tolerance test 3', blurred_3, passed_3)) + tests.add(CTest('checl optical tolerance test 4', blurred_4, passed_4)) + + tests.run() + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/broken/M1_run.sh b/katoptron/Juelich/broken/M1_run.sh new file mode 100755 index 0000000000000000000000000000000000000000..89d651196102a6590ace719bceb8b4f523aa13dd --- /dev/null +++ b/katoptron/Juelich/broken/M1_run.sh @@ -0,0 +1,4 @@ +cd ~/dev/waves +python run.py -k 4 katoptron/tests/M1_assembly_fused_2.py +cd ~/dev/waves +python run.py -k 4 katoptron/tests/M1_assembly_fused_CuCrZr_holder_2.py diff --git a/katoptron/Juelich/mesh/contact_mirror_assembly_mm.brep b/katoptron/Juelich/mesh/contact_mirror_assembly_mm.brep new file mode 100644 index 0000000000000000000000000000000000000000..5aeecff113e27cecfe36b3867f40671d7d52acba --- /dev/null +++ b/katoptron/Juelich/mesh/contact_mirror_assembly_mm.brep @@ -0,0 +1,32832 @@ +DBRep_DrawableShape + +CASCADE Topology V1, (c) Matra-Datavision +Locations 134 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 10.4947449441 +1 +-0.740082577630804 -0.047330239837727 0.670848437938293 6446.85967694 +0.38796125092507 0.784756214763919 0.483367097732211 -116.15699979 +-0.549330361502074 0.617994766795245 -0.562422103180246 4458.66396847 +1 +-0.740082577636966 0.38796125093829 -0.549330361484436 0 +-0.38796125093829 0.420916340039045 0.819948475490096 0 +0.549330361484436 0.819948475490096 -0.160998917676011 0 +1 + 1 0 0 0 + 0 0.855402879757662 0.517963235473618 0 + 0 -0.517963235473618 0.855402879757662 0 +1 + 1 0 0 7294.05 + 0 1 0 -2346.64 + 0 0 1 -1780.06 +2 1 1 2 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 13 +2 9 1 2 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 50.5 + 0 1 0 5.5 + 0 0 1 -15.4 +2 11 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 50.5 + 0 1 0 5.5 + 0 0 1 -17 +2 13 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 50.5 + 0 -1 0 5.5 + 0 0 -1 8 +2 15 1 3 1 4 1 5 1 6 1 7 1 0 +2 5 1 6 1 7 1 0 +1 + 1 0 0 50.5 + 0 1 0 5.5 + 0 0 1 -18.5 +2 18 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 -22.5 + 0 1 0 -12.5 + 0 0 1 -15.4 +2 20 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 -22.5 + 0 1 0 -12.5 + 0 0 1 -17 +2 22 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 -22.5 + 0 -1 0 -12.5 + 0 0 -1 7 +2 24 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 -22.5 + 0 1 0 -12.5 + 0 0 1 -18.5 +2 26 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 -22.5 + 0 1 0 29.5 + 0 0 1 -15.4 +2 28 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 -22.5 + 0 1 0 29.5 + 0 0 1 -17 +2 30 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 -22.5 + 0 -1 0 29.5 + 0 0 -1 7 +2 32 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 -22.5 + 0 1 0 29.5 + 0 0 1 -18.5 +2 34 1 3 1 4 1 5 1 6 1 7 1 0 +1 + -1 -5.56237522861912e-66 3.08148802856e-33 50.5 +-9.49556810794e-66 1 -1.27639401577e-33 5.5 +-3.08148802856e-33 -1.27639401577e-33 -1 -28.5052550559 +2 36 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 -22.5 + 0 -1 3.08148791102e-33 -12.5 + 0 -3.08148791102e-33 -1 -28.5052550559 +2 38 1 4 1 5 1 6 1 7 1 0 +1 + -1 3.79822709830744e-65 6.16297582204e-33 -22.5 +-1.89911354915e-65 1 -9.24446373306e-33 29.5 +-6.16297582204e-33 -9.24446373306e-33 -1 -28.5052550559 +2 40 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 0 +1 + 1 -5.55111512313e-17 1.04404871488e-53 17.5 +5.55111512313e-17 1 -1.38662719945e-54 9.5 +-1.04404871488e-53 1.38662719945e-54 1 -28.5052550559 +2 42 1 43 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 0 +2 45 1 43 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 11.0410958904 + 0 -1 0 8.5 + 0 0 -1 5 +2 47 1 2 1 3 1 4 1 5 1 6 1 7 1 0 +2 4 -1 3 -1 2 -1 1 -1 0 +2 9 1 1 -1 0 +2 1 1 47 -1 0 +2 15 1 2 -1 1 -1 0 +2 1 1 2 1 15 -1 0 +2 4 -1 3 -1 15 -1 0 +2 32 1 2 -1 1 -1 0 +2 1 1 2 1 32 -1 0 +2 4 -1 3 -1 32 -1 0 +2 24 1 2 -1 1 -1 0 +2 1 1 2 1 24 -1 0 +2 4 -1 3 -1 24 -1 0 +2 1 1 2 1 22 -1 0 +2 1 1 2 1 30 -1 0 +2 1 1 2 1 13 -1 0 +2 4 -1 3 -1 2 -1 9 -1 0 +2 18 1 11 -1 0 +2 13 1 11 -1 0 +2 11 1 13 -1 0 +2 11 1 15 -1 0 +2 15 1 11 -1 0 +2 4 -1 3 -1 11 -1 0 +2 11 1 18 -1 0 +2 26 1 20 -1 0 +2 34 1 28 -1 0 +2 22 1 20 -1 0 +2 30 1 28 -1 0 +2 20 1 22 -1 0 +2 28 1 30 -1 0 +2 20 1 24 -1 0 +2 28 1 32 -1 0 +2 24 1 20 -1 0 +2 32 1 28 -1 0 +2 4 -1 3 -1 20 -1 0 +2 20 1 26 -1 0 +2 28 1 34 -1 0 +2 4 -1 3 -1 28 -1 0 +2 13 1 15 -1 0 +2 15 1 13 -1 0 +2 4 -1 3 -1 13 -1 0 +2 36 1 3 -1 15 -1 0 +2 15 1 3 1 36 -1 0 +2 38 1 3 -1 24 -1 0 +2 24 1 3 1 38 -1 0 +2 32 1 3 1 40 -1 0 +2 22 1 24 -1 0 +2 24 1 22 -1 0 +2 4 -1 3 -1 22 -1 0 +2 30 1 32 -1 0 +2 40 1 3 -1 32 -1 0 +2 32 1 30 -1 0 +2 4 -1 3 -1 30 -1 0 +2 18 1 13 -1 0 +2 13 1 18 -1 0 +2 4 -1 3 -1 18 -1 0 +2 26 1 22 -1 0 +2 34 1 30 -1 0 +2 22 1 26 -1 0 +2 4 -1 3 -1 26 -1 0 +2 30 1 34 -1 0 +2 4 -1 3 -1 34 -1 0 +2 45 1 42 -1 0 +2 4 -1 43 -1 42 -1 0 +2 7 -1 6 -1 5 -1 4 -1 43 -1 45 -1 0 +2 4 -1 43 -1 45 -1 0 +2 7 -1 6 -1 5 -1 4 -1 43 -1 42 -1 0 +2 1 1 2 1 3 1 4 1 0 +2 47 1 2 1 3 1 4 1 0 +2 15 1 3 1 4 1 0 +2 32 1 3 1 4 1 0 +2 24 1 3 1 4 1 0 +2 22 1 3 1 4 1 0 +2 30 1 3 1 4 1 0 +2 13 1 3 1 4 1 0 +2 9 1 2 1 3 1 4 1 0 +2 11 1 3 1 4 1 0 +2 18 1 3 1 4 1 0 +2 20 1 3 1 4 1 0 +2 26 1 3 1 4 1 0 +2 28 1 3 1 4 1 0 +2 34 1 3 1 4 1 0 +2 36 1 4 1 0 +2 38 1 4 1 0 +2 40 1 4 1 0 +2 42 1 43 1 4 1 0 +2 45 1 43 1 4 1 0 +Curve2ds 2691 +1 -0.5 14.5 1 0 +2 0 0 1 0 -0 1 8 +1 -0.50000000000097955 14.5 1 0 +2 0 0 1 0 -0 1 8 +7 0 0 5 6 2 -38 -32.5 -16.199999999999999 -32.5 5.5999999999999996 -32.5 27.399999999999999 -32.5 49.200000000000003 -32.5 71 -32.5 + 0 6 109 6 +7 0 0 5 6 2 0 13 21.800000000000001 13 43.600000000000001 13 65.400000000000006 13 87.200000000000003 13 109 13 + 0 6 109 6 +7 0 0 1 2 2 207.10225695400001 13 254.45195737099999 13 + 31.705691563799999 2 79.317202574099994 2 +7 0 0 5 9 3 71 -32.5 75.712388980399993 -32.5 80.4247779608 -31.574724587399999 84.8946105096 -29.723259324099999 92.867471954300001 -24.367471954300001 98.223259324099999 -16.3946105096 100.07472458700001 -11.9247779608 101 -7.2123889803800001 101 -2.5 + 31.705691563799999 6 55.511447068999999 3 79.317202574099994 6 +7 0 0 1 2 2 207.10225695400001 0 254.45195737099999 0 + 31.705691563799999 2 79.317202574099994 2 +7 0 0 5 6 2 101 -2.5 101 -0.5 101 1.5 101 3.5 101 5.5 101 7.5 + 0 6 10 6 +7 0 0 5 6 2 0 13.000000000000002 2 13.000000000000002 4 13.000000000000002 6 13.000000000000002 8 13.000000000000002 10 13.000000000000002 + 0 6 10 6 +7 0 0 1 2 2 107.808170647 13 132.87983823900001 13 + 0 2 25.507102763500001 2 +7 0 0 5 6 2 101 7.5 101 12.4776888283 99.654424864299997 17.455903910100002 96.956647293900005 21.945748933499999 93.192846020999994 25.470943655100001 88.797802672700001 27.807817643500002 + 0 6 25.507102763500001 6 +7 0 0 1 2 2 107.808170647 0 132.87983823900001 0 + 0 2 25.507102763500001 2 +7 0 0 5 6 2 88.797802672700001 27.807817643500002 83.672569027799995 30.532952712 78.547335382900002 33.258087780499999 73.422101737999995 35.983222848899999 68.296868093100002 38.708357917400001 63.171634448200003 41.433492985900003 + 0 6 29.023430645000001 6 +7 0 0 5 6 2 -1.4210854715202004e-14 13 5.8046861290153657 13 11.609372258030717 13 17.414058386999166 13 23.218744516014524 13 29.02343064502989 13 + 0 6 29.023430645000001 6 +7 0 0 1 2 2 95.599764641600004 13 137.70278531899999 13 + 31.519741269600001 2 73.710500387699994 2 +7 0 0 5 6 2 63.171634448200003 41.433492985900003 55.7500134434 45.379638872299999 47.845323711900001 48.4193390577 39.609065293299999 50.472868920099998 31.202585726199999 51.5 22.797080048600002 51.5 + 31.519741269600001 6 73.710500387699994 6 +7 0 0 1 2 2 95.599764641600004 0 137.70278531899999 0 + 31.519741269600001 2 73.710500387699994 2 +7 0 0 5 6 2 22.797080048600002 51.5 15.8376640389 51.5 8.8782480291599999 51.5 1.9188320194399999 51.5 -5.04058399028 51.5 -12 51.5 + 0 6 34.797080048600002 6 +7 0 0 5 6 2 0 13.000000000000002 6.9594160097000017 13.000000000000002 13.918832019440002 13.000000000000002 20.878248029160002 13.000000000000002 27.83766403888 13.000000000000002 34.797080048600002 13.000000000000002 + 0 6 34.797080048600002 6 +7 0 0 1 2 2 166.58674222600001 13 252.01584080399999 13 + 0 2 86.247384365800002 2 +7 0 0 5 9 3 -12 51.5 -20.4823001647 51.5 -28.9646003294 49.834504257299997 -37.0102989174 46.501866783399997 -51.361449517799997 36.861449517799997 -61.001866783399997 22.5102989174 -64.334504257299997 14.4646003294 -66 5.9823001646899998 -66 -2.5 + 0 6 43.123692182900001 3 86.247384365800002 6 +7 0 0 1 2 2 166.58674222600001 0 252.01584080399999 0 + 0 2 86.247384365800002 2 +7 0 0 5 6 2 -66 -2.5 -66 -2.8999999999999999 -66 -3.2999999999999998 -66 -3.7000000000000002 -66 -4.0999999999999996 -66 -4.5 + 0 6 2 6 +7 0 0 5 6 2 0 13 0.39999999999999991 13 0.79999999999999982 13 1.2000000000000002 13 1.5999999999999996 13 2 13 + 0 6 2 6 +7 0 0 1 2 2 98.517206313800003 13 143.29775463799999 13 + 0 2 46.336855176699999 2 +7 0 0 5 6 2 -66 -4.5 -66 -13.296459430100001 -62.555579886700002 -22.101126014199998 -55.601126014199998 -29.055579886699999 -46.796459430100001 -32.5 -38 -32.5 + 0 6 46.336855176699999 6 +7 0 0 1 2 2 98.517206313800003 0 143.29775463799999 0 + 0 2 46.336855176699999 2 +1 0 6.75 1 0 +2 -22.5 -12.5 1 0 -0 1 6 +1 0 6.75 1 0 +2 -22.5 -12.5 1 0 -0 1 6 +1 0 6.75 1 0 +2 -22.5 29.5 1 0 -0 1 6 +1 0 6.75 1 0 +2 -22.5 29.5 1 0 -0 1 6 +7 0 0 1 2 2 3.1415926535897931 7.25 6.2831853071795862 7.25 + 28.274333882299999 2 56.548667764599998 2 +7 0 0 5 15 5 2.0410958904099998 8.5 2.0410958904099998 7.0862833058800003 2.3186785141900002 5.6725666117699998 2.8741180931799999 4.3316168471100003 4.4808543041200002 1.9397584137099999 6.8727127375199997 0.333022202765 8.21366250218 -0.22241737621900001 11.041095890399999 -0.77758262378099996 13.868529278600001 -0.22241737621900001 15.2094790433 0.333022202765 17.601337476699999 1.9397584137099999 19.208073687599999 4.3316168471100003 19.7635132666 5.6725666117699998 20.041095890400001 7.0862833058800003 20.041095890400001 8.5 + 28.274333882299999 6 35.342917352900002 3 42.411500823499999 3 49.480084294000001 3 56.548667764599998 6 +7 0 0 1 2 2 0 7.25 3.1415926535897931 7.25 + 0 2 28.274333882299999 2 +7 0 0 5 15 5 20.041095890400001 8.5 20.041095890400001 9.9137166941199997 19.7635132666 11.327433388199999 19.208073687599999 12.668383152900001 17.601337476699999 15.0602415863 15.2094790433 16.666977797200001 13.868529278600001 17.222417376199999 11.041095890399999 17.777582623800001 8.21366250218 17.222417376199999 6.8727127375199997 16.666977797200001 4.4808543041200002 15.0602415863 2.8741180931799999 12.668383152900001 2.3186785141900002 11.327433388199999 2.0410958904099998 9.9137166941199997 2.0410958904099998 8.5 + 0 6 7.0685834705800001 3 14.1371669412 3 21.205750411699999 3 28.274333882299999 6 +1 -2.0707963267948974 -25 1 0 +2 0 -3.5 1 0 -0 1 3.5 +2 11.041095890399999 8.5 1 0 0 -1 3.5 +1 -2.0707963267932095 -25 1 0 +2 0 -3.5 1 0 -0 1 3.5 +2 11.041095890399999 8.5 1 0 0 -1 3.5 +7 0 0 1 2 2 0 8.25 3.1415957069804188 8.25 + 30.1592894745 2 50.265501999100003 2 +7 0 0 5 15 5 -49.958904109599999 2.1000000000000001 -48.953593483399999 2.1000000000000001 -47.948282857099997 2.2973924717199998 -46.994717754100002 2.6923724964 -45.293839593599998 3.8349426061599998 -44.151272080600002 5.5358225109700001 -43.756293511700001 6.4893882170200001 -43.361511637900001 8.5000100721899994 -43.756299650899997 10.5106307219 -44.151281131399998 11.464195222000001 -45.293853837900002 13.165071638100001 -46.994735487 14.3076365544 -47.948301796099997 14.7026136675 -48.953613025000003 14.9000030696 -49.958923651299997 14.9 + 30.1592894745 6 35.185842605600001 3 40.212395736799998 3 45.2389488679 3 50.265501999100003 6 +1 -50.958904109599999 2.1000000000000001 1 0 +1 1 -6 -1 0 +7 0 0 1 2 2 0 8.25 3.1415896021149314 8.25 + 10.053116020899999 2 30.1592894745 2 +7 0 0 5 15 5 -51.958923638999998 14.9 -52.964232311700002 14.899996932300001 -53.969540381999998 14.7026021601 -54.923102628400002 14.307620762199999 -56.623975198499998 13.1650497359 -57.766538439400001 11.4641719361 -58.161515472700003 10.5106078818 -58.556295814099997 8.4999899341099994 -58.161509337299997 6.4893731911000003 -57.766529394300001 5.5358103420699996 -56.623960963199998 3.8349360287300001 -54.923084906600003 2.6923701926999999 -53.969521454899997 2.2973917045599999 -52.964212782300002 2.1000000000000001 -51.958904109599999 2.1000000000000001 + 10.053116020899999 6 15.079659384299999 3 20.106202747699999 3 25.132746111100001 3 30.1592894745 6 +1 -50.958904109599999 14.9 1 0 +1 1.0000195293999994 -6 1 0 +1 -1.5707963267948966 -2.5 1 0 +2 28.235903341899999 -16.5 -1 0 0 1 8 +1 0.79136447795974119 0 0 1 +1 3.9210245024267794 0 0 -1 +1 -1.5707963267948966 2 1 0 +2 28.235903341899999 -16.5 -1 0 0 1 8 +1 0 0 0 1 +1 3.6391134366000024 2.5 0 1 +1 15.358848356199999 -8.5 -1 0 +1 16.516168422300002 4.5 1 0 +1 15.358848356199999 -8.5 -1 0 +1 16.516168422300002 0 1 0 +1 0 0.25 0 1 +1 29.393223408130002 2.25 0 -1 +1 -1.5707963267948966 2.5 1 0 +2 2.4817933703700001 -16.5 1 0 -0 1 7.9999999999999991 +1 -1.5707963267948966 -2 1 0 +2 2.4817933703700001 -16.5 1 0 -0 1 7.9999999999999991 +1 1.4120273699608157 0 0 1 +1 6.1244163503478974 0 0 1 +1 -1.5707963267948966 -2.5 1 0 +2 -47.7802294293 -13.5 -1 0 0 1 8 +1 1.5312603361509474 0 0 1 +1 3.1811286442328592 0 0 -1 +1 -1.5707963267948966 2 1 0 +2 -47.7802294293 -13.5 -1 0 0 1 8 +1 0 0 0 1 +1 9.459673181200003 2.5 0 1 +1 -4.7123889803846897 2.5 1 0 +2 -47.7802294293 30.5 1 0 -0 1 8 +1 0 0 0 1 +1 9.459673181200003 2.5 0 -1 +1 -4.7123889803846897 -2 1 0 +2 -47.7802294293 30.5 1 0 -0 1 8 +1 1.5312603361509458 0 0 1 +1 3.102056662946727 0 0 1 +1 -3.3003616104238742 2.5 1 0 +2 2.4817933703700001 33.5 1 0 -0 1 7.9999999999999991 +1 0 0 0 1 +1 0.15876895683168851 0 0 1 +1 -3.3003616104238742 -2 1 0 +2 2.4817933703700001 33.5 1 0 -0 1 7.9999999999999991 +1 1.4120273699629484 0 0 1 +1 36.06454610243 2.5 0 -1 +1 0 0.25 0 1 +1 2.0352636630000021 2.25 0 -1 +1 19.496434590100002 25.5 -1 0 +1 19.049904882699998 4.5 1 0 +1 19.496434590100002 25.5 -1 0 +1 19.049904882699998 0 1 0 +1 -4.7123889803846897 2.5 1 0 +2 36.511075809799998 33.5 1 0 -0 1 8 +1 -4.7123889803846897 -2 1 0 +2 36.511075809799998 33.5 1 0 -0 1 8 +1 0.46333110722450693 0 0 1 +1 2.034127434018774 0 0 1 +1 -0.50000000000097955 0.40000000000000036 1 0 +1 6.7831853071805659 11.313708498984751 -1 3.392591660226698e-15 +1 4.2123889803846888 -16.399999999999267 -1 0 +1 3.1415926535895737 0 0 1 +1 3.1415926535895737 0 0 1 +1 0.57079632679509318 -15.999999999999776 0 -1 +1 -2.0707963267946776 -27.199999999999999 1 0 +1 -2.0707963267946776 11.313708498984774 1 -3.3925916602279878e-15 +1 5.7831853071795853 11.200000000000344 -1 0 +1 3.1415926535907723 7.0949999999699997 0 1 +1 3.1415926535907723 7.0949999999699997 0 1 +1 0.57079632679396097 -23.094999999969858 0 -1 +1 -2.0707963267948974 -27.199999999999999 1 0 +1 -4.1651914291880141 11.313708498984795 1 -5.0888874903416267e-15 +1 5.7831853071795853 11.200000000000344 -1 0 +1 0 7.0949999999699997 0 1 +1 6.2831853071795862 7.0949999999699997 0 1 +1 4.2123889803846879 -16.399999999999267 -1 0 +1 3.7123889803836554 -23.094999999969225 0 -1 +1 -0.5 0.40000000000000036 1 0 +1 8.8775804095727082 11.313708498984756 -1 1.1308638867425798e-15 +1 10.495574287564274 -16.399999999999267 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.712388980384862 -15.999999999999716 0 -1 +1 12.066370614359172 11.200000000000344 -1 0 +1 5.7831853071795853 11.200000000000344 -1 0 +1 4.2123889803846888 -16.399999999999267 -1 0 +1 11.495574287563574 11.879393923933971 -1 3.3925916602285139e-15 +2 50.5 5.5 0 1 -1 0 8.4000000000000004 +2 0 -8 0 -1 -1 -0 8.4000000000000004 +1 3.1415926535902132 11.596551211457212 -1.7271017044604624e-14 1 +1 5.2359877559833317 11.596551211457205 -1.570092458600425e-14 1 +1 6.2831853071795862 11.596551211457202 0 1 +1 2.0943951023935279 11.596551211457209 -1.5700924586004351e-14 1 +1 7.3067840827778126 11.879393923933931 -1 1.8093822187881277e-14 +2 50.5 5.5 0 1 -1 0 8.4000000000000004 +2 0 -8 0 -1 -1 -0 8.4000000000000004 +1 0 -6.3499999999999996 1 0 +1 6.2831853071795862 8.4852813742385713 -1 0 +1 4.2123889803846888 -16.400000000000389 -1 0 +1 3.1415926535906706 0 0 1 +1 3.1415926535906706 0 0 1 +1 1.0707963267941221 -22.749999999999936 0 -1 +1 -2.0707963267957745 -26.199999999999999 1 0 +1 -2.0707963267957741 8.4852813742385802 1 -2.8271597168556695e-15 +1 6.2831853071795862 3.449999999999886 -1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 1.0707963267948248 -22.750000000000494 0 -1 +1 -2.0707963267948983 -26.199999999999999 1 0 +1 -4.1651914291880141 8.4852813742385624 1 1.1308638867425838e-15 +1 6.2831853071795862 3.449999999999886 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 4.2123889803846888 -16.400000000000389 -1 0 +1 4.2123889803847527 -22.750000000000469 0 -1 +1 0 -6.3499999999999996 1 0 +1 8.3775804095730013 8.4852813742385642 -1 1.696295830113876e-15 +1 10.495574287564274 -16.400000000000389 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 4.2123889803836843 -22.750000000000409 0 -1 +1 12.566370614359172 3.449999999999886 -1 0 +1 6.2831853071795862 3.449999999999886 -1 0 +1 4.2123889803846888 -16.400000000000389 -1 0 +1 8.3775804095730013 9.0509667991877123 -1 2.0355549961366507e-14 +2 -22.5 29.5 1 0 -0 1 6.3999999999999986 +2 0 -6 1 0 0 -1 6.4000000000000004 +1 2.0943951023934151 8.7681240867131933 -7.8504622934189397e-16 1 +1 6.2831853071795862 8.7681240867131898 0 1 +1 5.2359877559832082 8.768124086713188 0 1 +1 3.1415926535897931 8.7681240867131898 0 1 +1 6.2831853071795862 9.0509667991878082 -1 0 +2 -22.5 29.5 1 0 -0 1 6.3999999999999986 +2 0 -6 1 0 0 -1 6.4000000000000004 +1 0 -6.3499999999999996 1 0 +1 6.2831853071795862 8.4852813742385713 -1 -1.1308638867425773e-15 +1 4.2123889803846888 -16.400000000000375 -1 0 +1 1.0707963267940042 -22.749999999999428 0 -1 +1 6.2831853071795862 3.4500000000003976 -1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 1.0707963267948231 -22.750000000000487 0 -1 +1 6.2831853071795862 3.4500000000003976 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 4.2123889803846888 -16.400000000000375 -1 0 +1 4.2123889803847545 -22.750000000000462 0 -1 +1 0 -6.3499999999999996 1 0 +1 8.3775804095730066 8.4852813742385642 -1 1.1308638867425806e-15 +1 10.495574287564274 -16.400000000000375 -1 0 +1 4.2123889803838024 -22.749999999999897 0 -1 +1 12.566370614359172 3.4500000000003976 -1 0 +1 6.2831853071795862 3.4500000000003976 -1 0 +1 4.2123889803846888 -16.400000000000375 -1 0 +1 8.3775804095730066 9.0509667991876839 -1 2.6009869395079353e-14 +2 -22.5 -12.5 1 0 -0 1 6.3999999999999986 +2 0 -6 1 0 0 -1 6.4000000000000004 +1 2.0943951023934102 8.7681240867131915 1.570092458683783e-15 1 +1 6.2831853071795862 8.7681240867131898 0 1 +1 5.2359877559832118 8.7681240867131862 -1.5700924586837781e-15 1 +1 3.1415926535897745 8.7681240867131862 -7.8504622934188904e-16 1 +1 10.995574287564276 9.0509667991878171 -1 -1.6962958301138657e-15 +2 -22.5 -12.5 0 1 -1 0 6.4000000000000004 +2 0 -6 0 -1 -1 -0 6.4000000000000004 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -2 1 0 +2 -22.5 -12.5 1 0 -0 1 17.300000000000001 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 -2.2999999999999998 1 0 +1 0 24.465894629054546 1 0 +1 0 -2 1 0 +2 -22.5 -12.5 1 0 -0 1 17.300000000000001 +1 0 2.5 1 0 +2 -22.5 -12.5 1 0 -0 1 17.300000000000001 +1 0 -2 1 0 +2 -22.5 -12.5 1 0 -0 1 17.300000000000001 +1 0 -2.2999999999999998 1 0 +1 -2.0943951023933796 24.465894629054539 1 1.1308638867426094e-15 +1 0 24.183051916579927 1 0 +2 -22.5 -12.5 1 0 -0 1 17.100000000000001 +1 -2.0943951023933796 24.183051916579924 1 0 +2 -22.5 -12.5 1 0 -0 1 17.100000000000001 +1 0 6 1 0 +2 0 0 1 0 -0 1 17 +2 -22.5 -12.5 1 0 -0 1 17 +2 -22.5 29.5 1 0 -0 1 17 +1 0 6 1 0 +2 0 0 1 0 -0 1 17 +2 -22.5 -12.5 1 0 -0 1 17 +2 -22.5 29.5 1 0 -0 1 17 +1 -2.070796326794885 11.030865786510041 1 2.7140733281822116e-14 +2 0 -6 1 0 -0 1 7.7999999999999998 +2 -22.5 -12.5 1 0 0 -1 7.8000000000000007 +2 -22.5 29.5 1 0 0 -1 7.8000000000000007 +1 -4.1651914291880141 11.030865786510647 1 -7.4637016525010553e-14 +2 0 -6 1 0 -0 1 7.7999999999999998 +2 -22.5 -12.5 1 0 0 -1 7.8000000000000007 +2 -22.5 29.5 1 0 0 -1 7.8000000000000007 +1 0 6 1 0 +2 0 0 1 0 -0 1 8 +2 -22.5 -12.5 1 0 -0 1 8 +2 -22.5 29.5 1 0 -0 1 8 +1 0 6 1 0 +2 0 0 1 0 -0 1 8 +2 -22.5 -12.5 1 0 -0 1 8 +2 -22.5 29.5 1 0 -0 1 8 +1 1.047197551196414 24.324473272817237 -1.5700924586837781e-15 1 +1 3.1415926535898198 24.324473272817237 0 1 +1 4.1887902047861356 24.324473272817233 3.1401849173675167e-15 1 +1 0 24.324473272817237 0 1 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 0 -2 1 0 +2 -22.5 29.5 1 0 -0 1 17.300000000000001 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -2.2999999999999998 1 0 +1 -2.0943951023933796 24.465894629054546 1 0 +1 0 -2 1 0 +2 -22.5 29.5 1 0 -0 1 17.300000000000001 +1 -1.6653345369377348e-16 2.5 1 0 +2 -22.5 29.5 1 0 -0 1 17.300000000000001 +1 0 -2 1 0 +2 -22.5 29.5 1 0 -0 1 17.300000000000001 +1 0 -2.2999999999999998 1 0 +1 0 24.465894629054546 1 0 +1 -2.0943951023933796 24.183051916579927 1 0 +2 -22.5 29.5 1 0 -0 1 17.100000000000001 +1 0 24.183051916579927 1 0 +2 -22.5 29.5 1 0 -0 1 17.100000000000001 +1 0 24.324473272817237 0 1 +1 4.1887902047861365 24.324473272817237 3.1401849173675562e-15 1 +1 3.1415926535898109 24.324473272817237 0 1 +1 1.0471975511964138 24.324473272817237 -2.355138688025697e-15 1 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 0 2.5 1 0 +2 50.5 5.5 1 0 -0 1 23.299999999999997 +1 0 -2 1 0 +2 50.5 5.5 1 0 -0 1 23.299999999999997 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -2.2999999999999998 1 0 +1 -2.094395102393424 32.951176003293114 1 0 +1 0 -2 1 0 +2 50.5 5.5 1 0 -0 1 23.299999999999997 +1 0 2.5 1 0 +2 50.5 5.5 1 0 -0 1 23.299999999999997 +1 0 -2.2999999999999998 1 0 +1 0 32.951176003293114 1 0 +1 -2.0943951023934235 32.668333290818495 1 0 +2 50.5 5.5 1 0 -0 1 23.099999999999994 +1 0 32.668333290818495 1 0 +2 50.5 5.5 1 0 -0 1 23.099999999999994 +1 0 6 1 0 +2 0 0 1 0 -0 1 23 +2 50.5 5.5 1 0 -0 1 23 +1 0 6 1 0 +2 0 0 1 0 -0 1 23 +2 50.5 5.5 1 0 -0 1 23 +1 -2.0707963267945773 13.859292911256107 1 6.1632081827477094e-14 +2 4.5562353437399997e-16 -7.9999999999999991 1 0 -0 1 9.8000000000000007 +2 50.5 5.4999999999999991 1 0 0 -1 9.7999999999999972 +1 -4.1651914291880132 13.859292911256553 1 -3.2795052715534944e-14 +2 4.5562353437399997e-16 -7.9999999999999991 1 0 -0 1 9.8000000000000007 +2 50.5 5.4999999999999991 1 0 0 -1 9.7999999999999972 +1 0 6 1 0 +2 0 0 1 0 -0 1 10 +2 50.5 5.5 1 0 -0 1 10 +1 0 6 1 0 +2 0 0 1 0 -0 1 10 +2 50.5 5.5 1 0 -0 1 10 +1 0 32.809754647055804 0 1 +1 4.18879020478618 32.809754647055811 0 1 +1 3.1415926535897127 32.809754647055804 3.1401849173675562e-15 1 +1 1.0471975511963696 32.809754647055804 1.5700924586837386e-15 1 +1 1 4.0999999999999996 1 0 +1 111.56272774030001 0.565685424949256 1 4.1419027761054405e-19 +1 3.1415896021149314 3.2000000000000002 0 -1 +1 2 -0.94999999999999996 -0 1 +1 0 3.2000000000000002 0 -1 +1 0 -0.94999999999999996 -0 1 +1 0 0 0 1 +1 0 2.25 0 -1 +1 -1.5707993782636465 -1.8499999999999996 1 0 +1 6.2831868329170169 9.0509667991878118 -1 -5.6543249258303613e-16 +1 0.99999999389999772 4.0999999999999996 1 0 +1 32.058380293400006 0.56568542494923857 1 0 +1 3.1415957069804188 3.2000000000000002 0 -1 +1 1.9999999877000008 -0.94999999999999996 0 1 +1 -4.7123889803846897 -1.8499999999999996 1 0 +1 9.4247794874624873 9.0509667991878082 -1 0 +1 4.7123875444024508 9.3338095116822739 -3.1731091752987212e-07 -0.99999999999994971 +1 31.058380299500008 0.28284271247462056 0 1 +1 -11.2067401539 15.300000000000001 1 0 +1 71.810563784600006 0 1 0 +1 1.5707948899029507 9.3338095116822952 -3.1751076831857049e-07 -0.9999999999999496 +1 33.058380287200009 0.28284271247462056 0 1 +1 4.7123905070777985 9.3338095116624249 -4.7102773760513198e-15 1 +1 110.56272774030001 0.28284271247463666 -1.2403316233345993e-14 -1 +1 7.8539831606675907 9.6166522241369812 -1 1.3570354227396789e-14 +2 -49.958904109599999 8.5 0 1 -1 0 6.8000000000000007 +1 -11.2067401539 1.7 -1 -2.2263035843300001e-16 +1 71.810563784599992 1.1304665702550789e-14 1 -7.3955709864469857e-32 +1 1.5707978525323272 9.3338095116624284 7.8504622934188657e-16 -1 +1 112.56272774030001 0.28284271247463683 -1.5742343614596589e-16 1 +1 4.7123905061221203 9.616652224137006 -1 2.6009894658834894e-14 +2 -51.958904109599999 8.5 0 1 -1 0 6.8000000000000007 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -1.8499999999999996 1 0 +1 8.3775804095730013 12.727922061357852 -1 1.1308638867425838e-15 +1 0 -1.8499999999999996 1 0 +1 6.2831853071795862 12.727922061357855 -1 0 +1 10.995574287564276 13.293607486307094 -1 0 +2 11.041095890399999 8.5 0 1 -1 0 9.3999999999999986 +1 3.1415926535898113 13.010764773825402 -1.5700924586837731e-15 1 +1 5.2359877559832082 13.010764773825404 -1.5700924586837731e-15 1 +1 6.2831853071795862 13.010764773832474 0 1 +1 2.0943951023934151 13.010764773832477 2.355138688025682e-15 1 +1 8.3775804095730013 13.293607486307163 -1 -1.4701230527653588e-14 +2 11.041095890399999 8.5 1 0 -0 1 9.4000000000000004 +1 -52.084386624700002 -5.5 -1 0 +1 13.763830376600005 4.5 1 0 +1 -52.084386624700002 -5.5 -1 0 +1 13.763830376600005 0 1 0 +1 1.0194793576626502 0 0 1 +1 18.067987571900005 2.25 0 -1 +1 -3.6929096227220408 -2.25 1 0 +2 -56.388543820000002 -2.5 1 0 -0 1 3 +1 -3.6929096227220408 2.25 1 0 +2 -56.388543820000002 -2.5 1 0 -0 1 3 +1 0 0 0 1 +1 1.1741435545438652 0 0 1 +1 1.0194793576626482 0 0 1 +1 18.067987571900005 2.25 0 1 +1 -52.084386624700002 22.5 -1 0 +1 13.763830376600005 0 1 0 +1 -52.084386624700002 22.5 -1 0 +1 13.763830376600005 4.5 1 0 +1 -2.5187660681778201 -2.25 1 0 +2 -38.5 8.5 1 0 -0 1 24 +1 -2.5187660681778201 2.25 1 0 +2 -38.5 8.5 1 0 -0 1 24 +1 0.071509616281146673 0 0 1 +1 0 0 0 -1 +1 2.590275684457545 2.25 -1 0 +2 -56.388543820000002 19.5 1 0 -0 1 3 +1 -0.55131696912372863 -2.25 1 0 +2 -56.388543820000002 19.5 -1 0 0 1 3 +1 207.10225695400001 6.9000000000000004 0 1 +1 109 6.9000000000000004 0 1 +1 143.29775463799999 6.9000000000000004 0 1 +1 0 6.9000000000000004 0 1 +1 54.5 0.79999999999999982 1 0 +1 118.101209582 1.1313708498984769 1 0 +1 254.45195737099999 6.5 0 1 +1 -1.0573556046300002e-30 6.5000000000000009 -1.6267009302e-31 1 +7 0 0 1 2 2 207.10225695400001 0.80000000000000004 254.45195737099999 0.80000000000000004 + 109 2 156.12388980399999 2 +7 0 0 1 2 2 243.59478752199996 1.1313708498999939 309.35350971339039 1.1313770879898555 + 109 2 156.12388980399999 2 +1 107.808170647 6.9000000000000004 0 1 +1 10 6.9000000000000012 -1.6267009302e-31 1 +1 5 0.80000000000000138 1 1.1940564118011782e-31 +1 132.87983823900001 6.5 0 1 +1 -2.2156089166073466e-16 6.5 -2.6794007744629963e-24 1 +7 0 0 1 2 2 107.808170647 0.80000000000000004 132.87983823900001 0.80000000000000004 + 166.12388980399999 2 191.01233394499999 2 +7 0 0 1 2 2 62.094959105999997 1.1313708499000001 96.684515910148349 1.1313733782654261 + 166.12388980399999 2 191.01233394499999 2 +1 95.599764641600004 6.9000000000000004 0 1 +1 29.023430645029901 6.9000000000000004 4.4023993482469405e-17 1 +1 14.511715322470803 0.80000000000099958 1 2.6794007744629963e-24 +1 137.70278531899999 6.5 0 1 +1 0 6.5000000000000009 0 1 +7 0 0 1 2 2 95.599764641600004 0.80000000000000004 137.70278531899999 0.80000000000000004 + 220.03576459000001 2 262.06329297799999 2 +7 0 0 1 2 2 120.58639119999999 1.1313708498999999 179.74754216553339 1.131376787613714 + 220.03576459000001 2 262.06329297799999 2 +1 166.58674222600001 6.9000000000000004 0 1 +1 34.797080048600002 6.9000000000000012 0 1 +1 17.398540024300001 0.80000000000000138 1 0 +1 130.15324706870001 1.1313708498984729 1 0 +1 252.01584080399999 6.5 0 1 +1 0 6.5000000000000009 0 1 +7 0 0 1 2 2 166.58674222600001 0.80000000000000004 252.01584080399999 0.80000000000000004 + 296.86037302699998 2 381.68337467399999 2 +7 0 0 1 2 2 206.34732287700001 1.1313708499000001 325.41616112837863 1.1313707294091384 + 296.86037302699998 2 381.68337467399999 2 +1 98.517206313800003 6.9000000000000004 0 1 +1 2 6.9000000000000012 0 1 +1 1 0.80000000000000071 1 0 +7 0 0 1 2 2 98.517206313800003 0.80000000000000004 143.29775463799999 0.80000000000000004 + 383.68337467399999 2 427.66567182400001 2 +7 0 0 1 2 2 103.76581805399999 1.1313708499000001 165.07828876436528 1.1313705510753325 + 383.68337467399999 2 427.66567182400001 2 +7 0 0 1 2 2 103.76581805399999 3.0224279829703162e-15 165.07829155293481 1.3399276483031418e-11 + 103.76581805399999 2 165.07828899200001 2 +7 0 0 5 15 5 -65.200000000000003 -4.5 -65.200000000000003 -7.3961324085399998 -64.815683064799998 -10.292565314899999 -64.044701936199999 -13.1202251169 -61.767762986000001 -18.502156188099999 -58.162061913499997 -23.101311403499999 -56.061385811000001 -25.147230317799998 -51.7602007208 -28.339419764199999 -46.831052239900004 -30.3981516644 -44.496038364599997 -31.080147596500002 -41.768787502400002 -31.555521804400001 -39.019917637299997 -31.684083704100001 -38.678137464199999 -31.6947756669 -38.338923938100002 -31.700003949900001 -38.000003569900002 -31.7000003729 + 103.76581805399999 6 124.547002021 3 145.33505857899999 3 162.64698145599999 3 165.07828899200001 6 +1 -65.200000000000003 -3.5 0 -1 +1 0 9.7910712518795318e-16 1 -3.0087941894766422e-18 +7 0 0 5 15 5 -12 50.700000000000003 -17.395146434200001 50.700000000000003 -22.790272716 50.016080707500002 -28.0703760954 48.647586647799997 -38.167235070799997 44.603325626500002 -46.935695196499999 38.167852959100003 -50.887142559099999 34.407592682999997 -58.071200711000003 25.572774405099999 -62.709492242700001 15.153781134600001 -64.358373071900004 9.4059114346899992 -65.191238028499995 3.4851502435200001 -65.199969163700004 -2.4372544982000002 -65.199989732399999 -2.4581681825900001 -65.200000056600004 -2.4790835333599999 -65.2000001567 -2.5000012219399999 + 206.34732287700001 6 244.784677386 3 283.22234807799998 3 325.26716929499997 3 325.41616118000002 6 +1 5.3985400242999999 50.700000000000003 -1 0 +1 130.15324706870001 0 1 0 +1 0 4.7602116774627328e-15 1 -2.6482762356956271e-17 +7 0 0 5 9 3 62.796057198 40.727134911599997 55.583984463199997 44.5618620065 47.911829203899998 47.532368133200002 39.920285127100001 49.564612909099999 31.602084407900001 50.640506765600001 23.274783774399999 50.698883892399998 23.115519849199998 50.699624028199999 22.956266601100001 50.699990847400002 22.797018728600001 50.699991800799999 + 120.58639119999999 6 178.61598027900001 3 179.74754108900001 6 +1 75.609141310200002 33.914297240400003 -0.88294759285826285 0.46947156278713975 +1 0 3.2061493945663398e-15 1 -3.5908506306048224e-18 +7 0 0 5 12 4 100.2 7.5 100.2 9.6809699653300001 99.932382303899999 11.8619313793 99.396510492800004 13.9991336012 97.692003087800003 18.4059546282 94.895791927999994 22.228794922799999 93.118707907000001 24.048197016300001 91.017193152399997 25.661658038100001 88.725037743800002 26.937935644900001 88.624460949500005 26.993092693200001 88.523529253199996 27.047590689700002 88.422255048899999 27.101440138200001 + 62.094959105999997 6 77.796852188800003 3 95.859399766099997 3 96.6845153915 6 +1 100.2 2.5 0 1 +1 -2.8421709430404007e-14 -2.707542532113754e-14 1 8.7522599674615994e-17 +7 0 0 5 15 5 71 -31.699999999999999 73.999932498999996 -31.699999999999999 76.999844077000006 -31.3147433629 79.934138087199997 -30.543852039600001 85.538504313100006 -28.266498915 90.385589047600007 -24.647042713800001 92.562629609400005 -22.5336263714 96.364010810600007 -17.7458581679 98.8181968098 -12.1443684266 99.678127191599998 -9.1664285505599992 100.153771088 -6.00175461166 100.19845569100001 -2.8289666115399998 100.19948233300001 -2.71933652926 100.199990855 -2.60969449139 100.199991877 -2.50002261243 + 243.59478752199999 6 265.100062267 3 286.60708227999999 3 308.56748184100002 3 309.35350848100001 6 +1 16.5 -31.699999999999999 1 0 +1 118.101209582 0 1 0 +7 0 0 1 2 2 165.07829155293481 1.3399276483031418e-11 165.07828876436528 1.1313705510753329 + -0.5656851612691205 2 0.56568542494923713 2 +1 63.601209581999996 0.56568542494924035 0 1 +1 243.59478752199996 0.56568542494923313 0 1 +1 172.601209582 0.56568542494924035 0 1 +1 309.35350848100001 -7.8509658214442275e-17 0 1 +1 62.094959105999997 0.56568542494923801 0 1 +1 96.684515391499986 1.4066336215003684e-15 -1.2560739669453245e-14 1 +1 120.58639119996691 0.56568542491727436 -4.0621432090986698e-11 1 +1 179.74754108900001 2.6255551268628525e-22 0 1 +7 0 0 1 2 2 112.75476836440001 -5.797709924593164e-06 112.7547062803 1.1313649121814109 + 0 2 1.1313708498999999 2 +1 206.34732287700001 0.5656854249492379 0 1 +1 147.551787093 0.56568542494923646 0 1 +1 325.41616118000002 -1.0048591859783999e-14 0 1 +1 103.76581805399999 0.56568542494923801 0 1 +1 143.29775463799999 0.5 0 1 +1 0 0.5 0 1 +1 207.10225695400001 0.5 0 1 +1 109 0.5 0 1 +1 16.5 -32.5 1 0 +1 54.5 1 1 0 +1 254.45195737099999 0.5 0 1 +1 2.460956871328279e-29 0.5 -5.9435746756900001e-29 1 +7 0 0 1 2 2 207.10225695400001 1 254.45195737099999 1 + 109 2 156.12388980399999 2 +7 0 0 5 9 3 71 -32.5 75.712388980399993 -32.5 80.4247779608 -31.574724587399999 84.8946105096 -29.723259324099999 92.867471954300001 -24.367471954300001 98.223259324099999 -16.3946105096 100.07472458700001 -11.9247779608 101 -7.2123889803800001 101 -2.5 + 109 6 132.56194490199999 3 156.12388980399999 6 +1 107.808170647 0.5 0 1 +1 10 0.5 4.9219137426550267e-29 1 +1 101 2.5 4.2632564145599998e-15 1 +1 5 1 1 7.0295427457592257e-29 +1 132.87983823900001 0.5 0 1 +1 1.1985639207315868e-15 0.50000000000000111 -5.0296458652345425e-23 1 +7 0 0 1 2 2 107.808170647 1 132.87983823900001 1 + 166.12388980399999 2 191.01233394499999 2 +7 0 0 5 6 2 101 7.5 101 12.4776888283 99.654424864299997 17.455903910100002 96.956647293900005 21.945748933499999 93.192846020999994 25.470943655100001 88.797802672700001 27.807817643500002 + 166.12388980399999 6 191.01233394499999 6 +1 95.599764641600004 0.5 0 1 +1 29.023430645029901 0.50000000000000111 2.3971278498601878e-15 1 +1 75.984718560399998 34.620655314700002 -0.88294759285848323 0.46947156278672519 +1 14.511715322559104 1.0000000000000011 1 5.0297266445912371e-23 +1 137.70278531899999 0.5 0 1 +1 0 0.5 0 1 +7 0 0 1 2 2 95.599764641600004 1 137.70278531899999 1 + 220.03576459000001 2 262.06329297799999 2 +7 0 0 5 6 2 63.171634448200003 41.433492985900003 55.7500134434 45.379638872299999 47.845323711900001 48.4193390577 39.609065293299999 50.472868920099998 31.202585726199999 51.5 22.797080048600002 51.5 + 220.03576459000001 6 262.06329297799999 6 +1 166.58674222600001 0.5 0 1 +1 34.797080048600002 0.5 0 1 +1 5.3985400242999999 51.5 -1 0 +1 17.398540024300001 1 1 0 +1 252.01584080399999 0.5 0 1 +1 0 0.5 0 1 +7 0 0 1 2 2 166.58674222600001 1 252.01584080399999 1 + 296.86037302699998 2 381.68337467399999 2 +7 0 0 5 9 3 -12 51.5 -20.4823001647 51.5 -28.9646003294 49.834504257299997 -37.0102989174 46.501866783399997 -51.361449517799997 36.861449517799997 -61.001866783399997 22.5102989174 -64.334504257299997 14.4646003294 -66 5.9823001646899998 -66 -2.5 + 296.86037302699998 6 339.27187385000002 3 381.68337467399999 6 +1 98.517206313800003 0.5 0 1 +1 2 0.5 0 1 +1 -66 -3.5 0 -1 +1 1 1 1 0 +7 0 0 1 2 2 98.517206313800003 1 143.29775463799999 1 + 383.68337467399999 2 427.66567182400001 2 +7 0 0 5 6 2 -66 -4.5 -66 -13.296459430100001 -62.555579886700002 -22.101126014199998 -55.601126014199998 -29.055579886699999 -46.796459430100001 -32.5 -38 -32.5 + 383.68337467399999 6 427.66567182400001 6 +1 0 15.980613254816044 0 1 +1 4.1887902047861711 15.98061325481587 3.1401849173675167e-15 1 +1 -4.7123889803846888 15.839191898579017 1 -4.5234555469703365e-14 +2 8.7090243936400008e-28 -1.7763568394e-15 0 1 -1 0 11.199999999999999 +2 8.7090243936400008e-28 -8.8000000000000025 0 1 -1 0 11.199999999999999 +1 3.1415926535897927 15.980613254815903 0 1 +1 1.0471975511963774 15.980613254816079 -1.5700924586837781e-15 1 +1 -4.7123889803846897 16.122034611053568 1 -4.5234555469703352e-14 +1 -4.7123889803846897 -1.3 1 0 +1 -2.0943951023934151 15.839191898578644 1 2.8271597168564595e-15 +2 1.00974195868e-28 -2.3075552236599999e-15 1 0 -0 1 11.199999999999999 +2 1.00974195868e-28 -8.8000000000000025 1 0 -0 1 11.199999999999999 +1 -2.0943951023934146 16.122034611053273 1 2.2617277734851679e-15 +1 4.4408920985006262e-16 -1.3000000000004732 1 1.0043484894132574e-13 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 1.2999999999999998 1 0 +1 6.2831853071795862 16.122034611053355 -1 -4.5234555469703352e-14 +1 0 1.2999999999999998 1 0 +1 8.3775804095730013 16.1220346110536 -1 -6.6720969317812433e-14 +1 6.2831853071795862 15.980613254816044 0 1 +1 2.0943951023934146 15.98061325481587 -1.5700924586837584e-15 1 +1 3.1415926535897931 15.980613254815903 0 1 +1 5.2359877559832082 15.980613254816079 0 1 +1 10.995574287564274 15.839191898578944 -1 -4.4669123526332073e-14 +2 8.7090243936400008e-28 -1.7763568394e-15 0 1 -1 0 11.199999999999999 +2 8.7090243936400008e-28 -1.7763568394e-15 0 1 -1 0 11.199999999999999 +1 8.3775804095730013 15.839191898578648 -1 3.3925916602277511e-15 +2 7.5730646901200004e-29 -2.3075552236599999e-15 1 0 -0 1 11.199999999999999 +2 7.5730646901200004e-29 -2.3075552236599999e-15 1 0 -0 1 11.199999999999999 +1 0 -1.4000000000000004 1 0 +2 0 0 1 0 -0 1 10 +2 0 0 1 0 -0 1 10 +1 0 -1.4000000000000004 1 0 +2 0 0 1 0 -0 1 10 +2 0 0 1 0 -0 1 10 +1 10.448376736367599 13.859292911256547 -1 -3.1664188828792361e-14 +2 4.5562353437399997e-16 -10 1 0 -0 1 9.8000000000000007 +2 4.5562353437399997e-16 0 1 0 0 -1 9.8000000000000007 +1 8.353981633974163 13.859292911256107 -1 6.1632081827477094e-14 +2 4.5562353437399997e-16 -10 1 0 -0 1 9.8000000000000007 +2 4.5562353437399997e-16 0 1 0 0 -1 9.8000000000000007 +1 -2.0943951023934151 11.596551211459376 1 5.6543194337129189e-16 +2 6.5077460204099998e-16 -3.5523141753600001e-16 1 0 -0 1 8.1999999999999993 +2 6.5077460204099998e-16 -10 1 0 0 -1 8.1999999999999993 +1 0 11.596551211459378 1 0 +2 6.5077460204099998e-16 -3.5523141753600001e-16 1 0 -0 1 8.1999999999999993 +2 6.5077460204099998e-16 -10 1 0 0 -1 8.1999999999999993 +1 -4.7123889803846879 11.313708498984759 1 0 +1 -4.7123889803846879 1.2999999999999998 1 0 +1 8.9247779607693776 -8.3999999999995154 -1 0 +1 8.9247779607693793 -8.3999999999995154 -1 0 +1 3.1415926535897931 11.455129855222069 0 1 +1 1.0471975511963791 11.455129855222069 0 1 +1 0 11.455129855222069 0 1 +1 4.1887902047861711 11.455129855222069 0 1 +1 -2.0943951023934146 11.313708498984759 1 0 +1 0 1.2999999999999998 1 0 +1 4.2123889803846888 -8.3999999999995154 -1 0 +1 10.495574287564274 -8.3999999999995154 -1 0 +1 -2.0707963267951914 1.5707963267948926 1 1.9083328088779316e-15 +2 -5.2841545998399997e-16 -8.8000000000000007 1 0 -0 1 9.0999999999999996 +2 -5.2841545998399997e-16 0 1 0 -0 1 9.0999999999999996 +1 -5.2123889803849845 1.5707963267949125 1 -1.9083328088779316e-15 +2 -5.2841545998399997e-16 -8.8000000000000007 1 0 -0 1 9.0999999999999996 +2 -5.2841545998399997e-16 0 1 0 -0 1 9.0999999999999996 +1 8.3775804095730013 11.596551211459376 -1 5.6543194337129189e-16 +2 6.5077460204099998e-16 -3.5523141753600001e-16 1 0 -0 1 8.1999999999999993 +1 6.2831853071795862 11.596551211459378 -1 0 +2 6.5077460204099998e-16 -3.5523141753600001e-16 1 0 -0 1 8.1999999999999993 +1 0 -1.3 1 0 +1 8.3775804095730013 11.313708498984759 -1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 -2.0707963267946781 -6.1244997997999988 1 0 +1 5.8407075111029325 6.2831853071795862 -1 0 +1 6.2831853071795862 -0.97550020019947481 -1 0 +1 -2.0707963267948974 -6.1244997997999988 1 0 +1 8.3539816339744828 6.2831853071795862 -1 0 +1 12.566370614359172 -0.97550020019947481 -1 0 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 4.2123889803848744 -7.0999999999994694 0 -1 +1 4.2123889803846666 -7.0999999999995751 0 -1 +1 1.0707963267949339 -7.0999999999994339 0 -1 +1 0 -1.3 1 0 +1 6.2831853071795862 11.313708498984759 -1 0 +1 6.2831853071795862 -0.97550020019947481 -1 0 +1 6.2831853071795862 -0.97550020019947481 -1 0 +1 3.1415926535895737 0 0 1 +1 3.1415926535895728 0 0 1 +1 1.0707963267950824 -7.0999999999995325 0 -1 +1 2.0943951023934164 11.455129855222069 0 1 +1 6.2831853071795862 11.455129855222069 0 1 +1 5.2359877559832082 11.455129855222069 0 1 +1 3.1415926535897936 11.455129855222069 1.5700924586837781e-15 1 +1 0 13.152186130069769 0 1 +1 4.1887902047861711 13.152186130069753 0 1 +1 -4.7123889803846897 13.010764773832403 1 9.0469110939406702e-15 +2 1.3322676295499999e-15 2.2204460492499999e-15 0 1 -1 0 9.1999999999999993 +2 1.3322676295499999e-15 -6.5999999999999979 0 1 -1 0 9.1999999999999993 +2 1.3322676295499999e-15 -6.5999999999999979 0 1 -1 0 9.1999999999999993 +1 3.1415926535897931 13.152186130069799 0 1 +1 1.0471975511963794 13.152186130069817 1.5700924586837781e-15 1 +1 -4.7123889803846888 13.29360748630703 1 1.0177774980683253e-14 +1 -4.7123889803846888 -1.3 1 0 +1 -2.0943951023934151 13.010764773832392 1 1.0177774980683253e-14 +2 2.6645352590999998e-15 -1.84083345573e-17 1 0 -0 1 9.1999999999999993 +2 2.6645352590999998e-15 -6.5999999999999996 1 0 -0 1 9.1999999999999993 +2 2.6645352590999998e-15 -6.5999999999999996 1 0 -0 1 9.1999999999999993 +1 -2.0943951023934151 13.293607486307035 1 1.2439502754168421e-14 +1 0 -1.3000000000002025 1 4.297282769621818e-14 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 1.2999999999999998 1 0 +1 6.2831853071795862 13.293607486307078 -1 9.6123430373119649e-15 +1 0 1.2999999999999998 1 0 +1 8.3775804095730013 13.293607486307186 -1 -1.9790118017995212e-14 +1 6.2831853071795862 13.152186130069769 0 1 +1 2.0943951023934146 13.152186130069753 1.5700924586837682e-15 1 +1 3.1415926535897931 13.152186130069799 0 1 +1 5.2359877559832073 13.152186130069815 -3.1401849173675364e-15 1 +1 10.995574287564276 13.010764773832417 -1 9.0469110939406686e-15 +2 1.3322676295499999e-15 2.2204460492499999e-15 0 1 -1 0 9.1999999999999993 +2 1.3322676295499999e-15 -2.2204460492499999e-15 0 -1 -1 -0 9.1999999999999993 +2 1.3322676295499999e-15 -2.2204460492499999e-15 0 -1 -1 -0 9.1999999999999993 +1 8.3775804095730013 13.01076477383242 -1 1.1308638867425838e-14 +2 2.6645352590999998e-15 -1.84083345573e-17 1 0 -0 1 9.1999999999999993 +2 2.6645352590999998e-15 1.84083345573e-17 1 0 0 -1 9.1999999999999993 +2 2.6645352590999998e-15 1.84083345573e-17 1 0 0 -1 9.1999999999999993 +1 0 -1.4000000000000004 1 0 +2 0 0 1 0 0 -1 8 +2 0 0 1 0 -0 1 8 +2 0 0 1 0 -0 1 8 +1 0 -1.4000000000000004 1 0 +2 0 0 1 0 0 -1 8 +2 0 0 1 0 -0 1 8 +2 0 0 1 0 -0 1 8 +1 10.448376736367599 11.03086578651066 -1 -7.6333312355124428e-14 +2 0 -8 1 0 -0 1 7.7999999999999998 +2 0 0 1 0 0 -1 7.7999999999999998 +2 0 0 1 0 0 -1 7.7999999999999998 +1 8.3539816339744704 11.03086578651004 -1 2.8271597168564706e-14 +2 0 -8 1 0 -0 1 7.7999999999999998 +2 0 0 1 0 0 -1 7.7999999999999998 +2 0 0 1 0 0 -1 7.7999999999999998 +1 -2.0943951023934151 8.7681240867133603 1 -3.6187644375762681e-14 +2 5.6917383248299999e-16 -3.0773183653900002e-16 1 0 -0 1 6.2000000000000002 +2 5.6917383248299999e-16 -8 1 0 0 -1 6.2000000000000002 +2 5.6917383248299999e-16 -8 1 0 0 -1 6.2000000000000002 +1 0 8.7681240867131862 1 2.2617277734851675e-15 +2 5.6917383248299999e-16 -3.0773183653900002e-16 1 0 -0 1 6.2000000000000002 +2 5.6917383248299999e-16 -8 1 0 0 -1 6.2000000000000002 +2 5.6917383248299999e-16 -8 1 0 0 -1 6.2000000000000002 +1 -4.7123889803846897 8.4852813742385482 1 3.3925916602277511e-15 +1 -4.7123889803846897 1.2999999999999998 1 0 +1 8.9247779607693793 -8.4000000000006363 -1 0 +1 8.9247779607693793 -8.4000000000006363 -1 0 +1 3.1415926535897931 8.6267027304758841 0 1 +1 1.047197551196378 8.6267027304759374 7.8504622934188411e-16 1 +1 0 8.6267027304758734 0 1 +1 4.1887902047861711 8.6267027304758201 0 1 +1 -2.0943951023934146 8.4852813742386175 1 -1.0177774980683255e-14 +1 0 1.29999999999982 1 3.8166656177562201e-14 +1 4.2123889803846888 -8.4000000000006363 -1 0 +1 10.495574287564278 -8.4000000000006363 -1 0 +1 -2.0707963267952718 1.5707963267948866 1 1.9083328088778827e-15 +2 -2.2977359924999999e-16 -6.5999999999999988 1 0 -0 1 6.9000000000000004 +2 -2.2977359924999999e-16 8.881784197e-16 1 0 -0 1 6.9000000000000004 +2 -2.2977359924999999e-16 8.881784197e-16 1 0 -0 1 6.9000000000000004 +1 -5.2123889803850645 1.5707963267948841 1 1.8376538159564799e-15 +2 -2.2977359924999999e-16 -6.5999999999999988 1 0 -0 1 6.9000000000000004 +2 -2.2977359924999999e-16 8.881784197e-16 1 0 -0 1 6.9000000000000004 +2 -2.2977359924999999e-16 8.881784197e-16 1 0 -0 1 6.9000000000000004 +1 6.2831853071795862 8.7681240867131862 -1 2.2617277734851679e-15 +2 5.6917383248299999e-16 -3.0773183653900002e-16 1 0 -0 1 6.2000000000000002 +1 8.3775804095730013 8.7681240867133603 -1 -3.6187644375762681e-14 +2 5.6917383248299999e-16 -3.0773183653900002e-16 1 0 -0 1 6.2000000000000002 +1 0 -1.3 1 0 +1 8.3775804095730013 8.4852813742387454 -1 -3.7318508262505264e-14 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 -2.0707963267957745 -6.0744562647000002 1 0 +1 5.8407075111029325 6.2831853071795862 -1 0 +1 6.2831853071795862 -1.0255437352996919 -1 0 +1 -2.0707963267948974 -6.0744562647000002 1 0 +1 8.3539816339744828 6.2831853071795862 -1 0 +1 12.566370614359172 -1.0255437352996919 -1 0 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 4.2123889803838459 -7.1000000000000449 0 -1 +1 4.2123889803847456 -7.1000000000006178 0 -1 +1 1.0707963267948302 -7.1000000000006338 0 -1 +1 0 -1.3 1 0 +1 6.2831853071795862 8.485281374238566 -1 2.8271597168564599e-15 +1 6.2831853071795862 -1.0255437352996919 -1 0 +1 6.2831853071795862 -1.0255437352996919 -1 0 +1 3.1415926535906706 0 0 1 +1 3.1415926535906706 0 0 1 +1 1.0707963267939604 -7.0999999999995751 0 -1 +1 3.1415926535897931 8.6267027304758841 0 1 +1 5.2359877559832073 8.6267027304759374 -3.1401849173675562e-15 1 +1 6.2831853071795862 8.6267027304758752 0 1 +1 2.0943951023934146 8.6267027304758201 1.5700924586837584e-15 1 +1 8.9247779607693793 -8.4000000000006434 -1 0 +1 8.9247779607693793 -8.4000000000006434 -1 0 +1 4.2123889803846888 -8.4000000000006434 -1 0 +1 10.495574287564278 -8.4000000000006434 -1 0 +1 6.2831853071795862 -1.0255437352997057 -1 0 +1 12.566370614359172 -1.0255437352997057 -1 0 +1 4.2123889803838459 -7.1000000000000512 0 -1 +1 4.2123889803847456 -7.1000000000006178 0 -1 +1 1.0707963267948322 -7.1000000000006409 0 -1 +1 6.2831853071795862 -1.0255437352997057 -1 0 +1 6.2831853071795862 -1.0255437352997057 -1 0 +1 1.0707963267939604 -7.0999999999995751 0 -1 +1 -2.0707963267946776 -16 1 0 +2 0 -8 1 0 -0 1 8 +1 -2.0707963267948974 -16 1 0 +2 0 -8 1 0 -0 1 8 +1 -2.0707963267954783 8.768124086713204 1 -3.9580236035983114e-15 +2 -2.84586916241e-16 3.9130700983199998e-16 1 0 -0 1 6.2000000000000002 +1 -4.1651914291880141 8.76812408671322 1 -4.5234555469703359e-15 +2 -2.84586916241e-16 3.9130700983199998e-16 1 0 -0 1 6.2000000000000002 +1 1.0471975511968123 10.040916292848015 -3.6373808626234449e-14 1 +1 3.1415926535899295 10.040916292848001 -3.6286581267418539e-14 1 +1 4.1887902047866064 10.040916292847998 -3.6286581267418514e-14 1 +1 0 10.040916292848012 0 1 +1 10.448376736367599 8.7681240867132377 -1 -6.7851833204555046e-15 +2 -2.84586916241e-16 -8 1 0 -0 1 6.2000000000000002 +1 8.3539816339750637 8.7681240867132058 -1 -3.9580236035983114e-15 +2 -2.84586916241e-16 -8 1 0 -0 1 6.2000000000000002 +1 5.2359877559827739 10.040916292848021 3.6635490702682332e-14 1 +1 3.1415926535896568 10.040916292848003 3.6286581267418615e-14 1 +1 10.448376736367599 11.313708498984759 -1 0 +1 -2.070796326794897 27.200000000000063 1 -9.0469110939400375e-15 +1 2.0943951023929803 10.040916292847999 3.6286581267418615e-14 1 +1 6.2831853071795862 10.040916292848014 0 1 +1 8.3539816339742643 11.313708498984774 -1 -3.3925916602279882e-15 +1 -2.0707963267946776 27.200000000000003 1 0 +1 -2.0707963267946781 -8.6000000000000014 1 0 +2 0 -10 1 0 -0 1 8 +1 -2.0707963267948974 -8.6000000000000014 1 0 +2 0 -10 1 0 -0 1 8 +1 5.2359877559828263 14.000714267490235 2.5121479339410926e-14 1 +1 3.1415926535897092 14.000714267490279 2.5121479339410453e-14 1 +1 10.448376736367599 14.142135623730583 -1 5.4281466563643986e-14 +1 -2.0707963267948966 -8.7999999999991871 1 -1.1987157199471387e-13 +1 6.2831853071796049 -1.199999999999402 -1 0 +1 12.566370614359192 -1.199999999999402 -1 0 +1 2.0943951023930327 14.000714267490133 1.884110950455784e-14 1 +1 6.2831853071795862 14.000714267490086 0 1 +1 8.3539816339744846 14.142135623730722 -1 6.2197513770842125e-14 +1 -2.0707963267948974 -8.8000000000000007 1 0 +1 6.2831853071796067 -1.199999999999402 -1 0 +1 6.2831853071796067 -1.199999999999402 -1 0 +1 -2.070796326794897 -15.800000000000001 1 0 +1 -2.070796326794897 14.142135623730731 1 5.9935785997356959e-14 +1 6.2831853071795862 5.8000000000006162 -1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 1.0707963267949483 -9.9999999999994085 0 -1 +1 3.1415926535897931 -12.300000000000001 0 1 +1 3.1415926535897931 -12.300000000000001 0 1 +1 1.070796326794897 2.3000000000004133 0 -1 +1 6.2831853071795862 5.8000000000006162 -1 0 +1 0 -12.300000000000001 0 1 +1 6.2831853071795862 -12.300000000000001 0 1 +1 4.212388980384743 2.3000000000007952 0 -1 +1 -2.0707963267948983 -15.800000000000001 1 0 +1 -4.1651914291880141 14.14213562373117 1 -3.2229620772163627e-14 +1 12.566370614359172 5.8000000000006162 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 4.2123889803846666 -9.9999999999997122 0 -1 +1 6.2831853071795862 5.8000000000006162 -1 0 +1 1.0471975511967604 14.000714267490235 -2.512147933941061e-14 1 +1 3.141592653589877 14.000714267490281 -2.5121479339410768e-14 1 +1 4.188790204786554 14.000714267490135 -2.1981294421984422e-14 1 +1 0 14.000714267490086 0 1 +1 0 -4.000000330961484e-10 0 1 +1 6.2831853071795862 -4.000000330961484e-10 0 1 +1 -2.0707963267943708 -1.4000000003999986 1 0 +1 -2.0707963267943708 3.141592653589794 1 -1.6962958301141605e-15 +1 3.1415926535892655 -4.000000330961484e-10 0 1 +1 3.141592653589266 -4.000000330961484e-10 0 1 +1 -2.0707963267943708 1.3999999996000021 1 0 +1 -2.0707963267943703 3.1415926535897913 1 1.4135798584284669e-16 +1 -2.0707963267948974 -1.4000000003999986 1 0 +1 -5.212388980384163 3.1415926535897598 1 3.8166656177568588e-15 +1 -2.0707963267948974 1.3999999996000021 1 0 +1 -5.212388980384163 3.1415926535897629 1 2.6858017310140871e-15 +1 -2.0707963267948974 -2.0755002002000005 1 0 +1 8.3539816339744846 0 -1 0 +1 3.1415926535895737 0 0 1 +1 3.1415926535895737 0 0 1 +1 1.0707963267948961 -7 1 0 +2 0 8 1 0 -0 1 8 +1 1.0707963267948959 11.000000000000657 1 0 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535895728 -2 0 1 +1 3.1415926535895737 -2 0 1 +1 3.1415926535895782 16.000000000000899 0 1 +1 3.1415926535895782 16.000000000000899 0 1 +1 0 -2 0 1 +1 6.2831853071795862 -2 0 1 +8 -5 4.2679491924300006 +1 6.2831853071795862 16.000000000000753 0 1 +8 -5 4.2679491924300006 +1 0 16.000000000000753 0 1 +1 1.0707963267948961 2.2679491924300001 1 0 +1 -1.4424777960769388 3.141592653589794 1 -7.0678992921411488e-16 +1 1.0707963267948959 20.267949192430766 1 0 +1 -2.0707963267946776 -2.0755002002000005 1 0 +1 5.8407075111029325 0 -1 0 +1 -5.2123889803844712 -7 1 0 +2 0 8 1 0 -0 1 8 +1 -5.2123889803846906 11.000000000000657 1 0 +1 -5.2123889803844712 2.2679491924300001 1 0 +1 -5.2123889803844712 3.1415926535897887 1 4.2407395752849852e-16 +1 -5.2123889803846906 20.267949192430766 1 0 +1 3.1415926535895773 1.1336709349052398e-11 -3.9665661790632458e-15 1 +1 0 1.1327383475645547e-11 0 1 +1 0 1.1322942583547047e-11 0 1 +1 3.1415926535895764 1.1332268456953898e-11 -3.4707454066803213e-15 1 +1 -5.212388980385124 2.2459278598151329 1 7.0678992921401756e-16 +1 8.3539816339744846 0.89566479385800435 -1 -2.2263882770247687e-15 +1 -2.0707963267953304 2.24592785981514 1 -7.0678992921401736e-16 +1 5.8407075111029316 0.89566479385799147 -1 -8.1280841859623215e-16 +1 0.62831853071851607 -3.1415926535897931 8.0570875506043556e-15 1 +1 3.141592653590068 -3.1415926535897931 7.9331323575181205e-15 1 +1 3.7699111843083095 -3.1415926535897931 7.9331323575181473e-15 1 +1 0 -3.1415926535897931 0 1 +1 0 -1.6875389974302379e-14 0 1 +1 3.1415926535895533 -4.4408920985006262e-16 3.9665661790631732e-15 1 +1 3.1415926535895533 -7.1054273576010019e-15 3.9665661790631638e-15 1 +1 0 -1.2434497875801753e-14 0 1 +1 -5.212388980385124 4.0372574473644418 1 1.1308638867424278e-15 +1 8.3539816339744846 5.387520513321598 -1 0 +1 -2.0707963267953309 4.0372574473644427 1 1.4135798584280347e-15 +1 5.8407075111029325 5.3875205133215962 -1 5.6543194337129189e-16 +1 0.62831853071856703 3.1415926535916783 -8.1810427436905844e-15 1 +1 3.1415926535901191 3.1415926535916774 -8.4289531298630183e-15 1 +1 3.7699111843083593 3.1415926535916747 -7.933132357518111e-15 1 +1 0 3.1415926535916747 0 1 +1 3.141592653588773 -4.000000330961484e-10 0 1 +1 3.141592653588773 -4.000000330961484e-10 0 1 +1 -2.0707963267938774 1.3999999996000021 1 0 +1 -2.0707963267938774 3.1415926535897851 1 1.27222187258582e-15 +1 0 -4.000000330961484e-10 0 1 +1 6.2831853071795862 -4.000000330961484e-10 0 1 +1 -2.0707963267938774 -1.4000000003999986 1 0 +1 -2.0707963267938774 3.1415926535897913 1 2.8271597168573775e-16 +1 -2.0707963267948974 1.3999999996000021 1 0 +1 -5.21238898038367 3.1415926535897816 1 8.4814791505721329e-16 +1 -2.0707963267948974 -1.4000000003999986 1 0 +1 -5.21238898038367 3.1415926535897882 1 -1.413579858428689e-16 +1 -2.0707963267948974 -8.6000000000000014 1 0 +2 0 -8 1 0 -0 1 6 +1 -2.0707963267957745 -8.6000000000000014 1 0 +2 0 -8 1 0 -0 1 6 +1 0 0 0 1 +1 3.1415926535907834 -3.9968028886505635e-15 -2.1222884816716267e-14 1 +1 3.1415926535907834 -5.3290705182007514e-15 -2.1222884816716336e-14 1 +1 0 0 0 1 +1 -5.2123889803850352 4.1041434014810809 1 -1.4135798584280742e-15 +1 8.3539816339744828 5.3206345592338549 -1 -1.130863886742708e-15 +1 -2.0707963267952421 4.1041434014810712 1 0 +1 5.8407075111029325 5.3206345592338469 -1 2.8271597168564594e-16 +1 0.62831853071915222 3.1415926535933605 -2.5490530132469862e-14 1 +1 3.1415926535907031 3.1415926535933614 -2.5375188367164592e-14 1 +1 3.769911184308945 3.1415926535933596 -2.5375188367164545e-14 1 +1 0 3.1415926535933543 0 1 +1 3.1415926535906502 -8.9706020389712648e-13 2.1222884816716485e-14 1 +1 0 -8.9706020389712648e-13 0 1 +1 0 -9.0194518520547717e-13 0 1 +1 3.1415926535906511 -9.0194518520547717e-13 2.0761517755483458e-14 1 +1 -5.2123889803850352 2.1790419056985151 1 0 +1 8.3539816339744846 0.96255074794575468 -1 -2.2970672699461253e-15 +1 -2.0707963267952425 2.1790419056985151 1 0 +1 5.8407075111029325 0.96255074794573425 -1 7.0678992921411498e-16 +1 0.62831853071899235 -3.1415926535897931 2.5490530132469855e-14 1 +1 3.1415926535905436 -3.1415926535897931 2.5375188367164454e-14 1 +1 -3.5840704496664477 0 1 0 +1 7.3539816339744828 -2.1255437352999991 -1 0 +1 3.7699111843087851 -3.1415926535897931 2.5375188367164498e-14 1 +1 0 -3.1415926535897931 0 1 +1 -1.0707963267940186 0 1 0 +1 7.3539816339736053 -2.1255437352999991 -1 0 +1 -2.0707963267957745 -16 1 0 +2 0 -6 1 0 -0 1 6 +1 -2.0707963267948983 -16 1 0 +2 0 -6 1 0 -0 1 6 +1 -2.0707963267953371 5.9396969619670079 1 -2.2617277734848504e-15 +2 -1.5503856378e-16 1.16278922835e-16 1 0 -0 1 4.2000000000000002 +1 -4.1651914291880141 5.9396969619669973 1 2.8271597168564594e-16 +2 -1.5503856378e-16 1.16278922835e-16 1 0 -0 1 4.2000000000000002 +1 1.0471975511965155 7.2124891681017385 -9.4205547521057257e-15 1 +1 3.1415926535896332 7.2124891681017349 -9.0716453168425573e-15 1 +1 4.1887902047863088 7.2124891681017402 -9.071645316842551e-15 1 +1 0 7.212489168101742 0 1 +1 8.3539816339749233 5.9396969619670124 -1 -3.1098756885416703e-15 +2 0 -6.0000000000000009 1 0 -0 1 4.2000000000000002 +1 10.448376736367599 5.9396969619670035 -1 -2.8271597168564594e-16 +2 0 -6.0000000000000009 1 0 -0 1 4.2000000000000002 +1 3.1415926535906706 0 0 1 +1 3.1415926535906706 0 0 1 +1 -5.2123889803855672 -5.25 1 0 +2 0 6 1 0 -0 1 6 +1 -2.0707963267948974 13.499999999999826 1 0 +1 -5.2123889803846906 13.500000000000428 1 0 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 0 -1.5 0 1 +1 6.2831853071795862 -1.5 0 1 +8 -3.75 3.0179491924300001 +1 3.1415926535906706 17.250000000000323 0 1 +8 -3.75 3.0179491924300001 +1 3.1415926535906706 17.250000000000323 0 1 +8 -3.75 3.0179491924300001 +1 6.2831853071795862 17.250000000000426 0 1 +8 -3.75 3.0179491924300001 +1 0 17.250000000000426 0 1 +1 3.1415926535906706 -1.5 0 1 +1 3.1415926535906706 -1.5 0 1 +1 6.2831853071804877 17.249999999999826 0 1 +1 9.0283336362511247e-13 17.249999999999826 0 1 +1 3.1415926535907635 17.24999999999995 0 1 +1 3.1415926535907635 17.24999999999995 0 1 +1 -5.2123889803855672 1.5179491924300001 1 0 +1 -5.2123889803855672 3.1415926535897944 1 -2.8271597168556706e-16 +1 -2.0707963267948974 20.267949192429651 1 0 +1 -5.2123889803846906 20.267949192430255 1 0 +1 -2.0707963267948974 26.200000000000003 1 0 +1 10.448376736367599 8.4852813742385749 -1 -5.6543194337129189e-16 +1 1.0707963267948957 -5.25 1 0 +2 0 6 1 0 -0 1 6 +1 -2.0707963267948974 13.499999999999826 1 0 +1 1.0707963267948959 13.500000000000428 1 0 +1 1.0707963267948957 1.5179491924300001 1 0 +1 -1.442477796076939 3.1415926535897922 1 1.4135798584282297e-16 +1 -2.0707963267948974 20.267949192429651 1 0 +1 1.0707963267948959 20.267949192430255 1 0 +1 -2.0707963267957745 26.200000000000003 1 0 +1 8.3539816339753603 8.485281374238582 -1 -3.3925916602268045e-15 +1 6.2831853071795862 7.2124891681017482 0 1 +1 2.0943951023932774 7.2124891681017429 9.4205547521057462e-15 1 +1 3.1415926535899539 7.2124891681017376 9.4205547521057383e-15 1 +1 5.2359877559830705 7.2124891681017429 9.0716453168425636e-15 1 +1 5.235987755983027 11.172287142744034 1.2560739669429835e-14 1 +1 3.1415926535899099 11.172287142743958 7.8504622933936478e-15 1 +1 10.448376736367599 11.313708498984772 -1 -1.6962958301138752e-15 +1 -2.070796326794897 -8.7999999999992795 1 -1.0630120535379544e-13 +1 6.2831853071796067 -1.2000000000000193 -1 0 +1 12.566370614359194 -1.2000000000000193 -1 0 +1 2.0943951023932339 11.172287142743796 9.4205547520723774e-15 1 +1 6.2831853071795862 11.172287142743869 0 1 +1 8.3539816339742643 11.31370849898466 -1 2.7706165225195238e-14 +1 -2.0707963267946776 -8.8000000000000007 1 0 +1 6.2831853071796058 -1.2000000000000193 -1 0 +1 6.2831853071796058 -1.2000000000000193 -1 0 +1 -2.0707963267946776 -15.800000000000001 1 0 +1 -2.0707963267946781 11.31370849898466 1 2.7706165225195228e-14 +1 6.2831853071795862 5.800000000000006 -1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 1.070796326794873 -10.000000000000602 0 -1 +1 3.1415926535895737 -12.300000000000001 0 1 +1 3.1415926535895737 -12.300000000000001 0 1 +1 1.0707963267951812 2.2999999999998022 0 -1 +1 1.0707963267950216 2.2999999999997036 0 -1 +1 6.2831853071795862 5.800000000000006 -1 0 +1 0 -12.300000000000001 0 1 +1 6.2831853071795862 -12.300000000000001 0 1 +1 4.2123889803848638 2.3000000000003826 0 -1 +1 4.2123889803850236 2.300000000000284 0 -1 +1 -2.0707963267948974 -15.800000000000001 1 0 +1 -4.1651914291880141 11.313708498985278 1 -7.6333312355124377e-14 +1 12.566370614359172 5.800000000000006 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 4.2123889803847288 -10.000000000000743 0 -1 +1 6.2831853071795862 5.800000000000006 -1 0 +1 1.0471975511965592 11.172287142744036 -1.1775693440090618e-14 1 +1 3.1415926535896759 11.17228714274396 -6.2803698347149175e-15 1 +1 4.1887902047863523 11.172287142743798 -1.2560739669429835e-14 1 +1 0 11.172287142743873 0 1 +1 6.2831853071796067 -1.1999999999999136 -1 0 +1 12.566370614359194 -1.1999999999999136 -1 0 +1 6.2831853071796058 -1.1999999999999136 -1 0 +1 6.2831853071796058 -1.1999999999999136 -1 0 +1 6.2831853071795862 5.8000000000001046 -1 0 +1 1.0707963267948095 -10.000000000000508 0 -1 +1 6.2831853071795862 5.8000000000001046 -1 0 +1 12.566370614359172 5.8000000000001046 -1 0 +1 4.2123889803847918 -10.00000000000065 0 -1 +1 6.2831853071795862 5.8000000000001046 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 -6 1 0 +2 0 0 1 0 -0 1 23 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -6 1 0 +2 0 0 1 0 -0 1 23 +1 0 -1.4100000000099999 1 0 +2 0 0 1 0 -0 1 21.399999999999999 +1 -2.0707963267948974 -0.050000000749593709 1 0 +1 -2.0707963267948966 -0.050000000749593709 1 0 +1 0 -1.4100000000099999 1 0 +2 0 0 1 0 -0 1 21.399999999999999 +1 4.2123889803846897 -0.050000000749593709 1 0 +1 -2.0707963267948974 -0.050000000749593709 1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 1.0707963267949112 1.3599999992609098 0 1 +1 0 0.18999999999000017 1 0 +2 0 0 1 0 -0 1 21.399999999999999 +8 3.1415926535897931 5.2123889803824301 +1 -2.0707963267926375 1.54999999925 1 0 +2 0 -8.8000000000000007 1 0 -0 1 21.399999999999999 +1 3.1415926535875336 -7.5000006205527825e-10 0 1 +1 3.1415926535875336 -7.5000006205527825e-10 0 1 +1 5.212388980382439 -1.3600000000097872 0 1 +8 5.2123889803824301 6.2831853071795916 +1 -2.0707963267948974 1.54999999925 1 0 +2 0 -8.8000000000000007 1 0 -0 1 21.399999999999999 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 4.2123889803846835 1.3599999992605714 0 1 +1 0 0.18999999999000017 1 0 +2 0 0 1 0 -0 1 21.399999999999999 +8 0 2.0707963267926339 +1 4.2123889803846941 1.54999999925 1 0 +2 0 -8.8000000000000007 1 0 -0 1 21.399999999999999 +1 0 -7.5000006205527825e-10 0 1 +1 6.2831853071795862 -7.5000006205527825e-10 0 1 +1 2.0707963267926246 -1.3600000000100199 0 1 +8 2.0707963267926375 3.1415926535897931 +1 -2.0707963267926375 1.54999999925 1 0 +2 0 -8.8000000000000007 1 0 -0 1 21.399999999999999 +1 0 -1.5 1 0 +2 0 0 1 0 -0 1 11.5 +2 0 -8.8000000000000007 1 0 -0 1 11.5 +1 0 -1.5 1 0 +2 0 0 1 0 -0 1 11.5 +2 0 -8.8000000000000007 1 0 -0 1 11.5 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 1.4999999999999996 1 0 +2 0 0 1 0 -0 1 11.5 +1 0 1.4999999999999996 1 0 +2 0 0 1 0 -0 1 11.5 +1 -2.0707963267926375 -1.5500000007500001 1 0 +2 0 -21.399999999999999 1 0 -0 1 21.399999999999999 +1 -2.0707963267948974 -1.5500000007500001 1 0 +2 0 -21.399999999999999 1 0 -0 1 21.399999999999999 +1 -5.2123889803847101 4.7123889803847012 1 -1.6962958301138649e-15 +2 -9.9045007336499992e-16 -21.399999999999995 1 0 -0 1 9.4000000000000004 +1 -2.0707963267949174 4.7123889803846959 1 -1.6962958301138649e-15 +2 -9.9045007336499992e-16 -21.399999999999995 1 0 -0 1 9.4000000000000004 +1 0 0 0 1 +1 3.1415926535898175 -4.4408920985006262e-16 -8.4814791505633183e-16 1 +1 -5.2123889803847332 3.1415926535897962 1 -5.6543194337128439e-16 +1 -2.0707963267948979 -0.95000000075000013 1 0 +1 3.1415926535898167 -3.1086244689504383e-15 -8.4814791505633667e-16 1 +1 0 0 0 1 +1 -2.0707963267949396 3.1415926535897949 1 -8.4814791505692634e-16 +1 -2.0707963267949396 -0.95000000075000013 1 0 +1 0 -7.5000006205527825e-10 0 1 +1 6.2831853071795862 -7.5000006205527825e-10 0 1 +1 3.1415926535898357 -7.5000006205527825e-10 0 1 +1 3.1415926535898357 -7.5000006205527825e-10 0 1 +1 -2.0707963267949401 1.2499999992499997 1 0 +1 -2.0707963267949401 3.1415926535897953 1 -9.8950590089974727e-16 +1 -2.0707963267948974 1.2499999992499997 1 0 +1 -5.2123889803847332 3.1415926535898029 1 -1.8376538159566732e-15 +1 0 4.1922021409845911e-12 0 1 +1 3.1415926535900773 4.1922021409845911e-12 6.5024673487872161e-15 1 +1 3.1415926535900773 4.1922021409845911e-12 6.5024673487872201e-15 1 +1 0 4.1922021409845911e-12 0 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 -6 1 0 +2 0 0 1 0 -0 1 17 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -6 1 0 +2 0 0 1 0 -0 1 17 +1 0 -1.4100000000099999 1 0 +2 0 0 1 0 -0 1 15.4 +1 -2.0707963267948974 -0.050000000749600579 1 0 +1 -2.0707963267948974 -0.050000000749600579 1 0 +1 0 -1.4100000000099999 1 0 +2 0 0 1 0 -0 1 15.4 +1 4.2123889803846888 -0.050000000749600579 1 0 +1 -2.0707963267948974 -0.050000000749600579 1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 1.0707963267949336 1.3599999992611593 0 1 +1 1.0707963267948986 1.3599999992606335 0 1 +1 0 0.18999999999000017 1 0 +2 0 0 1 0 -0 1 15.4 +8 3.1415926535897931 5.2123889803847856 +1 -2.0707963267949929 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +1 3.1415926535898886 -7.5000006205527825e-10 0 1 +1 3.1415926535898886 -7.5000006205527825e-10 0 1 +1 5.2123889803847723 -1.3600000000095234 0 1 +8 5.2123889803847856 6.2831853071796111 +1 -2.0707963267948983 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 4.2123889803846613 1.3599999992608418 0 1 +1 4.2123889803846977 1.3599999992603236 0 1 +1 0 0.18999999999000017 1 0 +2 0 0 1 0 -0 1 15.4 +8 0 2.070796326794957 +1 4.2123889803847128 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +1 0 -7.5000006205527825e-10 0 1 +1 6.2831853071795862 -7.5000006205527825e-10 0 1 +1 2.0707963267949907 -1.3600000000096868 0 1 +8 2.0707963267949929 3.1415926535897931 +1 -2.0707963267949929 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +1 6.2831853071795862 1.5 -1 0 +2 0 0 1 0 -0 1 9.5 +2 0 -6.5999999999999996 1 0 -0 1 9.5 +2 0 -6.5999999999999996 1 0 -0 1 9.5 +1 6.2831853071795862 1.5 -1 0 +2 0 0 1 0 -0 1 9.5 +2 0 -6.5999999999999996 1 0 -0 1 9.5 +2 0 -6.5999999999999996 1 0 -0 1 9.5 +1 -3.1415926535897931 -1.4999999999999996 1 0 +2 0 0 -1 0 -0 -1 9.5 +1 3.1415926535897931 0 0 1 +1 3.1415926535897927 0 0 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535897931 -1.4999999999999996 1 0 +2 0 0 -1 0 -0 -1 9.5 +1 -2.0707963267948974 -0.050000000749082195 1 0 +1 -2.0707963267948974 -0.050000000749082195 1 0 +1 4.2123889803846888 -0.050000000749082195 1 0 +1 -2.0707963267948974 -0.050000000749082195 1 0 +8 3.1415926535897931 5.2123889803847856 +1 -2.0707963267949929 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +1 5.2123889803847625 -1.3600000000100279 0 1 +8 5.2123889803847856 6.2831853071795551 +1 -2.0707963267948983 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +8 0 2.0707963267949854 +1 4.2123889803846568 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +1 2.0707963267950014 -1.3600000000101922 0 1 +8 2.0707963267949929 3.1415926535897931 +1 -2.0707963267949929 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +1 -2.0707963267949929 -1.5500000007500001 1 0 +2 0 -15.4 1 0 -0 1 15.4 +1 -2.0707963267948983 -1.5500000007500001 1 0 +2 0 -15.4 1 0 -0 1 15.4 +1 -5.2123889803847039 4.7123889803847012 1 -1.6962958301138694e-15 +2 -6.3307413543499999e-16 -15.400000000000002 1 0 -0 1 7.2000000000000002 +1 -2.0707963267949099 4.7123889803846764 1 3.3925916602277365e-15 +2 -6.3307413543499999e-16 -15.400000000000002 1 0 -0 1 7.2000000000000002 +1 0 0 0 1 +1 3.1415926535898109 -4.4408920985006262e-16 -8.4814791505758879e-16 1 +1 -5.2123889803847332 3.1415926535897962 1 -5.65431943371284e-16 +1 -2.0707963267948974 -0.95000000075000013 1 0 +1 3.14159265358981 -1.3322676295501878e-15 -8.4814791505759076e-16 1 +1 0 0 0 1 +1 -2.0707963267949392 3.1415926535897944 1 -5.65431943371284e-16 +1 -2.0707963267949392 -0.95000000075000013 1 0 +1 0 -7.5000006205527825e-10 0 1 +1 6.2831853071795862 -7.5000006205527825e-10 0 1 +1 3.1415926535898357 -7.5000006205527825e-10 0 1 +1 3.1415926535898357 -7.5000006205527825e-10 0 1 +1 -2.0707963267949401 1.2499999992499997 1 0 +1 -2.0707963267949401 3.1415926535897971 1 -1.8376538159566736e-15 +1 -2.0707963267948974 1.2499999992499997 1 0 +1 -5.2123889803847332 3.1415926535898042 1 -2.1203697876423155e-15 +1 0 8.8491436400772727e-12 0 1 +1 3.1415926535901511 8.8522522645462232e-12 1.0743206924115134e-14 1 +1 3.1415926535901506 8.8551388444102486e-12 1.0743206924115152e-14 1 +1 0 8.8522522645462232e-12 0 1 +1 -1.5707963267948966 -19 1 0 +2 -12.1983481148 -55 1 0 -0 1 10 +8 1.5707963267948966 2.3561944901923448 +1 -1.5707963267948966 -19 1 0 +2 -12.1983481148 -55 1 0 -0 1 10 +1 32.849174057399999 45 1 0 +1 20.650825942600001 -45 -1 0 +1 20.650825942600001 -45 -1 0 +1 3.5857864375806114 7 1 0 +1 -21.804949832599998 -50.464466094099997 0.70710678118654757 0.70710678118654757 +1 -21.804949832599998 -50.464466094099997 0.70710678118654757 0.70710678118654757 +1 -3.9269908169943126 -19 1 0 +2 -14.8578643763 55 1 0 -0 1 10 +8 3.9269908169943126 4.7123889803846897 +1 -3.9269908169943126 -19 1 0 +2 -14.8578643763 55 1 0 -0 1 10 +1 24.72106781187 45 1 0 +1 -4.7789321881299998 45 1 0 +1 -4.7789321881299998 45 1 0 +1 7.7279220614041497 7 1 0 +1 -24.464466094100001 50.464466094099997 -0.70710678118654757 0.70710678118654757 +1 -24.464466094100001 50.464466094099997 -0.70710678118654757 0.70710678118654757 +1 21.072756694829962 7 1 0 +1 -68.326309529599996 34.750457374500002 0.50000000000018996 0.86602540378432902 +1 -68.326309529599996 34.750457374500002 0.50000000000018996 0.86602540378432902 +7 0 0 1 2 2 -5.0214983573291461e-16 7 29.965332826399997 7 + 0 2 42.135545458199999 2 +7 0 0 4 5 2 -78.862687876999999 16.500914749 -82.5869740638 10.050262138800001 -85.188155349599995 2.9491496505499999 -86.4932857923 -4.50021638696 -86.499977001199994 -11.948795860200001 + 0 5 42.135545458199999 5 +7 0 0 5 6 2 -7.1054273576010019e-15 7 5.9929248898503786 6.9999999999999813 11.986888130768707 7.0000000000000302 17.978264950604448 6.9999999999999751 23.972416266861163 7.0000000000000098 29.965332826399997 7 + 0 6 42.135545458199999 6 +7 0 0 4 5 2 -78.862687876999999 16.500914749 -82.5869740638 10.050262138800001 -85.188155349599995 2.9491496505499999 -86.4932857923 -4.50021638696 -86.499977001199994 -11.948795860200001 + 0 5 42.135545458199999 5 +1 40.025602069900003 7 1 0 +1 -86.5 -12.9743979301 0 1 +1 -86.5 -12.9743979301 0 1 +1 44.105034408900003 7 1 0 +1 -42.394965591099997 53 1 0 +1 -42.394965591099997 53 1 0 +7 0 0 1 2 2 7.6239253314467536e-16 7 17.8336924567 7 + 0 2 25.199526734100001 2 +7 0 0 3 4 2 23 43.222181183300002 17.179127945400001 44.403399888300001 11.2395854121 45 5.2999999999999998 45 + 0 4 25.199526734100001 4 +7 0 0 3 4 2 0 7 5.9446550539925562 6.9999999999999973 11.889108659248647 6.9999999999999991 17.8336924567 7 + 0 4 25.199526734100001 4 +7 0 0 3 4 2 23 43.222181183300002 17.179127945400001 44.403399888300001 11.2395854121 45 5.2999999999999998 45 + 0 4 25.199526734100001 4 +1 0 -13.5 1 0 +2 -68.458904109599999 -1 1 0 -0 1 6 +8 3.1415926535897931 6.2831853071795862 +1 0 -13.5 1 0 +2 -68.458904109599999 -1 1 0 -0 1 6 +1 0 -13.5 1 0 +2 -68.458904109599999 -1 1 0 -0 1 6 +8 0 3.1415926535897931 +1 0 -13.5 1 0 +2 -68.458904109599999 -1 1 0 -0 1 6 +1 0 -18 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 8 +8 0 3.1415926535897931 +1 0 -18 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 8 +1 0 -18 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 8 +8 3.1415926535897931 6.2831853071795862 +1 0 -18 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 8 +1 14.510070123260288 45 1 1.5748819111832277e-26 +1 59.8946005755 27.7702704676 0.8829475928588979 -0.46947156278594571 +1 59.8946005755 27.7702704676 0.8829475928588979 -0.46947156278594571 +1 -1.0821054642780075 -43 1 0 +2 5.2998818036899999 -44.0004740595 1 0 -0 1 89.000474059599995 +8 1.0821054642780075 1.3705847805140896 +1 -1.0821054642780075 -43 1 0 +2 5.2998818036899999 -44.0004740595 1 0 -0 1 89.000474059599995 +1 -6.2831807553015349 -43 1 0 +2 60.500078944800002 -1.9983999996099999 1 0 -0 1 25.999921055400002 +1 -6.2831807553018217 -43.00000000000027 1 0 +2 60.500078944800002 -1.9983999996099999 1 0 -0 1 25.999921055400002 +1 59.999259174039999 7 1 0 +1 86.5 -6.9992591740399996 0 -1 +1 86.5 -6.9992591740399996 0 -1 +1 -4.7123889803846897 -43 1 0 +2 53.499751589699997 -11.999751589700001 1 0 -0 1 33.000248411299992 +8 4.7123889803846897 6.2831777796514023 +1 -4.7123889803846897 -43 1 0 +2 53.499751589699997 -11.999751589700001 1 0 -0 1 33.000248411299992 +1 -3.1416001811202254 -43 1 0 +2 -55.499766644799998 -13.999766644799999 1 0 -0 1 31.000233355999999 +8 3.1416001811202254 3.9269908169872414 +1 -3.1416001811202254 -43 1 0 +2 -55.499766644799998 -13.999766644799999 1 0 -0 1 31.000233355999999 +1 128.84048373849998 7 1 0 +1 -42.340483738499998 -53 -1 0 +1 -42.340483738499998 -53 -1 0 +1 12.077212795244037 7 1 0 +1 -68.880362803899999 -44.460120934599999 0.70710678118654757 -0.70710678118654757 +1 -68.880362803899999 -44.460120934599999 0.70710678118654757 -0.70710678118654757 +1 0 -43 1 0 +2 -40 -22 1 0 -0 1 6.7999999999999972 +8 3.1415926535897931 6.2831853071795862 +1 0 -43 1 0 +2 -40 -22 1 0 -0 1 6.7999999999999972 +1 0 -43 1 0 +2 -40 -22 1 0 -0 1 6.7999999999999972 +8 0 3.1415926535897931 +1 0 -43 1 0 +2 -40 -22 1 0 -0 1 6.7999999999999972 +1 0 -43 1 0 +2 -40 20 1 0 -0 1 6.7999999999999972 +8 3.1415926535897931 6.2831853071795862 +1 0 -43 1 0 +2 -40 20 1 0 -0 1 6.7999999999999972 +1 0 -43 1 0 +2 -40 20 1 0 -0 1 6.7999999999999972 +8 0 3.1415926535897931 +1 0 -43 1 0 +2 -40 20 1 0 -0 1 6.7999999999999972 +1 -2.6415926535918803 1.0154266118842759 1 -2.1203697876409358e-16 +2 33 -4 -1 0 0 1 10.765711135 +8 2.6415926535918803 5.7831853071816735 +1 -2.6415926535897922 1.0154266118842759 1 -2.1203697876409351e-16 +2 33 -4 -1 0 0 1 10.765711135 +1 -2.6415926535897927 1.0154266118842732 1 2.1203697876437535e-16 +2 33 -4 -1 0 0 1 10.765711135 +1 -2.6415926535897927 1.0154266118860109 1 0 +2 33 -4 -1 0 0 1 10.765711135 +1 -3.36936457992371 -2.9999999999999991 1 0 +2 -40.000000188800001 -22.000011602899999 1 0 -0 1 24.000006407600001 +2 -40.000000188800001 -22.000011602899999 1 0 -0 1 24.000006407600001 +1 -0.26101455623919623 2.9999999999999991 1 0 +2 -10.050091973400001 -29.999935313400002 -1 0 0 1 6.9999338036700003 +2 -10.050091973400001 -29.999935313400002 -1 0 0 1 6.9999338036700003 +1 -4.9734047232834868 -3 1 0 +2 -40.000005889900002 20.000007856700002 0 1 -1 0 14.000003953499998 +2 -40.000005889900002 20.000007856700002 0 1 -1 0 14.000003953499998 +1 -4.7123868495258172 3.0000000000000009 1 0 +2 -10.050077960799999 27.999952680300002 -1 0 0 1 16.9999549184 +2 -10.050077960799999 27.999952680300002 -1 0 0 1 16.9999549184 +1 -0.937212455434 11 -1 0 +1 -0.937212455434 11 -1 0 +1 -5.6233963275691625 3 1 0 +2 8.1756210378799992 27.9999879308 0 -1 -1 -0 16.999987833900001 +2 8.1756210378799992 27.9999879308 0 -1 -1 -0 16.999987833900001 +1 -5.7696806059859771 -3 1 0 +2 33.000154312699998 -3.9999358403 1 0 -0 1 23.499995422299996 +2 33.000154312699998 -3.9999358403 1 0 -0 1 23.499995422299996 +1 -2.2678693845066817 -3 1 0 +2 32.999998499500002 -4.0000094690600001 0 1 -1 0 23.499997080899998 +2 32.999998499500002 -4.0000094690600001 0 1 -1 0 23.499997080899998 +1 -3.1415919177444529 3.0000000000000009 1 0 +2 1.9476373989 -29.999971756400001 0 -1 -1 -0 16.999971543900003 +2 1.9476373989 -29.999971756400001 0 -1 -1 -0 16.999971543900003 +1 -4.0512084233500003 -13 -1 0 +1 0 3 -1 0 +1 -4.0512084233500003 -13 -1 0 +1 -0.26101778683788013 3.0000000000000009 1 0 +2 -10.0500782264 -29.9999528508 -1 0 0 1 16.999954907700001 +2 -10.0500782264 -29.9999528508 -1 0 0 1 16.999954907700001 +1 -1.7985698767941918 -3.0000000000000009 1 0 +2 -40.000005894799997 -22.000007838799998 0 1 -1 0 14.000003959200001 +2 -40.000005894799997 -22.000007838799998 0 1 -1 0 14.000003959200001 +1 -4.0512084233500003 -23 -1 0 +1 0 -3 -1 0 +1 -4.0512084233500003 -23 -1 0 +1 -3.1415988050231052 2.9999999999999991 1 0 +2 1.94758182896 -30.000090517899999 0 -1 -1 -0 7.0000925631999991 +2 1.94758182896 -30.000090517899999 0 -1 -1 -0 7.0000925631999991 +1 -2.2678687398204804 -3 1 0 +2 33.000000815600004 -4.0000089966100001 0 1 -1 0 33.499997306399997 +2 33.000000815600004 -4.0000089966100001 0 1 -1 0 33.499997306399997 +1 -5.769680315482673 -3 1 0 +2 33.000231648499998 -3.99990394745 1 0 -0 1 33.499988350499997 +2 33.000231648499998 -3.99990394745 1 0 -0 1 33.499988350499997 +1 -5.623401915451872 2.9999999999999991 1 0 +2 8.1755617599299999 28.000161024899999 0 -1 -1 -0 7.0001627315000015 +2 8.1755617599299999 28.000161024899999 0 -1 -1 -0 7.0001627315000015 +1 -0.937212455434 21 -1 0 +1 -0.937212455434 21 -1 0 +1 -4.7123821972672353 3 1 0 +2 -10.0500892177 27.999937760200002 -1 0 0 1 6.9999367231199994 +2 -10.0500892177 27.999937760200002 -1 0 0 1 6.9999367231199994 +1 -4.9734058683332627 -3 1 0 +2 -40.000000158600002 20.0000116416 0 1 -1 0 24.000006379400002 +2 -40.000000158600002 20.0000116416 0 1 -1 0 24.000006379400002 +1 -4.940161570967236 2.9999999999999942 1 9.7255083692588463e-16 +2 -70.199389163800006 27.000064425600002 0 -1 -1 -0 7.0000700167899979 +2 -70.199389163800006 27.000064425600002 0 -1 -1 -0 7.0000700167899979 +1 -2.0005737976586868 -3 1 0 +2 -65.199337741099995 16.091298859399998 1 0 -0 1 5 +2 -65.199337741099995 16.091298859399998 1 0 -0 1 5 +1 -3.3693587181442699 3 1 0 +2 -70.199302031900004 26.9999554113 -1 0 0 1 16.999958414800005 +2 -70.199302031900004 26.9999554113 -1 0 0 1 16.999958414800005 +1 -3.1415926535897931 -3 1 0 +2 -65.199337741099995 16.091272674700001 1 0 -0 1 5 +2 -65.199337741099995 16.091272674700001 1 0 -0 1 5 +1 -3.1415992914240105 3.0000000000000044 1 -9.7254981662837894e-16 +2 -70.199384206299996 -29.000057785500001 0 -1 -1 -0 7.0000631979800012 +2 -70.199384206299996 -29.000057785500001 0 -1 -1 -0 7.0000631979800012 +1 -1.5707963267948957 -3 1 0 +2 -65.199337741099995 -18.091297447999999 0 1 -1 0 5 +2 -65.199337741099995 -18.091297447999999 0 1 -1 0 5 +7 0 0 1 2 2 1.3430323514526912 3 0.42977585371191085 3 + 0 2 19.550105514999998 2 +7 0 0 5 9 3 -53.638400442600002 -25.161334112599999 -54.003979222200002 -23.584138428700001 -54.557315125400002 -22.050463563099999 -55.291490251799999 -20.5902685633 -57.019285000799997 -17.984147073199999 -59.287073799600002 -15.837099635 -60.481358048700002 -14.9322948693 -61.7647902569 -14.165305821500001 -63.116009920099998 -13.545968072999999 + 0 6 10.190667787600001 3 19.550105514999998 6 +7 0 0 5 9 3 -53.638400442600002 -25.161334112599999 -54.003979222200002 -23.584138428700001 -54.557315125400002 -22.050463563099999 -55.291490251799999 -20.5902685633 -57.019285000799997 -17.984147073199999 -59.287073799600002 -15.837099635 -60.481358048700002 -14.9322948693 -61.7647902569 -14.165305821500001 -63.116009920099998 -13.545968072999999 + 0 6 10.190667787600001 3 19.550105514999998 6 +1 -1.1410225559437421 -3 1 0 +2 -65.199337741099995 -18.0912726864 1 0 -0 1 5 +2 -65.199337741099995 -18.0912726864 1 0 -0 1 5 +1 -5.2123889803864545 7.1079862832072918 1 -2.8271597168548728e-16 +1 -5.2123889803864545 -8.881784197e-16 1 0 +1 0 3.553993141607557 0 1 +1 6.2831853071795862 3.553993141607557 0 1 +1 -5.212388980384306 0 1 0 +2 0 8 1 0 -0 1 10.265711135 +1 3.1415926535896666 3.553993141607557 -1.88057273662613e-14 1 +1 3.1415926535896666 3.553993141607557 -1.88057273662613e-14 1 +1 1.0707963267948957 7.1079862832072882 1 2.8271597168580465e-16 +1 1.0707963267948957 -8.881784197e-16 1 0 +1 1.0707963267948961 0 1 0 +2 0 8 1 0 -0 1 10.265711135 +1 -5.2123889803851542 0 1 0 +2 0 12.199999999999999 1 0 -0 1 15.300000000000001 +1 1.0707963267948961 0 1 0 +2 0 12.199999999999999 1 0 -0 1 15.300000000000001 +1 1.0707963267948961 0 1 0 +2 0 12.199999999999999 1 0 -0 1 12.199999999999999 +1 -5.2123889803831265 0 1 0 +2 0 12.199999999999999 1 0 -0 1 12.199999999999999 +1 0 5 0 1 +1 6.2831853071795862 5 0 1 +1 -5.2123889803850805 4 1 0 +1 -5.2123889803850805 6.2831853071795862 1 0 +1 3.141592653590183 5 0 1 +1 3.141592653590183 5 0 1 +1 -5.2123889803850805 5 1 0 +1 -5.2123889803850805 15.311714550336225 1 5.6543194337122162e-15 +1 1.0707963267948957 4 1 0 +1 -2.0707963267952874 6.2831853071795862 1 0 +1 1.0707963267948957 5 1 0 +1 -2.0613516725467402 15.311714550336266 1 0 +1 3.1510373078384712 16.547782527835931 -1.4371028711494499e-14 1 +1 0 16.547782527835924 0 1 +1 -2.0613516725467402 17.783850505329543 1 0 +2 -4.4408920984999998e-15 15.999999999999998 1 0 -0 1 10.453085056000001 +1 0.0094446543752079622 16.547782527835935 -7.1354122341508787e-14 1 +1 3.1415926537168448 16.547782527835945 -7.1316229980648576e-14 1 +1 -5.2123889803844818 17.783850505329504 1 5.6543194783985335e-15 +2 8.881784197e-16 16 1 0 -0 1 10.453085056000001 +1 0 0.75 0 1 +1 6.2831853071795862 0.75 0 1 +1 3.1415926535902567 0.75 0 1 +1 3.1415926535902567 0.75 0 1 +1 -5.2123889803851542 1 1 0 +1 -5.2123889803851542 3.1415926535898007 1 -1.4135798584280217e-15 +1 1.0707963267948961 1 1 0 +1 -2.0707963267953611 3.1415926535897989 1 -2.6858017310132402e-15 +1 -5.2123889803862173 1.5 1 0 +2 0 15.300000000000001 1 0 -0 1 16 +1 1.0707963267948957 1.5 1 0 +2 0 15.300000000000001 1 0 -0 1 16 +1 -2.0707963267941216 1.5707963267948941 1 1.1308638867428628e-15 +2 -1.4022779760100001e-15 15.300000000000002 1 0 -0 1 15.800000000000001 +1 -5.2123889803839152 1.5707963267949578 1 -9.0469110939429042e-15 +2 -1.4022779760100001e-15 15.300000000000002 1 0 -0 1 15.800000000000001 +1 3.141592653589043 -5.9802829355248832e-11 -1.6114810385468342e-14 1 +1 0 -5.9792171214212431e-11 0 1 +1 0 -5.9795723927891231e-11 0 1 +1 3.1415926535890426 -5.9806382068927633e-11 -1.6114810385468297e-14 1 +1 3.1415926535895289 -3.7712055700467317e-12 1.1025922895796904e-14 1 +1 0 -3.7712055700467317e-12 0 1 +1 0 -3.7712055700467317e-12 0 1 +1 3.1415926535895289 -3.7712055700467317e-12 1.1025922895796904e-14 1 +1 -2.0707963267952345 5.2359877559852102 1 -2.8271597168561557e-16 +1 -1.4424777960769388 2.0943951023904166 1 -5.6543194337129189e-16 +1 -5.2123889803850272 5.2359877559852084 1 0 +1 -5.2123889803850272 2.0943951023904148 1 0 +1 3.7699111843081128 1.6444623440747819e-12 2.4596289536511505e-14 1 +1 0 1.6466827901240322e-12 0 1 +1 0.62831853071831956 1.6489032361732825e-12 2.4702308025893093e-14 1 +1 3.1415926535901546 1.6466827901240322e-12 2.4596289536511546e-14 1 +1 0 0.34999999999999998 0 1 +1 6.2831853071795862 0.34999999999999998 0 1 +1 3.1415926535915575 0.34999999999999998 0 1 +1 3.1415926535915575 0.34999999999999998 0 1 +1 -5.2123889803864545 0.40000000000000002 1 0 +1 -5.2123889803864545 3.141592653589802 1 -1.6962958301129236e-15 +1 1.0707963267948957 0.40000000000000002 1 0 +1 -2.0707963267966614 3.1415926535897971 1 -1.8376538159556666e-15 +1 3.1415926535900751 1.8059553852367571e-11 4.806171518711239e-15 1 +1 0 1.8065549056700547e-11 0 1 +1 0 1.808331262509455e-11 0 1 +1 3.1415926535900751 1.8077317420761574e-11 4.8061715187112974e-15 1 +1 -2.0707963267951865 1.5707963267948966 1 0 +2 -1.7763568394e-15 11.500000000000002 1 0 -0 1 11.800000000000001 +1 -5.2123889803849792 1.5707963267949125 1 -1.9083328088779348e-15 +2 0 11.500000000000002 1 0 -0 1 11.800000000000001 +1 0 0.34999999999999998 0 1 +1 6.2831853071795862 0.34999999999999998 0 1 +1 3.1415926535882299 0.34999999999999998 0 1 +1 3.141592653588229 0.34999999999999998 0 1 +1 -5.2123889803831265 0.40000000000000002 1 0 +1 -5.2123889803831265 0 1 0 +1 1.0707963267948961 0.40000000000000002 1 0 +1 -2.0707963267933329 0 1 0 +1 -5.2123889803845049 1.5707963267948706 1 3.8166656177564454e-15 +2 -1.23601678529e-15 11.499999999999998 1 0 -0 1 11.9 +1 -2.0707963267947114 1.5707963267949105 1 -3.8166656177564454e-15 +2 -1.23601678529e-15 11.499999999999998 1 0 -0 1 11.9 +1 3.1415926535896119 0 -2.8271597168804488e-15 1 +1 0 0 0 1 +1 0 0 0 1 +1 3.1415926535896119 0 -2.8271597168804488e-15 1 +1 0 4.25 0 1 +1 6.2831853071795862 4.25 0 1 +1 3.1415926535913208 4.25 0 1 +1 3.1415926535913208 4.25 0 1 +1 -5.2123889803862173 5.7999999999999998 1 0 +1 11.495574287565804 22.627416997969508 -1 2.2617277734840687e-15 +1 1.0707963267948957 5.7999999999999998 1 0 +1 7.3067840827778063 22.62741699796949 -1 7.9160472071980886e-15 +1 7.3067840827778072 20.930360723121776 -1 9.0469110939406717e-15 +2 0 16.000000000000004 1 0 -0 1 14.800000000000001 +1 11.495574287563416 20.930360723121787 -1 3.3925916602286788e-15 +2 0 16.000000000000004 1 0 -0 1 14.800000000000001 +1 5.2359877559828139 21.77888886053676 1.465419628140081e-14 1 +1 3.1415926535896972 21.778888860536782 1.5177560434308014e-14 1 +1 2.0943951023930207 21.778888860536789 1.4915878357854395e-14 1 +1 6.2831853071795862 21.778888860536775 0 1 +1 -5.2123889803849277 4.5694197534861836 1 0 +1 -5.2123889803849277 -0.75 1 0 +1 0 2.284709876743205 0 1 +1 6.2831853071795862 2.284709876743205 0 1 +1 -5.2123889803848282 0 1 0 +2 0 6 1 0 -0 1 7.8065285868099998 +1 3.1415926535899863 2.284709876743205 -3.1683034219088181e-14 1 +1 3.1415926535899863 2.284709876743205 -3.1683034219088181e-14 1 +1 1.0707963267948957 4.5694197534861836 1 0 +1 1.0707963267948957 -0.75 1 0 +1 1.0707963267948957 0 1 0 +2 0 6 1 0 -0 1 7.8065285868099998 +1 -5.2123889803849357 -0.75 1 0 +2 0 9.3000000000000007 1 0 -0 1 11.300000000000001 +1 1.0707963267948957 -0.75 1 0 +2 0 9.3000000000000007 1 0 -0 1 11.300000000000001 +1 1.0707963267948957 -0.75 1 0 +2 0 9.3000000000000007 1 0 -0 1 9.3000000000000007 +1 -5.2123889803847998 -0.75 1 0 +2 0 9.3000000000000007 1 0 -0 1 9.3000000000000007 +1 0 3.75 0 1 +1 6.2831853071795862 3.75 0 1 +1 -5.212388980384941 3.25 1 0 +1 -5.212388980384941 6.2831853071795862 1 0 +1 3.141592653590044 3.75 0 1 +1 3.141592653590044 3.75 0 1 +1 -5.212388980384941 3.6500000000000004 1 0 +1 -5.212388980384941 11.909111316929993 1 1.6962958301137409e-15 +1 1.0707963267948957 3.25 1 0 +1 -2.0707963267951479 6.2831853071795862 1 0 +1 1.0707963267948957 3.6500000000000004 1 0 +1 -1.8504471532886373 11.909111316930014 1 -2.8271597168564607e-15 +1 3.3619418270966803 12.897965698930012 -2.6945678834044507e-14 1 +1 0 12.897965698930012 0 1 +1 -1.8504471532886377 13.886820080930507 1 -1.130863869812763e-15 +2 8.881784197e-16 12 1 0 -0 1 8.1624680448099998 +1 0.22034919589643231 12.897965698928584 -7.3118222252784848e-14 1 +1 3.1415926759799664 12.897965698928584 -7.2528785528290296e-14 1 +1 -5.2123889803845618 13.886820080930486 1 2.2617278073449014e-15 +2 6.2172489379000002e-15 12.000000000000005 1 0 -0 1 8.1624680448099998 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535900387 0 0 1 +1 3.1415926535900387 0 0 1 +1 -5.2123889803849357 0.25 1 0 +1 -5.2123889803849357 3.1415926535898051 1 -2.2617277734849904e-15 +1 1.0707963267948957 0.25 1 0 +1 -2.0707963267951426 3.141592653589794 1 -4.2407395752843576e-16 +1 -5.2123889803840378 0.75 1 0 +2 0 11.300000000000001 1 0 -0 1 12 +1 1.0707963267948961 0.75 1 0 +2 0 11.300000000000001 1 0 -0 1 12 +1 -2.0707963267951865 1.5707963267949108 1 -3.3925916602274387e-15 +2 -1.2570549911299999e-15 11.299999999999997 1 0 -0 1 11.800000000000001 +1 -5.2123889803849801 1.5707963267948599 1 5.6543194337123984e-15 +2 -1.2570549911299999e-15 11.299999999999997 1 0 -0 1 11.800000000000001 +1 3.1415926535900698 1.0842882147699129e-11 8.1987631789403288e-15 1 +1 0 1.0839329434020328e-11 0 1 +1 0 1.0842882147699129e-11 0 1 +1 3.1415926535900698 1.0846434861377929e-11 8.1987631789403493e-15 1 +1 3.1415926535908922 2.8776980798284058e-13 -5.5129614478979606e-14 1 +1 0 2.8599345114344032e-13 0 1 +1 0 2.8421709430404007e-13 0 1 +1 3.1415926535908913 2.851052727237402e-13 -5.5129614478979467e-14 1 +1 -2.070796326795068 5.2359877559852093 1 -5.6543194337126102e-16 +1 -1.4424777960769384 2.0943951023904099 1 1.5549378442710529e-15 +1 -5.212388980384862 5.2359877559852066 1 0 +1 -5.212388980384862 2.0943951023904157 1 0 +1 3.769911184307976 1.7421619702417956e-12 2.1627771833831072e-14 1 +1 0 1.7417178810319456e-12 0 1 +1 0.62831853071818322 1.7417178810319456e-12 2.1521753344449503e-14 1 +1 3.1415926535900178 1.7434942378713458e-12 2.1627771833831072e-14 1 +1 0 -0.40000000000000002 0 1 +1 6.2831853071795862 -0.40000000000000002 0 1 +1 3.1415926535900303 -0.40000000000000002 0 1 +1 3.1415926535900303 -0.40000000000000002 0 1 +1 -5.2123889803849277 -0.34999999999999998 1 0 +1 -5.2123889803849277 3.1415926535897953 1 -4.2407395752843694e-16 +1 1.0707963267948957 -0.34999999999999998 1 0 +1 -2.0707963267951341 3.1415926535897936 1 -2.8271597168562459e-16 +1 3.1415926535902639 8.4792173282721706e-12 1.0743206924112559e-14 1 +1 0 8.4909856923331972e-12 0 1 +1 0 8.4909856923331972e-12 0 1 +1 3.1415926535902634 8.4792173282721706e-12 1.0743206924112586e-14 1 +1 -2.0707963267953851 1.5707963267948966 1 0 +2 8.881784197e-16 8.6000000000000014 1 0 -0 1 8.9000000000000004 +1 -5.2123889803851782 1.5707963267948966 1 0 +2 -3.5527136788e-15 8.5999999999999961 1 0 -0 1 8.9000000000000004 +1 0 -0.40000000000000002 0 1 +1 6.2831853071795862 -0.40000000000000002 0 1 +1 3.1415926535899028 -0.40000000000000002 0 1 +1 3.1415926535899028 -0.40000000000000002 0 1 +1 -5.2123889803847998 -0.34999999999999998 1 0 +1 -5.2123889803847998 0 1 0 +1 1.0707963267948957 -0.34999999999999998 1 0 +1 -2.0707963267950067 0 1 0 +1 -5.2123889803850805 1.5707963267949474 1 -7.4919732496686874e-15 +2 0 8.6000000000000014 1 0 -0 1 9 +1 -2.0707963267952874 1.5707963267948966 1 0 +2 0 8.6000000000000014 1 0 -0 1 9 +1 3.141592653590171 0 8.1987631788506937e-15 1 +1 0 0 0 1 +1 0 0 0 1 +1 3.1415926535901706 0 7.916047207166187e-15 1 +1 0 3 0 1 +1 6.2831853071795862 3 0 1 +1 3.1415926535891394 3 0 1 +1 3.1415926535891403 3 0 1 +1 -5.2123889803840378 4.0499999999999998 1 0 +1 11.495574287563624 16.970562748477032 -1 1.5832094414399465e-14 +1 1.0707963267948961 4.0499999999999998 1 0 +1 7.3067840827778063 16.97056274847721 -1 -1.9224686074623924e-14 +1 7.3067840827778072 15.273506473629499 -1 -1.9790118017995215e-14 +2 -1.5006201728799999e-15 12 1 0 -0 1 10.800000000000001 +1 11.495574287564473 15.273506473629324 -1 1.5266662471023926e-14 +2 -1.5006201728799999e-15 12 1 0 -0 1 10.800000000000001 +1 5.2359877559848469 16.122034611084892 -1.0571955888436756e-13 1 +1 3.1415926535917302 16.122034611084885 -1.059812409608138e-13 1 +1 2.0943951023950533 16.122034611084832 -1.059812409608138e-13 1 +1 6.2831853071795862 16.122034611084835 0 1 +1 -5.7831853071825634 5.5848463653722087 1 0 +2 -40 -22 -1 0 0 1 9 +2 -1.7763568394002505e-15 -1.2082349010178461e-15 -1 2.1566526342553516e-11 2.1566526342553516e-11 1 9 +1 0.50000000000000089 5.5848463653722087 1 0 +2 -40 -22 -1 0 0 1 9 +2 -1.7763568394002505e-15 -1.2082349010178461e-15 -1 2.1566526342553516e-11 2.1566526342553516e-11 1 9 +1 -5.7831853071825634 5.5848463653722087 1 0 +2 -40 20 -1 0 0 1 9 +2 0 3.5527136788005009e-15 2.1566526342553516e-11 1 1 -2.1566526342553516e-11 9 +1 0.50000000000000089 5.5848463653722087 1 0 +2 -40 20 -1 0 0 1 9 +2 0 3.5527136788005009e-15 2.1566526342553516e-11 1 1 -2.1566526342553516e-11 9 +2 1.4210854715202004e-14 -6.392808046185853e-76 1 -4.4985387397896432e-62 4.4985387397896432e-62 1 19.124999999972516 +2 33.000000000001307 -3.999999999999126 1 2.1566526342553516e-11 -2.1566526342553516e-11 1 19.124999999972516 +1 -2.6415926535897927 8.1234128950915689 1 5.6543194337140933e-16 +2 33 -4 -1 0 0 1 12 +2 2.8421709430404007e-14 -1.2785616092371706e-75 -1 2.1566526342553516e-11 2.1566526342553516e-11 1 12 +1 -2.6415926535904455 8.123412895091576 1 -5.6543194337117444e-16 +2 33 -4 -1 0 0 1 12 +2 2.8421709430404007e-14 -1.2785616092371706e-75 -1 2.1566526342553516e-11 2.1566526342553516e-11 1 12 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -4.16049991609 1 0 +2 -65 16 1 0 -0 1 4 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 0 2.83950008391 1 0 +2 -65 16 1 0 -0 1 4 +1 0 -4.16049991609 1 0 +2 -65 16 1 0 -0 1 4 +1 0 2.83950008391 1 0 +2 -65 16 1 0 -0 1 4 +1 0 2.83950008391 1 0 +2 -65 -18 1 0 -0 1 4 +1 0 2.83950008391 1 0 +2 -65 -18 1 0 -0 1 4 +1 0 0 0 1 +1 0.00024841030000288811 2 0 -1 +1 -4.7123889803846897 -50 1 0 +2 53.499751589699997 -11.999751589700001 1 0 -0 1 33.000248411299992 +1 1.5707887992667127 0 0 1 +1 65 50 0 1 +1 0 0 0 1 +1 54.998518348079998 50 0 1 +1 -6.2831807553015349 -50 1 0 +2 60.500078944800002 -1.9983999996099999 1 0 -0 1 25.999921055400002 +1 1.0821117570382572 0 0 1 +1 29.02014024647923 2 1.5758285442694932e-26 -1 +1 0 0 0 1 +1 -1.5281856552769534e-16 2 1.5758285442694932e-26 -1 +1 -1.0821054642780075 -50 1 0 +2 5.2998818036899999 -44.0004740595 1 0 -0 1 89.000474059599995 +1 0.28847929844500025 0 0 1 +1 -1.5848104793828522e-06 50 0 1 +7 0 0 1 2 2 -6.3480566594618319e-16 0 17.8336924567 0 + 253.667619105 2 271.48631645500001 2 +7 0 0 5 6 2 23 43.222181183300002 19.507530172599999 43.930901568800003 15.9795434532 44.464822943599998 12.427648101899999 44.8215902775 8.8637394700400005 45 5.2999999999999998 45 + 253.667619105 6 271.48631645500001 6 +1 17.8336924567 25 0 1 +1 34.799999999999997 27 0 -1 +1 0 -22.5 0 1 +1 4.1421356236821243 3.5 0 1 +1 -24.464466094100001 50.464466094099997 -0.70710678118654757 0.70710678118654757 +1 7.7279220614041497 0 1 0 +1 11.313708498984761 3.5 0 1 +1 59.5 3.5 0 1 +1 -3.5964800305756251e-15 25 0 1 +1 0 25 0 1 +7 0 0 1 2 2 -5.0214983573291461e-16 0 29.965332826399997 0 + 365.97542723800001 2 395.77050293600001 2 +7 0 0 5 6 2 -78.862687876999999 16.500914749 -81.842187261500001 11.3402706638 -84.147352448999996 5.7902787984600002 -85.7105434594 -0.0314708573361 -86.494623900099995 -5.98978312823 -86.499977001199994 -11.948795860200001 + 365.97542723800001 6 395.77050293600001 6 +1 29.965332826399997 25 0 1 +1 41.051204139799999 25 0 1 +1 0 0 0 1 +1 39 50 0 1 +1 -3.1416001811202254 -50 1 0 +2 -55.499766644799998 -13.999766644799999 1 0 -0 1 31.000233355999999 +1 0.78539063586838664 0 0 1 +1 0 50 0 1 +1 -68.880362803899999 -44.460120934599999 0.70710678118654757 -0.70710678118654757 +1 12.077212795244037 0 1 0 +1 146.84048373849998 3.5 0 1 +1 24.154425590558795 3.5 0 1 +1 0 3.5 0 1 +1 110.8404837385 3.5 0 1 +1 -21.804949832599998 -50.464466094099997 0.70710678118654757 0.70710678118654757 +1 3.5857864375806114 0 1 0 +1 0.78539816339744817 -22.5 0 1 +1 7.1715728752319245 3.5 0 1 +1 8.3775804095730013 12.727922061357855 -1 0 +2 -68.458904109599999 -1 1 0 -0 1 9 +1 2.0943951023934146 10.60660171779821 1.0467283057891829e-16 1 +1 6.2831853071795862 10.606601717798213 0 1 +1 8.3775804095730013 8.4852813742385749 -1 -1.1308638867425838e-15 +1 0 -17.5 1 0 +1 5.2359877559832082 10.606601717798213 0 1 +1 3.1415926535897913 10.606601717798213 0 1 +1 10.995574287564276 12.727922061357855 -1 0 +2 -68.458904109599999 -1 0 1 -1 0 9 +1 10.995574287564276 8.4852813742385713 -1 0 +1 -4.7123889803846897 -17.5 1 0 +1 8.3775804095730013 15.556349186104043 -1 1.1308638867425838e-15 +2 -6.4589041095899997 -1 1 0 -0 1 11 +1 2.0943951023934146 13.435028842544401 1.0467283057891829e-16 1 +1 6.2831853071795862 13.435028842544401 0 1 +1 8.3775804095730013 11.313708498984752 -1 1.6962958301138756e-15 +1 0 -22 1 0 +1 5.2359877559832082 13.435028842551475 0 1 +1 3.141592653589794 13.435028842551475 0 1 +1 10.995574287564276 15.556349186104045 -1 5.6543194337129208e-16 +2 -6.4589041095899997 -1 0 1 -1 0 11 +1 10.995574287564276 11.313708498984759 -1 0 +1 -4.7123889803846897 -22 1 0 +1 3.1415926535870851 2.7924231826891863 8.174328850962241e-14 1 +1 3.1415926535870859 2.7924231826891863 8.174328850962241e-14 1 +1 0.50000000000000089 0 1 0 +2 0 -42 -1 0 0 1 8.0302016061000003 +1 6.2831853071795862 2.7924231826891863 0 1 +1 0 2.7924231826891863 0 1 +1 -5.7831853071814621 0 1 0 +2 0 -42 -1 0 0 1 8.0302016061000003 +1 3.1415926535870859 2.7924231826891859 8.1822805327238757e-14 1 +1 3.1415926535870859 2.7924231826891859 8.1743288509622398e-14 1 +1 0.50000000000000044 -1.1356582856289599e-15 1 1.9637245312182664e-16 +2 0 0 -1 0 0 1 8.0302016061000003 +1 6.2831853071795862 2.7924231826891863 0 1 +1 0 2.7924231826891863 0 1 +1 -5.7831853071814621 1.135658285627972e-15 1 -1.9637245312159212e-16 +2 0 0 -1 0 0 1 8.0302016061000003 +1 0 -44.5 1 0 +2 0 -42 1 0 -0 1 6.7999999999999972 +1 0 -44.5 1 0 +2 0 -42 1 0 -0 1 6.7999999999999972 +1 0 -44.5 1 0 +2 0 0 1 0 -0 1 6.7999999999999972 +1 0 -44.5 1 0 +2 0 0 1 0 -0 1 6.7999999999999972 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -4.16049991609 1 0 +2 -65 -18 1 0 -0 1 4 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 0 -4.16049991609 1 0 +2 -65 -18 1 0 -0 1 4 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535882988 4.0617064475417965 4.2359744698736479e-14 1 +1 3.1415926535882988 4.0617064475417965 4.2359744698736479e-14 1 +1 0 4.0617064475417965 0 1 +1 6.2831853071795862 4.0617064475417965 0 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 65.698348114799998 26 0 -1 +1 -1.5707963267948966 -26.000000000000007 1 0 +2 -12.1983481148 -55 1 0 -0 1 10 +1 -42.340483738499998 -53 1 0 +1 128.84048373849998 0 -1 0 +1 -86.5 -12.9743979301 0 1 +1 40.025602069900003 0 1 0 +1 28.710068817900002 3.5 0 1 +1 42.145513389709926 3.5 0 1 +1 -68.326309529599996 34.750457374500002 0.50000000000018996 0.86602540378432902 +1 21.072756694829962 0 1 0 +1 -42.394965591099997 53 1 0 +1 44.105034408900003 0 1 0 +1 -3.9269908169943126 -26 1 0 +2 -14.8578643763 55 1 0 -0 1 10 +1 0.78539816339744828 0 0 1 +1 14.6421356237 26 0 -1 +1 -4.7789321881299998 45 -1 0 +1 24.72106781187 52 -1 0 +1 59.8946005755 27.7702704676 -0.8829475928588979 0.46947156278594571 +1 14.510070123260284 52 -1 -1.5748819111832277e-26 +1 86.5 -6.9992591740399996 0 -1 +1 59.999259174039999 0 1 0 +1 20.650701737399999 -45 1 0 +1 32.849298262600001 52 -1 0 +2 1.7763568394002505e-15 -1.2082349010178461e-15 1 0 -0 1 14.125000000000174 +2 -39.999999999998685 -21.999999999999133 1 2.1566526342553516e-11 -2.1566526342553516e-11 1 14.125000000000178 +2 0 0 0 -1 1 0 14.125000000000178 +2 -39.999999999998693 20.000000000000881 1 2.1566526342553516e-11 -2.1566526342553516e-11 1 14.125000000000178 +1 0 1.5707963267948994 1 0 +2 -73 15.199999999999999 1 0 -0 1 7.3999999999999986 +2 0 -1.7763568394002505e-15 -2.1566526342553516e-11 -1 1 -2.1566526342553516e-11 7.4000000000000004 +1 -3.1415926535897931 1.5707963267948994 1 0 +2 -73 15.199999999999999 1 0 -0 1 7.3999999999999986 +2 0 -1.7763568394002505e-15 -2.1566526342553516e-11 -1 1 -2.1566526342553516e-11 7.4000000000000004 +1 -3.1415926535897931 1.5707963267948994 1 0 +2 -73 -26.800000000000001 1 0 -0 1 7.3999999999999986 +2 1.7763568394002505e-15 -2.8692326292656389e-15 1 -2.1566526342553516e-11 2.1566526342553516e-11 1 7.4000000000000004 +1 0 1.5707963267948994 1 0 +2 -73 -26.800000000000001 1 0 -0 1 7.3999999999999986 +2 1.7763568394002505e-15 -2.8692326292656389e-15 1 -2.1566526342553516e-11 2.1566526342553516e-11 1 7.4000000000000004 +2 1.4210854715202004e-14 0 1 0 -0 1 21.40000000002604 +2 1.3073986337985843e-12 -8.8000000000141263 1 2.1566526342553516e-11 -2.1566526342553516e-11 1 21.40000000002604 +1 -5.2123889803850467 1.5707963267948681 1 3.7459866248325585e-15 +2 0 -8.8000000000000007 1 0 -0 1 9.3999999999999986 +2 1.4210854715202004e-14 1.4999557151895715e-11 1 -2.1566526342553516e-11 2.1566526342553516e-11 1 9.4000000000000057 +1 -2.0707963267967844 1.5707963267949072 1 -3.7459866248343832e-15 +2 0 -8.8000000000000007 1 0 -0 1 9.3999999999999986 +2 1.4210854715202004e-14 1.4999557151895715e-11 1 -2.1566526342553516e-11 2.1566526342553516e-11 1 9.4000000000000057 +1 6.7831853071795862 -2.0471392214055937e-15 -1 3.9274490624344521e-16 +2 0 0 1 0 -0 1 10.589384154299999 +1 6.7831853071797985 8.1329470921634783e-16 -1 -3.9274490624339236e-16 +2 0 0 1 0 -0 1 10.589384154299999 +1 -2.070796326794897 -9.5 1 0 +2 0 0 1 0 -0 1 8.7999999999999972 +1 -2.0707963267929452 -9.5 1 0 +2 0 0 1 0 -0 1 8.7999999999999972 +7 0 0 1 2 2 0.78539063586838642 2 0 2 + 24.756193660499999 2 49.5123873211 2 +7 0 0 5 6 2 -77.420310216800004 -35.920310216799997 -80.863544493899994 -32.477075939700001 -83.630701301599998 -28.3577641933 -85.543882073600003 -23.738937226099999 -86.5 -18.8694686131 -86.5 -14 + 24.756193660499999 6 49.5123873211 6 +1 -3.5548453070077812e-11 0 1 0 +7 0 0 5 6 2 -77.365502634999999 -35.974981103600001 -77.376477798099998 -35.9640606185 -77.3874461435 -35.953133281600003 -77.398407665500002 -35.9421990986 -77.409362358500005 -35.931258075000002 -77.420310216800004 -35.920310216799997 + 24.677480660699999 6 24.756193660499999 6 +1 -1.9456542001790292e-15 0 1 0 +7 0 0 5 6 2 -55.5 -45 -60.353986003400003 -45 -65.207972006899993 -44.049952414499998 -69.813699537000005 -42.148921308600002 -73.924655812099999 -39.3986856868 -77.365502634999999 -35.974981103600001 + 0 6 24.677480660699999 6 +7 0 0 5 6 2 53.5 -45 31.699999999999999 -45 9.9000000000000004 -45 -11.9 -45 -33.700000000000003 -45 -55.5 -45 + 0 6 109 6 +7 0 0 5 6 2 0 0 21.800000000000001 0 43.600000000000001 0 65.400000000000006 0 87.200000000000003 0 109 0 + 0 6 109 6 +7 0 0 1 2 2 1.5707887992667127 2 7.5275281845383937e-06 2 + 0 2 52.706734890200003 2 +7 0 0 5 9 3 86.5 -12 86.5 -17.183627878399999 85.482197046099998 -22.367255756799999 83.445585256499996 -27.284071560600001 77.554219149700003 -36.054219149700003 68.784071560599997 -41.945585256500003 63.867255756799999 -43.982197046099998 58.683627878400003 -45 53.5 -45 + 0 6 26.353367445100002 3 52.706734890200003 6 +1 86.5 -6.9992591740399996 0 -1 +7 0 0 1 2 2 1.082111757038257 2 0 2 + 0 2 28.834167653600002 2 +7 0 0 5 6 2 72.706232063000002 20.958205170700001 77.674548047100004 18.3165126335 81.929282422 14.331497071999999 84.978940591300002 9.2560050281099997 86.500015347200005 3.6284438144700002 86.5 -1.99851834808 + 0 6 28.834167653600002 6 +7 0 0 5 6 2 47.082969087899997 34.5823357644 52.207621682899997 31.857509645699999 57.332274278 29.132683526899999 62.456926873 26.407857408200002 67.581579468000001 23.683031289399999 72.706232063000002 20.958205170700001 + 0 6 29.0201402464 6 +7 0 0 1 2 2 0.28847929844518111 2 0 2 + 17.907681323311699 2 43.710801788600001 2 +7 0 0 5 6 2 23.0000015518 43.222180868400002 28.032290530600001 42.200987762300002 32.990839903000001 40.816879762500001 37.840922780699998 39.076902099599998 42.549049793400002 36.9930634157 47.082969087899997 34.5823357644 + 17.9076813233 6 43.710801788600001 6 +1 -5.1756889450789954e-18 0 1 0 +7 0 0 5 6 2 5.2999999999999998 45 8.8637397867299992 45 12.4276487353 44.821590245800003 15.9795444001 44.464822848399997 19.507531426700002 43.930901378999998 23.0000015518 43.222180868400002 + 0 6 17.9076813233 6 +7 0 0 5 6 2 -29.5 45 -22.539999999999999 45 -15.58 45 -8.6199999999999992 45 -1.6599999999999999 45 5.2999999999999998 45 + 0 6 34.799999999999997 6 +1 6.1072783247598822e-16 0 1 0 +7 0 0 5 9 3 -86.5 -12 -86.5 -3.04646093727 -84.741976716099998 5.90707812546 -81.224192715800001 14.3997599683 -71.048196713199999 29.548196713199999 -55.899759968300003 39.724192715800001 -47.4070781255 43.241976716099998 -38.453539062700003 45 -29.5 45 + 0 6 45.519452859700003 3 91.038905719400006 6 +1 -86.5 -13 0 1 +1 -84.5 -13 0 -1 +1 -1.5707963267948966 7 1 0 +2 -29.5 -12 1 0 -0 1 55 +1 -12.1 43 1 0 +1 -1.0821041362360615 7 1 0 +2 5.2999999999999998 -44 1 0 -0 1 87 +1 58.955657449900002 26.004375281800002 0.8829475928588979 -0.46947156278594571 +1 -6.2831825797266694 7 1 0 +2 60.5 -1.9984474343 1 0 -0 1 24 +1 84.5 -6.9992564465899996 0 -1 +1 -4.7123889803846897 7 1 0 +2 53.5 -12 1 0 -0 1 31 +1 -1 -43 1 0 +1 54.5 0 1 0 +1 -3.1415926535897931 7 1 0 +2 -55.5 -14 1 0 -0 1 29 +1 -2.0707963267948974 3 1 0 +2 0 -8.8000000000000007 1 0 -0 1 23 +1 -2.0707963267945773 3 1 0 +2 0 -8.8000000000000007 1 0 -0 1 23 +1 0 -9.75 0 1 +1 6.2831853071795862 -9.75 0 1 +1 3.1415926535900205 -9.75 0 1 +1 3.1415926535900205 -9.75 0 1 +1 -2.0707963267929452 2.3999999999999986 1 0 +1 -2.0707963267929452 3.1415926535897811 1 2.2617277734850035e-15 +1 -2.070796326794897 2.3999999999999986 1 0 +1 -5.2123889803849179 3.1415926535897953 1 -4.2407395752873262e-16 +1 0 -1.7097434579227411e-11 0 1 +1 3.1415926535915513 -1.7097434579227411e-11 8.1987631787945035e-14 1 +1 3.1415926535901266 -6.0973448512413597e-11 1.5266662470432296e-14 1 +1 0 -6.0973448512413597e-11 0 1 +1 0 -1.5707963267948937 0 1 +1 3.141592653589794 -1.5707963267948937 0 1 +1 3.1415926535897931 -3.1415926535897905 0 1 +1 0 -3.1415926535897905 0 1 +1 0 3.1415926535897931 1 -4.2407395752846889e-16 +1 0 -30.100000000000001 1 0 +1 -3.1415926535897931 3.1415926535897962 1 -9.8950590089976048e-16 +1 0 -30.100000000000001 1 0 +1 -3.1415926535897931 0.35000000000000142 1 0 +2 -73 -26.800000000000001 1 0 -0 1 17 +1 -90 -5.7999999999999998 0 -1 +1 21 0 1 0 +1 -56 -5.7999999999999998 0 1 +1 0 0.35000000000000142 1 0 +2 -73 15.199999999999999 1 0 -0 1 17 +2 1.7763568394002505e-15 -1.0928757898653885e-15 1 9.4092055100983861e-65 -9.4092055100983861e-65 1 11.300000000000139 +2 -72.999999999998693 -26.79999999999913 1 2.1566526342553516e-11 -2.1566526342553516e-11 1 11.300000000000139 +2 7.1054273576010019e-15 -1.7763568394002505e-15 0 -1 1 0 11.300000000000139 +2 -72.999999999998693 15.200000000000887 1 2.1566526342553516e-11 -2.1566526342553516e-11 1 11.300000000000139 +1 0 -1.5707963267948937 0 1 +1 3.1415926535897931 -1.5707963267948937 0 1 +1 3.1415926535897931 -3.1415926535897905 0 1 +1 0 -3.1415926535897905 0 1 +1 0 3.1415926535897931 1 -4.2407395752846889e-16 +1 0 -30.100000000000001 1 0 +1 -3.1415926535897931 3.1415926535897793 1 2.1203697876423446e-15 +1 0 -30.100000000000001 1 0 +1 3.1415926535903567 -4.0515146793040913e-11 -7.0678992919588478e-15 1 +1 0 -4.0515146793040913e-11 0 1 +1 -2.0707963267942446 6.2831853071795862 1 0 +1 -2.0707963267942446 2.8000000000000007 1 0 +1 0 -4.0522252220398514e-11 0 1 +1 3.1415926535903562 -4.0522252220398514e-11 -7.0678992919588162e-15 1 +1 -2.0707963267954272 4.7123889803846897 1 0 +1 -2.0707963267954272 4.7123889803846897 1 0 +1 -5.2123889803840378 6.2831853071795862 1 0 +1 -2.070796326794897 2.8000000000000007 1 0 +1 -5.2123889803852199 4.7123889803846897 1 0 +1 -5.2123889803852199 4.7123889803846897 1 0 +1 3.1415926535894734 2.6499999999999986 0 1 +1 3.1415926535894734 2.6499999999999986 0 1 +1 0 2.6499999999999986 0 1 +1 6.2831853071795862 2.6499999999999986 0 1 +1 -2.0707963267945773 2.8000000000000007 1 0 +1 -2.0707963267945773 3.1415926535897953 1 -2.5444437451710733e-15 +1 -2.0707963267948974 2.8000000000000007 1 0 +1 -5.2123889803843699 3.1415926535897563 1 3.9580236035994474e-15 +1 3.1415926535903576 -8.4376949871511897e-15 -7.3506152640163808e-15 1 +1 0 0 0 1 +1 0 0 0 1 +1 3.141592653590358 -2.2204460492503131e-15 -7.350615264016376e-15 1 +1 -1.5707963267948966 21 1 0 +1 0 7.8539816339744828 0 -1 +1 0 0 0 1 +1 -1.5707963267948966 -21 1 0 +1 3.1415926535897927 7.8539816339744828 0 -1 +1 1.5707963267948966 0 0 1 +1 0 0 0 1 +1 -3.1415926535897931 6.2831853071795862 1 0 +1 -3.1415926535897931 -25.199999999999999 1 0 +1 0 3.1415926535897931 0 1 +1 3.1415926535897931 21 -1 0 +1 -3.1415926535897931 4.7123889803846968 1 -2.2617277734851679e-15 +1 -3.1415926535897931 4.7123889803846826 1 2.2617277734851679e-15 +1 0 0 0 1 +1 21 -0.19999999999999929 -1 0 +1 -4.7123889803846897 -21 1 0 +1 3.1415926535897936 10.995574287564276 0 -1 +1 1.5707963267948966 0 0 1 +1 0 0 0 1 +1 0 6.2831853071795862 1 0 +1 0 -25.199999999999999 1 0 +1 0 4.7123889803846897 1 0 +1 0 4.7123889803846968 1 -2.2617277734851668e-15 +1 3.1415926535897931 0 0 1 +1 0 0.35000000000000142 0 -1 +1 0 0 0 1 +1 0 0.15000000000000213 1 0 +1 0 3.1415926535897931 1 -2.9685177026992816e-15 +1 1.5707963267948966 0 0 1 +1 3.1415926535897931 0.25 0 -1 +1 0 0 0 1 +1 42 0.35000000000000142 0 -1 +1 -3.1415926535897931 0.15000000000000213 1 0 +1 -3.1415926535897931 3.1415926535897865 1 2.8271597168564599e-16 +1 1.5707963267948966 0 0 1 +1 21 0.19999999999999929 1 0 +1 3.1415926535897931 3.14159265358979 0 1 +1 1.5707963267948966 -21 -1 0 +1 0 3.1415926535897918 0 1 +1 1.5707963267948966 21 -1 0 +1 0 -21 1 0 +1 3.1415926535897944 4.7123889803846897 0 -1 +1 0 3.1415926535897931 0 1 +1 1.5707963267948966 21 -1 0 +1 -1.9456542001790292e-15 10.5 0 1 +1 109 10.5 0 1 +1 24.756193660500109 10.5 1.0658140967123561e-14 1 +1 0.78539063586838642 -8.5 0 -1 +7 0 0 1 2 2 -1.9456542001790292e-15 1.0000000065000023 24.756193660500006 1.0000000065000307 + 0 2 34.431854355099993 2 +7 0 0 4 5 2 3914.9876571984391 6588.9357458108316 3919.5369442992082 6592.9795689334778 3923.0306047493782 6598.2204543072085 3924.9814343375106 6604.2088212173994 3925.3388513440896 6610.2850677279075 + 0 5 34.4318543551 5 +1 0 -0.60000000000000142 1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0.60000000000000142 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 9.5 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 -0.60000000000000142 1 0 +1 0 0.60000000000000142 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 9.5 +1 0 7.2999999999999972 1 0 +1 0 7.2999999999999972 1 0 +1 0 -18.600000000000001 0 -1 +1 3.1415926535897931 -18.600000000000001 0 -1 +1 -22 -1.00000000006 -1.69176841848e-16 -1 +1 1.5707963267948957 -4.3500000000000014 -1 0 +2 11.159670332199999 -26 1 0 -0 1 7.0000000000000018 +1 -2.0707963267942446 16 1 0 +2 33 -4 1 0 -0 1 24 +1 4.2123889803846888 16 1 0 +2 33 -4 1 0 -0 1 24 +1 5.1559577935007024 -4.3500000000000014 -1 0 +2 19.6958653043 24 1 0 -0 1 7 +1 2.1868953314300001 17 1 0 +1 4.7123889803846888 -4.3500000000000014 -1 0 +2 -15.3220746415 24 1 0 -0 1 7 +1 0 -12 1 0 +2 -40 20 1 0 -0 1 18 +1 -3.1415926535897931 -12 1 0 +2 -40 -22 1 0 -0 1 18 +1 2.9809020006378435 -4.3500000000000014 -1 0 +2 -15.3220746415 -26 1 0 -0 1 7 +1 -2.0812021546700001 -19 -1 0 +1 0 -18.600000000000001 0 -1 +1 0 6.3999999999999986 0 -1 +1 3.1415926535897931 -18.600000000000001 0 -1 +1 42 6.3999999999999986 0 -1 +1 20.999999999749999 13 -1 0 +1 1.5707963267948959 0.39999999999999858 0 -1 +1 0 6.6000000000000014 0 1 +1 0 0.39999999999999858 0 -1 +1 109 6.6000000000000014 0 1 +1 0 -1 0 1 +1 54.5 13.200000000000003 1 0 +1 0 -11.5 0 1 +1 -3.1415926535897931 -6.2000000000000028 1 0 +1 -3.1415926535897931 6.2831853071795862 1 0 +1 1.5707963267948977 0 0 1 +1 -4.7123889803846897 -6.2000000000000028 1 0 +1 -4.7123889803846897 6.2831853071795862 1 0 +1 1.5707963267948961 0.39999999999999858 0 -1 +1 0 13.000000000000014 0 1 +1 1.5707963267948966 6.9992564465900138 0 1 +1 0 0.39999999999999858 0 -1 +1 1.0821082118928551 0 0 1 +1 -6.2831825797266694 -6.2000000000000028 1 0 +1 -6.2831825797266694 6.2831853071795862 1 0 +1 1.5707963267948966 3.3530659001913872 0 1 +1 0 0.39999999999999858 0 -1 +1 0.4886921905584744 0 0 1 +1 -1.0821041362360615 -6.2000000000000028 1 0 +1 -1.0821041362360615 6.2831853071795862 1 0 +1 1.5707963267948966 -12.100000000000001 0 1 +1 0 0.39999999999999858 0 -1 +1 -1.5707963267948966 -6.2000000000000028 1 0 +1 -1.5707963267948966 6.2831853071795862 1 0 +1 0.48869219055847424 1.9539925233402755e-14 3.533949646070618e-17 1 +1 -4.7123889803846897 5.3000000000000025 1 -5.6543194337129189e-16 +1 0 -6.9295680305003771e-11 0 1 +1 -4.7123889803846897 -11.157004223084414 1 4.5234555469703351e-15 +1 -1.0821041362367176 4.7123889803846541 1 3.2714276723620588e-14 +2 5.2999999999999998 -44 1 0 -0 1 86.200000000000003 +1 -4.7123889803846897 17.86313602339483 1 0 +1 1.08210839785271 6.8036243305868993e-11 -2.9596327173063112e-08 0.99999999999999956 +1 0 -7.1054273576010019e-15 0 1 +1 55.619498734399997 26.872186295799999 0.8829475928588979 -0.46947156278594571 +1 0 3.1415926535726557 0 1 +1 -1.5707963267933813 1.9985085292477582 0.99999999999903522 1.3890803147198231e-06 +1 -6.283182579726569 4.7123889803846195 1 9.0286369603148025e-15 +2 60.5 -1.9984474343 1 0 -0 1 23.200000000000003 +1 0 12.000000000000014 1 0 +1 1.570796326794897 4.7123889803846852 0 1 +1 0 0 0 1 +1 83.700000000000003 1.42108547152e-14 0 -1 +1 0 0 0 1 +1 6.2831853071795862 53.5 -1 0 +1 -4.7123889803846897 4.712388980384703 1 -2.8271597168564591e-15 +2 53.5 -12 1 0 -0 1 30.200000000000003 +1 -1.5707963267948966 -55.5 1 0 +1 1.5707963267948959 7.8539816339744828 -1.4135798584282337e-16 -1 +1 1.5707963267948966 0 0 1 +1 0 -42.200000000000003 1 0 +1 0 3.1415926535897976 0 1 +1 3.1415926535897931 14.000000000000012 -1 1.1308638867425838e-15 +1 -3.1415926535897931 4.7123889803846941 1 0 +2 -55.5 -14 1 0 -0 1 28.199999999999999 +1 -4.7123889803846897 12.000000000000014 1 0 +1 1.5707963267948954 10.995574287564276 1.4135798584282297e-16 -1 +1 1.5707963267948966 0 0 1 +1 -83.700000000000003 1.42108547152e-14 0 -1 +1 0 0 0 1 +1 -4.7123889803846897 -29.5 1 0 +1 -1.5707963267948966 4.7123889803846897 1 0 +2 -29.5 -12 1 0 -0 1 54.200000000000003 +1 0 0 0 1 +1 0 42.200000000000003 1 0 +1 1.4101056738434032 0 0 1 +1 0.16069065295212756 -16.350000000000001 0 -1 +1 0 0 0 1 +1 -4.7123889803846897 -8.4500000000000028 1 0 +1 -0.18145406132329089 9.8994949366116796 1 -2.5194662674586674e-15 +1 1.4101056738429469 0 0 1 +1 0 0 0 1 +1 2.9809020006376659 -16.350000000000001 0 -1 +1 -0.16069065295149287 -8.4500000000000028 1 0 +1 4.3702442661097365 9.8994949366116636 1 1.2597331337293282e-15 +1 3.1415926535891403 12.399999999999999 0 1 +1 3.1415926535891403 12.399999999999999 0 1 +1 6.2831853071795862 12.399999999999999 0 1 +1 0 12.399999999999999 0 1 +1 6.2267541202943493 12.399999999999999 0 1 +1 0 -0.75 0 -1 +1 -2.070796326794897 20.100000000000001 1 0 +1 -4.1651914291879963 33.941125496954292 1 -2.3030974016375585e-15 +1 0.44356881311601309 -6.3999999999999986 0 1 +1 -4.2688201672590118 -8.4500000000000028 1 0 +1 0.74538318215558874 9.8994949366116671 1 0 +1 0 -6.3999999999999986 0 1 +1 1.8598365619409338 12.399999999999999 0 1 +1 0.78175609164126958 -0.75 0 -1 +1 -2.0707963267948974 20.100000000000001 1 0 +1 -4.1651914291880043 33.941125496954278 1 0 +1 -1.5707963267948966 -8.4500000000000028 1 0 +1 3.2743133833641362 9.8994949366116707 1 -4.5445295748724946e-15 +1 0.04001067435396103 -0.35000000000000142 0 1 +1 1.5307856524408725 -16 0 -1 +1 -3.1415926535897931 -12 1 0 +1 -3.1415926535897931 -7.8999999999999986 1 0 +1 -1.5707963267949041 25.455844122715707 1 1.2080397691164975e-15 +1 -1.5707963267948966 -4.3500000000000014 1 0 +1 0 0 0 1 +1 -1.5707963267948966 -8.4500000000000028 1 0 +1 2.8997986029673077 9.8994949366116742 1 -2.3208433350126737e-15 +1 0 -12 1 0 +1 3.1015819792358323 -0.35000000000000142 0 1 +1 0 -16 0 -1 +1 -1.1102230246251565e-16 -7.8999999999999986 1 0 +1 1.5707963267948966 25.45584412271571 1 0 +1 1.5307856524409176 0 0 1 +1 -3.1816033279438178 -4.3500000000000014 1 0 +1 -3.1816033279438178 -8.4500000000000028 1 0 +1 1.2889916018187035 9.8994949366116671 1 0 +1 0 0.20000000000000284 0 1 +1 1.0194793576711694 0 0 1 +1 1.1948180779236377 -9.25 0 -1 +1 -4.7123889803846897 2.25 1 0 +1 -4.7123889803846897 -1.8500000000000014 1 0 +1 6.2693262104111263 5.6568542494923353 -1 8.7120785037670929e-15 +1 1.0194793576662553 0.20000000000000284 0 1 +1 0.09218413966255222 0 0 1 +1 0 -9.25 0 -1 +1 -2.4980915447987089 -11.5 1 0 +1 -2.4980915447987089 -7.3999999999999986 1 0 +1 -2.094395102395155 35.355339059327363 1 6.4440492089393225e-15 +1 -0.55131696912372774 2.25 1 0 +1 -0.55131696912372774 -1.8500000000000014 1 0 +1 2.1082541991584645 5.6568542494923948 -1 -1.0454494204520488e-14 +1 6.0413912565571337 9.3338095116624267 -1 4.6416866700253963e-15 +2 -64.979991993599995 -23 1 0 -0 1 6.6000000000000014 +1 -69.434267906800002 -16.399999999999999 -1 0 +1 -3.1554517503582504 6.2225396744416352 1 -4.3560392519497295e-15 +2 -73.888543819999995 -12 1 0 -0 1 4.4000000000000057 +1 -2.0943951023951546 35.921024484276664 1 -1.2888098417857644e-14 +2 -56 -0.99999999994099997 1 0 -0 1 25.399999999999999 +1 -1.0333384544313278 6.2225396744416086 1 5.2272471022403906e-15 +2 -73.888543819999995 10 1 0 -0 1 4.4000000000000057 +1 -69.434267906800002 14.4 1 0 +1 10.713769562588084 9.3338095116624213 -1 1.1604216675063745e-15 +2 -64.979991993599995 21 1 0 -0 1 6.6000000000000014 +1 1.5707963267948966 26.021529547664947 1 0 +2 -40 20 1 0 -0 1 18.399999999999999 +1 9.2433238994460787 9.3338095116624178 -1 2.519466267461389e-15 +2 -15.3220746415 24 1 0 -0 1 6.5999999999999996 +1 2.1868953314300001 17.399999999999999 1 0 +1 10.170161142924968 9.3338095116624302 -1 0 +2 19.6958653043 24 1 0 -0 1 6.6000000000000014 +1 -4.1651914291879963 34.506810921903536 1 -2.3030974016357815e-15 +2 33 -4 1 0 -0 1 24.399999999999999 +1 -4.1651914291880043 34.506810921903522 1 0 +2 33 -4 1 0 -0 1 24.399999999999999 +1 6.4159060369539329 9.3338095116624231 -1 4.5445295748441745e-15 +2 11.159670332199999 -26 1 0 -0 1 6.5999999999999996 +1 -2.0812021546700001 -19.399999999999999 -1 0 +1 7.5118369196995243 9.3338095116624302 -1 0 +2 -15.3220746415 -26 1 0 -0 1 6.5999999999999996 +1 -1.5707963267949041 26.021529547664947 1 0 +2 -40 -22 1 0 -0 1 18.399999999999999 +1 4.5516983274328577 25.73868683519559 -6.2803698342399443e-15 1 +1 4.530934919061969 9.6166522241275079 2.0411201961279885e-14 -1 +1 1.6108070011489577 25.738686835164795 -3.9252311466971685e-16 1 +1 6.0013805822033959 9.6166522241671046 3.454203409093465e-14 -1 +1 5.9410405929046277 9.6166522241370487 -1.5700924586837731e-15 1 +1 4.8451097101590328 9.6166522241370487 0 -1 +1 5.6268658018026683 9.6166522241028929 4.1607450152665894e-13 1 +1 -0.23455854045144608 34.223968209442354 -1.570092458591166e-14 -1 +1 5.0142033494178504 9.6166522241749703 6.6885938736221848e-13 1 +1 4.1323590179022194 34.223968209406124 -6.2803698343870669e-15 -1 +1 5.4577721625402784 9.6166522241370469 0 1 +1 4.5309349190613997 9.6166522241370522 0 -1 +1 5.9410405929040522 9.6166522241275096 2.0411201961279949e-14 1 +1 1.7314869797467407 25.738686835195587 -7.4579391781599338e-15 -1 +1 4.6723783060306214 25.738686835164799 0 1 +1 4.4705949297622354 9.6166522241671011 -3.2971941632256214e-14 -1 +1 6.0013805822033923 9.6166522241370487 -1.5700924586837731e-15 1 +1 0.53745787236356957 5.9396969619670026 -3.9252311467094828e-15 1 +1 1.5569372300266175 5.939696961967214 5.0870995662145623e-13 1 +1 0.49588058206479246 35.638181771781355 2.826166425674748e-14 1 +1 1.5985145203284739 35.638181771825067 3.6112126547924312e-14 1 +1 0.53745787236337583 5.9396969619671998 5.5502768411700627e-13 1 +1 1.5569372300264359 5.9396969619669919 -1.1775693440128262e-15 1 +1 4.4705949297622043 9.6166522241370558 -1.5700924586837781e-15 -1 +1 0 0.60000000000000142 1 0 +1 0 0.60000000000000142 1 0 +1 0 -0.60000000000000142 1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 -0.60000000000000142 1 0 +1 0 11.799999999999997 1 0 +1 0 11.799999999999997 1 0 +1 -5.1756889450789954e-18 10.5 0 1 +1 17.907681323283025 10.5 0 1 +1 0.28847929844531212 -8.5 0 -1 +7 0 0 1 2 2 -5.1756889450789954e-18 1.0000000065000023 17.907681323283025 1.0000000065000023 + 0 2 25.199528972900001 2 +7 0 0 3 4 2 3809.7523843202916 6615.8091032910925 3805.3130884318643 6611.8630504339626 3801.2701848794363 6607.4711221031448 3797.7043768370017 6602.7210854319583 + 0 4 25.199528972900001 4 +1 6.1072783247598822e-16 10.5 0 1 +1 91.038905719399864 10.5 -1.4210854622831415e-14 1 +7 0 0 1 2 2 6.1072783247598822e-16 1.0000000065000023 91.038905719400006 1.0000000065000023 + 2.36494886716e-12 2 126.615135948 2 +7 0 0 5 12 4 3916.2332706689663 6634.1955342226438 3909.0222117505714 6642.3079506971972 3899.8801731149406 6648.7039355087109 3889.3485816588186 6652.7657390043614 3872.7443758416875 6654.8640538150139 3856.7667996718374 6651.1825260991227 3851.611740394967 6649.3240459879235 3845.2658218343345 6646.1358339043345 3839.5213252695162 6642.0376936891371 3838.229347933911 6641.0445826708183 3836.9765406100423 6640.008427330331 3835.7621935027942 6638.9290043784631 + 2.36494886716e-12 6 76.749811654799998 3 115.12646151200001 3 126.615135948 6 +1 0 0 0 1 +1 65.698348114799998 26 0 -1 +1 0.78539816339744817 0 0 1 +1 7.1715728752319245 26 0 1 +1 -1.5707963267948966 -2.5000000054999987 1 0 +2 32.049223906965103 -47.84266267101868 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 10 +1 0 -34.750000002699998 0 1 +1 0.00024841030000288811 36.750000002699998 0 -1 +1 32.849174057399999 28.500000005499999 1 1.0815229852e-16 +1 -1.3712025711929532 -39.959558569752915 0.99796128102408377 0.063822265525205368 +1 0 1.4999999967999997 0 1 +1 0.00024841030000288811 0.50000000320000026 0 -1 +1 3874.2539043120478 6552.727854740092 0.74740830984202555 0.66436497377502279 +1 54.499999999998998 1.0000000065000023 1 1.3037481390099999e-16 +1 0 15.2499999973 0 1 +1 110.8404837385 15.2499999973 0 1 +1 3.5857864375806114 23.499999994500001 1 0 +1 41.346772414308035 -42.70326035853023 -0.75079434591730465 0.66053603243018244 +1 0 0 0 1 +1 4.1421356236821243 26 0 1 +1 0.78539816339744828 0 0 1 +1 14.6421356237 26 0 -1 +1 -3.9269908169943126 -2.5000000054999987 1 0 +2 27.682868954423437 62.102814594640591 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 10 +1 3822.7572889115436 6627.3690538347773 -0.74740830984202555 -0.66436497377502279 +1 17.8336924567 15.2499999973 0 1 +1 34.799999999999997 36.750000002699998 0 -1 +1 24.72106781187 28.500000005499999 1 -1.7624454716500001e-16 +1 18.262707531814485 51.479941498075824 -0.99796128102408377 -0.063822265525205368 +1 11.313708498984761 15.2499999973 0 1 +1 59.5 15.2499999973 0 1 +1 7.7279220614041497 23.499999994500001 1 0 +1 37.559353560248219 58.18964245340878 0.66053603243018244 0.75079434591730465 +1 21.072756694829962 23.499999994500001 1 0 +1 82.33467866018529 45.30703239973861 -0.55425234378412813 0.83234868859739353 +1 42.145513389709926 15.2499999973 0 1 +1 28.710068817900002 15.2499999973 0 1 +1 -3.5964800305756251e-15 15.2499999973 0 1 +1 0 15.2499999973 0 1 +1 29.965332826399997 25 0 1 +1 41.051204139799999 25 0 1 +7 0 0 1 2 2 -3.5964800305756251e-15 23.499999994500001 29.965332826399997 23.499999994500001 + 0 2 42.135545467599997 2 +7 0 0 4 5 2 94.014303448269231 27.767150999652792 98.142692126841411 21.567341837802559 101.19177941974887 14.64671980802277 102.96968448638404 7.295837316188333 103.45174727082278 -0.1371295502914478 + 0 5 42.135545467599997 5 +1 3916.897635642742 6633.4481259128006 -0.66436497377502279 0.74740830984202555 +1 0 1.4999999967999997 0 1 +1 40.025602064699996 23.499999994500001 1 0 +1 103.51722647069492 -1.1606392431436827 -0.063822265525205368 0.99796128102408377 +1 0 -34.750000002699998 0 1 +1 39 15.2499999973 0 1 +1 44.105034408900003 23.499999994500001 1 0 +1 55.291474289485507 61.864372218117843 -0.99796128102408377 -0.063822265525205368 +1 7.6239253314467536e-16 25 0 1 +1 0.28847931623654521 -25 0 1 +7 0 0 1 2 2 7.6239253314467536e-16 23.499999994500001 17.8336924567 23.499999994500001 + 0 2 25.199526734799999 2 +7 0 0 3 4 2 -9.3461267955577476 47.932832768215661 -3.6125099169060988 49.483144542096767 2.2768471871825344 50.457603414461005 8.2043234539934016 50.836681211754453 + 0 4 25.199526734799999 4 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 1.4999999967999997 0 1 +1 1.082111757038257 1.4999999967999997 0 1 +1 3780.3947549866007 6566.6607198826459 -0.34802190555935003 -0.93748640163515917 +1 1.0821117570382572 -34.750000002699998 0 1 +1 29.020140246479222 36.750000002699998 3.8197890536866956e-16 -1 +1 0 -34.750000002699998 0 1 +1 -3.6350103925633875e-16 36.750000002699998 -2.0041600807941492e-16 -1 +1 14.510070123260286 28.500000005499999 1 1.5748819111832277e-26 +1 -45.179333700186454 30.157727161729966 -0.85118477210993893 -0.52486615791852242 +1 -1.0821054642780075 -26.500000005499999 1 0 +2 13.884653296628901 -37.982338348858626 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 89.000474059599995 +1 -1.0821054642780075 0.99999999349999769 1 0 +2 3868.8812702757009 6549.2894879246305 -0.74740830984202555 -0.66436497377502279 -0.66436497377502279 0.74740830984202555 89.000474059599995 +1 0 0 0 1 +1 54.998518348079998 50 0 1 +1 -6.2831807553015349 -26.500000005499999 1 0 +2 -43.883673678354846 0.4111036466340332 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 25.999921055400002 +1 0 0 0 1 +1 -6.2831807553015349 0.99999999349999769 1 0 +2 3799.7194773962219 6544.0091095815624 -0.74740830984202555 -0.66436497377502279 -0.66436497377502279 0.74740830984202555 25.999921055400002 +1 59.999259174039999 23.499999994500001 1 0 +1 -69.511422039042657 -6.238934046520523 0.063822265525205368 -0.99796128102408377 +1 1.5707887992667127 -34.750000002699998 0 1 +1 65 15.2499999973 0 1 +1 3783.6093160186015 6522.9979890082532 0.66436497377502279 -0.74740830984202555 +1 1.5707887992667127 1.4999999967999997 0 1 +1 -4.7123889803846897 -26.500000005499999 1 0 +2 -36.259309106677648 -9.1230812469638902 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 33.000248411299992 +1 -4.7123889803846897 0.99999999349999769 1 0 +2 3811.5961279199028 6541.1847885931647 -0.74740830984202555 -0.66436497377502279 -0.66436497377502279 0.74740830984202555 33.000248411299992 +1 0.78539063586838664 0 0 1 +1 0 50 0 1 +1 -3.1416001811202254 -26.500000005499999 1 0 +2 72.645635233532943 -4.1624226385372154 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 31.000233355999999 +1 -3.1416001811202254 0.99999999349999769 1 0 +2 3894.3920135667768 6612.1054227945278 -0.74740830984202555 -0.66436497377502279 -0.66436497377502279 0.74740830984202555 31.000233355999999 +1 128.84048373849998 23.499999994500001 1 -1.9737298215599999e-16 +1 62.002263655744009 -43.923000725697982 0.99796128102408377 0.063822265525205368 +1 146.84048373849998 15.2499999973 0 1 +1 24.154425590558795 15.2499999973 0 1 +1 12.077212795244037 23.499999994500001 1 0 +1 87.943000936809767 -33.706696865081838 -0.66053603243018244 -0.75079434591730465 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 4.0617064475417974 0 1 +1 6.2831853071795862 4.0617064475417974 0 1 +1 3.1415926535883187 4.0617064475417974 4.8982359651350012e-14 1 +1 3.1415926535883161 4.0617064475417974 4.8107674657575902e-14 1 +1 -3.36936457992371 3.000000000000004 1 -6.696148482975058e-16 +2 -49.696382132708329 13.112770568822746 -0.25806358351695385 -0.96612793503882721 0.96612793503882721 -0.25806358351695385 24.000006407600001 +1 0 -8.8817841970012523e-16 0 1 +1 1.3430178624772864 2.6645352591003757e-15 -7.4014868308343778e-17 -1 +1 2.6528038377832193 1.7763568394002505e-15 0 1 +1 0 -2.6645352591003757e-15 0 -1 +1 -0.26101455623919623 -3.0000000000000022 1 1.3562160857909777e-15 +2 -65.154312547671822 -13.758183429330186 0.25806358351695385 0.96612793503882721 0.96612793503882721 -0.25806358351695385 6.9999338036700003 +1 1.3097889473595474 -1.7763568394002505e-15 -3.7007434154171883e-17 1 +1 -5.9988333129500004 0 0 -1 +1 2.6528033619741471 -8.8817841970012523e-16 7.4014868308343753e-17 1 +1 0 0 0 -1 +1 -4.9734047232834868 3 1 0 +2 -9.118988589368124 2.2741005472885458 0.96612793503882721 -0.25806358351695385 0.25806358351695385 0.96612793503882721 14.000003953499998 +1 0 2.6645352591003757e-15 0 1 +1 1.309780684061743 2.6645352591003757e-15 0 -1 +1 0 -1.7763568394002505e-15 0 1 +1 -4.7123868495258172 -3 1 0 +2 -9.119004143976948 -28.725855906530658 0.25806358351695385 0.96612793503882721 0.96612793503882721 -0.25806358351695385 16.9999549184 +1 -27.894832051175751 -33.142981131219607 0.25806358351695385 0.96612793503882721 +1 0.65978922739989887 1.7763568394002505e-14 0 1 +1 0 1.5987211554602254e-14 0 1 +1 2.7440918052175172 0 0 -1 +1 -5.6233963275691625 -2.9999999999999982 1 0 +2 -13.822359283184895 -46.334221941634944 -0.96612793503882721 0.25806358351695385 0.25806358351695385 0.96612793503882721 16.999987833900001 +1 -5.7696806059859771 3 1 0 +2 -51.144687573593529 -62.059882012100012 -0.25806358351695385 -0.96612793503882721 0.96612793503882721 -0.25806358351695385 23.499995422299996 +1 0 8.8817841970012523e-16 0 1 +1 1.9310208807553817 -4.4408920985006262e-15 0 1 +1 -2.2678693845066817 2.9999999999999982 1 0 +2 -51.144718498682636 -62.059712475713198 0.96612793503882721 -0.25806358351695385 0.25806358351695385 0.96612793503882721 23.499997080899998 +1 0 -8.8817841970012523e-16 0 1 +1 0.8737282011488583 1.7763568394002505e-14 0 -1 +1 0 1.7763568394002505e-14 0 1 +1 5.9988333129000004 0 4.4408920985e-16 1 +1 -3.1415919177444529 -3 1 0 +2 -68.250524792154522 -25.349515528333896 -0.96612793503882721 0.25806358351695385 0.25806358351695385 0.96612793503882721 16.999971543900003 +1 -50.278293533569851 -23.9409366326108 0.25806358351695385 0.96612793503882721 +1 0 -3 -1 0 +1 1.3097806864402159 -1.7763568394002505e-15 0 1 +1 -5.9988333129500004 0 0 1 +1 0 -3.5527136788005009e-15 0 1 +1 2.6528033589610924 -1.7763568394002505e-15 0 -1 +1 -0.26101778683788013 -3 1 0 +2 -65.154333038643955 -13.758192184926623 0.25806358351695385 0.96612793503882721 0.96612793503882721 -0.25806358351695385 16.999954907700001 +1 -1.7985698767941918 3 1 0 +2 -49.69637702359536 13.112775110171606 0.96612793503882721 -0.25806358351695385 0.25806358351695385 0.96612793503882721 14.000003959200001 +1 0 -1.7763568394002505e-15 0 1 +1 1.3430323514569551 0 0 -1 +1 -59.939572883958128 -21.360300797441262 0.25806358351695385 0.96612793503882721 +1 0 3 -1 0 +1 0 -4.4408920985006262e-15 0 -1 +1 5.9988333129000004 0 0 1 +1 -3.1415988050231052 -3 1 0 +2 -68.250625190379424 -25.349431192644236 -0.96612793503882721 0.25806358351695385 0.25806358351695385 0.96612793503882721 7.0000925631999991 +1 0.87371647200405933 -5.3290705182007514e-15 -7.4014868308343765e-17 1 +1 0 5.3290705182007514e-15 0 -1 +1 -2.2678687398204804 3.0000000000000018 1 0 +2 -51.144718639936556 -62.059714835284247 0.96612793503882721 -0.25806358351695385 0.25806358351695385 0.96612793503882721 33.499997306399997 +1 1.9310213650931303 8.8817841970012523e-16 0 1 +1 0 8.8817841970012523e-16 0 1 +1 -5.769680315482673 3.0000000000000053 1 -6.4733833834868653e-16 +2 -51.144676718573891 -62.059964958759927 -0.25806358351695385 -0.96612793503882721 0.96612793503882721 -0.25806358351695385 33.499988350499997 +1 2.7440933653514317 0 0 1 +1 0 -7.9936057773011271e-15 0 -1 +1 -5.623401915451872 -3 1 0 +2 -13.822176754659294 -46.334209340835244 -0.96612793503882721 0.25806358351695385 0.25806358351695385 0.96612793503882721 7.0001627315000015 +1 0.65977552531540073 -8.8817841970012523e-15 0 1 +1 0 8.8817841970012523e-16 0 -1 +1 -18.233552700787477 -35.723616966389145 0.25806358351695385 0.96612793503882721 +1 -4.7123821972672353 -3.000000000000008 1 1.3562167389343574e-15 +2 -9.1190156537063984 -28.725841180590635 0.25806358351695385 0.96612793503882721 0.96612793503882721 -0.25806358351695385 6.9999367231199994 +1 1.30978831657543 1.7763568394002505e-15 7.4014868308343765e-17 1 +1 0 1.7763568394002505e-15 0 -1 +1 -4.9734058683332627 3 1 0 +2 -9.1189864117103188 2.2740940333746549 0.96612793503882721 -0.25806358351695385 0.25806358351695385 0.96612793503882721 24.000006379400002 +1 2.6528038411433581 0 0 1 +1 0 2.6645352591003757e-15 0 -1 +1 -4.940161570967236 -3.0000000000000115 1 1.945101673855245e-15 +2 5.437322676362804 29.64410866615593 -0.96612793503882721 0.25806358351695385 0.25806358351695385 0.96612793503882721 7.0000700167899979 +1 0.91324626536332554 3.5527136788005009e-15 -1.8503717077085941e-17 1 +1 0 0 0 -1 +1 -2.000573797656406 3 1 0 +2 -6.3922716618436759 27.628574443814738 -0.25806358351695385 -0.96612793503882721 0.96612793503882721 -0.25806358351695385 5 +1 1.1410188559312662 0 0 1 +1 -5.2369399972107544e-06 0 0 1 +1 -3.3693587181442699 -3 1 0 +2 5.4371948690319005 29.644052618214214 0.25806358351695385 0.96612793503882721 0.96612793503882721 -0.25806358351695385 16.999958414800005 +1 0.91325651601043489 0 0 1 +1 2.0005700730307119 0 0 -1 +1 -3.1415926535897931 3 1 0 +2 -6.3922969596138142 27.628581201132253 -0.25806358351695385 -0.96612793503882721 0.96612793503882721 -0.25806358351695385 5 +1 -3.141599291424011 -2.9999999999999982 1 0 +2 -48.665961036719423 44.095696091760509 -0.96612793503882721 0.25806358351695385 0.25806358351695385 0.96612793503882721 7.0000631979800012 +1 0.42977063902569757 5.3290705182007514e-15 3.7007434154171883e-17 1 +1 1.1410190499384267 1.7763568394002505e-15 1.4802973661668756e-16 -1 +1 -1.5707963267948966 3.0000000000000027 1 -1.5568093536019514e-15 +2 -39.417032846577882 36.44985774081578 0.96612793503882721 -0.25806358351695385 0.25806358351695385 0.96612793503882721 5 +1 0 -8.8817841970012523e-16 0 1 +1 2.0005750499578809 0 0 1 +1 -1.5707942439259173 -3 1 0 +2 -48.665883218529473 44.095590561284403 0.25806358351695385 0.96612793503882721 0.96612793503882721 -0.25806358351695385 16.999958491399994 +1 0.4297758537132072 0 0 1 +1 0 0 0 -1 +1 -1.141022555939335 3 1 0 +2 -39.417008923704401 36.449851350748546 -0.25806358351695385 -0.96612793503882721 0.96612793503882721 -0.25806358351695385 5 +1 16.866794229852157 -103.63784614149513 -0.986174441105656 -0.16571050573197635 +1 3911.6304895817957 6499.3691201698348 -0.67542413643493326 -0.73742947860871733 +1 40.617501793599956 13.749999999500133 1.5744981088918179e-16 1 +1 -70.371661224885955 -8.4562574013738825 0.063822265525047037 -0.99796128102409387 +1 21.673535471459999 7.2187374316433035e-14 1 4.8753960549998093e-17 +1 2.7295691493399539 13.749999999500007 1.5744981088918179e-16 1 +1 3784.2955411794146 6520.7207913125085 0.66436497377490433 -0.74740830984213102 +1 21.673535471459907 27.499999999000067 1 1.4252296378999826e-16 +1 3971.8289644939905 6681.7051654534916 -0.26702133464174482 -0.96369061780539378 +1 176.51345050295157 3.0543978702276 -0.80345686570370878 -0.59536296908152819 +1 177.95980423359791 27.159349402270202 0.16571050573197635 -0.986174441105656 +1 3958.1371055132831 6701.596712028072 0.73742947860871733 -0.67542413643493326 +1 169.15490339098176 49.750585334153385 0.93066370356847528 -0.36587575877640366 +1 3937.2957309696135 6713.9873264966445 0.95875574290157872 0.2842312886598552 +1 -19.986103661089601 111.22585222703539 0.986174441105656 0.16571050573197635 +1 3750.3722557860119 6646.0672012500845 0.67542413643493326 0.73742947860871733 +1 -57.261732977796171 58.908724488880189 0.28337080471986642 0.9590104207110659 +1 3753.179616828862 6581.8903119541546 -0.36671077168156607 0.93033499876803005 +1 3847.31916928172 6495.3920133731162 -0.97634473019227075 0.21621972117682059 +1 -36.276058921840587 -67.201594192249274 -0.63659672819119151 0.77119686569401358 +1 0.72401602240453478 4.2632564145606011e-14 0 1 +1 0 -4.4999310944149329e-09 0 1 +1 -5.8338234331449961 3 1 0 +1 0 4.2632564145606011e-14 0 1 +1 0.085806014717555584 9.0000000024000499 0 1 +1 -5.8338234331449961 -5.999999997499998 1 0 +1 -5.9221504597538477 3.0000000048999422 1 9.9982531167281116e-15 +1 -5.9221504596673062 12.000000002400498 1 -8.2808033690757895e-14 +1 0 -6.9994854356991709e-10 0 1 +1 -5.9221504597528085 -6.0000000017999762 1 -2.2617277734800597e-15 +2 3772.740180424335 6630.563129428876 0.66436497377502279 -0.74740830984202555 0.74740830984202555 0.66436497377502279 11.5 +1 3.1415926535968892 -7.0004091412556591e-10 0 1 +1 0.36103484742573938 3.0000000049000106 1 -3.0298782539849464e-15 +1 0 -1.4999999940000421 0 1 +1 3766.2939694470901 6640.4092603888193 0.93390620162811866 0.35751812060445259 +1 -2.780555401603459 3.0000000053000022 1 0 +7 0 0 1 2 2 0 -5.9999999925000438 3.1415926535859864 -5.9999999973999536 + -18.064157756899998 2 18.064157756899998 2 +7 0 0 5 15 5 3763.9592168532117 6639.5154700329913 3762.2721924047069 6638.8696477160156 3760.7119748717755 6637.8925789231844 3759.3655242220775 6636.617178101541 3757.2452567282098 6633.6071557661789 3756.4205598707335 6630.0188910326005 3756.3703200554241 6628.1649620779262 3756.9994717373393 6624.5372993502842 3758.9536093225533 6621.4168642840223 3760.2290101440476 6620.0704136341919 3763.2390324792518 6617.9501461400505 3766.8272972126642 6617.125449282159 3768.6812261673217 6617.0752094665668 3770.4950575311677 6617.3897853073458 3772.1820819797226 6618.0356076239641 + -18.064157756899998 6 -9.0320788784400001 3 0 3 9.0320788784400001 3 18.064157756899998 6 +1 3.1415926535859859 -2.9994851047376869e-10 0 1 +1 -2.7805554015991327 12.000000002799531 1 8.0446733488448614e-14 +1 3.0532680315688072 -2.9995561590112629e-10 -4.9343245552602314e-17 1 +1 1.1935149577406279 -9.0000000101999262 -1.2335811388150579e-16 1 +1 3774.5168733050687 6618.9294128112178 -0.93390620162811866 -0.35751812060445259 +1 0 -7.999858553375816e-10 0 1 +1 -4.8144415177009865 -6.0000000045999968 1 0 +1 -4.8144415176422575 2.9999999982000034 1 0 +1 1.3981947154945544 -1.000159954855917e-10 0 1 +1 -0.27465414794184356 2.9999999962999979 1 0 +1 -0.27465414735536026 -6.0000000020000002 1 0 +7 0 0 1 2 2 0 -7.9999999999998508 3.1415926535951897 -8.0000000000001492 + 4.4524817489300004 2 10.7356670561 2 +7 0 0 1 2 2 0 -8.0000000000001492 3.1415926536647873 -7.9999999999998508 + 10.7356670561 2 17.018852363299999 2 +7 0 0 1 2 2 0 0.99999999750014723 3.1415926535950049 0.9999999974998488 + 0.97681177770100003 2 7.2599970848800002 2 +7 0 0 1 2 2 0 0.9999999974998488 3.1415926536649721 0.99999999750014723 + 7.2599970848800002 2 13.5431823921 2 +7 0 0 1 2 2 3.1415926535965206 8.9999999954000103 6.2831853071795862 8.9999999954000032 + 8.4398167790700001 2 24.147780047000001 2 +7 0 0 1 2 2 0 8.9999999954000032 3.1415926535965206 8.9999999954000103 + 24.147780047000001 2 39.855743314999998 2 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535965206 7.1054273576010019e-15 0 1 +1 3.1415926535965206 7.1054273576010019e-15 0 1 +1 -0.21977979060100539 18.499999999700005 1 0 +2 -14.284007116259215 85.973058205403092 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 5 +1 -0.21977979059427755 18.499999999700005 1 0 +2 -14.284007116259215 85.973058205403092 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 5 +1 0 -1.4921397450962104e-13 0 1 +1 3.1415926535950227 -1.4921397450962104e-13 0 1 +1 -0.59101865043077362 -16 1 0 +1 3.1415926536649472 1.4921397450962104e-13 0 1 +1 0 1.4921397450962104e-13 0 1 +1 0 -1.4921397450962104e-13 0 1 +1 3.1415926535950298 -1.4921397450962104e-13 0 1 +1 3.1415926536649512 1.4921397450962104e-13 -3.7396986075709803e-16 1 +1 0 1.4921397450962104e-13 0 1 +1 -0.59101865043077362 10.500000001799997 1 0 +2 -17.396897482662549 104.49845527042048 0.063822265525205368 -0.99796128102408377 0.99796128102408377 0.063822265525205368 2 +1 -3.7326113040904882 -16 1 0 +1 -3.7326113040904882 10.500000001799997 1 0 +2 -17.396897482662549 104.49845527042048 0.063822265525205368 -0.99796128102408377 0.99796128102408377 0.063822265525205368 2 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 -0.21977979058061425 9 1 0 +1 3.1415926535973906 0 0 1 +1 3.1415926535973902 0 0 1 +1 -0.21977979058061425 18.499999999700002 1 0 +2 13.212008478916736 -77.605574646746533 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 5 +1 -0.2197797905942771 9 1 0 +1 -0.2197797905942771 18.499999999700002 1 0 +2 13.212008478916736 -77.605574646746533 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 5 +1 3.1415926535851568 -4.000000330961484e-10 0 1 +1 0 -4.000000330961484e-10 0 1 +1 -1.6744650651118398 2.9999999921000122 1 -2.2617277734885064e-15 +1 0 -3.999929276687908e-10 0 1 +1 3.1415926535851568 -3.999929276687908e-10 0 1 +7 0 0 1 2 2 0 -6.000000003699995 3.1415926535851568 -6.0000000016000001 + -18.0641577574 2 18.0641577574 2 +7 0 0 5 15 5 3900.4899949511268 6526.1298040059346 3899.1566030563254 6527.3484934700255 3897.5839220448897 6528.3053720477228 3895.8403478757905 6528.9374525212079 3892.1993092138077 6529.4839012085449 3888.6219717358867 6528.6130250551332 3886.9421302283286 6527.8270803257528 3883.981129527474 6525.6388747697874 3882.0673723717673 6522.4935127470399 3881.4352918981945 6520.7499385778892 3880.8888432106564 6517.108899915982 3881.7597193638326 6513.5315624380255 3882.5456640930033 6511.8517209304018 3883.6397668709542 6510.3712205798593 3884.9731587655401 6509.1525311157111 + -18.0641577574 6 -9.0320788787000001 3 1.7763568394e-15 3 9.0320788787000001 3 18.0641577574 6 +7 0 0 1 2 2 0 -6.0000000074000042 3.1415926535851568 -5.9999999964999944 + -18.064157756499998 2 18.064157756499998 2 +7 0 0 5 15 5 3884.9731587679566 6509.1525311134437 3886.3065506629159 6507.9338416496266 3887.8792316745094 6506.976963072203 3889.6228058436104 6506.3448825989872 3893.2638445054176 6505.7984339121631 3896.8411819829839 6506.6693100659286 3898.5210234904171 6507.4552547954654 3901.4820241909379 6509.6434603515354 3903.3957813462803 6512.7888223743603 3904.0278618198004 6514.5323965433299 3904.574310507061 6518.1734352051244 3903.7034343538335 6521.7507726829017 3902.9174896246318 6523.4306141903644 3901.8233868467323 6524.9111145408187 3900.4899949522355 6526.1298040049132 + -18.064157756499998 6 -9.0320788782400001 3 0 3 9.0320788782400001 3 18.064157756499998 6 +1 -4.8160577187016331 2.99999999209999 1 2.2617277734885052e-15 +1 0 5.0049919764205697e-10 0 1 +1 3.1415926535749144 5.0049919764205697e-10 -8.8817841964461388e-16 1 +1 -3.0102976341359069 -16 1 0 +1 3.1415926535749357 4.9950443781199283e-10 8.8817841964461388e-16 1 +1 0 4.9950443781199283e-10 0 1 +1 -3.0102976341359069 -7.9999999994999982 1 0 +1 0 5.0049919764205697e-10 0 1 +1 3.1415926535749215 5.0049919764205697e-10 0 1 +1 -3.0102976341359069 1.0000000025999967 1 0 +1 3.1415926535749215 4.9950443781199283e-10 0 1 +1 0 4.9950443781199283e-10 0 1 +1 -3.0102976341365615 10.500000002299991 1 1.1308638867481953e-15 +2 16.111942327281415 -94.863627370746443 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 2 +1 -6.1518902877257071 -7.9999999994999982 1 0 +1 -6.1518902877257071 -16 1 0 +1 -6.1518902877257071 1.0000000025999967 1 0 +1 -6.1518902877257071 10.500000002300006 1 -1.1308638867474459e-15 +2 16.111942327281415 -94.863627370746443 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 2 +7 0 0 1 2 2 0 -6.0000000048000075 1.5707963267951541 -6.0000000048000928 + 2.2474917242100001 2 23.453242136899998 2 +7 0 0 1 2 2 1.5707963267951541 -6.0000000048000928 3.1415926535944751 -6.0000000047999933 + 23.453242136899998 2 44.658992548599997 2 +1 -1.6728512980805683 2.9999999973000091 1 -4.5234660518768177e-15 +1 -1.6728512979715937 2.9999999973000091 1 -4.5234555474556392e-15 +1 0 7.999929607649392e-10 0 1 +1 1.5707963267951541 7.9990769563664799e-10 0 1 +1 1.5707963267951541 7.9990769563664799e-10 2.4671622763691225e-17 1 +1 3.1415926535944716 8.000071716196544e-10 -9.8686491054764899e-17 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 -1.7905761174035848 9.0000000000000107 1 -2.2617277735033768e-15 +1 3.141592653564504 7.1054273576010019e-15 0 1 +1 3.141592653564504 7.1054273576010019e-15 0 1 +1 -1.7905761174035848 18.499999999699998 1 1.13086388675169e-15 +2 153.00242447696024 24.154795623375492 0.063822265525205368 -0.99796128102408377 0.99796128102408377 0.063822265525205368 5 +1 -1.7905761173891785 8.9999999999999893 1 2.2617277734669583e-15 +1 -1.790576117389183 18.499999999700012 1 -1.1308638867334776e-15 +2 153.00242447696024 24.154795623375492 0.063822265525205368 -0.99796128102408377 0.99796128102408377 0.063822265525205368 5 +7 0 0 1 2 2 3.0599199677863465 5.9999999812000055 3.1400055482038915 5.9999999808000126 + 18.614045512400001 2 19.615115267699998 2 +7 0 0 1 2 2 5.702445014694165 -3.0000000098999635 5.7825305951392343 -3.0000000102999564 + 18.614045512400001 2 19.615115267699998 2 +7 0 0 1 2 2 1.5692092209207582 5.999999989499976 3.0599199677871463 5.9999999812000055 + -0.019838823690999999 2 18.614045512400001 2 +7 0 0 1 2 2 0 -3.0000000016000499 1.4907107467157275 -3.0000000098999635 + -0.019838823690999999 2 18.614045512400001 2 +1 1.5692092210815554 -2.8421709430404007e-14 0 1 +1 -1.6744359700554807 2.9999999907000046 1 0 +1 0 0 0 1 +1 3.1415926535974723 0 0 1 +7 0 0 1 2 2 0 -6.0000000056000005 3.1415926535876055 -5.9999999988999875 + -19.634954084899999 2 19.634954084899999 2 +7 0 0 5 15 5 3948.745617907608 6693.0982921435052 3947.2963174338738 6694.4229967731399 3945.5869118138744 6695.4631319195669 3943.6917424895069 6696.1502310527376 3939.7341090536738 6696.7443121660262 3935.8456712112061 6695.7978207854494 3934.0197316739072 6694.9435861614757 3930.8011834504632 6692.5651955049179 3928.7209131569621 6689.1463842647445 3928.0338140236163 6687.251214941025 3927.4397329105609 6683.2935815043284 3928.3862242910877 6679.4051436622176 3929.2404589150196 6677.5792041254172 3930.429654243223 6675.9699300132534 3931.8789547177048 6674.6452253842826 + -19.634954084899999 6 -9.8174770424699993 3 0 3 9.8174770424699993 3 19.634954084899999 6 +1 3.1415926535876046 7.1054273576010019e-15 0 1 +1 0 7.1054273576010019e-15 0 1 +7 0 0 1 2 2 3.1400055478378062 5.9999999808000126 3.1415926535876033 5.9999999808000126 + 19.615115263100002 2 19.634954084899999 2 +7 0 0 1 2 2 1.5707963267939118 -3.0000000102999564 1.5723834325442785 -3.0000000102999564 + 19.615115263100002 2 19.634954084899999 2 +1 -4.8160286236354057 -6.000000003799979 1 -2.2617277734796404e-15 +2 3940.312286313037 6683.8717587642186 0.66436497377502279 -0.74740830984202555 0.74740830984202555 0.66436497377502279 12.5 +1 1.4671566835419911 2.9999999907000046 1 0 +1 1.5692092205996522 2.8421709430404007e-14 0 1 +1 -4.816028623637596 5.9999999925000012 1 0 +1 -5.3150962302622204 -2.9999999985999213 1 -9.532939064089309e-15 +1 -4.8160286236354057 5.9999999925004444 1 -9.0516757680412775e-14 +1 -3.2436451910911277 -2.9999999985995247 1 -9.0516757644152373e-14 +7 0 0 1 2 2 0 -8.0000000039002117 3.1415926534196537 -8.0000000038997925 + 1.1481745586300001 2 7.4313598658200002 2 +7 0 0 1 2 2 0 -8.0000000038997925 3.1415926536640519 -8.0000000039002117 + 7.4313598658100002 2 13.714545172999999 2 +1 -5.3150962299330962 3.0000000016999948 1 0 +1 -3.2436451907327468 3.0000000016999948 1 0 +1 0.96808907724649096 3.0000000016999948 1 0 +1 -3.2436451905452146 3.0000000016999948 1 0 +1 -2.0804577089401013 0.99999999819952201 1 1.2891848309562589e-13 +1 -5.2220503622859491 0.99999999820086849 1 -1.2891848308561746e-13 +1 5.7825305947682111 -3.9995740053200279e-10 -1.4802973656487727e-16 1 +1 1.5707963267889733 -3.9995740053200279e-10 -3.7007434141219317e-17 1 +1 5.7024450146943337 -3.9996450595936039e-10 1.4802973656734428e-16 1 +1 1.4907107467150962 -3.9996450595936039e-10 -3.700743414183607e-17 1 +1 1.0701416146260732 -3.9995029510464519e-10 1.4802973660928609e-16 1 +1 -0.42056913253336248 -3.9995740053200279e-10 -1.4802973656487709e-16 1 +1 1.6508819066669864 -3.9995740053200279e-10 -3.7007434141219273e-17 1 +1 0 -4.0004977108765161e-10 0 1 +1 0 -9.9795727237506071e-11 0 1 +1 3.1415926534198881 -9.9795727237506071e-11 0 1 +1 -3.6512540354910525 -16.000000000000014 1 2.2617277734315376e-15 +1 3.1415926536638104 -1.0021494745160453e-10 -8.8817842013311205e-16 1 +1 0 -1.0021494745160453e-10 0 1 +1 0 -9.9795727237506071e-11 0 1 +1 3.141592653419889 -9.9795727237506071e-11 -7.4793972187635579e-16 1 +1 3.1415926536638246 -1.0021494745160453e-10 0 1 +1 0 -1.0021494745160453e-10 0 1 +1 -3.6512540354910525 10.499999997899991 1 1.1308638867160449e-15 +2 171.24665163699817 27.220439979056938 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 2 +1 -0.50966138214520473 -15.999999999999998 1 -2.2617277736078248e-15 +1 -0.50966138214520473 10.499999997899998 1 -1.1308638868036363e-15 +2 171.24665163699817 27.220439979056938 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 2 +1 0.52359877559042722 -5.0017945341096492e-10 -1.2918958832471602e-16 1 +1 3779.3599420748596 6660.0520032804488 0.97242247370700607 -0.23322635492059474 +1 11.469456496445307 104.41348264040644 -0.62304053028250761 0.78218955351327202 +1 -5.1508282869601656 -13.750000000000036 1 6.785183320557509e-15 +2 51.255944573533661 118.66524351922165 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 40 +1 -5.1508282869601656 13.749999998999996 1 0 +2 3801.9538269412287 6695.7674577546741 -0.74740830984202555 -0.66436497377502279 -0.66436497377502279 0.74740830984202555 40 +1 0 -1.4210854715202004e-13 0 1 +1 97.554515145077715 13.749999999999401 3.3979655774767399e-15 1 +1 0 -4.9969628435064806e-10 0 1 +1 151.0713906549085 49.721544693277657 -0.986174441105656 -0.16571050573197635 +1 3923.0586230595063 6702.8374818972552 -0.67542413643493326 -0.73742947860871733 +1 0.54105206813827755 -5.0019721697935893e-10 4.1986616205532715e-16 1 +1 11.092981763095354 13.749999999499931 2.9217037810118824e-17 1 +1 54.323748453881493 27.499999998999662 1 -5.2646339559997493e-17 +1 3854.770824323115 6669.7047645647563 -0.95875574290157872 -0.2842312886598552 +1 54.323748453881336 -3.3322090665364469e-13 1 -1.1556232319999318e-17 +1 76.854219659471212 65.621605810495197 -0.93066370356847528 0.36587575877640366 +1 -4.6097762188662985 -13.750000000000034 1 6.5663064389074243e-15 +2 131.72255544786279 87.031064387573224 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 40 +1 -4.6097762188662985 13.749999999000057 1 -1.3132612877814467e-14 +2 3884.849318612281 6720.342530807432 -0.74740830984202555 -0.66436497377502279 -0.66436497377502279 0.74740830984202555 40 +1 3966.0087838369409 6671.2613445026172 -0.67542413643493326 -0.73742947860871733 +1 165.49930513688236 -1.5971073474126563 -0.986174441105656 -0.16571050573197635 +1 0.4712388980580855 -5.0037840537697775e-10 1.9580296980464775e-16 1 +1 -5.7093336476045433 -13.750000000000046 1 7.5390925779700711e-15 +2 166.00173681504162 -42.073457299964993 -0.063822265525205368 0.99796128102408377 0.99796128102408377 0.063822265525205368 40 +1 -5.7093336476045433 13.749999998999996 1 0 +2 3991.3103152799067 6639.6635621482592 -0.66436497377502279 0.74740830984202555 0.74740830984202555 0.66436497377502279 40 +1 0 -3.0198066269804258e-13 0 1 +1 125.37571236808888 13.750000000000341 -9.1698936819065543e-15 1 +1 3925.0310973514725 6515.6568214666586 -0.3828915043757577 0.92379331880939108 +1 3937.8625519209209 6596.5692224866707 0.26702133464174482 0.96369061780539378 +1 69.574408449906556 27.500000000000188 1 4.6023331439991921e-17 +1 2.8078731021295518 13.749999999999297 -1 1.3927481552549415e-13 +2 3961.5100379860919 6532.1131760536982 0.74740830984202555 0.66436497377502279 -0.66436497377502279 0.74740830984202555 40.000000000000007 +1 2.8078731021295527 -13.750000000000746 -1 1.5534498654766624e-13 +2 76.333855318569391 -108.51751725879048 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 40.000000000000007 +1 97.353277303665408 -43.157212651296369 0.80345686570370878 0.59536296908152819 +1 69.574408449906628 1.8924561995497117e-13 1 -1.7643884719997882e-17 +1 37.452276398291318 -99.043999602465064 0.26659060633435527 0.96380986123523404 +1 0 -5.0055604106091778e-10 0 1 +1 0.66322511575615561 -5.0063775347553019e-10 2.0185873175736879e-17 1 +1 13.773104531586023 13.749999999500035 -1.2696569772187004e-16 1 +Curves 1310 +2 50.5 5.5 9.5 0 0 1 1 0 -0 -0 1 0 8 +2 50.5 5.5 9.5 0 0 1 1 0 -0 -0 1 0 8 +7 0 0 5 6 2 -38 -32.5 13 -16.199999999999999 -32.5 13 5.5999999999999996 -32.5 13 27.399999999999999 -32.5 13 49.200000000000003 -32.5 13 71 -32.5 13 + 0 6 109 6 +7 0 0 5 9 3 71 -32.5 13 75.712388980399993 -32.5 13 80.4247779608 -31.574724587399999 13 84.8946105096 -29.723259324099999 13 92.867471954300001 -24.367471954300001 13 98.223259324099999 -16.3946105096 13 100.07472458700001 -11.9247779608 13 101 -7.2123889803800001 13 101 -2.5 13 + 31.705691563799999 6 55.511447068999999 3 79.317202574099994 6 +7 0 0 5 6 2 101 -2.5 13 101 -0.5 13 101 1.5 13 101 3.5 13 101 5.5 13 101 7.5 13 + 0 6 10 6 +7 0 0 5 6 2 101 7.5 13 101 12.4776888283 13 99.654424864299997 17.455903910100002 13 96.956647293900005 21.945748933499999 13 93.192846020999994 25.470943655100001 13 88.797802672700001 27.807817643500002 13 + 0 6 25.507102763500001 6 +7 0 0 5 6 2 88.797802672700001 27.807817643500002 13 83.672569027799995 30.532952712 13 78.547335382900002 33.258087780499999 13 73.422101737999995 35.983222848899999 13 68.296868093100002 38.708357917400001 13 63.171634448200003 41.433492985900003 13 + 0 6 29.023430645000001 6 +7 0 0 5 6 2 63.171634448200003 41.433492985900003 13 55.7500134434 45.379638872299999 13 47.845323711900001 48.4193390577 13 39.609065293299999 50.472868920099998 13 31.202585726199999 51.5 13 22.797080048600002 51.5 13 + 31.519741269600001 6 73.710500387699994 6 +7 0 0 5 6 2 22.797080048600002 51.5 13 15.8376640389 51.5 13 8.8782480291599999 51.5 13 1.9188320194399999 51.5 13 -5.04058399028 51.5 13 -12 51.5 13 + 0 6 34.797080048600002 6 +7 0 0 5 9 3 -12 51.5 13 -20.4823001647 51.5 13 -28.9646003294 49.834504257299997 13 -37.0102989174 46.501866783399997 13 -51.361449517799997 36.861449517799997 13 -61.001866783399997 22.5102989174 13 -64.334504257299997 14.4646003294 13 -66 5.9823001646899998 13 -66 -2.5 13 + 0 6 43.123692182900001 3 86.247384365800002 6 +7 0 0 5 6 2 -66 -2.5 13 -66 -2.8999999999999999 13 -66 -3.2999999999999998 13 -66 -3.7000000000000002 13 -66 -4.0999999999999996 13 -66 -4.5 13 + 0 6 2 6 +7 0 0 5 6 2 -66 -4.5 13 -66 -13.296459430100001 13 -62.555579886700002 -22.101126014199998 13 -55.601126014199998 -29.055579886699999 13 -46.796459430100001 -32.5 13 -38 -32.5 13 + 0 6 46.336855176699999 6 +2 -22.5 -12.5 8.5 0 0 1 1 0 -0 -0 1 0 6 +2 -22.5 -12.5 8.5 0 0 1 1 0 -0 -0 1 0 6 +2 -22.5 29.5 8.5 0 0 1 1 0 -0 -0 1 0 6 +2 -22.5 29.5 8.5 0 0 1 1 0 -0 -0 1 0 6 +7 0 0 5 15 5 2.0410958904099998 8.5 5 2.0410958904099998 7.0862833058800003 5 2.3186785141900002 5.6725666117699998 5 2.8741180931799999 4.3316168471100003 5 4.4808543041200002 1.9397584137099999 5 6.8727127375199997 0.333022202765 5 8.21366250218 -0.22241737621900001 5 11.041095890399999 -0.77758262378099996 5 13.868529278600001 -0.22241737621900001 5 15.2094790433 0.333022202765 5 17.601337476699999 1.9397584137099999 5 19.208073687599999 4.3316168471100003 5 19.7635132666 5.6725666117699998 5 20.041095890400001 7.0862833058800003 5 20.041095890400001 8.5 5 + 28.274333882299999 6 35.342917352900002 3 42.411500823499999 3 49.480084294000001 3 56.548667764599998 6 +7 0 0 5 15 5 20.041095890400001 8.5 5 20.041095890400001 9.9137166941199997 5 19.7635132666 11.327433388199999 5 19.208073687599999 12.668383152900001 5 17.601337476699999 15.0602415863 5 15.2094790433 16.666977797200001 5 13.868529278600001 17.222417376199999 5 11.041095890399999 17.777582623800001 5 8.21366250218 17.222417376199999 5 6.8727127375199997 16.666977797200001 5 4.4808543041200002 15.0602415863 5 2.8741180931799999 12.668383152900001 5 2.3186785141900002 11.327433388199999 5 2.0410958904099998 9.9137166941199997 5 2.0410958904099998 8.5 5 + 0 6 7.0685834705800001 3 14.1371669412 3 21.205750411699999 3 28.274333882299999 6 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 3.5 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 3.5 +7 0 0 5 15 5 -49.958904109599999 2.1000000000000001 6 -48.953593483399999 2.1000000000000001 6 -47.948282857099997 2.2973924717199998 6 -46.994717754100002 2.6923724964 6 -45.293839593599998 3.8349426061599998 6 -44.151272080600002 5.5358225109700001 6 -43.756293511700001 6.4893882170200001 6 -43.361511637900001 8.5000100721899994 6 -43.756299650899997 10.5106307219 6 -44.151281131399998 11.464195222000001 6 -45.293853837900002 13.165071638100001 6 -46.994735487 14.3076365544 6 -47.948301796099997 14.7026136675 6 -48.953613025000003 14.9000030696 6 -49.958923651299997 14.9 6 + 30.1592894745 6 35.185842605600001 3 40.212395736799998 3 45.2389488679 3 50.265501999100003 6 +1 -50.958904109599999 2.1000000000000001 6 1 0 0 +7 0 0 5 15 5 -51.958923638999998 14.9 6 -52.964232311700002 14.899996932300001 6 -53.969540381999998 14.7026021601 6 -54.923102628400002 14.307620762199999 6 -56.623975198499998 13.1650497359 6 -57.766538439400001 11.4641719361 6 -58.161515472700003 10.5106078818 6 -58.556295814099997 8.4999899341099994 6 -58.161509337299997 6.4893731911000003 6 -57.766529394300001 5.5358103420699996 6 -56.623960963199998 3.8349360287300001 6 -54.923084906600003 2.6923701926999999 6 -53.969521454899997 2.2973917045599999 6 -52.964212782300002 2.1000000000000001 6 -51.958904109599999 2.1000000000000001 6 + 10.053116020899999 6 15.079659384299999 3 20.106202747699999 3 25.132746111100001 3 30.1592894745 6 +1 -50.958904109599999 14.9 6 1 0 0 +2 28.235903341899999 -16.5 0 0 0 -1 -1 0 -0 0 1 0 8 +1 33.926407280100001 -10.876996805099999 -2.5 0 0 -1 +2 28.235903341899999 -16.5 -4.5 0 0 -1 -1 0 -0 0 1 0 8 +1 28.235903341899999 -8.5 -2.5 0 0 -1 +1 15.358848356199999 -8.5 -4.5 -1 0 0 +1 15.358848356199999 -8.5 0 -1 0 0 +1 2.4817933703700001 -8.5 -2.25 0 0 1 +2 2.4817933703700001 -16.5 0 0 0 1 1 0 -0 -0 1 0 8 +2 2.4817933703700001 -16.5 -4.5 0 0 1 1 0 -0 -0 1 0 8 +1 -5.41758793251 -15.235177865600001 -2.5 0 0 1 +2 -47.7802294293 -13.5 0 0 0 -1 -1 0 -0 0 1 0 8 +1 -39.786480993200001 -13.1837944664 -2.5 0 0 -1 +2 -47.7802294293 -13.5 -4.5 0 0 -1 -1 0 -0 0 1 0 8 +1 -47.7802294293 -5.5 -2.5 0 0 -1 +2 -47.7802294293 30.5 0 0 0 1 1 0 -0 -0 1 0 8 +1 -47.7802294293 22.5 -2.5 0 0 1 +2 -47.7802294293 30.5 -4.5 0 0 1 1 0 -0 -0 1 0 8 +1 -39.786480993200001 30.183794466399998 -2.5 0 0 1 +2 2.4817933703700001 33.5 0 0 0 1 1 0 -0 -0 1 0 8 +1 -5.41758793251 32.235177865600001 -2.5 0 0 1 +2 2.4817933703700001 33.5 -4.5 0 0 1 1 0 -0 -0 1 0 8 +1 2.4817933703700001 25.5 -2.5 0 0 1 +1 36.511075809799998 25.5 -2.25 0 0 1 +1 19.496434590100002 25.5 -4.5 -1 0 0 +1 19.496434590100002 25.5 0 -1 0 0 +2 36.511075809799998 33.5 0 0 0 1 1 0 -0 -0 1 0 8 +2 36.511075809799998 33.5 -4.5 0 0 1 1 0 -0 -0 1 0 8 +1 40.086519692300001 26.343450479200001 -2.5 0 0 1 +2 50.5 5.5 -4.5999999999999996 0 0 1 1 0 -0 -0 1 0 8 +1 3.8354043088299998 -7.0206604951199996 29 0 0 1 +2 0 0 1.8 0 0 1 1 0 -0 -0 1 0 8 +1 43.479339504899997 1.6645956911699999 2.0949999999700002 0 0 1 +2 0 0 1.8 0 0 1 1 0 -0 -0 1 0 8 +1 57.520660495100003 9.3354043088300003 2.0949999999700002 0 0 1 +2 50.5 5.5 -4.5999999999999996 0 0 1 1 0 -0 -0 1 0 8 +1 -3.8354043088299998 7.0206604951199996 29 0 0 1 +2 50.5 5.5 -5 -1.8684409237800001e-15 3.42015816972e-15 1 0 1 -3.42015816972e-15 -1 -6.3903634901053515e-30 -1.8684409237800001e-15 8.4000000000000004 +1 43.303822992500002 1.5687105834499999 -4.7999999999999998 -0.62054458056371298 -0.3390050494208432 -0.70710678118667292 +1 57.696177007499998 9.4312894165499994 -4.7999999999999998 0.62054458056371298 0.3390050494208432 -0.70710678118667292 +2 50.5 5.5 -5 2.9598024531600001e-15 4.8580609417199997e-15 1 0 1 -4.8580609417199997e-15 -1 1.4378900692903634e-29 2.9598024531600001e-15 8.4000000000000004 +2 -22.5 29.5 -4.5999999999999996 0 0 1 1 0 -0 -0 1 0 6 +1 2.87655323163 -5.2654953713400001 28 0 0 1 +2 0 0 1.8 0 0 1 1 0 -0 -0 1 0 6 +1 -28.5 29.5 1.75 0 0 1 +2 0 0 1.8 0 0 1 1 0 -0 -0 1 0 6 +1 -16.5 29.5 1.75 0 0 1 +2 -22.5 29.5 -4.5999999999999996 0 0 1 1 0 -0 -0 1 0 6 +1 -2.87655323163 5.2654953713400001 28 0 0 1 +2 -22.5 29.5 -5 6.6613381477499997e-15 3.8459253727699997e-15 1 1 0 -6.6613381477499997e-15 -2.5619009399032436e-29 1 -3.8459253727699997e-15 6.4000000000000004 +1 -16.300000000000001 29.5 -4.7999999999999998 0.70710678118654757 0 -0.70710678118654757 +1 -28.699999999999999 29.5 -4.7999999999999998 -0.70710678118654757 0 -0.70710678118654757 +2 -22.5 29.5 -5 -0 0 1 1 0 0 0 1 -0 6.4000000000000004 +2 -22.5 -12.5 -4.5999999999999996 0 0 1 1 0 -0 -0 1 0 6 +1 -28.5 -12.5 1.75 0 0 1 +1 -16.5 -12.5 1.75 0 0 1 +2 -22.5 -12.5 -4.5999999999999996 0 0 1 1 0 -0 -0 1 0 6 +2 -22.5 -12.5 -5 8.5843008341299994e-15 4.9561483973900002e-15 1 1 0 -8.5843008341299994e-15 -4.254506882178704e-29 1 -4.9561483973900002e-15 6.4000000000000004 +1 -16.300000000000001 -12.5 -4.7999999999999998 0.70710678118654757 -3.1401849173679908e-15 -0.70710678118654757 +1 -28.699999999999999 -12.5 -4.7999999999999998 -0.70710678118654757 -3.1401849173679908e-15 -0.70710678118654757 +2 -22.5 -12.5 -5 -1.47911419729e-29 -1.7763568393999999e-14 1 0 1 1.7763568393999999e-14 -1 2.6274346206097322e-43 -1.47911419729e-29 6.4000000000000004 +1 -39.799999999999997 -12.5 -2.5 0 0 1 +2 -22.5 -12.5 -4.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +1 -5.2000000000000002 -12.5 -2.5 0 0 1 +2 -22.5 -12.5 -4.7999999999999998 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 -12.5 -4.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 -12.5 0 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 -12.5 -4.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 -12.5 -4.7999999999999998 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 -12.5 -5 0 0 1 1 0 -0 -0 1 0 17.100000000000001 +2 -22.5 -12.5 -5 0 0 1 1 0 -0 -0 1 0 17.100000000000001 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 17 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 17 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 7.7999999999999998 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 7.7999999999999998 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 8 +1 -39.700000000000003 -12.5 -4.9000000000000004 -0.70710678118654757 3.7682219008375893e-14 0.70710678118654757 +1 -5.2999999999999998 -12.5 -4.9000000000000004 0.70710678118654757 4.3962588843071872e-14 0.70710678118654757 +1 -5.2000000000000002 29.5 -2.5 0 0 1 +2 -22.5 29.5 -4.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +1 -39.799999999999997 29.5 -2.5 0 0 1 +2 -22.5 29.5 -4.7999999999999998 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 29.5 -4.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 29.5 0 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 29.5 -4.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 29.5 -4.7999999999999998 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 29.5 -5 0 0 1 1 0 -0 -0 1 0 17.100000000000001 +2 -22.5 29.5 -5 0 0 1 1 0 -0 -0 1 0 17.100000000000001 +1 -5.2999999999999998 29.5 -4.9000000000000004 0.70710678118654757 1.2560739669491962e-14 0.70710678118654757 +1 -39.700000000000003 29.5 -4.9000000000000004 -0.70710678118654757 1.2560739669491962e-14 0.70710678118654757 +1 73.799999999999997 5.5 -2.5 0 0 1 +2 50.5 5.5 0 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +2 50.5 5.5 -4.5 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +1 27.199999999999999 5.5 -2.5 0 0 1 +2 50.5 5.5 -4.7999999999999998 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +2 50.5 5.5 -4.5 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +2 50.5 5.5 0 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +2 50.5 5.5 -4.7999999999999998 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +2 50.5 5.5 -5 0 0 1 1 0 -0 -0 1 0 23.100000000000001 +2 50.5 5.5 -5 0 0 1 1 0 -0 -0 1 0 23.100000000000001 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 23 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 23 +2 4.5562353437399997e-16 8.881784197e-16 13 0 0 1 1 0 -0 -0 1 0 9.8000000000000007 +2 4.5562353437399997e-16 8.881784197e-16 13 0 0 1 1 0 -0 -0 1 0 9.8000000000000007 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 10 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 10 +1 73.700000000000003 5.5 -4.9000000000000004 0.70710678118654757 -5.6523328512563833e-14 0.70710678118654757 +1 27.300000000000001 5.5 -4.9000000000000004 -0.70710678118654757 -5.6523328512563833e-14 0.70710678118654757 +1 -50.958904109599999 2.1000000000000001 -4.0999999999999996 -1 -2.22044604925e-16 0 +1 -51.958904109599999 2.1000000000000001 0.94999999999999996 0 0 -1 +1 -49.958904109599999 2.1000000000000001 0.94999999999999996 0 0 -1 +1 -51.958923638999998 14.9 -2.25 0 0 1 +2 -51.958904109599999 8.5 -4.0999999999999996 0 0 1 1 0 -0 -0 1 0 6.4000000000000004 +1 -50.9589236451 14.9 -4.0999999999999996 1 0 0 +1 -49.958923651299997 14.9 0.94999999999999996 0 0 -1 +2 -49.958904109599999 8.5 -4.0999999999999996 0 0 1 1 0 -0 -0 1 0 6.4000000000000004 +1 -51.958923638999998 15.1 -4.2999999999999998 0 -0.70710678118654757 0.70710678118654757 +1 -11.2067401539 15.300000000000001 -4.5 1 0 0 +1 -49.958923651299997 15.1 -4.2999999999999998 0 -0.70710678118654757 0.70710678118654757 +1 -49.958904109599999 1.8999999999999999 -4.2999999999999998 1.2560739669491962e-14 -0.70710678118654757 -0.70710678118654757 +2 -49.958904109599999 8.5 -4.5 -6.7799206850700001e-21 4.4409192180100003e-15 1 0 1 -4.4409192180100003e-15 -1 -3.0109080066910889e-35 -6.7799206850700001e-21 6.7999999999999998 +1 -11.2067401539 1.7 -4.5 -1 -2.2263035843300001e-16 0 +1 -51.958904109599999 1.8999999999999999 -4.2999999999999998 0 0.70710678118654757 0.70710678118654757 +2 -51.958904109599999 8.5 -4.5 1.3551270599100001e-20 -8.8817841969800004e-15 1 0 1 8.8817841969800004e-15 -1 -1.203594610560861e-34 1.3551270599100001e-20 6.7999999999999998 +1 20.041095890400001 8.5 -2.25 0 0 1 +1 2.0410958904099998 8.5 -2.25 0 0 1 +2 11.041095890399999 8.5 -4.0999999999999996 0 0 1 1 0 -0 -0 1 0 9 +2 11.041095890399999 8.5 -4.0999999999999996 0 0 1 1 0 -0 -0 1 0 9 +2 11.041095890399999 8.5 -4.5 -6.7137098316700001e-30 1.7763568393999999e-14 1 0 1 -1.7763568393999999e-14 -1 -1.1925944377234027e-43 -6.7137098316700001e-30 9.4000000000000004 +1 1.8410958904100001 8.5 -4.2999999999999998 -0.70710678118654757 -1.2560739669491962e-14 -0.70710678118654757 +1 20.2410958904 8.5 -4.2999999999999998 0.70710678118654757 -1.2560739669491962e-14 -0.70710678118654757 +2 11.041095890399999 8.5 -4.5 -3.33066907388e-15 -1.92296268638e-15 1 1 0 3.33066907388e-15 -6.4047523497510717e-30 1 1.92296268638e-15 9.4000000000000004 +1 -52.084386624700002 -5.5 -4.5 -1 0 0 +1 -52.084386624700002 -5.5 0 -1 0 0 +1 -56.388543820000002 -5.5 -2.25 0 0 1 +2 -56.388543820000002 -2.5 -4.5 0 0 1 1 0 -0 -0 1 0 3 +2 -56.388543820000002 -2.5 0 0 0 1 1 0 -0 -0 1 0 3 +1 -58.944050079999997 -4.0714285714300003 -2.25 0 0 1 +1 -56.388543820000002 22.5 -2.25 0 0 -1 +1 -52.084386624700002 22.5 0 -1 0 0 +1 -52.084386624700002 22.5 -4.5 -1 0 0 +2 -38.5 8.5 -4.5 0 0 1 1 0 -0 -0 1 0 24 +2 -38.5 8.5 0 0 0 1 1 0 -0 -0 1 0 24 +1 -58.944050079999997 21.071428571399998 -2.25 0 0 1 +2 -56.388543820000002 19.5 -4.5 0 0 1 1 0 -0 -0 1 0 3 +2 -56.388543820000002 19.5 0 0 0 -1 -1 0 -0 0 1 0 3 +1 71 -32.5 6.9000000000000004 0 0 1 +1 -38 -32.5 6.9000000000000004 0 0 1 +1 16.5 -32.5 0.80000000000000004 1 0 0 +1 101 -2.5 6.5 0 0 1 +7 0 0 5 9 3 71 -32.5 0.80000000000000004 75.712388980399993 -32.5 0.80000000000000004 80.4247779608 -31.574724587399999 0.80000000000000004 84.8946105096 -29.723259324099999 0.80000000000000004 92.867471954300001 -24.367471954300001 0.80000000000000004 98.223259324099999 -16.3946105096 0.80000000000000004 100.07472458700001 -11.9247779608 0.80000000000000004 101 -7.2123889803800001 0.80000000000000004 101 -2.5 0.80000000000000004 + 109 6 132.56194490199999 3 156.12388980399999 6 +1 101 7.5 6.9000000000000004 0 0 1 +1 101 2.5 0.80000000000000004 2.8421709430400002e-15 1 0 +1 88.797802672700001 27.807817643500002 6.5 0 0 1 +7 0 0 5 6 2 101 7.5 0.80000000000000004 101 12.4776888283 0.80000000000000004 99.654424864299997 17.455903910100002 0.80000000000000004 96.956647293900005 21.945748933499999 0.80000000000000004 93.192846020999994 25.470943655100001 0.80000000000000004 88.797802672700001 27.807817643500002 0.80000000000000004 + 166.12388980399999 6 191.01233394499999 6 +1 63.171634448200003 41.433492985900003 6.9000000000000004 -3.21491467328e-13 -6.04543737475e-13 1 +1 75.984718560499999 34.620655314700002 0.80000000000100002 -0.88294759285826285 0.46947156278713975 0 +1 22.797080048600002 51.5 6.5 0 0 1 +7 0 0 5 6 2 63.171634448200003 41.433492985900003 0.80000000000000004 55.7500134434 45.379638872299999 0.80000000000000004 47.845323711900001 48.4193390577 0.80000000000000004 39.609065293299999 50.472868920099998 0.80000000000000004 31.202585726199999 51.5 0.80000000000000004 22.797080048600002 51.5 0.80000000000000004 + 220.03576459000001 6 262.06329297799999 6 +1 -12 51.5 6.9000000000000004 0 0 1 +1 5.3985400242999999 51.5 0.80000000000000004 -1 0 0 +1 -66 -2.5 6.5 0 0 1 +7 0 0 5 9 3 -12 51.5 0.80000000000000004 -20.4823001647 51.5 0.80000000000000004 -28.9646003294 49.834504257299997 0.80000000000000004 -37.0102989174 46.501866783399997 0.80000000000000004 -51.361449517799997 36.861449517799997 0.80000000000000004 -61.001866783399997 22.5102989174 0.80000000000000004 -64.334504257299997 14.4646003294 0.80000000000000004 -66 5.9823001646899998 0.80000000000000004 -66 -2.5 0.80000000000000004 + 296.86037302699998 6 339.27187385000002 3 381.68337467399999 6 +1 -66 -4.5 6.9000000000000004 0 0 1 +1 -66 -3.5 0.80000000000000004 0 -1 0 +7 0 0 5 6 2 -66 -4.5 0.80000000000000004 -66 -13.296459430100001 0.80000000000000004 -62.555579886700002 -22.101126014199998 0.80000000000000004 -55.601126014199998 -29.055579886699999 0.80000000000000004 -46.796459430100001 -32.5 0.80000000000000004 -38 -32.5 0.80000000000000004 + 383.68337467399999 6 427.66567182400001 6 +7 0 0 5 15 5 -65.200000000000003 -4.5 0 -65.200000000000003 -7.3961324085399998 0 -64.815683064799998 -10.292565314899999 0 -64.044701936199999 -13.1202251169 0 -61.767762986000001 -18.502156188099999 0 -58.162061913499997 -23.101311403499999 0 -56.061385811000001 -25.147230317799998 0 -51.7602007208 -28.339419764199999 0 -46.831052239900004 -30.3981516644 0 -44.496038364599997 -31.080147596500002 0 -41.768787502400002 -31.555521804400001 0 -39.019917637299997 -31.684083704100001 0 -38.678137464199999 -31.6947756669 0 -38.338923938100002 -31.700003949900001 0 -38.000003569900002 -31.7000003729 0 + 103.76581805399999 6 124.547002021 3 145.33505857899999 3 162.64698145599999 3 165.07828899200001 6 +1 -65.200000000000003 -3.5 0 0 -1 0 +7 0 0 5 15 5 -12 50.700000000000003 0 -17.395146434200001 50.700000000000003 0 -22.790272716 50.016080707500002 0 -28.0703760954 48.647586647799997 0 -38.167235070799997 44.603325626500002 0 -46.935695196499999 38.167852959100003 0 -50.887142559099999 34.407592682999997 0 -58.071200711000003 25.572774405099999 0 -62.709492242700001 15.153781134600001 0 -64.358373071900004 9.4059114346899992 0 -65.191238028499995 3.4851502435200001 0 -65.199969163700004 -2.4372544982000002 0 -65.199989732399999 -2.4581681825900001 0 -65.200000056600004 -2.4790835333599999 0 -65.2000001567 -2.5000012219399999 0 + 206.34732287700001 6 244.784677386 3 283.22234807799998 3 325.26716929499997 3 325.41616118000002 6 +1 5.3985400242999999 50.700000000000003 0 -1 0 0 +7 0 0 5 9 3 62.796057198 40.727134911599997 0 55.583984463199997 44.5618620065 0 47.911829203899998 47.532368133200002 0 39.920285127100001 49.564612909099999 0 31.602084407900001 50.640506765600001 0 23.274783774399999 50.698883892399998 0 23.115519849199998 50.699624028199999 0 22.956266601100001 50.699990847400002 0 22.797018728600001 50.699991800799999 0 + 120.58639119999999 6 178.61598027900001 3 179.74754108900001 6 +1 75.609141310200002 33.914297240400003 0 -0.88294759285826285 0.46947156278713975 0 +7 0 0 5 12 4 100.2 7.5 0 100.2 9.6809699653300001 0 99.932382303899999 11.8619313793 0 99.396510492800004 13.9991336012 0 97.692003087800003 18.4059546282 0 94.895791927999994 22.228794922799999 0 93.118707907000001 24.048197016300001 0 91.017193152399997 25.661658038100001 0 88.725037743800002 26.937935644900001 0 88.624460949500005 26.993092693200001 0 88.523529253199996 27.047590689700002 0 88.422255048899999 27.101440138200001 0 + 62.094959105999997 6 77.796852188800003 3 95.859399766099997 3 96.6845153915 6 +1 100.2 2.5 0 0 1 0 +7 0 0 5 15 5 71 -31.699999999999999 0 73.999932498999996 -31.699999999999999 0 76.999844077000006 -31.3147433629 0 79.934138087199997 -30.543852039600001 0 85.538504313100006 -28.266498915 0 90.385589047600007 -24.647042713800001 0 92.562629609400005 -22.5336263714 0 96.364010810600007 -17.7458581679 0 98.8181968098 -12.1443684266 0 99.678127191599998 -9.1664285505599992 0 100.153771088 -6.00175461166 0 100.19845569100001 -2.8289666115399998 0 100.19948233300001 -2.71933652926 0 100.199990855 -2.60969449139 0 100.199991877 -2.50002261243 0 + 243.59478752199999 6 265.100062267 3 286.60708227999999 3 308.56748184100002 3 309.35350848100001 6 +1 16.5 -31.699999999999999 0 1 0 0 +1 -38 -32.100000000000001 0.40000000000000002 0 -0.70710678118654757 0.70710678118654757 +1 71 -32.100000000000001 0.40000000000000002 0 -0.70710678118654757 0.70710678118654757 +7 0 0 1 2 2 100.199991877 -2.50002261243 -1.1102230246299999e-16 100.999991178 -2.5000008830899998 0.80000000000000004 + 0 2 1.1313708498999999 2 +1 100.59999999999999 7.5 0.40000000000000002 0.70710678118654757 -2.3551386880284931e-15 0.70710678118654757 +7 0 0 1 2 2 88.422255048899999 27.101440138200001 0 88.7978013237 27.8078143111 0.80000000000000004 + 0 2 1.1313708498999999 2 +1 62.983845823099998 41.080313948700002 0.40000000000000002 0.33196652562098372 0.62433823034196934 0.70710678118696524 +7 0 0 1 2 2 22.797018728600001 50.699991800799999 0 22.797080812699999 51.499991602800002 0.80000000000000004 + 0 2 1.1313708498999999 2 +1 -12 51.100000000000001 0.40000000000000002 0 0.70710678118654757 0.70710678118654757 +7 0 0 1 2 2 -65.2000001567 -2.5000012219399999 0 -66.0000001704 -2.5000000367799999 0.80000000000000004 + 0 2 1.1313708498999999 2 +1 -65.599999999999994 -4.5 0.40000000000000002 -0.70710678118654757 0 0.70710678118654757 +1 -38 -32.5 0.5 0 0 1 +1 71 -32.5 0.5 0 0 1 +1 16.5 -32.5 1 1 0 0 +1 101 -2.5 0.5 0 0 1 +7 0 0 5 9 3 71 -32.5 1 75.712388980399993 -32.5 1 80.4247779608 -31.574724587399999 1 84.8946105096 -29.723259324099999 1 92.867471954300001 -24.367471954300001 1 98.223259324099999 -16.3946105096 1 100.07472458700001 -11.9247779608 1 101 -7.2123889803800001 1 101 -2.5 1 + 109 6 132.56194490199999 3 156.12388980399999 6 +1 101 7.5 0.5 2.84217094304e-14 0 1 +1 101 2.5 1 4.2632564145599998e-15 1 0 +1 88.797802672700001 27.807817643500002 0.5 0 0 1 +7 0 0 5 6 2 101 7.5 1 101 12.4776888283 1 99.654424864299997 17.455903910100002 1 96.956647293900005 21.945748933499999 1 93.192846020999994 25.470943655100001 1 88.797802672700001 27.807817643500002 1 + 166.12388980399999 6 191.01233394499999 6 +1 63.171634448200003 41.433492985900003 0.5 -5.85487214266e-12 -1.1006306976900001e-11 1 +1 75.984718560399998 34.620655314700002 1 -0.88294759285848323 0.46947156278672519 0 +1 22.797080048600002 51.5 0.5 0 0 1 +7 0 0 5 6 2 63.171634448200003 41.433492985900003 1 55.7500134434 45.379638872299999 1 47.845323711900001 48.4193390577 1 39.609065293299999 50.472868920099998 1 31.202585726199999 51.5 1 22.797080048600002 51.5 1 + 220.03576459000001 6 262.06329297799999 6 +1 -12 51.5 0.5 0 0 1 +1 5.3985400242999999 51.5 1 -1 0 0 +1 -66 -2.5 0.5 0 0 1 +7 0 0 5 9 3 -12 51.5 1 -20.4823001647 51.5 1 -28.9646003294 49.834504257299997 1 -37.0102989174 46.501866783399997 1 -51.361449517799997 36.861449517799997 1 -61.001866783399997 22.5102989174 1 -64.334504257299997 14.4646003294 1 -66 5.9823001646899998 1 -66 -2.5 1 + 296.86037302699998 6 339.27187385000002 3 381.68337467399999 6 +1 -66 -4.5 0.5 0 0 1 +1 -66 -3.5 1 0 -1 0 +7 0 0 5 6 2 -66 -4.5 1 -66 -13.296459430100001 1 -62.555579886700002 -22.101126014199998 1 -55.601126014199998 -29.055579886699999 1 -46.796459430100001 -32.5 1 -38 -32.5 1 + 383.68337467399999 6 427.66567182400001 6 +1 11.300000000000001 1.7922171683299999e-15 0.10000000000000001 0.70710678118654757 1.2672889130791892e-14 0.70710678118654757 +2 8.7090243936400008e-28 -1.7763568394e-15 9.7699626167000005e-14 2.7679330007800001e-30 1.7763568393999999e-14 1 0 1 -1.7763568393999999e-14 -1 4.9168367169365182e-44 2.7679330007800001e-30 11.199999999999999 +1 -11.300000000000001 8.1628337162099993e-15 0.10000000000000001 -0.70710678118654757 1.3071535693791637e-14 0.70710678118654757 +2 1.7763568394e-15 1.7763568394e-15 0.20000000000000001 2.7679330007800001e-30 1.7763568393999999e-14 1 0 1 -1.7763568393999999e-14 -1 4.9168367169365182e-44 2.7679330007800001e-30 11.4 +2 1.00974195868e-28 -2.3075552236599999e-15 -8.8817841969999996e-15 -1.38379325944e-14 -7.9893341084e-15 1 1 0 1.38379325944e-14 -1.1055586686618002e-28 1 7.9893341084e-15 11.199999999999999 +2 -2.6645352590999998e-15 -4.0839120630600003e-15 0.20000000000000001 -1.38379325944e-14 -7.9893341084e-15 1 1 0 1.38379325944e-14 -1.1055586686618002e-28 1 7.9893341084e-15 11.4 +1 11.4 0 1.5 0 0 1 +1 -11.4 1.3960973510299999e-15 1.5 0 0 1 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 11.4 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 11.4 +1 11.300000000000001 -1.7607747618600001e-15 2.8999999999999999 0.70710678118654757 1.2450557742492034e-14 -0.70710678118654757 +1 -11.300000000000001 3.1446256449e-15 2.8999999999999999 -0.70710678118654757 1.2757517201991837e-14 -0.70710678118654757 +2 8.7090243936400008e-28 -1.7763568394e-15 3 -2.7679330007800001e-30 -1.7763568393999999e-14 1 0 1 1.7763568393999999e-14 -1 4.9168367169365182e-44 -2.7679330007800001e-30 11.199999999999999 +2 7.5730646901200004e-29 -2.3075552236599999e-15 3 1.38379325944e-14 7.9893341084e-15 1 1 0 -1.38379325944e-14 -1.1055586686618002e-28 1 -7.9893341084e-15 11.199999999999999 +2 0 0 4.5999999999999996 0 0 1 1 0 -0 -0 1 0 10 +2 0 0 4.5999999999999996 0 0 1 1 0 -0 -0 1 0 10 +2 4.5562353437399997e-16 0 20.399999999999999 0 0 1 1 0 -0 -0 1 0 9.8000000000000007 +2 4.5562353437399997e-16 0 20.399999999999999 0 0 1 1 0 -0 -0 1 0 9.8000000000000007 +2 6.5077460204099998e-16 -3.5523141753600001e-16 3 0 0 1 1 0 -0 -0 1 0 8.1999999999999993 +2 6.5077460204099998e-16 -3.5523141753600001e-16 3 0 0 1 1 0 -0 -0 1 0 8.1999999999999993 +2 4.4408920985e-16 0 2.7999999999999998 1.2025318677099999e-31 -2.2204460492499999e-15 1 0 1 2.2204460492499999e-15 -1 -2.6701571347538926e-46 1.2025318677099999e-31 8 +1 -8.0999999999999996 -6.8629993849700002e-15 2.8999999999999999 -0.70710678118654757 -2.1498287745486247e-15 0.70710678118654757 +1 8.0999999999999996 2.1662888285400001e-16 2.8999999999999999 0.70710678118654757 -1.5317975206690201e-15 0.70710678118654757 +2 -8.881784197e-16 -6.5019172940700005e-16 2.7999999999999998 0 -0 1 1 0 0 -0 1 0 8 +2 -5.2841545998399997e-16 0 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 9.0999999999999996 +2 -5.2841545998399997e-16 0 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 9.0999999999999996 +2 6.5077460204099998e-16 -3.5523141753600001e-16 0 0 0 1 1 0 -0 -0 1 0 8.1999999999999993 +2 6.5077460204099998e-16 -3.5523141753600001e-16 0 0 0 1 1 0 -0 -0 1 0 8.1999999999999993 +2 0 0 0.20000000000000001 0 0 1 1 0 -0 -0 1 0 8 +1 -8 9.7971743931799991e-16 1.5 0 0 1 +2 0 0 22.875500200200001 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 22.875500200200001 0 0 1 1 0 -0 -0 1 0 8 +1 8 -1.9594348786400001e-15 1.5 0 0 1 +1 -3.8354043088299998 7.0206604951199996 29 0 0 1 +2 0 0 0.20000000000000001 0 0 1 1 0 -0 -0 1 0 8 +1 3.8354043088299998 -7.0206604951199996 29 0 0 1 +1 8.0999999999999996 -1.3988810110299999e-14 0.10000000000000001 0.70710678118654757 -1.5700924586789954e-15 -0.70710678118654757 +1 -8.0999999999999996 1.55431223448e-15 0.10000000000000001 -0.70710678118654757 1.5700924586789954e-15 -0.70710678118654757 +1 9.3000000000000007 -2.46662593732e-15 0.10000000000000001 0.70710678118654757 -1.7441679269288843e-14 0.70710678118654757 +2 1.3322676295499999e-15 2.2204460492499999e-15 -2.1316282072799998e-14 6.9235132639099993e-30 -2.4424906541799999e-14 1 0 1 2.4424906541799999e-14 -1 -1.691061644119144e-43 6.9235132639099993e-30 9.1999999999999993 +1 -9.3000000000000007 -9.9793715242500008e-15 0.10000000000000001 -0.70710678118654757 -1.8012895758488476e-14 0.70710678118654757 +2 8.881784197e-16 -2.6645352590999998e-15 0.20000000000000001 6.9235132639099993e-30 -2.4424906541799999e-14 1 0 1 2.4424906541799999e-14 -1 -1.691061644119144e-43 6.9235132639099993e-30 9.4000000000000004 +2 2.6645352590999998e-15 -1.84083345573e-17 -4.9737991503200002e-14 -7.1765944466400001e-15 -4.1434087356300003e-15 1 1 0 7.1765944466400001e-15 -2.9735564122281926e-29 1 4.1434087356300003e-15 9.1999999999999993 +2 1.7763568394e-15 -1.79476517396e-15 0.20000000000000001 -7.1765944466400001e-15 -4.1434087356300003e-15 1 1 0 7.1765944466400001e-15 -2.9735564122281926e-29 1 4.1434087356300003e-15 9.4000000000000004 +1 9.4000000000000004 0 1.5 0 0 1 +1 -9.4000000000000004 1.1511679911999999e-15 1.5 0 0 1 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 9.4000000000000004 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 9.4000000000000004 +1 9.3000000000000007 2.4141445344000001e-15 2.8999999999999999 0.70710678118654757 -1.707057971038908e-14 -0.70710678118654757 +1 -9.3000000000000007 -1.71931222104e-15 2.8999999999999999 -0.70710678118654757 -1.7384858774988878e-14 -0.70710678118654757 +2 1.3322676295499999e-15 2.2204460492499999e-15 3 -6.9235132639099993e-30 2.4424906541799999e-14 1 0 1 -2.4424906541799999e-14 -1 -1.691061644119144e-43 -6.9235132639099993e-30 9.1999999999999993 +2 2.6645352590999998e-15 -1.84083345573e-17 3 7.1765944466400001e-15 4.1434087356300003e-15 1 1 0 -7.1765944466400001e-15 -2.9735564122281926e-29 1 -4.1434087356300003e-15 9.1999999999999993 +2 0 0 4.5999999999999996 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 4.5999999999999996 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 19.399999999999999 0 0 1 1 0 -0 -0 1 0 7.7999999999999998 +2 0 0 19.399999999999999 0 0 1 1 0 -0 -0 1 0 7.7999999999999998 +2 5.6917383248299999e-16 -3.0773183653900002e-16 3 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +2 5.6917383248299999e-16 -3.0773183653900002e-16 3 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +2 -2.22044604925e-16 3.7865323450600002e-29 2.7999999999999998 1.4314008360899999e-30 -6.6613381477499997e-15 1 0 1 6.6613381477499997e-15 -1 -9.5350449941675611e-45 1.4314008360899999e-30 6 +1 -6.0999999999999996 1.47906547081e-15 2.8999999999999999 -0.70710678118654757 -4.4616077101771458e-15 0.70710678118654757 +1 6.0999999999999996 6.4464562720200003e-16 2.8999999999999999 0.70710678118654757 -4.5583329445670837e-15 0.70710678118654757 +2 1.3322676295499999e-15 -2.6559919212999999e-16 2.7999999999999998 -9.9920072216299998e-15 -5.7688880591500001e-15 1 1 0 9.9920072216299998e-15 -5.7642771147801877e-29 1 5.7688880591500001e-15 6 +2 -2.2977359924999999e-16 8.881784197e-16 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 6.9000000000000004 +2 -2.2977359924999999e-16 8.881784197e-16 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 6.9000000000000004 +2 5.6917383248299999e-16 -3.0773183653900002e-16 0 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +2 5.6917383248299999e-16 -3.0773183653900002e-16 0 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +2 0 0 0.20000000000000001 0 0 1 1 0 -0 -0 1 0 6 +1 -6 7.3478807948799999e-16 1.5 0 0 1 +2 0 0 21.9255437353 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 21.9255437353 0 0 1 1 0 -0 -0 1 0 6 +1 6 -1.4695761589800001e-15 1.5 0 0 1 +1 -2.87655323163 5.2654953713400001 28 0 0 1 +2 0 0 0.20000000000000001 0 0 1 1 0 -0 -0 1 0 6 +1 2.87655323163 -5.2654953713400001 28 0 0 1 +1 -6.0999999999999996 -1.22987870927e-15 0.10000000000000001 -0.70710678118654757 -4.7756262019069448e-15 -0.70710678118654757 +1 6.0999999999999996 -6.6613381477499995e-16 0.10000000000000001 0.70710678118654757 -4.7102773760469866e-15 -0.70710678118654757 +2 0 0 13 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 13 0 0 1 1 0 -0 -0 1 0 8 +2 -2.84586916241e-16 3.9130700983199998e-16 0 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +2 -2.84586916241e-16 3.9130700983199998e-16 0 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +1 3.4039213240900001 -6.2308361894199997 0.90000000000000002 0.3390050494208432 -0.62054458056371298 0.70710678118667292 +1 -3.4039213240900001 6.2308361894199997 0.90000000000000002 -0.3390050494208432 0.62054458056371298 0.70710678118667292 +2 -2.84586916241e-16 0 58 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +2 -2.84586916241e-16 0 58 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +1 3.4039213240900001 -6.2308361894199997 57.100000000000001 0.3390050494208432 -0.62054458056371298 -0.70710678118667292 +2 2.6645352590999998e-15 -1.3322676295499999e-15 56.200000000000003 -1.5377165720499999e-15 9.3686294527999993e-16 1 1 0 1.5377165720499999e-15 1.4406296766966282e-30 1 -9.3686294527999993e-16 8 +1 -3.4039213240900001 6.2308361894199997 57.100000000000001 -0.3390050494208432 0.62054458056371298 -0.70710678118667292 +2 -1.7763568394e-15 2.22044604925e-16 56.200000000000003 2.45644256797e-16 1.3419606910400001e-16 1 1 0 -2.45644256797e-16 -3.2964493660130939e-32 1 -1.3419606910400001e-16 8 +2 0 0 20.399999999999999 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 20.399999999999999 0 0 1 1 0 -0 -0 1 0 8 +1 4.7463128321800001 -8.6880673627099991 20.300000000000001 0.3390050494208432 -0.62054458056371298 -0.70710678118667292 +2 3.9968028886399999e-15 1.7763568394e-15 20.199999999999999 -1.87245477905e-14 1.140804184e-14 1 1 0 1.87245477905e-14 2.1361042462910357e-28 1 -1.140804184e-14 10 +1 -4.7463128321800001 8.6880673627099991 20.300000000000001 -0.3390050494208432 0.62054458056371298 -0.70710678118667292 +2 2.6645352590999998e-15 3.8857805861899998e-16 20.199999999999999 -2.0083033176799999e-14 -1.09714110281e-14 1 1 0 2.0083033176799999e-14 -2.2033921167364167e-28 1 1.09714110281e-14 10 +2 0 0 13.199999999999999 0 0 1 1 0 -0 -0 1 0 10 +1 -10 1.2246467991500001e-15 6 0 0 1 +1 4.7942553860399997 -8.7758256189000008 16.699999999999999 0 0 1 +1 -4.7942553860399997 8.7758256189000008 16.699999999999999 0 0 1 +2 0 0 13.199999999999999 0 0 1 1 0 -0 -0 1 0 10 +1 10 0 6 0 0 1 +1 4.7463128321800001 -8.6880673627099991 13.1 0.3390050494208432 -0.62054458056371298 0.70710678118667292 +1 -4.7463128321800001 8.6880673627099991 13.1 -0.3390050494208432 0.62054458056371298 0.70710678118667292 +1 -3.6915766472499998 6.7573857265599999 24.899999999999999 0 0 1 +2 0 0 23.5 0 0 1 1 0 -0 -0 1 0 7.7000000000000002 +1 3.6915766472499998 -6.7573857265599999 24.899999999999999 0 0 1 +2 0 0 26.300000000000001 0 0 1 1 0 -0 -0 1 0 7.7000000000000002 +2 0 0 23.5 0 0 1 1 0 -0 -0 1 0 7.7000000000000002 +2 0 0 26.300000000000001 0 0 1 1 0 -0 -0 1 0 7.7000000000000002 +2 0 0 26.9244997998 0 0 1 1 0 -0 -0 1 0 8 +1 3.8354043088299998 -7.0206604951199996 29 0 0 1 +2 0 0 -7 0 0 1 1 0 -0 -0 1 0 8 +1 -3.8354043088299998 7.0206604951199996 29 0 0 1 +1 -3.8354043088299998 7.0206604951199996 -2 0 0 1 +1 3.8354043088299998 -7.0206604951199996 -2 0 0 1 +2 0 0 2.2679491924300001 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 26.9244997998 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 -7 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 2.2679491924300001 0 0 1 1 0 -0 -0 1 0 8 +2 -3.8354043088299998 7.0206604951199996 26.300000000000001 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.29999999999999999 +2 3.8354043088299998 -7.0206604951199996 26.300000000000001 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -2.6645352590999998e-15 1.3322676295499999e-15 26.534187424900001 0 0 1 1 0 -0 -0 1 0 7.8125 +2 -8.881784197e-16 -1.56819002228e-15 26.534187424900001 0 -0 1 1 0 0 -0 1 0 7.8125 +2 3.5956915395300002 -6.5818692141800001 26.9244997998 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.5 +2 -3.5956915395300002 6.5818692141800001 26.9244997998 -0.87758256189037243 -0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 -0 0 1 0.5 +2 3.8354043088299998 -7.0206604951199996 23.5 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -3.8354043088299998 7.0206604951199996 23.5 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -8.881784197e-16 -4.4408920985e-16 23.2658125751 0 0 1 1 0 -0 -0 1 0 7.8125 +2 -8.881784197e-16 1.09634523682e-15 23.2658125751 0 -0 1 1 0 0 -0 1 0 7.8125 +2 3.5956915395300002 -6.5818692141800001 22.875500200200001 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.5 +2 -3.5956915395300002 6.5818692141800001 22.875500200200001 -0.87758256189037243 -0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 -0 0 1 0.5 +1 2.7327255700399999 -5.0022206027799996 23.899999999999999 0 0 1 +2 0 0 25.300000000000001 0 0 1 1 0 -0 -0 1 0 5.7000000000000002 +1 -2.7327255700399999 5.0022206027799996 23.899999999999999 0 0 1 +2 0 0 22.5 0 0 1 1 0 -0 -0 1 0 5.7000000000000002 +2 0 0 25.300000000000001 0 0 1 1 0 -0 -0 1 0 5.7000000000000002 +2 0 0 22.5 0 0 1 1 0 -0 -0 1 0 5.7000000000000002 +2 0 0 19.399999999999999 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 19.399999999999999 0 0 1 1 0 -0 -0 1 0 6 +2 2.87655323163 -5.2654953713400001 22.5 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -2.87655323163 5.2654953713400001 22.5 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.29999999999999999 +2 0 1.7763568394e-15 22.253804458000001 0 0 1 1 0 -0 -0 1 0 5.8285714285700001 +2 -4.4408920985e-16 -3.1918911957999998e-16 22.253804458000001 0 -0 1 1 0 0 -0 1 0 5.8285714285700001 +2 2.6847830161799999 -4.9144623465899997 21.9255437353 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.40000000000000002 +2 -2.6847830161799999 4.9144623465899997 21.9255437353 -0.87758256189037243 -0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 -0 0 1 0.40000000000000002 +2 -2.87655323163 5.2654953713400001 25.300000000000001 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.29999999999999999 +2 2.87655323163 -5.2654953713400001 25.300000000000001 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 0 8.881784197e-16 25.546195542 0 0 1 1 0 -0 -0 1 0 5.8285714285700001 +2 8.881784197e-16 1.4294121442000001e-15 25.546195542 0 -0 1 1 0 0 -0 1 0 5.8285714285700001 +2 2.6847830161799999 -4.9144623465899997 25.874456264700001 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.40000000000000002 +2 4.7184478546599997e-16 1.3322676295499999e-15 25.874456264700001 0 0 -1 -1 0 -0 0 1 0 6 +2 -2.6847830161799999 4.9144623465899997 25.874456264700001 -0.87758256189037243 -0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 -0 0 1 0.40000000000000002 +2 1.1102230246299999e-16 -8.881784197e-16 25.874456264700001 -0 0 -1 -1 0 0 0 1 0 6 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 6 +2 -1.5503856378e-16 1.16278922835e-16 0 0 0 1 1 0 -0 -0 1 0 4.2000000000000002 +2 -1.5503856378e-16 1.16278922835e-16 0 0 0 1 1 0 -0 -0 1 0 4.2000000000000002 +1 2.4450702468799999 -4.4756710656400003 0.90000000000000002 0.3390050494208432 -0.62054458056371298 0.70710678118667292 +1 -2.4450702468799999 4.4756710656400003 0.90000000000000002 -0.3390050494208432 0.62054458056371298 0.70710678118667292 +2 0 -8.881784197e-16 56 0 0 1 1 0 -0 -0 1 0 4.2000000000000002 +2 0 -8.881784197e-16 56 0 0 1 1 0 -0 -0 1 0 4.2000000000000002 +1 2.87655323163 -5.2654953713400001 28 0 0 1 +2 0 0 -4.5 0 0 1 1 0 -0 -0 1 0 6 +1 -2.87655323163 5.2654953713400001 28 0 0 1 +1 2.87655323163 -5.2654953713400001 -0.75 0 0 1 +1 -2.87655323163 5.2654953713400001 -0.75 0 0 1 +2 0 0 2.2679491924300001 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 54.200000000000003 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 -4.5 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 2.2679491924300001 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 54.200000000000003 0 0 1 1 0 -0 -0 1 0 6 +1 -2.4450702468799999 4.4756710656400003 55.100000000000001 -0.3390050494208432 0.62054458056371298 -0.70710678118667292 +1 2.4450702468799999 -4.4756710656400003 55.100000000000001 0.3390050494208432 -0.62054458056371298 -0.70710678118667292 +1 3.7874617549699998 -6.9329022389299997 19.300000000000001 0.3390050494208432 -0.62054458056371298 -0.70710678118667292 +2 2.6645352590999998e-15 -1.3322676295499999e-15 19.199999999999999 -2.0493787731500001e-14 1.24859617715e-14 1 1 0 2.0493787731500001e-14 2.5588465016874472e-28 1 -1.24859617715e-14 8 +1 -3.7874617549699998 6.9329022389299997 19.300000000000001 -0.3390050494208432 0.62054458056371298 -0.70710678118667292 +2 -1.7763568394e-15 2.2204460492599998e-16 19.199999999999999 1.9181567784200001e-14 1.04789382396e-14 1 1 0 -1.9181567784200001e-14 -2.0100246414933284e-28 1 -1.04789382396e-14 8 +2 0 0 12.199999999999999 0 0 1 1 0 -0 -0 1 0 8 +1 -8 9.7971743931799991e-16 6 0 0 1 +1 3.8354043088299998 -7.0206604951199996 15.699999999999999 0 0 1 +1 -3.8354043088299998 7.0206604951199996 15.699999999999999 0 0 1 +2 0 0 12.199999999999999 0 0 1 1 0 -0 -0 1 0 8 +1 8 0 6 0 0 1 +1 3.7874617549699998 -6.9329022389299997 12.1 0.3390050494208432 -0.62054458056371298 0.70710678118667292 +1 -3.7874617549699998 6.9329022389299997 12.1 -0.3390050494208432 0.62054458056371298 0.70710678118667292 +1 23 0 6 0 0 1 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 23 +1 -23 2.8166876380400002e-15 6 0 0 1 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 23 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +1 -21.399999999999999 2.62074415018e-15 1.4100000000099999 0 0 1 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +1 10.2597065261 -18.7802668245 1.55 0 0 1 +1 21.399999999999999 -5.2414883003499996e-15 1.4100000000099999 0 0 1 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +1 -10.2597065261 18.7802668245 1.55 0 0 1 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 11.5 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 11.5 +1 11.5 0 3.1000000000000001 0 0 1 +1 -11.5 1.4083438190200001e-15 3.1000000000000001 0 0 1 +2 0 0 4.5999999999999996 0 0 1 1 0 -0 -0 1 0 11.5 +2 0 0 4.5999999999999996 0 0 1 1 0 -0 -0 1 0 11.5 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +2 -9.9045007336499992e-16 3.5527136788e-15 0 0 0 1 1 0 -0 -0 1 0 9.4000000000000004 +2 -9.9045007336499992e-16 3.5527136788e-15 0 0 0 1 1 0 -0 -0 1 0 9.4000000000000004 +2 4.5066000628799996 -8.2492760817700006 0.59999999999999998 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.59999999999999998 +2 -4.4408920984999998e-15 2.6645352590999998e-15 0.59999999999999998 0 0 1 1 0 -0 -0 1 0 8.8000000000000007 +2 -4.5066000628799996 8.2492760817700006 0.59999999999999998 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.59999999999999998 +2 -4.4408920984999998e-15 4.8572257327400001e-16 0.59999999999999998 0 -0 1 1 0 0 -0 1 0 8.8000000000000007 +1 -4.2189447397200004 7.7227265446400004 1.55 0 0 1 +1 4.2189447397200004 -7.7227265446400004 1.55 0 0 1 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 8.8000000000000007 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 8.8000000000000007 +2 4.3627724013 -7.9860013132000001 2.7999999999999998 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -4.3627724013 7.9860013132000001 2.7999999999999998 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.29999999999999999 +1 17 0 6 0 0 1 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 17 +1 -17 2.0818995585500001e-15 6 0 0 1 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 17 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 15.4 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 15.4 +1 -15.4 1.88595607069e-15 1.4100000000099999 0 0 1 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 15.4 +1 7.3831532944999996 -13.5147714531 1.55 0 0 1 +1 15.4 -3.7719121413700003e-15 1.4100000000099999 0 0 1 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 15.4 +1 -7.3831532944999996 13.5147714531 1.55 0 0 1 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 9.5 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 9.5 +2 0 0 4.5999999999999996 0 0 -1 -1 0 -0 0 1 0 9.5 +1 -9.5 -5.3822619527700003e-15 3.1000000000000001 0 0 -1 +1 9.5 0 3.1000000000000001 0 0 -1 +2 0 0 4.5999999999999996 0 0 -1 -1 0 -0 0 1 0 9.5 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 15.4 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 15.4 +2 -6.3307413543499999e-16 -1.7763568394e-15 0 0 0 1 1 0 -0 -0 1 0 7.2000000000000002 +2 -6.3307413543499999e-16 -1.7763568394e-15 0 0 0 1 1 0 -0 -0 1 0 7.2000000000000002 +2 3.4518638779500002 -6.3185944456099996 0.59999999999999998 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.59999999999999998 +2 -8.881784197e-16 8.881784197e-16 0.59999999999999998 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +2 -3.4518638779500002 6.3185944456099996 0.59999999999999998 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.59999999999999998 +2 -5.3290705181999996e-15 -8.3266726846900003e-16 0.59999999999999998 0 -0 1 1 0 0 -0 1 0 6.5999999999999996 +1 -3.1642085547900001 5.7920449084800003 1.55 0 0 1 +1 3.1642085547900001 -5.7920449084800003 1.55 0 0 1 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +2 3.3080362163700001 -6.05531967704 2.7999999999999998 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -3.3080362163700001 6.05531967704 2.7999999999999998 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -12.1983481148 -55 7 0 -0 1 1 0 0 -0 1 0 10 +1 20.650825942600001 -45 7 -1 0 0 +1 -21.804949832599998 -50.464466094099997 7 0.70710678118654757 0.70710678118654757 0 +2 -14.8578643763 55 7 0 0 1 1 0 -0 -0 1 0 10 +1 -4.7789321881299998 45 7 1 0 0 +1 -24.464466094100001 50.464466094099997 7 -0.70710678118654757 0.70710678118654757 0 +1 -68.326309529599996 34.750457374500002 7 0.50000000000018996 0.86602540378432902 0 +7 0 0 4 5 2 -78.862687876999999 16.500914749 7 -82.5869740638 10.050262138800001 7 -85.188155349599995 2.9491496505499999 7 -86.4932857923 -4.50021638696 7 -86.499977001199994 -11.948795860200001 7 + 0 5 42.135545458199999 5 +1 -86.5 -12.9743979301 7 0 1 0 +1 -42.394965591099997 53 7 1 0 0 +7 0 0 3 4 2 23 43.222181183300002 7 17.179127945400001 44.403399888300001 7 11.2395854121 45 7 5.2999999999999998 45 7 + 0 4 25.199526734100001 4 +2 -68.458904109599999 -1 7 0 0 1 1 0 -0 -0 1 0 6 +2 -68.458904109599999 -1 7 0 0 1 1 0 -0 -0 1 0 6 +2 -6.4589041095899997 -1 7 0 0 1 1 0 -0 -0 1 0 8 +2 -6.4589041095899997 -1 7 0 0 1 1 0 -0 -0 1 0 8 +1 59.8946005755 27.7702704676 7 0.8829475928588979 -0.46947156278594571 0 +2 5.2998818036899999 -44.0004740595 7 0 0 1 1 0 -0 -0 1 0 89.000474059599995 +2 60.500078944800002 -1.9983999996099999 7 0 0 1 1 0 -0 -0 1 0 25.999921055400002 +1 86.5 -6.9992591740399996 7 0 -1 0 +2 53.499751589699997 -11.999751589700001 7 0 0 1 1 0 -0 -0 1 0 33.000248411299999 +2 -55.499766644799998 -13.999766644799999 7 0 0 1 1 0 -0 -0 1 0 31.000233355999999 +1 -42.340483738499998 -53 7 -1 0 0 +1 -68.880362803899999 -44.460120934599999 7 0.70710678118654757 -0.70710678118654757 0 +2 -40 -22 7 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 -22 7 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 20 7 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 20 7 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 33 -4 7 0 0 -1 -1 0 -0 0 1 0 10.765711135 +2 33 -4 7 0 0 -1 -1 0 -0 0 1 0 10.765711135 +2 -40.000000188800001 -22.000011602899999 7 5.76090795865e-17 2.3455816874200001e-17 1 1 0 -5.76090795865e-17 -1.3512680210721575e-33 1 -2.3455816874200001e-17 24.000006407600001 +2 -10.050091973400001 -29.999935313400002 7 2.69383714935e-16 -1.7976870128500001e-16 -1 -1 0 -2.69383714935e-16 4.8426760581193609e-32 1 -1.7976870128500001e-16 6.9999338036700003 +2 -40.000005889900002 20.000007856700002 7 1.2518649094500001e-16 3.3689686731300001e-16 1 0 1 -3.3689686731300001e-16 -1 4.2174936629277745e-32 1.2518649094500001e-16 14.0000039535 +2 -10.050077960799999 27.999952680300002 7 -1.3606594428900001e-16 1.04491966795e-16 -1 -1 0 1.3606594428900001e-16 1.421779813257651e-32 1 1.04491966795e-16 16.9999549184 +1 -0.937212455434 11 7 -1 0 0 +2 8.1756210378799992 27.9999879308 7 1.61279430607e-16 -9.6888452206000006e-16 -1 0 -1 9.6888452206000006e-16 -1 -1.5626114404177214e-31 -1.61279430607e-16 16.999987833900001 +2 33.000154312699998 -3.9999358403 7 5.9907681504699996e-17 1.03890016243e-17 1 1 0 -5.9907681504699996e-17 -6.2238100046037534e-34 1 -1.03890016243e-17 23.4999954223 +2 32.999998499500002 -4.0000094690600001 7 -1.07608474141e-16 1.6621763078200001e-16 1 0 1 -1.6621763078200001e-16 -1 -1.7886425623783132e-32 -1.07608474141e-16 23.499997080899998 +2 1.9476373989 -29.999971756400001 7 4.70738733509e-16 1.0081044974899999e-15 -1 0 -1 -1.0081044974899999e-15 -1 4.7455383439316942e-31 -4.70738733509e-16 16.999971543899999 +1 -4.0512084233500003 -13 7 -1 0 0 +2 -10.0500782264 -29.9999528508 7 2.2184535635e-16 -1.48044541144e-16 -1 -1 0 -2.2184535635e-16 3.2842993985762914e-32 1 -1.48044541144e-16 16.999954907700001 +2 -40.000005894799997 -22.000007838799998 7 5.5640088590099997e-18 3.34722974126e-16 1 0 1 -3.34722974126e-16 -1 1.8624015933512388e-33 5.5640088590099997e-18 14.000003959200001 +1 -4.0512084233500003 -23 7 -1 0 0 +2 1.94758182896 -30.000090517899999 7 -4.2166878908399999e-16 -5.48623878844e-16 -1 0 -1 5.48623878844e-16 -1 2.3133756665471658e-31 4.2166878908399999e-16 7.0000925632 +2 33.000000815600004 -4.0000089966100001 7 -5.2933418242299998e-17 -1.2842066634500001e-16 1 0 1 1.2842066634500001e-16 -1 6.7977448425947445e-33 -5.2933418242299998e-17 33.499997306399997 +2 33.000231648499998 -3.99990394745 7 2.1012375303300001e-17 3.6438932552000002e-18 1 1 0 -2.1012375303300001e-17 -7.656685264342593e-35 1 -3.6438932552000002e-18 33.499988350499997 +2 8.1755617599299999 28.000161024899999 7 -1.95855484681e-16 1.17654303265e-15 -1 0 -1 -1.17654303265e-15 -1 -2.3043240590771934e-31 1.95855484681e-16 7.0001627314999997 +1 -0.937212455434 21 7 -1 0 0 +2 -10.0500892177 27.999937760200002 7 -2.6938377685800001e-16 -1.79768782062e-16 -1 -1 0 2.6938377685800001e-16 -4.8426793473024245e-32 1 -1.79768782062e-16 6.9999367231200003 +2 -40.000000158600002 20.0000116416 7 3.6512598978999999e-17 9.8261528521100004e-17 1 0 1 -9.8261528521100004e-17 -1 3.5877837859544956e-33 3.6512598978999999e-17 24.000006379399998 +2 -70.199389163800006 27.000064425600002 7 3.6359605203699998e-16 -4.57512413114e-16 -1 0 -1 4.57512413114e-16 -1 -1.6634970716617138e-31 -3.6359605203699998e-16 7.0000700167899996 +2 -65.199337741099995 16.091298859399998 7 0 0 1 1 0 -0 -0 1 0 5 +2 -70.199302031900004 26.9999554113 7 0 0 -1 -1 0 -0 0 1 0 16.999958414799998 +2 -65.199337741099995 16.091272674700001 7 0 0 1 1 0 -0 -0 1 0 5 +2 -70.199384206299996 -29.000057785500001 7 2.03942557704e-16 5.8439850052099999e-16 -1 0 -1 -5.8439850052099999e-16 -1 1.1918372491463511e-31 -2.03942557704e-16 7.0000631979800003 +2 -65.199337741099995 -18.091297447999999 7 9.8355079826499999e-17 -6.3129980462000004e-16 1 0 1 6.3129980462000004e-16 -1 -6.2091542677853961e-32 9.8355079826499999e-17 5 +7 0 0 5 9 3 -53.638400442600002 -25.161334112599999 7 -54.003979222200002 -23.584138428700001 7 -54.557315125400002 -22.050463563099999 7 -55.291490251799999 -20.5902685633 7 -57.019285000799997 -17.984147073199999 7 -59.287073799600002 -15.837099635 7 -60.481358048700002 -14.9322948693 7 -61.7647902569 -14.165305821500001 7 -63.116009920099998 -13.545968072999999 7 + 0 6 10.190667787600001 3 19.550105514999998 6 +2 -65.199337741099995 -18.0912726864 7 0 0 1 1 0 -0 -0 1 0 5 +2 0 0 -8.881784197e-16 0 0 1 1 0 -0 -0 1 0 11.5 +1 5.2175188920100002 -9.55060426963 -3.5 0.083251371105611274 -0.15239061262502063 0.98480775301213319 +2 0 0 -7 0 0 1 1 0 -0 -0 1 0 10.265711135 +1 -5.2175188920100002 9.55060426963 -3.5 -0.083251371105611274 0.15239061262502063 0.98480775301213319 +2 0 0 -8.881784197e-16 0 0 1 1 0 -0 -0 1 0 11.5 +2 0 0 -7 0 0 1 1 0 -0 -0 1 0 10.265711135 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 15.300000000000001 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 15.300000000000001 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 12.199999999999999 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 12.199999999999999 +1 4.3148298474400004 -7.8982430570100002 5 0 0 1 +2 0 0 4 0 0 1 1 0 -0 -0 1 0 9 +1 -4.3148298474400004 7.8982430570100002 5 0 0 1 +2 0 0 5 0 0 1 1 0 -0 -0 1 0 9 +2 0 0 4 0 0 1 1 0 -0 -0 1 0 9 +2 0 0 5 0 0 1 1 0 -0 -0 1 0 9 +1 4.6631528902500001 -8.5358441100599993 6 0.28179926116401238 -0.51583008754802262 0.80901699437503549 +2 -4.4408920984999998e-15 -2.4424906541799999e-15 7 -2.23511578476e-15 -1.19377914327e-15 1 1 0 2.23511578476e-15 -2.6682346066400466e-30 1 1.19377914327e-15 10.453085056000001 +1 -4.6631528913300002 8.5358441094700002 6 -0.28179926122893828 0.51583008751288706 0.80901699437482277 +2 8.881784197e-16 1.3322676295499999e-15 7 -1.2746412216999999e-15 -6.9633967307099996e-16 1 1 0 1.2746412216999999e-15 -8.8758325160139799e-31 1 6.9633967307099996e-16 10.453085056000001 +1 7.33521074064 -13.427013196900001 0.75 0 0 1 +1 -7.33521074064 13.427013196900001 0.75 0 0 1 +2 0 0 1 0 0 1 1 0 -0 -0 1 0 15.300000000000001 +2 0 0 1 0 0 1 1 0 -0 -0 1 0 15.300000000000001 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 16 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 16 +2 -1.4022779760100001e-15 1.7763568394e-15 1.5 0 0 1 1 0 -0 -0 1 0 15.800000000000001 +2 -1.4022779760100001e-15 1.7763568394e-15 1.5 0 0 1 1 0 -0 -0 1 0 15.800000000000001 +2 7.5749235099499996 -13.865804477899999 1 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.5 +2 -7.5749235099499996 13.865804477899999 1 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.5 +2 3.8354043088299998 -7.0206604951199996 4 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 1 +2 -3.8354043088299998 7.0206604951199996 4 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 1 +2 -1.7763568394e-15 -4.4408920985e-16 3.1339745962199999 0 -0 1 1 0 0 -0 1 0 8.5 +2 1.7763568394e-15 2.91433543964e-16 3.1339745962199999 0 0 1 1 0 -0 -0 1 0 8.5 +2 4.3148298474400004 -7.8982430570100002 2.2679491924300001 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 1 +2 -4.3148298474400004 7.8982430570100002 2.2679491924300001 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 1 +1 5.5133936939500003 -10.0921994617 0.34999999999999998 0 0 1 +1 -5.5133936939500003 10.0921994617 0.34999999999999998 0 0 1 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 11.5 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 11.5 +2 5.6572213555299999 -10.3554742303 0.40000000000000002 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -5.6572213555299999 10.3554742303 0.40000000000000002 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.29999999999999999 +2 -1.7763568394e-15 2.6645352590999998e-15 0.69999999999999996 0 -0 1 1 0 0 -0 1 0 11.800000000000001 +2 0 1.3877787807800001e-15 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 11.800000000000001 +1 5.84899157097 -10.7065072551 0.34999999999999998 0 0 1 +1 -5.84899157097 10.7065072551 0.34999999999999998 0 0 1 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 12.199999999999999 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 12.199999999999999 +2 -1.23601678529e-15 -1.7763568394e-15 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 11.9 +2 -1.23601678529e-15 -1.7763568394e-15 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 11.9 +2 5.7051639093900004 -10.443232486499999 0.40000000000000002 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -5.7051639093900004 10.443232486499999 0.40000000000000002 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.29999999999999999 +1 7.6708086176699997 -14.041320990199999 4.25 0 0 1 +1 -7.6708086176699997 14.041320990199999 4.25 0 0 1 +2 0 0 5.7999999999999998 0 0 1 1 0 -0 -0 1 0 16 +2 0 0 5.7999999999999998 0 0 1 1 0 -0 -0 1 0 16 +2 0 3.5527136788e-15 7 0 0 1 1 0 -0 -0 1 0 14.800000000000001 +2 0 3.5527136788e-15 7 0 0 1 1 0 -0 -0 1 0 14.800000000000001 +1 -7.3831532944999996 13.5147714531 6.4000000000000004 -0.3390050494208432 0.62054458056371298 -0.70710678118667292 +1 7.3831532944999996 -13.5147714531 6.4000000000000004 0.3390050494208432 -0.62054458056371298 -0.70710678118667292 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 8.5999999999999996 +1 3.9328544021799998 -7.19904169447 -2.25 0.083251371105611274 -0.15239061262502063 0.98480775301213319 +2 0 0 -4.5 0 0 1 1 0 -0 -0 1 0 7.8065285868099998 +1 -3.9328544021799998 7.19904169447 -2.25 -0.083251371105611274 0.15239061262502063 0.98480775301213319 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 8.5999999999999996 +2 0 0 -4.5 0 0 1 1 0 -0 -0 1 0 7.8065285868099998 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 11.300000000000001 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 11.300000000000001 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 9.3000000000000007 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 9.3000000000000007 +1 3.3559787702300001 -6.1430779332299998 4.5 0 0 1 +2 0 0 4 0 0 1 1 0 -0 -0 1 0 7 +1 -3.3559787702300001 6.1430779332299998 4.5 0 0 1 +2 0 0 4.4000000000000004 0 0 1 1 0 -0 -0 1 0 7 +2 0 0 4 0 0 1 1 0 -0 -0 1 0 7 +2 0 0 4.4000000000000004 0 0 1 1 0 -0 -0 1 0 7 +1 3.6346372044800002 -6.6531587756699997 5.2000000000000002 0.28179926116401238 -0.51583008754802262 0.80901699437503549 +2 8.881784197e-16 4.4408920985e-16 6 -1.6120923388500001e-15 -4.6295474197600002e-16 1 1 0 1.6120923388500001e-15 -7.4632579277378816e-31 1 4.6295474197600002e-16 8.1624680448099998 +1 -3.6346373534400001 6.6531586942900001 5.2000000000000002 -0.28179927271297639 0.51583008123895679 0.80901699437493213 +2 6.2172489379000002e-15 4.8849813083500001e-15 6 4.1604139758599998e-15 2.2728445137899998e-15 1 1 0 -4.1604139758599998e-15 -9.4559740801286408e-30 1 -2.2728445137899998e-15 8.1624680448099998 +1 5.4175085862300003 -9.9166829493600002 0.75 0 0 1 +1 -5.4175085862300003 9.9166829493600002 0.75 0 0 1 +2 0 0 1 0 0 1 1 0 -0 -0 1 0 11.300000000000001 +2 0 0 1 0 0 1 1 0 -0 -0 1 0 11.300000000000001 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 12 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 12 +2 -1.2570549911299999e-15 -3.5527136788e-15 1.5 0 0 1 1 0 -0 -0 1 0 11.800000000000001 +2 -1.2570549911299999e-15 -3.5527136788e-15 1.5 0 0 1 1 0 -0 -0 1 0 11.800000000000001 +2 5.6572213555299999 -10.3554742303 1 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.5 +2 -5.6572213555299999 10.3554742303 1 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.5 +2 2.87655323163 -5.2654953713400001 4 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 1 +2 -2.87655323163 5.2654953713400001 4 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 1 +2 -3.5527136788e-15 0 3.1339745962199999 0 -0 1 1 0 0 -0 1 0 6.5 +2 -3.1086244689500001e-15 -1.1102230246299999e-15 3.1339745962199999 0 0 1 1 0 -0 -0 1 0 6.5 +2 3.3559787702300001 -6.1430779332299998 2.2679491924300001 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 1 +2 -3.3559787702300001 6.1430779332299998 2.2679491924300001 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 1 +1 4.1230596320000004 -7.5472100322599998 0.34999999999999998 0 0 1 +1 -4.1230596320000004 7.5472100322599998 0.34999999999999998 0 0 1 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 8.5999999999999996 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 8.5999999999999996 +2 4.26688729358 -7.8104848008200003 0.40000000000000002 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -4.26688729358 7.8104848008200003 0.40000000000000002 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.29999999999999999 +2 8.881784197e-16 2.6645352590999998e-15 0.69999999999999996 0 -0 1 1 0 0 -0 1 0 8.9000000000000004 +2 -3.5527136788e-15 -3.3723024373e-15 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 8.9000000000000004 +1 4.45865750902 -8.1615178255800007 0.34999999999999998 0 0 1 +1 -4.45865750902 8.1615178255800007 0.34999999999999998 0 0 1 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 9.3000000000000007 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 9.3000000000000007 +2 0 1.7763568394e-15 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 9 +2 0 1.7763568394e-15 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 9 +2 4.3148298474400004 -7.8982430570100002 0.40000000000000002 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -4.3148298474400004 7.8982430570100002 0.40000000000000002 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.29999999999999999 +1 5.75310646325 -10.5309907427 3.75 0 0 1 +1 -5.75310646325 10.5309907427 3.75 0 0 1 +2 0 0 4.7999999999999998 0 0 1 1 0 -0 -0 1 0 12 +2 0 0 4.7999999999999998 0 0 1 1 0 -0 -0 1 0 12 +2 -1.5006201728799999e-15 0 6 0 0 1 1 0 -0 -0 1 0 10.800000000000001 +2 -1.5006201728799999e-15 0 6 0 0 1 1 0 -0 -0 1 0 10.800000000000001 +1 -5.4654511400899999 10.004441205599999 5.4000000000000004 -0.3390050494208432 0.62054458056371298 -0.70710678118667292 +1 5.4654511400899999 -10.004441205599999 5.4000000000000004 0.3390050494208432 -0.62054458056371298 -0.70710678118667292 +2 -40 -22 -1.3322676295499999e-14 0 0 -1 -1 0 -0 0 1 0 9 +2 -40 -22 -1.3322676295499999e-14 0 0 -1 -1 0 -0 0 1 0 9 +2 -40 20 -1.3322676295499999e-14 0 0 -1 -1 0 -0 0 1 0 9 +2 -40 20 -1.3322676295499999e-14 0 0 -1 -1 0 -0 0 1 0 9 +3 78.997568145742306 18.004657160976578 -47.497149313103478 0 0 1 1 0 -0 -0 1 0 19.124999999972516 19.124999999972516 +2 33 -4 -7.1054273576e-15 0 0 -1 -1 0 -0 0 1 0 12 +2 33 -4 -7.1054273576e-15 0 0 -1 -1 0 -0 0 1 0 12 +1 -69 16 4.16049991609 0 0 1 +2 -65 16 0 0 0 1 1 0 -0 -0 1 0 4 +1 -61 16 4.16049991609 0 0 1 +2 -65 16 7 0 0 1 1 0 -0 -0 1 0 4 +2 -65 16 0 0 0 1 1 0 -0 -0 1 0 4 +2 -65 16 7 0 0 1 1 0 -0 -0 1 0 4 +2 -65 -18 7 0 0 1 1 0 -0 -0 1 0 4 +2 -65 -18 7 0 0 1 1 0 -0 -0 1 0 4 +1 53.499751589699997 -45.000000000900002 50 0 0 1 +2 53.499751589699997 -11.999751589700001 0 0 0 1 1 0 -0 -0 1 0 33.000248411299999 +1 86.5 -12 50 0 0 1 +1 86.5 -1.99851834808 50 0 0 1 +2 60.500078944800002 -1.9983999996099999 0 0 0 1 1 0 -0 -0 1 0 25.999921055400002 +1 72.706232063000002 20.958205170700001 50 0 0 1 +1 47.082969087899997 34.5823357644 50 0 0 1 +2 5.2998818036899999 -44.0004740595 0 0 0 1 1 0 -0 -0 1 0 89.000474059599995 +1 23 43.222173221299997 50 0 0 1 +7 0 0 5 6 2 23 43.222181183300002 0 19.507530172599999 43.930901568800003 0 15.9795434532 44.464822943599998 0 12.427648101899999 44.8215902775 0 8.8637394700400005 45 0 5.2999999999999998 45 0 + 253.667619105 6 271.48631645500001 6 +1 5.2999999999999998 45 25 0 0 1 +1 -21.928932188099999 47.928932188099999 3.5 0 0 1 +1 -24.464466094100001 50.464466094099997 0 -0.70710678118654757 0.70710678118654757 0 +1 -27 53 3.5 0 0 1 +1 -78.862687876999999 16.500914749 25 0 0 1 +7 0 0 5 6 2 -78.862687876999999 16.500914749 0 -81.842187261500001 11.3402706638 0 -84.147352448999996 5.7902787984600002 0 -85.7105434594 -0.0314708573361 0 -86.494623900099995 -5.98978312823 0 -86.499977001199994 -11.948795860200001 0 + 365.97542723800001 6 395.77050293600001 6 +1 -86.499977001199994 -11.948795860200001 25 0 0 1 +1 -86.5 -14 50 0 0 1 +2 -55.499766644799998 -13.999766644799999 0 0 0 1 1 0 -0 -0 1 0 31.000233355999999 +1 -77.4202418693 -35.9202418693 50 0 0 1 +1 -68.880362803899999 -44.460120934599999 0 0.70710678118654757 -0.70710678118654757 0 +1 -60.340483738499998 -53 3.5 0 0 1 +1 -24.340483738500001 -53 3.5 0 0 1 +1 -21.804949832599998 -50.464466094099997 0 0.70710678118654757 0.70710678118654757 0 +1 -19.269415926699999 -47.928932188099999 3.5 0 0 1 +2 -68.458904109599999 -1 1.7763568394e-15 0 -0 1 1 0 0 -0 1 0 9 +1 -60.958904109599999 -1 1.5 0.70710678118654757 -1.0467283057893303e-16 -0.70710678118654757 +2 -68.458904109599999 -1 3 0 -0 1 1 0 0 -0 1 0 6 +1 -75.958904109599999 -1 1.5 -0.70710678118654757 0 -0.70710678118654757 +2 -68.458904109599999 -1 1.7763568394e-15 -5.2590727014699996e-31 -1.3322676295499999e-15 1 0 1 1.3322676295499999e-15 -1 7.0064923216185508e-46 -5.2590727014699996e-31 9 +2 -68.458904109599999 -1 3 -5.2590727014699996e-31 -1.3322676295499999e-15 1 0 1 1.3322676295499999e-15 -1 7.0064923216185508e-46 -5.2590727014699996e-31 6 +2 -6.4589041095899997 -1 -1.7763568394e-15 2.22044604925e-16 1.2819751242600001e-16 1 1 0 -2.22044604925e-16 -2.8465565998998952e-32 1 -1.2819751242600001e-16 11 +1 3.0410958904099998 -1 1.5 0.70710678118654757 -1.1514011363692635e-15 -0.70710678118654757 +2 -6.4589041095899997 -1 3 2.22044604925e-16 1.2819751242600001e-16 1 1 0 -2.22044604925e-16 -2.8465565998998952e-32 1 -1.2819751242600001e-16 8 +1 -15.958904109600001 -1 1.5 -0.70710678118654757 2.0934566115786606e-16 -0.70710678118654757 +2 -6.4589041095899997 -1 -5.3290705181999996e-15 -1.19524379579e-31 7.4014868308300001e-16 1 0 1 -7.4014868308300001e-16 -1 -8.8465812141709465e-47 -1.19524379579e-31 11 +2 -6.4589041095899997 -1 3 -1.19524379579e-31 7.4014868308300001e-16 1 0 1 -7.4014868308300001e-16 -1 -8.8465812141709465e-47 -1.19524379579e-31 8 +1 -32.527296022500003 -17.917643211200001 2.75 0.15239061262502063 0.083251371105611274 -0.98480775301213319 +2 -40 -22 5.5 0 0 -1 -1 0 -0 0 1 0 8.0302016061000003 +1 -47.472703977499997 -26.082356788799999 2.75 -0.15239061262502063 -0.083251371105611274 -0.98480775301213319 +2 -40 -22 5.5 0 0 -1 -1 0 -0 0 1 0 8.0302016061000003 +1 -32.527296022500003 24.082356788799999 2.75 0.15239061262502063 0.083251371105611274 -0.98480775301213319 +2 -40 20 5.5 0 0 -1 -1 0 -0 0 1 0 8.0302016061000003 +1 -47.472703977499997 15.9176432112 2.75 -0.15239061262502063 -0.083251371105611274 -0.98480775301213319 +2 -40 20 5.5 0 0 -1 -1 0 -0 0 1 0 8.0302016061000003 +2 -40 -22 5.5 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 -22 5.5 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 20 5.5 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 20 5.5 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +1 -69 -18 4.16049991609 0 0 1 +2 -65 -18 0 0 0 1 1 0 -0 -0 1 0 4 +1 -61 -18 4.16049991609 0 0 1 +2 -65 -18 0 0 0 1 1 0 -0 -0 1 0 4 +1 1.5410958904100001 -1 25 0 0 1 +1 -14.458904109600001 -1 25 0 0 1 +1 -46.799999999999997 -22 50 0 0 1 +1 -33.200000000000003 -22 50 0 0 1 +1 -46.799999999999997 20 50 0 0 1 +1 -33.200000000000003 20 50 0 0 1 +1 23.087975191200002 -9.4149638324599998 4 -0.15239061262502063 -0.083251371105611274 -0.98480775301213319 +1 42.912024808799998 1.41496383246 4 0.15239061262502063 0.083251371105611274 -0.98480775301213319 +1 -62.458904109599999 -1 20.5 0 0 1 +1 -74.458904109599999 -1 20.5 0 0 1 +1 -12.1983481148 -45 26 0 0 1 +2 -12.1983481148 -55 -7.1054273576e-15 0 -0 1 1 0 0 -0 1 0 10 +1 -42.340483738499998 -53 0 1 0 0 +1 -86.5 -12.9743979301 0 0 1 0 +1 -57.789931182099998 53 3.5 0 0 1 +1 -68.326309529599996 34.750457374500002 0 0.50000000000018996 0.86602540378432902 0 +1 -42.394965591099997 53 0 1 0 0 +2 -14.8578643763 55 0 0 0 1 1 0 -0 -0 1 0 10 +1 -14.8578643763 45 26 0 0 1 +1 -4.7789321881299998 45 0 -1 0 0 +1 59.8946005755 27.7702704676 0 -0.8829475928588979 0.46947156278594571 0 +1 86.5 -6.9992591740399996 0 0 -1 0 +1 20.650701737399999 -45 0 1 0 0 +3 5.9975681453541192 0.004657162550930849 -47.497149315993603 0 0 1 1 0 -0 -0 1 0 14.125000000000176 14.125000000000176 +3 5.997568146259912 42.004657162550942 -47.497149310555415 0 0 1 1 0 -0 -0 1 0 14.125000000000178 14.125000000000178 +2 -40 20 20.5 -0 0 1 1 0 0 0 1 -0 7.4000000000000004 +2 -40 20 20.5 0 -0 1 1 0 0 -0 1 0 7.4000000000000004 +2 -40 -22 20.5 0 0 1 1 0 -0 -0 1 0 7.4000000000000004 +2 -40 -22 20.5 0 0 1 1 0 -0 -0 1 0 7.4000000000000004 +3 78.997568145585205 18.004657158307225 -26.997149313103471 0 0 1 1 0 -0 -0 1 0 21.40000000002604 21.40000000002604 +2 33 -4 20.5 0 0 1 1 0 -0 -0 1 0 9.4000000000000004 +2 33 -4 20.5 0 0 1 1 0 -0 -0 1 0 9.4000000000000004 +2 33 -4 8 0 0 1 1 0 -0 -0 1 0 10.589384154299999 +2 33 -4 8 0 0 1 1 0 -0 -0 1 0 10.589384154299999 +2 33 -4 8 0 0 1 1 0 -0 -0 1 0 8.8000000000000007 +2 33 -4 8 0 0 1 1 0 -0 -0 1 0 8.8000000000000007 +7 0 0 5 6 2 -77.420310216800004 -35.920310216799997 52 -80.863544493899994 -32.477075939700001 52 -83.630701301599998 -28.3577641933 52 -85.543882073600003 -23.738937226099999 52 -86.5 -18.8694686131 52 -86.5 -14 52 + 24.756193660499999 6 49.5123873211 6 +7 0 0 5 6 2 -77.365502634999999 -35.974981103600001 52 -77.376477798099998 -35.9640606185 52 -77.3874461435 -35.953133281600003 52 -77.398407665500002 -35.9421990986 52 -77.409362358500005 -35.931258075000002 52 -77.420310216800004 -35.920310216799997 52 + 24.677480660699999 6 24.756193660499999 6 +7 0 0 5 6 2 -55.5 -45 52 -60.353986003400003 -45 52 -65.207972006899993 -44.049952414499998 52 -69.813699537000005 -42.148921308600002 52 -73.924655812099999 -39.3986856868 52 -77.365502634999999 -35.974981103600001 52 + 0 6 24.677480660699999 6 +7 0 0 5 6 2 53.5 -45 52 31.699999999999999 -45 52 9.9000000000000004 -45 52 -11.9 -45 52 -33.700000000000003 -45 52 -55.5 -45 52 + 0 6 109 6 +7 0 0 5 9 3 86.5 -12 52 86.5 -17.183627878399999 52 85.482197046099998 -22.367255756799999 52 83.445585256499996 -27.284071560600001 52 77.554219149700003 -36.054219149700003 52 68.784071560599997 -41.945585256500003 52 63.867255756799999 -43.982197046099998 52 58.683627878400003 -45 52 53.5 -45 52 + 0 6 26.353367445100002 3 52.706734890200003 6 +1 86.5 -6.9992591740399996 52 0 -1 0 +7 0 0 5 6 2 72.706232063000002 20.958205170700001 52 77.674548047100004 18.3165126335 52 81.929282422 14.331497071999999 52 84.978940591300002 9.2560050281099997 52 86.500015347200005 3.6284438144700002 52 86.5 -1.99851834808 52 + 0 6 28.834167653600002 6 +7 0 0 5 6 2 47.082969087899997 34.5823357644 52 52.207621682899997 31.857509645699999 52 57.332274278 29.132683526899999 52 62.456926873 26.407857408200002 52 67.581579468000001 23.683031289399999 52 72.706232063000002 20.958205170700001 52 + 0 6 29.0201402464 6 +7 0 0 5 6 2 23.0000015518 43.222180868400002 52 28.032290530600001 42.200987762300002 52 32.990839903000001 40.816879762500001 52 37.840922780699998 39.076902099599998 52 42.549049793400002 36.9930634157 52 47.082969087899997 34.5823357644 52 + 17.9076813233 6 43.710801788600001 6 +7 0 0 5 6 2 5.2999999999999998 45 52 8.8637397867299992 45 52 12.4276487353 44.821590245800003 52 15.9795444001 44.464822848399997 52 19.507531426700002 43.930901378999998 52 23.0000015518 43.222180868400002 52 + 0 6 17.9076813233 6 +7 0 0 5 6 2 -29.5 45 52 -22.539999999999999 45 52 -15.58 45 52 -8.6199999999999992 45 52 -1.6599999999999999 45 52 5.2999999999999998 45 52 + 0 6 34.799999999999997 6 +7 0 0 5 9 3 -86.5 -12 52 -86.5 -3.04646093727 52 -84.741976716099998 5.90707812546 52 -81.224192715800001 14.3997599683 52 -71.048196713199999 29.548196713199999 52 -55.899759968300003 39.724192715800001 52 -47.4070781255 43.241976716099998 52 -38.453539062700003 45 52 -29.5 45 52 + 0 6 45.519452859700003 3 91.038905719400006 6 +1 -86.5 -13 52 0 1 0 +1 -84.5 -13 52 0 -1 0 +2 -29.5 -12 52 0 0 1 1 0 -0 -0 1 0 55 +1 -12.1 43 52 1 0 0 +2 5.2999999999999998 -44 52 0 0 1 1 0 -0 -0 1 0 87 +1 58.955657449900002 26.004375281800002 52 0.8829475928588979 -0.46947156278594571 0 +2 60.5 -1.9984474343 52 0 0 1 1 0 -0 -0 1 0 24 +1 84.5 -6.9992564465899996 52 0 -1 0 +2 53.5 -12 52 0 0 1 1 0 -0 -0 1 0 31 +1 -1 -43 52 1 0 0 +2 -55.5 -14 52 0 0 1 1 0 -0 -0 1 0 29 +2 33 -4 20.5 0 0 1 1 0 -0 -0 1 0 23 +2 33 -4 20.5 0 0 1 1 0 -0 -0 1 0 23 +1 28.7810552603 3.72272654464 7.75 0 0 1 +1 37.2189447397 -11.7227265446 7.75 0 0 1 +2 33 -4 19.899999999999999 0 0 1 1 0 -0 -0 1 0 8.8000000000000007 +2 33 -4 19.899999999999999 0 0 1 1 0 -0 -0 1 0 8.8000000000000007 +2 28.493399937100001 4.2492760817699997 19.899999999999999 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.59999999999999998 +2 37.506600062899999 -12.2492760818 19.899999999999999 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.59999999999999998 +2 -32.600000000000001 20 19.899999999999999 0 -1 0 0 -0 -1 1 0 0 0.59999999999999998 +2 -47.399999999999999 20 19.899999999999999 -1.66533453694e-15 1 -0 1 1.66533453694e-15 0 0 0 -1 0.59999999999999998 +2 -40 20 19.899999999999999 -0 0 1 1 0 0 0 1 -0 6.7999999999999998 +2 -40 20 19.899999999999999 0 -0 1 1 0 0 -0 1 0 6.7999999999999998 +2 -40 -22 20.5 0 0 1 1 0 -0 -0 1 0 17 +1 -57 -1 20.5 0 -1 0 +1 -23 -1 20.5 0 1 0 +2 -40 20 20.5 0 0 1 1 0 -0 -0 1 0 17 +3 5.9975681451970075 0.0046571598965794436 -26.997149315993585 0 0 1 1 0 -0 -0 1 0 11.300000000000141 11.300000000000141 +3 5.9975681461028003 42.004657159896588 -26.9971493105554 0 0 1 1 0 -0 -0 1 0 11.300000000000141 11.300000000000141 +2 -32.600000000000001 -22 19.899999999999999 0 -1 0 0 -0 -1 1 0 0 0.59999999999999998 +2 -47.399999999999999 -22 19.899999999999999 -7.7715611723799997e-16 1 -0 1 7.7715611723799997e-16 0 0 0 -1 0.59999999999999998 +2 -40 -22 19.899999999999999 -0 0 1 1 0 0 0 1 -0 6.7999999999999998 +2 -40 -22 19.899999999999999 0 -0 1 1 0 0 -0 1 0 6.7999999999999998 +2 44.266500157199999 -24.6231902044 20.300000000000001 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.5 +2 33 -4 20.300000000000001 0 -0 1 1 0 0 -0 1 0 24 +2 21.733499842800001 16.6231902044 20.300000000000001 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.5 +2 33 -4 19.800000000000001 0 -0 1 1 0 0 -0 1 0 23.5 +2 33 -4 20.300000000000001 0 0 1 1 0 -0 -0 1 0 24 +2 33 -4 19.800000000000001 0 0 1 1 0 -0 -0 1 0 23.5 +1 44.026787387900001 -24.184398923500002 20.149999999999999 0 0 1 +1 21.973212612099999 16.184398923500002 20.149999999999999 0 0 1 +2 33 -4 20.300000000000001 0 0 1 1 0 -0 -0 1 0 23 +2 33 -4 20.300000000000001 0 0 1 1 0 -0 -0 1 0 23 +2 21.733499842800001 16.6231902044 20.300000000000001 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.5 +2 44.266500157199999 -24.6231902044 20.300000000000001 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.5 +2 -22.5 20 20.300000000000001 -0 1 0 0 0 1 1 0 -0 0.5 +1 -22 -1 20.300000000000001 0 1 0 +2 -22.5 -22 20.300000000000001 -0 1 0 0 0 1 1 0 -0 0.5 +1 -22.5 -1 19.800000000000001 0 1 0 +2 -40 -22 20.300000000000001 0 -0 1 1 0 0 -0 1 0 18 +2 -57.5 -22 20.300000000000001 -4.4408920985e-16 1 0 1 4.4408920985e-16 0 0 0 -1 0.5 +2 -40 -22 19.800000000000001 0 -0 1 1 0 0 -0 1 0 17.5 +1 -58 -1 20.300000000000001 0 -1 0 +2 -57.5 20 20.300000000000001 0 -1 0 0 -0 -1 1 0 0 0.5 +1 -57.5 -1 19.800000000000001 0 -1 0 +2 -40 20 20.300000000000001 -0 0 1 1 0 0 0 1 -0 18 +2 -40 20 19.800000000000001 -0 0 1 1 0 0 0 1 -0 17.5 +1 -57 20 20.149999999999999 0 0 1 +1 -23 20 20.149999999999999 0 0 1 +2 -40 20 20.300000000000001 0 0 1 1 0 -0 -0 1 0 17 +1 -23 -1 20.300000000000001 0 1 0 +1 -23 -22 20.399999999999999 0 0 -1 +1 -57 -22 20.149999999999999 0 0 1 +2 -40 -22 20.300000000000001 0 0 1 1 0 -0 -0 1 0 17 +1 -57 -1 20.300000000000001 0 -1 0 +2 -22.5 -22 20.300000000000001 -1.3877787807800001e-15 -1 0 -1 1.3877787807800001e-15 0 -0 0 -1 0.5 +2 -57.5 -22 20.300000000000001 -1.3322676295499999e-15 1 0 1 1.3322676295499999e-15 0 0 0 -1 0.5 +2 -57.5 20 20.300000000000001 0 -1 0 0 -0 -1 1 0 0 0.5 +2 -22.5 20 20.300000000000001 -1.3322676295499999e-15 -1 0 -1 1.3322676295499999e-15 0 -0 0 -1 0.5 +1 -55.5 -45 41.5 0 0 -1 +1 -77.420310216800004 -35.920310216799997 41.5 0 0 -1 +7 0 0 4 5 2 -55.5 -45 50.999999993499998 -61.586749425800001 -45 50.999999993499998 -67.679800951900006 -43.403984354099997 50.999999993499998 -73.116328422400002 -40.224292011199999 50.999999993499998 -77.420310216800004 -35.920310216799997 50.999999993499998 + 0 5 34.4318543551 5 +2 -6.4589041095899997 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 9.5 +1 -15.958904109600001 -1 32.899999999999999 0 0 1 +2 -6.4589041095899997 -1 33.5 0 0 1 1 0 -0 -0 1 0 9.5 +1 3.0410958904099998 -1 32.899999999999999 0 0 1 +2 -6.4589041095899997 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 9.5 +2 -6.4589041095899997 -1 33.5 0 0 1 1 0 -0 -0 1 0 9.5 +2 -6.4589041095899997 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 8 +2 -6.4589041095899997 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 8 +1 -22 20 26.899999999999999 0 0 -1 +1 -22 -22 26.899999999999999 0 0 -1 +1 -22 -1.00000000006 33.5 -1.69176841848e-16 -1 0 +2 11.159670332199999 -26 33.5 0 0 1 1 0 -0 -0 1 0 7 +2 33 -4 33.5 0 0 1 1 0 -0 -0 1 0 24 +2 33 -4 33.5 0 0 1 1 0 -0 -0 1 0 24 +2 19.6958653043 24 33.5 0 0 1 1 0 -0 -0 1 0 7 +1 2.1868953314300001 17 33.5 1 0 0 +2 -15.3220746415 24 33.5 0 0 1 1 0 -0 -0 1 0 7 +2 -40 20 33.5 0 0 1 1 0 -0 -0 1 0 18 +2 -40 -22 33.5 0 0 1 1 0 -0 -0 1 0 18 +2 -15.3220746415 -26 33.5 0 0 1 1 0 -0 -0 1 0 7 +1 -2.0812021546700001 -19 33.5 -1 0 0 +1 -58 -22 26.899999999999999 0 0 -1 +1 -58 20 26.899999999999999 0 0 -1 +1 -58 -1.00000000025 33.5 0 -1 0 +1 -55.5 -43 45.399999999999999 0 0 -1 +1 53.5 -43 45.399999999999999 0 0 -1 +1 -1 -43 38.799999999999997 1 0 0 +1 -84.5 -14 33.5 0 0 1 +2 -55.5 -14 38.799999999999997 0 0 1 1 0 -0 -0 1 0 29 +1 84.5 -12 45 0 0 1 +2 53.5 -12 38.799999999999997 0 0 1 1 0 -0 -0 1 0 31 +1 -84.5 -12 45.399999999999999 0 0 -1 +1 -84.5 -13 38.799999999999997 0 -1 0 +1 84.5 -6.9992564465899996 38.799999999999997 0 -1 0 +1 84.5 -1.99851289317 45.399999999999999 0 0 -1 +1 71.767288937399996 19.1923099849 45 0 0 1 +2 60.5 -1.9984474343 38.799999999999997 0 0 1 1 0 -0 -0 1 0 24 +1 58.955657449900002 26.004375281800002 38.799999999999997 0.8829475928588979 -0.46947156278594571 0 +1 46.144025962400001 32.816440578700004 45.399999999999999 0 0 -1 +1 5.2999999999999998 43 45 0 0 1 +2 5.2999999999999998 -44 38.799999999999997 0 0 1 1 0 -0 -0 1 0 87 +1 -12.1 43 38.799999999999997 1 0 0 +1 -29.5 43 45.399999999999999 0 0 -1 +2 -29.5 -12 38.799999999999997 0 0 1 1 0 -0 -0 1 0 55 +2 5.2999999999999998 42.200000000000003 38.799999999999997 1 8.3266726846900003e-16 -0 -8.3266726846900003e-16 1 0 0 0 1 0.80000000000000004 +2 45.768448712100003 32.110082504399998 38.799999999999997 0.8829475928588979 -0.46947156278594571 0 0.46947156278594571 0.8829475928588979 0 -0 0 1 0.80000000000000004 +2 5.2999999999999998 -44 38 0 0 1 1 0 -0 -0 1 0 86.200000000000003 +2 71.391711687200001 18.485951910699999 38.799999999999997 0.8829475928588979 -0.46947156278594571 0 0.46947156278594571 0.8829475928588979 0 -0 0 1 0.80000000000000004 +1 55.619498734399997 26.872186295799999 38 0.8829475928588979 -0.46947156278594571 0 +2 83.699999999900001 -1.99851071121 38.799999999999997 -2.7274528199907653e-06 -0.99999999999628053 0 -0.99999999999628053 2.7274528199907653e-06 0 -0 0 -1 0.80000000000000004 +2 60.5 -1.9984474343 38 0 -0 1 1 0 0 -0 1 0 23.199999999999999 +2 83.700000000000003 -12 38.799999999999997 0 -1 0 0 -0 -1 1 0 0 0.80000000000000004 +1 83.700000000000003 1.42108547152e-14 38 0 -1 0 +2 53.5 -42.200000000000003 38.799999999999997 -1 1.36838683111e-15 -0 -1.36838683111e-15 -1 0 0 0 1 0.80000000000000004 +2 53.5 -12 38 -0 0 1 1 0 0 0 1 -0 30.199999999999999 +2 -55.5 -42.200000000000003 38.799999999999997 1 0 0 -0 0 1 0 -1 0 0.80000000000000004 +1 0 -42.200000000000003 38 1 0 0 +2 -83.700000000000003 -14 38.799999999999997 -1.65384947117e-15 1 0 1 1.65384947117e-15 0 0 0 -1 0.80000000000000004 +2 -55.5 -14 38 0 0 1 1 0 -0 -0 1 0 28.199999999999999 +2 -83.700000000000003 -12 38.799999999999997 0 -1 0 0 -0 -1 1 0 0 0.80000000000000004 +1 -83.700000000000003 1.42108547152e-14 38 0 -1 0 +2 -29.5 42.200000000000003 38.799999999999997 1 5.8135314744000002e-16 0 -5.8135314744000002e-16 1 0 0 -0 1 0.80000000000000004 +2 -29.5 -12 38 -0 0 1 1 0 0 0 1 -0 54.200000000000003 +1 0 42.200000000000003 38 1 0 0 +1 -22.231893741899999 22.879999999999999 29.149999999999999 0 0 -1 +1 -15.3220746415 17 29.149999999999999 0 0 -1 +2 -15.3220746415 24 37.600000000000001 -0 0 -1 -1 0 0 0 1 0 7 +1 -15.3220746415 -19 29.149999999999999 0 0 -1 +1 -22.231893741899999 -24.879999999999999 29.149999999999999 0 0 -1 +2 -15.3220746415 -26 37.600000000000001 0 0 -1 -1 0 -0 0 1 0 7 +1 44.506212926499998 -25.0619814854 29.899999999999999 0 0 1 +1 21.493787073499998 17.0619814854 29.899999999999999 0 0 1 +1 22.700024751800001 17.677419354800001 29.899999999999999 0 0 1 +2 33 -4 37.600000000000001 0 0 1 1 0 -0 -0 1 0 24 +1 19.6958653043 17 35.549999999999997 0 0 -1 +1 2.1868953314300001 17 37.600000000000001 1 0 0 +2 19.6958653043 24 37.600000000000001 0 0 -1 -1 0 -0 0 1 0 7 +1 11.159670332199999 -19 35.549999999999997 0 0 -1 +1 -2.0812021546700001 -19 37.600000000000001 -1 0 0 +1 16.091357676499999 -21.032258064499999 29.899999999999999 0 0 1 +2 33 -4 37.600000000000001 0 0 1 1 0 -0 -0 1 0 24 +2 11.159670332199999 -26 37.600000000000001 0 0 -1 -1 0 -0 0 1 0 7 +1 -57.985594235400001 -22.719999999999999 45.149999999999999 0 0 1 +2 -40 -22 33.5 0 0 1 1 0 -0 -0 1 0 18 +2 -40 -22 37.600000000000001 0 0 1 1 0 -0 -0 1 0 18 +2 -64.979991993599995 -23 33.5 0 0 -1 -1 0 -0 0 1 0 7 +1 -64.979991993599995 -16 29.149999999999999 0 0 -1 +2 -64.979991993599995 -23 37.600000000000001 0 0 -1 -1 0 -0 0 1 0 7 +2 -40 20 33.5 0 0 1 1 0 -0 -0 1 0 18 +1 -57.985594235400001 20.719999999999999 45.149999999999999 0 0 1 +2 -40 20 37.600000000000001 0 0 1 1 0 -0 -0 1 0 18 +1 -64.979991993599995 14 29.149999999999999 0 0 -1 +2 -64.979991993599995 21 33.5 0 0 -1 -1 0 -0 0 1 0 7 +2 -64.979991993599995 21 37.600000000000001 0 0 -1 -1 0 -0 0 1 0 7 +1 -69.434267906800002 -16 33.5 -1 0 0 +1 -73.888543819999995 -16 35.549999999999997 0 0 -1 +1 -69.434267906800002 -16 37.600000000000001 -1 0 0 +1 -77.295885499999997 -14.095238095199999 35.75 0 0 -1 +2 -73.888543819999995 -12 33.5 -0 0 -1 -1 0 0 0 1 0 4 +2 -73.888543819999995 -12 37.600000000000001 -0 0 -1 -1 0 0 0 1 0 4 +1 -73.888543819999995 14 35.549999999999997 0 0 -1 +1 -69.434267906800002 14 33.5 1 0 0 +1 -69.434267906800002 14 37.600000000000001 1 0 0 +1 -77.295885499999997 12.095238095199999 45 0 0 1 +2 -56 -0.99999999994099997 33.5 0 0 1 1 0 -0 -0 1 0 25 +2 -56 -0.99999999994099997 37.600000000000001 0 0 1 1 0 -0 -0 1 0 25 +2 -73.888543819999995 10 33.5 0 0 -1 -1 0 -0 0 1 0 4 +2 -73.888543819999995 10 37.600000000000001 0 0 -1 -1 0 -0 0 1 0 4 +2 -64.979991993599995 -23 38 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +1 -69.434267906800002 -16.399999999999999 38 -1 0 0 +2 -73.888543819999995 -12 38 0 0 1 1 0 -0 -0 1 0 4.4000000000000004 +2 -56 -0.99999999994099997 38 0 0 1 1 0 -0 -0 1 0 25.399999999999999 +2 -73.888543819999995 10 38 0 0 1 1 0 -0 -0 1 0 4.4000000000000004 +1 -69.434267906800002 14.4 38 1 0 0 +2 -64.979991993599995 21 38 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +2 -40 20 38 0 0 1 1 0 -0 -0 1 0 18.399999999999999 +2 -15.3220746415 24 38 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +1 2.1868953314300001 17.399999999999999 38 1 0 0 +2 19.6958653043 24 38 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +2 33 -4 38 0 0 1 1 0 -0 -0 1 0 24.399999999999999 +2 33 -4 38 0 0 1 1 0 -0 -0 1 0 24.399999999999999 +2 11.159670332199999 -26 38 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +1 -2.0812021546700001 -19.399999999999999 38 -1 0 0 +2 -15.3220746415 -26 38 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +2 -40 -22 38 0 0 1 1 0 -0 -0 1 0 18.399999999999999 +1 -22.034470338999999 -24.911999999999999 37.799999999999997 0.69799713466457269 -0.11313708498993073 0.70710678118656711 +1 -58.185434171300003 -22.728000000000002 37.799999999999997 -0.70654086930588689 -0.028284271247495472 0.70710678118688675 +1 -15.3220746415 -19.199999999999999 37.799999999999997 -9.4205547520939732e-15 0.70710678118654757 -0.70710678118654757 +1 11.159670332199999 -19.199999999999999 37.799999999999997 0 -0.70710678118654757 0.70710678118654757 +1 15.9504523238 -21.174193548400002 37.799999999999997 0.49817565198284453 0.50181771568084343 -0.70710678118677939 +1 22.614191624699998 17.858064516100001 37.799999999999997 0.30346593100379843 -0.63867709268457573 -0.70710678118653036 +1 19.6958653043 17.199999999999999 37.799999999999997 0 -0.70710678118654757 -0.70710678118654757 +1 -15.3220746415 17.199999999999999 37.799999999999997 0 0.70710678118654757 0.70710678118654757 +1 -22.034470338999999 22.911999999999999 37.799999999999997 -0.69799713466457269 -0.11313708498993073 -0.70710678118656711 +1 -58.185434171300003 20.728000000000002 37.799999999999997 -0.70654086930588689 0.028284271247495472 0.70710678118688675 +1 -64.979991993599995 14.199999999999999 37.799999999999997 0 -0.70710678118654757 -0.70710678118654757 +1 -73.888543819999995 14.199999999999999 37.799999999999997 0 0.70710678118654757 0.70710678118654757 +1 -77.466252584000003 12.199999999999999 37.799999999999997 -0.60233860193778832 0.37038926633386982 0.70710678118675141 +1 -77.466252584000003 -14.199999999999999 37.799999999999997 -0.6023386019356215 -0.37038926633776725 0.70710678118655568 +1 -73.888543819999995 -16.199999999999999 37.799999999999997 2.5121479338883926e-14 -0.70710678118654757 0.70710678118654757 +1 -64.979991993599995 -16.199999999999999 37.799999999999997 0 -0.70710678118654757 0.70710678118654757 +2 -68.458904109599999 -1 33.5 0 0 1 1 0 -0 -0 1 0 7.5 +2 -68.458904109599999 -1 33.5 0 0 1 1 0 -0 -0 1 0 7.5 +2 -68.458904109599999 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 7.5 +1 -75.958904109599999 -1 32.899999999999999 0 0 1 +1 -60.958904109599999 -1 32.899999999999999 0 0 1 +2 -68.458904109599999 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 7.5 +2 -68.458904109599999 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 6 +2 -68.458904109599999 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 6 +1 5.2999999999999998 45 41.5 0 0 -1 +1 23.0000015518 43.222180868400002 41.5 0 0 -1 +7 0 0 3 4 2 5.2999999999999998 45 50.999999993499998 11.2395859398 45 50.999999993499998 17.179129001100002 44.403399781899999 50.999999993499998 23.0000015518 43.222180868400002 50.999999993499998 + 0 4 25.199528972900001 4 +1 -86.5 -12 41.5 0 0 -1 +1 -29.5 45 41.5 0 0 -1 +7 0 0 5 12 4 -86.5 -12 50.999999993499998 -86.5 -1.14593754481 50.999999993499998 -83.916432636400003 9.7081249113499997 50.999999993599999 -78.7435536391 19.7407710785 50.999999993599999 -67.727479097200003 32.340321766899997 50.999999993499998 -53.339827832300003 40.203659332199997 50.999999993599999 -48.252184600699998 42.239456674700001 50.999999993499998 -41.391055897599998 44.072566488 50.999999993499998 -34.374910612599997 44.8260247459 50.999999993499998 -32.749487840199997 44.9421098069 50.999999993499998 -31.124743920099998 45 50.999999993499998 -29.5 45 50.999999993499998 + 2.36494886716e-12 6 76.749811654799998 3 115.12646151200001 3 126.615135948 6 +1 -12.1983481148 -45 26 0 0 1 +1 -19.269415926699999 -47.928932188099999 26 0 0 1 +2 -12.1983481148 -55 23.499999994500001 0 -0 1 1 0 0 -0 1 0 10 +1 53.499751589699997 -45 15.2499999973 0 0 1 +1 20.650825942600001 -45 23.499999994500001 -1 0 -1.0815229852e-16 +1 53.499751589699997 -45 51.4999999968 0 0 1 +1 -0.99999999999900002 -45 50.999999993499998 -1 0 -1.3037481390099999e-16 +1 -24.340483738500001 -53 15.2499999973 0 0 1 +1 -21.804949832599998 -50.464466094099997 23.499999994500001 0.70710678118654757 0.70710678118654757 0 +1 -21.928932188099999 47.928932188099999 26 0 0 1 +1 -14.8578643763 45 26 0 0 1 +2 -14.8578643763 55 23.499999994500001 0 0 1 1 0 -0 -0 1 0 10 +1 -12.1 45 50.999999993499998 1 0 2.0417894705799999e-16 +1 5.2999999999999998 45 15.2499999973 0 0 1 +1 -4.7789321881299998 45 23.499999994500001 1 0 1.7624454716500001e-16 +1 -27 53 15.2499999973 0 0 1 +1 -24.464466094100001 50.464466094099997 23.499999994500001 -0.70710678118654757 0.70710678118654757 0 +1 -68.326309529599996 34.750457374500002 23.499999994500001 0.50000000000018996 0.86602540378432902 0 +1 -57.789931182099998 53 15.2499999973 0 0 1 +1 -78.862687876999999 16.500914749 15.2499999973 0 0 1 +1 -86.499977001199994 -11.948795860200001 25 0 0 1 +7 0 0 4 5 2 -78.862687876999999 16.500914749 23.499999994500001 -82.586974064700001 10.050262137300001 23.499999994500001 -85.188155348699993 2.94914965216 23.4999999946 -86.4932857923 -4.5002163852899999 23.499999994500001 -86.499977001199994 -11.948795860200001 23.499999994500001 + 0 5 42.135545467599997 5 +1 -86.5 -13 50.999999993499998 0 1 0 +1 -86.5 -14 51.4999999968 0 0 1 +1 -86.5 -12.974397935300001 23.499999994500001 0 1 0 +1 -86.5 -14 15.2499999973 0 0 1 +1 -42.394965591099997 53 23.499999994500001 1 0 0 +1 23 43.222181183300002 25 0 0 1 +7 0 0 3 4 2 23 43.222181183300002 23.499999994500001 17.179127945200001 44.403399888300001 23.499999994500001 11.2395854123 45 23.499999994500001 5.2999999999999998 45 23.499999994500001 + 0 4 25.199526734799999 4 +1 -62.458904109599999 -1 20.5 0 0 1 +1 -74.458904109599999 -1 20.5 0 0 1 +1 -14.458904109600001 -1 25 0 0 1 +1 1.5410958904100001 -1 25 0 0 1 +1 47.082969087899997 34.5823357644 51.4999999968 2.8421709246399999e-14 5.6843418492799998e-14 1 +1 72.706232063000002 20.958205170700001 51.4999999968 2.8421709246399999e-14 5.3290704836999999e-14 1 +1 59.8946005755 27.7702704676 50.999999993499998 0.8829475928588979 -0.46947156278594571 0 +1 72.706232063000002 20.958205170700001 15.2499999973 2.92829733623e-14 5.4259627112399999e-14 1 +1 47.082969087899997 34.5823357644 15.2499999973 2.8852341400999997e-14 5.4690259073599999e-14 1 +1 59.8946005755 27.7702704676 23.499999994500001 0.8829475928588979 -0.46947156278594571 0 +2 5.2998818036899999 -44.0004740595 23.499999994500001 0 0 1 1 0 -0 -0 1 0 89.000474059599995 +2 5.2998818036899999 -44.0004740595 50.999999993499998 0 0 1 1 0 -0 -0 1 0 89.000474059599995 +1 86.5 -1.99851834808 50 0 0 1 +2 60.500078944800002 -1.9983999996099999 23.499999994500001 0 0 1 1 0 -0 -0 1 0 25.999921055400002 +1 86.5 -1.99851834808 50 0 0 1 +2 60.500078944800002 -1.9983999996099999 50.999999993499998 0 0 1 1 0 -0 -0 1 0 25.999921055400002 +1 86.5 -6.9992591740399996 23.499999994500001 0 -1 0 +1 86.5 -12 15.2499999973 0 0 1 +1 86.5 -6.9992591740399996 50.999999993499998 0 -1 0 +1 86.5 -12 51.4999999968 0 0 1 +2 53.499751589699997 -11.999751589700001 23.499999994500001 0 0 1 1 0 -0 -0 1 0 33.000248411299999 +2 53.499751589699997 -11.999751589700001 50.999999993499998 0 0 1 1 0 -0 -0 1 0 33.000248411299999 +1 -77.4202418693 -35.9202418693 50 0 0 1 +2 -55.499766644799998 -13.999766644799999 23.499999994500001 0 0 1 1 0 -0 -0 1 0 31.000233355999999 +2 -55.499766644799998 -13.999766644799999 50.999999993499998 0 0 1 1 0 -0 -0 1 0 31.000233355999999 +1 -42.340483738499998 -53 23.499999994500001 -1 0 -1.9737298215599999e-16 +1 -60.340483738499998 -53 15.2499999973 0 0 1 +1 -68.880362803899999 -44.460120934599999 23.499999994500001 0.70710678118654757 -0.70710678118654757 0 +1 -33.200000000000003 -22 50 0 0 1 +1 -46.799999999999997 -22 50 0 0 1 +1 -33.200000000000003 20 50 0 0 1 +1 -46.799999999999997 20 50 0 0 1 +1 42.912024808799998 1.41496383246 4 0.15239061262502063 0.083251371105611274 -0.98480775301213319 +1 23.087975191200002 -9.4149638324599998 4 -0.15239061262502063 -0.083251371105611274 -0.98480775301213319 +2 -40.000000188800001 -22.000011602899999 13 5.76090795865e-17 2.3455816874200001e-17 1 1 0 -5.76090795865e-17 -1.3512680210721575e-33 1 -2.3455816874200001e-17 24.000006407600001 +1 -63.380132715099997 -27.4193944658 10 0 0 1 +1 -16.812920653799999 -28.193528390800001 10 0 0 1 +2 -10.050091973400001 -29.999935313400002 13 2.69383714935e-16 -1.7976870128500001e-16 -1 -1 0 -2.69383714935e-16 4.8426760581193609e-32 1 -1.7976870128500001e-16 6.9999338036700003 +1 -10.050041736300001 -23.000001509899999 10 0 0 -1 +1 -53.638411611599999 23.161336702100002 10 0 0 1 +2 -40.000005889900002 20.000007856700002 13 1.2518649094500001e-16 3.3689686731300001e-16 1 0 1 -3.3689686731300001e-16 -1 4.2174936629277745e-32 1.2518649094500001e-16 14.0000039535 +1 -26.474205143599999 23.612877197100001 10 0 0 1 +1 -10.050041736300001 10.9999977619 10 0 0 -1 +2 -10.050077960799999 27.999952680300002 13 -1.3606594428900001e-16 1.04491966795e-16 -1 -1 0 1.3606594428900001e-16 1.421779813257651e-32 1 1.04491966795e-16 16.9999549184 +1 -0.937212455434 11 13 -1 0 0 +1 8.1756168253899997 11 10 0 0 -1 +1 18.5957658562 14.5679304444 10 0 -1.1842378929300001e-15 -1 +2 8.1756210378799992 27.9999879308 13 1.61279430607e-16 -9.6888452206000006e-16 -1 0 -1 9.6888452206000006e-16 -1 -1.5626114404177214e-31 -1.61279430607e-16 16.999987833900001 +2 33.000154312699998 -3.9999358403 13 5.9907681504699996e-17 1.03890016243e-17 1 1 0 -5.9907681504699996e-17 -6.2238100046037534e-34 1 -1.03890016243e-17 23.4999954223 +1 53.469313867700002 -15.543907945200001 10 0 0 1 +2 32.999998499500002 -4.0000094690600001 13 -1.07608474141e-16 1.6621763078200001e-16 1 0 1 -1.6621763078200001e-16 -1 -1.7886425623783132e-32 -1.07608474141e-16 23.499997080899998 +1 14.981975072599999 -19.086450221900002 10 0 0 1 +1 1.9476248895499999 -13.0000002125 10 4.4408920985e-16 1.1842378929300001e-15 -1 +2 1.9476373989 -29.999971756400001 13 4.70738733509e-16 1.0081044974899999e-15 -1 0 -1 -1.0081044974899999e-15 -1 4.7455383439316942e-31 -4.70738733509e-16 16.999971543899999 +1 -4.0512084233500003 -13 13 -1 0 0 +1 -10.050041736300001 -13 10 0 0 -1 +1 -26.474207676999999 -25.612876528800001 10 0 0 -1 +2 -10.0500782264 -29.9999528508 13 2.2184535635e-16 -1.48044541144e-16 -1 -1 0 -2.2184535635e-16 3.2842993985762914e-32 1 -1.48044541144e-16 16.999954907700001 +2 -40.000005894799997 -22.000007838799998 13 5.5640088590099997e-18 3.34722974126e-16 1 0 1 -3.34722974126e-16 -1 1.8624015933512388e-33 5.5640088590099997e-18 14.000003959200001 +1 -53.638411617999999 -25.161336703 10 0 0 1 +1 -4.0512084233500003 -23 13 -1 0 0 +1 1.9476248895499999 -23 10 0 0 1 +2 1.94758182896 -30.000090517899999 13 -4.2166878908399999e-16 -5.48623878844e-16 -1 0 -1 5.48623878844e-16 -1 2.3133756665471658e-31 4.2166878908399999e-16 7.0000925632 +1 7.3147213727000002 -25.506193655299999 10 -5.9211894646699999e-16 0 -1 +2 33.000000815600004 -4.0000089966100001 13 -5.2933418242299998e-17 -1.2842066634500001e-16 1 0 1 1.2842066634500001e-16 -1 6.7977448425947445e-33 -5.2933418242299998e-17 33.499997306399997 +1 62.1795402395 -20.456141547600001 10 0 0 1 +2 33.000231648499998 -3.99990394745 13 2.1012375303300001e-17 3.6438932552000002e-18 1 1 0 -2.1012375303300001e-17 -7.656685264342593e-35 1 -3.6438932552000002e-18 33.499988350499997 +1 12.4663281178 22.4690972667 10 0 0 1 +2 8.1755617599299999 28.000161024899999 13 -1.95855484681e-16 1.17654303265e-15 -1 0 -1 -1.17654303265e-15 -1 -2.3043240590771934e-31 1.95855484681e-16 7.0001627314999997 +1 8.1756168254000006 20.999998293600001 10 0 1.1842378929300001e-15 -1 +1 -10.050041736300001 21 10 0 0 1 +1 -0.937212455434 21 13 -1 0 0 +2 -10.0500892177 27.999937760200002 13 -2.6938377685800001e-16 -1.79768782062e-16 -1 -1 0 2.6938377685800001e-16 -4.8426793473024245e-32 1 -1.79768782062e-16 6.9999367231200003 +1 -16.812928262700002 26.193526351199999 10 0 0 -1 +2 -40.000000158600002 20.0000116416 13 3.6512598978999999e-17 9.8261528521100004e-17 1 0 1 -9.8261528521100004e-17 -1 3.5877837859544956e-33 3.6512598978999999e-17 24.000006379399998 +1 -63.3801326675 25.419394455199999 10 0 0 1 +2 -70.199389163800006 27.000064425600002 13 3.6359605203699998e-16 -4.57512413114e-16 -1 0 -1 4.57512413114e-16 -1 -1.6634970716617138e-31 -3.6359605203699998e-16 7.0000700167899996 +1 -67.282680344799999 20.636591324699999 10 0 0 -1 +2 -65.199337741099995 16.091298859399998 13 0 0 1 1 0 -0 -0 1 0 5 +1 -70.199337741099995 16.091298859399998 10 0 0 1 +2 -70.199302031900004 26.9999554113 13 0 0 -1 -1 0 -0 0 1 0 16.999958414799998 +1 -63.116012066899998 11.545972449700001 10 0 0 -1 +2 -65.199337741099995 16.091272674700001 13 0 0 1 1 0 -0 -0 1 0 5 +2 -70.199384206299996 -29.000057785500001 13 2.03942557704e-16 5.8439850052099999e-16 -1 0 -1 -5.8439850052099999e-16 -1 1.1918372491463511e-31 -2.03942557704e-16 7.0000631979800003 +1 -67.282679462999994 -22.636590317500001 10 0 0 -1 +2 -65.199337741099995 -18.091297447999999 13 9.8355079826499999e-17 -6.3129980462000004e-16 1 0 1 6.3129980462000004e-16 -1 -6.2091542677853961e-32 9.8355079826499999e-17 5 +1 -70.199337741099995 -18.091297447999999 10 0 -8.4588420923799999e-16 1 +2 -70.199302332399995 -28.999955369599999 13 -0 0 -1 -1 0 0 0 1 0 16.999958491400001 +1 -63.116011954999998 -13.545972512700001 10 0 0 -1 +2 -65.199337741099995 -18.0912726864 13 0 0 1 1 0 -0 -0 1 0 5 +1 6.5141038693100004 -109.712455713 23.499999994500001 0.99473992845615244 -0.1024327815450157 5.0159347423207682e-15 +1 26.946339062700002 -111.816453577 37.249999994500001 -5.4259627094400001e-15 -3.6173084729600001e-15 1 +1 6.5141038693100004 -109.712455713 50.999999994500001 0.99473992845615244 -0.1024327815450157 4.8429714753407426e-15 +1 -13.918131324000001 -107.60845784999999 37.249999994500001 -5.36136791528e-15 -3.6173084729600001e-15 1 +1 19.251906933600001 -111.02412378 37.499999995499998 5.52644349937e-15 3.15796771393e-15 -1 +1 5.8229157942800001 -109.64128101199999 32.999999994200003 -0.99473992845615244 0.1024327815450157 -3.1579672189504841e-15 +1 -7.6060753518500004 -108.258438244 37.499999995499998 5.3290705172299997e-15 3.1579677139100001e-15 -1 +1 5.8229157908699998 -109.64128101199999 41.999999996299998 -0.99473992845615244 0.1024327815450157 -4.7369508279607256e-15 +1 87.499999999799996 -28.101125938100001 37.249999994 -5.1675835329900002e-15 -3.4881188847699999e-15 1 +1 87.499999999799996 -9.1571596159599995 23.499999994500001 1.5865715347900001e-13 -1 -3.28191511333e-15 +1 87.499999999799996 9.7868067061600001 37.249999994 -5.1675835329900002e-15 -3.4881188847699999e-15 1 +1 87.499999999799996 -9.1571596159599995 50.999999993499998 1.5865715347900001e-13 -1 -3.1881461100899998e-15 +1 -159.616418463 -13.4267384906 50.999999994500001 0.83981625644186431 -0.54287075387791239 2.9197633232995284e-15 +1 -164.72578242700001 -10.123963334500001 37.249999994500001 -5.1675835327999999e-15 -3.4235240904799999e-15 1 +1 -159.616418463 -13.4267384906 23.499999994500001 0.83981625644186431 -0.54287075387791239 2.6277869909695761e-15 +1 -154.507054498 -16.729513646600001 37.249999994500001 -5.1675835327999999e-15 -3.4881188846399999e-15 1 +1 -162.59825610199999 10.5367602475 23.499999994500001 -0.1024327815450157 -0.99473992845615244 -3.8486352171705897e-15 +1 -162.59825610199999 10.5367602475 50.999999994500001 -0.1024327815450157 -0.99473992845615244 -3.934160444220603e-15 +1 -160.47072977600001 31.197483829599999 37.249999994500001 -5.1675835327999999e-15 -3.4881188846399999e-15 1 +1 -161.19916561400001 24.123535403799998 37.499999995000003 6.31593542723e-15 3.5527136778100001e-15 -1 +1 -162.479575584 11.689284349399999 41.999999996299998 0.1024327815450157 0.99473992845615244 3.6948216469305667e-15 +1 -163.759985554 -0.74496670486799998 37.499999995099998 6.31593542731e-15 3.4540271868099999e-15 -1 +1 -162.479575584 11.689284348099999 32.999999994200003 -0.1024327815450157 -0.99473992845615244 -3.9790386957306101e-15 +1 -155.253129836 33.6438877175 23.499999994500001 -0.90541532198995012 -0.42452690692797662 -6.165059484819661e-15 +1 -155.253129836 33.6438877175 50.999999994500001 -0.90541532198995012 -0.42452690692797662 -6.165059484819661e-15 +1 -150.035529897 36.090291605399997 37.249999994500001 -5.1675835327999999e-15 -3.3589292963199998e-15 1 +1 29.578781049 107.065231391 23.499999994500001 -0.99473992845615244 0.1024327815450157 -5.0363893608007718e-15 +1 6.4227351959299996 109.449712116 37.249999994500001 -5.3936653123599997e-15 -3.6173084729600001e-15 1 +1 29.578781049 107.065231391 50.999999994500001 -0.99473992845615244 0.1024327815450157 -5.0363893608007718e-15 +1 52.734826902000002 104.68075066500001 37.249999994500001 -5.4259627094400001e-15 -3.6173084729600001e-15 1 +1 28.1333348042 107.2140754 32.9999999988 -0.99473992845615244 0.1024327815450157 -5.0344656719307717e-15 +1 43.576597384700001 105.62381417 37.499999995700001 5.5264434996000003e-15 3.15796771406e-15 -1 +1 28.133334802299999 107.214075401 41.999999996299998 -0.99473992845615244 0.1024327815450157 -5.0344656707107715e-15 +1 12.690072219899999 108.804336631 37.499999997099998 5.32907051908e-15 3.1579677150099999e-15 -1 +1 70.117413450900003 57.233778685799997 23.499999994500001 -0.34399930899512393 0.93896990122733826 1.2655400189304559e-15 +1 70.117413450900003 57.233778685799997 50.999999993499998 -0.34399930899512393 0.93896990122733826 1.2655400189304559e-15 +1 57.2231695312 -69.958789757399998 50.999999993499998 0.58607935522689247 0.81025365742885125 5.8455468867089262e-15 +1 57.2231695312 -69.958789757399998 23.499999994500001 0.58607935522689247 0.81025365742885125 5.8111613167889323e-15 +1 18.172036477799999 68.839081131300006 35.9999999988 1.1842378929300001e-15 -4.7369515717299999e-15 -1 +2 21.2909982183 79.908050263700005 32.9999999988 5.9293703800799996e-16 -4.0777774832000003e-15 -1 0 -1 4.0777774832000003e-15 -1 -2.417865302544325e-30 -5.9293703800799996e-16 11.4999999998 +1 26.286492957699998 69.549718723200002 35.9999999988 1.1842378929300001e-15 -4.7369515717299999e-15 -1 +2 21.2909982183 79.908050263700005 41.999999996299998 5.9293703800799996e-16 -4.0777774832000003e-15 -1 0 -1 4.0777774832000003e-15 -1 -2.417865302544325e-30 -5.9293703800799996e-16 11.4999999998 +2 23.161170569300001 80.6168936097 41.999999996299998 6.3285417819799996e-16 -4.0332696041599998e-15 -1 0 -1 4.0332696041599998e-15 -1 -2.5524715207916493e-30 -6.3285417819799996e-16 11.5 +2 23.161170569300001 80.6168936097 32.9999999988 6.3285417819799996e-16 -4.0332696041599998e-15 -1 0 -1 4.0332696041599998e-15 -1 -2.5524715207916493e-30 -6.3285417819799996e-16 11.5 +1 27.223459950599999 69.858278225600003 45.000000001899998 6.3285412466000003e-16 -4.0332693629399997e-15 -1 +2 23.161170569300001 80.6168936097 51.000000002999997 6.3285417819799996e-16 -4.0332696041599998e-15 -1 0 -1 4.0332696041599998e-15 -1 -2.5524715207916493e-30 -6.3285417819799996e-16 11.5 +1 19.098881188099998 91.375508993799997 45.000000001899998 6.3285412466000003e-16 -4.0332693629399997e-15 -1 +2 23.161170569300001 80.6168936097 41.999999996299998 6.3285417819799996e-16 -4.0332696041599998e-15 -1 0 -1 4.0332696041599998e-15 -1 -2.5524715207916493e-30 -6.3285417819799996e-16 11.5 +1 23.776514180900001 93.1417119993 46.4999999956 4.85537536183e-14 -2.7948014277899999e-13 -1 +1 21.437697683700002 92.258610495799999 50.999999998500002 -0.93553177252933062 -0.35324255489412487 1.4901769405105267e-09 +1 21.437697684500002 92.258610496100005 41.999999996299998 -0.93553177252933062 -0.35324255489412487 5.258045326691858e-14 +2 27.8388294288 82.3831063855 41.999999996299998 5.4171342637599998e-16 -3.9490123110599997e-15 -1 0 -1 3.9490123110599997e-15 -1 -2.1392329898253185e-30 -5.4171342637599998e-16 11.5 +7 0 0 5 15 5 23.776514180100001 93.141712002399998 50.999999994100001 25.466471998500001 93.779818989500001 50.9999999944 27.2817218307 94.086103534800003 50.999999994600003 29.135401868500001 94.027393012900006 50.999999994900001 32.719860822400001 93.1863087646 50.999999995300001 35.720163512399999 91.052309590899995 50.999999995800003 36.989398629199997 89.700045257900001 50.999999996100001 38.929257486899999 86.570713649300004 50.999999996600003 39.5418265781 82.940213984899998 50.999999997000003 39.4831160564 81.086533947099994 50.999999997300002 38.642031808399999 77.502074993099995 50.999999997800003 36.508032635100001 74.501772302899994 50.999999998299998 35.155768302299997 73.2325371859 50.999999998500002 33.5911024981 72.262607756899996 50.999999998699998 31.9011446799 71.624500769500003 50.999999999000003 + -18.064157756899998 6 -9.0320788784400001 3 0 3 9.0320788784400001 3 18.064157756899998 6 +1 31.9011446799 71.624500769500003 45.000000001899998 5.4171351848700002e-16 -3.9490117842399999e-15 -1 +2 27.8388294288 82.3831063855 32.9999999988 5.4171342637599998e-16 -3.9490123110599997e-15 -1 0 -1 3.9490123110599997e-15 -1 -2.1392329898253185e-30 -5.4171342637599998e-16 11.5 +1 32.834324168099997 72.024774844600003 45.000000001899998 5.4171351848700002e-16 -3.9490117842399999e-15 -1 +1 29.562295848000002 70.741387057699995 32.9999999988 0.93553177252933062 0.35324255489412487 -5.2580017097318581e-14 +1 29.562289381799999 70.741384616199994 51.000000000599996 0.93553177252933062 0.35324255489412487 -1.117639668870395e-09 +1 41.149169102000002 81.920381622500003 35.999999992500001 5.5888520478200004e-16 -6.5302060647800001e-15 -1 +2 29.7090017885 83.091949733700005 41.999999996299998 5.5888520866500001e-16 -6.53020587755e-15 -1 0 -1 6.53020587755e-15 -1 -3.6496354744999411e-30 -5.5888520866500001e-16 11.5 +2 29.7090017885 83.091949733700005 32.999999993499998 5.5888520866500001e-16 -6.53020587755e-15 -1 0 -1 6.53020587755e-15 -1 -3.6496354744999411e-30 -5.5888520866500001e-16 11.5 +1 9.8508308940700005 81.079618377299994 35.9999999944 6.0304365945299997e-16 -6.4562556190099998e-15 -1 +2 21.290998208000001 79.9080502698 32.999999998 6.0304357727700005e-16 -6.45625595758e-15 -1 0 -1 6.45625595758e-15 -1 -3.893403688474987e-30 -6.0304357727700005e-16 11.5 +2 21.2909982079 79.9080502698 41.999999996299998 6.0304357727700005e-16 -6.45625595758e-15 -1 0 -1 6.45625595758e-15 -1 -3.893403688474987e-30 -6.0304357727700005e-16 11.5 +1 11.2704515577 94.941977504500002 32.999999997700002 0.10187548792598977 0.99479715769590016 5.7924984355594186e-11 +1 11.2704515576 94.941977504299999 41.999999996299998 0.10187548792598977 0.99479715769590016 -2.6005054595897391e-13 +1 42.362883243200002 93.772097895499996 41.999999996299998 0.10187548792598977 0.99479715769590016 -2.6003390784597389e-13 +1 42.362883243200002 93.772097895499996 32.999999993899998 0.10187548792598977 0.99479715769590016 -2.6003390784597389e-13 +7 0 0 5 9 3 28.538625593500001 101.847047723 41.999999996299998 29.060364657699999 101.496944132 41.999999996299998 29.444618362899998 100.941954088 41.999999996299998 29.580279002600001 100.252849845 41.999999996299998 29.2898447219 98.934400998599997 41.999999996299998 28.1798646357 98.165893588200007 41.999999996299998 27.4907603921 98.0302329485 41.999999996299998 26.831535969000001 98.175450088800005 41.999999996299998 26.309796904799999 98.525553680599998 41.999999996299998 + 4.4524817489300004 6 7.5940744025200004 3 10.7356670561 6 +7 0 0 5 9 3 26.309796904799999 98.525553680599998 41.999999996299998 25.788057840600001 98.875657272300003 41.999999996299998 25.403804135400001 99.430647315399995 41.999999996299998 25.268143495699999 100.11975155899999 41.999999996299998 25.5585777764 101.438200405 41.999999996299998 26.6685578626 102.20670781600001 41.999999996299998 27.357662106199999 102.342368455 41.999999996299998 28.016886529400001 102.197151315 41.999999996299998 28.538625593500001 101.847047723 41.999999996299998 + 10.7356670561 6 13.877259709700001 3 17.018852363299999 6 +7 0 0 5 9 3 28.538625593500001 101.847047723 32.9999999988 29.060364657699999 101.496944132 32.9999999988 29.444618362899998 100.941954088 32.9999999988 29.580279002600001 100.252849845 32.9999999988 29.2898447219 98.934400998599997 32.9999999988 28.1798646357 98.165893588200007 32.9999999988 27.4907603921 98.0302329485 32.9999999988 26.831535969000001 98.175450088800005 32.9999999988 26.309796904799999 98.525553680599998 32.9999999988 + 0.97681177770100003 6 4.1184044312900001 3 7.2599970848800002 6 +7 0 0 5 9 3 26.309796904799999 98.525553680599998 32.9999999988 25.788057840600001 98.875657272300003 32.9999999988 25.403804135400001 99.430647315399995 32.9999999988 25.268143495699999 100.11975155899999 32.9999999988 25.5585777764 101.438200405 32.9999999988 26.6685578626 102.20670781600001 32.9999999988 27.357662106199999 102.342368455 32.9999999988 28.016886529400001 102.197151315 32.9999999988 28.538625593500001 101.847047723 32.9999999988 + 7.2599970848800002 6 10.4015897385 3 13.5431823921 6 +7 0 0 5 15 5 30.379727411299999 80.409926420000005 32.9999999988 30.208499053800001 79.643420630999998 32.9999999988 29.8867676365 78.910535451300007 32.9999999988 29.423197897800001 78.250757750099993 32.9999999988 28.262338296300001 77.148518143100006 32.9999999988 26.770885201799999 76.567058916099995 32.9999999988 25.976558609400001 76.428318935299998 32.9999999988 24.3763058125 76.469769530899995 32.9999999988 22.910535453200001 77.113232365399995 32.9999999988 22.250757751999998 77.576802104099997 32.9999999988 21.148518144899999 78.737661705600004 32.9999999988 20.567058917899999 80.229114800100007 32.9999999988 20.428318937099998 81.023441392500004 32.9999999988 20.449044234900001 81.8235677909 32.9999999988 20.620272592500001 82.590073579999995 32.9999999988 + 8.4398167790700001 6 12.366807596099999 3 16.293798413000001 3 20.220789230000001 3 24.147780047000001 6 +7 0 0 5 15 5 20.620272592500001 82.590073579999995 32.9999999988 20.79150095 83.356579369000002 32.9999999988 21.1132323673 84.089464548699993 32.9999999988 21.576802105999999 84.749242249900007 32.9999999988 22.737661707499999 85.851481856999996 32.9999999988 24.229114802000002 86.432941084000007 32.9999999988 25.023441394399999 86.571681064800003 32.9999999988 26.623694191199998 86.530230469200006 32.9999999988 28.089464550599999 85.886767634600005 32.9999999988 28.749242251799998 85.423197895900003 32.9999999988 29.8514818588 84.262338294399996 32.9999999988 30.4329410858 82.770885199899993 32.9999999988 30.5716810666 81.976558607499996 32.9999999988 30.550955768800002 81.1764322091 32.9999999988 30.379727411299999 80.409926420000005 32.9999999988 + 24.147780047000001 6 28.074770864000001 3 32.001761680999998 3 35.928752498000001 3 39.855743314999998 6 +1 20.620272592500001 82.590073579999995 41.999999994200003 1.0449157878799999e-16 0 -1 +1 30.379727411299999 80.409926420000005 41.999999994200003 1.0449157878799999e-16 0 -1 +2 25.500000001899998 81.5 23.499999994500001 1.32556210217e-16 8.4147218736300005e-17 -1 -1 0 -1.32556210217e-16 -1.1154236415984865e-32 1 8.4147218736300005e-17 5 +2 25.500000001899998 81.5 23.499999994500001 1.32556210217e-16 8.4147218736300005e-17 -1 -1 0 -1.32556210217e-16 -1.1154236415984865e-32 1 8.4147218736300005e-17 5 +1 26.309796904799999 98.525553680599998 33.999999996299998 7.8154560156899994e-15 8.4870485750299999e-14 -1 +2 27.424211249199999 100.186300702 49.999999996299998 7.8154559352599992e-15 8.4870486415000004e-14 -1 0 -1 -8.4870486415000004e-14 -1 6.6330154678051494e-28 -7.8154559352599992e-15 2 +1 28.538625593500001 101.847047723 33.999999996299998 7.8154560156899994e-15 8.4870485750299999e-14 -1 +1 26.309796904799999 98.525553680599998 33.999999996299998 7.8154560156899994e-15 8.4870485750299999e-14 -1 +1 28.538625593500001 101.847047723 33.999999996299998 7.8154560156899994e-15 8.4870485750299999e-14 -1 +2 27.424211249199999 100.186300702 23.499999994500001 7.8154559352599992e-15 8.4870486415000004e-14 -1 0 -1 -8.4870486415000004e-14 -1 6.6330154678051494e-28 -7.8154559352599992e-15 2 +2 27.424211249199999 100.186300702 49.999999996299998 7.8154559352599992e-15 8.4870486415000004e-14 -1 0 -1 -8.4870486415000004e-14 -1 6.6330154678051494e-28 -7.8154559352599992e-15 2 +2 27.424211249199999 100.186300702 23.499999994500001 7.8154559352599992e-15 8.4870486415000004e-14 -1 0 -1 -8.4870486415000004e-14 -1 6.6330154678051494e-28 -7.8154559352599992e-15 2 +1 3.6202725862 -82.409926417600005 41.999999994200003 1.56737368182e-16 0 -1 +2 8.4999999956199996 -83.499999997499998 32.999999994200003 1.32556210217e-16 8.4147218736300005e-17 -1 -1 0 -1.32556210217e-16 -1.1154236415984865e-32 1 8.4147218736300005e-17 5 +1 13.379727405000001 -84.590073577499993 41.999999994200003 1.56737368182e-16 0 -1 +2 8.4999999956199996 -83.499999997499998 23.499999994500001 1.32556210217e-16 8.4147218736300005e-17 -1 -1 0 -1.32556210217e-16 -1.1154236415984865e-32 1 8.4147218736300005e-17 5 +2 8.4999999956199996 -83.499999997499998 32.999999994200003 1.32556210217e-16 8.4147218736300005e-17 -1 -1 0 -1.32556210217e-16 -1.1154236415984865e-32 1 8.4147218736300005e-17 5 +2 8.4999999956199996 -83.499999997499998 23.499999994500001 1.32556210217e-16 8.4147218736300005e-17 -1 -1 0 -1.32556210217e-16 -1.1154236415984865e-32 1 8.4147218736300005e-17 5 +1 19.938258883100001 -84.6900561848 44.999999988799999 -3.7372132055699999e-16 -9.0990113221800002e-16 -1 +2 8.5 -83.5 41.999999996299998 -3.7372158294600001e-16 -9.0990075420400002e-16 -1 0 -1 9.0990075420400002e-16 -1 3.4004955018487817e-31 3.7372158294600001e-16 11.5 +1 -2.9382588831000001 -82.3099438152 44.999999988799999 -3.7372149819199999e-16 -9.0990113221800002e-16 -1 +7 0 0 5 15 5 -2.93825888295 -82.309943813700002 50.999999992100001 -2.75132529435 -80.513226309900006 50.999999991999999 -2.2116070488499999 -78.753213130500001 50.999999991899998 -1.3283773532300001 -77.122421325000005 50.999999991800003 1.0299238313600001 -74.29502248 50.999999991599999 4.2822352022899999 -72.569264834199998 50.999999991300001 6.0599168537799999 -72.040658596900002 50.999999991199999 9.7267605098499992 -71.708956460099998 50.999999991000003 13.246786868799999 -72.788392950800002 50.999999990799999 14.8775786744 -73.671622646399996 50.999999990699997 17.704977519500002 -76.029923830800001 50.999999990500001 19.4307351655 -79.282235201600002 50.999999990299997 19.959341403 -81.059916853000004 50.999999990200003 20.1251924715 -82.893338681100005 50.999999990100001 19.938258883100001 -84.6900561848 50.999999989999999 + -18.0641577574 6 -9.0320788787000001 3 1.7763568394e-15 3 9.0320788787000001 3 18.0641577574 6 +7 0 0 5 15 5 19.9382588828 -84.690056188100002 50.999999995800003 19.751325293899999 -86.486773691799996 50.999999995300001 19.211607048099999 -88.246786871099999 50.999999994699998 18.328377352299999 -89.877578676400006 50.999999994200003 15.9700761675 -92.704977520900002 50.999999993099998 12.717764796599999 -94.430735166199995 50.999999991999999 10.940083145099999 -94.959341403300002 50.999999991400003 7.2732394892099999 -95.2910435398 50.999999990299997 3.7532131304799998 -94.211607048800005 50.999999989199999 2.1224213250399999 -93.328377353299999 50.999999988699997 -0.70497751977800005 -90.970076168800006 50.999999987599999 -2.4307351656199998 -87.717764798100006 50.999999986500001 -2.9593414029899998 -85.940083146800006 50.999999985999999 -3.1251924714700001 -84.106661318799993 50.999999985400002 -2.9382588831000001 -82.3099438152 50.999999984900001 + -18.064157756499998 6 -9.0320788782400001 3 0 3 9.0320788782400001 3 18.064157756499998 6 +2 8.5 -83.5 41.999999996299998 -3.7372158294600001e-16 -9.0990075420400002e-16 -1 0 -1 9.0990075420400002e-16 -1 3.4004955018487817e-31 3.7372158294600001e-16 11.5 +1 8.6902126879499999 -100.646112499 33.999999996299998 2.2964359018800001e-13 1.6778850948600001e-13 -1 +2 6.7074263208199998 -100.90794875 49.9999999968 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +1 4.7246399536899997 -101.16978500099999 33.999999996299998 2.2964359018800001e-13 1.6778850948600001e-13 -1 +2 6.7074263208199998 -100.90794875 41.999999996299998 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +1 8.6902126879499999 -100.646112499 33.999999996299998 2.2964359018800001e-13 1.6778850948600001e-13 -1 +2 6.7074263208199998 -100.90794875 32.999999994200003 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +1 4.7246399536899997 -101.16978500099999 33.999999996299998 2.2964359018800001e-13 1.6778850948600001e-13 -1 +2 6.7074263208199998 -100.90794875 23.499999994500001 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +2 6.7074263208199998 -100.90794875 41.999999996299998 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +2 6.7074263208199998 -100.90794875 49.9999999968 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +2 6.7074263208199998 -100.90794875 32.999999994200003 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +2 6.7074263208199998 -100.90794875 23.499999994500001 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +7 0 0 5 6 2 -4.9297582828299999 -82.124648222700003 41.999999996299998 -4.4976787792500001 -77.905565226999997 41.999999996299998 -2.4131343732300001 -73.8517347035 41.999999996299998 1.2640604474699999 -70.857741346300003 41.999999996299998 5.6562687796000004 -69.638162213699999 41.999999996299998 9.8753517753400004 -70.070241717599998 41.999999996299998 + 2.2474917242100001 6 23.453242136899998 6 +7 0 0 5 6 2 9.8753517753400004 -70.070241717599998 41.999999996299998 14.0944347709 -70.502321221499997 41.999999996299998 18.148265294000002 -72.586865627600005 41.999999996299998 21.142258650900001 -76.264060448199999 41.999999996299998 22.361837783399999 -80.656268780100007 41.999999996299998 21.9297582795 -84.875351775699997 41.999999996299998 + 23.453242136899998 6 44.658992548599997 6 +7 0 0 1 2 2 21.929761623299999 -84.875319113900005 41.999999996299998 19.251906933600001 -111.02412378 41.999999996299998 + -13.142782156000001 2 13.142782156000001 2 +7 0 0 1 2 2 -4.9297582865100003 -82.124648223299999 41.999999996299998 -7.6060753518500004 -108.258438244 41.999999996299998 + -13.135235569600001 2 13.135235569600001 2 +1 20.590835950100001 -97.949705116299995 32.999999994200003 -0.10187548771604103 -0.99479715771740063 6.7579093968127222e-15 +2 8.4999999983999999 -83.499999998700005 32.999999994200003 1.10785473343e-16 -6.8905455708200003e-15 -1 0 -1 6.8905455708200003e-15 -1 -7.6337235265480587e-31 -1.10785473343e-16 13.5 +2 8.4999999983999999 -83.499999998700005 32.999999994200003 1.10785473343e-16 -6.8905455708200003e-15 -1 0 -1 6.8905455708200003e-15 -1 -7.6337235265480587e-31 -1.10785473343e-16 13.5 +1 -6.2679168155999996 -95.191543233800004 32.999999994200003 -0.10187548783502212 -0.99479715770521604 6.761800463941468e-15 +1 -4.9297582827399999 -82.124648221800001 35.999999990699997 -1.10785158824e-16 -7.0754438752399996e-15 -1 +1 9.8753517753400004 -70.070241717599998 35.999999990699997 -1.10785158824e-16 -7.0754438752399996e-15 -1 +1 21.9297582795 -84.875351775699997 35.999999990699997 -1.10784981189e-16 -7.0754438752399996e-15 -1 +1 -142.379727409 10.221242007000001 41.999999994200003 0 -2.24656894395e-15 -1 +2 -137.5 9.1311684270499995 32.999999994200003 3.5275243950799999e-16 -2.2402162931099999e-15 -1 0 -1 2.2402162931099999e-15 -1 -7.9024176242012117e-31 -3.5275243950799999e-16 5 +1 -132.62027259000001 8.0410948470800001 41.999999994200003 0 -2.24656894395e-15 -1 +2 -137.5 9.1311684270499995 23.499999994500001 3.5275243950799999e-16 -2.2402162931099999e-15 -1 0 -1 2.2402162931099999e-15 -1 -7.9024176242012117e-31 -3.5275243950799999e-16 5 +2 -137.5 9.1311684270499995 32.999999994200003 3.5275243950799999e-16 -2.2402162931099999e-15 -1 0 -1 2.2402162931099999e-15 -1 -7.9024176242012117e-31 -3.5275243950799999e-16 5 +2 -137.5 9.1311684270499995 23.499999994500001 3.5275243950799999e-16 -2.2402162931099999e-15 -1 0 -1 2.2402162931099999e-15 -1 -7.9024176242012117e-31 -3.5275243950799999e-16 5 +7 0 0 3 4 2 -125.00301579800001 8.8566035419099993 39.000000005799997 -125.01034536100001 8.5229941308200008 39.000000005899999 -125.031040706 8.1896786012800007 39.000000006100002 -125.065035529 7.8577248189100004 39.000000006199997 + 18.614045512400001 4 19.615115267699998 4 +7 0 0 5 6 2 -136.22655639800001 21.566132897999999 38.999999997499998 -132.519169363 21.186465685400002 38.9999999992 -128.95037998399999 19.428203057699999 39.0000000008 -126.224448873 16.341360615599999 39.000000002500002 -124.92115643299999 12.582481272400001 39.000000004100002 -125.00301579800001 8.8566035419000002 39.000000005799997 + -0.019838823690999999 6 18.614045512400001 6 +1 -136.22655639600001 21.566132897799999 44.999999987000002 5.7838178690899997e-17 -2.1268192540399999e-15 -1 +2 -137.5 9.1311684270499995 41.999999996299998 5.7837690158399994e-17 -2.12681934891e-15 -1 0 -1 2.12681934891e-15 -1 -1.2301031852514658e-31 -5.7837690158399994e-17 12.5 +1 -149.93292772000001 10.4243460221 44.999999987000002 5.7838178690899997e-17 -2.1268194316799998e-15 -1 +7 0 0 5 15 5 -149.93292772000001 10.4243460221 50.999999992600003 -149.72979585900001 12.377305741600001 50.999999992299998 -149.143201253 14.2903806133 50.999999991899998 -148.183220549 16.063008333599999 50.999999991599999 -145.61993911499999 19.1363425282 50.999999990900001 -142.08487263800001 21.0122689104 50.999999990299997 -140.15262669099999 21.586897126699998 50.999999989899997 -136.16693755700001 21.947558892 50.999999989199999 -132.34078781299999 20.774369680300001 50.999999988600003 -130.56816009299999 19.814388976899998 50.999999988200003 -127.494825898 17.251107542100002 50.999999987599999 -125.618899516 13.716041065400001 50.999999986900001 -125.04427130000001 11.783795118800001 50.999999986600002 -124.86394041699999 9.7909505515199999 50.999999986200002 -125.067072279 7.83799083202 50.999999985899997 + -19.634954084899999 6 -9.8174770424699993 3 0 3 9.8174770424699993 3 19.634954084899999 6 +1 -125.067072279 7.83799083202 44.999999987000002 5.7838178690899997e-17 -2.1268194316799998e-15 -1 +7 0 0 3 4 2 -125.065035529 7.8577248235099999 39.000000006199997 -125.06570922500001 7.8511462889699999 39.000000006199997 -125.06638814199999 7.8445682890499997 39.000000006199997 -125.067072279 7.83799083202 39.000000006199997 + 19.615115263100002 4 19.634954084899999 4 +2 -137.5 9.1311684270499995 50.999999990799999 5.7837690158399994e-17 -2.12681934891e-15 -1 0 -1 2.12681934891e-15 -1 -1.2301031852514658e-31 -5.7837690158399994e-17 12.5 +2 -137.5 9.1311684270499995 41.999999996299998 5.7837690158399994e-17 -2.12681934891e-15 -1 0 -1 2.12681934891e-15 -1 -1.2301031852514658e-31 -5.7837690158399994e-17 12.5 +1 -138.773443598 -3.3037960442399998 44.999999987000002 5.7838178690899997e-17 -2.1268194316799998e-15 -1 +2 -137.5 9.1311684270499995 38.999999994500001 5.7837690158399994e-17 -2.12681934891e-15 -1 0 -1 2.12681934891e-15 -1 -1.2301031852514658e-31 -5.7837690158399994e-17 12.5 +2 -137.5 9.1311684270499995 38.999999994500001 5.7837690158399994e-17 -2.12681934891e-15 -1 0 -1 2.12681934891e-15 -1 -1.2301031852514658e-31 -5.7837690158399994e-17 12.5 +7 0 0 1 2 2 -136.22655639999999 21.566132893300001 41.999999996299998 -161.19916561400001 24.1235354037 41.999999996299998 + -12.5516086474 2 12.5516086474 2 +7 0 0 1 2 2 -138.773443598 -3.3037960437399998 41.999999996299998 -163.759985554 -0.74496670486899996 41.999999996299998 + -12.558611452899999 2 12.558611452899999 2 +7 0 0 5 9 3 -157.64850820199999 12.0019382692 41.999999996299998 -157.34196309399999 12.5504036491 41.999999996299998 -156.82003613500001 12.9784890466 41.999999996299998 -156.14423603399999 13.169702776399999 41.999999996299998 -154.806545309 12.9873762627 41.999999996299998 -153.950374514 11.9435223449 41.999999996299998 -153.75916078500001 11.2677222434 41.999999996299998 -153.85032404099999 10.598876881200001 41.999999996299998 -154.15686914899999 10.050411501399999 41.999999996299998 + 1.1481745586300001 6 4.2897672122200001 3 7.4313598658200002 6 +7 0 0 5 9 3 -154.15686914899999 10.050411501399999 41.999999996299998 -154.46341425700001 9.5019461215399996 41.999999996299998 -154.98534121599999 9.0738607240500002 41.999999996299998 -155.66114131800001 8.8826469942599999 41.999999996299998 -156.998832042 9.0649735079500005 41.999999996299998 -157.855002837 10.108827425699999 41.999999996299998 -158.04621656699999 10.7846275272 41.999999996299998 -157.95505331000001 11.4534728894 41.999999996299998 -157.64850820199999 12.0019382692 41.999999996299998 + 7.4313598658100002 6 10.572952519399999 3 13.714545172999999 6 +1 -151.266714576 -2.0243813780600002 32.999999994200003 -0.99479715770132338 0.10187548787303312 -3.3946877250611036e-15 +2 -137.49999999600001 9.1311684221299991 32.999999994200003 2.9860183649199999e-15 -4.03497471773e-15 -1 0 -1 4.03497471773e-15 -1 -1.2048508609129673e-29 -2.9860183649199999e-15 12.5 +2 -137.49999999600001 9.1311684221299991 32.999999994200003 2.9860183649199999e-15 -4.03497471773e-15 -1 0 -1 4.03497471773e-15 -1 -1.2048508609129673e-29 -2.9860183649199999e-15 12.5 +2 -137.49999999600001 9.1311684221299991 32.999999994200003 2.9860183649199999e-15 -4.03497471773e-15 -1 0 -1 4.03497471773e-15 -1 -1.2048508609129673e-29 -2.9860183649199999e-15 12.5 +2 -137.49999999600001 9.1311684221299991 32.999999994200003 2.9860183649199999e-15 -4.03497471773e-15 -1 0 -1 4.03497471773e-15 -1 -1.2048508609129673e-29 -2.9860183649199999e-15 12.5 +1 -148.712861006 22.844834150800001 32.999999994200003 -0.99479715770132338 0.10187548787303312 -3.679630166921196e-15 +2 -155.902688676 11.0261748853 32.999999994200003 2.9860183649199999e-15 -4.03497471773e-15 -1 0 -1 4.03497471773e-15 -1 -1.2048508609129673e-29 -2.9860183649199999e-15 2 +2 -155.902688676 11.0261748853 32.999999994200003 2.9860183649199999e-15 -4.03497471773e-15 -1 0 -1 4.03497471773e-15 -1 -1.2048508609129673e-29 -2.9860183649199999e-15 2 +1 -125.065035524 7.8577248230599999 35.999999996299998 2.75570357644e-15 -4.2209968853499998e-15 -1 +1 -125.00301579400001 8.8566035418200002 35.999999996299998 2.75570357644e-15 -4.2209968853499998e-15 -1 +1 -138.773443598 -3.3037960487200002 35.999999996299998 2.75570357644e-15 -4.2209968853499998e-15 -1 +1 -125.20676677 6.8670092278099997 35.999999996299998 2.75570357644e-15 -4.2209968853499998e-15 -1 +1 -136.226556397 21.566132893300001 35.999999996299998 2.8070303415000002e-15 -4.1935665606699999e-15 -1 +1 -154.15686914899999 10.050411501399999 33.999999992500001 1.20852993746e-13 -1.09153397432e-15 -1 +2 -155.902688676 11.0261748853 49.999999992399999 1.2085299515399999e-13 -1.09153403715e-15 -1 -1 0 -1.2085299515399999e-13 1.31915157702115e-28 1 -1.09153403715e-15 2 +1 -157.64850820199999 12.0019382692 33.999999992500001 1.20852993746e-13 -1.09153397432e-15 -1 +1 -154.15686914899999 10.050411501399999 33.999999992500001 1.20852993746e-13 -1.09153397432e-15 -1 +1 -157.64850820199999 12.0019382692 33.999999992500001 1.20852993746e-13 -1.09153397432e-15 -1 +2 -155.902688676 11.0261748853 23.499999994500001 1.2085299515399999e-13 -1.09153403715e-15 -1 -1 0 -1.2085299515399999e-13 1.31915157702115e-28 1 -1.09153403715e-15 2 +2 -155.902688676 11.0261748853 49.999999992399999 1.2085299515399999e-13 -1.09153403715e-15 -1 -1 0 -1.2085299515399999e-13 1.31915157702115e-28 1 -1.09153403715e-15 2 +2 -155.902688676 11.0261748853 23.499999994500001 1.2085299515399999e-13 -1.09153403715e-15 -1 -1 0 -1.2085299515399999e-13 1.31915157702115e-28 1 -1.09153403715e-15 2 +1 -9.1784735969900009 87.068658281400005 37.249999994 -5.3613679154799999e-15 -3.6173084730900004e-15 1 +1 -1.3778692005299999 98.259185198899999 50.999999993499998 -0.57184921635528985 -0.82035874698441591 5.208869543702641e-16 +1 -1.3778692005299999 98.259185198899999 23.499999994500001 0.57184921635528985 0.82035874698441591 5.7297564980729044e-15 +2 -41.992823476399998 109.942626936 23.499999994500001 -4.0715155394300002e-15 2.0148165554899999e-15 1 1 0 4.0715155394300002e-15 8.2033569147783615e-30 1 -2.0148165554899999e-15 40 +2 -41.992823476399998 109.942626936 50.999999993499998 -4.0715155394300002e-15 2.0148165554899999e-15 1 1 0 4.0715155394300002e-15 8.2033569147783615e-30 1 -2.0148165554899999e-15 40 +1 -25.0117471993 73.726014055999997 37.249999994500001 -4.0602442043400002e-15 2.2146786569100001e-15 1 +1 -124.37373182499999 33.447782462299998 37.249999994 -5.1675835329900002e-15 -3.3589292964400002e-15 1 +1 -137.204630861 34.769037033799997 23.499999994500001 0.99473992845615244 -0.1024327815450157 4.9577563142807594e-15 +1 -137.204630861 34.769037033799997 50.999999993499998 0.99473992845615244 -0.1024327815450157 4.9577563142807594e-15 +1 -103.295344286 37.020766720899999 37.249999994 -5.1675835329900002e-15 -3.3589292964400002e-15 1 +1 -64.153545742899993 55.373390388499999 50.999999993499998 0.90541532198995012 0.42452690692797662 6.0813358714896647e-15 +1 -64.153545742899993 55.373390388499999 23.499999994500001 0.90541532198995012 0.42452690692797662 6.1224259787296629e-15 +2 -120.27642056400001 73.237379600500006 23.499999994500001 -2.2933259066499999e-14 -5.3953122334099997e-15 1 1 0 2.2933259066499999e-14 -1.2373209319344824e-28 1 5.3953122334099997e-15 40 +2 -120.27642056400001 73.237379600500006 50.999999993499998 -2.2933259066499999e-14 -5.3953122334099997e-15 1 1 0 2.2933259066499999e-14 -1.2373209319344824e-28 1 5.3953122334099997e-15 40 +1 -148.32785824300001 -17.365812886200001 50.999999993499998 0.99473992845615244 -0.1024327815450157 4.5753861894107015e-15 +1 -148.32785824300001 -17.365812886200001 23.499999994500001 0.99473992845615244 -0.1024327815450157 4.8613478262507449e-15 +1 -142.148661989 -18.0021121258 37.249999994 -5.1675835329900002e-15 -3.4881188847699999e-15 1 +2 -146.24597324999999 -57.791709263999998 23.499999994500001 9.6659368965000009e-16 -9.5482086703000007e-15 1 0 1 9.5482086703000007e-15 -1 -9.2292382481733984e-30 9.6659368965000009e-16 40 +2 -146.24597324999999 -57.791709263999998 50.999999993499998 9.6659368965000009e-16 -9.5482086703000007e-15 1 0 1 9.5482086703000007e-15 -1 -9.2292382481733984e-30 9.6659368965000009e-16 40 +1 -124.531143095 -24.199059006399999 37.249999994500001 1.4764524379399999e-15 -9.5969408466300004e-15 1 +1 -14.3225999796 -106.441786845 50.999999994500001 -0.3275596318859868 0.94483050731796181 0 +1 -77.668300933899999 -54.491954931899997 50.999999994500001 -0.83981625644186431 0.54287075387791239 -2.6740230788895681e-15 +2 -52.520288927800003 -118.377501115 50.999999994500001 5.3319979771499996e-15 3.3284093715700001e-15 -1 -1 0 -5.3319979771499996e-15 -1.7747072036338342e-29 1 3.3284093715700001e-15 40 +2 -52.520288927800003 -118.377501115 23.499999994500001 5.3555698928500002e-15 3.2349796822300001e-15 -1 -1 0 -5.3555698928500002e-15 -1.732515979013245e-29 1 3.2349796822300001e-15 40 +1 -77.668300933899999 -54.491954931899997 23.499999994500001 -0.83981625644186431 0.54287075387791239 -2.7376902950495579e-15 +1 -14.3225999796 -106.441786845 23.499999994500001 -0.3275596318859868 0.94483050731796181 0 +1 -14.7270686351 -105.27511584 37.249999994 -5.3613679154700003e-15 -3.6173084730900004e-15 1 +1 -30.8054587727 -84.784850857500004 37.249999994 -5.42596270964e-15 -3.6173084730900004e-15 1 +Polygon3D 0 +PolygonOnTriangulations 0 +Surfaces 578 +2 50.5 5.5 -5 0 0 1 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 8 +1 50.5 5.5 9.5 0 0 1 1 0 -0 -0 1 0 +2 50.5 5.5 -5 0 0 1 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 8 +1 0 0 13 0 0 1 1 0 -0 -0 1 0 +1 -38 -32.5 2.22044604925e-16 0 -1 0 1 0 0 -0 0 1 +6 0 0 1 +7 0 0 5 9 3 71 -32.5 0 75.712388980399993 -32.5 0 80.4247779608 -31.574724587399999 0 84.8946105096 -29.723259324099999 0 92.867471954300001 -24.367471954300001 0 98.223259324099999 -16.3946105096 0 100.07472458700001 -11.9247779608 0 101 -7.2123889803800001 0 101 -2.5 0 + 207.10225695400001 6 230.77710716199999 3 254.45195737099999 6 +6 0 0 1 +7 0 0 5 9 3 71 -32.5 0 75.712388980399993 -32.5 0 80.4247779608 -31.574724587399999 0 84.8946105096 -29.723259324099999 0 92.867471954300001 -24.367471954300001 0 98.223259324099999 -16.3946105096 0 100.07472458700001 -11.9247779608 0 101 -7.2123889803800001 0 101 -2.5 0 + 207.10225695400001 6 230.77710716199999 3 254.45195737099999 6 +1 101 -2.5 -1.3322676295499999e-15 1 -3.3599508870400002e-15 -8.3557604617999994e-17 3.3599508870400002e-15 1 -1.6267009302e-31 8.3557604617999994e-17 -1.1807935473518668e-31 1 +6 0 0 1 +7 0 0 5 6 2 101 7.5 0 101 12.4776888283 0 99.654424864299997 17.455903910100002 0 96.956647293900005 21.945748933499999 0 93.192846020999994 25.470943655100001 0 88.797802672700001 27.807817643500002 0 + 107.808170647 6 132.87983823900001 6 +6 0 0 1 +7 0 0 5 6 2 101 7.5 0 101 12.4776888283 0 99.654424864299997 17.455903910100002 0 96.956647293900005 21.945748933499999 0 93.192846020999994 25.470943655100001 0 88.797802672700001 27.807817643500002 0 + 107.808170647 6 132.87983823900001 6 +1 88.797802672700001 27.807817643500002 4.4408920985e-16 0.46947156278713975 0.88294759285826285 6.8484107274020401e-13 -0.88294759285826285 0.46947156278713975 -2.6794007744629963e-24 -3.2151340868253059e-13 -6.0467877666517567e-13 1 +6 0 0 1 +7 0 0 5 6 2 63.171634448200003 41.433492985900003 0 55.7500134434 45.379638872299999 0 47.845323711900001 48.4193390577 0 39.609065293299999 50.472868920099998 0 31.202585726199999 51.5 0 22.797080048600002 51.5 0 + 95.599764641600004 6 137.70278531899999 6 +6 0 0 1 +7 0 0 5 6 2 63.171634448200003 41.433492985900003 0 55.7500134434 45.379638872299999 0 47.845323711900001 48.4193390577 0 39.609065293299999 50.472868920099998 0 31.202585726199999 51.5 0 22.797080048600002 51.5 0 + 95.599764641600004 6 137.70278531899999 6 +1 22.797080048600002 51.5 -1.3322676295499999e-15 0 1 -0 -1 0 0 0 0 1 +6 0 0 1 +7 0 0 5 9 3 -12 51.5 0 -20.4823001647 51.5 0 -28.9646003294 49.834504257299997 0 -37.0102989174 46.501866783399997 0 -51.361449517799997 36.861449517799997 0 -61.001866783399997 22.5102989174 0 -64.334504257299997 14.4646003294 0 -66 5.9823001646899998 0 -66 -2.5 0 + 166.58674222600001 6 209.301291515 3 252.01584080399999 6 +6 0 0 1 +7 0 0 5 9 3 -12 51.5 0 -20.4823001647 51.5 0 -28.9646003294 49.834504257299997 0 -37.0102989174 46.501866783399997 0 -51.361449517799997 36.861449517799997 0 -61.001866783399997 22.5102989174 0 -64.334504257299997 14.4646003294 0 -66 5.9823001646899998 0 -66 -2.5 0 + 166.58674222600001 6 209.301291515 3 252.01584080399999 6 +1 -66 -2.5 -6.4184768611100004e-16 -1 0 0 0 -1 0 0 0 1 +6 0 0 1 +7 0 0 5 6 2 -66 -4.5 0 -66 -13.296459430100001 0 -62.555579886700002 -22.101126014199998 0 -55.601126014199998 -29.055579886699999 0 -46.796459430100001 -32.5 0 -38 -32.5 0 + 98.517206313800003 6 143.29775463799999 6 +6 0 0 1 +7 0 0 5 6 2 -66 -4.5 0 -66 -13.296459430100001 0 -62.555579886700002 -22.101126014199998 0 -55.601126014199998 -29.055579886699999 0 -46.796459430100001 -32.5 0 -38 -32.5 0 + 98.517206313800003 6 143.29775463799999 6 +2 -22.5 -12.5 1.75 0 0 1 1 0 -0 -0 1 0 6 +1 0 0 8.5 0 0 1 1 0 -0 -0 1 0 +2 -22.5 -12.5 1.75 0 0 1 1 0 -0 -0 1 0 6 +2 -22.5 29.5 1.75 0 0 1 1 0 -0 -0 1 0 6 +1 0 0 8.5 0 0 1 1 0 -0 -0 1 0 +2 -22.5 29.5 1.75 0 0 1 1 0 -0 -0 1 0 6 +2 11.041095890399999 8.5 -2.25 0 0 1 1 0 -0 -0 1 0 9 +1 0 0 5 0 0 1 1 0 -0 -0 1 0 +2 11.041095890399999 8.5 -2.25 0 0 1 1 0 -0 -0 1 0 9 +2 0 0 25 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 3.5 +1 0 3.5 0 0 0 1 1 0 -0 -0 1 0 +2 0 0 25 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 3.5 +2 -49.958904109599999 8.5 -2.25 0 0 1 -1.07187543957e-15 -1 0 1 -1.07187543957e-15 0 6.4000000000000004 +1 0 0 6 0 0 1 1 0 -0 -0 1 0 +1 -49.958904109599999 2.1000000000000001 0 2.22044604925e-16 -1 0 -1 -2.22044604925e-16 0 0 -0 -1 +2 -51.958904109599999 8.5 -2.25 0 0 1 -3.0514748616210506e-06 0.99999999999534428 0 -0.99999999999534428 -3.0514748616210506e-06 0 6.4000000000000004 +1 -51.958923638999998 14.9 0 -0 1 0 1 0 0 0 0 -1 +2 28.235903341899999 -16.5 -2.5 0 0 -1 0 1 0 1 -0 0 8 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +2 50.5 5.5 -2.5 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +1 0 0 -4.5 0 0 1 1 0 -0 -0 1 0 +1 31.875016778500001 -8.5 0 -0 -1 -0 -1 0 0 0 0 -1 +2 2.4817933703700001 -16.5 -2.5 0 0 1 2.7755575615600002e-16 1 -0 -1 2.7755575615600002e-16 0 8 +2 -22.5 -12.5 -2.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -47.7802294293 -13.5 -2.5 0 0 -1 0 1 0 1 -0 0 8 +1 -38.320556248099997 -5.5 0 -0 -1 -0 -1 0 0 0 0 -1 +2 -47.7802294293 30.5 -2.5 0 0 1 9.2981178312399991e-16 -1 0 1 9.2981178312399991e-16 -0 8 +1 -38.320556248099997 22.5 0 -0 -1 -0 -1 0 0 0 0 -1 +2 -22.5 29.5 -2.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 2.4817933703700001 33.5 -2.5 0 0 1 -0.98742266286065905 -0.15810276679794541 0 0.15810276679794541 -0.98742266286065905 0 8 +1 38.5463394728 25.5 0 -0 -1 -0 -1 0 0 0 0 -1 +2 36.511075809799998 33.5 -2.5 0 0 1 -2.9976021664900001e-15 -1 0 1 -2.9976021664900001e-15 0 8 +2 50.5 5.5 -2.5 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +3 50.5 5.5 3.3999999999999999 0 -4.4408920984999998e-15 -1 0.87758256189037243 0.4794255386042035 -2.1290770862065139e-15 0.4794255386042035 -0.87758256189037243 3.8972494648803417e-15 0 +0.78539816339699997 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +3 4.1448326252699997e-15 -5.9458610874400002e-15 -6.2000000000000002 -7.4014868308300001e-16 7.7098821154500002e-16 1 -0.4794255386042035 0.87758256189037243 -1.0314519909091968e-15 -0.87758256189037243 -0.4794255386042035 -2.7991013890231131e-16 0 +0.78539816339699997 +3 -8.1909787594599993e-15 8.5363814782300003e-15 -6.2000000000000002 1.3569392523199999e-15 -1.2335811384699999e-15 1 -0.52029602321325741 -0.85398597659942255 -3.4745089652686364e-16 0.85398597659942255 -0.52029602321325741 -1.8006344532354091e-15 0 +0.78539816339699997 +3 50.5 5.5 3.3999999999999999 0 -6.6613381477499997e-15 -1 -0.85398597659942255 0.52029602321325741 -3.4658677475530908e-15 0.52029602321325741 0.85398597659942255 -5.6886893635652717e-15 0 +0.78539816339699997 +1 0 0 -5 0 0 1 1 0 -0 -0 1 0 +1 0 8 13 0 0 1 1 0 -0 -0 1 0 +3 -22.5 29.5 1.3999999999999999 0 0 -1 1 0 0 0 -1 0 0 +0.78539816339699997 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 +3 3.5527136788e-15 -4.0430621813399996e-15 -4.2000000000000002 -7.4014868308300001e-16 7.7098821154500002e-16 1 -0.4794255386042035 0.87758256189037243 -1.0314519909091968e-15 -0.87758256189037243 -0.4794255386042035 -2.7991013890231131e-16 0 +0.78539816339699997 +3 1.7763568394e-15 -8.881784197e-16 -4.2000000000000002 -3.7007434154199999e-16 3.7007434154199999e-16 1 -0.52029602321325741 -0.85398597659942255 1.2349008977856575e-16 0.85398597659942255 -0.52029602321325741 5.0858650617370047e-16 0 +0.78539816339699997 +3 -22.5 29.5 1.3999999999999999 -8.8817841969999996e-15 0 -1 -0.50000000000018996 0.86602540378432902 4.4408920985016872e-15 0.86602540378432902 0.50000000000018996 -7.6918507455321975e-15 0 +0.78539816339699997 +1 0 0 -5 0 0 1 1 0 -0 -0 1 0 +1 0 6 12 0 0 1 1 0 -0 -0 1 0 +3 -22.5 -12.5 1.3999999999999999 8.8817841969999996e-15 1.7763568393999999e-14 -1 1 -8.3266725922100102e-16 8.8817841969999854e-15 -8.3266725922084325e-16 -1 -1.7763568394000006e-14 0 +0.78539816339699997 +3 -22.5 -12.5 1.3999999999999999 -8.8817841969999996e-15 -4.4408920984999998e-15 -1 -0.50000000000018996 0.86602540378432902 5.9496672573558842e-16 0.86602540378432902 0.50000000000018996 -9.9122967947830407e-15 0 +0.78539816339699997 +1 0 0 -5 0 0 1 1 0 -0 -0 1 0 +2 -22.5 -12.5 -2.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +3 -22.5 -12.5 -22.100000000000001 0 2.6645352590999999e-14 1 1 0 -0 -0 1 -2.6645352590999999e-14 0 +0.78539816339699997 +3 -22.5 -12.5 -22.100000000000001 1.7763568393999999e-14 3.5527136787999998e-14 1 -0.50000000000018996 0.86602540378432902 -2.1885618785125417e-14 -0.86602540378432902 -0.50000000000018996 3.3147269885071147e-14 0 +0.78539816339699997 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 17 +1 0 0 12 0 0 1 1 0 -0 -0 1 0 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 17 +3 1.22568621919e-13 1.3733458814599999e-13 4.2000000000000002 -1.55431223448e-14 -1.71390679427e-14 1 -0.4794255386042035 0.87758256189037243 7.5891773518210512e-15 -0.87758256189037243 -0.4794255386042035 -2.1857280006728061e-14 0 +0.78539816339699997 +3 -1.5720758028699999e-13 1.0524914273400001e-13 4.2000000000000002 1.9984014443300001e-14 -1.3322676295499999e-14 1 -0.52029602321325741 -0.85398597659942255 -9.797754844452552e-16 0.85398597659942255 -0.52029602321325741 -2.3997803585844695e-14 0 +0.78539816339699997 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 8 +2 -22.5 29.5 -2.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +3 -22.5 29.5 -22.100000000000001 1.7763568393999999e-14 3.5527136787999998e-14 1 -0.50000000000018996 0.86602540378432902 -2.1885618785125417e-14 -0.86602540378432902 -0.50000000000018996 3.3147269885071147e-14 0 +0.78539816339699997 +3 -22.5 29.5 -22.100000000000001 0 1.7763568393999999e-14 1 1 2.05359049863e-16 -3.647909527568257e-30 -2.05359049863e-16 1 -1.7763568393999999e-14 0 +0.78539816339699997 +3 50.5 5.5 -28.100000000000001 7.1054273575999997e-14 -8.8817841969999996e-15 1 -0.50000000000018996 0.86602540378432902 4.3218987533545698e-14 -0.86602540378432902 -0.50000000000018996 5.7093913865755894e-14 0 +0.78539816339699997 +3 50.5 5.5 -28.100000000000001 3.5527136787999998e-14 -7.9936057773e-14 1 1 3.8119244823699724e-16 -3.5527136787999967e-14 -3.8119244823415734e-16 1 7.9936057773000012e-14 0 +0.78539816339699997 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 23 +1 0 0 12 0 0 1 1 0 -0 -0 1 0 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 23 +3 -2.63788990651e-13 1.07969189145e-14 3.2000000000000002 2.6645352590999999e-14 -1.04083408559e-15 1 -0.4794255386042035 0.87758256189037243 1.3687880360573978e-14 -0.87758256189037243 -0.4794255386042035 2.2884494347200452e-14 0 +0.78539816339699997 +3 -3.0686564400600002e-13 -8.7041485130600004e-14 3.2000000000000002 3.1086244689499997e-14 8.8817841969999996e-15 1 -0.52029602321325741 -0.85398597659942255 2.3758968640001452e-14 0.85398597659942255 -0.52029602321325741 -2.1926060033233814e-14 0 +0.78539816339699997 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 10 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 10 +1 60.603823630699999 1.7 -4.5 -1.5742343614589928e-16 0.70710678118654757 -0.70710678118654757 -1 -2.2263035843295277e-16 -4.7134439086955444e-29 -1.5742343614596591e-16 0.70710678118654757 0.70710678118654757 +3 -51.958904109599999 8.5 2.2999999999999998 -0 8.8817841969999996e-15 -1 0.99999999999883615 1.5257374305097498e-06 1.3551270599072881e-20 1.5257374305097498e-06 -0.99999999999883615 -8.8817841969896624e-15 0 +0.78539816339699997 +1 -83.017303938500007 15.300000000000001 -4.5 0 -0.70710678118654757 -0.70710678118654757 1 0 0 0 -0.70710678118654757 0.70710678118654757 +3 -49.958904109599999 8.5 2.2999999999999998 1.7763568393999999e-14 -4.4408920984999998e-15 -1 -0.9999999999988346 -1.5266930903797474e-06 -1.7763561614100015e-14 -1.5266930903797474e-06 0.9999999999988346 -4.4409192180119519e-15 0 +0.78539816339699997 +3 11.041095890399999 8.5 4.9000000000000004 4.4408920984999998e-15 -0 -1 -0.50000000000018996 0.86602540378432902 -2.2204460492508436e-15 0.86602540378432902 0.50000000000018996 3.8459253727660988e-15 0 +0.78539816339699997 +3 11.041095890399999 8.5 4.9000000000000004 -0 -1.7763568393999999e-14 -1 1 3.7794838600300001e-16 -6.7137120041662023e-30 3.7794838600300001e-16 -1 1.7763568393999999e-14 0 +0.78539816339699997 +2 -56.388543820000002 -2.5 -2.25 0 0 1 -0.85183541999972945 -0.5238095238098337 0 0.5238095238098337 -0.85183541999972945 0 3 +2 -38.5 8.5 -2.25 0 0 1 -0.81223286206743084 0.58333333333330939 0 -0.58333333333330939 -0.81223286206743084 0 24 +2 -56.388543820000002 19.5 -2.25 0 0 -1 -0.85183541999972945 0.5238095238098337 0 0.5238095238098337 0.85183541999972945 0 3 +1 -101.601209582 -31.699999999999999 0 0 -0.70710678118654757 -0.70710678118654757 1 0 0 0 -0.70710678118654757 0.70710678118654757 +9 0 0 0 0 5 1 15 2 5 2 71 -31.699999999999999 0 71 -32.5 0.80000000000000004 +73.999932498999996 -31.699999999999999 0 74.082122430499993 -32.5 0.80000000000000004 +76.999844077000006 -31.3147433629 0 77.164264776300001 -32.104188388499999 0.80000000000000004 +79.934138087199997 -30.543852039600001 0 80.178925382000003 -31.312172124 0.80000000000000004 +85.538504313100006 -28.266498915 0 85.936790907800003 -28.972448936599999 0.80000000000000004 +90.385589047600007 -24.647042713800001 0 90.916691440899996 -25.253821061099998 0.80000000000000004 +92.562629609400005 -22.5336263714 0 93.153392034399999 -23.082489565700001 0.80000000000000004 +96.364010810600007 -17.7458581679 0 97.058936088099998 -18.163522475699999 0.80000000000000004 +98.8181968098 -12.1443684266 0 99.580337487400001 -12.4086062898 0.80000000000000004 +99.678127191599998 -9.1664285505599992 0 100.46382781 -9.3491130076500006 0.80000000000000004 +100.153771088 -6.00175461166 0 100.952504486 -6.0976976074499998 0.80000000000000004 +100.19845569100001 -2.8289666115399998 0 100.99841338100001 -2.8379795540699999 0.80000000000000004 +100.19948233300001 -2.71933652926 0 100.99946796099999 -2.7253074917300002 0.80000000000000004 +100.199990855 -2.60969449139 0 100.999990064 -2.61263924451 0.80000000000000004 +100.199991877 -2.50002261243 0 100.999991178 -2.5000008830899998 0.80000000000000004 + +243.59478752199999 6 +265.100062267 3 +286.60708227999999 3 +308.56748184100002 3 +309.35350848100001 6 + +0 2 +1.1313708498999999 2 + +1 100.2 -51.533201642400002 0 0.70710678118654757 -2.4048235389284615e-15 -0.70710678118654757 3.4009340638683458e-15 1 1.6536496725695456e-27 0.70710678118654757 -2.4048235389308001e-15 0.70710678118654757 +9 0 0 0 0 5 1 12 2 4 2 100.2 7.5 0 101 7.5 0.80000000000000004 +100.2 9.6809699653300001 0 101 9.7595016852600001 0.80000000000000004 +99.932382303899999 11.8619313793 0 100.72274600999999 12.019119654800001 0.80000000000000004 +99.396510492800004 13.9991336012 0 100.167540292 14.2333760225 0.80000000000000004 +97.692003087800003 18.4059546282 0 98.401615176799993 18.798978831199999 0.80000000000000004 +94.895791927999994 22.228794922799999 0 95.504677215300006 22.759522033700001 0.80000000000000004 +93.118707907000001 24.048197016300001 0 93.663560797499997 24.644515729199998 0.80000000000000004 +91.017193152399997 25.661658038100001 0 91.486228092999994 26.316161688499999 0.80000000000000004 +88.725037743800002 26.937935644900001 0 89.111517903700005 27.638405945900001 0.80000000000000004 +88.624460949500005 26.993092693200001 0 89.007271296200003 27.695574940699998 0.80000000000000004 +88.523529253199996 27.047590689700002 0 88.902676135500002 27.752050292 0.80000000000000004 +88.422255048899999 27.101440138200001 0 88.7978013237 27.8078143111 0.80000000000000004 + +62.094959105999997 6 +77.796852188800003 3 +95.859399766099997 3 +96.6845153915 6 + +0 2 +1.1313708498999999 2 + +1 135.551787093 2.0422271188800001 0 0.3319665256210112 0.62433823034302105 -0.70710678118602388 -0.88294759285836333 0.46947156278695085 2.140232435721145e-13 0.33196652562078671 0.62433823034195413 0.70710678118707126 +9 0 0 0 0 5 1 9 2 3 2 62.796057198 40.727134911599997 0 63.171634448200003 41.433492985900003 0.80000000000000004 +55.583984463199997 44.5618620065 0 55.8918290863 45.304234157400003 0.80000000000000004 +47.911829203899998 47.532368133200002 0 48.147679109199998 48.302606713000003 0.800000000002 +39.920285127100001 49.564612909099999 0 40.081031967500003 50.353951053199999 0.80000000000000004 +31.602084407900001 50.640506765600001 0 31.684773302899998 51.439948055099997 0.80000000000000004 +23.274783774399999 50.698883892399998 0 23.279270083299998 51.498873410500003 0.80000000000000004 +23.115519849199998 50.699624028199999 0 23.118516362800001 51.499620425700002 0.80000000000000004 +22.956266601100001 50.699990847400002 0 22.957786219399999 51.499990606600001 0.80000000000000004 +22.797018728600001 50.699991800799999 0 22.797080812699999 51.499991602800002 0.80000000000000004 + +120.58639119999999 6 +178.61598027900001 3 +179.74754108900001 6 + +0 2 +1.1313708498999999 2 + +1 135.551787093 50.700000000000003 0 0 0.70710678118654757 -0.70710678118654757 -1 0 0 0 0.70710678118654757 0.70710678118654757 +9 0 0 0 0 5 1 15 2 5 2 -12 50.700000000000003 0 -12 51.5 0.80000000000000004 +-17.395146434200001 50.700000000000003 0 -17.476276455800001 51.5 0.80000000000000004 +-22.790272716 50.016080707500002 0 -22.952572320800002 50.805796207900002 0.80000000000100002 +-28.0703760954 48.647586647799997 0 -28.312053104499999 49.416718485200001 0.80000000000000004 +-38.167235070799997 44.603325626500002 0 -38.560700314800002 45.311663715900004 0.80000000000000004 +-46.935695196499999 38.167852959100003 0 -47.4610327408 38.7794106335 0.80000000000000004 +-50.887142559099999 34.407592682999997 0 -51.471914774799998 34.962593621099998 0.80000000000000004 +-58.071200711000003 25.572774405099999 0 -58.764022512399997 25.9948903837 0.80000000000000004 +-62.709492242700001 15.153781134600001 0 -63.472039624099999 15.419258406499999 0.80000000000000004 +-64.358373071900004 9.4059114346899992 0 -65.145716843200006 9.5849943279899996 0.80000000000000004 +-65.191238028499995 3.4851502435200001 0 -65.991106268799996 3.5751530049900002 0.80000000000000004 +-65.199969163700004 -2.4372544982000002 0 -65.999968699999997 -2.4363109550600002 0.80000000000000004 +-65.199989732399999 -2.4581681825900001 0 -65.999989579200005 -2.4575390067599998 0.80000000000000004 +-65.200000056600004 -2.4790835333599999 0 -66.000000061999998 -2.47876850875 0.80000000000000004 +-65.2000001567 -2.5000012219399999 0 -66.0000001704 -2.5000000367799999 0.80000000000000004 + +206.34732287700001 6 +244.784677386 3 +283.22234807799998 3 +325.26716929499997 3 +325.41616118000002 6 + +0 2 +1.1313708498999999 2 + +1 -65.200000000000003 69.643739457099997 0 -0.70710678118654757 -0 -0.70710678118654757 0 -1 0 -0.70710678118654757 0 0.70710678118654757 +9 0 0 0 0 5 1 15 2 5 2 -65.200000000000003 -4.5 0 -66 -4.5 0.80000000000000004 +-65.200000000000003 -7.3961324085399998 0 -66 -7.4810604412200004 0.80000000000000004 +-64.815683064799998 -10.292565314899999 0 -65.604413127200004 -10.462771049000001 0.79999999999899996 +-64.044701936199999 -13.1202251169 0 -64.810688052800003 -13.373814243 0.80000000000000004 +-61.767762986000001 -18.502156188099999 0 -62.466683949100002 -18.914202451400001 0.80000000000000004 +-58.162061913499997 -23.101311403499999 0 -58.755023319300001 -23.648471878900001 0.80000000000000004 +-56.061385811000001 -25.147230317799998 0 -56.592692647299998 -25.754441267499999 0.80000000000000004 +-51.7602007208 -28.339419764199999 0 -52.165120637400001 -29.040458938499999 0.80000000000000004 +-46.831052239900004 -30.3981516644 0 -47.090835347599999 -31.159826493400001 0.80000000000000004 +-44.496038364599997 -31.080147596500002 0 -44.686998731400003 -31.861929247500001 0.80000000000000004 +-41.768787502400002 -31.555521804400001 0 -41.8794257355 -32.351280338999999 0.80000000000000004 +-39.019917637299997 -31.684083704100001 0 -39.049840129400003 -32.483616768300003 0.80000000000000004 +-38.678137464199999 -31.6947756669 0 -38.698328009699999 -32.494625999199997 0.80000000000000004 +-38.338923938100002 -31.700003949900001 0 -38.348825505599997 -32.500004460200003 0.80000000000000004 +-38.000003569900002 -31.7000003729 0 -37.999999836699999 -32.500000422600003 0.80000000000000004 + +103.76581805399999 6 +124.547002021 3 +145.33505857899999 3 +162.64698145599999 3 +165.07828899200001 6 + +0 2 +1.1313708498999999 2 + +1 -38 -32.5 1.7347234759799999e-18 2.4651903288199999e-32 -1 0 1 2.4651903288199999e-32 0 -0 0 1 +1 0 0 1 0 0 1 1 0 -0 -0 1 0 +1 101 -2.5 1.38777878078e-17 1 -3.8229538743799999e-15 -2.4664133657399999e-14 3.8229538743799999e-15 1 -5.9435746756900001e-29 2.4664133657399999e-14 -3.4854098566883487e-29 1 +1 88.797802672700001 27.807817643500002 -1.1587952819499999e-15 0.46947156278672519 0.88294759285848323 1.2464142782092703e-11 -0.88294759285848323 0.46947156278672519 -5.0297266445912371e-23 -5.8515605907503522e-12 -1.1005184866469576e-11 1 +1 22.797080048600002 51.5 -2.0816681711700001e-17 0 1 -0 -1 0 0 0 0 1 +1 -66 -2.5 0 -1 -7.8886090522099998e-31 0 7.8886090522099998e-31 -1 0 0 0 1 +3 -9.9475983006400003e-14 -2.00728322852e-13 -11.199999999999999 8.8817841969999996e-15 1.7763568393999999e-14 1 1 -1.55820775386001e-16 -8.8817841969999965e-15 1.5582077538584323e-16 1 -1.7763568393999999e-14 0 +0.78539816339699997 +3 1.4921397451e-13 9.7168427782799995e-14 -11.199999999999999 -1.3322676295499999e-14 -8.8817841969999996e-15 1 -0.50000000000018996 0.86602540378432902 1.0305125977796671e-15 -0.86602540378432902 -0.50000000000018996 -1.5978668216799984e-14 0 +0.78539816339699997 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +1 0 8.8000000000000007 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 11.4 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 11.4 +3 -9.9475983006400003e-14 -2.00728322852e-13 14.199999999999999 8.8817841969999996e-15 1.7763568393999999e-14 -1 1 -1.55820775386001e-16 8.8817841969999965e-15 -1.5582077538584323e-16 -1 -1.7763568393999999e-14 0 +0.78539816339699997 +3 1.4921397451e-13 9.7168427782799995e-14 14.199999999999999 -1.3322676295499999e-14 -8.8817841969999996e-15 -1 -0.50000000000018996 0.86602540378432902 -1.0305125977796671e-15 0.86602540378432902 0.50000000000018996 -1.5978668216799984e-14 0 +0.78539816339699997 +1 0 0 3 0 0 1 1 0 -0 -0 1 0 +1 0 0 4.5999999999999996 0 0 1 1 0 -0 -0 1 0 +3 -3.0686564400600002e-13 -8.7041485130600004e-14 30.199999999999999 3.1086244689499997e-14 8.8817841969999996e-15 -1 -0.52029602321325741 -0.85398597659942255 -2.3758968640001452e-14 -0.85398597659942255 0.52029602321325741 -2.1926060033233814e-14 0 +0.78539816339699997 +1 0 10 20.399999999999999 0 0 1 1 0 -0 -0 1 0 +3 -2.63788990651e-13 1.07969189145e-14 30.199999999999999 2.6645352590999999e-14 -1.04083408559e-15 -1 -0.4794255386042035 0.87758256189037243 -1.3687880360573978e-14 0.87758256189037243 0.4794255386042035 2.2884494347200452e-14 0 +0.78539816339699997 +3 -8.881784197e-16 -6.5019172940700005e-16 -5.2000000000000002 -0 -0 1 -0.50000000000018996 0.86602540378432902 0 -0.86602540378432902 -0.50000000000018996 -0 0 +0.78539816339699997 +3 4.4408920985e-16 1.7763568393999999e-14 -5.2000000000000002 -0 -2.2204460492499999e-15 1 1 5.4157220713400002e-17 1.2025318677142929e-31 -5.4157220713400002e-17 1 2.2204460492499999e-15 0 +0.78539816339699997 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 8 +5 0 3.6082248300300001e-16 2.7999999999999998 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 9.0999999999999996 0.29999999999999999 +5 8.881784197e-16 0 2.7999999999999998 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9.0999999999999996 0.29999999999999999 +3 -8.881784197e-16 -6.5019172940700005e-16 8.1999999999999993 -0 -0 -1 -0.50000000000018996 0.86602540378432902 0 0.86602540378432902 0.50000000000018996 -0 0 +0.78539816339699997 +3 4.4408920985e-16 1.7763568393999999e-14 8.1999999999999993 -0 -2.2204460492499999e-15 -1 1 5.4157220713400002e-17 -1.2025318677142929e-31 5.4157220713400002e-17 -1 2.2204460492499999e-15 0 +0.78539816339699997 +5 6.9388939039100005e-17 1.3322676295499999e-15 22.875500200200001 0 0 -1 0.90369349581649183 -0.42817994537223303 0 -0.42817994537223303 -0.90369349581649183 -0 7.5 0.5 +5 -1.2212453270899999e-15 0 22.875500200200001 -0 0 -1 -0.4794255386042035 0.87758256189037243 0 0.87758256189037243 0.4794255386042035 0 7.5 0.5 +3 2.1760371282699999e-14 2.2692958623300001e-13 -9.1999999999999993 -2.2204460492499999e-15 -2.4424906541799999e-14 1 1 2.8346119777700043e-16 2.220446049250007e-15 -2.8346119777705466e-16 1 2.4424906541799999e-14 0 +0.78539816339699997 +3 4.3520742565300002e-14 8.1694006277899997e-14 -9.1999999999999993 -4.4408920984999998e-15 -8.8817841969999996e-15 1 -0.50000000000018996 0.86602540378432902 5.4714046962813543e-15 -0.86602540378432902 -0.50000000000018996 -8.2868174712677867e-15 0 +0.78539816339699997 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +1 0 6.5999999999999996 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 9.4000000000000004 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 9.4000000000000004 +3 2.1760371282699999e-14 2.2692958623300001e-13 12.199999999999999 -2.2204460492499999e-15 -2.4424906541799999e-14 -1 1 2.8346119777700043e-16 -2.220446049250007e-15 2.8346119777705466e-16 -1 2.4424906541799999e-14 0 +0.78539816339699997 +3 4.3520742565300002e-14 8.1694006277899997e-14 12.199999999999999 -4.4408920984999998e-15 -8.8817841969999996e-15 -1 -0.50000000000018996 0.86602540378432902 -5.4714046962813543e-15 0.86602540378432902 0.50000000000018996 -8.2868174712677867e-15 0 +0.78539816339699997 +1 0 0 3 0 0 1 1 0 -0 -0 1 0 +1 0 0 4.5999999999999996 0 0 -1 1 0 0 0 -1 0 +3 -1.5720758028699999e-13 1.0524914273400001e-13 27.199999999999999 1.9984014443300001e-14 -1.3322676295499999e-14 -1 -0.52029602321325741 -0.85398597659942255 9.797754844452552e-16 -0.85398597659942255 0.52029602321325741 -2.3997803585844695e-14 0 +0.78539816339699997 +1 0 8 19.399999999999999 0 0 1 1 0 -0 -0 1 0 +3 1.22568621919e-13 1.3733458814599999e-13 27.199999999999999 -1.55431223448e-14 -1.71390679427e-14 -1 -0.4794255386042035 0.87758256189037243 -7.5891773518210512e-15 0.87758256189037243 0.4794255386042035 -2.1857280006728061e-14 0 +0.78539816339699997 +3 8.1268325402600006e-14 -2.6559919212999999e-16 -3.2000000000000002 -1.3322676295499999e-14 5.9164567891600002e-30 1 -0.50000000000018996 0.86602540378432902 -6.6613381477525351e-15 -0.86602540378432902 -0.50000000000018996 -1.1537776118298293e-14 0 +0.78539816339699997 +3 6.4392935428299998e-15 3.99680288865e-14 -3.2000000000000002 -1.1102230246299999e-15 -6.6613381477499997e-15 1 1 2.1488187573399963e-16 1.1102230246300013e-15 -2.1488187573400703e-16 1 6.6613381477499997e-15 0 +0.78539816339699997 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 6 +5 -8.881784197e-16 -9.7144514654699994e-16 2.7999999999999998 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6.9000000000000004 0.29999999999999999 +5 -1.7763568394e-15 -4.4408920985e-16 2.7999999999999998 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 6.9000000000000004 0.29999999999999999 +3 6.4392935428299998e-15 3.99680288865e-14 6.2000000000000002 -1.1102230246299999e-15 -6.6613381477499997e-15 -1 1 2.1488187573399963e-16 -1.1102230246300013e-15 2.1488187573400703e-16 -1 6.6613381477499997e-15 0 +0.78539816339699997 +3 8.1268325402600006e-14 -2.6559919212999999e-16 6.2000000000000002 -1.3322676295499999e-14 5.9164567891600002e-30 -1 -0.50000000000018996 0.86602540378432902 6.6613381477525351e-15 0.86602540378432902 0.50000000000018996 -1.1537776118298293e-14 0 +0.78539816339699997 +5 -2.7755575615600002e-16 0 21.9255437353 0 0 -1 0.90369349581649183 -0.42817994537223303 0 -0.42817994537223303 -0.90369349581649183 -0 5.5999999999999996 0.40000000000000002 +5 -3.9968028886500003e-15 0 21.9255437353 -0 0 -1 -0.4794255386042035 0.87758256189037243 0 0.87758256189037243 0.4794255386042035 0 5.5999999999999996 0.40000000000000002 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +3 -8.1909787594599993e-15 8.5363814782300003e-15 64.200000000000003 1.3569392523199999e-15 -1.2335811384699999e-15 -1 -0.52029602321325741 -0.85398597659942255 3.4745089652686364e-16 -0.85398597659942255 0.52029602321325741 -1.8006344532354091e-15 0 +0.78539816339699997 +1 0 8 58 0 0 1 1 0 -0 -0 1 0 +3 4.1448326252699997e-15 -5.9458610874400002e-15 64.200000000000003 -7.4014868308300001e-16 7.7098821154500002e-16 -1 -0.4794255386042035 0.87758256189037243 1.0314519909091968e-15 0.87758256189037243 0.4794255386042035 -2.7991013890231131e-16 0 +0.78539816339699997 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 10 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 10 +2 0 0 24.900000000399999 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 7.7000000000000002 +2 0 0 24.900000000399999 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 7.7000000000000002 +5 -8.881784197e-16 1.09634523682e-15 23.5 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 0.29999999999999999 +5 -8.881784197e-16 -1.56819002228e-15 26.300000000000001 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 0.29999999999999999 +5 -8.881784197e-16 -4.4408920985e-16 23.5 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8 0.29999999999999999 +5 -2.6645352590999998e-15 1.3322676295499999e-15 26.300000000000001 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8 0.29999999999999999 +5 7.7715611723799997e-16 8.881784197e-16 26.9244997998 -0 0 -1 -0.4794255386042035 0.87758256189037243 0 0.87758256189037243 0.4794255386042035 0 7.5 0.5 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8 +1 0 -8 -7 0 0 1 1 0 -0 -0 1 0 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8 +5 -4.4408920985e-16 2.2204460492499999e-15 2.2679491924300001 0 -0 1 0.12796667928004415 0.99177846770034206 0 -0.99177846770034206 0.12796667928004415 0 9 1 +5 6.9388939039100002e-16 0 26.9244997998 0 0 -1 0.90369349581649183 -0.42817994537223303 0 -0.42817994537223303 -0.90369349581649183 -0 7.5 0.5 +5 0 8.881784197e-16 2.2679491924300001 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9 1 +2 0 0 23.900000000399999 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 5.7000000000000002 +2 0 0 23.900000000399999 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 5.7000000000000002 +5 8.881784197e-16 1.4294121442000001e-15 25.300000000000001 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 0.29999999999999999 +5 -4.4408920985e-16 -3.1918911957999998e-16 22.5 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 0.29999999999999999 +5 0 8.881784197e-16 25.300000000000001 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 6 0.29999999999999999 +5 0 1.7763568394e-15 22.5 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 6 0.29999999999999999 +5 1.1102230246299999e-16 -8.881784197e-16 25.874456264700001 -0 0 -1 -0.4794255386042035 0.87758256189037243 0 0.87758256189037243 0.4794255386042035 0 5.5999999999999996 0.40000000000000002 +5 4.7184478546599997e-16 1.3322676295499999e-15 25.874456264700001 0 0 -1 0.90369349581649183 -0.42817994537223303 0 -0.42817994537223303 -0.90369349581649183 -0 5.5999999999999996 0.40000000000000002 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +3 3.5527136788e-15 -4.0430621813399996e-15 60.200000000000003 -7.4014868308300001e-16 7.7098821154500002e-16 -1 -0.4794255386042035 0.87758256189037243 1.0314519909091968e-15 0.87758256189037243 0.4794255386042035 -2.7991013890231131e-16 0 +0.78539816339699997 +1 0 6 56 0 0 1 1 0 -0 -0 1 0 +3 1.7763568394e-15 -8.881784197e-16 60.200000000000003 -3.7007434154199999e-16 3.7007434154199999e-16 -1 -0.52029602321325741 -0.85398597659942255 -1.2349008977856575e-16 -0.85398597659942255 0.52029602321325741 5.0858650617370047e-16 0 +0.78539816339699997 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 6 +1 0 -6 -4.5 0 0 1 1 0 -0 -0 1 0 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 6 +5 0 8.881784197e-16 2.2679491924300001 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 7 1 +5 0 -8.881784197e-16 2.2679491924300001 0 -0 1 0.12796667928004415 0.99177846770034206 0 -0.99177846770034206 0.12796667928004415 0 7 1 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +2 0 0 1.4100000000099999 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 21.399999999999999 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 21.399999999999999 +2 0 0 1.4100000000099999 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +1 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 +2 0 0 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 11.5 +2 0 0 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 11.5 +1 0 21.399999999999999 0 0 0 1 1 0 -0 -0 1 0 +5 -4.4408920984999998e-15 2.6645352590999998e-15 0.59999999999999998 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9.4000000000000004 0.59999999999999998 +5 -4.4408920984999998e-15 4.8572257327400001e-16 0.59999999999999998 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 9.4000000000000004 0.59999999999999998 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8.8000000000000007 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8.8000000000000007 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +2 0 0 1.4100000000099999 0 0 1 1 0 -0 -0 1 0 15.4 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 15.4 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 15.4 +2 0 0 1.4100000000099999 0 0 1 1 0 -0 -0 1 0 15.4 +1 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 +2 0 0 3.1000000000000001 0 0 -1 1 0 0 0 -1 0 9.5 +2 0 0 3.1000000000000001 0 0 -1 1 0 0 0 -1 0 9.5 +1 0 15.4 0 0 0 1 1 0 -0 -0 1 0 +5 -8.881784197e-16 8.881784197e-16 0.59999999999999998 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 7.2000000000000002 0.59999999999999998 +5 -5.3290705181999996e-15 -8.3266726846900003e-16 0.59999999999999998 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 7.2000000000000002 0.59999999999999998 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6.5999999999999996 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6.5999999999999996 +2 -12.1983481148 -55 26 0 -0 1 0 1 0 -1 0 0 10 +1 0 0 7 0 0 1 1 0 -0 -0 1 0 +2 -12.1983481148 -55 26 0 -0 1 0 1 0 -1 0 0 10 +1 0 0 7 0 0 1 1 0 -0 -0 1 0 +1 53.5 -45 52 -1.97215226305e-31 -1 -0 -1 1.97215226305e-31 0 0 0 -1 +1 -24.340483738500001 -53 0 0.70710678118654757 -0.70710678118654757 0 0.70710678118654757 0.70710678118654757 0 -0 0 1 +2 -14.8578643763 55 26 0 0 1 -0.70710678118654757 -0.70710678118654757 0 0.70710678118654757 -0.70710678118654757 0 10 +2 -14.8578643763 55 26 0 0 1 -0.70710678118654757 -0.70710678118654757 0 0.70710678118654757 -0.70710678118654757 0 10 +1 -29.5 45 52 -0 1 0 1 0 0 0 0 -1 +1 -19 45 0 0.70710678118654757 0.70710678118654757 -0 -0.70710678118654757 0.70710678118654757 0 0 0 1 +1 -78.862687876999999 16.500914749 0 0.86602540378432902 -0.50000000000018996 0 0.50000000000018996 0.86602540378432902 0 -0 0 1 +6 0 0 1 +7 0 0 5 6 2 -78.862687876999999 16.500914749 0 -81.842187261500001 11.3402706638 0 -84.147352448999996 5.7902787984600002 0 -85.7105434594 -0.0314708573361 0 -86.494623900099995 -5.98978312823 0 -86.499977001199994 -11.948795860200001 0 + 0 6 29.965332826400001 6 +6 0 0 1 +7 0 0 5 6 2 -78.862687876999999 16.500914749 0 -81.842187261500001 11.3402706638 0 -84.147352448999996 5.7902787984600002 0 -85.7105434594 -0.0314708573361 0 -86.494623900099995 -5.98978312823 0 -86.499977001199994 -11.948795860200001 0 + 0 6 29.965332826400001 6 +1 -86.5 -53 0 1 0 0 -0 1 0 0 -0 1 +1 -86.5 53 0 0 -1 0 1 0 0 -0 0 1 +6 0 0 1 +7 0 0 5 6 2 23 43.222181183300002 0 19.507530172599999 43.930901568800003 0 15.9795434532 44.464822943599998 0 12.427648101899999 44.8215902775 0 8.8637394700400005 45 0 5.2999999999999998 45 0 + 0 6 17.8336924567 6 +6 0 0 1 +7 0 0 5 6 2 23 43.222181183300002 0 19.507530172599999 43.930901568800003 0 15.9795434532 44.464822943599998 0 12.427648101899999 44.8215902775 0 8.8637394700400005 45 0 5.2999999999999998 45 0 + 0 6 17.8336924567 6 +2 -68.458904109599999 -1 20.5 0 0 1 1 0 -0 -0 1 0 6 +2 -68.458904109599999 -1 20.5 0 0 1 1 0 -0 -0 1 0 6 +2 -68.458904109599999 -1 20.5 0 0 1 1 0 -0 -0 1 0 6 +2 -68.458904109599999 -1 20.5 0 0 1 1 0 -0 -0 1 0 6 +2 -6.4589041095899997 -1 25 0 0 1 1 0 -0 -0 1 0 8 +2 -6.4589041095899997 -1 25 0 0 1 1 0 -0 -0 1 0 8 +2 -6.4589041095899997 -1 25 0 0 1 1 0 -0 -0 1 0 8 +2 -6.4589041095899997 -1 25 0 0 1 1 0 -0 -0 1 0 8 +1 47.082969087899997 34.5823357644 52 0.46947156278594571 0.8829475928588979 -6.1645133442292872e-14 0.8829475928588979 -0.46947156278594571 1.5755129999074048e-26 -2.8940637135287487e-14 -5.4429422184345419e-14 -1 +2 5.2998818036899999 -44.0004740595 50 0 0 1 0.46947039019481945 0.88294821633566034 -0 -0.88294821633566034 0.46947039019481945 0 89.000474059599995 +2 5.2998818036899999 -44.0004740595 50 0 0 1 0.46947039019481945 0.88294821633566034 -0 -0.88294821633566034 0.46947039019481945 0 89.000474059599995 +2 60.500078944800002 -1.9983999996099999 50 0 0 1 0.99999999998964029 -4.5518777647183625e-06 0 4.5518777647183625e-06 0.99999999998964029 -0 25.999921055400002 +2 60.500078944800002 -1.9983999996099999 50 0 0 1 0.99999999998964029 -4.5518777647183625e-06 0 4.5518777647183625e-06 0.99999999998964029 -0 25.999921055400002 +1 86.5 53 0 -1 0 0 0 -1 0 0 0 1 +2 53.499751589699997 -11.999751589700001 50 0 0 1 -1.83697019872e-16 -1 0 1 -1.83697019872e-16 0 33.000248411299999 +2 53.499751589699997 -11.999751589700001 50 0 0 1 -1.83697019872e-16 -1 0 1 -1.83697019872e-16 0 33.000248411299999 +2 -55.499766644799998 -13.999766644799999 50 0 0 1 -0.99999999997166822 -7.5275290616575032e-06 0 7.5275290616575032e-06 -0.99999999997166822 0 31.000233355999999 +2 -55.499766644799998 -13.999766644799999 50 0 0 1 -0.99999999997166822 -7.5275290616575032e-06 0 7.5275290616575032e-06 -0.99999999997166822 0 31.000233355999999 +1 86.5 -53 0 0 1 -0 -1 0 0 0 0 1 +1 -77.4202418693 -35.9202418693 0 -0.70710678118654757 -0.70710678118654757 0 0.70710678118654757 -0.70710678118654757 0 0 0 1 +2 -40 -22 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 -22 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 -22 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 -22 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 20 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 20 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 20 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 20 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +3 33 -4 8 -0 -0 -1 0.87758256189037243 0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 10.589384154299999 +0.17453292519899999 +3 33 -4 8 -0 -0 -1 0.87758256189037243 0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 10.589384154299999 +0.17453292519899999 +3 33 -4 8 -0 -0 -1 0.87758256189037243 0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 10.589384154299999 +0.17453292519899999 +3 33 -4 8 -0 -0 -1 0.87758256189037243 0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 10.589384154299999 +0.17453292519899999 +2 -40.000000188800001 -22.000011602899999 10 5.76090795865e-17 2.3455816874200001e-17 1 -0.97417192851032441 -0.22580755900207519 6.1417648913248256e-17 0.22580755900207519 -0.97417192851032441 9.8414327213405798e-18 24.000006407600001 +2 -10.050091973400001 -29.999935313400002 10 2.69383714935e-16 -1.7976870128500001e-16 -1 -0.96612865813894044 0.25806087638898412 -3.0665059563555102e-16 0.25806087638898412 0.96612865813894044 -1.041622965868107e-16 6.9999338036700003 +2 -40.000005889900002 20.000007856700002 10 1.2518649094500001e-16 3.3689686731300001e-16 1 0.96612835190482449 0.25806202286595314 -2.078865052534365e-16 -0.25806202286595314 0.96612835190482449 -2.9317973609025001e-16 14.0000039535 +2 -10.050077960799999 27.999952680300002 10 -1.3606594428900001e-16 1.04491966795e-16 -1 2.1308617872394242e-06 -0.99999999999772982 -1.0449225673248402e-16 -0.99999999999772982 -2.1308617872394242e-06 1.3606572163075202e-16 16.9999549184 +1 -0.937212455434 11 10 -0 -1 -0 -1 0 0 0 0 -1 +2 8.1756210378799992 27.9999879308 10 1.61279430607e-16 -9.6888452206000006e-16 -1 0.61295013385195052 -0.79012159406693605 8.6439283161495576e-16 -0.79012159406693605 -0.61295013385195052 4.6644753668234948e-16 16.999987833900001 +2 33.000154312699998 -3.9999358403 10 5.9907681504699996e-17 1.03890016243e-17 1 0.87102823584473155 -0.49123295121684862 -4.7077862206485369e-17 0.49123295121684862 0.87102823584473155 -3.8477740943114876e-17 23.4999954223 +2 32.999998499500002 -4.0000094690600001 10 -1.07608474141e-16 1.6621763078200001e-16 1 -0.76672449638603024 -0.64197628199302537 2.4201723468490427e-17 0.64197628199302537 -0.76672449638603024 1.9652521739178986e-16 23.499997080899998 +2 1.9476373989 -29.999971756400001 10 4.70738733509e-16 1.0081044974899999e-15 -1 -7.358452492328008e-07 0.99999999999972933 1.0081041510988663e-15 0.99999999999972933 7.358452492328008e-07 4.7073947531777785e-16 16.999971543899999 +1 -4.0512084233500003 -13 10 -0 1 0 1 0 0 0 0 -1 +2 -10.0500782264 -29.9999528508 10 2.2184535635e-16 -1.48044541144e-16 -1 -0.96612782444105971 0.25806399756801596 -2.5253593759852034e-16 0.25806399756801596 0.96612782444105971 -8.5779650954245655e-17 16.999954907700001 +2 -40.000005894799997 -22.000007838799998 10 5.5640088590099997e-18 3.34722974126e-16 1 -0.97417156187334042 -0.22580914073007888 8.1003806370467358e-17 0.22580914073007888 -0.97417156187334042 3.2482119843974757e-16 14.000003959200001 +1 -4.0512084233500003 -23 10 0 -1 0 1 0 0 -0 0 1 +2 1.94758182896 -30.000090517899999 10 -4.2166878908399999e-16 -5.48623878844e-16 -1 6.151433136810492e-06 0.99999999998107991 -5.4862647270098189e-16 0.99999999998107991 -6.151433136810492e-06 -4.2166541425291401e-16 7.0000925632 +2 33.000000815600004 -4.0000089966100001 10 -5.2933418242299998e-17 -1.2842066634500001e-16 1 -0.76672491026097311 -0.64197578769397745 -1.2302832878465087e-16 0.64197578769397745 -0.76672491026097311 -6.44813510075892e-17 33.499997306399997 +2 33.000231648499998 -3.99990394745 10 2.1012375303300001e-17 3.6438932552000002e-18 1 0.87102809313900131 -0.49123320425500078 -1.6512367833039363e-17 0.49123320425500078 0.87102809313900131 -1.3495909842927628e-17 33.499988350499997 +2 8.1755617599299999 28.000161024899999 10 -1.95855484681e-16 1.17654303265e-15 -1 0.61294571866033543 -0.7901250192064323 -1.0496648670811392e-15 -0.7901250192064323 -0.61294571866033543 -5.6640669608720442e-16 7.0001627314999997 +1 -0.937212455434 21 10 0 1 -0 -1 0 0 0 0 1 +2 -10.0500892177 27.999937760200002 10 -2.6938377685800001e-16 -1.79768782062e-16 -1 6.783127851679964e-06 -0.99999999997699462 1.7976695479326474e-16 -0.99999999997699462 -6.783127851679964e-06 2.6938499624643518e-16 6.9999367231200003 +2 -40.000000158600002 20.0000116416 10 3.6512598978999999e-17 9.8261528521100004e-17 1 0.96612805641133093 0.2580631291270884 -6.0633523809073324e-17 -0.2580631291270884 0.96612805641133093 -8.5510664025013637e-17 24.000006379399998 +2 -70.199389163800006 27.000064425600002 10 3.6359605203699998e-16 -4.57512413114e-16 -1 0.97417177852014902 -0.22580820608403457 4.57515069942239e-16 -0.22580820608403457 -0.97417177852014902 3.6359270892859827e-16 7.0000700167899996 +2 -65.199337741099995 16.091298859399998 10 0 0 1 -0.41666852074605776 0.90905849306812603 0 -0.90905849306812603 -0.41666852074605776 0 5 +2 -70.199302031900004 26.9999554113 10 0 0 -1 0.97417325212704642 -0.22580184862001074 0 -0.22580184862001074 -0.97417325212704642 -0 16.999958414799998 +2 -65.199337741099995 16.091272674700001 10 0 0 1 -1 2.1316282072799999e-15 0 -2.1316282072799999e-15 -1 0 5 +2 -70.199384206299996 -29.000057785500001 10 2.03942557704e-16 5.8439850052099999e-16 -1 6.6378342173397984e-06 0.99999999997796962 5.8439985424501339e-16 0.99999999997796962 -6.6378342173397984e-06 2.0393867855914374e-16 7.0000631979800003 +2 -65.199337741099995 -18.091297447999999 10 9.8355079826499999e-17 -6.3129980462000004e-16 1 -1 5.5511151231300001e-16 9.8355079826500344e-17 -5.5511151231300011e-16 -1 -6.3129980461999994e-16 5 +2 -70.199302332399995 -28.999955369599999 10 -0 0 -1 -2.0828689786796477e-06 0.99999999999783085 0 0.99999999999783085 2.0828689786796477e-06 0 16.999958491400001 +2 -65.199337741099995 -18.0912726864 10 0 -0 1 0.41666515720801467 0.90906003474403196 0 -0.90906003474403196 0.41666515720801467 0 5 +3 0 0 -7 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 10.265711135 +0.17453292519899999 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 11.5 +3 0 0 -7 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 10.265711135 +0.17453292519899999 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 11.5 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 15.300000000000001 +1 0 -12.199999999999999 0 0 0 1 1 0 -0 -0 1 0 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 15.300000000000001 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 12.199999999999999 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 12.199999999999999 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9 +5 1.7763568394e-15 2.91433543964e-16 4 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8 1 +3 2.6445401040999999e-14 -1.8623851981100001e-15 -7.3874372842399998 -1.7763568394e-15 2.22044604925e-16 1 0.4794255386042035 -0.87758256189037243 1.0464933077266227e-15 0.87758256189037243 0.4794255386042035 1.4524459316418111e-15 0 +0.62831853071800003 +5 -1.7763568394e-15 -4.4408920985e-16 4 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 1 +3 2.7505636178100001e-14 1.5128099898e-14 -7.3874372842399998 -2.2204460492499999e-15 -1.2212453270899999e-15 1 -0.47111581537810726 0.88207136247620077 3.1138278588459099e-17 -0.88207136247620077 -0.47111581537810726 -2.5339398600155531e-15 0 +0.62831853071800003 +1 0 -16 7 0 0 1 1 0 -0 -0 1 0 +5 -3.5527136788e-15 -6.4392935428299998e-15 1 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 15.800000000000001 0.5 +5 -1.7763568394e-15 8.881784197e-16 1 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 15.800000000000001 0.5 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 16 +1 0 -15.300000000000001 1.5 0 0 1 1 0 -0 -0 1 0 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 16 +5 0 1.3877787807800001e-15 0.40000000000000002 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 11.800000000000001 0.29999999999999999 +5 -1.7763568394e-15 2.6645352590999998e-15 0.40000000000000002 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 11.800000000000001 0.29999999999999999 +1 0 -11.5 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 +5 -1.7763568394e-15 -1.94289029309e-16 0.40000000000000002 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 11.9 0.29999999999999999 +5 0 8.881784197e-16 0.40000000000000002 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 11.9 0.29999999999999999 +3 5.5659180967900002e-14 2.63585449763e-14 21.800000000000001 -3.7007434154200002e-15 -1.71159382963e-15 -1 0.4794255386042035 -0.87758256189037243 -2.7216600725124432e-16 -0.87758256189037243 -0.4794255386042035 4.0682896810452049e-15 0 +0.78539816339699997 +3 -1.68753899743e-14 1.4506914188399999e-14 21.800000000000001 1.1102230246299999e-15 -7.4014868308300001e-16 -1 0.52029602321325741 0.85398597659942255 -5.4431971356628967e-17 0.85398597659942255 -0.52029602321325741 1.3332113103264298e-15 0 +0.78539816339699997 +3 0 0 -4.5 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 7.8065285868099998 +0.17453292519899999 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8.5999999999999996 +3 0 0 -4.5 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 7.8065285868099998 +0.17453292519899999 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8.5999999999999996 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 11.300000000000001 +1 0 -9.3000000000000007 0 0 0 1 1 0 -0 -0 1 0 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 11.300000000000001 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9.3000000000000007 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9.3000000000000007 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 7 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 7 +5 -3.1086244689500001e-15 -1.1102230246299999e-15 4 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 6 1 +3 -3.7438227020200001e-14 -2.62975015189e-14 -5.2346734433000002 3.8857805861900003e-15 2.7755575615600002e-15 1 0.4794255386042035 -0.87758256189037243 5.7283846511612145e-16 0.87758256189037243 0.4794255386042035 -4.7407664606503667e-15 0 +0.62831853071800003 +5 -3.5527136788e-15 0 4 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 1 +3 1.9597668115999999e-14 3.5623374925699998e-15 -5.2346734433000002 -1.66533453694e-15 -2.7755575615600002e-16 1 -0.27602005662689311 0.96115187579262773 -1.9289249752251903e-16 -0.96115187579262773 -0.27602005662689311 -1.6772503695334274e-15 0 +0.62831853071800003 +1 0 -12 6 0 0 1 1 0 -0 -0 1 0 +5 8.881784197e-16 3.1363800445700001e-15 1 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 11.800000000000001 0.5 +5 -1.7763568394e-15 -8.881784197e-16 1 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 11.800000000000001 0.5 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 12 +1 0 -11.300000000000001 1.5 0 0 1 1 0 -0 -0 1 0 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 12 +5 -3.5527136788e-15 -3.3723024373e-15 0.40000000000000002 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8.9000000000000004 0.29999999999999999 +5 8.881784197e-16 2.6645352590999998e-15 0.40000000000000002 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8.9000000000000004 0.29999999999999999 +1 0 -8.5999999999999996 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 +5 8.881784197e-16 -6.6613381477499995e-16 0.40000000000000002 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9 0.29999999999999999 +5 -6.2172489379000002e-15 -1.7763568394e-15 0.40000000000000002 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 9 0.29999999999999999 +3 1.5099033134899999e-14 -3.2723823650800002e-14 16.800000000000001 -1.4802973661699999e-15 2.6830389761799999e-15 -1 0.4794255386042035 -0.87758256189037243 -3.064280580438202e-15 -0.87758256189037243 -0.4794255386042035 1.2765748711872168e-17 0 +0.78539816339699997 +3 8.4376949871500001e-15 -4.2632564145599997e-14 16.800000000000001 -7.4014868308300001e-16 3.7007434154200002e-15 -1 0.52029602321325741 0.85398597659942255 2.7752865633667171e-15 0.85398597659942255 -0.52029602321325741 -2.5575586779270865e-15 0 +0.78539816339699997 +3 -40 -22 5.5 -0 -0 -1 -0.87758256189037243 -0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 8.0302016061000003 +0.17453292519899999 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +1 5.9975681453541174 0.0046571625509320572 -47.497149315993603 0 0 1 1 0 -0 -0 1 0 +3 -40 -22 5.5 -0 -0 -1 -0.87758256189037243 -0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 8.0302016061000003 +0.17453292519899999 +3 -40 20 5.5 -0 -0 -1 -0.87758256189037243 -0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 8.0302016061000003 +0.17453292519899999 +1 5.997568146259912 42.004657162550942 -47.497149310555422 4.2174723520312032e-32 -1.6869889408124791e-31 1 0 1 1.6869889408124791e-31 -1 -7.1148292160590343e-63 4.2174723520312032e-32 +3 -40 20 5.5 -0 -0 -1 -0.87758256189037243 -0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 8.0302016061000003 +0.17453292519899999 +1 78.997568145742292 18.004657160976578 -47.497149313103471 3.9108863081512343e-31 1.1502606788680099e-31 1 1 0 -3.9108863081512343e-31 -4.4985387397896432e-62 1 -1.1502606788680099e-31 +2 -65 16 4.16049991609 0 0 1 1 0 -0 -0 1 0 4 +2 -65 16 4.16049991609 0 0 1 1 0 -0 -0 1 0 4 +2 -65 -18 4.16049991609 0 0 1 1 0 -0 -0 1 0 4 +2 -65 -18 4.16049991609 0 0 1 1 0 -0 -0 1 0 4 +1 53.5 -45 52 -1.97215226305e-31 -1 -0 -1 1.97215226305e-31 0 0 0 -1 +1 86.5 53 0 -1 0 0 0 -1 0 0 0 1 +1 47.082969087899997 34.5823357644 52 0.46947156278594571 0.8829475928588979 -6.1645133442292872e-14 0.8829475928588979 -0.46947156278594571 1.5755129999074048e-26 -2.8940637135287487e-14 -5.4429422184345419e-14 -1 +1 -29.5 45 52 -0 1 0 1 0 0 0 0 -1 +1 -19 45 0 0.70710678118654757 0.70710678118654757 -0 -0.70710678118654757 0.70710678118654757 0 0 0 1 +1 -86.5 53 0 0 -1 0 1 0 0 -0 0 1 +1 -78.862687876999999 16.500914749 0 0.86602540378432902 -0.50000000000018996 0 0.50000000000018996 0.86602540378432902 0 -0 0 1 +1 -86.5 -53 0 1 0 0 -0 1 0 0 -0 1 +1 -77.4202418693 -35.9202418693 0 -0.70710678118654757 -0.70710678118654757 0 0.70710678118654757 -0.70710678118654757 0 0 0 1 +1 86.5 -53 0 0 1 -0 -1 0 0 0 0 1 +1 -24.340483738500001 -53 0 0.70710678118654757 -0.70710678118654757 0 0.70710678118654757 0.70710678118654757 0 -0 0 1 +3 -68.458904109599999 -1 9 0 0 -1 -0.50000000000018996 0.86602540378432902 0 0.86602540378432902 0.50000000000018996 0 0 +0.78539816339699997 +3 -68.458904109599999 -1 9 0 1.3322676295499999e-15 -1 1 -3.94745957368e-16 -5.2590726089711068e-31 -3.94745957368e-16 -1 -1.3322676295499999e-15 0 +0.78539816339699997 +3 -6.4589041095899997 -1 11 -2.9605947323300001e-16 0 -1 -0.50000000000018996 0.86602540378432902 1.4802973661655623e-16 0.86602540378432902 0.50000000000018996 -2.5639502485078459e-16 0 +0.78539816339699997 +3 -6.4589041095899997 -1 11 5.9211894646699999e-16 -7.4014868308300001e-16 -1 1 1.6148699255100004e-16 5.921189464669999e-16 1.614869925509996e-16 -1 7.4014868308300011e-16 0 +0.78539816339699997 +1 -40 20 5.5 0 0 1 1 0 -0 -0 1 0 +1 -40 20 5.5 0 0 1 1 0 -0 -0 1 0 +5 -40 20 19.899999999999999 -0 0 1 1 0 0 0 1 -0 7.4000000000000004 0.59999999999999998 +1 33 4.7999999999999998 20.5 0 0 1 1 0 -0 -0 1 0 +1 5.9975681461027985 42.004657159896581 -26.997149310555397 3.2949002750243641e-32 5.2718404400390009e-31 1 0 1 -5.2718404400390009e-31 -1 1.7370188515769069e-62 3.2949002750243641e-32 +5 -40 20 19.899999999999999 0 -0 1 -1 9.60192886162e-16 0 -9.60192886162e-16 -1 0 7.4000000000000004 0.59999999999999998 +5 -40 -22 19.899999999999999 0 -0 1 -1 -4.80096443081e-16 0 4.80096443081e-16 -1 -0 7.4000000000000004 0.59999999999999998 +1 5.9975681451970058 0.0046571598965805365 -26.997149315993582 3.294900275024375e-32 -2.8556874942228044e-33 1 1 0 -3.294900275024375e-32 9.4092055100983861e-65 1 2.8556874942228044e-33 +5 -40 -22 19.899999999999999 -0 0 1 1 0 0 0 1 -0 7.4000000000000004 0.59999999999999998 +1 78.997568145585191 18.004657158307225 -26.997149313103471 0 0 1 1 0 -0 -0 1 0 +1 33 4.7999999999999998 20.5 0 0 1 1 0 -0 -0 1 0 +5 33 -4 19.899999999999999 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9.4000000000000004 0.59999999999999998 +5 33 -4 19.899999999999999 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 9.4000000000000004 0.59999999999999998 +1 33 -4 8 0 0 1 1 0 -0 -0 1 0 +2 33 -4 17.5 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8.8000000000000007 +2 33 -4 17.5 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8.8000000000000007 +2 -55.499766644799998 -13.999766644799999 50 0 0 1 -0.99999999997166822 -7.5275290616575032e-06 0 7.5275290616575032e-06 -0.99999999997166822 0 31.000233355999999 +1 0 0 52 0 0 1 1 0 -0 -0 1 0 +6 0 0 -1 +7 0 0 5 6 2 -55.5 -45 52 -60.369468613099997 -45 52 -65.238937226100006 -44.043882073600003 52 -69.8577641933 -42.130701301599998 52 -73.977075939700001 -39.363544493900001 52 -77.420310216800004 -35.920310216799997 52 + 0 6 24.756193660499999 6 +1 53.5 -45 52 -1.97215226305e-31 -1 -0 -1 1.97215226305e-31 0 0 0 -1 +2 53.499751589699997 -11.999751589700001 50 0 0 1 -1.83697019872e-16 -1 0 1 -1.83697019872e-16 0 33.000248411299999 +1 86.5 53 0 -1 0 0 0 -1 0 0 0 1 +2 60.500078944800002 -1.9983999996099999 50 0 0 1 0.99999999998964029 -4.5518777647183625e-06 0 4.5518777647183625e-06 0.99999999998964029 -0 25.999921055400002 +1 47.082969087899997 34.5823357644 52 0.46947156278594571 0.8829475928588979 -6.1645133442292872e-14 0.8829475928588979 -0.46947156278594571 1.5755129999074048e-26 -2.8940637135287487e-14 -5.4429422184345419e-14 -1 +2 5.2998818036899999 -44.0004740595 50 0 0 1 0.46947039019481945 0.88294821633566034 -0 -0.88294821633566034 0.46947039019481945 0 89.000474059599995 +6 0 0 -1 +7 0 0 5 6 2 5.2999999999999998 45 52 8.8637397867699992 45 52 12.4276487354 44.821590245800003 52 15.9795444002 44.464822848399997 52 19.5075314268 43.930901378999998 52 23.000001552000001 43.222180868300001 52 + 0 6 17.9076813235 6 +1 -29.5 45 52 -0 1 0 1 0 0 0 0 -1 +6 0 0 -1 +7 0 0 5 9 3 -86.5 -12 52 -86.5 -3.04646093727 52 -84.741976716099998 5.90707812546 52 -81.224192715800001 14.3997599683 52 -71.048196713199999 29.548196713199999 52 -55.899759968300003 39.724192715800001 52 -47.4070781255 43.241976716099998 52 -38.453539062700003 45 52 -29.5 45 52 + 0 6 45.519452859700003 3 91.038905719400006 6 +1 -86.5 -53 0 1 0 0 -0 1 0 0 -0 1 +1 -84.5 -12 52 1 0 0 0 -1 0 0 0 -1 +2 -29.5 -12 45 0 0 1 -3.8285686989299999e-16 1 0 -1 -3.8285686989299999e-16 0 55 +1 -29.5 43 52 -0 1 0 1 0 0 0 0 -1 +2 5.2999999999999998 -44 45 0 0 1 0.46947156278594571 0.8829475928588979 -0 -0.8829475928588979 0.46947156278594571 0 87 +1 46.144025962400001 32.816440578700004 52 0.46947156278594571 0.8829475928588979 0 0.8829475928588979 -0.46947156278594571 0 0 0 -1 +2 60.5 -1.9984474343 45 0 0 1 0.99999999999628053 -2.7274528211707652e-06 0 2.7274528211707652e-06 0.99999999999628053 -0 24 +1 84.5 -1.99851289317 52 1 0 0 0 -1 0 0 0 -1 +2 53.5 -12 45 0 0 1 -1.07187543957e-15 -1 0 1 -1.07187543957e-15 0 31 +1 -55.5 -43 52 -0 1 0 1 0 0 0 0 -1 +2 -55.5 -14 45 0 0 1 -1 -7.6571373978499999e-16 0 7.6571373978499999e-16 -1 0 29 +2 33 -4 17.5 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 23 +2 33 -4 17.5 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 23 +2 -40 -22 20.149999999999999 0 0 1 -1 1.2246467991500001e-16 0 -1.2246467991500001e-16 -1 0 17 +1 -57 20 20.5 1 0 0 0 -1 0 0 0 -1 +1 -23 -22 20.5 -1 0 0 0 1 0 0 0 -1 +2 -40 20 20.149999999999999 0 0 1 1 0 -0 -0 1 0 17 +5 33 -4 20.300000000000001 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 23.5 0.5 +5 33 -4 20.300000000000001 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 23.5 0.5 +2 33 -4 17.5 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 24 +5 33 -4 20.300000000000001 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 23.5 0.5 +2 33 -4 17.5 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 24 +5 33 -4 20.300000000000001 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 23.5 0.5 +2 -22.5 -1 20.300000000000001 -0 1 0 1 0 0 0 0 -1 0.5 +5 -40 20 20.300000000000001 -0 0 1 1 -4.0602442043399999e-16 0 4.0602442043399999e-16 1 0 17.5 0.5 +1 -22 20 20.5 -1 1.69176841848e-16 0 -1.69176841848e-16 -1 0 0 0 1 +5 -40 -22 20.300000000000001 0 -0 1 -1 -4.0602442043399999e-16 0 4.0602442043399999e-16 -1 -0 17.5 0.5 +2 -22.5 -1 20.300000000000001 0 1 0 0 0 -1 -1 0 0 0.5 +2 -40 -22 45.5 0 0 1 -1 1.2246467991500001e-16 0 -1.2246467991500001e-16 -1 0 18 +2 -57.5 -1 20.300000000000001 0 -1 0 -1 0 0 -0 -0 -1 0.5 +5 -40 -22 20.300000000000001 0 -0 1 -1 -2.0898315757699999e-16 0 2.0898315757699999e-16 -1 -0 17.5 0.5 +1 -58 -22 20.5 1 0 0 -0 1 0 0 -0 1 +2 -57.5 -1 20.300000000000001 0 -1 0 0 0 -1 1 0 0 0.5 +2 -40 20 45.5 0 0 1 1 0 -0 -0 1 0 18 +5 -40 20 20.300000000000001 -0 0 1 1 -1.2538989454600001e-15 0 1.2538989454600001e-15 1 0 17.5 0.5 +1 7248.0524318899998 -2368.6446572300001 50.999999994600003 5.3319979771499996e-15 3.3284093715700001e-15 -1 -0.74740830984202555 -0.66436497377502279 -6.1964582010384234e-15 -0.66436497377502279 0.74740830984202555 -1.0547118733902419e-15 +2 -6.4589041095899997 -1 32.899999999999999 0 0 1 1 0 -0 -0 1 0 9.5 +1 0 0 32.299999999999997 0 0 1 1 0 -0 -0 1 0 +2 -6.4589041095899997 -1 32.899999999999999 0 0 1 1 0 -0 -0 1 0 9.5 +1 0 0 33.5 0 0 1 1 0 -0 -0 1 0 +2 11.159670332199999 -26 29.149999999999999 0 0 -1 5.5511151231300001e-16 1 0 1 -5.5511151231300001e-16 0 7 +2 19.6958653043 24 29.149999999999999 0 0 -1 0.42916563534376717 -0.90322580645151007 0 -0.90322580645151007 -0.42916563534376717 -0 7 +1 -41.458904109599999 17 33.5 0 -1 0 1 0 0 -0 0 1 +2 -15.3220746415 24 29.149999999999999 -0 0 -1 -4.9960036108099997e-16 -1 0 -1 4.9960036108099997e-16 0 7 +2 -15.3220746415 -26 29.149999999999999 0 0 -1 -0.98711701434023902 0.16000000000003875 0 0.16000000000003875 0.98711701434023902 0 7 +1 28.541095890400001 -19 33.5 0 1 -0 -1 0 0 0 0 1 +1 0 0 33.5 0 0 1 1 0 -0 -0 1 0 +2 0 -42.200000000000003 38.799999999999997 1 0 0 0 -1 0 0 0 -1 0.80000000000000004 +5 -55.5 -14 38.799999999999997 0 0 1 -1 -1.07085341382e-15 0 1.07085341382e-15 -1 0 28.199999999999999 0.80000000000000004 +5 53.5 -12 38.799999999999997 -0 0 1 -4.7055810315199999e-16 -1 0 1 -4.7055810315199999e-16 0 30.199999999999999 0.80000000000000004 +2 -83.700000000000003 1.42108547152e-14 38.799999999999997 0 -1 0 -1 0 0 -0 -0 -1 0.80000000000000004 +2 83.700000000000003 1.42108547152e-14 38.799999999999997 0 -1 0 -1.83697019872e-16 -0 -1 1 0 -1.83697019872e-16 0.80000000000000004 +5 60.5 -1.9984474343 38.799999999999997 0 -0 1 0.99999999999628053 -2.7274528217707653e-06 -0 2.7274528217707653e-06 0.99999999999628053 0 23.199999999999999 0.80000000000000004 +2 55.619498734399997 26.872186295799999 38.799999999999997 0.8829475928588979 -0.46947156278594571 0 -8.6240526998305395e-17 -1.6219484151110351e-16 -1 0.46947156278594571 0.8829475928588979 -1.8369701987173728e-16 0.80000000000000004 +5 5.2999999999999998 -44 38.799999999999997 0 0 1 0.46947156278594571 0.8829475928588979 -0 -0.8829475928588979 0.46947156278594571 0 86.200000000000003 0.80000000000000004 +2 0 42.200000000000003 38.799999999999997 1 0 0 0 -1.83697019872e-16 -1 0 1 -1.83697019872e-16 0.80000000000000004 +5 -29.5 -12 38.799999999999997 -0 0 1 -3.2774111428000002e-16 1 -0 -1 -3.2774111428000002e-16 0 54.200000000000003 0.80000000000000004 +1 0 0 38 0 0 1 1 0 -0 -0 1 0 +3 -15.3220746415 24 44.600000000000001 1.3322676295499999e-14 -0 -1 -0.98358233283401919 0.18045995272300352 -1.3103949030320378e-14 0.18045995272300352 0.98358233283401919 2.4042095344298095e-15 0 +0.78539816339699997 +3 -15.3220746415 -26 44.600000000000001 -4.4408920984999998e-15 -8.8817841969999996e-15 -1 0.33550826299311909 0.94203726330933435 -9.8569276723535754e-15 0.94203726330933435 -0.33550826299311909 -1.2035738509077817e-15 0 +0.78539816339699997 +3 33 -4 13.6 -1.7763568393999999e-14 -4.4408920984999998e-15 1 -0.52029602321325741 -0.85398597659942255 -1.303477356918509e-14 0.85398597659942255 -0.52029602321325741 1.2859259804471999e-14 0 +0.78539816339699997 +1 -117.18000000000001 17 37.600000000000001 0 -0.70710678118654757 0.70710678118654757 1 0 0 -0 0.70710678118654757 0.70710678118654757 +3 19.6958653043 24 44.600000000000001 -0 -0 -1 -0.73482806172198967 -0.67825343324299059 0 -0.67825343324299059 0.73482806172198967 0 0 +0.78539816339699997 +1 117.18000000000001 -19 37.600000000000001 0 0.70710678118654757 0.70710678118654757 -1 0 0 0 -0.70710678118654757 0.70710678118654757 +3 11.159670332199999 -26 44.600000000000001 1.3322676295499999e-14 -0 -1 0.99120552472633061 0.13233143145904414 1.3205510348240124e-14 0.13233143145904414 -0.99120552472633061 1.7630088250489903e-15 0 +0.78539816339699997 +2 -64.979991993599995 -23 29.149999999999999 0 0 -1 -4.5796699765800004e-16 1 0 1 4.5796699765800004e-16 0 7 +3 -40 -22 19.600000000000001 -1.7763568393999999e-14 -8.8817841969999996e-15 1 7.7232873164099901e-16 1 8.8817841970000138e-15 -1 7.7232873164115678e-16 -1.7763568393999993e-14 0 +0.78539816339699997 +1 -50 -16 33.5 0 1 -0 -1 0 0 0 0 1 +3 -64.979991993599995 -23 44.600000000000001 3.5527136787999998e-14 -0 -1 0.97090996135354468 -0.23944487245388771 3.4493651005839173e-14 -0.23944487245388771 -0.97090996135354468 -8.506790736854482e-15 0 +0.78539816339699997 +2 -64.979991993599995 21 29.149999999999999 0 0 -1 0.99919967974374424 -0.039999999999989759 0 -0.039999999999989759 -0.99919967974374424 -0 7 +3 -40 20 19.600000000000001 0 0 1 0 -1 0 1 0 -0 0 +0.78539816339699997 +1 -76 14 33.5 0 -1 0 1 0 0 -0 0 1 +3 -64.979991993599995 21 44.600000000000001 -0 -0 -1 -0.2780896383261115 -0.96055512754638528 0 -0.96055512754638528 0.2780896383261115 0 0 +0.78539816339699997 +2 -73.888543819999995 -12 35.75 -0 0 -1 3.8857805861899998e-16 -1 -0 -1 -3.8857805861899998e-16 0 4 +1 117.18000000000001 -16 37.600000000000001 0 0.70710678118654757 0.70710678118654757 -1 0 0 0 -0.70710678118654757 0.70710678118654757 +2 -56 -0.99999999994099997 45 0 0 1 -0.80000000000131999 0.59999999999824005 0 -0.59999999999824005 -0.80000000000131999 0 25 +3 -73.888543819999995 -12 33.600000000000001 0 4.4408920984999998e-15 1 -0.9999039642555646 -0.013858653109393965 6.1544783089360114e-17 0.013858653109393965 -0.9999039642555646 4.4404656141213629e-15 0 +0.78539816339699997 +2 -73.888543819999995 10 35.75 0 0 -1 -0.85183542000161672 0.52380952380676438 0 0.52380952380676438 0.85183542000161672 0 4 +1 -117.18000000000001 14 37.600000000000001 0 -0.70710678118654757 0.70710678118654757 1 0 0 -0 0.70710678118654757 0.70710678118654757 +3 -56 -0.99999999994099997 12.6 0 -8.8817841969999996e-15 1 -0.50000000000168998 0.86602540378346304 7.6918507455245061e-15 -0.86602540378346304 -0.50000000000168998 -4.4408920985150095e-15 0 +0.78539816339699997 +3 -73.888543819999995 10 33.600000000000001 0 0 1 0.51195392778001336 0.85901290783702244 -0 -0.85901290783702244 0.51195392778001336 0 0 +0.78539816339699997 +2 -68.458904109599999 -1 32.899999999999999 0 0 1 1 0 -0 -0 1 0 7.5 +2 -68.458904109599999 -1 32.899999999999999 0 0 1 1 0 -0 -0 1 0 7.5 +1 0 0 32.299999999999997 0 0 1 1 0 -0 -0 1 0 +1 16.732109310799999 -5.2094209951600003 23.499999994500001 5.3555698928500002e-15 3.2349796822300001e-15 -1 -0.99796128102408377 -0.063822265525205368 -5.5511151231305293e-15 -0.063822265525205368 0.99796128102408377 2.8865798640248658e-15 +1 -40.156212697500003 29.396980008700002 13 0 0 1 -0.25806358351695385 0.96612793503882721 0 -0.96612793503882721 -0.25806358351695385 0 +1 -13.918131324000001 -107.60845784999999 23.499999994500001 -0.1024327815450157 -0.99473992845615244 -3.9751455113206091e-15 0.99473992845615244 -0.1024327815450157 4.9960036108107669e-15 -5.3769094861553343e-15 -3.4424814150695685e-15 1 +1 26.946339062700002 -111.816453577 23.499999994500001 0.81025365742885125 -0.58607935522689247 2.3457727286495693e-15 0.58607935522689247 0.81025365742885125 5.8009153036689349e-15 -5.3004676337852713e-15 -3.3254038729169813e-15 1 +1 -13.918131324000001 -107.60845784999999 23.499999994500001 0.94483050731796181 0.3275596318859868 6.2148761907197492e-15 -0.3275596318859868 0.94483050731796181 1.4988010832399395e-15 -5.3810578930996683e-15 -3.4518555450954471e-15 1 +1 21.929764967699999 -84.875286455999998 52.999999998600003 0.99479715769590016 -0.10187548792598977 -1.9578655817198035e-14 -0.10187548792598977 -0.99479715769590016 2.6068036618197383e-13 -4.6033730655969162e-14 -2.573295022306419e-13 -1 +1 15.631284151699999 -13.8641989612 32.999999994200003 1.10785473343e-16 -6.8905455708200003e-15 -1 -0.99792536962780554 -0.064381337771187458 3.3306690738751748e-16 -0.064381337771187458 0.99792536962780554 -6.8833827526772241e-15 +1 -4.9297582863200002 -82.124648221399994 52.999999993000003 0.99479715769590016 -0.10187548792598977 -1.9578655817198035e-14 -0.10187548792598977 -0.99479715769590016 2.6068036618197383e-13 -4.6033730655969162e-14 -2.573295022306419e-13 -1 +1 15.631284150500001 -13.8641989618 41.999999996299998 1.10785473343e-16 -6.8905455708200003e-15 -1 -0.99792536962780554 -0.064381337771187458 3.3306690738751748e-16 -0.064381337771187458 0.99792536962780554 -6.8833827526772241e-15 +1 87.499999999799996 12.5163758555 23.499999994500001 -1 -1.5831780331199999e-13 -5.38458166943e-15 1.5831780331200002e-13 -1 -3.33066907388e-15 -5.384581669429473e-15 -3.3306690738808524e-15 1 +1 86.499999999799996 12.5163758555 23.499999994500001 0.93896990122733826 0.34399930899512393 6.2398995735322481e-15 -0.34399930899512393 0.93896990122733826 1.2767564783204604e-15 -5.419874539930799e-15 -3.3453570458339886e-15 1 +1 -164.72578242700001 -10.123963334500001 23.499999994500001 -0.54287075387791228 -0.8398162564418642 -5.8135202777090594e-15 0.83981625644186431 -0.54287075387791239 2.6645352590995699e-15 -5.3937101622988012e-15 -3.4357905715328274e-15 1 +1 -160.47072977600001 31.197483829599999 23.499999994500001 -0.99473992845615244 0.1024327815450157 -5.0037163637207664e-15 -0.1024327815450157 -0.99473992845615244 -3.8857805861905959e-15 -5.3754277715795972e-15 -3.3527965171053094e-15 1 +1 -154.507054498 -16.729513646600001 23.499999994500001 -0.1024327815450157 -0.99473992845615244 -3.9751455113206091e-15 0.99473992845615244 -0.1024327815450157 4.9960036108107669e-15 -5.3769094861553343e-15 -3.4424814150695685e-15 1 +1 6.4227351959299996 109.449712116 23.499999994500001 -0.42452690692797662 0.90541532198995012 8.3026030447495425e-16 -0.90541532198995012 -0.42452690692797662 -6.3282712403596507e-15 -5.3772459037261422e-15 -3.4382518167828176e-15 1 +1 -136.22655639600001 21.566132892999999 52.9999999964 -0.10187548792598977 -0.99479715769590016 2.573010962839742e-13 -0.99479715769590016 0.10187548792598977 1.6986412276798295e-14 -4.3110709380231623e-14 -2.5423190021652579e-13 -1 +1 1.77160207601 -5.1313998851599996 41.999999996299998 2.9895922470999999e-15 -4.0903707038399999e-15 -1 -0.99792536962780554 -0.064381337771187458 -2.7200464103303966e-15 -0.064381337771187458 0.99792536962780554 -4.274358644802947e-15 +1 -138.77344359899999 -3.3037960436099998 52.999999990900001 -0.10187548792598977 -0.99479715769590016 2.573010962839742e-13 -0.99479715769590016 0.10187548792598977 1.6986412276798295e-14 -4.3110709380231623e-14 -2.5423190021652579e-13 -1 +1 1.7716020772600001 -5.1313998844900004 32.999999994200003 2.9860183649199999e-15 -4.03497471773e-15 -1 -0.99792536962780554 -0.064381337771187458 -2.7200464103278296e-15 -0.064381337771187458 0.99792536962780554 -4.2188474935724441e-15 +1 -150.035529897 36.090291605399997 23.499999994500001 -0.1024327815450157 -0.99473992845615244 -3.9751455113206091e-15 0.99473992845615244 -0.1024327815450157 4.9960036108107669e-15 -5.3769094861553343e-15 -3.4424814150695685e-15 1 +1 52.734826902000002 104.68075066500001 23.499999994500001 0.1024327815450157 0.99473992845615244 3.9751455113206091e-15 -0.99473992845615244 0.1024327815450157 -4.9960036108107669e-15 -5.3769094861553343e-15 -3.4424814150695685e-15 1 +1 -15.3075350256 78.276079731099998 23.499999994500001 0.82035874698441591 -0.57184921635528985 2.4491601548712418e-15 0.57184921635528985 0.82035874698441591 5.7731597280529266e-15 -5.3105668221953143e-15 -3.3355117653546696e-15 1 +1 18.329705288 11.8682050077 32.9999999988 5.9591354081500002e-16 -3.96769201162e-15 -1 0.10243278158104553 0.99473992845244219 -3.8857805861927156e-15 0.99473992845244219 -0.10243278158104553 9.9920072216128523e-16 +1 41.149169101799998 81.920381622400001 52.999999991999999 -0.99479715769590016 0.10187548792598977 1.902776238319809e-14 0.10187548792598977 0.99479715769590016 -2.6006974351797389e-13 -4.542349595179902e-14 -2.5677817907745405e-13 -1 +1 18.368715843899999 11.8641989607 41.999999996299998 6.8797638096599997e-16 -6.3526689918699996e-15 -1 -0.99792536962780554 -0.064381337771187458 -2.775557561565641e-16 -0.064381337771187458 0.99792536962780554 -6.3837823915965386e-15 +1 9.8508308956100006 81.079618379899998 52.999999995099998 -0.99479715769590016 0.10187548792598977 1.902776238319809e-14 0.10187548792598977 0.99479715769590016 -2.6006974351797389e-13 -4.542349595179902e-14 -2.5677817907745405e-13 -1 +2 21.2909982183 79.908050263700005 35.9999999988 5.9293703800799996e-16 -4.0777774832000003e-15 -1 0.43439084691396884 -0.90072448180193543 3.9305204325658755e-15 -0.90072448180193543 -0.43439084691396884 1.2372763081530302e-15 11.4999999998 +2 21.2909982079 79.9080502698 35.999999994299998 6.0304357727700005e-16 -6.45625595758e-15 -1 -0.27121406416397958 -0.96251905508392754 6.0507154842085996e-15 -0.96251905508392754 0.27121406416397958 -2.3314683517132669e-15 11.5 +2 23.161170569300001 80.6168936097 45.0000000012 6.3285417819799996e-16 -4.0332696041599998e-15 -1 0.35324255489412487 -0.93553177252933062 3.9968028886505596e-15 -0.93553177252933062 -0.35324255489412487 8.3266726846812627e-16 11.5 +1 27.223459950500001 69.858278228900005 52.999999995899998 -0.35324255489412487 0.93553177252933062 -2.7768325948409812e-13 0.93553177252933062 0.35324255489412487 -5.3124171728318789e-14 4.8390193490344427e-14 -2.7854723009482594e-13 -1 +1 23.776514175599999 93.141711997300007 52.999999996699998 0.35324255489412487 -0.93553177252933062 2.7768325948409812e-13 -0.93553177252933062 -0.35324255489412487 5.3124171728318789e-14 4.8390193490344427e-14 -2.7854723009482594e-13 -1 +2 27.8388294288 82.3831063855 45.0000000016 5.4171342637599998e-16 -3.9490123110599997e-15 -1 -0.3532448044399884 0.93553092313196928 -3.8857805861881788e-15 0.93553092313196928 0.3532448044399884 -8.8817841970097503e-16 11.5 +2 29.7090017885 83.091949733700005 35.999999991700001 5.5888520866500001e-16 -6.53020587755e-15 -1 0.99479715769590016 -0.10187548792598977 1.2212453270907945e-15 -0.10187548792598977 -0.99479715769590016 6.4392935428284362e-15 11.5 +2 27.424211249199999 100.186300702 33.999999996299998 7.8154559352599992e-15 8.4870486415000004e-14 -1 0.55720717218914495 0.83037351069321608 7.4829031859719546e-14 0.83037351069321608 -0.55720717218914495 -4.0800696154989415e-14 2 +2 27.424211249199999 100.186300702 33.999999996299998 7.8154559352599992e-15 8.4870486415000004e-14 -1 -0.55720717218914495 -0.83037351069321608 -7.4829031859719546e-14 -0.83037351069321608 0.55720717218914495 4.0800696154989415e-14 2 +2 27.424211249199999 100.186300702 33.999999996299998 7.8154559352599992e-15 8.4870486415000004e-14 -1 0.55720717218914495 0.83037351069321608 7.4829031859719546e-14 0.83037351069321608 -0.55720717218914495 -4.0800696154989415e-14 2 +2 27.424211249199999 100.186300702 33.999999996299998 7.8154559352599992e-15 8.4870486415000004e-14 -1 -0.55720717218914495 -0.83037351069321608 -7.4829031859719546e-14 -0.83037351069321608 0.55720717218914495 4.0800696154989415e-14 2 +2 25.500000001899998 81.5 41.999999994200003 1.32556210217e-16 8.4147218736300005e-17 -1 -0.97594548188412822 0.21801471599402863 -1.11022302462482e-16 0.21801471599402863 0.97594548188412822 1.1102230246251146e-16 5 +2 25.500000001899998 81.5 41.999999994200003 1.32556210217e-16 8.4147218736300005e-17 -1 -0.97594548188412822 0.21801471599402863 -1.11022302462482e-16 0.21801471599402863 0.97594548188412822 1.1102230246251146e-16 5 +1 27.242425188999999 98.194579379000004 49.999999996299998 7.7550514461299993e-15 8.4967468433100002e-14 -1 0.99586066148098695 -0.090893030066398803 6.5570118441970501e-27 -0.090893030066398803 -0.99586066148098695 -8.532063944241141e-14 +2 8.4999999956199996 -83.499999997499998 41.999999994200003 1.32556210217e-16 8.4147218736300005e-17 -1 -0.97594548188412822 0.21801471599402863 -1.11022302462482e-16 0.21801471599402863 0.97594548188412822 1.1102230246251146e-16 5 +2 8.4999999956199996 -83.499999997499998 41.999999994200003 1.32556210217e-16 8.4147218736300005e-17 -1 -0.97594548188412822 0.21801471599402863 -1.11022302462482e-16 0.21801471599402863 0.97594548188412822 1.1102230246251146e-16 5 +2 8.5 -83.5 44.999999988399999 -3.7372158294600001e-16 -9.0990075420400002e-16 -1 -0.99463120722637144 0.10348314650903866 2.7755575615615316e-16 0.10348314650903866 0.99463120722637144 -9.4368957093170117e-16 11.5 +2 8.5 -83.5 44.999999988399999 -3.7372158294600001e-16 -9.0990075420400002e-16 -1 0.99463120722637144 -0.10348314650903866 -2.7755575615615316e-16 -0.10348314650903866 -0.99463120722637144 9.4368957093170117e-16 11.5 +2 6.7074263208199998 -100.90794875 33.9999999968 2.29643590168e-13 1.6778850952899999e-13 -1 0.99139318356517259 0.1309181254850228 2.4963364708745188e-13 0.1309181254850228 -0.99139318356517259 -1.3627987627316524e-13 2 +2 6.7074263208199998 -100.90794875 33.9999999968 2.29643590168e-13 1.6778850952899999e-13 -1 -0.99139318356517259 -0.1309181254850228 -2.4963364708745188e-13 -0.1309181254850228 0.99139318356517259 1.3627987627316524e-13 2 +1 8.3219540749200007 -99.727567399799995 49.9999999968 2.2961184054199999e-13 1.6786923210699999e-13 -1 -0.59019067496078803 0.80726387704971014 -4.1730110797467348e-25 0.80726387704971014 0.59019067496078803 2.8443220001483421e-13 +2 6.7074263208199998 -100.90794875 33.9999999968 2.29643590168e-13 1.6778850952899999e-13 -1 0.99139318356517259 0.1309181254850228 2.4963364708745188e-13 0.1309181254850228 -0.99139318356517259 -1.3627987627316524e-13 2 +2 6.7074263208199998 -100.90794875 33.9999999968 2.29643590168e-13 1.6778850952899999e-13 -1 -0.99139318356517259 -0.1309181254850228 -2.4963364708745188e-13 -0.1309181254850228 0.99139318356517259 1.3627987627316524e-13 2 +2 8.4999999983999999 -83.499999998700005 35.999999991499998 -1.1078518587799999e-16 -7.0754438162300004e-15 -1 -0.99479690971357726 0.1018779094029567 -6.1062266354211155e-16 0.1018779094029567 0.99479690971357726 -7.0499162063677127e-15 13.5 +2 8.4999999983999999 -83.499999998700005 35.999999991499998 -1.1078518587799999e-16 -7.0754438162300004e-15 -1 -0.99479690971357726 0.1018779094029567 -6.1062266354211155e-16 0.1018779094029567 0.99479690971357726 -7.0499162063677127e-15 13.5 +2 -137.5 9.1311684270499995 41.999999994200003 3.5275243950799999e-16 -2.2402162931099999e-15 -1 -0.97594548188412822 0.21801471599402863 -8.326672684690092e-16 0.21801471599402863 0.97594548188412822 -2.1094237467883772e-15 5 +2 -137.5 9.1311684270499995 41.999999994200003 3.5275243950799999e-16 -2.2402162931099999e-15 -1 -0.97594548188412822 0.21801471599402863 -8.326672684690092e-16 0.21801471599402863 0.97594548188412822 -2.1094237467883772e-15 5 +2 -137.5 9.1311684270499995 44.999999987000002 5.7837690158399994e-17 -2.12681934891e-15 -1 -0.99463421765463633 0.10345420760196217 -2.7755575615565657e-16 0.10345420760196217 0.99463421765463633 -2.1094237467909757e-15 12.5 +2 -137.49999999600001 9.1311684221299991 35.999999995899998 2.7557041483599998e-15 -4.2209968411500002e-15 -1 0.82380396417274382 -0.56687479094882376 4.6629367034287948e-15 -0.56687479094882376 -0.82380396417274382 1.9151347174816183e-15 12.5 +2 -137.49999999600001 9.1311684221299991 35.999999995899998 2.8070296638e-15 -4.1935665683500002e-15 -1 0.10187548792500015 0.99479715769600141 -3.8857805861839805e-15 0.99479715769600141 -0.10187548792500015 3.2196467714132273e-15 12.5 +2 -137.5 9.1311684270499995 44.999999987000002 5.7837690158399994e-17 -2.12681934891e-15 -1 0.99463421765463633 -0.10345420760196217 2.7755575615565657e-16 -0.10345420760196217 -0.99463421765463633 2.1094237467909757e-15 12.5 +2 -137.49999999600001 9.1311684221299991 35.999999995899998 2.8070296638e-15 -4.1935665683500002e-15 -1 0.10187548792500015 0.99479715769600141 -3.8857805861839805e-15 0.99479715769600141 -0.10187548792500015 3.2196467714132273e-15 12.5 +2 -137.49999999600001 9.1311684221299991 35.999999995899998 2.7557041483599998e-15 -4.2209968411500002e-15 -1 0.82380396417274382 -0.56687479094882376 4.6629367034287948e-15 -0.56687479094882376 -0.82380396417274382 1.9151347174816183e-15 12.5 +2 -155.902688676 11.0261748853 33.999999992399999 1.2085299515399999e-13 -1.09153403715e-15 -1 -0.87290976317547397 0.48788169196326486 -1.0602629885180508e-13 0.48788169196326486 0.87290976317547397 5.8009153036695189e-14 2 +2 -155.902688676 11.0261748853 33.999999992399999 1.2085299515399999e-13 -1.09153403715e-15 -1 0.87290976317547397 -0.48788169196326486 1.0602629885180508e-13 -0.48788169196326486 -0.87290976317547397 -5.8009153036695189e-14 2 +2 -155.902688676 11.0261748853 33.999999992399999 1.2085299515399999e-13 -1.09153403715e-15 -1 -0.87290976317547397 0.48788169196326486 -1.0602629885180508e-13 0.48788169196326486 0.87290976317547397 5.8009153036695189e-14 2 +2 -155.902688676 11.0261748853 33.999999992399999 1.2085299515399999e-13 -1.09153403715e-15 -1 0.87290976317547397 -0.48788169196326486 1.0602629885180508e-13 -0.48788169196326486 -0.87290976317547397 -5.8009153036695189e-14 2 +1 -153.90278201699999 11.0068524218 49.999999992399999 1.20953689596e-13 -1.1131024267e-15 -1 0.0096612317695025773 0.99995332921126678 5.5511151231623464e-17 0.99995332921126678 -0.0096612317695025773 1.2095879853243393e-13 +2 -41.992823476399998 109.942626936 37.249999994500001 -4.0715155394300002e-15 2.0148165554899999e-15 1 0.42452690692797662 -0.90541532198995012 3.552713678803071e-15 0.90541532198995012 0.42452690692797662 2.8310687127906494e-15 40 +1 -113.339099941 32.311497484699998 23.499999994500001 0.42452690692797662 -0.90541532198995012 -8.3026030447495425e-16 0.90541532198995012 0.42452690692797662 6.1339822110496622e-15 -5.2013336396943241e-15 -3.3557708961198089e-15 1 +2 -120.27642056400001 73.237379600500006 37.249999994500001 -2.2933259066499999e-14 -5.3953122334099997e-15 1 -0.1024327815450157 -0.99473992845615244 -7.7160500211349125e-15 0.99473992845615244 -0.1024327815450157 2.2259971643704582e-14 40 +2 -146.24597324999999 -57.791709263999998 37.249999994500001 9.6659368965000009e-16 -9.5482086703000007e-15 1 0.54287075387791239 0.83981625644186431 7.4940054162231688e-15 -0.83981625644186431 0.54287075387791239 5.9952043329715728e-15 40 +1 -19.2385816854 -92.2618664978 23.499999994500001 0.54287075387791228 0.8398162564418642 5.8135202777090594e-15 -0.83981625644186431 0.54287075387791239 -2.7200464103295604e-15 -5.4403293295155502e-15 -3.4056551910159719e-15 1 +2 -52.520288927800003 -118.377501115 37.249999994500001 -1.0404959675399999e-14 -1.21851197137e-14 1 0.94483050731796181 0.3275596318859868 1.3822276656637368e-14 -0.3275596318859868 0.94483050731796181 8.1046280797627087e-15 40 +Triangulations 0 + +TShapes 3792 +Ve +1e-07 +1.64109589041 8.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-56.38854382 -5.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-56.38854382 -5.5 0 +0 0 + +0101101 +* +Ve +1e-07 +-58.94405008 -4.07142857143 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-58.94405008 -4.07142857143 0 +0 0 + +0101101 +* +Ve +1e-07 +-56.38854382 22.5 0 +0 0 + +0101101 +* +Ve +1e-07 +-56.38854382 22.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-58.94405008 21.0714285714 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-58.94405008 21.0714285714 0 +0 0 + +0101101 +* +Ve +9.51703163673272e-05 +71 -32.5 0.8 +0 0 + +0101101 +* +Ve +0.00331634368160302 +-38 -32.5 0.8 +0 0 + +0101101 +* +Ve +9.51703163673272e-05 +101 -2.5 0.8 +0 0 + +0101101 +* +Ve +0.000329339234167311 +101 7.5 0.8 +0 0 + +0101101 +* +Ve +0.000329339234167311 +88.7978026727 27.8078176435 0.8 +0 0 + +0101101 +* +Ve +0.000102671200703963 +63.1716344482 41.4334929859 0.800000000001 +0 0 + +0101101 +* +Ve +0.000102671200703963 +22.7970800486 51.5 0.8 +0 0 + +0101101 +* +Ve +0.000332604549846037 +-12 51.5 0.8 +0 0 + +0101101 +* +Ve +0.000332604549846037 +-66 -2.5 0.8 +0 0 + +0101101 +* +Ve +0.00331634368160302 +-66 -4.5 0.8 +0 0 + +0101101 +* +Ve +1.78496884545777e-06 +-65.2 -4.5 0 +0 0 + +0101101 +* +Ve +3.57962831280521e-06 +-38.0000035699 -31.7000003729 0 +0 0 + +0101101 +* +Ve +1.56700153678202e-07 +-65.2000001567 -2.50000122194 0 +0 0 + +0101101 +* +Ve +1e-07 +-12 50.7 0 +0 0 + +0101101 +* +Ve +8.19920820258925e-06 +22.7970187286 50.6999918008 0 +0 0 + +0101101 +* +Ve +1e-07 +62.796057198 40.7271349116 0 +0 0 + +0101101 +* +Ve +3.2478074647072e-06 +88.4222550489 27.1014401382 0 +0 0 + +0101101 +* +Ve +1e-07 +100.2 7.5 0 +0 0 + +0101101 +* +Ve +8.12300812363715e-06 +100.199991877 -2.50002261243 0 +0 0 + +0101101 +* +Ve +1e-07 +71 -31.7 0 +0 0 + +0101101 +* +Ve +1e-07 +-38 -32.5 1 +0 0 + +0101101 +* +Ve +1e-07 +71 -32.5 1 +0 0 + +0101101 +* +Ve +1e-07 +101 -2.5 1 +0 0 + +0101101 +* +Ve +1e-07 +101 7.5 1 +0 0 + +0101101 +* +Ve +1e-07 +88.7978026727 27.8078176435 1 +0 0 + +0101101 +* +Ve +1e-07 +63.1716344482 41.4334929859 1 +0 0 + +0101101 +* +Ve +1e-07 +22.7970800486 51.5 1 +0 0 + +0101101 +* +Ve +1e-07 +-12 51.5 1 +0 0 + +0101101 +* +Ve +1e-07 +-66 -2.5 1 +0 0 + +0101101 +* +Ve +1e-07 +-66 -4.5 1 +0 0 + +0101101 +* +Ve +1.00001412032745e-07 +11.2 -1.26637722812e-14 0 +0 0 + +0101101 +* +Ve +1e-07 +11.4 -2.79219470206e-15 0.2 +0 0 + +0101101 +* +Ve +1.00001412032745e-07 +-11.2 6.37243841492e-15 0 +0 0 + +0101101 +* +Ve +1e-07 +-11.4 1.39609735103e-15 0.2 +0 0 + +0101101 +* +Ve +1e-07 +11.4 -2.79219470206e-15 2.8 +0 0 + +0101101 +* +Ve +1e-07 +-11.4 1.39609735103e-15 2.8 +0 0 + +0101101 +* +Ve +1.00000298427949e-07 +11.2 -1.26637722812e-14 3 +0 0 + +0101101 +* +Ve +1.0000024158453e-07 +-11.2 6.37243841492e-15 3 +0 0 + +0101101 +* +Ve +1.00000170530257e-07 +10 0 4.6 +0 0 + +0101101 +* +Ve +1.00000198951966e-07 +-10 1.22464679915e-15 4.6 +0 0 + +0101101 +* +Ve +1.00000198951966e-07 +4.69837027832 -8.60030910653 20.4 +0 0 + +0101101 +* +Ve +1.00000198951966e-07 +-4.69837027832 8.60030910653 20.4 +0 0 + +0101101 +* +Ve +1.00000971340767e-07 +-8.2 -1.02756156045e-14 3 +0 0 + +0101101 +* +Ve +1.0000024158453e-07 +8.2 -2.36365216814e-15 3 +0 0 + +0101101 +* +Ve +1.00000369482223e-07 +8 -1.61702895938e-14 2.8 +0 0 + +0101101 +* +Ve +1.00004870178299e-07 +6404.64207793264 -86.2689132546869 4437.73762581774 +0 0 + +0101101 +* +Ve +1.00000957204186e-07 +-8 9.79717439318e-16 2.8 +0 0 + +0101101 +* +Ve +1.00004217536526e-07 +6410.98368883701 -100.263903672191 4433.27397099784 +0 0 + +0101101 +* +Ve +1.00000539579026e-07 +-4.3627724013 7.9860013132 3.1 +0 0 + +0101101 +* +Ve +1.00000255795385e-07 +4.3627724013 -7.9860013132 3.1 +0 0 + +0101101 +* +Ve +1e-07 +-8.2 -6.63408408378e-15 0 +0 0 + +0101101 +* +Ve +1e-07 +8.2 -2.36365216814e-15 0 +0 0 + +0101101 +* +Ve +1e-07 +-8 9.79717439318e-16 0.2 +0 0 + +0101101 +* +Ve +1e-07 +8 -1.61702895938e-14 0.2 +0 0 + +0101101 +* +Ve +1.00000957204186e-07 +6412.20702825104 -97.4700003984992 4441.18023290819 +0 0 + +0101101 +* +Ve +1.00004217536526e-07 +-3.83540430883 7.02066049512 22.8755002002 +0 0 + +0101101 +* +Ve +1.00000412114787e-07 +6400.36570700895 -91.262620383698 4432.39094712416 +0 0 + +0101101 +* +Ve +3.37174408389521e-07 +3.83540430883 -7.02066049512 22.8755002002 +0 0 + +0101101 +* +Ve +1.00001379038797e-07 +9.2 -2.61904017896e-15 0 +0 0 + +0101101 +* +Ve +1e-07 +9.4 -1.06512131276e-14 0.2 +0 0 + +0101101 +* +Ve +1.00001379038797e-07 +-9.2 -7.41025647455e-15 0 +0 0 + +0101101 +* +Ve +1e-07 +-9.4 1.1511679912e-15 0.2 +0 0 + +0101101 +* +Ve +1e-07 +9.4 -1.06512131276e-14 2.8 +0 0 + +0101101 +* +Ve +1e-07 +-9.4 1.1511679912e-15 2.8 +0 0 + +0101101 +* +Ve +1.00000971340767e-07 +9.2 -2.61904017896e-15 3 +0 0 + +0101101 +* +Ve +1.00000298427949e-07 +-9.2 -7.41025647455e-15 3 +0 0 + +0101101 +* +Ve +1.00000213162821e-07 +8 0 4.6 +0 0 + +0101101 +* +Ve +1.00000213162821e-07 +-8 9.79717439318e-16 4.6 +0 0 + +0101101 +* +Ve +1.00000198951966e-07 +3.73951920111 -6.84514398274 19.4 +0 0 + +0101101 +* +Ve +1.00000198951966e-07 +-3.73951920111 6.84514398274 19.4 +0 0 + +0101101 +* +Ve +1.00000971340767e-07 +-6.2 4.51549178933e-16 3 +0 0 + +0101101 +* +Ve +1.00000971340767e-07 +6.2 -1.82629386748e-15 3 +0 0 + +0101101 +* +Ve +1.00000981681071e-07 +6 -1.46957615898e-15 2.8 +0 0 + +0101101 +* +Ve +1.00000961729502e-07 +6460.31275177981 -130.465070240154 4466.15687955259 +0 0 + +0101101 +* +Ve +1.00000961729502e-07 +-6 7.34788079488e-16 2.8 +0 0 + +0101101 +* +Ve +1.00000981681071e-07 +6465.0689599581 -140.961313053285 4462.80913843767 +0 0 + +0101101 +* +Ve +1.0000140054444e-07 +-3.30803621637 6.05531967704 3.1 +0 0 + +0101101 +* +Ve +6.18757156427329e-07 +3.30803621637 -6.05531967704 3.1 +0 0 + +0101101 +* +Ve +1e-07 +6.2 -1.82629386748e-15 0 +0 0 + +0101101 +* +Ve +1e-07 +-6.2 4.51549178933e-16 0 +0 0 + +0101101 +* +Ve +1e-07 +-6 7.34788079488e-16 0.2 +0 0 + +0101101 +* +Ve +1e-07 +6 -1.46957615898e-15 0.2 +0 0 + +0101101 +* +Ve +1.00001287475203e-07 +6465.57126395255 -139.165050478251 4469.08692836278 +0 0 + +0101101 +* +Ve +1.00000966442607e-07 +-2.87655323163 5.26549537134 21.9255437353 +0 0 + +0101101 +* +Ve +1.00000961729502e-07 +6456.69027302098 -134.50951546715 4462.49496402476 +0 0 + +0101101 +* +Ve +1.00001287475203e-07 +2.87655323163 -5.26549537134 21.9255437353 +0 0 + +0101101 +* +Ve +1.00000961729502e-07 +6458.32488170662 -97.5053092200696 4492.11265975799 +0 0 + +0101101 +* +Ve +1.00000976421199e-07 +6463.08108988492 -108.0015520332 4488.76491864307 +0 0 + +0101101 +* +Ve +1.00001287475203e-07 +6463.58339387937 -106.205289458167 4495.04270856818 +0 0 + +0101101 +* +Ve +1.00000966442607e-07 +6454.7024029478 -101.549754447066 4488.45074423016 +0 0 + +0101101 +* +Ve +1e-07 +-3.83540430883 7.02066049512 13 +0 0 + +0101101 +* +Ve +1e-07 +3.83540430883 -7.02066049512 13 +0 0 + +0101101 +* +Ve +1e-07 +-2.97243833935 5.44101188372 0 +0 0 + +0101101 +* +Ve +1e-07 +2.97243833935 -5.44101188372 0 +0 0 + +0101101 +* +Ve +1e-07 +2.97243833935 -5.44101188372 58 +0 0 + +0101101 +* +Ve +1e-07 +-2.97243833935 5.44101188372 58 +0 0 + +0101101 +* +Ve +1e-07 +3.83540430883 -7.02066049512 56.2 +0 0 + +0101101 +* +Ve +1e-07 +-3.83540430883 7.02066049512 56.2 +0 0 + +0101101 +* +Ve +1e-07 +-3.83540430883 7.02066049512 20.4 +0 0 + +0101101 +* +Ve +1e-07 +3.83540430883 -7.02066049512 20.4 +0 0 + +0101101 +* +Ve +1.00004690529351e-07 +4.79425538604 -8.7758256189 20.2 +0 0 + +0101101 +* +Ve +1.00000998508493e-07 +6400.68039698369 -89.1934491150955 4429.7875259515 +0 0 + +0101101 +* +Ve +1.00004130667945e-07 +-4.79425538604 8.7758256189 20.2 +0 0 + +0101101 +* +Ve +1.00001291234263e-07 +6415.48204853631 -96.9526741335962 4440.77413318154 +0 0 + +0101101 +* +Ve +1.00000397903932e-07 +6420.17798760188 -93.5691044494711 4436.83717845928 +0 0 + +0101101 +* +Ve +1.00004690529351e-07 +4.79425538604 -8.7758256189 13.2 +0 0 + +0101101 +* +Ve +1.00004019838618e-07 +-4.79425538604 8.7758256189 13.2 +0 0 + +0101101 +* +Ve +1.00000957204186e-07 +6405.37633604926 -85.8098794309699 4425.85057122923 +0 0 + +0101101 +* +Ve +1e-07 +-3.69157664725 6.75738572656 23.5 +0 0 + +0101101 +* +Ve +1e-07 +-3.69157664725 6.75738572656 26.3 +0 0 + +0101101 +* +Ve +1e-07 +3.69157664725 -6.75738572656 23.5 +0 0 + +0101101 +* +Ve +1e-07 +3.69157664725 -6.75738572656 26.3 +0 0 + +0101101 +* +Ve +1e-07 +3.83540430883 -7.02066049512 26.9244997998 +0 0 + +0101101 +* +Ve +1e-07 +-3.83540430883 7.02066049512 26.9244997998 +0 0 + +0101101 +* +Ve +1.00001301515697e-07 +-3.83540430883 7.02066049512 -7 +0 0 + +0101101 +* +Ve +1.00001338237026e-07 +3.83540430883 -7.02066049512 -7 +0 0 + +0101101 +* +Ve +4.31521155753223e-05 +-3.83540430883 7.02066049512 2.26794919243 +0 0 + +0101101 +* +Ve +4.31544218264034e-05 +3.83540430883 -7.02066049512 2.26794919243 +0 0 + +0101101 +* +Ve +1e-07 +-3.74551202035 6.85611376477 26.5341874249 +0 0 + +0101101 +* +Ve +1e-07 +3.74551202035 -6.85611376477 26.5341874249 +0 0 + +0101101 +* +Ve +1e-07 +3.74551202035 -6.85611376477 23.2658125751 +0 0 + +0101101 +* +Ve +1e-07 +-3.74551202035 6.85611376477 23.2658125751 +0 0 + +0101101 +* +Ve +1e-07 +2.73272557004 -5.00222060278 22.5 +0 0 + +0101101 +* +Ve +1e-07 +2.73272557004 -5.00222060278 25.3 +0 0 + +0101101 +* +Ve +1e-07 +-2.73272557004 5.00222060278 25.3 +0 0 + +0101101 +* +Ve +1e-07 +-2.73272557004 5.00222060278 22.5 +0 0 + +0101101 +* +Ve +1e-07 +2.87655323163 -5.26549537134 19.4 +0 0 + +0101101 +* +Ve +1e-07 +-2.87655323163 5.26549537134 19.4 +0 0 + +0101101 +* +Ve +1e-07 +2.79436599644 -5.11505264645 22.253804458 +0 0 + +0101101 +* +Ve +1e-07 +-2.79436599644 5.11505264645 22.253804458 +0 0 + +0101101 +* +Ve +1e-07 +-2.79436599644 5.11505264645 25.546195542 +0 0 + +0101101 +* +Ve +1e-07 +2.79436599644 -5.11505264645 25.546195542 +0 0 + +0101101 +* +Ve +1e-07 +2.87655323163 -5.26549537134 25.8744562647 +0 0 + +0101101 +* +Ve +1e-07 +-2.87655323163 5.26549537134 25.8744562647 +0 0 + +0101101 +* +Ve +1e-07 +-2.87655323163 5.26549537134 12 +0 0 + +0101101 +* +Ve +1e-07 +2.87655323163 -5.26549537134 12 +0 0 + +0101101 +* +Ve +1e-07 +-2.01358726214 3.68584675994 0 +0 0 + +0101101 +* +Ve +1e-07 +2.01358726214 -3.68584675994 0 +0 0 + +0101101 +* +Ve +1e-07 +-2.01358726214 3.68584675994 56 +0 0 + +0101101 +* +Ve +1e-07 +2.01358726214 -3.68584675994 56 +0 0 + +0101101 +* +Ve +1.00001350629417e-07 +2.87655323163 -5.26549537134 -4.5 +0 0 + +0101101 +* +Ve +1.00001350629417e-07 +-2.87655323163 5.26549537134 -4.5 +0 0 + +0101101 +* +Ve +1.00001350629417e-07 +2.87655323163 -5.26549537134 2.26794919243 +0 0 + +0101101 +* +Ve +1.00001350629417e-07 +-2.87655323163 5.26549537134 2.26794919243 +0 0 + +0101101 +* +Ve +1e-07 +2.87655323163 -5.26549537134 54.2 +0 0 + +0101101 +* +Ve +1e-07 +-2.87655323163 5.26549537134 54.2 +0 0 + +0101101 +* +Ve +1.00004572363208e-07 +3.83540430883 -7.02066049512 19.2 +0 0 + +0101101 +* +Ve +1.00001311408595e-07 +6457.03853462308 -132.416154800226 4459.86339726184 +0 0 + +0101101 +* +Ve +1.00004714321203e-07 +-3.83540430883 7.02066049512 19.2 +0 0 + +0101101 +* +Ve +1.00001394981972e-07 +6468.87985586517 -138.623534815027 4468.65268304587 +0 0 + +0101101 +* +Ve +1.00001291234263e-07 +6473.57579493074 -135.239965130902 4464.71572832361 +0 0 + +0101101 +* +Ve +1.00004572363208e-07 +3.83540430883 -7.02066049512 12.2 +0 0 + +0101101 +* +Ve +1.00004525482328e-07 +-3.83540430883 7.02066049512 12.2 +0 0 + +0101101 +* +Ve +1.00001290060734e-07 +6461.73447368865 -129.032585116101 4455.92644253958 +0 0 + +0101101 +* +Ve +1.00001423995717e-07 +6455.0506645499 -99.4563937801419 4485.81917746724 +0 0 + +0101101 +* +Ve +1.0000140054444e-07 +6466.89198579199 -105.663773794943 4494.60846325127 +0 0 + +0101101 +* +Ve +1.0000140054444e-07 +6471.58792485756 -102.280204110818 4490.67150852901 +0 0 + +0101101 +* +Ve +1.00001423995717e-07 +6459.74660361547 -96.0728240960163 4481.88222274498 +0 0 + +0101101 +* +Ve +1e-07 +23 0 0 +0 0 + +0101101 +* +Ve +1e-07 +-23 2.81668763804e-15 0 +0 0 + +0101101 +* +Ve +1.00001050546506e-07 +-21.4 2.62074415018e-15 0 +0 0 + +0101101 +* +Ve +1.00027010614585e-07 +6398.15699473935 -106.150786220916 4420.73838075035 +0 0 + +0101101 +* +Ve +1.00001301515697e-07 +21.4 0 0 +0 0 + +0101101 +* +Ve +1.00026033556668e-07 +6411.56530577644 -84.6356611660076 4455.22253057322 +0 0 + +0101101 +* +Ve +1.00001369044566e-07 +-21.4 2.62074415018e-15 1.6 +0 0 + +0101101 +* +Ve +1.00027010614585e-07 +10.2597065261 -18.7802668245 3.1 +0 0 + +0101101 +* +Ve +1.00001355033128e-07 +21.4 0 1.6 +0 0 + +0101101 +* +Ve +1.00026033556668e-07 +-10.2597065261 18.7802668245 3.1 +0 0 + +0101101 +* +Ve +1.0000024158453e-07 +-11.5 1.40834381902e-15 1.6 +0 0 + +0101101 +* +Ve +1.00000284217094e-07 +11.5 0 1.6 +0 0 + +0101101 +* +Ve +1e-07 +11.5 0 4.6 +0 0 + +0101101 +* +Ve +1e-07 +-11.5 1.40834381902e-15 4.6 +0 0 + +0101101 +* +Ve +1e-07 +-10.2597065261 18.7802668245 0 +0 0 + +0101101 +* +Ve +1e-07 +10.2597065261 -18.7802668245 0 +0 0 + +0101101 +* +Ve +1e-07 +4.50660006288 -8.24927608177 0 +0 0 + +0101101 +* +Ve +1e-07 +-4.50660006288 8.24927608177 0 +0 0 + +0101101 +* +Ve +1e-07 +4.21894473972 -7.72272654464 0.6 +0 0 + +0101101 +* +Ve +1e-07 +-4.21894473972 7.72272654464 0.6 +0 0 + +0101101 +* +Ve +1e-07 +-4.21894473972 7.72272654464 2.8 +0 0 + +0101101 +* +Ve +1e-07 +4.21894473972 -7.72272654464 2.8 +0 0 + +0101101 +* +Ve +1e-07 +17 0 0 +0 0 + +0101101 +* +Ve +1e-07 +-17 2.08189955855e-15 0 +0 0 + +0101101 +* +Ve +1.00001323670747e-07 +-15.4 1.88595607069e-15 0 +0 0 + +0101101 +* +Ve +1.00012492238535e-07 +6454.91463699501 -145.581430377773 4454.54981794837 +0 0 + +0101101 +* +Ve +1.00001330670319e-07 +15.4 0 0 +0 0 + +0101101 +* +Ve +1.00013415076959e-07 +6464.56360848904 -130.09858337571 4479.36551454987 +0 0 + +0101101 +* +Ve +1.00002072252543e-07 +-15.4 1.88595607069e-15 1.6 +0 0 + +0101101 +* +Ve +1.00013635816802e-07 +7.3831532945 -13.5147714531 3.1 +0 0 + +0101101 +* +Ve +1.0000140054444e-07 +15.4 0 1.6 +0 0 + +0101101 +* +Ve +1.00013415076959e-07 +-7.3831532945 13.5147714531 3.1 +0 0 + +0101101 +* +Ve +1.00001423995717e-07 +9.5 0 1.6 +0 0 + +0101101 +* +Ve +1.00001423995717e-07 +-9.5 -5.38226195277e-15 1.6 +0 0 + +0101101 +* +Ve +1e-07 +9.5 0 4.6 +0 0 + +0101101 +* +Ve +1e-07 +-9.5 -1.16341445919e-15 4.6 +0 0 + +0101101 +* +Ve +1.00013635816802e-07 +6452.92676692183 -112.621669357688 4480.50559815377 +0 0 + +0101101 +* +Ve +1.000125741253e-07 +6462.57573841585 -97.1388223556252 4505.32129475527 +0 0 + +0101101 +* +Ve +1e-07 +-7.3831532945 13.5147714531 0 +0 0 + +0101101 +* +Ve +1e-07 +7.3831532945 -13.5147714531 0 +0 0 + +0101101 +* +Ve +1e-07 +3.45186387795 -6.31859444561 0 +0 0 + +0101101 +* +Ve +1e-07 +-3.45186387795 6.31859444561 0 +0 0 + +0101101 +* +Ve +1e-07 +3.16420855479 -5.79204490848 0.6 +0 0 + +0101101 +* +Ve +1e-07 +-3.16420855479 5.79204490848 0.6 +0 0 + +0101101 +* +Ve +1e-07 +-3.16420855479 5.79204490848 2.8 +0 0 + +0101101 +* +Ve +1e-07 +3.16420855479 -5.79204490848 2.8 +0 0 + +0101101 +* +Ve +1.00000931000804e-07 +6430.18947349962 -152.353942639129 4445.90782668008 +0 0 + +0101101 +* +Ve +1.00000931000804e-07 +6435.56127465539 -157.395740690043 4447.98211415285 +0 0 + +0101101 +* +Ve +1.00000909938683e-07 +6381.56745452487 -126.865625694371 4409.81786581941 +0 0 + +0101101 +* +Ve +1.00000198951966e-07 +6439.55429844866 -163.342670482713 4447.63391229729 +0 0 + +0101101 +* +Ve +1.00000909605717e-07 +6432.99256059412 -83.2024751424518 4508.68272572281 +0 0 + +0101101 +* +Ve +1.00001819100419e-07 +6427.89801356429 -82.7576725660434 4502.988308721 +0 0 + +0101101 +* +Ve +0.000550097116054104 +6412.97952933715 -74.9372022866362 4491.91498179606 +0 0 + +0101101 +* +Ve +1.00001819100419e-07 +6436.50555467592 -81.1903009734046 4514.60231060694 +0 0 + +0101101 +* +Ve +1.00001094235813e-07 +6459.29264631024 -93.1356011907089 4531.51615463383 +0 0 + +0101101 +* +Ve +0.000147176562999176 +6476.61573686158 -129.953898222422 4520.53581600895 +0 0 + +0101101 +* +Ve +0.000147176562999176 +6483.61451013019 -155.242966596171 4507.14945116506 +0 0 + +0101101 +* +Ve +1.00000925343818e-07 +6483.71159411408 -156.852661792629 4505.88181774103 +0 0 + +0101101 +* +Ve +0.000550097116054104 +6399.96421230406 -69.465442510392 4481.09315167244 +0 0 + +0101101 +* +Ve +1.00000227373675e-07 +6465.30390478055 -137.323817365449 4500.70924581299 +0 0 + +0101101 +* +Ve +1.00000227373675e-07 +6474.18489571212 -141.97935237655 4507.30121015102 +0 0 + +0101101 +* +Ve +1.00001193822812e-07 +6429.77994105427 -118.701677321045 4474.34138846089 +0 0 + +0101101 +* +Ve +1.00001193711796e-07 +6417.93861981217 -112.49429730624 4465.55210267685 +0 0 + +0101101 +* +Ve +1.00000227373675e-07 +6364.23125527898 -67.6531440817013 4440.02898858053 +0 0 + +0101101 +* +Ve +1.00000056843419e-07 +6382.54975242032 -66.9023560841419 4462.52426630254 +0 0 + +0101101 +* +Ve +1.00000227373675e-07 +6355.10927517896 -80.3171280698723 4418.26451805585 +0 0 + +0101101 +* +Ve +1.00000326849658e-07 +6355.58264770428 -88.1658529530638 4412.08365473476 +0 0 + +0101101 +* +Ve +1.00000925343818e-07 +6478.02931361742 -170.532113506207 4487.34743616263 +0 0 + +0101101 +* +Ve +1.00001080024958e-07 +6466.19727124337 -177.309275516015 4467.40980531137 +0 0 + +0101101 +* +Ve +1.00000284217094e-07 +6444.64383464506 -142.452376836434 4471.65855133861 +0 0 + +0101101 +* +Ve +1.00001193711796e-07 +6454.70895770084 -147.728649849015 4479.12944425504 +0 0 + +0101101 +* +Ve +1.00001193822812e-07 +6442.65596457188 -109.492615816349 4497.61433154401 +0 0 + +0101101 +* +Ve +1.00000284217094e-07 +6452.72108762765 -114.76888882893 4505.08522446044 +0 0 + +0101101 +* +Ve +1.00001820764029e-07 +6387.56198298852 -94.9279428418648 4444.41651515181 +0 0 + +0101101 +* +Ve +1.00000911269327e-07 +6402.03486438912 -110.359517477023 4448.41705926717 +0 0 + +0101101 +* +Ve +1.40961161397861e-05 +-63.3801189832 -27.4193912828 7 +0 0 + +0101101 +* +Ve +8.25197284423225e-06 +-16.8129206538 -28.1935283908 7 +0 0 + +0101101 +* +Ve +1.50991509780834e-06 +-10.0500417363 -23.0000015099 7 +0 0 + +0101101 +* +Ve +1.47353993359151e-05 +-53.6384116116 23.1613367021 7 +0 0 + +0101101 +* +Ve +2.41813512096272e-06 +-26.4742074798 23.612876573 7 +0 0 + +0101101 +* +Ve +2.23812238144012e-06 +-10.0500417363 11 7 +0 0 + +0101101 +* +Ve +1.00001346361305e-07 +8.17561682539 11.0000000969 7 +0 0 + +0101101 +* +Ve +4.85179791956173e-05 +18.595795595 14.5678921097 7 +0 0 + +0101101 +* +Ve +9.78915945777831e-05 +53.4692286022 -15.5438598581 7 +0 0 + +0101101 +* +Ve +3.57702388541758e-06 +14.9819778151 -19.0864479255 7 +0 0 + +0101101 +* +Ve +2.12504818416707e-07 +1.94762488955 -13 7 +0 0 + +0101101 +* +Ve +2.05690205655841e-06 +-10.0500417363 -12.9999979431 7 +0 0 + +0101101 +* +Ve +2.61637537467713e-06 +-26.4742051493 -25.612877204 7 +0 0 + +0101101 +* +Ve +0.00112587558913171 +-53.6383974584 -25.1613334209 7 +0 0 + +0101101 +* +Ve +2.04518801056886e-06 +1.94762488955 -23 7 +0 0 + +0101101 +* +Ve +3.89399877296503e-06 +7.3147213727 -25.5061936553 7 +0 0 + +0101101 +* +Ve +0.000140504468508401 +62.1795402395 -20.4561415476 7 +0 0 + +0101101 +* +Ve +7.59962679524456e-05 +12.4663281178 22.4690972667 7 +0 0 + +0101101 +* +Ve +1.70641706663236e-06 +8.1756168254 20.9999982936 7 +0 0 + +0101101 +* +Ve +1.03725141244299e-06 +-10.0500417363 21 7 +0 0 + +0101101 +* +Ve +7.88856919964979e-06 +-16.8129282627 26.1935263512 7 +0 0 + +0101101 +* +Ve +1.45373227877628e-05 +-63.3801326675 25.4193944552 7 +0 0 + +0101101 +* +Ve +1.09681772921185e-05 +-67.2826849149 20.6366012954 7 +0 0 + +0101101 +* +Ve +2.61847261823001e-05 +-70.1993377411 16.0912726747 7 +0 0 + +0101101 +* +Ve +4.54417690769802e-06 +-63.1160101735 11.5459683188 7 +0 0 + +0101101 +* +Ve +2.65464597541343e-06 +-67.2826783569 -22.6365879043 7 +0 0 + +0101101 +* +Ve +2.47616247569155e-05 +-70.1993377411 -18.0912726864 7 +0 0 + +0101101 +* +Ve +0.00112587558913171 +-63.1160099201 -13.545968073 7 +0 0 + +0101101 +* +Ve +1e-07 +5.51339369395 -10.0921994617 -9.71445146547e-17 +0 0 + +0101101 +* +Ve +1e-07 +-5.51339369395 10.0921994617 -9.71445146547e-17 +0 0 + +0101101 +* +Ve +1e-07 +4.92164409007 -9.00900907752 -7 +0 0 + +0101101 +* +Ve +1e-07 +-4.92164409007 9.00900907752 -7 +0 0 + +0101101 +* +Ve +1e-07 +7.33521074064 -13.4270131969 -2.77555756156e-17 +0 0 + +0101101 +* +Ve +1e-07 +-7.33521074064 13.4270131969 -2.77555756156e-17 +0 0 + +0101101 +* +Ve +1e-07 +-5.84899157097 10.7065072551 0 +0 0 + +0101101 +* +Ve +1e-07 +5.84899157097 -10.7065072551 0 +0 0 + +0101101 +* +Ve +1e-07 +4.31482984744 -7.89824305701 4 +0 0 + +0101101 +* +Ve +1e-07 +4.31482984744 -7.89824305701 5 +0 0 + +0101101 +* +Ve +1e-07 +-4.31482984744 7.89824305701 4 +0 0 + +0101101 +* +Ve +1e-07 +-4.31482984744 7.89824305701 5 +0 0 + +0101101 +* +Ve +1e-07 +5.01147593305 -9.17344516311 7 +0 0 + +0101101 +* +Ve +2.63462588419505e-07 +-5.0114757053 9.17344528754 7 +0 0 + +0101101 +* +Ve +1e-07 +7.33521074064 -13.4270131969 1 +0 0 + +0101101 +* +Ve +1e-07 +-7.33521074064 13.4270131969 1 +0 0 + +0101101 +* +Ve +1e-07 +7.67080861767 -14.0413209902 1.5 +0 0 + +0101101 +* +Ve +1e-07 +-7.67080861767 14.0413209902 1.5 +0 0 + +0101101 +* +Ve +1e-07 +-7.57492350995 13.8658044779 1.5 +0 0 + +0101101 +* +Ve +1e-07 +7.57492350995 -13.8658044779 1.5 +0 0 + +0101101 +* +Ve +1e-07 +4.07511707814 -7.45945177607 3.13397459622 +0 0 + +0101101 +* +Ve +1e-07 +-4.07511707814 7.45945177607 3.13397459622 +0 0 + +0101101 +* +Ve +1e-07 +5.51339369395 -10.0921994617 0.4 +0 0 + +0101101 +* +Ve +1e-07 +-5.51339369395 10.0921994617 0.4 +0 0 + +0101101 +* +Ve +1e-07 +5.65722135553 -10.3554742303 0.7 +0 0 + +0101101 +* +Ve +1e-07 +-5.65722135553 10.3554742303 0.7 +0 0 + +0101101 +* +Ve +1e-07 +5.84899157097 -10.7065072551 0.4 +0 0 + +0101101 +* +Ve +1e-07 +-5.84899157097 10.7065072551 0.4 +0 0 + +0101101 +* +Ve +1e-07 +5.70516390939 -10.4432324865 0.7 +0 0 + +0101101 +* +Ve +1e-07 +-5.70516390939 10.4432324865 0.7 +0 0 + +0101101 +* +Ve +1e-07 +7.67080861767 -14.0413209902 5.8 +0 0 + +0101101 +* +Ve +1e-07 +-7.67080861767 14.0413209902 5.8 +0 0 + +0101101 +* +Ve +1e-07 +-7.09549797134 12.988221916 7 +0 0 + +0101101 +* +Ve +1e-07 +7.09549797134 -12.988221916 7 +0 0 + +0101101 +* +Ve +1e-07 +4.123059632 -7.54721003226 0 +0 0 + +0101101 +* +Ve +1e-07 +-4.123059632 7.54721003226 0 +0 0 + +0101101 +* +Ve +1e-07 +3.74264917236 -6.85087335668 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-3.74264917236 6.85087335668 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +5.41750858623 -9.91668294936 0 +0 0 + +0101101 +* +Ve +1e-07 +-5.41750858623 9.91668294936 0 +0 0 + +0101101 +* +Ve +1e-07 +-4.45865750902 8.16151782558 0 +0 0 + +0101101 +* +Ve +1e-07 +4.45865750902 -8.16151782558 0 +0 0 + +0101101 +* +Ve +1e-07 +3.35597877023 -6.14307793323 4 +0 0 + +0101101 +* +Ve +1e-07 +3.35597877023 -6.14307793323 4.4 +0 0 + +0101101 +* +Ve +1e-07 +-3.35597877023 6.14307793323 4 +0 0 + +0101101 +* +Ve +1.58298023783649e-07 +-3.35597877023 6.14307793323 4.4 +0 0 + +0101101 +* +Ve +1e-07 +3.91329563872 -7.16323961811 6 +0 0 + +0101101 +* +Ve +5.66655918190863e-07 +-3.91329530182 7.16323980216 6 +0 0 + +0101101 +* +Ve +1e-07 +5.41750858623 -9.91668294936 1 +0 0 + +0101101 +* +Ve +1e-07 +-5.41750858623 9.91668294936 1 +0 0 + +0101101 +* +Ve +1e-07 +5.75310646325 -10.5309907427 1.5 +0 0 + +0101101 +* +Ve +1e-07 +-5.75310646325 10.5309907427 1.5 +0 0 + +0101101 +* +Ve +1e-07 +-5.65722135553 10.3554742303 1.5 +0 0 + +0101101 +* +Ve +1e-07 +5.65722135553 -10.3554742303 1.5 +0 0 + +0101101 +* +Ve +1e-07 +3.11626600093 -5.70428665229 3.13397459622 +0 0 + +0101101 +* +Ve +1e-07 +-3.11626600093 5.70428665229 3.13397459622 +0 0 + +0101101 +* +Ve +1e-07 +4.123059632 -7.54721003226 0.4 +0 0 + +0101101 +* +Ve +1e-07 +-4.123059632 7.54721003226 0.4 +0 0 + +0101101 +* +Ve +1e-07 +4.26688729358 -7.81048480082 0.7 +0 0 + +0101101 +* +Ve +1e-07 +-4.26688729358 7.81048480082 0.7 +0 0 + +0101101 +* +Ve +1e-07 +4.45865750902 -8.16151782558 0.4 +0 0 + +0101101 +* +Ve +1e-07 +-4.45865750902 8.16151782558 0.4 +0 0 + +0101101 +* +Ve +1e-07 +4.31482984744 -7.89824305701 0.7 +0 0 + +0101101 +* +Ve +1e-07 +-4.31482984744 7.89824305701 0.7 +0 0 + +0101101 +* +Ve +1e-07 +5.75310646325 -10.5309907427 4.8 +0 0 + +0101101 +* +Ve +1e-07 +-5.75310646325 10.5309907427 4.8 +0 0 + +0101101 +* +Ve +1e-07 +-5.17779581693 9.47789166842 6 +0 0 + +0101101 +* +Ve +1e-07 +5.17779581693 -9.47789166842 6 +0 0 + +0101101 +* +Ve +1.0116662590699e-07 +-47.898243057 -26.3148298474 -1.33226762955e-14 +0 0 + +0101101 +* +Ve +1.0116662590699e-07 +-32.101756943 -17.6851701526 -1.33226762955e-14 +0 0 + +0101101 +* +Ve +1.01166633012417e-07 +-47.898243057 15.6851701526 -1.33226762955e-14 +0 0 + +0101101 +* +Ve +1.01166633012417e-07 +-32.101756943 24.3148298474 -1.33226762955e-14 +0 0 + +0101101 +* +Ve +1.02476319593825e-07 +98.1225681457148 18.0046571609766 -47.4971493131035 +0 0 + +0101101 +* +Ve +1.01555513051699e-07 +22.4690092573 -9.75310646325 -7.1054273576e-15 +0 0 + +0101101 +* +Ve +1.01555513051699e-07 +43.5309907427 1.75310646325 -7.1054273576e-15 +0 0 + +0101101 +* +Ve +1e-07 +-69 16 0 +0 0 + +0101101 +* +Ve +1e-07 +-69 16 7 +0 0 + +0101101 +* +Ve +1e-07 +-61 16 0 +0 0 + +0101101 +* +Ve +1e-07 +-61 16 7 +0 0 + +0101101 +* +Ve +1e-07 +-61 -18 7 +0 0 + +0101101 +* +Ve +1e-07 +-69 -18 7 +0 0 + +0101101 +* +Ve +1e-07 +53.4997515897 -45 0 +0 0 + +0101101 +* +Ve +1e-07 +86.5 -12 0 +0 0 + +0101101 +* +Ve +1e-07 +86.5 -1.99851834808 0 +0 0 + +0101101 +* +Ve +1e-07 +72.706232063 20.9582051707 0 +0 0 + +0101101 +* +Ve +1e-07 +47.0829690879 34.5823357644 0 +0 0 + +0101101 +* +Ve +7.96200796707952e-06 +23 43.2221811833 0 +0 0 + +0101101 +* +Ve +1e-07 +5.3 45 0 +0 0 + +0101101 +* +Ve +1e-07 +-21.9289321881 47.9289321881 0 +0 0 + +0101101 +* +Ve +1e-07 +-27 53 0 +0 0 + +0101101 +* +Ve +1e-07 +-78.862687877 16.500914749 0 +0 0 + +0101101 +* +Ve +2.29990299937802e-05 +-86.5 -11.9487958602 0 +0 0 + +0101101 +* +Ve +1e-07 +-86.5 -14 0 +0 0 + +0101101 +* +Ve +1e-07 +-77.4202418693 -35.9202418693 0 +0 0 + +0101101 +* +Ve +1e-07 +-60.3404837385 -53 0 +0 0 + +0101101 +* +Ve +1e-07 +-24.3404837385 -53 0 +0 0 + +0101101 +* +Ve +1e-07 +-19.2694159267 -47.9289321881 0 +0 0 + +0101101 +* +Ve +1e-07 +-77.4589041096 -1 0 +0 0 + +0101101 +* +Ve +1e-07 +-59.4589041096 -1 0 +0 0 + +0101101 +* +Ve +1e-07 +-62.4589041096 -1 3 +0 0 + +0101101 +* +Ve +1e-07 +-74.4589041096 -1 3 +0 0 + +0101101 +* +Ve +1e-07 +-17.4589041096 -1 0 +0 0 + +0101101 +* +Ve +1e-07 +4.54109589041 -1 0 +0 0 + +0101101 +* +Ve +1e-07 +1.54109589041 -1 3 +0 0 + +0101101 +* +Ve +1e-07 +-14.4589041096 -1 3 +0 0 + +0101101 +* +Ve +1e-07 +-32.952835102 -18.1501162699 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-47.047164898 -25.8498837301 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-32.952835102 23.8498837301 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-47.047164898 16.1501162699 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-46.8 -22 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-33.2 -22 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-46.8 20 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-33.2 20 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-69 -18 0 +0 0 + +0101101 +* +Ve +1e-07 +-61 -18 0 +0 0 + +0101101 +* +Ve +1e-07 +-12.1983481148 -45 0 +0 0 + +0101101 +* +Ve +1e-07 +-57.7899311821 53 0 +0 0 + +0101101 +* +Ve +1e-07 +-14.8578643763 45 0 +0 0 + +0101101 +* +Ve +1.01828929896419e-07 +20.1225681453543 0.00465716255093085 -47.4971493159936 +0 0 + +0101101 +* +Ve +1.01828929896419e-07 +20.1225681462601 42.0046571625509 -47.4971493105554 +0 0 + +0101101 +* +Ve +8.24914082839309e-06 +-32.6 20 20.5 +0 0 + +0101101 +* +Ve +1.00958159773745e-07 +-47.4 20 20.5 +0 0 + +0101101 +* +Ve +1.00958159773745e-07 +-47.4 -22 20.5 +0 0 + +0101101 +* +Ve +8.24914082839309e-06 +-32.6 -22 20.5 +0 0 + +0101101 +* +Ve +1.02770885743075e-07 +100.397568145611 18.0046571583072 -26.9971493131035 +0 0 + +0101101 +* +Ve +1.01218481315846e-07 +37.5066000629 -12.2492760818 20.5 +0 0 + +0101101 +* +Ve +3.52178118692745e-05 +28.4933999371 4.24927608177 20.5 +0 0 + +0101101 +* +Ve +1e-07 +23.706941125 -9.07682120168 8 +0 0 + +0101101 +* +Ve +1e-07 +42.293058875 1.07682120168 8 +0 0 + +0101101 +* +Ve +1e-07 +37.2189447397 -11.7227265446 8 +0 0 + +0101101 +* +Ve +1e-07 +28.7810552603 3.72272654464 8 +0 0 + +0101101 +* +Ve +9.66590793534902e-05 +-77.4202418693 -35.9202418693 52 +0 0 + +0101101 +* +Ve +9.66590793534902e-05 +-86.5 -14 52 +0 0 + +0101101 +* +Ve +1e-07 +-77.365502635 -35.9749811036 52 +0 0 + +0101101 +* +Ve +1e-07 +-55.5 -45 52 +0 0 + +0101101 +* +Ve +0.000248410548413188 +53.4997515897 -45 52 +0 0 + +0101101 +* +Ve +0.000102894900285201 +86.5 -12 52 +0 0 + +0101101 +* +Ve +9.45558587697886e-05 +86.5 -1.99851834808 52 +0 0 + +0101101 +* +Ve +9.45558587697886e-05 +72.706232063 20.9582051707 52 +0 0 + +0101101 +* +Ve +0.000236848210102444 +47.0829690879 34.5823357644 52 +0 0 + +0101101 +* +Ve +0.000236848210102444 +23 43.2221732213 52 +0 0 + +0101101 +* +Ve +1e-07 +5.3 45 52 +0 0 + +0101101 +* +Ve +1e-07 +-29.5 45 52 +0 0 + +0101101 +* +Ve +1e-07 +-86.5 -12 52 +0 0 + +0101101 +* +Ve +1e-07 +-84.5 -12 52 +0 0 + +0101101 +* +Ve +1e-07 +-84.5 -14 52 +0 0 + +0101101 +* +Ve +1e-07 +-29.5 43 52 +0 0 + +0101101 +* +Ve +1e-07 +5.3 43 52 +0 0 + +0101101 +* +Ve +1e-07 +46.1440259624 32.8164405787 52 +0 0 + +0101101 +* +Ve +1e-07 +71.7672889374 19.192309985 52 +0 0 + +0101101 +* +Ve +1e-07 +84.4999999999 -1.99851289317 52 +0 0 + +0101101 +* +Ve +1e-07 +84.5 -12 52 +0 0 + +0101101 +* +Ve +1e-07 +53.5 -43 52 +0 0 + +0101101 +* +Ve +1e-07 +-55.5 -43 52 +0 0 + +0101101 +* +Ve +1e-07 +44.0267873879 -24.1843989235 20.5 +0 0 + +0101101 +* +Ve +1e-07 +21.9732126121 16.1843989235 20.5 +0 0 + +0101101 +* +Ve +1e-07 +28.7810552603 3.72272654464 19.9 +0 0 + +0101101 +* +Ve +1e-07 +37.2189447397 -11.7227265446 19.9 +0 0 + +0101101 +* +Ve +1e-07 +-33.2 20 19.9 +0 0 + +0101101 +* +Ve +1e-07 +-46.8 20 19.9 +0 0 + +0101101 +* +Ve +1e-07 +-57 -22 20.5 +0 0 + +0101101 +* +Ve +1e-07 +-23 -22 20.5 +0 0 + +0101101 +* +Ve +1e-07 +-57 20 20.5 +0 0 + +0101101 +* +Ve +1e-07 +-23 20 20.5 +0 0 + +0101101 +* +Ve +1.01463135390622e-07 +17.2975681451971 0.00465715989657944 -26.9971493159936 +0 0 + +0101101 +* +Ve +1.01463135390622e-07 +17.2975681461029 42.0046571598966 -26.9971493105554 +0 0 + +0101101 +* +Ve +1e-07 +-33.2 -22 19.9 +0 0 + +0101101 +* +Ve +1e-07 +-46.8 -22 19.9 +0 0 + +0101101 +* +Ve +1e-07 +44.2665001572 -24.6231902044 19.8 +0 0 + +0101101 +* +Ve +1e-07 +44.5062129265 -25.0619814854 20.3 +0 0 + +0101101 +* +Ve +1e-07 +21.4937870735 17.0619814854 20.3 +0 0 + +0101101 +* +Ve +1e-07 +21.7334998428 16.6231902044 19.8 +0 0 + +0101101 +* +Ve +1e-07 +44.0267873879 -24.1843989235 20.3 +0 0 + +0101101 +* +Ve +1e-07 +21.9732126121 16.1843989235 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-22 20 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-22.5 20 19.8 +0 0 + +0101101 +* +Ve +1e-07 +-22 -22 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-22.5 -22 19.8 +0 0 + +0101101 +* +Ve +1e-07 +-58 -22 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-57.5 -22 19.8 +0 0 + +0101101 +* +Ve +1e-07 +-58 20 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-57.5 20 19.8 +0 0 + +0101101 +* +Ve +1e-07 +-57 20 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-23 20 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-23 -22 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-57 -22 20.3 +0 0 + +0101101 +* +Ve +0.000713251616780183 +-55.5 -45 50.9999999935 +0 0 + +0101101 +* +Ve +0.000713251616780183 +-77.4202418693 -35.9202418693 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +3.04109589041 -1 32.3 +0 0 + +0101101 +* +Ve +1e-07 +-15.9589041096 -1 32.3 +0 0 + +0101101 +* +Ve +1e-07 +-15.9589041096 -1 33.5 +0 0 + +0101101 +* +Ve +1e-07 +3.04109589041 -1 33.5 +0 0 + +0101101 +* +Ve +1e-07 +1.54109589041 -1 32.3 +0 0 + +0101101 +* +Ve +1e-07 +-14.4589041096 -1 32.3 +0 0 + +0101101 +* +Ve +1e-07 +-22 19.9999999999 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-22 -22 33.5 +0 0 + +0101101 +* +Ve +3.78071420996286e-05 +16.0913576765 -21.0322580645 33.5 +0 0 + +0101101 +* +Ve +1e-07 +11.1596703322 -19 33.5 +0 0 + +0101101 +* +Ve +1e-07 +21.4937870735 17.0619814854 33.5 +0 0 + +0101101 +* +Ve +2.94745543770314e-05 +22.7000247518 17.6774193548 33.5 +0 0 + +0101101 +* +Ve +1e-07 +19.6958653043 17 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-15.3220746415 17 33.5 +0 0 + +0101101 +* +Ve +3.30224838630722e-05 +-22.2318937419 22.88 33.5 +0 0 + +0101101 +* +Ve +3.30224830883139e-05 +-22.2318937419 -24.88 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-15.3220746415 -19 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-58 -22 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-58 19.9999999995 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-55.5 -43 38.8 +0 0 + +0101101 +* +Ve +1e-07 +53.5 -43 38.8 +0 0 + +0101101 +* +Ve +1e-07 +-84.5 -14 38.8 +0 0 + +0101101 +* +Ve +1e-07 +84.5 -12 38.8 +0 0 + +0101101 +* +Ve +1e-07 +-84.5 -12 38.8 +0 0 + +0101101 +* +Ve +4.58860415643713e-07 +84.5 -1.99851289317 38.8 +0 0 + +0101101 +* +Ve +2.3959515903456e-07 +71.7672889374 19.1923099849 38.8 +0 0 + +0101101 +* +Ve +1e-07 +46.1440259624 32.8164405787 38.8 +0 0 + +0101101 +* +Ve +1e-07 +5.3 43 38.8 +0 0 + +0101101 +* +Ve +1e-07 +-29.5 43 38.8 +0 0 + +0101101 +* +Ve +1e-07 +5.3 42.2 38 +0 0 + +0101101 +* +Ve +1e-07 +45.7684487121 32.1100825044 38 +0 0 + +0101101 +* +Ve +2.3959515903456e-07 +71.3917116872 18.4859519107 38 +0 0 + +0101101 +* +Ve +4.58860415643713e-07 +83.6999999999 -1.99851071121 38 +0 0 + +0101101 +* +Ve +1e-07 +83.7 -12 38 +0 0 + +0101101 +* +Ve +1e-07 +53.5 -42.2 38 +0 0 + +0101101 +* +Ve +1e-07 +-55.5 -42.2 38 +0 0 + +0101101 +* +Ve +1e-07 +-83.7 -14 38 +0 0 + +0101101 +* +Ve +1e-07 +-83.7 -12 38 +0 0 + +0101101 +* +Ve +1e-07 +-29.5 42.2 38 +0 0 + +0101101 +* +Ve +1e-07 +-22.2318937419 22.88 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-15.3220746415 17 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-15.3220746415 -19 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-22.2318937419 -24.88 37.6 +0 0 + +0101101 +* +Ve +1e-07 +44.5062129265 -25.0619814854 37.6 +0 0 + +0101101 +* +Ve +1e-07 +22.7000247518 17.6774193548 37.6 +0 0 + +0101101 +* +Ve +1e-07 +19.6958653043 17 37.6 +0 0 + +0101101 +* +Ve +1e-07 +11.1596703322 -19 37.6 +0 0 + +0101101 +* +Ve +1e-07 +16.0913576765 -21.0322580645 37.6 +0 0 + +0101101 +* +Ve +3.10235130105838e-05 +-57.9855942354 -22.72 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-57.9855942354 -22.72 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-64.9799919936 -16 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-64.9799919936 -16 37.6 +0 0 + +0101101 +* +Ve +3.1023396466423e-05 +-57.9855942354 20.72 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-57.9855942354 20.72 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-64.9799919936 14 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-64.9799919936 14 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-73.88854382 -16 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-73.88854382 -16 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-77.2958855 -14.0952380952 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-77.2958855 -14.0952380952 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-73.88854382 14 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-73.88854382 14 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-77.2958855 12.0952380952 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-77.2958855 12.0952380952 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-58.3852741073 -22.736 38 +0 0 + +0101101 +* +Ve +1e-07 +-64.9799919936 -16.4 38 +0 0 + +0101101 +* +Ve +1e-07 +-73.88854382 -16.4 38 +0 0 + +0101101 +* +Ve +1e-07 +-77.636619668 -14.3047619048 38 +0 0 + +0101101 +* +Ve +1e-07 +-77.636619668 12.3047619047 38 +0 0 + +0101101 +* +Ve +1e-07 +-73.88854382 14.4 38 +0 0 + +0101101 +* +Ve +1e-07 +-64.9799919936 14.4 38 +0 0 + +0101101 +* +Ve +1e-07 +-58.3852741073 20.736 38 +0 0 + +0101101 +* +Ve +1e-07 +-21.8370469361 22.944 38 +0 0 + +0101101 +* +Ve +1e-07 +-15.3220746415 17.4 38 +0 0 + +0101101 +* +Ve +1e-07 +19.6958653043 17.4 38 +0 0 + +0101101 +* +Ve +1e-07 +22.5283584976 18.0387096774 38 +0 0 + +0101101 +* +Ve +1e-07 +44.6979831419 -25.4130145101 38 +0 0 + +0101101 +* +Ve +1e-07 +15.8095469711 -21.3161290323 38 +0 0 + +0101101 +* +Ve +1e-07 +11.1596703322 -19.4 38 +0 0 + +0101101 +* +Ve +1e-07 +-15.3220746415 -19.4 38 +0 0 + +0101101 +* +Ve +1e-07 +-21.8370469361 -24.944 38 +0 0 + +0101101 +* +Ve +1e-07 +-60.9589041096 -1 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-75.9589041096 -1 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-60.9589041096 -1 32.3 +0 0 + +0101101 +* +Ve +1e-07 +-75.9589041096 -1 32.3 +0 0 + +0101101 +* +Ve +1e-07 +-74.4589041096 -1 32.3 +0 0 + +0101101 +* +Ve +1e-07 +-62.4589041096 -1 32.3 +0 0 + +0101101 +* +Ve +0.000371546529634028 +5.3 45 50.9999999935 +0 0 + +0101101 +* +Ve +0.000371546529634028 +23 43.2221732213 50.9999999935 +0 0 + +0101101 +* +Ve +0.0029973161977681 +-86.5 -12 50.9999999935 +0 0 + +0101101 +* +Ve +0.0029973161977681 +-29.5 45 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-12.1983481148 -45 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-19.2694159267 -47.9289321881 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +53.4997515897 -45 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +53.4997515897 -45 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-24.3404837385 -53 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-21.9289321881 47.9289321881 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-14.8578643763 45 23.4999999945 +0 0 + +0101101 +* +Ve +0.000371546416342552 +5.3 45 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-27 53 23.4999999945 +0 0 + +0101101 +* +Ve +0.000144415167202496 +-78.862687877 16.500914749 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-57.7899311821 53 23.4999999945 +0 0 + +0101101 +* +Ve +0.000144415167202496 +-86.5 -11.9487958602 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-86.5 -14 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-86.5 -14 23.4999999945 +0 0 + +0101101 +* +Ve +0.000371546416342552 +23 43.2221811833 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +47.0829690879 34.5823357644 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +72.706232063 20.9582051707 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +72.706232063 20.9582051707 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +47.0829690879 34.5823357644 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +86.5 -1.99851834808 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +86.5 -1.99851834808 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +86.5 -12 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +86.5 -12 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-77.4202418693 -35.9202418693 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-60.3404837385 -53 23.4999999945 +0 0 + +0101101 +* +Ve +1.40961161397861e-05 +-63.3801189832 -27.4193912828 13 +0 0 + +0101101 +* +Ve +8.25197284423225e-06 +-16.8129206538 -28.1935283908 13 +0 0 + +0101101 +* +Ve +1.50991509780834e-06 +-10.0500417363 -23.0000015099 13 +0 0 + +0101101 +* +Ve +1.47353993359151e-05 +-53.6384116116 23.1613367021 13 +0 0 + +0101101 +* +Ve +2.41813512096272e-06 +-26.4742074798 23.612876573 13 +0 0 + +0101101 +* +Ve +2.23812238144012e-06 +-10.0500417363 11 13 +0 0 + +0101101 +* +Ve +1e-07 +8.17561682539 11.0000000969 13 +0 0 + +0101101 +* +Ve +4.85179791956173e-05 +18.595795595 14.5678921097 13 +0 0 + +0101101 +* +Ve +9.78915945777831e-05 +53.4692286022 -15.5438598581 13 +0 0 + +0101101 +* +Ve +3.57702388541758e-06 +14.9819778151 -19.0864479255 13 +0 0 + +0101101 +* +Ve +2.12504818416707e-07 +1.94762488955 -13 13 +0 0 + +0101101 +* +Ve +2.05690205655841e-06 +-10.0500417363 -12.9999979431 13 +0 0 + +0101101 +* +Ve +2.61637537467713e-06 +-26.4742051493 -25.612877204 13 +0 0 + +0101101 +* +Ve +1.4535112141792e-05 +-53.6383974584 -25.1613334209 13 +0 0 + +0101101 +* +Ve +2.04518801056886e-06 +1.94762488955 -23 13 +0 0 + +0101101 +* +Ve +3.89399877296503e-06 +7.3147213727 -25.5061936553 13 +0 0 + +0101101 +* +Ve +0.000140504468508401 +62.1795402395 -20.4561415476 13 +0 0 + +0101101 +* +Ve +7.59962679524456e-05 +12.4663281178 22.4690972667 13 +0 0 + +0101101 +* +Ve +1.70641706663236e-06 +8.1756168254 20.9999982936 13 +0 0 + +0101101 +* +Ve +1.03725141244299e-06 +-10.0500417363 21 13 +0 0 + +0101101 +* +Ve +7.88856919964979e-06 +-16.8129282627 26.1935263512 13 +0 0 + +0101101 +* +Ve +1.45373227877628e-05 +-63.3801326675 25.4193944552 13 +0 0 + +0101101 +* +Ve +1e-07 +-67.2826803448 20.6365913247 13 +0 0 + +0101101 +* +Ve +2.61847261823001e-05 +-70.1993377411 16.0912726747 13 +0 0 + +0101101 +* +Ve +1e-07 +-63.1160120669 11.5459724497 13 +0 0 + +0101101 +* +Ve +1e-07 +-67.282679463 -22.6365903175 13 +0 0 + +0101101 +* +Ve +2.47616247640209e-05 +-70.1993377411 -18.0912726864 13 +0 0 + +0101101 +* +Ve +1e-07 +-63.116011955 -13.5459725127 13 +0 0 + +0101101 +* +Ve +1e-07 +-13.918131324 -107.60845785 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +26.9463390627 -111.816453577 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +26.9463390627 -111.816453577 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +-13.918131324 -107.60845785 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +19.2519069336 -111.02412378 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +19.2519069357 -111.02412378 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-7.6060753471 -108.258438244 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-7.60607535185 -108.258438244 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +87.4999999998 -28.1011259381 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +87.4999999998 -28.1011259381 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +87.4999999998 9.78680670616 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +87.4999999998 9.78680670616 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +-164.725782427 -10.1239633345 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +-154.507054498 -16.7295136466 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +-164.725782427 -10.1239633345 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-154.507054498 -16.7295136466 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-160.470729776 31.1974838296 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-160.470729776 31.1974838296 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +-161.199165614 24.1235354038 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +-161.199165614 24.1235354054 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-163.759985554 -0.744966704868 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +-163.759985554 -0.744966709209 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-150.035529897 36.0902916054 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-150.035529897 36.0902916054 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +52.734826902 104.680750665 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +6.42273519593 109.449712116 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +6.42273519593 109.449712116 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +52.734826902 104.680750665 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +43.5765973829 105.62381417 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +12.6900722254 108.804336629 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +43.5765973847 105.62381417 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +12.6900722199 108.804336631 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +18.1720364778 68.8390811313 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +18.1720364714 68.8390811331 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +26.2864929577 69.5497187232 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +26.2864929577 69.5497187232 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +18.310383011 70.1900120019 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +27.2234599515 69.858278226 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +27.2234599506 69.8582782256 51.000000003 +0 0 + +0101101 +* +Ve +1e-07 +19.0988811881 91.3755089938 51.000000003 +0 0 + +0101101 +* +Ve +1e-07 +19.0988811885 91.375508994 41.9999999963 +0 0 + +0101101 +* +Ve +5.66660184374918e-05 +23.7765141778 93.1417120015 50.9999999941 +0 0 + +0101101 +* +Ve +1e-07 +23.7765141778 93.1417120015 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +32.8343241681 72.0247748446 41.9999999963 +0 0 + +0101101 +* +Ve +5.66660184374918e-05 +31.9011446799 71.6245007695 50.9999999979 +0 0 + +0101101 +* +Ve +1e-07 +31.9011446799 71.6245007695 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +32.8343241719 72.0247748465 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +41.1491691016 81.9203816206 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +41.1491691053 81.9203816209 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +9.85083089407 81.0796183773 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +9.85083090528 81.0796183766 32.9999999988 +0 0 + +0101101 +* +Ve +0.000615204615200856 +28.5386255935 101.847047723 41.9999999963 +0 0 + +0101101 +* +Ve +0.000615204615200856 +26.3097969048 98.5255536806 41.9999999963 +0 0 + +0101101 +* +Ve +0.000615204615486993 +28.5386255935 101.847047723 32.9999999988 +0 0 + +0101101 +* +Ve +0.000615204615486993 +26.3097969048 98.5255536806 32.9999999988 +0 0 + +0101101 +* +Ve +2.46374048269097e-05 +30.3797274113 80.40992642 32.9999999988 +0 0 + +0101101 +* +Ve +2.46374048269097e-05 +20.6202725925 82.59007358 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +20.6202725925 82.59007358 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +30.3797274113 80.40992642 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +26.3097969048 98.5255536806 49.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +28.5386255935 101.847047723 49.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +26.3097969048 98.5255536806 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +28.5386255935 101.847047723 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +3.6202725862 -82.4099264176 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +3.6202725862 -82.4099264176 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +13.379727405 -84.5900735775 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +13.379727405 -84.5900735775 23.4999999945 +0 0 + +0101101 +* +Ve +5.66660233059852e-05 +19.9382588831 -84.6900561848 50.9999999958 +0 0 + +0101101 +* +Ve +1e-07 +19.9382588831 -84.6900561848 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +-2.9382588831 -82.3099438152 41.9999999963 +0 0 + +0101101 +* +Ve +5.66660233059852e-05 +-2.9382588831 -82.3099438152 50.9999999921 +0 0 + +0101101 +* +Ve +1e-07 +8.69021268795 -100.646112499 49.9999999968 +0 0 + +0101101 +* +Ve +1e-07 +8.69021268795 -100.646112499 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +4.72463995369 -101.169785001 49.9999999968 +0 0 + +0101101 +* +Ve +1e-07 +4.72463995369 -101.169785001 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +8.69021268795 -100.646112499 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +8.69021268796 -100.646112499 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +4.72463995369 -101.169785001 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +4.72463995369 -101.169785001 23.4999999945 +0 0 + +0101101 +* +Ve +0.000476662432846974 +-4.92975828651 -82.1246482233 41.9999999963 +0 0 + +0101101 +* +Ve +0.000476662432846974 +9.87535177534 -70.0702417176 41.9999999963 +0 0 + +0101101 +* +Ve +0.000476662362377475 +21.9297582795 -84.8753517757 41.9999999963 +0 0 + +0101101 +* +Ve +4.92487888952724e-05 +21.9297632968 -84.8753027832 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +9.87535177307 -70.0702417174 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-4.92975828409 -82.1246482231 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-142.379727409 10.221242007 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-142.379727409 10.221242007 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-132.62027259 8.04109484708 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-132.62027259 8.04109484708 23.4999999945 +0 0 + +0101101 +* +Ve +0.000323272113850789 +-125.003015794 8.85660354182 38.9999999959 +0 0 + +0101101 +* +Ve +1.34271532771821e-06 +-125.065035524 7.85772482306 38.9999999963 +0 0 + +0101101 +* +Ve +0.000323272113850789 +-136.226556397 21.5661328933 38.999999994 +0 0 + +0101101 +* +Ve +0.00035092586375791 +-136.226556396 21.5661328978 41.9999999958 +0 0 + +0101101 +* +Ve +1e-07 +-149.93292772 10.4243460221 41.9999999963 +0 0 + +0101101 +* +Ve +6.1593797633783e-05 +-149.93292772 10.4243460221 50.9999999926 +0 0 + +0101101 +* +Ve +6.1593797633783e-05 +-125.067072279 7.83799083202 50.9999999908 +0 0 + +0101101 +* +Ve +1e-07 +-125.067072279 7.83799083202 39.0000000062 +0 0 + +0101101 +* +Ve +0.000114729067521325 +-138.773443598 -3.30379604423 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +-138.773443598 -3.30379604424 38.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +-125.20676677 6.86700922781 38.9999999962 +0 0 + +0101101 +* +Ve +0.000615204692372754 +-157.648508202 12.0019382692 41.9999999963 +0 0 + +0101101 +* +Ve +0.000615204692372754 +-154.156869149 10.0504115014 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +-138.773443597 -3.30379604882 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-125.20676677 6.86700922781 32.9999999941 +0 0 + +0101101 +* +Ve +1e-07 +-125.065035524 7.85772482306 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-125.003015794 8.85660354182 32.9999999939 +0 0 + +0101101 +* +Ve +1e-07 +-136.226556399 21.5661328962 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-157.648508202 12.0019382692 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-154.156869149 10.0504115014 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-154.156869149 10.0504115014 49.9999999924 +0 0 + +0101101 +* +Ve +1e-07 +-157.648508202 12.0019382692 49.9999999924 +0 0 + +0101101 +* +Ve +1e-07 +-154.156869149 10.0504115014 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-157.648508202 12.0019382692 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-9.17847359699 87.0686582814 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-9.17847359699 87.0686582814 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-25.0117471993 73.726014056 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-25.0117471993 73.726014056 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-124.373731825 33.4477824623 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-124.373731825 33.4477824623 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-103.295344286 37.0207667209 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-103.295344286 37.0207667209 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-142.148661989 -18.0021121258 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-142.148661989 -18.0021121258 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-124.531143095 -24.1990590064 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-124.531143095 -24.1990590064 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-14.7270686351 -105.27511584 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-30.8054587727 -84.7848508575 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-30.8054587727 -84.7848508575 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-14.7270686351 -105.27511584 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +43.4793395049 1.66459569117 9.5 +0 0 + +0101101 +* +Ve +1e-07 +57.5206604951 9.33540430883 9.5 +0 0 + +0101101 +* +Ve +5.99999859423481e-07 +6492.28246063021 -145.047517629392 4446.23972842109 +0 0 + +0101101 +* +Ve +6.00001598079206e-07 +6411.61345966845 -102.759741278559 4386.36271901736 +0 0 + +0101101 +* +Ve +6.00000384682402e-07 +6387.99107514439 -67.5782173078896 4388.42265117616 +0 0 + +0101101 +* +Ve +6.00001086559442e-07 +6387.51777274601 -59.7306551602504 4394.60259884411 +0 0 + +0101101 +* +Ve +5.99999866292542e-07 +6395.58723251711 -48.5279487953552 4413.85576134175 +0 0 + +0101101 +* +Ve +6.0000047986014e-07 +6413.9078066696 -47.7770756708447 4436.35358965208 +0 0 + +0101101 +* +Ve +5.99999869727073e-07 +6443.31186076904 -55.5410843609762 4464.75360687052 +0 0 + +0101101 +* +Ve +6.00000476425613e-07 +6469.06457346544 -69.0410030651709 4483.86869943284 +0 0 + +0101101 +* +Ve +5.99999859423481e-07 +6511.58486560874 -132.367746212376 4480.16082154701 +0 0 + +0101101 +* +Ve +6.00000469556559e-07 +6511.67952608841 -133.937258641904 4478.92483201341 +0 0 + +0101101 +* +Ve +1e-07 +-28.5 -12.5 8.5 +0 0 + +0101101 +* +Ve +1e-07 +-16.5 -12.5 8.5 +0 0 + +0101101 +* +Ve +1e-07 +-28.5 29.5 8.5 +0 0 + +0101101 +* +Ve +1e-07 +-16.5 29.5 8.5 +0 0 + +0101101 +* +Ve +4.43472682381836e-05 +2.04109589041 8.5 5 +0 0 + +0101101 +* +Ve +4.43472682381836e-05 +20.0410958904 8.5 5 +0 0 + +0101101 +* +Ve +1.00001423995717e-07 +1.67798938511 -3.07153896662 0 +0 0 + +0101101 +* +Ve +1.00001423995717e-07 +-1.67798938511 3.07153896662 0 +0 0 + +0101101 +* +Ve +3.15359982666418e-05 +-49.9589041096 2.1 6 +0 0 + +0101101 +* +Ve +3.15359982666418e-05 +-49.9589236513 14.9 6 +0 0 + +0101101 +* +Ve +3.15356724842967e-05 +-51.9589041096 2.1 6 +0 0 + +0101101 +* +Ve +3.15356724842967e-05 +-51.958923639 14.9 6 +0 0 + +0101101 +* +Ve +1e-07 +28.2359033419 -8.5 0 +0 0 + +0101101 +* +Ve +1e-07 +33.9264072801 -10.8769968051 0 +0 0 + +0101101 +* +Ve +3.12784270740007e-05 +33.9264072801 -10.8769968051 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +28.2359033419 -8.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +2.48179337037 -8.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +2.48179337037 -8.5 0 +0 0 + +0101101 +* +Ve +1e-07 +-5.41758793251 -15.2351778656 0 +0 0 + +0101101 +* +Ve +3.38586879989101e-05 +-5.41758793251 -15.2351778656 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-47.7802294293 -5.5 0 +0 0 + +0101101 +* +Ve +1e-07 +-39.7864809932 -13.1837944664 0 +0 0 + +0101101 +* +Ve +3.9333488715623e-05 +-39.7864809932 -13.1837944664 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-47.7802294293 -5.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-47.7802294293 22.5 0 +0 0 + +0101101 +* +Ve +1e-07 +-39.7864809932 30.1837944664 0 +0 0 + +0101101 +* +Ve +1e-07 +-47.7802294293 22.5 -4.5 +0 0 + +0101101 +* +Ve +3.93331202162804e-05 +-39.7864809932 30.1837944664 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-5.41758793251 32.2351778656 0 +0 0 + +0101101 +* +Ve +1e-07 +2.48179337037 25.5 0 +0 0 + +0101101 +* +Ve +3.38582597806791e-05 +-5.41758793251 32.2351778656 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +2.48179337037 25.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +36.5110758098 25.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +36.5110758098 25.5 0 +0 0 + +0101101 +* +Ve +1e-07 +40.0865196923 26.3434504792 0 +0 0 + +0101101 +* +Ve +3.71144990280355e-05 +40.0865196923 26.3434504792 -4.5 +0 0 + +0101101 +* +Ve +1.00004607671047e-07 +6410.00886543614 -82.4019764728293 4433.2382489923 +0 0 + +0101101 +* +Ve +1.00022070811617e-07 +43.4793395049 1.66459569117 -4.6 +0 0 + +0101101 +* +Ve +1.00004631278089e-07 +3.83540430883 -7.02066049512 1.8 +0 0 + +0101101 +* +Ve +1.0002186618355e-07 +6425.80223313977 -89.9127086215669 4426.41866504436 +0 0 + +0101101 +* +Ve +1.00021896764488e-07 +6415.04743489636 -78.4455054305792 4423.44586069164 +0 0 + +0101101 +* +Ve +1.00021896764488e-07 +57.5206604951 9.33540430883 -4.6 +0 0 + +0101101 +* +Ve +1.00004432420032e-07 +6416.35047634052 -96.3969668903333 4428.77459417239 +0 0 + +0101101 +* +Ve +1.00004432420032e-07 +-3.83540430883 7.02066049512 1.8 +0 0 + +0101101 +* +Ve +1.00000213162821e-07 +57.8716935199 9.52717452428 -5 +0 0 + +0101101 +* +Ve +1.00000213162821e-07 +43.1283064801 1.47282547572 -5 +0 0 + +0101101 +* +Ve +1.00000383693077e-07 +6463.69166921013 -93.6383724382121 4487.61328293255 +0 0 + +0101101 +* +Ve +1.00000326849658e-07 +-28.5 29.5 -4.6 +0 0 + +0101101 +* +Ve +1.00001417955637e-07 +2.87655323163 -5.26549537134 1.8 +0 0 + +0101101 +* +Ve +1.0000135957112e-07 +6477.08458345686 -96.477263792552 4483.72365793293 +0 0 + +0101101 +* +Ve +1.00001417955637e-07 +6468.20359252529 -91.8217287814514 4477.13169359491 +0 0 + +0101101 +* +Ve +1.00000341060513e-07 +-16.5 29.5 -4.6 +0 0 + +0101101 +* +Ve +1.00000478602093e-07 +6468.44787738842 -104.134615251343 4484.26554181762 +0 0 + +0101101 +* +Ve +1.00001355033128e-07 +-2.87655323163 5.26549537134 1.8 +0 0 + +0101101 +* +Ve +1.00000255795385e-07 +-28.9 29.5 -5 +0 0 + +0101101 +* +Ve +1.00000255795385e-07 +-16.1 29.5 -5 +0 0 + +0101101 +* +Ve +1.00000355271368e-07 +6465.67953928331 -126.598133458297 4461.65750272715 +0 0 + +0101101 +* +Ve +1.00000341060513e-07 +-28.5 -12.5 -4.6 +0 0 + +0101101 +* +Ve +1.00000952869335e-07 +6479.07245353004 -129.437024812637 4457.76787772753 +0 0 + +0101101 +* +Ve +1.00000934140782e-07 +6470.19146259847 -124.781489801536 4451.17591338951 +0 0 + +0101101 +* +Ve +1.00000355271368e-07 +-16.5 -12.5 -4.6 +0 0 + +0101101 +* +Ve +1.00000540012479e-07 +6470.43574746161 -137.094376271427 4458.30976161222 +0 0 + +0101101 +* +Ve +1.00000255795385e-07 +-28.9 -12.5 -5 +0 0 + +0101101 +* +Ve +1.00000255795385e-07 +-16.1 -12.5 -5 +0 0 + +0101101 +* +Ve +1e-07 +-39.8 -12.5 -4.8 +0 0 + +0101101 +* +Ve +1e-07 +-39.8 -12.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-5.2 -12.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-5.2 -12.5 -4.8 +0 0 + +0101101 +* +Ve +1e-07 +-5.4 -12.5 -5 +0 0 + +0101101 +* +Ve +1e-07 +-39.6 -12.5 -5 +0 0 + +0101101 +* +Ve +1.0000135957112e-07 +17 0 12 +0 0 + +0101101 +* +Ve +1.00000981681071e-07 +-17 2.08189955855e-15 12 +0 0 + +0101101 +* +Ve +1.0000135957112e-07 +-3.73951920111 6.84514398274 12 +0 0 + +0101101 +* +Ve +1.0000135957112e-07 +3.73951920111 -6.84514398274 12 +0 0 + +0101101 +* +Ve +1.00000981681071e-07 +-8 9.79717439318e-16 12 +0 0 + +0101101 +* +Ve +1.00000981681071e-07 +8 0 12 +0 0 + +0101101 +* +Ve +1e-07 +-5.2 29.5 -4.8 +0 0 + +0101101 +* +Ve +1e-07 +-5.2 29.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-39.8 29.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-39.8 29.5 -4.8 +0 0 + +0101101 +* +Ve +1e-07 +-39.6 29.5 -5 +0 0 + +0101101 +* +Ve +1e-07 +-5.4 29.5 -5 +0 0 + +0101101 +* +Ve +1e-07 +73.8 5.5 -4.8 +0 0 + +0101101 +* +Ve +1e-07 +73.8 5.5 0 +0 0 + +0101101 +* +Ve +1e-07 +27.2 5.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +27.2 5.5 -4.8 +0 0 + +0101101 +* +Ve +1e-07 +27.4 5.5 -5 +0 0 + +0101101 +* +Ve +1e-07 +73.6 5.5 -5 +0 0 + +0101101 +* +Ve +1.00001346361305e-07 +23 0 12 +0 0 + +0101101 +* +Ve +1.00001346361305e-07 +-23 2.81668763804e-15 12 +0 0 + +0101101 +* +Ve +1.00001350629417e-07 +-4.69837027832 8.60030910653 13 +0 0 + +0101101 +* +Ve +1.00001350629417e-07 +4.69837027832 -8.60030910653 13 +0 0 + +0101101 +* +Ve +1.00000987117516e-07 +-10 1.22464679915e-15 12 +0 0 + +0101101 +* +Ve +1.00000987117516e-07 +10 0 12 +0 0 + +0101101 +* +Ve +1e-07 +-49.9589041096 2.1 -4.1 +0 0 + +0101101 +* +Ve +1e-07 +-51.9589041096 2.1 -4.1 +0 0 + +0101101 +* +Ve +1e-07 +-51.958923639 14.9 -4.1 +0 0 + +0101101 +* +Ve +1e-07 +-49.9589236513 14.9 -4.1 +0 0 + +0101101 +* +Ve +1.22060122566963e-06 +-51.9589248596 15.3 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-49.9589236513 15.3 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-49.9589041096 1.7 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-51.9589041096 1.7 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +20.0410958904 8.5 -4.1 +0 0 + +0101101 +* +Ve +1e-07 +2.04109589041 8.5 -4.1 +0 0 + +0101101 +* +Ve +1e-07 +20.4410958904 8.5 -4.5 +0 0 + +0101101 +* +Ed + 1e-07 1 1 0 +1 1 0 3.64159265359077 6.78318530718057 +2 1 1 0 3.64159265359077 6.78318530718057 +4 C0 2 0 1 0 +2 2 2 0 3.64159265359077 6.78318530718057 +0 + +0101000 ++3061 0 -3060 0 * +Ed + 1e-07 1 1 0 +1 2 0 0.50000000000098 3.64159265359077 +2 3 3 0 0.50000000000098 3.64159265359077 +4 C0 2 0 3 0 +2 4 2 0 0.50000000000098 3.64159265359077 +0 + +0101000 ++3060 0 -3061 0 * +Ed + 1.00002062092466e-07 1 1 0 +1 3 0 0 109 +4 C0 4 0 5 0 +2 5 4 0 0 109 +2 6 5 0 0 109 +0 + +0101000 ++3059 49 -3058 49 * +Ed + 1.00029163724341e-07 1 1 0 +1 4 0 31.7056915638 79.3172025741 +2 7 6 0 31.7056915638 79.3172025741 +4 C0 4 0 6 0 +2 8 4 0 31.7056915638 79.3172025741 +2 9 7 50 31.7056915638 79.3172025741 +0 + +0101000 ++3058 49 -3057 49 * +Ed + 1.00002739158374e-07 1 1 0 +1 5 0 0 10 +4 C0 4 0 8 0 +2 10 4 0 0 10 +2 11 8 0 0 10 +0 + +0101000 ++3057 49 -3056 49 * +Ed + 1.00003279352948e-07 1 1 0 +1 6 0 0 25.5071027635 +2 12 9 0 0 25.5071027635 +4 C0 4 0 9 0 +2 13 4 0 0 25.5071027635 +2 14 10 50 0 25.5071027635 +0 + +0101000 ++3056 49 -3055 49 * +Ed + 1.00038354368293e-07 1 1 0 +1 7 0 0 29.023430645 +4 C0 4 0 11 0 +2 15 4 0 0 29.023430645 +2 16 11 0 0 29.023430645 +0 + +0101000 ++3055 49 -3054 49 * +Ed + 1.00002670667292e-07 1 1 0 +1 8 0 31.5197412696 73.7105003877 +2 17 12 0 31.5197412696 73.7105003877 +4 C0 4 0 12 0 +2 18 4 0 31.5197412696 73.7105003877 +2 19 13 50 31.5197412696 73.7105003877 +0 + +0101000 ++3054 49 -3053 49 * +Ed + 1.00001469432613e-07 1 1 0 +1 9 0 0 34.7970800486 +4 C0 4 0 14 0 +2 20 4 0 0 34.7970800486 +2 21 14 0 0 34.7970800486 +0 + +0101000 ++3053 49 -3052 49 * +Ed + 1.00199787322968e-07 1 1 0 +1 10 0 0 86.2473843658 +2 22 15 0 0 86.2473843658 +4 C0 4 0 15 0 +2 23 4 0 0 86.2473843658 +2 24 16 50 0 86.2473843658 +0 + +0101000 ++3052 49 -3051 49 * +Ed + 1.00002066983352e-07 1 1 0 +1 11 0 0 2 +4 C0 4 0 17 0 +2 25 4 0 0 2 +2 26 17 0 0 2 +0 + +0101000 ++3051 49 -3050 49 * +Ed + 1.00001384227706e-07 1 1 0 +1 12 0 0 46.3368551767 +2 27 18 0 0 46.3368551767 +4 C0 4 0 18 0 +2 28 4 0 0 46.3368551767 +2 29 19 50 0 46.3368551767 +0 + +0101000 ++3050 49 -3059 49 * +Ed + 1e-07 1 1 0 +1 13 0 3.14159265358979 6.28318530717959 +2 30 20 0 3.14159265358979 6.28318530717959 +4 C0 21 0 20 0 +2 31 21 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3049 0 -3048 0 * +Ed + 1e-07 1 1 0 +1 14 0 0 3.14159265358979 +2 32 22 0 0 3.14159265358979 +4 C0 21 0 22 0 +2 33 21 0 0 3.14159265358979 +0 + +0101000 ++3048 0 -3049 0 * +Ed + 1e-07 1 1 0 +1 15 0 3.14159265358979 6.28318530717959 +2 34 23 0 3.14159265358979 6.28318530717959 +4 C0 24 0 23 0 +2 35 24 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3047 0 -3046 0 * +Ed + 1e-07 1 1 0 +1 16 0 0 3.14159265358979 +2 36 25 0 0 3.14159265358979 +4 C0 24 0 25 0 +2 37 24 0 0 3.14159265358979 +0 + +0101000 ++3046 0 -3047 0 * +Ed + 4.43472648967862e-05 1 1 0 +1 17 0 28.2743338823 56.5486677646 +2 38 26 0 28.2743338823 56.5486677646 +4 C0 27 0 26 0 +2 39 27 0 28.2743338823 56.5486677646 +0 + +0101000 ++3045 0 -3044 0 * +Ed + 4.43472682381836e-05 1 1 0 +1 18 0 0 28.2743338823 +2 40 28 0 0 28.2743338823 +4 C0 27 0 28 0 +2 41 27 0 0 28.2743338823 +0 + +0101000 ++3044 0 -3045 0 * +Ed + 1.00001423995717e-07 1 1 0 +1 19 0 5.212388980383 8.3539816339728 +2 42 29 0 5.212388980383 8.3539816339728 +4 C0 29 0 30 0 +2 43 30 0 5.212388980383 8.3539816339728 +2 44 27 51 5.212388980383 8.3539816339728 +0 + +0101000 ++3043 0 -3042 0 * +Ed + 1.00001379038797e-07 1 1 0 +1 20 0 2.07079632679321 5.212388980383 +2 45 31 0 2.07079632679321 5.212388980383 +4 C0 31 0 30 0 +2 46 30 0 2.07079632679321 5.212388980383 +2 47 27 51 2.07079632679321 5.212388980383 +0 + +0101000 ++3042 0 -3043 0 * +Ed + 3.15359982666418e-05 1 1 0 +1 21 0 30.1592894745 50.2655019991 +2 48 32 0 30.1592894745 50.2655019991 +4 C0 33 0 32 0 +2 49 33 0 30.1592894745 50.2655019991 +0 + +0101000 ++3041 0 -3040 0 * +Ed + 1e-07 1 1 0 +1 22 0 -1 1 +4 C0 33 0 34 0 +2 50 33 0 -1 1 +2 51 34 0 -1 1 +0 + +0101000 ++3039 0 -3041 0 * +Ed + 3.15356724842967e-05 1 1 0 +1 23 0 10.0531160209 30.1592894745 +2 52 35 0 10.0531160209 30.1592894745 +4 C0 33 0 35 0 +2 53 33 0 10.0531160209 30.1592894745 +0 + +0101000 ++3038 0 -3039 0 * +Ed + 1e-07 1 1 0 +1 24 0 -1.0000195294 0.999980458300001 +4 C0 33 0 36 0 +2 54 33 0 -1.0000195294 0.999980458300001 +2 55 36 0 -1.0000195294 0.999980458300001 +0 + +0101000 ++3038 0 -3040 0 * +Ed + 1e-07 1 1 0 +1 25 0 1.5707963267949 2.36216080475464 +2 56 37 0 1.5707963267949 2.36216080475464 +4 C0 37 0 38 0 +2 57 38 0 1.5707963267949 2.36216080475464 +0 + +0101000 ++3037 0 -3036 0 * +Ed + 1e-07 1 1 0 +1 26 0 -2.5 2 +2 58 37 0 -2.5 2 +2 59 39 0 -2.5 2 +4 G1 37 0 39 0 +0 + +0101000 ++3036 0 -3035 0 * +Ed + 1e-07 1 1 0 +1 27 0 1.5707963267949 2.36216080475464 +2 60 37 0 1.5707963267949 2.36216080475464 +4 C0 37 0 40 0 +2 61 40 0 1.5707963267949 2.36216080475464 +0 + +0101000 ++3034 0 -3035 0 * +Ed + 1e-07 1 1 0 +1 28 0 -2.5 2 +2 62 37 0 -2.5 2 +4 G1 37 0 41 0 +2 63 41 0 -2.5 2 +0 + +0101000 ++3037 0 -3034 0 * +Ed + 1e-07 1 1 0 +1 29 0 -12.8770549857 12.87705498583 +4 C0 41 0 40 0 +2 64 40 0 -12.8770549857 12.87705498583 +2 65 41 0 -12.8770549857 12.87705498583 +0 + +0101000 ++3034 0 -3033 0 * +Ed + 1e-07 1 1 0 +1 30 0 -12.8770549857 12.87705498583 +4 C0 41 0 38 0 +2 66 38 0 -12.8770549857 12.87705498583 +2 67 41 0 -12.8770549857 12.87705498583 +0 + +0101000 ++3037 0 -3032 0 * +Ed + 1e-07 1 1 0 +1 31 0 -2.25 2.25 +2 68 42 0 -2.25 2.25 +4 G1 41 0 42 0 +2 69 41 0 -2.25 2.25 +0 + +0101000 ++3033 0 -3032 0 * +Ed + 1e-07 1 1 0 +1 32 0 1.5707963267949 2.98282369675571 +2 70 42 0 1.5707963267949 2.98282369675571 +4 C0 42 0 38 0 +2 71 38 0 1.5707963267949 2.98282369675571 +0 + +0101000 ++3032 0 -3031 0 * +Ed + 1e-07 1 1 0 +1 33 0 1.5707963267949 2.98282369675571 +2 72 42 0 1.5707963267949 2.98282369675571 +4 C0 42 0 40 0 +2 73 40 0 1.5707963267949 2.98282369675571 +0 + +0101000 ++3033 0 -3030 0 * +Ed + 1e-07 1 1 0 +1 34 0 -2 2.5 +2 74 42 0 -2 2.5 +2 75 43 0 -2 2.5 +4 G1 42 0 43 0 +0 + +0101000 ++3030 0 -3031 0 * +Ed + 1e-07 1 1 0 +1 35 0 1.5707963267949 3.10205666294584 +2 76 44 0 1.5707963267949 3.10205666294584 +4 C0 44 0 38 0 +2 77 38 0 1.5707963267949 3.10205666294584 +0 + +0101000 ++3029 0 -3028 0 * +Ed + 1e-07 1 1 0 +1 36 0 -2.5 2 +2 78 44 0 -2.5 2 +2 79 43 0 -2.5 2 +4 G1 44 0 43 0 +0 + +0101000 ++3028 0 -3027 0 * +Ed + 1e-07 1 1 0 +1 37 0 1.5707963267949 3.10205666294584 +2 80 44 0 1.5707963267949 3.10205666294584 +4 C0 44 0 40 0 +2 81 40 0 1.5707963267949 3.10205666294584 +0 + +0101000 ++3026 0 -3027 0 * +Ed + 1e-07 1 1 0 +1 38 0 -2.5 2 +2 82 44 0 -2.5 2 +4 G1 44 0 45 0 +2 83 45 0 -2.5 2 +0 + +0101000 ++3029 0 -3026 0 * +Ed + 1e-07 1 1 0 +1 39 0 4.71238898038469 6.24364931653564 +2 84 46 0 4.71238898038469 6.24364931653564 +4 C0 46 0 38 0 +2 85 38 0 4.71238898038469 6.24364931653564 +0 + +0101000 ++3025 0 -3024 0 * +Ed + 1e-07 1 1 0 +1 40 0 -2 2.5 +2 86 46 0 -2 2.5 +4 G1 46 0 47 0 +2 87 47 0 -2 2.5 +0 + +0101000 ++3023 0 -3025 0 * +Ed + 1e-07 1 1 0 +1 41 0 4.71238898038469 6.24364931653564 +2 88 46 0 4.71238898038469 6.24364931653564 +4 C0 46 0 40 0 +2 89 40 0 4.71238898038469 6.24364931653564 +0 + +0101000 ++3023 0 -3022 0 * +Ed + 1e-07 1 1 0 +1 42 0 -2 2.5 +2 90 46 0 -2 2.5 +2 91 48 0 -2 2.5 +4 G1 46 0 48 0 +0 + +0101000 ++3022 0 -3024 0 * +Ed + 1e-07 1 1 0 +1 43 0 3.30036161042387 4.71238898038469 +2 92 49 0 3.30036161042387 4.71238898038469 +4 C0 49 0 38 0 +2 93 38 0 3.30036161042387 4.71238898038469 +0 + +0101000 ++3021 0 -3020 0 * +Ed + 1e-07 1 1 0 +1 44 0 -2 2.5 +2 94 49 0 -2 2.5 +2 95 48 0 -2 2.5 +4 G1 49 0 48 0 +0 + +0101000 ++3019 0 -3021 0 * +Ed + 1e-07 1 1 0 +1 45 0 3.30036161042387 4.71238898038469 +2 96 49 0 3.30036161042387 4.71238898038469 +4 C0 49 0 40 0 +2 97 40 0 3.30036161042387 4.71238898038469 +0 + +0101000 ++3019 0 -3018 0 * +Ed + 1e-07 1 1 0 +1 46 0 -2 2.5 +2 98 49 0 -2 2.5 +4 G1 49 0 50 0 +2 99 50 0 -2 2.5 +0 + +0101000 ++3018 0 -3020 0 * +Ed + 1e-07 1 1 0 +1 47 0 -2.25 2.25 +2 100 51 0 -2.25 2.25 +4 G1 50 0 51 0 +2 101 50 0 -2.25 2.25 +0 + +0101000 ++3017 0 -3016 0 * +Ed + 1e-07 1 1 0 +1 48 0 -17.0146412197 17.01464121973 +4 C0 50 0 40 0 +2 102 40 0 -17.0146412197 17.01464121973 +2 103 50 0 -17.0146412197 17.01464121973 +0 + +0101000 ++3017 0 -3018 0 * +Ed + 1e-07 1 1 0 +1 49 0 -17.0146412197 17.01464121973 +4 C0 50 0 38 0 +2 104 38 0 -17.0146412197 17.01464121973 +2 105 50 0 -17.0146412197 17.01464121973 +0 + +0101000 ++3016 0 -3020 0 * +Ed + 1e-07 1 1 0 +1 50 0 4.71238898038469 5.17572008760919 +2 106 51 0 4.71238898038469 5.17572008760919 +4 C0 51 0 38 0 +2 107 38 0 4.71238898038469 5.17572008760919 +0 + +0101000 ++3016 0 -3015 0 * +Ed + 1e-07 1 1 0 +1 51 0 4.71238898038469 5.17572008760919 +2 108 51 0 4.71238898038469 5.17572008760919 +4 C0 51 0 40 0 +2 109 40 0 4.71238898038469 5.17572008760919 +0 + +0101000 ++3017 0 -3014 0 * +Ed + 1e-07 1 1 0 +1 52 0 -2 2.5 +2 110 51 0 -2 2.5 +2 111 52 0 -2 2.5 +4 G1 51 0 52 0 +0 + +0101000 ++3014 0 -3015 0 * +Ed + 1.0000051159077e-07 1 1 0 +1 53 0 1.07079632679522 3.64159265359077 +2 112 3 0 1.07079632679522 3.64159265359077 +2 113 53 0 1.07079632679522 3.64159265359077 +4 C0 3 0 53 0 +2 114 54 52 1.07079632679522 3.64159265359077 +0 + +0101000 ++3013 49 -3012 0 * +Ed + 1.00004607671047e-07 1 1 0 +1 54 0 -27.2 -16.3999999999996 +2 115 54 0 -27.2 -16.3999999999996 +2 116 55 0 -27.2 -16.3999999999996 +4 CN 54 0 55 0 +2 117 3 53 -27.2 -16.3999999999996 +0 + +0101000 ++3011 0 -3013 54 * +Ed + 1.00001292562975e-07 1 1 0 +1 55 0 2.64159265358882 5.21238898038447 +2 118 54 0 2.64159265358882 5.21238898038447 +2 119 56 0 2.64159265358882 5.21238898038447 +4 C0 54 0 56 0 +2 120 3 53 2.64159265358882 5.21238898038447 +0 + +0101000 ++3010 54 -3011 0 * +Ed + 1.0002186618355e-07 1 1 0 +1 56 0 -6.69499999997 4.10500000002983 +2 121 3 0 -6.69499999997 4.10500000002983 +2 122 1 0 -6.69499999997 4.10500000002983 +4 CN 3 0 1 0 +2 123 54 52 -6.69499999997 4.10500000002983 +0 + +0101000 ++3012 0 -3010 49 * +Ed + 1.00000582645043e-07 1 1 0 +1 57 0 5.21238898038447 5.78318530717861 +2 124 55 0 5.21238898038447 5.78318530717861 +2 125 57 0 5.21238898038447 5.78318530717861 +4 C0 55 0 57 0 +2 126 3 53 5.21238898038447 5.78318530717861 +0 + +0101000 ++3011 0 -3009 54 * +Ed + 1e-07 1 1 0 +1 58 0 4.10500000003036 7.40500000003 +2 127 3 0 4.10500000003036 7.40500000003 +2 128 1 0 4.10500000003036 7.40500000003 +4 CN 3 0 1 0 +0 + +0101000 ++3009 49 -3060 0 * +Ed + 1e-07 1 1 0 +1 56 0 4.10500000002983 7.40500000003 +2 121 3 0 4.10500000002983 7.40500000003 +2 122 1 0 4.10500000002983 7.40500000003 +4 CN 3 0 1 0 +0 + +0101000 ++3010 49 -3061 0 * +Ed + 1.0000048316906e-07 1 1 0 +1 53 0 0.50000000000098 1.07079632679522 +2 112 3 0 0.50000000000098 1.07079632679522 +2 113 53 0 0.50000000000098 1.07079632679522 +4 C0 3 0 53 0 +2 129 55 52 0.50000000000098 1.07079632679522 +0 + +0101000 ++3008 0 -3013 49 * +Ed + 1.00021896764488e-07 1 1 0 +1 58 0 -6.69499999997 4.10500000003036 +2 127 3 0 -6.69499999997 4.10500000003036 +2 128 1 0 -6.69499999997 4.10500000003036 +4 CN 3 0 1 0 +2 130 55 52 -6.69499999997 4.10500000003036 +0 + +0101000 ++3008 0 -3009 49 * +Ed + 1.00000355271368e-07 1 1 0 +1 59 0 4.21238898038486 6.78318530718057 +2 131 1 0 4.21238898038486 6.78318530718057 +2 132 58 0 4.21238898038486 6.78318530718057 +4 C0 1 0 58 0 +2 133 55 52 4.21238898038486 6.78318530718057 +0 + +0101000 ++3007 49 -3008 0 * +Ed + 1.00004432420032e-07 1 1 0 +1 60 0 -27.2 -16.3999999999994 +2 134 54 0 -27.2 -16.3999999999994 +2 135 55 0 -27.2 -16.3999999999994 +4 CN 54 0 55 0 +2 136 1 53 -27.2 -16.3999999999994 +0 + +0101000 ++3006 0 -3007 54 * +Ed + 1.00000369482223e-07 1 1 0 +1 57 0 5.78318530717861 8.35398163397426 +2 124 55 0 5.78318530717861 8.35398163397426 +2 125 57 0 5.78318530717861 8.35398163397426 +4 C0 55 0 57 0 +2 137 1 53 5.78318530717861 8.35398163397426 +0 + +0101000 ++3009 54 -3006 0 * +Ed + 1.0000027000624e-07 1 1 0 +1 55 0 2.07079632679468 2.64159265358882 +2 118 54 0 2.07079632679468 2.64159265358882 +2 119 56 0 2.07079632679468 2.64159265358882 +4 C0 54 0 56 0 +2 138 1 53 2.07079632679468 2.64159265358882 +0 + +0101000 ++3006 0 -3010 54 * +Ed + 1.00000582645043e-07 1 1 0 +1 59 0 3.64159265359077 4.21238898038486 +2 131 1 0 3.64159265359077 4.21238898038486 +2 132 58 0 3.64159265359077 4.21238898038486 +4 C0 1 0 58 0 +2 139 54 52 3.64159265359077 4.21238898038486 +0 + +0101000 ++3012 0 -3007 49 * +Ed + 1.00000184741111e-07 1 1 0 +1 61 0 5.21238898038399 8.35398163397378 +2 140 53 0 5.21238898038399 8.35398163397378 +4 C0 53 0 59 0 +2 141 59 0 5.21238898038399 8.35398163397378 +2 142 60 52 5.21238898038399 8.35398163397378 +0 + +0101000 ++3005 0 -3004 0 * +Ed + 1e-07 1 1 0 +1 62 0 -0.282842712487936 0.282842712491331 +2 143 53 0 -0.282842712487936 0.282842712491331 +2 144 58 0 -0.282842712487936 0.282842712491331 +4 G2 53 0 58 0 +0 + +0101000 ++3012 0 -3004 0 * +Ed + 1e-07 1 1 0 +1 63 0 -0.282842712487936 0.282842712491331 +2 145 53 0 -0.282842712487936 0.282842712491331 +2 146 58 0 -0.282842712487936 0.282842712491331 +4 G2 53 0 58 0 +0 + +0101000 ++3008 0 -3005 0 * +Ed + 1.00000213162821e-07 1 1 0 +1 64 0 2.0707963267942 5.21238898038399 +2 147 58 0 2.0707963267942 5.21238898038399 +4 C0 58 0 59 0 +2 148 59 0 2.0707963267942 5.21238898038399 +2 149 60 52 2.0707963267942 5.21238898038399 +0 + +0101000 ++3004 0 -3005 0 * +Ed + 1.00000227373675e-07 1 1 0 +1 65 0 1.07079632679402 3.14159265358979 +2 150 25 0 1.07079632679402 3.14159265358979 +2 151 61 0 1.07079632679402 3.14159265358979 +4 C0 25 0 61 0 +2 152 62 55 1.07079632679402 3.14159265358979 +0 + +0101000 ++3003 49 -3002 0 * +Ed + 1.00000383693077e-07 1 1 0 +1 66 0 -26.2 -16.3999999999991 +2 153 62 0 -26.2 -16.3999999999991 +2 154 63 0 -26.2 -16.3999999999991 +4 CN 62 0 63 0 +2 155 25 56 -26.2 -16.3999999999991 +0 + +0101000 ++3001 0 -3003 57 * +Ed + 1.0000135957112e-07 1 1 0 +1 67 0 3.14159265358979 5.21238898038557 +2 156 62 0 3.14159265358979 5.21238898038557 +2 157 64 0 3.14159265358979 5.21238898038557 +4 C0 62 0 64 0 +2 158 25 56 3.14159265358979 5.21238898038557 +0 + +0101000 ++3000 57 -3001 0 * +Ed + 1.00000127897692e-07 1 1 0 +1 68 0 -6.35 3.4500000000004 +2 159 25 0 -6.35 3.4500000000004 +2 160 23 0 -6.35 3.4500000000004 +4 CN 25 0 23 0 +2 161 62 55 -6.35 3.4500000000004 +0 + +0101000 ++3002 0 -3000 49 * +Ed + 1.00001417955637e-07 1 1 0 +1 69 0 5.21238898038557 6.28318530717967 +2 162 63 0 5.21238898038557 6.28318530717967 +2 163 65 0 5.21238898038557 6.28318530717967 +4 C0 63 0 65 0 +2 164 25 56 5.21238898038557 6.28318530717967 +0 + +0101000 ++3001 0 -2999 57 * +Ed + 1e-07 1 1 0 +1 70 0 3.45000000000027 6.75 +2 165 25 0 3.45000000000027 6.75 +2 166 23 0 3.45000000000027 6.75 +4 CN 25 0 23 0 +0 + +0101000 ++2999 49 -3046 0 * +Ed + 1e-07 1 1 0 +1 68 0 3.4500000000004 6.75 +2 159 25 0 3.4500000000004 6.75 +2 160 23 0 3.4500000000004 6.75 +4 CN 25 0 23 0 +0 + +0101000 ++3000 49 -3047 0 * +Ed + 1.00000298427949e-07 1 1 0 +1 65 0 0 1.07079632679402 +2 150 25 0 0 1.07079632679402 +2 151 61 0 0 1.07079632679402 +4 C0 25 0 61 0 +2 167 63 55 0 1.07079632679402 +0 + +0101000 ++2998 0 -3003 49 * +Ed + 1.00000085265128e-07 1 1 0 +1 70 0 -6.35 3.45000000000027 +2 165 25 0 -6.35 3.45000000000027 +2 166 23 0 -6.35 3.45000000000027 +4 CN 25 0 23 0 +2 168 63 55 -6.35 3.45000000000027 +0 + +0101000 ++2998 0 -2999 49 * +Ed + 1.00000341060513e-07 1 1 0 +1 71 0 4.21238898038381 6.28318530717959 +2 169 23 0 4.21238898038381 6.28318530717959 +2 170 66 0 4.21238898038381 6.28318530717959 +4 C0 23 0 66 0 +2 171 63 55 4.21238898038381 6.28318530717959 +0 + +0101000 ++2997 49 -2998 0 * +Ed + 1.00000312638804e-07 1 1 0 +1 72 0 -26.2 -16.4000000000005 +2 172 62 0 -26.2 -16.4000000000005 +2 173 63 0 -26.2 -16.4000000000005 +4 CN 62 0 63 0 +2 174 23 56 -26.2 -16.4000000000005 +0 + +0101000 ++2996 0 -2997 57 * +Ed + 1.00001355033128e-07 1 1 0 +1 69 0 6.28318530717967 8.35398163397536 +2 162 63 0 6.28318530717967 8.35398163397536 +2 163 65 0 6.28318530717967 8.35398163397536 +4 C0 63 0 65 0 +2 175 23 56 6.28318530717967 8.35398163397536 +0 + +0101000 ++2999 57 -2996 0 * +Ed + 1.00001128399136e-07 1 1 0 +1 67 0 2.07079632679577 3.14159265358979 +2 156 62 0 2.07079632679577 3.14159265358979 +2 157 64 0 2.07079632679577 3.14159265358979 +4 C0 62 0 64 0 +2 176 23 56 2.07079632679577 3.14159265358979 +0 + +0101000 ++2996 0 -3000 57 * +Ed + 1.00000326849658e-07 1 1 0 +1 71 0 3.14159265358979 4.21238898038381 +2 169 23 0 3.14159265358979 4.21238898038381 +2 170 66 0 3.14159265358979 4.21238898038381 +4 C0 23 0 66 0 +2 177 62 55 3.14159265358979 4.21238898038381 +0 + +0101000 ++3002 0 -2997 49 * +Ed + 1.00000213162821e-07 1 1 0 +1 73 0 3.14159265358979 6.28318530717959 +2 178 66 0 3.14159265358979 6.28318530717959 +4 C0 66 0 67 0 +2 179 67 0 3.14159265358979 6.28318530717959 +2 180 68 55 3.14159265358979 6.28318530717959 +0 + +0101000 ++2995 0 -2994 0 * +Ed + 1e-07 1 1 0 +1 74 0 -0.282842712474619 0.282842712474619 +2 181 66 0 -0.282842712474619 0.282842712474619 +2 182 61 0 -0.282842712474619 0.282842712474619 +4 CN 66 0 61 0 +0 + +0101000 ++2998 0 -2994 0 * +Ed + 1e-07 1 1 0 +1 75 0 -0.282842712474619 0.282842712474619 +2 183 66 0 -0.282842712474619 0.282842712474619 +2 184 61 0 -0.282842712474619 0.282842712474619 +4 CN 66 0 61 0 +0 + +0101000 ++3002 0 -2995 0 * +Ed + 1.00000255795385e-07 1 1 0 +1 76 0 0 3.14159265358979 +2 185 61 0 0 3.14159265358979 +4 C0 61 0 67 0 +2 186 67 0 0 3.14159265358979 +2 187 68 55 0 3.14159265358979 +0 + +0101000 ++2994 0 -2995 0 * +Ed + 1.00000255795385e-07 1 1 0 +1 77 0 1.07079632679411 3.14159265358979 +2 188 22 0 1.07079632679411 3.14159265358979 +2 189 69 0 1.07079632679411 3.14159265358979 +4 C0 22 0 69 0 +2 190 62 58 1.07079632679411 3.14159265358979 +0 + +0101000 ++2993 49 -2992 0 * +Ed + 1.00000056843419e-07 1 1 0 +1 66 0 -26.2 -16.3999999999998 +2 153 62 0 -26.2 -16.3999999999998 +2 154 63 0 -26.2 -16.3999999999998 +4 CN 62 0 63 0 +2 191 22 59 -26.2 -16.3999999999998 +0 + +0101000 ++3001 0 -2993 60 * +Ed + 1.00000913482761e-07 1 1 0 +1 67 0 3.14159265358979 5.21238898038557 +2 156 62 0 3.14159265358979 5.21238898038557 +2 157 64 0 3.14159265358979 5.21238898038557 +4 C0 62 0 64 0 +2 192 22 59 3.14159265358979 5.21238898038557 +0 + +0101000 ++2991 60 -3001 0 * +Ed + 1.00000142108547e-07 1 1 0 +1 78 0 -6.35 3.45000000000036 +2 193 22 0 -6.35 3.45000000000036 +2 194 20 0 -6.35 3.45000000000036 +4 CN 22 0 20 0 +2 195 62 58 -6.35 3.45000000000036 +0 + +0101000 ++2992 0 -2991 49 * +Ed + 1.00000934140782e-07 1 1 0 +1 69 0 5.21238898038557 6.28318530717965 +2 162 63 0 5.21238898038557 6.28318530717965 +2 163 65 0 5.21238898038557 6.28318530717965 +4 C0 63 0 65 0 +2 196 22 59 5.21238898038557 6.28318530717965 +0 + +0101000 ++3001 0 -2990 60 * +Ed + 1e-07 1 1 0 +1 79 0 3.45000000000044 6.75 +2 197 22 0 3.45000000000044 6.75 +2 198 20 0 3.45000000000044 6.75 +4 CN 22 0 20 0 +0 + +0101000 ++2990 49 -3048 0 * +Ed + 1e-07 1 1 0 +1 78 0 3.45000000000036 6.75 +2 193 22 0 3.45000000000036 6.75 +2 194 20 0 3.45000000000036 6.75 +4 CN 22 0 20 0 +0 + +0101000 ++2991 49 -3049 0 * +Ed + 1.00000355271368e-07 1 1 0 +1 77 0 0 1.07079632679411 +2 188 22 0 0 1.07079632679411 +2 189 69 0 0 1.07079632679411 +4 C0 22 0 69 0 +2 199 63 58 0 1.07079632679411 +0 + +0101000 ++2989 0 -2993 49 * +Ed + 1.00000099475983e-07 1 1 0 +1 79 0 -6.35 3.45000000000044 +2 197 22 0 -6.35 3.45000000000044 +2 198 20 0 -6.35 3.45000000000044 +4 CN 22 0 20 0 +2 200 63 58 -6.35 3.45000000000044 +0 + +0101000 ++2989 0 -2990 49 * +Ed + 1.00000341060513e-07 1 1 0 +1 80 0 4.21238898038381 6.28318530717959 +2 201 20 0 4.21238898038381 6.28318530717959 +2 202 70 0 4.21238898038381 6.28318530717959 +4 C0 20 0 70 0 +2 203 63 58 4.21238898038381 6.28318530717959 +0 + +0101000 ++2988 49 -2989 0 * +Ed + 1.00000540012479e-07 1 1 0 +1 72 0 -26.2 -16.4000000000005 +2 172 62 0 -26.2 -16.4000000000005 +2 173 63 0 -26.2 -16.4000000000005 +4 CN 62 0 63 0 +2 204 20 59 -26.2 -16.4000000000005 +0 + +0101000 ++2996 0 -2988 60 * +Ed + 1.00000369482223e-07 1 1 0 +1 69 0 6.28318530717965 8.35398163397536 +2 162 63 0 6.28318530717965 8.35398163397536 +2 163 65 0 6.28318530717965 8.35398163397536 +4 C0 63 0 65 0 +2 205 20 59 6.28318530717965 8.35398163397536 +0 + +0101000 ++2990 60 -2996 0 * +Ed + 1.00000952869335e-07 1 1 0 +1 67 0 2.07079632679577 3.14159265358979 +2 156 62 0 2.07079632679577 3.14159265358979 +2 157 64 0 2.07079632679577 3.14159265358979 +4 C0 62 0 64 0 +2 206 20 59 2.07079632679577 3.14159265358979 +0 + +0101000 ++2996 0 -2991 60 * +Ed + 1.00000341060513e-07 1 1 0 +1 80 0 3.14159265358979 4.21238898038381 +2 201 20 0 3.14159265358979 4.21238898038381 +2 202 70 0 3.14159265358979 4.21238898038381 +4 C0 20 0 70 0 +2 207 62 58 3.14159265358979 4.21238898038381 +0 + +0101000 ++2992 0 -2988 49 * +Ed + 1.00000227373675e-07 1 1 0 +1 81 0 3.14159265358979 6.28318530717959 +2 208 70 0 3.14159265358979 6.28318530717959 +4 C0 70 0 71 0 +2 209 71 0 3.14159265358979 6.28318530717959 +2 210 68 58 3.14159265358979 6.28318530717959 +0 + +0101000 ++2987 0 -2986 0 * +Ed + 1e-07 1 1 0 +1 82 0 -0.282842712474619 0.282842712474619 +2 211 70 0 -0.282842712474619 0.282842712474619 +2 212 69 0 -0.282842712474619 0.282842712474619 +4 CN 70 0 69 0 +0 + +0101000 ++2989 0 -2986 0 * +Ed + 1e-07 1 1 0 +1 83 0 -0.282842712474619 0.282842712474619 +2 213 70 0 -0.282842712474619 0.282842712474619 +2 214 69 0 -0.282842712474619 0.282842712474619 +4 CN 70 0 69 0 +0 + +0101000 ++2992 0 -2987 0 * +Ed + 1.00000255795385e-07 1 1 0 +1 84 0 4.71238898038469 7.85398163397448 +2 215 69 0 4.71238898038469 7.85398163397448 +4 C0 69 0 71 0 +2 216 71 0 4.71238898038469 7.85398163397448 +2 217 68 58 4.71238898038469 7.85398163397448 +0 + +0101000 ++2986 0 -2987 0 * +Ed + 1e-07 1 1 0 +1 85 0 -2.3 -2 +2 218 72 0 -2.3 -2 +2 219 43 0 -2.3 -2 +4 CN 72 0 43 0 +0 + +0101000 ++2985 0 -2984 0 * +Ed + 1e-07 1 1 0 +1 86 0 0 3.14159265358979 +2 220 72 0 0 3.14159265358979 +4 C0 72 0 40 0 +2 221 40 0 0 3.14159265358979 +0 + +0101000 ++2983 0 -2984 0 * +Ed + 1e-07 1 1 0 +1 87 0 -2.3 -2 +2 222 72 0 -2.3 -2 +2 223 43 0 -2.3 -2 +4 CN 72 0 43 0 +0 + +0101000 ++2982 0 -2983 0 * +Ed + 1e-07 1 1 0 +1 88 0 0 3.14159265358979 +2 224 72 0 0 3.14159265358979 +2 225 73 0 0 3.14159265358979 +4 C0 72 0 73 0 +0 + +0101000 ++2982 0 -2985 0 * +Ed + 1e-07 1 1 0 +1 89 0 6.1244163503479 6.28318530717959 +2 226 43 0 6.1244163503479 6.28318530717959 +4 C0 43 0 40 0 +2 227 40 0 6.1244163503479 6.28318530717959 +0 + +0101000 ++3030 0 -2983 0 * +Ed + 1e-07 1 1 0 +1 90 0 3.18112864423286 6.1244163503479 +2 228 43 0 3.18112864423286 6.1244163503479 +4 C0 43 0 38 0 +2 229 38 0 3.18112864423286 6.1244163503479 +0 + +0101000 ++3028 0 -3031 0 * +Ed + 1e-07 1 1 0 +1 91 0 3.14159265358979 3.18112864423286 +2 230 43 0 3.14159265358979 3.18112864423286 +4 C0 43 0 40 0 +2 231 40 0 3.14159265358979 3.18112864423286 +0 + +0101000 ++2984 0 -3027 0 * +Ed + 1e-07 1 1 0 +1 92 0 3.14159265358979 6.28318530717959 +2 232 43 0 3.14159265358979 6.28318530717959 +2 233 74 0 3.14159265358979 6.28318530717959 +4 C0 43 0 74 0 +0 + +0101000 ++2985 0 -2982 0 * +Ed + 1e-07 1 1 0 +1 93 0 0 3.14159265358979 +2 234 73 0 0 3.14159265358979 +4 C0 71 0 73 0 +2 235 71 0 0 3.14159265358979 +0 + +0101000 ++2981 0 -2980 0 * +Ed + 1e-07 1 1 0 +1 94 0 3.14159265358979 6.28318530717959 +2 236 74 0 3.14159265358979 6.28318530717959 +4 C0 71 0 74 0 +2 237 71 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++2980 0 -2981 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 95 0 0 3.14159265358979 +2 238 75 0 0 3.14159265358979 +4 C0 75 0 76 0 +2 239 76 0 0 3.14159265358979 +2 240 71 61 0 3.14159265358979 +2 241 67 62 0 3.14159265358979 +0 + +0101000 ++2979 0 -2978 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 96 0 3.14159265358979 6.28318530717959 +2 242 77 0 3.14159265358979 6.28318530717959 +4 C0 77 0 76 0 +2 243 76 0 3.14159265358979 6.28318530717959 +2 244 71 61 3.14159265358979 6.28318530717959 +2 245 67 62 3.14159265358979 6.28318530717959 +0 + +0101000 ++2978 0 -2979 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 97 0 2.07079632679489 5.21238898038468 +2 246 78 0 2.07079632679489 5.21238898038468 +4 C0 68 0 78 0 +2 247 68 0 2.07079632679489 5.21238898038468 +2 248 71 59 2.07079632679489 5.21238898038468 +2 249 67 56 2.07079632679489 5.21238898038468 +0 + +0101000 ++2977 0 -2976 0 * +Ed + 1.0000135957112e-07 1 1 0 +1 98 0 5.21238898038468 8.35398163397447 +2 250 79 0 5.21238898038468 8.35398163397447 +4 C0 68 0 79 0 +2 251 68 0 5.21238898038468 8.35398163397447 +2 252 71 59 5.21238898038468 8.35398163397447 +2 253 67 56 5.21238898038468 8.35398163397447 +0 + +0101000 ++2976 0 -2977 0 * +Ed + 1.00000971340767e-07 1 1 0 +1 99 0 3.14159265358979 6.28318530717959 +2 254 80 0 3.14159265358979 6.28318530717959 +4 C0 76 0 80 0 +2 255 76 0 3.14159265358979 6.28318530717959 +2 256 71 61 3.14159265358979 6.28318530717959 +2 257 67 62 3.14159265358979 6.28318530717959 +0 + +0101000 ++2975 0 -2974 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 100 0 0 3.14159265358979 +2 258 81 0 0 3.14159265358979 +4 C0 76 0 81 0 +2 259 76 0 0 3.14159265358979 +2 260 71 61 0 3.14159265358979 +2 261 67 62 0 3.14159265358979 +0 + +0101000 ++2974 0 -2975 0 * +Ed + 1e-07 1 1 0 +1 101 0 -0.14142135623731 0.141421356237306 +2 262 74 0 -0.14142135623731 0.141421356237306 +2 263 73 0 -0.14142135623731 0.141421356237306 +4 CN 74 0 73 0 +0 + +0101000 ++2980 0 -2985 0 * +Ed + 1e-07 1 1 0 +1 102 0 -0.14142135623731 0.14142135623731 +2 264 74 0 -0.14142135623731 0.14142135623731 +2 265 73 0 -0.14142135623731 0.14142135623731 +4 CN 74 0 73 0 +0 + +0101000 ++2981 0 -2982 0 * +Ed + 1e-07 1 1 0 +1 103 0 -2.3 -2 +2 266 82 0 -2.3 -2 +2 267 48 0 -2.3 -2 +4 CN 82 0 48 0 +0 + +0101000 ++2973 0 -2972 0 * +Ed + 1e-07 1 1 0 +1 104 0 3.14159265358979 6.28318530717959 +2 268 82 0 3.14159265358979 6.28318530717959 +4 C0 82 0 40 0 +2 269 40 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++2971 0 -2972 0 * +Ed + 1e-07 1 1 0 +1 105 0 -2.3 -2 +2 270 82 0 -2.3 -2 +2 271 48 0 -2.3 -2 +4 CN 82 0 48 0 +0 + +0101000 ++2970 0 -2971 0 * +Ed + 1e-07 1 1 0 +1 106 0 3.14159265358979 6.28318530717959 +2 272 82 0 3.14159265358979 6.28318530717959 +2 273 83 0 3.14159265358979 6.28318530717959 +4 C0 82 0 83 0 +0 + +0101000 ++2970 0 -2973 0 * +Ed + 1e-07 1 1 0 +1 107 0 3.10205666294673 3.14159265358979 +2 274 48 0 3.10205666294673 3.14159265358979 +4 C0 48 0 40 0 +2 275 40 0 3.10205666294673 3.14159265358979 +0 + +0101000 ++3022 0 -2971 0 * +Ed + 1e-07 1 1 0 +1 108 0 0.158768956831688 3.10205666294673 +2 276 48 0 0.158768956831688 3.10205666294673 +4 C0 48 0 38 0 +2 277 38 0 0.158768956831688 3.10205666294673 +0 + +0101000 ++3021 0 -3024 0 * +Ed + 1e-07 1 1 0 +1 109 0 0 0.158768956831688 +2 278 48 0 0 0.158768956831688 +4 C0 48 0 40 0 +2 279 40 0 0 0.158768956831688 +0 + +0101000 ++2972 0 -3019 0 * +Ed + 1e-07 1 1 0 +1 110 0 0 3.14159265358979 +2 280 48 0 0 3.14159265358979 +2 281 84 0 0 3.14159265358979 +4 C0 48 0 84 0 +0 + +0101000 ++2973 0 -2970 0 * +Ed + 1e-07 1 1 0 +1 111 0 3.14159265358979 6.28318530717959 +2 282 83 0 3.14159265358979 6.28318530717959 +4 C0 67 0 83 0 +2 283 67 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++2969 0 -2968 0 * +Ed + 1e-07 1 1 0 +1 112 0 0 3.14159265358979 +2 284 84 0 0 3.14159265358979 +4 C0 67 0 84 0 +2 285 67 0 0 3.14159265358979 +0 + +0101000 ++2968 0 -2969 0 * +Ed + 1e-07 1 1 0 +1 113 0 -0.14142135623731 0.14142135623731 +2 286 84 0 -0.14142135623731 0.14142135623731 +2 287 83 0 -0.14142135623731 0.14142135623731 +4 CN 84 0 83 0 +0 + +0101000 ++2968 0 -2973 0 * +Ed + 1e-07 1 1 0 +1 114 0 -0.14142135623731 0.141421356237306 +2 288 84 0 -0.14142135623731 0.141421356237306 +2 289 83 0 -0.14142135623731 0.141421356237306 +4 CN 84 0 83 0 +0 + +0101000 ++2969 0 -2970 0 * +Ed + 1e-07 1 1 0 +1 115 0 -2.3 2.5 +2 290 39 0 -2.3 2.5 +2 291 52 0 -2.3 2.5 +4 CN 39 0 52 0 +0 + +0101000 ++2967 0 -2966 0 * +Ed + 1e-07 1 1 0 +1 116 0 3.92102450242678 6.28318530717959 +2 292 39 0 3.92102450242678 6.28318530717959 +4 C0 39 0 38 0 +2 293 38 0 3.92102450242678 6.28318530717959 +0 + +0101000 ++3036 0 -2966 0 * +Ed + 1e-07 1 1 0 +1 117 0 3.14159265358979 3.92102450242678 +2 294 39 0 3.14159265358979 3.92102450242678 +4 C0 39 0 40 0 +2 295 40 0 3.14159265358979 3.92102450242678 +0 + +0101000 ++2965 0 -3035 0 * +Ed + 1e-07 1 1 0 +1 118 0 -2.3 -2 +2 296 39 0 -2.3 -2 +2 297 52 0 -2.3 -2 +4 CN 39 0 52 0 +0 + +0101000 ++2964 0 -2965 0 * +Ed + 1e-07 1 1 0 +1 119 0 3.14159265358979 6.28318530717959 +2 298 39 0 3.14159265358979 6.28318530717959 +2 299 85 0 3.14159265358979 6.28318530717959 +4 C0 39 0 85 0 +0 + +0101000 ++2964 0 -2967 0 * +Ed + 1e-07 1 1 0 +1 120 0 2.03412743401877 3.14159265358979 +2 300 52 0 2.03412743401877 3.14159265358979 +4 C0 52 0 40 0 +2 301 40 0 2.03412743401877 3.14159265358979 +0 + +0101000 ++3014 0 -2965 0 * +Ed + 1e-07 1 1 0 +1 121 0 0 2.03412743401877 +2 302 52 0 0 2.03412743401877 +4 C0 52 0 38 0 +2 303 38 0 0 2.03412743401877 +0 + +0101000 ++2966 0 -3015 0 * +Ed + 1e-07 1 1 0 +1 122 0 0 3.14159265358979 +2 304 52 0 0 3.14159265358979 +2 305 86 0 0 3.14159265358979 +4 C0 52 0 86 0 +0 + +0101000 ++2967 0 -2964 0 * +Ed + 1e-07 1 1 0 +1 123 0 3.14159265358979 6.28318530717959 +2 306 85 0 3.14159265358979 6.28318530717959 +4 C0 59 0 85 0 +2 307 59 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++2963 0 -2962 0 * +Ed + 1e-07 1 1 0 +1 124 0 0 3.14159265358979 +2 308 86 0 0 3.14159265358979 +4 C0 59 0 86 0 +2 309 59 0 0 3.14159265358979 +0 + +0101000 ++2962 0 -2963 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 125 0 0 3.14159265358979 +2 310 87 0 0 3.14159265358979 +4 C0 87 0 88 0 +2 311 88 0 0 3.14159265358979 +2 312 59 63 0 3.14159265358979 +0 + +0101000 ++2961 0 -2960 0 * +Ed + 1.00001346361305e-07 1 1 0 +1 126 0 3.14159265358979 6.28318530717959 +2 313 89 0 3.14159265358979 6.28318530717959 +4 C0 89 0 88 0 +2 314 88 0 3.14159265358979 6.28318530717959 +2 315 59 63 3.14159265358979 6.28318530717959 +0 + +0101000 ++2960 0 -2961 0 * +Ed + 1.00000971340767e-07 1 1 0 +1 127 0 2.07079632679458 5.21238898038437 +2 316 90 0 2.07079632679458 5.21238898038437 +4 C0 60 0 90 0 +2 317 60 0 2.07079632679458 5.21238898038437 +2 318 59 53 2.07079632679458 5.21238898038437 +0 + +0101000 ++2959 0 -2958 0 * +Ed + 1.00001350629417e-07 1 1 0 +1 128 0 5.21238898038437 8.35398163397416 +2 319 91 0 5.21238898038437 8.35398163397416 +4 C0 60 0 91 0 +2 320 60 0 5.21238898038437 8.35398163397416 +2 321 59 53 5.21238898038437 8.35398163397416 +0 + +0101000 ++2958 0 -2959 0 * +Ed + 1.00000987117516e-07 1 1 0 +1 129 0 3.14159265358979 6.28318530717959 +2 322 92 0 3.14159265358979 6.28318530717959 +4 C0 88 0 92 0 +2 323 88 0 3.14159265358979 6.28318530717959 +2 324 59 63 3.14159265358979 6.28318530717959 +0 + +0101000 ++2957 0 -2956 0 * +Ed + 1.00000971340767e-07 1 1 0 +1 130 0 0 3.14159265358979 +2 325 93 0 0 3.14159265358979 +4 C0 88 0 93 0 +2 326 88 0 0 3.14159265358979 +2 327 59 63 0 3.14159265358979 +0 + +0101000 ++2956 0 -2957 0 * +Ed + 1e-07 1 1 0 +1 131 0 -0.141421356237315 0.141421356237306 +2 328 86 0 -0.141421356237315 0.141421356237306 +2 329 85 0 -0.141421356237315 0.141421356237306 +4 CN 86 0 85 0 +0 + +0101000 ++2962 0 -2967 0 * +Ed + 1e-07 1 1 0 +1 132 0 -0.141421356237308 0.141421356237311 +2 330 86 0 -0.141421356237308 0.141421356237311 +2 331 85 0 -0.141421356237308 0.141421356237311 +4 CN 86 0 85 0 +0 + +0101000 ++2963 0 -2964 0 * +Ed + 1e-07 1 1 0 +1 133 0 -1 1 +4 C0 34 0 94 0 +2 332 34 0 -1 1 +2 333 94 0 -1 1 +0 + +0101000 ++2955 0 -2954 0 * +Ed + 1e-07 1 1 0 +1 134 0 -5.05 5.05 +2 334 35 0 -5.05 5.05 +4 G1 34 0 35 0 +2 335 34 0 -5.05 5.05 +0 + +0101000 ++3039 0 -2954 0 * +Ed + 1e-07 1 1 0 +1 135 0 -5.05 5.05 +2 336 32 0 -5.05 5.05 +4 G1 34 0 32 0 +2 337 34 0 -5.05 5.05 +0 + +0101000 ++3041 0 -2955 0 * +Ed + 1e-07 1 1 0 +1 136 0 -1.85 8.25 +2 338 35 0 -1.85 8.25 +4 G1 35 0 36 0 +2 339 36 0 -1.85 8.25 +0 + +0101000 ++2953 0 -3038 0 * +Ed + 1e-07 1 1 0 +1 137 0 1.57079937826365 4.71238898038469 +2 340 35 0 1.57079937826365 4.71238898038469 +2 341 95 0 1.57079937826365 4.71238898038469 +4 C0 35 0 95 0 +0 + +0101000 ++2953 0 -2954 0 * +Ed + 1e-07 1 1 0 +1 138 0 -0.999999993899998 0.999999993800003 +4 C0 36 0 96 0 +2 342 36 0 -0.999999993899998 0.999999993800003 +2 343 96 0 -0.999999993899998 0.999999993800003 +0 + +0101000 ++2953 0 -2952 0 * +Ed + 1e-07 1 1 0 +1 139 0 -5.05 5.05 +2 344 32 0 -5.05 5.05 +4 G1 36 0 32 0 +2 345 36 0 -5.05 5.05 +0 + +0101000 ++3040 0 -2952 0 * +Ed + 1e-07 1 1 0 +1 140 0 4.71238898038469 7.85398468736511 +2 346 32 0 4.71238898038469 7.85398468736511 +2 347 97 0 4.71238898038469 7.85398468736511 +4 C0 32 0 97 0 +0 + +0101000 ++2955 0 -2952 0 * +Ed + 1e-07 1 1 0 +1 141 0 -0.28284271247462 0.282842712474619 +2 348 95 0 -0.28284271247462 0.282842712474619 +4 G1 96 0 95 0 +2 349 96 0 -0.28284271247462 0.282842712474619 +0 + +0101000 ++2951 0 -2953 0 * +Ed + 1e-07 1 1 0 +1 142 0 -40.7521847057 -38.7521834974 +4 C0 96 0 40 0 +2 350 40 0 -40.7521847057 -38.7521834974 +2 351 96 0 -40.7521847057 -38.7521834974 +0 + +0101000 ++2951 0 -2950 0 * +Ed + 1e-07 1 1 0 +1 143 0 -0.28284271247462 0.282842712474619 +2 352 97 0 -0.28284271247462 0.282842712474619 +4 G1 96 0 97 0 +2 353 96 0 -0.28284271247462 0.282842712474619 +0 + +0101000 ++2950 0 -2952 0 * +Ed + 1e-07 1 1 0 +1 144 0 -0.282842712474619 0.282842712474619 +2 354 97 0 -0.282842712474619 0.282842712474619 +4 G1 97 0 94 0 +2 355 94 0 -0.282842712474619 0.282842712474619 +0 + +0101000 ++2955 0 -2949 0 * +Ed + 1e-07 1 1 0 +1 145 0 3.14159265358979 6.283188180959 +2 356 97 0 3.14159265358979 6.283188180959 +4 C0 97 0 40 0 +2 357 40 0 3.14159265358979 6.283188180959 +0 + +0101000 ++2949 0 -2950 0 * +Ed + 1e-07 1 1 0 +1 146 0 38.7521639557 40.7521639557 +4 C0 94 0 40 0 +2 358 40 0 38.7521639557 40.7521639557 +2 359 94 0 38.7521639557 40.7521639557 +0 + +0101000 ++2949 0 -2948 0 * +Ed + 1e-07 1 1 0 +1 147 0 -0.282842712474619 0.282842712474619 +2 360 95 0 -0.282842712474619 0.282842712474619 +4 G1 94 0 95 0 +2 361 94 0 -0.282842712474619 0.282842712474619 +0 + +0101000 ++2948 0 -2954 0 * +Ed + 1e-07 1 1 0 +1 148 0 3.05147058888093e-06 3.14159265358979 +2 362 95 0 3.05147058888093e-06 3.14159265358979 +4 C0 95 0 40 0 +2 363 40 0 3.05147058888093e-06 3.14159265358979 +0 + +0101000 ++2951 0 -2948 0 * +Ed + 1e-07 1 1 0 +1 149 0 -1.85 7.25 +2 364 26 0 -1.85 7.25 +2 365 28 0 -1.85 7.25 +4 CN 26 0 28 0 +0 + +0101000 ++2947 0 -3044 0 * +Ed + 1e-07 1 1 0 +1 150 0 -1.85 7.25 +2 366 26 0 -1.85 7.25 +2 367 28 0 -1.85 7.25 +4 CN 26 0 28 0 +0 + +0101000 ++2946 0 -3045 0 * +Ed + 1e-07 1 1 0 +1 151 0 3.14159265358979 6.28318530717959 +2 368 26 0 3.14159265358979 6.28318530717959 +2 369 98 0 3.14159265358979 6.28318530717959 +4 C0 26 0 98 0 +0 + +0101000 ++2946 0 -2947 0 * +Ed + 1e-07 1 1 0 +1 152 0 0 3.14159265358979 +2 370 28 0 0 3.14159265358979 +2 371 99 0 0 3.14159265358979 +4 C0 28 0 99 0 +0 + +0101000 ++2947 0 -2946 0 * +Ed + 1e-07 1 1 0 +1 153 0 4.71238898038469 7.85398163397448 +2 372 99 0 4.71238898038469 7.85398163397448 +4 C0 99 0 40 0 +2 373 40 0 4.71238898038469 7.85398163397448 +0 + +0101000 ++2945 0 -3792 0 * +Ed + 1e-07 1 1 0 +1 154 0 -0.282842712474619 0.282842712474619 +2 374 99 0 -0.282842712474619 0.282842712474619 +2 375 98 0 -0.282842712474619 0.282842712474619 +4 CN 99 0 98 0 +0 + +0101000 ++2946 0 -3792 0 * +Ed + 1e-07 1 1 0 +1 155 0 -0.282842712474619 0.282842712474619 +2 376 99 0 -0.282842712474619 0.282842712474619 +2 377 98 0 -0.282842712474619 0.282842712474619 +4 CN 99 0 98 0 +0 + +0101000 ++2947 0 -2945 0 * +Ed + 1e-07 1 1 0 +1 156 0 3.14159265358979 6.28318530717959 +2 378 98 0 3.14159265358979 6.28318530717959 +4 C0 98 0 40 0 +2 379 40 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3792 0 -2945 0 * +Ed + 1e-07 1 1 0 +1 157 0 -4.3041571954 4.3041571953 +4 C0 45 0 40 0 +2 380 40 0 -4.3041571954 4.3041571953 +2 381 45 0 -4.3041571954 4.3041571953 +0 + +0101000 ++3026 0 -3791 0 * +Ed + 1e-07 1 1 0 +1 158 0 -4.3041571954 4.3041571953 +4 C0 45 0 38 0 +2 382 38 0 -4.3041571954 4.3041571953 +2 383 45 0 -4.3041571954 4.3041571953 +0 + +0101000 ++3029 0 -3790 0 * +Ed + 1e-07 1 1 0 +1 159 0 -2.25 2.25 +2 384 100 0 -2.25 2.25 +4 G1 45 0 100 0 +2 385 45 0 -2.25 2.25 +0 + +0101000 ++3791 0 -3790 0 * +Ed + 1e-07 1 1 0 +1 160 0 3.69290962272204 4.71238898038469 +2 386 100 0 3.69290962272204 4.71238898038469 +4 C0 100 0 40 0 +2 387 40 0 3.69290962272204 4.71238898038469 +0 + +0101000 ++3789 0 -3791 0 * +Ed + 1e-07 1 1 0 +1 161 0 3.69290962272204 4.71238898038469 +2 388 100 0 3.69290962272204 4.71238898038469 +4 C0 100 0 38 0 +2 389 38 0 3.69290962272204 4.71238898038469 +0 + +0101000 ++3788 0 -3790 0 * +Ed + 1e-07 1 1 0 +1 162 0 -2.25 2.25 +2 390 100 0 -2.25 2.25 +2 391 101 0 -2.25 2.25 +4 G1 100 0 101 0 +0 + +0101000 ++3789 0 -3788 0 * +Ed + 1e-07 1 1 0 +1 163 0 -2.25 2.25 +2 392 102 0 -2.25 2.25 +4 G1 47 0 102 0 +2 393 47 0 -2.25 2.25 +0 + +0101000 ++3787 0 -3786 0 * +Ed + 1e-07 1 1 0 +1 164 0 -4.3041571954 4.3041571953 +4 C0 47 0 38 0 +2 394 38 0 -4.3041571954 4.3041571953 +2 395 47 0 -4.3041571954 4.3041571953 +0 + +0101000 ++3025 0 -3787 0 * +Ed + 1e-07 1 1 0 +1 165 0 -4.3041571954 4.3041571953 +4 C0 47 0 40 0 +2 396 40 0 -4.3041571954 4.3041571953 +2 397 47 0 -4.3041571954 4.3041571953 +0 + +0101000 ++3023 0 -3786 0 * +Ed + 1e-07 1 1 0 +1 166 0 2.59027568445897 3.69290962272168 +2 398 101 0 2.59027568445897 3.69290962272168 +4 C0 101 0 40 0 +2 399 40 0 2.59027568445897 3.69290962272168 +0 + +0101000 ++3785 0 -3789 0 * +Ed + 1e-07 1 1 0 +1 167 0 2.59027568445897 3.69290962272168 +2 400 101 0 2.59027568445897 3.69290962272168 +4 C0 101 0 38 0 +2 401 38 0 2.59027568445897 3.69290962272168 +0 + +0101000 ++3784 0 -3788 0 * +Ed + 1e-07 1 1 0 +1 168 0 -2.25 2.25 +2 402 101 0 -2.25 2.25 +2 403 102 0 -2.25 2.25 +4 G1 101 0 102 0 +0 + +0101000 ++3785 0 -3784 0 * +Ed + 1e-07 1 1 0 +1 169 0 1.5707963267949 2.59027568446606 +2 404 102 0 1.5707963267949 2.59027568446606 +4 C0 40 0 102 0 +2 405 40 0 1.5707963267949 2.59027568446606 +0 + +0101000 ++3786 0 -3785 0 * +Ed + 1e-07 1 1 0 +1 170 0 0.551316969123729 1.5707963267949 +2 406 102 0 0.551316969123729 1.5707963267949 +4 C0 102 0 38 0 +2 407 38 0 0.551316969123729 1.5707963267949 +0 + +0101000 ++3784 0 -3787 0 * +Ed + 1e-07 1 1 0 +1 171 0 -6.1 6.1 +2 408 6 0 -6.1 6.1 +4 G1 5 0 6 0 +2 409 5 0 -6.1 6.1 +0 + +0101000 ++3783 0 -3058 49 * +Ed + 1e-07 1 1 0 +1 172 0 -6.1 6.1 +2 410 18 0 -6.1 6.1 +4 G1 5 0 18 0 +2 411 5 0 -6.1 6.1 +0 + +0101000 ++3782 0 -3059 49 * +Ed + 1e-07 1 1 0 +1 173 0 -54.5 54.5 +4 C0 5 0 103 0 +2 412 5 0 -54.5 54.5 +2 413 103 0 -54.5 54.5 +0 + +0101000 ++3782 0 -3783 0 * +Ed + 1e-07 1 1 0 +1 174 0 -5.7 6.5 +2 414 6 0 -5.7 6.5 +4 G1 6 0 8 0 +2 415 8 0 -5.7 6.5 +0 + +0101000 ++3781 0 -3057 49 * +Ed + 9.51703163673272e-05 1 1 0 +1 175 0 109 156.123889804 +2 416 6 0 109 156.123889804 +2 417 104 0 109 156.123889804 +4 C0 6 0 104 0 +0 + +0101000 ++3783 0 -3781 0 * +Ed + 1e-07 1 1 0 +1 176 0 -6.1 6.1 +2 418 9 0 -6.1 6.1 +4 G1 8 0 9 0 +2 419 8 0 -6.1 6.1 +0 + +0101000 ++3780 0 -3056 49 * +Ed + 1e-07 1 1 0 +1 177 0 -5 5 +4 C0 8 0 105 0 +2 420 8 0 -5 5 +0 + +0101000 ++3781 0 -3780 0 * +Ed + 1e-07 1 1 0 +1 178 0 -5.7 6.5 +2 421 9 0 -5.7 6.5 +4 G1 9 0 11 0 +2 422 11 0 -5.7 6.5 +0 + +0101000 ++3779 0 -3055 49 * +Ed + 0.000329339234167311 1 1 0 +1 179 0 166.123889804 191.012333945 +2 423 9 0 166.123889804 191.012333945 +2 424 106 0 166.123889804 191.012333945 +4 C0 9 0 106 0 +0 + +0101000 ++3780 0 -3779 0 * +Ed + 1e-07 1 1 0 +1 180 0 -6.099999999999 6.1 +2 425 12 0 -6.099999999999 6.1 +4 G1 11 0 12 0 +2 426 11 0 -6.099999999999 6.1 +0 + +0101000 ++3778 0 -3054 49 * +Ed + 1e-07 1 1 0 +1 181 0 -14.5117153224708 14.5117153225591 +4 C0 11 0 107 0 +2 427 11 0 -14.5117153224708 14.5117153225591 +0 + +0101000 ++3779 0 -3778 0 * +Ed + 1e-07 1 1 0 +1 182 0 -5.7 6.5 +2 428 12 0 -5.7 6.5 +4 G1 12 0 14 0 +2 429 14 0 -5.7 6.5 +0 + +0101000 ++3777 0 -3053 49 * +Ed + 0.000102671200703963 1 1 0 +1 183 0 220.03576459 262.063292978 +2 430 12 0 220.03576459 262.063292978 +2 431 108 0 220.03576459 262.063292978 +4 C0 12 0 108 0 +0 + +0101000 ++3778 0 -3777 0 * +Ed + 1e-07 1 1 0 +1 184 0 -6.1 6.1 +2 432 15 0 -6.1 6.1 +4 G1 14 0 15 0 +2 433 14 0 -6.1 6.1 +0 + +0101000 ++3776 0 -3052 49 * +Ed + 1e-07 1 1 0 +1 185 0 -17.3985400243 17.3985400243 +4 C0 14 0 109 0 +2 434 14 0 -17.3985400243 17.3985400243 +2 435 109 0 -17.3985400243 17.3985400243 +0 + +0101000 ++3777 0 -3776 0 * +Ed + 1e-07 1 1 0 +1 186 0 -5.7 6.5 +2 436 15 0 -5.7 6.5 +4 G1 15 0 17 0 +2 437 17 0 -5.7 6.5 +0 + +0101000 ++3775 0 -3051 49 * +Ed + 0.000332604549846037 1 1 0 +1 187 0 296.860373027 381.683374674 +2 438 15 0 296.860373027 381.683374674 +2 439 110 0 296.860373027 381.683374674 +4 C0 15 0 110 0 +0 + +0101000 ++3776 0 -3775 0 * +Ed + 1e-07 1 1 0 +1 188 0 -6.1 6.1 +2 440 18 0 -6.1 6.1 +4 G1 17 0 18 0 +2 441 17 0 -6.1 6.1 +0 + +0101000 ++3774 0 -3050 49 * +Ed + 1e-07 1 1 0 +1 189 0 -1 1 +4 C0 17 0 111 0 +2 442 17 0 -1 1 +0 + +0101000 ++3775 0 -3774 0 * +Ed + 0.00331634368160302 1 1 0 +1 190 0 383.683374674 427.665671824 +2 443 18 0 383.683374674 427.665671824 +2 444 112 0 383.683374674 427.665671824 +4 C0 18 0 112 0 +0 + +0101000 ++3774 0 -3782 0 * +Ed + 1.78496884545777e-06 1 1 0 +1 191 0 103.765818054 165.078288992 +2 445 112 0 103.765818054 165.078288992 +4 C0 38 0 112 0 +2 446 38 0 103.765818054 165.078288992 +0 + +0101000 ++3773 0 -3772 0 * +Ed + 1e-07 1 1 0 +1 192 0 -0.99999877806 1 +4 C0 38 0 111 0 +2 447 38 0 -0.99999877806 1 +0 + +0101000 ++3771 0 -3773 0 * +Ed + 1e-07 1 1 0 +1 193 0 206.347322877 325.41616118 +2 448 110 0 206.347322877 325.41616118 +4 C0 38 0 110 0 +2 449 38 0 206.347322877 325.41616118 +0 + +0101000 ++3770 0 -3771 0 * +Ed + 1e-07 1 1 0 +1 194 0 -17.3984787043 17.3985400243 +4 C0 38 0 109 0 +2 450 38 0 -17.3984787043 17.3985400243 +2 451 109 0 -17.3984787043 17.3985400243 +0 + +0101000 ++3769 0 -3770 0 * +Ed + 1e-07 1 1 0 +1 195 0 120.5863912 179.747541089 +2 452 108 0 120.5863912 179.747541089 +4 C0 38 0 108 0 +2 453 38 0 120.5863912 179.747541089 +0 + +0101000 ++3768 0 -3769 0 * +Ed + 1e-07 1 1 0 +1 196 0 -14.5117506034196 14.5117153224708 +4 C0 38 0 107 0 +2 454 38 0 -14.5117506034196 14.5117153224708 +0 + +0101000 ++3767 0 -3768 0 * +Ed + 1e-07 1 1 0 +1 197 0 62.094959106 96.6845153915 +2 455 106 0 62.094959106 96.6845153915 +4 C0 38 0 106 0 +2 456 38 0 62.094959106 96.6845153915 +0 + +0101000 ++3766 0 -3767 0 * +Ed + 1e-07 1 1 0 +1 198 0 -5.00002261243 5 +4 C0 38 0 105 0 +2 457 38 0 -5.00002261243 5 +0 + +0101000 ++3765 0 -3766 0 * +Ed + 1e-07 1 1 0 +1 199 0 243.594787522 309.353508481 +2 458 104 0 243.594787522 309.353508481 +4 C0 38 0 104 0 +2 459 38 0 243.594787522 309.353508481 +0 + +0101000 ++3764 0 -3765 0 * +Ed + 1e-07 1 1 0 +1 200 0 -54.5000035699 54.5 +4 C0 38 0 103 0 +2 460 38 0 -54.5000035699 54.5 +2 461 103 0 -54.5000035699 54.5 +0 + +0101000 ++3772 0 -3764 0 * +Ed + 1.80433595155811e-06 1 1 0 +1 201 0 -0.56568516126912 0.565685424949237 +2 462 112 0 -0.56568516126912 0.565685424949237 +4 G1 103 0 112 0 +2 463 103 0 -0.56568516126912 0.565685424949237 +0 + +0101000 ++3772 0 -3782 0 * +Ed + 1e-07 1 1 0 +1 202 0 -0.56568542494924 0.565685424949237 +2 464 104 0 -0.56568542494924 0.565685424949237 +4 G1 103 0 104 0 +2 465 103 0 -0.56568542494924 0.565685424949237 +0 + +0101000 ++3764 0 -3783 0 * +Ed + 6.23815851957287e-06 1 1 0 +1 203 0 0 1.1313708499 +2 466 104 0 0 1.1313708499 +4 G1 104 0 105 0 +0 + +0101000 ++3765 0 -3781 0 * +Ed + 1e-07 1 1 0 +1 204 0 -0.565685424949232 0.565685424949242 +2 467 106 0 -0.565685424949232 0.565685424949242 +4 G1 105 0 106 0 +0 + +0101000 ++3766 0 -3780 0 * +Ed + 2.52840338211553e-06 1 1 0 +1 205 0 0 1.1313708499 +2 468 106 0 0 1.1313708499 +4 G1 106 0 107 0 +0 + +0101000 ++3767 0 -3779 0 * +Ed + 1e-07 1 1 0 +1 206 0 -0.565685424917272 0.565685424980412 +2 469 108 0 -0.565685424917272 0.565685424980412 +4 G1 107 0 108 0 +0 + +0101000 ++3768 0 -3778 0 * +Ed + 5.937776443219e-06 1 1 0 +1 207 0 0 1.1313708499 +2 470 108 0 0 1.1313708499 +4 G1 108 0 109 0 +2 471 109 0 0 1.1313708499 +0 + +0101000 ++3769 0 -3777 0 * +Ed + 1e-07 1 1 0 +1 208 0 -0.565685424949237 0.565685424949237 +2 472 110 0 -0.565685424949237 0.565685424949237 +4 G1 109 0 110 0 +2 473 109 0 -0.565685424949237 0.565685424949237 +0 + +0101000 ++3770 0 -3776 0 * +Ed + 1.2049220497684e-07 1 1 0 +1 209 0 0 1.13137072940904 +2 474 110 0 0 1.13137072940904 +4 G1 110 0 111 0 +0 + +0101000 ++3771 0 -3775 0 * +Ed + 1e-07 1 1 0 +1 210 0 -0.565685424949232 0.565685424949242 +2 475 112 0 -0.565685424949232 0.565685424949242 +4 G1 111 0 112 0 +0 + +0101000 ++3773 0 -3774 0 * +Ed + 1e-07 1 1 0 +1 211 0 -0.5 0.5 +2 476 19 0 -0.5 0.5 +4 G1 113 0 19 0 +2 477 113 0 -0.5 0.5 +0 + +0101000 ++3059 64 -3763 0 * +Ed + 1e-07 1 1 0 +1 212 0 -0.5 0.5 +2 478 7 0 -0.5 0.5 +4 G1 113 0 7 0 +2 479 113 0 -0.5 0.5 +0 + +0101000 ++3058 64 -3762 0 * +Ed + 1e-07 1 1 0 +1 213 0 -54.5 54.5 +4 C0 113 0 114 0 +2 480 114 0 -54.5 54.5 +2 481 113 0 -54.5 54.5 +0 + +0101000 ++3763 0 -3762 0 * +Ed + 1e-07 1 1 0 +1 214 0 -0.5 0.5 +2 482 7 0 -0.5 0.5 +4 G1 7 0 115 0 +2 483 115 0 -0.5 0.5 +0 + +0101000 ++3057 64 -3761 0 * +Ed + 1e-07 1 1 0 +1 215 0 109 156.123889804 +2 484 7 0 109 156.123889804 +4 C0 7 0 114 0 +2 485 114 0 109 156.123889804 +0 + +0101000 ++3762 0 -3761 0 * +Ed + 1e-07 1 1 0 +1 216 0 -0.5 0.5 +2 486 10 0 -0.5 0.5 +4 G1 115 0 10 0 +2 487 115 0 -0.5 0.5 +0 + +0101000 ++3056 64 -3760 0 * +Ed + 1e-07 1 1 0 +1 217 0 -5 5 +4 C0 115 0 114 0 +2 488 114 0 -5 5 +2 489 115 0 -5 5 +0 + +0101000 ++3761 0 -3760 0 * +Ed + 1e-07 1 1 0 +1 218 0 -0.5 0.5 +2 490 10 0 -0.5 0.5 +4 G1 10 0 116 0 +2 491 116 0 -0.5 0.5 +0 + +0101000 ++3055 64 -3759 0 * +Ed + 1e-07 1 1 0 +1 219 0 166.123889804 191.012333945 +2 492 10 0 166.123889804 191.012333945 +4 C0 10 0 114 0 +2 493 114 0 166.123889804 191.012333945 +0 + +0101000 ++3760 0 -3759 0 * +Ed + 1e-07 1 1 0 +1 220 0 -0.5 0.5 +2 494 13 0 -0.5 0.5 +4 G1 116 0 13 0 +2 495 116 0 -0.5 0.5 +0 + +0101000 ++3054 64 -3758 0 * +Ed + 1e-07 1 1 0 +1 221 0 -14.5117153225591 14.5117153224708 +4 C0 116 0 114 0 +2 496 114 0 -14.5117153225591 14.5117153224708 +2 497 116 0 -14.5117153225591 14.5117153224708 +0 + +0101000 ++3759 0 -3758 0 * +Ed + 1e-07 1 1 0 +1 222 0 -0.5 0.5 +2 498 13 0 -0.5 0.5 +4 G1 13 0 117 0 +2 499 117 0 -0.5 0.5 +0 + +0101000 ++3053 64 -3757 0 * +Ed + 1e-07 1 1 0 +1 223 0 220.03576459 262.063292978 +2 500 13 0 220.03576459 262.063292978 +4 C0 13 0 114 0 +2 501 114 0 220.03576459 262.063292978 +0 + +0101000 ++3758 0 -3757 0 * +Ed + 1e-07 1 1 0 +1 224 0 -0.5 0.5 +2 502 16 0 -0.5 0.5 +4 G1 117 0 16 0 +2 503 117 0 -0.5 0.5 +0 + +0101000 ++3052 64 -3756 0 * +Ed + 1e-07 1 1 0 +1 225 0 -17.3985400243 17.3985400243 +4 C0 117 0 114 0 +2 504 114 0 -17.3985400243 17.3985400243 +2 505 117 0 -17.3985400243 17.3985400243 +0 + +0101000 ++3757 0 -3756 0 * +Ed + 1e-07 1 1 0 +1 226 0 -0.5 0.5 +2 506 16 0 -0.5 0.5 +4 G1 16 0 118 0 +2 507 118 0 -0.5 0.5 +0 + +0101000 ++3051 64 -3755 0 * +Ed + 1e-07 1 1 0 +1 227 0 296.860373027 381.683374674 +2 508 16 0 296.860373027 381.683374674 +4 C0 16 0 114 0 +2 509 114 0 296.860373027 381.683374674 +0 + +0101000 ++3756 0 -3755 0 * +Ed + 1e-07 1 1 0 +1 228 0 -0.5 0.5 +2 510 19 0 -0.5 0.5 +4 G1 118 0 19 0 +2 511 118 0 -0.5 0.5 +0 + +0101000 ++3050 64 -3754 0 * +Ed + 1e-07 1 1 0 +1 229 0 -1 1 +4 C0 118 0 114 0 +2 512 114 0 -1 1 +2 513 118 0 -1 1 +0 + +0101000 ++3755 0 -3754 0 * +Ed + 1e-07 1 1 0 +1 230 0 383.683374674 427.665671824 +2 514 19 0 383.683374674 427.665671824 +4 C0 19 0 114 0 +2 515 114 0 383.683374674 427.665671824 +0 + +0101000 ++3754 0 -3763 0 * +Ed + 1e-07 1 1 0 +1 231 0 -0.141421356237311 0.141421356237309 +2 516 119 0 -0.141421356237311 0.141421356237309 +2 517 120 0 -0.141421356237311 0.141421356237309 +4 CN 119 0 120 0 +0 + +0101000 ++3753 0 -3752 0 * +Ed + 1.00001364242053e-07 1 1 0 +1 232 0 4.71238898038469 7.85398163397448 +2 518 119 0 4.71238898038469 7.85398163397448 +4 C0 119 0 121 0 +2 519 121 0 4.71238898038469 7.85398163397448 +2 520 122 65 4.71238898038469 7.85398163397448 +0 + +0101000 ++3753 0 -3751 0 * +Ed + 1e-07 1 1 0 +1 233 0 -0.141421356237311 0.141421356237309 +2 521 119 0 -0.141421356237311 0.141421356237309 +2 522 120 0 -0.141421356237311 0.141421356237309 +4 CN 119 0 120 0 +0 + +0101000 ++3751 0 -3750 0 * +Ed + 1e-07 1 1 0 +1 234 0 4.71238898038469 7.85398163397448 +2 523 119 0 4.71238898038469 7.85398163397448 +2 524 123 0 4.71238898038469 7.85398163397448 +4 C0 119 0 123 0 +0 + +0101000 ++3752 0 -3750 0 * +Ed + 1.00001412032745e-07 1 1 0 +1 235 0 3.14159265358979 6.28318530717959 +2 525 120 0 3.14159265358979 6.28318530717959 +4 C0 120 0 121 0 +2 526 121 0 3.14159265358979 6.28318530717959 +2 527 122 65 3.14159265358979 6.28318530717959 +0 + +0101000 ++3751 0 -3753 0 * +Ed + 1e-07 1 1 0 +1 236 0 3.14159265358979 6.28318530717959 +2 528 120 0 3.14159265358979 6.28318530717959 +2 529 124 0 3.14159265358979 6.28318530717959 +4 C0 120 0 124 0 +0 + +0101000 ++3750 0 -3752 0 * +Ed + 1e-07 1 1 0 +1 237 0 -1.3 1.3 +2 530 123 0 -1.3 1.3 +2 531 124 0 -1.3 1.3 +4 CN 123 0 124 0 +0 + +0101000 ++3752 0 -3749 0 * +Ed + 1e-07 1 1 0 +1 238 0 -1.3 1.3 +2 532 123 0 -1.3 1.3 +2 533 124 0 -1.3 1.3 +4 CN 123 0 124 0 +0 + +0101000 ++3750 0 -3748 0 * +Ed + 1e-07 1 1 0 +1 239 0 0 3.14159265358979 +2 534 123 0 0 3.14159265358979 +2 535 125 0 0 3.14159265358979 +4 C0 123 0 125 0 +0 + +0101000 ++3749 0 -3748 0 * +Ed + 1e-07 1 1 0 +1 240 0 3.14159265358979 6.28318530717959 +2 536 124 0 3.14159265358979 6.28318530717959 +2 537 126 0 3.14159265358979 6.28318530717959 +4 C0 124 0 126 0 +0 + +0101000 ++3748 0 -3749 0 * +Ed + 1e-07 1 1 0 +1 241 0 -0.141421356237311 0.141421356237309 +2 538 125 0 -0.141421356237311 0.141421356237309 +2 539 126 0 -0.141421356237311 0.141421356237309 +4 CN 125 0 126 0 +0 + +0101000 ++3747 0 -3749 0 * +Ed + 1e-07 1 1 0 +1 242 0 -0.141421356237311 0.141421356237309 +2 540 125 0 -0.141421356237311 0.141421356237309 +2 541 126 0 -0.141421356237311 0.141421356237309 +4 CN 125 0 126 0 +0 + +0101000 ++3746 0 -3748 0 * +Ed + 1.0000024158453e-07 1 1 0 +1 243 0 4.71238898038469 7.85398163397448 +2 542 125 0 4.71238898038469 7.85398163397448 +4 C0 125 0 127 0 +2 543 127 0 4.71238898038469 7.85398163397448 +2 544 128 66 4.71238898038469 7.85398163397448 +0 + +0101000 ++3747 0 -3746 0 * +Ed + 1.00000113686838e-07 1 1 0 +1 244 0 3.14159265358979 6.28318530717959 +2 545 126 0 3.14159265358979 6.28318530717959 +4 C0 126 0 127 0 +2 546 127 0 3.14159265358979 6.28318530717959 +2 547 128 66 3.14159265358979 6.28318530717959 +0 + +0101000 ++3746 0 -3747 0 * +Ed + 1.00000170530257e-07 1 1 0 +1 245 0 0 3.14159265358979 +2 548 93 0 0 3.14159265358979 +4 C0 93 0 128 0 +2 549 128 0 0 3.14159265358979 +2 550 127 67 0 3.14159265358979 +0 + +0101000 ++3745 0 -3744 0 * +Ed + 1.00000170530257e-07 1 1 0 +1 246 0 3.14159265358979 6.28318530717959 +2 551 92 0 3.14159265358979 6.28318530717959 +4 C0 92 0 128 0 +2 552 128 0 3.14159265358979 6.28318530717959 +2 553 127 67 3.14159265358979 6.28318530717959 +0 + +0101000 ++3744 0 -3745 0 * +Ed + 1.00000198951966e-07 1 1 0 +1 247 0 5.21238898038437 8.35398163397416 +2 554 129 0 5.21238898038437 8.35398163397416 +4 C0 130 0 129 0 +2 555 130 0 5.21238898038437 8.35398163397416 +2 556 127 68 5.21238898038437 8.35398163397416 +0 + +0101000 ++3743 0 -3742 0 * +Ed + 1.00000184741111e-07 1 1 0 +1 248 0 2.07079632679458 5.21238898038437 +2 557 131 0 2.07079632679458 5.21238898038437 +4 C0 130 0 131 0 +2 558 130 0 2.07079632679458 5.21238898038437 +2 559 127 68 2.07079632679458 5.21238898038437 +0 + +0101000 ++3742 0 -3743 0 * +Ed + 1.0000024158453e-07 1 1 0 +1 249 0 3.14159265358979 6.28318530717959 +2 560 132 0 3.14159265358979 6.28318530717959 +4 C0 127 0 132 0 +2 561 127 0 3.14159265358979 6.28318530717959 +2 562 130 69 3.14159265358979 6.28318530717959 +0 + +0101000 ++3741 0 -3740 0 * +Ed + 1.0000024158453e-07 1 1 0 +1 250 0 0 3.14159265358979 +2 563 133 0 0 3.14159265358979 +4 C0 127 0 133 0 +2 564 127 0 0 3.14159265358979 +2 565 130 69 0 3.14159265358979 +0 + +0101000 ++3740 0 -3741 0 * +Ed + 1.00000355271368e-07 1 1 0 +1 251 0 4.71238898038469 5.78318530717991 +2 566 133 0 4.71238898038469 5.78318530717991 +2 567 134 0 4.71238898038469 5.78318530717991 +4 C0 133 0 134 0 +2 568 135 69 4.71238898038469 5.78318530717991 +0 + +0101000 ++3739 0 -3738 70 * +Ed + 1.00000341060513e-07 1 1 0 +1 251 0 5.78318530717991 7.85398163397448 +2 566 133 0 5.78318530717991 7.85398163397448 +2 567 134 0 5.78318530717991 7.85398163397448 +4 C0 133 0 134 0 +2 569 136 69 5.78318530717991 7.85398163397448 +0 + +0101000 ++3738 70 -3737 0 * +Ed + 1e-07 1 1 0 +1 252 0 -0.141421356237309 0.141421356237309 +2 570 133 0 -0.141421356237309 0.141421356237309 +2 571 132 0 -0.141421356237309 0.141421356237309 +4 CN 133 0 132 0 +0 + +0101000 ++3737 0 -3741 0 * +Ed + 1e-07 1 1 0 +1 253 0 -0.141421356237309 0.141421356237309 +2 572 133 0 -0.141421356237309 0.141421356237309 +2 573 132 0 -0.141421356237309 0.141421356237309 +4 CN 133 0 132 0 +0 + +0101000 ++3739 0 -3740 0 * +Ed + 1.00000341060513e-07 1 1 0 +1 254 0 3.14159265358979 4.21238898038485 +2 574 132 0 3.14159265358979 4.21238898038485 +2 575 137 0 3.14159265358979 4.21238898038485 +4 C0 132 0 137 0 +2 576 136 69 3.14159265358979 4.21238898038485 +0 + +0101000 ++3737 0 -3736 70 * +Ed + 1.00000369482223e-07 1 1 0 +1 254 0 4.21238898038485 6.28318530717959 +2 574 132 0 4.21238898038485 6.28318530717959 +2 575 137 0 4.21238898038485 6.28318530717959 +4 C0 132 0 137 0 +2 577 135 69 4.21238898038485 6.28318530717959 +0 + +0101000 ++3736 70 -3739 0 * +Ed + 1.00000227373675e-07 1 1 0 +1 255 0 2.07079632679519 5.21238898038498 +2 578 138 0 2.07079632679519 5.21238898038498 +4 G1 122 0 138 0 +2 579 122 0 2.07079632679519 5.21238898038498 +2 580 121 71 2.07079632679519 5.21238898038498 +0 + +0101000 ++3735 0 -3734 0 * +Ed + 1.00000227373675e-07 1 1 0 +1 256 0 5.21238898038498 8.35398163397478 +2 581 139 0 5.21238898038498 8.35398163397478 +4 G1 122 0 139 0 +2 582 122 0 5.21238898038498 8.35398163397478 +2 583 121 71 5.21238898038498 8.35398163397478 +0 + +0101000 ++3734 0 -3735 0 * +Ed + 1e-07 1 1 0 +1 257 0 3.14159265358979 6.28318530717959 +2 584 140 0 3.14159265358979 6.28318530717959 +4 C0 121 0 140 0 +2 585 121 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3733 0 -3732 0 * +Ed + 1e-07 1 1 0 +1 258 0 0 3.14159265358979 +2 586 141 0 0 3.14159265358979 +4 C0 121 0 141 0 +2 587 121 0 0 3.14159265358979 +0 + +0101000 ++3732 0 -3733 0 * +Ed + 1e-07 1 1 0 +1 259 0 3.14159265358979 6.28318530717959 +2 588 137 0 3.14159265358979 6.28318530717959 +2 589 140 0 3.14159265358979 6.28318530717959 +4 C0 137 0 140 0 +0 + +0101000 ++3731 0 -3730 0 * +Ed + 1e-07 1 1 0 +1 260 0 -1.3 -0.975500200199495 +2 590 137 0 -1.3 -0.975500200199495 +2 591 134 0 -1.3 -0.975500200199495 +4 CN 137 0 134 0 +0 + +0101000 ++3731 0 -3729 70 * +Ed + 1.00000312638804e-07 1 1 0 +1 261 0 2.07079632679468 3.14159265358979 +2 592 136 0 2.07079632679468 3.14159265358979 +2 593 142 0 2.07079632679468 3.14159265358979 +4 G1 136 0 142 0 +2 594 137 68 2.07079632679468 3.14159265358979 +0 + +0101000 ++3728 0 -3729 54 * +Ed + 1.00000397903932e-07 1 1 0 +1 262 0 6.28318530717965 8.35398163397426 +2 595 135 0 6.28318530717965 8.35398163397426 +2 596 143 0 6.28318530717965 8.35398163397426 +4 G1 135 0 143 0 +2 597 137 68 6.28318530717965 8.35398163397426 +0 + +0101000 ++3727 54 -3728 0 * +Ed + 1e-07 1 1 0 +1 263 0 -1.3 -0.975500200199475 +2 598 137 0 -1.3 -0.975500200199475 +2 599 134 0 -1.3 -0.975500200199475 +4 CN 137 0 134 0 +0 + +0101000 ++3730 0 -3727 70 * +Ed + 1.00004217536526e-07 1 1 0 +1 264 0 -8.39999999999902 -6.1244997998 +2 600 135 0 -8.39999999999902 -6.1244997998 +2 601 136 0 -8.39999999999902 -6.1244997998 +4 CN 135 0 136 0 +2 602 137 68 -8.39999999999902 -6.1244997998 +0 + +0101000 ++3736 54 -3728 0 * +Ed + 1.00000369482223e-07 1 1 0 +1 263 0 -0.975500200199475 1.3 +2 598 137 0 -0.975500200199475 1.3 +2 599 134 0 -0.975500200199475 1.3 +4 CN 137 0 134 0 +2 603 135 69 -0.975500200199475 1.3 +0 + +0101000 ++3727 70 -3739 0 * +Ed + 1.00000957204186e-07 1 1 0 +1 260 0 -0.975500200199495 1.3 +2 590 137 0 -0.975500200199495 1.3 +2 591 134 0 -0.975500200199495 1.3 +4 CN 137 0 134 0 +2 604 136 69 -0.975500200199495 1.3 +0 + +0101000 ++3729 70 -3737 0 * +Ed + 1e-07 1 1 0 +1 265 0 0 3.14159265358979 +2 605 134 0 0 3.14159265358979 +2 606 141 0 0 3.14159265358979 +4 C0 134 0 141 0 +0 + +0101000 ++3730 0 -3731 0 * +Ed + 1.00000397903932e-07 1 1 0 +1 262 0 5.21238898038447 6.28318530717965 +2 595 135 0 5.21238898038447 6.28318530717965 +2 596 143 0 5.21238898038447 6.28318530717965 +4 G1 135 0 143 0 +2 607 134 68 5.21238898038447 6.28318530717965 +0 + +0101000 ++3726 0 -3727 54 * +Ed + 1.00000925343818e-07 1 1 0 +1 261 0 3.14159265358979 5.21238898038447 +2 592 136 0 3.14159265358979 5.21238898038447 +2 593 142 0 3.14159265358979 5.21238898038447 +4 G1 136 0 142 0 +2 608 134 68 3.14159265358979 5.21238898038447 +0 + +0101000 ++3729 54 -3726 0 * +Ed + 1.00004870178299e-07 1 1 0 +1 266 0 -8.39999999999995 -6.1244997998 +2 609 135 0 -8.39999999999995 -6.1244997998 +2 610 136 0 -8.39999999999995 -6.1244997998 +4 CN 135 0 136 0 +2 611 134 68 -8.39999999999995 -6.1244997998 +0 + +0101000 ++3738 54 -3726 0 * +Ed + 1e-07 1 1 0 +1 267 0 -0.141421356237309 0.141421356237309 +2 612 140 0 -0.141421356237309 0.141421356237309 +2 613 141 0 -0.141421356237309 0.141421356237309 +4 CN 140 0 141 0 +0 + +0101000 ++3730 0 -3732 0 * +Ed + 1e-07 1 1 0 +1 268 0 -0.141421356237309 0.141421356237309 +2 614 140 0 -0.141421356237309 0.141421356237309 +2 615 141 0 -0.141421356237309 0.141421356237309 +4 CN 140 0 141 0 +0 + +0101000 ++3731 0 -3733 0 * +Ed + 1e-07 1 1 0 +1 269 0 -0.141421356237311 0.141421356237309 +2 616 144 0 -0.141421356237311 0.141421356237309 +2 617 145 0 -0.141421356237311 0.141421356237309 +4 CN 144 0 145 0 +0 + +0101000 ++3725 0 -3724 0 * +Ed + 1.00001379038797e-07 1 1 0 +1 270 0 4.71238898038469 7.85398163397448 +2 618 144 0 4.71238898038469 7.85398163397448 +4 C0 144 0 146 0 +2 619 146 0 4.71238898038469 7.85398163397448 +2 620 147 72 4.71238898038469 7.85398163397448 +2 621 147 73 4.71238898038469 7.85398163397448 +0 + +0101000 ++3725 0 -3723 0 * +Ed + 1e-07 1 1 0 +1 271 0 -0.141421356237311 0.141421356237309 +2 622 144 0 -0.141421356237311 0.141421356237309 +2 623 145 0 -0.141421356237311 0.141421356237309 +4 CN 144 0 145 0 +0 + +0101000 ++3723 0 -3722 0 * +Ed + 1e-07 1 1 0 +1 272 0 4.71238898038469 7.85398163397448 +2 624 144 0 4.71238898038469 7.85398163397448 +2 625 148 0 4.71238898038469 7.85398163397448 +4 C0 144 0 148 0 +0 + +0101000 ++3724 0 -3722 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 273 0 3.14159265358979 6.28318530717959 +2 626 145 0 3.14159265358979 6.28318530717959 +4 C0 145 0 146 0 +2 627 146 0 3.14159265358979 6.28318530717959 +2 628 147 72 3.14159265358979 6.28318530717959 +2 629 147 73 3.14159265358979 6.28318530717959 +0 + +0101000 ++3723 0 -3725 0 * +Ed + 1e-07 1 1 0 +1 274 0 3.14159265358979 6.28318530717959 +2 630 145 0 3.14159265358979 6.28318530717959 +2 631 149 0 3.14159265358979 6.28318530717959 +4 C0 145 0 149 0 +0 + +0101000 ++3722 0 -3724 0 * +Ed + 1e-07 1 1 0 +1 275 0 -1.3 1.3 +2 632 148 0 -1.3 1.3 +2 633 149 0 -1.3 1.3 +4 CN 148 0 149 0 +0 + +0101000 ++3724 0 -3721 0 * +Ed + 1e-07 1 1 0 +1 276 0 -1.3 1.3 +2 634 148 0 -1.3 1.3 +2 635 149 0 -1.3 1.3 +4 CN 148 0 149 0 +0 + +0101000 ++3722 0 -3720 0 * +Ed + 1e-07 1 1 0 +1 277 0 0 3.14159265358979 +2 636 148 0 0 3.14159265358979 +2 637 150 0 0 3.14159265358979 +4 C0 148 0 150 0 +0 + +0101000 ++3721 0 -3720 0 * +Ed + 1e-07 1 1 0 +1 278 0 3.14159265358979 6.28318530717959 +2 638 149 0 3.14159265358979 6.28318530717959 +2 639 151 0 3.14159265358979 6.28318530717959 +4 C0 149 0 151 0 +0 + +0101000 ++3720 0 -3721 0 * +Ed + 1e-07 1 1 0 +1 279 0 -0.141421356237311 0.141421356237309 +2 640 150 0 -0.141421356237311 0.141421356237309 +2 641 151 0 -0.141421356237311 0.141421356237309 +4 CN 150 0 151 0 +0 + +0101000 ++3719 0 -3721 0 * +Ed + 1e-07 1 1 0 +1 280 0 -0.141421356237311 0.141421356237309 +2 642 150 0 -0.141421356237311 0.141421356237309 +2 643 151 0 -0.141421356237311 0.141421356237309 +4 CN 150 0 151 0 +0 + +0101000 ++3718 0 -3720 0 * +Ed + 1.00000255795385e-07 1 1 0 +1 281 0 4.71238898038469 7.85398163397448 +2 644 150 0 4.71238898038469 7.85398163397448 +4 C0 150 0 152 0 +2 645 152 0 4.71238898038469 7.85398163397448 +2 646 153 74 4.71238898038469 7.85398163397448 +2 647 153 75 4.71238898038469 7.85398163397448 +0 + +0101000 ++3719 0 -3718 0 * +Ed + 1.00000298427949e-07 1 1 0 +1 282 0 3.14159265358979 6.28318530717959 +2 648 151 0 3.14159265358979 6.28318530717959 +4 C0 151 0 152 0 +2 649 152 0 3.14159265358979 6.28318530717959 +2 650 153 74 3.14159265358979 6.28318530717959 +2 651 153 75 3.14159265358979 6.28318530717959 +0 + +0101000 ++3718 0 -3719 0 * +Ed + 1.00000184741111e-07 1 1 0 +1 283 0 0 3.14159265358979 +2 652 81 0 0 3.14159265358979 +4 C0 81 0 153 0 +2 653 153 0 0 3.14159265358979 +2 654 152 76 0 3.14159265358979 +2 655 152 77 0 3.14159265358979 +0 + +0101000 ++3717 0 -3716 0 * +Ed + 1.00000213162821e-07 1 1 0 +1 284 0 3.14159265358979 6.28318530717959 +2 656 80 0 3.14159265358979 6.28318530717959 +4 C0 80 0 153 0 +2 657 153 0 3.14159265358979 6.28318530717959 +2 658 152 76 3.14159265358979 6.28318530717959 +2 659 152 77 3.14159265358979 6.28318530717959 +0 + +0101000 ++3716 0 -3717 0 * +Ed + 1.00000198951966e-07 1 1 0 +1 285 0 5.21238898038468 8.35398163397447 +2 660 154 0 5.21238898038468 8.35398163397447 +4 C0 155 0 154 0 +2 661 155 0 5.21238898038468 8.35398163397447 +2 662 152 78 5.21238898038468 8.35398163397447 +2 663 152 79 5.21238898038468 8.35398163397447 +0 + +0101000 ++3715 0 -3714 0 * +Ed + 1.00000142108547e-07 1 1 0 +1 286 0 2.07079632679489 5.21238898038468 +2 664 156 0 2.07079632679489 5.21238898038468 +4 C0 155 0 156 0 +2 665 155 0 2.07079632679489 5.21238898038468 +2 666 152 78 2.07079632679489 5.21238898038468 +2 667 152 79 2.07079632679489 5.21238898038468 +0 + +0101000 ++3714 0 -3715 0 * +Ed + 1.00000971340767e-07 1 1 0 +1 287 0 3.14159265358979 6.28318530717959 +2 668 157 0 3.14159265358979 6.28318530717959 +4 C0 152 0 157 0 +2 669 152 0 3.14159265358979 6.28318530717959 +2 670 155 80 3.14159265358979 6.28318530717959 +2 671 155 81 3.14159265358979 6.28318530717959 +0 + +0101000 ++3713 0 -3712 0 * +Ed + 1.00000312638804e-07 1 1 0 +1 288 0 0 3.14159265358979 +2 672 158 0 0 3.14159265358979 +4 C0 152 0 158 0 +2 673 152 0 0 3.14159265358979 +2 674 155 80 0 3.14159265358979 +2 675 155 81 0 3.14159265358979 +0 + +0101000 ++3712 0 -3713 0 * +Ed + 1.00000454747351e-07 1 1 0 +1 289 0 4.71238898038469 5.7831853071788 +2 676 158 0 4.71238898038469 5.7831853071788 +2 677 159 0 4.71238898038469 5.7831853071788 +4 C0 158 0 159 0 +2 678 160 80 4.71238898038469 5.7831853071788 +0 + +0101000 ++3711 0 -3710 82 * +Ed + 1.00000961729502e-07 1 1 0 +1 289 0 5.7831853071788 7.85398163397448 +2 676 158 0 5.7831853071788 7.85398163397448 +2 677 159 0 5.7831853071788 7.85398163397448 +4 C0 158 0 159 0 +2 679 161 80 5.7831853071788 7.85398163397448 +0 + +0101000 ++3710 82 -3709 0 * +Ed + 1e-07 1 1 0 +1 290 0 -0.141421356237309 0.14142135623731 +2 680 158 0 -0.141421356237309 0.14142135623731 +2 681 157 0 -0.141421356237309 0.14142135623731 +4 CN 158 0 157 0 +0 + +0101000 ++3709 0 -3713 0 * +Ed + 1e-07 1 1 0 +1 291 0 -0.141421356237309 0.14142135623731 +2 682 158 0 -0.141421356237309 0.14142135623731 +2 683 157 0 -0.141421356237309 0.14142135623731 +4 CN 158 0 157 0 +0 + +0101000 ++3711 0 -3712 0 * +Ed + 1.00000397903932e-07 1 1 0 +1 292 0 3.14159265358979 4.21238898038369 +2 684 157 0 3.14159265358979 4.21238898038369 +2 685 162 0 3.14159265358979 4.21238898038369 +4 C0 157 0 162 0 +2 686 161 80 3.14159265358979 4.21238898038369 +0 + +0101000 ++3709 0 -3708 82 * +Ed + 1.00000981681071e-07 1 1 0 +1 292 0 4.21238898038369 6.28318530717959 +2 684 157 0 4.21238898038369 6.28318530717959 +2 685 162 0 4.21238898038369 6.28318530717959 +4 C0 157 0 162 0 +2 687 160 80 4.21238898038369 6.28318530717959 +0 + +0101000 ++3708 82 -3711 0 * +Ed + 1.0000140054444e-07 1 1 0 +1 293 0 2.07079632679527 5.21238898038506 +2 688 163 0 2.07079632679527 5.21238898038506 +4 G1 147 0 163 0 +2 689 147 0 2.07079632679527 5.21238898038506 +2 690 146 83 2.07079632679527 5.21238898038506 +2 691 146 84 2.07079632679527 5.21238898038506 +0 + +0101000 ++3707 0 -3706 0 * +Ed + 1.00000976421199e-07 1 1 0 +1 294 0 5.21238898038506 8.35398163397486 +2 692 164 0 5.21238898038506 8.35398163397486 +4 G1 147 0 164 0 +2 693 147 0 5.21238898038506 8.35398163397486 +2 694 146 83 5.21238898038506 8.35398163397486 +2 695 146 84 5.21238898038506 8.35398163397486 +0 + +0101000 ++3706 0 -3707 0 * +Ed + 1e-07 1 1 0 +1 295 0 0 3.14159265358979 +2 696 165 0 0 3.14159265358979 +4 C0 146 0 165 0 +2 697 146 0 0 3.14159265358979 +0 + +0101000 ++3705 0 -3704 0 * +Ed + 1e-07 1 1 0 +1 296 0 3.14159265358979 6.28318530717959 +2 698 166 0 3.14159265358979 6.28318530717959 +4 C0 146 0 166 0 +2 699 146 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3704 0 -3705 0 * +Ed + 1e-07 1 1 0 +1 297 0 3.14159265358979 6.28318530717959 +2 700 162 0 3.14159265358979 6.28318530717959 +2 701 166 0 3.14159265358979 6.28318530717959 +4 C0 162 0 166 0 +0 + +0101000 ++3703 0 -3702 0 * +Ed + 1e-07 1 1 0 +1 298 0 -1.3 -1.02554373530023 +2 702 162 0 -1.3 -1.02554373530023 +2 703 159 0 -1.3 -1.02554373530023 +4 CN 162 0 159 0 +0 + +0101000 ++3703 0 -3701 82 * +Ed + 1.00000454747351e-07 1 1 0 +1 299 0 2.07079632679577 3.14159265358979 +2 704 161 0 2.07079632679577 3.14159265358979 +2 705 167 0 2.07079632679577 3.14159265358979 +4 G1 161 0 167 0 +2 706 162 78 2.07079632679577 3.14159265358979 +0 + +0101000 ++3700 0 -3701 60 * +Ed + 1.00000961729502e-07 1 1 0 +1 300 0 6.2831853071795 8.35398163397536 +2 707 160 0 6.2831853071795 8.35398163397536 +2 708 168 0 6.2831853071795 8.35398163397536 +4 G1 160 0 168 0 +2 709 162 78 6.2831853071795 8.35398163397536 +0 + +0101000 ++3699 60 -3700 0 * +Ed + 1e-07 1 1 0 +1 301 0 -1.3 -1.02554373530013 +2 710 162 0 -1.3 -1.02554373530013 +2 711 159 0 -1.3 -1.02554373530013 +4 CN 162 0 159 0 +0 + +0101000 ++3702 0 -3699 82 * +Ed + 1.00000426325641e-07 1 1 0 +1 302 0 -8.40000000000022 -6.0744562647 +2 712 160 0 -8.40000000000022 -6.0744562647 +2 713 161 0 -8.40000000000022 -6.0744562647 +4 CN 160 0 161 0 +2 714 162 78 -8.40000000000022 -6.0744562647 +0 + +0101000 ++3708 60 -3700 0 * +Ed + 1.00000341060513e-07 1 1 0 +1 301 0 -1.02554373530013 1.3 +2 710 162 0 -1.02554373530013 1.3 +2 711 159 0 -1.02554373530013 1.3 +4 CN 162 0 159 0 +2 715 160 80 -1.02554373530013 1.3 +0 + +0101000 ++3699 82 -3711 0 * +Ed + 1.00000341060513e-07 1 1 0 +1 298 0 -1.02554373530023 1.3 +2 702 162 0 -1.02554373530023 1.3 +2 703 159 0 -1.02554373530023 1.3 +4 CN 162 0 159 0 +2 716 161 80 -1.02554373530023 1.3 +0 + +0101000 ++3701 82 -3709 0 * +Ed + 1e-07 1 1 0 +1 303 0 0 3.14159265358979 +2 717 159 0 0 3.14159265358979 +2 718 165 0 0 3.14159265358979 +4 C0 159 0 165 0 +0 + +0101000 ++3702 0 -3703 0 * +Ed + 1.0000051159077e-07 1 1 0 +1 300 0 5.21238898038557 6.2831853071795 +2 707 160 0 5.21238898038557 6.2831853071795 +2 708 168 0 5.21238898038557 6.2831853071795 +4 G1 160 0 168 0 +2 719 159 78 5.21238898038557 6.2831853071795 +0 + +0101000 ++3698 0 -3699 60 * +Ed + 1.00001287475203e-07 1 1 0 +1 299 0 3.14159265358979 5.21238898038557 +2 704 161 0 3.14159265358979 5.21238898038557 +2 705 167 0 3.14159265358979 5.21238898038557 +4 G1 161 0 167 0 +2 720 159 78 3.14159265358979 5.21238898038557 +0 + +0101000 ++3701 60 -3698 0 * +Ed + 1.00000255795385e-07 1 1 0 +1 304 0 -8.40000000000007 -6.0744562647 +2 721 160 0 -8.40000000000007 -6.0744562647 +2 722 161 0 -8.40000000000007 -6.0744562647 +4 CN 160 0 161 0 +2 723 159 78 -8.40000000000007 -6.0744562647 +0 + +0101000 ++3710 60 -3698 0 * +Ed + 1e-07 1 1 0 +1 305 0 -0.141421356237309 0.14142135623731 +2 724 165 0 -0.141421356237309 0.14142135623731 +2 725 166 0 -0.141421356237309 0.14142135623731 +4 CN 165 0 166 0 +0 + +0101000 ++3703 0 -3704 0 * +Ed + 1e-07 1 1 0 +1 306 0 -0.141421356237309 0.14142135623731 +2 726 165 0 -0.141421356237309 0.14142135623731 +2 727 166 0 -0.141421356237309 0.14142135623731 +4 CN 165 0 166 0 +0 + +0101000 ++3702 0 -3705 0 * +Ed + 1.00000440536496e-07 1 1 0 +1 289 0 4.71238898038469 5.7831853071788 +2 676 158 0 4.71238898038469 5.7831853071788 +2 677 159 0 4.71238898038469 5.7831853071788 +4 C0 158 0 159 0 +2 728 160 81 4.71238898038469 5.7831853071788 +0 + +0101000 ++3711 0 -3697 85 * +Ed + 1.00000961729502e-07 1 1 0 +1 289 0 5.7831853071788 7.85398163397448 +2 676 158 0 5.7831853071788 7.85398163397448 +2 677 159 0 5.7831853071788 7.85398163397448 +4 C0 158 0 159 0 +2 729 161 81 5.7831853071788 7.85398163397448 +0 + +0101000 ++3697 85 -3709 0 * +Ed + 1.00000412114787e-07 1 1 0 +1 292 0 3.14159265358979 4.21238898038369 +2 684 157 0 3.14159265358979 4.21238898038369 +2 685 162 0 3.14159265358979 4.21238898038369 +4 C0 157 0 162 0 +2 730 161 81 3.14159265358979 4.21238898038369 +0 + +0101000 ++3709 0 -3696 85 * +Ed + 1.00000976421199e-07 1 1 0 +1 292 0 4.21238898038369 6.28318530717959 +2 684 157 0 4.21238898038369 6.28318530717959 +2 685 162 0 4.21238898038369 6.28318530717959 +4 C0 157 0 162 0 +2 731 160 81 4.21238898038369 6.28318530717959 +0 + +0101000 ++3696 85 -3711 0 * +Ed + 1e-07 1 1 0 +1 298 0 -1.3 -1.02554373530024 +2 702 162 0 -1.3 -1.02554373530024 +2 703 159 0 -1.3 -1.02554373530024 +4 CN 162 0 159 0 +0 + +0101000 ++3703 0 -3695 85 * +Ed + 1.00000426325641e-07 1 1 0 +1 299 0 2.07079632679577 3.14159265358979 +2 704 161 0 2.07079632679577 3.14159265358979 +2 705 167 0 2.07079632679577 3.14159265358979 +4 G1 161 0 167 0 +2 732 162 79 2.07079632679577 3.14159265358979 +0 + +0101000 ++3700 0 -3695 57 * +Ed + 1.00000966442607e-07 1 1 0 +1 300 0 6.2831853071795 8.35398163397536 +2 707 160 0 6.2831853071795 8.35398163397536 +2 708 168 0 6.2831853071795 8.35398163397536 +4 G1 160 0 168 0 +2 733 162 79 6.2831853071795 8.35398163397536 +0 + +0101000 ++3694 57 -3700 0 * +Ed + 1e-07 1 1 0 +1 301 0 -1.3 -1.02554373530014 +2 710 162 0 -1.3 -1.02554373530014 +2 711 159 0 -1.3 -1.02554373530014 +4 CN 162 0 159 0 +0 + +0101000 ++3702 0 -3694 85 * +Ed + 1.00000426325641e-07 1 1 0 +1 302 0 -8.40000000000022 -6.0744562647 +2 712 160 0 -8.40000000000022 -6.0744562647 +2 713 161 0 -8.40000000000022 -6.0744562647 +4 CN 160 0 161 0 +2 734 162 79 -8.40000000000022 -6.0744562647 +0 + +0101000 ++3696 57 -3700 0 * +Ed + 1.00000355271368e-07 1 1 0 +1 301 0 -1.02554373530014 1.3 +2 710 162 0 -1.02554373530014 1.3 +2 711 159 0 -1.02554373530014 1.3 +4 CN 162 0 159 0 +2 735 160 81 -1.02554373530014 1.3 +0 + +0101000 ++3694 85 -3711 0 * +Ed + 1.00000326849658e-07 1 1 0 +1 298 0 -1.02554373530024 1.3 +2 702 162 0 -1.02554373530024 1.3 +2 703 159 0 -1.02554373530024 1.3 +4 CN 162 0 159 0 +2 736 161 81 -1.02554373530024 1.3 +0 + +0101000 ++3695 85 -3709 0 * +Ed + 1.00000497379915e-07 1 1 0 +1 300 0 5.21238898038557 6.2831853071795 +2 707 160 0 5.21238898038557 6.2831853071795 +2 708 168 0 5.21238898038557 6.2831853071795 +4 G1 160 0 168 0 +2 737 159 79 5.21238898038557 6.2831853071795 +0 + +0101000 ++3698 0 -3694 57 * +Ed + 1.00001287475203e-07 1 1 0 +1 299 0 3.14159265358979 5.21238898038557 +2 704 161 0 3.14159265358979 5.21238898038557 +2 705 167 0 3.14159265358979 5.21238898038557 +4 G1 161 0 167 0 +2 738 159 79 3.14159265358979 5.21238898038557 +0 + +0101000 ++3695 57 -3698 0 * +Ed + 1.00000255795385e-07 1 1 0 +1 304 0 -8.40000000000008 -6.0744562647 +2 721 160 0 -8.40000000000008 -6.0744562647 +2 722 161 0 -8.40000000000008 -6.0744562647 +4 CN 160 0 161 0 +2 739 159 79 -8.40000000000008 -6.0744562647 +0 + +0101000 ++3697 57 -3698 0 * +Ed + 1e-07 1 1 0 +1 60 0 -16.3999999999994 -16 +2 134 54 0 -16.3999999999994 -16 +2 135 55 0 -16.3999999999994 -16 +4 CN 54 0 55 0 +0 + +0101000 ++3007 54 -3693 0 * +Ed + 1e-07 1 1 0 +1 307 0 2.07079632679468 5.21238898038447 +2 740 54 0 2.07079632679468 5.21238898038447 +4 C0 54 0 60 0 +2 741 60 0 2.07079632679468 5.21238898038447 +0 + +0101000 ++3693 0 -3692 0 * +Ed + 1e-07 1 1 0 +1 54 0 -16.3999999999996 -16 +2 115 54 0 -16.3999999999996 -16 +2 116 55 0 -16.3999999999996 -16 +4 CN 54 0 55 0 +0 + +0101000 ++3013 54 -3692 0 * +Ed + 1e-07 1 1 0 +1 308 0 5.21238898038447 8.35398163397426 +2 742 55 0 5.21238898038447 8.35398163397426 +4 C0 55 0 60 0 +2 743 60 0 5.21238898038447 8.35398163397426 +0 + +0101000 ++3692 0 -3693 0 * +Ed + 1e-07 1 1 0 +1 309 0 2.07079632679548 5.21238898038527 +2 744 56 0 2.07079632679548 5.21238898038527 +4 C0 169 0 56 0 +2 745 169 0 2.07079632679548 5.21238898038527 +0 + +0101000 ++3691 0 -3690 0 * +Ed + 1e-07 1 1 0 +1 310 0 5.21238898038527 8.35398163397506 +2 746 57 0 5.21238898038527 8.35398163397506 +4 C0 169 0 57 0 +2 747 169 0 5.21238898038527 8.35398163397506 +0 + +0101000 ++3690 0 -3691 0 * +Ed + 1e-07 1 1 0 +1 311 0 -1.27279220613367 1.27279220613367 +2 748 57 0 -1.27279220613367 1.27279220613367 +2 749 56 0 -1.27279220613367 1.27279220613367 +4 G2 57 0 56 0 +0 + +0101000 ++3690 0 -3011 0 * +Ed + 1e-07 1 1 0 +1 312 0 -1.27279220613367 1.27279220613367 +2 750 57 0 -1.27279220613367 1.27279220613367 +2 751 56 0 -1.27279220613367 1.27279220613367 +4 G2 57 0 56 0 +0 + +0101000 ++3691 0 -3006 0 * +Ed + 1e-07 1 1 0 +1 313 0 5.21238898038527 8.35398163397506 +2 752 170 0 5.21238898038527 8.35398163397506 +4 C0 171 0 170 0 +2 753 171 0 5.21238898038527 8.35398163397506 +0 + +0101000 ++3689 0 -3688 0 * +Ed + 1e-07 1 1 0 +1 314 0 2.07079632679548 5.21238898038527 +2 754 172 0 2.07079632679548 5.21238898038527 +4 C0 171 0 172 0 +2 755 171 0 2.07079632679548 5.21238898038527 +0 + +0101000 ++3688 0 -3689 0 * +Ed + 1e-07 1 1 0 +1 315 0 -1.27279220613367 1.27279220613367 +2 756 170 0 -1.27279220613367 1.27279220613367 +2 757 172 0 -1.27279220613367 1.27279220613367 +4 G2 170 0 172 0 +0 + +0101000 ++3689 0 -3687 0 * +Ed + 1e-07 1 1 0 +1 316 0 5.21238898038447 8.35398163397426 +2 758 170 0 5.21238898038447 8.35398163397426 +2 759 173 0 5.21238898038447 8.35398163397426 +4 C0 170 0 173 0 +0 + +0101000 ++3687 0 -3686 0 * +Ed + 1e-07 1 1 0 +1 317 0 -1.27279220613367 1.27279220613367 +2 760 170 0 -1.27279220613367 1.27279220613367 +2 761 172 0 -1.27279220613367 1.27279220613367 +4 G2 170 0 172 0 +0 + +0101000 ++3688 0 -3686 0 * +Ed + 1e-07 1 1 0 +1 318 0 2.07079632679468 5.21238898038447 +2 762 172 0 2.07079632679468 5.21238898038447 +2 763 174 0 2.07079632679468 5.21238898038447 +4 C0 172 0 174 0 +0 + +0101000 ++3686 0 -3687 0 * +Ed + 1e-07 1 1 0 +1 319 0 2.07079632679468 5.21238898038447 +2 764 136 0 2.07079632679468 5.21238898038447 +4 C0 130 0 136 0 +2 765 130 0 2.07079632679468 5.21238898038447 +0 + +0101000 ++3685 0 -3684 0 * +Ed + 1e-07 1 1 0 +1 320 0 5.21238898038447 8.35398163397426 +2 766 135 0 5.21238898038447 8.35398163397426 +4 C0 130 0 135 0 +2 767 130 0 5.21238898038447 8.35398163397426 +0 + +0101000 ++3684 0 -3685 0 * +Ed + 1e-07 1 1 0 +1 321 0 -0.141421356231557 0.141421356237766 +2 768 129 0 -0.141421356231557 0.141421356237766 +2 769 131 0 -0.141421356231557 0.141421356237766 +4 G2 129 0 131 0 +0 + +0101000 ++3743 0 -3683 0 * +Ed + 1.00000998508493e-07 1 1 0 +1 322 0 5.21238898038469 6.28318530717959 +2 770 129 0 5.21238898038469 6.28318530717959 +2 771 175 0 5.21238898038469 6.28318530717959 +4 C0 129 0 175 0 +2 772 93 86 5.21238898038469 6.28318530717959 +0 + +0101000 ++3683 0 -3682 54 * +Ed + 1.00000981681071e-07 1 1 0 +1 322 0 6.28318530717959 8.35398163397448 +2 770 129 0 6.28318530717959 8.35398163397448 +2 771 175 0 6.28318530717959 8.35398163397448 +4 C0 129 0 175 0 +2 773 92 86 6.28318530717959 8.35398163397448 +0 + +0101000 ++3682 54 -3681 0 * +Ed + 1e-07 1 1 0 +1 323 0 -0.141421356231557 0.141421356237766 +2 774 129 0 -0.141421356231557 0.141421356237766 +2 775 131 0 -0.141421356231557 0.141421356237766 +4 G2 129 0 131 0 +0 + +0101000 ++3742 0 -3681 0 * +Ed + 1.00000912266037e-07 1 1 0 +1 324 0 2.0707963267949 3.14159265358979 +2 776 131 0 2.0707963267949 3.14159265358979 +2 777 176 0 2.0707963267949 3.14159265358979 +4 C0 131 0 176 0 +2 778 92 86 2.0707963267949 3.14159265358979 +0 + +0101000 ++3681 0 -3680 54 * +Ed + 1.00001291234263e-07 1 1 0 +1 324 0 3.14159265358979 5.21238898038469 +2 776 131 0 3.14159265358979 5.21238898038469 +2 777 176 0 3.14159265358979 5.21238898038469 +4 C0 131 0 176 0 +2 779 93 86 3.14159265358979 5.21238898038469 +0 + +0101000 ++3680 54 -3683 0 * +Ed + 1.00000298427949e-07 1 1 0 +1 325 0 3.14159265358979 5.21238898038469 +2 780 176 0 3.14159265358979 5.21238898038469 +2 781 90 0 3.14159265358979 5.21238898038469 +4 C0 176 0 90 0 +2 782 93 86 3.14159265358979 5.21238898038469 +0 + +0101000 ++3679 54 -3678 0 * +Ed + 1.0000027000624e-07 1 1 0 +1 326 0 -1.19999999999968 5.80000000000067 +2 783 93 0 -1.19999999999968 5.80000000000067 +2 784 92 0 -1.19999999999968 5.80000000000067 +4 CN 93 0 92 0 +2 785 176 87 -1.19999999999968 5.80000000000067 +0 + +0101000 ++3680 88 -3679 88 * +Ed + 1.00004690529351e-07 1 1 0 +1 327 0 -3.5 3.5 +2 786 176 0 -3.5 3.5 +2 787 175 0 -3.5 3.5 +4 CN 176 0 175 0 +2 788 93 86 -3.5 3.5 +0 + +0101000 ++3678 0 -3683 0 * +Ed + 1.00000397903932e-07 1 1 0 +1 325 0 2.0707963267949 3.14159265358979 +2 780 176 0 2.0707963267949 3.14159265358979 +2 781 90 0 2.0707963267949 3.14159265358979 +4 C0 176 0 90 0 +2 789 92 86 2.0707963267949 3.14159265358979 +0 + +0101000 ++3677 0 -3679 54 * +Ed + 1.00004019838618e-07 1 1 0 +1 328 0 -3.5 3.5 +2 790 176 0 -3.5 3.5 +2 791 175 0 -3.5 3.5 +4 CN 176 0 175 0 +2 792 92 86 -3.5 3.5 +0 + +0101000 ++3677 0 -3681 0 * +Ed + 1.00000440536496e-07 1 1 0 +1 329 0 6.28318530717966 8.35398163397448 +2 793 175 0 6.28318530717966 8.35398163397448 +2 794 91 0 6.28318530717966 8.35398163397448 +4 C0 175 0 91 0 +2 795 92 86 6.28318530717966 8.35398163397448 +0 + +0101000 ++3676 54 -3677 0 * +Ed + 1.00000127897692e-07 1 1 0 +1 330 0 -1.20000000000004 5.80000000000057 +2 796 93 0 -1.20000000000004 5.80000000000057 +2 797 92 0 -1.20000000000004 5.80000000000057 +4 CN 93 0 92 0 +2 798 175 87 -1.20000000000004 5.80000000000057 +0 + +0101000 ++3682 88 -3676 88 * +Ed + 1.00000957204186e-07 1 1 0 +1 329 0 5.21238898038469 6.28318530717966 +2 793 175 0 5.21238898038469 6.28318530717966 +2 794 91 0 5.21238898038469 6.28318530717966 +4 C0 175 0 91 0 +2 799 93 86 5.21238898038469 6.28318530717966 +0 + +0101000 ++3678 0 -3676 54 * +Ed + 1e-07 1 1 0 +1 331 0 -0.141421356231558 0.141421356237765 +2 800 91 0 -0.141421356231558 0.141421356237765 +2 801 90 0 -0.141421356231558 0.141421356237765 +4 G2 91 0 90 0 +0 + +0101000 ++2958 0 -3678 0 * +Ed + 1e-07 1 1 0 +1 332 0 -0.141421356231558 0.141421356237765 +2 802 91 0 -0.141421356231558 0.141421356237765 +2 803 90 0 -0.141421356231558 0.141421356237765 +4 G2 91 0 90 0 +0 + +0101000 ++2959 0 -3677 0 * +Ed + 1e-07 1 1 0 +1 333 0 -1.4 1.4 +2 804 177 0 -1.4 1.4 +2 805 178 0 -1.4 1.4 +4 CN 177 0 178 0 +0 + +0101000 ++3675 0 -3674 0 * +Ed + 1e-07 1 1 0 +1 334 0 2.07079632679437 5.21238898038416 +2 806 177 0 2.07079632679437 5.21238898038416 +2 807 179 0 2.07079632679437 5.21238898038416 +4 G1 177 0 179 0 +0 + +0101000 ++3675 0 -3673 0 * +Ed + 1e-07 1 1 0 +1 335 0 -1.4 1.4 +2 808 177 0 -1.4 1.4 +2 809 178 0 -1.4 1.4 +4 CN 177 0 178 0 +0 + +0101000 ++3673 0 -3672 0 * +Ed + 1e-07 1 1 0 +1 336 0 2.07079632679437 5.21238898038416 +2 810 177 0 2.07079632679437 5.21238898038416 +2 811 180 0 2.07079632679437 5.21238898038416 +4 G1 177 0 180 0 +0 + +0101000 ++3674 0 -3672 0 * +Ed + 1e-07 1 1 0 +1 337 0 5.21238898038416 8.35398163397396 +2 812 178 0 5.21238898038416 8.35398163397396 +2 813 181 0 5.21238898038416 8.35398163397396 +4 G1 178 0 181 0 +0 + +0101000 ++3673 0 -3675 0 * +Ed + 1e-07 1 1 0 +1 338 0 5.21238898038416 8.35398163397396 +2 814 178 0 5.21238898038416 8.35398163397396 +2 815 182 0 5.21238898038416 8.35398163397396 +4 G1 178 0 182 0 +0 + +0101000 ++3672 0 -3674 0 * +Ed + 1e-07 1 1 0 +1 339 0 5.21238898038447 8.35398163397426 +2 816 173 0 5.21238898038447 8.35398163397426 +2 817 183 0 5.21238898038447 8.35398163397426 +4 G1 173 0 183 0 +0 + +0101000 ++3671 0 -3670 0 * +Ed + 1e-07 1 1 0 +1 340 0 -2.0755002002 11.0000000000001 +2 818 173 0 -2.0755002002 11.0000000000001 +2 819 174 0 -2.0755002002 11.0000000000001 +4 CN 173 0 174 0 +0 + +0101000 ++3671 0 -3669 89 * +Ed + 1.00001301515697e-07 1 1 0 +1 341 0 2.07079632679468 5.21238898038447 +2 820 184 0 2.07079632679468 5.21238898038447 +4 C0 185 0 184 0 +2 821 185 0 2.07079632679468 5.21238898038447 +2 822 173 90 2.07079632679468 5.21238898038447 +0 + +0101000 ++3669 0 -3668 0 * +Ed + 1e-07 1 1 0 +1 342 0 -2.0755002002 11.0000000000008 +2 823 173 0 -2.0755002002 11.0000000000008 +2 824 174 0 -2.0755002002 11.0000000000008 +4 CN 173 0 174 0 +0 + +0101000 ++3670 0 -3668 89 * +Ed + 1.00000540012479e-07 1 1 0 +1 343 0 -5 4.26794919243 +2 825 186 0 -5 4.26794919243 +2 826 184 0 -5 4.26794919243 +4 CN 186 0 184 0 +2 827 173 90 -5 4.26794919243 +2 828 174 90 -5 4.26794919243 +0 + +0101000 ++3669 0 -3667 0 * +Ed + 1.00001323670747e-07 1 1 0 +1 344 0 -5 4.26794919243 +2 829 186 0 -5 4.26794919243 +2 830 184 0 -5 4.26794919243 +4 CN 186 0 184 0 +2 831 173 90 -5 4.26794919243 +2 832 174 90 -5 4.26794919243 +0 + +0101000 ++3668 0 -3666 0 * +Ed + 1.00000454747351e-07 1 1 0 +1 345 0 2.07079632679468 5.21238898038447 +2 833 184 0 2.07079632679468 5.21238898038447 +2 834 187 0 2.07079632679468 5.21238898038447 +4 C1 184 0 187 0 +2 835 173 90 2.07079632679468 5.21238898038447 +0 + +0101000 ++3667 0 -3666 0 * +Ed + 1e-07 1 1 0 +1 340 0 20.2679491924308 27.2 +2 818 173 0 20.2679491924308 27.2 +2 819 174 0 20.2679491924308 27.2 +4 CN 173 0 174 0 +0 + +0101000 ++3667 89 -3687 0 * +Ed + 1e-07 1 1 0 +1 342 0 20.2679491924303 27.2 +2 823 173 0 20.2679491924303 27.2 +2 824 174 0 20.2679491924303 27.2 +4 CN 173 0 174 0 +0 + +0101000 ++3666 89 -3686 0 * +Ed + 1e-07 1 1 0 +1 346 0 2.07079632679468 5.21238898038447 +2 836 174 0 2.07079632679468 5.21238898038447 +2 837 188 0 2.07079632679468 5.21238898038447 +4 G1 174 0 188 0 +0 + +0101000 ++3670 0 -3671 0 * +Ed + 1.00000992727632e-07 1 1 0 +1 347 0 5.21238898038447 8.35398163397426 +2 838 186 0 5.21238898038447 8.35398163397426 +4 C0 185 0 186 0 +2 839 185 0 5.21238898038447 8.35398163397426 +2 840 174 90 5.21238898038447 8.35398163397426 +0 + +0101000 ++3668 0 -3669 0 * +Ed + 1.0000051159077e-07 1 1 0 +1 348 0 5.21238898038447 8.35398163397426 +2 841 186 0 5.21238898038447 8.35398163397426 +2 842 189 0 5.21238898038447 8.35398163397426 +4 C1 186 0 189 0 +2 843 174 90 5.21238898038447 8.35398163397426 +0 + +0101000 ++3666 0 -3667 0 * +Ed + 1e-07 1 1 0 +1 349 0 2.24592785979465 3.14159265358979 +2 844 182 0 2.24592785979465 3.14159265358979 +2 845 180 0 2.24592785979465 3.14159265358979 +4 CN 182 0 180 0 +0 + +0101000 ++3665 0 -3674 0 * +Ed + 1e-07 1 1 0 +1 350 0 2.24592785979465 3.14159265358979 +2 846 182 0 2.24592785979465 3.14159265358979 +2 847 180 0 2.24592785979465 3.14159265358979 +4 CN 182 0 180 0 +0 + +0101000 ++3664 0 -3672 0 * +Ed + 1e-07 1 1 0 +1 351 0 5.21238898038512 8.35398163397492 +2 848 182 0 5.21238898038512 8.35398163397492 +2 849 183 0 5.21238898038512 8.35398163397492 +4 G1 182 0 183 0 +0 + +0101000 ++3664 0 -3665 0 * +Ed + 1e-07 1 1 0 +1 352 0 2.07079632679533 5.21238898038512 +2 850 180 0 2.07079632679533 5.21238898038512 +2 851 188 0 2.07079632679533 5.21238898038512 +4 G1 180 0 188 0 +0 + +0101000 ++3665 0 -3664 0 * +Ed + 1e-07 1 1 0 +1 353 0 3.14159265358979 4.03725744744417 +2 852 188 0 3.14159265358979 4.03725744744417 +2 853 183 0 3.14159265358979 4.03725744744417 +4 G2 188 0 183 0 +0 + +0101000 ++3671 0 -3664 0 * +Ed + 1e-07 1 1 0 +1 354 0 3.14159265358979 4.03725744744417 +2 854 188 0 3.14159265358979 4.03725744744417 +2 855 183 0 3.14159265358979 4.03725744744417 +4 CN 188 0 183 0 +0 + +0101000 ++3670 0 -3665 0 * +Ed + 1e-07 1 1 0 +1 266 0 -8.6 -8.39999999999995 +2 609 135 0 -8.6 -8.39999999999995 +2 610 136 0 -8.6 -8.39999999999995 +4 CN 135 0 136 0 +0 + +0101000 ++3684 0 -3738 54 * +Ed + 1e-07 1 1 0 +1 264 0 -8.6 -8.39999999999902 +2 600 135 0 -8.6 -8.39999999999902 +2 601 136 0 -8.6 -8.39999999999902 +4 CN 135 0 136 0 +0 + +0101000 ++3685 0 -3736 54 * +Ed + 1e-07 1 1 0 +1 355 0 3.14159265358979 4.03725744738494 +2 856 181 0 3.14159265358979 4.03725744738494 +2 857 179 0 3.14159265358979 4.03725744738494 +4 G2 181 0 179 0 +0 + +0101000 ++3673 0 -3663 0 * +Ed + 1e-07 1 1 0 +1 356 0 3.14159265358979 4.03725744738494 +2 858 181 0 3.14159265358979 4.03725744738494 +2 859 179 0 3.14159265358979 4.03725744738494 +4 G2 181 0 179 0 +0 + +0101000 ++3675 0 -3662 0 * +Ed + 1e-07 1 1 0 +1 357 0 5.21238898038512 8.35398163397492 +2 860 181 0 5.21238898038512 8.35398163397492 +2 861 143 0 5.21238898038512 8.35398163397492 +4 G1 181 0 143 0 +0 + +0101000 ++3663 0 -3662 0 * +Ed + 1e-07 1 1 0 +1 358 0 2.07079632679533 5.21238898038512 +2 862 179 0 2.07079632679533 5.21238898038512 +2 863 142 0 2.07079632679533 5.21238898038512 +4 G1 179 0 142 0 +0 + +0101000 ++3662 0 -3663 0 * +Ed + 1e-07 1 1 0 +1 359 0 2.24592785973542 3.14159265358979 +2 864 142 0 2.24592785973542 3.14159265358979 +2 865 143 0 2.24592785973542 3.14159265358979 +4 CN 142 0 143 0 +0 + +0101000 ++3663 0 -3726 0 * +Ed + 1e-07 1 1 0 +1 360 0 2.24592785973542 3.14159265358979 +2 866 142 0 2.24592785973542 3.14159265358979 +2 867 143 0 2.24592785973542 3.14159265358979 +4 CN 142 0 143 0 +0 + +0101000 ++3662 0 -3728 0 * +Ed + 1e-07 1 1 0 +1 361 0 -1.4 1.4 +2 868 190 0 -1.4 1.4 +2 869 191 0 -1.4 1.4 +4 CN 190 0 191 0 +0 + +0101000 ++3661 0 -3660 0 * +Ed + 1e-07 1 1 0 +1 362 0 2.07079632679388 5.21238898038367 +2 870 190 0 2.07079632679388 5.21238898038367 +2 871 192 0 2.07079632679388 5.21238898038367 +4 G1 190 0 192 0 +0 + +0101000 ++3659 0 -3660 0 * +Ed + 1e-07 1 1 0 +1 363 0 -1.4 1.4 +2 872 190 0 -1.4 1.4 +2 873 191 0 -1.4 1.4 +4 CN 190 0 191 0 +0 + +0101000 ++3658 0 -3659 0 * +Ed + 1e-07 1 1 0 +1 364 0 2.07079632679388 5.21238898038367 +2 874 190 0 2.07079632679388 5.21238898038367 +2 875 193 0 2.07079632679388 5.21238898038367 +4 G1 190 0 193 0 +0 + +0101000 ++3658 0 -3661 0 * +Ed + 1e-07 1 1 0 +1 365 0 5.21238898038367 8.35398163397346 +2 876 191 0 5.21238898038367 8.35398163397346 +2 877 194 0 5.21238898038367 8.35398163397346 +4 G1 191 0 194 0 +0 + +0101000 ++3660 0 -3659 0 * +Ed + 1e-07 1 1 0 +1 366 0 5.21238898038367 8.35398163397346 +2 878 191 0 5.21238898038367 8.35398163397346 +2 879 195 0 5.21238898038367 8.35398163397346 +4 G1 191 0 195 0 +0 + +0101000 ++3661 0 -3658 0 * +Ed + 1e-07 1 1 0 +1 304 0 -8.6 -8.40000000000007 +2 721 160 0 -8.6 -8.40000000000007 +2 722 161 0 -8.6 -8.40000000000007 +4 CN 160 0 161 0 +0 + +0101000 ++3657 0 -3710 60 * +Ed + 1e-07 1 1 0 +1 302 0 -8.6 -8.40000000000022 +2 712 160 0 -8.6 -8.40000000000022 +2 713 161 0 -8.6 -8.40000000000022 +4 CN 160 0 161 0 +0 + +0101000 ++3656 0 -3708 60 * +Ed + 1e-07 1 1 0 +1 367 0 5.21238898038557 8.35398163397536 +2 880 160 0 5.21238898038557 8.35398163397536 +4 C0 160 0 155 0 +2 881 155 0 5.21238898038557 8.35398163397536 +0 + +0101000 ++3657 0 -3656 0 * +Ed + 1e-07 1 1 0 +1 368 0 2.07079632679577 5.21238898038557 +2 882 161 0 2.07079632679577 5.21238898038557 +4 C0 161 0 155 0 +2 883 155 0 2.07079632679577 5.21238898038557 +0 + +0101000 ++3656 0 -3657 0 * +Ed + 1e-07 1 1 0 +1 369 0 3.14159265358979 4.10414340149723 +2 884 195 0 3.14159265358979 4.10414340149723 +2 885 193 0 3.14159265358979 4.10414340149723 +4 CN 195 0 193 0 +0 + +0101000 ++3661 0 -3655 0 * +Ed + 1e-07 1 1 0 +1 370 0 3.14159265358979 4.10414340149723 +2 886 195 0 3.14159265358979 4.10414340149723 +2 887 193 0 3.14159265358979 4.10414340149723 +4 CN 195 0 193 0 +0 + +0101000 ++3658 0 -3654 0 * +Ed + 1e-07 1 1 0 +1 371 0 5.21238898038504 8.35398163397483 +2 888 195 0 5.21238898038504 8.35398163397483 +2 889 168 0 5.21238898038504 8.35398163397483 +4 G1 195 0 168 0 +0 + +0101000 ++3655 0 -3654 0 * +Ed + 1e-07 1 1 0 +1 372 0 2.07079632679524 5.21238898038504 +2 890 193 0 2.07079632679524 5.21238898038504 +2 891 167 0 2.07079632679524 5.21238898038504 +4 G1 193 0 167 0 +0 + +0101000 ++3654 0 -3655 0 * +Ed + 1e-07 1 1 0 +1 373 0 2.17904190565329 3.14159265358979 +2 892 167 0 2.17904190565329 3.14159265358979 +2 893 168 0 2.17904190565329 3.14159265358979 +4 CN 167 0 168 0 +0 + +0101000 ++3655 0 -3698 0 * +Ed + 1e-07 1 1 0 +1 374 0 2.17904190565329 3.14159265358979 +2 894 167 0 2.17904190565329 3.14159265358979 +2 895 168 0 2.17904190565329 3.14159265358979 +4 CN 167 0 168 0 +0 + +0101000 ++3654 0 -3700 0 * +Ed + 1e-07 1 1 0 +1 375 0 2.17904190568235 3.14159265358979 +2 896 194 0 2.17904190568235 3.14159265358979 +2 897 192 0 2.17904190568235 3.14159265358979 +4 G2 194 0 192 0 +0 + +0101000 ++3653 0 -3659 0 * +Ed + 1e-07 1 1 0 +1 376 0 2.17904190568235 3.14159265358979 +2 898 194 0 2.17904190568235 3.14159265358979 +2 899 192 0 2.17904190568235 3.14159265358979 +4 G2 194 0 192 0 +0 + +0101000 ++3652 0 -3660 0 * +Ed + 1e-07 1 1 0 +1 377 0 5.21238898038504 8.35398163397483 +2 900 194 0 5.21238898038504 8.35398163397483 +2 901 196 0 5.21238898038504 8.35398163397483 +4 G1 194 0 196 0 +0 + +0101000 ++3652 0 -3653 0 * +Ed + 1e-07 1 1 0 +1 378 0 2.07079632679524 5.21238898038504 +2 902 192 0 2.07079632679524 5.21238898038504 +2 903 197 0 2.07079632679524 5.21238898038504 +4 G1 192 0 197 0 +0 + +0101000 ++3653 0 -3652 0 * +Ed + 1e-07 1 1 0 +1 379 0 3.14159265358979 4.1041434015263 +2 904 197 0 3.14159265358979 4.1041434015263 +2 905 196 0 3.14159265358979 4.1041434015263 +4 G2 197 0 196 0 +0 + +0101000 ++3651 0 -3652 0 * +Ed + 1e-07 1 1 0 +1 380 0 4.21238898038381 7.3539816339736 +2 906 197 0 4.21238898038381 7.3539816339736 +2 907 198 0 4.21238898038381 7.3539816339736 +4 G1 197 0 198 0 +0 + +0101000 ++3651 0 -3650 0 * +Ed + 1e-07 1 1 0 +1 381 0 3.14159265358979 4.1041434015263 +2 908 197 0 3.14159265358979 4.1041434015263 +2 909 196 0 3.14159265358979 4.1041434015263 +4 CN 197 0 196 0 +0 + +0101000 ++3650 0 -3653 0 * +Ed + 1e-07 1 1 0 +1 382 0 1.07079632679402 4.21238898038381 +2 910 196 0 1.07079632679402 4.21238898038381 +2 911 199 0 1.07079632679402 4.21238898038381 +4 G1 196 0 199 0 +0 + +0101000 ++3650 0 -3651 0 * +Ed + 1e-07 1 1 0 +1 72 0 -16.4000000000005 -16 +2 172 62 0 -16.4000000000005 -16 +2 173 63 0 -16.4000000000005 -16 +4 CN 62 0 63 0 +0 + +0101000 ++2988 60 -3649 0 * +Ed + 1e-07 1 1 0 +1 383 0 2.07079632679577 5.21238898038557 +2 912 62 0 2.07079632679577 5.21238898038557 +4 C0 62 0 68 0 +2 913 68 0 2.07079632679577 5.21238898038557 +0 + +0101000 ++3649 0 -3648 0 * +Ed + 1e-07 1 1 0 +1 66 0 -16.3999999999998 -16 +2 153 62 0 -16.3999999999998 -16 +2 154 63 0 -16.3999999999998 -16 +4 CN 62 0 63 0 +0 + +0101000 ++2993 60 -3648 0 * +Ed + 1e-07 1 1 0 +1 384 0 5.21238898038557 8.35398163397536 +2 914 63 0 5.21238898038557 8.35398163397536 +4 C0 63 0 68 0 +2 915 68 0 5.21238898038557 8.35398163397536 +0 + +0101000 ++3648 0 -3649 0 * +Ed + 1e-07 1 1 0 +1 385 0 2.07079632679534 5.21238898038513 +2 916 64 0 2.07079632679534 5.21238898038513 +4 C0 200 0 64 0 +2 917 200 0 2.07079632679534 5.21238898038513 +0 + +0101000 ++3647 0 -3646 0 * +Ed + 1e-07 1 1 0 +1 386 0 5.21238898038513 8.35398163397492 +2 918 65 0 5.21238898038513 8.35398163397492 +4 C0 200 0 65 0 +2 919 200 0 5.21238898038513 8.35398163397492 +0 + +0101000 ++3646 0 -3647 0 * +Ed + 1e-07 1 1 0 +1 387 0 -1.27279220613367 1.27279220613706 +2 920 65 0 -1.27279220613367 1.27279220613706 +2 921 64 0 -1.27279220613367 1.27279220613706 +4 G2 65 0 64 0 +0 + +0101000 ++3646 0 -3001 0 * +Ed + 1e-07 1 1 0 +1 388 0 -1.27279220613367 1.27279220613706 +2 922 65 0 -1.27279220613367 1.27279220613706 +2 923 64 0 -1.27279220613367 1.27279220613706 +4 G2 65 0 64 0 +0 + +0101000 ++3647 0 -2996 0 * +Ed + 1e-07 1 1 0 +1 389 0 2.07079632679534 5.21238898038513 +2 924 201 0 2.07079632679534 5.21238898038513 +4 C0 202 0 201 0 +2 925 202 0 2.07079632679534 5.21238898038513 +0 + +0101000 ++3645 0 -3644 0 * +Ed + 1e-07 1 1 0 +1 390 0 5.21238898038513 8.35398163397492 +2 926 203 0 5.21238898038513 8.35398163397492 +4 C0 202 0 203 0 +2 927 202 0 5.21238898038513 8.35398163397492 +0 + +0101000 ++3644 0 -3645 0 * +Ed + 1e-07 1 1 0 +1 391 0 -2.1255437353 13.5000000000003 +2 928 199 0 -2.1255437353 13.5000000000003 +2 929 198 0 -2.1255437353 13.5000000000003 +4 CN 199 0 198 0 +0 + +0101000 ++3651 0 -3643 91 * +Ed + 1.00001314254387e-07 1 1 0 +1 392 0 5.21238898038557 8.35398163397536 +2 930 204 0 5.21238898038557 8.35398163397536 +4 C0 205 0 204 0 +2 931 205 0 5.21238898038557 8.35398163397536 +2 932 199 92 5.21238898038557 8.35398163397536 +2 933 198 93 5.21238898038557 8.35398163397536 +0 + +0101000 ++3643 0 -3642 0 * +Ed + 1e-07 1 1 0 +1 393 0 -2.1255437353 13.4999999999998 +2 934 199 0 -2.1255437353 13.4999999999998 +2 935 198 0 -2.1255437353 13.4999999999998 +4 CN 199 0 198 0 +0 + +0101000 ++3650 0 -3642 91 * +Ed + 1.00001350629417e-07 1 1 0 +1 394 0 -3.75 3.01794919243 +2 936 204 0 -3.75 3.01794919243 +2 937 206 0 -3.75 3.01794919243 +4 CN 204 0 206 0 +2 938 199 92 -3.75 3.01794919243 +2 939 198 92 -3.75 3.01794919243 +2 940 199 93 -3.75 3.01794919243 +2 941 198 93 -3.75 3.01794919243 +0 + +0101000 ++3643 0 -3641 0 * +Ed + 1.00001350629417e-07 1 1 0 +1 395 0 -3.75 3.01794919243 +2 942 204 0 -3.75 3.01794919243 +2 943 206 0 -3.75 3.01794919243 +4 CN 204 0 206 0 +2 944 199 92 -3.75 3.01794919243 +2 945 198 92 -3.75 3.01794919243 +2 946 199 93 -3.75 3.01794919243 +2 947 198 93 -3.75 3.01794919243 +0 + +0101000 ++3642 0 -3640 0 * +Ed + 1.00001311408595e-07 1 1 0 +1 396 0 5.21238898038557 8.35398163397536 +2 948 204 0 5.21238898038557 8.35398163397536 +2 949 207 0 5.21238898038557 8.35398163397536 +4 C1 204 0 207 0 +2 950 199 92 5.21238898038557 8.35398163397536 +2 951 198 93 5.21238898038557 8.35398163397536 +0 + +0101000 ++3641 0 -3640 0 * +Ed + 1e-07 1 1 0 +1 391 0 20.2679491924308 26.2 +2 928 199 0 20.2679491924308 26.2 +2 929 198 0 20.2679491924308 26.2 +4 CN 199 0 198 0 +0 + +0101000 ++3641 91 -3639 0 * +Ed + 1e-07 1 1 0 +1 397 0 5.21238898038557 8.35398163397536 +2 952 199 0 5.21238898038557 8.35398163397536 +2 953 203 0 5.21238898038557 8.35398163397536 +4 C0 199 0 203 0 +0 + +0101000 ++3639 0 -3638 0 * +Ed + 1e-07 1 1 0 +1 393 0 20.2679491924297 26.2 +2 934 199 0 20.2679491924297 26.2 +2 935 198 0 20.2679491924297 26.2 +4 CN 199 0 198 0 +0 + +0101000 ++3640 91 -3638 0 * +Ed + 1.00001286533722e-07 1 1 0 +1 398 0 2.07079632679577 5.21238898038557 +2 954 206 0 2.07079632679577 5.21238898038557 +4 C0 205 0 206 0 +2 955 205 0 2.07079632679577 5.21238898038557 +2 956 198 92 2.07079632679577 5.21238898038557 +2 957 199 93 2.07079632679577 5.21238898038557 +0 + +0101000 ++3642 0 -3643 0 * +Ed + 1.0000128692609e-07 1 1 0 +1 399 0 2.07079632679577 5.21238898038557 +2 958 206 0 2.07079632679577 5.21238898038557 +2 959 208 0 2.07079632679577 5.21238898038557 +4 C1 206 0 208 0 +2 960 198 92 2.07079632679577 5.21238898038557 +2 961 199 93 2.07079632679577 5.21238898038557 +0 + +0101000 ++3640 0 -3641 0 * +Ed + 1e-07 1 1 0 +1 400 0 2.07079632679577 5.21238898038557 +2 962 198 0 2.07079632679577 5.21238898038557 +2 963 201 0 2.07079632679577 5.21238898038557 +4 C0 198 0 201 0 +0 + +0101000 ++3638 0 -3639 0 * +Ed + 1e-07 1 1 0 +1 401 0 -1.27279220613367 1.27279220613706 +2 964 201 0 -1.27279220613367 1.27279220613706 +2 965 203 0 -1.27279220613367 1.27279220613706 +4 G2 201 0 203 0 +0 + +0101000 ++3645 0 -3638 0 * +Ed + 1e-07 1 1 0 +1 402 0 -1.27279220613367 1.27279220613706 +2 966 201 0 -1.27279220613367 1.27279220613706 +2 967 203 0 -1.27279220613367 1.27279220613706 +4 G2 201 0 203 0 +0 + +0101000 ++3644 0 -3639 0 * +Ed + 1e-07 1 1 0 +1 403 0 -0.141421356237763 0.141421356237765 +2 968 154 0 -0.141421356237763 0.141421356237765 +2 969 156 0 -0.141421356237763 0.141421356237765 +4 G2 154 0 156 0 +0 + +0101000 ++3715 0 -3637 0 * +Ed + 1.00001057730632e-07 1 1 0 +1 404 0 5.21238898038447 6.28318530717957 +2 970 154 0 5.21238898038447 6.28318530717957 +2 971 209 0 5.21238898038447 6.28318530717957 +4 C0 154 0 209 0 +2 972 81 94 5.21238898038447 6.28318530717957 +0 + +0101000 ++3637 0 -3636 60 * +Ed + 1.00001311408595e-07 1 1 0 +1 404 0 6.28318530717957 8.35398163397426 +2 970 154 0 6.28318530717957 8.35398163397426 +2 971 209 0 6.28318530717957 8.35398163397426 +4 C0 154 0 209 0 +2 973 80 94 6.28318530717957 8.35398163397426 +0 + +0101000 ++3636 60 -3635 0 * +Ed + 1e-07 1 1 0 +1 405 0 -0.141421356237763 0.141421356237765 +2 974 154 0 -0.141421356237763 0.141421356237765 +2 975 156 0 -0.141421356237763 0.141421356237765 +4 G2 154 0 156 0 +0 + +0101000 ++3714 0 -3635 0 * +Ed + 1.00001394981972e-07 1 1 0 +1 406 0 2.07079632679468 3.14159265358979 +2 976 156 0 2.07079632679468 3.14159265358979 +2 977 210 0 2.07079632679468 3.14159265358979 +4 C0 156 0 210 0 +2 978 80 94 2.07079632679468 3.14159265358979 +0 + +0101000 ++3635 0 -3634 60 * +Ed + 1.00001394981972e-07 1 1 0 +1 406 0 3.14159265358979 5.21238898038447 +2 976 156 0 3.14159265358979 5.21238898038447 +2 977 210 0 3.14159265358979 5.21238898038447 +4 C0 156 0 210 0 +2 979 81 94 3.14159265358979 5.21238898038447 +0 + +0101000 ++3634 60 -3637 0 * +Ed + 1.00001291234263e-07 1 1 0 +1 407 0 3.14159265358979 5.21238898038447 +2 980 210 0 3.14159265358979 5.21238898038447 +2 981 78 0 3.14159265358979 5.21238898038447 +4 C0 210 0 78 0 +2 982 81 94 3.14159265358979 5.21238898038447 +0 + +0101000 ++3633 60 -3632 0 * +Ed + 1.00000341060513e-07 1 1 0 +1 408 0 -1.20000000000053 5.79999999999949 +2 983 81 0 -1.20000000000053 5.79999999999949 +2 984 80 0 -1.20000000000053 5.79999999999949 +4 CN 81 0 80 0 +2 985 210 95 -1.20000000000053 5.79999999999949 +0 + +0101000 ++3634 96 -3633 96 * +Ed + 1.00004572363208e-07 1 1 0 +1 409 0 -3.5 3.5 +2 986 210 0 -3.5 3.5 +2 987 209 0 -3.5 3.5 +4 CN 210 0 209 0 +2 988 81 97 -3.5 3.5 +2 989 81 94 -3.5 3.5 +0 + +0101000 ++3632 0 -3637 0 * +Ed + 1.00001057730632e-07 1 1 0 +1 407 0 2.07079632679468 3.14159265358979 +2 980 210 0 2.07079632679468 3.14159265358979 +2 981 78 0 2.07079632679468 3.14159265358979 +4 C0 210 0 78 0 +2 990 80 94 2.07079632679468 3.14159265358979 +0 + +0101000 ++3631 0 -3633 60 * +Ed + 1.00004525482328e-07 1 1 0 +1 410 0 -3.5 3.5 +2 991 210 0 -3.5 3.5 +2 992 209 0 -3.5 3.5 +4 CN 210 0 209 0 +2 993 80 97 -3.5 3.5 +2 994 80 94 -3.5 3.5 +0 + +0101000 ++3631 0 -3635 0 * +Ed + 1.00000931000804e-07 1 1 0 +1 411 0 6.28318530717955 8.35398163397426 +2 995 209 0 6.28318530717955 8.35398163397426 +2 996 79 0 6.28318530717955 8.35398163397426 +4 C0 209 0 79 0 +2 997 80 94 6.28318530717955 8.35398163397426 +0 + +0101000 ++3630 60 -3631 0 * +Ed + 1.00000284217094e-07 1 1 0 +1 412 0 -1.20000000000061 5.79999999999945 +2 998 81 0 -1.20000000000061 5.79999999999945 +2 999 80 0 -1.20000000000061 5.79999999999945 +4 CN 81 0 80 0 +2 1000 209 95 -1.20000000000061 5.79999999999945 +0 + +0101000 ++3636 96 -3630 96 * +Ed + 1.00001290060734e-07 1 1 0 +1 411 0 5.21238898038447 6.28318530717955 +2 995 209 0 5.21238898038447 6.28318530717955 +2 996 79 0 5.21238898038447 6.28318530717955 +4 C0 209 0 79 0 +2 1001 81 94 5.21238898038447 6.28318530717955 +0 + +0101000 ++3632 0 -3630 60 * +Ed + 1e-07 1 1 0 +1 413 0 -0.141421356237764 0.141421356237764 +2 1002 79 0 -0.141421356237764 0.141421356237764 +2 1003 78 0 -0.141421356237764 0.141421356237764 +4 G2 79 0 78 0 +0 + +0101000 ++2976 0 -3632 0 * +Ed + 1e-07 1 1 0 +1 414 0 -0.141421356237764 0.141421356237764 +2 1004 79 0 -0.141421356237764 0.141421356237764 +2 1005 78 0 -0.141421356237764 0.141421356237764 +4 G2 79 0 78 0 +0 + +0101000 ++2977 0 -3631 0 * +Ed + 1e-07 1 1 0 +1 304 0 -8.6 -8.40000000000008 +2 721 160 0 -8.6 -8.40000000000008 +2 722 161 0 -8.6 -8.40000000000008 +4 CN 160 0 161 0 +0 + +0101000 ++3657 0 -3697 57 * +Ed + 1e-07 1 1 0 +1 302 0 -8.6 -8.40000000000022 +2 712 160 0 -8.6 -8.40000000000022 +2 713 161 0 -8.6 -8.40000000000022 +4 CN 160 0 161 0 +0 + +0101000 ++3656 0 -3696 57 * +Ed + 1e-07 1 1 0 +1 72 0 -16.4000000000005 -16 +2 172 62 0 -16.4000000000005 -16 +2 173 63 0 -16.4000000000005 -16 +4 CN 62 0 63 0 +0 + +0101000 ++2997 57 -3649 0 * +Ed + 1e-07 1 1 0 +1 66 0 -16.3999999999991 -16 +2 153 62 0 -16.3999999999991 -16 +2 154 63 0 -16.3999999999991 -16 +4 CN 62 0 63 0 +0 + +0101000 ++3003 57 -3648 0 * +Ed + 1e-07 1 1 0 +1 391 0 -2.1255437353 13.5000000000009 +2 928 199 0 -2.1255437353 13.5000000000009 +2 929 198 0 -2.1255437353 13.5000000000009 +4 CN 199 0 198 0 +0 + +0101000 ++3651 0 -3642 98 * +Ed + 1e-07 1 1 0 +1 393 0 -2.1255437353 13.5000000000004 +2 934 199 0 -2.1255437353 13.5000000000004 +2 935 198 0 -2.1255437353 13.5000000000004 +4 CN 199 0 198 0 +0 + +0101000 ++3650 0 -3643 98 * +Ed + 1e-07 1 1 0 +1 391 0 20.2679491924314 26.2 +2 928 199 0 20.2679491924314 26.2 +2 929 198 0 20.2679491924314 26.2 +4 CN 199 0 198 0 +0 + +0101000 ++3640 98 -3639 0 * +Ed + 1e-07 1 1 0 +1 393 0 20.2679491924303 26.2 +2 934 199 0 20.2679491924303 26.2 +2 935 198 0 20.2679491924303 26.2 +4 CN 199 0 198 0 +0 + +0101000 ++3641 98 -3638 0 * +Ed + 1.00000198951966e-07 1 1 0 +1 404 0 5.21238898038447 6.28318530717969 +2 970 154 0 5.21238898038447 6.28318530717969 +2 971 209 0 5.21238898038447 6.28318530717969 +4 C0 154 0 209 0 +2 1006 81 97 5.21238898038447 6.28318530717969 +0 + +0101000 ++3637 0 -3629 57 * +Ed + 1.00000909605717e-07 1 1 0 +1 404 0 6.28318530717969 8.35398163397426 +2 970 154 0 6.28318530717969 8.35398163397426 +2 971 209 0 6.28318530717969 8.35398163397426 +4 C0 154 0 209 0 +2 1007 80 97 6.28318530717969 8.35398163397426 +0 + +0101000 ++3629 57 -3635 0 * +Ed + 1.00000255795385e-07 1 1 0 +1 406 0 2.07079632679468 3.14159265358979 +2 976 156 0 2.07079632679468 3.14159265358979 +2 977 210 0 2.07079632679468 3.14159265358979 +4 C0 156 0 210 0 +2 1008 80 97 2.07079632679468 3.14159265358979 +0 + +0101000 ++3635 0 -3628 57 * +Ed + 1.00001301515697e-07 1 1 0 +1 406 0 3.14159265358979 5.21238898038447 +2 976 156 0 3.14159265358979 5.21238898038447 +2 977 210 0 3.14159265358979 5.21238898038447 +4 C0 156 0 210 0 +2 1009 81 97 3.14159265358979 5.21238898038447 +0 + +0101000 ++3628 57 -3637 0 * +Ed + 1.00001294046392e-07 1 1 0 +1 407 0 3.14159265358979 5.21238898038447 +2 980 210 0 3.14159265358979 5.21238898038447 +2 981 78 0 3.14159265358979 5.21238898038447 +4 C0 210 0 78 0 +2 1010 81 97 3.14159265358979 5.21238898038447 +0 + +0101000 ++3627 57 -3632 0 * +Ed + 1.0000140054444e-07 1 1 0 +1 408 0 -1.19999999999996 5.79999999999982 +2 983 81 0 -1.19999999999996 5.79999999999982 +2 984 80 0 -1.19999999999996 5.79999999999982 +4 CN 81 0 80 0 +2 1011 210 99 -1.19999999999996 5.79999999999982 +0 + +0101000 ++3628 100 -3627 100 * +Ed + 1.00001072519482e-07 1 1 0 +1 407 0 2.07079632679468 3.14159265358979 +2 980 210 0 2.07079632679468 3.14159265358979 +2 981 78 0 2.07079632679468 3.14159265358979 +4 C0 210 0 78 0 +2 1012 80 97 2.07079632679468 3.14159265358979 +0 + +0101000 ++3631 0 -3627 57 * +Ed + 1.00001346361305e-07 1 1 0 +1 411 0 6.28318530717967 8.35398163397426 +2 995 209 0 6.28318530717967 8.35398163397426 +2 996 79 0 6.28318530717967 8.35398163397426 +4 C0 209 0 79 0 +2 1013 80 97 6.28318530717967 8.35398163397426 +0 + +0101000 ++3626 57 -3631 0 * +Ed + 1.00001423995717e-07 1 1 0 +1 412 0 -1.20000000000011 5.79999999999997 +2 998 81 0 -1.20000000000011 5.79999999999997 +2 999 80 0 -1.20000000000011 5.79999999999997 +4 CN 81 0 80 0 +2 1014 209 99 -1.20000000000011 5.79999999999997 +0 + +0101000 ++3629 100 -3626 100 * +Ed + 1.00001299419295e-07 1 1 0 +1 411 0 5.21238898038447 6.28318530717967 +2 995 209 0 5.21238898038447 6.28318530717967 +2 996 79 0 5.21238898038447 6.28318530717967 +4 C0 209 0 79 0 +2 1015 81 97 5.21238898038447 6.28318530717967 +0 + +0101000 ++3632 0 -3626 57 * +Ed + 1e-07 1 1 0 +1 415 0 -6 6 +2 1016 87 0 -6 6 +2 1017 89 0 -6 6 +4 CN 87 0 89 0 +0 + +0101000 ++3625 0 -2961 0 * +Ed + 1e-07 1 1 0 +1 416 0 0 3.14159265358979 +2 1018 87 0 0 3.14159265358979 +4 C0 87 0 211 0 +2 1019 211 0 0 3.14159265358979 +0 + +0101000 ++3625 0 -3624 0 * +Ed + 1e-07 1 1 0 +1 417 0 -6 6 +2 1020 87 0 -6 6 +2 1021 89 0 -6 6 +4 CN 87 0 89 0 +0 + +0101000 ++3624 0 -2960 0 * +Ed + 1e-07 1 1 0 +1 418 0 3.14159265358979 6.28318530717959 +2 1022 89 0 3.14159265358979 6.28318530717959 +4 C0 89 0 211 0 +2 1023 211 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3624 0 -3625 0 * +Ed + 1.00000611066753e-07 1 1 0 +1 419 0 3.14159265358979 5.2123889803824 +2 1024 212 0 3.14159265358979 5.2123889803824 +4 C0 211 0 212 0 +2 1025 211 0 3.14159265358979 5.2123889803824 +2 1026 213 101 3.14159265358979 5.2123889803824 +0 + +0101000 ++3623 0 -3622 88 * +Ed + 1.00000971340767e-07 1 1 0 +1 419 0 5.2123889803824 6.28318530717959 +2 1024 212 0 5.2123889803824 6.28318530717959 +4 C0 211 0 212 0 +2 1025 211 0 5.2123889803824 6.28318530717959 +2 1027 214 101 5.2123889803824 6.28318530717959 +0 + +0101000 ++3622 88 -3621 0 * +Ed + 1.00000941033314e-07 1 1 0 +1 420 0 0 2.07079632679269 +2 1028 215 0 0 2.07079632679269 +4 C0 211 0 215 0 +2 1029 211 0 0 2.07079632679269 +2 1030 214 101 0 2.07079632679269 +0 + +0101000 ++3621 0 -3620 88 * +Ed + 1.00000911269327e-07 1 1 0 +1 420 0 2.07079632679269 3.14159265358979 +2 1028 215 0 2.07079632679269 3.14159265358979 +4 C0 211 0 215 0 +2 1029 211 0 2.07079632679269 3.14159265358979 +2 1031 213 101 2.07079632679269 3.14159265358979 +0 + +0101000 ++3620 88 -3623 0 * +Ed + 1.00001050546506e-07 1 1 0 +1 421 0 -1.41000000001 0.18999999999 +2 1032 212 0 -1.41000000001 0.18999999999 +2 1033 215 0 -1.41000000001 0.18999999999 +4 CN 212 0 215 0 +2 1034 213 101 -1.41000000001 0.18999999999 +0 + +0101000 ++3623 0 -3619 0 * +Ed + 1.00001314254387e-07 1 1 0 +1 422 0 3.14159265358979 5.21238898038246 +2 1035 212 0 3.14159265358979 5.21238898038246 +4 C0 212 0 216 0 +2 1036 216 0 3.14159265358979 5.21238898038246 +2 1037 213 101 3.14159265358979 5.21238898038246 +2 1038 122 101 3.14159265358979 5.21238898038246 +0 + +0101000 ++3619 0 -3618 101 * +Ed + 1.00027010614585e-07 1 1 0 +1 423 0 -0.0500000000011249 1.55 +2 1039 213 0 -0.0500000000011249 1.55 +2 1040 214 0 -0.0500000000011249 1.55 +4 CN 213 0 214 0 +2 1041 212 102 -0.0500000000011249 1.55 +0 + +0101000 ++3622 103 -3618 0 * +Ed + 1.00001217912533e-07 1 1 0 +1 422 0 5.21238898038246 6.28318530717959 +2 1035 212 0 5.21238898038246 6.28318530717959 +4 C0 212 0 216 0 +2 1036 216 0 5.21238898038246 6.28318530717959 +2 1042 214 101 5.21238898038246 6.28318530717959 +2 1043 122 101 5.21238898038246 6.28318530717959 +0 + +0101000 ++3618 101 -3617 0 * +Ed + 1.00001301515697e-07 1 1 0 +1 424 0 -1.41000000001 0.18999999999 +2 1044 212 0 -1.41000000001 0.18999999999 +2 1045 215 0 -1.41000000001 0.18999999999 +4 CN 212 0 215 0 +2 1046 214 101 -1.41000000001 0.18999999999 +0 + +0101000 ++3621 0 -3617 0 * +Ed + 1.00001355033128e-07 1 1 0 +1 425 0 0 2.07079632679263 +2 1047 215 0 0 2.07079632679263 +4 C0 215 0 216 0 +2 1048 216 0 0 2.07079632679263 +2 1049 214 101 0 2.07079632679263 +2 1050 122 101 0 2.07079632679263 +0 + +0101000 ++3617 0 -3616 101 * +Ed + 1.00026033556668e-07 1 1 0 +1 426 0 -0.0500000000003649 1.55 +2 1051 213 0 -0.0500000000003649 1.55 +2 1052 214 0 -0.0500000000003649 1.55 +4 CN 213 0 214 0 +2 1053 215 102 -0.0500000000003649 1.55 +0 + +0101000 ++3620 103 -3616 0 * +Ed + 1.00001369044566e-07 1 1 0 +1 425 0 2.07079632679263 3.14159265358979 +2 1047 215 0 2.07079632679263 3.14159265358979 +4 C0 215 0 216 0 +2 1048 216 0 2.07079632679263 3.14159265358979 +2 1054 213 101 2.07079632679263 3.14159265358979 +2 1055 122 101 2.07079632679263 3.14159265358979 +0 + +0101000 ++3616 101 -3619 0 * +Ed + 1.00000227373675e-07 1 1 0 +1 427 0 3.14159265358979 6.28318530717959 +2 1056 217 0 3.14159265358979 6.28318530717959 +4 C0 216 0 217 0 +2 1057 216 0 3.14159265358979 6.28318530717959 +2 1058 122 101 3.14159265358979 6.28318530717959 +0 + +0101000 ++3615 0 -3614 0 * +Ed + 1.0000024158453e-07 1 1 0 +1 428 0 0 3.14159265358979 +2 1059 218 0 0 3.14159265358979 +4 C0 216 0 218 0 +2 1060 216 0 0 3.14159265358979 +2 1061 122 101 0 3.14159265358979 +0 + +0101000 ++3614 0 -3615 0 * +Ed + 1e-07 1 1 0 +1 330 0 -1.4 -1.20000000000004 +2 796 93 0 -1.4 -1.20000000000004 +2 797 92 0 -1.4 -1.20000000000004 +4 CN 93 0 92 0 +0 + +0101000 ++3745 0 -3682 88 * +Ed + 1e-07 1 1 0 +1 326 0 -1.4 -1.19999999999968 +2 783 93 0 -1.4 -1.19999999999968 +2 784 92 0 -1.4 -1.19999999999968 +4 CN 93 0 92 0 +0 + +0101000 ++3744 0 -3680 88 * +Ed + 1e-07 1 1 0 +1 330 0 5.80000000000057 6 +2 796 93 0 5.80000000000057 6 +2 797 92 0 5.80000000000057 6 +4 CN 93 0 92 0 +0 + +0101000 ++3676 88 -2956 0 * +Ed + 1e-07 1 1 0 +1 326 0 5.80000000000067 6 +2 783 93 0 5.80000000000067 6 +2 784 92 0 5.80000000000067 6 +4 CN 93 0 92 0 +0 + +0101000 ++3679 88 -2957 0 * +Ed + 1e-07 1 1 0 +1 429 0 -1.5 1.5 +2 1062 218 0 -1.5 1.5 +2 1063 217 0 -1.5 1.5 +4 CN 218 0 217 0 +0 + +0101000 ++3614 0 -3613 0 * +Ed + 1e-07 1 1 0 +1 430 0 -1.5 1.5 +2 1064 218 0 -1.5 1.5 +2 1065 217 0 -1.5 1.5 +4 CN 218 0 217 0 +0 + +0101000 ++3615 0 -3612 0 * +Ed + 1e-07 1 1 0 +1 431 0 0 3.14159265358979 +2 1066 218 0 0 3.14159265358979 +4 C0 218 0 128 0 +2 1067 128 0 0 3.14159265358979 +0 + +0101000 ++3613 0 -3612 0 * +Ed + 1e-07 1 1 0 +1 432 0 3.14159265358979 6.28318530717959 +2 1068 217 0 3.14159265358979 6.28318530717959 +4 C0 217 0 128 0 +2 1069 128 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3612 0 -3613 0 * +Ed + 1e-07 1 1 0 +1 433 0 2.07079632679264 5.21238898038243 +2 1070 213 0 2.07079632679264 5.21238898038243 +4 C0 213 0 219 0 +2 1071 219 0 2.07079632679264 5.21238898038243 +0 + +0101000 ++3611 0 -3610 0 * +Ed + 1e-07 1 1 0 +1 426 0 -1.55 -0.0500000000003649 +2 1051 213 0 -1.55 -0.0500000000003649 +2 1052 214 0 -1.55 -0.0500000000003649 +4 CN 213 0 214 0 +0 + +0101000 ++3611 0 -3620 103 * +Ed + 1e-07 1 1 0 +1 423 0 -1.55 -0.0500000000011249 +2 1039 213 0 -1.55 -0.0500000000011249 +2 1040 214 0 -1.55 -0.0500000000011249 +4 CN 213 0 214 0 +0 + +0101000 ++3610 0 -3622 103 * +Ed + 1e-07 1 1 0 +1 434 0 5.21238898038243 8.35398163397222 +2 1072 214 0 5.21238898038243 8.35398163397222 +4 C0 214 0 219 0 +2 1073 219 0 5.21238898038243 8.35398163397222 +0 + +0101000 ++3610 0 -3611 0 * +Ed + 1e-07 1 1 0 +1 435 0 5.21238898038471 8.3539816339745 +2 1074 220 0 5.21238898038471 8.3539816339745 +4 G1 219 0 220 0 +2 1075 219 0 5.21238898038471 8.3539816339745 +0 + +0101000 ++3609 0 -3608 0 * +Ed + 1e-07 1 1 0 +1 436 0 2.07079632679492 5.21238898038471 +2 1076 221 0 2.07079632679492 5.21238898038471 +4 G1 219 0 221 0 +2 1077 219 0 2.07079632679492 5.21238898038471 +0 + +0101000 ++3608 0 -3609 0 * +Ed + 1e-07 1 1 0 +1 437 0 3.14159265358979 4.71238898038469 +2 1078 220 0 3.14159265358979 4.71238898038469 +2 1079 221 0 3.14159265358979 4.71238898038469 +4 CN 220 0 221 0 +0 + +0101000 ++3607 0 -3609 0 * +Ed + 1e-07 1 1 0 +1 438 0 5.21238898038473 8.35398163397453 +2 1080 220 0 5.21238898038473 8.35398163397453 +2 1081 222 0 5.21238898038473 8.35398163397453 +4 G1 220 0 222 0 +0 + +0101000 ++3607 0 -3606 0 * +Ed + 1e-07 1 1 0 +1 439 0 3.14159265358979 4.71238898038469 +2 1082 220 0 3.14159265358979 4.71238898038469 +2 1083 221 0 3.14159265358979 4.71238898038469 +4 CN 220 0 221 0 +0 + +0101000 ++3606 0 -3608 0 * +Ed + 1e-07 1 1 0 +1 440 0 2.07079632679494 5.21238898038473 +2 1084 221 0 2.07079632679494 5.21238898038473 +2 1085 223 0 2.07079632679494 5.21238898038473 +4 G1 221 0 223 0 +0 + +0101000 ++3606 0 -3607 0 * +Ed + 1e-07 1 1 0 +1 441 0 -0.95 1.25 +2 1086 223 0 -0.95 1.25 +2 1087 222 0 -0.95 1.25 +4 CN 223 0 222 0 +0 + +0101000 ++3606 0 -3605 0 * +Ed + 1e-07 1 1 0 +1 442 0 -0.95 1.25 +2 1088 223 0 -0.95 1.25 +2 1089 222 0 -0.95 1.25 +4 CN 223 0 222 0 +0 + +0101000 ++3607 0 -3604 0 * +Ed + 1e-07 1 1 0 +1 443 0 2.07079632679494 5.21238898038473 +2 1090 223 0 2.07079632679494 5.21238898038473 +2 1091 138 0 2.07079632679494 5.21238898038473 +4 G1 223 0 138 0 +0 + +0101000 ++3605 0 -3604 0 * +Ed + 1e-07 1 1 0 +1 444 0 5.21238898038473 8.35398163397453 +2 1092 222 0 5.21238898038473 8.35398163397453 +2 1093 139 0 5.21238898038473 8.35398163397453 +4 G1 222 0 139 0 +0 + +0101000 ++3604 0 -3605 0 * +Ed + 1e-07 1 1 0 +1 445 0 1.5707963267949 3.14159265358979 +2 1094 139 0 1.5707963267949 3.14159265358979 +2 1095 138 0 1.5707963267949 3.14159265358979 +4 G2 139 0 138 0 +0 + +0101000 ++3734 0 -3604 0 * +Ed + 1e-07 1 1 0 +1 446 0 1.5707963267949 3.14159265358979 +2 1096 139 0 1.5707963267949 3.14159265358979 +2 1097 138 0 1.5707963267949 3.14159265358979 +4 G2 139 0 138 0 +0 + +0101000 ++3735 0 -3605 0 * +Ed + 1e-07 1 1 0 +1 447 0 -6 6 +2 1098 75 0 -6 6 +2 1099 77 0 -6 6 +4 CN 75 0 77 0 +0 + +0101000 ++3603 0 -2979 0 * +Ed + 1e-07 1 1 0 +1 448 0 0 3.14159265358979 +2 1100 75 0 0 3.14159265358979 +4 C0 75 0 224 0 +2 1101 224 0 0 3.14159265358979 +0 + +0101000 ++3603 0 -3602 0 * +Ed + 1e-07 1 1 0 +1 449 0 -6 6 +2 1102 75 0 -6 6 +2 1103 77 0 -6 6 +4 CN 75 0 77 0 +0 + +0101000 ++3602 0 -2978 0 * +Ed + 1e-07 1 1 0 +1 450 0 3.14159265358979 6.28318530717959 +2 1104 77 0 3.14159265358979 6.28318530717959 +4 C0 77 0 224 0 +2 1105 224 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3602 0 -3603 0 * +Ed + 1.00000952869335e-07 1 1 0 +1 451 0 3.14159265358979 5.21238898038482 +2 1106 225 0 3.14159265358979 5.21238898038482 +4 C0 224 0 225 0 +2 1107 224 0 3.14159265358979 5.21238898038482 +2 1108 226 104 3.14159265358979 5.21238898038482 +0 + +0101000 ++3601 0 -3600 96 * +Ed + 1.00000312638804e-07 1 1 0 +1 451 0 5.21238898038482 6.28318530717959 +2 1106 225 0 5.21238898038482 6.28318530717959 +4 C0 224 0 225 0 +2 1107 224 0 5.21238898038482 6.28318530717959 +2 1109 227 104 5.21238898038482 6.28318530717959 +0 + +0101000 ++3600 96 -3599 0 * +Ed + 1.00000987117516e-07 1 1 0 +1 452 0 0 2.07079632679502 +2 1110 228 0 0 2.07079632679502 +4 C0 224 0 228 0 +2 1111 224 0 0 2.07079632679502 +2 1112 227 104 0 2.07079632679502 +0 + +0101000 ++3599 0 -3598 96 * +Ed + 1.00001297475161e-07 1 1 0 +1 452 0 2.07079632679502 3.14159265358979 +2 1110 228 0 2.07079632679502 3.14159265358979 +4 C0 224 0 228 0 +2 1111 224 0 2.07079632679502 3.14159265358979 +2 1113 226 104 2.07079632679502 3.14159265358979 +0 + +0101000 ++3598 96 -3601 0 * +Ed + 1.00001323670747e-07 1 1 0 +1 453 0 -1.41000000001 0.18999999999 +2 1114 225 0 -1.41000000001 0.18999999999 +2 1115 228 0 -1.41000000001 0.18999999999 +4 CN 225 0 228 0 +2 1116 226 105 -1.41000000001 0.18999999999 +2 1117 226 104 -1.41000000001 0.18999999999 +0 + +0101000 ++3601 0 -3597 0 * +Ed + 1.00001311408595e-07 1 1 0 +1 454 0 3.14159265358979 5.2123889803848 +2 1118 225 0 3.14159265358979 5.2123889803848 +4 C0 225 0 229 0 +2 1119 229 0 3.14159265358979 5.2123889803848 +2 1120 226 104 3.14159265358979 5.2123889803848 +2 1121 147 104 3.14159265358979 5.2123889803848 +0 + +0101000 ++3597 0 -3596 104 * +Ed + 1.00012492238535e-07 1 1 0 +1 455 0 -0.050000000001459 1.55 +2 1122 226 0 -0.050000000001459 1.55 +2 1123 227 0 -0.050000000001459 1.55 +4 CN 226 0 227 0 +2 1124 225 106 -0.050000000001459 1.55 +0 + +0101000 ++3600 107 -3596 0 * +Ed + 1.00001355033128e-07 1 1 0 +1 454 0 5.2123889803848 6.28318530717959 +2 1118 225 0 5.2123889803848 6.28318530717959 +4 C0 225 0 229 0 +2 1119 229 0 5.2123889803848 6.28318530717959 +2 1125 227 104 5.2123889803848 6.28318530717959 +2 1126 147 104 5.2123889803848 6.28318530717959 +0 + +0101000 ++3596 104 -3595 0 * +Ed + 1.00001330670319e-07 1 1 0 +1 456 0 -1.41000000001 0.18999999999 +2 1127 225 0 -1.41000000001 0.18999999999 +2 1128 228 0 -1.41000000001 0.18999999999 +4 CN 225 0 228 0 +2 1129 227 105 -1.41000000001 0.18999999999 +2 1130 227 104 -1.41000000001 0.18999999999 +0 + +0101000 ++3599 0 -3595 0 * +Ed + 1.00001292562975e-07 1 1 0 +1 457 0 0 2.07079632679496 +2 1131 228 0 0 2.07079632679496 +4 C0 228 0 229 0 +2 1132 229 0 0 2.07079632679496 +2 1133 227 104 0 2.07079632679496 +2 1134 147 104 0 2.07079632679496 +0 + +0101000 ++3595 0 -3594 104 * +Ed + 1.00013415076959e-07 1 1 0 +1 458 0 -0.0500000000001795 1.55 +2 1135 226 0 -0.0500000000001795 1.55 +2 1136 227 0 -0.0500000000001795 1.55 +4 CN 226 0 227 0 +2 1137 228 106 -0.0500000000001795 1.55 +0 + +0101000 ++3598 107 -3594 0 * +Ed + 1.00001330670319e-07 1 1 0 +1 457 0 2.07079632679496 3.14159265358979 +2 1131 228 0 2.07079632679496 3.14159265358979 +4 C0 228 0 229 0 +2 1132 229 0 2.07079632679496 3.14159265358979 +2 1138 226 104 2.07079632679496 3.14159265358979 +2 1139 147 104 2.07079632679496 3.14159265358979 +0 + +0101000 ++3594 104 -3597 0 * +Ed + 1.00001423995717e-07 1 1 0 +1 459 0 0 3.14159265358979 +2 1140 230 0 0 3.14159265358979 +4 C0 229 0 230 0 +2 1141 229 0 0 3.14159265358979 +2 1142 147 104 0 3.14159265358979 +2 1143 147 105 0 3.14159265358979 +0 + +0101000 ++3593 0 -3592 0 * +Ed + 1.00001412032745e-07 1 1 0 +1 460 0 3.14159265358979 6.28318530717959 +2 1144 231 0 3.14159265358979 6.28318530717959 +4 C0 229 0 231 0 +2 1145 229 0 3.14159265358979 6.28318530717959 +2 1146 147 104 3.14159265358979 6.28318530717959 +2 1147 147 105 3.14159265358979 6.28318530717959 +0 + +0101000 ++3592 0 -3593 0 * +Ed + 1e-07 1 1 0 +1 412 0 -1.4 -1.20000000000061 +2 998 81 0 -1.4 -1.20000000000061 +2 999 80 0 -1.4 -1.20000000000061 +4 CN 81 0 80 0 +0 + +0101000 ++3717 0 -3636 96 * +Ed + 1e-07 1 1 0 +1 408 0 -1.4 -1.20000000000053 +2 983 81 0 -1.4 -1.20000000000053 +2 984 80 0 -1.4 -1.20000000000053 +4 CN 81 0 80 0 +0 + +0101000 ++3716 0 -3634 96 * +Ed + 1e-07 1 1 0 +1 412 0 5.79999999999945 6 +2 998 81 0 5.79999999999945 6 +2 999 80 0 5.79999999999945 6 +4 CN 81 0 80 0 +0 + +0101000 ++3630 96 -2974 0 * +Ed + 1e-07 1 1 0 +1 408 0 5.79999999999949 6 +2 983 81 0 5.79999999999949 6 +2 984 80 0 5.79999999999949 6 +4 CN 81 0 80 0 +0 + +0101000 ++3633 96 -2975 0 * +Ed + 1e-07 1 1 0 +1 461 0 3.14159265358979 6.28318530717959 +2 1148 231 0 3.14159265358979 6.28318530717959 +4 C0 231 0 153 0 +2 1149 153 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3591 0 -3590 0 * +Ed + 1e-07 1 1 0 +1 462 0 -1.5 1.5 +2 1150 231 0 -1.5 1.5 +2 1151 230 0 -1.5 1.5 +4 CN 231 0 230 0 +0 + +0101000 ++3590 0 -3592 0 * +Ed + 1e-07 1 1 0 +1 463 0 -1.5 1.5 +2 1152 231 0 -1.5 1.5 +2 1153 230 0 -1.5 1.5 +4 CN 231 0 230 0 +0 + +0101000 ++3591 0 -3593 0 * +Ed + 1e-07 1 1 0 +1 464 0 0 3.14159265358979 +2 1154 230 0 0 3.14159265358979 +4 C0 230 0 153 0 +2 1155 153 0 0 3.14159265358979 +0 + +0101000 ++3590 0 -3591 0 * +Ed + 1.00001036613425e-07 1 1 0 +1 451 0 3.14159265358979 5.21238898038481 +2 1106 225 0 3.14159265358979 5.21238898038481 +4 C0 224 0 225 0 +2 1107 224 0 3.14159265358979 5.21238898038481 +2 1156 226 105 3.14159265358979 5.21238898038481 +0 + +0101000 ++3601 0 -3589 100 * +Ed + 1.00001297475161e-07 1 1 0 +1 451 0 5.21238898038481 6.28318530717959 +2 1106 225 0 5.21238898038481 6.28318530717959 +4 C0 224 0 225 0 +2 1107 224 0 5.21238898038481 6.28318530717959 +2 1157 227 105 5.21238898038481 6.28318530717959 +0 + +0101000 ++3589 100 -3599 0 * +Ed + 1.00001050546506e-07 1 1 0 +1 452 0 0 2.07079632679501 +2 1110 228 0 0 2.07079632679501 +4 C0 224 0 228 0 +2 1111 224 0 0 2.07079632679501 +2 1158 227 105 0 2.07079632679501 +0 + +0101000 ++3599 0 -3588 100 * +Ed + 1.00000971340767e-07 1 1 0 +1 452 0 2.07079632679501 3.14159265358979 +2 1110 228 0 2.07079632679501 3.14159265358979 +4 C0 224 0 228 0 +2 1111 224 0 2.07079632679501 3.14159265358979 +2 1159 226 105 2.07079632679501 3.14159265358979 +0 + +0101000 ++3588 100 -3601 0 * +Ed + 1.00002072252543e-07 1 1 0 +1 454 0 3.14159265358979 5.21238898038476 +2 1118 225 0 3.14159265358979 5.21238898038476 +4 C0 225 0 229 0 +2 1119 229 0 3.14159265358979 5.21238898038476 +2 1160 226 105 3.14159265358979 5.21238898038476 +2 1161 147 105 3.14159265358979 5.21238898038476 +0 + +0101000 ++3597 0 -3596 105 * +Ed + 1.00013635816802e-07 1 1 0 +1 455 0 -0.0499999999996953 1.55 +2 1122 226 0 -0.0499999999996953 1.55 +2 1123 227 0 -0.0499999999996953 1.55 +4 CN 226 0 227 0 +2 1162 225 108 -0.0499999999996953 1.55 +0 + +0101000 ++3589 109 -3596 0 * +Ed + 1.0000140054444e-07 1 1 0 +1 454 0 5.21238898038476 6.28318530717959 +2 1118 225 0 5.21238898038476 6.28318530717959 +4 C0 225 0 229 0 +2 1119 229 0 5.21238898038476 6.28318530717959 +2 1163 227 105 5.21238898038476 6.28318530717959 +2 1164 147 105 5.21238898038476 6.28318530717959 +0 + +0101000 ++3596 105 -3595 0 * +Ed + 1.00001379038797e-07 1 1 0 +1 457 0 0 2.07079632679499 +2 1131 228 0 0 2.07079632679499 +4 C0 228 0 229 0 +2 1132 229 0 0 2.07079632679499 +2 1165 227 105 0 2.07079632679499 +2 1166 147 105 0 2.07079632679499 +0 + +0101000 ++3595 0 -3594 105 * +Ed + 1.000125741253e-07 1 1 0 +1 458 0 -0.0500000000000078 1.55 +2 1135 226 0 -0.0500000000000078 1.55 +2 1136 227 0 -0.0500000000000078 1.55 +4 CN 226 0 227 0 +2 1167 228 108 -0.0500000000000078 1.55 +0 + +0101000 ++3588 109 -3594 0 * +Ed + 1.00002062092466e-07 1 1 0 +1 457 0 2.07079632679499 3.14159265358979 +2 1131 228 0 2.07079632679499 3.14159265358979 +4 C0 228 0 229 0 +2 1132 229 0 2.07079632679499 3.14159265358979 +2 1168 226 105 2.07079632679499 3.14159265358979 +2 1169 147 105 2.07079632679499 3.14159265358979 +0 + +0101000 ++3594 105 -3597 0 * +Ed + 1e-07 1 1 0 +1 412 0 -1.4 -1.20000000000011 +2 998 81 0 -1.4 -1.20000000000011 +2 999 80 0 -1.4 -1.20000000000011 +4 CN 81 0 80 0 +0 + +0101000 ++3717 0 -3629 100 * +Ed + 1e-07 1 1 0 +1 408 0 -1.4 -1.19999999999996 +2 983 81 0 -1.4 -1.19999999999996 +2 984 80 0 -1.4 -1.19999999999996 +4 CN 81 0 80 0 +0 + +0101000 ++3716 0 -3628 100 * +Ed + 1e-07 1 1 0 +1 412 0 5.79999999999997 6 +2 998 81 0 5.79999999999997 6 +2 999 80 0 5.79999999999997 6 +4 CN 81 0 80 0 +0 + +0101000 ++3626 100 -2974 0 * +Ed + 1e-07 1 1 0 +1 408 0 5.79999999999982 6 +2 983 81 0 5.79999999999982 6 +2 984 80 0 5.79999999999982 6 +4 CN 81 0 80 0 +0 + +0101000 ++3627 100 -2975 0 * +Ed + 1e-07 1 1 0 +1 465 0 2.07079632679499 5.21238898038479 +2 1170 226 0 2.07079632679499 5.21238898038479 +4 C0 226 0 232 0 +2 1171 232 0 2.07079632679499 5.21238898038479 +0 + +0101000 ++3587 0 -3586 0 * +Ed + 1e-07 1 1 0 +1 458 0 -1.55 -0.0500000000001795 +2 1135 226 0 -1.55 -0.0500000000001795 +2 1136 227 0 -1.55 -0.0500000000001795 +4 CN 226 0 227 0 +0 + +0101000 ++3587 0 -3598 107 * +Ed + 1e-07 1 1 0 +1 455 0 -1.55 -0.050000000001459 +2 1122 226 0 -1.55 -0.050000000001459 +2 1123 227 0 -1.55 -0.050000000001459 +4 CN 226 0 227 0 +0 + +0101000 ++3586 0 -3600 107 * +Ed + 1e-07 1 1 0 +1 466 0 5.21238898038479 8.35398163397458 +2 1172 227 0 5.21238898038479 8.35398163397458 +4 C0 227 0 232 0 +2 1173 232 0 5.21238898038479 8.35398163397458 +0 + +0101000 ++3586 0 -3587 0 * +Ed + 1e-07 1 1 0 +1 467 0 5.2123889803847 8.3539816339745 +2 1174 233 0 5.2123889803847 8.3539816339745 +4 G1 232 0 233 0 +2 1175 232 0 5.2123889803847 8.3539816339745 +0 + +0101000 ++3585 0 -3584 0 * +Ed + 1e-07 1 1 0 +1 468 0 2.07079632679491 5.2123889803847 +2 1176 234 0 2.07079632679491 5.2123889803847 +4 G1 232 0 234 0 +2 1177 232 0 2.07079632679491 5.2123889803847 +0 + +0101000 ++3584 0 -3585 0 * +Ed + 1e-07 1 1 0 +1 469 0 3.14159265358979 4.71238898038469 +2 1178 233 0 3.14159265358979 4.71238898038469 +2 1179 234 0 3.14159265358979 4.71238898038469 +4 CN 233 0 234 0 +0 + +0101000 ++3583 0 -3585 0 * +Ed + 1e-07 1 1 0 +1 470 0 5.21238898038473 8.35398163397453 +2 1180 233 0 5.21238898038473 8.35398163397453 +2 1181 235 0 5.21238898038473 8.35398163397453 +4 G1 233 0 235 0 +0 + +0101000 ++3583 0 -3582 0 * +Ed + 1e-07 1 1 0 +1 471 0 3.14159265358979 4.71238898038469 +2 1182 233 0 3.14159265358979 4.71238898038469 +2 1183 234 0 3.14159265358979 4.71238898038469 +4 CN 233 0 234 0 +0 + +0101000 ++3582 0 -3584 0 * +Ed + 1e-07 1 1 0 +1 472 0 2.07079632679494 5.21238898038473 +2 1184 234 0 2.07079632679494 5.21238898038473 +2 1185 236 0 2.07079632679494 5.21238898038473 +4 G1 234 0 236 0 +0 + +0101000 ++3582 0 -3583 0 * +Ed + 1e-07 1 1 0 +1 473 0 -0.95 1.25 +2 1186 236 0 -0.95 1.25 +2 1187 235 0 -0.95 1.25 +4 CN 236 0 235 0 +0 + +0101000 ++3582 0 -3581 0 * +Ed + 1e-07 1 1 0 +1 474 0 -0.95 1.25 +2 1188 236 0 -0.95 1.25 +2 1189 235 0 -0.95 1.25 +4 CN 236 0 235 0 +0 + +0101000 ++3583 0 -3580 0 * +Ed + 1e-07 1 1 0 +1 475 0 2.07079632679494 5.21238898038473 +2 1190 236 0 2.07079632679494 5.21238898038473 +2 1191 163 0 2.07079632679494 5.21238898038473 +4 G1 236 0 163 0 +0 + +0101000 ++3581 0 -3580 0 * +Ed + 1e-07 1 1 0 +1 476 0 5.21238898038473 8.35398163397453 +2 1192 235 0 5.21238898038473 8.35398163397453 +2 1193 164 0 5.21238898038473 8.35398163397453 +4 G1 235 0 164 0 +0 + +0101000 ++3580 0 -3581 0 * +Ed + 1e-07 1 1 0 +1 477 0 1.5707963267949 3.14159265358979 +2 1194 164 0 1.5707963267949 3.14159265358979 +2 1195 163 0 1.5707963267949 3.14159265358979 +4 G2 164 0 163 0 +0 + +0101000 ++3706 0 -3580 0 * +Ed + 1e-07 1 1 0 +1 478 0 1.5707963267949 3.14159265358979 +2 1196 164 0 1.5707963267949 3.14159265358979 +2 1197 163 0 1.5707963267949 3.14159265358979 +4 G2 164 0 163 0 +0 + +0101000 ++3707 0 -3581 0 * +Ed + 1e-07 1 1 0 +1 458 0 -1.55 -0.0500000000000078 +2 1135 226 0 -1.55 -0.0500000000000078 +2 1136 227 0 -1.55 -0.0500000000000078 +4 CN 226 0 227 0 +0 + +0101000 ++3587 0 -3588 109 * +Ed + 1e-07 1 1 0 +1 455 0 -1.55 -0.0499999999996953 +2 1122 226 0 -1.55 -0.0499999999996953 +2 1123 227 0 -1.55 -0.0499999999996953 +4 CN 226 0 227 0 +0 + +0101000 ++3586 0 -3589 109 * +Ed + 1.00000931000804e-07 1 1 0 +1 479 0 1.5707963267949 2.35619449019234 +2 1198 237 0 1.5707963267949 2.35619449019234 +4 C0 237 0 238 0 +2 1199 238 0 1.5707963267949 2.35619449019234 +2 1200 239 110 1.5707963267949 2.35619449019234 +2 1201 240 110 1.5707963267949 2.35619449019234 +0 + +0101000 ++3579 111 -3578 111 * +Ed + 1.00000909938683e-07 1 1 0 +1 480 0 -32.8489256471 32.8491740574 +4 C0 241 0 238 0 +2 1202 241 0 -32.8489256471 32.8491740574 +2 1203 238 0 -32.8489256471 32.8491740574 +2 1204 240 110 -32.8489256471 32.8491740574 +0 + +0101000 ++3577 111 -3579 111 * +Ed + 1.00000198951966e-07 1 1 0 +1 481 0 -3.58578643758061 3.58578643765132 +4 C0 242 0 238 0 +2 1205 242 0 -3.58578643758061 3.58578643765132 +2 1206 238 0 -3.58578643758061 3.58578643765132 +2 1207 240 110 -3.58578643758061 3.58578643765132 +0 + +0101000 ++3576 111 -3578 111 * +Ed + 1.00000909605717e-07 1 1 0 +1 482 0 3.92699081699431 4.71238898038469 +2 1208 243 0 3.92699081699431 4.71238898038469 +4 C0 243 0 238 0 +2 1209 238 0 3.92699081699431 4.71238898038469 +2 1210 244 110 3.92699081699431 4.71238898038469 +2 1211 240 110 3.92699081699431 4.71238898038469 +0 + +0101000 ++3575 111 -3574 111 * +Ed + 1.00000142108547e-07 1 1 0 +1 483 0 -10.07893218817 10.07893218813 +4 C0 245 0 238 0 +2 1212 245 0 -10.07893218817 10.07893218813 +2 1213 238 0 -10.07893218817 10.07893218813 +2 1214 240 110 -10.07893218817 10.07893218813 +0 + +0101000 ++3574 111 -3573 111 * +Ed + 1.00000909605717e-07 1 1 0 +1 484 0 -3.58578643772203 3.58578643758061 +4 C0 246 0 238 0 +2 1215 246 0 -3.58578643772203 3.58578643758061 +2 1216 238 0 -3.58578643772203 3.58578643758061 +2 1217 240 110 -3.58578643772203 3.58578643758061 +0 + +0101000 ++3575 111 -3572 111 * +Ed + 1.00000156319402e-07 1 1 0 +1 485 0 -21.07275669483 21.07275669488 +4 C0 247 0 238 0 +2 1218 247 0 -21.07275669483 21.07275669488 +2 1219 238 0 -21.07275669483 21.07275669488 +2 1220 240 110 -21.07275669483 21.07275669488 +0 + +0101000 ++3570 111 -3571 111 * +Ed + 0.000147176562999176 1 1 0 +1 486 0 0 42.1355454582 +2 1221 248 0 0 42.1355454582 +4 C0 248 0 238 0 +2 1222 238 0 0 42.1355454582 +2 1223 249 110 0 42.1355454582 +2 1224 240 110 0 42.1355454582 +0 + +0101000 ++3570 111 -3569 111 * +Ed + 1.00000198951966e-07 1 1 0 +1 487 0 -1.0256020699 1.0256020699 +4 C0 250 0 238 0 +2 1225 250 0 -1.0256020699 1.0256020699 +2 1226 238 0 -1.0256020699 1.0256020699 +2 1227 240 110 -1.0256020699 1.0256020699 +0 + +0101000 ++3568 111 -3569 111 * +Ed + 1.00000184741111e-07 1 1 0 +1 488 0 -15.394965591 15.3949655911 +4 C0 251 0 238 0 +2 1228 251 0 -15.394965591 15.3949655911 +2 1229 238 0 -15.394965591 15.3949655911 +2 1230 240 110 -15.394965591 15.3949655911 +0 + +0101000 ++3571 111 -3572 111 * +Ed + 0.000550097116054104 1 1 0 +1 489 0 0 25.1995267341 +2 1231 252 0 0 25.1995267341 +4 C0 252 0 238 0 +2 1232 238 0 0 25.1995267341 +2 1233 253 110 0 25.1995267341 +2 1234 240 110 0 25.1995267341 +0 + +0101000 ++3567 111 -3573 111 * +Ed + 1.00000227373675e-07 1 1 0 +1 490 0 3.14159265358979 6.28318530717959 +2 1235 254 0 3.14159265358979 6.28318530717959 +4 C0 254 0 238 0 +2 1236 238 0 3.14159265358979 6.28318530717959 +2 1237 255 110 3.14159265358979 6.28318530717959 +2 1238 240 110 3.14159265358979 6.28318530717959 +0 + +0101000 ++3565 111 -3566 111 * +Ed + 1.00000227373675e-07 1 1 0 +1 491 0 0 3.14159265358979 +2 1239 256 0 0 3.14159265358979 +4 C0 256 0 238 0 +2 1240 238 0 0 3.14159265358979 +2 1241 257 110 0 3.14159265358979 +2 1242 240 110 0 3.14159265358979 +0 + +0101000 ++3566 111 -3565 111 * +Ed + 1.00000284217094e-07 1 1 0 +1 492 0 0 3.14159265358979 +2 1243 258 0 0 3.14159265358979 +4 C0 258 0 238 0 +2 1244 238 0 0 3.14159265358979 +2 1245 259 110 0 3.14159265358979 +2 1246 240 110 0 3.14159265358979 +0 + +0101000 ++3563 111 -3564 111 * +Ed + 1.00000284217094e-07 1 1 0 +1 493 0 3.14159265358979 6.28318530717959 +2 1247 260 0 3.14159265358979 6.28318530717959 +4 C0 260 0 238 0 +2 1248 238 0 3.14159265358979 6.28318530717959 +2 1249 261 110 3.14159265358979 6.28318530717959 +2 1250 240 110 3.14159265358979 6.28318530717959 +0 + +0101000 ++3564 111 -3563 111 * +Ed + 1.00000014210855e-07 1 1 0 +1 494 0 -14.5100701232603 14.5100701232189 +4 C0 262 0 238 0 +2 1251 262 0 -14.5100701232603 14.5100701232189 +2 1252 238 0 -14.5100701232603 14.5100701232189 +2 1253 240 110 -14.5100701232603 14.5100701232189 +0 + +0101000 ++3561 111 -3562 111 * +Ed + 1.00000056843419e-07 1 1 0 +1 495 0 1.08210546427801 1.37058478051409 +2 1254 263 0 1.08210546427801 1.37058478051409 +4 C0 263 0 238 0 +2 1255 238 0 1.08210546427801 1.37058478051409 +2 1256 264 110 1.08210546427801 1.37058478051409 +2 1257 240 110 1.08210546427801 1.37058478051409 +0 + +0101000 ++3561 111 -3567 111 * +Ed + 1.00000227373675e-07 1 1 0 +1 496 0 6.28318075530153 7.36529251234008 +2 1258 265 0 6.28318075530153 7.36529251234008 +4 C0 265 0 238 0 +2 1259 238 0 6.28318075530153 7.36529251234008 +2 1260 266 110 6.28318075530153 7.36529251234008 +2 1261 240 110 6.28318075530153 7.36529251234008 +0 + +0101000 ++3560 111 -3562 111 * +Ed + 1.00000184741111e-07 1 1 0 +1 497 0 -5.00074082596 5.00074082596 +4 C0 267 0 238 0 +2 1262 267 0 -5.00074082596 5.00074082596 +2 1263 238 0 -5.00074082596 5.00074082596 +2 1264 240 110 -5.00074082596 5.00074082596 +0 + +0101000 ++3560 111 -3559 111 * +Ed + 1.00000326849658e-07 1 1 0 +1 498 0 4.71238898038469 6.2831777796514 +2 1265 268 0 4.71238898038469 6.2831777796514 +4 C0 268 0 238 0 +2 1266 238 0 4.71238898038469 6.2831777796514 +2 1267 269 110 4.71238898038469 6.2831777796514 +2 1268 240 110 4.71238898038469 6.2831777796514 +0 + +0101000 ++3577 111 -3559 111 * +Ed + 1.00000925343818e-07 1 1 0 +1 499 0 3.14160018112023 3.92699081698724 +2 1269 270 0 3.14160018112023 3.92699081698724 +4 C0 270 0 238 0 +2 1270 238 0 3.14160018112023 3.92699081698724 +2 1271 271 110 3.14160018112023 3.92699081698724 +2 1272 240 110 3.14160018112023 3.92699081698724 +0 + +0101000 ++3568 111 -3558 111 * +Ed + 1.00000170530257e-07 1 1 0 +1 500 0 -18 18 +4 C0 272 0 238 0 +2 1273 272 0 -18 18 +2 1274 238 0 -18 18 +2 1275 240 110 -18 18 +0 + +0101000 ++3576 111 -3557 111 * +Ed + 1.00000113686838e-07 1 1 0 +1 501 0 -12.077212795244 12.0772127953148 +4 C0 273 0 238 0 +2 1276 273 0 -12.077212795244 12.0772127953148 +2 1277 238 0 -12.077212795244 12.0772127953148 +2 1278 240 110 -12.077212795244 12.0772127953148 +0 + +0101000 ++3558 111 -3557 111 * +Ed + 1.00000284217094e-07 1 1 0 +1 502 0 3.14159265358979 6.28318530717959 +2 1279 274 0 3.14159265358979 6.28318530717959 +4 C0 274 0 238 0 +2 1280 238 0 3.14159265358979 6.28318530717959 +2 1281 275 110 3.14159265358979 6.28318530717959 +2 1282 240 110 3.14159265358979 6.28318530717959 +0 + +0101000 ++3555 111 -3556 111 * +Ed + 1.00000284217094e-07 1 1 0 +1 503 0 0 3.14159265358979 +2 1283 276 0 0 3.14159265358979 +4 C0 276 0 238 0 +2 1284 238 0 0 3.14159265358979 +2 1285 277 110 0 3.14159265358979 +2 1286 240 110 0 3.14159265358979 +0 + +0101000 ++3556 111 -3555 111 * +Ed + 1.00000284217094e-07 1 1 0 +1 504 0 3.14159265358979 6.28318530717959 +2 1287 278 0 3.14159265358979 6.28318530717959 +4 C0 278 0 238 0 +2 1288 238 0 3.14159265358979 6.28318530717959 +2 1289 279 110 3.14159265358979 6.28318530717959 +2 1290 240 110 3.14159265358979 6.28318530717959 +0 + +0101000 ++3553 111 -3554 111 * +Ed + 1.00000284217094e-07 1 1 0 +1 505 0 0 3.14159265358979 +2 1291 280 0 0 3.14159265358979 +4 C0 280 0 238 0 +2 1292 238 0 0 3.14159265358979 +2 1293 281 110 0 3.14159265358979 +2 1294 240 110 0 3.14159265358979 +0 + +0101000 ++3554 111 -3553 111 * +Ed + 1.00000911269327e-07 1 1 0 +1 506 0 2.64159265359188 5.78318530718167 +2 1295 282 0 2.64159265359188 5.78318530718167 +4 C0 282 0 238 0 +2 1296 238 0 2.64159265359188 5.78318530718167 +2 1297 283 110 2.64159265359188 5.78318530718167 +2 1298 240 110 2.64159265359188 5.78318530718167 +0 + +0101000 ++3552 111 -3551 111 * +Ed + 1.00000911269327e-07 1 1 0 +1 507 0 5.78318530718167 8.92477796077147 +2 1299 284 0 5.78318530718167 8.92477796077147 +4 C0 284 0 238 0 +2 1300 238 0 5.78318530718167 8.92477796077147 +2 1301 285 110 5.78318530718167 8.92477796077147 +2 1302 240 110 5.78318530718167 8.92477796077147 +0 + +0101000 ++3551 111 -3552 111 * +Ed + 1.00000312638804e-07 1 1 0 +1 508 0 3.36936457992371 6.02216841770877 +2 1303 286 0 3.36936457992371 6.02216841770877 +4 C0 286 0 238 0 +2 1304 238 0 3.36936457992371 6.02216841770877 +2 1305 240 110 3.36936457992371 6.02216841770877 +0 + +0101000 ++3550 0 -3549 0 * +Ed + 1.00000198951966e-07 1 1 0 +1 509 0 0.261014556239196 1.57080350359134 +2 1306 287 0 0.261014556239196 1.57080350359134 +4 C0 287 0 238 0 +2 1307 238 0 0.261014556239196 1.57080350359134 +2 1308 240 110 0.261014556239196 1.57080350359134 +0 + +0101000 ++3549 0 -3548 0 * +Ed + 1.00000971340767e-07 1 1 0 +1 510 0 4.97340472328349 7.62620808526193 +2 1309 288 0 4.97340472328349 7.62620808526193 +4 C0 288 0 238 0 +2 1310 238 0 4.97340472328349 7.62620808526193 +2 1311 240 110 4.97340472328349 7.62620808526193 +0 + +0101000 ++3546 0 -3547 0 * +Ed + 1.00000213162821e-07 1 1 0 +1 511 0 4.71238684952582 6.02216753358045 +2 1312 289 0 4.71238684952582 6.02216753358045 +4 C0 289 0 238 0 +2 1313 238 0 4.71238684952582 6.02216753358045 +2 1314 240 110 4.71238684952582 6.02216753358045 +0 + +0101000 ++3545 0 -3546 0 * +Ed + 1.00000976421199e-07 1 1 0 +1 512 0 -9.112829280824 9.112829280866 +4 C0 290 0 238 0 +2 1315 238 0 -9.112829280824 9.112829280866 +2 1316 240 110 -9.112829280824 9.112829280866 +0 + +0101000 ++3544 0 -3545 0 * +Ed + 1.00001346361305e-07 1 1 0 +1 513 0 5.62339632756916 6.28318555497329 +2 1317 291 0 5.62339632756916 6.28318555497329 +4 C0 291 0 238 0 +2 1318 238 0 5.62339632756916 6.28318555497329 +2 1319 240 110 5.62339632756916 6.28318555497329 +0 + +0101000 ++3543 0 -3544 0 * +Ed + 1.00000326849658e-07 1 1 0 +1 514 0 5.76968060598598 8.51377241120863 +2 1320 292 0 5.76968060598598 8.51377241120863 +4 C0 292 0 238 0 +2 1321 238 0 5.76968060598598 8.51377241120863 +2 1322 240 110 5.76968060598598 8.51377241120863 +0 + +0101000 ++3542 0 -3543 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 515 0 2.26786938450668 4.19889026528999 +2 1323 293 0 2.26786938450668 4.19889026528999 +4 C0 293 0 238 0 +2 1324 238 0 2.26786938450668 4.19889026528999 +2 1325 240 110 2.26786938450668 4.19889026528999 +0 + +0101000 ++3541 0 -3542 0 * +Ed + 1.00000227373675e-07 1 1 0 +1 516 0 3.14159191774445 4.01532011888745 +2 1326 294 0 3.14159191774445 4.01532011888745 +4 C0 294 0 238 0 +2 1327 238 0 3.14159191774445 4.01532011888745 +2 1328 240 110 3.14159191774445 4.01532011888745 +0 + +0101000 ++3540 0 -3541 0 * +Ed + 1.00000312638804e-07 1 1 0 +1 517 0 -5.9988333129 5.99883331295 +4 C0 295 0 238 0 +2 1329 238 0 -5.9988333129 5.99883331295 +2 1330 295 0 -5.9988333129 5.99883331295 +2 1331 240 110 -5.9988333129 5.99883331295 +0 + +0101000 ++3540 0 -3539 0 * +Ed + 1.00000312638804e-07 1 1 0 +1 518 0 0.26101778683788 1.57079847327706 +2 1332 296 0 0.26101778683788 1.57079847327706 +4 C0 296 0 238 0 +2 1333 238 0 0.26101778683788 1.57079847327706 +2 1334 240 110 0.26101778683788 1.57079847327706 +0 + +0101000 ++3538 0 -3539 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 519 0 1.79856987679419 4.45137323575428 +2 1335 297 0 1.79856987679419 4.45137323575428 +4 C0 297 0 238 0 +2 1336 238 0 1.79856987679419 4.45137323575428 +2 1337 240 110 1.79856987679419 4.45137323575428 +0 + +0101000 ++3537 0 -3538 0 * +Ed + 1.00000170530257e-07 1 1 0 +1 520 0 -5.9988333129 5.99883331295 +4 C0 298 0 238 0 +2 1338 238 0 -5.9988333129 5.99883331295 +2 1339 298 0 -5.9988333129 5.99883331295 +2 1340 240 110 -5.9988333129 5.99883331295 +0 + +0101000 ++3536 0 -3548 0 * +Ed + 1.00001346361305e-07 1 1 0 +1 521 0 3.14159880502311 4.01531527702699 +2 1341 299 0 3.14159880502311 4.01531527702699 +4 C0 299 0 238 0 +2 1342 238 0 3.14159880502311 4.01531527702699 +2 1343 240 110 3.14159880502311 4.01531527702699 +0 + +0101000 ++3536 0 -3535 0 * +Ed + 1.00000198951966e-07 1 1 0 +1 522 0 2.26786873982048 4.19889010491378 +2 1344 300 0 2.26786873982048 4.19889010491378 +4 C0 300 0 238 0 +2 1345 238 0 2.26786873982048 4.19889010491378 +2 1346 240 110 2.26786873982048 4.19889010491378 +0 + +0101000 ++3535 0 -3534 0 * +Ed + 1.00000213162821e-07 1 1 0 +1 523 0 5.76968031548267 8.51377368083406 +2 1347 301 0 5.76968031548267 8.51377368083406 +4 C0 301 0 238 0 +2 1348 238 0 5.76968031548267 8.51377368083406 +2 1349 240 110 5.76968031548267 8.51377368083406 +0 + +0101000 ++3534 0 -3533 0 * +Ed + 1.00000213162821e-07 1 1 0 +1 524 0 5.62340191545187 6.28317744086674 +2 1350 302 0 5.62340191545187 6.28317744086674 +4 C0 302 0 238 0 +2 1351 238 0 5.62340191545187 6.28317744086674 +2 1352 240 110 5.62340191545187 6.28317744086674 +0 + +0101000 ++3533 0 -3532 0 * +Ed + 1.00000976421199e-07 1 1 0 +1 525 0 -9.112829280834 9.112829280866 +4 C0 303 0 238 0 +2 1353 238 0 -9.112829280834 9.112829280866 +2 1354 240 110 -9.112829280834 9.112829280866 +0 + +0101000 ++3532 0 -3531 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 526 0 4.71238219726724 6.02217051383227 +2 1355 304 0 4.71238219726724 6.02217051383227 +4 C0 304 0 238 0 +2 1356 238 0 4.71238219726724 6.02217051383227 +2 1357 240 110 4.71238219726724 6.02217051383227 +0 + +0101000 ++3531 0 -3530 0 * +Ed + 1.00000298427949e-07 1 1 0 +1 527 0 4.97340586833326 7.62620970947703 +2 1358 305 0 4.97340586833326 7.62620970947703 +4 C0 305 0 238 0 +2 1359 238 0 4.97340586833326 7.62620970947703 +2 1360 240 110 4.97340586833326 7.62620970947703 +0 + +0101000 ++3530 0 -3529 0 * +Ed + 1.00000326849658e-07 1 1 0 +1 528 0 4.94016157096724 5.8534078363234 +2 1361 306 0 4.94016157096724 5.8534078363234 +4 C0 306 0 238 0 +2 1362 238 0 4.94016157096724 5.8534078363234 +2 1363 240 110 4.94016157096724 5.8534078363234 +0 + +0101000 ++3529 0 -3528 0 * +Ed + 1.00000213162821e-07 1 1 0 +1 529 0 2.00057379765869 3.14159789052979 +2 1364 307 0 2.00057379765869 3.14159789052979 +4 C0 307 0 238 0 +2 1365 238 0 2.00057379765869 3.14159789052979 +2 1366 240 110 2.00057379765869 3.14159789052979 +0 + +0101000 ++3528 0 -3527 0 * +Ed + 1.00000298427949e-07 1 1 0 +1 530 0 3.36935871814427 4.28261523415869 +2 1367 308 0 3.36935871814427 4.28261523415869 +4 C0 308 0 238 0 +2 1368 238 0 3.36935871814427 4.28261523415869 +2 1369 240 110 3.36935871814427 4.28261523415869 +0 + +0101000 ++3547 0 -3526 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 531 0 3.14159265358979 5.14216272662296 +2 1370 309 0 3.14159265358979 5.14216272662296 +4 C0 309 0 238 0 +2 1371 238 0 3.14159265358979 5.14216272662296 +2 1372 240 110 3.14159265358979 5.14216272662296 +0 + +0101000 ++3527 0 -3526 0 * +Ed + 1.00000227373675e-07 1 1 0 +1 532 0 3.57136993045051 4.48461715389789 +2 1373 310 0 3.57136993045051 4.48461715389789 +4 C0 310 0 238 0 +2 1374 238 0 3.57136993045051 4.48461715389789 +2 1375 240 110 3.57136993045051 4.48461715389789 +0 + +0101000 ++3525 0 -3550 0 * +Ed + 1.00000227373675e-07 1 1 0 +1 533 0 1.5707913744749 2.71181537673445 +2 1376 311 0 1.5707913744749 2.71181537673445 +4 C0 311 0 238 0 +2 1377 238 0 1.5707913744749 2.71181537673445 +2 1378 240 110 1.5707913744749 2.71181537673445 +0 + +0101000 ++3524 0 -3525 0 * +Ed + 0.00112587558913171 1 1 0 +1 534 0 0 19.550105515 +2 1379 312 0 0 19.550105515 +4 C0 238 0 312 0 +2 1380 238 0 0 19.550105515 +2 1381 240 110 0 19.550105515 +0 + +0101000 ++3537 0 -3523 0 * +Ed + 1.00000971340767e-07 1 1 0 +1 535 0 1.14102255594374 3.14159265358979 +2 1382 313 0 1.14102255594374 3.14159265358979 +4 C0 238 0 313 0 +2 1383 238 0 1.14102255594374 3.14159265358979 +2 1384 240 110 1.14102255594374 3.14159265358979 +0 + +0101000 ++3523 0 -3524 0 * +Ed + 1e-07 1 1 0 +1 536 0 5.21238898038645 8.35398163397625 +2 1385 314 0 5.21238898038645 8.35398163397625 +2 1386 315 0 5.21238898038645 8.35398163397625 +4 C0 314 0 315 0 +0 + +0101000 ++3522 0 -3521 0 * +Ed + 1e-07 1 1 0 +1 537 0 -3.55399314159998 3.55399314159389 +2 1387 314 0 -3.55399314159998 3.55399314159389 +2 1388 316 0 -3.55399314159998 3.55399314159389 +4 CN 314 0 316 0 +0 + +0101000 ++3520 0 -3522 0 * +Ed + 1e-07 1 1 0 +1 538 0 5.21238898038431 8.3539816339741 +2 1389 314 0 5.21238898038431 8.3539816339741 +4 C0 314 0 185 0 +2 1390 185 0 5.21238898038431 8.3539816339741 +0 + +0101000 ++3520 0 -3519 0 * +Ed + 1e-07 1 1 0 +1 539 0 -3.55399314159998 3.55399314159389 +2 1391 314 0 -3.55399314159998 3.55399314159389 +2 1392 316 0 -3.55399314159998 3.55399314159389 +4 CN 314 0 316 0 +0 + +0101000 ++3519 0 -3521 0 * +Ed + 1e-07 1 1 0 +1 540 0 2.07079632679666 5.21238898038645 +2 1393 316 0 2.07079632679666 5.21238898038645 +2 1394 317 0 2.07079632679666 5.21238898038645 +4 C0 316 0 317 0 +0 + +0101000 ++3521 0 -3522 0 * +Ed + 1e-07 1 1 0 +1 541 0 2.07079632679451 5.21238898038431 +2 1395 316 0 2.07079632679451 5.21238898038431 +4 C0 316 0 185 0 +2 1396 185 0 2.07079632679451 5.21238898038431 +0 + +0101000 ++3519 0 -3520 0 * +Ed + 1e-07 1 1 0 +1 542 0 5.21238898038515 8.35398163397495 +2 1397 318 0 5.21238898038515 8.35398163397495 +4 C0 319 0 318 0 +2 1398 319 0 5.21238898038515 8.35398163397495 +0 + +0101000 ++3518 0 -3517 0 * +Ed + 1e-07 1 1 0 +1 543 0 2.07079632679536 5.21238898038515 +2 1399 320 0 2.07079632679536 5.21238898038515 +4 C0 319 0 320 0 +2 1400 319 0 2.07079632679536 5.21238898038515 +0 + +0101000 ++3517 0 -3518 0 * +Ed + 1e-07 1 1 0 +1 544 0 2.07079632679333 5.21238898038313 +2 1401 321 0 2.07079632679333 5.21238898038313 +4 C0 319 0 321 0 +2 1402 319 0 2.07079632679333 5.21238898038313 +0 + +0101000 ++3516 0 -3515 0 * +Ed + 1e-07 1 1 0 +1 545 0 5.21238898038313 8.35398163397292 +2 1403 322 0 5.21238898038313 8.35398163397292 +4 C0 319 0 322 0 +2 1404 319 0 5.21238898038313 8.35398163397292 +0 + +0101000 ++3515 0 -3516 0 * +Ed + 1e-07 1 1 0 +1 546 0 -1 0 +2 1405 323 0 -1 0 +2 1406 324 0 -1 0 +4 CN 323 0 324 0 +0 + +0101000 ++3514 0 -3513 0 * +Ed + 1e-07 1 1 0 +1 547 0 5.21238898038508 8.35398163397487 +2 1407 323 0 5.21238898038508 8.35398163397487 +2 1408 325 0 5.21238898038508 8.35398163397487 +4 C1 323 0 325 0 +0 + +0101000 ++3514 0 -3512 0 * +Ed + 1e-07 1 1 0 +1 548 0 -1 0 +2 1409 323 0 -1 0 +2 1410 324 0 -1 0 +4 CN 323 0 324 0 +0 + +0101000 ++3512 0 -3511 0 * +Ed + 1e-07 1 1 0 +1 549 0 5.21238898038508 8.35398163397487 +2 1411 323 0 5.21238898038508 8.35398163397487 +2 1412 326 0 5.21238898038508 8.35398163397487 +4 C0 323 0 326 0 +0 + +0101000 ++3513 0 -3511 0 * +Ed + 1e-07 1 1 0 +1 550 0 2.07079632679529 5.21238898038508 +2 1413 324 0 2.07079632679529 5.21238898038508 +2 1414 327 0 2.07079632679529 5.21238898038508 +4 C1 324 0 327 0 +0 + +0101000 ++3512 0 -3514 0 * +Ed + 1e-07 1 1 0 +1 551 0 2.07079632679529 5.21238898038508 +2 1415 324 0 2.07079632679529 5.21238898038508 +2 1416 328 0 2.07079632679529 5.21238898038508 +4 C0 324 0 328 0 +0 + +0101000 ++3511 0 -3513 0 * +Ed + 1e-07 1 1 0 +1 552 0 -1.23606797750079 1.23606797749797 +2 1417 328 0 -1.23606797750079 1.23606797749797 +2 1418 326 0 -1.23606797750079 1.23606797749797 +4 G2 328 0 326 0 +0 + +0101000 ++3513 0 -3510 0 * +Ed + 1e-07 1 1 0 +1 553 0 2.07079630196715 5.21238898038448 +2 1419 328 0 2.07079630196715 5.21238898038448 +4 C0 328 0 329 0 +2 1420 329 0 2.07079630196715 5.21238898038448 +0 + +0101000 ++3509 0 -3510 0 * +Ed + 1e-07 1 1 0 +1 554 0 -1.23606797750079 1.23606797750292 +2 1421 328 0 -1.23606797750079 1.23606797750292 +2 1422 326 0 -1.23606797750079 1.23606797750292 +4 G2 328 0 326 0 +0 + +0101000 ++3511 0 -3509 0 * +Ed + 1e-07 1 1 0 +1 555 0 5.21238898038448 8.35398160914674 +2 1423 326 0 5.21238898038448 8.35398160914674 +4 C0 326 0 329 0 +2 1424 329 0 5.21238898038448 8.35398160914674 +0 + +0101000 ++3510 0 -3509 0 * +Ed + 1e-07 1 1 0 +1 556 0 -0.75 0.25 +2 1425 318 0 -0.75 0.25 +2 1426 320 0 -0.75 0.25 +4 CN 318 0 320 0 +0 + +0101000 ++3518 0 -3508 0 * +Ed + 1e-07 1 1 0 +1 557 0 -0.75 0.25 +2 1427 318 0 -0.75 0.25 +2 1428 320 0 -0.75 0.25 +4 CN 318 0 320 0 +0 + +0101000 ++3517 0 -3507 0 * +Ed + 1e-07 1 1 0 +1 558 0 5.21238898038515 8.35398163397495 +2 1429 318 0 5.21238898038515 8.35398163397495 +2 1430 330 0 5.21238898038515 8.35398163397495 +4 G1 318 0 330 0 +0 + +0101000 ++3508 0 -3507 0 * +Ed + 1e-07 1 1 0 +1 559 0 2.07079632679536 5.21238898038515 +2 1431 320 0 2.07079632679536 5.21238898038515 +2 1432 331 0 2.07079632679536 5.21238898038515 +4 G1 320 0 331 0 +0 + +0101000 ++3507 0 -3508 0 * +Ed + 1e-07 1 1 0 +1 560 0 5.21238898038622 8.35398163397601 +2 1433 332 0 5.21238898038622 8.35398163397601 +4 C0 333 0 332 0 +2 1434 333 0 5.21238898038622 8.35398163397601 +0 + +0101000 ++3506 0 -3505 0 * +Ed + 1e-07 1 1 0 +1 561 0 2.07079632679642 5.21238898038622 +2 1435 334 0 2.07079632679642 5.21238898038622 +4 C0 333 0 334 0 +2 1436 333 0 2.07079632679642 5.21238898038622 +0 + +0101000 ++3505 0 -3506 0 * +Ed + 1e-07 1 1 0 +1 562 0 2.07079632679412 5.21238898038392 +2 1437 331 0 2.07079632679412 5.21238898038392 +4 G1 333 0 331 0 +2 1438 333 0 2.07079632679412 5.21238898038392 +0 + +0101000 ++3504 0 -3503 0 * +Ed + 1e-07 1 1 0 +1 563 0 5.21238898038392 8.35398163397371 +2 1439 330 0 5.21238898038392 8.35398163397371 +4 G1 333 0 330 0 +2 1440 333 0 5.21238898038392 8.35398163397371 +0 + +0101000 ++3503 0 -3504 0 * +Ed + 1e-07 1 1 0 +1 564 0 1.5707963267949 3.14159265358979 +2 1441 331 0 1.5707963267949 3.14159265358979 +2 1442 330 0 1.5707963267949 3.14159265358979 +4 CN 331 0 330 0 +0 + +0101000 ++3503 0 -3508 0 * +Ed + 1e-07 1 1 0 +1 565 0 1.5707963267949 3.14159265358979 +2 1443 331 0 1.5707963267949 3.14159265358979 +2 1444 330 0 1.5707963267949 3.14159265358979 +4 CN 331 0 330 0 +0 + +0101000 ++3504 0 -3507 0 * +Ed + 1e-07 1 1 0 +1 566 0 5.23598775599215 6.28318530717959 +2 1445 327 0 5.23598775599215 6.28318530717959 +2 1446 325 0 5.23598775599215 6.28318530717959 +4 G2 327 0 325 0 +0 + +0101000 ++3502 0 -3514 0 * +Ed + 1e-07 1 1 0 +1 567 0 5.23598775599215 6.28318530717959 +2 1447 327 0 5.23598775599215 6.28318530717959 +2 1448 325 0 5.23598775599215 6.28318530717959 +4 G2 327 0 325 0 +0 + +0101000 ++3501 0 -3512 0 * +Ed + 1e-07 1 1 0 +1 568 0 2.07079632679523 5.21238898038503 +2 1449 327 0 2.07079632679523 5.21238898038503 +2 1450 187 0 2.07079632679523 5.21238898038503 +4 C1 327 0 187 0 +0 + +0101000 ++3501 0 -3502 0 * +Ed + 1e-07 1 1 0 +1 569 0 5.21238898038503 8.35398163397482 +2 1451 325 0 5.21238898038503 8.35398163397482 +2 1452 189 0 5.21238898038503 8.35398163397482 +4 C1 325 0 189 0 +0 + +0101000 ++3502 0 -3501 0 * +Ed + 1e-07 1 1 0 +1 570 0 2.0943951023856 3.14159265358979 +2 1453 187 0 2.0943951023856 3.14159265358979 +2 1454 189 0 2.0943951023856 3.14159265358979 +4 CN 187 0 189 0 +0 + +0101000 ++3502 0 -3666 0 * +Ed + 1e-07 1 1 0 +1 571 0 2.0943951023856 3.14159265358979 +2 1455 187 0 2.0943951023856 3.14159265358979 +2 1456 189 0 2.0943951023856 3.14159265358979 +4 G2 187 0 189 0 +0 + +0101000 ++3501 0 -3667 0 * +Ed + 1e-07 1 1 0 +1 572 0 -0.35 0.05 +2 1457 315 0 -0.35 0.05 +2 1458 317 0 -0.35 0.05 +4 CN 315 0 317 0 +0 + +0101000 ++3522 0 -3500 0 * +Ed + 1e-07 1 1 0 +1 573 0 -0.35 0.05 +2 1459 315 0 -0.35 0.05 +2 1460 317 0 -0.35 0.05 +4 CN 315 0 317 0 +0 + +0101000 ++3521 0 -3499 0 * +Ed + 1e-07 1 1 0 +1 574 0 5.21238898038645 8.35398163397625 +2 1461 315 0 5.21238898038645 8.35398163397625 +2 1462 335 0 5.21238898038645 8.35398163397625 +4 G1 315 0 335 0 +0 + +0101000 ++3500 0 -3499 0 * +Ed + 1e-07 1 1 0 +1 575 0 2.07079632679666 5.21238898038645 +2 1463 317 0 2.07079632679666 5.21238898038645 +2 1464 336 0 2.07079632679666 5.21238898038645 +4 G1 317 0 336 0 +0 + +0101000 ++3499 0 -3500 0 * +Ed + 1e-07 1 1 0 +1 576 0 1.5707963267949 3.14159265358979 +2 1465 336 0 1.5707963267949 3.14159265358979 +2 1466 335 0 1.5707963267949 3.14159265358979 +4 G2 336 0 335 0 +0 + +0101000 ++3498 0 -3500 0 * +Ed + 1e-07 1 1 0 +1 577 0 1.5707963267949 3.14159265358979 +2 1467 336 0 1.5707963267949 3.14159265358979 +2 1468 335 0 1.5707963267949 3.14159265358979 +4 G2 336 0 335 0 +0 + +0101000 ++3497 0 -3499 0 * +Ed + 1e-07 1 1 0 +1 578 0 2.07079632679519 5.21238898038498 +2 1469 336 0 2.07079632679519 5.21238898038498 +4 G1 336 0 337 0 +2 1470 337 0 2.07079632679519 5.21238898038498 +0 + +0101000 ++3497 0 -3498 0 * +Ed + 1e-07 1 1 0 +1 579 0 5.21238898038498 8.35398163397477 +2 1471 335 0 5.21238898038498 8.35398163397477 +4 G1 335 0 337 0 +2 1472 337 0 5.21238898038498 8.35398163397477 +0 + +0101000 ++3498 0 -3497 0 * +Ed + 1e-07 1 1 0 +1 580 0 -0.35 0.05 +2 1473 322 0 -0.35 0.05 +2 1474 321 0 -0.35 0.05 +4 CN 322 0 321 0 +0 + +0101000 ++3515 0 -3496 0 * +Ed + 1e-07 1 1 0 +1 581 0 -0.35 0.05 +2 1475 322 0 -0.35 0.05 +2 1476 321 0 -0.35 0.05 +4 CN 322 0 321 0 +0 + +0101000 ++3516 0 -3495 0 * +Ed + 1e-07 1 1 0 +1 582 0 5.21238898038313 8.35398163397292 +2 1477 322 0 5.21238898038313 8.35398163397292 +2 1478 338 0 5.21238898038313 8.35398163397292 +4 G1 322 0 338 0 +0 + +0101000 ++3496 0 -3495 0 * +Ed + 1e-07 1 1 0 +1 583 0 2.07079632679333 5.21238898038313 +2 1479 321 0 2.07079632679333 5.21238898038313 +2 1480 339 0 2.07079632679333 5.21238898038313 +4 G1 321 0 339 0 +0 + +0101000 ++3495 0 -3496 0 * +Ed + 1e-07 1 1 0 +1 584 0 5.2123889803845 8.3539816339743 +2 1481 338 0 5.2123889803845 8.3539816339743 +4 G1 337 0 338 0 +2 1482 337 0 5.2123889803845 8.3539816339743 +0 + +0101000 ++3494 0 -3493 0 * +Ed + 1e-07 1 1 0 +1 585 0 2.07079632679471 5.2123889803845 +2 1483 339 0 2.07079632679471 5.2123889803845 +4 G1 337 0 339 0 +2 1484 337 0 2.07079632679471 5.2123889803845 +0 + +0101000 ++3493 0 -3494 0 * +Ed + 1e-07 1 1 0 +1 586 0 0 1.5707963267949 +2 1485 339 0 0 1.5707963267949 +2 1486 338 0 0 1.5707963267949 +4 CN 339 0 338 0 +0 + +0101000 ++3496 0 -3494 0 * +Ed + 1e-07 1 1 0 +1 587 0 0 1.5707963267949 +2 1487 339 0 0 1.5707963267949 +2 1488 338 0 0 1.5707963267949 +4 CN 339 0 338 0 +0 + +0101000 ++3495 0 -3493 0 * +Ed + 1e-07 1 1 0 +1 588 0 -2.75 1.55 +2 1489 332 0 -2.75 1.55 +2 1490 334 0 -2.75 1.55 +4 CN 332 0 334 0 +0 + +0101000 ++3506 0 -3492 0 * +Ed + 1e-07 1 1 0 +1 589 0 -2.75 1.55 +2 1491 332 0 -2.75 1.55 +2 1492 334 0 -2.75 1.55 +4 CN 332 0 334 0 +0 + +0101000 ++3505 0 -3491 0 * +Ed + 1e-07 1 1 0 +1 590 0 5.21238898038622 8.35398163397601 +2 1493 332 0 5.21238898038622 8.35398163397601 +2 1494 340 0 5.21238898038622 8.35398163397601 +4 C0 332 0 340 0 +0 + +0101000 ++3492 0 -3491 0 * +Ed + 1e-07 1 1 0 +1 591 0 2.07079632679642 5.21238898038622 +2 1495 334 0 2.07079632679642 5.21238898038622 +2 1496 341 0 2.07079632679642 5.21238898038622 +4 C0 334 0 341 0 +0 + +0101000 ++3491 0 -3492 0 * +Ed + 1e-07 1 1 0 +1 592 0 2.07079632679404 5.21238898038383 +2 1497 341 0 2.07079632679404 5.21238898038383 +4 C0 329 0 341 0 +2 1498 329 0 2.07079632679404 5.21238898038383 +0 + +0101000 ++3490 0 -3489 0 * +Ed + 1e-07 1 1 0 +1 593 0 5.21238898038383 8.35398163397362 +2 1499 340 0 5.21238898038383 8.35398163397362 +4 C0 329 0 340 0 +2 1500 329 0 5.21238898038383 8.35398163397362 +0 + +0101000 ++3489 0 -3490 0 * +Ed + 1e-07 1 1 0 +1 594 0 -0.848528137401764 0.848528137405155 +2 1501 341 0 -0.848528137401764 0.848528137405155 +2 1502 340 0 -0.848528137401764 0.848528137405155 +4 G2 341 0 340 0 +0 + +0101000 ++3490 0 -3491 0 * +Ed + 1e-07 1 1 0 +1 595 0 -0.848528137401764 0.848528137405155 +2 1503 341 0 -0.848528137401764 0.848528137405155 +2 1504 340 0 -0.848528137401764 0.848528137405155 +4 G2 341 0 340 0 +0 + +0101000 ++3489 0 -3492 0 * +Ed + 1e-07 1 1 0 +1 596 0 5.21238898038493 8.35398163397472 +2 1505 342 0 5.21238898038493 8.35398163397472 +2 1506 343 0 5.21238898038493 8.35398163397472 +4 C0 342 0 343 0 +0 + +0101000 ++3488 0 -3487 0 * +Ed + 1e-07 1 1 0 +1 597 0 -2.28470987674373 2.28470987674373 +2 1507 342 0 -2.28470987674373 2.28470987674373 +2 1508 344 0 -2.28470987674373 2.28470987674373 +4 G2 342 0 344 0 +0 + +0101000 ++3486 0 -3488 0 * +Ed + 1e-07 1 1 0 +1 598 0 5.21238898038483 8.35398163397462 +2 1509 342 0 5.21238898038483 8.35398163397462 +4 C0 342 0 205 0 +2 1510 205 0 5.21238898038483 8.35398163397462 +0 + +0101000 ++3486 0 -3485 0 * +Ed + 1e-07 1 1 0 +1 599 0 -2.28470987674373 2.28470987674373 +2 1511 342 0 -2.28470987674373 2.28470987674373 +2 1512 344 0 -2.28470987674373 2.28470987674373 +4 CN 342 0 344 0 +0 + +0101000 ++3485 0 -3487 0 * +Ed + 1e-07 1 1 0 +1 600 0 2.07079632679513 5.21238898038493 +2 1513 344 0 2.07079632679513 5.21238898038493 +2 1514 345 0 2.07079632679513 5.21238898038493 +4 C0 344 0 345 0 +0 + +0101000 ++3487 0 -3488 0 * +Ed + 1e-07 1 1 0 +1 601 0 2.07079632679503 5.21238898038483 +2 1515 344 0 2.07079632679503 5.21238898038483 +4 C0 344 0 205 0 +2 1516 205 0 2.07079632679503 5.21238898038483 +0 + +0101000 ++3485 0 -3486 0 * +Ed + 1e-07 1 1 0 +1 602 0 5.21238898038494 8.35398163397473 +2 1517 346 0 5.21238898038494 8.35398163397473 +4 C0 347 0 346 0 +2 1518 347 0 5.21238898038494 8.35398163397473 +0 + +0101000 ++3484 0 -3483 0 * +Ed + 1e-07 1 1 0 +1 603 0 2.07079632679514 5.21238898038494 +2 1519 348 0 2.07079632679514 5.21238898038494 +4 C0 347 0 348 0 +2 1520 347 0 2.07079632679514 5.21238898038494 +0 + +0101000 ++3483 0 -3484 0 * +Ed + 1e-07 1 1 0 +1 604 0 2.07079632679501 5.2123889803848 +2 1521 349 0 2.07079632679501 5.2123889803848 +4 C0 347 0 349 0 +2 1522 347 0 2.07079632679501 5.2123889803848 +0 + +0101000 ++3482 0 -3481 0 * +Ed + 1e-07 1 1 0 +1 605 0 5.2123889803848 8.35398163397459 +2 1523 350 0 5.2123889803848 8.35398163397459 +4 C0 347 0 350 0 +2 1524 347 0 5.2123889803848 8.35398163397459 +0 + +0101000 ++3481 0 -3482 0 * +Ed + 1e-07 1 1 0 +1 606 0 -0.5 -0.0999999999999996 +2 1525 351 0 -0.5 -0.0999999999999996 +2 1526 352 0 -0.5 -0.0999999999999996 +4 CN 351 0 352 0 +0 + +0101000 ++3480 0 -3479 0 * +Ed + 1e-07 1 1 0 +1 607 0 5.21238898038494 8.35398163397473 +2 1527 351 0 5.21238898038494 8.35398163397473 +2 1528 353 0 5.21238898038494 8.35398163397473 +4 C1 351 0 353 0 +0 + +0101000 ++3480 0 -3478 0 * +Ed + 1e-07 1 1 0 +1 608 0 -0.5 -0.0999999999999996 +2 1529 351 0 -0.5 -0.0999999999999996 +2 1530 352 0 -0.5 -0.0999999999999996 +4 CN 351 0 352 0 +0 + +0101000 ++3478 0 -3477 0 * +Ed + 1e-07 1 1 0 +1 609 0 5.21238898038494 8.35398163397473 +2 1531 351 0 5.21238898038494 8.35398163397473 +2 1532 354 0 5.21238898038494 8.35398163397473 +4 C0 351 0 354 0 +0 + +0101000 ++3479 0 -3477 0 * +Ed + 1e-07 1 1 0 +1 610 0 2.07079632679515 5.21238898038494 +2 1533 352 0 2.07079632679515 5.21238898038494 +2 1534 355 0 2.07079632679515 5.21238898038494 +4 C1 352 0 355 0 +0 + +0101000 ++3478 0 -3480 0 * +Ed + 1e-07 1 1 0 +1 611 0 2.07079632679515 5.21238898038494 +2 1535 352 0 2.07079632679515 5.21238898038494 +2 1536 356 0 2.07079632679515 5.21238898038494 +4 C0 352 0 356 0 +0 + +0101000 ++3477 0 -3479 0 * +Ed + 1e-07 1 1 0 +1 612 0 -0.988854382001193 0.988854381998375 +2 1537 356 0 -0.988854382001193 0.988854381998375 +2 1538 354 0 -0.988854382001193 0.988854381998375 +4 G2 356 0 354 0 +0 + +0101000 ++3479 0 -3476 0 * +Ed + 1e-07 1 1 0 +1 613 0 2.07079627976294 5.21238898038456 +2 1539 356 0 2.07079627976294 5.21238898038456 +4 C0 356 0 357 0 +2 1540 357 0 2.07079627976294 5.21238898038456 +0 + +0101000 ++3475 0 -3476 0 * +Ed + 1e-07 1 1 0 +1 614 0 -0.988854381999761 0.988854382000159 +2 1541 356 0 -0.988854381999761 0.988854382000159 +2 1542 354 0 -0.988854381999761 0.988854382000159 +4 G2 356 0 354 0 +0 + +0101000 ++3477 0 -3475 0 * +Ed + 1e-07 1 1 0 +1 615 0 5.21238898038456 8.35398158694252 +2 1543 354 0 5.21238898038456 8.35398158694252 +4 C0 354 0 357 0 +2 1544 357 0 5.21238898038456 8.35398158694252 +0 + +0101000 ++3476 0 -3475 0 * +Ed + 1e-07 1 1 0 +1 616 0 -0.75 0.25 +2 1545 346 0 -0.75 0.25 +2 1546 348 0 -0.75 0.25 +4 CN 346 0 348 0 +0 + +0101000 ++3484 0 -3474 0 * +Ed + 1e-07 1 1 0 +1 617 0 -0.75 0.25 +2 1547 346 0 -0.75 0.25 +2 1548 348 0 -0.75 0.25 +4 CN 346 0 348 0 +0 + +0101000 ++3483 0 -3473 0 * +Ed + 1e-07 1 1 0 +1 618 0 5.21238898038494 8.35398163397473 +2 1549 346 0 5.21238898038494 8.35398163397473 +2 1550 358 0 5.21238898038494 8.35398163397473 +4 G1 346 0 358 0 +0 + +0101000 ++3474 0 -3473 0 * +Ed + 1e-07 1 1 0 +1 619 0 2.07079632679514 5.21238898038494 +2 1551 348 0 2.07079632679514 5.21238898038494 +2 1552 359 0 2.07079632679514 5.21238898038494 +4 G1 348 0 359 0 +0 + +0101000 ++3473 0 -3474 0 * +Ed + 1e-07 1 1 0 +1 620 0 5.21238898038404 8.35398163397383 +2 1553 360 0 5.21238898038404 8.35398163397383 +4 C0 361 0 360 0 +2 1554 361 0 5.21238898038404 8.35398163397383 +0 + +0101000 ++3472 0 -3471 0 * +Ed + 1e-07 1 1 0 +1 621 0 2.07079632679424 5.21238898038404 +2 1555 362 0 2.07079632679424 5.21238898038404 +4 C0 361 0 362 0 +2 1556 361 0 2.07079632679424 5.21238898038404 +0 + +0101000 ++3471 0 -3472 0 * +Ed + 1e-07 1 1 0 +1 622 0 2.07079632679519 5.21238898038498 +2 1557 359 0 2.07079632679519 5.21238898038498 +4 G1 361 0 359 0 +2 1558 361 0 2.07079632679519 5.21238898038498 +0 + +0101000 ++3470 0 -3469 0 * +Ed + 1e-07 1 1 0 +1 623 0 5.21238898038498 8.35398163397477 +2 1559 358 0 5.21238898038498 8.35398163397477 +4 G1 361 0 358 0 +2 1560 361 0 5.21238898038498 8.35398163397477 +0 + +0101000 ++3469 0 -3470 0 * +Ed + 1e-07 1 1 0 +1 624 0 1.5707963267949 3.14159265358979 +2 1561 359 0 1.5707963267949 3.14159265358979 +2 1562 358 0 1.5707963267949 3.14159265358979 +4 G2 359 0 358 0 +0 + +0101000 ++3469 0 -3474 0 * +Ed + 1e-07 1 1 0 +1 625 0 1.5707963267949 3.14159265358979 +2 1563 359 0 1.5707963267949 3.14159265358979 +2 1564 358 0 1.5707963267949 3.14159265358979 +4 G2 359 0 358 0 +0 + +0101000 ++3470 0 -3473 0 * +Ed + 1e-07 1 1 0 +1 626 0 5.23598775598799 6.28318530717959 +2 1565 355 0 5.23598775598799 6.28318530717959 +2 1566 353 0 5.23598775598799 6.28318530717959 +4 CN 355 0 353 0 +0 + +0101000 ++3468 0 -3480 0 * +Ed + 1e-07 1 1 0 +1 627 0 5.23598775598799 6.28318530717959 +2 1567 355 0 5.23598775598799 6.28318530717959 +2 1568 353 0 5.23598775598799 6.28318530717959 +4 CN 355 0 353 0 +0 + +0101000 ++3467 0 -3478 0 * +Ed + 1e-07 1 1 0 +1 628 0 2.07079632679507 5.21238898038486 +2 1569 355 0 2.07079632679507 5.21238898038486 +2 1570 208 0 2.07079632679507 5.21238898038486 +4 C1 355 0 208 0 +0 + +0101000 ++3467 0 -3468 0 * +Ed + 1e-07 1 1 0 +1 629 0 5.21238898038486 8.35398163397466 +2 1571 353 0 5.21238898038486 8.35398163397466 +2 1572 207 0 5.21238898038486 8.35398163397466 +4 C1 353 0 207 0 +0 + +0101000 ++3468 0 -3467 0 * +Ed + 1e-07 1 1 0 +1 630 0 2.0943951023856 3.14159265358979 +2 1573 208 0 2.0943951023856 3.14159265358979 +2 1574 207 0 2.0943951023856 3.14159265358979 +4 CN 208 0 207 0 +0 + +0101000 ++3468 0 -3641 0 * +Ed + 1e-07 1 1 0 +1 631 0 2.0943951023856 3.14159265358979 +2 1575 208 0 2.0943951023856 3.14159265358979 +2 1576 207 0 2.0943951023856 3.14159265358979 +4 G2 208 0 207 0 +0 + +0101000 ++3467 0 -3640 0 * +Ed + 1e-07 1 1 0 +1 632 0 -0.35 0.05 +2 1577 343 0 -0.35 0.05 +2 1578 345 0 -0.35 0.05 +4 CN 343 0 345 0 +0 + +0101000 ++3488 0 -3466 0 * +Ed + 1e-07 1 1 0 +1 633 0 -0.35 0.05 +2 1579 343 0 -0.35 0.05 +2 1580 345 0 -0.35 0.05 +4 CN 343 0 345 0 +0 + +0101000 ++3487 0 -3465 0 * +Ed + 1e-07 1 1 0 +1 634 0 5.21238898038493 8.35398163397472 +2 1581 343 0 5.21238898038493 8.35398163397472 +2 1582 363 0 5.21238898038493 8.35398163397472 +4 G1 343 0 363 0 +0 + +0101000 ++3466 0 -3465 0 * +Ed + 1e-07 1 1 0 +1 635 0 2.07079632679513 5.21238898038493 +2 1583 345 0 2.07079632679513 5.21238898038493 +2 1584 364 0 2.07079632679513 5.21238898038493 +4 G1 345 0 364 0 +0 + +0101000 ++3465 0 -3466 0 * +Ed + 1e-07 1 1 0 +1 636 0 1.5707963267949 3.14159265358979 +2 1585 364 0 1.5707963267949 3.14159265358979 +2 1586 363 0 1.5707963267949 3.14159265358979 +4 G2 364 0 363 0 +0 + +0101000 ++3464 0 -3466 0 * +Ed + 1e-07 1 1 0 +1 637 0 1.5707963267949 3.14159265358979 +2 1587 364 0 1.5707963267949 3.14159265358979 +2 1588 363 0 1.5707963267949 3.14159265358979 +4 G2 364 0 363 0 +0 + +0101000 ++3463 0 -3465 0 * +Ed + 1e-07 1 1 0 +1 638 0 2.07079632679539 5.21238898038518 +2 1589 364 0 2.07079632679539 5.21238898038518 +4 G1 364 0 365 0 +2 1590 365 0 2.07079632679539 5.21238898038518 +0 + +0101000 ++3463 0 -3464 0 * +Ed + 1e-07 1 1 0 +1 639 0 5.21238898038518 8.35398163397497 +2 1591 363 0 5.21238898038518 8.35398163397497 +4 G1 363 0 365 0 +2 1592 365 0 5.21238898038518 8.35398163397497 +0 + +0101000 ++3464 0 -3463 0 * +Ed + 1e-07 1 1 0 +1 640 0 -0.35 0.05 +2 1593 350 0 -0.35 0.05 +2 1594 349 0 -0.35 0.05 +4 CN 350 0 349 0 +0 + +0101000 ++3481 0 -3462 0 * +Ed + 1e-07 1 1 0 +1 641 0 -0.35 0.05 +2 1595 350 0 -0.35 0.05 +2 1596 349 0 -0.35 0.05 +4 CN 350 0 349 0 +0 + +0101000 ++3482 0 -3461 0 * +Ed + 1e-07 1 1 0 +1 642 0 5.2123889803848 8.35398163397459 +2 1597 350 0 5.2123889803848 8.35398163397459 +2 1598 366 0 5.2123889803848 8.35398163397459 +4 G1 350 0 366 0 +0 + +0101000 ++3462 0 -3461 0 * +Ed + 1e-07 1 1 0 +1 643 0 2.07079632679501 5.2123889803848 +2 1599 349 0 2.07079632679501 5.2123889803848 +2 1600 367 0 2.07079632679501 5.2123889803848 +4 G1 349 0 367 0 +0 + +0101000 ++3461 0 -3462 0 * +Ed + 1e-07 1 1 0 +1 644 0 5.21238898038508 8.35398163397487 +2 1601 366 0 5.21238898038508 8.35398163397487 +4 G1 365 0 366 0 +2 1602 365 0 5.21238898038508 8.35398163397487 +0 + +0101000 ++3460 0 -3459 0 * +Ed + 1e-07 1 1 0 +1 645 0 2.07079632679529 5.21238898038508 +2 1603 367 0 2.07079632679529 5.21238898038508 +4 G1 365 0 367 0 +2 1604 365 0 2.07079632679529 5.21238898038508 +0 + +0101000 ++3459 0 -3460 0 * +Ed + 1e-07 1 1 0 +1 646 0 0 1.5707963267949 +2 1605 367 0 0 1.5707963267949 +2 1606 366 0 0 1.5707963267949 +4 G2 367 0 366 0 +0 + +0101000 ++3462 0 -3460 0 * +Ed + 1e-07 1 1 0 +1 647 0 0 1.5707963267949 +2 1607 367 0 0 1.5707963267949 +2 1608 366 0 0 1.5707963267949 +4 G2 367 0 366 0 +0 + +0101000 ++3461 0 -3459 0 * +Ed + 1e-07 1 1 0 +1 648 0 -2.25 1.05 +2 1609 360 0 -2.25 1.05 +2 1610 362 0 -2.25 1.05 +4 CN 360 0 362 0 +0 + +0101000 ++3472 0 -3458 0 * +Ed + 1e-07 1 1 0 +1 649 0 -2.25 1.05 +2 1611 360 0 -2.25 1.05 +2 1612 362 0 -2.25 1.05 +4 CN 360 0 362 0 +0 + +0101000 ++3471 0 -3457 0 * +Ed + 1e-07 1 1 0 +1 650 0 5.21238898038404 8.35398163397383 +2 1613 360 0 5.21238898038404 8.35398163397383 +2 1614 368 0 5.21238898038404 8.35398163397383 +4 C0 360 0 368 0 +0 + +0101000 ++3458 0 -3457 0 * +Ed + 1e-07 1 1 0 +1 651 0 2.07079632679424 5.21238898038404 +2 1615 362 0 2.07079632679424 5.21238898038404 +2 1616 369 0 2.07079632679424 5.21238898038404 +4 C0 362 0 369 0 +0 + +0101000 ++3457 0 -3458 0 * +Ed + 1e-07 1 1 0 +1 652 0 2.07079632679509 5.21238898038489 +2 1617 369 0 2.07079632679509 5.21238898038489 +4 C0 357 0 369 0 +2 1618 357 0 2.07079632679509 5.21238898038489 +0 + +0101000 ++3456 0 -3455 0 * +Ed + 1e-07 1 1 0 +1 653 0 5.21238898038489 8.35398163397468 +2 1619 368 0 5.21238898038489 8.35398163397468 +4 C0 357 0 368 0 +2 1620 357 0 5.21238898038489 8.35398163397468 +0 + +0101000 ++3455 0 -3456 0 * +Ed + 1e-07 1 1 0 +1 654 0 -0.848528137451408 0.848528137401766 +2 1621 369 0 -0.848528137451408 0.848528137401766 +2 1622 368 0 -0.848528137451408 0.848528137401766 +4 G2 369 0 368 0 +0 + +0101000 ++3456 0 -3457 0 * +Ed + 1e-07 1 1 0 +1 655 0 -0.848528137451408 0.848528137401766 +2 1623 369 0 -0.848528137451408 0.848528137401766 +2 1624 368 0 -0.848528137451408 0.848528137401766 +4 G2 369 0 368 0 +0 + +0101000 ++3455 0 -3458 0 * +Ed + 1.0116662590699e-07 1 1 0 +1 656 0 5.78318530718256 8.92477796077236 +2 1625 370 0 5.78318530718256 8.92477796077236 +4 C0 370 0 371 0 +2 1626 371 0 5.78318530718256 8.92477796077236 +2 1627 372 112 5.78318530718256 8.92477796077236 +0 + +0101000 ++3454 0 -3453 0 * +Ed + 1.0116662590699e-07 1 1 0 +1 657 0 2.64159265359277 5.78318530718256 +2 1628 373 0 2.64159265359277 5.78318530718256 +4 C0 373 0 371 0 +2 1629 371 0 2.64159265359277 5.78318530718256 +2 1630 372 112 2.64159265359277 5.78318530718256 +0 + +0101000 ++3453 0 -3454 0 * +Ed + 1.01166633012417e-07 1 1 0 +1 658 0 5.78318530718256 8.92477796077236 +2 1631 374 0 5.78318530718256 8.92477796077236 +4 C0 374 0 371 0 +2 1632 371 0 5.78318530718256 8.92477796077236 +2 1633 375 112 5.78318530718256 8.92477796077236 +0 + +0101000 ++3452 0 -3451 0 * +Ed + 1.01166618801562e-07 1 1 0 +1 659 0 2.64159265359277 5.78318530718256 +2 1634 376 0 2.64159265359277 5.78318530718256 +4 C0 376 0 371 0 +2 1635 371 0 2.64159265359277 5.78318530718256 +2 1636 375 112 2.64159265359277 5.78318530718256 +0 + +0101000 ++3451 0 -3452 0 * +Ed + 1.02476319593825e-07 1 1 0 +1 660 0 0 6.28318530717959 +2 1637 377 0 0 6.28318530717959 +2 1638 371 46 0 6.28318530717959 +0 + +0101000 ++3450 0 -3450 0 * +Ed + 1.01555498840844e-07 1 1 0 +1 661 0 5.78318530718024 8.92477796077003 +2 1639 285 0 5.78318530718024 8.92477796077003 +4 C0 285 0 371 0 +2 1640 371 0 5.78318530718024 8.92477796077003 +2 1641 377 112 5.78318530718024 8.92477796077003 +0 + +0101000 ++3449 0 -3448 0 * +Ed + 1.01555513051699e-07 1 1 0 +1 662 0 2.64159265359045 5.78318530718024 +2 1642 283 0 2.64159265359045 5.78318530718024 +4 C0 283 0 371 0 +2 1643 371 0 2.64159265359045 5.78318530718024 +2 1644 377 112 2.64159265359045 5.78318530718024 +0 + +0101000 ++3448 0 -3449 0 * +Ed + 1e-07 1 1 0 +1 663 0 -4.16049991609 2.83950008391 +2 1645 378 0 -4.16049991609 2.83950008391 +2 1646 379 0 -4.16049991609 2.83950008391 +4 CN 378 0 379 0 +0 + +0101000 ++3447 0 -3446 0 * +Ed + 1e-07 1 1 0 +1 664 0 3.14159265358979 6.28318530717959 +2 1647 378 0 3.14159265358979 6.28318530717959 +4 C0 378 0 371 0 +2 1648 371 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3447 0 -3445 0 * +Ed + 1e-07 1 1 0 +1 665 0 -4.16049991609 2.83950008391 +2 1649 378 0 -4.16049991609 2.83950008391 +2 1650 379 0 -4.16049991609 2.83950008391 +4 CN 378 0 379 0 +0 + +0101000 ++3445 0 -3444 0 * +Ed + 1e-07 1 1 0 +1 666 0 3.14159265358979 6.28318530717959 +2 1651 378 0 3.14159265358979 6.28318530717959 +4 C0 378 0 240 0 +2 1652 240 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3446 0 -3444 0 * +Ed + 1e-07 1 1 0 +1 667 0 0 3.14159265358979 +2 1653 379 0 0 3.14159265358979 +4 C0 379 0 371 0 +2 1654 371 0 0 3.14159265358979 +0 + +0101000 ++3445 0 -3447 0 * +Ed + 1e-07 1 1 0 +1 668 0 0 3.14159265358979 +2 1655 379 0 0 3.14159265358979 +4 C0 379 0 240 0 +2 1656 240 0 0 3.14159265358979 +0 + +0101000 ++3444 0 -3446 0 * +Ed + 1e-07 1 1 0 +1 669 0 0 3.14159265358979 +2 1657 380 0 0 3.14159265358979 +4 C0 240 0 380 0 +2 1658 240 0 0 3.14159265358979 +0 + +0101000 ++3443 0 -3442 0 * +Ed + 1e-07 1 1 0 +1 670 0 3.14159265358979 6.28318530717959 +2 1659 381 0 3.14159265358979 6.28318530717959 +4 C0 240 0 381 0 +2 1660 240 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3442 0 -3443 0 * +Ed + 1e-07 1 1 0 +1 671 0 -50 -43 +2 1661 269 0 -50 -43 +4 G1 269 0 382 0 +2 1662 382 0 -50 -43 +0 + +0101000 ++3441 0 -3577 113 * +Ed + 1e-07 1 1 0 +1 672 0 4.71238898038469 6.2831777796514 +2 1663 269 0 4.71238898038469 6.2831777796514 +4 C0 269 0 371 0 +2 1664 371 0 4.71238898038469 6.2831777796514 +0 + +0101000 ++3441 0 -3440 0 * +Ed + 1e-07 1 1 0 +1 673 0 -50 -43 +2 1665 269 0 -50 -43 +4 G1 269 0 383 0 +2 1666 383 0 -50 -43 +0 + +0101000 ++3440 0 -3559 113 * +Ed + 1e-07 1 1 0 +1 674 0 -50 -43 +2 1667 266 0 -50 -43 +4 G1 266 0 383 0 +2 1668 383 0 -50 -43 +0 + +0101000 ++3439 0 -3560 113 * +Ed + 1e-07 1 1 0 +1 675 0 6.28318075530153 7.36529251234008 +2 1669 266 0 6.28318075530153 7.36529251234008 +4 C0 266 0 371 0 +2 1670 371 0 6.28318075530153 7.36529251234008 +0 + +0101000 ++3439 0 -3438 0 * +Ed + 1e-07 1 1 0 +1 676 0 -50 -43 +2 1671 266 0 -50 -43 +4 G1 266 0 384 0 +2 1672 384 0 -50 -43 +0 + +0101000 ++3438 0 -3562 113 * +Ed + 1e-07 1 1 0 +1 677 0 -50 -43 +2 1673 264 0 -50 -43 +4 G1 264 0 384 0 +2 1674 384 0 -50 -43 +0 + +0101000 ++3437 0 -3561 113 * +Ed + 1e-07 1 1 0 +1 678 0 1.08210546427801 1.37058478051409 +2 1675 264 0 1.08210546427801 1.37058478051409 +4 C0 264 0 371 0 +2 1676 371 0 1.08210546427801 1.37058478051409 +0 + +0101000 ++3437 0 -3436 0 * +Ed + 7.80303658359224e-06 1 1 0 +1 679 0 -50 -43 +2 1677 264 0 -50 -43 +2 1678 253 0 -50 -43 +4 G1 264 0 253 0 +0 + +0101000 ++3436 0 -3567 113 * +Ed + 1e-07 1 1 0 +1 680 0 253.667619105 271.486316455 +2 1679 253 0 253.667619105 271.486316455 +4 C0 253 0 371 0 +2 1680 371 0 253.667619105 271.486316455 +0 + +0101000 ++3436 0 -3435 0 * +Ed + 1e-07 1 1 0 +1 681 0 -25 -18 +2 1681 253 0 -25 -18 +4 G1 253 0 385 0 +2 1682 385 0 -25 -18 +0 + +0101000 ++3435 0 -3573 113 * +Ed + 1e-07 1 1 0 +1 682 0 -3.5 3.5 +2 1683 244 0 -3.5 3.5 +4 G1 386 0 244 0 +2 1684 386 0 -3.5 3.5 +0 + +0101000 ++3434 0 -3575 113 * +Ed + 1e-07 1 1 0 +1 683 0 -3.58578643772203 3.58578643758061 +4 C0 386 0 371 0 +2 1685 371 0 -3.58578643772203 3.58578643758061 +2 1686 386 0 -3.58578643772203 3.58578643758061 +0 + +0101000 ++3434 0 -3433 0 * +Ed + 1e-07 1 1 0 +1 684 0 -3.5 3.5 +4 C0 386 0 387 0 +2 1687 386 0 -3.5 3.5 +2 1688 387 0 -3.5 3.5 +0 + +0101000 ++3433 0 -3572 113 * +Ed + 1e-07 1 1 0 +1 685 0 -25 -18 +2 1689 249 0 -25 -18 +4 G1 249 0 388 0 +2 1690 388 0 -25 -18 +0 + +0101000 ++3432 0 -3570 113 * +Ed + 1e-07 1 1 0 +1 686 0 365.975427238 395.770502936 +2 1691 249 0 365.975427238 395.770502936 +4 C0 249 0 371 0 +2 1692 371 0 365.975427238 395.770502936 +0 + +0101000 ++3432 0 -3431 0 * +Ed + 2.29990299937802e-05 1 1 0 +1 687 0 -25 -18 +2 1693 249 0 -25 -18 +4 G1 249 0 389 0 +2 1694 389 0 -25 -18 +0 + +0101000 ++3431 0 -3569 113 * +Ed + 1e-07 1 1 0 +1 688 0 -50 -43 +2 1695 271 0 -50 -43 +4 G1 271 0 389 0 +2 1696 389 0 -50 -43 +0 + +0101000 ++3430 0 -3568 113 * +Ed + 1e-07 1 1 0 +1 689 0 3.14160018112023 3.92699081698724 +2 1697 271 0 3.14160018112023 3.92699081698724 +4 C0 271 0 371 0 +2 1698 371 0 3.14160018112023 3.92699081698724 +0 + +0101000 ++3430 0 -3429 0 * +Ed + 1e-07 1 1 0 +1 690 0 -50 -43 +2 1699 271 0 -50 -43 +4 G1 271 0 390 0 +2 1700 390 0 -50 -43 +0 + +0101000 ++3429 0 -3558 113 * +Ed + 1e-07 1 1 0 +1 691 0 -12.077212795244 12.0772127953148 +4 C0 390 0 371 0 +2 1701 371 0 -12.077212795244 12.0772127953148 +2 1702 390 0 -12.077212795244 12.0772127953148 +0 + +0101000 ++3429 0 -3428 0 * +Ed + 1e-07 1 1 0 +1 692 0 -3.5 3.5 +4 C0 390 0 391 0 +2 1703 391 0 -3.5 3.5 +2 1704 390 0 -3.5 3.5 +0 + +0101000 ++3428 0 -3557 113 * +Ed + 1e-07 1 1 0 +1 693 0 -3.5 3.5 +4 C0 392 0 391 0 +2 1705 392 0 -3.5 3.5 +2 1706 391 0 -3.5 3.5 +0 + +0101000 ++3427 0 -3576 113 * +Ed + 1e-07 1 1 0 +1 694 0 -3.58578643758061 3.58578643765132 +4 C0 392 0 371 0 +2 1707 371 0 -3.58578643758061 3.58578643765132 +2 1708 392 0 -3.58578643758061 3.58578643765132 +0 + +0101000 ++3427 0 -3426 0 * +Ed + 1e-07 1 1 0 +1 695 0 -3.5 3.5 +2 1709 239 0 -3.5 3.5 +4 G1 392 0 239 0 +2 1710 392 0 -3.5 3.5 +0 + +0101000 ++3426 0 -3578 113 * +Ed + 1e-07 1 1 0 +1 696 0 3.14159265358979 6.28318530717959 +2 1711 393 0 3.14159265358979 6.28318530717959 +4 C0 393 0 371 0 +2 1712 371 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3425 0 -3424 0 * +Ed + 1e-07 1 1 0 +1 697 0 -2.12132034355964 2.12132034355964 +2 1713 393 0 -2.12132034355964 2.12132034355964 +2 1714 394 0 -2.12132034355964 2.12132034355964 +4 CN 393 0 394 0 +0 + +0101000 ++3423 0 -3424 0 * +Ed + 1e-07 1 1 0 +1 698 0 3.14159265358979 6.28318530717959 +2 1715 393 0 3.14159265358979 6.28318530717959 +2 1716 255 0 3.14159265358979 6.28318530717959 +4 C0 393 0 255 0 +0 + +0101000 ++3422 0 -3423 0 * +Ed + 1e-07 1 1 0 +1 699 0 -2.12132034355964 2.12132034355964 +2 1717 393 0 -2.12132034355964 2.12132034355964 +2 1718 394 0 -2.12132034355964 2.12132034355964 +4 CN 393 0 394 0 +0 + +0101000 ++3422 0 -3425 0 * +Ed + 1e-07 1 1 0 +1 700 0 4.71238898038469 7.85398163397448 +2 1719 394 0 4.71238898038469 7.85398163397448 +4 C0 394 0 371 0 +2 1720 371 0 4.71238898038469 7.85398163397448 +0 + +0101000 ++3424 0 -3425 0 * +Ed + 1e-07 1 1 0 +1 701 0 4.71238898038469 7.85398163397448 +2 1721 394 0 4.71238898038469 7.85398163397448 +2 1722 257 0 4.71238898038469 7.85398163397448 +4 C0 394 0 257 0 +0 + +0101000 ++3423 0 -3422 0 * +Ed + 1e-07 1 1 0 +1 702 0 3.14159265358979 6.28318530717959 +2 1723 395 0 3.14159265358979 6.28318530717959 +4 C0 395 0 371 0 +2 1724 371 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3421 0 -3420 0 * +Ed + 1e-07 1 1 0 +1 703 0 -2.12132034355964 2.12132034355964 +2 1725 395 0 -2.12132034355964 2.12132034355964 +2 1726 396 0 -2.12132034355964 2.12132034355964 +4 CN 395 0 396 0 +0 + +0101000 ++3419 0 -3420 0 * +Ed + 1e-07 1 1 0 +1 704 0 3.14159265358979 6.28318530717959 +2 1727 395 0 3.14159265358979 6.28318530717959 +2 1728 261 0 3.14159265358979 6.28318530717959 +4 C0 395 0 261 0 +0 + +0101000 ++3418 0 -3419 0 * +Ed + 1e-07 1 1 0 +1 705 0 -2.12132034355964 2.12132034355964 +2 1729 395 0 -2.12132034355964 2.12132034355964 +2 1730 396 0 -2.12132034355964 2.12132034355964 +4 CN 395 0 396 0 +0 + +0101000 ++3418 0 -3421 0 * +Ed + 1e-07 1 1 0 +1 706 0 4.71238898038469 7.85398163397448 +2 1731 396 0 4.71238898038469 7.85398163397448 +4 C0 396 0 371 0 +2 1732 371 0 4.71238898038469 7.85398163397448 +0 + +0101000 ++3420 0 -3421 0 * +Ed + 1e-07 1 1 0 +1 707 0 4.71238898038469 7.85398163397448 +2 1733 396 0 4.71238898038469 7.85398163397448 +2 1734 259 0 4.71238898038469 7.85398163397448 +4 C0 396 0 259 0 +0 + +0101000 ++3419 0 -3418 0 * +Ed + 1e-07 1 1 0 +1 708 0 -2.79242318268615 2.79242318267784 +2 1735 373 0 -2.79242318268615 2.79242318267784 +2 1736 370 0 -2.79242318268615 2.79242318267784 +4 CN 373 0 370 0 +0 + +0101000 ++3417 0 -3453 0 * +Ed + 1e-07 1 1 0 +1 709 0 2.64159265359167 5.78318530718146 +2 1737 373 0 2.64159265359167 5.78318530718146 +4 C0 373 0 397 0 +2 1738 397 0 2.64159265359167 5.78318530718146 +0 + +0101000 ++3417 0 -3416 0 * +Ed + 1e-07 1 1 0 +1 710 0 -2.79242318268615 2.79242318267784 +2 1739 373 0 -2.79242318268615 2.79242318267784 +2 1740 370 0 -2.79242318268615 2.79242318267784 +4 CN 373 0 370 0 +0 + +0101000 ++3416 0 -3454 0 * +Ed + 1e-07 1 1 0 +1 711 0 5.78318530718146 8.92477796077126 +2 1741 370 0 5.78318530718146 8.92477796077126 +4 C0 370 0 397 0 +2 1742 397 0 5.78318530718146 8.92477796077126 +0 + +0101000 ++3416 0 -3417 0 * +Ed + 1e-07 1 1 0 +1 712 0 -2.79242318268615 2.79242318267784 +2 1743 376 0 -2.79242318268615 2.79242318267784 +2 1744 374 0 -2.79242318268615 2.79242318267784 +4 G2 376 0 374 0 +0 + +0101000 ++3415 0 -3451 0 * +Ed + 1e-07 1 1 0 +1 713 0 2.64159265359167 5.78318530718146 +2 1745 376 0 2.64159265359167 5.78318530718146 +4 C0 376 0 398 0 +2 1746 398 0 2.64159265359167 5.78318530718146 +0 + +0101000 ++3415 0 -3414 0 * +Ed + 1e-07 1 1 0 +1 714 0 -2.79242318268615 2.79242318267784 +2 1747 376 0 -2.79242318268615 2.79242318267784 +2 1748 374 0 -2.79242318268615 2.79242318267784 +4 CN 376 0 374 0 +0 + +0101000 ++3414 0 -3452 0 * +Ed + 1e-07 1 1 0 +1 715 0 5.78318530718146 8.92477796077126 +2 1749 374 0 5.78318530718146 8.92477796077126 +4 C0 374 0 398 0 +2 1750 398 0 5.78318530718146 8.92477796077126 +0 + +0101000 ++3414 0 -3415 0 * +Ed + 1e-07 1 1 0 +1 716 0 3.14159265358979 6.28318530717959 +2 1751 275 0 3.14159265358979 6.28318530717959 +4 C0 397 0 275 0 +2 1752 397 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3413 0 -3412 0 * +Ed + 1e-07 1 1 0 +1 717 0 0 3.14159265358979 +2 1753 277 0 0 3.14159265358979 +4 C0 397 0 277 0 +2 1754 397 0 0 3.14159265358979 +0 + +0101000 ++3412 0 -3413 0 * +Ed + 1e-07 1 1 0 +1 718 0 3.14159265358979 6.28318530717959 +2 1755 279 0 3.14159265358979 6.28318530717959 +4 C0 398 0 279 0 +2 1756 398 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3411 0 -3410 0 * +Ed + 1e-07 1 1 0 +1 719 0 0 3.14159265358979 +2 1757 281 0 0 3.14159265358979 +4 C0 398 0 281 0 +2 1758 398 0 0 3.14159265358979 +0 + +0101000 ++3410 0 -3411 0 * +Ed + 1e-07 1 1 0 +1 720 0 -4.16049991609 2.83950008391 +2 1759 381 0 -4.16049991609 2.83950008391 +2 1760 380 0 -4.16049991609 2.83950008391 +4 CN 381 0 380 0 +0 + +0101000 ++3409 0 -3442 0 * +Ed + 1e-07 1 1 0 +1 721 0 3.14159265358979 6.28318530717959 +2 1761 381 0 3.14159265358979 6.28318530717959 +4 C0 381 0 371 0 +2 1762 371 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3409 0 -3408 0 * +Ed + 1e-07 1 1 0 +1 722 0 -4.16049991609 2.83950008391 +2 1763 381 0 -4.16049991609 2.83950008391 +2 1764 380 0 -4.16049991609 2.83950008391 +4 CN 381 0 380 0 +0 + +0101000 ++3408 0 -3443 0 * +Ed + 1e-07 1 1 0 +1 723 0 0 3.14159265358979 +2 1765 380 0 0 3.14159265358979 +4 C0 380 0 371 0 +2 1766 371 0 0 3.14159265358979 +0 + +0101000 ++3408 0 -3409 0 * +Ed + 1e-07 1 1 0 +1 724 0 -22 -18 +2 1767 259 0 -22 -18 +2 1768 261 0 -22 -18 +4 CN 259 0 261 0 +0 + +0101000 ++3419 0 -3563 113 * +Ed + 1e-07 1 1 0 +1 725 0 -22 -18 +2 1769 259 0 -22 -18 +2 1770 261 0 -22 -18 +4 CN 259 0 261 0 +0 + +0101000 ++3418 0 -3564 113 * +Ed + 1e-07 1 1 0 +1 726 0 -44.5 -43 +2 1771 275 0 -44.5 -43 +2 1772 277 0 -44.5 -43 +4 CN 275 0 277 0 +0 + +0101000 ++3413 0 -3555 113 * +Ed + 1e-07 1 1 0 +1 727 0 -44.5 -43 +2 1773 275 0 -44.5 -43 +2 1774 277 0 -44.5 -43 +4 CN 275 0 277 0 +0 + +0101000 ++3412 0 -3556 113 * +Ed + 1e-07 1 1 0 +1 728 0 -44.5 -43 +2 1775 279 0 -44.5 -43 +2 1776 281 0 -44.5 -43 +4 CN 279 0 281 0 +0 + +0101000 ++3411 0 -3553 113 * +Ed + 1e-07 1 1 0 +1 729 0 -44.5 -43 +2 1777 279 0 -44.5 -43 +2 1778 281 0 -44.5 -43 +4 CN 279 0 281 0 +0 + +0101000 ++3410 0 -3554 113 * +Ed + 1e-07 1 1 0 +1 730 0 -3.04627983564482 4.0617064475521 +2 1779 283 0 -3.04627983564482 4.0617064475521 +2 1780 285 0 -3.04627983564482 4.0617064475521 +4 CN 283 0 285 0 +0 + +0101000 ++3551 113 -3449 0 * +Ed + 1e-07 1 1 0 +1 731 0 -3.04627983564482 4.0617064475521 +2 1781 283 0 -3.04627983564482 4.0617064475521 +2 1782 285 0 -3.04627983564482 4.0617064475521 +4 G2 283 0 285 0 +0 + +0101000 ++3552 113 -3448 0 * +Ed + 1e-07 1 1 0 +1 732 0 -17.5 -13.5 +2 1783 257 0 -17.5 -13.5 +2 1784 255 0 -17.5 -13.5 +4 CN 257 0 255 0 +0 + +0101000 ++3423 0 -3566 113 * +Ed + 1e-07 1 1 0 +1 733 0 -17.5 -13.5 +2 1785 257 0 -17.5 -13.5 +2 1786 255 0 -17.5 -13.5 +4 CN 257 0 255 0 +0 + +0101000 ++3422 0 -3565 113 * +Ed + 1e-07 1 1 0 +1 734 0 -26 -19 +2 1787 239 0 -26 -19 +4 G1 239 0 382 0 +2 1788 382 0 -26 -19 +0 + +0101000 ++3407 0 -3579 113 * +Ed + 1e-07 1 1 0 +1 735 0 1.5707963267949 2.35619449019234 +2 1789 239 0 1.5707963267949 2.35619449019234 +4 C0 239 0 371 0 +2 1790 371 0 1.5707963267949 2.35619449019234 +0 + +0101000 ++3407 0 -3426 0 * +Ed + 1e-07 1 1 0 +1 736 0 -18 18 +4 C0 391 0 371 0 +2 1791 371 0 -18 18 +2 1792 391 0 -18 18 +0 + +0101000 ++3428 0 -3427 0 * +Ed + 1e-07 1 1 0 +1 737 0 -1.0256020699 1.0256020699 +4 C0 389 0 371 0 +2 1793 371 0 -1.0256020699 1.0256020699 +2 1794 389 0 -1.0256020699 1.0256020699 +0 + +0101000 ++3430 0 -3431 0 * +Ed + 1e-07 1 1 0 +1 738 0 -3.5 3.5 +4 C0 388 0 387 0 +2 1795 387 0 -3.5 3.5 +2 1796 388 0 -3.5 3.5 +0 + +0101000 ++3406 0 -3571 113 * +Ed + 1e-07 1 1 0 +1 739 0 -21.07275669483 21.07275669488 +4 C0 388 0 371 0 +2 1797 371 0 -21.07275669483 21.07275669488 +2 1798 388 0 -21.07275669483 21.07275669488 +0 + +0101000 ++3432 0 -3406 0 * +Ed + 1e-07 1 1 0 +1 740 0 -15.394965591 15.3949655911 +4 C0 387 0 371 0 +2 1799 371 0 -15.394965591 15.3949655911 +2 1800 387 0 -15.394965591 15.3949655911 +0 + +0101000 ++3406 0 -3433 0 * +Ed + 1e-07 1 1 0 +1 741 0 3.92699081699431 4.71238898038469 +2 1801 244 0 3.92699081699431 4.71238898038469 +4 C0 244 0 371 0 +2 1802 371 0 3.92699081699431 4.71238898038469 +0 + +0101000 ++3434 0 -3405 0 * +Ed + 1e-07 1 1 0 +1 742 0 -26 -19 +2 1803 244 0 -26 -19 +4 G1 244 0 385 0 +2 1804 385 0 -26 -19 +0 + +0101000 ++3405 0 -3574 113 * +Ed + 1e-07 1 1 0 +1 743 0 -10.07893218813 10.07893218817 +4 C0 385 0 371 0 +2 1805 371 0 -10.07893218813 10.07893218817 +2 1806 385 0 -10.07893218813 10.07893218817 +0 + +0101000 ++3435 0 -3405 0 * +Ed + 1e-07 1 1 0 +1 744 0 -14.5100701232189 14.5100701232603 +4 C0 384 0 371 0 +2 1807 371 0 -14.5100701232189 14.5100701232603 +2 1808 384 0 -14.5100701232189 14.5100701232603 +0 + +0101000 ++3438 0 -3437 0 * +Ed + 1e-07 1 1 0 +1 745 0 -5.00074082596 5.00074082596 +4 C0 383 0 371 0 +2 1809 371 0 -5.00074082596 5.00074082596 +2 1810 383 0 -5.00074082596 5.00074082596 +0 + +0101000 ++3439 0 -3440 0 * +Ed + 1e-07 1 1 0 +1 746 0 -32.8490498522 32.8490498523 +4 C0 382 0 371 0 +2 1811 371 0 -32.8490498522 32.8490498523 +2 1812 382 0 -32.8490498522 32.8490498523 +0 + +0101000 ++3407 0 -3441 0 * +Ed + 1.01828929896419e-07 1 1 0 +1 747 0 0 6.28318530717959 +2 1813 372 0 0 6.28318530717959 +2 1814 371 46 0 6.28318530717959 +0 + +0101000 ++3404 0 -3404 0 * +Ed + 1.01828929896419e-07 1 1 0 +1 748 0 0 6.28318530717959 +2 1815 375 0 0 6.28318530717959 +2 1816 371 46 0 6.28318530717959 +0 + +0101000 ++3403 0 -3403 0 * +Ed + 1.00958152668318e-07 1 1 0 +1 749 0 0 3.14159265358979 +2 1817 399 0 0 3.14159265358979 +4 G1 399 0 400 0 +2 1818 400 0 0 3.14159265358979 +2 1819 401 114 0 3.14159265358979 +0 + +0101000 ++3402 0 -3401 0 * +Ed + 1.00958159773745e-07 1 1 0 +1 750 0 3.14159265358979 6.28318530717959 +2 1820 402 0 3.14159265358979 6.28318530717959 +4 G1 402 0 400 0 +2 1821 400 0 3.14159265358979 6.28318530717959 +2 1822 401 114 3.14159265358979 6.28318530717959 +0 + +0101000 ++3401 0 -3402 0 * +Ed + 1.00958159773745e-07 1 1 0 +1 751 0 3.14159265358979 6.28318530717959 +2 1823 403 0 3.14159265358979 6.28318530717959 +4 G1 400 0 403 0 +2 1824 400 0 3.14159265358979 6.28318530717959 +2 1825 404 114 3.14159265358979 6.28318530717959 +0 + +0101000 ++3400 0 -3399 0 * +Ed + 1.00958152668318e-07 1 1 0 +1 752 0 0 3.14159265358979 +2 1826 405 0 0 3.14159265358979 +4 G1 400 0 405 0 +2 1827 400 0 0 3.14159265358979 +2 1828 404 114 0 3.14159265358979 +0 + +0101000 ++3399 0 -3400 0 * +Ed + 1.02770885743075e-07 1 1 0 +1 753 0 0 6.28318530717959 +2 1829 406 0 0 6.28318530717959 +2 1830 407 44 0 6.28318530717959 +0 + +0101000 ++3398 0 -3398 0 * +Ed + 1.01218481315846e-07 1 1 0 +1 754 0 5.21238898038505 8.35398163397637 +2 1831 408 0 5.21238898038505 8.35398163397637 +4 G1 407 0 408 0 +2 1832 407 0 5.21238898038505 8.35398163397637 +2 1833 406 114 5.21238898038505 8.35398163397637 +0 + +0101000 ++3397 0 -3396 0 * +Ed + 1.01218474210418e-07 1 1 0 +1 755 0 2.07079632679678 5.21238898038505 +2 1834 409 0 2.07079632679678 5.21238898038505 +4 G1 407 0 409 0 +2 1835 407 0 2.07079632679678 5.21238898038505 +2 1836 406 114 2.07079632679678 5.21238898038505 +0 + +0101000 ++3396 0 -3397 0 * +Ed + 1e-07 1 1 0 +1 756 0 3.64159265359001 6.7831853071798 +2 1837 282 0 3.64159265359001 6.7831853071798 +4 C0 410 0 282 0 +2 1838 410 0 3.64159265359001 6.7831853071798 +0 + +0101000 ++3395 0 -3394 0 * +Ed + 1e-07 1 1 0 +1 757 0 0.500000000000212 3.64159265359001 +2 1839 284 0 0.500000000000212 3.64159265359001 +4 C0 410 0 284 0 +2 1840 410 0 0.500000000000212 3.64159265359001 +0 + +0101000 ++3394 0 -3395 0 * +Ed + 1e-07 1 1 0 +1 758 0 5.21238898038492 8.35398163397253 +2 1841 411 0 5.21238898038492 8.35398163397253 +4 C0 410 0 411 0 +2 1842 410 0 5.21238898038492 8.35398163397253 +0 + +0101000 ++3393 0 -3392 0 * +Ed + 1e-07 1 1 0 +1 759 0 2.07079632679295 5.21238898038492 +2 1843 412 0 2.07079632679295 5.21238898038492 +4 C0 410 0 412 0 +2 1844 410 0 2.07079632679295 5.21238898038492 +0 + +0101000 ++3392 0 -3393 0 * +Ed + 9.66590793534902e-05 1 1 0 +1 760 0 24.7561936605 49.5123873211 +2 1845 413 0 24.7561936605 49.5123873211 +4 C0 414 0 413 0 +2 1846 414 0 24.7561936605 49.5123873211 +0 + +0101000 ++3391 0 -3390 0 * +Ed + 1e-07 1 1 0 +1 761 0 24.6774806607 24.7561936604995 +2 1847 415 0 24.6774806607 24.7561936604995 +4 C0 414 0 415 0 +2 1848 414 0 24.6774806607 24.7561936604995 +0 + +0101000 ++3389 0 -3391 0 * +Ed + 1e-07 1 1 0 +1 762 0 0 24.6774806607 +2 1849 415 0 0 24.6774806607 +4 C0 414 0 415 0 +2 1850 414 0 0 24.6774806607 +0 + +0101000 ++3388 0 -3389 0 * +Ed + 1e-07 1 1 0 +1 763 0 0.000248410300005524 109 +4 C0 414 0 416 0 +2 1851 414 0 0.000248410300005524 109 +2 1852 416 0 0.000248410300005524 109 +0 + +0101000 ++3387 0 -3388 0 * +Ed + 0.000102894900285201 1 1 0 +1 764 0 0 52.7067348902 +2 1853 417 0 0 52.7067348902 +4 C0 414 0 417 0 +2 1854 414 0 0 52.7067348902 +0 + +0101000 ++3386 0 -3387 0 * +Ed + 1e-07 1 1 0 +1 765 0 -5.00074082596 5.00074082596 +4 C0 414 0 418 0 +2 1855 414 0 -5.00074082596 5.00074082596 +0 + +0101000 ++3385 0 -3386 0 * +Ed + 9.45558587697886e-05 1 1 0 +1 766 0 0 28.8341676536 +2 1856 419 0 0 28.8341676536 +4 C0 414 0 419 0 +2 1857 414 0 0 28.8341676536 +0 + +0101000 ++3384 0 -3385 0 * +Ed + 1e-07 1 1 0 +1 767 0 0 29.0201402464 +4 C0 414 0 420 0 +2 1858 414 0 0 29.0201402464 +0 + +0101000 ++3383 0 -3384 0 * +Ed + 0.000236848210102444 1 1 0 +1 768 0 17.9076813233117 43.7108017886 +2 1859 421 0 17.9076813233117 43.7108017886 +4 C0 414 0 421 0 +2 1860 414 0 17.9076813233117 43.7108017886 +0 + +0101000 ++3382 0 -3383 0 * +Ed + 1e-07 1 1 0 +1 769 0 0 17.9076813233 +2 1861 422 0 0 17.9076813233 +4 C0 414 0 422 0 +2 1862 414 0 0 17.9076813233 +0 + +0101000 ++3381 0 -3382 0 * +Ed + 1e-07 1 1 0 +1 770 0 0 34.8 +4 C0 414 0 423 0 +2 1863 414 0 0 34.8 +0 + +0101000 ++3380 0 -3381 0 * +Ed + 1e-07 1 1 0 +1 771 0 0 91.0389057194 +2 1864 424 0 0 91.0389057194 +4 C0 414 0 424 0 +2 1865 414 0 0 91.0389057194 +0 + +0101000 ++3379 0 -3380 0 * +Ed + 1e-07 1 1 0 +1 772 0 -1 1 +4 C0 414 0 425 0 +2 1866 414 0 -1 1 +0 + +0101000 ++3390 0 -3379 0 * +Ed + 1e-07 1 1 0 +1 773 0 -1 1 +4 C0 414 0 426 0 +2 1867 414 0 -1 1 +0 + +0101000 ++3378 0 -3377 0 * +Ed + 1e-07 1 1 0 +1 774 0 1.5707963267949 3.14159265358979 +2 1868 427 0 1.5707963267949 3.14159265358979 +4 C0 414 0 427 0 +2 1869 414 0 1.5707963267949 3.14159265358979 +0 + +0101000 ++3376 0 -3378 0 * +Ed + 1e-07 1 1 0 +1 775 0 -17.4 17.4 +4 C0 414 0 428 0 +2 1870 414 0 -17.4 17.4 +0 + +0101000 ++3376 0 -3375 0 * +Ed + 1e-07 1 1 0 +1 776 0 1.08210413623606 1.5707963267949 +2 1871 429 0 1.08210413623606 1.5707963267949 +4 C0 414 0 429 0 +2 1872 414 0 1.08210413623606 1.5707963267949 +0 + +0101000 ++3374 0 -3375 0 * +Ed + 1e-07 1 1 0 +1 777 0 -14.5100701232189 14.510070123172 +4 C0 414 0 430 0 +2 1873 414 0 -14.5100701232189 14.510070123172 +0 + +0101000 ++3374 0 -3373 0 * +Ed + 1e-07 1 1 0 +1 778 0 6.28318257972667 7.36529079162158 +2 1874 431 0 6.28318257972667 7.36529079162158 +4 C0 414 0 431 0 +2 1875 414 0 6.28318257972667 7.36529079162158 +0 + +0101000 ++3372 0 -3373 0 * +Ed + 1e-07 1 1 0 +1 779 0 -5.00074355342 5.00074355341 +4 C0 414 0 432 0 +2 1876 414 0 -5.00074355342 5.00074355341 +0 + +0101000 ++3372 0 -3371 0 * +Ed + 1e-07 1 1 0 +1 780 0 4.71238898038469 6.28318530717959 +2 1877 433 0 4.71238898038469 6.28318530717959 +4 C0 414 0 433 0 +2 1878 414 0 4.71238898038469 6.28318530717959 +0 + +0101000 ++3370 0 -3371 0 * +Ed + 1e-07 1 1 0 +1 781 0 -54.5 54.5 +4 C0 414 0 434 0 +2 1879 414 0 -54.5 54.5 +2 1880 434 0 -54.5 54.5 +0 + +0101000 ++3369 0 -3370 0 * +Ed + 1e-07 1 1 0 +1 782 0 3.14159265358979 4.71238898038469 +2 1881 435 0 3.14159265358979 4.71238898038469 +4 C0 414 0 435 0 +2 1882 414 0 3.14159265358979 4.71238898038469 +0 + +0101000 ++3377 0 -3369 0 * +Ed + 1e-07 1 1 0 +1 783 0 5.21238898038437 8.35398163397416 +2 1883 436 0 5.21238898038437 8.35398163397416 +4 C0 407 0 436 0 +2 1884 407 0 5.21238898038437 8.35398163397416 +0 + +0101000 ++3368 0 -3367 0 * +Ed + 1e-07 1 1 0 +1 784 0 2.07079632679458 5.21238898038437 +2 1885 437 0 2.07079632679458 5.21238898038437 +4 C0 407 0 437 0 +2 1886 407 0 2.07079632679458 5.21238898038437 +0 + +0101000 ++3367 0 -3368 0 * +Ed + 1e-07 1 1 0 +1 785 0 0.25 12.15 +2 1887 412 0 0.25 12.15 +2 1888 411 0 0.25 12.15 +4 CN 412 0 411 0 +0 + +0101000 ++3392 0 -3366 0 * +Ed + 1e-07 1 1 0 +1 786 0 0.25 12.15 +2 1889 412 0 0.25 12.15 +2 1890 411 0 0.25 12.15 +4 CN 412 0 411 0 +0 + +0101000 ++3393 0 -3365 0 * +Ed + 1e-07 1 1 0 +1 787 0 2.07079632679295 5.21238898038492 +2 1891 412 0 2.07079632679295 5.21238898038492 +2 1892 409 0 2.07079632679295 5.21238898038492 +4 G1 412 0 409 0 +0 + +0101000 ++3366 0 -3365 0 * +Ed + 1e-07 1 1 0 +1 788 0 5.21238898038492 8.35398163397253 +2 1893 411 0 5.21238898038492 8.35398163397253 +2 1894 408 0 5.21238898038492 8.35398163397253 +4 G1 411 0 408 0 +0 + +0101000 ++3365 0 -3366 0 * +Ed + 1e-07 1 1 0 +1 789 0 1.5707963267949 3.14159265358979 +2 1895 409 0 1.5707963267949 3.14159265358979 +2 1896 408 0 1.5707963267949 3.14159265358979 +4 G2 409 0 408 0 +0 + +0101000 ++3396 0 -3366 0 * +Ed + 1e-07 1 1 0 +1 790 0 1.5707963267949 3.14159265358979 +2 1897 409 0 1.5707963267949 3.14159265358979 +2 1898 408 0 1.5707963267949 3.14159265358979 +4 G2 409 0 408 0 +0 + +0101000 ++3397 0 -3365 0 * +Ed + 1e-07 1 1 0 +1 791 0 3.14159265358979 4.71238898038469 +2 1899 399 0 3.14159265358979 4.71238898038469 +2 1900 402 0 3.14159265358979 4.71238898038469 +4 CN 399 0 402 0 +0 + +0101000 ++3402 0 -3364 0 * +Ed + 1e-07 1 1 0 +1 792 0 4.71238898038469 6.28318530717959 +2 1901 399 0 4.71238898038469 6.28318530717959 +2 1902 402 0 4.71238898038469 6.28318530717959 +4 CN 399 0 402 0 +0 + +0101000 ++3401 0 -3363 0 * +Ed + 1e-07 1 1 0 +1 793 0 0 3.14159265358979 +2 1903 399 0 0 3.14159265358979 +2 1904 280 0 0 3.14159265358979 +4 G1 399 0 280 0 +0 + +0101000 ++3364 0 -3363 0 * +Ed + 1e-07 1 1 0 +1 794 0 3.14159265358979 6.28318530717959 +2 1905 402 0 3.14159265358979 6.28318530717959 +2 1906 278 0 3.14159265358979 6.28318530717959 +4 G1 402 0 278 0 +0 + +0101000 ++3363 0 -3364 0 * +Ed + 1e-07 1 1 0 +1 795 0 3.14159265358979 6.28318530717959 +2 1907 438 0 3.14159265358979 6.28318530717959 +4 C0 400 0 438 0 +2 1908 400 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3362 0 -3361 0 * +Ed + 1e-07 1 1 0 +1 796 0 -21 21 +4 C0 400 0 439 0 +2 1909 400 0 -21 21 +2 1910 439 0 -21 21 +0 + +0101000 ++3360 0 -3362 0 * +Ed + 1e-07 1 1 0 +1 797 0 -21 21 +4 C0 400 0 440 0 +2 1911 400 0 -21 21 +0 + +0101000 ++3361 0 -3359 0 * +Ed + 1e-07 1 1 0 +1 798 0 0 3.14159265358979 +2 1912 441 0 0 3.14159265358979 +4 C0 400 0 441 0 +2 1913 400 0 0 3.14159265358979 +0 + +0101000 ++3359 0 -3360 0 * +Ed + 1.01463135390622e-07 1 1 0 +1 799 0 0 6.28318530717959 +2 1914 404 0 0 6.28318530717959 +2 1915 400 44 0 6.28318530717959 +0 + +0101000 ++3358 0 -3358 0 * +Ed + 1.01463135390622e-07 1 1 0 +1 800 0 0 6.28318530717959 +2 1916 401 0 0 6.28318530717959 +2 1917 400 44 0 6.28318530717959 +0 + +0101000 ++3357 0 -3357 0 * +Ed + 1e-07 1 1 0 +1 801 0 3.14159265358979 4.71238898038469 +2 1918 405 0 3.14159265358979 4.71238898038469 +2 1919 403 0 3.14159265358979 4.71238898038469 +4 CN 405 0 403 0 +0 + +0101000 ++3399 0 -3356 0 * +Ed + 1e-07 1 1 0 +1 802 0 4.71238898038469 6.28318530717959 +2 1920 405 0 4.71238898038469 6.28318530717959 +2 1921 403 0 4.71238898038469 6.28318530717959 +4 CN 405 0 403 0 +0 + +0101000 ++3400 0 -3355 0 * +Ed + 1e-07 1 1 0 +1 803 0 0 3.14159265358979 +2 1922 405 0 0 3.14159265358979 +2 1923 276 0 0 3.14159265358979 +4 G1 405 0 276 0 +0 + +0101000 ++3356 0 -3355 0 * +Ed + 1e-07 1 1 0 +1 804 0 3.14159265358979 6.28318530717959 +2 1924 403 0 3.14159265358979 6.28318530717959 +2 1925 274 0 3.14159265358979 6.28318530717959 +4 G1 403 0 274 0 +0 + +0101000 ++3355 0 -3356 0 * +Ed + 1e-07 1 1 0 +1 805 0 4.71238898038469 6.28318530717959 +2 1926 442 0 4.71238898038469 6.28318530717959 +2 1927 443 0 4.71238898038469 6.28318530717959 +4 CN 442 0 443 0 +0 + +0101000 ++3354 0 -3353 0 * +Ed + 1e-07 1 1 0 +1 806 0 2.07079632679424 5.21238898038404 +2 1928 442 0 2.07079632679424 5.21238898038404 +2 1929 444 0 2.07079632679424 5.21238898038404 +4 G1 442 0 444 0 +0 + +0101000 ++3352 0 -3353 0 * +Ed + 1e-07 1 1 0 +1 807 0 4.71238898038469 6.28318530717959 +2 1930 442 0 4.71238898038469 6.28318530717959 +2 1931 443 0 4.71238898038469 6.28318530717959 +4 CN 442 0 443 0 +0 + +0101000 ++3351 0 -3352 0 * +Ed + 1e-07 1 1 0 +1 808 0 2.07079632679543 5.21238898038522 +2 1932 442 0 2.07079632679543 5.21238898038522 +2 1933 445 0 2.07079632679543 5.21238898038522 +4 CN 442 0 445 0 +0 + +0101000 ++3351 0 -3354 0 * +Ed + 1e-07 1 1 0 +1 809 0 5.21238898038404 8.35398163397383 +2 1934 443 0 5.21238898038404 8.35398163397383 +2 1935 446 0 5.21238898038404 8.35398163397383 +4 G1 443 0 446 0 +0 + +0101000 ++3353 0 -3352 0 * +Ed + 1e-07 1 1 0 +1 810 0 5.21238898038522 8.35398163397501 +2 1936 443 0 5.21238898038522 8.35398163397501 +2 1937 447 0 5.21238898038522 8.35398163397501 +4 CN 443 0 447 0 +0 + +0101000 ++3354 0 -3351 0 * +Ed + 1e-07 1 1 0 +1 811 0 0.150000000000002 0.350000000000001 +2 1938 437 0 0.150000000000002 0.350000000000001 +2 1939 436 0 0.150000000000002 0.350000000000001 +4 CN 437 0 436 0 +0 + +0101000 ++3350 0 -3368 0 * +Ed + 1e-07 1 1 0 +1 812 0 0.150000000000002 0.350000000000001 +2 1940 437 0 0.150000000000002 0.350000000000001 +2 1941 436 0 0.150000000000002 0.350000000000001 +4 CN 437 0 436 0 +0 + +0101000 ++3349 0 -3367 0 * +Ed + 1e-07 1 1 0 +1 813 0 2.07079632679458 5.21238898038437 +2 1942 437 0 2.07079632679458 5.21238898038437 +2 1943 445 0 2.07079632679458 5.21238898038437 +4 G1 437 0 445 0 +0 + +0101000 ++3349 0 -3350 0 * +Ed + 1e-07 1 1 0 +1 814 0 5.21238898038437 8.35398163397416 +2 1944 436 0 5.21238898038437 8.35398163397416 +2 1945 447 0 5.21238898038437 8.35398163397416 +4 G1 436 0 447 0 +0 + +0101000 ++3350 0 -3349 0 * +Ed + 1e-07 1 1 0 +1 815 0 3.14159265358979 4.71238898038469 +2 1946 447 0 3.14159265358979 4.71238898038469 +2 1947 445 0 3.14159265358979 4.71238898038469 +4 CN 447 0 445 0 +0 + +0101000 ++3349 0 -3351 0 * +Ed + 1e-07 1 1 0 +1 816 0 3.14159265358979 4.71238898038469 +2 1948 447 0 3.14159265358979 4.71238898038469 +2 1949 445 0 3.14159265358979 4.71238898038469 +4 CN 447 0 445 0 +0 + +0101000 ++3350 0 -3354 0 * +Ed + 1e-07 1 1 0 +1 817 0 1.5707963267949 3.14159265358979 +2 1950 448 0 1.5707963267949 3.14159265358979 +2 1951 449 0 1.5707963267949 3.14159265358979 +4 G1 448 0 449 0 +0 + +0101000 ++3348 0 -3347 0 * +Ed + 1e-07 1 1 0 +1 818 0 -21 21 +2 1952 448 0 -21 21 +4 G1 448 0 450 0 +0 + +0101000 ++3346 0 -3348 0 * +Ed + 1e-07 1 1 0 +1 819 0 1.5707963267949 3.14159265358979 +2 1953 448 0 1.5707963267949 3.14159265358979 +2 1954 451 0 1.5707963267949 3.14159265358979 +4 G1 448 0 451 0 +0 + +0101000 ++3346 0 -3345 0 * +Ed + 1e-07 1 1 0 +1 820 0 -21 21 +2 1955 448 0 -21 21 +2 1956 452 0 -21 21 +4 CN 448 0 452 0 +0 + +0101000 ++3345 0 -3347 0 * +Ed + 1e-07 1 1 0 +1 821 0 3.14159265358979 6.28318530717959 +2 1957 451 0 3.14159265358979 6.28318530717959 +2 1958 453 0 3.14159265358979 6.28318530717959 +4 G1 451 0 453 0 +0 + +0101000 ++3344 0 -3346 0 * +Ed + 1e-07 1 1 0 +1 822 0 1.5707963267949 3.14159265358979 +2 1959 451 0 1.5707963267949 3.14159265358979 +2 1960 454 0 1.5707963267949 3.14159265358979 +4 G1 451 0 454 0 +0 + +0101000 ++3343 0 -3344 0 * +Ed + 1e-07 1 1 0 +1 823 0 3.14159265358979 6.28318530717959 +2 1961 451 0 3.14159265358979 6.28318530717959 +2 1962 455 0 3.14159265358979 6.28318530717959 +4 CN 451 0 455 0 +0 + +0101000 ++3343 0 -3345 0 * +Ed + 1e-07 1 1 0 +1 824 0 -21 21 +2 1963 454 0 -21 21 +4 G1 454 0 456 0 +2 1964 456 0 -21 21 +0 + +0101000 ++3342 0 -3344 0 * +Ed + 1e-07 1 1 0 +1 825 0 4.71238898038469 6.28318530717959 +2 1965 454 0 4.71238898038469 6.28318530717959 +2 1966 449 0 4.71238898038469 6.28318530717959 +4 G1 454 0 449 0 +0 + +0101000 ++3342 0 -3341 0 * +Ed + 1e-07 1 1 0 +1 826 0 -21 21 +2 1967 454 0 -21 21 +2 1968 457 0 -21 21 +4 CN 454 0 457 0 +0 + +0101000 ++3341 0 -3343 0 * +Ed + 1e-07 1 1 0 +1 827 0 0 3.14159265358979 +2 1969 449 0 0 3.14159265358979 +2 1970 458 0 0 3.14159265358979 +4 G1 449 0 458 0 +0 + +0101000 ++3348 0 -3342 0 * +Ed + 1e-07 1 1 0 +1 828 0 0 3.14159265358979 +2 1971 449 0 0 3.14159265358979 +2 1972 459 0 0 3.14159265358979 +4 CN 449 0 459 0 +0 + +0101000 ++3347 0 -3341 0 * +Ed + 1e-07 1 1 0 +1 829 0 0.150000000000002 0.350000000000001 +2 1973 441 0 0.150000000000002 0.350000000000001 +4 G1 441 0 439 0 +2 1974 439 0 0.150000000000002 0.350000000000001 +0 + +0101000 ++3340 0 -3360 0 * +Ed + 1e-07 1 1 0 +1 830 0 0.150000000000002 0.350000000000001 +2 1975 441 0 0.150000000000002 0.350000000000001 +4 G1 441 0 440 0 +0 + +0101000 ++3339 0 -3359 0 * +Ed + 1e-07 1 1 0 +1 831 0 0 3.14159265358979 +2 1976 441 0 0 3.14159265358979 +2 1977 459 0 0 3.14159265358979 +4 G1 441 0 459 0 +0 + +0101000 ++3339 0 -3340 0 * +Ed + 1e-07 1 1 0 +1 832 0 -21 21 +2 1978 452 0 -21 21 +4 G1 440 0 452 0 +0 + +0101000 ++3338 0 -3339 0 * +Ed + 1e-07 1 1 0 +1 833 0 -0.100000000000001 0.0999999999999979 +2 1979 438 0 -0.100000000000001 0.0999999999999979 +4 G1 440 0 438 0 +0 + +0101000 ++3361 0 -3338 0 * +Ed + 1e-07 1 1 0 +1 834 0 0.150000000000002 0.350000000000001 +2 1980 438 0 0.150000000000002 0.350000000000001 +4 G1 438 0 439 0 +2 1981 439 0 0.150000000000002 0.350000000000001 +0 + +0101000 ++3337 0 -3362 0 * +Ed + 1e-07 1 1 0 +1 835 0 3.14159265358979 6.28318530717959 +2 1982 438 0 3.14159265358979 6.28318530717959 +2 1983 455 0 3.14159265358979 6.28318530717959 +4 G1 438 0 455 0 +0 + +0101000 ++3337 0 -3338 0 * +Ed + 1e-07 1 1 0 +1 836 0 -21 21 +2 1984 457 0 -21 21 +4 G1 439 0 457 0 +2 1985 439 0 -21 21 +0 + +0101000 ++3340 0 -3337 0 * +Ed + 1e-07 1 1 0 +1 837 0 0 1.5707963267949 +2 1986 455 0 0 1.5707963267949 +2 1987 452 0 0 1.5707963267949 +4 G1 455 0 452 0 +0 + +0101000 ++3338 0 -3345 0 * +Ed + 1e-07 1 1 0 +1 838 0 0 1.5707963267949 +2 1988 455 0 0 1.5707963267949 +2 1989 457 0 0 1.5707963267949 +4 G1 455 0 457 0 +0 + +0101000 ++3337 0 -3343 0 * +Ed + 1e-07 1 1 0 +1 839 0 0 1.5707963267949 +2 1990 457 0 0 1.5707963267949 +2 1991 459 0 0 1.5707963267949 +4 G1 457 0 459 0 +0 + +0101000 ++3341 0 -3340 0 * +Ed + 1e-07 1 1 0 +1 840 0 0 1.5707963267949 +2 1992 459 0 0 1.5707963267949 +2 1993 452 0 0 1.5707963267949 +4 G1 459 0 452 0 +0 + +0101000 ++3339 0 -3347 0 * +Ed + 1e-07 1 1 0 +1 841 0 -10.5 -9.4999999935 +2 1994 415 0 -10.5 -9.4999999935 +4 G1 415 0 416 0 +2 1995 416 0 -10.5 -9.4999999935 +0 + +0101000 ++3388 0 -3336 0 * +Ed + 9.66590793534902e-05 1 1 0 +1 842 0 -10.5 -9.4999999935 +2 1996 415 0 -10.5 -9.4999999935 +2 1997 413 0 -10.5 -9.4999999935 +4 G1 415 0 413 0 +0 + +0101000 ++3391 0 -3335 0 * +Ed + 0.000713251616780183 1 1 0 +1 843 0 0 34.4318543551 +2 1998 415 0 0 34.4318543551 +4 C0 415 0 460 0 +2 1999 460 0 0 34.4318543551 +0 + +0101000 ++3336 0 -3335 0 * +Ed + 1e-07 1 1 0 +1 844 0 0 3.14159265358979 +2 2000 461 0 0 3.14159265358979 +4 C0 461 0 462 0 +0 + +0101000 ++3334 0 -3333 0 * +Ed + 1e-07 1 1 0 +1 845 0 -0.600000000000001 0.600000000000001 +2 2001 461 0 -0.600000000000001 0.600000000000001 +2 2002 463 0 -0.600000000000001 0.600000000000001 +4 CN 461 0 463 0 +0 + +0101000 ++3333 0 -3332 0 * +Ed + 1e-07 1 1 0 +1 846 0 0 3.14159265358979 +2 2003 461 0 0 3.14159265358979 +4 C0 461 0 464 0 +2 2004 464 0 0 3.14159265358979 +0 + +0101000 ++3331 0 -3332 0 * +Ed + 1e-07 1 1 0 +1 847 0 -0.600000000000001 0.600000000000001 +2 2005 461 0 -0.600000000000001 0.600000000000001 +2 2006 463 0 -0.600000000000001 0.600000000000001 +4 CN 461 0 463 0 +0 + +0101000 ++3334 0 -3331 0 * +Ed + 1e-07 1 1 0 +1 848 0 3.14159265358979 6.28318530717959 +2 2007 463 0 3.14159265358979 6.28318530717959 +4 C0 463 0 462 0 +0 + +0101000 ++3333 0 -3334 0 * +Ed + 1e-07 1 1 0 +1 849 0 3.14159265358979 6.28318530717959 +2 2008 463 0 3.14159265358979 6.28318530717959 +4 C0 463 0 464 0 +2 2009 464 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3332 0 -3331 0 * +Ed + 1e-07 1 1 0 +1 850 0 0 3.14159265358979 +2 2010 258 0 0 3.14159265358979 +4 C0 462 0 258 0 +0 + +0101000 ++3330 0 -3329 0 * +Ed + 1e-07 1 1 0 +1 851 0 3.14159265358979 6.28318530717959 +2 2011 260 0 3.14159265358979 6.28318530717959 +4 C0 462 0 260 0 +0 + +0101000 ++3329 0 -3330 0 * +Ed + 1e-07 1 1 0 +1 852 0 -6.6 6.6 +2 2012 458 0 -6.6 6.6 +4 G1 450 0 458 0 +0 + +0101000 ++3328 0 -3348 0 * +Ed + 1e-07 1 1 0 +1 853 0 -6.6 6.6 +2 2013 453 0 -6.6 6.6 +4 G1 450 0 453 0 +0 + +0101000 ++3327 0 -3346 0 * +Ed + 1e-07 1 1 0 +1 854 0 -20.99999999996 20.99999999994 +4 C0 450 0 464 0 +2 2014 464 0 -20.99999999996 20.99999999994 +0 + +0101000 ++3328 0 -3327 0 * +Ed + 1e-07 1 1 0 +1 855 0 0.789040235153626 1.5707963267949 +2 2015 465 0 0.789040235153626 1.5707963267949 +4 C0 464 0 465 0 +2 2016 464 0 0.789040235153626 1.5707963267949 +0 + +0101000 ++3326 0 -3325 0 * +Ed + 1e-07 1 1 0 +1 856 0 2.07079632679424 3.93063288873583 +2 2017 444 0 2.07079632679424 3.93063288873583 +4 C0 464 0 444 0 +2 2018 464 0 2.07079632679424 3.93063288873583 +0 + +0101000 ++3324 0 -3326 0 * +Ed + 1e-07 1 1 0 +1 857 0 2.01436513990966 2.07079632679424 +2 2019 446 0 2.01436513990966 2.07079632679424 +4 C0 464 0 446 0 +2 2020 464 0 2.01436513990966 2.07079632679424 +0 + +0101000 ++3323 0 -3324 0 * +Ed + 1e-07 1 1 0 +1 858 0 4.71238898038469 5.15595779351037 +2 2021 466 0 4.71238898038469 5.15595779351037 +4 C0 464 0 466 0 +2 2022 464 0 4.71238898038469 5.15595779351037 +0 + +0101000 ++3322 0 -3323 0 * +Ed + 1e-07 1 1 0 +1 859 0 -17.50896997293 17.50896997287 +4 C0 464 0 467 0 +2 2023 464 0 -17.50896997293 17.50896997287 +0 + +0101000 ++3321 0 -3322 0 * +Ed + 1e-07 1 1 0 +1 860 0 3.30228330654129 4.71238898038469 +2 2024 468 0 3.30228330654129 4.71238898038469 +4 C0 464 0 468 0 +2 2025 464 0 3.30228330654129 4.71238898038469 +0 + +0101000 ++3320 0 -3321 0 * +Ed + 1e-07 1 1 0 +1 861 0 0 0.160690652952128 +2 2026 458 0 0 0.160690652952128 +4 C0 464 0 458 0 +2 2027 464 0 0 0.160690652952128 +0 + +0101000 ++3328 0 -3320 0 * +Ed + 1e-07 1 1 0 +1 862 0 6.12249465422746 6.28318530717959 +2 2028 453 0 6.12249465422746 6.28318530717959 +4 C0 464 0 453 0 +2 2029 464 0 6.12249465422746 6.28318530717959 +0 + +0101000 ++3319 0 -3327 0 * +Ed + 1e-07 1 1 0 +1 863 0 1.5707963267949 2.9809020006383 +2 2030 469 0 1.5707963267949 2.9809020006383 +4 C0 464 0 469 0 +2 2031 464 0 1.5707963267949 2.9809020006383 +0 + +0101000 ++3318 0 -3319 0 * +Ed + 1e-07 1 1 0 +1 864 0 -13.24087248687 13.24087248683 +4 C0 464 0 470 0 +2 2032 464 0 -13.24087248687 13.24087248683 +0 + +0101000 ++3325 0 -3318 0 * +Ed + 1e-07 1 1 0 +1 865 0 -6.6 6.6 +2 2033 453 0 -6.6 6.6 +4 G1 456 0 453 0 +2 2034 456 0 -6.6 6.6 +0 + +0101000 ++3317 0 -3344 0 * +Ed + 1e-07 1 1 0 +1 866 0 -6.6 6.6 +2 2035 458 0 -6.6 6.6 +4 G1 456 0 458 0 +2 2036 456 0 -6.6 6.6 +0 + +0101000 ++3316 0 -3342 0 * +Ed + 1e-07 1 1 0 +1 867 0 -20.99999999975 20.99999999975 +4 C0 456 0 471 0 +2 2037 456 0 -20.99999999975 20.99999999975 +0 + +0101000 ++3316 0 -3317 0 * +Ed + 1e-07 1 1 0 +1 868 0 -6.6 6.6 +2 2038 435 0 -6.6 6.6 +4 G1 434 0 435 0 +2 2039 434 0 -6.6 6.6 +0 + +0101000 ++3369 0 -3315 0 * +Ed + 1e-07 1 1 0 +1 869 0 -6.6 6.6 +2 2040 433 0 -6.6 6.6 +4 G1 434 0 433 0 +2 2041 434 0 -6.6 6.6 +0 + +0101000 ++3370 0 -3314 0 * +Ed + 1e-07 1 1 0 +1 870 0 -54.5 54.5 +2 2042 472 0 -54.5 54.5 +4 G1 434 0 472 0 +2 2043 434 0 -54.5 54.5 +0 + +0101000 ++3315 0 -3314 0 * +Ed + 1e-07 1 1 0 +1 871 0 5.3 18.5 +2 2044 435 0 5.3 18.5 +4 G1 435 0 426 0 +0 + +0101000 ++3313 0 -3377 0 * +Ed + 1e-07 1 1 0 +1 872 0 3.14159265358979 4.71238898038469 +2 2045 435 0 3.14159265358979 4.71238898038469 +2 2046 473 0 3.14159265358979 4.71238898038469 +4 G1 435 0 473 0 +0 + +0101000 ++3313 0 -3315 0 * +Ed + 1e-07 1 1 0 +1 873 0 -6.2 7 +2 2047 433 0 -6.2 7 +4 G1 433 0 432 0 +0 + +0101000 ++3312 0 -3371 0 * +Ed + 1e-07 1 1 0 +1 874 0 4.71238898038469 6.28318530717959 +2 2048 433 0 4.71238898038469 6.28318530717959 +2 2049 474 0 4.71238898038469 6.28318530717959 +4 G1 433 0 474 0 +0 + +0101000 ++3314 0 -3312 0 * +Ed + 1e-07 1 1 0 +1 875 0 -6.6 6.6 +2 2050 427 0 -6.6 6.6 +4 G1 426 0 427 0 +0 + +0101000 ++3378 0 -3311 0 * +Ed + 1e-07 1 1 0 +1 876 0 -1 1 +2 2051 475 0 -1 1 +4 G1 426 0 475 0 +0 + +0101000 ++3311 0 -3313 0 * +Ed + 1e-07 1 1 0 +1 877 0 -5.00074355342 5.00074355341 +2 2052 476 0 -5.00074355342 5.00074355341 +4 G1 432 0 476 0 +0 + +0101000 ++3310 0 -3312 0 * +Ed + 1e-07 1 1 0 +1 878 0 -6.6 6.6 +2 2053 431 0 -6.6 6.6 +4 G1 432 0 431 0 +0 + +0101000 ++3372 0 -3310 0 * +Ed + 1e-07 1 1 0 +1 879 0 -6.2 7 +2 2054 431 0 -6.2 7 +4 G1 431 0 430 0 +0 + +0101000 ++3309 0 -3373 0 * +Ed + 1e-07 1 1 0 +1 880 0 6.28318257972667 7.36529079161962 +2 2055 431 0 6.28318257972667 7.36529079161962 +2 2056 477 0 6.28318257972667 7.36529079161962 +4 G1 431 0 477 0 +0 + +0101000 ++3310 0 -3309 0 * +Ed + 1e-07 1 1 0 +1 881 0 -14.5100701232189 14.5100701232189 +2 2057 478 0 -14.5100701232189 14.5100701232189 +4 G1 430 0 478 0 +0 + +0101000 ++3308 0 -3309 0 * +Ed + 1e-07 1 1 0 +1 882 0 -6.6 6.6 +2 2058 429 0 -6.6 6.6 +4 G1 430 0 429 0 +0 + +0101000 ++3374 0 -3308 0 * +Ed + 1e-07 1 1 0 +1 883 0 -6.2 7 +2 2059 429 0 -6.2 7 +4 G1 429 0 428 0 +0 + +0101000 ++3307 0 -3375 0 * +Ed + 1e-07 1 1 0 +1 884 0 1.08210413623606 1.5707963267949 +2 2060 429 0 1.08210413623606 1.5707963267949 +2 2061 479 0 1.08210413623606 1.5707963267949 +4 G1 429 0 479 0 +0 + +0101000 ++3308 0 -3307 0 * +Ed + 1e-07 1 1 0 +1 885 0 -17.4 17.4 +2 2062 480 0 -17.4 17.4 +4 G1 428 0 480 0 +0 + +0101000 ++3306 0 -3307 0 * +Ed + 1e-07 1 1 0 +1 886 0 -6.6 6.6 +2 2063 427 0 -6.6 6.6 +4 G1 428 0 427 0 +0 + +0101000 ++3376 0 -3306 0 * +Ed + 1e-07 1 1 0 +1 887 0 1.5707963267949 3.14159265358979 +2 2064 427 0 1.5707963267949 3.14159265358979 +2 2065 481 0 1.5707963267949 3.14159265358979 +4 G1 427 0 481 0 +0 + +0101000 ++3306 0 -3311 0 * +Ed + 1e-07 1 1 0 +1 888 0 4.71238898038469 6.28318530717959 +2 2066 479 0 4.71238898038469 6.28318530717959 +2 2067 480 0 4.71238898038469 6.28318530717959 +4 G1 479 0 480 0 +0 + +0101000 ++3305 0 -3307 0 * +Ed + 1e-07 1 1 0 +1 889 0 4.71238898038469 6.28318530717959 +2 2068 479 0 4.71238898038469 6.28318530717959 +2 2069 478 0 4.71238898038469 6.28318530717959 +4 G1 479 0 478 0 +0 + +0101000 ++3304 0 -3308 0 * +Ed + 1e-07 1 1 0 +1 890 0 1.08210413623672 1.5707963267949 +2 2070 479 0 1.08210413623672 1.5707963267949 +4 G1 479 0 482 0 +2 2071 482 0 1.08210413623672 1.5707963267949 +0 + +0101000 ++3304 0 -3305 0 * +Ed + 2.3959515903456e-07 1 1 0 +1 891 0 4.71238898038469 6.28318530717959 +2 2072 478 0 4.71238898038469 6.28318530717959 +2 2073 477 0 4.71238898038469 6.28318530717959 +4 G1 478 0 477 0 +0 + +0101000 ++3303 0 -3309 0 * +Ed + 1e-07 1 1 0 +1 892 0 -11.1570042230844 17.8631360233948 +2 2074 478 0 -11.1570042230844 17.8631360233948 +4 G1 478 0 482 0 +2 2075 482 0 -11.1570042230844 17.8631360233948 +0 + +0101000 ++3304 0 -3303 0 * +Ed + 4.58860415643713e-07 1 1 0 +1 893 0 1.5707963267949 3.14159265358979 +2 2076 477 0 1.5707963267949 3.14159265358979 +2 2077 476 0 1.5707963267949 3.14159265358979 +4 G1 477 0 476 0 +0 + +0101000 ++3302 0 -3310 0 * +Ed + 1e-07 1 1 0 +1 894 0 6.28318257972657 7.36529083811007 +2 2078 477 0 6.28318257972657 7.36529083811007 +4 G1 477 0 482 0 +2 2079 482 0 6.28318257972657 7.36529083811007 +0 + +0101000 ++3302 0 -3303 0 * +Ed + 1e-07 1 1 0 +1 895 0 0 1.5707963267949 +2 2080 476 0 0 1.5707963267949 +2 2081 474 0 0 1.5707963267949 +4 G1 476 0 474 0 +0 + +0101000 ++3301 0 -3312 0 * +Ed + 1e-07 1 1 0 +1 896 0 1.99851071121001 12 +2 2082 476 0 1.99851071121001 12 +4 G1 476 0 482 0 +2 2083 482 0 1.99851071121001 12 +0 + +0101000 ++3302 0 -3301 0 * +Ed + 1e-07 1 1 0 +1 897 0 4.71238898038469 6.28318530717959 +2 2084 474 0 4.71238898038469 6.28318530717959 +2 2085 472 0 4.71238898038469 6.28318530717959 +4 G1 474 0 472 0 +0 + +0101000 ++3300 0 -3314 0 * +Ed + 1e-07 1 1 0 +1 898 0 4.71238898038469 6.28318530717959 +2 2086 474 0 4.71238898038469 6.28318530717959 +4 G1 474 0 482 0 +2 2087 482 0 4.71238898038469 6.28318530717959 +0 + +0101000 ++3300 0 -3301 0 * +Ed + 1e-07 1 1 0 +1 899 0 1.5707963267949 3.14159265358979 +2 2088 472 0 1.5707963267949 3.14159265358979 +2 2089 473 0 1.5707963267949 3.14159265358979 +4 G1 472 0 473 0 +0 + +0101000 ++3315 0 -3299 0 * +Ed + 1e-07 1 1 0 +1 900 0 -55.5 53.5 +2 2090 472 0 -55.5 53.5 +4 G1 472 0 482 0 +2 2091 482 0 -55.5 53.5 +0 + +0101000 ++3299 0 -3300 0 * +Ed + 1e-07 1 1 0 +1 901 0 1.5707963267949 3.14159265358979 +2 2092 473 0 1.5707963267949 3.14159265358979 +2 2093 475 0 1.5707963267949 3.14159265358979 +4 G1 473 0 475 0 +0 + +0101000 ++3298 0 -3313 0 * +Ed + 1e-07 1 1 0 +1 902 0 3.14159265358979 4.71238898038469 +2 2094 473 0 3.14159265358979 4.71238898038469 +4 G1 473 0 482 0 +2 2095 482 0 3.14159265358979 4.71238898038469 +0 + +0101000 ++3298 0 -3299 0 * +Ed + 1e-07 1 1 0 +1 903 0 4.71238898038469 6.28318530717959 +2 2096 475 0 4.71238898038469 6.28318530717959 +2 2097 481 0 4.71238898038469 6.28318530717959 +4 G1 475 0 481 0 +0 + +0101000 ++3311 0 -3297 0 * +Ed + 1e-07 1 1 0 +1 904 0 12 14 +2 2098 475 0 12 14 +4 G1 475 0 482 0 +2 2099 482 0 12 14 +0 + +0101000 ++3297 0 -3298 0 * +Ed + 1e-07 1 1 0 +1 905 0 4.71238898038469 6.28318530717959 +2 2100 481 0 4.71238898038469 6.28318530717959 +2 2101 480 0 4.71238898038469 6.28318530717959 +4 G1 481 0 480 0 +0 + +0101000 ++3296 0 -3306 0 * +Ed + 1e-07 1 1 0 +1 906 0 1.5707963267949 3.14159265358979 +2 2102 481 0 1.5707963267949 3.14159265358979 +4 G1 481 0 482 0 +2 2103 482 0 1.5707963267949 3.14159265358979 +0 + +0101000 ++3296 0 -3297 0 * +Ed + 1e-07 1 1 0 +1 907 0 -29.5 5.3 +2 2104 480 0 -29.5 5.3 +4 G1 480 0 482 0 +2 2105 482 0 -29.5 5.3 +0 + +0101000 ++3296 0 -3305 0 * +Ed + 1e-07 1 1 0 +1 908 0 -8.45 -4.35 +2 2106 468 0 -8.45 -4.35 +2 2107 458 0 -8.45 -4.35 +4 G1 468 0 458 0 +0 + +0101000 ++3295 0 -3320 0 * +Ed + 1e-07 1 1 0 +1 909 0 -8.45 -4.35 +2 2108 468 0 -8.45 -4.35 +4 G1 468 0 467 0 +0 + +0101000 ++3294 0 -3321 0 * +Ed + 1e-07 1 1 0 +1 910 0 4.71238898038469 6.12249465422809 +2 2109 468 0 4.71238898038469 6.12249465422809 +2 2110 483 0 4.71238898038469 6.12249465422809 +4 C0 468 0 483 0 +0 + +0101000 ++3294 0 -3295 0 * +Ed + 1e-07 1 1 0 +1 911 0 -8.45 -4.35 +2 2111 469 0 -8.45 -4.35 +4 G1 469 0 470 0 +0 + +0101000 ++3293 0 -3318 0 * +Ed + 1e-07 1 1 0 +1 912 0 -8.45 -4.35 +2 2112 469 0 -8.45 -4.35 +2 2113 453 0 -8.45 -4.35 +4 G1 469 0 453 0 +0 + +0101000 ++3292 0 -3319 0 * +Ed + 1e-07 1 1 0 +1 913 0 0.160690652951493 1.5707963267949 +2 2114 469 0 0.160690652951493 1.5707963267949 +2 2115 484 0 0.160690652951493 1.5707963267949 +4 C0 469 0 484 0 +0 + +0101000 ++3292 0 -3293 0 * +Ed + 1e-07 1 1 0 +1 914 0 -9.6 7.7 +2 2116 446 0 -9.6 7.7 +2 2117 444 0 -9.6 7.7 +4 CN 446 0 444 0 +0 + +0101000 ++3353 0 -3291 0 * +Ed + 1e-07 1 1 0 +1 915 0 -9.6 3.6 +2 2118 446 0 -9.6 3.6 +2 2119 444 0 -9.6 3.6 +4 CN 446 0 444 0 +0 + +0101000 ++3352 0 -3324 0 * +Ed + 1e-07 1 1 0 +1 916 0 3.6 7.7 +2 2120 446 0 3.6 7.7 +2 2121 466 0 3.6 7.7 +4 G1 446 0 466 0 +0 + +0101000 ++3323 0 -3290 0 * +Ed + 1e-07 1 1 0 +1 917 0 5.21238898038404 8.29755044708925 +2 2122 446 0 5.21238898038404 8.29755044708925 +2 2123 485 0 5.21238898038404 8.29755044708925 +4 C0 446 0 485 0 +0 + +0101000 ++3291 0 -3290 0 * +Ed + 1e-07 1 1 0 +1 918 0 -2.05 2.05 +2 2124 466 0 -2.05 2.05 +4 G1 467 0 466 0 +0 + +0101000 ++3289 0 -3322 0 * +Ed + 1e-07 1 1 0 +1 919 0 -17.50896997293 17.50896997287 +4 C0 467 0 486 0 +0 + +0101000 ++3294 0 -3289 0 * +Ed + 1e-07 1 1 0 +1 920 0 4.26882016725901 4.71238898038469 +2 2125 466 0 4.26882016725901 4.71238898038469 +2 2126 487 0 4.26882016725901 4.71238898038469 +4 C0 466 0 487 0 +0 + +0101000 ++3290 0 -3289 0 * +Ed + 1e-07 1 1 0 +1 921 0 -2.05 2.05 +2 2127 465 0 -2.05 2.05 +4 G1 470 0 465 0 +0 + +0101000 ++3288 0 -3325 0 * +Ed + 1e-07 1 1 0 +1 922 0 -13.24087248687 13.24087248683 +4 C0 470 0 488 0 +0 + +0101000 ++3288 0 -3293 0 * +Ed + 1e-07 1 1 0 +1 923 0 3.6 7.7 +2 2128 444 0 3.6 7.7 +2 2129 465 0 3.6 7.7 +4 G1 444 0 465 0 +0 + +0101000 ++3326 0 -3287 0 * +Ed + 1e-07 1 1 0 +1 924 0 3.93063288873583 5.21238898038404 +2 2130 444 0 3.93063288873583 5.21238898038404 +2 2131 485 0 3.93063288873583 5.21238898038404 +4 C0 444 0 485 0 +0 + +0101000 ++3287 0 -3291 0 * +Ed + 1e-07 1 1 0 +1 925 0 1.5707963267949 2.35255241843617 +2 2132 465 0 1.5707963267949 2.35255241843617 +2 2133 489 0 1.5707963267949 2.35255241843617 +4 C0 465 0 489 0 +0 + +0101000 ++3288 0 -3287 0 * +Ed + 1e-07 1 1 0 +1 926 0 -11.65 -7.55 +2 2134 453 0 -11.65 -7.55 +2 2135 490 0 -11.65 -7.55 +4 G1 453 0 490 0 +0 + +0101000 ++3286 0 -3285 0 * +Ed + 1e-07 1 1 0 +1 927 0 3.14159265358979 3.18160332794375 +2 2136 453 0 3.14159265358979 3.18160332794375 +4 C0 453 0 471 0 +0 + +0101000 ++3317 0 -3286 0 * +Ed + 1e-07 1 1 0 +1 928 0 3.18160332794375 6.12249465422746 +2 2137 453 0 3.18160332794375 6.12249465422746 +2 2138 491 0 3.18160332794375 6.12249465422746 +4 C0 453 0 491 0 +0 + +0101000 ++3285 0 -3292 0 * +Ed + 1e-07 1 1 0 +1 929 0 1.5707963267949 3.10158197923577 +2 2139 490 0 1.5707963267949 3.10158197923577 +4 C0 490 0 471 0 +0 + +0101000 ++3284 0 -3286 0 * +Ed + 1e-07 1 1 0 +1 930 0 -8.45 -4.35 +2 2140 490 0 -8.45 -4.35 +4 G1 490 0 492 0 +0 + +0101000 ++3283 0 -3284 0 * +Ed + 1e-07 1 1 0 +1 931 0 1.5707963267949 3.10158197923577 +2 2141 490 0 1.5707963267949 3.10158197923577 +2 2142 493 0 1.5707963267949 3.10158197923577 +4 C0 490 0 493 0 +0 + +0101000 ++3283 0 -3285 0 * +Ed + 1e-07 1 1 0 +1 932 0 3.10158197923583 3.14159265361757 +2 2143 458 0 3.10158197923583 3.14159265361757 +4 C0 458 0 471 0 +0 + +0101000 ++3282 0 -3316 0 * +Ed + 1e-07 1 1 0 +1 933 0 -11.65 -7.55 +2 2144 458 0 -11.65 -7.55 +2 2145 494 0 -11.65 -7.55 +4 G1 458 0 494 0 +0 + +0101000 ++3282 0 -3281 0 * +Ed + 1e-07 1 1 0 +1 934 0 0.160690652952128 3.10158197923583 +2 2146 458 0 0.160690652952128 3.10158197923583 +2 2147 495 0 0.160690652952128 3.10158197923583 +4 C0 458 0 495 0 +0 + +0101000 ++3295 0 -3281 0 * +Ed + 1e-07 1 1 0 +1 935 0 -8.45 -4.35 +2 2148 494 0 -8.45 -4.35 +4 G1 494 0 496 0 +0 + +0101000 ++3280 0 -3279 0 * +Ed + 1e-07 1 1 0 +1 936 0 3.18160332794382 4.71238898038469 +2 2149 494 0 3.18160332794382 4.71238898038469 +4 C0 494 0 471 0 +0 + +0101000 ++3282 0 -3279 0 * +Ed + 1e-07 1 1 0 +1 937 0 3.18160332794382 4.71238898038469 +2 2150 494 0 3.18160332794382 4.71238898038469 +2 2151 497 0 3.18160332794382 4.71238898038469 +4 C0 494 0 497 0 +0 + +0101000 ++3281 0 -3280 0 * +Ed + 1e-07 1 1 0 +1 938 0 -4.45427591320001 4.45427591319999 +4 C0 492 0 471 0 +0 + +0101000 ++3284 0 -3278 0 * +Ed + 1e-07 1 1 0 +1 939 0 -2.05 2.05 +2 2152 498 0 -2.05 2.05 +4 G1 492 0 498 0 +0 + +0101000 ++3277 0 -3278 0 * +Ed + 1e-07 1 1 0 +1 940 0 -4.45427591320001 4.45427591319999 +4 C0 492 0 499 0 +0 + +0101000 ++3283 0 -3277 0 * +Ed + 1e-07 1 1 0 +1 941 0 -1.85 2.25 +2 2153 498 0 -1.85 2.25 +2 2154 500 0 -1.85 2.25 +4 G1 498 0 500 0 +0 + +0101000 ++3276 0 -3275 0 * +Ed + 1e-07 1 1 0 +1 942 0 4.71238898038469 5.73186833805586 +2 2155 498 0 4.71238898038469 5.73186833805586 +4 C0 498 0 471 0 +0 + +0101000 ++3278 0 -3275 0 * +Ed + 1e-07 1 1 0 +1 943 0 4.71238898038469 5.73186833805586 +2 2156 498 0 4.71238898038469 5.73186833805586 +2 2157 501 0 4.71238898038469 5.73186833805586 +4 C0 498 0 501 0 +0 + +0101000 ++3277 0 -3276 0 * +Ed + 1e-07 1 1 0 +1 944 0 -2.05 2.05 +2 2158 502 0 -2.05 2.05 +4 G1 496 0 502 0 +0 + +0101000 ++3274 0 -3273 0 * +Ed + 1e-07 1 1 0 +1 945 0 -4.45427591319999 4.45427591320001 +4 C0 496 0 471 0 +0 + +0101000 ++3273 0 -3279 0 * +Ed + 1e-07 1 1 0 +1 946 0 -4.45427591319999 4.45427591320001 +4 C0 496 0 503 0 +0 + +0101000 ++3274 0 -3280 0 * +Ed + 1e-07 1 1 0 +1 947 0 -11.5 -7.4 +2 2159 500 0 -11.5 -7.4 +2 2160 502 0 -11.5 -7.4 +4 G1 500 0 502 0 +0 + +0101000 ++3272 0 -3271 0 * +Ed + 1e-07 1 1 0 +1 948 0 2.59027568446126 3.69290962272235 +2 2161 500 0 2.59027568446126 3.69290962272235 +4 C0 500 0 471 0 +0 + +0101000 ++3272 0 -3275 0 * +Ed + 1e-07 1 1 0 +1 949 0 2.59027568446126 3.69290962272235 +2 2162 500 0 2.59027568446126 3.69290962272235 +2 2163 504 0 2.59027568446126 3.69290962272235 +4 C0 500 0 504 0 +0 + +0101000 ++3271 0 -3276 0 * +Ed + 1e-07 1 1 0 +1 950 0 0.551316969123728 1.5707963267949 +2 2164 502 0 0.551316969123728 1.5707963267949 +4 C0 502 0 471 0 +0 + +0101000 ++3272 0 -3273 0 * +Ed + 1e-07 1 1 0 +1 951 0 0.551316969123728 1.5707963267949 +2 2165 502 0 0.551316969123728 1.5707963267949 +2 2166 505 0 0.551316969123728 1.5707963267949 +4 C0 502 0 505 0 +0 + +0101000 ++3271 0 -3274 0 * +Ed + 1e-07 1 1 0 +1 952 0 0.0400106743540416 1.5707963267949 +2 2167 493 0 0.0400106743540416 1.5707963267949 +4 C0 482 0 493 0 +2 2168 482 0 0.0400106743540416 1.5707963267949 +0 + +0101000 ++3270 0 -3269 0 * +Ed + 1e-07 1 1 0 +1 953 0 -4.45427591320001 4.45427591319999 +4 C0 482 0 499 0 +2 2169 482 0 -4.45427591320001 4.45427591319999 +0 + +0101000 ++3269 0 -3268 0 * +Ed + 1e-07 1 1 0 +1 954 0 3.69290962272901 4.71238898038469 +2 2170 501 0 3.69290962272901 4.71238898038469 +4 C0 482 0 501 0 +2 2171 482 0 3.69290962272901 4.71238898038469 +0 + +0101000 ++3267 0 -3268 0 * +Ed + 1e-07 1 1 0 +1 955 0 2.59027568446201 3.69290962272489 +2 2172 504 0 2.59027568446201 3.69290962272489 +4 C0 482 0 504 0 +2 2173 482 0 2.59027568446201 3.69290962272489 +0 + +0101000 ++3266 0 -3267 0 * +Ed + 1e-07 1 1 0 +1 956 0 1.5707963267949 2.59027568446994 +2 2174 505 0 1.5707963267949 2.59027568446994 +4 C0 482 0 505 0 +2 2175 482 0 1.5707963267949 2.59027568446994 +0 + +0101000 ++3265 0 -3266 0 * +Ed + 1e-07 1 1 0 +1 957 0 -4.45427591319999 4.45427591320001 +4 C0 482 0 503 0 +2 2176 482 0 -4.45427591319999 4.45427591320001 +0 + +0101000 ++3265 0 -3264 0 * +Ed + 1e-07 1 1 0 +1 958 0 4.71238898038469 6.24317463282554 +2 2177 497 0 4.71238898038469 6.24317463282554 +4 C0 482 0 497 0 +2 2178 482 0 4.71238898038469 6.24317463282554 +0 + +0101000 ++3264 0 -3263 0 * +Ed + 1e-07 1 1 0 +1 959 0 0.160690652951567 3.10158197923584 +2 2179 495 0 0.160690652951567 3.10158197923584 +4 C0 482 0 495 0 +2 2180 482 0 0.160690652951567 3.10158197923584 +0 + +0101000 ++3262 0 -3263 0 * +Ed + 1e-07 1 1 0 +1 960 0 3.30228330654281 4.71238898038469 +2 2181 483 0 3.30228330654281 4.71238898038469 +4 C0 482 0 483 0 +2 2182 482 0 3.30228330654281 4.71238898038469 +0 + +0101000 ++3262 0 -3261 0 * +Ed + 1e-07 1 1 0 +1 961 0 -17.50896997293 17.50896997287 +4 C0 482 0 486 0 +2 2183 482 0 -17.50896997293 17.50896997287 +0 + +0101000 ++3261 0 -3260 0 * +Ed + 1e-07 1 1 0 +1 962 0 4.71238898038469 5.15595779350366 +2 2184 487 0 4.71238898038469 5.15595779350366 +4 C0 482 0 487 0 +2 2185 482 0 4.71238898038469 5.15595779350366 +0 + +0101000 ++3260 0 -3259 0 * +Ed + 1e-07 1 1 0 +1 963 0 5.21238898038365 8.29755044709124 +2 2186 485 0 5.21238898038365 8.29755044709124 +4 C0 482 0 485 0 +2 2187 482 0 5.21238898038365 8.29755044709124 +0 + +0101000 ++3258 0 -3259 0 * +Ed + 1e-07 1 1 0 +1 964 0 3.93063288873727 5.21238898038365 +2 2188 485 0 3.93063288873727 5.21238898038365 +4 C0 482 0 485 0 +2 2189 482 0 3.93063288873727 5.21238898038365 +0 + +0101000 ++3257 0 -3258 0 * +Ed + 1e-07 1 1 0 +1 965 0 0.789040235148755 1.5707963267949 +2 2190 489 0 0.789040235148755 1.5707963267949 +4 C0 482 0 489 0 +2 2191 482 0 0.789040235148755 1.5707963267949 +0 + +0101000 ++3257 0 -3256 0 * +Ed + 1e-07 1 1 0 +1 966 0 -13.24087248687 13.24087248683 +4 C0 482 0 488 0 +2 2192 482 0 -13.24087248687 13.24087248683 +0 + +0101000 ++3256 0 -3255 0 * +Ed + 1e-07 1 1 0 +1 967 0 1.5707963267949 2.98090200063678 +2 2193 484 0 1.5707963267949 2.98090200063678 +4 C0 482 0 484 0 +2 2194 482 0 1.5707963267949 2.98090200063678 +0 + +0101000 ++3255 0 -3254 0 * +Ed + 1e-07 1 1 0 +1 968 0 3.18160332794375 6.12249465422802 +2 2195 491 0 3.18160332794375 6.12249465422802 +4 C0 482 0 491 0 +2 2196 482 0 3.18160332794375 6.12249465422802 +0 + +0101000 ++3270 0 -3254 0 * +Ed + 1e-07 1 1 0 +1 969 0 -0.282842712496918 0.282842712496923 +2 2197 491 0 -0.282842712496918 0.282842712496923 +2 2198 484 0 -0.282842712496918 0.282842712496923 +4 G1 491 0 484 0 +0 + +0101000 ++3292 0 -3254 0 * +Ed + 1e-07 1 1 0 +1 970 0 -0.282842712440174 0.28284271251083 +2 2199 491 0 -0.282842712440174 0.28284271251083 +2 2200 493 0 -0.282842712440174 0.28284271251083 +4 G1 491 0 493 0 +0 + +0101000 ++3285 0 -3270 0 * +Ed + 1e-07 1 1 0 +1 971 0 -0.282842712474621 0.282842712474616 +2 2201 484 0 -0.282842712474621 0.282842712474616 +4 G1 484 0 488 0 +0 + +0101000 ++3255 0 -3293 0 * +Ed + 1e-07 1 1 0 +1 972 0 -0.282842712474616 0.282842712474621 +2 2202 489 0 -0.282842712474616 0.282842712474621 +4 G1 488 0 489 0 +0 + +0101000 ++3288 0 -3256 0 * +Ed + 1e-07 1 1 0 +1 973 0 -0.282842712491306 0.282842712491302 +2 2203 489 0 -0.282842712491306 0.282842712491302 +2 2204 485 0 -0.282842712491306 0.282842712491302 +4 G1 489 0 485 0 +0 + +0101000 ++3257 0 -3287 0 * +Ed + 1e-07 1 1 0 +1 974 0 -0.282842712490296 0.282842712490292 +2 2205 487 0 -0.282842712490296 0.282842712490292 +2 2206 485 0 -0.282842712490296 0.282842712490292 +4 G1 487 0 485 0 +0 + +0101000 ++3259 0 -3290 0 * +Ed + 1e-07 1 1 0 +1 975 0 -0.282842712474621 0.282842712474616 +2 2207 487 0 -0.282842712474621 0.282842712474616 +4 G1 487 0 486 0 +0 + +0101000 ++3260 0 -3289 0 * +Ed + 1e-07 1 1 0 +1 976 0 -0.282842712474616 0.282842712474621 +2 2208 483 0 -0.282842712474616 0.282842712474621 +4 G1 486 0 483 0 +0 + +0101000 ++3294 0 -3261 0 * +Ed + 1e-07 1 1 0 +1 977 0 -0.282842712496923 0.282842712496918 +2 2209 483 0 -0.282842712496923 0.282842712496918 +2 2210 495 0 -0.282842712496923 0.282842712496918 +4 G1 483 0 495 0 +0 + +0101000 ++3262 0 -3295 0 * +Ed + 1e-07 1 1 0 +1 978 0 -0.282842712440174 0.28284271251083 +2 2211 495 0 -0.282842712440174 0.28284271251083 +2 2212 497 0 -0.282842712440174 0.28284271251083 +4 G1 495 0 497 0 +0 + +0101000 ++3281 0 -3263 0 * +Ed + 1e-07 1 1 0 +1 979 0 -0.282842712474622 0.282842712474616 +2 2213 497 0 -0.282842712474622 0.282842712474616 +4 G1 497 0 503 0 +0 + +0101000 ++3264 0 -3280 0 * +Ed + 1e-07 1 1 0 +1 980 0 -0.282842712474616 0.282842712474622 +2 2214 505 0 -0.282842712474616 0.282842712474622 +4 G1 503 0 505 0 +0 + +0101000 ++3274 0 -3265 0 * +Ed + 1e-07 1 1 0 +1 981 0 -0.282842712488739 0.282842712451697 +2 2215 505 0 -0.282842712488739 0.282842712451697 +2 2216 504 0 -0.282842712488739 0.282842712451697 +4 G1 505 0 504 0 +0 + +0101000 ++3271 0 -3266 0 * +Ed + 1e-07 1 1 0 +1 982 0 -0.282842712488739 0.282842712488736 +2 2217 504 0 -0.282842712488739 0.282842712488736 +2 2218 501 0 -0.282842712488739 0.282842712488736 +4 G1 504 0 501 0 +0 + +0101000 ++3276 0 -3267 0 * +Ed + 1e-07 1 1 0 +1 983 0 -0.282842712474616 0.282842712474621 +2 2219 501 0 -0.282842712474616 0.282842712474621 +4 G1 501 0 499 0 +0 + +0101000 ++3277 0 -3268 0 * +Ed + 1e-07 1 1 0 +1 984 0 -0.282842712474616 0.282842712474621 +2 2220 493 0 -0.282842712474616 0.282842712474621 +4 G1 499 0 493 0 +0 + +0101000 ++3283 0 -3269 0 * +Ed + 1e-07 1 1 0 +1 985 0 0 3.14159265358979 +2 2221 506 0 0 3.14159265358979 +4 C0 471 0 506 0 +0 + +0101000 ++3253 0 -3252 0 * +Ed + 1e-07 1 1 0 +1 986 0 3.14159265358979 6.28318530717959 +2 2222 507 0 3.14159265358979 6.28318530717959 +4 C0 471 0 507 0 +0 + +0101000 ++3252 0 -3253 0 * +Ed + 1e-07 1 1 0 +1 987 0 0 3.14159265358979 +2 2223 506 0 0 3.14159265358979 +4 C0 506 0 508 0 +0 + +0101000 ++3251 0 -3250 0 * +Ed + 1e-07 1 1 0 +1 988 0 -0.600000000000001 0.600000000000001 +2 2224 506 0 -0.600000000000001 0.600000000000001 +2 2225 507 0 -0.600000000000001 0.600000000000001 +4 CN 506 0 507 0 +0 + +0101000 ++3250 0 -3252 0 * +Ed + 1e-07 1 1 0 +1 989 0 -0.600000000000001 0.600000000000001 +2 2226 506 0 -0.600000000000001 0.600000000000001 +2 2227 507 0 -0.600000000000001 0.600000000000001 +4 CN 506 0 507 0 +0 + +0101000 ++3251 0 -3253 0 * +Ed + 1e-07 1 1 0 +1 990 0 3.14159265358979 6.28318530717959 +2 2228 507 0 3.14159265358979 6.28318530717959 +4 C0 507 0 508 0 +0 + +0101000 ++3250 0 -3251 0 * +Ed + 1e-07 1 1 0 +1 991 0 3.14159265358979 6.28318530717959 +2 2229 254 0 3.14159265358979 6.28318530717959 +4 C0 508 0 254 0 +0 + +0101000 ++3249 0 -3248 0 * +Ed + 1e-07 1 1 0 +1 992 0 0 3.14159265358979 +2 2230 256 0 0 3.14159265358979 +4 C0 508 0 256 0 +0 + +0101000 ++3248 0 -3249 0 * +Ed + 1e-07 1 1 0 +1 993 0 -10.5 -9.4999999935 +2 2231 422 0 -10.5 -9.4999999935 +4 G1 422 0 423 0 +0 + +0101000 ++3381 0 -3247 0 * +Ed + 7.80304409749528e-06 1 1 0 +1 994 0 -10.5 -9.4999999935 +2 2232 422 0 -10.5 -9.4999999935 +2 2233 421 0 -10.5 -9.4999999935 +4 G1 422 0 421 0 +0 + +0101000 ++3382 0 -3246 0 * +Ed + 0.000371546529634028 1 1 0 +1 995 0 0 25.1995289729 +2 2234 422 0 0 25.1995289729 +4 C0 422 0 460 0 +2 2235 460 0 0 25.1995289729 +0 + +0101000 ++3247 0 -3246 0 * +Ed + 1e-07 1 1 0 +1 996 0 -10.5 -9.4999999935 +2 2236 424 0 -10.5 -9.4999999935 +4 G1 424 0 425 0 +0 + +0101000 ++3379 0 -3245 0 * +Ed + 1e-07 1 1 0 +1 997 0 -10.5 -9.4999999935 +2 2237 424 0 -10.5 -9.4999999935 +4 G1 424 0 423 0 +0 + +0101000 ++3380 0 -3244 0 * +Ed + 0.0029973161977681 1 1 0 +1 998 0 2.36494886716e-12 126.615135948 +2 2238 424 0 2.36494886716e-12 126.615135948 +4 C0 424 0 460 0 +2 2239 460 0 2.36494886716e-12 126.615135948 +0 + +0101000 ++3245 0 -3244 0 * +Ed + 1e-07 1 1 0 +1 999 0 -19 -2.5000000055 +2 2240 237 0 -19 -2.5000000055 +4 G1 237 0 241 0 +2 2241 241 0 -19 -2.5000000055 +0 + +0101000 ++3579 111 -3243 0 * +Ed + 1e-07 1 1 0 +1 1000 0 -19 -2.5000000055 +2 2242 237 0 -19 -2.5000000055 +4 G1 237 0 242 0 +2 2243 242 0 -19 -2.5000000055 +0 + +0101000 ++3578 111 -3242 0 * +Ed + 1e-07 1 1 0 +1 1001 0 1.5707963267949 2.35619449019234 +2 2244 237 0 1.5707963267949 2.35619449019234 +4 C0 237 0 509 0 +2 2245 509 0 1.5707963267949 2.35619449019234 +0 + +0101000 ++3243 0 -3242 0 * +Ed + 1e-07 1 1 0 +1 1002 0 -8.2499999973 8.2499999972 +2 2246 268 0 -8.2499999973 8.2499999972 +4 G1 241 0 268 0 +2 2247 241 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3577 111 -3241 0 * +Ed + 1e-07 1 1 0 +1 1003 0 -32.8489256471 32.8491740574 +4 C0 241 0 509 0 +2 2248 241 0 -32.8489256471 32.8491740574 +2 2249 509 0 -32.8489256471 32.8491740574 +0 + +0101000 ++3241 0 -3243 0 * +Ed + 1e-07 1 1 0 +1 1004 0 -0.500000003300002 0.5000000032 +2 2250 417 0 -0.500000003300002 0.5000000032 +4 G1 416 0 417 0 +2 2251 416 0 -0.500000003300002 0.5000000032 +0 + +0101000 ++3240 0 -3387 0 * +Ed + 1e-07 1 1 0 +1 1005 0 -54.499751589699 54.500000000001 +4 C0 416 0 460 0 +2 2252 460 0 -54.499751589699 54.500000000001 +2 2253 416 0 -54.499751589699 54.500000000001 +0 + +0101000 ++3240 0 -3336 0 * +Ed + 1e-07 1 1 0 +1 1006 0 -8.2499999973 8.2499999972 +4 C0 242 0 272 0 +2 2254 242 0 -8.2499999973 8.2499999972 +2 2255 272 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3576 111 -3239 0 * +Ed + 1e-07 1 1 0 +1 1007 0 -3.58578643758061 3.58578643765132 +4 C0 242 0 509 0 +2 2256 242 0 -3.58578643758061 3.58578643765132 +2 2257 509 0 -3.58578643758061 3.58578643765132 +0 + +0101000 ++3239 0 -3242 0 * +Ed + 1e-07 1 1 0 +1 1008 0 -19 -2.5000000055 +2 2258 243 0 -19 -2.5000000055 +4 G1 243 0 246 0 +2 2259 246 0 -19 -2.5000000055 +0 + +0101000 ++3575 111 -3238 0 * +Ed + 1e-07 1 1 0 +1 1009 0 -19 -2.5000000055 +2 2260 243 0 -19 -2.5000000055 +4 G1 243 0 245 0 +2 2261 245 0 -19 -2.5000000055 +0 + +0101000 ++3574 111 -3237 0 * +Ed + 1e-07 1 1 0 +1 1010 0 3.92699081699431 4.71238898038469 +2 2262 243 0 3.92699081699431 4.71238898038469 +4 C0 243 0 509 0 +2 2263 509 0 3.92699081699431 4.71238898038469 +0 + +0101000 ++3238 0 -3237 0 * +Ed + 1e-07 1 1 0 +1 1011 0 -17.4 17.4 +4 C0 423 0 460 0 +2 2264 460 0 -17.4 17.4 +0 + +0101000 ++3244 0 -3247 0 * +Ed + 1e-07 1 1 0 +1 1012 0 -8.2499999973 8.2499999972 +2 2265 252 0 -8.2499999973 8.2499999972 +4 G1 245 0 252 0 +2 2266 245 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3573 111 -3236 0 * +Ed + 1e-07 1 1 0 +1 1013 0 -10.07893218817 10.07893218813 +4 C0 245 0 509 0 +2 2267 245 0 -10.07893218817 10.07893218813 +2 2268 509 0 -10.07893218817 10.07893218813 +0 + +0101000 ++3237 0 -3236 0 * +Ed + 1e-07 1 1 0 +1 1014 0 -8.2499999973 8.2499999972 +4 C0 246 0 251 0 +2 2269 246 0 -8.2499999973 8.2499999972 +2 2270 251 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3572 111 -3235 0 * +Ed + 1e-07 1 1 0 +1 1015 0 -3.58578643772203 3.58578643758061 +4 C0 246 0 509 0 +2 2271 246 0 -3.58578643772203 3.58578643758061 +2 2272 509 0 -3.58578643772203 3.58578643758061 +0 + +0101000 ++3238 0 -3235 0 * +Ed + 1e-07 1 1 0 +1 1016 0 -21.07275669483 21.07275669488 +4 C0 247 0 509 0 +2 2273 247 0 -21.07275669483 21.07275669488 +2 2274 509 0 -21.07275669483 21.07275669488 +0 + +0101000 ++3234 0 -3233 0 * +Ed + 1e-07 1 1 0 +1 1017 0 -8.2499999973 8.2499999972 +4 C0 247 0 251 0 +2 2275 247 0 -8.2499999973 8.2499999972 +2 2276 251 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3571 111 -3233 0 * +Ed + 1e-07 1 1 0 +1 1018 0 -8.2499999973 8.2499999972 +2 2277 248 0 -8.2499999973 8.2499999972 +4 G1 247 0 248 0 +2 2278 247 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3570 111 -3234 0 * +Ed + 2.29990299937802e-05 1 1 0 +1 1019 0 -18 -1.5000000055 +2 2279 248 0 -18 -1.5000000055 +4 G1 248 0 250 0 +2 2280 250 0 -18 -1.5000000055 +0 + +0101000 ++3569 111 -3232 0 * +Ed + 0.000144415167202496 1 1 0 +1 1020 0 0 42.1355454676 +2 2281 248 0 0 42.1355454676 +4 C0 248 0 509 0 +2 2282 509 0 0 42.1355454676 +0 + +0101000 ++3234 0 -3232 0 * +Ed + 1e-07 1 1 0 +1 1021 0 -1 1 +4 C0 425 0 460 0 +2 2283 460 0 -1 1 +0 + +0101000 ++3231 0 -3245 0 * +Ed + 1e-07 1 1 0 +1 1022 0 -0.500000003300002 0.5000000032 +2 2284 413 0 -0.500000003300002 0.5000000032 +4 G1 425 0 413 0 +0 + +0101000 ++3231 0 -3390 0 * +Ed + 1e-07 1 1 0 +1 1023 0 -1.0256020647 1.0256020751 +4 C0 250 0 509 0 +2 2285 250 0 -1.0256020647 1.0256020751 +2 2286 509 0 -1.0256020647 1.0256020751 +0 + +0101000 ++3230 0 -3232 0 * +Ed + 1e-07 1 1 0 +1 1024 0 -8.2499999973 8.2499999972 +2 2287 270 0 -8.2499999973 8.2499999972 +4 G1 250 0 270 0 +2 2288 250 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3568 111 -3230 0 * +Ed + 1e-07 1 1 0 +1 1025 0 -15.394965591 15.3949655911 +4 C0 251 0 509 0 +2 2289 251 0 -15.394965591 15.3949655911 +2 2290 509 0 -15.394965591 15.3949655911 +0 + +0101000 ++3233 0 -3235 0 * +Ed + 7.80303701318251e-06 1 1 0 +1 1026 0 -18 -1.5000000055 +2 2291 252 0 -18 -1.5000000055 +2 2292 263 0 -18 -1.5000000055 +4 G1 252 0 263 0 +0 + +0101000 ++3567 111 -3229 0 * +Ed + 0.000371546416342552 1 1 0 +1 1027 0 0 25.1995267348 +2 2293 252 0 0 25.1995267348 +4 C0 252 0 509 0 +2 2294 509 0 0 25.1995267348 +0 + +0101000 ++3229 0 -3236 0 * +Ed + 1e-07 1 1 0 +1 1028 0 -13.5 11.8 +2 2295 254 0 -13.5 11.8 +2 2296 256 0 -13.5 11.8 +4 CN 254 0 256 0 +0 + +0101000 ++3566 111 -3248 0 * +Ed + 1e-07 1 1 0 +1 1029 0 -13.5 11.8 +2 2297 254 0 -13.5 11.8 +2 2298 256 0 -13.5 11.8 +4 CN 254 0 256 0 +0 + +0101000 ++3565 111 -3249 0 * +Ed + 1e-07 1 1 0 +1 1030 0 -18 7.3 +2 2299 258 0 -18 7.3 +2 2300 260 0 -18 7.3 +4 CN 258 0 260 0 +0 + +0101000 ++3564 111 -3329 0 * +Ed + 1e-07 1 1 0 +1 1031 0 -18 7.3 +2 2301 258 0 -18 7.3 +2 2302 260 0 -18 7.3 +4 CN 258 0 260 0 +0 + +0101000 ++3563 111 -3330 0 * +Ed + 1e-07 1 1 0 +1 1032 0 -0.500000003300002 0.5000000032 +2 2303 421 0 -0.500000003300002 0.5000000032 +4 G1 420 0 421 0 +0 + +0101000 ++3228 0 -3383 0 * +Ed + 1e-07 1 1 0 +1 1033 0 -0.500000003300002 0.5000000032 +2 2304 419 0 -0.500000003300002 0.5000000032 +4 G1 420 0 419 0 +0 + +0101000 ++3227 0 -3384 0 * +Ed + 1e-07 1 1 0 +1 1034 0 -14.5100701232603 14.5100701232189 +4 C0 420 0 460 0 +2 2305 460 0 -14.5100701232603 14.5100701232189 +0 + +0101000 ++3228 0 -3227 0 * +Ed + 1e-07 1 1 0 +1 1035 0 -8.2499999973 8.2499999972 +2 2306 265 0 -8.2499999973 8.2499999972 +4 G1 262 0 265 0 +2 2307 262 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3562 111 -3226 0 * +Ed + 1e-07 1 1 0 +1 1036 0 -8.2499999973 8.2499999972 +2 2308 263 0 -8.2499999973 8.2499999972 +4 G1 262 0 263 0 +2 2309 262 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3561 111 -3225 0 * +Ed + 1e-07 1 1 0 +1 1037 0 -14.5100701232603 14.5100701232189 +4 C0 262 0 509 0 +2 2310 262 0 -14.5100701232603 14.5100701232189 +2 2311 509 0 -14.5100701232603 14.5100701232189 +0 + +0101000 ++3225 0 -3226 0 * +Ed + 1e-07 1 1 0 +1 1038 0 1.08210546427801 1.37058478051409 +2 2312 263 0 1.08210546427801 1.37058478051409 +4 C0 263 0 509 0 +2 2313 509 0 1.08210546427801 1.37058478051409 +0 + +0101000 ++3225 0 -3229 0 * +Ed + 1e-07 1 1 0 +1 1039 0 1.08210546427801 1.37058476272254 +2 2314 421 0 1.08210546427801 1.37058476272254 +4 C0 421 0 460 0 +2 2315 460 0 1.08210546427801 1.37058476272254 +0 + +0101000 ++3228 0 -3246 0 * +Ed + 1e-07 1 1 0 +1 1040 0 -43 -26.5000000055 +2 2316 265 0 -43 -26.5000000055 +4 G1 265 0 267 0 +2 2317 267 0 -43 -26.5000000055 +0 + +0101000 ++3560 111 -3224 0 * +Ed + 1e-07 1 1 0 +1 1041 0 6.28318075530153 7.36529251234008 +2 2318 265 0 6.28318075530153 7.36529251234008 +4 C0 265 0 509 0 +2 2319 509 0 6.28318075530153 7.36529251234008 +0 + +0101000 ++3224 0 -3226 0 * +Ed + 1e-07 1 1 0 +1 1042 0 0.999999993499998 2 +2 2320 419 0 0.999999993499998 2 +4 G1 419 0 418 0 +0 + +0101000 ++3223 0 -3385 0 * +Ed + 1e-07 1 1 0 +1 1043 0 6.28318075530153 7.36529251234008 +2 2321 419 0 6.28318075530153 7.36529251234008 +4 C0 419 0 460 0 +2 2322 460 0 6.28318075530153 7.36529251234008 +0 + +0101000 ++3223 0 -3227 0 * +Ed + 1e-07 1 1 0 +1 1044 0 -5.00074082596 5.00074082596 +4 C0 267 0 509 0 +2 2323 267 0 -5.00074082596 5.00074082596 +2 2324 509 0 -5.00074082596 5.00074082596 +0 + +0101000 ++3224 0 -3222 0 * +Ed + 1e-07 1 1 0 +1 1045 0 -8.2499999973 8.2499999972 +2 2325 268 0 -8.2499999973 8.2499999972 +4 G1 267 0 268 0 +2 2326 267 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3559 111 -3222 0 * +Ed + 1e-07 1 1 0 +1 1046 0 -5.00074082596 5.00074082596 +4 C0 418 0 460 0 +2 2327 460 0 -5.00074082596 5.00074082596 +0 + +0101000 ++3223 0 -3221 0 * +Ed + 1e-07 1 1 0 +1 1047 0 -0.500000003300002 0.5000000032 +2 2328 417 0 -0.500000003300002 0.5000000032 +4 G1 418 0 417 0 +0 + +0101000 ++3221 0 -3386 0 * +Ed + 1e-07 1 1 0 +1 1048 0 4.71238898038469 6.2831777796514 +2 2329 268 0 4.71238898038469 6.2831777796514 +4 C0 268 0 509 0 +2 2330 509 0 4.71238898038469 6.2831777796514 +0 + +0101000 ++3241 0 -3222 0 * +Ed + 1e-07 1 1 0 +1 1049 0 4.71238898038469 6.2831777796514 +2 2331 417 0 4.71238898038469 6.2831777796514 +4 C0 417 0 460 0 +2 2332 460 0 4.71238898038469 6.2831777796514 +0 + +0101000 ++3240 0 -3221 0 * +Ed + 1e-07 1 1 0 +1 1050 0 -43 -26.5000000055 +2 2333 270 0 -43 -26.5000000055 +4 G1 270 0 273 0 +2 2334 273 0 -43 -26.5000000055 +0 + +0101000 ++3558 111 -3220 0 * +Ed + 1e-07 1 1 0 +1 1051 0 3.14160018112023 3.92699081698724 +2 2335 270 0 3.14160018112023 3.92699081698724 +4 C0 270 0 509 0 +2 2336 509 0 3.14160018112023 3.92699081698724 +0 + +0101000 ++3230 0 -3220 0 * +Ed + 1e-07 1 1 0 +1 1052 0 3.14160018112023 3.92699081698724 +2 2337 413 0 3.14160018112023 3.92699081698724 +4 C0 413 0 460 0 +2 2338 460 0 3.14160018112023 3.92699081698724 +0 + +0101000 ++3231 0 -3335 0 * +Ed + 1e-07 1 1 0 +1 1053 0 -18 18 +4 C0 272 0 509 0 +2 2339 272 0 -18 18 +2 2340 509 0 -18 18 +0 + +0101000 ++3239 0 -3219 0 * +Ed + 1e-07 1 1 0 +1 1054 0 -8.2499999973 8.2499999972 +4 C0 272 0 273 0 +2 2341 272 0 -8.2499999973 8.2499999972 +2 2342 273 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3557 111 -3219 0 * +Ed + 1e-07 1 1 0 +1 1055 0 -12.077212795244 12.0772127953148 +4 C0 273 0 509 0 +2 2343 273 0 -12.077212795244 12.0772127953148 +2 2344 509 0 -12.077212795244 12.0772127953148 +0 + +0101000 ++3220 0 -3219 0 * +Ed + 1e-07 1 1 0 +1 1056 0 -43 -30.1 +2 2345 274 0 -43 -30.1 +2 2346 276 0 -43 -30.1 +4 CN 274 0 276 0 +0 + +0101000 ++3556 111 -3356 0 * +Ed + 1e-07 1 1 0 +1 1057 0 -43 -30.1 +2 2347 274 0 -43 -30.1 +2 2348 276 0 -43 -30.1 +4 CN 274 0 276 0 +0 + +0101000 ++3555 111 -3355 0 * +Ed + 1e-07 1 1 0 +1 1058 0 -43 -30.1 +2 2349 278 0 -43 -30.1 +2 2350 280 0 -43 -30.1 +4 CN 278 0 280 0 +0 + +0101000 ++3554 111 -3364 0 * +Ed + 1e-07 1 1 0 +1 1059 0 -43 -30.1 +2 2351 278 0 -43 -30.1 +2 2352 280 0 -43 -30.1 +4 CN 278 0 280 0 +0 + +0101000 ++3553 111 -3363 0 * +Ed + 1e-07 1 1 0 +1 1060 0 -4.06170644753603 -3.04627983564482 +2 2353 282 0 -4.06170644753603 -3.04627983564482 +2 2354 284 0 -4.06170644753603 -3.04627983564482 +4 CN 282 0 284 0 +0 + +0101000 ++3394 0 -3552 111 * +Ed + 1e-07 1 1 0 +1 1061 0 -4.06170644753603 -3.04627983564482 +2 2355 282 0 -4.06170644753603 -3.04627983564482 +2 2356 284 0 -4.06170644753603 -3.04627983564482 +4 CN 282 0 284 0 +0 + +0101000 ++3395 0 -3551 111 * +Ed + 1e-07 1 1 0 +1 1062 0 3.36936457992371 6.02216841770877 +2 2357 286 0 3.36936457992371 6.02216841770877 +4 C0 286 0 510 0 +2 2358 510 0 3.36936457992371 6.02216841770877 +0 + +0101000 ++3218 0 -3217 0 * +Ed + 1.40961161397861e-05 1 1 0 +1 1063 0 -3 3 +2 2359 286 0 -3 3 +2 2360 310 0 -3 3 +4 G1 286 0 310 0 +0 + +0101000 ++3550 0 -3218 0 * +Ed + 8.25197284423225e-06 1 1 0 +1 1064 0 -3 3 +2 2361 286 0 -3 3 +2 2362 287 0 -3 3 +4 G1 286 0 287 0 +0 + +0101000 ++3549 0 -3217 0 * +Ed + 1e-07 1 1 0 +1 1065 0 0.261014556239196 1.57080350359134 +2 2363 287 0 0.261014556239196 1.57080350359134 +4 C0 287 0 510 0 +2 2364 510 0 0.261014556239196 1.57080350359134 +0 + +0101000 ++3217 0 -3216 0 * +Ed + 1.50991509780834e-06 1 1 0 +1 1066 0 -3 3 +2 2365 287 0 -3 3 +4 G1 287 0 298 0 +2 2366 298 0 -3 3 +0 + +0101000 ++3216 0 -3548 0 * +Ed + 1.47353993359151e-05 1 1 0 +1 1067 0 -3 3 +2 2367 288 0 -3 3 +2 2368 308 0 -3 3 +4 G1 288 0 308 0 +0 + +0101000 ++3547 0 -3215 0 * +Ed + 1e-07 1 1 0 +1 1068 0 4.97340472328349 7.62620808526193 +2 2369 288 0 4.97340472328349 7.62620808526193 +4 C0 288 0 510 0 +2 2370 510 0 4.97340472328349 7.62620808526193 +0 + +0101000 ++3214 0 -3215 0 * +Ed + 2.41813512096272e-06 1 1 0 +1 1069 0 -3 3 +2 2371 288 0 -3 3 +2 2372 289 0 -3 3 +4 G1 288 0 289 0 +0 + +0101000 ++3546 0 -3214 0 * +Ed + 2.23812238144012e-06 1 1 0 +1 1070 0 -3 3 +2 2373 289 0 -3 3 +4 G1 289 0 290 0 +0 + +0101000 ++3213 0 -3545 0 * +Ed + 1e-07 1 1 0 +1 1071 0 4.71238684952582 6.02216753358045 +2 2374 289 0 4.71238684952582 6.02216753358045 +4 C0 289 0 510 0 +2 2375 510 0 4.71238684952582 6.02216753358045 +0 + +0101000 ++3213 0 -3214 0 * +Ed + 1e-07 1 1 0 +1 1072 0 -9.112829280824 9.112829280866 +4 C0 290 0 510 0 +2 2376 510 0 -9.112829280824 9.112829280866 +0 + +0101000 ++3212 0 -3213 0 * +Ed + 1e-07 1 1 0 +1 1073 0 -3 3 +2 2377 291 0 -3 3 +4 G1 290 0 291 0 +0 + +0101000 ++3212 0 -3544 0 * +Ed + 4.85179791956173e-05 1 1 0 +1 1074 0 -3 3 +2 2378 291 0 -3 3 +2 2379 292 0 -3 3 +4 G1 291 0 292 0 +0 + +0101000 ++3211 0 -3543 0 * +Ed + 1e-07 1 1 0 +1 1075 0 5.62339632756916 6.28318555497329 +2 2380 291 0 5.62339632756916 6.28318555497329 +4 C0 291 0 510 0 +2 2381 510 0 5.62339632756916 6.28318555497329 +0 + +0101000 ++3211 0 -3212 0 * +Ed + 1e-07 1 1 0 +1 1076 0 5.76968060598598 8.51377241120863 +2 2382 292 0 5.76968060598598 8.51377241120863 +4 C0 292 0 510 0 +2 2383 510 0 5.76968060598598 8.51377241120863 +0 + +0101000 ++3210 0 -3211 0 * +Ed + 9.78915945777831e-05 1 1 0 +1 1077 0 -3 3 +2 2384 292 0 -3 3 +2 2385 293 0 -3 3 +4 G1 292 0 293 0 +0 + +0101000 ++3542 0 -3210 0 * +Ed + 1e-07 1 1 0 +1 1078 0 2.26786938450668 4.19889026528999 +2 2386 293 0 2.26786938450668 4.19889026528999 +4 C0 293 0 510 0 +2 2387 510 0 2.26786938450668 4.19889026528999 +0 + +0101000 ++3209 0 -3210 0 * +Ed + 3.57702388541758e-06 1 1 0 +1 1079 0 -3 3 +2 2388 293 0 -3 3 +2 2389 294 0 -3 3 +4 G1 293 0 294 0 +0 + +0101000 ++3541 0 -3209 0 * +Ed + 2.12502128371508e-07 1 1 0 +1 1080 0 -3 3 +2 2390 294 0 -3 3 +4 G1 294 0 295 0 +2 2391 295 0 -3 3 +0 + +0101000 ++3208 0 -3540 0 * +Ed + 1e-07 1 1 0 +1 1081 0 3.14159191774445 4.01532011888745 +2 2392 294 0 3.14159191774445 4.01532011888745 +4 C0 294 0 510 0 +2 2393 510 0 3.14159191774445 4.01532011888745 +0 + +0101000 ++3208 0 -3209 0 * +Ed + 1e-07 1 1 0 +1 1082 0 -5.9988333129 5.99883331295 +4 C0 295 0 510 0 +2 2394 510 0 -5.9988333129 5.99883331295 +2 2395 295 0 -5.9988333129 5.99883331295 +0 + +0101000 ++3208 0 -3207 0 * +Ed + 2.05688140848502e-06 1 1 0 +1 1083 0 -3 3 +2 2396 296 0 -3 3 +4 G1 295 0 296 0 +2 2397 295 0 -3 3 +0 + +0101000 ++3207 0 -3539 0 * +Ed + 2.61637537467713e-06 1 1 0 +1 1084 0 -3 3 +2 2398 296 0 -3 3 +2 2399 297 0 -3 3 +4 G1 296 0 297 0 +0 + +0101000 ++3206 0 -3538 0 * +Ed + 1e-07 1 1 0 +1 1085 0 0.26101778683788 1.57079847327706 +2 2400 296 0 0.26101778683788 1.57079847327706 +4 C0 296 0 510 0 +2 2401 510 0 0.26101778683788 1.57079847327706 +0 + +0101000 ++3206 0 -3207 0 * +Ed + 1e-07 1 1 0 +1 1086 0 1.79856987679419 4.45137323575428 +2 2402 297 0 1.79856987679419 4.45137323575428 +4 C0 297 0 510 0 +2 2403 510 0 1.79856987679419 4.45137323575428 +0 + +0101000 ++3205 0 -3206 0 * +Ed + 1.4535112141792e-05 1 1 0 +1 1087 0 -3 3 +2 2404 297 0 -3 3 +2 2405 312 0 -3 3 +4 G1 297 0 312 0 +0 + +0101000 ++3537 0 -3205 0 * +Ed + 1e-07 1 1 0 +1 1088 0 -5.9988333129 5.99883331295 +4 C0 298 0 510 0 +2 2406 510 0 -5.9988333129 5.99883331295 +2 2407 298 0 -5.9988333129 5.99883331295 +0 + +0101000 ++3204 0 -3216 0 * +Ed + 2.04518801056886e-06 1 1 0 +1 1089 0 -3 3 +2 2408 299 0 -3 3 +4 G1 298 0 299 0 +2 2409 298 0 -3 3 +0 + +0101000 ++3536 0 -3204 0 * +Ed + 1e-07 1 1 0 +1 1090 0 3.14159880502311 4.01531527702699 +2 2410 299 0 3.14159880502311 4.01531527702699 +4 C0 299 0 510 0 +2 2411 510 0 3.14159880502311 4.01531527702699 +0 + +0101000 ++3204 0 -3203 0 * +Ed + 3.89399877296503e-06 1 1 0 +1 1091 0 -3 3 +2 2412 299 0 -3 3 +2 2413 300 0 -3 3 +4 G1 299 0 300 0 +0 + +0101000 ++3203 0 -3535 0 * +Ed + 1e-07 1 1 0 +1 1092 0 2.26786873982048 4.19889010491378 +2 2414 300 0 2.26786873982048 4.19889010491378 +4 C0 300 0 510 0 +2 2415 510 0 2.26786873982048 4.19889010491378 +0 + +0101000 ++3203 0 -3202 0 * +Ed + 0.000140504468508401 1 1 0 +1 1093 0 -3 3 +2 2416 300 0 -3 3 +2 2417 301 0 -3 3 +4 G1 300 0 301 0 +0 + +0101000 ++3534 0 -3202 0 * +Ed + 1e-07 1 1 0 +1 1094 0 5.76968031548267 8.51377368083406 +2 2418 301 0 5.76968031548267 8.51377368083406 +4 C0 301 0 510 0 +2 2419 510 0 5.76968031548267 8.51377368083406 +0 + +0101000 ++3202 0 -3201 0 * +Ed + 7.59962679524456e-05 1 1 0 +1 1095 0 -3 3 +2 2420 301 0 -3 3 +2 2421 302 0 -3 3 +4 G1 301 0 302 0 +0 + +0101000 ++3533 0 -3201 0 * +Ed + 1e-07 1 1 0 +1 1096 0 5.62340191545187 6.28317744086674 +2 2422 302 0 5.62340191545187 6.28317744086674 +4 C0 302 0 510 0 +2 2423 510 0 5.62340191545187 6.28317744086674 +0 + +0101000 ++3201 0 -3200 0 * +Ed + 1.70641706663236e-06 1 1 0 +1 1097 0 -3 3 +2 2424 302 0 -3 3 +4 G1 302 0 303 0 +0 + +0101000 ++3200 0 -3532 0 * +Ed + 1.03725141244299e-06 1 1 0 +1 1098 0 -3 3 +2 2425 304 0 -3 3 +4 G1 303 0 304 0 +0 + +0101000 ++3531 0 -3199 0 * +Ed + 1e-07 1 1 0 +1 1099 0 -9.112829280834 9.112829280866 +4 C0 303 0 510 0 +2 2426 510 0 -9.112829280834 9.112829280866 +0 + +0101000 ++3200 0 -3199 0 * +Ed + 1e-07 1 1 0 +1 1100 0 4.71238219726724 6.02217051383227 +2 2427 304 0 4.71238219726724 6.02217051383227 +4 C0 304 0 510 0 +2 2428 510 0 4.71238219726724 6.02217051383227 +0 + +0101000 ++3199 0 -3198 0 * +Ed + 7.88856919964979e-06 1 1 0 +1 1101 0 -3 3 +2 2429 304 0 -3 3 +2 2430 305 0 -3 3 +4 G1 304 0 305 0 +0 + +0101000 ++3198 0 -3530 0 * +Ed + 1e-07 1 1 0 +1 1102 0 4.97340586833326 7.62620970947703 +2 2431 305 0 4.97340586833326 7.62620970947703 +4 C0 305 0 510 0 +2 2432 510 0 4.97340586833326 7.62620970947703 +0 + +0101000 ++3198 0 -3197 0 * +Ed + 1.45373227877628e-05 1 1 0 +1 1103 0 -3 3 +2 2433 305 0 -3 3 +2 2434 306 0 -3 3 +4 G1 305 0 306 0 +0 + +0101000 ++3529 0 -3197 0 * +Ed + 1e-07 1 1 0 +1 1104 0 4.94016157096724 5.85340783632177 +2 2435 306 0 4.94016157096724 5.85340783632177 +4 C0 306 0 510 0 +2 2436 510 0 4.94016157096724 5.85340783632177 +0 + +0101000 ++3197 0 -3196 0 * +Ed + 1e-07 1 1 0 +1 1105 0 -3 3 +2 2437 306 0 -3 3 +2 2438 307 0 -3 3 +4 G1 306 0 307 0 +0 + +0101000 ++3196 0 -3528 0 * +Ed + 1e-07 1 1 0 +1 1106 0 2.00057379765641 3.14159789052979 +2 2439 307 0 2.00057379765641 3.14159789052979 +4 C0 307 0 510 0 +2 2440 510 0 2.00057379765641 3.14159789052979 +0 + +0101000 ++3196 0 -3195 0 * +Ed + 1e-07 1 1 0 +1 1107 0 -3 3 +2 2441 307 0 -3 3 +2 2442 309 0 -3 3 +4 C1 307 0 309 0 +0 + +0101000 ++3527 0 -3195 0 * +Ed + 1e-07 1 1 0 +1 1108 0 3.36935871814427 4.28261523415942 +2 2443 308 0 3.36935871814427 4.28261523415942 +4 C0 308 0 510 0 +2 2444 510 0 3.36935871814427 4.28261523415942 +0 + +0101000 ++3215 0 -3194 0 * +Ed + 1e-07 1 1 0 +1 1109 0 -3 3 +2 2445 308 0 -3 3 +2 2446 309 0 -3 3 +4 G1 308 0 309 0 +0 + +0101000 ++3194 0 -3526 0 * +Ed + 1e-07 1 1 0 +1 1110 0 3.14159265358979 5.1421627266205 +2 2447 309 0 3.14159265358979 5.1421627266205 +4 C0 309 0 510 0 +2 2448 510 0 3.14159265358979 5.1421627266205 +0 + +0101000 ++3195 0 -3194 0 * +Ed + 1e-07 1 1 0 +1 1111 0 3.57136993044971 4.48461715389789 +2 2449 310 0 3.57136993044971 4.48461715389789 +4 C0 310 0 510 0 +2 2450 510 0 3.57136993044971 4.48461715389789 +0 + +0101000 ++3193 0 -3218 0 * +Ed + 1e-07 1 1 0 +1 1112 0 -3 3 +2 2451 310 0 -3 3 +2 2452 311 0 -3 3 +4 G1 310 0 311 0 +0 + +0101000 ++3193 0 -3525 0 * +Ed + 1e-07 1 1 0 +1 1113 0 1.5707913744749 2.71181537673332 +2 2453 311 0 1.5707913744749 2.71181537673332 +4 C0 311 0 510 0 +2 2454 510 0 1.5707913744749 2.71181537673332 +0 + +0101000 ++3192 0 -3193 0 * +Ed + 1e-07 1 1 0 +1 1114 0 -3 3 +2 2455 311 0 -3 3 +2 2456 313 0 -3 3 +4 C1 311 0 313 0 +0 + +0101000 ++3524 0 -3192 0 * +Ed + 1e-07 1 1 0 +1 1115 0 2.00057009763912 2.91382659537874 +2 2457 312 0 2.00057009763912 2.91382659537874 +4 C0 312 0 510 0 +2 2458 510 0 2.00057009763912 2.91382659537874 +0 + +0101000 ++3191 0 -3205 0 * +Ed + 1e-07 1 1 0 +1 1116 0 -3 3 +2 2459 312 0 -3 3 +2 2460 313 0 -3 3 +4 G1 312 0 313 0 +0 + +0101000 ++3191 0 -3523 0 * +Ed + 1e-07 1 1 0 +1 1117 0 1.14102255593934 3.14159265358979 +2 2461 313 0 1.14102255593934 3.14159265358979 +4 C0 510 0 313 0 +2 2462 510 0 1.14102255593934 3.14159265358979 +0 + +0101000 ++3191 0 -3192 0 * +Ed + 1e-07 1 1 0 +1 1118 0 -20.5402785278643 20.5402785280463 +4 C0 511 0 509 0 +2 2463 509 0 -20.5402785278643 20.5402785280463 +0 + +0101000 ++3190 0 -3189 0 * +Ed + 1e-07 1 1 0 +1 1119 0 -13.75 13.75 +4 C0 511 0 512 0 +0 + +0101000 ++3189 0 -3188 0 * +Ed + 1e-07 1 1 0 +1 1120 0 -20.5402785278643 20.5402785280463 +4 C0 511 0 460 0 +2 2464 460 0 -20.5402785278643 20.5402785280463 +0 + +0101000 ++3187 0 -3188 0 * +Ed + 1e-07 1 1 0 +1 1121 0 -13.75 13.75 +4 C0 511 0 513 0 +0 + +0101000 ++3190 0 -3187 0 * +Ed + 1e-07 1 1 0 +1 1122 0 -4.5000000008 4.50000000129999 +4 C0 511 0 514 0 +0 + +0101000 ++3186 0 -3185 0 * +Ed + 1e-07 1 1 0 +1 1123 0 -13.5000021184201 13.5000021183803 +4 C0 511 0 515 0 +0 + +0101000 ++3185 0 -3184 0 * +Ed + 1e-07 1 1 0 +1 1124 0 -4.5000000008 4.50000000129999 +4 C0 511 0 516 0 +0 + +0101000 ++3183 0 -3184 0 * +Ed + 1e-07 1 1 0 +1 1125 0 -13.5000021197232 13.5000021197132 +4 C0 511 0 517 0 +0 + +0101000 ++3186 0 -3183 0 * +Ed + 1e-07 1 1 0 +1 1126 0 -13.7499999995 13.7500000005 +4 C0 518 0 512 0 +2 2465 518 0 -13.7499999995 13.7500000005 +0 + +0101000 ++3182 0 -3181 0 * +Ed + 1e-07 1 1 0 +1 1127 0 -18.94396632212 18.94396632214 +4 C0 518 0 509 0 +2 2466 509 0 -18.94396632212 18.94396632214 +2 2467 518 0 -18.94396632212 18.94396632214 +0 + +0101000 ++3180 0 -3182 0 * +Ed + 1e-07 1 1 0 +1 1128 0 -13.7499999995 13.7500000005 +4 C0 518 0 519 0 +2 2468 518 0 -13.7499999995 13.7500000005 +0 + +0101000 ++3180 0 -3179 0 * +Ed + 1e-07 1 1 0 +1 1129 0 -18.94396632212 18.94396632214 +4 C0 518 0 460 0 +2 2469 460 0 -18.94396632212 18.94396632214 +2 2470 518 0 -18.94396632212 18.94396632214 +0 + +0101000 ++3179 0 -3181 0 * +Ed + 1e-07 1 1 0 +1 1130 0 -6.0839069559267 6.08390695671222 +4 C0 520 0 460 0 +2 2471 460 0 -6.0839069559267 6.08390695671222 +0 + +0101000 ++3178 0 -3177 0 * +Ed + 1e-07 1 1 0 +1 1131 0 -13.75 13.75 +4 C0 520 0 521 0 +0 + +0101000 ++3176 0 -3178 0 * +Ed + 1e-07 1 1 0 +1 1132 0 -6.0839069559267 6.08390695671222 +4 C0 520 0 509 0 +2 2472 509 0 -6.0839069559267 6.08390695671222 +0 + +0101000 ++3176 0 -3175 0 * +Ed + 1e-07 1 1 0 +1 1133 0 -13.75 13.75 +4 C0 520 0 522 0 +0 + +0101000 ++3175 0 -3177 0 * +Ed + 1e-07 1 1 0 +1 1134 0 -20.7699751372929 20.769975137091 +4 C0 521 0 509 0 +2 2473 509 0 -20.7699751372929 20.769975137091 +0 + +0101000 ++3174 0 -3176 0 * +Ed + 1e-07 1 1 0 +1 1135 0 -20.7699751372929 20.769975137091 +4 C0 521 0 460 0 +2 2474 460 0 -20.7699751372929 20.769975137091 +0 + +0101000 ++3173 0 -3178 0 * +Ed + 1e-07 1 1 0 +1 1136 0 -13.75 13.75 +4 C0 521 0 523 0 +0 + +0101000 ++3174 0 -3173 0 * +Ed + 1e-07 1 1 0 +1 1137 0 -4.50000000129999 4.5000000008 +4 C0 521 0 524 0 +0 + +0101000 ++3172 0 -3171 0 * +Ed + 1e-07 1 1 0 +1 1138 0 -12.5000019588735 12.5000019590048 +4 C0 521 0 525 0 +0 + +0101000 ++3170 0 -3172 0 * +Ed + 1e-07 1 1 0 +1 1139 0 -4.5000000012 4.50000000089999 +4 C0 521 0 526 0 +0 + +0101000 ++3170 0 -3169 0 * +Ed + 1e-07 1 1 0 +1 1140 0 -12.5000019618895 12.5000019618985 +4 C0 521 0 527 0 +0 + +0101000 ++3171 0 -3169 0 * +Ed + 1e-07 1 1 0 +1 1141 0 -5.76265920441119 5.76265920531662 +4 C0 523 0 509 0 +2 2475 509 0 -5.76265920441119 5.76265920531662 +0 + +0101000 ++3168 0 -3174 0 * +Ed + 1e-07 1 1 0 +1 1142 0 -5.76265920441119 5.76265920531662 +4 C0 523 0 460 0 +2 2476 460 0 -5.76265920441119 5.76265920531662 +0 + +0101000 ++3167 0 -3173 0 * +Ed + 1e-07 1 1 0 +1 1143 0 -13.75 13.75 +4 C0 523 0 528 0 +0 + +0101000 ++3168 0 -3167 0 * +Ed + 1e-07 1 1 0 +1 1144 0 -23.2784923884453 23.2784923884125 +4 C0 529 0 509 0 +2 2477 509 0 -23.2784923884453 23.2784923884125 +0 + +0101000 ++3166 0 -3165 0 * +Ed + 1e-07 1 1 0 +1 1145 0 -13.75 13.75 +4 C0 529 0 530 0 +0 + +0101000 ++3165 0 -3164 0 * +Ed + 1e-07 1 1 0 +1 1146 0 -23.2784923884453 23.2784923884125 +4 C0 529 0 460 0 +2 2478 460 0 -23.2784923884453 23.2784923884125 +0 + +0101000 ++3163 0 -3164 0 * +Ed + 1e-07 1 1 0 +1 1147 0 -13.75 13.75 +4 C0 529 0 519 0 +0 + +0101000 ++3166 0 -3163 0 * +Ed + 1e-07 1 1 0 +1 1148 0 -15.5249247938377 15.5249247938348 +4 C0 529 0 531 0 +0 + +0101000 ++3162 0 -3161 0 * +Ed + 1e-07 1 1 0 +1 1149 0 -4.5000000006 4.4999999969 +4 C0 529 0 532 0 +0 + +0101000 ++3160 0 -3162 0 * +Ed + 1e-07 1 1 0 +1 1150 0 -15.5249247976207 15.5249247975182 +4 C0 529 0 533 0 +0 + +0101000 ++3160 0 -3159 0 * +Ed + 1e-07 1 1 0 +1 1151 0 -4.4999999992 4.4999999983 +4 C0 529 0 534 0 +0 + +0101000 ++3159 0 -3161 0 * +Ed + 1e-07 1 1 0 +1 1152 0 -50.5308763546284 50.5308763542153 +4 C0 519 0 509 0 +2 2479 509 0 -50.5308763546284 50.5308763542153 +0 + +0101000 ++3180 0 -3166 0 * +Ed + 1e-07 1 1 0 +1 1153 0 -50.5308763546284 50.5308763542153 +4 C0 519 0 460 0 +2 2480 460 0 -50.5308763546284 50.5308763542153 +0 + +0101000 ++3179 0 -3163 0 * +Ed + 1e-07 1 1 0 +1 1154 0 -51.6599504805506 51.6599504803661 +4 C0 512 0 460 0 +2 2481 460 0 -51.6599504805506 51.6599504803661 +0 + +0101000 ++3188 0 -3181 0 * +Ed + 1e-07 1 1 0 +1 1155 0 -51.6599504805506 51.6599504803661 +4 C0 512 0 509 0 +2 2482 509 0 -51.6599504805506 51.6599504803661 +0 + +0101000 ++3189 0 -3182 0 * +Ed + 1e-07 1 1 0 +1 1156 0 -5.9999999975 3 +2 2483 535 0 -5.9999999975 3 +2 2484 536 0 -5.9999999975 3 +4 CN 535 0 536 0 +0 + +0101000 ++3158 0 -3157 0 * +Ed + 1e-07 1 1 0 +1 1157 0 5.833823433145 6.55783945612737 +2 2485 535 0 5.833823433145 6.55783945612737 +4 C0 535 0 531 0 +0 + +0101000 ++3156 0 -3157 0 * +Ed + 1e-07 1 1 0 +1 1158 0 -5.9999999975 3 +2 2486 535 0 -5.9999999975 3 +2 2487 537 0 -5.9999999975 3 +4 C0 535 0 537 0 +0 + +0101000 ++3155 0 -3156 0 * +Ed + 1e-07 1 1 0 +1 1159 0 5.833823433145 6.55783945554926 +2 2488 535 0 5.833823433145 6.55783945554926 +4 C0 535 0 533 0 +0 + +0101000 ++3155 0 -3158 0 * +Ed + 1e-07 1 1 0 +1 1160 0 6.0079564744714 6.71862335544013 +2 2489 537 0 6.0079564744714 6.71862335544013 +4 C0 537 0 533 0 +0 + +0101000 ++3155 0 -3154 0 * +Ed + 1e-07 1 1 0 +1 1161 0 5.92215045966731 6.0079564744714 +2 2490 537 0 5.92215045966731 6.0079564744714 +4 C0 537 0 531 0 +0 + +0101000 ++3153 0 -3156 0 * +Ed + 1e-07 1 1 0 +1 1162 0 -6.0000000011 12.0000000031 +2 2491 537 0 -6.0000000011 12.0000000031 +4 G1 537 0 538 0 +0 + +0101000 ++3152 0 -3153 0 * +Ed + 1e-07 1 1 0 +1 1163 0 5.92215045975281 9.06374311335074 +2 2492 537 0 5.92215045975281 9.06374311335074 +4 C0 537 0 460 0 +2 2493 460 0 5.92215045975281 9.06374311335074 +0 + +0101000 ++3152 0 -3151 0 * +Ed + 1e-07 1 1 0 +1 1164 0 -6.0000000011 3.0000000056 +2 2494 537 0 -6.0000000011 3.0000000056 +4 G1 537 0 539 0 +0 + +0101000 ++3151 0 -3150 0 * +Ed + 1e-07 1 1 0 +1 1165 0 0.435438048260542 2.78055780620983 +2 2495 537 0 0.435438048260542 2.78055780620983 +4 C0 537 0 533 0 +0 + +0101000 ++3154 0 -3150 0 * +Ed + 1e-07 1 1 0 +1 1166 0 -4.4999999985 4.4999999993 +2 2496 540 0 -4.4999999985 4.4999999993 +4 G1 539 0 540 0 +0 + +0101000 ++3149 0 -3148 0 * +Ed + 1e-07 1 1 0 +1 1167 0 -2.49998617245052 2.49998617254683 +4 C0 539 0 460 0 +2 2497 460 0 -2.49998617245052 2.49998617254683 +0 + +0101000 ++3149 0 -3151 0 * +Ed + 1e-07 1 1 0 +1 1168 0 -2.49998617159612 2.49998617295637 +4 C0 539 0 533 0 +0 + +0101000 ++3148 0 -3150 0 * +Ed + 1e-07 1 1 0 +1 1169 0 2.78055540160346 5.83382343316794 +2 2498 540 0 2.78055540160346 5.83382343316794 +4 C0 540 0 533 0 +0 + +0101000 ++3148 0 -3147 0 * +Ed + 5.66660184374918e-05 1 1 0 +1 1170 0 -18.0641577569 18.0641577569 +2 2499 540 0 -18.0641577569 18.0641577569 +4 C0 540 0 460 0 +2 2500 460 0 -18.0641577569 18.0641577569 +0 + +0101000 ++3149 0 -3146 0 * +Ed + 1e-07 1 1 0 +1 1171 0 -5.999999996 12.0000000031 +2 2501 540 0 -5.999999996 12.0000000031 +4 G1 540 0 538 0 +0 + +0101000 ++3146 0 -3145 0 * +Ed + 1e-07 1 1 0 +1 1172 0 5.83382343279854 5.92214805518512 +2 2502 540 0 5.83382343279854 5.92214805518512 +4 C0 540 0 531 0 +0 + +0101000 ++3144 0 -3145 0 * +Ed + 1e-07 1 1 0 +1 1173 0 3.0000000056 12.0000000031 +2 2503 540 0 3.0000000056 12.0000000031 +2 2504 541 0 3.0000000056 12.0000000031 +4 C0 540 0 541 0 +0 + +0101000 ++3147 0 -3144 0 * +Ed + 1e-07 1 1 0 +1 1174 0 -2.50000691186715 2.50002073720383 +4 C0 538 0 531 0 +0 + +0101000 ++3153 0 -3145 0 * +Ed + 1e-07 1 1 0 +1 1175 0 -2.50000000107317 2.50002764898108 +4 C0 538 0 460 0 +2 2505 460 0 -2.50000000107317 2.50002764898108 +0 + +0101000 ++3152 0 -3146 0 * +Ed + 1e-07 1 1 0 +1 1176 0 -6.0000000038 2.9999999937 +2 2506 541 0 -6.0000000038 2.9999999937 +4 G1 541 0 532 0 +0 + +0101000 ++3143 0 -3142 0 * +Ed + 1e-07 1 1 0 +1 1177 0 4.81444151770099 6.00795647526926 +2 2507 541 0 4.81444151770099 6.00795647526926 +4 C0 541 0 533 0 +0 + +0101000 ++3143 0 -3147 0 * +Ed + 1e-07 1 1 0 +1 1178 0 4.81444151764226 6.00795647490636 +2 2508 541 0 4.81444151764226 6.00795647490636 +4 C0 541 0 531 0 +0 + +0101000 ++3142 0 -3144 0 * +Ed + 1e-07 1 1 0 +1 1179 0 -6.0000000019 2.9999999956 +2 2509 536 0 -6.0000000019 2.9999999956 +4 G1 536 0 534 0 +0 + +0101000 ++3141 0 -3140 0 * +Ed + 1e-07 1 1 0 +1 1180 0 0.274654147941844 1.67284886365817 +2 2510 536 0 0.274654147941844 1.67284886365817 +4 C0 536 0 531 0 +0 + +0101000 ++3157 0 -3140 0 * +Ed + 1e-07 1 1 0 +1 1181 0 0.27465414735536 1.6728488636203 +2 2511 536 0 0.27465414735536 1.6728488636203 +4 C0 536 0 533 0 +0 + +0101000 ++3158 0 -3141 0 * +Ed + 1e-07 1 1 0 +1 1182 0 -13.9348600060298 13.9348600042042 +4 C0 534 0 531 0 +0 + +0101000 ++3140 0 -3161 0 * +Ed + 1e-07 1 1 0 +1 1183 0 -13.9348600062664 13.9348600058426 +4 C0 534 0 533 0 +0 + +0101000 ++3141 0 -3159 0 * +Ed + 1e-07 1 1 0 +1 1184 0 -11.9137013844669 11.9137013840588 +4 C0 532 0 533 0 +0 + +0101000 ++3143 0 -3160 0 * +Ed + 1e-07 1 1 0 +1 1185 0 -11.9137013837916 11.9137013838755 +4 C0 532 0 531 0 +0 + +0101000 ++3142 0 -3162 0 * +Ed + 0.00061520457868217 1 1 0 +1 1186 0 4.45248174893 10.7356670561 +2 2512 542 0 4.45248174893 10.7356670561 +4 C0 533 0 542 0 +0 + +0101000 ++3139 0 -3138 0 * +Ed + 0.000615204615200856 1 1 0 +1 1187 0 10.7356670561 17.0188523633 +2 2513 543 0 10.7356670561 17.0188523633 +4 C0 533 0 543 0 +0 + +0101000 ++3138 0 -3139 0 * +Ed + 0.000615204578661866 1 1 0 +1 1188 0 0.976811777701 7.25999708488 +2 2514 544 0 0.976811777701 7.25999708488 +4 C0 531 0 544 0 +0 + +0101000 ++3137 0 -3136 0 * +Ed + 0.000615204615486993 1 1 0 +1 1189 0 7.25999708488 13.5431823921 +2 2515 545 0 7.25999708488 13.5431823921 +4 C0 531 0 545 0 +0 + +0101000 ++3136 0 -3137 0 * +Ed + 2.46374048269097e-05 1 1 0 +1 1190 0 8.43981677907 24.147780047 +2 2516 546 0 8.43981677907 24.147780047 +4 C0 531 0 546 0 +0 + +0101000 ++3135 0 -3134 0 * +Ed + 2.46374046298577e-05 1 1 0 +1 1191 0 24.147780047 39.855743315 +2 2517 547 0 24.147780047 39.855743315 +4 C0 531 0 547 0 +0 + +0101000 ++3134 0 -3135 0 * +Ed + 1e-07 1 1 0 +1 1192 0 8.9999999954 18.4999999997 +2 2518 547 0 8.9999999954 18.4999999997 +2 2519 546 0 8.9999999954 18.4999999997 +4 CN 547 0 546 0 +0 + +0101000 ++3134 0 -3133 0 * +Ed + 1e-07 1 1 0 +1 1193 0 8.9999999954 18.4999999997 +2 2520 547 0 8.9999999954 18.4999999997 +2 2521 546 0 8.9999999954 18.4999999997 +4 CN 547 0 546 0 +0 + +0101000 ++3135 0 -3132 0 * +Ed + 1e-07 1 1 0 +1 1194 0 0.219779790601005 3.3613724441908 +2 2522 547 0 0.219779790601005 3.3613724441908 +4 C0 547 0 509 0 +2 2523 509 0 0.219779790601005 3.3613724441908 +0 + +0101000 ++3133 0 -3132 0 * +Ed + 1e-07 1 1 0 +1 1195 0 3.3613724441908 6.50296509778059 +2 2524 546 0 3.3613724441908 6.50296509778059 +4 C0 546 0 509 0 +2 2525 509 0 3.3613724441908 6.50296509778059 +0 + +0101000 ++3132 0 -3133 0 * +Ed + 1e-07 1 1 0 +1 1196 0 -16 -8 +2 2526 543 0 -16 -8 +2 2527 542 0 -16 -8 +4 CN 543 0 542 0 +0 + +0101000 ++3131 0 -3138 0 * +Ed + 1e-07 1 1 0 +1 1197 0 0.591018650430774 3.73261130409049 +2 2528 543 0 0.591018650430774 3.73261130409049 +4 C0 543 0 548 0 +0 + +0101000 ++3131 0 -3130 0 * +Ed + 1e-07 1 1 0 +1 1198 0 -16 -8 +2 2529 543 0 -16 -8 +2 2530 542 0 -16 -8 +4 CN 543 0 542 0 +0 + +0101000 ++3130 0 -3139 0 * +Ed + 1e-07 1 1 0 +1 1199 0 0.999999997499998 10.5000000018 +2 2531 545 0 0.999999997499998 10.5000000018 +2 2532 544 0 0.999999997499998 10.5000000018 +4 CN 545 0 544 0 +0 + +0101000 ++3136 0 -3129 0 * +Ed + 1e-07 1 1 0 +1 1200 0 0.999999997499998 10.5000000018 +2 2533 545 0 0.999999997499998 10.5000000018 +2 2534 544 0 0.999999997499998 10.5000000018 +4 CN 545 0 544 0 +0 + +0101000 ++3137 0 -3128 0 * +Ed + 1e-07 1 1 0 +1 1201 0 0.591018650430774 3.73261130409049 +2 2535 545 0 0.591018650430774 3.73261130409049 +4 C0 545 0 509 0 +2 2536 509 0 0.591018650430774 3.73261130409049 +0 + +0101000 ++3129 0 -3128 0 * +Ed + 1e-07 1 1 0 +1 1202 0 3.73261130409049 6.87420395761036 +2 2537 542 0 3.73261130409049 6.87420395761036 +4 C0 542 0 548 0 +0 + +0101000 ++3130 0 -3131 0 * +Ed + 1e-07 1 1 0 +1 1203 0 3.73261130409049 6.87420395761036 +2 2538 544 0 3.73261130409049 6.87420395761036 +4 C0 544 0 509 0 +2 2539 509 0 3.73261130409049 6.87420395761036 +0 + +0101000 ++3128 0 -3129 0 * +Ed + 1e-07 1 1 0 +1 1204 0 9 18.4999999997 +2 2540 549 0 9 18.4999999997 +2 2541 550 0 9 18.4999999997 +4 CN 549 0 550 0 +0 + +0101000 ++3127 0 -3126 0 * +Ed + 1e-07 1 1 0 +1 1205 0 0.219779790580614 3.36137244419167 +2 2542 549 0 0.219779790580614 3.36137244419167 +4 C0 549 0 515 0 +0 + +0101000 ++3127 0 -3125 0 * +Ed + 1e-07 1 1 0 +1 1206 0 9 18.4999999997 +2 2543 549 0 9 18.4999999997 +2 2544 550 0 9 18.4999999997 +4 CN 549 0 550 0 +0 + +0101000 ++3125 0 -3124 0 * +Ed + 1e-07 1 1 0 +1 1207 0 0.219779790580614 3.36137244419167 +2 2545 549 0 0.219779790580614 3.36137244419167 +4 C0 549 0 509 0 +2 2546 509 0 0.219779790580614 3.36137244419167 +0 + +0101000 ++3126 0 -3124 0 * +Ed + 1e-07 1 1 0 +1 1208 0 3.36137244419167 6.5029650977602 +2 2547 550 0 3.36137244419167 6.5029650977602 +4 C0 550 0 515 0 +0 + +0101000 ++3125 0 -3127 0 * +Ed + 1e-07 1 1 0 +1 1209 0 3.36137244419167 6.5029650977602 +2 2548 550 0 3.36137244419167 6.5029650977602 +4 C0 550 0 509 0 +2 2549 509 0 3.36137244419167 6.5029650977602 +0 + +0101000 ++3124 0 -3126 0 * +Ed + 1e-07 1 1 0 +1 1210 0 -6.000000007 2.9999999925 +2 2550 551 0 -6.000000007 2.9999999925 +2 2551 552 0 -6.000000007 2.9999999925 +4 CN 551 0 552 0 +0 + +0101000 ++3123 0 -3122 0 * +Ed + 1e-07 1 1 0 +1 1211 0 1.67446506511184 4.81605771870163 +2 2552 551 0 1.67446506511184 4.81605771870163 +4 C0 551 0 517 0 +0 + +0101000 ++3121 0 -3122 0 * +Ed + 1e-07 1 1 0 +1 1212 0 -6.0000000033 2.9999999925 +2 2553 551 0 -6.0000000033 2.9999999925 +2 2554 552 0 -6.0000000033 2.9999999925 +4 CN 551 0 552 0 +0 + +0101000 ++3120 0 -3121 0 * +Ed + 5.66659738820112e-05 1 1 0 +1 1213 0 -18.0641577574 18.0641577574 +2 2555 551 0 -18.0641577574 18.0641577574 +4 C0 551 0 460 0 +2 2556 460 0 -18.0641577574 18.0641577574 +0 + +0101000 ++3120 0 -3123 0 * +Ed + 5.66660233059852e-05 1 1 0 +1 1214 0 -18.0641577565 18.0641577565 +2 2557 552 0 -18.0641577565 18.0641577565 +4 C0 552 0 460 0 +2 2558 460 0 -18.0641577565 18.0641577565 +0 + +0101000 ++3123 0 -3120 0 * +Ed + 1e-07 1 1 0 +1 1215 0 4.81605771870163 7.95765037229143 +2 2559 552 0 4.81605771870163 7.95765037229143 +4 C0 552 0 517 0 +0 + +0101000 ++3122 0 -3121 0 * +Ed + 1e-07 1 1 0 +1 1216 0 -16.0000000005 -8 +2 2560 553 0 -16.0000000005 -8 +2 2561 554 0 -16.0000000005 -8 +4 CN 553 0 554 0 +0 + +0101000 ++3119 0 -3118 0 * +Ed + 1e-07 1 1 0 +1 1217 0 3.01029763413591 6.15189028772571 +2 2562 553 0 3.01029763413591 6.15189028772571 +4 C0 553 0 555 0 +0 + +0101000 ++3119 0 -3117 0 * +Ed + 1e-07 1 1 0 +1 1218 0 -16.0000000005 -8 +2 2563 553 0 -16.0000000005 -8 +2 2564 554 0 -16.0000000005 -8 +4 CN 553 0 554 0 +0 + +0101000 ++3117 0 -3116 0 * +Ed + 1e-07 1 1 0 +1 1219 0 3.01029763413591 6.15189028772571 +2 2565 553 0 3.01029763413591 6.15189028772571 +4 C0 553 0 517 0 +0 + +0101000 ++3118 0 -3116 0 * +Ed + 1e-07 1 1 0 +1 1220 0 1.00000000209999 10.5000000018 +2 2566 556 0 1.00000000209999 10.5000000018 +2 2567 557 0 1.00000000209999 10.5000000018 +4 CN 556 0 557 0 +0 + +0101000 ++3115 0 -3114 0 * +Ed + 1e-07 1 1 0 +1 1221 0 3.01029763413591 6.15189028772571 +2 2568 556 0 3.01029763413591 6.15189028772571 +4 C0 556 0 515 0 +0 + +0101000 ++3115 0 -3113 0 * +Ed + 1e-07 1 1 0 +1 1222 0 1.00000000209999 10.5000000018 +2 2569 556 0 1.00000000209999 10.5000000018 +2 2570 557 0 1.00000000209999 10.5000000018 +4 CN 556 0 557 0 +0 + +0101000 ++3113 0 -3112 0 * +Ed + 1e-07 1 1 0 +1 1223 0 3.01029763413656 6.15189028772571 +2 2571 556 0 3.01029763413656 6.15189028772571 +4 C0 556 0 509 0 +2 2572 509 0 3.01029763413656 6.15189028772571 +0 + +0101000 ++3114 0 -3112 0 * +Ed + 1e-07 1 1 0 +1 1224 0 6.15189028772571 9.29348294131549 +2 2573 554 0 6.15189028772571 9.29348294131549 +4 C0 554 0 517 0 +0 + +0101000 ++3116 0 -3118 0 * +Ed + 1e-07 1 1 0 +1 1225 0 6.15189028772571 9.29348294131549 +2 2574 554 0 6.15189028772571 9.29348294131549 +4 C0 554 0 555 0 +0 + +0101000 ++3117 0 -3119 0 * +Ed + 1e-07 1 1 0 +1 1226 0 6.15189028772571 9.29348294131549 +2 2575 557 0 6.15189028772571 9.29348294131549 +4 C0 557 0 515 0 +0 + +0101000 ++3113 0 -3115 0 * +Ed + 1e-07 1 1 0 +1 1227 0 6.15189028772571 9.29348294131615 +2 2576 557 0 6.15189028772571 9.29348294131615 +4 C0 557 0 509 0 +2 2577 509 0 6.15189028772571 9.29348294131615 +0 + +0101000 ++3112 0 -3114 0 * +Ed + 0.000476662432846974 1 1 0 +1 1228 0 2.24749172421 23.4532421369 +2 2578 558 0 2.24749172421 23.4532421369 +4 C0 517 0 558 0 +0 + +0101000 ++3111 0 -3110 0 * +Ed + 0.000476662362377475 1 1 0 +1 1229 0 23.4532421369 44.6589925486 +2 2579 559 0 23.4532421369 44.6589925486 +4 C0 517 0 559 0 +0 + +0101000 ++3110 0 -3109 0 * +Ed + 1e-07 1 1 0 +1 1230 0 -13.1427493234829 13.142782156 +4 C0 517 0 514 0 +0 + +0101000 ++3109 0 -3186 0 * +Ed + 1e-07 1 1 0 +1 1231 0 -13.1352355696 13.1352355696 +4 C0 517 0 516 0 +0 + +0101000 ++3111 0 -3183 0 * +Ed + 1e-07 1 1 0 +1 1232 0 -13.142782156283 13.1427985718153 +4 C0 515 0 514 0 +0 + +0101000 ++3108 0 -3185 0 * +Ed + 1e-07 1 1 0 +1 1233 0 3.24364762470694 4.81444030362025 +2 2580 559 0 3.24364762470694 4.81444030362025 +4 C0 515 0 559 0 +0 + +0101000 ++3107 0 -3108 0 * +Ed + 1e-07 1 1 0 +1 1234 0 1.67285129797159 3.24364762470694 +2 2581 558 0 1.67285129797159 3.24364762470694 +4 C0 515 0 558 0 +0 + +0101000 ++3106 0 -3107 0 * +Ed + 1e-07 1 1 0 +1 1235 0 -13.135235569875 13.1352355693766 +4 C0 515 0 516 0 +0 + +0101000 ++3106 0 -3184 0 * +Ed + 1e-07 1 1 0 +1 1236 0 -6.0000000056 2.99999999649999 +2 2582 558 0 -6.0000000056 2.99999999649999 +4 G1 558 0 516 0 +0 + +0101000 ++3111 0 -3106 0 * +Ed + 1e-07 1 1 0 +1 1237 0 -6.0000000056 2.99999999649999 +2 2583 558 0 -6.0000000056 2.99999999649999 +2 2584 559 0 -6.0000000056 2.99999999649999 +4 CN 558 0 559 0 +0 + +0101000 ++3110 0 -3107 0 * +Ed + 1e-07 1 1 0 +1 1238 0 -6.0000000056 2.99999999649999 +2 2585 559 0 -6.0000000056 2.99999999649999 +4 G1 559 0 514 0 +0 + +0101000 ++3109 0 -3108 0 * +Ed + 1e-07 1 1 0 +1 1239 0 9 18.4999999997 +2 2586 560 0 9 18.4999999997 +2 2587 561 0 9 18.4999999997 +4 CN 560 0 561 0 +0 + +0101000 ++3105 0 -3104 0 * +Ed + 1e-07 1 1 0 +1 1240 0 1.79057611740358 4.93216877095368 +2 2588 560 0 1.79057611740358 4.93216877095368 +4 C0 560 0 527 0 +0 + +0101000 ++3105 0 -3103 0 * +Ed + 1e-07 1 1 0 +1 1241 0 9 18.4999999997 +2 2589 560 0 9 18.4999999997 +2 2590 561 0 9 18.4999999997 +4 CN 560 0 561 0 +0 + +0101000 ++3103 0 -3102 0 * +Ed + 1e-07 1 1 0 +1 1242 0 1.79057611740358 4.93216877095368 +2 2591 560 0 1.79057611740358 4.93216877095368 +4 C0 560 0 509 0 +2 2592 509 0 1.79057611740358 4.93216877095368 +0 + +0101000 ++3104 0 -3102 0 * +Ed + 1e-07 1 1 0 +1 1243 0 4.93216877095368 8.07376142458317 +2 2593 561 0 4.93216877095368 8.07376142458317 +4 C0 561 0 527 0 +0 + +0101000 ++3103 0 -3105 0 * +Ed + 1e-07 1 1 0 +1 1244 0 4.93216877095368 8.07376142458317 +2 2594 561 0 4.93216877095368 8.07376142458317 +4 C0 561 0 509 0 +2 2595 509 0 4.93216877095368 8.07376142458317 +0 + +0101000 ++3102 0 -3104 0 * +Ed + 1.34271532771821e-06 1 1 0 +1 1245 0 18.6140455124 19.6151152677 +2 2596 562 0 18.6140455124 19.6151152677 +2 2597 563 0 18.6140455124 19.6151152677 +4 CN 562 0 563 0 +0 + +0101000 ++3101 0 -3100 0 * +Ed + 0.000323272113850789 1 1 0 +1 1246 0 -0.019838823691 18.6140455124 +2 2598 562 0 -0.019838823691 18.6140455124 +2 2599 564 0 -0.019838823691 18.6140455124 +4 CN 562 0 564 0 +0 + +0101000 ++3099 0 -3101 0 * +Ed + 1e-07 1 1 0 +1 1247 0 2.9999999912 5.999999993 +2 2600 562 0 2.9999999912 5.999999993 +4 G1 562 0 524 0 +0 + +0101000 ++3098 0 -3099 0 * +Ed + 1e-07 1 1 0 +1 1248 0 1.67443597005548 3.24364519112936 +2 2601 562 0 1.67443597005548 3.24364519112936 +4 C0 562 0 525 0 +0 + +0101000 ++3097 0 -3098 0 * +Ed + 1e-07 1 1 0 +1 1249 0 -6.0000000056 2.9999999907 +2 2602 562 0 -6.0000000056 2.9999999907 +2 2603 565 0 -6.0000000056 2.9999999907 +4 CN 562 0 565 0 +0 + +0101000 ++3096 0 -3097 0 * +Ed + 6.1593797633783e-05 1 1 0 +1 1250 0 -19.6349540849 19.6349540849 +2 2604 562 0 -19.6349540849 19.6349540849 +4 C0 562 0 460 0 +2 2605 460 0 -19.6349540849 19.6349540849 +0 + +0101000 ++3096 0 -3095 0 * +Ed + 1e-07 1 1 0 +1 1251 0 -6.0000000038 5.99999998080001 +2 2606 562 0 -6.0000000038 5.99999998080001 +2 2607 565 0 -6.0000000038 5.99999998080001 +4 CN 562 0 565 0 +0 + +0101000 ++3095 0 -3094 0 * +Ed + 1e-07 1 1 0 +1 1252 0 19.6151152631 19.6349540849 +2 2608 562 0 19.6151152631 19.6349540849 +2 2609 566 0 19.6151152631 19.6349540849 +4 CN 562 0 566 0 +0 + +0101000 ++3100 0 -3094 0 * +Ed + 1e-07 1 1 0 +1 1253 0 4.81602862363541 7.95762127723507 +2 2610 565 0 4.81602862363541 7.95762127723507 +4 C0 565 0 460 0 +2 2611 460 0 4.81602862363541 7.95762127723507 +0 + +0101000 ++3095 0 -3096 0 * +Ed + 1e-07 1 1 0 +1 1254 0 0.102052537057743 1.67443597005548 +2 2612 565 0 0.102052537057743 1.67443597005548 +4 C0 565 0 525 0 +0 + +0101000 ++3093 0 -3097 0 * +Ed + 1e-07 1 1 0 +1 1255 0 2.9999999907 5.9999999925 +2 2613 565 0 2.9999999907 5.9999999925 +4 G1 565 0 526 0 +0 + +0101000 ++3093 0 -3092 0 * +Ed + 1e-07 1 1 0 +1 1256 0 4.89452709772886 6.38523784423725 +2 2614 565 0 4.89452709772886 6.38523784423725 +2 2615 567 0 4.89452709772886 6.38523784423725 +4 CN 565 0 567 0 +0 + +0101000 ++3091 0 -3092 0 * +Ed + 1e-07 1 1 0 +1 1257 0 4.81602862363541 4.89452709772886 +2 2616 565 0 4.81602862363541 4.89452709772886 +2 2617 566 0 4.81602862363541 4.89452709772886 +4 CN 565 0 566 0 +0 + +0101000 ++3094 0 -3091 0 * +Ed + 1e-07 1 1 0 +1 1258 0 -12.5516086474 12.5516086474 +4 C0 525 0 524 0 +0 + +0101000 ++3098 0 -3172 0 * +Ed + 1e-07 1 1 0 +1 1259 0 -12.5586114529 12.5586114529 +4 C0 525 0 526 0 +0 + +0101000 ++3093 0 -3170 0 * +Ed + 0.000615204569726452 1 1 0 +1 1260 0 1.14817455863 7.43135986582 +2 2618 568 0 1.14817455863 7.43135986582 +4 C0 525 0 568 0 +0 + +0101000 ++3090 0 -3089 0 * +Ed + 0.000615204692372754 1 1 0 +1 1261 0 7.43135986581 13.714545173 +2 2619 569 0 7.43135986581 13.714545173 +4 C0 525 0 569 0 +0 + +0101000 ++3089 0 -3090 0 * +Ed + 1e-07 1 1 0 +1 1262 0 -12.5586114540772 12.5586114528879 +4 C0 527 0 526 0 +0 + +0101000 ++3088 0 -3169 0 * +Ed + 1e-07 1 1 0 +1 1263 0 4.89452709739973 6.38523784447877 +2 2620 567 0 4.89452709739973 6.38523784447877 +4 C0 527 0 567 0 +0 + +0101000 ++3087 0 -3088 0 * +Ed + 1e-07 1 1 0 +1 1264 0 4.81444151752172 4.89452709739973 +2 2621 566 0 4.81444151752172 4.89452709739973 +4 C0 527 0 566 0 +0 + +0101000 ++3086 0 -3087 0 * +Ed + 1e-07 1 1 0 +1 1265 0 4.73435593744784 4.81444151752172 +2 2622 563 0 4.73435593744784 4.81444151752172 +4 C0 527 0 563 0 +0 + +0101000 ++3085 0 -3086 0 * +Ed + 1e-07 1 1 0 +1 1266 0 3.24364519054521 4.73435593744784 +2 2623 564 0 3.24364519054521 4.73435593744784 +4 C0 527 0 564 0 +0 + +0101000 ++3084 0 -3085 0 * +Ed + 1e-07 1 1 0 +1 1267 0 -12.5516086473928 12.5516086483876 +4 C0 527 0 524 0 +0 + +0101000 ++3084 0 -3171 0 * +Ed + 1e-07 1 1 0 +1 1268 0 2.0804577089401 5.22205036228595 +2 2624 570 0 2.0804577089401 5.22205036228595 +4 C0 527 0 570 0 +0 + +0101000 ++3083 0 -3082 0 * +Ed + 1e-07 1 1 0 +1 1269 0 5.22205036228595 8.36364301611969 +2 2625 571 0 5.22205036228595 8.36364301611969 +4 C0 527 0 571 0 +0 + +0101000 ++3082 0 -3083 0 * +Ed + 1e-07 1 1 0 +1 1270 0 -3 3.00000000209999 +2 2626 563 0 -3 3.00000000209999 +2 2627 566 0 -3 3.00000000209999 +4 CN 563 0 566 0 +0 + +0101000 ++3100 0 -3086 0 * +Ed + 1e-07 1 1 0 +1 1271 0 -2.9999999996 3.0000000024 +2 2628 563 0 -2.9999999996 3.0000000024 +2 2629 564 0 -2.9999999996 3.0000000024 +4 CN 563 0 564 0 +0 + +0101000 ++3101 0 -3085 0 * +Ed + 1e-07 1 1 0 +1 1272 0 -2.9999999982 3.00000000209999 +2 2630 567 0 -2.9999999982 3.00000000209999 +4 G1 567 0 526 0 +0 + +0101000 ++3092 0 -3088 0 * +Ed + 1e-07 1 1 0 +1 1273 0 -2.99999999990001 3.0000000022 +2 2631 567 0 -2.99999999990001 3.0000000022 +2 2632 566 0 -2.99999999990001 3.0000000022 +4 CN 567 0 566 0 +0 + +0101000 ++3091 0 -3087 0 * +Ed + 1e-07 1 1 0 +1 1274 0 -2.9999999977 3.00000000209999 +2 2633 564 0 -2.9999999977 3.00000000209999 +4 G1 564 0 524 0 +0 + +0101000 ++3099 0 -3084 0 * +Ed + 1e-07 1 1 0 +1 1275 0 -15.9999999999 -8.0000000038 +2 2634 569 0 -15.9999999999 -8.0000000038 +2 2635 568 0 -15.9999999999 -8.0000000038 +4 CN 569 0 568 0 +0 + +0101000 ++3081 0 -3089 0 * +Ed + 1e-07 1 1 0 +1 1276 0 3.65125403549105 6.79284668932479 +2 2636 569 0 3.65125403549105 6.79284668932479 +4 C0 569 0 572 0 +0 + +0101000 ++3081 0 -3080 0 * +Ed + 1e-07 1 1 0 +1 1277 0 -15.9999999999 -8.0000000038 +2 2637 569 0 -15.9999999999 -8.0000000038 +2 2638 568 0 -15.9999999999 -8.0000000038 +4 CN 569 0 568 0 +0 + +0101000 ++3080 0 -3090 0 * +Ed + 1e-07 1 1 0 +1 1278 0 0.999999998299998 10.499999998 +2 2639 571 0 0.999999998299998 10.499999998 +2 2640 570 0 0.999999998299998 10.499999998 +4 CN 571 0 570 0 +0 + +0101000 ++3082 0 -3079 0 * +Ed + 1e-07 1 1 0 +1 1279 0 0.999999998299998 10.499999998 +2 2641 571 0 0.999999998299998 10.499999998 +2 2642 570 0 0.999999998299998 10.499999998 +4 CN 571 0 570 0 +0 + +0101000 ++3083 0 -3078 0 * +Ed + 1e-07 1 1 0 +1 1280 0 3.65125403549105 6.79284668932479 +2 2643 571 0 3.65125403549105 6.79284668932479 +4 C0 571 0 509 0 +2 2644 509 0 3.65125403549105 6.79284668932479 +0 + +0101000 ++3079 0 -3078 0 * +Ed + 1e-07 1 1 0 +1 1281 0 0.509661382145205 3.65125403549105 +2 2645 568 0 0.509661382145205 3.65125403549105 +4 C0 568 0 572 0 +0 + +0101000 ++3080 0 -3081 0 * +Ed + 1e-07 1 1 0 +1 1282 0 0.509661382145205 3.65125403549105 +2 2646 570 0 0.509661382145205 3.65125403549105 +4 C0 570 0 509 0 +2 2647 509 0 0.509661382145205 3.65125403549105 +0 + +0101000 ++3078 0 -3079 0 * +Ed + 1e-07 1 1 0 +1 1283 0 -13.7499999995 13.7499999995 +2 2648 573 0 -13.7499999995 13.7499999995 +4 G1 530 0 573 0 +0 + +0101000 ++3077 0 -3076 0 * +Ed + 1e-07 1 1 0 +1 1284 0 -13.6410161510208 13.641016151349 +4 C0 530 0 460 0 +2 2649 460 0 -13.6410161510208 13.641016151349 +0 + +0101000 ++3164 0 -3076 0 * +Ed + 1e-07 1 1 0 +1 1285 0 -13.641016151349 13.6410161510208 +4 C0 530 0 509 0 +2 2650 509 0 -13.641016151349 13.6410161510208 +0 + +0101000 ++3077 0 -3165 0 * +Ed + 1e-07 1 1 0 +1 1286 0 5.15082828696017 5.67442706255529 +2 2651 573 0 5.15082828696017 5.67442706255529 +4 C0 573 0 509 0 +2 2652 509 0 5.15082828696017 5.67442706255529 +0 + +0101000 ++3075 0 -3077 0 * +Ed + 1e-07 1 1 0 +1 1287 0 5.15082828696017 5.67442706255529 +2 2653 573 0 5.15082828696017 5.67442706255529 +4 C0 573 0 460 0 +2 2654 460 0 5.15082828696017 5.67442706255529 +0 + +0101000 ++3074 0 -3076 0 * +Ed + 1e-07 1 1 0 +1 1288 0 -13.75 13.749999999 +2 2655 573 0 -13.75 13.749999999 +4 G1 573 0 574 0 +2 2656 574 0 -13.75 13.749999999 +0 + +0101000 ++3075 0 -3074 0 * +Ed + 1e-07 1 1 0 +1 1289 0 -13.7499999995 13.7499999995 +2 2657 575 0 -13.7499999995 13.7499999995 +4 G1 528 0 575 0 +0 + +0101000 ++3073 0 -3072 0 * +Ed + 1e-07 1 1 0 +1 1290 0 -12.8987473699968 12.8987473699866 +4 C0 528 0 509 0 +2 2658 509 0 -12.8987473699968 12.8987473699866 +0 + +0101000 ++3168 0 -3073 0 * +Ed + 1e-07 1 1 0 +1 1291 0 -12.8987473699968 12.8987473699866 +4 C0 528 0 460 0 +2 2659 460 0 -12.8987473699968 12.8987473699866 +0 + +0101000 ++3167 0 -3072 0 * +Ed + 1e-07 1 1 0 +1 1292 0 -13.7499999995 13.7499999995 +2 2660 575 0 -13.7499999995 13.7499999995 +4 G1 574 0 575 0 +2 2661 574 0 -13.7499999995 13.7499999995 +0 + +0101000 ++3071 0 -3070 0 * +Ed + 1e-07 1 1 0 +1 1293 0 -43.2307666907861 43.2307666911963 +4 C0 574 0 460 0 +2 2662 574 0 -43.2307666907861 43.2307666911963 +2 2663 460 0 -43.2307666907861 43.2307666911963 +0 + +0101000 ++3070 0 -3074 0 * +Ed + 1e-07 1 1 0 +1 1294 0 -43.2307666907861 43.2307666911963 +4 C0 574 0 509 0 +2 2664 574 0 -43.2307666907861 43.2307666911963 +2 2665 509 0 -43.2307666907861 43.2307666911963 +0 + +0101000 ++3071 0 -3075 0 * +Ed + 1e-07 1 1 0 +1 1295 0 4.6097762188663 5.15082828698478 +2 2666 575 0 4.6097762188663 5.15082828698478 +4 C0 575 0 509 0 +2 2667 509 0 4.6097762188663 5.15082828698478 +0 + +0101000 ++3073 0 -3071 0 * +Ed + 1e-07 1 1 0 +1 1296 0 4.6097762188663 5.15082828698478 +2 2668 575 0 4.6097762188663 5.15082828698478 +4 C0 575 0 460 0 +2 2669 460 0 4.6097762188663 5.15082828698478 +0 + +0101000 ++3072 0 -3070 0 * +Ed + 1e-07 1 1 0 +1 1297 0 -6.21187114162243 6.2118711406277 +4 C0 522 0 460 0 +2 2670 460 0 -6.21187114162243 6.2118711406277 +0 + +0101000 ++3177 0 -3069 0 * +Ed + 1e-07 1 1 0 +1 1298 0 -6.21187114162243 6.2118711406277 +4 C0 522 0 509 0 +2 2671 509 0 -6.21187114162243 6.2118711406277 +0 + +0101000 ++3175 0 -3068 0 * +Ed + 1e-07 1 1 0 +1 1299 0 -13.7499999995 13.7499999995 +2 2672 576 0 -13.7499999995 13.7499999995 +4 G1 522 0 576 0 +0 + +0101000 ++3068 0 -3069 0 * +Ed + 1e-07 1 1 0 +1 1300 0 5.70933364760454 6.1805725456612 +2 2673 576 0 5.70933364760454 6.1805725456612 +4 C0 576 0 509 0 +2 2674 509 0 5.70933364760454 6.1805725456612 +0 + +0101000 ++3067 0 -3068 0 * +Ed + 1e-07 1 1 0 +1 1301 0 5.70933364760454 6.1805725456612 +2 2675 576 0 5.70933364760454 6.1805725456612 +4 C0 576 0 460 0 +2 2676 460 0 5.70933364760454 6.1805725456612 +0 + +0101000 ++3066 0 -3069 0 * +Ed + 1e-07 1 1 0 +1 1302 0 -13.75 13.749999999 +2 2677 576 0 -13.75 13.749999999 +4 G1 576 0 577 0 +2 2678 577 0 -13.75 13.749999999 +0 + +0101000 ++3067 0 -3066 0 * +Ed + 1e-07 1 1 0 +1 1303 0 -1.23479396146506 1.2347939614323 +4 C0 460 0 513 0 +2 2679 460 0 -1.23479396146506 1.2347939614323 +0 + +0101000 ++3187 0 -3065 0 * +Ed + 1e-07 1 1 0 +1 1304 0 -55.8013039183206 55.8013039181823 +4 C0 460 0 577 0 +2 2680 460 0 -55.8013039183206 55.8013039181823 +2 2681 577 0 -55.8013039183206 55.8013039181823 +0 + +0101000 ++3064 0 -3066 0 * +Ed + 1e-07 1 1 0 +1 1305 0 2.1446479863734 2.80787310213978 +2 2682 578 0 2.1446479863734 2.80787310213978 +4 C0 460 0 578 0 +2 2683 460 0 2.1446479863734 2.80787310213978 +0 + +0101000 ++3064 0 -3065 0 * +Ed + 1e-07 1 1 0 +1 1306 0 2.1446479863734 2.80787310213978 +2 2684 578 0 2.1446479863734 2.80787310213978 +4 C0 509 0 578 0 +2 2685 509 0 2.1446479863734 2.80787310213978 +0 + +0101000 ++3063 0 -3062 0 * +Ed + 1e-07 1 1 0 +1 1307 0 -55.8013039183206 55.8013039181823 +4 C0 509 0 577 0 +2 2686 509 0 -55.8013039183206 55.8013039181823 +2 2687 577 0 -55.8013039183206 55.8013039181823 +0 + +0101000 ++3063 0 -3067 0 * +Ed + 1e-07 1 1 0 +1 1308 0 -1.23479396146506 1.2347939614323 +4 C0 509 0 513 0 +2 2688 509 0 -1.23479396146506 1.2347939614323 +0 + +0101000 ++3190 0 -3062 0 * +Ed + 1e-07 1 1 0 +1 1309 0 -13.7499999995 13.7499999995 +2 2689 578 0 -13.7499999995 13.7499999995 +4 G1 513 0 578 0 +0 + +0101000 ++3062 0 -3065 0 * +Ed + 1e-07 1 1 0 +1 1310 0 -13.7499999995 13.7499999995 +2 2690 578 0 -13.7499999995 13.7499999995 +4 G1 577 0 578 0 +2 2691 577 0 -13.7499999995 13.7499999995 +0 + +0101000 ++3063 0 -3064 0 * +Wi + +0101100 +-2944 0 -2943 0 * +Wi + +0101100 ++2942 115 +2941 115 +2940 115 +2939 115 +2938 115 +2937 115 +2936 115 +2935 115 +2934 115 +2933 115 +* +Wi + +0101100 +-2932 0 -2931 0 * +Wi + +0101100 +-2930 0 -2929 0 * +Wi + +0101100 ++2928 115 +2927 115 * +Wi + +0101100 ++2926 116 +2925 116 * +Wi + +0101100 +-2926 0 -2925 0 * +Wi + +0101100 +-2924 0 -2923 0 -2922 0 +2921 0 * +Wi + +0101100 ++2920 0 +2919 0 -2918 0 -2917 0 * +Wi + +0101100 +-2916 0 -2917 0 +2915 0 -2914 0 * +Wi + +0101100 +-2913 0 -2914 0 +2912 0 +2911 0 * +Wi + +0101100 ++2910 0 +2909 0 -2908 0 -2907 0 * +Wi + +0101100 +-2906 0 -2905 0 +2904 0 +2903 0 * +Wi + +0101100 +-2902 0 -2901 0 +2900 0 +2899 0 * +Wi + +0101100 +-2898 0 +2897 0 +2899 0 -2896 0 * +Wi + +0101100 +-2895 0 -2898 0 +2894 0 +2893 0 * +Wi + +0101100 ++2892 115 +2891 117 +2890 117 +2889 115 * +Wi + +0101100 +-2890 117 -2888 117 -2887 115 -2943 115 +2886 115 * +Wi + +0101100 ++2885 115 -2884 115 +2888 117 -2891 117 * +Wi + +0101100 ++2883 115 +2882 117 +2881 117 +2884 115 * +Wi + +0101100 +-2881 117 -2880 117 -2886 115 -2944 115 +2887 115 * +Wi + +0101100 ++2879 115 -2889 115 +2880 117 -2882 117 * +Wi + +0101100 ++2878 115 -2877 115 -2885 115 -2892 115 +2876 115 * +Wi + +0101100 ++2875 115 -2876 115 -2879 115 -2883 115 +2877 115 * +Wi + +0101100 ++2874 115 +2873 118 +2872 118 +2871 115 * +Wi + +0101100 +-2872 118 -2870 118 -2869 115 -2929 115 +2868 115 * +Wi + +0101100 ++2867 115 -2866 115 +2870 118 -2873 118 * +Wi + +0101100 ++2865 115 +2864 118 +2863 118 +2866 115 * +Wi + +0101100 +-2863 118 -2862 118 -2868 115 -2930 115 +2869 115 * +Wi + +0101100 ++2861 115 -2871 115 +2862 118 -2864 118 * +Wi + +0101100 ++2860 115 -2859 115 -2861 115 -2865 115 +2858 115 * +Wi + +0101100 ++2857 115 -2858 115 -2867 115 -2874 115 +2859 115 * +Wi + +0101100 ++2856 115 +2855 119 +2854 119 +2853 115 * +Wi + +0101100 +-2854 119 -2852 119 -2851 115 -2931 115 +2850 115 * +Wi + +0101100 ++2849 115 -2848 115 +2852 119 -2855 119 * +Wi + +0101100 ++2847 115 +2846 119 +2845 119 +2848 115 * +Wi + +0101100 +-2845 119 -2844 119 -2850 115 -2932 115 +2851 115 * +Wi + +0101100 ++2843 115 -2853 115 +2844 119 -2846 119 * +Wi + +0101100 ++2842 115 -2841 115 -2843 115 -2847 115 +2840 115 * +Wi + +0101100 ++2839 115 -2840 115 -2849 115 -2856 115 +2841 115 * +Wi + +0101100 ++2838 0 -2837 0 -2836 0 +2835 0 * +Wi + +0101100 ++2836 0 -2834 0 +2911 0 -2833 0 +2909 0 -2832 0 -2838 0 +2831 0 * +Wi + +0101100 ++2830 115 +2829 115 * +Wi + +0101100 +-2828 120 -2827 120 * +Wi + +0101100 +-2826 119 -2825 119 * +Wi + +0101100 +-2842 115 -2839 115 * +Wi + +0101100 ++2828 0 +2827 0 * +Wi + +0101100 +-2824 0 -2823 0 * +Wi + +0101100 ++2823 120 +2824 120 * +Wi + +0101100 ++2825 119 +2826 119 * +Wi + +0101100 +-2822 0 +2829 0 +2821 0 -2831 0 * +Wi + +0101100 +-2821 0 +2830 0 +2822 0 -2835 0 * +Wi + +0101100 ++2820 0 -2819 0 -2818 0 +2817 0 * +Wi + +0101100 ++2818 0 -2816 0 +2903 0 -2815 0 -2901 0 -2814 0 -2820 0 +2813 0 * +Wi + +0101100 ++2812 115 +2811 115 * +Wi + +0101100 +-2828 121 -2827 121 * +Wi + +0101100 +-2826 118 -2825 118 * +Wi + +0101100 +-2860 115 -2857 115 * +Wi + +0101100 ++2823 121 +2824 121 * +Wi + +0101100 ++2825 118 +2826 118 * +Wi + +0101100 +-2810 0 +2811 0 +2809 0 -2813 0 * +Wi + +0101100 +-2809 0 +2812 0 +2810 0 -2817 0 * +Wi + +0101100 ++2808 0 -2807 0 +2919 0 -2806 0 -2805 0 +2804 0 * +Wi + +0101100 ++2805 0 -2803 0 +2893 0 -2802 0 -2808 0 +2801 0 * +Wi + +0101100 ++2800 115 +2799 115 * +Wi + +0101100 +-2798 122 -2797 122 * +Wi + +0101100 +-2796 117 -2795 117 * +Wi + +0101100 +-2878 115 -2875 115 * +Wi + +0101100 ++2798 0 +2797 0 * +Wi + +0101100 +-2794 0 -2793 0 * +Wi + +0101100 ++2793 122 +2794 122 * +Wi + +0101100 ++2795 117 +2796 117 * +Wi + +0101100 +-2792 0 +2799 0 +2791 0 -2801 0 * +Wi + +0101100 +-2791 0 +2800 0 +2792 0 -2804 0 * +Wi + +0101100 ++2790 0 -2789 0 +2923 0 +2788 0 * +Wi + +0101100 +-2789 0 -2922 0 -2787 0 +2786 0 * +Wi + +0101100 ++2785 0 -2784 0 -2921 0 -2787 0 * +Wi + +0101100 +-2784 0 -2924 0 +2788 0 +2783 0 * +Wi + +0101100 +-2782 0 +2781 0 +2780 0 -2785 0 * +Wi + +0101100 +-2783 0 +2779 0 +2778 0 +2780 0 * +Wi + +0101100 ++2779 0 +2777 0 +2776 0 -2790 0 * +Wi + +0101100 +-2786 0 -2782 0 +2775 0 +2776 0 * +Wi + +0101100 ++2774 0 -2928 0 -2773 0 +2772 0 * +Wi + +0101100 ++2773 0 -2927 0 -2774 0 +2771 0 * +Wi + +0101100 ++2770 0 -2769 0 -2771 0 +2768 0 * +Wi + +0101100 ++2767 0 -2768 0 -2772 0 +2769 0 * +Wi + +0101100 +-2766 0 -2907 0 +2765 0 -2764 0 * +Wi + +0101100 ++2763 0 +2764 0 -2762 0 -2761 0 * +Wi + +0101100 +-2760 0 -2759 0 -2905 0 +2758 0 * +Wi + +0101100 ++2757 0 +2761 0 -2756 0 -2755 0 * +Wi + +0101100 +-2754 0 -2758 0 +2904 0 +2816 0 +2819 0 +2814 0 +2900 0 -2897 0 +2894 0 +2803 0 ++2806 0 -2918 0 +2916 0 +2912 0 +2834 0 +2837 0 +2832 0 -2908 0 +2766 0 -2763 0 +-2757 0 * +Wi + +0101100 ++2770 0 +2767 0 * +Wi + +0101100 ++2775 0 -2777 0 +2778 0 -2781 0 * +Wi + +0101100 ++2754 0 +2755 0 +2753 0 +2760 0 * +Wi + +0101100 ++2752 115 -2942 115 -2751 115 +2750 115 * +Wi + +0101100 ++2749 115 -2941 115 -2752 115 +2748 115 * +Wi + +0101100 ++2747 115 -2940 115 -2749 115 +2746 115 * +Wi + +0101100 ++2745 115 -2939 115 -2747 115 +2744 115 * +Wi + +0101100 ++2743 115 -2938 115 -2745 115 +2742 115 * +Wi + +0101100 ++2741 115 -2937 115 -2743 115 +2740 115 * +Wi + +0101100 ++2739 115 -2936 115 -2741 115 +2738 115 * +Wi + +0101100 ++2737 115 -2935 115 -2739 115 +2736 115 * +Wi + +0101100 ++2735 115 -2934 115 -2737 115 +2734 115 * +Wi + +0101100 ++2751 115 -2933 115 -2735 115 +2733 115 * +Wi + +0101100 +-2732 0 -2731 0 -2730 0 -2729 0 -2728 0 -2727 0 -2726 0 -2725 0 -2724 0 -2723 0 +* +Wi + +0101100 ++2756 0 +2762 0 -2765 0 +2910 0 +2833 0 -2913 0 -2915 0 +2920 0 +2807 0 +2802 0 +-2895 0 +2896 0 -2902 0 +2815 0 -2906 0 +2759 0 -2753 0 * +Wi + +0101100 +-2722 0 +2723 0 +2721 0 -2750 0 * +Wi + +0101100 +-2721 0 +2724 0 +2720 0 -2748 0 * +Wi + +0101100 +-2720 0 +2725 0 +2719 0 -2746 0 * +Wi + +0101100 +-2719 0 +2726 0 +2718 0 -2744 0 * +Wi + +0101100 +-2718 0 +2727 0 +2717 0 -2742 0 * +Wi + +0101100 +-2717 0 +2728 0 +2716 0 -2740 0 * +Wi + +0101100 +-2716 0 +2729 0 +2715 0 -2738 0 * +Wi + +0101100 +-2715 0 +2730 0 +2714 0 -2736 0 * +Wi + +0101100 +-2714 0 +2731 0 +2713 0 -2734 0 * +Wi + +0101100 +-2713 0 +2732 0 +2722 0 -2733 0 * +Wi + +0101100 +-2712 123 +2942 115 +2711 123 -2710 123 * +Wi + +0101100 +-2711 123 +2941 115 +2709 123 -2708 123 * +Wi + +0101100 +-2709 123 +2940 115 +2707 123 -2706 123 * +Wi + +0101100 +-2707 123 +2939 115 +2705 123 -2704 123 * +Wi + +0101100 +-2705 123 +2938 115 +2703 123 -2702 123 * +Wi + +0101100 +-2703 123 +2937 115 +2701 123 -2700 123 * +Wi + +0101100 +-2701 123 +2936 115 +2699 123 -2698 123 * +Wi + +0101100 +-2699 123 +2935 115 +2697 123 -2696 123 * +Wi + +0101100 +-2697 123 +2934 115 +2695 123 -2694 123 * +Wi + +0101100 +-2695 123 +2933 115 +2712 123 -2693 123 * +Wi + +0101100 ++2710 0 +2708 0 +2706 0 +2704 0 +2702 0 +2700 0 +2698 0 +2696 0 +2694 0 +2693 0 +* +Wi + +0101100 +-2692 0 +2691 0 +2690 0 -2689 0 * +Wi + +0101100 +-2690 0 +2688 0 +2692 0 -2687 0 * +Wi + +0101100 +-2686 0 +2689 0 +2685 0 -2684 0 * +Wi + +0101100 +-2685 0 +2687 0 +2686 0 -2683 0 * +Wi + +0101100 ++2682 0 +2684 0 -2681 0 -2680 0 * +Wi + +0101100 ++2681 0 +2683 0 -2682 0 -2679 0 * +Wi + +0101100 ++2680 124 +2679 124 * +Wi + +0101100 +-2678 122 -2677 122 * +Wi + +0101100 +-2676 117 -2675 117 * +Wi + +0101100 +-2674 124 -2673 124 * +Wi + +0101100 ++2677 122 +2678 122 * +Wi + +0101100 ++2675 117 +2676 117 * +Wi + +0101100 ++2672 124 +2671 124 +2670 124 -2673 124 -2669 124 * +Wi + +0101100 ++2668 124 +2667 124 +2669 124 -2674 124 -2670 124 * +Wi + +0101100 ++2688 124 +2691 124 * +Wi + +0101100 +-2666 125 -2665 125 * +Wi + +0101100 ++2665 125 +2666 125 * +Wi + +0101100 +-2664 124 -2663 124 * +Wi + +0101100 ++2662 124 -2661 124 +2660 117 +2659 117 +2658 124 * +Wi + +0101100 +-2659 117 +2657 117 -2667 124 +2656 124 * +Wi + +0101100 +-2660 117 -2655 124 -2668 124 -2657 117 * +Wi + +0101100 ++2654 124 -2658 124 +2653 117 +2652 117 +2661 124 * +Wi + +0101100 +-2652 117 +2651 117 -2671 124 +2655 124 * +Wi + +0101100 +-2653 117 -2656 124 -2672 124 -2651 117 * +Wi + +0101100 ++2664 0 -2650 0 -2662 0 +2649 0 * +Wi + +0101100 ++2663 0 -2649 0 -2654 0 +2650 0 * +Wi + +0101100 +-2648 0 +2647 0 +2646 0 -2645 0 * +Wi + +0101100 +-2646 0 +2644 0 +2648 0 -2643 0 * +Wi + +0101100 +-2642 0 +2645 0 +2641 0 -2640 0 * +Wi + +0101100 +-2641 0 +2643 0 +2642 0 -2639 0 * +Wi + +0101100 ++2638 0 +2640 0 -2637 0 -2636 0 * +Wi + +0101100 ++2637 0 +2639 0 -2638 0 -2635 0 * +Wi + +0101100 ++2636 126 +2635 126 * +Wi + +0101100 +-2634 120 -2633 120 * +Wi + +0101100 +-2632 119 -2631 119 * +Wi + +0101100 +-2630 126 -2629 126 * +Wi + +0101100 ++2633 120 +2634 120 * +Wi + +0101100 ++2631 119 +2632 119 * +Wi + +0101100 ++2628 126 +2627 126 +2626 126 -2629 126 -2625 126 * +Wi + +0101100 ++2624 126 +2623 126 +2625 126 -2630 126 -2626 126 * +Wi + +0101100 ++2644 126 +2647 126 * +Wi + +0101100 +-2622 127 -2621 127 * +Wi + +0101100 ++2621 127 +2622 127 * +Wi + +0101100 +-2620 126 -2619 126 * +Wi + +0101100 ++2618 126 -2617 126 +2616 119 +2615 119 +2614 126 * +Wi + +0101100 +-2615 119 +2613 119 -2623 126 +2612 126 * +Wi + +0101100 +-2616 119 -2611 126 -2624 126 -2613 119 * +Wi + +0101100 ++2610 126 -2614 126 +2609 119 +2608 119 +2617 126 * +Wi + +0101100 +-2608 119 +2607 119 -2627 126 +2611 126 * +Wi + +0101100 +-2609 119 -2612 126 -2628 126 -2607 119 * +Wi + +0101100 ++2620 0 -2606 0 -2610 0 +2605 0 * +Wi + +0101100 ++2619 0 -2605 0 -2618 0 +2606 0 * +Wi + +0101100 ++2636 128 +2635 128 * +Wi + +0101100 +-2634 121 -2633 121 * +Wi + +0101100 +-2632 118 -2631 118 * +Wi + +0101100 +-2630 128 -2629 128 * +Wi + +0101100 ++2633 121 +2634 121 * +Wi + +0101100 ++2631 118 +2632 118 * +Wi + +0101100 ++2604 128 +2603 128 +2626 128 -2629 128 -2625 128 * +Wi + +0101100 ++2602 128 +2601 128 +2625 128 -2630 128 -2626 128 * +Wi + +0101100 ++2644 128 +2647 128 * +Wi + +0101100 +-2622 129 -2621 129 * +Wi + +0101100 ++2621 129 +2622 129 * +Wi + +0101100 +-2620 128 -2619 128 * +Wi + +0101100 ++2618 128 -2600 128 +2599 118 +2598 118 +2597 128 * +Wi + +0101100 +-2598 118 +2596 118 -2601 128 +2595 128 * +Wi + +0101100 +-2599 118 -2594 128 -2602 128 -2596 118 * +Wi + +0101100 ++2610 128 -2597 128 +2593 118 +2592 118 +2600 128 * +Wi + +0101100 +-2592 118 +2591 118 -2603 128 +2594 128 * +Wi + +0101100 +-2593 118 -2595 128 -2604 128 -2591 118 * +Wi + +0101100 +-2892 115 -2879 115 -2590 117 -2589 117 +2588 117 * +Wi + +0101100 +-2883 115 -2885 115 -2588 117 -2587 117 +2590 117 * +Wi + +0101100 +-2586 0 -2585 0 * +Wi + +0101100 +-2584 117 +2585 117 +2583 117 -2888 117 -2881 117 * +Wi + +0101100 +-2583 117 +2586 117 +2584 117 -2880 117 -2890 117 * +Wi + +0101100 ++2582 0 +2581 0 * +Wi + +0101100 ++2580 0 +2579 0 -2578 0 -2582 0 * +Wi + +0101100 ++2578 0 +2577 0 -2580 0 -2581 0 * +Wi + +0101100 +-2674 124 -2673 124 * +Wi + +0101100 +-2576 117 -2575 117 * +Wi + +0101100 ++2574 117 +2573 117 +2572 117 -2571 117 -2676 117 * +Wi + +0101100 ++2571 117 +2570 117 +2569 117 -2574 117 -2675 117 * +Wi + +0101100 +-2878 115 -2875 115 * +Wi + +0101100 +-2587 117 -2589 117 * +Wi + +0101100 ++2568 117 +2567 122 -2569 117 +2566 117 * +Wi + +0101100 ++2565 117 -2564 117 -2570 117 -2567 122 * +Wi + +0101100 ++2563 117 +2562 122 -2572 117 +2564 117 * +Wi + +0101100 ++2561 117 -2566 117 -2573 117 -2562 122 * +Wi + +0101100 +-2560 117 +2795 117 +2559 117 -2561 117 -2563 117 * +Wi + +0101100 +-2559 117 +2796 117 +2560 117 -2565 117 -2568 117 * +Wi + +0101100 +-2558 0 +2557 0 +2556 0 -2555 0 * +Wi + +0101100 +-2556 0 +2554 0 +2558 0 -2553 0 * +Wi + +0101100 ++2552 117 -2551 117 -2550 130 +2549 117 * +Wi + +0101100 +-2548 0 +2550 0 +2547 0 -2546 0 * +Wi + +0101100 ++2546 130 -2545 117 -2579 117 +2544 117 * +Wi + +0101100 ++2543 117 -2549 117 -2542 130 +2551 117 * +Wi + +0101100 +-2547 0 +2542 0 +2548 0 -2541 0 * +Wi + +0101100 ++2541 130 -2544 117 -2577 117 +2545 117 * +Wi + +0101100 ++2540 0 -2553 0 -2539 0 +2538 0 * +Wi + +0101100 ++2539 0 -2555 0 -2540 0 +2537 0 * +Wi + +0101100 +-2536 0 -2543 0 +2535 0 +2537 0 * +Wi + +0101100 +-2535 0 -2552 0 +2536 0 +2538 0 * +Wi + +0101100 +-2534 117 +2672 124 +2667 124 +2533 117 +2575 117 * +Wi + +0101100 +-2533 117 +2668 124 +2671 124 +2534 117 +2576 117 * +Wi + +0101100 +-2532 0 +2554 0 +2531 0 -2530 0 * +Wi + +0101100 +-2531 0 +2557 0 +2532 0 -2529 0 * +Wi + +0101100 +-2528 117 -2529 117 +2527 117 +2660 117 +2652 117 * +Wi + +0101100 +-2527 117 -2530 117 +2528 117 +2653 117 +2659 117 * +Wi + +0101100 ++2526 0 -2525 0 -2524 0 +2523 0 * +Wi + +0101100 ++2524 0 -2522 0 -2526 0 +2521 0 * +Wi + +0101100 +-2520 119 +2628 126 +2623 126 +2519 119 +2518 119 * +Wi + +0101100 +-2519 119 +2624 126 +2627 126 +2520 119 +2517 119 * +Wi + +0101100 +-2516 0 +2521 0 +2515 0 -2514 0 * +Wi + +0101100 +-2515 0 +2523 0 +2516 0 -2513 0 * +Wi + +0101100 +-2512 119 -2513 119 +2511 119 +2616 119 +2608 119 * +Wi + +0101100 +-2511 119 -2514 119 +2512 119 +2609 119 +2615 119 * +Wi + +0101100 ++2510 0 -2522 0 -2509 0 +2508 0 * +Wi + +0101100 ++2509 0 -2525 0 -2510 0 +2507 0 * +Wi + +0101100 +-2506 0 +2505 0 +2504 0 +2507 0 * +Wi + +0101100 +-2504 0 +2503 0 +2506 0 +2508 0 * +Wi + +0101100 +-2856 115 -2843 115 -2502 119 -2501 119 +2500 119 * +Wi + +0101100 +-2847 115 -2849 115 -2500 119 -2499 119 +2502 119 * +Wi + +0101100 +-2498 0 -2497 0 * +Wi + +0101100 +-2496 119 +2497 119 +2495 119 -2852 119 -2845 119 * +Wi + +0101100 +-2495 119 +2498 119 +2496 119 -2844 119 -2854 119 * +Wi + +0101100 ++2494 0 +2493 0 * +Wi + +0101100 +-2492 119 -2491 131 +2490 119 -2503 119 * +Wi + +0101100 +-2489 0 +2491 0 +2488 0 -2487 0 * +Wi + +0101100 +-2486 119 -2485 119 +2484 119 +2487 131 * +Wi + +0101100 +-2490 119 -2483 131 +2492 119 -2505 119 * +Wi + +0101100 +-2488 0 +2483 0 +2489 0 -2482 0 * +Wi + +0101100 +-2484 119 -2481 119 +2486 119 +2482 131 * +Wi + +0101100 ++2480 0 +2481 0 -2479 0 -2494 0 * +Wi + +0101100 ++2479 0 +2485 0 -2480 0 -2493 0 * +Wi + +0101100 +-2630 126 -2629 126 * +Wi + +0101100 +-2517 119 -2518 119 * +Wi + +0101100 ++2478 119 +2477 119 +2476 119 -2475 119 -2632 119 * +Wi + +0101100 ++2475 119 +2474 119 +2473 119 -2478 119 -2631 119 * +Wi + +0101100 +-2842 115 -2839 115 * +Wi + +0101100 +-2499 119 -2501 119 * +Wi + +0101100 ++2472 119 +2471 120 -2473 119 +2470 119 * +Wi + +0101100 ++2469 119 -2468 119 -2474 119 -2471 120 * +Wi + +0101100 ++2467 119 +2466 120 -2476 119 +2468 119 * +Wi + +0101100 ++2465 119 -2470 119 -2477 119 -2466 120 * +Wi + +0101100 +-2464 119 +2825 119 +2463 119 -2465 119 -2467 119 * +Wi + +0101100 +-2463 119 +2826 119 +2464 119 -2469 119 -2472 119 * +Wi + +0101100 +-2462 118 +2604 128 +2601 128 +2461 118 +2518 118 * +Wi + +0101100 +-2461 118 +2602 128 +2603 128 +2462 118 +2517 118 * +Wi + +0101100 +-2512 118 -2513 118 +2511 118 +2599 118 +2592 118 * +Wi + +0101100 +-2511 118 -2514 118 +2512 118 +2593 118 +2598 118 * +Wi + +0101100 +-2874 115 -2861 115 -2460 118 -2501 118 +2459 118 * +Wi + +0101100 +-2865 115 -2867 115 -2459 118 -2499 118 +2460 118 * +Wi + +0101100 +-2496 118 +2497 118 +2495 118 -2870 118 -2863 118 * +Wi + +0101100 +-2495 118 +2498 118 +2496 118 -2862 118 -2872 118 * +Wi + +0101100 +-2458 118 -2483 132 +2457 118 -2503 118 * +Wi + +0101100 +-2456 118 -2485 118 +2455 118 +2482 132 * +Wi + +0101100 +-2457 118 -2491 132 +2458 118 -2505 118 * +Wi + +0101100 +-2455 118 -2481 118 +2456 118 +2487 132 * +Wi + +0101100 +-2630 128 -2629 128 * +Wi + +0101100 +-2517 118 -2518 118 * +Wi + +0101100 ++2478 118 +2454 118 +2453 118 -2475 118 -2632 118 * +Wi + +0101100 ++2475 118 +2452 118 +2451 118 -2478 118 -2631 118 * +Wi + +0101100 +-2860 115 -2857 115 * +Wi + +0101100 +-2499 118 -2501 118 * +Wi + +0101100 ++2450 118 +2449 121 -2451 118 +2470 118 * +Wi + +0101100 ++2448 118 -2468 118 -2452 118 -2449 121 * +Wi + +0101100 ++2447 118 +2446 121 -2453 118 +2468 118 * +Wi + +0101100 ++2445 118 -2470 118 -2454 118 -2446 121 * +Wi + +0101100 +-2464 118 +2825 118 +2463 118 -2445 118 -2447 118 * +Wi + +0101100 +-2463 118 +2826 118 +2464 118 -2448 118 -2450 118 * +Wi + +0101100 +-2444 0 +2443 0 +2442 0 -2798 0 * +Wi + +0101100 +-2442 0 +2441 0 +2444 0 -2797 0 * +Wi + +0101100 +-2441 122 -2443 122 * +Wi + +0101100 ++2440 122 +2439 122 +2438 122 +2437 122 * +Wi + +0101100 +-2436 122 -2435 122 +2434 125 +2440 122 * +Wi + +0101100 +-2434 125 -2433 122 +2432 122 +2439 122 * +Wi + +0101100 +-2432 122 -2431 122 +2430 125 +2438 122 * +Wi + +0101100 +-2430 125 -2429 122 +2436 122 +2437 122 * +Wi + +0101100 +-2431 122 -2429 122 -2435 122 -2433 122 * +Wi + +0101100 ++2428 122 +2427 122 * +Wi + +0101100 ++2678 122 -2426 122 +2573 117 +2569 117 +2425 122 * +Wi + +0101100 +-2568 117 -2561 117 -2424 122 -2793 122 +2423 122 * +Wi + +0101100 ++2677 122 -2425 122 +2570 117 +2572 117 +2426 122 * +Wi + +0101100 +-2563 117 -2565 117 -2423 122 -2794 122 +2424 122 * +Wi + +0101100 +-2422 0 +2427 0 +2421 0 -2420 0 * +Wi + +0101100 +-2421 0 +2428 0 +2422 0 -2419 0 * +Wi + +0101100 ++2419 122 +2420 122 * +Wi + +0101100 +-2680 124 -2679 124 * +Wi + +0101100 ++2418 125 -2417 125 -2437 122 -2440 122 +2416 125 * +Wi + +0101100 ++2415 125 -2416 125 -2439 122 -2438 122 +2417 125 * +Wi + +0101100 +-2418 0 -2415 0 * +Wi + +0101100 ++2414 0 +2413 0 * +Wi + +0101100 +-2412 0 +2411 0 +2410 0 -2414 0 * +Wi + +0101100 +-2410 0 +2409 0 +2412 0 -2413 0 * +Wi + +0101100 ++2427 122 +2428 122 * +Wi + +0101100 +-2691 124 -2688 124 * +Wi + +0101100 +-2408 0 +2409 0 +2407 0 -2406 0 * +Wi + +0101100 +-2407 0 +2411 0 +2408 0 -2405 0 * +Wi + +0101100 +-2404 0 +2665 0 +2403 0 -2405 0 * +Wi + +0101100 +-2403 0 +2666 0 +2404 0 -2406 0 * +Wi + +0101100 +-2402 0 +2401 0 +2400 0 -2828 0 * +Wi + +0101100 +-2400 0 +2399 0 +2402 0 -2827 0 * +Wi + +0101100 +-2399 120 -2401 120 * +Wi + +0101100 ++2398 120 +2397 120 +2396 120 +2395 120 * +Wi + +0101100 +-2394 120 -2393 120 +2392 127 +2398 120 * +Wi + +0101100 +-2392 127 -2391 120 +2390 120 +2397 120 * +Wi + +0101100 +-2390 120 -2389 120 +2388 127 +2396 120 * +Wi + +0101100 +-2388 127 -2387 120 +2394 120 +2395 120 * +Wi + +0101100 +-2389 120 -2387 120 -2393 120 -2391 120 * +Wi + +0101100 ++2386 120 +2385 120 * +Wi + +0101100 ++2634 120 -2384 120 +2477 119 +2473 119 +2383 120 * +Wi + +0101100 +-2472 119 -2465 119 -2382 120 -2823 120 +2381 120 * +Wi + +0101100 ++2633 120 -2383 120 +2474 119 +2476 119 +2384 120 * +Wi + +0101100 +-2467 119 -2469 119 -2381 120 -2824 120 +2382 120 * +Wi + +0101100 ++2380 0 +2379 0 +2385 0 -2378 0 * +Wi + +0101100 ++2377 0 +2378 0 +2386 0 -2379 0 * +Wi + +0101100 ++2380 120 +2377 120 * +Wi + +0101100 ++2635 126 +2636 126 * +Wi + +0101100 +-2399 121 -2401 121 * +Wi + +0101100 ++2376 121 +2375 121 +2374 121 +2373 121 * +Wi + +0101100 +-2394 121 -2372 121 +2371 129 +2376 121 * +Wi + +0101100 +-2371 129 -2370 121 +2390 121 +2375 121 * +Wi + +0101100 +-2390 121 -2369 121 +2368 129 +2374 121 * +Wi + +0101100 +-2368 129 -2367 121 +2394 121 +2373 121 * +Wi + +0101100 +-2369 121 -2367 121 -2372 121 -2370 121 * +Wi + +0101100 ++2386 121 +2385 121 * +Wi + +0101100 ++2634 121 -2366 121 +2454 118 +2451 118 +2365 121 * +Wi + +0101100 +-2450 118 -2445 118 -2364 121 -2823 121 +2363 121 * +Wi + +0101100 ++2633 121 -2365 121 +2452 118 +2453 118 +2366 121 * +Wi + +0101100 +-2447 118 -2448 118 -2363 121 -2824 121 +2364 121 * +Wi + +0101100 ++2380 121 +2377 121 * +Wi + +0101100 ++2635 128 +2636 128 * +Wi + +0101100 ++2362 127 -2361 127 -2395 120 -2398 120 +2360 127 * +Wi + +0101100 ++2359 127 -2360 127 -2397 120 -2396 120 +2361 127 * +Wi + +0101100 +-2362 0 -2359 0 * +Wi + +0101100 ++2358 0 +2357 0 * +Wi + +0101100 +-2356 0 +2355 0 +2354 0 -2358 0 * +Wi + +0101100 +-2354 0 +2353 0 +2356 0 -2357 0 * +Wi + +0101100 ++2385 120 +2386 120 * +Wi + +0101100 +-2647 126 -2644 126 * +Wi + +0101100 +-2352 0 +2353 0 +2351 0 -2350 0 * +Wi + +0101100 +-2351 0 +2355 0 +2352 0 -2349 0 * +Wi + +0101100 +-2348 0 +2621 0 +2347 0 -2349 0 * +Wi + +0101100 +-2347 0 +2622 0 +2348 0 -2350 0 * +Wi + +0101100 ++2362 129 -2346 129 -2373 121 -2376 121 +2345 129 * +Wi + +0101100 ++2359 129 -2345 129 -2375 121 -2374 121 +2346 129 * +Wi + +0101100 ++2385 121 +2386 121 * +Wi + +0101100 +-2647 128 -2644 128 * +Wi + +0101100 ++2344 133 -2342 133 +2323 133 -2322 133 -2324 133 +2336 133 -2337 133 +2338 133 +2335 133 -2339 133 ++2341 133 +2340 133 -2334 133 -2328 133 +2329 133 -2327 133 +2326 133 -2325 133 +2343 133 * +Wi + +0101100 ++2290 133 +2291 133 +2315 133 +2314 133 -2303 133 +2302 133 +2301 133 +2300 133 +2299 133 +2298 133 ++2297 133 +2296 133 +2295 133 +2294 133 +2292 133 -2293 133 -2313 133 -2312 133 -2311 133 -2310 133 +-2309 133 -2308 133 -2307 133 +2306 133 -2305 133 -2304 133 +2289 133 +2288 133 * +Wi + +0101100 +-2317 133 -2316 133 * +Wi + +0101100 ++2319 133 +2318 133 * +Wi + +0101100 ++2321 133 +2320 133 * +Wi + +0101100 ++2331 133 +2330 133 * +Wi + +0101100 ++2333 133 +2332 133 * +Wi + +0101100 +-2287 0 -2286 0 +2285 0 +2284 0 * +Wi + +0101100 +-2283 0 -2284 0 +2282 0 +2286 0 * +Wi + +0101100 +-2285 0 -2282 0 * +Wi + +0101100 ++2550 0 +2542 0 * +Wi + +0101100 +-2281 0 -2280 0 * +Wi + +0101100 ++2279 0 +2278 0 * +Wi + +0101100 +-2277 0 +2276 0 +2275 0 -2274 0 * +Wi + +0101100 +-2275 0 +2273 0 +2277 0 -2272 0 * +Wi + +0101100 ++2272 0 +2271 0 -2270 0 -2269 0 * +Wi + +0101100 ++2274 0 +2269 0 -2268 0 -2271 0 * +Wi + +0101100 +-2267 0 +2281 0 +2266 0 -2265 0 * +Wi + +0101100 +-2266 0 +2280 0 +2267 0 -2264 0 * +Wi + +0101100 +-2263 0 -2262 0 * +Wi + +0101100 ++2261 0 +2260 0 * +Wi + +0101100 ++2259 0 -2264 0 -2258 0 +2261 0 * +Wi + +0101100 ++2258 0 -2265 0 -2259 0 +2260 0 * +Wi + +0101100 ++2257 0 -2273 0 -2256 0 +2255 0 * +Wi + +0101100 ++2256 0 -2276 0 -2257 0 +2254 0 * +Wi + +0101100 ++2253 0 -2546 0 -2252 0 +2255 0 * +Wi + +0101100 ++2252 0 -2541 0 -2253 0 +2254 0 * +Wi + +0101100 +-2251 0 +2287 0 +2250 0 -2249 0 * +Wi + +0101100 +-2250 0 +2283 0 +2251 0 -2248 0 * +Wi + +0101100 ++2247 0 -2248 0 -2246 0 +2245 0 * +Wi + +0101100 ++2246 0 -2249 0 -2247 0 +2244 0 * +Wi + +0101100 +-2243 0 +2278 0 +2242 0 -2241 0 * +Wi + +0101100 +-2242 0 +2279 0 +2243 0 -2240 0 * +Wi + +0101100 +-2239 0 -2238 0 * +Wi + +0101100 ++2245 0 +2244 0 * +Wi + +0101100 ++2237 0 -2238 0 -2236 0 +2240 0 * +Wi + +0101100 ++2236 0 -2239 0 -2237 0 +2241 0 * +Wi + +0101100 +-2235 0 +2263 0 +2234 0 -2233 0 * +Wi + +0101100 +-2234 0 +2262 0 +2235 0 -2232 0 * +Wi + +0101100 ++2231 0 +2230 0 * +Wi + +0101100 +-2268 0 -2270 0 * +Wi + +0101100 ++2229 0 +2232 0 -2228 0 -2231 0 * +Wi + +0101100 ++2228 0 +2233 0 -2229 0 -2230 0 * +Wi + +0101100 +-2227 0 -2226 0 +2225 0 +2224 0 * +Wi + +0101100 +-2223 0 -2224 0 +2222 0 +2226 0 * +Wi + +0101100 +-2225 0 -2222 0 * +Wi + +0101100 ++2483 0 +2491 0 * +Wi + +0101100 +-2221 0 -2220 0 * +Wi + +0101100 ++2219 0 +2218 0 * +Wi + +0101100 +-2217 0 +2216 0 +2215 0 -2214 0 * +Wi + +0101100 +-2215 0 +2213 0 +2217 0 -2212 0 * +Wi + +0101100 ++2212 0 +2211 0 -2210 0 -2209 0 * +Wi + +0101100 ++2214 0 +2209 0 -2208 0 -2211 0 * +Wi + +0101100 +-2207 0 +2221 0 +2206 0 -2205 0 * +Wi + +0101100 +-2206 0 +2220 0 +2207 0 -2204 0 * +Wi + +0101100 +-2203 0 -2202 0 * +Wi + +0101100 ++2201 0 +2200 0 * +Wi + +0101100 ++2199 0 -2204 0 -2198 0 +2201 0 * +Wi + +0101100 ++2198 0 -2205 0 -2199 0 +2200 0 * +Wi + +0101100 ++2197 0 -2213 0 -2196 0 +2195 0 * +Wi + +0101100 ++2196 0 -2216 0 -2197 0 +2194 0 * +Wi + +0101100 ++2193 0 -2482 0 -2192 0 +2195 0 * +Wi + +0101100 ++2192 0 -2487 0 -2193 0 +2194 0 * +Wi + +0101100 +-2191 0 +2227 0 +2190 0 -2189 0 * +Wi + +0101100 +-2190 0 +2223 0 +2191 0 -2188 0 * +Wi + +0101100 ++2187 0 -2188 0 -2186 0 +2185 0 * +Wi + +0101100 ++2186 0 -2189 0 -2187 0 +2184 0 * +Wi + +0101100 +-2183 0 +2218 0 +2182 0 -2181 0 * +Wi + +0101100 +-2182 0 +2219 0 +2183 0 -2180 0 * +Wi + +0101100 +-2179 0 -2178 0 * +Wi + +0101100 ++2185 0 +2184 0 * +Wi + +0101100 ++2177 0 -2178 0 -2176 0 +2180 0 * +Wi + +0101100 ++2176 0 -2179 0 -2177 0 +2181 0 * +Wi + +0101100 +-2175 0 +2203 0 +2174 0 -2173 0 * +Wi + +0101100 +-2174 0 +2202 0 +2175 0 -2172 0 * +Wi + +0101100 ++2171 0 +2170 0 * +Wi + +0101100 +-2208 0 -2210 0 * +Wi + +0101100 ++2169 0 +2172 0 -2168 0 -2171 0 * +Wi + +0101100 ++2168 0 +2173 0 -2169 0 -2170 0 * +Wi + +0101100 +-2166 46 -2167 46 * +Wi + +0101100 +-2164 46 -2165 46 * +Wi + +0101100 ++2163 0 * +Wi + +0101100 ++2162 46 +2161 46 * +Wi + +0101100 +-2161 46 -2162 46 * +Wi + +0101100 +-2160 0 +2159 0 +2158 0 -2157 0 * +Wi + +0101100 +-2158 0 +2156 0 +2160 0 -2155 0 * +Wi + +0101100 ++2291 133 +2290 133 +2288 133 +2289 133 -2304 133 -2305 133 +2306 133 -2307 133 -2308 133 -2309 133 +-2310 133 -2311 133 -2312 133 -2313 133 -2293 133 +2292 133 +2294 133 +2295 133 +2296 133 +2297 133 ++2298 133 +2299 133 +2300 133 +2301 133 +2302 133 -2303 133 +2314 133 +2315 133 * +Wi + +0101100 +-2155 134 -2157 134 * +Wi + +0101100 +-2154 134 -2153 134 * +Wi + +0101100 +-2152 134 +2151 134 +2150 134 -2325 133 * +Wi + +0101100 +-2149 134 +2148 134 +2147 134 -2327 133 * +Wi + +0101100 +-2146 134 +2145 134 +2144 134 -2328 133 * +Wi + +0101100 +-2144 134 +2143 134 +2142 134 -2334 133 * +Wi + +0101100 +-2141 134 +2140 134 +2139 134 -2339 133 * +Wi + +0101100 +-2138 134 +2137 134 +2136 134 -2337 133 * +Wi + +0101100 +-2135 134 +2134 134 +2133 134 -2324 133 * +Wi + +0101100 +-2133 134 +2132 134 +2131 134 -2322 133 * +Wi + +0101100 +-2130 134 +2129 134 +2128 134 -2342 133 * +Wi + +0101100 ++2127 0 -2126 0 -2125 0 +2124 0 * +Wi + +0101100 ++2123 0 -2124 0 -2122 0 +2126 0 * +Wi + +0101100 ++2121 0 -2120 0 -2119 0 +2118 0 * +Wi + +0101100 ++2117 0 -2118 0 -2116 0 +2120 0 * +Wi + +0101100 +-2115 0 +2114 0 +2113 0 -2166 0 * +Wi + +0101100 +-2113 0 +2112 0 +2115 0 -2167 0 * +Wi + +0101100 +-2111 0 +2110 0 +2109 0 -2164 0 * +Wi + +0101100 +-2109 0 +2108 0 +2111 0 -2165 0 * +Wi + +0101100 ++2114 0 +2112 0 * +Wi + +0101100 ++2107 0 +2106 0 * +Wi + +0101100 ++2110 0 +2108 0 * +Wi + +0101100 ++2105 0 +2104 0 * +Wi + +0101100 +-2103 0 +2102 0 +2101 0 -2153 0 * +Wi + +0101100 +-2101 0 +2100 0 +2103 0 -2154 0 * +Wi + +0101100 +-2099 134 +2116 134 +2098 134 -2331 133 * +Wi + +0101100 +-2098 134 +2119 134 +2099 134 -2330 133 * +Wi + +0101100 +-2097 134 +2107 134 +2096 134 -2321 133 * +Wi + +0101100 +-2096 134 +2106 134 +2097 134 -2320 133 * +Wi + +0101100 +-2095 134 +2105 134 +2094 134 -2319 133 * +Wi + +0101100 +-2094 134 +2104 134 +2095 134 -2318 133 * +Wi + +0101100 ++2093 134 -2161 134 -2092 134 +2317 133 * +Wi + +0101100 ++2092 134 -2162 134 -2093 134 +2316 133 * +Wi + +0101100 +-2091 134 +2122 134 +2090 134 -2332 133 * +Wi + +0101100 +-2090 134 +2125 134 +2091 134 -2333 133 * +Wi + +0101100 +-2089 134 +2088 134 +2128 134 -2344 133 * +Wi + +0101100 ++2323 133 -2131 134 +2087 134 +2130 134 * +Wi + +0101100 ++2336 133 -2136 134 -2086 134 +2135 134 * +Wi + +0101100 ++2338 133 -2085 134 -2084 134 +2138 134 * +Wi + +0101100 ++2335 133 -2139 134 -2083 134 +2085 134 * +Wi + +0101100 +-2141 134 +2082 134 +2081 134 -2341 133 * +Wi + +0101100 +-2142 134 +2080 134 +2081 134 +2340 133 * +Wi + +0101100 +-2147 134 +2079 134 +2146 134 +2329 133 * +Wi + +0101100 ++2326 133 -2150 134 -2078 134 +2149 134 * +Wi + +0101100 +-2089 134 +2077 134 +2152 134 +2343 133 * +Wi + +0101100 ++2129 46 +2087 46 -2088 46 +2132 46 +2077 46 +2134 46 +2151 46 -2086 46 -2078 46 +2137 46 ++2148 46 -2084 46 +2079 46 -2083 46 +2145 46 +2140 46 +2143 46 -2082 46 +2080 46 * +Wi + +0101100 +-2102 46 -2100 46 * +Wi + +0101100 +-2123 46 -2127 46 * +Wi + +0101100 +-2076 0 * +Wi + +0101100 +-2117 46 -2121 46 * +Wi + +0101100 +-2075 0 * +Wi + +0101100 +-2159 46 -2156 46 * +Wi + +0101100 +-2163 0 * +Wi + +0101100 ++2075 0 * +Wi + +0101100 ++2165 46 +2164 46 * +Wi + +0101100 ++2076 0 * +Wi + +0101100 ++2167 46 +2166 46 * +Wi + +0101100 ++2073 44 +2074 44 * +Wi + +0101100 ++2071 44 +2072 44 * +Wi + +0101100 ++2070 0 * +Wi + +0101100 +-2069 44 -2068 44 * +Wi + +0101100 ++2068 44 +2069 44 * +Wi + +0101100 +-2067 0 -2066 0 * +Wi + +0101100 ++2065 0 +2064 0 * +Wi + +0101100 +-2063 0 -2062 0 -2061 0 -2060 0 -2059 0 -2058 0 -2057 0 -2056 0 -2055 0 -2054 0 +-2053 0 -2052 0 -2051 0 * +Wi + +0101100 +-2050 0 -2049 0 +2048 0 -2047 0 +2046 0 -2045 0 +2044 0 -2043 0 -2042 0 -2041 0 +* +Wi + +0101100 ++2040 44 +2039 44 * +Wi + +0101100 +-2070 0 * +Wi + +0101100 +-2038 0 +2064 0 +2037 0 -2036 0 * +Wi + +0101100 +-2037 0 +2065 0 +2038 0 -2035 0 * +Wi + +0101100 +-2034 0 +2068 0 +2033 0 -2036 0 * +Wi + +0101100 +-2033 0 +2069 0 +2034 0 -2035 0 * +Wi + +0101100 +-2032 0 +2074 0 +2031 0 -2030 0 * +Wi + +0101100 +-2031 0 +2073 0 +2032 0 -2029 0 * +Wi + +0101100 ++2028 44 +2027 44 +2026 44 +2025 44 * +Wi + +0101100 +-2024 0 * +Wi + +0101100 +-2023 0 * +Wi + +0101100 ++2024 0 * +Wi + +0101100 +-2072 44 -2071 44 * +Wi + +0101100 ++2023 0 * +Wi + +0101100 +-2074 44 -2073 44 * +Wi + +0101100 +-2022 0 +2071 0 +2021 0 -2020 0 * +Wi + +0101100 +-2021 0 +2072 0 +2022 0 -2019 0 * +Wi + +0101100 ++2018 0 -2017 0 -2016 0 +2015 0 * +Wi + +0101100 ++2016 0 -2014 0 -2018 0 +2013 0 * +Wi + +0101100 ++2012 0 -2039 0 -2011 0 +2010 0 * +Wi + +0101100 ++2011 0 -2040 0 -2012 0 +2009 0 * +Wi + +0101100 ++2008 0 -2013 0 -2007 0 +2009 0 * +Wi + +0101100 ++2007 0 -2015 0 -2008 0 +2010 0 * +Wi + +0101100 +-2006 0 -2005 0 +2004 0 +2003 0 * +Wi + +0101100 +-2004 0 -2002 0 -2001 0 +2000 0 * +Wi + +0101100 ++2001 0 -1999 0 +1998 0 +1997 0 * +Wi + +0101100 +-1998 0 -1996 0 +2006 0 +1995 0 * +Wi + +0101100 ++1994 0 -2025 0 -1993 0 +1992 0 * +Wi + +0101100 ++1991 0 +1993 0 -2026 0 +1990 0 * +Wi + +0101100 +-1990 0 -2028 0 -1989 0 +1988 0 * +Wi + +0101100 ++1987 0 +1989 0 -2027 0 -1994 0 * +Wi + +0101100 ++1986 0 -2000 0 -1985 0 +1988 0 * +Wi + +0101100 ++1985 0 -1997 0 +1984 0 +1987 0 * +Wi + +0101100 +-1984 0 -1995 0 -1983 0 +1992 0 * +Wi + +0101100 ++1983 0 -2003 0 -1986 0 +1991 0 * +Wi + +0101100 +-1982 0 +2061 0 +2062 0 +1981 0 -1980 0 * +Wi + +0101100 ++1979 0 +1978 0 -1977 0 -1976 0 * +Wi + +0101100 ++1975 0 +1976 0 -1974 0 -1978 0 * +Wi + +0101100 ++1979 0 +1975 0 * +Wi + +0101100 +-1973 0 -1972 0 * +Wi + +0101100 ++1971 0 -2005 0 -1970 0 -1969 0 * +Wi + +0101100 +-1968 0 -1967 0 -1966 0 -1965 0 -1964 0 -1963 0 -1962 0 +1969 0 -1961 0 -1960 0 +-1959 0 * +Wi + +0101100 +-1977 0 -1974 0 * +Wi + +0101100 ++1958 0 -1999 0 -1957 0 +1956 0 * +Wi + +0101100 +-1955 0 +2042 0 +1954 0 -1953 0 * +Wi + +0101100 +-1955 0 -2041 0 -1952 0 +1951 0 * +Wi + +0101100 ++1950 0 -2043 0 +1954 0 +1949 0 * +Wi + +0101100 +-1948 0 +2050 0 -1952 0 -1947 0 * +Wi + +0101100 ++1946 0 +1950 0 -2044 0 +1945 0 * +Wi + +0101100 ++1944 0 -2045 0 +1945 0 +1943 0 * +Wi + +0101100 ++1942 0 +1944 0 -2046 0 +1941 0 * +Wi + +0101100 ++1940 0 -2047 0 +1941 0 +1939 0 * +Wi + +0101100 ++1938 0 +1940 0 -2048 0 +1937 0 * +Wi + +0101100 +-1948 0 -2049 0 +1937 0 +1936 0 * +Wi + +0101100 ++1935 0 -1939 0 -1934 0 +1933 0 * +Wi + +0101100 ++1934 0 +1942 0 -1932 0 -1931 0 * +Wi + +0101100 ++1932 0 -1943 0 -1930 0 +1929 0 * +Wi + +0101100 ++1930 0 +1946 0 -1928 0 -1927 0 * +Wi + +0101100 ++1928 0 -1949 0 -1926 0 +1925 0 * +Wi + +0101100 ++1926 0 -1953 0 +1924 0 +1923 0 * +Wi + +0101100 +-1924 0 -1951 0 -1922 0 +1921 0 * +Wi + +0101100 ++1922 0 -1947 0 +1920 0 +1919 0 * +Wi + +0101100 +-1920 0 -1936 0 -1918 0 +1917 0 * +Wi + +0101100 ++1918 0 +1938 0 -1935 0 -1916 0 * +Wi + +0101100 ++1915 0 +1963 0 -1914 0 +1913 0 * +Wi + +0101100 ++1912 0 +1960 0 -1911 0 +1910 0 * +Wi + +0101100 +-1909 0 +2014 0 +1908 0 -1966 0 +1907 0 -1906 0 * +Wi + +0101100 ++1914 0 +1964 0 -1905 0 -1904 0 * +Wi + +0101100 ++1905 0 +1965 0 +1907 0 +1903 0 * +Wi + +0101100 ++1902 0 +1959 0 -1912 0 -1901 0 * +Wi + +0101100 +-1900 0 -1967 0 -1908 0 +2017 0 +1909 0 -1899 0 * +Wi + +0101100 +-1900 0 +1968 0 -1902 0 +1898 0 * +Wi + +0101100 +-1897 0 -1896 0 +1958 0 +2002 0 -1970 0 -1961 0 -1911 0 -1895 0 * +Wi + +0101100 +-1897 0 -1894 0 -1893 0 +1892 0 * +Wi + +0101100 ++1915 0 -1962 0 +1971 0 +1996 0 -1957 0 -1891 0 +1890 0 -1889 0 * +Wi + +0101100 ++1888 0 -1887 0 +1890 0 +1886 0 * +Wi + +0101100 ++1893 0 +1885 0 -1884 0 -1883 0 * +Wi + +0101100 ++1882 0 -1881 0 -1884 0 +1880 0 * +Wi + +0101100 ++1879 0 +1878 0 -1888 0 -1877 0 * +Wi + +0101100 +-1876 0 +1875 0 -1882 0 -1874 0 * +Wi + +0101100 ++1879 0 -1873 0 +1876 0 +1872 0 * +Wi + +0101100 +-1916 0 +1917 0 +1919 0 +1921 0 +1923 0 +1925 0 -1927 0 +1929 0 -1931 0 +1933 0 +* +Wi + +0101100 ++1871 0 +1870 0 -1869 0 -1868 0 -1867 0 +1866 0 +1865 0 -1864 0 +1863 0 +1862 0 ++1861 0 -1860 0 -1859 0 +1858 0 +1857 0 +1856 0 -1855 0 * +Wi + +0101100 ++1895 0 +1854 0 -1855 0 -1853 0 * +Wi + +0101100 ++1854 0 -1856 0 +1852 0 -1910 0 * +Wi + +0101100 +-1852 0 -1857 0 -1851 0 +1901 0 * +Wi + +0101100 ++1851 0 -1858 0 +1850 0 -1898 0 * +Wi + +0101100 +-1849 0 -1861 0 +1848 0 -1903 0 * +Wi + +0101100 +-1848 0 -1862 0 -1847 0 +1904 0 * +Wi + +0101100 ++1847 0 -1863 0 +1846 0 -1913 0 * +Wi + +0101100 ++1889 0 +1845 0 -1864 0 +1846 0 * +Wi + +0101100 ++1845 0 -1865 0 +1844 0 -1886 0 * +Wi + +0101100 +-1844 0 -1866 0 -1843 0 +1877 0 * +Wi + +0101100 +-1872 0 +1842 0 -1867 0 -1843 0 * +Wi + +0101100 ++1874 0 +1841 0 -1868 0 -1842 0 * +Wi + +0101100 +-1880 0 +1840 0 -1869 0 -1841 0 * +Wi + +0101100 ++1840 0 -1870 0 -1839 0 +1883 0 * +Wi + +0101100 ++1839 0 -1871 0 -1853 0 -1892 0 * +Wi + +0101100 ++1899 0 +1906 0 -1849 0 -1860 0 -1859 0 +1850 0 * +Wi + +0101100 ++1875 0 -1881 0 -1885 0 +1894 0 -1896 0 -1956 0 -1891 0 +1887 0 -1878 0 -1873 0 +* +Wi + +0101100 +-1838 0 -1837 0 * +Wi + +0101100 ++1836 0 +1835 0 -1838 0 -1834 0 * +Wi + +0101100 ++1833 0 +1834 0 -1837 0 -1835 0 * +Wi + +0101100 ++1836 0 +1833 0 * +Wi + +0101100 +-1832 0 -1831 0 * +Wi + +0101100 +-1830 0 +2054 0 +1829 0 -1828 0 * +Wi + +0101100 +-1827 0 +2052 0 +1826 0 -1825 0 * +Wi + +0101100 +-1824 133 +2344 133 +1823 133 -1822 133 * +Wi + +0101100 +-1824 133 -2343 133 +1821 133 +1820 133 * +Wi + +0101100 ++1819 0 +2060 0 +1982 0 -1818 0 * +Wi + +0101100 +-1817 133 +2342 133 +1823 133 -1816 133 * +Wi + +0101100 +-1815 133 +2341 133 +1814 133 -1813 133 * +Wi + +0101100 +-1826 0 +2053 0 +1830 0 -1812 0 * +Wi + +0101100 +-1811 133 -2340 133 +1814 133 +1810 133 * +Wi + +0101100 +-1815 133 +2339 133 +1809 133 -1808 133 * +Wi + +0101100 ++1807 133 -1806 133 -2338 133 +1805 133 * +Wi + +0101100 +-1805 133 +2337 133 +1804 133 -1803 133 * +Wi + +0101100 +-1802 0 +1801 0 +2051 0 +1827 0 * +Wi + +0101100 ++1800 133 -1804 133 -2336 133 +1799 133 * +Wi + +0101100 ++1798 133 -1809 133 -2335 133 +1806 133 * +Wi + +0101100 +-1797 133 +2334 133 +1811 133 -1796 133 * +Wi + +0101100 ++1795 133 -1832 133 -1794 133 +2333 133 * +Wi + +0101100 ++1794 133 -1831 133 -1795 133 +2332 133 * +Wi + +0101100 ++1793 133 -1973 133 -1792 133 +2331 133 * +Wi + +0101100 ++1792 133 -1972 133 -1793 133 +2330 133 * +Wi + +0101100 ++1791 0 +2056 0 -1790 0 -1789 0 * +Wi + +0101100 +-1788 133 -2329 133 +1787 133 +1786 133 * +Wi + +0101100 +-1787 133 +2328 133 +1797 133 -1785 133 * +Wi + +0101100 +-1829 0 +2055 0 -1791 0 +1784 0 * +Wi + +0101100 +-1783 133 +2327 133 +1788 133 -1782 133 * +Wi + +0101100 ++1790 0 +2057 0 -1781 0 +1780 0 * +Wi + +0101100 ++1779 133 -1778 133 -2326 133 +1783 133 * +Wi + +0101100 +-1777 0 +1781 0 +2058 0 -1776 0 * +Wi + +0101100 +-1821 133 +2325 133 +1778 133 -1775 133 * +Wi + +0101100 ++1776 0 +2059 0 -1819 0 +1774 0 * +Wi + +0101100 +-1799 133 +2324 133 +1773 133 -1772 133 * +Wi + +0101100 +-1981 0 +2063 0 -1801 0 +1771 0 * +Wi + +0101100 ++1770 133 -1769 133 -2323 133 +1817 133 * +Wi + +0101100 +-1773 133 +2322 133 +1769 133 -1768 133 * +Wi + +0101100 ++1767 133 -2019 133 -1766 133 +2321 133 * +Wi + +0101100 ++1766 133 -2020 133 -1767 133 +2320 133 * +Wi + +0101100 ++1765 133 -2029 133 -1764 133 +2319 133 * +Wi + +0101100 ++1764 133 -2030 133 -1765 133 +2318 133 * +Wi + +0101100 +-1763 133 -2067 133 +1762 133 -2317 133 * +Wi + +0101100 +-1762 133 -2066 133 +1763 133 -2316 133 * +Wi + +0101100 +-1761 0 -1760 0 +2315 0 +1759 0 * +Wi + +0101100 ++1758 0 +1757 0 -2314 0 +1759 0 * +Wi + +0101100 ++1756 0 -1755 0 -1754 0 +2313 0 * +Wi + +0101100 +-1753 0 +1752 0 -1754 0 -2312 0 * +Wi + +0101100 +-1753 0 -1751 0 +1750 0 +2311 0 * +Wi + +0101100 +-1749 0 +1748 0 +1750 0 -2310 0 * +Wi + +0101100 +-1749 0 -1747 0 -1746 0 +2309 0 * +Wi + +0101100 ++1746 0 -1745 0 -1744 0 +2308 0 * +Wi + +0101100 +-1743 0 +1742 0 -1744 0 -2307 0 * +Wi + +0101100 +-2306 0 -1743 0 +1741 0 +1740 0 * +Wi + +0101100 +-1739 0 +1738 0 +1740 0 -2305 0 * +Wi + +0101100 +-1739 0 -1737 0 -1736 0 +2304 0 * +Wi + +0101100 +-1735 0 -1734 0 +2303 0 -1757 0 * +Wi + +0101100 ++1733 0 +1732 0 -2302 0 +1734 0 * +Wi + +0101100 +-1731 0 +1732 0 +2301 0 +1730 0 * +Wi + +0101100 +-1729 0 -1730 0 +2300 0 +1728 0 * +Wi + +0101100 ++1727 0 +1726 0 -2299 0 +1728 0 * +Wi + +0101100 +-1725 0 -2298 0 -1726 0 +1724 0 * +Wi + +0101100 ++1723 0 +1722 0 -2297 0 +1725 0 * +Wi + +0101100 +-1721 0 +1722 0 +2296 0 +1720 0 * +Wi + +0101100 +-2295 0 +1720 0 +1719 0 +1718 0 * +Wi + +0101100 +-1717 0 +1718 0 +2294 0 +1716 0 * +Wi + +0101100 +-2293 0 +1756 0 +1715 0 +1714 0 * +Wi + +0101100 ++2292 0 -1714 0 -1713 0 -1716 0 * +Wi + +0101100 ++1712 0 -1760 0 -2291 0 -1711 0 * +Wi + +0101100 +-1710 0 -1709 0 +2290 0 -1711 0 * +Wi + +0101100 ++1708 0 -1736 0 +2289 0 -1707 0 * +Wi + +0101100 +-1706 0 +1708 0 +1737 0 +1738 0 -1741 0 +1742 0 +1745 0 +1747 0 +1748 0 +1751 0 ++1752 0 +1755 0 +1715 0 -1713 0 -1717 0 -1719 0 -1721 0 -1723 0 -1724 0 -1727 0 +-1729 0 -1731 0 -1733 0 +1735 0 -1758 0 -1761 0 -1712 0 -1710 0 * +Wi + +0101100 ++2288 0 +1709 0 -1706 0 +1707 0 * +Wi + +0101100 ++1705 0 +1704 0 -1703 0 -1702 0 * +Wi + +0101100 ++1701 0 +1700 0 -1699 0 -1698 0 * +Wi + +0101100 +-1697 0 -1696 0 +1695 0 +1694 0 * +Wi + +0101100 +-1693 0 -1692 0 +1691 0 +1690 0 * +Wi + +0101100 ++1689 0 +1692 0 -1688 0 -1687 0 * +Wi + +0101100 +-1686 0 -1685 0 +1684 0 -1683 0 * +Wi + +0101100 ++1682 0 +1687 0 -1681 0 -1680 0 * +Wi + +0101100 ++1679 0 +1678 0 -1677 0 -1676 0 * +Wi + +0101100 +-1675 0 -1674 0 +1673 0 +1672 0 * +Wi + +0101100 +-1695 0 +1671 0 +1676 0 -1670 0 * +Wi + +0101100 +-1669 0 -1704 0 +1668 0 +1697 0 * +Wi + +0101100 ++1667 0 -1666 0 -1665 0 +1664 0 * +Wi + +0101100 +-1663 0 +1665 0 -1662 0 -1661 0 +1660 0 +1659 0 -1658 0 * +Wi + +0101100 +-1657 0 +1656 0 +1659 0 -1655 0 * +Wi + +0101100 +-1654 0 -1657 0 +1653 0 +1652 0 -1651 0 -1650 0 * +Wi + +0101100 ++1652 0 -1649 0 -1661 0 +1648 0 * +Wi + +0101100 +-1647 0 +1646 0 +1650 0 -1645 0 * +Wi + +0101100 ++1644 0 -1643 0 -1667 0 +1642 0 * +Wi + +0101100 ++1641 0 -1672 0 -1640 0 +1644 0 * +Wi + +0101100 +-1647 0 +1639 0 +1674 0 -1638 0 * +Wi + +0101100 +-1658 0 -1663 0 +1664 0 +1642 0 +1640 0 -1673 0 -1639 0 +1646 0 -1654 0 +1655 0 +* +Wi + +0101100 +-1637 0 -1636 0 * +Wi + +0101100 ++1675 0 -1641 0 -1643 0 -1666 0 -1662 0 +1649 0 -1651 0 -1645 0 +1638 0 * +Wi + +0101100 ++1635 0 +1634 0 * +Wi + +0101100 ++1633 0 +1632 0 * +Wi + +0101100 +-1631 0 +1632 0 +1630 0 -1629 0 * +Wi + +0101100 +-1630 0 +1633 0 +1631 0 -1628 0 * +Wi + +0101100 +-1627 0 +1626 0 +1625 0 -1636 0 * +Wi + +0101100 +-1624 0 +1634 0 +1623 0 -1622 0 * +Wi + +0101100 ++1627 0 -1637 0 -1625 0 +1621 0 * +Wi + +0101100 +-1623 0 +1635 0 +1624 0 -1620 0 * +Wi + +0101100 ++1626 0 +1621 0 * +Wi + +0101100 +-1619 0 +1618 0 +1617 0 -1616 0 * +Wi + +0101100 +-1617 0 +1615 0 +1619 0 -1614 0 * +Wi + +0101100 ++1613 0 -1612 0 -1611 0 +1610 0 * +Wi + +0101100 +-1613 0 +1609 0 +1611 0 -1608 0 * +Wi + +0101100 +-1607 0 +1606 0 +1605 0 -1604 0 * +Wi + +0101100 +-1603 0 +1602 0 +1601 0 -1600 0 * +Wi + +0101100 ++1607 0 -1599 0 -1605 0 +1598 0 * +Wi + +0101100 +-1601 0 +1597 0 +1603 0 -1596 0 * +Wi + +0101100 ++1606 0 +1598 0 * +Wi + +0101100 ++1595 0 +1594 0 +1593 0 +1698 0 -1592 0 * +Wi + +0101100 +-1612 0 -1608 0 * +Wi + +0101100 +-1599 0 -1604 0 * +Wi + +0101100 +-1700 0 -1591 0 -1590 0 -1589 0 +1588 0 * +Wi + +0101100 ++1615 0 +1618 0 * +Wi + +0101100 ++1597 0 +1602 0 * +Wi + +0101100 +-1589 0 -1587 0 +1595 0 +1586 0 * +Wi + +0101100 +-1586 0 +1594 0 +1585 0 -1590 0 * +Wi + +0101100 +-1587 0 +1592 0 +1699 0 -1588 0 * +Wi + +0101100 ++1591 0 -1701 0 -1593 0 +1585 0 * +Wi + +0101100 +-1584 0 +1583 0 +1582 0 -1581 0 * +Wi + +0101100 +-1582 0 +1580 0 +1584 0 -1579 0 * +Wi + +0101100 +-1578 0 -1577 0 -1576 0 -1575 0 -1574 0 +1573 0 +1572 0 -1571 0 * +Wi + +0101100 ++1570 0 +1574 0 -1569 0 +1568 0 -1567 0 -1566 0 -1572 0 * +Wi + +0101100 ++1685 0 -1565 0 -1575 0 -1569 0 +1564 0 * +Wi + +0101100 +-1563 0 -1562 0 * +Wi + +0101100 ++1683 0 -1561 0 -1560 0 -1559 0 -1558 0 -1557 0 +1556 0 * +Wi + +0101100 ++1555 0 +1554 0 * +Wi + +0101100 ++1583 0 +1580 0 * +Wi + +0101100 ++1553 0 -1558 0 -1552 0 +1578 0 * +Wi + +0101100 ++1567 0 +1551 0 -1560 0 -1550 0 * +Wi + +0101100 ++1552 0 -1557 0 -1549 0 +1577 0 * +Wi + +0101100 ++1571 0 +1566 0 +1550 0 -1559 0 -1553 0 * +Wi + +0101100 +-1556 0 -1549 0 -1576 0 +1565 0 +1686 0 * +Wi + +0101100 +-1684 0 -1564 0 +1568 0 +1551 0 +1561 0 * +Wi + +0101100 +-1548 0 +1547 0 +1546 0 -1562 0 * +Wi + +0101100 +-1545 0 +1554 0 +1544 0 -1543 0 * +Wi + +0101100 ++1548 0 -1563 0 -1546 0 +1542 0 * +Wi + +0101100 +-1544 0 +1555 0 +1545 0 -1541 0 * +Wi + +0101100 ++1547 0 +1542 0 * +Wi + +0101100 ++1540 0 -1539 0 -1678 0 -1538 0 * +Wi + +0101100 ++1537 0 +1540 0 -1536 0 -1535 0 * +Wi + +0101100 +-1534 0 -1533 0 +1680 0 +1532 0 * +Wi + +0101100 ++1531 0 +1530 0 -1535 0 -1529 0 * +Wi + +0101100 ++1528 0 +1531 0 -1527 0 -1534 0 * +Wi + +0101100 +-1526 0 -1690 0 +1525 0 +1524 0 * +Wi + +0101100 ++1523 0 +1524 0 -1522 0 -1521 0 * +Wi + +0101100 +-1520 0 +1703 0 +1669 0 -1694 0 +1670 0 +1677 0 +1539 0 -1536 0 -1530 0 -1527 0 +-1532 0 +1681 0 +1688 0 +1693 0 +1526 0 -1522 0 -1519 0 +1518 0 * +Wi + +0101100 ++1610 0 +1609 0 * +Wi + +0101100 +-1656 0 +1653 0 -1648 0 +1660 0 * +Wi + +0101100 ++1980 0 -1771 0 +1802 0 +1825 0 +1812 0 +1828 0 -1784 0 +1789 0 -1780 0 +1777 0 +-1774 0 +1818 0 * +Wi + +0101100 ++1570 0 +1573 0 * +Wi + +0101100 +-1517 0 +1516 0 +1523 0 -1525 0 -1691 0 -1689 0 -1682 0 +1533 0 +1528 0 +1529 0 ++1537 0 +1538 0 -1679 0 -1671 0 +1696 0 -1668 0 -1705 0 +1515 0 * +Wi + +0101100 +-1579 0 -1581 0 * +Wi + +0101100 +-1620 0 -1622 0 * +Wi + +0101100 +-1614 0 -1616 0 * +Wi + +0101100 +-1629 0 -1628 0 * +Wi + +0101100 +-1798 0 -1807 0 +1803 0 -1800 0 +1772 0 +1768 0 -1770 0 +1816 0 -1822 0 -1820 0 ++1775 0 -1779 0 +1782 0 -1786 0 +1785 0 +1796 0 -1810 0 -1813 0 +1808 0 * +Wi + +0101100 +-1600 0 -1596 0 * +Wi + +0101100 +-1543 0 -1541 0 * +Wi + +0101100 +-1514 0 -1515 0 +1702 0 +1520 0 * +Wi + +0101100 ++1513 0 +1519 0 -1521 0 -1516 0 * +Wi + +0101100 +-1517 0 +1513 0 +1518 0 -1514 0 * +Fa +0 1e-07 2 0 + +0111000 +-1512 0 * +Fa +0 1e-07 4 115 + +0111000 ++1511 0 * +Fa +0 1e-07 21 0 + +0111000 +-1510 0 * +Fa +0 1e-07 24 0 + +0111000 +-1509 0 * +Fa +0 1e-07 27 115 + +0111000 ++1508 0 +1507 0 * +Fa +0 1e-07 30 0 + +0111000 +-1506 0 * +Fa +0 1e-07 33 0 + +0111000 +-1505 0 * +Fa +0 1e-07 37 0 + +0111000 ++1504 0 * +Fa +0 1e-07 41 0 + +0111000 ++1503 0 * +Fa +0 1e-07 42 0 + +0111000 ++1502 0 * +Fa +0 1e-07 44 0 + +0111000 ++1501 0 * +Fa +0 1e-07 46 0 + +0111000 ++1500 0 * +Fa +0 1e-07 49 0 + +0111000 ++1499 0 * +Fa +0 1e-07 50 0 + +0111000 +-1498 0 * +Fa +0 1e-07 51 0 + +0111000 ++1497 0 * +Fa +0 1e-07 3 115 + +0111000 ++1496 0 * +Fa +0 1e-07 3 115 + +0111000 ++1495 0 * +Fa +0 1e-07 3 115 + +0111000 ++1494 0 * +Fa +0 1e-07 1 115 + +0111000 ++1493 0 * +Fa +0 1e-07 1 115 + +0111000 ++1492 0 * +Fa +0 1e-07 1 115 + +0111000 ++1491 0 * +Fa +0 1e-07 53 115 + +0101000 ++1490 0 * +Fa +0 1e-07 58 115 + +0101000 ++1489 0 * +Fa +0 1e-07 25 115 + +0111000 ++1488 0 * +Fa +0 1e-07 25 115 + +0111000 ++1487 0 * +Fa +0 1e-07 25 115 + +0111000 ++1486 0 * +Fa +0 1e-07 23 115 + +0111000 ++1485 0 * +Fa +0 1e-07 23 115 + +0111000 ++1484 0 * +Fa +0 1e-07 23 115 + +0111000 ++1483 0 * +Fa +0 1e-07 66 115 + +0101000 ++1482 0 * +Fa +0 1e-07 61 115 + +0101000 ++1481 0 * +Fa +0 1e-07 22 115 + +0111000 ++1480 0 * +Fa +0 1e-07 22 115 + +0111000 ++1479 0 * +Fa +0 1e-07 22 115 + +0111000 ++1478 0 * +Fa +0 1e-07 20 115 + +0111000 ++1477 0 * +Fa +0 1e-07 20 115 + +0111000 ++1476 0 * +Fa +0 1e-07 20 115 + +0111000 ++1475 0 * +Fa +0 1e-07 70 115 + +0101000 ++1474 0 * +Fa +0 1e-07 69 115 + +0101000 ++1473 0 * +Fa +0 1e-07 72 0 + +0111000 ++1472 0 * +Fa +0 1e-07 43 0 + +0111000 ++1471 0 * +Fa +0 1e-07 71 115 + +0111000 ++1470 0 +1469 0 * +Fa +0 1e-07 71 115 + +0111000 ++1468 0 +1467 0 * +Fa +0 1e-07 76 0 + +0111000 ++1466 0 +1465 0 * +Fa +0 1e-07 71 115 + +0111000 ++1464 0 +1463 0 * +Fa +0 1e-07 74 0 + +0111000 ++1462 0 * +Fa +0 1e-07 73 0 + +0111000 ++1461 0 * +Fa +0 1e-07 82 0 + +0111000 ++1460 0 * +Fa +0 1e-07 48 0 + +0111000 ++1459 0 * +Fa +0 1e-07 67 115 + +0111000 ++1458 0 +1457 0 * +Fa +0 1e-07 67 115 + +0111000 ++1456 0 +1455 0 * +Fa +0 1e-07 67 115 + +0111000 ++1454 0 +1453 0 * +Fa +0 1e-07 84 0 + +0111000 ++1452 0 * +Fa +0 1e-07 83 0 + +0111000 ++1451 0 * +Fa +0 1e-07 39 0 + +0111000 ++1450 0 * +Fa +0 1e-07 52 0 + +0111000 ++1449 0 * +Fa +0 1e-07 59 115 + +0111000 ++1448 0 +1447 0 * +Fa +0 1e-07 59 115 + +0111000 ++1446 0 +1445 0 * +Fa +0 1e-07 88 0 + +0111000 ++1444 0 +1443 0 * +Fa +0 1e-07 59 115 + +0111000 ++1442 0 +1441 0 * +Fa +0 1e-07 86 0 + +0111000 ++1440 0 * +Fa +0 1e-07 85 0 + +0111000 ++1439 0 * +Fa +0 1e-07 34 0 + +0111000 +-1438 0 * +Fa +0 1e-07 35 0 + +0111000 ++1437 0 * +Fa +0 1e-07 36 0 + +0111000 +-1436 0 * +Fa +0 1e-07 32 0 + +0111000 ++1435 0 * +Fa +0 1e-07 96 0 + +0111000 ++1434 0 * +Fa +0 1e-07 97 0 + +0111000 ++1433 0 * +Fa +0 1e-07 94 0 + +0111000 ++1432 0 * +Fa +0 1e-07 95 0 + +0111000 ++1431 0 * +Fa +0 1e-07 26 0 + +0111000 ++1430 0 * +Fa +0 1e-07 28 0 + +0111000 ++1429 0 * +Fa +0 1e-07 99 0 + +0111000 ++1428 0 * +Fa +0 1e-07 98 0 + +0111000 ++1427 0 * +Fa +0 1e-07 45 0 + +0111000 ++1426 0 * +Fa +0 1e-07 100 0 + +0111000 ++1425 0 * +Fa +0 1e-07 47 0 + +0111000 +-1424 0 * +Fa +0 1e-07 101 0 + +0111000 ++1423 0 * +Fa +0 1e-07 40 0 + +0111000 +-1422 0 -1421 0 -1420 0 * +Fa +0 1e-07 102 0 + +0111000 ++1419 0 * +Fa +0 1e-07 5 115 + +0101000 ++1418 0 * +Fa +0 1e-07 6 115 + +0101000 ++1417 0 * +Fa +0 1e-07 8 115 + +0101000 ++1416 0 * +Fa +0 1e-07 9 115 + +0101000 ++1415 0 * +Fa +0 1e-07 11 115 + +0101000 ++1414 0 * +Fa +0 1e-07 12 115 + +0101000 ++1413 0 * +Fa +0 1e-07 14 115 + +0101000 ++1412 0 * +Fa +0 1e-07 15 115 + +0101000 ++1411 0 * +Fa +0 1e-07 17 115 + +0101000 ++1410 0 * +Fa +0 1e-07 18 115 + +0101000 ++1409 0 * +Fa +0 1e-07 38 0 + +0111000 +-1408 0 -1407 0 * +Fa +0 1e-07 103 0 + +0101000 ++1406 0 * +Fa +0 1e-07 104 0 + +0111000 ++1405 0 * +Fa +0 1e-07 105 0 + +0111000 ++1404 0 * +Fa +0 1e-07 106 0 + +0101000 ++1403 0 * +Fa +0 1e-07 107 0 + +0111000 ++1402 0 * +Fa +0 1e-07 108 0 + +0111000 ++1401 0 * +Fa +0 1e-07 109 0 + +0111000 ++1400 0 * +Fa +0 1e-07 110 0 + +0111000 ++1399 0 * +Fa +0 1e-07 111 0 + +0101000 ++1398 0 * +Fa +0 1e-07 112 0 + +0111000 ++1397 0 * +Fa +0 1e-07 113 123 + +0111000 ++1396 0 * +Fa +0 1e-07 7 123 + +0101000 ++1395 0 * +Fa +0 1e-07 115 123 + +0101000 ++1394 0 * +Fa +0 1e-07 10 123 + +0101000 ++1393 0 * +Fa +0 1e-07 116 123 + +0101000 ++1392 0 * +Fa +0 1e-07 13 123 + +0101000 ++1391 0 * +Fa +0 1e-07 117 123 + +0101000 ++1390 0 * +Fa +0 1e-07 16 123 + +0101000 ++1389 0 * +Fa +0 1e-07 118 123 + +0101000 ++1388 0 * +Fa +0 1e-07 19 123 + +0101000 ++1387 0 * +Fa +0 1e-07 114 0 + +0111000 ++1386 0 * +Fa +0 1e-07 119 0 + +0111000 ++1385 0 * +Fa +0 1e-07 120 0 + +0111000 ++1384 0 * +Fa +0 1e-07 123 0 + +0111000 ++1383 0 * +Fa +0 1e-07 124 0 + +0111000 ++1382 0 * +Fa +0 1e-07 125 0 + +0111000 ++1381 0 * +Fa +0 1e-07 126 0 + +0111000 ++1380 0 * +Fa +0 1e-07 127 124 + +0111000 ++1379 0 +1378 0 * +Fa +0 1e-07 127 124 + +0111000 ++1377 0 +1376 0 * +Fa +0 1e-07 127 124 + +0111000 ++1375 0 +1374 0 * +Fa +0 1e-07 133 124 + +0101000 ++1373 0 * +Fa +0 1e-07 132 124 + +0101000 ++1372 0 * +Fa +0 1e-07 121 124 + +0111000 ++1371 0 +1370 0 * +Fa +0 1e-07 121 124 + +0111000 ++1369 0 +1368 0 * +Fa +0 1e-07 137 124 + +0111000 ++1367 0 * +Fa +0 1e-07 137 124 + +0111000 ++1366 0 * +Fa +0 1e-07 137 124 + +0111000 ++1365 0 * +Fa +0 1e-07 134 124 + +0111000 ++1364 0 * +Fa +0 1e-07 134 124 + +0111000 ++1363 0 * +Fa +0 1e-07 134 124 + +0111000 ++1362 0 * +Fa +0 1e-07 140 0 + +0111000 ++1361 0 * +Fa +0 1e-07 141 0 + +0111000 ++1360 0 * +Fa +0 1e-07 144 0 + +0111000 ++1359 0 * +Fa +0 1e-07 145 0 + +0111000 ++1358 0 * +Fa +0 1e-07 148 0 + +0111000 ++1357 0 * +Fa +0 1e-07 149 0 + +0111000 ++1356 0 * +Fa +0 1e-07 150 0 + +0111000 ++1355 0 * +Fa +0 1e-07 151 0 + +0111000 ++1354 0 * +Fa +0 1e-07 152 126 + +0111000 ++1353 0 +1352 0 * +Fa +0 1e-07 152 126 + +0111000 ++1351 0 +1350 0 * +Fa +0 1e-07 152 126 + +0111000 ++1349 0 +1348 0 * +Fa +0 1e-07 158 126 + +0101000 ++1347 0 * +Fa +0 1e-07 157 126 + +0101000 ++1346 0 * +Fa +0 1e-07 146 126 + +0111000 ++1345 0 +1344 0 * +Fa +0 1e-07 146 126 + +0111000 ++1343 0 +1342 0 * +Fa +0 1e-07 162 126 + +0111000 ++1341 0 * +Fa +0 1e-07 162 126 + +0111000 ++1340 0 * +Fa +0 1e-07 162 126 + +0111000 ++1339 0 * +Fa +0 1e-07 159 126 + +0111000 ++1338 0 * +Fa +0 1e-07 159 126 + +0111000 ++1337 0 * +Fa +0 1e-07 159 126 + +0111000 ++1336 0 * +Fa +0 1e-07 165 0 + +0111000 ++1335 0 * +Fa +0 1e-07 166 0 + +0111000 ++1334 0 * +Fa +0 1e-07 152 128 + +0111000 ++1333 0 +1332 0 * +Fa +0 1e-07 152 128 + +0111000 ++1331 0 +1330 0 * +Fa +0 1e-07 152 128 + +0111000 ++1329 0 +1328 0 * +Fa +0 1e-07 158 128 + +0101000 ++1327 0 * +Fa +0 1e-07 157 128 + +0101000 ++1326 0 * +Fa +0 1e-07 146 128 + +0111000 ++1325 0 +1324 0 * +Fa +0 1e-07 146 128 + +0111000 ++1323 0 +1322 0 * +Fa +0 1e-07 162 128 + +0111000 ++1321 0 * +Fa +0 1e-07 162 128 + +0111000 ++1320 0 * +Fa +0 1e-07 162 128 + +0111000 ++1319 0 * +Fa +0 1e-07 159 128 + +0111000 ++1318 0 * +Fa +0 1e-07 159 128 + +0111000 ++1317 0 * +Fa +0 1e-07 159 128 + +0111000 ++1316 0 * +Fa +0 1e-07 54 117 + +0111000 ++1315 0 * +Fa +0 1e-07 55 117 + +0111000 ++1314 0 * +Fa +0 1e-07 169 0 + +0111000 +-1313 0 * +Fa +0 1e-07 57 117 + +0101000 ++1312 0 * +Fa +0 1e-07 56 117 + +0101000 ++1311 0 * +Fa +0 1e-07 171 0 + +0111000 ++1310 0 * +Fa +0 1e-07 170 0 + +0111000 ++1309 0 * +Fa +0 1e-07 172 0 + +0111000 ++1308 0 * +Fa +0 1e-07 130 117 + +0111000 ++1307 0 +1306 0 * +Fa +0 1e-07 129 117 + +0101000 ++1305 0 * +Fa +0 1e-07 131 117 + +0101000 ++1304 0 * +Fa +0 1e-07 60 117 + +0111000 ++1303 0 +1302 0 * +Fa +0 1e-07 176 117 + +0111000 ++1301 0 * +Fa +0 1e-07 176 117 + +0111000 ++1300 0 * +Fa +0 1e-07 175 117 + +0111000 ++1299 0 * +Fa +0 1e-07 175 117 + +0111000 ++1298 0 * +Fa +0 1e-07 91 117 + +0101000 ++1297 0 * +Fa +0 1e-07 90 117 + +0101000 ++1296 0 * +Fa +0 1e-07 177 0 + +0111000 ++1295 0 * +Fa +0 1e-07 178 0 + +0111000 ++1294 0 * +Fa +0 1e-07 173 117 + +0111000 ++1293 0 * +Fa +0 1e-07 184 0 + +0111000 ++1292 0 * +Fa +0 1e-07 173 117 + +0111000 ++1291 0 * +Fa +0 1e-07 174 117 + +0111000 ++1290 0 * +Fa +0 1e-07 186 0 + +0111000 ++1289 0 * +Fa +0 1e-07 174 117 + +0111000 ++1288 0 * +Fa +0 1e-07 182 0 + +0111000 ++1287 0 * +Fa +0 1e-07 180 0 + +0111000 ++1286 0 * +Fa +0 1e-07 188 0 + +0111000 ++1285 0 * +Fa +0 1e-07 183 0 + +0111000 ++1284 0 * +Fa +0 1e-07 135 117 + +0111000 ++1283 0 * +Fa +0 1e-07 136 117 + +0111000 ++1282 0 * +Fa +0 1e-07 181 0 + +0111000 ++1281 0 * +Fa +0 1e-07 179 0 + +0111000 ++1280 0 * +Fa +0 1e-07 142 117 + +0101000 ++1279 0 * +Fa +0 1e-07 143 117 + +0101000 ++1278 0 * +Fa +0 1e-07 190 0 + +0111000 ++1277 0 * +Fa +0 1e-07 191 0 + +0111000 ++1276 0 * +Fa +0 1e-07 160 119 + +0111000 ++1275 0 * +Fa +0 1e-07 161 119 + +0111000 ++1274 0 * +Fa +0 1e-07 195 0 + +0111000 ++1273 0 * +Fa +0 1e-07 193 0 + +0111000 ++1272 0 * +Fa +0 1e-07 167 119 + +0101000 ++1271 0 * +Fa +0 1e-07 168 119 + +0101000 ++1270 0 * +Fa +0 1e-07 194 0 + +0111000 ++1269 0 * +Fa +0 1e-07 192 0 + +0111000 ++1268 0 * +Fa +0 1e-07 197 0 + +0111000 ++1267 0 * +Fa +0 1e-07 196 0 + +0111000 ++1266 0 * +Fa +0 1e-07 62 119 + +0111000 ++1265 0 * +Fa +0 1e-07 63 119 + +0111000 ++1264 0 * +Fa +0 1e-07 200 0 + +0111000 +-1263 0 * +Fa +0 1e-07 65 119 + +0101000 ++1262 0 * +Fa +0 1e-07 64 119 + +0101000 ++1261 0 * +Fa +0 1e-07 202 0 + +0111000 ++1260 0 * +Fa +0 1e-07 199 119 + +0111000 ++1259 0 * +Fa +0 1e-07 204 0 + +0111000 ++1258 0 * +Fa +0 1e-07 199 119 + +0111000 ++1257 0 * +Fa +0 1e-07 198 119 + +0111000 ++1256 0 * +Fa +0 1e-07 206 0 + +0111000 ++1255 0 * +Fa +0 1e-07 198 119 + +0111000 ++1254 0 * +Fa +0 1e-07 201 0 + +0111000 ++1253 0 * +Fa +0 1e-07 203 0 + +0111000 ++1252 0 * +Fa +0 1e-07 155 119 + +0111000 ++1251 0 +1250 0 * +Fa +0 1e-07 154 119 + +0101000 ++1249 0 * +Fa +0 1e-07 156 119 + +0101000 ++1248 0 * +Fa +0 1e-07 68 119 + +0111000 ++1247 0 +1246 0 * +Fa +0 1e-07 210 119 + +0111000 ++1245 0 * +Fa +0 1e-07 210 119 + +0111000 ++1244 0 * +Fa +0 1e-07 209 119 + +0111000 ++1243 0 * +Fa +0 1e-07 209 119 + +0111000 ++1242 0 * +Fa +0 1e-07 79 119 + +0101000 ++1241 0 * +Fa +0 1e-07 78 119 + +0101000 ++1240 0 * +Fa +0 1e-07 160 118 + +0111000 ++1239 0 * +Fa +0 1e-07 161 118 + +0111000 ++1238 0 * +Fa +0 1e-07 167 118 + +0101000 ++1237 0 * +Fa +0 1e-07 168 118 + +0101000 ++1236 0 * +Fa +0 1e-07 62 118 + +0111000 ++1235 0 * +Fa +0 1e-07 63 118 + +0111000 ++1234 0 * +Fa +0 1e-07 65 118 + +0101000 ++1233 0 * +Fa +0 1e-07 64 118 + +0101000 ++1232 0 * +Fa +0 1e-07 199 118 + +0111000 ++1231 0 * +Fa +0 1e-07 199 118 + +0111000 ++1230 0 * +Fa +0 1e-07 198 118 + +0111000 ++1229 0 * +Fa +0 1e-07 198 118 + +0111000 ++1228 0 * +Fa +0 1e-07 155 118 + +0111000 ++1227 0 +1226 0 * +Fa +0 1e-07 154 118 + +0101000 ++1225 0 * +Fa +0 1e-07 156 118 + +0101000 ++1224 0 * +Fa +0 1e-07 68 118 + +0111000 ++1223 0 +1222 0 * +Fa +0 1e-07 210 118 + +0111000 ++1221 0 * +Fa +0 1e-07 210 118 + +0111000 ++1220 0 * +Fa +0 1e-07 209 118 + +0111000 ++1219 0 * +Fa +0 1e-07 209 118 + +0111000 ++1218 0 * +Fa +0 1e-07 79 118 + +0101000 ++1217 0 * +Fa +0 1e-07 78 118 + +0101000 ++1216 0 * +Fa +0 1e-07 87 0 + +0111000 ++1215 0 * +Fa +0 1e-07 89 0 + +0111000 ++1214 0 * +Fa +0 1e-07 211 122 + +0101000 +-1213 0 -1212 0 * +Fa +0 1e-07 212 122 + +0111000 ++1211 0 * +Fa +0 1e-07 212 122 + +0111000 ++1210 0 * +Fa +0 1e-07 215 122 + +0111000 ++1209 0 * +Fa +0 1e-07 215 122 + +0111000 ++1208 0 * +Fa +0 1e-07 216 122 + +0101000 +-1207 0 -1206 0 * +Fa +0 1e-07 93 122 + +0111000 ++1205 0 * +Fa +0 1e-07 93 122 + +0111000 ++1204 0 * +Fa +0 1e-07 92 122 + +0111000 ++1203 0 * +Fa +0 1e-07 92 122 + +0111000 ++1202 0 * +Fa +0 1e-07 218 0 + +0111000 ++1201 0 * +Fa +0 1e-07 217 0 + +0111000 ++1200 0 * +Fa +0 1e-07 128 122 + +0111000 ++1199 0 +1198 0 * +Fa +0 1e-07 213 125 + +0111000 ++1197 0 * +Fa +0 1e-07 214 125 + +0111000 ++1196 0 * +Fa +0 1e-07 219 0 + +0111000 +-1195 0 -1194 0 * +Fa +0 1e-07 220 0 + +0111000 ++1193 0 * +Fa +0 1e-07 221 0 + +0111000 ++1192 0 * +Fa +0 1e-07 122 125 + +0111000 ++1191 0 +1190 0 * +Fa +0 1e-07 223 0 + +0111000 ++1189 0 * +Fa +0 1e-07 222 0 + +0111000 ++1188 0 * +Fa +0 1e-07 139 0 + +0111000 ++1187 0 * +Fa +0 1e-07 138 0 + +0111000 ++1186 0 * +Fa +0 1e-07 75 0 + +0111000 ++1185 0 * +Fa +0 1e-07 77 0 + +0111000 ++1184 0 * +Fa +0 1e-07 224 120 + +0101000 +-1183 0 -1182 0 * +Fa +0 1e-07 225 120 + +0111000 ++1181 0 * +Fa +0 1e-07 225 120 + +0111000 ++1180 0 * +Fa +0 1e-07 228 120 + +0111000 ++1179 0 * +Fa +0 1e-07 228 120 + +0111000 ++1178 0 * +Fa +0 1e-07 229 120 + +0101000 +-1177 0 -1176 0 * +Fa +0 1e-07 81 120 + +0111000 ++1175 0 * +Fa +0 1e-07 81 120 + +0111000 ++1174 0 * +Fa +0 1e-07 80 120 + +0111000 ++1173 0 * +Fa +0 1e-07 80 120 + +0111000 ++1172 0 * +Fa +0 1e-07 231 0 + +0111000 ++1171 0 * +Fa +0 1e-07 230 0 + +0111000 ++1170 0 * +Fa +0 1e-07 153 120 + +0111000 ++1169 0 +1168 0 * +Fa +0 1e-07 224 121 + +0101000 +-1167 0 -1166 0 * +Fa +0 1e-07 225 121 + +0111000 ++1165 0 * +Fa +0 1e-07 225 121 + +0111000 ++1164 0 * +Fa +0 1e-07 228 121 + +0111000 ++1163 0 * +Fa +0 1e-07 228 121 + +0111000 ++1162 0 * +Fa +0 1e-07 229 121 + +0101000 +-1161 0 -1160 0 * +Fa +0 1e-07 81 121 + +0111000 ++1159 0 * +Fa +0 1e-07 81 121 + +0111000 ++1158 0 * +Fa +0 1e-07 80 121 + +0111000 ++1157 0 * +Fa +0 1e-07 80 121 + +0111000 ++1156 0 * +Fa +0 1e-07 153 121 + +0111000 ++1155 0 +1154 0 * +Fa +0 1e-07 226 127 + +0111000 ++1153 0 * +Fa +0 1e-07 227 127 + +0111000 ++1152 0 * +Fa +0 1e-07 232 0 + +0111000 +-1151 0 -1150 0 * +Fa +0 1e-07 233 0 + +0111000 ++1149 0 * +Fa +0 1e-07 234 0 + +0111000 ++1148 0 * +Fa +0 1e-07 147 127 + +0111000 ++1147 0 +1146 0 * +Fa +0 1e-07 236 0 + +0111000 ++1145 0 * +Fa +0 1e-07 235 0 + +0111000 ++1144 0 * +Fa +0 1e-07 164 0 + +0111000 ++1143 0 * +Fa +0 1e-07 163 0 + +0111000 ++1142 0 * +Fa +0 1e-07 226 129 + +0111000 ++1141 0 * +Fa +0 1e-07 227 129 + +0111000 ++1140 0 * +Fa +0 1e-07 147 129 + +0111000 ++1139 0 +1138 0 * +Fa +0 1e-07 238 133 + +0111000 +-1137 0 -1136 0 -1135 0 -1134 0 -1133 0 -1132 0 -1131 0 * +Fa +0 1e-07 314 0 + +0111000 ++1130 0 * +Fa +0 1e-07 316 0 + +0111000 ++1129 0 * +Fa +0 1e-07 185 0 + +0111000 +-1128 0 -1127 0 * +Fa +0 1e-07 319 0 + +0111000 +-1126 0 -1125 0 * +Fa +0 1e-07 323 0 + +0111000 ++1124 0 * +Fa +0 1e-07 324 0 + +0111000 ++1123 0 * +Fa +0 1e-07 328 0 + +0111000 ++1122 0 * +Fa +0 1e-07 326 0 + +0111000 ++1121 0 * +Fa +0 1e-07 318 0 + +0111000 ++1120 0 * +Fa +0 1e-07 320 0 + +0111000 ++1119 0 * +Fa +0 1e-07 333 0 + +0111000 +-1118 0 -1117 0 * +Fa +0 1e-07 331 0 + +0111000 ++1116 0 * +Fa +0 1e-07 330 0 + +0111000 ++1115 0 * +Fa +0 1e-07 327 0 + +0111000 ++1114 0 * +Fa +0 1e-07 325 0 + +0111000 ++1113 0 * +Fa +0 1e-07 187 0 + +0111000 ++1112 0 * +Fa +0 1e-07 189 0 + +0111000 ++1111 0 * +Fa +0 1e-07 315 0 + +0111000 ++1110 0 * +Fa +0 1e-07 317 0 + +0111000 ++1109 0 * +Fa +0 1e-07 336 0 + +0111000 ++1108 0 * +Fa +0 1e-07 335 0 + +0111000 ++1107 0 * +Fa +0 1e-07 322 0 + +0111000 ++1106 0 * +Fa +0 1e-07 321 0 + +0111000 ++1105 0 * +Fa +0 1e-07 337 0 + +0111000 +-1104 0 -1103 0 * +Fa +0 1e-07 339 0 + +0111000 ++1102 0 * +Fa +0 1e-07 338 0 + +0111000 ++1101 0 * +Fa +0 1e-07 332 0 + +0111000 ++1100 0 * +Fa +0 1e-07 334 0 + +0111000 ++1099 0 * +Fa +0 1e-07 329 0 + +0111000 ++1098 0 +1097 0 * +Fa +0 1e-07 341 0 + +0111000 ++1096 0 * +Fa +0 1e-07 340 0 + +0111000 ++1095 0 * +Fa +0 1e-07 342 0 + +0111000 ++1094 0 * +Fa +0 1e-07 344 0 + +0111000 ++1093 0 * +Fa +0 1e-07 205 0 + +0111000 +-1092 0 -1091 0 * +Fa +0 1e-07 347 0 + +0111000 +-1090 0 -1089 0 * +Fa +0 1e-07 351 0 + +0111000 ++1088 0 * +Fa +0 1e-07 352 0 + +0111000 ++1087 0 * +Fa +0 1e-07 356 0 + +0111000 ++1086 0 * +Fa +0 1e-07 354 0 + +0111000 ++1085 0 * +Fa +0 1e-07 346 0 + +0111000 ++1084 0 * +Fa +0 1e-07 348 0 + +0111000 ++1083 0 * +Fa +0 1e-07 361 0 + +0111000 +-1082 0 -1081 0 * +Fa +0 1e-07 359 0 + +0111000 ++1080 0 * +Fa +0 1e-07 358 0 + +0111000 ++1079 0 * +Fa +0 1e-07 355 0 + +0111000 ++1078 0 * +Fa +0 1e-07 353 0 + +0111000 ++1077 0 * +Fa +0 1e-07 208 0 + +0111000 ++1076 0 * +Fa +0 1e-07 207 0 + +0111000 ++1075 0 * +Fa +0 1e-07 343 0 + +0111000 ++1074 0 * +Fa +0 1e-07 345 0 + +0111000 ++1073 0 * +Fa +0 1e-07 364 0 + +0111000 ++1072 0 * +Fa +0 1e-07 363 0 + +0111000 ++1071 0 * +Fa +0 1e-07 350 0 + +0111000 ++1070 0 * +Fa +0 1e-07 349 0 + +0111000 ++1069 0 * +Fa +0 1e-07 365 0 + +0111000 +-1068 0 -1067 0 * +Fa +0 1e-07 367 0 + +0111000 ++1066 0 * +Fa +0 1e-07 366 0 + +0111000 ++1065 0 * +Fa +0 1e-07 360 0 + +0111000 ++1064 0 * +Fa +0 1e-07 362 0 + +0111000 ++1063 0 * +Fa +0 1e-07 357 0 + +0111000 ++1062 0 +1061 0 * +Fa +0 1e-07 369 0 + +0111000 ++1060 0 * +Fa +0 1e-07 368 0 + +0111000 ++1059 0 * +Fa +0 1e-07 372 0 + +0111000 ++1058 0 * +Fa +0 1e-07 375 0 + +0111000 ++1057 0 * +Fa +0 1e-07 377 0 + +0111000 ++1056 0 +1055 0 * +Fa +0 1e-07 377 0 + +0111000 ++1054 0 * +Fa +0 1e-07 378 0 + +0111000 ++1053 0 * +Fa +0 1e-07 379 0 + +0111000 ++1052 0 * +Fa +0 1e-07 240 134 + +0111000 ++1051 0 +1050 0 +1049 0 * +Fa +0 1e-07 269 134 + +0101000 ++1048 0 * +Fa +0 1e-07 266 134 + +0101000 ++1047 0 * +Fa +0 1e-07 264 134 + +0101000 ++1046 0 * +Fa +0 1e-07 253 134 + +0101000 ++1045 0 * +Fa +0 1e-07 386 134 + +0101000 ++1044 0 * +Fa +0 1e-07 249 134 + +0101000 ++1043 0 * +Fa +0 1e-07 271 134 + +0111000 ++1042 0 * +Fa +0 1e-07 390 134 + +0101000 ++1041 0 * +Fa +0 1e-07 392 134 + +0101000 ++1040 0 * +Fa +0 1e-07 393 0 + +0111000 ++1039 0 * +Fa +0 1e-07 394 0 + +0111000 ++1038 0 * +Fa +0 1e-07 395 0 + +0111000 ++1037 0 * +Fa +0 1e-07 396 0 + +0111000 ++1036 0 * +Fa +0 1e-07 373 0 + +0111000 ++1035 0 * +Fa +0 1e-07 370 0 + +0111000 ++1034 0 * +Fa +0 1e-07 376 0 + +0111000 ++1033 0 * +Fa +0 1e-07 374 0 + +0111000 ++1032 0 * +Fa +0 1e-07 397 0 + +0111000 +-1031 0 -1030 0 * +Fa +0 1e-07 398 0 + +0111000 +-1029 0 -1028 0 * +Fa +0 1e-07 381 0 + +0111000 ++1027 0 * +Fa +0 1e-07 380 0 + +0111000 ++1026 0 * +Fa +0 1e-07 259 134 + +0101000 ++1025 0 * +Fa +0 1e-07 261 134 + +0101000 ++1024 0 * +Fa +0 1e-07 275 134 + +0101000 ++1023 0 * +Fa +0 1e-07 277 134 + +0101000 ++1022 0 * +Fa +0 1e-07 279 134 + +0101000 ++1021 0 * +Fa +0 1e-07 281 134 + +0101000 ++1020 0 * +Fa +0 1e-07 283 134 + +0111000 ++1019 0 * +Fa +0 1e-07 285 134 + +0111000 ++1018 0 * +Fa +0 1e-07 257 134 + +0101000 ++1017 0 * +Fa +0 1e-07 255 134 + +0101000 ++1016 0 * +Fa +0 1e-07 239 134 + +0101000 ++1015 0 * +Fa +0 1e-07 391 134 + +0101000 +-1014 0 * +Fa +0 1e-07 389 134 + +0101000 +-1013 0 * +Fa +0 1e-07 388 134 + +0101000 +-1012 0 * +Fa +0 1e-07 387 134 + +0111000 +-1011 0 * +Fa +0 1e-07 244 134 + +0101000 ++1010 0 * +Fa +0 1e-07 385 134 + +0101000 ++1009 0 * +Fa +0 1e-07 384 134 + +0101000 ++1008 0 * +Fa +0 1e-07 383 134 + +0101000 +-1007 0 * +Fa +0 1e-07 382 134 + +0101000 ++1006 0 * +Fa +0 1e-07 371 46 + +0111000 ++1005 0 +1004 0 +1003 0 +1002 0 +1001 0 +1000 0 +999 0 +998 0 * +Fa +0 1e-07 375 0 + +0111000 ++997 0 +996 0 * +Fa +0 1e-07 372 0 + +0111000 ++995 0 +994 0 * +Fa +0 1e-07 401 0 + +0111000 ++993 0 * +Fa +0 1e-07 404 0 + +0111000 ++992 0 * +Fa +0 1e-07 406 0 + +0111000 ++991 0 +990 0 * +Fa +0 1e-07 406 0 + +0111000 ++989 0 * +Fa +0 1e-07 410 0 + +0111000 +-988 0 -987 0 * +Fa +0 1e-07 414 0 + +0111000 ++986 0 +985 0 * +Fa +0 1e-07 407 44 + +0111000 ++984 0 +983 0 * +Fa +0 1e-07 412 0 + +0111000 ++982 0 * +Fa +0 1e-07 411 0 + +0111000 ++981 0 * +Fa +0 1e-07 409 0 + +0111000 ++980 0 * +Fa +0 1e-07 408 0 + +0111000 ++979 0 * +Fa +0 1e-07 399 0 + +0111000 ++978 0 * +Fa +0 1e-07 402 0 + +0111000 ++977 0 * +Fa +0 1e-07 400 44 + +0111000 ++976 0 +975 0 +974 0 * +Fa +0 1e-07 404 0 + +0111000 ++973 0 +972 0 * +Fa +0 1e-07 401 0 + +0111000 ++971 0 +970 0 * +Fa +0 1e-07 405 0 + +0111000 ++969 0 * +Fa +0 1e-07 403 0 + +0111000 ++968 0 * +Fa +0 1e-07 442 0 + +0111000 ++967 0 * +Fa +0 1e-07 443 0 + +0111000 ++966 0 * +Fa +0 1e-07 437 0 + +0111000 ++965 0 * +Fa +0 1e-07 436 0 + +0111000 ++964 0 * +Fa +0 1e-07 447 0 + +0111000 ++963 0 * +Fa +0 1e-07 445 0 + +0111000 ++962 0 * +Fa +0 1e-07 448 0 + +0111000 ++961 0 * +Fa +0 1e-07 451 0 + +0111000 ++960 0 * +Fa +0 1e-07 454 0 + +0111000 ++959 0 * +Fa +0 1e-07 449 0 + +0111000 ++958 0 * +Fa +0 1e-07 441 0 + +0111000 ++957 0 * +Fa +0 1e-07 440 0 + +0111000 +-956 0 * +Fa +0 1e-07 438 0 + +0111000 ++955 0 * +Fa +0 1e-07 439 0 + +0111000 +-954 0 * +Fa +0 1e-07 455 0 + +0111000 ++953 0 * +Fa +0 1e-07 457 0 + +0111000 ++952 0 * +Fa +0 1e-07 459 0 + +0111000 ++951 0 * +Fa +0 1e-07 452 0 + +0111000 ++950 0 * +Fa +0 1e-07 415 0 + +0111000 ++949 0 * +Fa +0 1e-07 461 0 + +0111000 ++948 0 * +Fa +0 1e-07 463 0 + +0111000 ++947 0 * +Fa +0 1e-07 462 0 + +0111000 ++946 0 +945 0 * +Fa +0 1e-07 450 0 + +0111000 ++944 0 * +Fa +0 1e-07 464 0 + +0111000 ++943 0 +942 0 * +Fa +0 1e-07 456 0 + +0111000 ++941 0 * +Fa +0 1e-07 434 0 + +0111000 ++940 0 * +Fa +0 1e-07 435 0 + +0111000 ++939 0 * +Fa +0 1e-07 433 0 + +0111000 ++938 0 * +Fa +0 1e-07 426 0 + +0111000 ++937 0 * +Fa +0 1e-07 432 0 + +0111000 +-936 0 * +Fa +0 1e-07 431 0 + +0111000 ++935 0 * +Fa +0 1e-07 430 0 + +0111000 +-934 0 * +Fa +0 1e-07 429 0 + +0111000 ++933 0 * +Fa +0 1e-07 428 0 + +0111000 +-932 0 * +Fa +0 1e-07 427 0 + +0111000 ++931 0 * +Fa +0 1e-07 479 0 + +0111000 ++930 0 * +Fa +0 1e-07 478 0 + +0111000 ++929 0 * +Fa +0 1e-07 477 0 + +0111000 ++928 0 * +Fa +0 1e-07 476 0 + +0111000 ++927 0 * +Fa +0 1e-07 474 0 + +0111000 ++926 0 * +Fa +0 1e-07 472 0 + +0111000 ++925 0 * +Fa +0 1e-07 473 0 + +0111000 ++924 0 * +Fa +0 1e-07 475 0 + +0111000 ++923 0 * +Fa +0 1e-07 481 0 + +0111000 ++922 0 * +Fa +0 1e-07 480 0 + +0111000 ++921 0 * +Fa +0 1e-07 468 0 + +0111000 ++920 0 * +Fa +0 1e-07 469 0 + +0111000 ++919 0 * +Fa +0 1e-07 446 0 + +0111000 ++918 0 * +Fa +0 1e-07 467 0 + +0111000 ++917 0 * +Fa +0 1e-07 466 0 + +0111000 ++916 0 * +Fa +0 1e-07 470 0 + +0111000 ++915 0 * +Fa +0 1e-07 444 0 + +0111000 ++914 0 * +Fa +0 1e-07 465 0 + +0111000 ++913 0 * +Fa +0 1e-07 453 0 + +0111000 ++912 0 * +Fa +0 1e-07 490 0 + +0111000 ++911 0 * +Fa +0 1e-07 458 0 + +0111000 ++910 0 * +Fa +0 1e-07 494 0 + +0111000 ++909 0 * +Fa +0 1e-07 492 0 + +0111000 ++908 0 * +Fa +0 1e-07 498 0 + +0111000 ++907 0 * +Fa +0 1e-07 496 0 + +0111000 ++906 0 * +Fa +0 1e-07 500 0 + +0111000 ++905 0 * +Fa +0 1e-07 502 0 + +0111000 ++904 0 * +Fa +0 1e-07 482 0 + +0111000 ++903 0 +902 0 * +Fa +0 1e-07 491 0 + +0111000 ++901 0 * +Fa +0 1e-07 484 0 + +0111000 ++900 0 * +Fa +0 1e-07 488 0 + +0111000 ++899 0 * +Fa +0 1e-07 489 0 + +0111000 ++898 0 * +Fa +0 1e-07 487 0 + +0111000 ++897 0 * +Fa +0 1e-07 486 0 + +0111000 ++896 0 * +Fa +0 1e-07 483 0 + +0111000 ++895 0 * +Fa +0 1e-07 495 0 + +0111000 ++894 0 * +Fa +0 1e-07 497 0 + +0111000 ++893 0 * +Fa +0 1e-07 503 0 + +0111000 ++892 0 * +Fa +0 1e-07 505 0 + +0111000 ++891 0 * +Fa +0 1e-07 504 0 + +0111000 ++890 0 * +Fa +0 1e-07 501 0 + +0111000 ++889 0 * +Fa +0 1e-07 499 0 + +0111000 ++888 0 * +Fa +0 1e-07 493 0 + +0111000 ++887 0 * +Fa +0 1e-07 485 0 + +0111000 ++886 0 * +Fa +0 1e-07 471 0 + +0111000 ++885 0 +884 0 * +Fa +0 1e-07 506 0 + +0111000 ++883 0 * +Fa +0 1e-07 507 0 + +0111000 ++882 0 * +Fa +0 1e-07 508 0 + +0111000 ++881 0 +880 0 * +Fa +0 1e-07 422 0 + +0111000 ++879 0 * +Fa +0 1e-07 424 0 + +0111000 ++878 0 * +Fa +0 1e-07 237 133 + +0101000 ++877 0 * +Fa +0 1e-07 241 133 + +0101000 ++876 0 * +Fa +0 1e-07 416 0 + +0111000 ++875 0 * +Fa +0 1e-07 242 133 + +0101000 ++874 0 * +Fa +0 1e-07 243 133 + +0101000 ++873 0 * +Fa +0 1e-07 423 0 + +0111000 ++872 0 * +Fa +0 1e-07 245 133 + +0101000 ++871 0 * +Fa +0 1e-07 246 133 + +0101000 ++870 0 * +Fa +0 1e-07 247 133 + +0101000 +-869 0 * +Fa +0 1e-07 248 133 + +0101000 ++868 0 * +Fa +0 1e-07 425 0 + +0111000 +-867 0 * +Fa +0 1e-07 250 133 + +0101000 +-866 0 * +Fa +0 1e-07 251 133 + +0101000 +-865 0 * +Fa +0 1e-07 252 133 + +0101000 ++864 0 * +Fa +0 1e-07 254 133 + +0101000 ++863 0 * +Fa +0 1e-07 256 133 + +0101000 ++862 0 * +Fa +0 1e-07 258 133 + +0101000 ++861 0 * +Fa +0 1e-07 260 133 + +0101000 ++860 0 * +Fa +0 1e-07 420 0 + +0111000 ++859 0 * +Fa +0 1e-07 262 133 + +0101000 ++858 0 * +Fa +0 1e-07 263 133 + +0101000 ++857 0 * +Fa +0 1e-07 421 0 + +0111000 ++856 0 * +Fa +0 1e-07 265 133 + +0101000 ++855 0 * +Fa +0 1e-07 419 0 + +0111000 ++854 0 * +Fa +0 1e-07 267 133 + +0101000 +-853 0 * +Fa +0 1e-07 418 0 + +0111000 +-852 0 * +Fa +0 1e-07 268 133 + +0101000 ++851 0 * +Fa +0 1e-07 417 0 + +0111000 ++850 0 * +Fa +0 1e-07 270 133 + +0101000 ++849 0 * +Fa +0 1e-07 413 0 + +0111000 ++848 0 * +Fa +0 1e-07 272 133 + +0101000 +-847 0 * +Fa +0 1e-07 273 133 + +0101000 ++846 0 * +Fa +0 1e-07 274 133 + +0101000 ++845 0 * +Fa +0 1e-07 276 133 + +0101000 ++844 0 * +Fa +0 1e-07 278 133 + +0101000 ++843 0 * +Fa +0 1e-07 280 133 + +0101000 ++842 0 * +Fa +0 1e-07 282 133 + +0101000 ++841 0 * +Fa +0 1e-07 284 133 + +0101000 ++840 0 * +Fa +0 1e-07 286 0 + +0111000 ++839 0 * +Fa +0 1e-07 287 0 + +0111000 ++838 0 * +Fa +0 1e-07 288 0 + +0111000 ++837 0 * +Fa +0 1e-07 289 0 + +0111000 ++836 0 * +Fa +0 1e-07 290 0 + +0111000 +-835 0 * +Fa +0 1e-07 291 0 + +0111000 ++834 0 * +Fa +0 1e-07 292 0 + +0111000 ++833 0 * +Fa +0 1e-07 293 0 + +0111000 ++832 0 * +Fa +0 1e-07 294 0 + +0111000 ++831 0 * +Fa +0 1e-07 295 0 + +0111000 +-830 0 * +Fa +0 1e-07 296 0 + +0111000 ++829 0 * +Fa +0 1e-07 297 0 + +0111000 ++828 0 * +Fa +0 1e-07 298 0 + +0111000 +-827 0 * +Fa +0 1e-07 299 0 + +0111000 ++826 0 * +Fa +0 1e-07 300 0 + +0111000 ++825 0 * +Fa +0 1e-07 301 0 + +0111000 ++824 0 * +Fa +0 1e-07 302 0 + +0111000 ++823 0 * +Fa +0 1e-07 303 0 + +0111000 +-822 0 * +Fa +0 1e-07 304 0 + +0111000 ++821 0 * +Fa +0 1e-07 305 0 + +0111000 ++820 0 * +Fa +0 1e-07 306 0 + +0111000 ++819 0 * +Fa +0 1e-07 307 0 + +0111000 ++818 0 * +Fa +0 1e-07 308 0 + +0111000 ++817 0 * +Fa +0 1e-07 309 0 + +0111000 ++816 0 * +Fa +0 1e-07 310 0 + +0111000 ++815 0 * +Fa +0 1e-07 311 0 + +0111000 ++814 0 * +Fa +0 1e-07 312 0 + +0111000 ++813 0 * +Fa +0 1e-07 510 0 + +0111000 +-812 0 * +Fa +0 1e-07 313 0 + +0111000 ++811 0 * +Fa +0 1e-07 511 0 + +0111000 ++810 0 +809 0 * +Fa +0 1e-07 518 0 + +0111000 +-808 0 * +Fa +0 1e-07 520 0 + +0111000 ++807 0 * +Fa +0 1e-07 521 0 + +0111000 ++806 0 +805 0 * +Fa +0 1e-07 523 0 + +0111000 ++804 0 * +Fa +0 1e-07 529 0 + +0111000 ++803 0 +802 0 * +Fa +0 1e-07 519 0 + +0111000 ++801 0 * +Fa +0 1e-07 512 0 + +0111000 ++800 0 * +Fa +0 1e-07 535 0 + +0111000 ++799 0 * +Fa +0 1e-07 537 0 + +0111000 ++798 0 * +Fa +0 1e-07 539 0 + +0111000 ++797 0 * +Fa +0 1e-07 540 0 + +0111000 ++796 0 * +Fa +0 1e-07 538 0 + +0111000 ++795 0 * +Fa +0 1e-07 541 0 + +0111000 ++794 0 * +Fa +0 1e-07 536 0 + +0111000 ++793 0 * +Fa +0 1e-07 534 0 + +0111000 +-792 0 * +Fa +0 1e-07 532 0 + +0111000 ++791 0 * +Fa +0 1e-07 533 0 + +0111000 ++790 0 +789 0 * +Fa +0 1e-07 531 0 + +0111000 +-788 0 -787 0 -786 0 * +Fa +0 1e-07 547 0 + +0111000 ++785 0 * +Fa +0 1e-07 546 0 + +0111000 ++784 0 * +Fa +0 1e-07 543 0 + +0111000 ++783 0 * +Fa +0 1e-07 545 0 + +0111000 ++782 0 * +Fa +0 1e-07 542 0 + +0111000 ++781 0 * +Fa +0 1e-07 544 0 + +0111000 ++780 0 * +Fa +0 1e-07 548 0 + +0111000 ++779 0 * +Fa +0 1e-07 549 0 + +0111000 ++778 0 * +Fa +0 1e-07 550 0 + +0111000 ++777 0 * +Fa +0 1e-07 551 0 + +0111000 ++776 0 * +Fa +0 1e-07 552 0 + +0111000 ++775 0 * +Fa +0 1e-07 553 0 + +0111000 ++774 0 * +Fa +0 1e-07 556 0 + +0111000 ++773 0 * +Fa +0 1e-07 554 0 + +0111000 ++772 0 * +Fa +0 1e-07 557 0 + +0111000 ++771 0 * +Fa +0 1e-07 555 0 + +0111000 ++770 0 * +Fa +0 1e-07 517 0 + +0111000 ++769 0 +768 0 +767 0 * +Fa +0 1e-07 515 0 + +0111000 +-766 0 -765 0 -764 0 * +Fa +0 1e-07 558 0 + +0111000 ++763 0 * +Fa +0 1e-07 559 0 + +0111000 ++762 0 * +Fa +0 1e-07 516 0 + +0111000 ++761 0 * +Fa +0 1e-07 514 0 + +0111000 +-760 0 * +Fa +0 1e-07 560 0 + +0111000 ++759 0 * +Fa +0 1e-07 561 0 + +0111000 ++758 0 * +Fa +0 1e-07 562 0 + +0111000 ++757 0 * +Fa +0 1e-07 565 0 + +0111000 ++756 0 * +Fa +0 1e-07 525 0 + +0111000 ++755 0 +754 0 * +Fa +0 1e-07 527 0 + +0111000 +-753 0 -752 0 -751 0 * +Fa +0 1e-07 563 0 + +0111000 ++750 0 * +Fa +0 1e-07 567 0 + +0111000 ++749 0 * +Fa +0 1e-07 564 0 + +0111000 ++748 0 * +Fa +0 1e-07 566 0 + +0111000 ++747 0 * +Fa +0 1e-07 524 0 + +0111000 ++746 0 * +Fa +0 1e-07 526 0 + +0111000 +-745 0 * +Fa +0 1e-07 569 0 + +0111000 ++744 0 * +Fa +0 1e-07 571 0 + +0111000 ++743 0 * +Fa +0 1e-07 568 0 + +0111000 ++742 0 * +Fa +0 1e-07 570 0 + +0111000 ++741 0 * +Fa +0 1e-07 572 0 + +0111000 ++740 0 * +Fa +0 1e-07 530 0 + +0111000 +-739 0 * +Fa +0 1e-07 573 0 + +0111000 ++738 0 * +Fa +0 1e-07 528 0 + +0111000 +-737 0 * +Fa +0 1e-07 574 0 + +0111000 +-736 0 * +Fa +0 1e-07 575 0 + +0111000 ++735 0 * +Fa +0 1e-07 522 0 + +0111000 ++734 0 * +Fa +0 1e-07 576 0 + +0111000 ++733 0 * +Fa +0 1e-07 460 0 + +0111000 +-732 0 -731 0 -730 0 -729 0 -728 0 * +Fa +0 1e-07 509 0 + +0111000 ++727 0 +726 0 +725 0 +724 0 +723 0 +722 0 +721 0 +720 0 * +Fa +0 1e-07 513 0 + +0111000 +-719 0 * +Fa +0 1e-07 577 0 + +0111000 +-718 0 * +Fa +0 1e-07 578 0 + +0111000 ++717 0 * +Sh + +0101100 +-716 115 +715 0 -714 115 -713 115 -712 0 +711 116 -710 115 -709 115 +708 115 -707 115 +-706 115 -705 115 -704 115 -703 115 -702 115 -701 0 -700 0 -699 0 -698 0 -697 0 +-696 0 -695 0 -694 0 -693 0 -692 0 -691 0 -690 0 -689 0 -688 0 -687 0 +-686 0 -685 0 -684 0 -683 0 -682 0 -681 0 -680 0 -679 0 -678 0 +677 115 ++676 115 -675 0 -674 0 -673 120 -672 0 +671 115 +670 115 +669 115 +668 115 -667 0 +-666 0 -673 121 -665 0 +664 115 +663 115 +662 115 +661 115 -660 0 -659 0 -658 122 +-657 0 +656 115 +655 115 -654 115 -653 115 -652 115 -651 115 +650 115 -649 115 +648 115 +-647 115 -646 115 -645 115 -644 115 -643 115 +642 115 +641 115 -640 115 +639 115 -638 115 ++637 115 +636 0 +635 0 +634 0 +633 0 +632 0 +631 0 +630 0 +629 0 +628 0 ++627 0 -626 115 +625 115 +624 115 +623 115 +622 115 +621 115 +620 115 +619 115 +618 115 ++617 115 +616 115 * +Sh + +0101100 ++615 0 +614 0 +613 0 +612 0 +611 0 +610 0 +609 0 +608 0 +607 0 +606 0 +-715 0 +605 123 * +Sh + +0101100 ++604 124 +603 124 +602 124 +601 124 +600 124 +599 124 +598 0 +597 0 +596 0 -595 0 +-594 0 -593 0 -592 0 -591 0 -590 0 -589 0 -588 0 -587 0 -586 0 -585 124 +-584 124 * +Sh + +0101100 ++583 126 +582 126 +581 126 +580 126 +579 126 +578 126 +577 0 +576 0 +575 0 -574 0 +-573 0 -572 0 -571 0 -570 0 -569 0 -568 0 -567 0 -566 0 -565 0 -564 126 +-563 126 * +Sh + +0101100 ++583 128 +582 128 +581 128 +580 128 +579 128 +578 128 +562 0 +561 0 +560 0 -559 0 +-558 0 -557 0 -556 0 -555 0 -554 0 -553 0 -552 0 -551 0 -550 0 -564 128 +-563 128 * +Sh + +0101100 ++701 0 +549 0 +696 0 +698 0 +548 0 +699 0 -547 117 +546 0 +545 0 +544 117 ++543 117 +542 117 -597 0 +541 0 +540 0 +539 0 +659 0 -538 0 +537 0 +536 0 ++535 0 +534 0 +533 0 +532 0 +531 117 +530 117 +529 0 +528 130 +527 0 +526 0 ++525 130 +524 0 -523 117 -522 117 +521 117 +520 117 +519 0 +586 0 +590 0 +518 0 ++589 0 +587 0 -517 117 -516 117 +515 0 +514 0 * +Sh + +0101100 ++513 119 +512 119 +511 0 +565 0 +569 0 +510 0 +568 0 +566 0 -509 119 -508 119 ++507 0 +506 0 -505 119 -504 119 +503 119 +502 119 +685 0 +501 0 +680 0 +682 0 ++500 0 +683 0 -499 119 +498 0 +497 0 +496 119 +495 0 +494 131 +493 0 +492 0 ++491 131 +490 0 +489 119 +488 119 -576 0 +487 0 +486 0 +485 0 +674 0 -484 0 ++483 0 +482 0 +481 0 +480 0 +479 0 +478 0 * +Sh + +0101100 ++513 118 +512 118 +477 0 +550 0 +554 0 +476 0 +553 0 +551 0 -509 118 -508 118 ++475 0 +474 0 -505 118 -504 118 +503 118 +502 118 +693 0 +473 0 +688 0 +690 0 ++472 0 +691 0 -499 118 +471 0 +470 0 +496 118 +469 0 +491 132 +468 0 +467 0 ++494 132 +466 0 +489 118 +488 118 -561 0 +465 0 +464 0 +463 0 +666 0 -462 0 ++461 0 +460 0 +459 0 +458 0 +457 0 +456 0 * +Sh + +0101100 ++455 122 +454 122 -453 0 +658 122 -452 0 -451 0 -450 0 -449 0 -448 0 -447 0 +-537 0 -446 0 -534 0 -445 0 -535 0 -444 0 -536 0 -443 122 -442 122 -441 0 +-598 0 * +Sh + +0101100 ++440 0 +452 0 +449 0 +439 0 +450 0 +451 0 -438 125 +437 125 +436 125 +448 0 ++593 0 +435 0 -434 125 -433 125 +432 125 +431 125 * +Sh + +0101100 ++430 120 +429 120 -428 0 +673 120 -427 0 -426 0 -425 0 -424 0 -423 0 -422 0 +-483 0 -421 0 -480 0 -420 0 -481 0 -419 0 -482 0 -418 120 -417 120 +416 0 +-577 0 * +Sh + +0101100 ++430 121 +429 121 -415 0 +673 121 -414 0 -413 0 -412 0 -411 0 -410 0 -409 0 +-461 0 -408 0 -458 0 -407 0 -459 0 -406 0 -460 0 -418 121 -417 121 +405 0 +-562 0 * +Sh + +0101100 ++404 0 +427 0 +424 0 +403 0 +425 0 +426 0 -402 127 +401 127 +400 127 +423 0 ++572 0 +399 0 -398 127 -397 127 +396 127 +395 127 * +Sh + +0101100 ++394 0 +414 0 +411 0 +393 0 +412 0 +413 0 -402 129 +401 129 +400 129 +410 0 ++557 0 +392 0 -398 129 -397 129 +396 129 +395 129 * +Sh + +0101100 +-273 44 +272 44 +271 0 +275 0 -270 44 -269 44 +268 44 +267 44 +266 44 +265 44 ++264 0 +263 0 +262 0 +261 44 +260 44 -259 44 -258 44 +257 44 +256 44 -255 44 +-254 44 -253 44 -252 44 -251 44 -250 44 +249 44 -248 44 +247 44 -246 44 -245 44 +-244 44 -243 44 -242 44 +241 44 -240 44 -239 44 +238 44 +237 44 +236 44 +235 44 ++234 44 -233 44 -232 44 +231 44 -230 44 -229 44 -228 44 -227 44 -226 44 -225 44 +-224 44 -223 44 -222 44 -221 44 -220 44 -219 44 -218 44 -217 44 -216 44 -215 44 ++214 44 +213 44 -212 44 +211 44 +210 44 +209 44 -208 44 +207 44 -206 44 +205 44 +-204 44 +203 44 +202 44 -201 44 +200 44 -199 44 -198 44 +197 44 -196 44 +195 44 ++194 44 +193 44 +192 44 +191 44 +190 44 -189 44 +188 44 +187 44 -186 44 -185 44 +-184 44 +183 44 +182 44 -181 44 +180 44 -179 44 -178 44 +177 44 +176 44 +175 44 +-174 17 +173 17 +172 44 +171 17 -170 17 +169 44 +168 17 +167 17 -166 17 +165 17 +-164 44 -163 17 -162 17 +161 17 -160 17 -159 17 -158 17 -157 17 +156 44 +155 17 ++154 17 +153 44 +152 17 +151 44 -150 17 -149 44 +148 17 +147 44 +146 17 +145 44 +-144 17 +143 17 -142 17 -141 17 -140 17 -139 17 -138 17 -137 17 -136 44 +135 44 ++134 44 -133 44 -132 44 -131 44 +130 44 +129 44 -128 44 -127 44 -126 44 +125 44 +-124 44 +123 44 -122 44 -121 44 +120 44 -119 44 +118 44 -117 44 +116 44 -115 44 +-114 44 -113 44 +112 44 -111 44 -391 17 -110 44 -109 44 -108 44 +107 44 -106 44 ++105 44 +104 44 +103 44 +102 44 +101 44 +100 44 -99 44 -98 44 +97 44 -96 44 ++95 44 -94 44 -93 44 -92 44 +91 44 +90 44 -89 44 -88 44 -87 44 -86 44 +-85 44 -84 44 -83 44 +82 44 -81 44 -80 44 -79 44 -78 44 -77 44 -76 44 +-75 44 -74 44 +73 44 +72 44 -71 44 -70 44 -69 44 +68 44 -67 44 -66 44 +-65 44 -64 44 -63 44 +62 44 -61 44 -60 44 -59 44 -58 44 -57 44 +56 44 +-55 44 -54 44 -53 44 -52 44 -51 44 +50 44 -49 44 -48 44 -47 44 -46 44 +-45 44 +44 44 -43 44 -42 44 +41 44 -40 44 -39 44 -38 44 * +Sh + +0101100 +-324 46 -323 46 +391 17 +322 17 +321 17 +320 17 +319 17 +318 17 +317 17 +316 17 ++315 17 +314 17 +313 17 -312 46 -311 46 -310 46 -309 46 -308 46 -307 46 -306 46 +-305 46 -304 46 -303 46 -302 46 -301 46 -300 17 -299 17 -298 17 -297 17 -296 17 +-295 17 -294 17 -293 17 -292 17 -291 17 -290 17 -289 17 -288 17 -287 17 -286 17 +-285 17 +284 17 +283 17 -282 17 +281 17 -280 0 -326 0 -279 0 -278 0 * +Sh + +0101100 ++390 0 +389 0 -388 0 -387 0 -386 0 -385 0 -384 0 -383 0 +382 0 +381 0 +-380 0 -379 0 -378 0 -525 0 -528 0 -377 0 -376 0 +375 0 +374 0 +373 0 ++372 0 -371 0 -370 0 -369 0 -368 0 -367 0 -366 0 -365 0 +364 0 +363 0 ++362 0 +361 0 +360 0 * +Sh + +0101100 ++359 0 +358 0 -357 0 -356 0 -355 0 -354 0 -353 0 -352 0 +351 0 +350 0 +-349 0 -348 0 -347 0 -494 0 -491 0 -346 0 -345 0 +344 0 +343 0 +342 0 ++341 0 -340 0 -339 0 -338 0 -337 0 -336 0 -335 0 -334 0 +333 0 +332 0 ++331 0 +330 0 +329 0 * +So + +0100000 ++37 0 * +So + +0100000 ++36 0 * +So + +0100000 ++35 0 * +So + +0100000 ++34 0 * +So + +0100000 ++33 0 * +So + +0100000 ++32 0 * +So + +0100000 ++31 0 * +So + +0100000 ++30 0 * +So + +0100000 ++29 0 * +So + +0100000 ++28 0 * +So + +0100000 ++27 0 * +So + +0100000 ++26 0 * +So + +0100000 ++25 0 * +So + +0100000 ++24 0 * +So + +0100000 ++23 0 * +So + +0100000 ++22 0 * +So + +0100000 ++21 0 * +So + +0100000 ++20 0 * +Co + +1100000 ++3792 8 +3791 8 -3790 8 +3789 8 -3788 8 -3787 8 +3786 8 +3785 8 -3784 8 +3783 8 +-3782 8 +3781 8 +3780 8 +3779 8 +3778 8 +3777 8 +3776 8 +3775 8 +3774 8 -3773 8 ++3772 8 -3771 8 -3770 8 -3769 8 -3768 8 -3767 8 -3766 8 -3765 8 -3764 8 +3763 10 +-3762 10 -3761 10 -3760 10 -3759 10 -3758 10 -3757 10 -3756 10 -3755 10 -3754 10 -3753 12 ++3752 12 -3751 12 -3750 12 +3749 12 -3748 12 +3747 12 -3746 12 -3745 14 +3744 14 -3743 16 ++3742 16 -3741 12 +3740 12 -3739 12 +3738 17 +3737 12 +3736 17 +3735 19 -3734 19 +3733 12 +-3732 12 -3731 12 +3730 12 -3729 17 -3728 16 -3727 17 -3726 16 -3725 21 +3724 21 -3723 21 +-3722 21 +3721 21 -3720 21 +3719 21 -3718 21 -3717 23 +3716 23 -3715 25 +3714 25 -3713 21 ++3712 21 -3711 21 +3710 17 +3709 21 +3708 17 +3707 27 -3706 27 +3705 21 -3704 21 -3703 21 ++3702 21 -3701 17 -3700 25 -3699 17 -3698 25 -3725 29 +3724 29 -3723 29 -3722 29 +3721 29 +-3720 29 +3719 29 -3718 29 -3717 31 +3716 31 -3715 33 +3714 33 -3713 29 +3712 29 -3711 29 ++3697 17 +3709 29 +3696 17 +3707 35 -3706 35 +3705 29 -3704 29 -3703 29 +3702 29 -3695 17 +-3700 33 -3694 17 -3698 33 +3693 16 +3692 16 -3691 16 +3690 16 +3689 16 -3688 16 -3687 16 +-3686 16 -3685 16 +3684 16 -3683 16 -3682 17 -3681 16 -3680 17 +3679 17 -3678 16 +3677 16 ++3676 17 -3675 16 +3674 16 -3673 16 -3672 16 +3671 16 -3670 16 +3669 37 +3668 37 +3667 37 +-3666 37 -3665 16 +3664 16 -3663 16 +3662 16 +3661 25 -3660 25 -3659 25 -3658 25 -3657 25 ++3656 25 -3655 25 +3654 25 -3653 25 +3652 25 -3651 25 -3650 25 +3649 25 +3648 25 -3647 25 ++3646 25 +3645 25 -3644 25 +3643 39 +3642 39 +3641 39 -3640 39 +3639 25 +3638 25 -3637 25 +-3636 17 -3635 25 -3634 17 +3633 17 -3632 25 +3631 25 +3630 17 +3661 33 -3660 33 -3659 33 +-3658 33 -3657 33 +3656 33 -3655 33 +3654 33 -3653 33 +3652 33 -3651 33 -3650 33 +3649 33 ++3648 33 -3647 33 +3646 33 +3645 33 -3644 33 +3642 41 +3643 41 +3640 41 -3641 41 +3639 33 ++3638 33 -3637 33 -3629 17 -3635 33 -3628 17 +3627 17 -3632 33 +3631 33 +3626 17 -3625 14 +-3624 14 +3623 14 -3622 17 -3621 14 -3620 17 -3619 14 -3618 19 -3617 14 -3616 19 +3615 14 +-3614 14 -3613 14 +3612 14 +3611 19 -3610 19 +3609 19 -3608 19 -3607 19 -3606 19 -3605 19 ++3604 19 -3603 23 -3602 23 +3601 23 -3600 17 -3599 23 -3598 17 -3597 23 -3596 27 -3595 23 +-3594 27 +3593 23 -3592 23 -3591 23 +3590 23 -3603 31 -3602 31 +3601 31 -3589 17 -3599 31 +-3588 17 -3597 31 -3596 35 -3595 31 -3594 35 +3593 31 -3592 31 -3591 31 +3590 31 +3587 27 +-3586 27 +3585 27 -3584 27 -3583 27 -3582 27 -3581 27 +3580 27 +3587 35 -3586 35 +3585 35 +-3584 35 -3583 35 -3582 35 -3581 35 +3580 35 +3579 17 +3578 17 -3577 17 -3576 17 +3575 17 ++3574 17 -3573 17 -3572 17 -3571 17 -3570 17 -3569 17 -3568 17 -3567 17 -3566 17 +3565 17 +-3564 17 +3563 17 -3562 17 -3561 17 -3560 17 -3559 17 -3558 17 -3557 17 -3556 17 +3555 17 +-3554 17 +3553 17 -3552 17 +3551 17 +3550 44 +3549 44 -3548 44 +3547 44 -3546 44 -3545 44 +-3544 44 -3543 44 -3542 44 -3541 44 -3540 44 +3539 44 -3538 44 -3537 44 -3536 44 -3535 44 ++3534 44 +3533 44 -3532 44 -3531 44 -3530 44 +3529 44 +3528 44 +3527 44 -3526 44 -3525 44 ++3524 44 -3523 44 -3522 37 +3521 37 -3520 37 -3519 37 -3518 37 +3517 37 +3516 37 -3515 37 ++3514 37 -3513 37 +3512 37 +3511 37 +3510 37 +3509 37 +3508 37 -3507 37 -3506 37 +3505 37 ++3504 37 -3503 37 -3502 37 +3501 37 +3500 37 -3499 37 -3498 37 +3497 37 -3496 37 +3495 37 +-3494 37 +3493 37 +3492 37 -3491 37 +3490 37 -3489 37 -3488 41 +3487 41 -3486 41 -3485 41 +-3484 41 +3483 41 +3482 41 -3481 41 +3480 41 -3479 41 +3478 41 +3477 41 +3476 41 +3475 41 ++3474 41 -3473 41 -3472 41 +3471 41 +3470 41 -3469 41 -3468 41 +3467 41 +3466 41 -3465 41 +-3464 41 +3463 41 -3462 41 +3461 41 -3460 41 +3459 41 +3458 41 -3457 41 +3456 41 -3455 41 +-3488 39 +3487 39 -3486 39 -3485 39 -3484 39 +3483 39 +3482 39 -3481 39 +3480 39 -3479 39 ++3478 39 +3477 39 +3476 39 +3475 39 +3474 39 -3473 39 -3472 39 +3471 39 +3470 39 -3469 39 +-3468 39 +3467 39 +3466 39 -3465 39 -3464 39 +3463 39 -3462 39 +3461 39 -3460 39 +3459 39 ++3458 39 -3457 39 +3456 39 -3455 39 +3454 46 -3453 46 +3452 46 -3451 46 +3450 0 +3449 46 +-3448 46 +3447 46 -3446 46 +3445 46 +3444 46 -3443 46 +3442 46 -3441 46 -3440 46 -3439 46 +-3438 46 -3437 46 -3436 46 -3435 46 -3434 46 -3433 46 -3432 46 -3431 46 -3430 46 -3429 46 +-3428 46 -3427 46 -3426 46 -3425 46 +3424 46 +3423 46 +3422 46 -3421 46 +3420 46 +3419 46 ++3418 46 +3417 46 +3416 46 +3415 46 +3414 46 +3413 46 -3412 46 +3411 46 -3410 46 +3409 46 ++3408 46 +3407 46 -3406 46 +3405 46 +3404 0 +3403 0 -3402 44 +3401 44 -3400 44 +3399 44 ++3398 0 -3397 44 +3396 44 -3395 44 +3394 44 +3393 44 -3392 44 -3391 44 +3390 44 -3389 44 +-3388 44 -3387 44 -3386 44 -3385 44 -3384 44 -3383 44 -3382 44 -3381 44 -3380 44 -3379 44 +-3378 44 +3377 44 -3376 44 -3375 44 -3374 44 -3373 44 -3372 44 -3371 44 -3370 44 -3369 44 ++3368 44 -3367 44 -3366 44 +3365 44 +3364 44 -3363 44 +3362 44 -3361 44 +3360 44 -3359 44 +-3358 0 -3357 0 +3356 44 -3355 44 -3354 44 +3353 44 +3352 44 +3351 44 +3350 44 -3349 44 ++3348 44 -3347 44 +3346 44 +3345 44 +3344 44 +3343 44 +3342 44 +3341 44 +3340 44 -3339 44 ++3338 44 -3337 44 +3336 44 -3335 44 -3334 44 +3333 44 +3332 44 +3331 44 -3330 44 +3329 44 ++3328 44 -3327 44 -3326 44 +3325 44 -3324 44 -3323 44 -3322 44 -3321 44 -3320 44 -3319 44 +-3318 44 +3317 44 -3316 44 +3315 44 -3314 44 +3313 44 -3312 44 +3311 44 +3310 44 -3309 44 ++3308 44 -3307 44 +3306 44 -3305 44 +3304 44 +3303 44 +3302 44 +3301 44 +3300 44 +3299 44 ++3298 44 +3297 44 +3296 44 +3295 44 -3294 44 +3293 44 -3292 44 -3291 44 +3290 44 -3289 44 ++3288 44 -3287 44 +3286 44 -3285 44 -3284 44 -3283 44 +3282 44 +3281 44 +3280 44 -3279 44 +-3278 44 -3277 44 -3276 44 +3275 44 +3274 44 -3273 44 +3272 44 -3271 44 +3270 44 -3269 44 +-3268 44 -3267 44 -3266 44 -3265 44 -3264 44 -3263 44 -3262 44 -3261 44 -3260 44 -3259 44 +-3258 44 -3257 44 -3256 44 -3255 44 -3254 44 -3253 44 +3252 44 -3251 44 +3250 44 -3249 44 ++3248 44 +3247 44 -3246 44 +3245 44 -3244 44 -3243 44 +3242 44 -3241 44 +3240 44 +3239 44 +-3238 44 +3237 44 +3236 44 -3235 44 +3234 44 -3233 44 -3232 44 -3231 44 +3230 44 +3229 44 ++3228 44 -3227 44 +3226 44 -3225 44 +3224 44 -3223 44 -3222 44 +3221 44 -3220 44 -3219 44 ++3218 44 -3217 44 -3216 44 -3215 44 -3214 44 +3213 44 -3212 44 +3211 44 -3210 44 -3209 44 ++3208 44 -3207 44 +3206 44 -3205 44 -3204 44 -3203 44 -3202 44 -3201 44 -3200 44 +3199 44 +-3198 44 -3197 44 -3196 44 -3195 44 +3194 44 +3193 44 +3192 44 -3191 44 +3190 44 -3189 44 +-3188 44 -3187 44 +3186 44 -3185 44 -3184 44 -3183 44 -3182 44 +3181 44 -3180 44 -3179 44 +-3178 44 +3177 44 -3176 44 -3175 44 +3174 44 -3173 44 -3172 44 +3171 44 -3170 44 -3169 44 ++3168 44 -3167 44 +3166 44 -3165 44 -3164 44 -3163 44 -3162 44 +3161 44 -3160 44 -3159 44 +-3158 44 +3157 44 +3156 44 +3155 44 -3154 44 +3153 44 +3152 44 +3151 44 +3150 44 -3149 44 ++3148 44 -3147 44 +3146 44 +3145 44 +3144 44 +3143 44 -3142 44 -3141 44 +3140 44 -3139 44 ++3138 44 +3137 44 -3136 44 +3135 44 -3134 44 -3133 44 +3132 44 +3131 44 +3130 44 -3129 44 ++3128 44 +3127 44 -3126 44 +3125 44 +3124 44 -3123 44 +3122 44 +3121 44 +3120 44 +3119 44 +-3118 44 +3117 44 +3116 44 +3115 44 -3114 44 +3113 44 +3112 44 +3111 44 -3110 44 -3109 44 +-3108 44 -3107 44 -3106 44 +3105 44 -3104 44 +3103 44 +3102 44 +3101 44 -3100 44 +3099 44 ++3098 44 +3097 44 +3096 44 +3095 44 +3094 44 +3093 44 +3092 44 +3091 44 -3090 44 +3089 44 +-3088 44 -3087 44 -3086 44 -3085 44 -3084 44 +3083 44 -3082 44 +3081 44 +3080 44 -3079 44 ++3078 44 +3077 44 -3076 44 -3075 44 +3074 44 -3073 44 +3072 44 +3071 44 -3070 44 +3069 44 +-3068 44 -3067 44 +3066 44 +3065 44 -3064 44 -3063 44 +3062 44 -3061 8 +3060 8 +3059 17 +-3058 17 -3057 17 -3056 17 -3055 17 -3054 17 -3053 17 -3052 17 -3051 17 -3050 17 -3049 8 ++3048 8 -3047 8 +3046 8 -3045 8 +3044 8 -3043 48 +3042 48 -3041 8 +3040 8 -3039 8 +-3038 8 -3037 8 +3036 8 +3035 8 +3034 8 +3033 8 -3032 8 -3031 8 +3030 8 -3029 8 ++3028 8 +3027 8 +3026 8 +3025 8 -3024 8 +3023 8 +3022 8 +3021 8 -3020 8 +3019 8 ++3018 8 -3017 8 +3016 8 -3015 8 +3014 8 -3013 17 +3012 8 -3011 16 -3010 17 -3009 17 +-3008 8 -3007 17 -3006 16 -3005 8 +3004 8 -3003 17 +3002 8 -3001 33 -3000 17 -2999 17 +-2998 8 -2997 17 -2996 33 -2995 8 +2994 8 -2993 17 +2992 8 -3001 25 -2991 17 -2990 17 +-2989 8 -2988 17 -2996 25 -2987 8 +2986 8 +2985 8 -2984 8 -2983 8 -2982 8 -2981 8 ++2980 8 +2979 23 -2978 23 +2977 25 -2976 25 +2975 23 -2974 23 +2973 8 -2972 8 -2971 8 +-2970 8 -2969 8 +2968 8 +2979 31 -2978 31 +2977 33 -2976 33 +2975 31 -2974 31 +2967 8 +-2966 8 -2965 8 -2964 8 -2963 8 +2962 8 +2961 14 -2960 14 +2959 16 -2958 16 +2957 14 +-2956 14 +2955 8 -2954 8 +2953 8 -2952 8 -2951 8 -2950 8 +2949 8 -2948 8 -2947 8 ++2946 8 -2945 8 -2944 8 -2943 8 +2942 8 +2941 8 +2940 8 +2939 8 +2938 8 +2937 8 ++2936 8 +2935 8 +2934 8 +2933 8 -2932 8 -2931 8 -2930 8 -2929 8 -2928 8 -2927 8 +-2926 48 -2925 48 -2924 8 -2923 8 -2922 8 +2921 8 -2920 8 -2919 8 +2918 8 +2917 8 +-2916 8 +2915 8 -2914 8 +2913 8 -2912 8 -2911 8 -2910 8 -2909 8 +2908 8 +2907 8 ++2906 8 +2905 8 -2904 8 -2903 8 +2902 8 +2901 8 -2900 8 -2899 8 -2898 8 +2897 8 +-2896 8 +2895 8 -2894 8 -2893 8 -2892 8 -2891 16 -2890 16 -2889 8 +2888 16 +2887 8 +-2886 8 -2885 8 +2884 8 -2883 8 -2882 16 -2881 16 +2880 16 -2879 8 -2878 8 +2877 8 +-2876 8 -2875 8 -2874 8 -2873 33 -2872 33 -2871 8 +2870 33 +2869 8 -2868 8 -2867 8 ++2866 8 -2865 8 -2864 33 -2863 33 +2862 33 -2861 8 -2860 8 +2859 8 -2858 8 -2857 8 +-2856 8 -2855 25 -2854 25 -2853 8 +2852 25 +2851 8 -2850 8 -2849 8 +2848 8 -2847 8 +-2846 25 -2845 25 +2844 25 -2843 8 -2842 8 +2841 8 -2840 8 -2839 8 +2838 8 -2837 8 +-2836 8 +2835 8 -2834 8 -2833 8 -2832 8 +2831 8 -2830 8 -2829 8 +2828 23 +2827 23 ++2826 25 +2825 25 +2824 23 +2823 23 -2822 8 +2821 8 +2820 8 -2819 8 -2818 8 +2817 8 +-2816 8 -2815 8 -2814 8 +2813 8 -2812 8 -2811 8 +2828 31 +2827 31 +2826 33 +2825 33 ++2824 31 +2823 31 -2810 8 +2809 8 +2808 8 -2807 8 -2806 8 -2805 8 +2804 8 -2803 8 +-2802 8 +2801 8 -2800 8 -2799 8 +2798 14 +2797 14 +2796 16 +2795 16 +2794 14 +2793 14 +-2792 8 +2791 8 +2790 8 -2789 8 +2788 8 +2787 8 -2786 8 +2785 8 -2784 8 -2783 8 +-2782 8 +2781 8 +2780 8 -2779 8 -2778 8 +2777 8 +2776 8 -2775 8 -2774 8 +2773 8 +-2772 8 -2771 8 -2770 8 +2769 8 -2768 8 -2767 8 -2766 8 +2765 8 -2764 8 +2763 8 +-2762 8 -2761 8 -2760 8 -2759 8 +2758 8 +2757 8 -2756 8 -2755 8 -2754 8 +2753 8 ++2752 8 -2751 8 +2750 8 +2749 8 +2748 8 +2747 8 +2746 8 +2745 8 +2744 8 +2743 8 ++2742 8 +2741 8 +2740 8 +2739 8 +2738 8 +2737 8 +2736 8 +2735 8 +2734 8 +2733 8 +-2732 8 -2731 8 -2730 8 -2729 8 -2728 8 -2727 8 -2726 8 -2725 8 -2724 8 -2723 8 +-2722 8 +2721 8 +2720 8 +2719 8 +2718 8 +2717 8 +2716 8 +2715 8 +2714 8 +2713 8 +-2712 10 +2711 10 -2710 10 +2709 10 -2708 10 +2707 10 -2706 10 +2705 10 -2704 10 +2703 10 +-2702 10 +2701 10 -2700 10 +2699 10 -2698 10 +2697 10 -2696 10 +2695 10 -2694 10 -2693 10 +-2692 12 +2691 12 +2690 12 -2689 12 +2688 12 -2687 12 -2686 12 +2685 12 -2684 12 -2683 12 ++2682 12 -2681 12 -2680 12 -2679 12 -2678 14 -2677 14 -2676 16 -2675 16 -2674 12 -2673 12 +-2672 12 -2671 12 -2670 12 +2669 12 -2668 12 -2667 12 +2666 19 +2665 19 +2664 12 +2663 12 +-2662 12 +2661 12 -2660 16 -2659 16 -2658 12 -2657 16 -2656 12 +2655 12 -2654 12 -2653 16 +-2652 16 -2651 16 +2650 12 -2649 12 -2648 21 +2647 21 +2646 21 -2645 21 +2644 21 -2643 21 +-2642 21 +2641 21 -2640 21 -2639 21 +2638 21 -2637 21 -2636 21 -2635 21 -2634 23 -2633 23 +-2632 25 -2631 25 -2630 21 -2629 21 -2628 21 -2627 21 -2626 21 +2625 21 -2624 21 -2623 21 ++2622 27 +2621 27 +2620 21 +2619 21 -2618 21 +2617 21 -2616 25 -2615 25 -2614 21 -2613 25 +-2612 21 +2611 21 -2610 21 -2609 25 -2608 25 -2607 25 +2606 21 -2605 21 -2648 29 +2647 29 ++2646 29 -2645 29 +2644 29 -2643 29 -2642 29 +2641 29 -2640 29 -2639 29 +2638 29 -2637 29 +-2636 29 -2635 29 -2634 31 -2633 31 -2632 33 -2631 33 -2630 29 -2629 29 -2604 29 -2603 29 +-2626 29 +2625 29 -2602 29 -2601 29 +2622 35 +2621 35 +2620 29 +2619 29 -2618 29 +2600 29 +-2599 33 -2598 33 -2597 29 -2596 33 -2595 29 +2594 29 -2610 29 -2593 33 -2592 33 -2591 33 ++2606 29 -2605 29 -2590 16 -2589 16 +2588 16 -2587 16 -2586 16 -2585 16 -2584 16 +2583 16 ++2582 16 +2581 16 +2580 16 +2579 16 -2578 16 +2577 16 -2576 16 -2575 16 +2574 16 +2573 16 ++2572 16 -2571 16 +2570 16 +2569 16 +2568 16 +2567 14 +2566 16 +2565 16 -2564 16 +2563 16 ++2562 14 +2561 16 -2560 16 +2559 16 -2558 16 +2557 16 +2556 16 -2555 16 +2554 16 -2553 16 ++2552 16 -2551 16 -2550 37 +2549 16 -2548 37 +2547 37 -2546 37 -2545 16 +2544 16 +2543 16 +-2542 37 -2541 37 -2540 16 +2539 16 -2538 16 -2537 16 -2536 16 +2535 16 -2534 16 +2533 16 ++2532 16 -2531 16 +2530 16 +2529 16 -2528 16 +2527 16 +2526 25 -2525 25 -2524 25 +2523 25 +-2522 25 +2521 25 -2520 25 +2519 25 +2518 25 +2517 25 +2516 25 -2515 25 +2514 25 +2513 25 +-2512 25 +2511 25 -2510 25 +2509 25 -2508 25 -2507 25 -2506 25 +2505 25 +2504 25 +2503 25 +-2502 25 -2501 25 +2500 25 -2499 25 -2498 25 -2497 25 -2496 25 +2495 25 +2494 25 +2493 25 +-2492 25 -2491 39 +2490 25 -2489 39 +2488 39 -2487 39 -2486 25 -2485 25 +2484 25 -2483 39 +-2482 39 -2481 25 +2480 25 -2479 25 +2478 25 +2477 25 +2476 25 -2475 25 +2474 25 +2473 25 ++2472 25 +2471 23 +2470 25 +2469 25 -2468 25 +2467 25 +2466 23 +2465 25 -2464 25 +2463 25 ++2526 33 -2525 33 -2524 33 +2523 33 -2522 33 +2521 33 -2462 33 +2461 33 +2518 33 +2517 33 ++2516 33 -2515 33 +2514 33 +2513 33 -2512 33 +2511 33 -2510 33 +2509 33 -2508 33 -2507 33 +-2506 33 +2505 33 +2504 33 +2503 33 -2460 33 -2501 33 +2459 33 -2499 33 -2498 33 -2497 33 +-2496 33 +2495 33 +2494 33 +2493 33 -2458 33 -2483 41 +2457 33 -2488 41 +2489 41 -2482 41 +-2456 33 -2485 33 +2455 33 -2491 41 -2487 41 -2481 33 +2480 33 -2479 33 +2478 33 +2454 33 ++2453 33 -2475 33 +2452 33 +2451 33 +2450 33 +2449 31 +2470 33 +2448 33 -2468 33 +2447 33 ++2446 31 +2445 33 -2464 33 +2463 33 -2444 14 +2443 14 +2442 14 +2441 14 +2440 14 +2439 14 ++2438 14 +2437 14 +2436 14 +2435 14 -2434 19 +2433 14 -2432 14 +2431 14 -2430 19 +2429 14 ++2428 14 +2427 14 +2426 14 -2425 14 +2424 14 -2423 14 +2422 14 -2421 14 +2420 14 +2419 14 ++2418 19 -2417 19 +2416 19 +2415 19 +2414 19 +2413 19 -2412 19 +2411 19 +2410 19 +2409 19 ++2408 19 -2407 19 +2406 19 +2405 19 -2404 19 +2403 19 -2402 23 +2401 23 +2400 23 +2399 23 ++2398 23 +2397 23 +2396 23 +2395 23 +2394 23 +2393 23 -2392 27 +2391 23 -2390 23 +2389 23 +-2388 27 +2387 23 +2386 23 +2385 23 +2384 23 -2383 23 +2382 23 -2381 23 -2380 23 -2379 23 ++2378 23 -2377 23 -2402 31 +2401 31 +2400 31 +2399 31 +2376 31 +2375 31 +2374 31 +2373 31 ++2394 31 +2372 31 -2371 35 +2370 31 -2390 31 +2369 31 -2368 35 +2367 31 +2386 31 +2385 31 ++2366 31 -2365 31 +2364 31 -2363 31 -2380 31 -2379 31 +2378 31 -2377 31 +2362 27 -2361 27 ++2360 27 +2359 27 +2358 27 +2357 27 -2356 27 +2355 27 +2354 27 +2353 27 +2352 27 -2351 27 ++2350 27 +2349 27 -2348 27 +2347 27 +2362 35 -2346 35 +2345 35 +2359 35 +2358 35 +2357 35 +-2356 35 +2355 35 +2354 35 +2353 35 +2352 35 -2351 35 +2350 35 +2349 35 -2348 35 +2347 35 +-2344 44 -2343 44 +2342 44 -2341 44 -2340 44 +2339 44 -2338 44 +2337 44 -2336 44 -2335 44 ++2334 44 -2333 44 -2332 44 -2331 44 -2330 44 -2329 44 +2328 44 +2327 44 -2326 44 +2325 44 ++2324 44 -2323 44 +2322 44 -2321 44 -2320 44 -2319 44 -2318 44 +2317 44 +2316 44 -2315 44 +-2314 44 +2313 44 +2312 44 +2311 44 +2310 44 +2309 44 +2308 44 +2307 44 -2306 44 +2305 44 ++2304 44 +2303 44 -2302 44 -2301 44 -2300 44 -2299 44 -2298 44 -2297 44 -2296 44 -2295 44 +-2294 44 +2293 44 -2292 44 -2291 44 -2290 44 +2289 44 +2288 44 -2287 37 -2286 37 +2285 37 ++2284 37 -2283 37 +2282 37 -2281 37 -2280 37 +2279 37 +2278 37 +2277 37 -2276 37 -2275 37 ++2274 37 -2273 37 +2272 37 -2271 37 +2270 37 +2269 37 +2268 37 -2267 37 +2266 37 -2265 37 +-2264 37 -2263 37 -2262 37 +2261 37 +2260 37 -2259 37 +2258 37 -2257 37 +2256 37 -2255 37 +-2254 37 +2253 37 -2252 37 -2251 37 +2250 37 -2249 37 -2248 37 -2247 37 +2246 37 -2245 37 +-2244 37 +2243 37 -2242 37 +2241 37 +2240 37 -2239 37 -2238 37 -2237 37 +2236 37 -2235 37 ++2234 37 -2233 37 -2232 37 +2231 37 +2230 37 +2229 37 -2228 37 -2227 41 -2226 41 +2225 41 ++2224 41 -2223 41 +2222 41 -2221 41 -2220 41 +2219 41 +2218 41 +2217 41 -2216 41 -2215 41 ++2214 41 -2213 41 +2212 41 -2211 41 +2210 41 +2209 41 +2208 41 -2207 41 +2206 41 -2205 41 +-2204 41 -2203 41 -2202 41 +2201 41 +2200 41 -2199 41 +2198 41 -2197 41 +2196 41 -2195 41 +-2194 41 +2193 41 -2192 41 -2191 41 +2190 41 -2189 41 -2188 41 -2187 41 +2186 41 -2185 41 +-2184 41 +2183 41 -2182 41 +2181 41 +2180 41 -2179 41 -2178 41 -2177 41 +2176 41 -2175 41 ++2174 41 -2173 41 -2172 41 +2171 41 +2170 41 +2169 41 -2168 41 -2227 39 -2226 39 +2225 39 ++2224 39 -2223 39 +2222 39 -2221 39 -2220 39 +2219 39 +2218 39 +2217 39 -2216 39 -2215 39 ++2214 39 -2213 39 +2212 39 -2211 39 +2210 39 +2209 39 +2208 39 -2207 39 +2206 39 -2205 39 +-2204 39 -2203 39 -2202 39 +2201 39 +2200 39 -2199 39 +2198 39 -2197 39 +2196 39 -2195 39 +-2194 39 +2193 39 -2192 39 -2191 39 +2190 39 -2189 39 -2188 39 -2187 39 +2186 39 -2185 39 +-2184 39 +2183 39 -2182 39 +2181 39 +2180 39 -2179 39 -2178 39 -2177 39 +2176 39 -2175 39 ++2174 39 -2173 39 -2172 39 +2171 39 +2170 39 +2169 39 -2168 39 +2167 46 +2166 46 +2165 46 ++2164 46 +2163 0 +2162 46 +2161 46 +2160 46 -2159 46 -2158 46 +2157 46 -2156 46 +2155 46 +-2154 46 -2153 46 -2152 46 +2151 46 +2150 46 -2149 46 +2148 46 +2147 46 -2146 46 +2145 46 ++2144 46 +2143 46 +2142 46 -2141 46 +2140 46 +2139 46 -2138 46 +2137 46 +2136 46 -2135 46 ++2134 46 +2133 46 +2132 46 +2131 46 -2130 46 +2129 46 +2128 46 -2127 46 +2126 46 +2125 46 +-2124 46 -2123 46 +2122 46 -2121 46 +2120 46 +2119 46 -2118 46 -2117 46 +2116 46 +2115 46 +-2114 46 -2113 46 -2112 46 +2111 46 -2110 46 -2109 46 -2108 46 +2107 46 +2106 46 +2105 46 ++2104 46 +2103 46 -2102 46 -2101 46 -2100 46 +2099 46 -2098 46 +2097 46 -2096 46 +2095 46 +-2094 46 -2093 46 +2092 46 +2091 46 -2090 46 +2089 46 -2088 46 +2087 46 -2086 46 -2085 46 +-2084 46 -2083 46 -2082 46 -2081 46 +2080 46 +2079 46 -2078 46 +2077 46 +2076 0 +2075 0 +-2074 44 -2073 44 -2072 44 -2071 44 +2070 0 -2069 44 -2068 44 -2067 44 -2066 44 +2065 44 ++2064 44 -2063 44 -2062 44 -2061 44 -2060 44 -2059 44 -2058 44 -2057 44 -2056 44 -2055 44 +-2054 44 -2053 44 -2052 44 -2051 44 -2050 44 -2049 44 +2048 44 -2047 44 +2046 44 -2045 44 ++2044 44 -2043 44 -2042 44 -2041 44 +2040 44 +2039 44 +2038 44 -2037 44 +2036 44 +2035 44 +-2034 44 +2033 44 -2032 44 +2031 44 -2030 44 -2029 44 +2028 44 +2027 44 +2026 44 +2025 44 +-2024 0 -2023 0 -2022 44 +2021 44 -2020 44 -2019 44 -2018 44 +2017 44 +2016 44 -2015 44 ++2014 44 -2013 44 +2012 44 -2011 44 +2010 44 +2009 44 -2008 44 +2007 44 +2006 44 +2005 44 +-2004 44 -2003 44 +2002 44 +2001 44 -2000 44 +1999 44 -1998 44 -1997 44 +1996 44 -1995 44 ++1994 44 -1993 44 +1992 44 +1991 44 +1990 44 -1989 44 +1988 44 +1987 44 -1986 44 +1985 44 +-1984 44 +1983 44 -1982 44 +1981 44 -1980 44 -1979 44 -1978 44 +1977 44 +1976 44 -1975 44 ++1974 44 -1973 44 -1972 44 +1971 44 -1970 44 -1969 44 -1968 44 -1967 44 -1966 44 -1965 44 +-1964 44 -1963 44 -1962 44 -1961 44 -1960 44 -1959 44 +1958 44 -1957 44 +1956 44 -1955 44 ++1954 44 -1953 44 +1952 44 -1951 44 -1950 44 -1949 44 -1948 44 -1947 44 +1946 44 +1945 44 +-1944 44 -1943 44 +1942 44 +1941 44 -1940 44 -1939 44 +1938 44 +1937 44 -1936 44 -1935 44 ++1934 44 -1933 44 +1932 44 +1931 44 +1930 44 -1929 44 +1928 44 +1927 44 +1926 44 -1925 44 +-1924 44 -1923 44 +1922 44 -1921 44 -1920 44 -1919 44 +1918 44 -1917 44 +1916 44 +1915 44 +-1914 44 +1913 44 +1912 44 -1911 44 +1910 44 +1909 44 -1908 44 -1907 44 +1906 44 -1905 44 +-1904 44 +1903 44 +1902 44 -1901 44 +1900 44 +1899 44 +1898 44 +1897 44 +1896 44 +1895 44 +-1894 44 -1893 44 +1892 44 +1891 44 -1890 44 +1889 44 +1888 44 -1887 44 +1886 44 +1885 44 +-1884 44 -1883 44 -1882 44 +1881 44 -1880 44 +1879 44 +1878 44 -1877 44 +1876 44 -1875 44 ++1874 44 +1873 44 -1872 44 +1871 44 +1870 44 -1869 44 -1868 44 -1867 44 +1866 44 +1865 44 +-1864 44 +1863 44 +1862 44 +1861 44 -1860 44 -1859 44 +1858 44 +1857 44 +1856 44 -1855 44 +-1854 44 +1853 44 +1852 44 -1851 44 +1850 44 -1849 44 +1848 44 -1847 44 +1846 44 -1845 44 ++1844 44 -1843 44 -1842 44 -1841 44 -1840 44 -1839 44 -1838 44 -1837 44 -1836 44 -1835 44 ++1834 44 -1833 44 -1832 44 -1831 44 -1830 44 +1829 44 -1828 44 -1827 44 +1826 44 -1825 44 ++1824 44 -1823 44 +1822 44 +1821 44 +1820 44 +1819 44 -1818 44 -1817 44 -1816 44 +1815 44 +-1814 44 +1813 44 -1812 44 -1811 44 +1810 44 +1809 44 -1808 44 +1807 44 -1806 44 +1805 44 ++1804 44 -1803 44 -1802 44 +1801 44 +1800 44 +1799 44 +1798 44 -1797 44 -1796 44 -1795 44 ++1794 44 -1793 44 +1792 44 +1791 44 -1790 44 -1789 44 -1788 44 +1787 44 +1786 44 -1785 44 ++1784 44 -1783 44 -1782 44 -1781 44 +1780 44 +1779 44 -1778 44 -1777 44 -1776 44 -1775 44 ++1774 44 +1773 44 -1772 44 +1771 44 +1770 44 -1769 44 -1768 44 -1767 44 +1766 44 -1765 44 ++1764 44 +1763 44 -1762 44 +1761 44 +1760 44 -1759 44 +1758 44 +1757 44 +1756 44 -1755 44 +-1754 44 +1753 44 -1752 44 -1751 44 +1750 44 +1749 44 -1748 44 -1747 44 -1746 44 -1745 44 +-1744 44 +1743 44 -1742 44 +1741 44 +1740 44 +1739 44 -1738 44 -1737 44 -1736 44 -1735 44 +-1734 44 +1733 44 +1732 44 +1731 44 -1730 44 +1729 44 -1728 44 +1727 44 +1726 44 -1725 44 ++1724 44 +1723 44 +1722 44 +1721 44 -1720 44 +1719 44 +1718 44 +1717 44 -1716 44 -1715 44 +-1714 44 +1713 44 +1712 44 -1711 44 +1710 44 +1709 44 -1708 44 +1707 44 -1706 44 +1705 44 ++1704 44 -1703 44 -1702 44 +1701 44 +1700 44 -1699 44 -1698 44 -1697 44 -1696 44 +1695 44 ++1694 44 -1693 44 -1692 44 +1691 44 +1690 44 +1689 44 -1688 44 -1687 44 -1686 44 -1685 44 ++1684 44 -1683 44 +1682 44 -1681 44 -1680 44 +1679 44 +1678 44 -1677 44 -1676 44 -1675 44 +-1674 44 +1673 44 +1672 44 +1671 44 -1670 44 -1669 44 +1668 44 -1667 44 +1666 44 +1665 44 +-1664 44 +1663 44 +1662 44 +1661 44 -1660 44 -1659 44 +1658 44 -1657 44 +1656 44 -1655 44 ++1654 44 -1653 44 -1652 44 +1651 44 +1650 44 -1649 44 +1648 44 +1647 44 -1646 44 +1645 44 +-1644 44 +1643 44 -1642 44 +1641 44 -1640 44 +1639 44 -1638 44 -1637 44 -1636 44 +1635 44 ++1634 44 +1633 44 +1632 44 +1631 44 -1630 44 +1629 44 +1628 44 +1627 44 -1626 44 -1625 44 ++1624 44 -1623 44 +1622 44 -1621 44 +1620 44 +1619 44 -1618 44 -1617 44 +1616 44 -1615 44 ++1614 44 -1613 44 +1612 44 +1611 44 -1610 44 -1609 44 +1608 44 +1607 44 -1606 44 -1605 44 ++1604 44 +1603 44 -1602 44 -1601 44 +1600 44 +1599 44 -1598 44 -1597 44 +1596 44 +1595 44 ++1594 44 +1593 44 -1592 44 -1591 44 -1590 44 -1589 44 +1588 44 +1587 44 -1586 44 -1585 44 ++1584 44 -1583 44 -1582 44 +1581 44 -1580 44 +1579 44 +1578 44 +1577 44 +1576 44 +1575 44 ++1574 44 -1573 44 -1572 44 +1571 44 -1570 44 +1569 44 -1568 44 +1567 44 +1566 44 -1565 44 ++1564 44 -1563 44 -1562 44 -1561 44 -1560 44 -1559 44 -1558 44 -1557 44 +1556 44 +1555 44 ++1554 44 -1553 44 +1552 44 -1551 44 +1550 44 +1549 44 +1548 44 -1547 44 -1546 44 +1545 44 +-1544 44 +1543 44 -1542 44 +1541 44 +1540 44 -1539 44 -1538 44 -1537 44 +1536 44 +1535 44 +-1534 44 -1533 44 +1532 44 +1531 44 +1530 44 -1529 44 -1528 44 +1527 44 -1526 44 +1525 44 ++1524 44 -1523 44 +1522 44 +1521 44 -1520 44 -1519 44 +1518 44 -1517 44 +1516 44 +1515 44 +-1514 44 +1513 44 +1512 8 +1511 17 +1510 8 +1509 8 -1508 17 -1507 17 -1506 48 +1505 8 +-1504 8 +1503 8 -1502 8 -1501 8 -1500 8 -1499 8 +1498 8 -1497 8 -1496 17 -1495 17 +-1494 17 -1493 17 -1492 17 -1491 17 -1490 17 -1489 17 -1488 17 -1487 17 -1486 17 -1485 17 +-1484 17 -1483 17 -1482 17 -1481 17 -1480 17 -1479 17 -1478 17 -1477 17 -1476 17 -1475 17 +-1474 17 -1473 17 +1472 8 +1471 8 -1470 17 -1469 17 -1468 17 -1467 17 -1466 23 -1465 23 +-1464 17 -1463 17 +1462 8 +1461 8 +1460 8 +1459 8 -1458 17 -1457 17 -1456 17 -1455 17 +-1466 31 -1465 31 -1454 17 -1453 17 +1452 8 +1451 8 +1450 8 +1449 8 -1448 17 -1447 17 +-1446 17 -1445 17 -1444 14 -1443 14 -1442 17 -1441 17 +1440 8 +1439 8 +1438 8 -1437 8 ++1436 8 -1435 8 +1434 8 -1433 8 +1432 8 -1431 8 -1430 8 -1429 8 -1428 8 -1427 8 ++1426 8 +1425 8 +1424 8 +1423 8 +1422 8 +1421 8 +1420 8 +1419 8 +1418 17 +1417 17 ++1416 17 +1415 17 +1414 17 +1413 17 +1412 17 +1411 17 +1410 17 +1409 17 +1408 8 +1407 8 ++1406 8 +1405 8 +1404 8 +1403 8 +1402 8 +1401 8 +1400 8 +1399 8 +1398 8 +1397 8 ++1396 17 +1395 17 +1394 17 +1393 17 +1392 17 +1391 17 +1390 17 +1389 17 +1388 17 +1387 17 ++1386 10 +1385 12 +1384 12 +1383 12 +1382 12 +1381 12 +1380 12 +1379 17 +1378 17 +1377 17 ++1376 17 +1375 17 +1374 17 -1373 17 -1372 17 -1371 17 -1370 17 -1369 17 -1368 17 -1367 17 +-1366 17 -1365 17 -1364 17 -1363 17 -1362 17 -1361 12 -1360 12 +1359 21 +1358 21 +1357 21 ++1356 21 +1355 21 +1354 21 +1353 17 +1352 17 +1351 17 +1350 17 +1349 17 +1348 17 -1347 17 +-1346 17 -1345 17 -1344 17 -1343 17 -1342 17 -1341 17 -1340 17 -1339 17 -1338 17 -1337 17 +-1336 17 -1335 21 -1334 21 +1359 29 +1358 29 +1357 29 +1356 29 +1355 29 +1354 29 +1333 17 ++1332 17 +1331 17 +1330 17 +1329 17 +1328 17 -1327 17 -1326 17 -1325 17 -1324 17 -1323 17 +-1322 17 -1321 17 -1320 17 -1319 17 -1318 17 -1317 17 -1316 17 -1335 29 -1334 29 +1315 17 ++1314 17 +1313 16 +1312 17 +1311 17 +1310 16 +1309 16 +1308 16 +1307 17 +1306 17 +1305 17 ++1304 17 -1303 17 -1302 17 +1301 17 +1300 17 +1299 17 +1298 17 +1297 17 +1296 17 +1295 16 ++1294 16 +1293 17 +1292 37 +1291 17 +1290 17 +1289 37 +1288 17 -1287 16 -1286 16 +1285 16 ++1284 16 +1283 17 +1282 17 -1281 16 -1280 16 +1279 17 +1278 17 +1277 25 +1276 25 +1275 17 ++1274 17 -1273 25 -1272 25 +1271 17 +1270 17 -1269 25 -1268 25 +1267 25 +1266 25 +1265 17 ++1264 17 +1263 25 +1262 17 +1261 17 +1260 25 +1259 17 +1258 39 +1257 17 +1256 17 +1255 39 ++1254 17 +1253 25 +1252 25 +1251 17 +1250 17 +1249 17 +1248 17 -1247 17 -1246 17 +1245 17 ++1244 17 +1243 17 +1242 17 +1241 17 +1240 17 +1277 33 +1276 33 +1239 17 +1238 17 -1273 33 +-1272 33 +1237 17 +1236 17 -1269 33 -1268 33 +1267 33 +1266 33 +1235 17 +1234 17 +1263 33 ++1233 17 +1232 17 +1260 33 +1231 17 +1255 41 +1230 17 +1229 17 +1258 41 +1228 17 +1253 33 ++1252 33 +1227 17 +1226 17 +1225 17 +1224 17 -1223 17 -1222 17 +1221 17 +1220 17 +1219 17 ++1218 17 +1217 17 +1216 17 +1215 14 +1214 14 +1213 17 +1212 17 -1211 17 -1210 17 -1209 17 +-1208 17 +1207 17 +1206 17 -1205 17 -1204 17 -1203 17 -1202 17 -1201 14 -1200 14 -1199 17 +-1198 17 +1197 17 +1196 17 +1195 19 +1194 19 +1193 19 +1192 19 +1191 17 +1190 17 -1189 19 +-1188 19 +1187 19 +1186 19 +1185 23 +1184 23 +1183 17 +1182 17 -1181 17 -1180 17 -1179 17 +-1178 17 +1177 17 +1176 17 -1175 17 -1174 17 -1173 17 -1172 17 -1171 23 -1170 23 +1169 17 ++1168 17 +1185 31 +1184 31 +1167 17 +1166 17 -1165 17 -1164 17 -1163 17 -1162 17 +1161 17 ++1160 17 -1159 17 -1158 17 -1157 17 -1156 17 -1171 31 -1170 31 +1155 17 +1154 17 +1153 17 ++1152 17 +1151 27 +1150 27 +1149 27 +1148 27 +1147 17 +1146 17 -1145 27 -1144 27 +1143 27 ++1142 27 +1141 17 +1140 17 +1151 35 +1150 35 +1149 35 +1148 35 +1139 17 +1138 17 -1145 35 +-1144 35 +1143 35 +1142 35 +1137 17 +1136 17 +1135 17 +1134 17 +1133 17 +1132 17 +1131 17 ++1130 37 +1129 37 +1128 37 +1127 37 +1126 37 +1125 37 -1124 37 -1123 37 -1122 37 -1121 37 ++1120 37 +1119 37 +1118 37 +1117 37 -1116 37 -1115 37 -1114 37 -1113 37 +1112 37 +1111 37 ++1110 37 +1109 37 -1108 37 -1107 37 -1106 37 -1105 37 +1104 37 +1103 37 -1102 37 -1101 37 ++1100 37 +1099 37 +1098 37 +1097 37 +1096 37 +1095 37 +1094 41 +1093 41 +1092 41 +1091 41 ++1090 41 +1089 41 -1088 41 -1087 41 -1086 41 -1085 41 +1084 41 +1083 41 +1082 41 +1081 41 +-1080 41 -1079 41 -1078 41 -1077 41 +1076 41 +1075 41 +1074 41 +1073 41 -1072 41 -1071 41 +-1070 41 -1069 41 +1068 41 +1067 41 -1066 41 -1065 41 +1064 41 +1063 41 +1062 41 +1061 41 ++1060 41 +1059 41 +1094 39 +1093 39 +1092 39 +1091 39 +1090 39 +1089 39 -1088 39 -1087 39 +-1086 39 -1085 39 +1084 39 +1083 39 +1082 39 +1081 39 -1080 39 -1079 39 -1078 39 -1077 39 ++1076 39 +1075 39 +1074 39 +1073 39 -1072 39 -1071 39 -1070 39 -1069 39 +1068 39 +1067 39 +-1066 39 -1065 39 +1064 39 +1063 39 +1062 39 +1061 39 +1060 39 +1059 39 +1058 0 +1057 0 ++1056 0 +1055 0 +1054 0 -1053 46 -1052 46 +1051 17 +1050 17 +1049 17 +1048 17 +1047 17 ++1046 17 +1045 17 +1044 17 +1043 17 +1042 17 +1041 17 +1040 17 -1039 46 -1038 46 -1037 46 +-1036 46 -1035 46 -1034 46 -1033 46 -1032 46 +1031 46 +1030 46 +1029 46 +1028 46 -1027 46 +-1026 46 -1025 17 -1024 17 -1023 17 -1022 17 -1021 17 -1020 17 -1019 17 -1018 17 -1017 17 +-1016 17 -1015 17 +1014 17 +1013 17 +1012 17 +1011 17 -1010 17 +1009 17 +1008 17 +1007 17 ++1006 17 -1005 0 -1004 0 -1003 0 -1002 0 -1001 0 -1000 0 -999 0 -998 0 -997 0 +-996 0 -995 0 -994 0 +993 0 +992 0 +991 0 +990 0 +989 0 +988 44 +987 44 ++986 44 +985 44 +984 0 +983 0 -982 44 -981 44 +980 44 +979 44 +978 44 +977 44 ++976 0 +975 0 +974 0 +973 0 +972 0 +971 0 +970 0 +969 44 +968 44 -967 44 +-966 44 +965 44 +964 44 -963 44 -962 44 -961 44 -960 44 -959 44 -958 44 +957 44 ++956 44 +955 44 +954 44 -953 44 -952 44 -951 44 -950 44 +949 44 -948 44 -947 44 ++946 44 +945 44 +944 44 +943 44 +942 44 +941 44 +940 44 -939 44 -938 44 +937 44 ++936 44 -935 44 +934 44 -933 44 +932 44 -931 44 -930 44 -929 44 -928 44 -927 44 +-926 44 -925 44 -924 44 -923 44 -922 44 -921 44 +920 44 +919 44 -918 44 +917 44 ++916 44 +915 44 -914 44 +913 44 -912 44 +911 44 -910 44 +909 44 +908 44 -907 44 ++906 44 -905 44 -904 44 +903 44 +902 44 -901 44 +900 44 +899 44 +898 44 +897 44 ++896 44 +895 44 -894 44 +893 44 +892 44 -891 44 -890 44 -889 44 +888 44 +887 44 +-886 44 +885 44 +884 44 -883 44 -882 44 +881 44 +880 44 +879 44 +878 44 -877 17 ++876 17 +875 44 +874 17 -873 17 +872 44 +871 17 +870 17 +869 17 +868 17 +867 44 ++866 17 +865 17 +864 17 -863 17 -862 17 -861 17 -860 17 +859 44 +858 17 +857 17 ++856 44 +855 17 +854 44 +853 17 +852 44 +851 17 +850 44 +849 17 +848 44 +847 17 ++846 17 -845 17 -844 17 -843 17 -842 17 -841 17 -840 17 -839 44 +838 44 +837 44 +-836 44 +835 44 -834 44 +833 44 +832 44 -831 44 +830 44 -829 44 +828 44 +827 44 ++826 44 -825 44 -824 44 +823 44 +822 44 +821 44 -820 44 +819 44 -818 44 -817 44 +-816 44 +815 44 -814 44 -813 44 +812 44 -811 44 +810 44 +809 44 +808 44 +807 44 ++806 44 +805 44 +804 44 +803 44 +802 44 +801 44 +800 44 -799 44 -798 44 +797 44 +-796 44 +795 44 -794 44 -793 44 +792 44 +791 44 +790 44 +789 44 +788 44 +787 44 ++786 44 -785 44 -784 44 -783 44 -782 44 -781 44 -780 44 +779 44 -778 44 -777 44 +-776 44 -775 44 -774 44 -773 44 -772 44 -771 44 +770 44 +769 44 +768 44 +767 44 ++766 44 +765 44 +764 44 -763 44 -762 44 +761 44 +760 44 -759 44 -758 44 -757 44 +-756 44 +755 44 +754 44 +753 44 +752 44 +751 44 -750 44 -749 44 -748 44 -747 44 ++746 44 +745 44 -744 44 -743 44 -742 44 -741 44 +740 44 +739 44 -738 44 +737 44 ++736 44 -735 44 +734 44 -733 44 +732 44 +731 44 +730 44 +729 44 +728 44 +727 44 ++726 44 +725 44 +724 44 +723 44 +722 44 +721 44 +720 44 +719 44 +718 44 -717 44 +-716 8 +715 17 -714 8 -713 8 -712 17 +711 48 -710 8 -709 8 +708 8 -707 8 +-706 8 -705 8 -704 8 -703 8 -702 8 -701 17 -700 17 -699 17 -698 17 -697 17 +-696 17 -695 17 -694 17 -693 17 -692 17 -691 17 -690 17 -689 17 -688 17 -687 17 +-686 17 -685 17 -684 17 -683 17 -682 17 -681 17 -680 17 -679 17 -678 17 +677 8 ++676 8 -675 17 -674 17 -673 23 -672 17 +671 8 +670 8 +669 8 +668 8 -667 17 +-666 17 -673 31 -665 17 +664 8 +663 8 +662 8 +661 8 -660 17 -659 17 -658 14 +-657 17 +656 8 +655 8 -654 8 -653 8 -652 8 -651 8 +650 8 -649 8 +648 8 +-647 8 -646 8 -645 8 -644 8 -643 8 +642 8 +641 8 -640 8 +639 8 -638 8 ++637 8 +636 17 +635 17 +634 17 +633 17 +632 17 +631 17 +630 17 +629 17 +628 17 ++627 17 -626 8 +625 8 +624 8 +623 8 +622 8 +621 8 +620 8 +619 8 +618 8 ++617 8 +616 8 +615 17 +614 17 +613 17 +612 17 +611 17 +610 17 +609 17 +608 17 ++607 17 +606 17 +605 10 +604 12 +603 12 +602 12 +601 12 +600 12 +599 12 +598 17 ++597 17 +596 17 -595 17 -594 17 -593 17 -592 17 -591 17 -590 17 -589 17 -588 17 +-587 17 -586 17 -585 12 -584 12 +583 21 +582 21 +581 21 +580 21 +579 21 +578 21 ++577 17 +576 17 +575 17 -574 17 -573 17 -572 17 -571 17 -570 17 -569 17 -568 17 +-567 17 -566 17 -565 17 -564 21 -563 21 +583 29 +582 29 +581 29 +580 29 +579 29 ++578 29 +562 17 +561 17 +560 17 -559 17 -558 17 -557 17 -556 17 -555 17 -554 17 +-553 17 -552 17 -551 17 -550 17 -564 29 -563 29 +549 17 +548 17 -547 16 +546 17 ++545 17 +544 16 +543 16 +542 16 +541 17 +540 17 +539 17 -538 17 +537 17 +536 17 ++535 17 +534 17 +533 17 +532 17 +531 16 +530 16 +529 17 +528 37 +527 17 +526 17 ++525 37 +524 17 -523 16 -522 16 +521 16 +520 16 +519 17 +518 17 -517 16 -516 16 ++515 17 +514 17 +513 25 +512 25 +511 17 +510 17 -509 25 -508 25 +507 17 +506 17 +-505 25 -504 25 +503 25 +502 25 +501 17 +500 17 -499 25 +498 17 +497 17 +496 25 ++495 17 +494 39 +493 17 +492 17 +491 39 +490 17 +489 25 +488 25 +487 17 +486 17 ++485 17 -484 17 +483 17 +482 17 +481 17 +480 17 +479 17 +478 17 +513 33 +512 33 ++477 17 +476 17 -509 33 -508 33 +475 17 +474 17 -505 33 -504 33 +503 33 +502 33 ++473 17 +472 17 -499 33 +471 17 +470 17 +496 33 +469 17 +491 41 +468 17 +467 17 ++494 41 +466 17 +489 33 +488 33 +465 17 +464 17 +463 17 -462 17 +461 17 +460 17 ++459 17 +458 17 +457 17 +456 17 +455 14 +454 14 -453 17 -452 17 -451 17 -450 17 +-449 17 -448 17 -447 17 -446 17 -445 17 -444 17 -443 14 -442 14 -441 17 +440 17 ++439 17 -438 19 +437 19 +436 19 +435 17 -434 19 -433 19 +432 19 +431 19 +430 23 ++429 23 -428 17 -427 17 -426 17 -425 17 -424 17 -423 17 -422 17 -421 17 -420 17 +-419 17 -418 23 -417 23 +416 17 +430 31 +429 31 -415 17 -414 17 -413 17 -412 17 +-411 17 -410 17 -409 17 -408 17 -407 17 -406 17 -418 31 -417 31 +405 17 +404 17 ++403 17 -402 27 +401 27 +400 27 +399 17 -398 27 -397 27 +396 27 +395 27 +394 17 ++393 17 -402 35 +401 35 +400 35 +392 17 -398 35 -397 35 +396 35 +395 35 -391 17 ++390 37 +389 37 -388 37 -387 37 -386 37 -385 37 -384 37 -383 37 +382 37 +381 37 +-380 37 -379 37 -378 37 -377 37 -376 37 +375 37 +374 37 +373 37 +372 37 -371 37 +-370 37 -369 37 -368 37 -367 37 -366 37 -365 37 +364 37 +363 37 +362 37 +361 37 ++360 37 +359 41 +358 41 -357 41 -356 41 -355 41 -354 41 -353 41 -352 41 +351 41 ++350 41 -349 41 -348 41 -347 41 -346 41 -345 41 +344 41 +343 41 +342 41 +341 41 +-340 41 -339 41 -338 41 -337 41 -336 41 -335 41 -334 41 +333 41 +332 41 +331 41 ++330 41 +329 41 +359 39 +358 39 -357 39 -356 39 -355 39 -354 39 -353 39 -352 39 ++351 39 +350 39 -349 39 -348 39 -347 39 -346 39 -345 39 +344 39 +343 39 +342 39 ++341 39 -340 39 -339 39 -338 39 -337 39 -336 39 -335 39 -334 39 +333 39 +332 39 ++331 39 +330 39 +329 39 +328 0 +327 0 +326 0 +325 0 -324 46 -323 46 +322 17 ++321 17 +320 17 +319 17 +318 17 +317 17 +316 17 +315 17 +314 17 +313 17 -312 46 +-311 46 -310 46 -309 46 -308 46 -307 46 -306 46 -305 46 -304 46 -303 46 -302 46 +-301 46 -300 17 -299 17 -298 17 -297 17 -296 17 -295 17 -294 17 -293 17 -292 17 +-291 17 -290 17 -289 17 -288 17 -287 17 -286 17 -285 17 +284 17 +283 17 -282 17 ++281 17 -280 0 -279 0 -278 0 +277 0 +276 0 +275 0 +274 0 -273 44 +272 44 ++271 0 -270 44 -269 44 +268 44 +267 44 +266 44 +265 44 +264 0 +263 0 +262 0 ++261 44 +260 44 -259 44 -258 44 +257 44 +256 44 -255 44 -254 44 -253 44 -252 44 +-251 44 -250 44 +249 44 -248 44 +247 44 -246 44 -245 44 -244 44 -243 44 -242 44 ++241 44 -240 44 -239 44 +238 44 +237 44 +236 44 +235 44 +234 44 -233 44 -232 44 ++231 44 -230 44 -229 44 -228 44 -227 44 -226 44 -225 44 -224 44 -223 44 -222 44 +-221 44 -220 44 -219 44 -218 44 -217 44 -216 44 -215 44 +214 44 +213 44 -212 44 ++211 44 +210 44 +209 44 -208 44 +207 44 -206 44 +205 44 -204 44 +203 44 +202 44 +-201 44 +200 44 -199 44 -198 44 +197 44 -196 44 +195 44 +194 44 +193 44 +192 44 ++191 44 +190 44 -189 44 +188 44 +187 44 -186 44 -185 44 -184 44 +183 44 +182 44 +-181 44 +180 44 -179 44 -178 44 +177 44 +176 44 +175 44 -174 17 +173 17 +172 44 ++171 17 -170 17 +169 44 +168 17 +167 17 -166 17 +165 17 -164 44 -163 17 -162 17 ++161 17 -160 17 -159 17 -158 17 -157 17 +156 44 +155 17 +154 17 +153 44 +152 17 ++151 44 -150 17 -149 44 +148 17 +147 44 +146 17 +145 44 -144 17 +143 17 -142 17 +-141 17 -140 17 -139 17 -138 17 -137 17 -136 44 +135 44 +134 44 -133 44 -132 44 +-131 44 +130 44 +129 44 -128 44 -127 44 -126 44 +125 44 -124 44 +123 44 -122 44 +-121 44 +120 44 -119 44 +118 44 -117 44 +116 44 -115 44 -114 44 -113 44 +112 44 +-111 44 -110 44 -109 44 -108 44 +107 44 -106 44 +105 44 +104 44 +103 44 +102 44 ++101 44 +100 44 -99 44 -98 44 +97 44 -96 44 +95 44 -94 44 -93 44 -92 44 ++91 44 +90 44 -89 44 -88 44 -87 44 -86 44 -85 44 -84 44 -83 44 +82 44 +-81 44 -80 44 -79 44 -78 44 -77 44 -76 44 -75 44 -74 44 +73 44 +72 44 +-71 44 -70 44 -69 44 +68 44 -67 44 -66 44 -65 44 -64 44 -63 44 +62 44 +-61 44 -60 44 -59 44 -58 44 -57 44 +56 44 -55 44 -54 44 -53 44 -52 44 +-51 44 +50 44 -49 44 -48 44 -47 44 -46 44 -45 44 +44 44 -43 44 -42 44 ++41 44 -40 44 -39 44 -38 44 +37 17 +36 17 +35 17 +34 17 +33 17 +32 17 ++31 17 +30 17 +29 17 +28 17 +27 17 +26 17 +25 17 +24 17 +23 0 +22 0 ++21 37 +20 41 +20 39 +19 17 +18 17 +17 17 +16 17 +15 17 +14 17 +13 17 ++12 17 +11 17 +10 17 +9 17 +8 17 +7 17 +6 17 +5 0 +4 0 +3 37 ++2 41 +2 39 * + ++1 0 \ No newline at end of file diff --git a/katoptron/Juelich/mesh/contact_mirror_assembly_mm.geo b/katoptron/Juelich/mesh/contact_mirror_assembly_mm.geo new file mode 100644 index 0000000000000000000000000000000000000000..bac97b4d17319f055f1776fa2dd205b425025b66 --- /dev/null +++ b/katoptron/Juelich/mesh/contact_mirror_assembly_mm.geo @@ -0,0 +1,367 @@ +// This .geo has been tested with gmsh 3.0.6 and 4.4.1 binaries for Mac and Linux + +Macro Clear_all + allVolumes[] = Volume "*"; + Recursive Delete { Volume{allVolumes[] } ; } + allSurfaces[] = Surface "*"; + Recursive Delete { Surface{allSurfaces[] } ; } + allPoints[] = Point "*"; + Recursive Delete { Point{allPoints[] } ; } +Return + +Macro Compute_next_avaible_point_id + allPoints[] = Point "*" ; + NallPoints = #allPoints[] ; + Printf("NallPoints %f",NallPoints); + next_avaible_point_id = 0; + compute_next_avaible_point_id_verbose = 0; + For i In {0:NallPoints-1} + If(compute_next_avaible_point_id_verbose) + Printf("Compute_next_avaible_point_id %g, %g",i,allPoints[i]); + EndIf + If(allPoints[i]>= next_avaible_point_id) + next_avaible_point_id = allPoints[i] + 1; + EndIf + EndFor + Printf("Compute_next_avaible_point_id newp %g",newp); + Printf("Compute_next_avaible_point_id next_avaible_point_id %g",next_avaible_point_id); +Return + +Macro Scale_axis_mm_to_m + allPoints[] = Point "*" ; + allLines[] = Line "*" ; + allSurfaces[] = Surface "*"; + allVolumes[] = Volume "*"; + If(usePointID) + c1[] = Point{point_OO}; + EndIf + Dilate {{-c1[0],-c1[1],-c1[2]},0.001} { Volume{allVolumes[] } ; } + + allPoints[] = Point "*" ; + allLines[] = Line "*" ; + allSurfaces[] = Surface "*"; + allVolumes[] = Volume "*"; +Return + +Macro Weld_bolt + new_weld_line_loop = newreg; + Curve Loop(new_weld_line_loop) = curves_id_1[]; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + num[] = Extrude {0, 0, 0.026} { + Surface{new_weld_line_loop}; + }; + new_volume_1 = num[1]; + num[] = Extrude {0, 0, -0.012} { + Surface{new_weld_line_loop}; + }; + new_volume_2 = num[1]; + new_weld_line_loop = newreg; + Curve Loop(new_weld_line_loop) = curves_id_2[]; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + num[] = Extrude {0, 0, 0.002} { + Surface{new_weld_line_loop}; + }; + new_volume_3 = num[1]; + new_weld_line_loop = newreg; + Curve Loop(new_weld_line_loop) = curves_id_3[]; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + num[] = Extrude {0, 0, -0.006} { + Surface{new_weld_line_loop}; + }; + new_volume_4 = num[1]; + num[] = BooleanUnion{ Volume{volume_id_1}; Delete; }{ Volume{volume_id_2}; Volume{volume_id_3}; Volume{volume_id_4}; Volume{volume_id_5}; Volume{volume_id_6}; Volume{volume_id_7}; Volume{volume_id_8}; Volume{volume_id_9}; Volume{new_volume_1}; Volume{new_volume_2}; Volume{new_volume_3}; Volume{new_volume_4}; Delete; }; + new_volume_1 = num[0]; +Return + +Macro Weld_tube + c1[] = Point{pipe_p1}; + c2[] = Point{pipe_p2}; + center1[] = {(c1[0]+c2[0])/2, (c1[1]+c2[1])/2, (c1[2]+c2[2])/2}; + pipe_radius = Sqrt((c1[0]-center1[0])^2+(c1[1]-center1[1])^2+(c1[2]-center1[2])^2); + + c1[] = Point{weld_p1}; + c2[] = Point{weld_p5}; + center1[] = {(c1[0]+c2[0])/2, (c1[1]+c2[1])/2, (c1[2]+c2[2])/2}; + weld_radius = Sqrt((c1[0]-center1[0])^2+(c1[1]-center1[1])^2+(c1[2]-center1[2])^2); + + new_weld_p1 = newp; + Point(new_weld_p1) = {(pipe_radius/weld_radius)*(c1[0]-center1[0])+center1[0],(pipe_radius/weld_radius)*(c1[1]-center1[1])+center1[1],(pipe_radius/weld_radius)*(c1[2]-center1[2])+center1[2]}; + new_weld_line1 = newreg; Line(new_weld_line1) = {new_weld_p1, weld_p2}; + new_weld_line2 = newreg; Line(new_weld_line2) = {weld_p2, weld_p3}; + new_weld_line3 = newreg; Line(new_weld_line3) = {weld_p3, weld_p4}; + new_weld_line4 = newreg; Line(new_weld_line4) = {weld_p4, new_weld_p1}; + + new_weld_line_loop = newreg; Line Loop(new_weld_line_loop) = {new_weld_line1,new_weld_line2,new_weld_line3,new_weld_line4}; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + + c1[]=Point{weld_p3}; + c2[]=Point{weld_p4}; + + Extrude {{c2[0]-c1[0],c2[1]-c1[1],c2[2]-c1[2]}, {center1[0], center1[1], center1[2]}, Pi} { + Surface{new_weld_line_loop}; + } + Extrude {{c2[0]-c1[0],c2[1]-c1[1],c2[2]-c1[2]}, {center1[0], center1[1], center1[2]}, -Pi} { + Surface{new_weld_line_loop}; + } +Return + +Macro Compute_cross_and_theta + norm_1 = Sqrt(vec_1[0]^2+vec_1[1]^2+vec_1[2]^2); + norm_2 = Sqrt(vec_2[0]^2+vec_2[1]^2+vec_2[2]^2); + + cross[] = {vec_1[1]*vec_2[2]-vec_1[2]*vec_2[1],vec_1[2]*vec_2[0]-vec_1[0]*vec_2[2],vec_1[0]*vec_2[1]-vec_1[1]*vec_2[0]}; + norm_cross = Sqrt(cross[0]^2+cross[1]^2+cross[2]^2); + + dot = vec_1[0]*vec_2[0] + vec_1[1]*vec_2[1] + vec_1[2]*vec_2[2]; + + theta = Acos(dot/(norm_1*norm_2)); +Return + +Macro Rotate_Axis + allVolumes[] = Volume "*"; + If(usePointID) + c1[] = Point{point_OX_1}; + c2[] = Point{point_OX_2}; + Printf("Rotate_Axis point_OX_1 c1 (%g,%g,%g)",c1[0],c1[1],c1[2]); + Printf("Rotate_Axis point_OX_2 c2 (%g,%g,%g)",c2[0],c2[1],c2[2]); + EndIf + + OX[] = {c2[0]-c1[0],c2[1]-c1[1],c2[2]-c1[2]}; + vec_1[] = OX[]; + vec_2[] = {1,0,0}; + + Call Compute_cross_and_theta; + + Rotate {{cross[0],cross[1],cross[2]}, {0, 0, 0}, theta} { Volume{allVolumes[] } ; } + + allVolumes[] = Volume "*"; + If(usePointID) + c3[] = Point{point_OY_1}; + c4[] = Point{point_OY_2}; + Printf("Rotate_Axis point_OY_1 c3 (%g,%g,%g)",c3[0],c3[1],c3[2]); + Printf("Rotate_Axis point_OY_2 c4 (%g,%g,%g)",c4[0],c4[1],c4[2]); + EndIf + + OY[] = {c4[0]-c3[0],c4[1]-c3[1],c4[2]-c3[2]}; + vec_1[] = OY[]; + vec_2[] = {0,1,0}; + + Call Compute_cross_and_theta; + Rotate {{cross[0],cross[1],cross[2]}, {0, 0, 0}, theta} { Volume{allVolumes[] } ; } + +Return + +Macro Translate_Axis + allVolumes[] = Volume "*"; + If(usePointID) + c1[] = Point{point_OO}; + Printf("Translate_Axis point_OO c1 (%g,%g,%g)",c1[0],c1[1],c1[2]); + EndIf + Translate {-c1[0],-c1[1],-c1[2]} { Volume{allVolumes[] } ; } + allVolumes[] = Volume "*"; +Return + +Macro Contact_disk + c1[] = Point{point_disk_R_1}; + c2[] = Point{point_disk_R_2}; + + center[] = {(c1[0]+c2[0])/2, (c1[1]+c2[1])/2, (c1[2]+c2[2])/2}; + + R = mR * Sqrt((c1[0]-center[0])^2+(c1[1]-center[1])^2+(c1[2]-center[2])^2); + + c1[] = Point{point_surface_disk_1}; + c2[] = Point{point_surface_disk_2}; + + new_disk = newreg; + Disk(new_disk) = {(c1[0]+c2[0])/2, (c1[1]+c2[1])/2, (c1[2]+c2[2])/2, R, R}; + + Printf("c1 (%g,%g,%g)",c1[0],c1[1],c1[2]); + Printf("c2 (%g,%g,%g)",c2[0],c2[1],c2[2]); + Printf("Center (%g,%g,%g) radius %g",(c1[0]+c2[0])/2, (c1[1]+c2[1])/2, (c1[2]+c2[2])/2, R) ; + + BooleanFragments{ Surface{new_disk}; Delete; }{ Volume{volume_id}; Delete; } +Return + +Macro Add_Optical_Axis + If(usePointID) + p1[] = Point{point_mirror_x}; + p2[] = Point{point_mirror_y}; + Printf("Add_Optical_Axis p1 (%g,%g,%g)",p1[0],p1[1],p1[2]); + Printf("Add_Optical_Axis p2 (%g,%g,%g)",p2[0],p2[1],p2[2]); + EndIf + + Printf("Add_Optical_Axis OA (%g,%g,%g)",p1[0]+Delta_x,p2[1]+Delta_y,p1[2]); + + Call Compute_next_avaible_point_id; + OA = next_avaible_point_id; + Point(OA) = {p1[0]+Delta_x, p2[1]+Delta_y, p1[2], 1}; + new_disk = newreg; + Disk(new_disk) = {p1[0]+Delta_x, p2[1]+Delta_y, p1[2], R, R}; + + BooleanFragments{ Point{OA}; Surface{new_disk}; Delete; }{ Volume{Mirror_id}; Delete; } + BooleanFragments{ Point{OA}; Delete; }{ Volume{Mirror_id}; Delete; } +Return + +SetFactory("OpenCASCADE"); + +rerun = 0; + +If(!FileExists("contact_mirror_assembly_mm.brep") || rerun) + v() = ShapeFromFile("mirror_assembly.stp"); + + For k In {20:23:1} + Recursive Delete { Volume{k}; } + EndFor + + For k In {27:62:1} + Recursive Delete { Volume{k}; } + EndFor + + volumes1[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,24,25,26}; + BooleanFragments{ Volume{volumes1[] }; Delete; }{} + + volumes2[] = {16,19}; + BooleanFragments{ Volume{volumes2[] }; Delete; }{} + + usePointID = 0; + + // Realign the axis + + If(usePointID) + point_OX_1 = 835; + point_OX_2 = 834; + + point_OY_1 = 938; + point_OY_2 = 940; + Else + c1[] = {6492.32979087,-145.832273844,4445.62173365}; + c2[] = {6411.66078991,-103.544497493,4385.74472425}; + + c3[] = {-7270.05243185,1092.57096931,2726.17090744}; + c4[] = {-7270.05243185,1128.49789026,2747.92536333}; + EndIf + + Call Rotate_Axis; + + If(usePointID) + point_OO = 938; + Else + c1[] = {-7294.05,2346.64,1780.06}; + EndIf + + Call Translate_Axis; + + Recursive Delete { Volume{3,17,18}; } + + mR = 1.25; + point_disk_R_1 = 4848; + point_disk_R_2 = 4849; + point_surface_disk_1 = 4760; + point_surface_disk_2 = 4758; + volume_id = 19; + Call Contact_disk; + + mR = 1.25; + point_disk_R_1 = 4815; + point_disk_R_2 = 4814; + point_surface_disk_1 = 4916; + point_surface_disk_2 = 4914; + volume_id = 19; + Call Contact_disk; + + mR = 1.25; + point_disk_R_1 = 4780; + point_disk_R_2 = 4781; + point_surface_disk_1 = 4924; + point_surface_disk_2 = 4925; + volume_id = 19; + Call Contact_disk; + + mR = 1.; + point_disk_R_1 = 4848; + point_disk_R_2 = 4849; + point_surface_disk_1 = 4332; + point_surface_disk_2 = 4330; + volume_id = 16; + Call Contact_disk; + + mR = 1.; + point_disk_R_1 = 4848; + point_disk_R_2 = 4849; + point_surface_disk_1 = 4975; + point_surface_disk_2 = 4974; + volume_id = 16; + Call Contact_disk; + + mR = 1.; + point_disk_R_1 = 4246; + point_disk_R_2 = 4245; + point_surface_disk_1 = 4968; + point_surface_disk_2 = 4967; + volume_id = 16; + Call Contact_disk; + + Save "contact_mirror_assembly_mm.brep"; + Call Clear_all; +EndIf + +Merge "contact_mirror_assembly_mm.brep"; + +Physical Volume("Mirror") = {2}; +Physical Volume("Substrate") = {1}; +Physical Volume("Washer 1") = {5}; +Physical Volume("Washer 2") = {4}; +Physical Volume("Washer 3") = {3}; + +Physical Volume("Shaft 1") = {8}; +Physical Volume("Shaft 2") = {7}; +Physical Volume("Shaft 3") = {6}; + +Physical Volume("Spacer 1 part 1") = {12}; +Physical Volume("Spacer 2 part 1") = {11}; +Physical Volume("Spacer 3 part 1") = {9}; + +Physical Volume("Spacer 1 part 2") = {14}; +Physical Volume("Spacer 2 part 2") = {13}; +Physical Volume("Spacer 3 part 2") = {10}; + +Physical Volume("Holder") = {15,16}; + +Physical Volume("Nut 1") = {18}; +Physical Volume("Nut 2") = {19}; +Physical Volume("Nut 3") = {17}; + +Physical Surface("Mirror surface") = {113}; + +Physical Surface("Cooling channels") = {508, 509, 525, 527, 523, 522, 498, 499, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 521, 520, 500, 501, 502, 503, 504, 505, 506, 507, 526, 600, 620, 621, 598, 599}; + +Physical Surface("Holder z clamping") = {563, 564, 574, 573, 546, 545}; +Physical Surface("Holder x-y clamping") = {548, 547, 570, 569, 555, 554}; + +Physical Surface("Holder to nut 1") = {644}; +Physical Surface("Holder to nut 2") = {645}; +Physical Surface("Holder to nut 3") = {643}; + +Physical Surface("Holder to spacer 1") = {372}; +Physical Surface("Holder to spacer 2") = {371}; +Physical Surface("Holder to spacer 3") = {363}; + +Physical Surface("Nut 1 to holder") = {680}; +Physical Surface("Nut 2 to holder") = {711}; +Physical Surface("Nut 3 to holder") = {649}; + +Physical Surface("Spacer 1 to holder") = {352}; +Physical Surface("Spacer 2 to holder") = {342}; +Physical Surface("Spacer 3 to holder") = {302}; + +Physical Point("Holder x-y-z clamping point") = {765}; +Physical Point("Holder z clamping point") = {743}; +Physical Point("Holder z-y clamping point") = {736}; + +Physical Point("Optical Axis") = {958}; + +Mesh.Algorithm = 6; +//Mesh.Algorithm3D = 4; +Mesh.CharacteristicLengthMin = 1.; +Mesh.CharacteristicLengthMax = 1.; +Mesh.MshFileVersion = 2.2; diff --git a/katoptron/Juelich/mesh/fused_mirror_assembly_all_mm.brep b/katoptron/Juelich/mesh/fused_mirror_assembly_all_mm.brep new file mode 100644 index 0000000000000000000000000000000000000000..feb33edf53b5e046f367f93dcb0e80fa59fd7ad9 --- /dev/null +++ b/katoptron/Juelich/mesh/fused_mirror_assembly_all_mm.brep @@ -0,0 +1,61829 @@ +DBRep_DrawableShape + +CASCADE Topology V1, (c) Matra-Datavision +Locations 457 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 10.4947449441 +1 +-0.740082577630804 -0.047330239837727 0.670848437938293 6446.85967694 +0.38796125092507 0.784756214763919 0.483367097732211 -116.15699979 +-0.549330361502074 0.617994766795245 -0.562422103180246 4458.66396847 +1 +-0.740075641405228 0.387874260635018 -0.54940113117419 0 +-0.387874260635018 0.421191446324924 0.819848353953069 0 +0.54940113117419 0.819848353953069 -0.161267087730152 0 +1 + 1 0 0 0 + 0 0.855469546549163 0.517853120997614 0 + 0 -0.517853120997614 0.855469546549163 0 +1 + 1 0 0 7294.05 + 0 1 0 -2346.64 + 0 0 1 -1780.06 +1 +0.886277317480284 -0.463154959511341 0 0 +0.463154959511341 0.886277317480284 0 0 + 0 0 1 0 +2 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 13 +2 10 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 50.5 + 0 1 0 5.5 + 0 0 1 -15.4 +2 12 1 3 1 4 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 50.5 + 0 1 0 5.5 + 0 0 1 -17 +2 14 1 3 1 4 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 50.5 + 0 -1 0 5.5 + 0 0 -1 8 +2 16 1 3 1 4 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 50.5 + 0 1 0 5.5 + 0 0 1 -18.5 +2 18 1 3 1 4 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 -22.5 + 0 1 0 -12.5 + 0 0 1 -15.4 +2 20 1 3 1 4 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 -22.5 + 0 1 0 -12.5 + 0 0 1 -17 +2 22 1 3 1 4 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 -22.5 + 0 -1 0 -12.5 + 0 0 -1 7 +2 24 1 3 1 4 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 -22.5 + 0 1 0 -12.5 + 0 0 1 -18.5 +2 26 1 3 1 4 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 -22.5 + 0 1 0 29.5 + 0 0 1 -15.4 +2 28 1 3 1 4 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 -22.5 + 0 1 0 29.5 + 0 0 1 -17 +2 30 1 3 1 4 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 -22.5 + 0 -1 0 29.5 + 0 0 -1 7 +2 32 1 3 1 4 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 -22.5 + 0 1 0 29.5 + 0 0 1 -18.5 +2 34 1 3 1 4 1 5 1 6 1 7 1 8 1 0 +1 + -1 -5.56237522861912e-66 3.08148802856e-33 50.5 +-9.49556810794e-66 1 -1.27639401577e-33 5.5 +-3.08148802856e-33 -1.27639401577e-33 -1 -28.5052550559 +2 36 1 4 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 -22.5 + 0 -1 3.08148791102e-33 -12.5 + 0 -3.08148791102e-33 -1 -28.5052550559 +2 38 1 4 1 5 1 6 1 7 1 8 1 0 +1 + -1 3.79822709830744e-65 6.16297582204e-33 -22.5 +-1.89911354915e-65 1 -9.24446373306e-33 29.5 +-6.16297582204e-33 -9.24446373306e-33 -1 -28.5052550559 +2 40 1 4 1 5 1 6 1 7 1 8 1 0 +2 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 0 +1 + 1 -5.55111512313e-17 1.04404871488e-53 17.5 +5.55111512313e-17 1 -1.38662719945e-54 9.5 +-1.04404871488e-53 1.38662719945e-54 1 -28.5052550559 +2 43 1 44 1 4 1 5 1 6 1 7 1 8 1 0 +1 +0.999999913696768 0.000315133472056269 0.000270734835165951 -1.14214813459 +-0.000315031700696927 0.999999879739007 -0.000375868326174932 3.68071630936 +-0.000270853251297775 0.000375783003680721 0.99999989271282 1.80101183655 +1 + 1 0 0 1.19565281157 + 0 1 0 -7.20697748792 + 0 0 1 -4.76779620793 +2 46 1 47 1 5 1 6 1 7 1 8 1 0 +1 +0.999999913696768 0.000315133472056265 0.000270734835161951 -1.18045192932 +-0.000315031700696927 0.999999879739007 -0.000375868326168932 3.7570430575 +-0.000270853251293773 0.000375783003674722 0.99999989271282 1.82092178995 +1 + 1 0 0 11.0779403664 + 0 1 0 -5.80720548342 + 0 0 1 8.22266213179 +2 49 1 50 1 5 1 6 1 7 1 8 1 0 +1 +-0.670848437938303 -0.732717136397346 0.114402671933012 6403.3637791 +-0.483367097732141 0.315026477751899 -0.816770816781084 -31.75061357 +0.562422103180294 -0.603227914096244 -0.565506376188058 4498.00340721 +1 + 1 0 0 -1.99064108529 + 0 1 0 14.0215784743 + 0 0 1 9.67627552227 +2 52 1 53 1 5 1 6 1 7 1 8 1 0 +1 +0.713256901880978 -0.203044244525428 -0.670848437938293 6409.36194782 +-0.212902630679892 0.849134099350344 -0.483367097732211 -44.5028045435 +0.667785191336803 0.487590315824236 0.562422103180246 4484.41907726 +2 55 1 53 1 5 1 6 1 7 1 8 1 0 +1 +0.713256901920233 -0.203044244488961 -0.670848437907593 6520.35206096 +-0.21290263065184 0.84913409937645 -0.483367097698707 -144.703594641 +0.667785191303818 0.487590315793958 0.562422103245659 4530.68997999 +2 57 1 50 1 5 1 6 1 7 1 8 1 0 +1 +-0.670848437938471 0.398581843105336 -0.625375797151015 6425.02745585 +-0.48336709773199 0.404534231927341 0.776342903638018 -176.369329414 +0.562422103180223 0.823094508270897 -0.0787198088706018 4399.5526441 +2 59 1 47 1 5 1 6 1 7 1 8 1 0 +1 +0.713256901880978 -0.203044244525428 -0.670848437938293 6426.56654732 +-0.212902630679892 0.849134099350344 -0.483367097732211 -159.354365284 +0.667785191336803 0.487590315824236 0.562422103180246 4406.23262862 +2 61 1 47 1 5 1 6 1 7 1 8 1 0 +1 +-0.670848437938383 -0.0544781402091593 -0.739590768976319 6530.19221243 +-0.483367097732165 0.788467773135183 0.380361432794164 -153.014525881 +0.562422103180179 0.612658716551554 -0.55527531449524 4545.06356165 +2 63 1 50 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 0 +2 65 1 44 1 4 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 -65 + 0 -1 0 16 + 0 0 -1 0 +2 67 1 44 1 4 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 -65 + 0 -1 0 -18 + 0 0 -1 0 +2 69 1 44 1 4 1 5 1 6 1 7 1 8 1 0 +1 +-0.740082577630804 -0.047330239837727 0.670848437938293 6453.90006019 +0.38796125092507 0.784756214763919 0.483367097732211 -111.084185385 +-0.549330361502074 0.617994766795245 -0.562422103180246 4452.76149195 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 0 +2 71 1 72 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 0 +2 74 1 47 1 5 1 6 1 7 1 8 1 0 +1 + 1 -4.26572666077135e-12 -3.66623398307e-12 -110.990112834 +4.26572666079e-12 1 5.08817987743e-12 100.200790231 +3.6662339830483e-12 -5.08817987744564e-12 1 -46.270903154 +2 76 1 53 1 5 1 6 1 7 1 8 1 0 +1 + 1 -3.38490346861825e-12 -2.90917290258e-12 1.26370315459e-08 +3.38490346863e-12 1 4.03743705135e-12 -4.03035775583e-08 +2.90917290256633e-12 -4.03743705135985e-12 1 -1.95635602014e-08 +2 78 1 50 1 5 1 6 1 7 1 8 1 0 +1 +-0.740082577630804 -0.047330239837727 0.670848437938293 6453.90006019 +0.38796125092507 0.784756214763919 0.483367097732211 -111.084185385 +-0.549330361502074 0.617994766795245 -0.562422103180246 4452.76149195 +2 80 1 72 1 5 1 6 1 7 1 8 1 0 +1 +-0.740082577630804 0.047330239837727 -0.670848437938293 6546.10316882 +0.38796125092507 -0.784756214763919 -0.483367097732211 -190.059462172 +-0.549330361502074 -0.617994766795245 0.562422103180246 4464.63915647 +2 82 1 72 1 5 1 6 1 7 1 8 1 0 +1 +-0.740082577630804 0.047330239837727 -0.670848437938293 6539.844619 +0.38796125092507 -0.784756214763919 -0.483367097732211 -84.3302366273 +-0.549330361502074 -0.617994766795245 0.562422103180246 4548.04180061 +2 84 1 72 1 5 1 6 1 7 1 8 1 0 +1 +-0.740082577630804 0.047330239837727 -0.670848437938293 6571.4743708 +0.38796125092507 -0.784756214763919 -0.483367097732211 -189.300320104 +-0.549330361502074 -0.617994766795245 0.562422103180246 4495.5539719 +2 86 1 72 1 5 1 6 1 7 1 8 1 0 +1 +-0.740082577630804 0.047330239837727 -0.670848437938293 6520.73196684 +0.38796125092507 -0.784756214763919 -0.483367097732211 -190.81860424 +-0.549330361502074 -0.617994766795245 0.562422103180246 4433.72434103 +2 88 1 72 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 50.5 + 0 -1 -2.11667706868e-53 5.5 + 0 2.11667706868e-53 -1 -28.5052550559 +2 90 1 4 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 -0.006 +2 46 1 47 1 5 1 6 1 7 1 92 1 8 1 0 +1 +0.999999693372113 -0.000593723759821912 -0.000510634681415982 2.15733328636 +0.000594085344623067 0.999999572723137 0.000708248647433975 -6.93870538964 +0.000510213959183754 -0.000708551790845874 0.999999618817965 -3.39015520657 +2 94 1 47 1 5 1 6 1 7 1 8 1 0 +1 +0.398464254761519 -0.625450726271142 -0.670848437938293 6446.35657624 +0.404680190462615 0.776266830591827 -0.483367097732211 -145.095035903 +0.823079693058022 -0.0788745632623123 0.562422103180246 4389.64117657 +2 96 1 47 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 -6.25 +2 61 1 47 1 5 1 6 1 7 1 98 1 8 1 0 +1 +0.711961559063816 -0.207540626700347 -0.670848437938293 6461.78609031 +-0.207540626700232 0.85046054411643 -0.483367097732211 -133.977592652 +0.670848437938329 0.483367097732162 0.562422103180246 4376.7054682 +2 100 1 47 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 -0.07 +2 102 1 8 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 2 +2 104 1 8 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 -0.006 +2 106 1 8 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 -6.25 +2 55 1 53 1 5 1 6 1 7 1 108 1 8 1 0 +1 +0.711961559063816 -0.207540626700347 -0.670848437938293 6444.58149081 +-0.207540626700232 0.85046054411643 -0.483367097732211 -19.1260319119 +0.670848437938329 0.483367097732162 0.562422103180246 4454.89191684 +2 110 1 53 1 5 1 6 1 7 1 8 1 0 +1 +-0.55919290347094 -0.829037572554911 0 -65 +-0.829037572554911 0.55919290347094 0 16 + -0 0 -1 -12 +2 112 1 44 1 4 1 5 1 6 1 7 1 8 1 0 +1 +0.743144825477147 -0.669130606359133 0 -65 +-0.669130606359133 -0.743144825477147 0 -18 + 0 -0 -1 -12 +2 114 1 44 1 4 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 -0.006 +2 49 1 50 1 5 1 6 1 7 1 116 1 8 1 0 +1 +0.999999710036219 -0.00057736988490791 -0.000496559658228909 2.16810103639 +0.000577711818895127 0.999999595944075 0.000688738514635874 -6.88740360429 +0.00049616180071411 -0.000689025183309996 0.999999639533817 -3.33322088033 +2 118 1 50 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 -6.25 +2 57 1 50 1 5 1 6 1 7 1 120 1 8 1 0 +1 +0.711961559063816 -0.207540626700347 -0.670848437938293 6555.57160367 +-0.207540626700232 0.85046054411643 -0.483367097732211 -119.326822188 +0.670848437938329 0.483367097732162 0.562422103180246 4501.16281997 +2 122 1 50 1 5 1 6 1 7 1 8 1 0 +1 + 1 0 0 11.0410958904 + 0 -1 0 8.5 + 0 0 -1 5 +2 124 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 0 +2 10 1 1 -1 0 +2 4 -1 3 -1 2 -1 1 -1 0 +2 1 1 124 -1 0 +2 16 1 2 -1 1 -1 0 +2 1 1 2 1 16 -1 0 +2 4 -1 3 -1 16 -1 0 +2 32 1 2 -1 1 -1 0 +2 1 1 2 1 32 -1 0 +2 4 -1 3 -1 32 -1 0 +2 24 1 2 -1 1 -1 0 +2 1 1 2 1 24 -1 0 +2 4 -1 3 -1 24 -1 0 +2 1 1 2 1 22 -1 0 +2 1 1 2 1 30 -1 0 +2 1 1 2 1 14 -1 0 +2 4 -1 3 -1 2 -1 10 -1 0 +2 18 1 12 -1 0 +2 14 1 12 -1 0 +2 12 1 14 -1 0 +2 12 1 16 -1 0 +2 16 1 12 -1 0 +2 7 -1 6 -1 5 -1 4 -1 3 -1 12 -1 0 +2 12 1 18 -1 0 +2 7 -1 6 -1 5 -1 4 -1 3 -1 16 -1 0 +2 26 1 20 -1 0 +2 34 1 28 -1 0 +2 22 1 20 -1 0 +2 30 1 28 -1 0 +2 20 1 22 -1 0 +2 28 1 30 -1 0 +2 20 1 24 -1 0 +2 28 1 32 -1 0 +2 24 1 20 -1 0 +2 32 1 28 -1 0 +2 7 -1 6 -1 5 -1 4 -1 3 -1 20 -1 0 +2 20 1 26 -1 0 +2 28 1 34 -1 0 +2 7 -1 6 -1 5 -1 4 -1 3 -1 24 -1 0 +2 7 -1 6 -1 5 -1 4 -1 3 -1 28 -1 0 +2 7 -1 6 -1 5 -1 4 -1 3 -1 32 -1 0 +2 14 1 16 -1 0 +2 16 1 14 -1 0 +2 7 -1 6 -1 5 -1 4 -1 3 -1 14 -1 0 +2 36 1 3 -1 16 -1 0 +2 16 1 3 1 36 -1 0 +2 38 1 3 -1 24 -1 0 +2 24 1 3 1 38 -1 0 +2 32 1 3 1 40 -1 0 +2 22 1 24 -1 0 +2 24 1 22 -1 0 +2 7 -1 6 -1 5 -1 4 -1 3 -1 22 -1 0 +2 30 1 32 -1 0 +2 40 1 3 -1 32 -1 0 +2 32 1 30 -1 0 +2 7 -1 6 -1 5 -1 4 -1 3 -1 30 -1 0 +2 18 1 14 -1 0 +2 4 -1 3 -1 14 -1 0 +2 14 1 18 -1 0 +2 4 -1 3 -1 18 -1 0 +2 43 1 44 1 3 -1 18 -1 0 +2 7 -1 6 -1 5 -1 4 -1 3 -1 18 -1 0 +2 26 1 22 -1 0 +2 4 -1 3 -1 22 -1 0 +2 34 1 30 -1 0 +2 22 1 26 -1 0 +2 4 -1 3 -1 26 -1 0 +2 4 -1 3 -1 30 -1 0 +2 30 1 34 -1 0 +2 4 -1 3 -1 34 -1 0 +2 43 1 44 1 3 -1 26 -1 0 +2 43 1 44 1 3 -1 34 -1 0 +2 26 1 3 1 44 -1 43 -1 0 +2 34 1 3 1 44 -1 43 -1 0 +2 7 -1 6 -1 5 -1 4 -1 44 -1 43 -1 0 +2 65 1 43 -1 0 +2 46 1 47 1 4 -1 44 -1 43 -1 0 +2 49 1 50 1 4 -1 44 -1 43 -1 0 +1 + 1 2.32615792947056e-13 1.99427280245e-13 2.73021782959e-09 +-2.32615792947e-13 1 -2.82419920783e-13 5.50936363197e-09 +-1.99427280245066e-13 2.82419920782954e-13 1 -1.85693238564e-09 +2 203 1 53 1 5 1 6 1 7 1 8 1 0 +2 7 -1 6 -1 5 -1 53 -1 203 -1 0 +2 104 -1 7 -1 6 -1 5 -1 53 -1 203 -1 0 +2 102 -1 7 -1 6 -1 5 -1 53 -1 203 -1 0 +2 43 1 44 1 4 1 53 -1 203 -1 0 +2 52 1 53 1 4 -1 44 -1 43 -1 0 +2 110 1 53 1 4 -1 44 -1 43 -1 0 +2 100 1 47 1 4 -1 44 -1 43 -1 0 +2 94 1 47 1 4 -1 44 -1 43 -1 0 +2 59 1 47 1 4 -1 44 -1 43 -1 0 +2 43 1 44 1 4 1 47 -1 46 -1 0 +2 7 -1 6 -1 5 -1 47 -1 46 -1 0 +2 122 1 50 1 4 -1 44 -1 43 -1 0 +2 118 1 50 1 4 -1 44 -1 43 -1 0 +2 63 1 50 1 4 -1 44 -1 43 -1 0 +2 43 1 44 1 4 1 50 -1 49 -1 0 +2 7 -1 6 -1 5 -1 50 -1 49 -1 0 +2 43 1 44 1 4 1 47 -1 59 -1 0 +2 43 1 44 1 4 1 53 -1 52 -1 0 +2 43 1 44 1 4 1 50 -1 63 -1 0 +2 7 -1 6 -1 5 -1 47 -1 61 -1 0 +2 98 -1 7 -1 6 -1 5 -1 47 -1 61 -1 0 +2 7 -1 6 -1 5 -1 53 -1 55 -1 0 +2 108 -1 7 -1 6 -1 5 -1 53 -1 55 -1 0 +2 7 -1 6 -1 5 -1 50 -1 57 -1 0 +2 120 -1 7 -1 6 -1 5 -1 50 -1 57 -1 0 +2 43 1 44 1 4 1 47 -1 61 -1 0 +2 43 1 44 1 4 1 53 -1 55 -1 0 +2 43 1 44 1 4 1 50 -1 57 -1 0 +2 4 -1 44 -1 65 -1 0 +2 7 -1 6 -1 5 -1 4 -1 44 -1 65 -1 0 +2 67 1 65 -1 0 +2 69 1 65 -1 0 +2 65 1 44 1 4 1 0 +2 69 1 44 1 4 1 0 +2 7 -1 6 -1 5 -1 0 +2 65 1 44 1 40 -1 0 +2 65 1 44 1 38 -1 0 +2 67 1 44 1 4 1 0 +2 65 1 44 1 36 -1 0 +1 +-0.0999247466314219 0.648532124928844 -0.754599978760882 10598.7937811783 +0.648532124928844 -0.532712497659915 -0.543712679429322 -1931.63250958592 +-0.754599978760883 -0.543712679429322 -0.367362755708663 10981.9593098583 +2 244 1 5 1 6 1 7 1 8 1 0 +1 +-0.0999247466314219 0.648532124928844 -0.754599978760883 10598.7937811783 +0.648532124928844 -0.532712497659915 -0.543712679429322 -1931.63250958592 +-0.754599978760882 -0.543712679429322 -0.367362755708663 10981.9593098583 +2 246 -1 0 +2 244 -1 0 +2 65 1 44 1 4 1 244 -1 0 +2 7 -1 6 -1 5 -1 244 -1 0 +1 +-0.0999247466314228 0.648532124928845 -0.754599978760881 10602.0122374873 +0.648532124928845 -0.532712497659913 -0.543712679429323 -1984.99593218987 +-0.754599978760882 -0.543712679429323 -0.367362755708664 10939.9356657163 +2 251 1 5 1 6 1 7 1 8 1 0 +1 +-0.0999247466314228 0.648532124928845 -0.754599978760882 10602.0122374873 +0.648532124928845 -0.532712497659913 -0.543712679429323 -1984.99593218987 +-0.754599978760881 -0.543712679429323 -0.367362755708664 10939.9356657163 +2 253 -1 0 +2 251 -1 0 +2 65 1 44 1 4 1 251 -1 0 +2 7 -1 6 -1 5 -1 251 -1 0 +2 7 -1 6 -1 5 -1 72 -1 71 -1 0 +2 80 1 71 -1 0 +2 74 1 47 1 72 -1 71 -1 0 +2 71 1 72 1 47 -1 74 -1 0 +2 7 -1 6 -1 5 -1 47 -1 74 -1 0 +2 76 1 53 1 72 -1 71 -1 0 +2 71 1 72 1 53 -1 76 -1 0 +2 7 -1 6 -1 5 -1 53 -1 76 -1 0 +2 71 1 72 1 50 -1 78 -1 0 +2 78 1 50 1 72 -1 71 -1 0 +2 7 -1 6 -1 5 -1 50 -1 78 -1 0 +2 71 1 80 -1 0 +2 72 -1 80 -1 0 +2 82 1 80 -1 0 +2 7 -1 6 -1 5 -1 72 -1 80 -1 0 +2 84 1 80 -1 0 +2 86 1 80 -1 0 +2 88 1 80 -1 0 +2 78 1 50 1 72 -1 80 -1 0 +2 80 1 72 1 50 -1 78 -1 0 +2 76 1 53 1 72 -1 80 -1 0 +2 80 1 72 1 53 -1 76 -1 0 +2 74 1 47 1 72 -1 80 -1 0 +2 80 1 72 1 47 -1 74 -1 0 +2 80 1 72 1 0 +2 84 1 72 1 0 +2 88 1 72 1 0 +2 82 1 72 1 0 +2 86 1 72 1 0 +1 +-0.0999247466315329 0.648532124928836 -0.754599978760875 10692.4971489007 +0.648532124928836 -0.53271249765987 -0.543712679429377 -2109.18379259814 +-0.754599978760875 -0.543712679429377 -0.367362755708598 10941.132872965 +2 287 1 5 1 6 1 7 1 8 1 0 +1 +-0.0999247466315329 0.648532124928836 -0.754599978760875 10692.4971489007 +0.648532124928836 -0.53271249765987 -0.543712679429377 -2109.18379259814 +-0.754599978760875 -0.543712679429377 -0.367362755708598 10941.132872965 +2 289 -1 0 +2 287 -1 0 +2 80 1 72 1 287 -1 0 +2 7 -1 6 -1 5 -1 287 -1 0 +1 +-0.0999247466314219 0.648532124928844 -0.754599978760883 10679.980049262 +0.648532124928844 -0.532712497659915 -0.543712679429322 -1897.7253415076 +-0.754599978760882 -0.543712679429322 -0.367362755708663 11107.9381612436 +2 294 -1 0 +1 +-0.0999247466314219 0.648532124928844 -0.754599978760882 10679.980049262 +0.648532124928844 -0.532712497659915 -0.543712679429322 -1897.72534150759 +-0.754599978760883 -0.543712679429322 -0.367362755708663 11107.9381612436 +2 296 -1 0 +2 296 1 5 1 6 1 7 1 8 1 0 +2 80 1 72 1 296 -1 0 +2 7 -1 6 -1 5 -1 296 -1 0 +1 +-0.0999247466315329 0.648532124928836 -0.754599978760875 10743.2395528587 +0.648532124928836 -0.53271249765987 -0.543712679429377 -2107.66550846359 +-0.754599978760875 -0.543712679429377 -0.367362755708598 11002.9625038266 +2 301 1 5 1 6 1 7 1 8 1 0 +1 +-0.0999247466315329 0.648532124928836 -0.754599978760875 10743.2395528587 +0.648532124928836 -0.53271249765987 -0.543712679429377 -2107.6655084636 +-0.754599978760875 -0.543712679429377 -0.367362755708598 11002.9625038266 +2 303 -1 0 +2 301 -1 0 +2 80 1 72 1 301 -1 0 +2 7 -1 6 -1 5 -1 301 -1 0 +1 +-0.0999247466315329 0.648532124928836 -0.754599978760875 10641.7547449352 +0.648532124928836 -0.53271249765987 -0.543712679429377 -2110.70207673812 +-0.754599978760875 -0.543712679429377 -0.367362755708598 10879.3032420896 +2 308 1 5 1 6 1 7 1 8 1 0 +1 +-0.0999247466315329 0.648532124928836 -0.754599978760875 10641.7547449352 +0.648532124928836 -0.53271249765987 -0.543712679429377 -2110.70207673812 +-0.754599978760875 -0.543712679429377 -0.367362755708598 10879.3032420896 +2 310 -1 0 +2 308 -1 0 +2 80 1 72 1 308 -1 0 +2 7 -1 6 -1 5 -1 308 -1 0 +2 36 1 4 1 0 +2 90 1 4 1 0 +2 4 -1 36 -1 0 +2 4 -1 90 -1 0 +2 46 1 47 1 5 1 6 1 7 1 92 1 7 -1 6 -1 5 -1 47 -1 46 -1 0 +2 92 -1 7 -1 6 -1 5 -1 47 -1 46 -1 0 +2 46 1 47 1 5 1 6 1 7 1 92 -1 7 -1 6 -1 5 -1 47 -1 46 -1 0 +2 59 1 47 1 5 1 6 1 7 1 0 +2 7 -1 6 -1 5 -1 47 -1 59 -1 0 +2 94 1 46 -1 0 +2 46 1 94 -1 0 +2 7 -1 6 -1 5 -1 47 -1 94 -1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 2 +2 327 -1 7 -1 6 -1 5 -1 47 -1 94 -1 0 +2 100 1 47 1 5 1 6 1 7 1 0 +2 94 1 47 1 5 1 6 1 7 1 0 +2 43 1 44 1 4 1 47 -1 94 -1 0 +2 94 1 47 1 5 1 6 1 7 1 327 1 0 +2 7 -1 6 -1 5 -1 47 -1 100 -1 0 +2 43 1 44 1 4 1 47 -1 100 -1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 0.026 +2 335 -1 7 -1 6 -1 5 -1 47 -1 94 -1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 -0.012 +2 337 -1 7 -1 6 -1 5 -1 47 -1 94 -1 0 +2 96 1 94 -1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 5 +2 340 -1 7 -1 6 -1 5 -1 47 -1 94 -1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 -11 +2 342 -1 7 -1 6 -1 5 -1 47 -1 94 -1 0 +2 7 -1 6 -1 5 -1 47 -1 96 -1 0 +2 61 1 47 1 5 1 6 1 7 1 0 +2 61 1 47 1 5 1 6 1 7 1 98 1 0 +2 74 1 96 -1 0 +2 74 1 100 -1 0 +2 203 1 53 1 5 1 6 1 7 1 102 1 8 1 0 +1 +0.999999913696768 0.000315133472057269 0.000270734835165951 -1.19951098578 +-0.000315031700697927 0.999999879739007 -0.000375868326174932 3.70469793686 +-0.000270853251297775 0.00037578300368072 0.99999989271282 1.75320103878 +2 350 1 53 1 5 1 6 1 7 1 8 1 0 +2 7 -1 6 -1 5 -1 53 -1 350 -1 0 +2 106 -1 7 -1 6 -1 5 -1 53 -1 350 -1 0 +2 110 1 53 1 5 1 6 1 7 1 0 +2 104 1 7 -1 6 -1 5 -1 53 -1 203 -1 0 +1 +0.711961559063816 -0.207540626700347 -0.670848437938293 6429.15197674 +-0.207540626700232 0.85046054411643 -0.483367097732211 -30.2434751633 +0.670848437938329 0.483367097732162 0.562422103180246 4467.82762522 +2 356 1 53 1 5 1 6 1 7 1 0 +2 203 1 53 1 5 1 6 1 7 1 104 1 8 1 0 +2 52 1 53 1 5 1 6 1 7 1 0 +2 7 -1 6 -1 5 -1 53 -1 110 -1 0 +2 43 1 44 1 4 1 53 -1 110 -1 0 +2 356 1 53 1 5 1 6 1 7 1 8 1 0 +2 7 -1 6 -1 5 -1 53 -1 356 -1 0 +2 356 1 76 -1 0 +2 7 -1 6 -1 5 -1 53 -1 52 -1 0 +2 106 1 7 -1 6 -1 5 -1 53 -1 350 -1 0 +2 350 1 53 1 5 1 6 1 7 1 106 1 8 1 0 +2 55 1 53 1 5 1 6 1 7 1 0 +2 55 1 53 1 5 1 6 1 7 1 108 1 0 +2 7 -1 6 -1 5 -1 47 -1 61 -1 55 1 53 1 5 1 6 1 7 1 108 1 0 +2 76 1 110 -1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 20 +2 372 -1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 -5 +2 374 -1 0 +2 4 -1 44 -1 112 -1 0 +2 7 -1 6 -1 5 -1 4 -1 44 -1 112 -1 0 +2 84 1 72 1 4 -1 44 -1 112 -1 0 +2 67 1 112 -1 0 +2 4 -1 44 -1 114 -1 0 +2 7 -1 6 -1 5 -1 4 -1 44 -1 114 -1 0 +2 82 1 72 1 4 -1 44 -1 114 -1 0 +2 69 1 114 -1 0 +2 49 1 50 1 5 1 6 1 7 1 116 1 7 -1 6 -1 5 -1 50 -1 49 -1 0 +2 116 -1 7 -1 6 -1 5 -1 50 -1 49 -1 0 +2 49 1 50 1 5 1 6 1 7 1 116 -1 7 -1 6 -1 5 -1 50 -1 49 -1 0 +2 63 1 50 1 5 1 6 1 7 1 0 +2 7 -1 6 -1 5 -1 50 -1 63 -1 0 +2 118 1 49 -1 0 +2 49 1 50 1 5 1 6 1 7 1 0 +2 49 1 118 -1 0 +2 7 -1 6 -1 5 -1 50 -1 118 -1 0 +2 118 1 50 1 5 1 6 1 7 1 0 +2 122 1 50 1 5 1 6 1 7 1 0 +2 43 1 44 1 4 1 50 -1 118 -1 0 +2 7 -1 6 -1 5 -1 50 -1 122 -1 0 +2 43 1 44 1 4 1 50 -1 122 -1 0 +2 78 1 50 1 5 1 6 1 7 1 0 +2 57 1 50 1 5 1 6 1 7 1 0 +2 57 1 50 1 5 1 6 1 7 1 120 1 0 +2 7 -1 6 -1 5 -1 47 -1 61 -1 57 1 50 1 5 1 6 1 7 1 120 1 0 +2 78 1 122 -1 0 +2 80 1 72 1 5 1 6 1 7 1 0 +2 71 1 72 1 5 1 6 1 7 1 0 +2 76 1 53 1 5 1 6 1 7 1 0 +2 74 1 47 1 5 1 6 1 7 1 0 +2 5 1 6 1 7 1 0 +2 287 1 5 1 6 1 7 1 0 +2 296 1 5 1 6 1 7 1 0 +2 301 1 5 1 6 1 7 1 0 +2 308 1 5 1 6 1 7 1 0 +2 46 1 47 1 5 1 6 1 7 1 0 +2 46 1 47 1 5 1 6 1 7 1 92 1 0 +2 43 1 44 1 4 1 5 1 6 1 7 1 0 +2 96 1 47 1 5 1 6 1 7 1 0 +2 203 1 53 1 5 1 6 1 7 1 0 +2 203 1 53 1 5 1 6 1 7 1 102 1 0 +2 350 1 53 1 5 1 6 1 7 1 0 +2 203 1 53 1 5 1 6 1 7 1 104 1 0 +2 350 1 53 1 5 1 6 1 7 1 106 1 0 +2 112 1 44 1 4 1 5 1 6 1 7 1 0 +2 244 1 5 1 6 1 7 1 0 +2 65 1 44 1 4 1 5 1 6 1 7 1 0 +2 114 1 44 1 4 1 5 1 6 1 7 1 0 +2 251 1 5 1 6 1 7 1 0 +2 49 1 50 1 5 1 6 1 7 1 116 1 0 +2 1 1 2 1 3 1 4 1 0 +2 124 1 2 1 3 1 4 1 0 +2 16 1 3 1 4 1 0 +2 32 1 3 1 4 1 0 +2 24 1 3 1 4 1 0 +2 1 1 2 1 3 1 4 1 5 1 6 1 7 1 0 +2 22 1 3 1 4 1 5 1 6 1 7 1 0 +2 24 1 3 1 4 1 5 1 6 1 7 1 0 +2 30 1 3 1 4 1 5 1 6 1 7 1 0 +2 32 1 3 1 4 1 5 1 6 1 7 1 0 +2 14 1 3 1 4 1 5 1 6 1 7 1 0 +2 16 1 3 1 4 1 5 1 6 1 7 1 0 +2 10 1 2 1 3 1 4 1 0 +2 12 1 3 1 4 1 5 1 6 1 7 1 0 +2 18 1 3 1 4 1 5 1 6 1 7 1 0 +2 20 1 3 1 4 1 5 1 6 1 7 1 0 +2 26 1 3 1 4 1 5 1 6 1 7 1 0 +2 28 1 3 1 4 1 5 1 6 1 7 1 0 +2 34 1 3 1 4 1 5 1 6 1 7 1 0 +2 38 1 4 1 0 +2 40 1 4 1 0 +2 14 1 3 1 4 1 0 +2 18 1 3 1 4 1 0 +2 22 1 3 1 4 1 0 +2 26 1 3 1 4 1 0 +2 30 1 3 1 4 1 0 +2 34 1 3 1 4 1 0 +2 38 1 4 1 5 1 6 1 7 1 0 +2 40 1 4 1 5 1 6 1 7 1 0 +2 36 1 4 1 5 1 6 1 7 1 0 +2 124 1 2 1 3 1 4 1 5 1 6 1 7 1 0 +Curve2ds 5378 +1 -0.5 14.5 1 0 +2 0 0 1 0 -0 1 8 +1 -0.50000000000097955 14.5 1 0 +2 0 0 1 0 -0 1 8 +7 0 0 5 6 2 -38 -32.5 -16.199999999999999 -32.5 5.5999999999999996 -32.5 27.399999999999999 -32.5 49.200000000000003 -32.5 71 -32.5 + 0 6 109 6 +7 0 0 5 6 2 0 13 21.800000000000001 13 43.600000000000001 13 65.400000000000006 13 87.200000000000003 13 109 13 + 0 6 109 6 +7 0 0 5 6 2 0 -1.7347234759799999e-18 21.800000000000001 -1.7347234759799999e-18 43.600000000000001 -1.7347234759799999e-18 65.400000000000006 -1.7347234759799999e-18 87.200000000000003 -1.7347234759799999e-18 109 -1.7347234759799999e-18 + 0 6 109 6 +7 0 0 1 2 2 207.10225695400001 13 254.45195737099999 13 + 31.705691563799999 2 79.317202574099994 2 +7 0 0 5 9 3 71 -32.5 75.712388980399993 -32.5 80.4247779608 -31.574724587399999 84.8946105096 -29.723259324099999 92.867471954300001 -24.367471954300001 98.223259324099999 -16.3946105096 100.07472458700001 -11.9247779608 101 -7.2123889803800001 101 -2.5 + 31.705691563799999 6 55.511447068999999 3 79.317202574099994 6 +7 0 0 1 2 2 207.10225695400001 0 254.45195737099999 0 + 31.705691563799999 2 79.317202574099994 2 +7 0 0 5 6 2 101 -2.5 101 -0.5 101 1.5 101 3.5 101 5.5 101 7.5 + 0 6 10 6 +7 0 0 5 6 2 0 13.000000000000002 2 13.000000000000002 4 13.000000000000002 6 13.000000000000002 8 13.000000000000002 10 13.000000000000002 + 0 6 10 6 +7 0 0 5 6 2 0 -1.3877787807814457e-17 2 -1.387778780741056e-17 4 -1.3877787807814457e-17 6 -1.387778780741056e-17 8 -1.3877787807814457e-17 10 -1.3877787807814457e-17 + 0 6 10 6 +7 0 0 1 2 2 107.808170647 13 132.87983823900001 13 + 0 2 25.507102763500001 2 +7 0 0 5 6 2 101 7.5 101 12.4776888283 99.654424864299997 17.455903910100002 96.956647293900005 21.945748933499999 93.192846020999994 25.470943655100001 88.797802672700001 27.807817643500002 + 0 6 25.507102763500001 6 +7 0 0 1 2 2 107.808170647 0 132.87983823900001 0 + 0 2 25.507102763500001 2 +7 0 0 5 6 2 88.797802672700001 27.807817643500002 83.672569027799995 30.532952712 78.547335382900002 33.258087780499999 73.422101737999995 35.983222848899999 68.296868093100002 38.708357917400001 63.171634448200003 41.433492985900003 + 0 6 29.023430645000001 6 +7 0 0 5 6 2 -1.4210854715202004e-14 13 5.8046861290153657 13 11.609372258030717 13 17.414058386999166 13 23.218744516014524 13 29.02343064502989 13 + 0 6 29.023430645000001 6 +7 0 0 5 6 2 0 1.1587952819525071e-15 5.8046861290153728 1.1587952248770449e-15 11.609372258030731 1.1587951675947875e-15 17.414058386999173 1.1587962111865278e-15 23.218744516014524 1.1587961539042703e-15 29.023430645029897 1.1587960968288081e-15 + 0 6 29.023430645000001 6 +7 0 0 1 2 2 95.599764641600004 13 137.70278531899999 13 + 31.519741269600001 2 73.710500387699994 2 +7 0 0 5 6 2 63.171634448200003 41.433492985900003 55.7500134434 45.379638872299999 47.845323711900001 48.4193390577 39.609065293299999 50.472868920099998 31.202585726199999 51.5 22.797080048600002 51.5 + 31.519741269600001 6 73.710500387699994 6 +7 0 0 1 2 2 95.599764641600004 0 137.70278531899999 0 + 31.519741269600001 2 73.710500387699994 2 +7 0 0 5 6 2 22.797080048600002 51.5 15.8376640389 51.5 8.8782480291599999 51.5 1.9188320194399999 51.5 -5.04058399028 51.5 -12 51.5 + 0 6 34.797080048600002 6 +7 0 0 5 6 2 0 13.000000000000002 6.9594160097000017 13.000000000000002 13.918832019440002 13.000000000000002 20.878248029160002 13.000000000000002 27.83766403888 13.000000000000002 34.797080048600002 13.000000000000002 + 0 6 34.797080048600002 6 +7 0 0 5 6 2 0 2.0816681711700001e-17 6.9594160097000017 2.0816681711700001e-17 13.918832019440002 2.0816681711700001e-17 20.878248029160002 2.0816681711700001e-17 27.83766403888 2.0816681711700001e-17 34.797080048600002 2.0816681711700001e-17 + 0 6 34.797080048600002 6 +7 0 0 1 2 2 166.58674222600001 13 252.01584080399999 13 + 0 2 86.247384365800002 2 +7 0 0 5 9 3 -12 51.5 -20.4823001647 51.5 -28.9646003294 49.834504257299997 -37.0102989174 46.501866783399997 -51.361449517799997 36.861449517799997 -61.001866783399997 22.5102989174 -64.334504257299997 14.4646003294 -66 5.9823001646899998 -66 -2.5 + 0 6 43.123692182900001 3 86.247384365800002 6 +7 0 0 1 2 2 166.58674222600001 0 252.01584080399999 0 + 0 2 86.247384365800002 2 +7 0 0 5 6 2 -66 -2.5 -66 -2.8999999999999999 -66 -3.2999999999999998 -66 -3.7000000000000002 -66 -4.0999999999999996 -66 -4.5 + 0 6 2 6 +7 0 0 5 6 2 0 13 0.39999999999999991 13 0.79999999999999982 13 1.2000000000000002 13 1.5999999999999996 13 2 13 + 0 6 2 6 +7 0 0 5 6 2 0 0 0.39999999999999991 0 0.79999999999999982 0 1.2000000000000002 0 1.5999999999999996 0 2 0 + 0 6 2 6 +7 0 0 1 2 2 98.517206313800003 13 143.29775463799999 13 + 0 2 46.336855176699999 2 +7 0 0 5 6 2 -66 -4.5 -66 -13.296459430100001 -62.555579886700002 -22.101126014199998 -55.601126014199998 -29.055579886699999 -46.796459430100001 -32.5 -38 -32.5 + 0 6 46.336855176699999 6 +7 0 0 1 2 2 98.517206313800003 0 143.29775463799999 0 + 0 2 46.336855176699999 2 +1 0 6.75 1 0 +2 -22.5 -12.5 1 0 -0 1 6 +1 0 6.75 1 0 +2 -22.5 -12.5 1 0 -0 1 6 +1 0 6.75 1 0 +2 -22.5 29.5 1 0 -0 1 6 +1 0 6.75 1 0 +2 -22.5 29.5 1 0 -0 1 6 +7 0 0 1 2 2 3.1415926535897931 7.25 6.2831853071795862 7.25 + 28.274333882299999 2 56.548667764599998 2 +7 0 0 5 15 5 2.0410958904099998 8.5 2.0410958904099998 7.0862833058800003 2.3186785141900002 5.6725666117699998 2.8741180931799999 4.3316168471100003 4.4808543041200002 1.9397584137099999 6.8727127375199997 0.333022202765 8.21366250218 -0.22241737621900001 11.041095890399999 -0.77758262378099996 13.868529278600001 -0.22241737621900001 15.2094790433 0.333022202765 17.601337476699999 1.9397584137099999 19.208073687599999 4.3316168471100003 19.7635132666 5.6725666117699998 20.041095890400001 7.0862833058800003 20.041095890400001 8.5 + 28.274333882299999 6 35.342917352900002 3 42.411500823499999 3 49.480084294000001 3 56.548667764599998 6 +7 0 0 1 2 2 0 7.25 3.1415926535897931 7.25 + 0 2 28.274333882299999 2 +7 0 0 5 15 5 20.041095890400001 8.5 20.041095890400001 9.9137166941199997 19.7635132666 11.327433388199999 19.208073687599999 12.668383152900001 17.601337476699999 15.0602415863 15.2094790433 16.666977797200001 13.868529278600001 17.222417376199999 11.041095890399999 17.777582623800001 8.21366250218 17.222417376199999 6.8727127375199997 16.666977797200001 4.4808543041200002 15.0602415863 2.8741180931799999 12.668383152900001 2.3186785141900002 11.327433388199999 2.0410958904099998 9.9137166941199997 2.0410958904099998 8.5 + 0 6 7.0685834705800001 3 14.1371669412 3 21.205750411699999 3 28.274333882299999 6 +1 -2.0707963267948974 -25 1 0 +2 0 -3.5 1 0 -0 1 3.5 +2 11.041095890399999 8.5 1 0 0 -1 3.5 +1 -2.0707963267932095 -25 1 0 +2 0 -3.5 1 0 -0 1 3.5 +2 11.041095890399999 8.5 1 0 0 -1 3.5 +7 0 0 1 2 2 0 8.25 3.1415957069804188 8.25 + 30.1592894745 2 50.265501999100003 2 +7 0 0 5 15 5 -49.958904109599999 2.1000000000000001 -48.953593483399999 2.1000000000000001 -47.948282857099997 2.2973924717199998 -46.994717754100002 2.6923724964 -45.293839593599998 3.8349426061599998 -44.151272080600002 5.5358225109700001 -43.756293511700001 6.4893882170200001 -43.361511637900001 8.5000100721899994 -43.756299650899997 10.5106307219 -44.151281131399998 11.464195222000001 -45.293853837900002 13.165071638100001 -46.994735487 14.3076365544 -47.948301796099997 14.7026136675 -48.953613025000003 14.9000030696 -49.958923651299997 14.9 + 30.1592894745 6 35.185842605600001 3 40.212395736799998 3 45.2389488679 3 50.265501999100003 6 +1 -50.958904109599999 2.1000000000000001 1 0 +1 1 -6 -1 0 +7 0 0 1 2 2 0 8.25 3.1415896021149314 8.25 + 10.053116020899999 2 30.1592894745 2 +7 0 0 5 15 5 -51.958923638999998 14.9 -52.964232311700002 14.899996932300001 -53.969540381999998 14.7026021601 -54.923102628400002 14.307620762199999 -56.623975198499998 13.1650497359 -57.766538439400001 11.4641719361 -58.161515472700003 10.5106078818 -58.556295814099997 8.4999899341099994 -58.161509337299997 6.4893731911000003 -57.766529394300001 5.5358103420699996 -56.623960963199998 3.8349360287300001 -54.923084906600003 2.6923701926999999 -53.969521454899997 2.2973917045599999 -52.964212782300002 2.1000000000000001 -51.958904109599999 2.1000000000000001 + 10.053116020899999 6 15.079659384299999 3 20.106202747699999 3 25.132746111100001 3 30.1592894745 6 +1 -50.958904109599999 14.9 1 0 +1 1.0000195293999994 -6 1 0 +1 -1.5707963267948966 -2.5 1 0 +2 28.235903341899999 -16.5 -1 0 0 1 8 +1 0.79136447795974119 0 0 1 +1 3.9210245024267794 0 0 -1 +1 -1.5707963267948966 2 1 0 +2 28.235903341899999 -16.5 -1 0 0 1 8 +1 0 0 0 1 +1 3.6391134366000024 2.5 0 1 +1 15.358848356199999 -8.5 -1 0 +1 16.516168422300002 4.5 1 0 +1 15.358848356199999 -8.5 -1 0 +1 16.516168422300002 0 1 0 +1 0 0.25 0 1 +1 29.393223408130002 2.25 0 -1 +1 -1.5707963267948966 2.5 1 0 +2 2.4817933703700001 -16.5 1 0 -0 1 7.9999999999999991 +1 -1.5707963267948966 -2 1 0 +2 2.4817933703700001 -16.5 1 0 -0 1 7.9999999999999991 +1 1.4120273699608157 0 0 1 +1 6.1244163503478974 0 0 1 +1 -1.5707963267948966 -2.5 1 0 +2 -47.7802294293 -13.5 -1 0 0 1 8 +1 1.5312603361509474 0 0 1 +1 3.1811286442328592 0 0 -1 +1 -1.5707963267948966 2 1 0 +2 -47.7802294293 -13.5 -1 0 0 1 8 +1 0 0 0 1 +1 9.459673181200003 2.5 0 1 +1 -4.7123889803846897 2.5 1 0 +2 -47.7802294293 30.5 1 0 -0 1 8 +1 0 0 0 1 +1 9.459673181200003 2.5 0 -1 +1 -4.7123889803846897 -2 1 0 +2 -47.7802294293 30.5 1 0 -0 1 8 +1 1.5312603361509458 0 0 1 +1 3.102056662946727 0 0 1 +1 -3.3003616104238742 2.5 1 0 +2 2.4817933703700001 33.5 1 0 -0 1 7.9999999999999991 +1 0 0 0 1 +1 0.15876895683168851 0 0 1 +1 -3.3003616104238742 -2 1 0 +2 2.4817933703700001 33.5 1 0 -0 1 7.9999999999999991 +1 1.4120273699629484 0 0 1 +1 0 0.25 0 1 +1 19.496434590100002 25.5 -1 0 +1 19.496434590100002 25.5 -1 0 +1 -4.7123889803846897 2.5 1 0 +2 36.511075809799998 33.5 1 0 -0 1 8 +1 -4.7123889803846897 -2 1 0 +2 36.511075809799998 33.5 1 0 -0 1 8 +1 0.46333110722450693 0 0 1 +1 2.034127434018774 0 0 1 +1 -0.50000000000097955 0.40000000000000036 1 0 +1 6.7831853071805659 11.313708498984751 -1 3.392591660226698e-15 +1 4.2123889803846888 -16.399999999999267 -1 0 +1 3.1415926535895737 0 0 1 +1 3.1415926535895737 0 0 1 +1 0.57079632679509318 -15.999999999999776 0 -1 +1 -2.0707963267946776 -27.199999999999999 1 0 +1 -2.0707963267946776 11.313708498984774 1 -3.3925916602279878e-15 +1 5.7831853071795853 11.200000000000344 -1 0 +1 3.1415926535907723 7.0949999999699997 0 1 +1 3.1415926535907723 7.0949999999699997 0 1 +1 0.57079632679396097 -23.094999999969858 0 -1 +1 -2.0707963267948974 -27.199999999999999 1 0 +1 -4.1651914291880141 11.313708498984795 1 -5.0888874903416267e-15 +1 5.7831853071795853 11.200000000000344 -1 0 +1 0 7.0949999999699997 0 1 +1 6.2831853071795862 7.0949999999699997 0 1 +1 4.2123889803846879 -16.399999999999267 -1 0 +1 3.7123889803836554 -23.094999999969225 0 -1 +1 -0.5 0.40000000000000036 1 0 +1 8.8775804095727082 11.313708498984756 -1 1.1308638867425798e-15 +1 10.495574287564274 -16.399999999999267 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.712388980384862 -15.999999999999716 0 -1 +1 12.066370614359172 11.200000000000344 -1 0 +1 5.7831853071795853 11.200000000000344 -1 0 +1 4.2123889803846888 -16.399999999999267 -1 0 +1 11.495574287563574 11.879393923933971 -1 3.3925916602285139e-15 +2 50.5 5.5 0 1 -1 0 8.4000000000000004 +2 0 -8 0 -1 -1 -0 8.4000000000000004 +1 3.1415926535902132 11.596551211457212 -1.7271017044604624e-14 1 +1 5.2359877559833317 11.596551211457205 -1.570092458600425e-14 1 +1 6.2831853071795862 11.596551211457202 0 1 +1 2.0943951023935279 11.596551211457209 -1.5700924586004351e-14 1 +1 7.3067840827778126 11.879393923933931 -1 1.8093822187881277e-14 +2 50.5 5.5 0 1 -1 0 8.4000000000000004 +2 0 -8 0 -1 -1 -0 8.4000000000000004 +1 0 -6.3499999999999996 1 0 +1 6.2831853071795862 8.4852813742385713 -1 0 +1 4.2123889803846888 -16.400000000000389 -1 0 +1 3.1415926535906706 0 0 1 +1 3.1415926535906706 0 0 1 +1 1.0707963267941221 -22.749999999999936 0 -1 +1 -2.0707963267957745 -26.199999999999999 1 0 +1 -2.0707963267957741 8.4852813742385802 1 -2.8271597168556695e-15 +1 6.2831853071795862 3.449999999999886 -1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 1.0707963267948248 -22.750000000000494 0 -1 +1 -2.0707963267948983 -26.199999999999999 1 0 +1 -4.1651914291880141 8.4852813742385624 1 1.1308638867425838e-15 +1 6.2831853071795862 3.449999999999886 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 4.2123889803846888 -16.400000000000389 -1 0 +1 4.2123889803847527 -22.750000000000469 0 -1 +1 0 -6.3499999999999996 1 0 +1 8.3775804095730013 8.4852813742385642 -1 1.696295830113876e-15 +1 10.495574287564274 -16.400000000000389 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 4.2123889803836843 -22.750000000000409 0 -1 +1 12.566370614359172 3.449999999999886 -1 0 +1 6.2831853071795862 3.449999999999886 -1 0 +1 4.2123889803846888 -16.400000000000389 -1 0 +1 8.3775804095730013 9.0509667991877123 -1 2.0355549961366507e-14 +2 -22.5 29.5 1 0 -0 1 6.3999999999999986 +2 0 -6 1 0 0 -1 6.4000000000000004 +1 2.0943951023934151 8.7681240867131933 -7.8504622934189397e-16 1 +1 6.2831853071795862 8.7681240867131898 0 1 +1 5.2359877559832082 8.768124086713188 0 1 +1 3.1415926535897931 8.7681240867131898 0 1 +1 6.2831853071795862 9.0509667991878082 -1 0 +2 -22.5 29.5 1 0 -0 1 6.3999999999999986 +2 0 -6 1 0 0 -1 6.4000000000000004 +1 0 -6.3499999999999996 1 0 +1 6.2831853071795862 8.4852813742385713 -1 -1.1308638867425773e-15 +1 4.2123889803846888 -16.400000000000375 -1 0 +1 1.0707963267940042 -22.749999999999428 0 -1 +1 6.2831853071795862 3.4500000000003976 -1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 1.0707963267948231 -22.750000000000487 0 -1 +1 6.2831853071795862 3.4500000000003976 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 4.2123889803846888 -16.400000000000375 -1 0 +1 4.2123889803847545 -22.750000000000462 0 -1 +1 0 -6.3499999999999996 1 0 +1 8.3775804095730066 8.4852813742385642 -1 1.1308638867425806e-15 +1 10.495574287564274 -16.400000000000375 -1 0 +1 4.2123889803838024 -22.749999999999897 0 -1 +1 12.566370614359172 3.4500000000003976 -1 0 +1 6.2831853071795862 3.4500000000003976 -1 0 +1 4.2123889803846888 -16.400000000000375 -1 0 +1 8.3775804095730066 9.0509667991876839 -1 2.6009869395079353e-14 +2 -22.5 -12.5 1 0 -0 1 6.3999999999999986 +2 0 -6 1 0 0 -1 6.4000000000000004 +1 2.0943951023934102 8.7681240867131915 1.570092458683783e-15 1 +1 6.2831853071795862 8.7681240867131898 0 1 +1 5.2359877559832118 8.7681240867131862 -1.5700924586837781e-15 1 +1 3.1415926535897745 8.7681240867131862 -7.8504622934188904e-16 1 +1 10.995574287564276 9.0509667991878171 -1 -1.6962958301138657e-15 +2 -22.5 -12.5 0 1 -1 0 6.4000000000000004 +2 0 -6 0 -1 -1 -0 6.4000000000000004 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -2 1 0 +2 -22.5 -12.5 1 0 -0 1 17.300000000000001 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 -2.2999999999999998 1 0 +1 0 24.465894629054546 1 0 +1 0 -2 1 0 +2 -22.5 -12.5 1 0 -0 1 17.300000000000001 +1 0 2.5 1 0 +2 -22.5 -12.5 1 0 -0 1 17.300000000000001 +1 0 -2 1 0 +2 -22.5 -12.5 1 0 -0 1 17.300000000000001 +1 0 -2.2999999999999998 1 0 +1 -2.0943951023933796 24.465894629054539 1 1.1308638867426094e-15 +1 0 24.183051916579927 1 0 +2 -22.5 -12.5 1 0 -0 1 17.100000000000001 +1 -2.0943951023933796 24.183051916579924 1 0 +2 -22.5 -12.5 1 0 -0 1 17.100000000000001 +1 0 6 1 0 +2 0 0 1 0 -0 1 17 +2 -22.5 -12.5 1 0 -0 1 17 +2 -22.5 29.5 1 0 -0 1 17 +1 0 6 1 0 +2 0 0 1 0 -0 1 17 +2 -22.5 -12.5 1 0 -0 1 17 +2 -22.5 29.5 1 0 -0 1 17 +1 0 6 1 0 +2 0 0 1 0 -0 1 8 +2 -22.5 -12.5 1 0 -0 1 8 +2 -22.5 29.5 1 0 -0 1 8 +1 0 6 1 0 +2 0 0 1 0 -0 1 8 +2 -22.5 -12.5 1 0 -0 1 8 +2 -22.5 29.5 1 0 -0 1 8 +1 -4.1651914291880141 11.030865786510647 1 -7.4637016525010553e-14 +2 0 -6 1 0 -0 1 7.7999999999999998 +2 -22.5 -12.5 1 0 0 -1 7.8000000000000007 +2 -22.5 29.5 1 0 0 -1 7.8000000000000007 +1 -2.070796326794885 11.030865786510041 1 2.7140733281822116e-14 +2 0 -6 1 0 -0 1 7.7999999999999998 +2 -22.5 -12.5 1 0 0 -1 7.8000000000000007 +2 -22.5 29.5 1 0 0 -1 7.8000000000000007 +1 1.047197551196414 24.324473272817237 -1.5700924586837781e-15 1 +1 3.1415926535898198 24.324473272817237 0 1 +1 4.1887902047861356 24.324473272817233 3.1401849173675167e-15 1 +1 0 24.324473272817237 0 1 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 0 -2 1 0 +2 -22.5 29.5 1 0 -0 1 17.300000000000001 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -2.2999999999999998 1 0 +1 -2.0943951023933796 24.465894629054546 1 0 +1 0 -2 1 0 +2 -22.5 29.5 1 0 -0 1 17.300000000000001 +1 -1.6653345369377348e-16 2.5 1 0 +2 -22.5 29.5 1 0 -0 1 17.300000000000001 +1 0 -2 1 0 +2 -22.5 29.5 1 0 -0 1 17.300000000000001 +1 0 -2.2999999999999998 1 0 +1 0 24.465894629054546 1 0 +1 -2.0943951023933796 24.183051916579927 1 0 +2 -22.5 29.5 1 0 -0 1 17.100000000000001 +1 0 24.183051916579927 1 0 +2 -22.5 29.5 1 0 -0 1 17.100000000000001 +1 0 24.324473272817237 0 1 +1 4.1887902047861365 24.324473272817237 3.1401849173675562e-15 1 +1 3.1415926535898109 24.324473272817237 0 1 +1 1.0471975511964138 24.324473272817237 -2.355138688025697e-15 1 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 0 2.5 1 0 +2 50.5 5.5 1 0 -0 1 23.299999999999997 +1 0 -2 1 0 +2 50.5 5.5 1 0 -0 1 23.299999999999997 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -2.2999999999999998 1 0 +1 -2.094395102393424 32.951176003293114 1 0 +1 0 -2 1 0 +2 50.5 5.5 1 0 -0 1 23.299999999999997 +1 0 2.5 1 0 +2 50.5 5.5 1 0 -0 1 23.299999999999997 +1 0 -2.2999999999999998 1 0 +1 0 32.951176003293114 1 0 +1 -2.0943951023934235 32.668333290818495 1 0 +2 50.5 5.5 1 0 -0 1 23.099999999999994 +1 0 32.668333290818495 1 0 +2 50.5 5.5 1 0 -0 1 23.099999999999994 +1 0 6 1 0 +2 0 0 1 0 -0 1 23 +2 50.5 5.5 1 0 -0 1 23 +1 0 6 1 0 +2 0 0 1 0 -0 1 23 +2 50.5 5.5 1 0 -0 1 23 +1 0 6 1 0 +2 0 0 1 0 -0 1 10 +2 50.5 5.5 1 0 -0 1 10 +1 0 6 1 0 +2 0 0 1 0 -0 1 10 +2 50.5 5.5 1 0 -0 1 10 +1 -4.1651914291880132 13.859292911256553 1 -3.2795052715534944e-14 +2 4.5562353437399997e-16 -7.9999999999999991 1 0 -0 1 9.8000000000000007 +2 50.5 5.4999999999999991 1 0 0 -1 9.7999999999999972 +1 -2.0707963267945773 13.859292911256107 1 6.1632081827477094e-14 +2 4.5562353437399997e-16 -7.9999999999999991 1 0 -0 1 9.8000000000000007 +2 50.5 5.4999999999999991 1 0 0 -1 9.7999999999999972 +1 0 32.809754647055804 0 1 +1 4.18879020478618 32.809754647055811 0 1 +1 3.1415926535897127 32.809754647055804 3.1401849173675562e-15 1 +1 1.0471975511963696 32.809754647055804 1.5700924586837386e-15 1 +1 1 4.0999999999999996 1 0 +1 111.56272774030001 0.565685424949256 1 4.1419027761054405e-19 +1 3.1415896021149314 3.2000000000000002 0 -1 +1 2 -0.94999999999999996 -0 1 +1 0 3.2000000000000002 0 -1 +1 0 -0.94999999999999996 -0 1 +1 0 0 0 1 +1 0 2.25 0 -1 +1 -1.5707993782636465 -1.8499999999999996 1 0 +1 6.2831868329170169 9.0509667991878118 -1 -5.6543249258303613e-16 +1 0.99999999389999772 4.0999999999999996 1 0 +1 32.058380293400006 0.56568542494923857 1 0 +1 3.1415957069804188 3.2000000000000002 0 -1 +1 1.9999999877000008 -0.94999999999999996 0 1 +1 -4.7123889803846897 -1.8499999999999996 1 0 +1 9.4247794874624873 9.0509667991878082 -1 0 +1 4.7123875444024508 9.3338095116822739 -3.1731091752987212e-07 -0.99999999999994971 +1 31.058380299500008 0.28284271247462056 0 1 +1 -11.2067401539 15.300000000000001 1 0 +1 71.810563784600006 0 1 0 +1 1.5707948899029507 9.3338095116822952 -3.1751076831857049e-07 -0.9999999999999496 +1 33.058380287200009 0.28284271247462056 0 1 +1 4.7123905070777985 9.3338095116624249 -4.7102773760513198e-15 1 +1 110.56272774030001 0.28284271247463666 -1.2403316233345993e-14 -1 +1 7.8539831606675907 9.6166522241369812 -1 1.3570354227396789e-14 +2 -49.958904109599999 8.5 0 1 -1 0 6.8000000000000007 +1 -11.2067401539 1.7 -1 -2.2263035843300001e-16 +1 71.810563784599992 1.1304665702550789e-14 1 -7.3955709864469857e-32 +1 1.5707978525323272 9.3338095116624284 7.8504622934188657e-16 -1 +1 112.56272774030001 0.28284271247463683 -1.5742343614596589e-16 1 +1 4.7123905061221203 9.616652224137006 -1 2.6009894658834894e-14 +2 -51.958904109599999 8.5 0 1 -1 0 6.8000000000000007 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -1.8499999999999996 1 0 +1 8.3775804095730013 12.727922061357852 -1 1.1308638867425838e-15 +1 0 -1.8499999999999996 1 0 +1 6.2831853071795862 12.727922061357855 -1 0 +1 10.995574287564276 13.293607486307094 -1 0 +2 11.041095890399999 8.5 0 1 -1 0 9.3999999999999986 +1 3.1415926535898113 13.010764773825402 -1.5700924586837731e-15 1 +1 5.2359877559832082 13.010764773825404 -1.5700924586837731e-15 1 +1 6.2831853071795862 13.010764773832474 0 1 +1 2.0943951023934151 13.010764773832477 2.355138688025682e-15 1 +1 8.3775804095730013 13.293607486307163 -1 -1.4701230527653588e-14 +2 11.041095890399999 8.5 1 0 -0 1 9.4000000000000004 +1 -52.084386624700002 -5.5 -1 0 +1 13.763830376600005 4.5 1 0 +1 -52.084386624700002 -5.5 -1 0 +1 13.763830376600005 0 1 0 +1 1.0194793576626502 0 0 1 +1 18.067987571900005 2.25 0 -1 +1 -3.6929096227220408 -2.25 1 0 +2 -56.388543820000002 -2.5 1 0 -0 1 3 +1 -3.6929096227220408 2.25 1 0 +2 -56.388543820000002 -2.5 1 0 -0 1 3 +1 0 0 0 1 +1 1.1741435545438652 0 0 1 +1 1.0194793576626482 0 0 1 +1 18.067987571900005 2.25 0 1 +1 -52.084386624700002 22.5 -1 0 +1 13.763830376600005 0 1 0 +1 -52.084386624700002 22.5 -1 0 +1 13.763830376600005 4.5 1 0 +1 -2.5187660681778201 -2.25 1 0 +2 -38.5 8.5 1 0 -0 1 24 +1 -2.5187660681778201 2.25 1 0 +2 -38.5 8.5 1 0 -0 1 24 +1 0.071509616281146673 0 0 1 +1 0 0 0 -1 +1 2.590275684457545 2.25 -1 0 +2 -56.388543820000002 19.5 1 0 -0 1 3 +1 -0.55131696912372863 -2.25 1 0 +2 -56.388543820000002 19.5 -1 0 0 1 3 +1 207.10225695400001 6.9000000000000004 0 1 +1 109 6.9000000000000004 0 1 +1 143.29775463799999 6.9000000000000004 0 1 +1 0 6.9000000000000004 0 1 +1 54.5 0.79999999999999982 1 0 +1 118.101209582 1.1313708498984769 1 0 +1 254.45195737099999 6.5 0 1 +1 -1.0573556046300002e-30 6.5000000000000009 -1.6267009302e-31 1 +7 0 0 1 2 2 207.10225695400001 0.80000000000000004 254.45195737099999 0.80000000000000004 + 109 2 156.12388980399999 2 +7 0 0 1 2 2 243.59478752199996 1.1313708498999939 309.35350971339039 1.1313770879898555 + 109 2 156.12388980399999 2 +1 107.808170647 6.9000000000000004 0 1 +1 10 6.9000000000000012 -1.6267009302e-31 1 +1 5 0.80000000000000138 1 1.1940564118011782e-31 +1 132.87983823900001 6.5 0 1 +1 -2.2156089166073466e-16 6.5 -2.6794007744629963e-24 1 +7 0 0 1 2 2 107.808170647 0.80000000000000004 132.87983823900001 0.80000000000000004 + 166.12388980399999 2 191.01233394499999 2 +7 0 0 1 2 2 62.094959105999997 1.1313708499000001 96.684515910148349 1.1313733782654261 + 166.12388980399999 2 191.01233394499999 2 +1 95.599764641600004 6.9000000000000004 0 1 +1 29.023430645029901 6.9000000000000004 4.4023993482469405e-17 1 +1 14.511715322470803 0.80000000000099958 1 2.6794007744629963e-24 +1 137.70278531899999 6.5 0 1 +1 0 6.5000000000000009 0 1 +7 0 0 1 2 2 95.599764641600004 0.80000000000000004 137.70278531899999 0.80000000000000004 + 220.03576459000001 2 262.06329297799999 2 +7 0 0 1 2 2 120.58639119999999 1.1313708498999999 179.74754216553339 1.131376787613714 + 220.03576459000001 2 262.06329297799999 2 +1 166.58674222600001 6.9000000000000004 0 1 +1 34.797080048600002 6.9000000000000012 0 1 +1 17.398540024300001 0.80000000000000138 1 0 +1 130.15324706870001 1.1313708498984729 1 0 +1 252.01584080399999 6.5 0 1 +1 0 6.5000000000000009 0 1 +7 0 0 1 2 2 166.58674222600001 0.80000000000000004 252.01584080399999 0.80000000000000004 + 296.86037302699998 2 381.68337467399999 2 +7 0 0 1 2 2 206.34732287700001 1.1313708499000001 325.41616112837863 1.1313707294091384 + 296.86037302699998 2 381.68337467399999 2 +1 98.517206313800003 6.9000000000000004 0 1 +1 2 6.9000000000000012 0 1 +1 1 0.80000000000000071 1 0 +7 0 0 1 2 2 98.517206313800003 0.80000000000000004 143.29775463799999 0.80000000000000004 + 383.68337467399999 2 427.66567182400001 2 +7 0 0 1 2 2 103.76581805399999 1.1313708499000001 165.07828876436528 1.1313705510753325 + 383.68337467399999 2 427.66567182400001 2 +7 0 0 1 2 2 103.76581805399999 3.0224279829703162e-15 165.07829155293481 1.3399276483031418e-11 + 103.76581805399999 2 165.07828899200001 2 +7 0 0 5 15 5 -65.200000000000003 -4.5 -65.200000000000003 -7.3961324085399998 -64.815683064799998 -10.292565314899999 -64.044701936199999 -13.1202251169 -61.767762986000001 -18.502156188099999 -58.162061913499997 -23.101311403499999 -56.061385811000001 -25.147230317799998 -51.7602007208 -28.339419764199999 -46.831052239900004 -30.3981516644 -44.496038364599997 -31.080147596500002 -41.768787502400002 -31.555521804400001 -39.019917637299997 -31.684083704100001 -38.678137464199999 -31.6947756669 -38.338923938100002 -31.700003949900001 -38.000003569900002 -31.7000003729 + 103.76581805399999 6 124.547002021 3 145.33505857899999 3 162.64698145599999 3 165.07828899200001 6 +1 -65.200000000000003 -3.5 0 -1 +1 0 9.7910712518795318e-16 1 -3.0087941894766422e-18 +7 0 0 5 15 5 -12 50.700000000000003 -17.395146434200001 50.700000000000003 -22.790272716 50.016080707500002 -28.0703760954 48.647586647799997 -38.167235070799997 44.603325626500002 -46.935695196499999 38.167852959100003 -50.887142559099999 34.407592682999997 -58.071200711000003 25.572774405099999 -62.709492242700001 15.153781134600001 -64.358373071900004 9.4059114346899992 -65.191238028499995 3.4851502435200001 -65.199969163700004 -2.4372544982000002 -65.199989732399999 -2.4581681825900001 -65.200000056600004 -2.4790835333599999 -65.2000001567 -2.5000012219399999 + 206.34732287700001 6 244.784677386 3 283.22234807799998 3 325.26716929499997 3 325.41616118000002 6 +1 5.3985400242999999 50.700000000000003 -1 0 +1 130.15324706870001 0 1 0 +1 0 4.7602116774627328e-15 1 -2.6482762356956271e-17 +7 0 0 5 9 3 62.796057198 40.727134911599997 55.583984463199997 44.5618620065 47.911829203899998 47.532368133200002 39.920285127100001 49.564612909099999 31.602084407900001 50.640506765600001 23.274783774399999 50.698883892399998 23.115519849199998 50.699624028199999 22.956266601100001 50.699990847400002 22.797018728600001 50.699991800799999 + 120.58639119999999 6 178.61598027900001 3 179.74754108900001 6 +1 75.609141310200002 33.914297240400003 -0.88294759285826285 0.46947156278713975 +1 0 3.2061493945663398e-15 1 -3.5908506306048224e-18 +7 0 0 5 12 4 100.2 7.5 100.2 9.6809699653300001 99.932382303899999 11.8619313793 99.396510492800004 13.9991336012 97.692003087800003 18.4059546282 94.895791927999994 22.228794922799999 93.118707907000001 24.048197016300001 91.017193152399997 25.661658038100001 88.725037743800002 26.937935644900001 88.624460949500005 26.993092693200001 88.523529253199996 27.047590689700002 88.422255048899999 27.101440138200001 + 62.094959105999997 6 77.796852188800003 3 95.859399766099997 3 96.6845153915 6 +1 100.2 2.5 0 1 +1 -2.8421709430404007e-14 -2.707542532113754e-14 1 8.7522599674615994e-17 +7 0 0 5 15 5 71 -31.699999999999999 73.999932498999996 -31.699999999999999 76.999844077000006 -31.3147433629 79.934138087199997 -30.543852039600001 85.538504313100006 -28.266498915 90.385589047600007 -24.647042713800001 92.562629609400005 -22.5336263714 96.364010810600007 -17.7458581679 98.8181968098 -12.1443684266 99.678127191599998 -9.1664285505599992 100.153771088 -6.00175461166 100.19845569100001 -2.8289666115399998 100.19948233300001 -2.71933652926 100.199990855 -2.60969449139 100.199991877 -2.50002261243 + 243.59478752199999 6 265.100062267 3 286.60708227999999 3 308.56748184100002 3 309.35350848100001 6 +1 16.5 -31.699999999999999 1 0 +1 118.101209582 0 1 0 +7 0 0 1 2 2 165.07829155293481 1.3399276483031418e-11 165.07828876436528 1.1313705510753329 + -0.5656851612691205 2 0.56568542494923713 2 +1 63.601209581999996 0.56568542494924035 0 1 +1 243.59478752199996 0.56568542494923313 0 1 +1 172.601209582 0.56568542494924035 0 1 +1 309.35350848100001 -7.8509658214442275e-17 0 1 +1 62.094959105999997 0.56568542494923801 0 1 +1 96.684515391499986 1.4066336215003684e-15 -1.2560739669453245e-14 1 +1 120.58639119996691 0.56568542491727436 -4.0621432090986698e-11 1 +1 179.74754108900001 2.6255551268628525e-22 0 1 +7 0 0 1 2 2 112.75476836440001 -5.797709924593164e-06 112.7547062803 1.1313649121814109 + 0 2 1.1313708498999999 2 +1 206.34732287700001 0.5656854249492379 0 1 +1 147.551787093 0.56568542494923646 0 1 +1 325.41616118000002 -1.0048591859783999e-14 0 1 +1 103.76581805399999 0.56568542494923801 0 1 +1 143.29775463799999 0.5 0 1 +1 0 0.5 0 1 +1 207.10225695400001 0.5 0 1 +1 109 0.5 0 1 +1 16.5 -32.5 1 0 +1 54.5 1 1 0 +1 254.45195737099999 0.5 0 1 +1 2.460956871328279e-29 0.5 -5.9435746756900001e-29 1 +7 0 0 1 2 2 207.10225695400001 1 254.45195737099999 1 + 109 2 156.12388980399999 2 +7 0 0 5 9 3 71 -32.5 75.712388980399993 -32.5 80.4247779608 -31.574724587399999 84.8946105096 -29.723259324099999 92.867471954300001 -24.367471954300001 98.223259324099999 -16.3946105096 100.07472458700001 -11.9247779608 101 -7.2123889803800001 101 -2.5 + 109 6 132.56194490199999 3 156.12388980399999 6 +1 107.808170647 0.5 0 1 +1 10 0.5 4.9219137426550267e-29 1 +1 101 2.5 4.2632564145599998e-15 1 +1 5 1 1 7.0295427457592257e-29 +1 132.87983823900001 0.5 0 1 +1 1.1985639207315868e-15 0.50000000000000111 -5.0296458652345425e-23 1 +7 0 0 1 2 2 107.808170647 1 132.87983823900001 1 + 166.12388980399999 2 191.01233394499999 2 +7 0 0 5 6 2 101 7.5 101 12.4776888283 99.654424864299997 17.455903910100002 96.956647293900005 21.945748933499999 93.192846020999994 25.470943655100001 88.797802672700001 27.807817643500002 + 166.12388980399999 6 191.01233394499999 6 +1 95.599764641600004 0.5 0 1 +1 29.023430645029901 0.50000000000000111 2.3971278498601878e-15 1 +1 75.984718560399998 34.620655314700002 -0.88294759285848323 0.46947156278672519 +1 14.511715322559104 1.0000000000000011 1 5.0297266445912371e-23 +1 137.70278531899999 0.5 0 1 +1 0 0.5 0 1 +7 0 0 1 2 2 95.599764641600004 1 137.70278531899999 1 + 220.03576459000001 2 262.06329297799999 2 +7 0 0 5 6 2 63.171634448200003 41.433492985900003 55.7500134434 45.379638872299999 47.845323711900001 48.4193390577 39.609065293299999 50.472868920099998 31.202585726199999 51.5 22.797080048600002 51.5 + 220.03576459000001 6 262.06329297799999 6 +1 166.58674222600001 0.5 0 1 +1 34.797080048600002 0.5 0 1 +1 5.3985400242999999 51.5 -1 0 +1 17.398540024300001 1 1 0 +1 252.01584080399999 0.5 0 1 +1 0 0.5 0 1 +7 0 0 1 2 2 166.58674222600001 1 252.01584080399999 1 + 296.86037302699998 2 381.68337467399999 2 +7 0 0 5 9 3 -12 51.5 -20.4823001647 51.5 -28.9646003294 49.834504257299997 -37.0102989174 46.501866783399997 -51.361449517799997 36.861449517799997 -61.001866783399997 22.5102989174 -64.334504257299997 14.4646003294 -66 5.9823001646899998 -66 -2.5 + 296.86037302699998 6 339.27187385000002 3 381.68337467399999 6 +1 98.517206313800003 0.5 0 1 +1 2 0.5 0 1 +1 -66 -3.5 0 -1 +1 1 1 1 0 +7 0 0 1 2 2 98.517206313800003 1 143.29775463799999 1 + 383.68337467399999 2 427.66567182400001 2 +7 0 0 5 6 2 -66 -4.5 -66 -13.296459430100001 -62.555579886700002 -22.101126014199998 -55.601126014199998 -29.055579886699999 -46.796459430100001 -32.5 -38 -32.5 + 383.68337467399999 6 427.66567182400001 6 +1 0 15.980613254816044 0 1 +1 4.1887902047861711 15.98061325481587 3.1401849173675167e-15 1 +1 -4.7123889803846888 15.839191898579017 1 -4.5234555469703365e-14 +2 8.7090243936400008e-28 -1.7763568394e-15 0 1 -1 0 11.199999999999999 +2 8.7090243936400008e-28 -8.8000000000000025 0 1 -1 0 11.199999999999999 +1 3.1415926535897927 15.980613254815903 0 1 +1 1.0471975511963774 15.980613254816079 -1.5700924586837781e-15 1 +1 -4.7123889803846897 16.122034611053568 1 -4.5234555469703352e-14 +1 -4.7123889803846897 -1.3 1 0 +1 -2.0943951023934151 15.839191898578644 1 2.8271597168564595e-15 +2 1.00974195868e-28 -2.3075552236599999e-15 1 0 -0 1 11.199999999999999 +2 1.00974195868e-28 -8.8000000000000025 1 0 -0 1 11.199999999999999 +1 -2.0943951023934146 16.122034611053273 1 2.2617277734851679e-15 +1 4.4408920985006262e-16 -1.3000000000004732 1 1.0043484894132574e-13 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 1.2999999999999998 1 0 +1 6.2831853071795862 16.122034611053355 -1 -4.5234555469703352e-14 +1 0 1.2999999999999998 1 0 +1 8.3775804095730013 16.1220346110536 -1 -6.6720969317812433e-14 +1 6.2831853071795862 15.980613254816044 0 1 +1 2.0943951023934146 15.98061325481587 -1.5700924586837584e-15 1 +1 3.1415926535897931 15.980613254815903 0 1 +1 5.2359877559832082 15.980613254816079 0 1 +1 10.995574287564274 15.839191898578944 -1 -4.4669123526332073e-14 +2 8.7090243936400008e-28 -1.7763568394e-15 0 1 -1 0 11.199999999999999 +2 8.7090243936400008e-28 -1.7763568394e-15 0 1 -1 0 11.199999999999999 +1 8.3775804095730013 15.839191898578648 -1 3.3925916602277511e-15 +2 7.5730646901200004e-29 -2.3075552236599999e-15 1 0 -0 1 11.199999999999999 +2 7.5730646901200004e-29 -2.3075552236599999e-15 1 0 -0 1 11.199999999999999 +1 0 -1.4000000000000004 1 0 +2 0 0 1 0 -0 1 10 +2 0 0 1 0 -0 1 10 +1 0 -1.4000000000000004 1 0 +2 0 0 1 0 -0 1 10 +2 0 0 1 0 -0 1 10 +1 10.448376736367599 13.859292911256547 -1 -3.1664188828792361e-14 +2 4.5562353437399997e-16 -10 1 0 -0 1 9.8000000000000007 +2 4.5562353437399997e-16 0 1 0 0 -1 9.8000000000000007 +1 8.353981633974163 13.859292911256107 -1 6.1632081827477094e-14 +2 4.5562353437399997e-16 -10 1 0 -0 1 9.8000000000000007 +2 4.5562353437399997e-16 0 1 0 0 -1 9.8000000000000007 +1 -2.0943951023934151 11.596551211459376 1 5.6543194337129189e-16 +2 6.5077460204099998e-16 -3.5523141753600001e-16 1 0 -0 1 8.1999999999999993 +2 6.5077460204099998e-16 -10 1 0 0 -1 8.1999999999999993 +1 0 11.596551211459378 1 0 +2 6.5077460204099998e-16 -3.5523141753600001e-16 1 0 -0 1 8.1999999999999993 +2 6.5077460204099998e-16 -10 1 0 0 -1 8.1999999999999993 +1 -4.7123889803846879 11.313708498984759 1 0 +1 -4.7123889803846879 1.2999999999999998 1 0 +1 8.9247779607693776 -8.4000000000000021 -1 0 +1 8.9247779607693793 -8.4000000000000021 -1 0 +1 3.1415926535897931 11.455129855222069 0 1 +1 1.0471975511963791 11.455129855222069 0 1 +1 0 11.455129855222069 0 1 +1 4.1887902047861711 11.455129855222069 0 1 +1 -2.0943951023934146 11.313708498984759 1 0 +1 0 1.2999999999999998 1 0 +1 4.2123889803846888 -8.4000000000000021 -1 0 +1 10.495574287564274 -8.4000000000000021 -1 0 +1 -2.0707963267951914 1.5707963267948926 1 1.9083328088779316e-15 +2 -5.2841545998399997e-16 -8.8000000000000007 1 0 -0 1 9.0999999999999996 +2 -5.2841545998399997e-16 0 1 0 -0 1 9.0999999999999996 +1 -5.2123889803849845 1.5707963267949125 1 -1.9083328088779316e-15 +2 -5.2841545998399997e-16 -8.8000000000000007 1 0 -0 1 9.0999999999999996 +2 -5.2841545998399997e-16 0 1 0 -0 1 9.0999999999999996 +1 8.3775804095730013 11.596551211459376 -1 5.6543194337129189e-16 +2 6.5077460204099998e-16 -3.5523141753600001e-16 1 0 -0 1 8.1999999999999993 +1 6.2831853071795862 11.596551211459378 -1 0 +2 6.5077460204099998e-16 -3.5523141753600001e-16 1 0 -0 1 8.1999999999999993 +1 0 -1.3 1 0 +1 8.3775804095730013 11.313708498984759 -1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 -2.0707963267946781 -6.1244997997999988 1 0 +1 5.8407075111029325 6.2831853071795862 -1 0 +1 6.2831853071795862 -0.97550020020000028 -1 0 +1 -2.0707963267948974 -6.1244997997999988 1 0 +1 8.3539816339744828 6.2831853071795862 -1 0 +1 12.566370614359172 -0.97550020020000028 -1 0 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 4.2123889803849082 -7.1000000000000032 0 -1 +1 4.2123889803846897 -7.1000000000000023 0 -1 +1 1.0707963267948957 -7.1000000000000032 0 -1 +1 0 -1.3 1 0 +1 6.2831853071795862 11.313708498984759 -1 0 +1 6.2831853071795862 -0.97550020020000028 -1 0 +1 6.2831853071795862 -0.97550020020000028 -1 0 +1 3.1415926535895737 0 0 1 +1 3.1415926535895728 0 0 1 +1 1.0707963267951159 -7.0999999999999988 0 -1 +1 2.0943951023934164 11.455129855222069 0 1 +1 6.2831853071795862 11.455129855222069 0 1 +1 5.2359877559832082 11.455129855222069 0 1 +1 3.1415926535897936 11.455129855222069 1.5700924586837781e-15 1 +1 0 13.152186130069769 0 1 +1 4.1887902047861711 13.152186130069753 0 1 +1 -4.7123889803846897 13.010764773832403 1 9.0469110939406702e-15 +2 1.3322676295499999e-15 2.2204460492499999e-15 0 1 -1 0 9.1999999999999993 +2 1.3322676295499999e-15 -6.5999999999999979 0 1 -1 0 9.1999999999999993 +2 1.3322676295499999e-15 -6.5999999999999979 0 1 -1 0 9.1999999999999993 +1 3.1415926535897931 13.152186130069799 0 1 +1 1.0471975511963794 13.152186130069817 1.5700924586837781e-15 1 +1 -4.7123889803846888 13.29360748630703 1 1.0177774980683253e-14 +1 -4.7123889803846888 -1.3 1 0 +1 -2.0943951023934151 13.010764773832392 1 1.0177774980683253e-14 +2 2.6645352590999998e-15 -1.84083345573e-17 1 0 -0 1 9.1999999999999993 +2 2.6645352590999998e-15 -6.5999999999999996 1 0 -0 1 9.1999999999999993 +2 2.6645352590999998e-15 -6.5999999999999996 1 0 -0 1 9.1999999999999993 +1 -2.0943951023934151 13.293607486307035 1 1.2439502754168421e-14 +1 0 -1.3000000000002025 1 4.297282769621818e-14 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 1.2999999999999998 1 0 +1 6.2831853071795862 13.293607486307078 -1 9.6123430373119649e-15 +1 0 1.2999999999999998 1 0 +1 8.3775804095730013 13.293607486307186 -1 -1.9790118017995212e-14 +1 6.2831853071795862 13.152186130069769 0 1 +1 2.0943951023934146 13.152186130069753 1.5700924586837682e-15 1 +1 3.1415926535897931 13.152186130069799 0 1 +1 5.2359877559832073 13.152186130069815 -3.1401849173675364e-15 1 +1 10.995574287564276 13.010764773832417 -1 9.0469110939406686e-15 +2 1.3322676295499999e-15 2.2204460492499999e-15 0 1 -1 0 9.1999999999999993 +2 1.3322676295499999e-15 -2.2204460492499999e-15 0 -1 -1 -0 9.1999999999999993 +2 1.3322676295499999e-15 -2.2204460492499999e-15 0 -1 -1 -0 9.1999999999999993 +1 8.3775804095730013 13.01076477383242 -1 1.1308638867425838e-14 +2 2.6645352590999998e-15 -1.84083345573e-17 1 0 -0 1 9.1999999999999993 +2 2.6645352590999998e-15 1.84083345573e-17 1 0 0 -1 9.1999999999999993 +2 2.6645352590999998e-15 1.84083345573e-17 1 0 0 -1 9.1999999999999993 +1 0 -1.4000000000000004 1 0 +2 0 0 1 0 0 -1 8 +2 0 0 1 0 -0 1 8 +2 0 0 1 0 -0 1 8 +1 0 -1.4000000000000004 1 0 +2 0 0 1 0 0 -1 8 +2 0 0 1 0 -0 1 8 +2 0 0 1 0 -0 1 8 +1 10.448376736367599 11.03086578651066 -1 -7.6333312355124428e-14 +2 0 -8 1 0 -0 1 7.7999999999999998 +2 0 0 1 0 0 -1 7.7999999999999998 +2 0 0 1 0 0 -1 7.7999999999999998 +1 8.3539816339744704 11.03086578651004 -1 2.8271597168564706e-14 +2 0 -8 1 0 -0 1 7.7999999999999998 +2 0 0 1 0 0 -1 7.7999999999999998 +2 0 0 1 0 0 -1 7.7999999999999998 +1 -2.0943951023934151 8.7681240867133603 1 -3.6187644375762681e-14 +2 5.6917383248299999e-16 -3.0773183653900002e-16 1 0 -0 1 6.2000000000000002 +2 5.6917383248299999e-16 -8 1 0 0 -1 6.2000000000000002 +2 5.6917383248299999e-16 -8 1 0 0 -1 6.2000000000000002 +1 0 8.7681240867131862 1 2.2617277734851675e-15 +2 5.6917383248299999e-16 -3.0773183653900002e-16 1 0 -0 1 6.2000000000000002 +2 5.6917383248299999e-16 -8 1 0 0 -1 6.2000000000000002 +2 5.6917383248299999e-16 -8 1 0 0 -1 6.2000000000000002 +1 -4.7123889803846897 8.4852813742385482 1 3.3925916602277511e-15 +1 -4.7123889803846897 1.2999999999999998 1 0 +1 8.9247779607693793 -8.4000000000000057 -1 0 +1 8.9247779607693793 -8.4000000000000057 -1 0 +1 3.1415926535897931 8.6267027304758841 0 1 +1 1.047197551196378 8.6267027304759374 7.8504622934188411e-16 1 +1 0 8.6267027304758734 0 1 +1 4.1887902047861711 8.6267027304758201 0 1 +1 -2.0943951023934146 8.4852813742386175 1 -1.0177774980683255e-14 +1 0 1.29999999999982 1 3.8166656177562201e-14 +1 4.2123889803846888 -8.4000000000000057 -1 0 +1 10.495574287564278 -8.4000000000000057 -1 0 +1 -2.0707963267952718 1.5707963267948866 1 1.9083328088778827e-15 +2 -2.2977359924999999e-16 -6.5999999999999988 1 0 -0 1 6.9000000000000004 +2 -2.2977359924999999e-16 8.881784197e-16 1 0 -0 1 6.9000000000000004 +2 -2.2977359924999999e-16 8.881784197e-16 1 0 -0 1 6.9000000000000004 +1 -5.2123889803850645 1.5707963267948841 1 1.8376538159564799e-15 +2 -2.2977359924999999e-16 -6.5999999999999988 1 0 -0 1 6.9000000000000004 +2 -2.2977359924999999e-16 8.881784197e-16 1 0 -0 1 6.9000000000000004 +2 -2.2977359924999999e-16 8.881784197e-16 1 0 -0 1 6.9000000000000004 +1 6.2831853071795862 8.7681240867131862 -1 2.2617277734851679e-15 +2 5.6917383248299999e-16 -3.0773183653900002e-16 1 0 -0 1 6.2000000000000002 +1 8.3775804095730013 8.7681240867133603 -1 -3.6187644375762681e-14 +2 5.6917383248299999e-16 -3.0773183653900002e-16 1 0 -0 1 6.2000000000000002 +1 0 -1.3 1 0 +1 8.3775804095730013 8.4852813742387454 -1 -3.7318508262505264e-14 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 -2.0707963267957745 -6.0744562647000002 1 0 +1 5.8407075111029325 6.2831853071795862 -1 0 +1 6.2831853071795862 -1.0255437353000023 -1 0 +1 -2.0707963267948974 -6.0744562647000002 1 0 +1 8.3539816339744828 6.2831853071795862 -1 0 +1 12.566370614359172 -1.0255437353000023 -1 0 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 4.2123889803838113 -7.1000000000000032 0 -1 +1 4.2123889803846897 -7.100000000000005 0 -1 +1 1.0707963267948959 -7.1000000000000041 0 -1 +1 0 -1.3 1 0 +1 6.2831853071795862 8.485281374238566 -1 2.8271597168564599e-15 +1 6.2831853071795862 -1.0255437353000023 -1 0 +1 6.2831853071795862 -1.0255437353000023 -1 0 +1 3.1415926535906706 0 0 1 +1 3.1415926535906706 0 0 1 +1 1.0707963267940188 -7.1000000000000059 0 -1 +1 3.1415926535897931 8.6267027304758841 0 1 +1 5.2359877559832073 8.6267027304759374 -3.1401849173675562e-15 1 +1 6.2831853071795862 8.6267027304758752 0 1 +1 2.0943951023934146 8.6267027304758201 1.5700924586837584e-15 1 +1 8.9247779607693793 -8.4000000000000021 -1 0 +1 8.9247779607693793 -8.4000000000000021 -1 0 +1 4.2123889803846888 -8.4000000000000021 -1 0 +1 10.495574287564278 -8.4000000000000021 -1 0 +1 6.2831853071795862 -1.0255437352999988 -1 0 +1 12.566370614359172 -1.0255437352999988 -1 0 +1 4.2123889803838113 -7.0999999999999996 0 -1 +1 4.2123889803846897 -7.1000000000000014 0 -1 +1 1.0707963267948954 -7.1000000000000005 0 -1 +1 6.2831853071795862 -1.0255437352999988 -1 0 +1 6.2831853071795862 -1.0255437352999988 -1 0 +1 1.0707963267940188 -7.1000000000000023 0 -1 +1 -2.0707963267946776 -16 1 0 +2 0 -8 1 0 -0 1 8 +1 -2.0707963267948974 -16 1 0 +2 0 -8 1 0 -0 1 8 +1 -2.0707963267954783 8.768124086713204 1 -3.9580236035983114e-15 +2 -2.84586916241e-16 3.9130700983199998e-16 1 0 -0 1 6.2000000000000002 +1 -4.1651914291880141 8.76812408671322 1 -4.5234555469703359e-15 +2 -2.84586916241e-16 3.9130700983199998e-16 1 0 -0 1 6.2000000000000002 +1 1.0471975511968123 10.040916292848015 -3.6373808626234449e-14 1 +1 3.1415926535899295 10.040916292848001 -3.6286581267418539e-14 1 +1 4.1887902047866064 10.040916292847998 -3.6286581267418514e-14 1 +1 0 10.040916292848012 0 1 +1 10.448376736367599 8.7681240867132377 -1 -6.7851833204555046e-15 +2 -2.84586916241e-16 -8 1 0 -0 1 6.2000000000000002 +1 8.3539816339750637 8.7681240867132058 -1 -3.9580236035983114e-15 +2 -2.84586916241e-16 -8 1 0 -0 1 6.2000000000000002 +1 5.2359877559827739 10.040916292848021 3.6635490702682332e-14 1 +1 3.1415926535896568 10.040916292848003 3.6286581267418615e-14 1 +1 10.448376736367599 11.313708498984759 -1 0 +1 -2.070796326794897 27.200000000000063 1 -9.0469110939400375e-15 +1 2.0943951023929803 10.040916292847999 3.6286581267418615e-14 1 +1 6.2831853071795862 10.040916292848014 0 1 +1 8.3539816339742643 11.313708498984774 -1 -3.3925916602279882e-15 +1 -2.0707963267946776 27.200000000000003 1 0 +1 -2.0707963267946781 -8.6000000000000014 1 0 +2 0 -10 1 0 -0 1 8 +1 -2.0707963267948974 -8.6000000000000014 1 0 +2 0 -10 1 0 -0 1 8 +1 5.2359877559828263 14.000714267490235 2.5121479339410926e-14 1 +1 3.1415926535897092 14.000714267490279 2.5121479339410453e-14 1 +1 10.448376736367599 14.142135623730583 -1 5.4281466563643986e-14 +1 -2.0707963267948966 -8.7999999999991871 1 -1.1987157199471387e-13 +1 6.2831853071796049 -1.1999999999999971 -1 0 +1 12.566370614359192 -1.1999999999999971 -1 0 +1 2.0943951023930327 14.000714267490133 1.884110950455784e-14 1 +1 6.2831853071795862 14.000714267490086 0 1 +1 8.3539816339744846 14.142135623730722 -1 6.2197513770842125e-14 +1 -2.0707963267948974 -8.8000000000000007 1 0 +1 6.2831853071796067 -1.1999999999999971 -1 0 +1 6.2831853071796067 -1.1999999999999971 -1 0 +1 -2.070796326794897 -15.800000000000001 1 0 +1 -2.070796326794897 14.142135623730731 1 5.9935785997356959e-14 +1 6.2831853071795862 5.800000000000006 -1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 1.0707963267948954 -9.9999999999999982 0 -1 +1 3.1415926535897931 -12.300000000000001 0 1 +1 3.1415926535897931 -12.300000000000001 0 1 +1 1.0707963267948952 2.3000000000000043 0 -1 +1 6.2831853071795862 5.800000000000006 -1 0 +1 0 -12.300000000000001 0 1 +1 6.2831853071795862 -12.300000000000001 0 1 +1 4.2123889803846888 2.3000000000000007 0 -1 +1 -2.0707963267948983 -15.800000000000001 1 0 +1 -4.1651914291880141 14.14213562373117 1 -3.2229620772163627e-14 +1 12.566370614359172 5.800000000000006 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 4.2123889803846897 -10.000000000000005 0 -1 +1 6.2831853071795862 5.800000000000006 -1 0 +1 1.0471975511967604 14.000714267490235 -2.512147933941061e-14 1 +1 3.141592653589877 14.000714267490281 -2.5121479339410768e-14 1 +1 4.188790204786554 14.000714267490135 -2.1981294421984422e-14 1 +1 0 14.000714267490086 0 1 +1 0 -4.000000330961484e-10 0 1 +1 6.2831853071795862 -4.000000330961484e-10 0 1 +1 -2.0707963267943708 -1.4000000003999986 1 0 +1 -2.0707963267943708 3.141592653589794 1 -1.6962958301141605e-15 +1 3.1415926535892655 -4.000000330961484e-10 0 1 +1 3.141592653589266 -4.000000330961484e-10 0 1 +1 -2.0707963267943708 1.3999999996000021 1 0 +1 -2.0707963267943703 3.1415926535897913 1 1.4135798584284669e-16 +1 -2.0707963267948974 -1.4000000003999986 1 0 +1 -5.212388980384163 3.1415926535897598 1 3.8166656177568588e-15 +1 -2.0707963267948974 1.3999999996000021 1 0 +1 -5.212388980384163 3.1415926535897629 1 2.6858017310140871e-15 +1 -2.0707963267948974 -2.0755002002000005 1 0 +1 8.3539816339744846 0 -1 0 +1 3.1415926535895737 0 0 1 +1 3.1415926535895737 0 0 1 +1 1.0707963267948961 -7 1 0 +2 0 8 1 0 -0 1 8 +1 1.0707963267948959 11.000000000000657 1 0 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535895728 -2 0 1 +1 3.1415926535895737 -2 0 1 +1 3.1415926535895782 16.000000000000899 0 1 +1 3.1415926535895782 16.000000000000899 0 1 +1 0 -2 0 1 +1 6.2831853071795862 -2 0 1 +8 -5 4.2679491924300006 +1 6.2831853071795862 16.000000000000753 0 1 +8 -5 4.2679491924300006 +1 0 16.000000000000753 0 1 +1 1.0707963267948961 2.2679491924300001 1 0 +1 -1.4424777960769388 3.141592653589794 1 -7.0678992921411488e-16 +1 1.0707963267948959 20.267949192430766 1 0 +1 -2.0707963267946776 -2.0755002002000005 1 0 +1 5.8407075111029325 0 -1 0 +1 -5.2123889803844712 -7 1 0 +2 0 8 1 0 -0 1 8 +1 -5.2123889803846906 11.000000000000657 1 0 +1 -5.2123889803844712 2.2679491924300001 1 0 +1 -5.2123889803844712 3.1415926535897887 1 4.2407395752849852e-16 +1 -5.2123889803846906 20.267949192430766 1 0 +1 3.1415926535895773 1.1336709349052398e-11 -3.9665661790632458e-15 1 +1 0 1.1327383475645547e-11 0 1 +1 0 1.1322942583547047e-11 0 1 +1 3.1415926535895764 1.1332268456953898e-11 -3.4707454066803213e-15 1 +1 -5.212388980385124 2.2459278598151329 1 7.0678992921401756e-16 +1 8.3539816339744846 0.89566479385800435 -1 -2.2263882770247687e-15 +1 -2.0707963267953304 2.24592785981514 1 -7.0678992921401736e-16 +1 5.8407075111029316 0.89566479385799147 -1 -8.1280841859623215e-16 +1 0.62831853071851607 -3.1415926535897931 8.0570875506043556e-15 1 +1 3.141592653590068 -3.1415926535897931 7.9331323575181205e-15 1 +1 3.7699111843083095 -3.1415926535897931 7.9331323575181473e-15 1 +1 0 -3.1415926535897931 0 1 +1 0 -1.6875389974302379e-14 0 1 +1 3.1415926535895533 -4.4408920985006262e-16 3.9665661790631732e-15 1 +1 3.1415926535895533 -7.1054273576010019e-15 3.9665661790631638e-15 1 +1 0 -1.2434497875801753e-14 0 1 +1 -5.212388980385124 4.0372574473644418 1 1.1308638867424278e-15 +1 8.3539816339744846 5.387520513321598 -1 0 +1 -2.0707963267953309 4.0372574473644427 1 1.4135798584280347e-15 +1 5.8407075111029325 5.3875205133215962 -1 5.6543194337129189e-16 +1 0.62831853071856703 3.1415926535916783 -8.1810427436905844e-15 1 +1 3.1415926535901191 3.1415926535916774 -8.4289531298630183e-15 1 +1 3.7699111843083593 3.1415926535916747 -7.933132357518111e-15 1 +1 0 3.1415926535916747 0 1 +1 3.141592653588773 -4.000000330961484e-10 0 1 +1 3.141592653588773 -4.000000330961484e-10 0 1 +1 -2.0707963267938774 1.3999999996000021 1 0 +1 -2.0707963267938774 3.1415926535897851 1 1.27222187258582e-15 +1 0 -4.000000330961484e-10 0 1 +1 6.2831853071795862 -4.000000330961484e-10 0 1 +1 -2.0707963267938774 -1.4000000003999986 1 0 +1 -2.0707963267938774 3.1415926535897913 1 2.8271597168573775e-16 +1 -2.0707963267948974 1.3999999996000021 1 0 +1 -5.21238898038367 3.1415926535897816 1 8.4814791505721329e-16 +1 -2.0707963267948974 -1.4000000003999986 1 0 +1 -5.21238898038367 3.1415926535897882 1 -1.413579858428689e-16 +1 -2.0707963267948974 -8.6000000000000014 1 0 +2 0 -8 1 0 -0 1 6 +1 -2.0707963267957745 -8.6000000000000014 1 0 +2 0 -8 1 0 -0 1 6 +1 0 0 0 1 +1 3.1415926535907834 -3.9968028886505635e-15 -2.1222884816716267e-14 1 +1 3.1415926535907834 -5.3290705182007514e-15 -2.1222884816716336e-14 1 +1 0 0 0 1 +1 -5.2123889803850352 4.1041434014810809 1 -1.4135798584280742e-15 +1 8.3539816339744828 5.3206345592338549 -1 -1.130863886742708e-15 +1 -2.0707963267952421 4.1041434014810712 1 0 +1 5.8407075111029325 5.3206345592338469 -1 2.8271597168564594e-16 +1 0.62831853071915222 3.1415926535933605 -2.5490530132469862e-14 1 +1 3.1415926535907031 3.1415926535933614 -2.5375188367164592e-14 1 +1 3.769911184308945 3.1415926535933596 -2.5375188367164545e-14 1 +1 0 3.1415926535933543 0 1 +1 3.1415926535906502 -8.9706020389712648e-13 2.1222884816716485e-14 1 +1 0 -8.9706020389712648e-13 0 1 +1 0 -9.0194518520547717e-13 0 1 +1 3.1415926535906511 -9.0194518520547717e-13 2.0761517755483458e-14 1 +1 -5.2123889803850352 2.1790419056985151 1 0 +1 8.3539816339744846 0.96255074794575468 -1 -2.2970672699461253e-15 +1 -2.0707963267952425 2.1790419056985151 1 0 +1 5.8407075111029325 0.96255074794573425 -1 7.0678992921411498e-16 +1 0.62831853071899235 -3.1415926535897931 2.5490530132469855e-14 1 +1 3.1415926535905436 -3.1415926535897931 2.5375188367164454e-14 1 +1 -3.5840704496664477 0 1 0 +1 7.3539816339744828 -2.1255437352999991 -1 0 +1 3.7699111843087851 -3.1415926535897931 2.5375188367164498e-14 1 +1 0 -3.1415926535897931 0 1 +1 -1.0707963267940186 0 1 0 +1 7.3539816339736053 -2.1255437352999991 -1 0 +1 -2.0707963267957745 -16 1 0 +2 0 -6 1 0 -0 1 6 +1 -2.0707963267948983 -16 1 0 +2 0 -6 1 0 -0 1 6 +1 -2.0707963267953371 5.9396969619670079 1 -2.2617277734848504e-15 +2 -1.5503856378e-16 1.16278922835e-16 1 0 -0 1 4.2000000000000002 +1 -4.1651914291880141 5.9396969619669973 1 2.8271597168564594e-16 +2 -1.5503856378e-16 1.16278922835e-16 1 0 -0 1 4.2000000000000002 +1 1.0471975511965155 7.2124891681017385 -9.4205547521057257e-15 1 +1 3.1415926535896332 7.2124891681017349 -9.0716453168425573e-15 1 +1 4.1887902047863088 7.2124891681017402 -9.071645316842551e-15 1 +1 0 7.212489168101742 0 1 +1 8.3539816339749233 5.9396969619670124 -1 -3.1098756885416703e-15 +2 0 -6.0000000000000009 1 0 -0 1 4.2000000000000002 +1 10.448376736367599 5.9396969619670035 -1 -2.8271597168564594e-16 +2 0 -6.0000000000000009 1 0 -0 1 4.2000000000000002 +1 3.1415926535906706 0 0 1 +1 3.1415926535906706 0 0 1 +1 -5.2123889803855672 -5.25 1 0 +2 0 6 1 0 -0 1 6 +1 -2.0707963267948974 13.499999999999826 1 0 +1 -5.2123889803846906 13.500000000000428 1 0 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 0 -1.5 0 1 +1 6.2831853071795862 -1.5 0 1 +8 -3.75 3.0179491924300001 +1 3.1415926535906706 17.250000000000323 0 1 +8 -3.75 3.0179491924300001 +1 3.1415926535906706 17.250000000000323 0 1 +8 -3.75 3.0179491924300001 +1 6.2831853071795862 17.250000000000426 0 1 +8 -3.75 3.0179491924300001 +1 0 17.250000000000426 0 1 +1 3.1415926535906706 -1.5 0 1 +1 3.1415926535906706 -1.5 0 1 +1 6.2831853071804877 17.249999999999826 0 1 +1 9.0283336362511247e-13 17.249999999999826 0 1 +1 3.1415926535907635 17.24999999999995 0 1 +1 3.1415926535907635 17.24999999999995 0 1 +1 -5.2123889803855672 1.5179491924300001 1 0 +1 -5.2123889803855672 3.1415926535897944 1 -2.8271597168556706e-16 +1 -2.0707963267948974 20.267949192429651 1 0 +1 -5.2123889803846906 20.267949192430255 1 0 +1 -2.0707963267948974 26.200000000000003 1 0 +1 10.448376736367599 8.4852813742385749 -1 -5.6543194337129189e-16 +1 1.0707963267948957 -5.25 1 0 +2 0 6 1 0 -0 1 6 +1 -2.0707963267948974 13.499999999999826 1 0 +1 1.0707963267948959 13.500000000000428 1 0 +1 1.0707963267948957 1.5179491924300001 1 0 +1 -1.442477796076939 3.1415926535897922 1 1.4135798584282297e-16 +1 -2.0707963267948974 20.267949192429651 1 0 +1 1.0707963267948959 20.267949192430255 1 0 +1 -2.0707963267957745 26.200000000000003 1 0 +1 8.3539816339753603 8.485281374238582 -1 -3.3925916602268045e-15 +1 6.2831853071795862 7.2124891681017482 0 1 +1 2.0943951023932774 7.2124891681017429 9.4205547521057462e-15 1 +1 3.1415926535899539 7.2124891681017376 9.4205547521057383e-15 1 +1 5.2359877559830705 7.2124891681017429 9.0716453168425636e-15 1 +1 5.235987755983027 11.172287142744034 1.2560739669429835e-14 1 +1 3.1415926535899099 11.172287142743958 7.8504622933936478e-15 1 +1 10.448376736367599 11.313708498984772 -1 -1.6962958301138752e-15 +1 -2.070796326794897 -8.7999999999992795 1 -1.0630120535379544e-13 +1 6.2831853071796067 -1.2000000000000006 -1 0 +1 12.566370614359194 -1.2000000000000006 -1 0 +1 2.0943951023932339 11.172287142743796 9.4205547520723774e-15 1 +1 6.2831853071795862 11.172287142743869 0 1 +1 8.3539816339742643 11.31370849898466 -1 2.7706165225195238e-14 +1 -2.0707963267946776 -8.8000000000000007 1 0 +1 6.2831853071796058 -1.2000000000000006 -1 0 +1 6.2831853071796058 -1.2000000000000006 -1 0 +1 -2.0707963267946776 -15.800000000000001 1 0 +1 -2.0707963267946781 11.31370849898466 1 2.7706165225195228e-14 +1 6.2831853071795862 5.8000000000000025 -1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 1.0707963267948959 -10.000000000000004 0 -1 +1 3.1415926535895737 -12.300000000000001 0 1 +1 3.1415926535895737 -12.300000000000001 0 1 +1 1.070796326795115 2.3000000000000007 0 -1 +1 1.0707963267951155 2.3000000000000007 0 -1 +1 6.2831853071795862 5.8000000000000025 -1 0 +1 0 -12.300000000000001 0 1 +1 6.2831853071795862 -12.300000000000001 0 1 +1 4.2123889803849082 2.3000000000000007 0 -1 +1 4.2123889803849082 2.3000000000000007 0 -1 +1 -2.0707963267948974 -15.800000000000001 1 0 +1 -4.1651914291880141 11.313708498985278 1 -7.6333312355124377e-14 +1 12.566370614359172 5.8000000000000025 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 4.2123889803846888 -10.000000000000007 0 -1 +1 6.2831853071795862 5.8000000000000025 -1 0 +1 1.0471975511965592 11.172287142744036 -1.1775693440090618e-14 1 +1 3.1415926535896759 11.17228714274396 -6.2803698347149175e-15 1 +1 4.1887902047863523 11.172287142743798 -1.2560739669429835e-14 1 +1 0 11.172287142743873 0 1 +1 6.2831853071796067 -1.2000000000000006 -1 0 +1 12.566370614359194 -1.2000000000000006 -1 0 +1 6.2831853071796058 -1.2000000000000006 -1 0 +1 6.2831853071796058 -1.2000000000000006 -1 0 +1 6.2831853071795862 5.8000000000000025 -1 0 +1 1.0707963267948966 -10.000000000000004 0 -1 +1 6.2831853071795862 5.8000000000000025 -1 0 +1 12.566370614359172 5.8000000000000025 -1 0 +1 4.2123889803846879 -10.000000000000007 0 -1 +1 6.2831853071795862 5.8000000000000025 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 -6 1 0 +2 0 0 1 0 -0 1 23 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -6 1 0 +2 0 0 1 0 -0 1 23 +1 0 -1.4100000000099999 1 0 +2 0 0 1 0 -0 1 21.399999999999999 +1 -2.0707963267948974 -0.050000000749593709 1 0 +1 -2.0707963267948966 -0.050000000749593709 1 0 +1 0 -1.4100000000099999 1 0 +2 0 0 1 0 -0 1 21.399999999999999 +1 4.2123889803846897 -0.050000000749593709 1 0 +1 -2.0707963267948974 -0.050000000749593709 1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 1.0707963267949112 1.3599999992609098 0 1 +1 0 0.18999999999000017 1 0 +2 0 0 1 0 -0 1 21.399999999999999 +8 3.1415926535897931 5.2123889803824301 +1 -2.0707963267926375 1.54999999925 1 0 +2 0 -8.8000000000000007 1 0 -0 1 21.399999999999999 +1 3.1415926535875336 -7.5000006205527825e-10 0 1 +1 3.1415926535875336 -7.5000006205527825e-10 0 1 +1 5.212388980382439 -1.3600000000097872 0 1 +8 5.2123889803824301 6.2831853071795916 +1 -2.0707963267948974 1.54999999925 1 0 +2 0 -8.8000000000000007 1 0 -0 1 21.399999999999999 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 4.2123889803846835 1.3599999992605714 0 1 +1 0 0.18999999999000017 1 0 +2 0 0 1 0 -0 1 21.399999999999999 +8 0 2.0707963267926339 +1 4.2123889803846941 1.54999999925 1 0 +2 0 -8.8000000000000007 1 0 -0 1 21.399999999999999 +1 0 -7.5000006205527825e-10 0 1 +1 6.2831853071795862 -7.5000006205527825e-10 0 1 +1 2.0707963267926246 -1.3600000000100199 0 1 +8 2.0707963267926375 3.1415926535897931 +1 -2.0707963267926375 1.54999999925 1 0 +2 0 -8.8000000000000007 1 0 -0 1 21.399999999999999 +1 0 -1.5 1 0 +2 0 0 1 0 -0 1 11.5 +2 0 -8.8000000000000007 1 0 -0 1 11.5 +1 0 -1.5 1 0 +2 0 0 1 0 -0 1 11.5 +2 0 -8.8000000000000007 1 0 -0 1 11.5 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 1.4999999999999996 1 0 +2 0 0 1 0 -0 1 11.5 +1 0 1.4999999999999996 1 0 +2 0 0 1 0 -0 1 11.5 +1 -2.0707963267926375 -1.5500000007500001 1 0 +2 0 -21.399999999999999 1 0 -0 1 21.399999999999999 +2 0 -8.8000000000000007 1 -5.5511151231299994e-17 5.5511151231299994e-17 1 21.399999999999999 +1 -2.0707963267948974 -1.5500000007500001 1 0 +2 0 -21.399999999999999 1 0 -0 1 21.399999999999999 +2 0 -8.8000000000000007 1 -5.5511151231299994e-17 5.5511151231299994e-17 1 21.399999999999999 +1 -5.2123889803847101 4.7123889803847012 1 -1.6962958301138649e-15 +2 -9.9045007336499992e-16 -21.399999999999995 1 0 -0 1 9.4000000000000004 +1 -5.2123889803846906 1.5707963267948966 1 0 +2 0 -8.7999999999999972 1 -5.5511151231299994e-17 5.5511151231299994e-17 1 9.3999999999999986 +1 -2.0707963267949174 4.7123889803846959 1 -1.6962958301138649e-15 +2 -9.9045007336499992e-16 -21.399999999999995 1 0 -0 1 9.4000000000000004 +8 2.0707963267967844 5.2123889803850467 +1 -2.0707963267967844 1.5707963267949072 1 -3.7459866248343832e-15 +2 0 -8.7999999999999972 1 -5.5511151231299994e-17 5.5511151231299994e-17 1 9.3999999999999986 +1 0 0 0 1 +1 3.1415926535898175 -4.4408920985006262e-16 -8.4814791505633183e-16 1 +1 -5.2123889803847332 3.1415926535897962 1 -5.6543194337128439e-16 +1 -2.0707963267948979 -0.95000000075000013 1 0 +1 3.1415926535898167 -3.1086244689504383e-15 -8.4814791505633667e-16 1 +1 0 0 0 1 +1 -2.0707963267949396 3.1415926535897949 1 -8.4814791505692634e-16 +1 -2.0707963267949396 -0.95000000075000013 1 0 +1 0 -7.5000006205527825e-10 0 1 +1 6.2831853071795862 -7.5000006205527825e-10 0 1 +1 3.1415926535898357 -7.5000006205527825e-10 0 1 +1 3.1415926535898357 -7.5000006205527825e-10 0 1 +1 -2.0707963267949401 1.2499999992499997 1 0 +1 -2.0707963267949401 3.1415926535897953 1 -9.8950590089974727e-16 +1 -2.0707963267948974 1.2499999992499997 1 0 +1 -5.2123889803847332 3.1415926535898029 1 -1.8376538159566732e-15 +1 0 4.1922021409845911e-12 0 1 +1 3.1415926535900773 4.1922021409845911e-12 6.5024673487872161e-15 1 +1 3.1415926535900773 4.1922021409845911e-12 6.5024673487872201e-15 1 +1 0 4.1922021409845911e-12 0 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 -6 1 0 +2 0 0 1 0 -0 1 17 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -6 1 0 +2 0 0 1 0 -0 1 17 +1 0 -1.4100000000099999 1 0 +2 0 0 1 0 -0 1 15.4 +1 -2.0707963267948974 -0.050000000749600579 1 0 +1 -2.0707963267948974 -0.050000000749600579 1 0 +1 0 -1.4100000000099999 1 0 +2 0 0 1 0 -0 1 15.4 +1 4.2123889803846888 -0.050000000749600579 1 0 +1 -2.0707963267948974 -0.050000000749600579 1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 1.0707963267949336 1.3599999992611593 0 1 +1 1.0707963267948986 1.3599999992606335 0 1 +1 0 0.18999999999000017 1 0 +2 0 0 1 0 -0 1 15.4 +8 3.1415926535897931 5.2123889803847856 +1 -2.0707963267949929 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +1 3.1415926535898886 -7.5000006205527825e-10 0 1 +1 3.1415926535898886 -7.5000006205527825e-10 0 1 +1 5.2123889803847723 -1.3600000000095234 0 1 +8 5.2123889803847856 6.2831853071796111 +1 -2.0707963267948983 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 4.2123889803846613 1.3599999992608418 0 1 +1 4.2123889803846977 1.3599999992603236 0 1 +1 0 0.18999999999000017 1 0 +2 0 0 1 0 -0 1 15.4 +8 0 2.070796326794957 +1 4.2123889803847128 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +1 0 -7.5000006205527825e-10 0 1 +1 6.2831853071795862 -7.5000006205527825e-10 0 1 +1 2.0707963267949907 -1.3600000000096868 0 1 +8 2.0707963267949929 3.1415926535897931 +1 -2.0707963267949929 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +1 6.2831853071795862 1.5 -1 0 +2 0 0 1 0 -0 1 9.5 +2 0 -6.5999999999999996 1 0 -0 1 9.5 +2 0 -6.5999999999999996 1 0 -0 1 9.5 +1 6.2831853071795862 1.5 -1 0 +2 0 0 1 0 -0 1 9.5 +2 0 -6.5999999999999996 1 0 -0 1 9.5 +2 0 -6.5999999999999996 1 0 -0 1 9.5 +1 -3.1415926535897931 -1.4999999999999996 1 0 +2 0 0 -1 0 -0 -1 9.5 +1 3.1415926535897931 0 0 1 +1 3.1415926535897927 0 0 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535897931 -1.4999999999999996 1 0 +2 0 0 -1 0 -0 -1 9.5 +1 -2.0707963267948974 -0.050000000749082195 1 0 +1 -2.0707963267948974 -0.050000000749082195 1 0 +1 4.2123889803846888 -0.050000000749082195 1 0 +1 -2.0707963267948974 -0.050000000749082195 1 0 +8 3.1415926535897931 5.2123889803847856 +1 -2.0707963267949929 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +1 5.2123889803847625 -1.3600000000100279 0 1 +8 5.2123889803847856 6.2831853071795551 +1 -2.0707963267948983 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +8 0 2.0707963267949854 +1 4.2123889803846568 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +1 2.0707963267950014 -1.3600000000101922 0 1 +8 2.0707963267949929 3.1415926535897931 +1 -2.0707963267949929 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +1 -2.0707963267949929 -1.5500000007500001 1 0 +2 0 -15.4 1 0 -0 1 15.4 +2 -73 -26.799999999999997 1 -5.5511151231299994e-17 5.5511151231299994e-17 1 15.399999999999999 +2 -73 15.199999999999999 1 -5.5511151231299994e-17 5.5511151231299994e-17 1 15.399999999999999 +1 -2.0707963267948983 -1.5500000007500001 1 0 +2 0 -15.4 1 0 -0 1 15.4 +2 -73 -26.799999999999997 1 -5.5511151231299994e-17 5.5511151231299994e-17 1 15.399999999999999 +2 -73 15.199999999999999 1 -5.5511151231299994e-17 5.5511151231299994e-17 1 15.399999999999999 +1 -3.1415926535897931 1.5707963267948994 1 0 +2 -73 -26.800000000000001 1 0 -0 1 7.3999999999999986 +2 0 -15.400000000000004 1 5.5511151231299994e-17 -5.5511151231299994e-17 1 7.4000000000000004 +1 0 1.5707963267948994 1 0 +2 -73 -26.800000000000001 1 0 -0 1 7.3999999999999986 +2 0 -15.400000000000004 1 5.5511151231299994e-17 -5.5511151231299994e-17 1 7.4000000000000004 +1 -5.2123889803847039 4.7123889803847012 1 -1.6962958301138694e-15 +2 -6.3307413543499999e-16 -15.400000000000002 1 0 -0 1 7.2000000000000002 +1 -2.0707963267949099 4.7123889803846764 1 3.3925916602277365e-15 +2 -6.3307413543499999e-16 -15.400000000000002 1 0 -0 1 7.2000000000000002 +1 0 0 0 1 +1 3.1415926535898109 -4.4408920985006262e-16 -8.4814791505758879e-16 1 +1 -5.2123889803847332 3.1415926535897962 1 -5.65431943371284e-16 +1 -2.0707963267948974 -0.95000000075000013 1 0 +1 3.14159265358981 -1.3322676295501878e-15 -8.4814791505759076e-16 1 +1 0 0 0 1 +1 -2.0707963267949392 3.1415926535897944 1 -5.65431943371284e-16 +1 -2.0707963267949392 -0.95000000075000013 1 0 +1 0 -7.5000006205527825e-10 0 1 +1 6.2831853071795862 -7.5000006205527825e-10 0 1 +1 3.1415926535898357 -7.5000006205527825e-10 0 1 +1 3.1415926535898357 -7.5000006205527825e-10 0 1 +1 -2.0707963267949401 1.2499999992499997 1 0 +1 -2.0707963267949401 3.1415926535897971 1 -1.8376538159566736e-15 +1 -2.0707963267948974 1.2499999992499997 1 0 +1 -5.2123889803847332 3.1415926535898042 1 -2.1203697876423155e-15 +1 0 8.8491436400772727e-12 0 1 +1 3.1415926535901511 8.8522522645462232e-12 1.0743206924115134e-14 1 +1 3.1415926535901506 8.8551388444102486e-12 1.0743206924115152e-14 1 +1 0 8.8522522645462232e-12 0 1 +1 0 1.5707963267948994 1 0 +2 -73 15.199999999999999 1 0 -0 1 7.3999999999999986 +2 0 -15.400000000000004 1 5.5511151231299994e-17 -5.5511151231299994e-17 1 7.4000000000000004 +1 -3.1415926535897931 1.5707963267948994 1 0 +2 -73 15.199999999999999 1 0 -0 1 7.3999999999999986 +2 0 -15.400000000000004 1 5.5511151231299994e-17 -5.5511151231299994e-17 1 7.4000000000000004 +1 6.7831853071795862 -2.0471392214055937e-15 -1 3.9274490624344521e-16 +2 0 0 1 0 -0 1 10.589384154299999 +1 6.7831853071797985 8.1329470921634783e-16 -1 -3.9274490624339236e-16 +2 0 0 1 0 -0 1 10.589384154299999 +1 -2.070796326794897 -9.5 1 0 +2 0 0 1 0 -0 1 8.7999999999999972 +1 -2.0707963267929452 -9.5 1 0 +2 0 0 1 0 -0 1 8.7999999999999972 +7 0 0 1 2 2 0.78539063586838642 2 0 2 + 24.756193660499999 2 49.5123873211 2 +7 0 0 5 6 2 -77.420310216800004 -35.920310216799997 -80.863544493899994 -32.477075939700001 -83.630701301599998 -28.3577641933 -85.543882073600003 -23.738937226099999 -86.5 -18.8694686131 -86.5 -14 + 24.756193660499999 6 49.5123873211 6 +1 -3.5548453070077812e-11 0 1 0 +7 0 0 5 6 2 -77.365502634999999 -35.974981103600001 -77.376477798099998 -35.9640606185 -77.3874461435 -35.953133281600003 -77.398407665500002 -35.9421990986 -77.409362358500005 -35.931258075000002 -77.420310216800004 -35.920310216799997 + 24.677480660699999 6 24.756193660499999 6 +1 -1.9456542001790292e-15 0 1 0 +7 0 0 5 6 2 -55.5 -45 -60.353986003400003 -45 -65.207972006899993 -44.049952414499998 -69.813699537000005 -42.148921308600002 -73.924655812099999 -39.3986856868 -77.365502634999999 -35.974981103600001 + 0 6 24.677480660699999 6 +7 0 0 5 6 2 53.5 -45 31.699999999999999 -45 9.9000000000000004 -45 -11.9 -45 -33.700000000000003 -45 -55.5 -45 + 0 6 109 6 +7 0 0 1 2 2 1.5707887992667127 2 7.5275281845383937e-06 2 + 0 2 52.706734890200003 2 +7 0 0 5 9 3 86.5 -12 86.5 -17.183627878399999 85.482197046099998 -22.367255756799999 83.445585256499996 -27.284071560600001 77.554219149700003 -36.054219149700003 68.784071560599997 -41.945585256500003 63.867255756799999 -43.982197046099998 58.683627878400003 -45 53.5 -45 + 0 6 26.353367445100002 3 52.706734890200003 6 +1 86.5 -6.9992591740399996 0 -1 +7 0 0 1 2 2 1.082111757038257 2 0 2 + 0 2 28.834167653600002 2 +7 0 0 5 6 2 72.706232063000002 20.958205170700001 77.674548047100004 18.3165126335 81.929282422 14.331497071999999 84.978940591300002 9.2560050281099997 86.500015347200005 3.6284438144700002 86.5 -1.99851834808 + 0 6 28.834167653600002 6 +7 0 0 5 6 2 47.082969087899997 34.5823357644 52.207621682899997 31.857509645699999 57.332274278 29.132683526899999 62.456926873 26.407857408200002 67.581579468000001 23.683031289399999 72.706232063000002 20.958205170700001 + 0 6 29.0201402464 6 +7 0 0 5 6 2 0 0 5.804028049259415 0 11.608056098654064 0 17.412084147913465 0 23.216112197219825 0 29.020140246479233 0 + 0 6 29.0201402464 6 +7 0 0 1 2 2 0.28847929844518111 2 0 2 + 17.907681323311699 2 43.710801788600001 2 +7 0 0 5 6 2 23.0000015518 43.222180868400002 28.032290530600001 42.200987762300002 32.990839903000001 40.816879762500001 37.840922780699998 39.076902099599998 42.549049793400002 36.9930634157 47.082969087899997 34.5823357644 + 17.9076813233 6 43.710801788600001 6 +1 -5.1756889450789954e-18 0 1 0 +7 0 0 5 6 2 5.2999999999999998 45 8.8637397867299992 45 12.4276487353 44.821590245800003 15.9795444001 44.464822848399997 19.507531426700002 43.930901378999998 23.0000015518 43.222180868400002 + 0 6 17.9076813233 6 +7 0 0 5 6 2 -29.5 45 -22.539999999999999 45 -15.58 45 -8.6199999999999992 45 -1.6599999999999999 45 5.2999999999999998 45 + 0 6 34.799999999999997 6 +1 6.1072783247598822e-16 0 1 0 +7 0 0 5 9 3 -86.5 -12 -86.5 -3.04646093727 -84.741976716099998 5.90707812546 -81.224192715800001 14.3997599683 -71.048196713199999 29.548196713199999 -55.899759968300003 39.724192715800001 -47.4070781255 43.241976716099998 -38.453539062700003 45 -29.5 45 + 0 6 45.519452859700003 3 91.038905719400006 6 +1 -86.5 -13 0 1 +1 -84.5 -13 0 -1 +1 -1.5707963267948966 7 1 0 +2 -29.5 -12 1 0 -0 1 55 +1 -12.1 43 1 0 +1 -1.0821041362360615 7 1 0 +2 5.2999999999999998 -44 1 0 -0 1 87 +1 58.955657449900002 26.004375281800002 0.8829475928588979 -0.46947156278594571 +1 14.51007012321894 0 1 0 +1 -6.2831825797266694 7 1 0 +2 60.5 -1.9984474343 1 0 -0 1 24 +1 84.5 -6.9992564465899996 0 -1 +1 -4.7123889803846897 7 1 0 +2 53.5 -12 1 0 -0 1 31 +1 -1 -43 1 0 +1 -3.1415926535897931 7 1 0 +2 -55.5 -14 1 0 -0 1 29 +1 -2.0707963267948974 3 1 0 +2 0 -8.8000000000000007 1 0 -0 1 23 +1 -2.0707963267945773 3 1 0 +2 0 -8.8000000000000007 1 0 -0 1 23 +1 0 -9.75 0 1 +1 6.2831853071795862 -9.75 0 1 +1 3.1415926535900205 -9.75 0 1 +1 3.1415926535900205 -9.75 0 1 +1 -2.0707963267929452 2.3999999999999986 1 0 +1 -2.0707963267929452 3.1415926535897811 1 2.2617277734850035e-15 +1 -2.070796326794897 2.3999999999999986 1 0 +1 -5.2123889803849179 3.1415926535897953 1 -4.2407395752873262e-16 +1 0 -1.7097434579227411e-11 0 1 +1 3.1415926535915513 -1.7097434579227411e-11 8.1987631787945035e-14 1 +1 3.1415926535901266 -6.0973448512413597e-11 1.5266662470432296e-14 1 +1 0 -6.0973448512413597e-11 0 1 +1 0 -1.5707963267948937 0 1 +1 3.141592653589794 -1.5707963267948937 0 1 +1 3.1415926535897931 -3.1415926535897905 0 1 +1 0 -3.1415926535897905 0 1 +1 0 3.1415926535897931 1 -4.2407395752846889e-16 +1 0 -30.100000000000001 1 0 +1 -3.1415926535897931 3.1415926535897962 1 -9.8950590089976048e-16 +1 0 -30.100000000000001 1 0 +1 -3.1415926535897931 0.35000000000000142 1 0 +2 -73 -26.800000000000001 1 0 -0 1 17 +1 -90 -5.7999999999999998 0 -1 +1 -56 -5.7999999999999998 0 1 +1 0 0.35000000000000142 1 0 +2 -73 15.199999999999999 1 0 -0 1 17 +1 0 -1.5707963267948937 0 1 +1 3.1415926535897931 -1.5707963267948937 0 1 +1 3.1415926535897931 -3.1415926535897905 0 1 +1 0 -3.1415926535897905 0 1 +1 0 3.1415926535897931 1 -4.2407395752846889e-16 +1 0 -30.100000000000001 1 0 +1 -3.1415926535897931 3.1415926535897793 1 2.1203697876423446e-15 +1 0 -30.100000000000001 1 0 +1 3.1415926535903567 -4.0515146793040913e-11 -7.0678992919588478e-15 1 +1 0 -4.0515146793040913e-11 0 1 +1 -2.0707963267942446 6.2831853071795862 1 0 +1 -2.0707963267942446 2.8000000000000007 1 0 +1 0 -4.0522252220398514e-11 0 1 +1 3.1415926535903562 -4.0522252220398514e-11 -7.0678992919588162e-15 1 +1 -2.0707963267954272 4.7123889803846897 1 0 +1 -2.0707963267954272 4.7123889803846897 1 0 +1 -5.2123889803840378 6.2831853071795862 1 0 +1 -2.070796326794897 2.8000000000000007 1 0 +1 -5.2123889803852199 4.7123889803846897 1 0 +1 -5.2123889803852199 4.7123889803846897 1 0 +1 3.1415926535894734 2.6499999999999986 0 1 +1 3.1415926535894734 2.6499999999999986 0 1 +1 0 2.6499999999999986 0 1 +1 6.2831853071795862 2.6499999999999986 0 1 +1 -2.0707963267945773 2.8000000000000007 1 0 +1 -2.0707963267945773 3.1415926535897953 1 -2.5444437451710733e-15 +1 -2.0707963267948974 2.8000000000000007 1 0 +1 -5.2123889803843699 3.1415926535897563 1 3.9580236035994474e-15 +1 3.1415926535903576 -8.4376949871511897e-15 -7.3506152640163808e-15 1 +1 0 0 0 1 +1 0 0 0 1 +1 3.141592653590358 -2.2204460492503131e-15 -7.350615264016376e-15 1 +1 -1.5707963267948966 21 1 0 +1 0 7.8539816339744828 0 -1 +1 0 0 0 1 +1 -1.5707963267948966 -21 1 0 +1 3.1415926535897927 7.8539816339744828 0 -1 +1 1.5707963267948966 0 0 1 +1 0 0 0 1 +1 -3.1415926535897931 6.2831853071795862 1 0 +1 -3.1415926535897931 -25.199999999999999 1 0 +1 0 3.1415926535897931 0 1 +1 3.1415926535897931 21 -1 0 +1 -3.1415926535897931 4.7123889803846968 1 -2.2617277734851679e-15 +1 -3.1415926535897931 4.7123889803846826 1 2.2617277734851679e-15 +1 0 0 0 1 +1 -4.7123889803846897 -21 1 0 +1 3.1415926535897936 10.995574287564276 0 -1 +1 1.5707963267948966 0 0 1 +1 0 0 0 1 +1 0 6.2831853071795862 1 0 +1 0 -25.199999999999999 1 0 +1 0 4.7123889803846897 1 0 +1 0 4.7123889803846968 1 -2.2617277734851668e-15 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 0 0.15000000000000213 1 0 +1 0 3.1415926535897931 1 -2.9685177026992816e-15 +1 1.5707963267948966 0 0 1 +1 3.1415926535897931 0.25 0 -1 +1 0 0 0 1 +1 -3.1415926535897931 0.15000000000000213 1 0 +1 -3.1415926535897931 3.1415926535897865 1 2.8271597168564599e-16 +1 1.5707963267948966 0 0 1 +1 3.1415926535897931 3.14159265358979 0 1 +1 1.5707963267948966 -21 -1 0 +1 0 3.1415926535897918 0 1 +1 1.5707963267948966 21 -1 0 +1 0 -21 1 0 +1 3.1415926535897944 4.7123889803846897 0 -1 +1 0 3.1415926535897931 0 1 +1 1.5707963267948966 21 -1 0 +1 -1.9456542001790292e-15 10.5 0 1 +1 24.756193660500109 10.5 1.0658140967123561e-14 1 +1 0.78539063586838642 -8.5 0 -1 +7 0 0 1 2 2 -1.9456542001790292e-15 1.0000000065000023 24.756193660500006 1.0000000065000307 + 0 2 34.431854355099993 2 +7 0 0 4 5 2 3914.9876571984391 6588.9357458108316 3919.5369442992082 6592.9795689334778 3923.0306047493782 6598.2204543072085 3924.9814343375106 6604.2088212173994 3925.3388513440896 6610.2850677279075 + 0 5 34.4318543551 5 +1 0 -0.60000000000000142 1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0.60000000000000142 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 9.5 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 -0.60000000000000142 1 0 +1 0 0.60000000000000142 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 9.5 +1 0 7.2999999999999972 1 0 +1 0 7.2999999999999972 1 0 +1 0 -18.600000000000001 0 -1 +1 3.1415926535897931 -18.600000000000001 0 -1 +1 -22 -1.00000000006 -1.69176841848e-16 -1 +1 1.5707963267948957 -4.3500000000000014 -1 0 +2 11.159670332199999 -26 1 0 -0 1 7.0000000000000018 +1 -2.0707963267942446 16 1 0 +2 33 -4 1 0 -0 1 24 +1 4.2123889803846888 16 1 0 +2 33 -4 1 0 -0 1 24 +1 5.1559577935007024 -4.3500000000000014 -1 0 +2 19.6958653043 24 1 0 -0 1 7 +1 43.64579944103 0 1 0 +1 2.1868953314300001 17 1 0 +1 4.7123889803846888 -4.3500000000000014 -1 0 +2 -15.3220746415 24 1 0 -0 1 7 +1 0 -12 1 0 +2 -40 20 1 0 -0 1 18 +1 -3.1415926535897931 -12 1 0 +2 -40 -22 1 0 -0 1 18 +1 2.9809020006378435 -4.3500000000000014 -1 0 +2 -15.3220746415 -26 1 0 -0 1 7 +1 30.62229804507 0 1 0 +1 -2.0812021546700001 -19 -1 0 +1 0 -18.600000000000001 0 -1 +1 3.1415926535897931 -18.600000000000001 0 -1 +1 1.5707963267948959 0.39999999999999858 0 -1 +1 0 0.39999999999999858 0 -1 +1 0 -1 0 1 +1 0 -11.5 0 1 +1 -3.1415926535897931 -6.2000000000000028 1 0 +1 -3.1415926535897931 6.2831853071795862 1 0 +1 1.5707963267948977 0 0 1 +1 -4.7123889803846897 -6.2000000000000028 1 0 +1 -4.7123889803846897 6.2831853071795862 1 0 +1 1.5707963267948961 0.39999999999999858 0 -1 +1 0 13.000000000000014 0 1 +1 1.5707963267948966 6.9992564465900138 0 1 +1 0 0.39999999999999858 0 -1 +1 1.0821082118928551 0 0 1 +1 29.020140246437869 7 0 -1 +1 -6.2831825797266694 -6.2000000000000028 1 0 +1 -6.2831825797266694 6.2831853071795862 1 0 +1 1.5707963267948966 3.3530659001913872 0 1 +1 14.51007012321894 13.200000000000003 1 0 +1 0 0.39999999999999858 0 -1 +1 0 6.6000000000000014 0 1 +1 0.4886921905584744 0 0 1 +1 -1.0821041362360615 -6.2000000000000028 1 0 +1 -1.0821041362360615 6.2831853071795862 1 0 +1 1.5707963267948966 -12.100000000000001 0 1 +1 0 0.39999999999999858 0 -1 +1 -1.5707963267948966 -6.2000000000000028 1 0 +1 -1.5707963267948966 6.2831853071795862 1 0 +1 0.48869219055847424 1.9539925233402755e-14 3.533949646070618e-17 1 +1 -4.7123889803846897 5.3000000000000025 1 -5.6543194337129189e-16 +1 0 -6.9295680305003771e-11 0 1 +1 -4.7123889803846897 -11.157004223084414 1 4.5234555469703351e-15 +1 -1.0821041362367176 4.7123889803846541 1 3.2714276723620588e-14 +2 5.2999999999999998 -44 1 0 -0 1 86.200000000000003 +1 -4.7123889803846897 17.86313602339483 1 0 +1 1.08210839785271 6.8036243305868993e-11 -2.9596327173063112e-08 0.99999999999999956 +1 0 -7.1054273576010019e-15 0 1 +1 55.619498734399997 26.872186295799999 0.8829475928588979 -0.46947156278594571 +1 0 3.1415926535726557 0 1 +1 -1.5707963267933813 1.9985085292477582 0.99999999999903522 1.3890803147198231e-06 +1 -6.283182579726569 4.7123889803846195 1 9.0286369603148025e-15 +2 60.5 -1.9984474343 1 0 -0 1 23.200000000000003 +1 0 12.000000000000014 1 0 +1 1.570796326794897 4.7123889803846852 0 1 +1 0 0 0 1 +1 83.700000000000003 1.42108547152e-14 0 -1 +1 0 0 0 1 +1 6.2831853071795862 53.5 -1 0 +1 -4.7123889803846897 4.712388980384703 1 -2.8271597168564591e-15 +2 53.5 -12 1 0 -0 1 30.200000000000003 +1 -1.5707963267948966 -55.5 1 0 +1 1.5707963267948959 7.8539816339744828 -1.4135798584282337e-16 -1 +1 1.5707963267948966 0 0 1 +1 0 -42.200000000000003 1 0 +1 0 3.1415926535897976 0 1 +1 3.1415926535897931 14.000000000000012 -1 1.1308638867425838e-15 +1 -3.1415926535897931 4.7123889803846941 1 0 +2 -55.5 -14 1 0 -0 1 28.199999999999999 +1 -4.7123889803846897 12.000000000000014 1 0 +1 1.5707963267948954 10.995574287564276 1.4135798584282297e-16 -1 +1 1.5707963267948966 0 0 1 +1 -83.700000000000003 1.42108547152e-14 0 -1 +1 0 0 0 1 +1 -4.7123889803846897 -29.5 1 0 +1 -1.5707963267948966 4.7123889803846897 1 0 +2 -29.5 -12 1 0 -0 1 54.200000000000003 +1 0 0 0 1 +1 0 42.200000000000003 1 0 +1 1.4101056738434032 0 0 1 +1 0.16069065295212756 -16.350000000000001 0 -1 +1 0 0 0 1 +1 26.136829468099997 -4.3500000000000014 0 -1 +1 -4.7123889803846897 -8.4500000000000028 1 0 +1 -0.18145406132329089 9.8994949366116796 1 -2.5194662674586674e-15 +1 1.4101056738429469 0 0 1 +1 43.863170531900003 -4.3500000000000014 0 -1 +1 0 0 0 1 +1 2.9809020006376659 -16.350000000000001 0 -1 +1 -0.16069065295149287 -8.4500000000000028 1 0 +1 4.3702442661097365 9.8994949366116636 1 1.2597331337293282e-15 +1 3.1415926535891403 12.399999999999999 0 1 +1 3.1415926535891403 12.399999999999999 0 1 +1 6.2831853071795862 12.399999999999999 0 1 +1 0 12.399999999999999 0 1 +1 6.2267541202943493 12.399999999999999 0 1 +1 0 -0.75 0 -1 +1 -2.070796326794897 20.100000000000001 1 0 +1 -4.1651914291879963 33.941125496954292 1 -2.3030974016375585e-15 +1 0.44356881311601309 -6.3999999999999986 0 1 +1 61.154769413899999 2.0499999999999972 0 -1 +1 43.64579944103 4.1000000000000014 1 0 +1 119.36689533143 0 1 0 +1 -4.2688201672590118 -8.4500000000000028 1 0 +1 0.74538318215558874 9.8994949366116671 1 0 +1 0 -6.3999999999999986 0 1 +1 17.3814255582 2.0499999999999972 0 -1 +1 30.62229804507 4.1000000000000014 1 0 +1 119.26120215467 0 1 0 +1 1.8598365619409338 12.399999999999999 0 1 +1 0.78175609164126958 -0.75 0 -1 +1 -2.0707963267948974 20.100000000000001 1 0 +1 -4.1651914291880043 33.941125496954278 1 0 +1 -1.5707963267948966 -8.4500000000000028 1 0 +1 3.2743133833641362 9.8994949366116707 1 -4.5445295748724946e-15 +1 0.04001067435396103 -0.35000000000000142 0 1 +1 1.5307856524408725 -16 0 -1 +1 -3.1415926535897931 -12 1 0 +1 -3.1415926535897931 -7.8999999999999986 1 0 +1 -1.5707963267949041 25.455844122715707 1 1.2080397691164975e-15 +1 -1.5707963267948966 -4.3500000000000014 1 0 +1 0 0 0 1 +1 14.979991993599995 -4.3500000000000014 0 -1 +1 -1.5707963267948966 -8.4500000000000028 1 0 +1 2.8997986029673077 9.8994949366116742 1 -2.3208433350126737e-15 +1 0 -12 1 0 +1 3.1015819792358323 -0.35000000000000142 0 1 +1 0 -16 0 -1 +1 -1.1102230246251565e-16 -7.8999999999999986 1 0 +1 1.5707963267948966 25.45584412271571 1 0 +1 1.5307856524409176 0 0 1 +1 11.020008006400005 -4.3500000000000014 0 -1 +1 -3.1816033279438178 -4.3500000000000014 1 0 +1 -3.1816033279438178 -8.4500000000000028 1 0 +1 1.2889916018187035 9.8994949366116671 1 0 +1 19.434267906800002 0 1 0 +1 0 0.20000000000000284 0 1 +1 23.888543819999995 2.0499999999999972 0 -1 +1 19.434267906800002 4.1000000000000014 1 0 +1 186.61426790680002 0 1 0 +1 1.0194793576711694 0 0 1 +1 1.1948180779236377 -9.25 0 -1 +1 -4.7123889803846897 2.25 1 0 +1 -4.7123889803846897 -1.8500000000000014 1 0 +1 6.2693262104111263 5.6568542494923353 -1 8.7120785037670929e-15 +1 1.0194793576662553 0.20000000000000284 0 1 +1 2.1114561800000047 2.0499999999999972 0 -1 +1 6.5657320931999976 0 1 0 +1 6.5657320931999976 4.1000000000000014 1 0 +1 47.745732093200004 0 1 0 +1 0.09218413966255222 0 0 1 +1 0 -9.25 0 -1 +1 -2.4980915447987089 -11.5 1 0 +1 -2.4980915447987089 -7.3999999999999986 1 0 +1 -2.094395102395155 35.355339059327363 1 6.4440492089393225e-15 +1 -0.55131696912372774 2.25 1 0 +1 -0.55131696912372774 -1.8500000000000014 1 0 +1 2.1082541991584645 5.6568542494923948 -1 -1.0454494204520488e-14 +1 6.0413912565571337 9.3338095116624267 -1 4.6416866700253963e-15 +2 -64.979991993599995 -23 1 0 -0 1 6.6000000000000014 +1 -69.434267906800002 -16.399999999999999 -1 0 +1 186.61426790680002 0.56568542494923602 1 0 +1 -3.1554517503582504 6.2225396744416352 1 -4.3560392519497295e-15 +2 -73.888543819999995 -12 1 0 -0 1 4.4000000000000057 +1 -2.0943951023951546 35.921024484276664 1 -1.2888098417857644e-14 +2 -56 -0.99999999994099997 1 0 -0 1 25.399999999999999 +1 -1.0333384544313278 6.2225396744416086 1 5.2272471022403906e-15 +2 -73.888543819999995 10 1 0 -0 1 4.4000000000000057 +1 -69.434267906800002 14.4 1 0 +1 47.745732093200004 0.56568542494923602 1 0 +1 10.713769562588084 9.3338095116624213 -1 1.1604216675063745e-15 +2 -64.979991993599995 21 1 0 -0 1 6.6000000000000014 +1 1.5707963267948966 26.021529547664947 1 0 +2 -40 20 1 0 -0 1 18.399999999999999 +1 9.2433238994460787 9.3338095116624178 -1 2.519466267461389e-15 +2 -15.3220746415 24 1 0 -0 1 6.5999999999999996 +1 2.1868953314300001 17.399999999999999 1 0 +1 119.36689533143 0.56568542494923602 1 0 +1 10.170161142924968 9.3338095116624302 -1 0 +2 19.6958653043 24 1 0 -0 1 6.6000000000000014 +1 -4.1651914291879963 34.506810921903536 1 -2.3030974016357815e-15 +2 33 -4 1 0 -0 1 24.399999999999999 +1 -4.1651914291880043 34.506810921903522 1 0 +2 33 -4 1 0 -0 1 24.399999999999999 +1 6.4159060369539329 9.3338095116624231 -1 4.5445295748441745e-15 +2 11.159670332199999 -26 1 0 -0 1 6.5999999999999996 +1 -2.0812021546700001 -19.399999999999999 -1 0 +1 119.26120215467 0.56568542494923602 1 0 +1 7.5118369196995243 9.3338095116624302 -1 0 +2 -15.3220746415 -26 1 0 -0 1 6.5999999999999996 +1 -1.5707963267949041 26.021529547664947 1 0 +2 -40 -22 1 0 -0 1 18.399999999999999 +1 4.5516983274328577 25.73868683519559 -6.2803698342399443e-15 1 +1 4.530934919061969 9.6166522241275079 2.0411201961279885e-14 -1 +1 1.6108070011489577 25.738686835164795 -3.9252311466971685e-16 1 +1 6.0013805822033959 9.6166522241671046 3.454203409093465e-14 -1 +1 5.9410405929046277 9.6166522241370487 -1.5700924586837731e-15 1 +1 132.5020746415 0.28284271247461551 9.4205547520939717e-15 -1 +1 4.8451097101590328 9.6166522241370487 0 -1 +1 106.02032966780001 0.28284271247461551 0 1 +1 5.6268658018026683 9.6166522241028929 4.1607450152665894e-13 1 +1 -0.23455854045144608 34.223968209442354 -1.570092458591166e-14 -1 +1 5.0142033494178504 9.6166522241749703 6.6885938736221848e-13 1 +1 4.1323590179022194 34.223968209406124 -6.2803698343870669e-15 -1 +1 5.4577721625402784 9.6166522241370469 0 1 +1 136.87586530430002 0.28284271247461551 0 -1 +1 4.5309349190613997 9.6166522241370522 0 -1 +1 101.85792535850001 0.28284271247461551 0 1 +1 5.9410405929040522 9.6166522241275096 2.0411201961279949e-14 1 +1 1.7314869797467407 25.738686835195587 -7.4579391781599338e-15 -1 +1 4.6723783060306214 25.738686835164799 0 1 +1 4.4705949297622354 9.6166522241671011 -3.2971941632256214e-14 -1 +1 6.0013805822033923 9.6166522241370487 -1.5700924586837731e-15 1 +1 52.200008006400012 0.28284271247461423 0 -1 +1 0.53745787236356957 5.9396969619670026 -3.9252311467094828e-15 1 +1 43.291456180000011 0.28284271247461423 0 1 +1 1.5569372300266175 5.939696961967214 5.0870995662145623e-13 1 +1 0.49588058206479246 35.638181771781355 2.826166425674748e-14 1 +1 1.5985145203284739 35.638181771825067 3.6112126547924312e-14 1 +1 0.53745787236337583 5.9396969619671998 5.5502768411700627e-13 1 +1 1.5569372300264359 5.9396969619669919 -1.1775693440128262e-15 1 +1 191.06854382 0.28284271247461551 -2.5121479338883919e-14 1 +1 4.4705949297622043 9.6166522241370558 -1.5700924586837781e-15 -1 +1 182.15999199359999 0.28284271247461551 0 1 +1 0 0.60000000000000142 1 0 +1 0 0.60000000000000142 1 0 +1 0 -0.60000000000000142 1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 -0.60000000000000142 1 0 +1 0 11.799999999999997 1 0 +1 0 11.799999999999997 1 0 +1 -5.1756889450789954e-18 10.5 0 1 +1 17.907681323283025 10.5 0 1 +1 0.28847929844531212 -8.5 0 -1 +7 0 0 1 2 2 -5.1756889450789954e-18 1.0000000065000023 17.907681323283025 1.0000000065000023 + 0 2 25.199528972900001 2 +7 0 0 3 4 2 3809.7523843202916 6615.8091032910925 3805.3130884318643 6611.8630504339626 3801.2701848794363 6607.4711221031448 3797.7043768370017 6602.7210854319583 + 0 4 25.199528972900001 4 +1 6.1072783247598822e-16 10.5 0 1 +1 91.038905719399864 10.5 -1.4210854622831415e-14 1 +7 0 0 1 2 2 6.1072783247598822e-16 1.0000000065000023 91.038905719400006 1.0000000065000023 + 2.36494886716e-12 2 126.615135948 2 +7 0 0 5 12 4 3916.2332706689663 6634.1955342226438 3909.0222117505714 6642.3079506971972 3899.8801731149406 6648.7039355087109 3889.3485816588186 6652.7657390043614 3872.7443758416875 6654.8640538150139 3856.7667996718374 6651.1825260991227 3851.611740394967 6649.3240459879235 3845.2658218343345 6646.1358339043345 3839.5213252695162 6642.0376936891371 3838.229347933911 6641.0445826708183 3836.9765406100423 6640.008427330331 3835.7621935027942 6638.9290043784631 + 2.36494886716e-12 6 76.749811654799998 3 115.12646151200001 3 126.615135948 6 +1 0 0 0 1 +1 65.698348114799998 26 0 -1 +1 -1.5707963267948966 -19 1 0 +2 -12.1983481148 -55 1 0 -0 1 10 +8 1.5707963267948966 2.3561944901923448 +1 -1.5707963267948966 -19 1 0 +2 -12.1983481148 -55 1 0 -0 1 10 +1 0.78539816339744817 0 0 1 +1 7.1715728752319245 26 0 1 +1 -1.5707963267948966 -2.5000000054999987 1 0 +2 32.049223906965103 -47.84266267101868 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 10 +1 20.650825942600001 -45 -1 0 +1 32.849174057399999 45 1 0 +1 20.650825942600001 -45 -1 0 +1 0 -34.750000002699998 0 1 +1 0.00024841030000288811 36.750000002699998 0 -1 +1 -1.3712025711929532 -39.959558569752915 0.99796128102408377 0.063822265525205368 +1 32.849174057399999 28.500000005499999 1 1.0815229852e-16 +1 0 1.4999999967999997 0 1 +1 3874.2539043120478 6552.727854740092 0.74740830984202555 0.66436497377502279 +1 0 15.2499999973 0 1 +1 110.8404837385 15.2499999973 0 1 +1 -21.804949832599998 -50.464466094099997 0.70710678118654757 0.70710678118654757 +1 3.5857864375806114 7 1 0 +1 -21.804949832599998 -50.464466094099997 0.70710678118654757 0.70710678118654757 +1 41.346772414308035 -42.70326035853023 -0.75079434591730465 0.66053603243018244 +1 3.5857864375806114 23.499999994500001 1 0 +1 0 0 0 1 +1 4.1421356236821243 26 0 1 +1 -3.9269908169943126 -19 1 0 +2 -14.8578643763 55 1 0 -0 1 10 +8 3.9269908169943126 4.7123889803846897 +1 -3.9269908169943126 -19 1 0 +2 -14.8578643763 55 1 0 -0 1 10 +1 0.78539816339744828 0 0 1 +1 14.6421356237 26 0 -1 +1 -3.9269908169943126 -2.5000000054999987 1 0 +2 27.682868954423437 62.102814594640591 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 10 +1 3822.7572889115436 6627.3690538347773 -0.74740830984202555 -0.66436497377502279 +1 17.8336924567 15.2499999973 0 1 +1 34.799999999999997 36.750000002699998 0 -1 +1 -4.7789321881299998 45 1 0 +1 24.72106781187 45 1 0 +1 -4.7789321881299998 45 1 0 +1 18.262707531814485 51.479941498075824 -0.99796128102408377 -0.063822265525205368 +1 24.72106781187 28.500000005499999 1 -1.7624454716500001e-16 +1 -24.464466094100001 50.464466094099997 -0.70710678118654757 0.70710678118654757 +1 7.7279220614041497 7 1 0 +1 -24.464466094100001 50.464466094099997 -0.70710678118654757 0.70710678118654757 +1 11.313708498984761 15.2499999973 0 1 +1 59.5 15.2499999973 0 1 +1 37.559353560248219 58.18964245340878 0.66053603243018244 0.75079434591730465 +1 7.7279220614041497 23.499999994500001 1 0 +1 82.33467866018529 45.30703239973861 -0.55425234378412813 0.83234868859739353 +1 21.072756694829962 23.499999994500001 1 0 +1 42.145513389709926 15.2499999973 0 1 +1 28.710068817900002 15.2499999973 0 1 +1 -68.326309529599996 34.750457374500002 0.50000000000018996 0.86602540378432902 +1 21.072756694829962 7 1 0 +1 -68.326309529599996 34.750457374500002 0.50000000000018996 0.86602540378432902 +1 -3.5964800305756251e-15 15.2499999973 0 1 +1 0 15.2499999973 0 1 +7 0 0 1 2 2 -5.0214983573291461e-16 7 29.965332826399997 7 + 0 2 42.135545458199999 2 +7 0 0 4 5 2 -78.862687876999999 16.500914749 -82.5869740638 10.050262138800001 -85.188155349599995 2.9491496505499999 -86.4932857923 -4.50021638696 -86.499977001199994 -11.948795860200001 + 0 5 42.135545458199999 5 +7 0 0 5 6 2 -3.5527136788005009e-15 7 5.9929248898505119 6.9999999999999813 11.986888130768701 7.0000000000000302 17.978264950604238 6.9999999999999751 23.972416266861359 7.0000000000000098 29.965332826399997 7 + 0 6 42.135545458199999 6 +7 0 0 4 5 2 -78.862687876999999 16.500914749 -82.5869740638 10.050262138800001 -85.188155349599995 2.9491496505499999 -86.4932857923 -4.50021638696 -86.499977001199994 -11.948795860200001 + 0 5 42.135545458199999 5 +1 29.965332826399997 25 0 1 +1 41.051204139799999 25 0 1 +7 0 0 1 2 2 -3.5964800305756251e-15 23.499999994500001 29.965332826399997 23.499999994500001 + 0 2 42.135545467599997 2 +7 0 0 4 5 2 94.014303448269231 27.767150999652792 98.142692126841411 21.567341837802559 101.19177941974887 14.64671980802277 102.96968448638404 7.295837316188333 103.45174727082278 -0.1371295502914478 + 0 5 42.135545467599997 5 +1 3916.897635642742 6633.4481259128006 -0.66436497377502279 0.74740830984202555 +1 0 1.4999999967999997 0 1 +1 103.51722647069492 -1.1606392431436827 -0.063822265525205368 0.99796128102408377 +1 40.025602064699996 23.499999994500001 1 0 +1 -86.5 -12.9743979301 0 1 +1 40.025602069900003 7 1 0 +1 -86.5 -12.9743979301 0 1 +1 0 -34.750000002699998 0 1 +1 39 15.2499999973 0 1 +1 55.291474289485507 61.864372218117843 -0.99796128102408377 -0.063822265525205368 +1 44.105034408900003 23.499999994500001 1 0 +1 -42.394965591099997 53 1 0 +1 44.105034408900003 7 1 0 +1 -42.394965591099997 53 1 0 +1 7.6239253314467536e-16 25 0 1 +1 0.28847931623654521 -25 0 1 +7 0 0 1 2 2 7.6239253314467536e-16 7 17.8336924567 7 + 0 2 25.199526734100001 2 +7 0 0 3 4 2 23 43.222181183300002 17.179127945400001 44.403399888300001 11.2395854121 45 5.2999999999999998 45 + 0 4 25.199526734100001 4 +7 0 0 3 4 2 3.5527136788005009e-15 7 5.9446550539911485 6.9999999999999973 11.889108659248397 6.9999999999999991 17.8336924567 7 + 0 4 25.199526734100001 4 +7 0 0 3 4 2 23 43.222181183300002 17.179127945400001 44.403399888300001 11.2395854121 45 5.2999999999999998 45 + 0 4 25.199526734100001 4 +7 0 0 1 2 2 7.6239253314467536e-16 23.499999994500001 17.8336924567 23.499999994500001 + 0 2 25.199526734799999 2 +7 0 0 3 4 2 -9.3461267955577476 47.932832768215661 -3.6125099169060988 49.483144542096767 2.2768471871825344 50.457603414461005 8.2043234539934016 50.836681211754453 + 0 4 25.199526734799999 4 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -13.5 1 0 +2 -68.458904109599999 -1 1 0 -0 1 6 +8 3.1415926535897931 6.2831853071795862 +1 0 -13.5 1 0 +2 -68.458904109599999 -1 1 0 -0 1 6 +1 0 -13.5 1 0 +2 -68.458904109599999 -1 1 0 -0 1 6 +8 0 3.1415926535897931 +1 0 -13.5 1 0 +2 -68.458904109599999 -1 1 0 -0 1 6 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 -18 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 8 +8 0 3.1415926535897931 +1 0 -18 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 8 +1 0 -18 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 8 +8 3.1415926535897931 6.2831853071795862 +1 0 -18 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 8 +1 0 1.4999999967999997 0 1 +1 7.9574438007681433e-16 0.50000000320000026 -1.591488749850228e-15 -1 +1 1.082111757038257 1.4999999967999997 0 1 +1 29.020140246479226 0.50000000320000026 7.6409282269168772e-17 -1 +1 3780.3947549866007 6566.6607198826459 -0.34802190555935003 -0.93748640163515917 +1 14.510070123260288 1.0000000065000023 1 1.5748819111832277e-26 +1 1.0821117570382572 -34.750000002699998 0 1 +1 29.020140246479222 36.750000002699998 3.8197890536866956e-16 -1 +1 59.8946005755 27.7702704676 0.8829475928588979 -0.46947156278594571 +1 14.510070123260288 45 1 1.5748819111832277e-26 +1 59.8946005755 27.7702704676 0.8829475928588979 -0.46947156278594571 +1 0 -34.750000002699998 0 1 +1 -3.6350103925633875e-16 36.750000002699998 -2.0041600807941492e-16 -1 +1 -45.179333700186454 30.157727161729966 -0.85118477210993893 -0.52486615791852242 +1 14.510070123260286 28.500000005499999 1 1.5748819111832277e-26 +1 -1.0821054642780075 -43 1 0 +2 5.2998818036899999 -44.0004740595 1 0 -0 1 89.000474059599995 +8 1.0821054642780075 1.3705847805140896 +1 -1.0821054642780075 -43 1 0 +2 5.2998818036899999 -44.0004740595 1 0 -0 1 89.000474059599995 +1 -1.0821054642780075 -26.500000005499999 1 0 +2 13.884653296628901 -37.982338348858626 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 89.000474059599995 +1 -1.0821054642780075 0.99999999349999769 1 0 +2 3868.8812702757009 6549.2894879246305 -0.74740830984202555 -0.66436497377502279 -0.66436497377502279 0.74740830984202555 89.000474059599995 +1 0 0 0 1 +1 54.998518348079998 50 0 1 +1 -6.2831807553015349 -43 1 0 +2 60.500078944800002 -1.9983999996099999 1 0 -0 1 25.999921055400002 +1 -6.2831807553018217 -43.000000000000021 1 0 +2 60.500078944800002 -1.9983999996099999 1 0 -0 1 25.999921055400002 +1 -6.2831807553015349 -26.500000005499999 1 0 +2 -43.883673678354846 0.4111036466340332 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 25.999921055400002 +1 0 0 0 1 +1 -6.2831807553015349 0.99999999349999769 1 0 +2 3799.7194773962219 6544.0091095815624 -0.74740830984202555 -0.66436497377502279 -0.66436497377502279 0.74740830984202555 25.999921055400002 +1 -69.511422039042657 -6.238934046520523 0.063822265525205368 -0.99796128102408377 +1 59.999259174039999 23.499999994500001 1 0 +1 1.5707887992667127 -34.750000002699998 0 1 +1 65 15.2499999973 0 1 +1 86.5 -6.9992591740399996 0 -1 +1 59.999259174039999 7 1 0 +1 86.5 -6.9992591740399996 0 -1 +1 3783.6093160186015 6522.9979890082532 0.66436497377502279 -0.74740830984202555 +1 1.5707887992667127 1.4999999967999997 0 1 +1 -4.7123889803846897 -43 1 0 +2 53.499751589699997 -11.999751589700001 1 0 -0 1 33.000248411299992 +8 4.7123889803846897 6.2831777796514023 +1 -4.7123889803846897 -43 1 0 +2 53.499751589699997 -11.999751589700001 1 0 -0 1 33.000248411299992 +1 -4.7123889803846897 -26.500000005499999 1 0 +2 -36.259309106677648 -9.1230812469638902 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 33.000248411299992 +1 -4.7123889803846897 0.99999999349999769 1 0 +2 3811.5961279199028 6541.1847885931647 -0.74740830984202555 -0.66436497377502279 -0.66436497377502279 0.74740830984202555 33.000248411299992 +1 -3.1416001811202254 -43 1 0 +2 -55.499766644799998 -13.999766644799999 1 0 -0 1 31.000233355999999 +8 3.1416001811202254 3.9269908169872414 +1 -3.1416001811202254 -43 1 0 +2 -55.499766644799998 -13.999766644799999 1 0 -0 1 31.000233355999999 +1 0.78539063586838664 0 0 1 +1 0 50 0 1 +1 -3.1416001811202254 -26.500000005499999 1 0 +2 72.645635233532943 -4.1624226385372154 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 31.000233355999999 +1 -3.1416001811202254 0.99999999349999769 1 0 +2 3894.3920135667768 6612.1054227945278 -0.74740830984202555 -0.66436497377502279 -0.66436497377502279 0.74740830984202555 31.000233355999999 +1 62.002263655744009 -43.923000725697982 0.99796128102408377 0.063822265525205368 +1 128.84048373849998 23.499999994500001 1 -1.9737298215599999e-16 +1 146.84048373849998 15.2499999973 0 1 +1 24.154425590558795 15.2499999973 0 1 +1 -42.340483738499998 -53 -1 0 +1 128.84048373849998 7 1 0 +1 -42.340483738499998 -53 -1 0 +1 -68.880362803899999 -44.460120934599999 0.70710678118654757 -0.70710678118654757 +1 12.077212795244037 7 1 0 +1 -68.880362803899999 -44.460120934599999 0.70710678118654757 -0.70710678118654757 +1 87.943000936809767 -33.706696865081838 -0.66053603243018244 -0.75079434591730465 +1 12.077212795244037 23.499999994500001 1 0 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -43 1 0 +2 -40 -22 1 0 -0 1 6.7999999999999972 +8 3.1415926535897931 6.2831853071795862 +1 0 -43 1 0 +2 -40 -22 1 0 -0 1 6.7999999999999972 +1 0 -43 1 0 +2 -40 -22 1 0 -0 1 6.7999999999999972 +8 0 3.1415926535897931 +1 0 -43 1 0 +2 -40 -22 1 0 -0 1 6.7999999999999972 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -43 1 0 +2 -40 20 1 0 -0 1 6.7999999999999972 +8 3.1415926535897931 6.2831853071795862 +1 0 -43 1 0 +2 -40 20 1 0 -0 1 6.7999999999999972 +1 0 -43 1 0 +2 -40 20 1 0 -0 1 6.7999999999999972 +8 0 3.1415926535897931 +1 0 -43 1 0 +2 -40 20 1 0 -0 1 6.7999999999999972 +1 0 4.0617064475417974 0 1 +1 6.2831853071795862 4.0617064475417974 0 1 +1 3.1415926535883187 4.0617064475417974 4.8982359651350012e-14 1 +1 3.1415926535883161 4.0617064475417974 4.8107674657575902e-14 1 +1 -2.6415926535918803 1.0154266118842759 1 -2.1203697876409358e-16 +2 33 -4 -1 0 0 1 10.765711135 +8 2.6415926535918803 5.7831853071816735 +1 -2.6415926535897922 1.0154266118842759 1 -2.1203697876409351e-16 +2 33 -4 -1 0 0 1 10.765711135 +1 -2.6415926535897927 1.0154266118842732 1 2.1203697876437535e-16 +2 33 -4 -1 0 0 1 10.765711135 +1 -2.6415926535897927 1.0154266118856674 1 0 +2 33 -4 -1 0 0 1 10.765711135 +1 -3.36936457992371 3.000000000000004 1 -6.696148482975058e-16 +2 -49.696382132708329 13.112770568822746 -0.25806358351695385 -0.96612793503882721 0.96612793503882721 -0.25806358351695385 24.000006407600001 +1 0 -8.8817841970012523e-16 0 1 +1 1.3430178624772864 2.6645352591003757e-15 -7.4014868308343778e-17 -1 +1 -3.36936457992371 -2.9999999999999991 1 0 +2 -40.000000188800001 -22.000011602899999 1 0 -0 1 24.000006407600001 +2 -40.000000188800001 -22.000011602899999 1 0 -0 1 24.000006407600001 +1 2.6528038377832193 1.7763568394002505e-15 0 1 +1 0 -2.6645352591003757e-15 0 -1 +1 -0.26101455623919623 -3.0000000000000022 1 1.3562160857909777e-15 +2 -65.154312547671822 -13.758183429330186 0.25806358351695385 0.96612793503882721 0.96612793503882721 -0.25806358351695385 6.9999338036700003 +1 1.3097889473595474 -1.7763568394002505e-15 -3.7007434154171883e-17 1 +1 -0.26101455623919623 2.9999999999999991 1 0 +2 -10.050091973400001 -29.999935313400002 -1 0 0 1 6.9999338036700003 +2 -10.050091973400001 -29.999935313400002 -1 0 0 1 6.9999338036700003 +1 2.6528033619741471 -8.8817841970012523e-16 7.4014868308343753e-17 1 +1 0 0 0 -1 +1 -4.9734047232834868 3 1 0 +2 -9.118988589368124 2.2741005472885458 0.96612793503882721 -0.25806358351695385 0.25806358351695385 0.96612793503882721 14.000003953499998 +1 0 2.6645352591003757e-15 0 1 +1 1.309780684061743 2.6645352591003757e-15 0 -1 +1 -4.9734047232834868 -3 1 0 +2 -40.000005889900002 20.000007856700002 0 1 -1 0 14.000003953499998 +2 -40.000005889900002 20.000007856700002 0 1 -1 0 14.000003953499998 +1 0 -1.7763568394002505e-15 0 1 +1 -4.7123868495258172 -3 1 0 +2 -9.119004143976948 -28.725855906530658 0.25806358351695385 0.96612793503882721 0.96612793503882721 -0.25806358351695385 16.9999549184 +1 -4.7123868495258172 3.0000000000000009 1 0 +2 -10.050077960799999 27.999952680300002 -1 0 0 1 16.9999549184 +2 -10.050077960799999 27.999952680300002 -1 0 0 1 16.9999549184 +1 -27.894832051175751 -33.142981131219607 0.25806358351695385 0.96612793503882721 +1 0.65978922739989887 1.7763568394002505e-14 0 1 +1 -0.937212455434 11 -1 0 +1 -0.937212455434 11 -1 0 +1 0 1.5987211554602254e-14 0 1 +1 2.7440918052175172 0 0 -1 +1 -5.6233963275691625 -2.9999999999999982 1 0 +2 -13.822359283184895 -46.334221941634944 -0.96612793503882721 0.25806358351695385 0.25806358351695385 0.96612793503882721 16.999987833900001 +1 -5.6233963275691625 3 1 0 +2 8.1756210378799992 27.9999879308 0 -1 -1 -0 16.999987833900001 +2 8.1756210378799992 27.9999879308 0 -1 -1 -0 16.999987833900001 +1 -5.7696806059859771 3 1 0 +2 -51.144687573593529 -62.059882012100012 -0.25806358351695385 -0.96612793503882721 0.96612793503882721 -0.25806358351695385 23.499995422299996 +1 0 8.8817841970012523e-16 0 1 +1 1.9310208807553817 -4.4408920985006262e-15 0 1 +1 -5.7696806059859771 -3 1 0 +2 33.000154312699998 -3.9999358403 1 0 -0 1 23.499995422299996 +2 33.000154312699998 -3.9999358403 1 0 -0 1 23.499995422299996 +1 -2.2678693845066817 2.9999999999999982 1 0 +2 -51.144718498682636 -62.059712475713198 0.96612793503882721 -0.25806358351695385 0.25806358351695385 0.96612793503882721 23.499997080899998 +1 0 -8.8817841970012523e-16 0 1 +1 0.8737282011488583 1.7763568394002505e-14 0 -1 +1 -2.2678693845066817 -3 1 0 +2 32.999998499500002 -4.0000094690600001 0 1 -1 0 23.499997080899998 +2 32.999998499500002 -4.0000094690600001 0 1 -1 0 23.499997080899998 +1 0 1.7763568394002505e-14 0 1 +1 -3.1415919177444529 -3 1 0 +2 -68.250524792154522 -25.349515528333896 -0.96612793503882721 0.25806358351695385 0.25806358351695385 0.96612793503882721 16.999971543900003 +1 -3.1415919177444529 3.0000000000000009 1 0 +2 1.9476373989 -29.999971756400001 0 -1 -1 -0 16.999971543900003 +2 1.9476373989 -29.999971756400001 0 -1 -1 -0 16.999971543900003 +1 -4.0512084233500003 -13 -1 0 +1 -4.0512084233500003 -13 -1 0 +1 -50.278293533569851 -23.9409366326108 0.25806358351695385 0.96612793503882721 +1 1.3097806864402159 -1.7763568394002505e-15 0 1 +1 0 -3.5527136788005009e-15 0 1 +1 2.6528033589610924 -1.7763568394002505e-15 0 -1 +1 -0.26101778683788013 -3 1 0 +2 -65.154333038643955 -13.758192184926623 0.25806358351695385 0.96612793503882721 0.96612793503882721 -0.25806358351695385 16.999954907700001 +1 -0.26101778683788013 3.0000000000000009 1 0 +2 -10.0500782264 -29.9999528508 -1 0 0 1 16.999954907700001 +2 -10.0500782264 -29.9999528508 -1 0 0 1 16.999954907700001 +1 -1.7985698767941918 3 1 0 +2 -49.69637702359536 13.112775110171606 0.96612793503882721 -0.25806358351695385 0.25806358351695385 0.96612793503882721 14.000003959200001 +1 0 -1.7763568394002505e-15 0 1 +1 1.3430323514569551 0 0 -1 +1 -1.7985698767941918 -3.0000000000000009 1 0 +2 -40.000005894799997 -22.000007838799998 0 1 -1 0 14.000003959200001 +2 -40.000005894799997 -22.000007838799998 0 1 -1 0 14.000003959200001 +1 -59.939572883958128 -21.360300797441262 0.25806358351695385 0.96612793503882721 +1 0 -4.4408920985006262e-15 0 -1 +1 -4.0512084233500003 -23 -1 0 +1 -4.0512084233500003 -23 -1 0 +1 -3.1415988050231052 -3 1 0 +2 -68.250625190379424 -25.349431192644236 -0.96612793503882721 0.25806358351695385 0.25806358351695385 0.96612793503882721 7.0000925631999991 +1 0.87371647200405933 -5.3290705182007514e-15 -7.4014868308343765e-17 1 +1 0 5.3290705182007514e-15 0 -1 +1 -3.1415988050231052 2.9999999999999991 1 0 +2 1.94758182896 -30.000090517899999 0 -1 -1 -0 7.0000925631999991 +2 1.94758182896 -30.000090517899999 0 -1 -1 -0 7.0000925631999991 +1 -2.2678687398204804 3.0000000000000018 1 0 +2 -51.144718639936556 -62.059714835284247 0.96612793503882721 -0.25806358351695385 0.25806358351695385 0.96612793503882721 33.499997306399997 +1 -2.2678687398204804 -3 1 0 +2 33.000000815600004 -4.0000089966100001 0 1 -1 0 33.499997306399997 +2 33.000000815600004 -4.0000089966100001 0 1 -1 0 33.499997306399997 +1 1.9310213650931303 8.8817841970012523e-16 0 1 +1 0 8.8817841970012523e-16 0 1 +1 -5.769680315482673 3.0000000000000053 1 -6.4733833834868653e-16 +2 -51.144676718573891 -62.059964958759927 -0.25806358351695385 -0.96612793503882721 0.96612793503882721 -0.25806358351695385 33.499988350499997 +1 -5.769680315482673 -3 1 0 +2 33.000231648499998 -3.99990394745 1 0 -0 1 33.499988350499997 +2 33.000231648499998 -3.99990394745 1 0 -0 1 33.499988350499997 +1 2.7440933653514317 0 0 1 +1 0 -7.9936057773011271e-15 0 -1 +1 -5.623401915451872 -3 1 0 +2 -13.822176754659294 -46.334209340835244 -0.96612793503882721 0.25806358351695385 0.25806358351695385 0.96612793503882721 7.0001627315000015 +1 0.65977552531540073 -8.8817841970012523e-15 0 1 +1 -5.623401915451872 2.9999999999999991 1 0 +2 8.1755617599299999 28.000161024899999 0 -1 -1 -0 7.0001627315000015 +2 8.1755617599299999 28.000161024899999 0 -1 -1 -0 7.0001627315000015 +1 0 8.8817841970012523e-16 0 -1 +1 -0.937212455434 21 -1 0 +1 -0.937212455434 21 -1 0 +1 -18.233552700787477 -35.723616966389145 0.25806358351695385 0.96612793503882721 +1 -4.7123821972672353 -3.000000000000008 1 1.3562167389343574e-15 +2 -9.1190156537063984 -28.725841180590635 0.25806358351695385 0.96612793503882721 0.96612793503882721 -0.25806358351695385 6.9999367231199994 +1 1.30978831657543 1.7763568394002505e-15 7.4014868308343765e-17 1 +1 0 1.7763568394002505e-15 0 -1 +1 -4.7123821972672353 3 1 0 +2 -10.0500892177 27.999937760200002 -1 0 0 1 6.9999367231199994 +2 -10.0500892177 27.999937760200002 -1 0 0 1 6.9999367231199994 +1 -4.9734058683332627 3 1 0 +2 -9.1189864117103188 2.2740940333746549 0.96612793503882721 -0.25806358351695385 0.25806358351695385 0.96612793503882721 24.000006379400002 +1 -4.9734058683332627 -3 1 0 +2 -40.000000158600002 20.0000116416 0 1 -1 0 24.000006379400002 +2 -40.000000158600002 20.0000116416 0 1 -1 0 24.000006379400002 +1 2.6528038411433581 0 0 1 +1 0 2.6645352591003757e-15 0 -1 +1 -4.940161570967236 2.9999999999999942 1 9.7255083692588463e-16 +2 -70.199389163800006 27.000064425600002 0 -1 -1 -0 7.0000700167899979 +2 -70.199389163800006 27.000064425600002 0 -1 -1 -0 7.0000700167899979 +1 -4.940161570967236 -3.0000000000000115 1 1.945101673855245e-15 +2 5.437322676362804 29.64410866615593 -0.96612793503882721 0.25806358351695385 0.25806358351695385 0.96612793503882721 7.0000700167899979 +1 0.91324626536332554 3.5527136788005009e-15 -1.8503717077085941e-17 1 +1 0 0 0 -1 +1 -2.000573797656406 3 1 0 +2 -6.3922716618436759 27.628574443814738 -0.25806358351695385 -0.96612793503882721 0.96612793503882721 -0.25806358351695385 5 +1 -2.0005737976586868 -3 1 0 +2 -65.199337741099995 16.091298859399998 1 0 -0 1 5 +2 -65.199337741099995 16.091298859399998 1 0 -0 1 5 +1 1.1410188559312662 0 0 1 +1 -5.2369399972107544e-06 0 0 1 +1 -3.3693587181442699 3 1 0 +2 -70.199302031900004 26.9999554113 -1 0 0 1 16.999958414800005 +2 -70.199302031900004 26.9999554113 -1 0 0 1 16.999958414800005 +1 -3.3693587181442699 -3 1 0 +2 5.4371948690319005 29.644052618214214 0.25806358351695385 0.96612793503882721 0.96612793503882721 -0.25806358351695385 16.999958414800005 +1 0.91325651601043489 0 0 1 +1 2.0005700730307119 0 0 -1 +1 -3.1415926535897931 -3 1 0 +2 -65.199337741099995 16.091272674700001 1 0 -0 1 5 +2 -65.199337741099995 16.091272674700001 1 0 -0 1 5 +1 -3.1415926535897931 3 1 0 +2 -6.3922969596138142 27.628581201132253 -0.25806358351695385 -0.96612793503882721 0.96612793503882721 -0.25806358351695385 5 +1 -3.141599291424011 -2.9999999999999982 1 0 +2 -48.665961036719423 44.095696091760509 -0.96612793503882721 0.25806358351695385 0.25806358351695385 0.96612793503882721 7.0000631979800012 +1 -3.1415992914240105 3.0000000000000044 1 -9.7254981662837894e-16 +2 -70.199384206299996 -29.000057785500001 0 -1 -1 -0 7.0000631979800012 +2 -70.199384206299996 -29.000057785500001 0 -1 -1 -0 7.0000631979800012 +1 0.42977063902569757 5.3290705182007514e-15 3.7007434154171883e-17 1 +1 1.1410190499384267 1.7763568394002505e-15 1.4802973661668756e-16 -1 +1 -1.5707963267948966 3.0000000000000027 1 -1.5568093536019514e-15 +2 -39.417032846577882 36.44985774081578 0.96612793503882721 -0.25806358351695385 0.25806358351695385 0.96612793503882721 5 +1 0 -8.8817841970012523e-16 0 1 +1 2.0005750499578809 0 0 1 +1 -1.5707963267948957 -3 1 0 +2 -65.199337741099995 -18.091297447999999 0 1 -1 0 5 +2 -65.199337741099995 -18.091297447999999 0 1 -1 0 5 +7 0 0 1 2 2 1.3430323514526912 3 0.42977585371191085 3 + 0 2 19.550105514999998 2 +7 0 0 5 9 3 -53.638400442600002 -25.161334112599999 -54.003979222200002 -23.584138428700001 -54.557315125400002 -22.050463563099999 -55.291490251799999 -20.5902685633 -57.019285000799997 -17.984147073199999 -59.287073799600002 -15.837099635 -60.481358048700002 -14.9322948693 -61.7647902569 -14.165305821500001 -63.116009920099998 -13.545968072999999 + 0 6 10.190667787600001 3 19.550105514999998 6 +7 0 0 5 9 3 -53.638400442600002 -25.161334112599999 -54.003979222200002 -23.584138428700001 -54.557315125400002 -22.050463563099999 -55.291490251799999 -20.5902685633 -57.019285000799997 -17.984147073199999 -59.287073799600002 -15.837099635 -60.481358048700002 -14.9322948693 -61.7647902569 -14.165305821500001 -63.116009920099998 -13.545968072999999 + 0 6 10.190667787600001 3 19.550105514999998 6 +1 -1.1410225559437421 -3 1 0 +2 -65.199337741099995 -18.0912726864 1 0 -0 1 5 +2 -65.199337741099995 -18.0912726864 1 0 -0 1 5 +1 -1.5707942439259173 -3 1 0 +2 -48.665883218529473 44.095590561284403 0.25806358351695385 0.96612793503882721 0.96612793503882721 -0.25806358351695385 16.999958491399994 +1 0.4297758537132072 0 0 1 +1 0 0 0 -1 +1 -1.141022555939335 3 1 0 +2 -39.417008923704401 36.449851350748546 -0.25806358351695385 -0.96612793503882721 0.96612793503882721 -0.25806358351695385 5 +1 16.866794229852157 -103.63784614149513 -0.986174441105656 -0.16571050573197635 +1 20.540278527864327 -1.0261930569226907e-13 1 1.9931131510001357e-17 +1 7.6701777438390206e-14 13.75 -3.1006684282903556e-16 1 +1 41.080557055910745 13.749999999999794 -3.0887177991684489e-17 1 +1 20.540278527864469 27.499999999999897 1 -1.5303213547002426e-16 +1 3911.6304895817957 6499.3691201698348 -0.67542413643493326 -0.73742947860871733 +1 6.9216639929076211e-14 13.75 3.3367842929674373e-17 1 +1 33.345437645291383 14.00000000099983 1.7789098340231137e-16 -1 +1 26.285597140784091 15.500000003106857 -2.6438491261588055e-13 1 +1 26.285597140820126 15.500000003132023 -2.6423307986078721e-13 1 +1 19.845435528960223 9.4999999996999023 -1 1.8380363918602824e-15 +1 15.954276288775315 -94.946904131213955 0.98608145128065083 0.16626295871373645 +1 15.954276288805843 -94.94690413124421 0.9860814512806475 0.16626295871375532 +1 6.345433405854938 14.000000000999965 -1.8443802728761839e-17 -1 +1 26.270471141195443 15.499999997506853 -2.6436480514700175e-13 1 +1 26.270471141151276 15.49999999748993 -2.6428859101201846e-13 1 +1 19.845435525568206 18.500000001799897 -1 2.5905278285004123e-16 +1 15.954276290942104 -94.94690413047293 0.98608145128065083 0.16626295871373645 +1 103.31990096091684 13.7499999994994 -5.3959805358488992e-17 1 +1 -70.371661224885955 -8.4562574013738825 0.063822265525047037 -0.99796128102409387 +1 -2.9069825835440741 13.749999999500002 -2.2083700185809836e-16 1 +1 3784.2955411794146 6520.7207913125085 0.66436497377490433 -0.74740830984213102 +1 3971.8289644939905 6681.7051654534916 -0.26702133464174482 -0.96369061780539378 +1 41.539950274383884 13.750000000000162 4.9065477772316611e-17 1 +1 176.51345050295157 3.0543978702276 -0.80345686570370878 -0.59536296908152819 +1 177.95980423359791 27.159349402270202 0.16571050573197635 -0.986174441105656 +1 20.769975137292921 8.0707566164154155e-14 1 3.7145369020006244e-17 +1 20.769975137292814 27.500000000000082 1 -4.8379858030007068e-17 +1 3958.1371055132831 6701.596712028072 0.73742947860871733 -0.67542413643493326 +1 -5.4674905855030131e-14 13.75 1.1332049869367468e-16 1 +1 7.1113546600461639 14.00000000050003 -2.952043973691928e-16 -1 +1 25.103217298927483 15.500000001400423 -2.2907552448609305e-14 1 +1 25.103217298442758 15.500000001399673 -2.2926105458509476e-14 1 +1 19.611356619050909 18.500000001800071 -1 -1.9095893926002914e-16 +1 162.82747902492017 27.360498080410309 -0.16626295871373645 0.98608145128065083 +1 32.111358577924378 14.000000000600121 -1.970370043804597e-16 -1 +1 25.117222904886784 15.49999999580043 -2.2917606183111224e-14 1 +1 25.117222904523857 15.499999995879275 -2.2926105458509476e-14 1 +1 19.611356620344111 9.4999999997000781 1 -9.3258109540014201e-17 +1 162.82747902629438 27.360498078524877 0.16626295871373645 -0.98608145128065083 +1 162.82747902626824 27.360498078523321 0.16626295871374941 -0.98608145128064861 +1 169.15490339098176 49.750585334153385 0.93066370356847528 -0.36587575877640366 +1 3937.2957309696135 6713.9873264966445 0.95875574290157872 0.2842312886598552 +1 -19.986103661089601 111.22585222703539 0.986174441105656 0.16571050573197635 +1 23.278492388445269 1.1629943202690348e-13 1 -4.0385749990004956e-17 +1 46.556984776857654 13.750000000000233 -1.240332468994942e-18 1 +1 23.27849238844513 27.500000000000117 1 -4.0385749990004956e-17 +1 3750.3722557860119 6646.0672012500845 0.67542413643493326 0.73742947860871733 +1 98.154770125299564 13.749999999999874 -2.5325987856293457e-16 1 +1 -6.7449626853738615e-14 13.75 3.0887177991684489e-17 1 +1 24.731581988442965 9.5000000043001229 1 -3.8462061120004849e-17 +1 95.848557333206728 -0.01448099303010153 -3.6220373922368765e-11 -1 +1 9.2066571928146992 14.000000001200046 -1.7789098361778557e-16 -1 +1 23.827402766718794 15.499999996293802 2.6377428995203339e-13 1 +1 24.731581990435362 18.500000001800121 1 -3.8462059900004638e-17 +1 -15.883113584879942 94.523401459284287 0.98608145128065083 0.16626295871373645 +1 40.256506787953626 14.000000002600197 1.84438010011675e-17 -1 +1 27.869720009369637 15.499999997992752 2.6375418248428454e-13 1 +1 47.62389377108429 -6.0804114895077272e-14 1 -1.1216459390004489e-17 +1 -57.261732977796171 58.908724488880189 0.28337080471986642 0.9590104207110659 +1 47.623893771084326 27.499999998999936 1 -1.1216459390004489e-17 +1 3753.179616828862 6581.8903119541546 -0.36671077168156607 0.93033499876803005 +1 51.659950480550776 27.499999998999698 1 4.463158303999126e-17 +1 3847.31916928172 6495.3920133731162 -0.97634473019227075 0.21621972117682059 +1 51.65995048055062 -2.9967499732940537e-13 1 1.0246013119997385e-17 +1 -36.276058921840587 -67.201594192249274 -0.63659672819119151 0.77119686569401358 +1 0.72401602240453478 4.2632564145606011e-14 0 1 +1 0 -4.4999310944149329e-09 0 1 +1 -5.8338234331449961 3 1 0 +2 67.9852842737956 -4.0237942903026394 -0.99473992845244219 0.10243278158104553 -0.10243278158104553 -0.99473992845244219 11.499999999799996 +1 0 4.2632564145606011e-14 0 1 +1 0.085806014717555584 9.0000000024000499 0 1 +1 -5.8338234331449961 -5.999999997499998 1 0 +2 -7.2969738926208407 67.714545013836684 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 11.499999999799996 +1 -5.9221504597538477 3.0000000048999422 1 9.9982531167281116e-15 +2 -9.2089026101459019 68.301513574081881 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 11.5 +1 -5.9221504596673062 12.000000002400498 1 -8.2808033690757895e-14 +2 68.881966009028517 -2.2360679753111583 -0.99473992845244219 0.10243278158104553 -0.10243278158104553 -0.99473992845244219 11.5 +1 0 -6.9994854356991709e-10 0 1 +1 -1.0717251076890939e-09 7.9999999939999995 5.2291504494973341e-14 1 +1 -5.9221504597528085 -6.0000000017999762 1 -2.2617277734800597e-15 +2 3772.740180424335 6630.563129428876 0.66436497377502279 -0.74740830984202555 0.74740830984202555 0.66436497377502279 11.5 +1 3.1415926535968892 -7.0004091412556591e-10 0 1 +1 4.999972341455142 7.9999999948002651 -5.2291504494973341e-14 1 +1 0.36103484742573938 3.0000000049000106 1 -3.0298782539849464e-15 +2 -9.2089026101459019 68.301513574081881 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 11.5 +1 0 -1.4999999940000421 0 1 +1 -5.6651502435844969e-09 6.5000000010999983 1.7652876362937149e-16 1 +1 3766.2939694470901 6640.4092603888193 0.93390620162811866 0.35751812060445259 +1 2.4999861689086322 1.9999999982001291 1 -1.4901238163387984e-09 +1 2.4999861680537503 11.000000000400133 1 5.4371846140021506e-16 +1 -8.2385146016382187 80.030037690980663 0.9563331181416842 -0.29227892011810142 +1 -2.780555401603459 3.0000000053000022 1 0 +2 -13.990568197799785 69.762908176201591 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 11.5 +1 3.0532680315688072 -2.9995561590112629e-10 -4.9343245552602314e-17 1 +1 1.1935149577406279 -9.0000000101999262 -1.2335811388150579e-16 1 +7 1 0 5 10 3 81.403934317147304 -2.9069131056249735 1 82.858589911378871 0.0023805927197362172 0.999999999999997 83.572083250019688 4.0922021985124326 0.96568532534457074 82.194975527796714 8.2235502021972753 0.96568532534455931 79.170298151182038 11.067322394003089 1.0000000000000022 73.351707256534525 13.976626586581371 1.000000000000002 69.261884792888253 14.690115007892294 0.96568532534456075 65.130538444948698 13.313002318411998 0.96568532534456741 62.286769889815922 10.288321522636874 0.99999999999999867 60.832121291471175 7.3790243263380404 1 + 3.8922169017260813 6 5.4630144308544715 4 7.0338119599829421 6 +7 0 0 2 3 2 -6.8831182924539506e-11 6.0000000023515287 1.5707975293428 6.0000000023528317 3.1415950579455343 6.0000000023520812 + 3.8922169017261097 3 7.0338119599827928 3 +1 0 0 1 0 +1 0 -2 1 0 +1 0 0 1 0 +1 0 -0.070000000000000007 1 0 +7 0 0 8 9 2 3.0533581451366136 5.9999699626385699 3.0649097473299909 5.9999697657084736 3.0777934885027207 5.9999695749729653 3.0874170700044488 5.999969390406477 3.1002988403470226 5.9999692119454267 3.1126870476236945 5.9999690395670768 3.1223926780476177 5.9999688732250434 3.1348866848234955 5.9999687128494044 3.1460309890901645 5.9999685583878239 + 6.9327643384299265 9 7.0338119599827928 9 +1 3.1415926535859859 -2.9994851047376869e-10 0 1 +1 5.0000276489825222 7.9999999939997339 5.2236002924500086e-14 1 +7 0 0 3 4 2 4.9999999962328978 12.000000022977989 4.999999996025819 12.666666689985853 4.9999999958187367 13.333333329161819 4.9999999956116605 13.999999996169684 + 3.9999685840452002 4 5.9999685581961399 4 +7 0 0 3 4 2 7.0338119599827928 -2 7.0338119599827937 -1.3333333419496971 7.0338119599827902 -0.66666665805030301 7.0338119599827928 -1.1479302338814908e-23 + 3.9999685840452002 4 5.9999685581961399 4 +7 0 0 1 2 2 0 -5.9999999925000438 3.1415926535859864 -5.9999999973999536 + -18.064157756899998 2 18.064157756899998 2 +7 0 0 5 15 5 3763.9592168532117 6639.5154700329913 3762.2721924047069 6638.8696477160156 3760.7119748717755 6637.8925789231844 3759.3655242220775 6636.617178101541 3757.2452567282098 6633.6071557661789 3756.4205598707335 6630.0188910326005 3756.3703200554241 6628.1649620779262 3756.9994717373393 6624.5372993502842 3758.9536093225533 6621.4168642840223 3760.2290101440476 6620.0704136341919 3763.2390324792518 6617.9501461400505 3766.8272972126642 6617.125449282159 3768.6812261673217 6617.0752094665668 3770.4950575311677 6617.3897853073458 3772.1820819797226 6618.0356076239641 + -18.064157756899998 6 -9.0320788784400001 3 0 3 9.0320788784400001 3 18.064157756899998 6 +1 -2.7805554015991327 12.000000002799531 1 8.0446733488448614e-14 +2 71.118033987525408 2.2360679764236302 -0.99473992845244219 0.10243278158104553 -0.10243278158104553 -0.99473992845244219 11.5 +1 2.5000069117793351 19.999999997099867 1 -5.4415463100021403e-16 +1 59.714090395606398 5.1429625320812002 0.44721359549936496 0.8944271910002124 +1 2.500000000001132 1.9999999952998686 1 1.1175865446986667e-09 +1 3774.5168733050687 6618.9294128112178 -0.93390620162811866 -0.35751812060445259 +1 0 -7.999858553375816e-10 0 1 +1 1.24283370033596e-10 16.999999999499998 2.53630449788494e-13 1 +1 -4.8144415177009865 -6.0000000045999968 1 0 +2 -15.902496924148437 70.349876738082116 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 11.5 +1 -4.8144415176422575 2.9999999982000034 1 0 +2 72.014715725837931 4.0237942998439946 -0.99473992845244219 0.10243278158104553 -0.10243278158104553 -0.99473992845244219 11.5 +1 1.3981947154945544 -1.000159954855917e-10 0 1 +1 -2.738937575482811e-09 17.000000000699998 2.5370851414587201e-13 1 +1 -0.27465414794184356 2.9999999962999979 1 0 +2 67.98528427880845 -4.0237943011733002 -0.99473992845244219 0.10243278158104553 -0.10243278158104553 -0.99473992845244219 11.5 +1 -0.27465414735536026 -6.0000000020000002 1 0 +2 -7.2969738826351414 67.71454502059359 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 11.5 +1 13.93486000373735 19.999999997396372 1 -5.8185054099112144e-11 +1 81.913699514260301 -15.53159914388444 0.9999998430742979 -0.00056022440115234551 +1 13.934860003525849 10.999999998796376 1 -1.9197558999985129e-17 +1 1.7348794899263558 83.362418611584445 -0.16571050576799334 0.98617444109960384 +1 11.913701382658783 10.999999995696903 1 -3.5835672000001608e-17 +1 -29.217728478307542 80.19319372407449 -0.16571050576799334 0.98617444109960384 +1 11.91370138266112 19.999999998096904 1 -3.5835672000001608e-17 +1 83.934857819370066 15.517118148827095 0.9999998430742979 -0.00056022440115234551 +7 0 0 1 2 2 0 -7.9999999999998508 3.1415926535951897 -8.0000000000001492 + 4.4524817489300004 2 10.7356670561 2 +7 0 0 5 9 3 -15.94202712573032 89.141415216589664 -16.440143636674293 88.75844770221228 -16.787869155984446 88.179870289829523 -16.878882896972875 87.483461669954877 -16.504167659538631 86.186446665101869 -15.34701283656937 85.490995626365688 -14.650604216095971 85.399981885415883 -14.002096713766051 85.587339504076681 -13.503980202873571 85.970307019252388 + 4.4524817489300004 6 7.5940744025200004 3 10.7356670561 6 +7 0 0 8 9 2 7.5072392758109135e-11 -7.9999999999465823 0.39269908152440347 -7.9999999999466098 0.78502811942644257 -7.9999999999354259 1.1787167499578572 -7.9999999999708962 1.5707963268268941 -7.9999999999126885 1.9628759034030736 -7.9999999999708962 2.356564534522704 -7.9999999999372449 2.7488935718664944 -7.99999999994691 3.1415926535956666 -7.9999999999468834 + 4.4524817489300004 9 10.7356670561 9 +7 0 0 1 2 2 0 -8.0000000000001492 3.1415926536647873 -7.9999999999998508 + 10.7356670561 2 17.018852363299999 2 +7 0 0 5 9 3 -13.503980202873571 85.970307019252388 -13.005863691974668 86.353274534328321 -12.658138172606566 86.931851945812951 -12.567124431656769 87.628260566286343 -12.941839669065267 88.925275570740183 -14.09899449207316 89.620726610075138 -14.795403112501489 89.71174035032638 -15.443910614950525 89.524382731958525 -15.94202712573032 89.141415216589664 + 10.7356670561 6 13.877259709700001 3 17.018852363299999 6 +7 0 0 8 9 2 5.8735238895886912e-12 -7.9999999999468834 0.39269908169960555 -7.9999999999468461 0.78502811908788317 -7.9999999999463398 1.1787167502325246 -7.9999999999672582 1.5707963264558202 -7.9999999999417923 1.9628759037377677 -7.9999999999563443 2.3565645343016968 -7.9999999999417923 2.7488935719185612 -7.9999999999465521 3.1415926536648655 -7.9999999999465823 + 10.7356670561 9 17.018852363299999 9 +7 0 0 1 2 2 0 0.99999999750014723 3.1415926535950049 0.9999999974998488 + 0.97681177770100003 2 7.2599970848800002 2 +7 0 0 5 9 3 90.551275668682649 0.93843751149817578 90.256456831225847 1.4932942755589735 89.743746250421935 1.9323759527339099 89.072162841719376 2.1379098721726955 87.730899139344643 1.9840556792781108 86.852735785179163 0.95863451946080502 86.647201865678909 0.2870511101614035 86.724128962086709 -0.38358074092136363 87.018947800339291 -0.93843750506410828 + 0.97681177770100003 6 4.1184044312900001 3 7.2599970848800002 6 +7 0 0 8 9 2 7.5262462939979426e-11 0.99999999755342195 0.39269908152528105 0.99999999755339475 0.78502811942735207 0.99999999755243607 1.1787167499633142 0.99999999755436875 1.5707963268196181 0.99999999754891178 1.9628759034067116 0.99999999755436875 2.356564534522704 0.99999999755232238 2.7488935718669878 0.99999999755309366 3.1415926535954801 0.99999999755311997 + 0.97681177770100003 9 7.2599970848800002 9 +7 0 0 1 2 2 0 0.9999999974998488 3.1415926536649721 0.99999999750014723 + 7.2599970848800002 2 13.5431823921 2 +7 0 0 5 9 3 87.018947800339291 -0.93843750506410828 87.313766638492396 -1.4932942691966034 87.826477218401038 -1.9323759462793522 88.49806062770044 -2.1379098657795979 89.839324329677282 -1.9840556728440397 90.717487684439632 -0.95863451308819592 90.923021603243555 -0.28705110371708997 90.846094507144414 0.38358074743442572 90.551275668682649 0.93843751149817578 + 7.2599970848800002 6 10.4015897385 3 13.5431823921 6 +7 0 0 8 9 2 5.6870064214462576e-12 0.99999999755311997 0.39269908169816908 0.99999999755315749 0.78502811908219883 0.99999999755209501 1.1787167502307057 0.99999999755709723 1.5707963264412683 0.9999999975452738 1.9628759037377677 0.99999999755755198 2.3565645342978314 0.9999999975530045 2.7488935719174936 0.99999999755345226 3.1415926536650556 0.99999999755342195 + 7.2599970848800002 9 13.5431823921 9 +7 0 0 1 2 2 3.1415926535965206 8.9999999954000103 6.2831853071795862 8.9999999954000032 + 8.4398167790700001 2 24.147780047000001 2 +7 0 0 5 15 5 69.415504337881288 4.9657189661667864 68.635491027228753 4.8739066021434532 67.87350503201408 4.6289389826537466 67.169713070936027 4.2353905191056569 65.954361245124701 3.1935425910800213 65.2231868461934 1.7694951325644901 65.003811565275598 0.99355827702249044 64.881125782557731 -0.60252297547713951 65.371061021447915 -2.126494965796784 65.764609484996015 -2.8302869268748321 66.806457413011415 -4.0456387527856439 68.230504871526932 -4.7768131517169294 69.006441727068932 -4.9961884326347388 69.804482353269009 -5.0575313239885453 70.584495664031238 -4.9657189598759803 + 8.4398167790700001 6 12.366807596099999 3 16.293798413000001 3 20.220789230000001 3 24.147780047000001 6 +7 0 0 8 9 2 3.1415926534907408 8.9999999948883289 3.5342917351575283 8.9999999948883218 3.9269893819337085 8.9999999948759069 4.3196923265950318 8.9999999949250196 4.7123889864415105 8.9999999948413461 5.1050856277543062 8.9999999949286575 5.4977885831394815 8.9999999948777258 5.8904862255628521 8.9999999948883271 6.2831853072923263 8.9999999948883289 + 8.4398167790700001 9 24.147780047000001 9 +7 0 0 1 2 2 0 8.9999999954000032 3.1415926535965206 8.9999999954000103 + 24.147780047000001 2 39.855743314999998 2 +7 0 0 5 15 5 70.584495664031238 -4.9657189598759803 71.364508974683773 -4.8739065958526453 72.126494969898445 -4.6289389763629352 72.830286930976499 -4.2353905128148472 74.045638756887314 -3.1935425847994576 74.776813155818601 -1.7694951262839265 74.996188436736418 -0.99355827074192504 75.118874219444038 0.60252298165822182 74.628938980464611 2.1264949720875954 74.23539051691651 2.8302869331656382 73.193542588890878 4.0456387589769776 71.769495130375347 4.7768131579082613 70.993558274833347 4.9961884388260707 70.19551764863327 5.0575313301798808 69.415504337881288 4.9657189661667864 + 24.147780047000001 6 28.074770864000001 3 32.001761680999998 3 35.928752498000001 3 39.855743314999998 6 +7 0 0 8 9 2 1.1274039472095046e-10 8.9999999948883289 0.39269908178427232 8.9999999948883183 0.78539672434476415 8.9999999948795448 1.1780996793550003 8.9999999948813638 1.5707963209424634 8.9999999948704499 1.9634929803078194 8.9999999948704499 2.3561959251364897 8.9999999948813638 2.7488935717704175 8.9999999948883325 3.1415926534907408 8.9999999948883289 + 24.147780047000001 9 39.855743314999998 9 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +7 0 0 1 2 2 6.2831853071795862 8.9999999948883307 6.2831853071795862 18.500000000846775 + 8.9999999954000032 2 18.499999999700002 2 +7 0 0 1 2 2 0 8.9999999948883307 0 18.500000000846775 + 8.9999999954000032 2 18.499999999700002 2 +1 3.1415926535965206 7.1054273576010019e-15 0 1 +1 3.1415926535965206 7.1054273576010019e-15 0 1 +7 0 0 1 2 2 3.1415926535897931 8.9999999948883271 3.1415926535897931 18.500000000846772 + 8.9999999954000032 2 18.499999999700002 2 +7 0 0 1 2 2 3.1415926535897931 8.9999999948883271 3.1415926535897931 18.500000000846772 + 8.9999999954000032 2 18.499999999700002 2 +1 -0.21977979060100539 18.499999999700005 1 0 +2 -14.284007116259215 85.973058205403092 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 5 +8 0.21977979060100539 3.3613724441907982 +1 -0.21977979060100439 18.500000000846772 1 0 +1 -0.21977979059427755 18.499999999700005 1 0 +2 -14.284007116259215 85.973058205403092 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 5 +1 -0.21977979059416111 18.499999999188329 1 0 +1 0 -1.4921397450962104e-13 0 1 +1 3.1415926535950227 -1.4921397450962104e-13 0 1 +8 -16 -7.9999999999468843 +1 3.1415926535897931 0 0 1 +8 -16 -7.9999999999468843 +1 0 0 0 1 +1 -0.59101865043077362 -16 1 0 +2 6.3468869049287946e-11 -2.0000000000439702 0.090893030066398803 0.99586066148098695 -0.99586066148098695 0.090893030066398803 2 +8 0.59101865043077362 3.7326113040904882 +1 -0.59101865043077362 -16 1 0 +1 3.1415926536649472 1.4921397450962104e-13 0 1 +1 0 1.4921397450962104e-13 0 1 +8 -16 -7.9999999999465849 +1 0 0 0 1 +8 -16 -7.9999999999465849 +1 3.1415926535897931 0 0 1 +1 0 -1.4921397450962104e-13 0 1 +1 3.1415926535950298 -1.4921397450962104e-13 0 1 +8 0.99999999755311919 10.500000001853127 +1 3.1415926535897931 0 0 1 +8 0.99999999755311919 10.500000001853127 +1 0 0 0 1 +1 3.1415926536649512 1.4921397450962104e-13 -3.7396986075709803e-16 1 +1 0 1.4921397450962104e-13 0 1 +1 7.5241374103853891e-11 5.3422434770182547e-11 0 1 +1 3.1415926536650347 5.3422434770182547e-11 0 1 +1 -0.59101865043077362 10.500000001799997 1 0 +2 -17.396897482662549 104.49845527042048 0.063822265525205368 -0.99796128102408377 0.99796128102408377 0.063822265525205368 2 +1 -0.5910186504252587 10.500000001853275 1 0 +1 -3.7326113040904882 -16 1 0 +2 6.3468869049287946e-11 -2.0000000000439702 0.090893030066398803 0.99586066148098695 -0.99586066148098695 0.090893030066398803 2 +1 -3.7326113040150517 -15.999999999946739 1 0 +1 -3.7326113040904882 10.500000001799997 1 0 +2 -17.396897482662549 104.49845527042048 0.063822265525205368 -0.99796128102408377 0.99796128102408377 0.063822265525205368 2 +1 -3.7326113040150517 10.500000001853275 1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +7 0 0 1 2 2 0 8.9999999987652686 0 18.500000001039627 + 9 2 18.499999999700002 2 +7 0 0 1 2 2 6.2831853071795862 8.9999999987652686 6.2831853071795862 18.500000001039627 + 9 2 18.499999999700002 2 +1 -0.21977979058061425 9 1 0 +2 11.599735404862283 -69.032210874483084 0.99792536962780554 0.064381337771187458 -0.064381337771187458 0.99792536962780554 5 +1 -0.21977979059416075 8.999999998765265 1 0 +1 3.1415926535973906 0 0 1 +1 3.1415926535973902 0 0 1 +7 0 0 1 2 2 3.1415926535897931 8.9999999987652632 3.1415926535897931 18.500000001039623 + 9 2 18.499999999700002 2 +7 0 0 1 2 2 3.1415926535897931 8.9999999987652632 3.1415926535897931 18.500000001039623 + 9 2 18.499999999700002 2 +1 -0.21977979058061425 18.499999999700002 1 0 +2 13.212008478916736 -77.605574646746533 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 5 +8 0.21977979058061395 3.3613724441916704 +1 -0.21977979058061384 18.500000001039623 1 0 +1 -0.2197797905942771 9 1 0 +2 11.599735404862283 -69.032210874483084 0.99792536962780554 0.064381337771187458 -0.064381337771187458 0.99792536962780554 5 +1 -0.21977979059416111 8.999999998765265 1 0 +1 -0.2197797905942771 18.499999999700002 1 0 +2 13.212008478916736 -77.605574646746533 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 5 +1 -0.21977979059416111 18.49999999846527 1 0 +1 3.1415926535851568 -4.000000330961484e-10 0 1 +1 0 -4.000000330961484e-10 0 1 +8 -6.0000000070000041 2.9999999925000012 +1 3.1415926537446146 -3.3870861670948216e-10 -1.6653345374038569e-15 1 +8 -6.0000000070000041 2.9999999925000012 +1 0 -3.3870861670948216e-10 0 1 +1 -1.6744650651118398 2.9999999921000122 1 -2.2617277734885064e-15 +2 11.599735399416184 -69.032210876738404 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 11.5 +1 -1.6744650651160189 2.9999999920949914 1 0 +1 0 -3.999929276687908e-10 0 1 +1 3.1415926535851568 -3.999929276687908e-10 0 1 +7 0 0 1 2 2 0 -6.0000000093118615 0 2.9999999920937497 + -6.000000003300002 2 2.9999999925000012 2 +7 0 0 1 2 2 3.1415926538515495 -6.0000000093118615 3.1415926538515793 2.9999999920937497 + -6.000000003300002 2 2.9999999925000012 2 +7 0 0 1 2 2 0 -6.000000003699995 3.1415926535851568 -6.0000000016000001 + -18.0641577574 2 18.0641577574 2 +7 0 0 5 15 5 3900.4899949511268 6526.1298040059346 3899.1566030563254 6527.3484934700255 3897.5839220448897 6528.3053720477228 3895.8403478757905 6528.9374525212079 3892.1993092138077 6529.4839012085449 3888.6219717358867 6528.6130250551332 3886.9421302283286 6527.8270803257528 3883.981129527474 6525.6388747697874 3882.0673723717673 6522.4935127470399 3881.4352918981945 6520.7499385778892 3880.8888432106564 6517.108899915982 3881.7597193638326 6513.5315624380255 3882.5456640930033 6511.8517209304018 3883.6397668709542 6510.3712205798593 3884.9731587655401 6509.1525311157111 + -18.0641577574 6 -9.0320788787000001 3 1.7763568394e-15 3 9.0320788787000001 3 18.0641577574 6 +7 0 0 1 2 2 0 -6.0000000023997018 3.1415926542535861 -6.000000002401066 + -18.0641577574 2 18.0641577574 2 +7 0 0 1 2 2 0 -6.0000000074000042 3.1415926535851568 -5.9999999964999944 + -18.064157756499998 2 18.064157756499998 2 +7 0 0 5 15 5 3884.9731587679566 6509.1525311134437 3886.3065506629159 6507.9338416496266 3887.8792316745094 6506.976963072203 3889.6228058436104 6506.3448825989872 3893.2638445054176 6505.7984339121631 3896.8411819829839 6506.6693100659286 3898.5210234904171 6507.4552547954654 3901.4820241909379 6509.6434603515354 3903.3957813462803 6512.7888223743603 3904.0278618198004 6514.5323965433299 3904.574310507061 6518.1734352051244 3903.7034343538335 6521.7507726829017 3902.9174896246318 6523.4306141903644 3901.8233868467323 6524.9111145408187 3900.4899949522355 6526.1298040049132 + -18.064157756499998 6 -9.0320788782400001 3 0 3 9.0320788782400001 3 18.064157756499998 6 +7 0 0 1 2 2 0 -6.0000000028826435 3.1415926527833173 -6.0000000028840077 + -18.064157756499998 2 18.064157756499998 2 +1 -4.8160577187016331 2.99999999209999 1 2.2617277734885052e-15 +2 11.599735399416184 -69.032210876738404 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 11.5 +1 -4.816057718705812 2.9999999920949914 1 0 +1 0 5.0049919764205697e-10 0 1 +1 3.1415926535749144 5.0049919764205697e-10 -8.8817841964461388e-16 1 +8 -16 -7.9999999994534114 +1 3.1415926535897931 0 0 1 +8 -16 -7.9999999994534114 +1 0 0 0 1 +1 -3.0102976341359069 -16 1 0 +2 -2.2442558922364242e-10 -2.0000000001647971 0.59019067496078803 -0.80726387704971014 0.80726387704971014 0.59019067496078803 2 +8 3.0102976341359069 6.1518902877257071 +1 -3.0102976341359069 -16 1 0 +1 3.1415926535749357 4.9950443781199283e-10 8.8817841964461388e-16 1 +1 0 4.9950443781199283e-10 0 1 +8 -16 -7.9999999994544106 +1 0 0 0 1 +8 -16 -7.9999999994544106 +1 3.1415926535897931 0 0 1 +1 -3.0102976341359069 -7.9999999994999982 1 0 +2 14.509337179174231 -86.288636276025017 0.99792536962780554 0.064381337771187458 -0.064381337771187458 0.99792536962780554 2 +1 -3.0102976341505157 -7.9999999994539115 1 0 +1 0 5.0049919764205697e-10 0 1 +1 3.1415926535749215 5.0049919764205697e-10 0 1 +8 1.0000000026465889 10.500000002346596 +1 3.1415926535897931 0 0 1 +8 1.0000000026465889 10.500000002346596 +1 0 0 0 1 +1 -3.0102976341359069 1.0000000025999967 1 0 +2 14.50933718041037 -86.288636276546512 0.99792536962780554 0.064381337771187458 -0.064381337771187458 0.99792536962780554 2 +1 -3.0102976341505157 1.0000000026460893 1 0 +1 3.1415926535749215 4.9950443781199283e-10 0 1 +1 0 4.9950443781199283e-10 0 1 +1 -1.3491519013086872e-10 5.4559538935621422e-10 0 1 +1 3.1415926534548779 5.4559538935621422e-10 0 1 +1 -3.0102976341365615 10.500000002299991 1 1.1308638867481953e-15 +2 16.111942327281415 -94.863627370746443 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 2 +1 -3.0102976341505157 10.500000002346097 1 0 +1 -6.1518902877257071 -7.9999999994999982 1 0 +2 14.509337179174231 -86.288636276025017 0.99792536962780554 0.064381337771187458 -0.064381337771187458 0.99792536962780554 2 +1 -6.1518902877403088 -7.9999999994539115 1 0 +1 -6.1518902877257071 -16 1 0 +2 -2.2442558922364242e-10 -2.0000000001647971 0.59019067496078803 -0.80726387704971014 0.80726387704971014 0.59019067496078803 2 +1 -6.1518902877403088 -15.99999999995392 1 0 +1 -6.1518902877257071 1.0000000025999967 1 0 +2 14.50933718041037 -86.288636276546512 0.99792536962780554 0.064381337771187458 -0.064381337771187458 0.99792536962780554 2 +1 -6.1518902877403088 1.0000000026460893 1 0 +1 -6.1518902877257071 10.500000002300006 1 -1.1308638867474459e-15 +2 16.111942327281415 -94.863627370746443 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 2 +1 -6.1518902877403088 10.500000002346097 1 0 +7 0 0 1 2 2 0 -6.0000000048000075 1.5707963267951541 -6.0000000048000928 + 2.2474917242100001 2 23.453242136899998 2 +7 0 0 5 6 2 24.913084910492842 -66.795086641815743 24.210271604743333 -62.612574540305438 21.869060825659652 -58.701359974236233 18.006737527404564 -55.950320768391173 13.545123268006794 -55.016048059893244 9.3626111664771585 -55.718861365964663 + 2.2474917242100001 6 23.453242136899998 6 +7 0 0 1 2 2 1.5707963267951541 -6.0000000048000928 3.1415926535944751 -6.0000000047999933 + 23.453242136899998 2 44.658992548599997 2 +7 0 0 5 6 2 9.3626111664771585 -55.718861365964663 5.1800990651271519 -56.421674672024487 1.2688844994622634 -58.762885451162269 -1.482154706089851 -62.625208749298231 -2.4164274145027917 -67.086823008460058 -1.7136141084403889 -71.269335109849962 + 23.453242136899998 6 44.658992548599997 6 +7 0 0 1 2 2 3.2828695623265958e-05 11.000000002300006 26.285597140785271 11.000000002306855 + -13.142782156000001 2 13.142782156000001 2 +7 0 0 1 2 2 -1.7136195481136163 -71.269302731089454 2.6421746084357896 -97.191454425552848 + -13.142782156000001 2 13.142782156000001 2 +7 0 0 1 2 2 1.906613533719792e-09 10.999999996700005 26.270471141196623 10.999999996706855 + -13.135235569600001 2 13.135235569600001 2 +7 0 0 1 2 2 24.913084914203836 -66.79508664217758 29.266377973438434 -92.702353835393652 + -13.135235569600001 2 13.135235569600001 2 +1 0.46427481182618546 -84.23036238969577 0.16571050555986444 -0.98617444113457653 +1 13.142798568753724 20.000000004403425 1 2.5392245678102905e-13 +1 0.46427481185673969 -84.230362389726054 0.16571050555988337 -0.98617444113457342 +1 13.142798568789715 20.000000004428401 1 2.5396351688300451e-13 +1 -1.6728512980805683 2.9999999973000091 1 -4.5234660518768177e-15 +2 11.599735402165308 -69.03221087585959 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 13.5 +7 0 0 7 26 5 2.0313478842343149 2.9999999980868761 2.1106508214703497 2.9999999980869307 2.189952916039962 2.999999998086881 2.2692587832729068 2.9999999980870737 2.348556443839886 2.9999999980869241 2.4278644042567015 2.9999999980870795 2.5071648154478212 2.9999999980870671 2.6062935920498154 2.9999999980871093 2.6261232511505894 2.9999999980871448 2.6459372819511544 2.9999999980870942 2.6657796036220125 2.9999999980871612 2.6855921722205709 2.999999998087139 2.705423037795172 2.9999999980871546 2.7450743284293959 2.9999999980871648 2.7649000190057955 2.9999999980872074 2.784725742682415 2.9999999980871421 2.804551487300309 2.9999999980872332 2.8243772407003869 2.9999999980871852 2.844202990723645 2.999999998087211 2.9036801941859349 2.9999999980872478 2.9433296042527615 2.9999999980872052 2.9829898313734038 2.9999999980873353 3.0226251296146049 2.9999999980872234 3.0622925809284434 2.9999999980873318 3.1019363206065189 2.9999999980873078 3.1415877892245248 2.9999999980873326 + 3.7041991823160685 8 4.2593197429681604 6 4.3980998831311826 6 4.5368800232942057 6 4.8144403036202519 8 +2 11.599735402195556 -69.032210875889533 0.064381337771206582 -0.99792536962780443 0.99792536962780443 0.064381337771206582 13.499999999999956 +1 4.6806881521094645 -64.063379516992399 -0.16571050571425913 0.98617444110863295 +1 6.0466933089953576 20.00000000050315 1 -5.6732396558345487e-14 +1 4.6806881520810499 -64.06337951696203 -0.16571050571424017 0.98617444110863617 +1 -5.9266632429683259 2.9999999980899581 1 -2.8950115505093328e-13 +2 11.599735405617274 -69.03221087623298 -0.86632438691299207 -0.49948178809625149 0.49948178809625149 -0.86632438691299207 6.0000000000996963 +2 11.599735405589445 -69.032210876202697 -0.86632438691300162 -0.49948178809623478 0.49948178809623478 -0.86632438691300162 6.0000000001000027 +1 6.0466933098153568 20.000000000019782 1 -5.6732396558345487e-14 +1 16.514781440527887 -62.07485344707289 -0.16571050571425913 0.98617444110863295 +1 16.514781440500933 -62.07485344704277 -0.16571050571424017 0.98617444110863617 +1 -1.6728512979715937 2.9999999973000091 1 -4.5234555474556392e-15 +2 11.599735402165308 -69.03221087585959 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 13.5 +8 1.6728512979715939 2.7830911993013765 +1 -1.6728512979715939 2.9999999924646121 1 -4.095937737294548e-13 +2 11.599735402195556 -69.032210875889533 0.064381337771206582 -0.99792536962780443 0.99792536962780443 0.064381337771206582 13.499999999999956 +1 27.089731441494358 -79.748720239687302 0.16571050567781417 -0.98617444111475683 +1 13.135235571333773 19.999999998803425 1 2.5391856571624197e-13 +1 27.089731441524439 -79.748720239717187 0.16571050567783316 -0.98617444111475372 +1 13.135235571289975 19.999999998785853 1 2.5396351688300451e-13 +1 -1.0230004996290027 9.6694094789805038e-10 1 -1.4475057760735341e-13 +2 14.499669257673474 -86.290263593205822 0.86632438691299207 0.49948178809625149 0.49948178809625149 -0.86632438691299207 2.9999999999998326 +2 14.49966925764457 -86.29026359317578 0.86632438691300162 0.49948178809623478 0.49948178809623478 -0.86632438691300162 2.9999999999999978 +7 0 0 1 2 2 0 4.7070898290257901e-09 3.141592655066205 2.3665052140131593e-09 + -4.7123889803800001 2 4.7123889803800001 2 +7 0 0 5 9 3 11.866921571182502 -84.85198698067461 12.318769500002418 -84.024884899382869 13.095419648308962 -83.375223085150537 14.106301452832668 -83.078622286074278 16.115386139125803 -83.332713680032612 17.41470976308301 -84.886013987937076 17.711310565165149 -85.896895789885093 17.584264868334685 -86.901438131719715 17.132416939514769 -87.728540213011911 + -4.7123889803800001 6 4.4408920985e-16 3 4.7123889803800001 6 +7 0 0 5 9 3 11.866921571154801 -84.851986980644327 12.318769499973909 -84.024884899353211 13.095419648279586 -83.375223085120268 14.106301452804656 -83.07862228604435 16.115386139098039 -83.3327136800023 17.414709763055679 -84.886013987907191 17.711310565137431 -85.896895789855535 17.584264868306228 -86.901438131690313 17.132416939485363 -87.728540212982466 + -4.7123889803800001 6 4.4408920985e-16 3 4.7123889803800001 6 +1 1.1102399007083965 -4.7933439439873382e-09 1.2582527609412552e-15 1 +1 12.093386620601247 16.999999996755321 2.5357493882438575e-13 1 +1 1.1102399007073598 -4.7874034038268565e-09 0 1 +1 -2.7850730233549399 -3.0000000094537427 1 0 +2 11.599735400705406 -69.032210883053878 -0.86632438691299207 -0.49948178809625149 0.49948178809625149 -0.86632438691299207 13.500000006299508 +1 -2.7850730227944114 -3.0000000094474637 1 0 +1 0 7.999929607649392e-10 0 1 +1 2.8786896463970724e-11 17.000000002300006 -2.5363044843333805e-13 1 +8 -3.0000000071587469 2.9999999964999944 +1 0 7.9501250027647075e-10 0 1 +1 -1.4636292178238364e-11 17.00000000228167 -2.535194276731545e-13 1 +1 1.5707963267951541 7.9990769563664799e-10 0 1 +1 1.5707963267951541 7.9990769563664799e-10 2.4671622763691225e-17 1 +1 2.0313478844189548 -3.3430294088532264e-09 1.0066022086720587e-14 1 +1 12.093386622650019 17.000000002979615 2.5357493882438575e-13 1 +1 2.0313478844201591 -3.338186092783843e-09 0 1 +1 -2.7850730230548173 -3.0000000052771894 1 -4.0959377226334452e-13 +2 11.599735404481489 -69.032210874260699 -0.86632438691299207 -0.49948178809625149 0.49948178809625149 -0.86632438691299207 13.499999996700238 +1 -2.7850730227944114 -3.0000000052737894 1 0 +1 3.1415926535944716 8.000071716196544e-10 -9.8686491054764899e-17 1 +1 6.5661211113550639e-05 17.000000007900006 -2.536304484514347e-13 1 +8 -3.0000000069830164 2.9999999963833188 +1 3.1415926534934289 6.010920650112439e-10 -2.8125649941389824e-15 1 +1 6.5661246954284991e-05 17.000000007925436 -2.535194276731545e-13 1 +1 27.150179464411131 -80.108457799033985 0.16571050576735269 -0.98617444109971153 +1 13.500016431037873 13.999999999415643 1 6.7074124032728822e-13 +1 13.500016431081546 13.999999999433422 1 6.7085226262972479e-13 +1 0.523469554186061 -84.582641482928182 0.16571050576735269 -0.98617444109971153 +1 13.500016398130086 14.000000005288513 1 6.7074124032728822e-13 +1 13.500016398094196 14.000000005263525 1 6.7085226262972479e-13 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +8 9 18.499999503842002 +1 0 -2.4247395202792177e-09 0 1 +8 9 18.499999503842002 +1 6.2831853071795862 -2.4247395202792177e-09 0 1 +1 -1.7905761174035848 18.499999999699998 1 1.13086388675169e-15 +2 153.00242447696024 24.154795623375492 0.063822265525205368 -0.99796128102408377 0.99796128102408377 0.063822265525205368 5 +8 1.7905761174035848 4.9321687709536786 +1 -1.7905761174035848 18.499999501711184 1 0 +1 3.141592653564504 7.1054273576010019e-15 0 1 +1 3.141592653564504 7.1054273576010019e-15 0 1 +8 9 18.499999504429859 +1 3.1415926535897931 -2.4247430729928965e-09 0 1 +8 9 18.499999504429859 +1 3.1415926535897931 -2.4247430729928965e-09 0 1 +1 -1.7905761174035848 9.0000000000000107 1 -2.2617277735033768e-15 +2 138.06442175365646 23.19947080940587 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 5 +1 -1.7905761173890575 8.9999999975752587 1 0 +1 -1.790576117389183 18.499999999700012 1 -1.1308638867334776e-15 +2 153.00242447696024 24.154795623375492 0.063822265525205368 -0.99796128102408377 0.99796128102408377 0.063822265525205368 5 +1 -1.7905761173890564 18.499999997275264 1 0 +1 -1.7905761173891785 8.9999999999999893 1 2.2617277734669583e-15 +2 138.06442175365646 23.19947080940587 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 5 +1 -1.7905761173890564 8.9999999975752587 1 0 +7 0 0 1 2 2 3.0599199677863465 5.9999999812000055 3.1400055482038915 5.9999999808000126 + 18.614045512400001 2 19.615115267699998 2 +7 0 0 1 2 2 5.702445014694165 -3.0000000098999635 5.7825305951392343 -3.0000000102999564 + 18.614045512400001 2 19.615115267699998 2 +7 0 0 1 2 2 3.0599199677590416 5.9999999910346675 3.1400055478352336 5.9999999910346569 + 18.614045512400001 2 19.615115267699998 2 +7 0 0 1 2 2 1.5692092209207582 5.999999989499976 3.0599199677871463 5.9999999812000055 + -0.019838823690999999 2 18.614045512400001 2 +7 0 0 1 2 2 0 -3.0000000016000499 1.4907107467157275 -3.0000000098999635 + -0.019838823690999999 2 18.614045512400001 2 +7 0 0 3 4 2 1.569209220885267 5.999999990709874 1.9259247939479829 5.9999999907098722 2.2826478040386315 5.999999990709874 2.6393508346826575 5.999999990709874 + -0.019838823690999999 4 13.356995165401399 4 +7 0 0 3 4 2 0 -3.0000000004456524 0.35671557306271645 -3.0000000004455005 0.71343858315336428 -3.0000000004453491 1.0701416137973905 -3.0000000004451981 + -0.019838823690999999 4 13.356995165401399 4 +7 0 0 3 4 2 2.6393508353461184 5.9999999910347261 2.7795339154794125 5.9999999910347137 2.9197319585045278 5.9999999910346853 3.0599199677590416 5.9999999910346675 + 13.356995165401399 4 18.614045512400001 4 +1 1.5692092210815554 -2.8421709430404007e-14 0 1 +1 4.8886356886307787e-10 8.0000000093999972 -1.7260620281802029e-14 1 +1 1.5692092210469086 7.1035661294155394e-11 0 1 +1 -1.6744359700554807 2.9999999907000046 1 0 +2 138.06442175236589 23.199470809994004 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 12.5 +1 -1.6744359700482696 2.9999999907710659 1 0 +1 0 0 0 1 +1 3.1415926535974723 0 0 1 +7 0 0 1 2 2 0 -6.0000000069126145 0 2.9999999907714323 + -6.0000000056000005 2 2.9999999907000046 2 +7 0 0 1 2 2 3.141592653423483 -6.0000000069126145 3.1415926534234968 2.9999999907714323 + -6.0000000056000005 2 2.9999999907000046 2 +7 0 0 1 2 2 0 -6.0000000056000005 3.1415926535876055 -5.9999999988999875 + -19.634954084899999 2 19.634954084899999 2 +7 0 0 5 15 5 3948.745617907608 6693.0982921435052 3947.2963174338738 6694.4229967731399 3945.5869118138744 6695.4631319195669 3943.6917424895069 6696.1502310527376 3939.7341090536738 6696.7443121660262 3935.8456712112061 6695.7978207854494 3934.0197316739072 6694.9435861614757 3930.8011834504632 6692.5651955049179 3928.7209131569621 6689.1463842647445 3928.0338140236163 6687.251214941025 3927.4397329105609 6683.2935815043284 3928.3862242910877 6679.4051436622176 3929.2404589150196 6677.5792041254172 3930.429654243223 6675.9699300132534 3931.8789547177048 6674.6452253842826 + -19.634954084899999 6 -9.8174770424699993 3 0 3 9.8174770424699993 3 19.634954084899999 6 +7 0 0 1 2 2 -1.3378920193929389e-10 -6.000000002399247 3.1415926541289485 -6.000000002399247 + -19.634954084899999 2 19.634954084899999 2 +1 3.1415926535876046 7.1054273576010019e-15 0 1 +1 0 7.1054273576010019e-15 0 1 +7 0 0 1 2 2 3.1415926534235012 -6.0000000035106495 3.1415926534235377 5.9999999931306425 + -6.0000000037999968 2 5.9999999808000055 2 +7 0 0 1 2 2 0 -6.0000000035106495 0 5.9999999931306425 + -6.0000000037999968 2 5.9999999808000055 2 +7 0 0 1 2 2 3.1400055478378062 5.9999999808000126 3.1415926535876033 5.9999999808000126 + 19.615115263100002 2 19.634954084899999 2 +7 0 0 1 2 2 1.5707963267939118 -3.0000000102999564 1.5723834325442785 -3.0000000102999564 + 19.615115263100002 2 19.634954084899999 2 +7 0 0 1 2 2 3.1400055478352336 5.999999991034656 3.1415926538784484 5.999999991034656 + 19.615115263100002 2 19.634954084899999 2 +1 -4.8160286236354057 -6.000000003799979 1 -2.2617277734796404e-15 +2 3940.312286313037 6683.8717587642186 0.66436497377502279 -0.74740830984202555 0.74740830984202555 0.66436497377502279 12.5 +1 -4.8160286236380632 -6.0000000037289407 1 0 +1 1.4671566835419911 2.9999999907000046 1 0 +2 138.06442175236589 23.199470809994004 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 12.5 +1 1.4671566835415235 2.9999999907710659 1 0 +1 1.5692092205996522 2.8421709430404007e-14 0 1 +1 -1.0591069437040729e-09 8.0000000038999985 -1.7260620299899189e-14 1 +1 1.5692092206333645 7.1089993700784726e-11 0 1 +1 -4.816028623637596 5.9999999925000012 1 0 +1 -5.3150962302622204 -2.9999999985999213 1 -9.532939064089309e-15 +8 4.8945270977288589 5.3150962300744142 +1 -4.8160286239204328 5.9999999900708643 1 -4.3425173250153374e-13 +1 -4.8160286236380632 5.9999999925710616 1 0 +1 -5.3150962299329771 -2.9999999985837875 1 0 +1 -4.8160286236354057 5.9999999925004444 1 -9.0516757680412775e-14 +1 -3.2436451910911277 -2.9999999985995247 1 -9.0516757644152373e-14 +8 4.8160286236354057 4.8945270977288589 +1 -4.8160286236354057 5.9999999900708643 1 -4.3425173250153374e-13 +7 0 0 1 2 2 4.0095073927659541e-09 11.000000000100002 25.103217298917343 11.000000000100428 + -12.5516086474 2 12.5516086474 2 +7 0 0 1 2 2 135.99304042966136 35.526651318741003 160.74919171527412 39.686518153053406 + -12.5516086474 2 12.5516086474 2 +7 0 0 1 2 2 -1.0082032986247214e-09 10.999999994600003 25.117222904886745 10.999999994600429 + -12.558611452899999 2 12.558611452899999 2 +7 0 0 1 2 2 140.13580307336684 10.872290296587657 164.90576633456413 15.034478007798155 + -12.558611452899999 2 12.558611452899999 2 +7 0 0 1 2 2 0 -8.0000000039002117 3.1415926534196537 -8.0000000038997925 + 1.1481745586300001 2 7.4313598658200002 2 +7 0 0 5 9 3 157.98630524442481 27.361472777976399 157.64508516933719 27.88906451080091 157.09668030528704 28.282659433494093 156.40997164397734 28.429967550914387 155.08679455764721 28.161896978937754 154.29960471224794 27.065087251037038 154.15229659565819 26.378378589279905 154.28633188077893 25.716790046359481 154.62755195586013 25.189198313634765 + 1.1481745586300001 6 4.2897672122200001 3 7.4313598658200002 6 +7 0 0 8 9 2 5.0803805608890326e-13 -8.0000000038910244 0.39269908177147633 -8.0000000038909764 0.78502811962380292 -8.0000000038889993 1.1787167487545958 -8.0000000038889993 1.5707963290096814 -8.0000000038853614 1.9628759020051803 -8.0000000038926373 2.3565645351905005 -8.0000000038880899 2.7488935717777836 -8.0000000038905483 3.1415926534929426 -8.0000000038905981 + 1.1481745586300001 9 7.4313598658200002 9 +7 0 0 1 2 2 0 -8.0000000038997925 3.1415926536640519 -8.0000000039002117 + 7.4313598658100002 2 13.714545172999999 2 +7 0 0 5 9 3 154.62755195586013 25.189198313634765 154.96877203094525 24.661606580850172 155.51717689499475 24.268011658166966 156.20388555730167 24.120703540821037 157.52706264263458 24.388774112723308 158.31425248803703 25.485583840574126 158.46156060562467 26.172292502395642 158.32752531950604 26.833881045251683 157.98630524442481 27.361472777976399 + 7.4313598658100002 6 10.572952519399999 3 13.714545172999999 6 +7 0 0 8 9 2 -9.6850527597780456e-11 -8.0000000038905981 0.39269908165231104 -8.0000000038906443 0.78502811860173694 -8.0000000038744474 1.1787167517220283 -8.0000000039071892 1.5707963254505799 -8.0000000038417056 1.9628759040649371 -8.0000000038999133 2.3565645343712518 -8.0000000038780854 2.7488935718751151 -8.0000000038910652 3.1415926535903012 -8.0000000038910244 + 7.4313598658100002 9 13.714545172999999 9 +1 152.52078470549785 12.953384147857065 0.98617444110842523 0.16571050571549573 +1 12.558611451556539 19.999999996700211 1 2.0381100015556461e-14 +1 152.52078470547156 12.953384147855161 0.98617444110842301 0.16571050571550863 +1 12.558611451193389 19.999999996779138 1 2.0372592501871613e-14 +1 -5.3150962299330962 3.0000000016999948 1 0 +2 138.06442174998153 23.199470804238555 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 12.5 +1 -5.3150962299329771 3.0000000017162161 1 0 +2 138.06442174995462 23.199470804236682 0.064381337771200642 -0.99792536962780476 0.99792536962780476 0.064381337771200642 12.500000000000185 +1 133.65156128408782 16.373845378705923 -0.98617444111517261 -0.16571050567534068 +1 5.4829280515015757 20.000000005870852 1 -5.9396931817445845e-13 +1 133.65156128411593 16.373845378708435 -0.98617444111517483 -0.16571050567532764 +1 -1.2142742618883637 2.999999999053319 1 2.8950115504944563e-13 +2 138.06442175392314 23.199470802386536 -0.86632438691299207 -0.49948178809625149 0.49948178809625149 -0.86632438691299207 5.9999999999402762 +2 138.06442175395148 23.199470802388952 -0.86632438691299862 -0.49948178809624 0.49948178809624 -0.86632438691299862 5.9999999999400124 +1 131.66303521323596 28.207938673893405 -0.98617444108739827 -0.1657105058406301 +1 5.4829280518064643 20.000000005387985 1 3.8841152516511086e-13 +1 131.66303521326381 28.207938673895779 -0.9861744410874006 -0.16571050584061714 +1 -3.2436451905452146 3.0000000016999948 1 0 +2 138.06442174998153 23.199470804238555 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 12.5 +8 3.2436451905452146 4.3137868048471155 +1 -3.2436451905452146 2.9999999995361435 1 4.2494128337144103e-13 +2 138.06442174995462 23.199470804236682 0.064381337771200642 -0.99792536962780476 0.99792536962780476 0.064381337771200642 12.500000000000185 +1 148.3711160726123 37.606584737539919 0.98617444110842523 0.16571050571549573 +1 12.551608650702809 20.00000000220021 1 2.0666042457416554e-14 +1 148.37111607258566 37.606584737537972 0.98617444110842312 0.16571050571550866 +1 12.551608650217975 20.00000000219945 1 2.0539125955565387e-14 +1 -1.0230004991734667 -4.826455268159005e-10 1 -2.8950115476947528e-13 +2 156.30864891411716 26.265115161373025 0.86632438691299207 0.49948178809625149 0.49948178809625149 -0.86632438691299207 2.9999999999998326 +2 156.30864891414586 26.265115161375647 0.86632438691299862 0.49948178809624 0.49948178809624 -0.86632438691299862 2.9999999999999942 +1 -4.1645931530671501 -4.850568358725541e-10 1 2.8950115524272756e-13 +2 156.30864891411716 26.265115161373025 0.86632438691299207 0.49948178809625149 0.49948178809625149 -0.86632438691299207 2.9999999999998326 +2 156.30864891414586 26.265115161375647 0.86632438691299862 0.49948178809624 0.49948178809624 -0.86632438691299862 2.9999999999999942 +1 -3.2436451907327468 3.0000000016999948 1 0 +2 138.06442174998153 23.199470804238555 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 12.5 +1 0.96808907724649096 3.0000000016999948 1 0 +2 138.06442174998153 23.199470804238555 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 12.5 +1 -2.0804577089401013 0.99999999819952201 1 1.2891848309562589e-13 +2 156.30692860193199 26.275335545249643 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 2 +1 -2.0804577088663003 0.99999999820918761 1 0 +1 -5.2220503622859491 0.99999999820086849 1 -1.2891848308561746e-13 +2 156.30692860193199 26.275335545249643 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 2 +1 -5.222050362456093 0.99999999820918761 1 0 +1 5.7825305947682111 -3.9995740053200279e-10 -1.4802973656487727e-16 1 +1 1.5707963267889733 -3.9995740053200279e-10 -3.7007434141219317e-17 1 +1 5.7024450146943337 -3.9996450595936039e-10 1.4802973656734428e-16 1 +1 1.4907107467150962 -3.9996450595936039e-10 -3.700743414183607e-17 1 +1 -0.42056913253336248 -3.9995740053200279e-10 -1.4802973656487709e-16 1 +1 1.6508819066669864 -3.9995740053200279e-10 -3.7007434141219273e-17 1 +1 0 -2.0407395773247572e-09 0 1 +1 10.965856103332232 17.000000000416097 2.0317081350640362e-14 1 +1 1.177212236538203e-10 -2.0558680174920241e-09 0 1 +1 1.0701416146260732 -3.9995029510464519e-10 1.4802973660928609e-16 1 +1 -1.5156513693492392e-09 16.999999994600003 -2.0157794479322348e-14 1 +7 0 0 1 2 2 1.0701416149070437 -2.9999999980059329 1.0701416149071075 3.0000000043936641 + -2.9999999982000034 2 3.0000000020999948 2 +1 -1.878899702489889e-09 16.999999994678955 -2.0261570199409104e-14 1 +1 1.0701416141699696 6.2049876348169164e-10 5.8471746005576985e-15 1 +1 10.965856103637122 16.999999999933227 2.0317081350640362e-14 1 +1 1.0701416141804931 6.0505295370293088e-10 0 1 +1 0 -4.0004977108765161e-10 0 1 +1 1.0250536186905161e-09 17.000000000100002 -2.0206059721607023e-14 1 +7 0 0 1 2 2 0 -2.9999999978035703 0 3.0000000036292889 + -2.9999999977000016 2 3.0000000020999948 2 +1 5.4026472184887098e-10 17.000000000099568 -2.0261570199409104e-14 1 +1 148.81330816203678 37.680887891280804 0.98617444109966845 0.16571050576760793 +1 13.000000001248862 13.999999998004752 1 0 +1 13.00000000173546 13.999999998006842 1 -1.1102230232516863e-16 +1 152.95607080882732 13.026526872946512 0.98617444109966845 0.16571050576760793 +1 13.000000000027143 13.999999996072239 1 0 +1 13.000000000391854 13.999999995993846 1 -1.1102230232516863e-16 +1 0 -9.9795727237506071e-11 0 1 +1 3.1415926534198881 -9.9795727237506071e-11 0 1 +8 -16 -8.0000000038905981 +1 3.1415926535897931 0 0 1 +8 -16 -8.0000000038905981 +1 0 0 0 1 +1 -3.6512540354910525 -16.000000000000014 1 2.2617277734315376e-15 +2 -4.4582414149285654e-11 -2.0000000005770668 -0.0096612317695025773 -0.99995332921126678 0.99995332921126678 -0.0096612317695025773 2 +1 -3.6512540356611969 -15.999999999990818 1 0 +1 3.1415926536638104 -1.0021494745160453e-10 -8.8817842013311205e-16 1 +1 0 -1.0021494745160453e-10 0 1 +8 -16 -8.0000000038910262 +1 0 0 0 1 +8 -16 -8.0000000038910262 +1 3.1415926535897931 0 0 1 +1 0 -9.9795727237506071e-11 0 1 +1 3.141592653419889 -9.9795727237506071e-11 -7.4793972187635579e-16 1 +8 0.99999999820940033 10.499999997909406 +1 3.1415926535897931 0 0 1 +8 0.99999999820940033 10.499999997909406 +1 0 0 0 1 +1 3.1415926536638246 -1.0021494745160453e-10 0 1 +1 0 -1.0021494745160453e-10 0 1 +1 2.7921585473378165e-13 -9.1024268282285589e-11 0 1 +1 3.1415926535900724 -9.1024268282285589e-11 0 1 +1 -3.6512540354910525 10.499999997899991 1 1.1308638867160449e-15 +2 171.24665163699817 27.220439979056938 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 2 +1 -3.6512540356611969 10.499999997909194 1 0 +1 -0.50966138214520473 -15.999999999999998 1 -2.2617277736078248e-15 +2 -4.4582414149285654e-11 -2.0000000005770668 -0.0096612317695025773 -0.99995332921126678 0.99995332921126678 -0.0096612317695025773 2 +8 0.50966138214520473 3.6512540354910525 +1 -0.50966138214520473 -16 1 0 +1 -0.50966138214520473 10.499999997899998 1 -1.1308638868036363e-15 +2 171.24665163699817 27.220439979056938 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 2 +1 -0.50966138207140388 10.499999997909194 1 0 +1 0.52359877559042722 -5.0017945341096492e-10 -1.2918958832471602e-16 1 +1 3779.3599420748596 6660.0520032804488 0.97242247370700607 -0.23322635492059474 +1 11.469456496445307 104.41348264040644 -0.62304053028250761 0.78218955351327202 +1 -5.1508282869601656 -13.750000000000036 1 6.785183320557509e-15 +2 51.255944573533661 118.66524351922165 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 40 +1 -5.1508282869601656 13.749999998999996 1 0 +2 3801.9538269412287 6695.7674577546741 -0.74740830984202555 -0.66436497377502279 -0.66436497377502279 0.74740830984202555 40 +1 0 -1.4210854715202004e-13 0 1 +1 97.554515145077715 13.749999999999401 3.3979655774767399e-15 1 +1 0 -4.9969628435064806e-10 0 1 +1 151.0713906549085 49.721544693277657 -0.986174441105656 -0.16571050573197635 +1 3923.0586230595063 6702.8374818972552 -0.67542413643493326 -0.73742947860871733 +1 0.54105206813827755 -5.0019721697935893e-10 4.1986616205532715e-16 1 +1 11.092981763095354 13.749999999499931 2.9217037810118824e-17 1 +1 54.323748453881493 27.499999998999662 1 -5.2646339559997493e-17 +1 3854.770824323115 6669.7047645647563 -0.95875574290157872 -0.2842312886598552 +1 54.323748453881336 -3.3322090665364469e-13 1 -1.1556232319999318e-17 +1 76.854219659471212 65.621605810495197 -0.93066370356847528 0.36587575877640366 +1 -4.6097762188662985 -13.750000000000034 1 6.5663064389074243e-15 +2 131.72255544786279 87.031064387573224 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 40 +1 -4.6097762188662985 13.749999999000057 1 -1.3132612877814467e-14 +2 3884.849318612281 6720.342530807432 -0.74740830984202555 -0.66436497377502279 -0.66436497377502279 0.74740830984202555 40 +1 3966.0087838369409 6671.2613445026172 -0.67542413643493326 -0.73742947860871733 +1 165.49930513688236 -1.5971073474126563 -0.986174441105656 -0.16571050573197635 +1 0.4712388980580855 -5.0037840537697775e-10 1.9580296980464775e-16 1 +1 -5.7093336476045433 -13.750000000000046 1 7.5390925779700711e-15 +2 166.00173681504162 -42.073457299964993 -0.063822265525205368 0.99796128102408377 0.99796128102408377 0.063822265525205368 40 +1 -5.7093336476045433 13.749999998999996 1 0 +2 3991.3103152799067 6639.6635621482592 -0.66436497377502279 0.74740830984202555 0.74740830984202555 0.66436497377502279 40 +1 0 -3.0198066269804258e-13 0 1 +1 125.37571236808888 13.750000000000341 -9.1698936819065543e-15 1 +1 3925.0310973514725 6515.6568214666586 -0.3828915043757577 0.92379331880939108 +1 69.574408449906556 27.500000000000188 1 4.6023331439991921e-17 +1 3937.8625519209209 6596.5692224866707 0.26702133464174482 0.96369061780539378 +1 2.8078731021295518 13.749999999999297 -1 1.3927481552549415e-13 +2 3961.5100379860919 6532.1131760536982 0.74740830984202555 0.66436497377502279 -0.66436497377502279 0.74740830984202555 40.000000000000007 +1 2.8078731021295527 -13.750000000000746 -1 1.5534498654766624e-13 +2 76.333855318569391 -108.51751725879048 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 40.000000000000007 +1 69.574408449906628 1.8924561995497117e-13 1 -1.7643884719997882e-17 +1 97.353277303665408 -43.157212651296369 0.80345686570370878 0.59536296908152819 +1 37.452276398291318 -99.043999602465064 0.26659060633435527 0.96380986123523404 +1 -0.50000000000000033 -0.75 1 0 +2 -4.4408920985e-16 -2.5 0 1 -1 0 5.00000000059 +2 16.111942327266494 -94.863627370502087 -0.84328539883302711 0.53746603252207725 -0.53746603252207725 -0.84328539883302711 5.0000000005900036 +2 -17.396897482625967 104.4984552703733 0.15426580828437259 -0.98802938235376847 0.98802938235376847 0.15426580828437259 5.0000000005900045 +2 171.24665163671605 27.220439979050703 -0.99729810368467997 -0.073460822122690436 0.073460822122690436 -0.99729810368467997 5.0000000005899867 +1 -3.6415926535897936 -0.75 1 0 +2 4.4408920985e-16 -2.5 0 1 -1 0 5.00000000059 +2 16.111942327266494 -94.863627370502087 -0.84328539883302711 0.53746603252207725 -0.53746603252207725 -0.84328539883302711 5.0000000005900027 +2 -17.396897482625967 104.4984552703733 0.15426580828437259 -0.98802938235376847 0.98802938235376847 0.15426580828437259 5.0000000005900045 +2 171.24665163671605 27.220439979050703 -0.99729810368467997 -0.073460822122690436 0.073460822122690436 -0.99729810368467997 5.0000000005899867 +1 -2.0707963267945018 -2 1 0 +1 0 0 1 0 +1 0 -6.25 1 0 +2 -1.4210854531574558e-14 -7.1054273630800148e-15 0.21174268940349061 0.9773254491131278 0.9773254491131278 -0.21174268940349061 10.500000000800002 +1 0 0 1 0 +1 0 -6.25 1 0 +1 0 0 1 0 +1 0 -6.25 1 0 +2 13.212008478923071 -77.605574646772354 0.96178830986532504 0.27379416905113541 -0.27379416905113541 0.96178830986532504 10.5000000008 +2 -14.284007116247459 85.973058205419804 0.96178830986532504 0.27379416905113541 -0.27379416905113541 0.96178830986532504 10.5000000008 +2 153.00242440655381 24.154795501090902 0.96178830986538888 0.27379416905091097 -0.27379416905091097 0.96178830986538888 10.500000000800011 +1 -5.2123889803842944 -2 1 0 +1 0 0 1 0 +1 0 -6.25 1 0 +2 -1.4210854531574558e-14 -7.1054273630800148e-15 0.21174268940349061 0.9773254491131278 0.9773254491131278 -0.21174268940349061 10.500000000800002 +1 0 0 1 0 +1 0 -6.25 1 0 +1 0 0 1 0 +1 0 -6.25 1 0 +2 13.212008478923071 -77.605574646772354 0.96178830986532504 0.27379416905113541 -0.27379416905113541 0.96178830986532504 10.5000000008 +2 -14.284007116247459 85.973058205419804 0.96178830986532504 0.27379416905113541 -0.27379416905113541 0.96178830986532504 10.5000000008 +2 153.00242440655381 24.154795501090902 0.96178830986538888 0.27379416905091097 -0.27379416905091097 0.96178830986538888 10.500000000800011 +1 -0.49999999999904166 -0.75 1 0 +2 0 -2.5 0 1 -1 0 2.5 +2 16.111942327266494 -94.863627370502087 -0.84328539883302711 0.53746603252207725 -0.53746603252207725 -0.84328539883302711 2.4999999999999978 +2 -17.396897482625967 104.4984552703733 0.15426580828437259 -0.98802938235376847 0.98802938235376847 0.15426580828437259 2.5 +2 171.24665163671605 27.220439979050703 -0.99729810368467997 -0.073460822122690436 0.073460822122690436 -0.99729810368467997 2.5000000000000049 +1 -3.6415926535888348 -0.75 1 0 +2 0 -2.5 0 1 -1 0 2.5 +2 16.111942327266494 -94.863627370502087 -0.84328539883302711 0.53746603252207725 -0.53746603252207725 -0.84328539883302711 2.4999999999999978 +2 -17.396897482625967 104.4984552703733 0.15426580828437259 -0.98802938235376847 0.98802938235376847 0.15426580828437259 2.5 +2 171.24665163671605 27.220439979050703 -0.99729810368467997 -0.073460822122690436 0.073460822122690436 -0.99729810368467997 2.5000000000000049 +1 0 -5.0055604106091778e-10 0 1 +1 0.66322511575615561 -5.0063775347553019e-10 2.0185873175736879e-17 1 +1 13.773104531586023 13.749999999500035 -1.2696569772187004e-16 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -4.16049991609 1 0 +2 -65 16 1 0 -0 1 4 +8 3.1415926535897931 4.212388980383734 +1 -1.0707963267940772 0 1 0 +8 4.212388980383734 6.2831853071795862 +1 7.3539816339735271 0 -1 -0 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 0 2.83950008391 1 0 +2 -65 16 1 0 -0 1 4 +1 0 -4.16049991609 1 0 +2 -65 16 1 0 -0 1 4 +8 0 1.0707963267940184 +1 1.0707963267941467 0 -1 -0 +8 1.0707963267940184 3.1415926535897931 +1 -1.0707963267940184 0 1 0 +1 0 2.83950008391 1 0 +2 -65 16 1 0 -0 1 4 +1 0 2.83950008391 1 0 +2 -65 -18 1 0 -0 1 4 +1 0 2.83950008391 1 0 +2 -65 -18 1 0 -0 1 4 +1 0 0 0 1 +1 0.00024841030000288811 2 0 -1 +1 -4.7123889803846897 -50 1 0 +2 53.499751589699997 -11.999751589700001 1 0 -0 1 33.000248411299992 +1 1.5707887992667127 0 0 1 +1 65 50 0 1 +1 0 0 0 1 +1 54.998518348079998 50 0 1 +1 -6.2831807553015349 -50 1 0 +2 60.500078944800002 -1.9983999996099999 1 0 -0 1 25.999921055400002 +1 1.0821117570382572 0 0 1 +1 29.02014024647923 2 1.5758285442694932e-26 -1 +1 0 0 0 1 +1 -1.5281856552769534e-16 2 1.5758285442694932e-26 -1 +1 -1.0821054642780075 -50 1 0 +2 5.2998818036899999 -44.0004740595 1 0 -0 1 89.000474059599995 +1 0.28847929844500025 0 0 1 +1 -1.5848104793828522e-06 50 0 1 +7 0 0 1 2 2 -6.3480566594618319e-16 0 17.8336924567 0 + 253.667619105 2 271.48631645500001 2 +7 0 0 5 6 2 23 43.222181183300002 19.507530172599999 43.930901568800003 15.9795434532 44.464822943599998 12.427648101899999 44.8215902775 8.8637394700400005 45 5.2999999999999998 45 + 253.667619105 6 271.48631645500001 6 +1 17.8336924567 25 0 1 +1 34.799999999999997 27 0 -1 +1 0 -22.5 0 1 +1 4.1421356236821243 3.5 0 1 +1 7.7279220614041497 0 1 0 +1 -24.464466094100001 50.464466094099997 -0.70710678118654757 0.70710678118654757 +1 11.313708498984761 3.5 0 1 +1 59.5 3.5 0 1 +1 -3.5964800305756251e-15 25 0 1 +1 0 25 0 1 +7 0 0 1 2 2 -5.0214983573291461e-16 0 29.965332826399997 0 + 365.97542723800001 2 395.77050293600001 2 +7 0 0 5 6 2 -78.862687876999999 16.500914749 -81.842187261500001 11.3402706638 -84.147352448999996 5.7902787984600002 -85.7105434594 -0.0314708573361 -86.494623900099995 -5.98978312823 -86.499977001199994 -11.948795860200001 + 365.97542723800001 6 395.77050293600001 6 +1 29.965332826399997 25 0 1 +1 41.051204139799999 25 0 1 +1 0 0 0 1 +1 39 50 0 1 +1 -3.1416001811202254 -50 1 0 +2 -55.499766644799998 -13.999766644799999 1 0 -0 1 31.000233355999999 +1 0.78539063586838664 0 0 1 +1 0 50 0 1 +1 12.077212795244037 0 1 0 +1 -68.880362803899999 -44.460120934599999 0.70710678118654757 -0.70710678118654757 +1 146.84048373849998 3.5 0 1 +1 24.154425590558795 3.5 0 1 +1 0 3.5 0 1 +1 110.8404837385 3.5 0 1 +1 3.5857864375806114 0 1 0 +1 -21.804949832599998 -50.464466094099997 0.70710678118654757 0.70710678118654757 +1 0.78539816339744817 -22.5 0 1 +1 7.1715728752319245 3.5 0 1 +1 8.3775804095730013 12.727922061357855 -1 0 +2 -68.458904109599999 -1 1 0 -0 1 9 +1 2.0943951023934146 10.60660171779821 1.0467283057891829e-16 1 +1 6.2831853071795862 10.606601717798213 0 1 +1 8.3775804095730013 8.4852813742385749 -1 -1.1308638867425838e-15 +1 0 -17.5 1 0 +1 5.2359877559832082 10.606601717798213 0 1 +1 3.1415926535897913 10.606601717798213 0 1 +1 10.995574287564276 12.727922061357855 -1 0 +2 -68.458904109599999 -1 0 1 -1 0 9 +1 10.995574287564276 8.4852813742385713 -1 0 +1 -4.7123889803846897 -17.5 1 0 +1 8.3775804095730013 15.556349186104043 -1 1.1308638867425838e-15 +2 -6.4589041095899997 -1 1 0 -0 1 11 +1 2.0943951023934146 13.435028842544401 1.0467283057891829e-16 1 +1 6.2831853071795862 13.435028842544401 0 1 +1 8.3775804095730013 11.313708498984752 -1 1.6962958301138756e-15 +1 0 -22 1 0 +1 5.2359877559832082 13.435028842551475 0 1 +1 3.141592653589794 13.435028842551475 0 1 +1 10.995574287564276 15.556349186104045 -1 5.6543194337129208e-16 +2 -6.4589041095899997 -1 0 1 -1 0 11 +1 10.995574287564276 11.313708498984759 -1 0 +1 -4.7123889803846897 -22 1 0 +1 3.1415926535870851 2.7924231826891863 8.174328850962241e-14 1 +1 3.1415926535870859 2.7924231826891863 8.174328850962241e-14 1 +1 0.50000000000000089 0 1 0 +2 0 -42 -1 0 0 1 8.0302016061000003 +1 6.2831853071795862 2.7924231826891863 0 1 +1 0 2.7924231826891863 0 1 +1 0.50000000000000089 5.5848463653722087 1 0 +2 -40 -22 -1 0 0 1 9 +1 -5.7831853071814621 0 1 0 +2 0 -42 -1 0 0 1 8.0302016061000003 +1 -5.7831853071825634 5.5848463653722087 1 0 +2 -40 -22 -1 0 0 1 9 +1 3.1415926535870859 2.7924231826891859 8.1822805327238757e-14 1 +1 3.1415926535870859 2.7924231826891859 8.1743288509622398e-14 1 +1 0.50000000000000044 -1.1356582856289599e-15 1 1.9637245312182664e-16 +2 0 0 -1 0 0 1 8.0302016061000003 +1 6.2831853071795862 2.7924231826891863 0 1 +1 0 2.7924231826891863 0 1 +1 0.50000000000000089 5.5848463653722087 1 0 +2 -40 20 -1 0 0 1 9 +1 -5.7831853071814621 1.135658285627972e-15 1 -1.9637245312159212e-16 +2 0 0 -1 0 0 1 8.0302016061000003 +1 -5.7831853071825634 5.5848463653722087 1 0 +2 -40 20 -1 0 0 1 9 +1 0 -44.5 1 0 +2 0 -42 1 0 -0 1 6.7999999999999972 +1 0 -44.5 1 0 +2 0 -42 1 0 -0 1 6.7999999999999972 +1 0 -44.5 1 0 +2 0 0 1 0 -0 1 6.7999999999999972 +1 0 -44.5 1 0 +2 0 0 1 0 -0 1 6.7999999999999972 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -4.16049991609 1 0 +2 -65 -18 1 0 -0 1 4 +8 3.1415926535897931 4.2123889803844197 +1 -1.0707963267942406 0 1 0 +8 4.2123889803844197 6.2831853071795862 +1 7.3539816339742128 0 -1 -0 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 0 -4.16049991609 1 0 +2 -65 -18 1 0 -0 1 4 +8 0 1.0707963267940186 +1 1.0707963267939848 0 -1 -0 +8 1.0707963267940186 3.1415926535897931 +1 -1.0707963267940186 0 1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535882988 4.0617064475417965 4.2359744698736479e-14 1 +1 3.1415926535882988 4.0617064475417965 4.2359744698736479e-14 1 +1 -2.6415926535904455 8.123412895091576 1 -5.6543194337117444e-16 +2 33 -4 -1 0 0 1 12 +1 0 4.0617064475417965 0 1 +1 6.2831853071795862 4.0617064475417965 0 1 +1 -2.6415926535897927 8.1234128950915689 1 5.6543194337140933e-16 +2 33 -4 -1 0 0 1 12 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 65.698348114799998 26 0 -1 +1 -1.5707963267948966 -26.000000000000007 1 0 +2 -12.1983481148 -55 1 0 -0 1 10 +1 128.84048373849998 0 -1 0 +1 -42.340483738499998 -53 1 0 +1 40.025602069900003 0 1 0 +1 -86.5 -12.9743979301 0 1 +1 28.710068817900002 3.5 0 1 +1 42.145513389709926 3.5 0 1 +1 21.072756694829962 0 1 0 +1 -68.326309529599996 34.750457374500002 0.50000000000018996 0.86602540378432902 +1 44.105034408900003 0 1 0 +1 -42.394965591099997 53 1 0 +1 -3.9269908169943126 -26 1 0 +2 -14.8578643763 55 1 0 -0 1 10 +1 0.78539816339744828 0 0 1 +1 14.6421356237 26 0 -1 +1 24.72106781187 52 -1 0 +1 -4.7789321881299998 45 -1 0 +1 14.510070123260284 52 -1 -1.5748819111832277e-26 +1 59.8946005755 27.7702704676 -0.8829475928588979 0.46947156278594571 +1 59.999259174039999 0 1 0 +1 86.5 -6.9992591740399996 0 -1 +1 32.849298262600001 52 -1 0 +1 20.650701737399999 -45 1 0 +1 0 12.237646832623874 1 0 +2 0 0 1 0 -0 1 7.600000000001538 +2 -65 -18.000000000000455 0.47942553860381582 0.87758256189058437 0.87758256189058437 -0.47942553860381582 7.600000000001538 +1 0 12.237646832623874 1 0 +2 0 0 1 0 -0 1 7.600000000001538 +2 -65 -18.000000000000455 0.47942553860381582 0.87758256189058437 -0.87758256189058437 0.47942553860381582 7.600000000001538 +1 1.0707963267948957 -0.75 1 0 +2 0 9.3000000000000007 1 0 -0 1 11.300000000000001 +2 -40 20 -1 5.5511151231299994e-17 5.5511151231299994e-17 1 11.299999999999997 +2 -40 -21.999999999999996 1 -5.5511151231299994e-17 -5.5511151231299994e-17 -1 11.300000000000001 +1 -5.2123889803849357 -0.75 1 0 +2 0 9.3000000000000007 1 0 -0 1 11.300000000000001 +2 -40 20 -1 5.5511151231299994e-17 5.5511151231299994e-17 1 11.299999999999997 +2 -40 -21.999999999999996 1 -5.5511151231299994e-17 -5.5511151231299994e-17 -1 11.300000000000001 +1 0 12.237646832623799 1 0 +2 0 0 1 0 -0 1 7.600000000001538 +2 -65.000000000000909 16.000000000000455 0.47942553860381565 0.87758256189058437 0.87758256189058437 -0.47942553860381565 7.6000000000015362 +1 0 12.237646832623799 1 0 +2 0 0 1 0 -0 1 7.600000000001538 +2 -65.000000000000909 16.000000000000455 0.47942553860381565 0.87758256189058437 -0.87758256189058437 0.47942553860381565 7.6000000000015362 +1 1.0707963267948961 0 1 0 +2 0 12.199999999999999 1 0 -0 1 15.300000000000001 +2 33 -4.0000000000000009 -1 5.5511151231299994e-17 5.5511151231299994e-17 1 15.300000000000001 +1 -5.2123889803851542 0 1 0 +2 0 12.199999999999999 1 0 -0 1 15.300000000000001 +2 33 -4.0000000000000009 -1 5.5511151231299994e-17 5.5511151231299994e-17 1 15.300000000000001 +1 7.600000000001728 0 -1 1.3616885397027543e-12 +1 -7.6000000000010459 0 1 -1.3618828287320637e-12 +1 7.600000000001728 0 -1 -1.3616885397027543e-12 +1 -7.6000000000024102 9.0949470177292824e-13 1 1.3614942506734449e-12 +1 -3.6853515189259376 4.7107926080431142 -0.48367652571530129 -0.87524683288314464 +1 -7.6000000000023729 -5.5111470942392771e-13 1 -1.3614664950978293e-12 +1 -68.643634093393302 9.3303725296304947 0.47942553860262094 0.87758256189123718 +1 -61.356365906611245 22.669627470370415 -0.47942553860262072 -0.87758256189123718 +1 7.6000000000012733 0 -1 1.361577517400292e-12 +1 -7.6000000000008185 1.8189894035458565e-12 1 -1.3617718064296012e-12 +1 7.6000000000012733 0 -1 -1.361577517400292e-12 +1 -7.600000000001728 0 1 1.3614387395222136e-12 +1 -3.6853515189259385 4.7107926080431568 -0.4836765257153029 -0.87524683288314375 +1 -7.6000000000013728 -1.2891909761947318e-12 1 -1.3614387395222138e-12 +1 -68.643634093390574 -24.669627470369505 0.47942553860262105 0.87758256189123696 +1 -61.356365906609426 -11.330372529630495 -0.47942553860262088 -0.87758256189123707 +1 1.0707963267948957 -0.75 1 0 +2 0 9.3000000000000007 1 0 -0 1 9.3000000000000007 +2 -40 20 -1 5.5511151231299994e-17 5.5511151231299994e-17 1 9.2999999999999972 +2 -40 -21.999999999999996 1 -5.5511151231299994e-17 -5.5511151231299994e-17 -1 9.3000000000000007 +1 -5.2123889803847998 -0.75 1 0 +2 0 9.3000000000000007 1 0 -0 1 9.3000000000000007 +2 -40 20 -1 5.5511151231299994e-17 5.5511151231299994e-17 1 9.2999999999999972 +2 -40 -21.999999999999996 1 -5.5511151231299994e-17 -5.5511151231299994e-17 -1 9.3000000000000007 +1 -5.2123889803831265 0 1 0 +2 0 12.199999999999999 1 0 -0 1 12.199999999999999 +2 33 -4.0000000000000009 -1 5.5511151231299994e-17 5.5511151231299994e-17 1 12.199999999999999 +1 1.0707963267948961 0 1 0 +2 0 12.199999999999999 1 0 -0 1 12.199999999999999 +2 33 -4.0000000000000009 -1 5.5511151231299994e-17 5.5511151231299994e-17 1 12.199999999999999 +1 -5.2123889803849277 4.5694197534861836 1 0 +1 -5.2123889803849277 -0.75 1 0 +1 0 2.284709876743205 0 1 +1 6.2831853071795862 2.284709876743205 0 1 +1 -5.2123889803848282 0 1 0 +2 0 6 1 0 -0 1 7.8065285868099998 +1 3.1415926535899863 2.284709876743205 -3.1683034219088181e-14 1 +1 3.1415926535899863 2.284709876743205 -3.1683034219088181e-14 1 +1 1.0707963267948957 4.5694197534861836 1 0 +1 1.0707963267948957 -0.75 1 0 +1 1.0707963267948957 0 1 0 +2 0 6 1 0 -0 1 7.8065285868099998 +1 0 3.75 0 1 +1 6.2831853071795862 3.75 0 1 +1 -5.212388980384941 3.25 1 0 +1 -5.212388980384941 6.2831853071795862 1 0 +1 3.141592653590044 3.75 0 1 +1 3.141592653590044 3.75 0 1 +1 -5.212388980384941 3.6500000000000004 1 0 +1 -5.212388980384941 11.909111316929993 1 1.6962958301137409e-15 +1 1.0707963267948957 3.25 1 0 +1 -2.0707963267951479 6.2831853071795862 1 0 +1 1.0707963267948957 3.6500000000000004 1 0 +1 -1.8504471532886373 11.909111316930014 1 -2.8271597168564607e-15 +1 3.3619418270966803 12.897965698930012 -2.6945678834044507e-14 1 +1 0 12.897965698930012 0 1 +1 -1.8504471532886377 13.886820080930507 1 -1.130863869812763e-15 +2 8.881784197e-16 12 1 0 -0 1 8.1624680448099998 +1 0.22034919589643231 12.897965698928584 -7.3118222252784848e-14 1 +1 3.1415926759799664 12.897965698928584 -7.2528785528290296e-14 1 +1 -5.2123889803845618 13.886820080930486 1 2.2617278073449014e-15 +2 6.2172489379000002e-15 12.000000000000005 1 0 -0 1 8.1624680448099998 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535900387 0 0 1 +1 3.1415926535900387 0 0 1 +1 -5.2123889803849357 0.25 1 0 +1 -5.2123889803849357 3.1415926535898051 1 -2.2617277734849904e-15 +1 1.0707963267948957 0.25 1 0 +1 -2.0707963267951426 3.141592653589794 1 -4.2407395752843576e-16 +1 -5.2123889803840378 0.75 1 0 +2 0 11.300000000000001 1 0 -0 1 12 +1 1.0707963267948961 0.75 1 0 +2 0 11.300000000000001 1 0 -0 1 12 +1 -2.0707963267951865 1.5707963267949108 1 -3.3925916602274387e-15 +2 -1.2570549911299999e-15 11.299999999999997 1 0 -0 1 11.800000000000001 +1 -5.2123889803849801 1.5707963267948599 1 5.6543194337123984e-15 +2 -1.2570549911299999e-15 11.299999999999997 1 0 -0 1 11.800000000000001 +1 3.1415926535900698 1.0842882147699129e-11 8.1987631789403288e-15 1 +1 0 1.0839329434020328e-11 0 1 +1 0 1.0842882147699129e-11 0 1 +1 3.1415926535900698 1.0846434861377929e-11 8.1987631789403493e-15 1 +1 3.1415926535908922 2.8776980798284058e-13 -5.5129614478979606e-14 1 +1 0 2.8599345114344032e-13 0 1 +1 0 2.8421709430404007e-13 0 1 +1 3.1415926535908913 2.851052727237402e-13 -5.5129614478979467e-14 1 +1 -2.070796326795068 5.2359877559852093 1 -5.6543194337126102e-16 +1 -1.4424777960769384 2.0943951023904099 1 1.5549378442710529e-15 +1 -5.212388980384862 5.2359877559852066 1 0 +1 -5.212388980384862 2.0943951023904157 1 0 +1 3.769911184307976 1.7421619702417956e-12 2.1627771833831072e-14 1 +1 0 1.7417178810319456e-12 0 1 +1 0.62831853071818322 1.7417178810319456e-12 2.1521753344449503e-14 1 +1 3.1415926535900178 1.7434942378713458e-12 2.1627771833831072e-14 1 +1 0 -0.40000000000000002 0 1 +1 6.2831853071795862 -0.40000000000000002 0 1 +1 3.1415926535900303 -0.40000000000000002 0 1 +1 3.1415926535900303 -0.40000000000000002 0 1 +1 -5.2123889803849277 -0.34999999999999998 1 0 +1 -5.2123889803849277 3.1415926535897953 1 -4.2407395752843694e-16 +1 1.0707963267948957 -0.34999999999999998 1 0 +1 -2.0707963267951341 3.1415926535897936 1 -2.8271597168562459e-16 +1 3.1415926535902639 8.4792173282721706e-12 1.0743206924112559e-14 1 +1 0 8.4909856923331972e-12 0 1 +1 0 8.4909856923331972e-12 0 1 +1 3.1415926535902634 8.4792173282721706e-12 1.0743206924112586e-14 1 +1 -2.0707963267953851 1.5707963267948966 1 0 +2 8.881784197e-16 8.6000000000000014 1 0 -0 1 8.9000000000000004 +1 -5.2123889803851782 1.5707963267948966 1 0 +2 -3.5527136788e-15 8.5999999999999961 1 0 -0 1 8.9000000000000004 +1 0 -0.40000000000000002 0 1 +1 6.2831853071795862 -0.40000000000000002 0 1 +1 3.1415926535899028 -0.40000000000000002 0 1 +1 3.1415926535899028 -0.40000000000000002 0 1 +1 -5.2123889803847998 -0.34999999999999998 1 0 +1 -5.2123889803847998 0 1 0 +1 1.0707963267948957 -0.34999999999999998 1 0 +1 -2.0707963267950067 0 1 0 +1 -5.2123889803850805 1.5707963267949474 1 -7.4919732496686874e-15 +2 0 8.6000000000000014 1 0 -0 1 9 +1 -2.0707963267952874 1.5707963267948966 1 0 +2 0 8.6000000000000014 1 0 -0 1 9 +1 3.141592653590171 0 8.1987631788506937e-15 1 +1 0 0 0 1 +1 0 0 0 1 +1 3.1415926535901706 0 7.916047207166187e-15 1 +1 0 3 0 1 +1 6.2831853071795862 3 0 1 +1 3.1415926535891394 3 0 1 +1 3.1415926535891403 3 0 1 +1 -5.2123889803840378 4.0499999999999998 1 0 +1 11.495574287563624 16.970562748477032 -1 1.5832094414399465e-14 +1 1.0707963267948961 4.0499999999999998 1 0 +1 7.3067840827778063 16.97056274847721 -1 -1.9224686074623924e-14 +1 7.3067840827778072 15.273506473629499 -1 -1.9790118017995215e-14 +2 -1.5006201728799999e-15 12 1 0 -0 1 10.800000000000001 +1 11.495574287564473 15.273506473629324 -1 1.5266662471023926e-14 +2 -1.5006201728799999e-15 12 1 0 -0 1 10.800000000000001 +1 5.2359877559848469 16.122034611084892 -1.0571955888436756e-13 1 +1 3.1415926535917302 16.122034611084885 -1.059812409608138e-13 1 +1 2.0943951023950533 16.122034611084832 -1.059812409608138e-13 1 +1 6.2831853071795862 16.122034611084835 0 1 +1 6.2831853071795862 2.9586999517050572e-11 0 1 +1 0 2.9586999517050572e-11 0 1 +1 -3.2294167340296553e-12 217.33698423122945 1 0 +2 -3.4442901667469314 86.362208808522695 -0.48377002034766498 0.87519515961459704 -0.87519515961459704 -0.48377002034766498 7.9999999999999947 +1 3.1415926535895196 5.2182258514221758e-11 0 1 +1 3.1415926535895196 5.2182258514221758e-11 0 1 +7 0 0 3 47 45 3.1415926535897363 185.42666444175003 3.1652821420975683 185.36590513255078 3.21254404765136 185.24152736298788 3.2831199568101295 185.04742995211379 3.3534087495143532 184.84681064399203 3.4234557722185395 184.64081072978811 3.4933148756209365 184.43065795701366 3.5630479390156857 184.21767849601883 3.6327223249328418 184.00329338346782 3.7024089161641407 183.78901911584984 3.7721803537481704 183.57646716587314 3.8421098461742784 183.36734365727756 3.9122708078402946 183.16344948310564 3.9827371322965521 182.96667849170896 4.0535856625236573 182.77902295835867 4.1248954022925348 182.60253901091329 4.1967138145678913 182.43941835000766 4.2690598053900173 182.29193103099374 4.341928868516435 182.1623302210414 4.4152953445562435 182.05276616440617 4.4891127364287868 181.96519769209129 4.5633111073262196 181.90130434575715 4.6377936663770276 181.86239850025373 4.7124253064581527 181.8493368774121 4.7870470582338998 181.86244257435513 4.8615229396671209 181.90140423681797 4.9357322120555205 181.96535652331812 5.0095707134401692 182.05297500346887 5.0829537577609267 182.16256764886012 5.1558220590675425 182.29216755585063 5.2281480712902688 182.43962414814806 5.2999466084703375 182.6026992319608 5.3712528341091161 182.77917611395571 5.4421105179036289 182.96686647579489 5.5125758325688974 183.16365060674278 5.5827196587688466 183.36752022556587 5.6526281300371464 183.57660207990887 5.7223821577558702 183.78910954769523 5.7920576420722201 184.00334521858412 5.8617270158730213 184.21770193196824 5.9314593508023803 184.43066405248047 6.0013197725552185 184.64080896572079 6.0713683337297253 184.84680745559319 6.1416579410241905 185.04742833498395 6.2122339517382725 185.24152718146837 6.2594958080296665 185.36590532685656 6.2831853071795862 185.42666444190453 + 0 4 0.84433881773636366 1 1.6886776354727273 1 2.5330164532090911 1 3.3773552709454546 1 4.2216940886818186 1 5.0660329064181822 1 5.9103717241545457 1 6.7547105418909092 1 7.5990493596272728 1 8.4433881773636372 1 9.2877269950999999 1 10.132065812836364 1 10.976404630572727 1 11.820743448309091 1 12.665082266045454 1 13.509421083781818 1 14.353759901518183 1 15.198098719254546 1 16.04243753699091 1 16.886776354727274 1 17.731115172463635 1 18.5754539902 1 19.419792807936364 1 20.264131625672729 1 21.108470443409093 1 21.952809261145454 1 22.797148078881818 1 23.641486896618183 1 24.485825714354547 1 25.330164532090908 1 26.174503349827273 1 27.018842167563637 1 27.863180985300001 1 28.707519803036366 1 29.551858620772727 1 30.396197438509091 1 31.240536256245456 1 32.08487507398182 1 32.929213891718184 1 33.773552709454549 1 34.617891527190913 1 35.462230344927271 1 36.306569162663635 1 37.1509079804 4 +7 0 0 3 47 45 1.2196797438913543 44.833387777894131 1.21470415497803 44.833392240828232 1.2047540389686699 44.819916640016103 1.189895308665714 44.760025229818794 1.1751674154016793 44.661211058591547 1.1606307797642361 44.524300505177642 1.1463440779808738 44.35016280180848 1.1323644910113462 44.139713840271462 1.1187484671622705 43.893911374894508 1.1055523267811787 43.613752554591294 1.0928328882004672 43.300270741844606 1.0806480586595404 42.95453285487968 1.0690574285096186 42.577635330136907 1.0581227680045964 42.170705080358573 1.0479087914677423 41.73488184991907 1.0384823344292828 41.271384844213479 1.0299154898586538 40.781782148999433 1.0222837712796835 40.267999362887196 1.0156627676349432 39.732330636128019 1.0101251252494106 39.177448988848326 1.0057374183257664 38.606415997847854 1.002557044305461 38.022694729699175 1.0006290966956985 37.430150320074837 0.99998331482369762 36.833096721864194 1.0006309726129305 36.236124914712427 1.00256123072197 35.643645816315264 1.0057441733722716 35.059859105824692 1.010134190559093 34.488680956074688 1.0156733021740278 33.933683209745901 1.0222945296981236 33.39802732294109 1.0299251878095101 32.884407795179818 1.0384904609132473 32.394962896329673 1.0479171547415811 31.931511015042148 1.0581331239566305 31.495652093867825 1.0690687748158787 31.088768198957688 1.0806586056384271 30.712053108457546 1.0928417215693258 30.366533882193792 1.1055590986768979 30.05323051331677 1.1187532276524519 29.773175222919175 1.132367529423745 29.527394608485416 1.1463457989719326 29.316900357150807 1.1606316066577334 29.142677435407517 1.1751677213997829 29.005673808213324 1.1898953753090491 28.906786564042179 1.2047540367910621 28.846860886765093 1.2147041570022192 28.83338111843382 1.2196797438926557 28.833387777854725 + 0 4 0.84433881773636366 1 1.6886776354727273 1 2.5330164532090911 1 3.3773552709454546 1 4.2216940886818186 1 5.0660329064181822 1 5.9103717241545457 1 6.7547105418909092 1 7.5990493596272728 1 8.4433881773636372 1 9.2877269950999999 1 10.132065812836364 1 10.976404630572727 1 11.820743448309091 1 12.665082266045454 1 13.509421083781818 1 14.353759901518183 1 15.198098719254546 1 16.04243753699091 1 16.886776354727274 1 17.731115172463635 1 18.5754539902 1 19.419792807936364 1 20.264131625672729 1 21.108470443409093 1 21.952809261145454 1 22.797148078881818 1 23.641486896618183 1 24.485825714354547 1 25.330164532090908 1 26.174503349827273 1 27.018842167563637 1 27.863180985300001 1 28.707519803036366 1 29.551858620772727 1 30.396197438509091 1 31.240536256245456 1 32.08487507398182 1 32.929213891718184 1 33.773552709454549 1 34.617891527190913 1 35.462230344927271 1 36.306569162663635 1 37.1509079804 4 +1 0 217.33698423122945 1 0 +2 -3.4442901667469314 86.362208808522695 -0.48377002034766498 0.87519515961459704 -0.87519515961459704 -0.48377002034766498 7.9999999999999947 +7 0 0 3 47 45 0 185.42666444190453 0.022968858260453515 185.48559784341191 0.069015608426120173 185.60076523240517 0.13841473781128158 185.76480811828034 0.20814749086969114 185.91948255166619 0.27820897996822086 186.064304325325 0.34858898571809094 186.19890863480816 0.41927093543216676 186.32306887773876 0.49023163421009552 186.43669666836814 0.5614391047783216 186.53984063757633 0.63286291743555423 186.63268466123608 0.7044760264026696 186.71553540276244 0.7762528359583527 186.78879935554062 0.84816882339055744 186.85296218025852 0.92020038437719143 186.90856742823831 0.99232513032413217 186.95619542587175 1.0645224204818766 186.99644212864064 1.1367740137731974 187.02989793569438 1.2090646777664391 187.05712669260797 1.2813826330824833 187.07864398087247 1.3537195888288664 187.09489807226186 1.4260706071401823 187.10624093697345 1.4984317446339841 187.11296598949909 1.570798817825152 187.11524102608414 1.6431673774390674 187.11310297993361 1.7155323778724472 187.10647348792858 1.7878880672520945 187.09516907572274 1.8602278837186637 187.07891278577196 1.9325443366866146 187.05734541525806 2.0048288056915964 187.03003687150095 2.0770711951754244 186.9964974475223 2.1492594397506157 186.95618929951587 2.2213786747659046 186.9085371965401 2.2934106167602608 186.85294197941252 2.3653310389205164 186.78878390885939 2.4371104738957841 186.71548383455996 2.5087228210458425 186.63256294817106 2.580142150353157 186.53964041846467 2.651342199995709 186.43644130462246 2.7222963629465999 186.3228017464393 2.7929785751745611 186.19867476873372 2.8633648084919279 186.06413635202065 2.9334348432580688 185.9193898239314 3.0031746257045877 185.76477670137976 3.0725768975005878 185.60076340899383 3.1186240083734948 185.48559983082964 3.1415926535897363 185.42666444175003 + 0 4 0.8187103077386364 1 1.6374206154772728 1 2.456130923215909 1 3.2748412309545456 1 4.0935515386931822 1 4.912261846431818 1 5.7309721541704546 1 6.5496824619090912 1 7.3683927696477278 1 8.1871030773863644 1 9.0058133851250002 1 9.8245236928636359 1 10.643234000602273 1 11.461944308340909 1 12.280654616079547 1 13.099364923818182 1 13.918075231556818 1 14.736785539295456 1 15.555495847034091 1 16.374206154772729 1 17.192916462511363 1 18.01162677025 1 18.830337077988638 1 19.649047385727272 1 20.467757693465909 1 21.286468001204547 1 22.105178308943184 1 22.923888616681818 1 23.742598924420456 1 24.561309232159093 1 25.380019539897727 1 26.198729847636365 1 27.017440155375002 1 27.836150463113636 1 28.654860770852274 1 29.473571078590911 1 30.292281386329545 1 31.110991694068183 1 31.92970200180682 1 32.748412309545458 1 33.567122617284092 1 34.385832925022726 1 35.204543232761367 1 36.023253540500001 4 +7 0 0 3 47 45 1.2196797438926557 28.833387777854725 1.2245038663745398 28.833372485735364 1.2341527841253359 28.846061694127396 1.2485619616659458 28.903506427633975 1.2628414469695628 28.999690887625 1.2769232118513825 29.13467346077784 1.2907381169546062 29.308305917488326 1.304216060195305 29.520188381057483 1.3172866007896109 29.769648146523739 1.3298789389260595 30.055735103019337 1.3419245097107597 30.377231938698944 1.3533582154747803 30.732652530756766 1.364118380873625 31.120267784601594 1.3741470300672392 31.538125460480924 1.3833901112704414 31.984071611084612 1.3917977655021136 32.455771587782202 1.3993246092638287 32.950731161345495 1.4059300374636745 33.46631761609698 1.4115785327562107 33.999780835868442 1.4162400096308358 34.548274449294603 1.4198900700908665 35.108876745955158 1.4225106073021987 35.678612449788865 1.4240883414371261 36.254471751505655 1.4246150407485314 36.833408042662313 1.4240880060411349 37.412354205201687 1.4225099610349761 37.988239513981654 1.4198890705711298 38.558006393136793 1.4162389045311528 39.118627213196461 1.4115784021989393 39.667121071345989 1.405931826772385 40.200570598356457 1.3993287148353839 40.716138675700797 1.3918038224172251 41.211085485251481 1.3833970599636549 41.682784318469132 1.3741534433285409 42.128742015044246 1.3641229539773374 42.546602102281398 1.3533600095844756 42.934149028902183 1.3419236188032784 43.289438620022977 1.3298765150340288 43.610781895573588 1.3172844085645723 43.896745748487973 1.3042152208284721 44.146149153288384 1.2907383413148359 44.358060393322432 1.2769238912104379 44.531794682996164 1.2628420354996048 44.666909191368262 1.2485622177428646 44.763208065305548 1.2341528080420181 44.820710053032812 1.2245038412437199 44.833407168704447 1.2196797438913543 44.833387777894131 + 0 4 0.8187103077386364 1 1.6374206154772728 1 2.456130923215909 1 3.2748412309545456 1 4.0935515386931822 1 4.912261846431818 1 5.7309721541704546 1 6.5496824619090912 1 7.3683927696477278 1 8.1871030773863644 1 9.0058133851250002 1 9.8245236928636359 1 10.643234000602273 1 11.461944308340909 1 12.280654616079547 1 13.099364923818182 1 13.918075231556818 1 14.736785539295456 1 15.555495847034091 1 16.374206154772729 1 17.192916462511363 1 18.01162677025 1 18.830337077988638 1 19.649047385727272 1 20.467757693465909 1 21.286468001204547 1 22.105178308943184 1 22.923888616681818 1 23.742598924420456 1 24.561309232159093 1 25.380019539897727 1 26.198729847636365 1 27.017440155375002 1 27.836150463113636 1 28.654860770852274 1 29.473571078590911 1 30.292281386329545 1 31.110991694068183 1 31.92970200180682 1 32.748412309545458 1 33.567122617284092 1 34.385832925022726 1 35.204543232761367 1 36.023253540500001 4 +1 -44.014563943219713 179.94016504662767 0.88531315494257756 0.46499528781012356 +1 -47.775675917178702 30.000000000402292 1 9.7144514654701197e-17 +1 -36.583109106154275 85.738159221503821 0.46499528781015664 -0.88531315494256024 +1 38.240394560521352 27.302727151917033 0.88138281220024028 0.47240272899084307 +1 92.649477872073462 47.035593885099999 -0.042805184291210725 -0.99908343805599931 +1 30.808939723142316 121.50473297656377 0.48377002034767214 -0.87519515961459304 +1 -189.68937465600001 65.099710057899998 0.46327432155297421 0.88621493047095057 +1 -189.68937465600001 65.099710057900012 0.4632743215529741 0.88621493047095057 +1 -5.2123889803809949 25.014985606210882 1 9.0469110941128043e-15 +2 20.744210852302565 42.60245082971295 -0.48377002034766498 0.87519515961459704 -0.87519515961459704 -0.48377002034766498 10.800000000000004 +1 1.0707963267736309 25.014985606210974 1 -9.0469110937685407e-15 +2 20.744210852302565 42.60245082971295 -0.48377002034766498 0.87519515961459704 -0.87519515961459704 -0.48377002034766498 10.800000000000004 +1 -5.2123889804023484 25.014985605371852 1 -9.0469110939177932e-15 +2 -27.632791182349386 130.12196679098227 -0.48377002034766498 0.87519515961459704 -0.87519515961459704 -0.48377002034766498 10.800000000000004 +1 1.0707963268199965 25.014985605371759 1 9.0469110939635487e-15 +2 -27.632791182349386 130.12196679098227 -0.48377002034766498 0.87519515961459704 -0.87519515961459704 -0.48377002034766498 10.800000000000004 +1 0 217.33698423165856 1 0 +2 -44.080971878953171 159.87860221471988 -0.48377002034766498 0.87519515961459704 -0.87519515961459704 -0.48377002034766498 8.0000000000000036 +1 7.0912165028857999e-12 217.33698423165856 1 0 +2 -44.080971878953171 159.87860221471988 -0.48377002034766498 0.87519515961459704 -0.87519515961459704 -0.48377002034766498 8.0000000000000036 +1 78.602884690198735 86.784560514999995 0.99897179404185565 -0.045336019992897304 +1 -85.000000000061178 15.000000000487216 5.2735593669694936e-14 -1 +1 62.474022547875038 77.932861893699993 -0.042805184291210725 -0.99908343805599931 +7 0 0 3 47 45 1.5299797575929142 117.93511013210616 1.5180962280615768 117.94126012385442 1.494330969009249 117.95893896899051 1.4586929505945303 118.00151522820944 1.4230693440979514 118.0600819063657 1.3874644405981587 118.13453285799024 1.3518823843614056 118.22473767059378 1.3163271548805495 118.33053884793785 1.2808025747807004 118.45175358411299 1.2453123064445955 118.58817429699397 1.2098598443730113 118.73956953337505 1.1744485188908298 118.90568462801093 1.139081445746281 119.08624300825332 1.1037613345918267 119.28094896404407 1.0684905963632727 119.48948785027783 1.0332713523881594 119.71152758898081 0.99810544884570085 119.94671995435947 0.96299445905136727 120.1947019162883 0.92793967899519214 120.45509696717265 0.89294211548623281 120.7275164568714 0.85800246838132421 121.01156091200318 0.82312110666286831 121.30682140966319 0.78829804350472232 121.61288074910797 0.75353288806967933 121.92931565419566 0.71882502140978044 122.25569628710414 0.68417363910766094 122.59158649512776 0.64957774737999308 122.93654485172682 0.61503616306933873 123.29012550079788 0.58054750524226573 123.65187905360428 0.54611018201651562 124.02135347185109 0.51172237245157459 124.39809495351125 0.47738200312088713 124.78164882151567 0.44308672413993655 125.17156039822545 0.40883386948728273 125.56737593391797 0.37462046755701056 125.9686433811511 0.34044352854695009 126.37490929856695 0.30630005439432911 126.78571882675782 0.27218702698349401 127.20061613623538 0.23810139841131819 127.61914476091688 0.20404007777717484 128.04084796272912 0.16999991638373402 128.46526908622161 0.1359776904940587 128.89195192202882 0.10197008451646083 129.32044104492363 0.067973665497883501 129.75028224465936 0.033984884207089595 130.18102261106432 0.01132827648997976 130.4684821432472 0 130.6122115647849 + 0 4 2.0168680061249997 1 4.0337360122499994 1 6.0506040183749992 1 8.0674720244999989 1 10.084340030624999 1 12.101208036749998 1 14.118076042874998 1 16.134944048999998 1 18.151812055124999 1 20.168680061249997 1 22.185548067374995 1 24.202416073499997 1 26.219284079624998 1 28.236152085749996 1 30.253020091874994 1 32.269888097999996 1 34.286756104124997 1 36.303624110249999 1 38.320492116374993 1 40.337360122499994 1 42.354228128624996 1 44.37109613474999 1 46.387964140874992 1 48.404832146999993 1 50.421700153124995 1 52.438568159249996 1 54.455436165374991 1 56.472304171499992 1 58.489172177624994 1 60.506040183749988 1 62.52290818987499 1 64.539776195999991 1 66.556644202124986 1 68.573512208249994 1 70.590380214374989 1 72.607248220499997 1 74.624116226624992 1 76.640984232749986 1 78.657852238874995 1 80.674720244999989 1 82.691588251124983 1 84.708456257249992 1 86.725324263374986 1 88.742192269499995 4 +7 0 0 5 15 5 62.064212288154152 68.367790528100002 61.945478163078803 65.596507093400007 61.574792012443027 62.836018639700001 60.95380410781803 60.117007058300004 59.148971208630797 54.575201279300003 56.349446855258435 49.458208671899996 54.634862730701457 46.935702297799999 50.686831199522032 42.166984744799997 45.916177800963766 38.2184797934 43.309903602631977 36.446719532700001 37.380963392678481 33.173110037800001 30.920193179934188 31.111179032499997 27.35856437759935 30.370373008199998 23.746866110665607 30 20.135167546327139 30 + 0 6 19.613910456100001 3 41.049936781 3 63.203626805399999 3 88.742192269499995 6 +1 14.442016949478628 30 1 0 +1 0 -24.7489666297 0 1 +1 8.7488663526301096 19 0 1 +1 49.862942761040543 8 1 0 +1 -109.10541261900001 134.658609144 -0.98480775301218992 0.1736481776670335 +1 -109.10541261900001 134.65860914400002 -0.98480775301218992 0.17364817766703353 +1 1.0707963267900757 -4.9850143942417597 1 -2.0102118864115028e-14 +1 1.0707963267880602 -4.9850143942419436 1 6.8673641655296978e-14 +1 1.5299797575926548 110.30295684251108 2.9093310433622613e-17 1 +1 -77.378875671206188 6.581615252798656e-10 1 1.3877787807814457e-17 +1 1.5299797575930043 -47.08254695204581 -1.2282234263724802e-17 1 +1 1.0707963267956377 -4.9850143941491902 1 -2.0102118863955069e-14 +1 1.0707963267957474 -4.9850143941493741 1 6.8673641655934984e-14 +1 1.5299797575932035 36.833387777195661 6.4996431027844116e-18 1 +1 0.17453292519953775 0 0 1 +1 8.7488663525999968 43.7489666297 0 1 +1 -4.5378560551848048 -13.7489666297 1 0 +1 -4.5378560551848048 -35.7489666297 1 0 +2 -51.251133647400003 226 1 0 -0 1 100 +8 4.5378560551848048 4.7123889803846897 +1 -4.5378560551848048 -35.7489666297 1 0 +2 -51.251133647400003 226.00000000000006 1 0 -0 1 100 +1 6.2831853071795862 -8.9850143939900544 0 1 +1 0 -8.9850143939900544 0 1 +1 1.0707963267948388 7.0149856060335853 1 -1.8093822187979803e-14 +1 3.1415926536048779 -8.9850143946744652 0 1 +1 3.1415926536048779 -8.9850143946744652 0 1 +7 0 0 3 69 67 6.2831853071795862 -18.263871192566118 6.270101307803956 -18.40359518124929 6.2438036391371652 -18.678441816220833 6.2039216699031607 -19.073743289864741 6.1635543446063243 -19.449059305815545 6.1226637901139345 -19.800856730570942 6.0812180338846451 -20.125328737087592 6.0391870423863043 -20.418422184041656 5.9965644572820391 -20.675782596291871 5.9533819744266685 -20.89288470126499 5.9097023071242427 -21.065381594889814 5.8656165767610631 -21.189431279403085 5.8212440599201862 -21.261967346868481 5.7767424007878523 -21.280959178144006 5.7322682615485769 -21.246074418837519 5.6879731649236405 -21.158375504637309 5.6439958131023458 -21.020109871783372 5.6004539845519643 -20.834476566419042 5.5574361883045711 -20.605393573282612 5.5149915484360745 -20.337285868153504 5.4731273857185192 -20.034777313532139 5.4318348614512928 -19.70215548457843 5.3910914963483432 -19.34337092634641 5.3508632654495853 -18.962051107685983 5.3111070577343371 -18.561511679299905 5.2717731785216833 -18.144768487972225 5.2328078539014653 -17.714549261960414 5.1941556121910759 -17.273305855556199 5.1557615454057464 -16.823224585813218 5.1175730839581659 -16.366243641432465 5.079542310388935 -15.904044110857996 5.0416240078509169 -15.438159274537712 5.0037738848056907 -14.970057883575835 4.9659504926937581 -14.501094579992936 4.9281145639943054 -14.03254172885929 4.8902289492517879 -13.565599414082872 4.852258738459871 -13.101420408521282 4.8141698142234235 -12.641080937830399 4.7759306400902561 -12.185639940256502 4.7375126787071125 -11.736159907026845 4.6988899077522666 -11.29369789684122 4.6600386685584239 -10.859304021877511 4.6209375340609267 -10.434017931767372 4.5815672784361672 -10.018865834179573 4.54191092287647 -9.614857371001456 4.5019538586522119 -9.2229825355167598 4.4616840395719013 -8.8442085700075523 4.4210922343093024 -8.4794769006540811 4.3801723326305328 -8.1296999428274432 4.3389216740568024 -7.7957583875068766 4.2973414524382871 -7.4784966928088892 4.2554369219717385 -7.1787252739428355 4.2132184862027842 -6.8971930691384333 4.1706995971935745 -6.6345319538746654 4.1278955647096396 -6.391261284258829 4.0848237486357997 -6.1677782903193616 4.0415035193775362 -5.9643518253888885 3.9979564122629707 -5.7811151849205551 3.9542062556937436 -5.6180592914807539 3.9102797470642732 -5.4750253456030364 3.8662055890423588 -5.3516996939432158 3.822009751249885 -5.2476071644031457 3.7777159294249092 -5.1621206522224838 3.7333456533491036 -5.0944752857489917 3.688918412941252 -5.0437823788894542 3.6444516101841535 -5.0090405126108424 3.599960814782226 -4.9891583135653406 3.5702927072874013 -4.9850083146299236 3.5554590038387817 -4.9850143943252476 + 0 4 1.2586970628575758 1 2.5173941257151515 1 3.7760911885727273 1 5.0347882514303031 1 6.2934853142878788 1 7.5521823771454546 1 8.8108794400030312 1 10.069576502860606 1 11.328273565718181 1 12.586970628575758 1 13.845667691433334 1 15.104364754290909 1 16.363061817148484 1 17.621758880006062 1 18.880455942863637 1 20.139153005721212 1 21.397850068578787 1 22.656547131436362 1 23.91524419429394 1 25.173941257151515 1 26.43263832000909 1 27.691335382866669 1 28.950032445724244 1 30.208729508581818 1 31.467426571439393 1 32.726123634296968 1 33.984820697154547 1 35.243517760012125 1 36.502214822869696 1 37.760911885727275 1 39.019608948584846 1 40.278306011442425 1 41.537003074300003 1 42.795700137157574 1 44.054397200015153 1 45.313094262872724 1 46.571791325730302 1 47.830488388587881 1 49.089185451445452 1 50.347882514303031 1 51.606579577160609 1 52.86527664001818 1 54.123973702875759 1 55.382670765733337 1 56.641367828590909 1 57.900064891448487 1 59.158761954306058 1 60.417459017163637 1 61.676156080021215 1 62.934853142878787 1 64.193550205736358 1 65.452247268593936 1 66.710944331451515 1 67.969641394309093 1 69.228338457166672 1 70.48703552002425 1 71.745732582881814 1 73.004429645739393 1 74.263126708596971 1 75.52182377145455 1 76.780520834312128 1 78.039217897169692 1 79.297914960027271 1 80.556612022884849 1 81.815309085742427 1 83.074006148600006 4 +7 0 0 3 69 67 0.69073978212453435 -22.755122994891458 0.68604549319245656 -22.525479504207986 0.67687132831792862 -22.058983553894645 0.66382991409927627 -21.337457725181245 0.6515804915058786 -20.593917865748011 0.64021074364233965 -19.828401806871124 0.62981648239058108 -19.041123021960829 0.62050081532149581 -18.232417906829259 0.61237646730090256 -17.403184308134321 0.60556213794464842 -16.555201738557798 0.60017279728729389 -15.691018760350323 0.5963106051426782 -14.813909602430632 0.59405730781388377 -13.927853789687452 0.59346730706333473 -13.037711499467324 0.59454941998055122 -12.14838374866885 0.59727511343243522 -11.264644006556075 0.60158427835977246 -10.390932950117159 0.6073916746876622 -9.5311606374375053 0.6145933946856057 -8.6885158664712563 0.62307274337046903 -7.8652393742043518 0.63270893358715574 -7.0625640334347679 0.64339144696887618 -6.2813003787250379 0.65501989143344985 -5.5219133803598828 0.66750363335238461 -4.7845800903316302 0.68076145554203871 -4.0692515357432448 0.69472120122298409 -3.3757134312292303 0.70931941533701948 -2.7036473678856212 0.72450095992557273 -2.0526912771474803 0.74021866395552116 -1.4225023183662588 0.7564327684554597 -0.81281079664081435 0.77311104513563 -0.22350753593308498 0.79022577998731702 0.34541926128830358 0.80775154230621282 0.89395845763199133 0.82566642523710643 1.4219970533968427 0.8439511308842067 1.9293393515822084 0.86258862117221824 2.415704580704102 0.88156343792778591 2.8807239479430211 0.90086214539243115 3.3239729127149173 0.92047188381206868 3.7449340865698533 0.9403797336885259 4.142989901833162 0.9605726760811315 4.5174370685979941 0.98103737765435872 4.8674955736046988 1.0017599969780315 5.1923191416811507 1.0227259605122383 5.4910053050530347 1.0439197236109607 5.7626055786124262 1.0653245144087438 6.0061356034831048 1.0869220634393657 6.2205853114420098 1.1086923212870587 6.4049290376172463 1.130613165560995 6.5581358192263455 1.1526601046384015 6.679179001874842 1.1748059632605972 6.7670484295739 1.1970206191538049 6.8207529923215695 1.2192705096341407 6.839365878641269 1.2415199921099591 6.8220732833992654 1.2637318586283848 6.7681645282073015 1.285867295588861 6.677051063716779 1.3078859731688237 6.548278637939803 1.3297460837159418 6.3815414297877506 1.3514044270862633 6.1766951557136123 1.3728163220098248 5.933772318720643 1.3939362192330649 5.6529884684303671 1.4147201450509306 5.3347174334327443 1.4351255367016218 4.9794817501680155 1.4551112105640303 4.5879406947040682 1.4746373210217929 4.1608779382758847 1.4936654207315374 3.6991925270295853 1.5121583027502838 3.2038769411864338 1.5241066238992351 2.851987988609844 1.5299797575933587 2.6708035532064542 + 0 4 1.2586970628575758 1 2.5173941257151515 1 3.7760911885727273 1 5.0347882514303031 1 6.2934853142878788 1 7.5521823771454546 1 8.8108794400030312 1 10.069576502860606 1 11.328273565718181 1 12.586970628575758 1 13.845667691433334 1 15.104364754290909 1 16.363061817148484 1 17.621758880006062 1 18.880455942863637 1 20.139153005721212 1 21.397850068578787 1 22.656547131436362 1 23.91524419429394 1 25.173941257151515 1 26.43263832000909 1 27.691335382866669 1 28.950032445724244 1 30.208729508581818 1 31.467426571439393 1 32.726123634296968 1 33.984820697154547 1 35.243517760012125 1 36.502214822869696 1 37.760911885727275 1 39.019608948584846 1 40.278306011442425 1 41.537003074300003 1 42.795700137157574 1 44.054397200015153 1 45.313094262872724 1 46.571791325730302 1 47.830488388587881 1 49.089185451445452 1 50.347882514303031 1 51.606579577160609 1 52.86527664001818 1 54.123973702875759 1 55.382670765733337 1 56.641367828590909 1 57.900064891448487 1 59.158761954306058 1 60.417459017163637 1 61.676156080021215 1 62.934853142878787 1 64.193550205736358 1 65.452247268593936 1 66.710944331451515 1 67.969641394309093 1 69.228338457166672 1 70.48703552002425 1 71.745732582881814 1 73.004429645739393 1 74.263126708596971 1 75.52182377145455 1 76.780520834312128 1 78.039217897169692 1 79.297914960027271 1 80.556612022884849 1 81.815309085742427 1 83.074006148600006 4 +1 -5.2123889803844916 7.014985606033397 1 1.8093822187782875e-14 +7 0 0 3 47 45 0 -18.263871192566118 0.012575755804666609 -18.12953215329668 0.037611203895025043 -17.856546561911191 0.074862704823461995 -17.436099356080401 0.11185981670070033 -17.006711033366898 0.14864715186136779 -16.570150358351466 0.1852677951199064 -16.128041595181827 0.22176315300909702 -15.68185895899164 0.25817309139480149 -15.232953652838676 0.2945359344583986 -14.78257054800218 0.33088848619852124 -14.331873705328794 0.36726588072104083 -13.881939898977338 0.4037008070670941 -13.433803090665092 0.44022371691007106 -12.988477309378569 0.47686304799526447 -12.546953106203203 0.51364537192019222 -12.110200390303806 0.55059548868481045 -11.679169555049041 0.58773646450536399 -11.254793062403804 0.6250896174332331 -10.837986904114244 0.66267445434270422 -10.429652097444542 0.7005085643613731 -10.030676165923612 0.73860747484263289 -9.641934645492185 0.77698447693007255 -9.2642925040441639 0.81565042996208281 -8.8986058819864677 0.8546135516398895 -8.5457226353350162 0.89387921564799111 -8.2064873476423443 0.93344972800139037 -7.881728228353146 0.97332414012725632 -7.5722140521014838 1.0134985062859712 -7.2786646563563613 1.053966104996491 -7.0017368914949438 1.0947175767024129 -6.7420152490809366 1.1357409848186422 -6.5000012929304454 1.1770217727227472 -6.2761032008118969 1.2185426920632874 -6.0706260608304481 1.2602834127420921 -5.8837590384351515 1.3022210913158474 -5.7155812504868218 1.3443331279843913 -5.5660277811436236 1.3865971322068498 -5.4348893301824148 1.4289910633593135 -5.3218225993598152 1.47149342963406 -5.2263579765351436 1.5140835571397868 -5.1479079978145936 1.5567419145088632 -5.0857753998503528 1.5994504366982945 -5.0391620334962264 1.6421929764793506 -5.007174741881407 1.6849553086739695 -4.9888425194613006 1.7134695947837602 -4.9850085616422906 1.7277263033438182 -4.9850143939526959 + 0 4 1.2097411180977273 1 2.4194822361954547 1 3.629223354293182 1 4.8389644723909093 1 6.0487055904886367 1 7.258446708586364 1 8.4681878266840904 1 9.6779289447818186 1 10.887670062879547 1 12.097411180977273 1 13.307152299075 1 14.516893417172728 1 15.726634535270456 1 16.936375653368181 1 18.146116771465909 1 19.355857889563637 1 20.565599007661366 1 21.775340125759094 1 22.985081243856818 1 24.194822361954547 1 25.404563480052275 1 26.614304598149999 1 27.824045716247728 1 29.033786834345456 1 30.243527952443184 1 31.453269070540912 1 32.663010188638637 1 33.872751306736362 1 35.082492424834093 1 36.292233542931818 1 37.50197466102955 1 38.711715779127275 1 39.921456897224999 1 41.131198015322731 1 42.340939133420456 1 43.550680251518187 1 44.760421369615912 1 45.970162487713637 1 47.179903605811369 1 48.389644723909093 1 49.599385842006818 1 50.80912696010455 1 52.018868078202274 1 53.228609196299999 4 +7 0 0 3 47 45 0.69073978212453435 -22.755122994891458 0.69525297618702375 -22.97584720454498 0.70447917053948239 -23.410712990207131 0.7188754739496408 -24.043500796294531 0.73378417240397187 -24.65703483972484 0.74916838419232845 -25.25150194597742 0.76499558939901546 -25.82703874204811 0.7812378273107472 -26.383722180222136 0.79787093665176689 -26.921567858625998 0.8148740721181077 -27.440526716677024 0.83222910501029546 -27.940480434158971 0.84992032683075636 -28.421245803310587 0.86793341215205722 -28.882557297093594 0.88625499098664051 -29.324064809991896 0.90487250861101198 -29.745340674710111 0.92377400007933075 -30.145884450062923 0.94294787141792624 -30.525128306096477 0.96238266391699845 -30.882442249092005 0.98206680927379153 -31.217139389808001 1.0019883752787755 -31.528481198886549 1.0221348042769809 -31.815682770362979 1.0424926460830783 -32.077918065599839 1.0630472881562711 -32.314325227419971 1.0837826832158752 -32.524011633017459 1.1046810850077808 -32.706059921559188 1.1257227643439762 -32.859530384246497 1.1468858306094971 -32.983478094772885 1.1681463060053658 -33.076993570253677 1.1894780780570637 -33.139200897225237 1.2108530052531803 -33.169276178422365 1.2322409804172998 -33.166462107357411 1.2536099913967556 -33.13008350028889 1.2749261607895654 -33.059562870834903 1.2961537909235776 -32.954434876612247 1.3172553206616759 -32.814365235133195 1.3381915557707151 -32.639144204197613 1.3589233952660753 -32.428714722345781 1.3794119664015785 -32.183173009250893 1.3996187111512208 -31.902756792565839 1.4195055188222705 -31.587836659001773 1.4390348775391595 -31.238906514786937 1.4581700554127721 -30.85657448437167 1.4768752800053773 -30.441552946770685 1.4951160155747507 -29.994651583108979 1.5128589571117481 -29.51675924171359 1.5243350874641399 -29.178164761787144 1.5299797575937326 -29.004027999047487 + 0 4 1.2097411180977273 1 2.4194822361954547 1 3.629223354293182 1 4.8389644723909093 1 6.0487055904886367 1 7.258446708586364 1 8.4681878266840904 1 9.6779289447818186 1 10.887670062879547 1 12.097411180977273 1 13.307152299075 1 14.516893417172728 1 15.726634535270456 1 16.936375653368181 1 18.146116771465909 1 19.355857889563637 1 20.565599007661366 1 21.775340125759094 1 22.985081243856818 1 24.194822361954547 1 25.404563480052275 1 26.614304598149999 1 27.824045716247728 1 29.033786834345456 1 30.243527952443184 1 31.453269070540912 1 32.663010188638637 1 33.872751306736362 1 35.082492424834093 1 36.292233542931818 1 37.50197466102955 1 38.711715779127275 1 39.921456897224999 1 41.131198015322731 1 42.340939133420456 1 43.550680251518187 1 44.760421369615912 1 45.970162487713637 1 47.179903605811369 1 48.389644723909093 1 49.599385842006818 1 50.80912696010455 1 52.018868078202274 1 53.228609196299999 4 +1 6.2831853071795862 -8.9850143939946747 0 1 +1 0 -8.9850143939946747 0 1 +1 1.0707963267948388 7.014985606033501 1 9.0469110939288656e-15 +1 3.1415926535952137 -8.9850143936501201 0 1 +1 3.1415926535952137 -8.9850143936501201 0 1 +7 0 0 3 69 67 6.2831853071795862 -18.263871191699149 6.2701013078180257 -18.403595180377526 6.243803639160781 -18.678441815435601 6.203921669909767 -19.073743289372825 6.1635543445979781 -19.449059305706257 6.1226637900947178 -19.800856730682316 6.0812180338643254 -20.125328737186408 6.0391870423654215 -20.418422184145687 5.9965644572637027 -20.675782596372965 5.9533819744141319 -20.892884701242064 5.9097023071199626 -21.065381594655161 5.8656165767655306 -21.189431278894123 5.821244059930998 -21.261967346197697 5.7767424008027168 -21.280959177383387 5.7322682615659648 -21.246074418029181 5.6879731649429885 -21.15837550380849 5.6439958131239756 -21.020109870954464 5.6004539845766059 -20.834476565605161 5.5574361883327583 -20.605393572494322 5.5149915484665888 -20.337285867381517 5.4731273857500193 -20.034777312767048 5.4318348614836545 -19.702155483826751 5.3910914963816765 -19.343370925624743 5.3508632654840129 -18.962051107017579 5.3111070577697044 -18.561511678710559 5.271773178557515 -18.144768487484228 5.2328078539369427 -17.714549261585692 5.1941556122252823 -17.273305855289689 5.1557615454378842 -16.82322458562167 5.1175730839879776 -16.366243641253721 5.0795423104171524 -15.904044110556457 5.0416240078797641 -15.438159274060419 5.003773884836777 -14.970057883006559 4.9659504927267344 -14.5010945794445 4.9281145640270285 -14.032541728427416 4.8902289492814068 -13.565599413810384 4.8522587384857703 -13.101420408375333 4.8141698142465863 -12.641080937759179 4.7759306401115804 -12.185639940218717 4.7375126787275557 -11.736159906986755 4.6988899077726254 -11.293697896772818 4.6600386685792756 -10.859304021764036 4.6209375340826169 -10.434017931602437 4.5815672784588273 -10.018865833965403 4.5419109229000698 -9.6148573707483518 4.5019538586766137 -9.222982535239602 4.4616840395969382 -8.8442085697241701 4.4210922343348109 -8.4794769003799324 4.3801723326563913 -8.1296999425722074 4.3389216740828935 -7.795758387267365 4.2973414524643916 -7.4784966925680525 4.2554369219974779 -7.1787252736431473 4.2132184862268067 -6.8971930687709202 4.1706995972144583 -6.6345319534972598 4.1278955647267965 -6.3912612839172018 4.0848237486494661 -6.1677782900211753 4.0415035193883435 -5.9643518250917662 3.9979564122714608 -5.7811151845489546 3.9542062556999502 -5.618059290957337 3.9102797470682922 -5.4750253449322628 3.8662055890438443 -5.3516996931951226 3.8220097512476925 -5.2476071636154602 3.7777159294185436 -5.1621206514138276 3.7333456533392222 -5.094475284914763 3.6889184129297883 -5.0437823780106976 3.6444516101735891 -5.0090405116664911 3.5999608147745041 -4.9891583125505194 3.5702927072802528 -4.9850083135990237 3.5554590038310976 -4.9850143933009008 + 0 4 1.2586970628484848 1 2.5173941256969696 1 3.7760911885454544 1 5.0347882513939393 1 6.2934853142424245 1 7.5521823770909089 1 8.8108794399393933 1 10.069576502787879 1 11.328273565636364 1 12.586970628484849 1 13.845667691333333 1 15.104364754181818 1 16.363061817030303 1 17.621758879878787 1 18.880455942727274 1 20.139153005575757 1 21.397850068424241 1 22.656547131272728 1 23.915244194121211 1 25.173941256969698 1 26.432638319818182 1 27.691335382666665 1 28.950032445515152 1 30.208729508363636 1 31.467426571212119 1 32.726123634060606 1 33.98482069690909 1 35.243517759757573 1 36.502214822606057 1 37.760911885454547 1 39.019608948303031 1 40.278306011151514 1 41.537003073999998 1 42.795700136848481 1 44.054397199696972 1 45.313094262545455 1 46.571791325393939 1 47.830488388242422 1 49.089185451090906 1 50.347882513939396 1 51.60657957678788 1 52.865276639636363 1 54.123973702484847 1 55.38267076533333 1 56.641367828181814 1 57.900064891030304 1 59.158761953878788 1 60.417459016727271 1 61.676156079575755 1 62.934853142424238 1 64.193550205272729 1 65.452247268121212 1 66.710944330969696 1 67.969641393818179 1 69.228338456666663 1 70.487035519515146 1 71.74573258236363 1 73.004429645212113 1 74.263126708060611 1 75.521823770909094 1 76.780520833757578 1 78.039217896606061 1 79.297914959454545 1 80.556612022303028 1 81.815309085151512 1 83.074006147999995 4 +7 0 0 3 69 67 0.6907397821293001 77.244877004939738 0.68604549319774466 77.474520495635289 0.67687132832162999 77.941016446030218 0.66382991409612502 78.662542274971315 0.6515804914936999 79.406082134719128 0.64021074362520769 80.171598193808393 0.62981648237424093 80.958876978758099 0.620500815305293 81.767582093906142 0.61237646728538053 82.596815692553349 0.60556213793148117 83.444798262016448 0.6001727972787273 84.308981240062025 0.596310605140012 85.18609039780948 0.59405730781477928 86.07214621042688 0.59346730706627415 86.962288500565464 0.59454941998462874 87.851616251310887 0.59727511343704653 88.735355993380381 0.60158427836446438 89.609067049767972 0.60739167469207611 90.468839362380223 0.61459339468949492 91.311484133266504 0.62307274337398899 92.134760625476673 0.6327089335904329 92.937435966216626 0.64339144697166883 93.718699620900779 0.65501989143533523 94.47808661923996 0.66750363335283525 95.215419909241547 0.68076145554054379 95.930748463807845 0.69472120121916059 96.624286568310623 0.70931941533074572 97.29635263166027 0.7245009599170773 97.947308722424054 0.74021866394556579 98.57749768124765 0.75643276844524521 99.187189203021134 0.77311104512753692 99.7764924637588 0.7902257799818565 100.34541926096536 0.80775154230145974 100.89395845726979 0.82566642523096401 101.42199705301407 0.84395113087528784 101.92933935123666 0.86258862116029156 102.41570458046914 0.88156343791363312 102.88072394784037 0.90086214537692333 103.32397291272304 0.92047188379593559 103.74493408666223 0.94037973367235939 104.14298990197665 0.9605726760653428 104.51743706876012 0.98103737763918131 104.86749557375695 1.0017599969635218 105.19231914180183 1.0227259604983101 105.49100530512881 1.0439197235974071 105.76260557863887 1.0653245143953016 106.00613560346346 1.0869220634257475 106.22058531138593 1.1086923212730377 106.40492903753689 1.1306131655464409 106.55813581913293 1.1526601046233691 106.67917900177119 1.1748059632453434 106.76704842945421 1.1970206191389754 106.82075299214213 1.2192705096201963 106.83936587841147 1.2415199920970514 106.82207328319703 1.263731858616689 106.76816452809778 1.2858672955785619 106.67705106372229 1.3078859731600416 106.5482786380267 1.3297460837085997 106.38154142988084 1.3514044270800609 106.17669515572636 1.3728163220042016 105.93377231863916 1.3939362192279048 105.65298846828881 1.4147201450466409 105.33471743324085 1.4351255366986153 104.97948174995194 1.4551112105624922 104.58794069450612 1.4746373210215256 104.16087793815036 1.4936654207320352 103.69919252702202 1.5121583027508541 103.20387694130737 1.5241066238996963 102.85198798875732 1.5299797575937717 102.67080355333894 + 0 4 1.2586970628484848 1 2.5173941256969696 1 3.7760911885454544 1 5.0347882513939393 1 6.2934853142424245 1 7.5521823770909089 1 8.8108794399393933 1 10.069576502787879 1 11.328273565636364 1 12.586970628484849 1 13.845667691333333 1 15.104364754181818 1 16.363061817030303 1 17.621758879878787 1 18.880455942727274 1 20.139153005575757 1 21.397850068424241 1 22.656547131272728 1 23.915244194121211 1 25.173941256969698 1 26.432638319818182 1 27.691335382666665 1 28.950032445515152 1 30.208729508363636 1 31.467426571212119 1 32.726123634060606 1 33.98482069690909 1 35.243517759757573 1 36.502214822606057 1 37.760911885454547 1 39.019608948303031 1 40.278306011151514 1 41.537003073999998 1 42.795700136848481 1 44.054397199696972 1 45.313094262545455 1 46.571791325393939 1 47.830488388242422 1 49.089185451090906 1 50.347882513939396 1 51.60657957678788 1 52.865276639636363 1 54.123973702484847 1 55.38267076533333 1 56.641367828181814 1 57.900064891030304 1 59.158761953878788 1 60.417459016727271 1 61.676156079575755 1 62.934853142424238 1 64.193550205272729 1 65.452247268121212 1 66.710944330969696 1 67.969641393818179 1 69.228338456666663 1 70.487035519515146 1 71.74573258236363 1 73.004429645212113 1 74.263126708060611 1 75.521823770909094 1 76.780520833757578 1 78.039217896606061 1 79.297914959454545 1 80.556612022303028 1 81.815309085151512 1 83.074006147999995 4 +1 -5.2123889803806467 7.0149856060335951 1 -9.0469110939524731e-15 +7 0 0 3 47 45 0 -18.263871191699149 0.012575755815818738 -18.129532152540989 0.037611203915516297 -17.856546561297126 0.074862704837354854 -17.436099355503561 0.11185981671680445 -17.006711032725427 0.14864715187896005 -16.570150357596894 0.18526779513969058 -16.128041594306676 0.22176315303069369 -15.681858958016292 0.25817309141770833 -15.232953651800663 0.29453593448197429 -14.782570546944793 0.33088848622190631 -14.331873704293031 0.36726588074360206 -13.881939897991963 0.40370080708863648 -13.433803089747139 0.44022371693068019 -12.988477308534618 0.47686304801521395 -12.546953105431866 0.51364537193985993 -12.110200389595864 0.5505954887046024 -11.679169554390924 0.58773646452564221 -11.254793061777336 0.62508961745426062 -10.83798690350066 0.66267445436461847 -10.429652096823981 0.70050856438416853 -10.030676165279012 0.73860747486616674 -9.6419346448098828 0.77698447695410289 -9.2642925033168968 0.81565042998634241 -8.8986058812148077 0.85461355166411834 -8.545722634529433 0.89387921567223683 -8.2064873468273856 0.93344972802544213 -7.8817282275601519 0.97332414014997548 -7.5722140513475038 1.0134985063062174 -7.2786646556426531 1.0539661050134603 -7.0017368908084467 1.0947175767159056 -6.7420152483957239 1.1357409848290394 -6.5000012922152663 1.1770217727308372 -6.2761032000394907 1.2185426920699161 -6.0706260599883013 1.2602834127474982 -5.8837590375484057 1.3022210913199357 -5.715581249586954 1.3443331279870756 -5.5660277802548963 1.3865971322080097 -5.4348893293304616 1.4289910633588936 -5.3218225985721643 1.4714934296321336 -5.2263579758416379 1.5140835571366003 -5.1479079972443165 1.5567419145048846 -5.0857753994269794 1.5994504366941742 -5.0391620332323974 1.6421929764758583 -5.0071747417687025 1.6849553086718692 -4.9888425194614303 1.7134695947828575 -4.9850085616598303 1.7277263033435397 -4.9850143939573002 + 0 4 1.2097411181045454 1 2.4194822362090909 1 3.6292233543136363 1 4.8389644724181817 1 6.0487055905227276 1 7.2584467086272726 1 8.4681878267318176 1 9.6779289448363635 1 10.887670062940909 1 12.097411181045455 1 13.307152299149999 1 14.516893417254545 1 15.726634535359091 1 16.936375653463635 1 18.146116771568181 1 19.355857889672727 1 20.565599007777273 1 21.775340125881819 1 22.985081243986365 1 24.19482236209091 1 25.404563480195453 1 26.614304598299999 1 27.824045716404544 1 29.03378683450909 1 30.243527952613636 1 31.453269070718182 1 32.663010188822724 1 33.87275130692727 1 35.082492425031816 1 36.292233543136362 1 37.501974661240908 1 38.711715779345454 1 39.92145689745 1 41.131198015554546 1 42.340939133659091 1 43.550680251763637 1 44.760421369868183 1 45.970162487972729 1 47.179903606077275 1 48.389644724181821 1 49.59938584228636 1 50.809126960390905 1 52.018868078495451 1 53.228609196599997 4 +7 0 0 3 47 45 0.6907397821293001 77.244877004939738 0.69525297618958848 77.024152795341919 0.70447917053928977 76.589287009753164 0.71887547394881812 75.956499203692772 0.7337841724044486 75.34296516024007 0.74916838419497878 74.748498053940153 0.7649955894039614 74.172961257815786 0.78123782731763247 73.616277819594586 0.79787093665996578 73.078432141158615 0.81487407212690777 72.559473283093581 0.83222910501892389 72.059519565616455 0.8499203268386758 71.57875419648353 0.86793341215905417 71.117442702727715 0.88625499099272842 70.675935189860496 0.9048725086163637 70.254659325173435 0.92377400008423094 69.854115549848686 0.94294787142270775 69.474871693837727 0.962382663922003 69.117557750857657 0.98206680927931977 68.78286061014947 1.0019883752850731 68.471518801070985 1.0221348042842004 68.184317229588046 1.0424926460912789 67.922081934340213 1.0630472881654081 67.685674772507568 1.0837826832258275 67.475988366900197 1.1046810850183479 67.293940078356201 1.1257227643549892 67.140469615681695 1.1468858306205969 67.016521905184945 1.1681463060158672 66.923006429738436 1.1894780780663941 66.860799102796719 1.2108530052610462 66.830723821617639 1.2322409804237933 66.833537892683708 1.253609991402288 66.869916499735822 1.2749261607947173 66.940437129159605 1.2961537909288503 67.045565123347075 1.317255320666991 67.185634764805556 1.3381915557757835 67.360855795736015 1.3589233952706792 67.571285277592139 1.3794119664054845 67.816826990700548 1.399618711154214 68.097243207408795 1.4195055188241805 68.412163341007684 1.4390348775398987 68.761093485269328 1.4581700554123849 69.143425515743061 1.4768752800040619 69.558447053410717 1.4951160155729148 70.005348417139587 1.5128589571100091 70.483240758591194 1.524335087463019 70.821835238534007 1.5299797575930951 70.995972001273543 + 0 4 1.2097411181045454 1 2.4194822362090909 1 3.6292233543136363 1 4.8389644724181817 1 6.0487055905227276 1 7.2584467086272726 1 8.4681878267318176 1 9.6779289448363635 1 10.887670062940909 1 12.097411181045455 1 13.307152299149999 1 14.516893417254545 1 15.726634535359091 1 16.936375653463635 1 18.146116771568181 1 19.355857889672727 1 20.565599007777273 1 21.775340125881819 1 22.985081243986365 1 24.19482236209091 1 25.404563480195453 1 26.614304598299999 1 27.824045716404544 1 29.03378683450909 1 30.243527952613636 1 31.453269070718182 1 32.663010188822724 1 33.87275130692727 1 35.082492425031816 1 36.292233543136362 1 37.501974661240908 1 38.711715779345454 1 39.92145689745 1 41.131198015554546 1 42.340939133659091 1 43.550680251763637 1 44.760421369868183 1 45.970162487972729 1 47.179903606077275 1 48.389644724181821 1 49.59938584228636 1 50.809126960390905 1 52.018868078495451 1 53.228609196599997 4 +1 57.374433176300002 8 1 0 +1 -2.6255668236999998 126 1 0 +1 -2.6255668236999998 126.00000000000003 1 0 +1 57.374433176300002 30 1 0 +1 1.5707963267948968 4 0 1 +1 106 19 0 1 +1 1.0707963267948224 7.0149856060335196 1 0 +1 -5.2123889803746515 7.0149856060335196 1 0 +1 1.0707963267948224 7.014985606033548 1 0 +1 -5.2123889803854304 7.0149856060335951 1 -9.0469110940645497e-15 +1 55.750656612820002 8 1 0 +1 5.2493433871799997 -109 -1 0 +1 5.2493433871799997 -109.00000000000003 -1 0 +1 0 4 0 1 +1 32 19 0 1 +1 56.257567234299998 30 1 0 +1 0 27.636877896452052 0 1 +1 80.008223847099998 19 -0.046033930337705718 -0.99893987669812412 +1 35 8 1 0 +1 61 -74 0 -1 +1 61 -74.000000000000014 0 -1 +1 0 4 0 1 +1 32 19 0 1 +1 35 30 1 0 +1 1.570796326794897 4 0 1 +1 38 19 0 1 +1 32 8 1 0 +1 -3 -39 1 0 +1 -3 -39.000000000000007 1 0 +1 1.5707963267948959 3.389999999799997 0 1 +1 0 19 0 1 +1 32 30 1 0 +1 1.5707963267948968 4 0 1 +1 64 19 0 1 +1 -3.1415926535897936 14.389999999799997 1 0 +7 0 0 3 25 23 1.1725622026334395 14.389999999799997 1.1712764925169463 14.083673581235551 1.1687207599833618 13.472426081572603 1.1649332018669942 12.559814410278213 1.1611906501524372 11.651506323854903 1.1574921120955051 10.747544285932776 1.1538366220456555 9.8479697486879605 1.1502232451699934 8.9528230104043178 1.1466510762981859 8.0621432536396753 1.1431192400649257 7.1759685349992495 1.1396268906959286 6.2943357878757551 1.136173211881562 5.4172808217153303 1.1327574166199643 4.5448383222141873 1.1293787470620911 3.6770418512653227 1.1260364743505933 2.8139238469759955 1.1227298984558445 1.955515623650151 1.1194583480069116 1.1018473718419226 1.1162211801257431 0.25294815815881894 1.1130177802362622 -0.59115407400415965 1.1098475619556869 -1.4304325072046049 1.1067099666692513 -2.2648614397261646 1.1036044642783585 -3.0944163237447539 1.1005305495627171 -3.9190736228902088 1.0985020197915965 -4.4655654368523265 1.0974928618558137 -4.7379876751000047 + 0 4 2.2591205159545455 1 4.5182410319090911 1 6.7773615478636362 1 9.0364820638181822 1 11.295602579772728 1 13.554723095727272 1 15.813843611681818 1 18.072964127636364 1 20.33208464359091 1 22.591205159545456 1 24.850325675500002 1 27.109446191454545 1 29.368566707409091 1 31.627687223363637 1 33.886807739318186 1 36.145928255272729 1 38.405048771227271 1 40.664169287181821 1 42.923289803136363 1 45.182410319090913 1 47.441530835045455 1 49.700651350999998 4 +7 0 0 3 25 23 36.200447403337719 630.00278990621086 35.659160165530082 630.42451837887086 34.576001125856351 631.26833125378926 32.949476998438605 632.53507167337239 31.321135377799944 633.80278587907549 29.690944512163696 635.07142878805507 28.058872935615053 636.34095679909092 26.424889620956023 637.61132800699136 24.788964133160437 638.8825021537848 23.151066794781094 640.15444064715416 21.511168860949287 641.42710655728774 19.869242705307279 642.70046461565869 18.225262017250991 643.97448120910701 16.579202011149825 645.24912437066916 14.931039648125862 646.52436376638843 13.280753871128288 647.80017067795677 11.628325853590175 649.07651798071231 9.973739263656844 650.35338011701674 8.3169805396796352 651.63073306333047 6.6580391961094412 652.9085542953992 4.9969080914774509 654.18682273323168 3.3335839163997232 655.46551873223962 1.6680669418710505 656.74462387072629 0.55626472221459988 657.59762226616442 0 658.024184009485 + 0 4 2.2591205159545455 1 4.5182410319090911 1 6.7773615478636362 1 9.0364820638181822 1 11.295602579772728 1 13.554723095727272 1 15.813843611681818 1 18.072964127636364 1 20.33208464359091 1 22.591205159545456 1 24.850325675500002 1 27.109446191454545 1 29.368566707409091 1 31.627687223363637 1 33.886807739318186 1 36.145928255272729 1 38.405048771227271 1 40.664169287181821 1 42.923289803136363 1 45.182410319090913 1 47.441530835045455 1 49.700651350999998 4 +7 0 0 3 25 23 1.0697301846585308 -7.6100002177000015 1.0704081579414153 -7.5712529229644057 1.0717400380504505 -7.4932822454908132 1.0736657594267773 -7.3749148640785771 1.0755194657824265 -7.2551529636403256 1.0773012997414664 -7.1340135745552882 1.0790114427059656 -7.0115138479469108 1.0806501204229864 -6.8876710726866781 1.0822176016696972 -6.7625026708379306 1.0837141987731189 -6.6360261988767579 1.085140267629451 -6.5082593473647607 1.0864962078490896 -6.3792199410368466 1.0877824628599477 -6.2489259387776022 1.0889995200143234 -6.1173954336277552 1.0901479106872276 -5.984646652782037 1.0912282103704791 -5.8506979575913389 1.0922410387584158 -5.7155678435561894 1.0931870598381583 -5.5792749403504738 1.0940669819373963 -5.4418380117335374 1.09488155790499 -5.3032759558775382 1.0956315847703633 -5.1636078041463973 1.0963179053223191 -5.0228527256522062 1.096941402498447 -4.8810300102511395 1.0973158145523805 -4.7857827580856176 1.0974928618558137 -4.7379876751000047 + 2.2678469949000002 4 2.6623827998909091 1 3.0569186048818184 1 3.4514544098727273 1 3.8459902148636367 1 4.2405260198545456 1 4.6350618248454545 1 5.0295976298363634 1 5.4241334348272723 1 5.8186692398181812 1 6.213205044809091 1 6.6077408497999999 1 7.0022766547909088 1 7.3968124597818177 1 7.7913482647727275 1 8.1858840697636364 1 8.5804198747545453 1 8.9749556797454542 1 9.3694914847363631 1 9.7640272897272737 1 10.158563094718183 1 10.553098899709092 1 10.9476347047 4 +7 0 0 3 25 23 1.8662713454290851 652.78530740623228 1.9734771627761685 652.72502640780522 2.1875126703587933 652.60373429987112 2.5074254067075521 652.4196366656704 2.8261863558704032 652.23341013185598 3.1437811703322538 652.04508628001452 3.4601938850287404 651.85469722014557 3.7754069284679317 651.66227558652349 4.0894015235511612 651.4678544067317 4.4021579828154724 651.27146700633307 4.7136560299378871 651.07314690649309 5.0238751110135293 650.87292772689011 5.3327947040008663 650.67084309145093 5.6403946225238579 650.4669265384324 5.9466553133643352 650.26121143521254 6.2515581461320648 650.05373089841203 6.5550856935631048 649.84451771985107 6.8572220019161394 649.63360429856846 7.157952847127433 649.42102257991473 7.457265987075627 649.20680399929324 7.7551513659423055 648.99097944054301 8.0516014302821848 648.77357917211964 8.3466109571191982 648.55463289857664 8.5423227383742049 648.40765724198616 8.6399379142899999 648.33392138746706 + 2.2678469949000002 4 2.6623827998909091 1 3.0569186048818184 1 3.4514544098727273 1 3.8459902148636367 1 4.2405260198545456 1 4.6350618248454545 1 5.0295976298363634 1 5.4241334348272723 1 5.8186692398181812 1 6.213205044809091 1 6.6077408497999999 1 7.0022766547909088 1 7.3968124597818177 1 7.7913482647727275 1 8.1858840697636364 1 8.5804198747545453 1 8.9749556797454542 1 9.3694914847363631 1 9.7640272897272737 1 10.158563094718183 1 10.553098899709092 1 10.9476347047 4 +1 -3.141592653589794 -7.610000000200003 1 0 +2 -35 -1 1 0 -0 1 38 +8 4.2113228382483241 4.7123889803846897 +1 -3.141592653589794 -7.610000000200003 1 0 +2 -35 -0.99999999999999889 1 0 -0 1 38 +1 -1.3554294893174707e-09 -3.2559910323470831e-10 2.0252639794935537e-12 1 +7 0 0 1 2 2 40.962673978387961 616.46753199052216 40.962673978464885 652.92784592832083 + 616.271919411 2 652.72066405099997 2 +7 0 0 1 2 2 -1.0736473159982912e-10 616.2719194106744 8.6399379143190149 617.19015490813729 + 0 2 10.926265986200001 2 +1 8.6399379143722257 1.3733369996771216e-10 -8.6297458587660391e-14 1 +7 0 0 1 2 2 2.9053982949715798e-11 626.41493012271303 2.6304466582159797e-11 658.02418400947147 + 617.19015490799995 2 648.33392138800002 2 +7 0 0 1 2 2 -3.3497839742588219e-11 652.72066405130602 1.8662712007747417 652.7853075290426 + 0 2 2.269604254385075 2 +7 0 0 3 4 2 -54.529075355499998 -34.137145451000002 -54.104929958699998 -34.208933387400002 -53.679520316199998 -34.272817897499998 -53.253713129099999 -34.328696278800003 + 0 4 2.2696059441599998 4 +7 0 0 3 4 2 -3.3588243297799636e-11 652.72066405130613 0.62219937314038831 652.74221565179687 1.2442108175744329 652.76376074285497 1.8662712007746964 652.7853075290426 + 0 4 2.269604254385075 4 +7 0 0 3 4 2 -54.529075355499998 -34.137145451000009 -54.104929958699998 -34.208933387400009 -53.679520316199998 -34.272817897500005 -53.253713129099999 -34.32869627880001 + 0 4 2.2696059441599998 4 +1 1.2641864739075546e-09 -4.5338310883380473e-10 -1.8773127642236228e-12 1 +7 0 0 1 2 2 29.800315284006235 621.97990894562929 29.800315283938236 659.91367755689714 + 614.82290996400002 2 652.320182252 2 +7 0 0 3 25 23 0 614.82290996357528 0.63379955635112373 614.79489532286368 1.9007713835696685 614.74382222675854 3.798820893874665 614.68245227166835 5.6938916918811264 614.63674087991899 7.5855676727773602 614.60693983172644 9.4735158991888628 614.59319147622637 11.357489567741853 614.59551553542065 13.237312793338511 614.61381689796815 15.112871835019225 614.64788961018292 16.984106136741783 614.69742349007049 18.851001025604184 614.76201138392196 20.713581736264892 614.84115729274993 22.571909104425316 614.93428496059664 24.426077169699241 615.04074665109783 26.276213011334363 615.15983178438262 28.122479114560207 615.29077513338984 29.965078552313187 615.43276432776304 31.80426296381706 615.58494652179138 33.640343697775407 615.74643422544636 35.473703869331992 615.91631057576126 37.304817251883733 616.09363434410545 39.134247519576526 616.27744611742435 40.353229390743351 616.40366471987727 40.9626739785 616.46753199046896 + 0 4 2.2828346989636361 1 4.5656693979272722 1 6.8485040968909079 1 9.1313387958545444 1 11.414173494818181 1 13.697008193781816 1 15.979842892745452 1 18.262677591709089 1 20.545512290672725 1 22.828346989636362 1 25.111181688599999 1 27.394016387563632 1 29.676851086527268 1 31.959685785490905 1 34.242520484454545 1 36.525355183418178 1 38.808189882381811 1 41.091024581345451 1 43.373859280309084 1 45.656693979272724 1 47.939528678236357 1 50.222363377199997 4 +7 0 0 3 25 23 0 652.32018225165905 0.62437344555659691 652.31357018931908 1.8728247494414356 652.30181407535031 3.7445405899195814 652.28870025519518 5.6152127096852222 652.28023705549492 7.4847873843226633 652.27650591743259 9.3532266098161365 652.27755663396897 11.22050874243882 652.28340347734161 13.086625740255034 652.29402731359119 14.951581604498262 652.30937642824836 16.815390793665728 652.32936797661284 18.678076959528351 652.35388950295783 20.53967194740288 652.38280062694355 22.400215126917484 652.41593481253165 24.259753098605781 652.4531011771893 26.118339835121219 652.49408628407548 27.97603730832996 652.53865586683696 29.832916646969259 652.58655644356247 31.689059805963154 652.63751680811913 33.544561790354201 652.69124938361301 35.399532969686625 652.74745161215287 37.254102531767302 652.80580708742923 39.108418021194218 652.86598816575361 40.344578152397929 652.9070990579711 40.9626739785 652.92784592830378 + 0 4 2.2258079808181819 1 4.4516159616363637 1 6.6774239424545456 1 8.9032319232727275 1 11.129039904090909 1 13.354847884909091 1 15.580655865727273 1 17.806463846545455 1 20.032271827363637 1 22.258079808181819 1 24.483887789000001 1 26.709695769818182 1 28.935503750636364 1 31.161311731454546 1 33.387119712272728 1 35.61292769309091 1 37.838735673909092 1 40.064543654727274 1 42.290351635545456 1 44.516159616363637 1 46.741967597181819 1 48.967775578000001 4 +7 0 0 5 6 2 -75.815867327500001 -19.343724987800002 -73.264451793099994 -23.977373211300002 -69.603178662800005 -28.0436462746 -65.005622592199998 -31.189945618500001 -59.863497947900001 -33.234277533499998 -54.529075355499998 -34.137145451000002 + 0 6 48.967775578000001 6 +8 0 48.967775578000001 +7 0 0 3 25 23 0 652.32018225165905 0.62437344555660401 652.31357018931908 1.8728247494414485 652.30181407535031 3.7445405899195996 652.28870025519518 5.6152127096851956 652.28023705549492 7.4847873843227362 652.27650591743259 9.3532266098160743 652.27755663396886 11.220508742438833 652.28340347734161 13.086625740255084 652.29402731359119 14.951581604498177 652.30937642824836 16.81539079366576 652.32936797661284 18.678076959528354 652.35388950295805 20.539671947402869 652.38280062694355 22.400215126917523 652.41593481253165 24.259753098605717 652.4531011771893 26.118339835121333 652.49408628407548 27.976037308330071 652.53865586683696 29.832916646969196 652.58655644356247 31.689059805963154 652.63751680811913 33.544561790354329 652.69124938361301 35.399532969686632 652.74745161215287 37.254102531767252 652.80580708742923 39.108418021194325 652.86598816575361 40.344578152398007 652.9070990579711 40.9626739785 652.92784592830378 + 0 4 2.2258079808181819 1 4.4516159616363637 1 6.6774239424545456 1 8.9032319232727275 1 11.129039904090909 1 13.354847884909091 1 15.580655865727273 1 17.806463846545455 1 20.032271827363637 1 22.258079808181819 1 24.483887789000001 1 26.709695769818182 1 28.935503750636364 1 31.161311731454546 1 33.387119712272728 1 35.61292769309091 1 37.838735673909092 1 40.064543654727274 1 42.290351635545456 1 44.516159616363637 1 46.741967597181819 1 48.967775578000001 4 +7 0 0 5 6 2 -75.815867327500001 -19.343724987800005 -73.264451793099994 -23.977373211300005 -69.603178662800005 -28.043646274600007 -65.005622592199998 -31.189945618500008 -59.863497947900001 -33.234277533500006 -54.529075355499998 -34.137145451000009 + 0 6 48.967775578000001 6 +1 -2.6991052549069177e-10 -9.5383256848435849e-11 4.0462428250657398e-13 1 +7 0 0 1 2 2 1.0013199712223231 629.37405383537816 1.0013199712372269 666.64764424121745 + 623.27149929699999 2 660.18367645900003 2 +7 0 0 3 25 23 0 623.27149929690484 0.45062004345474493 623.2529747954128 1.3517999396718592 623.21587503200487 2.7034522884355878 623.16004854925586 4.0550511211439693 623.10401962914784 5.4066572568336557 623.04776632370636 6.758330015085571 622.99126875655418 8.1101272514203018 622.93450920328212 9.4621057447433117 622.87747171217973 10.814321413602247 622.82014183931562 12.166829506739402 622.76250634980431 13.519684732972626 622.70455293039072 14.872941342623136 622.64626990656836 16.226653158954385 622.58764597126697 17.580873560734339 622.52866992845338 18.935655415186275 622.4693304559986 20.291050960368015 622.40961589207484 21.647111633771772 622.3495140493535 23.003887848005032 622.28901206230853 24.361428695022479 622.22809627005859 25.719781628191104 622.16675214943484 27.078991913537248 622.10496426888267 28.439102598909649 622.04271640047398 29.346468980372585 622.00089967199779 29.800315283900002 621.97990894565839 + 0 4 1.6523027123590908 1 3.3046054247181815 1 4.9569081370772725 1 6.6092108494363631 1 8.2615135617954536 1 9.913816274154545 1 11.566118986513635 1 13.218421698872726 1 14.870724411231818 1 16.523027123590907 1 18.175329835949999 1 19.82763254830909 1 21.479935260668181 1 23.132237973027269 1 24.784540685386361 1 26.436843397745452 1 28.089146110104544 1 29.741448822463635 1 31.393751534822723 1 33.046054247181814 1 34.698356959540909 1 36.350659671899997 4 +7 0 0 3 25 23 0 660.1836764590455 0.45136064285190486 660.18021896151606 1.3540377564146218 660.17328556130008 2.7079397313021283 660.16280447198585 4.0617460264197094 660.15221480926039 5.4154774759342539 660.14149532687031 6.7691567403883175 660.13062813315867 8.12280846769813 660.11959870017915 9.4764590661589843 660.10839508992592 10.830136505409637 660.09700741812901 12.183870035376495 660.08542729062333 13.537689852700392 660.07364729144797 14.891626705419496 660.06166050946365 16.245711435738212 660.04946011496179 17.599974457093602 660.03703899114794 18.954445161233217 660.02438942726735 20.30915125088023 660.01150287980226 21.664117989056628 659.99836980864586 23.019367368953681 659.98497959481665 24.374917156454728 659.97132054873418 25.730779947171083 659.95738001010477 27.086961668728993 659.94314457152996 28.443461610868326 659.92860034289231 29.347997982429195 659.91868918332307 29.800315283900002 659.91367755690715 + 0 4 1.6289752841181817 1 3.2579505682363634 1 4.8869258523545449 1 6.5159011364727268 1 8.1448764205909079 1 9.7738517047090898 1 11.402826988827272 1 13.031802272945454 1 14.660777557063636 1 16.289752841181816 1 17.918728125299999 1 19.54770340941818 1 21.176678693536363 1 22.805653977654543 1 24.434629261772727 1 26.063604545890907 1 27.692579830009088 1 29.321555114127271 1 30.950530398245451 1 32.579505682363632 1 34.208480966481815 1 35.837456250599999 4 +7 0 0 4 5 2 -79.653715138300001 -0.12722194784900001 -80.195375734999999 -5.0778859281999997 -79.721695187600005 -10.151902611000001 -78.206434712700002 -15.002195088300001 -75.815867327500001 -19.343724987800002 + 0 5 35.837456250599999 5 +8 0 35.837456250599999 +7 0 0 3 25 23 0 660.1836764590455 0.45136064285190408 660.18021896151606 1.3540377564146211 660.17328556130008 2.7079397313021296 660.16280447198585 4.0617460264197129 660.15221480926039 5.4154774759342539 660.14149532687031 6.7691567403883157 660.13062813315867 8.1228084676981336 660.11959870017915 9.4764590661589843 660.10839508992592 10.830136505409637 660.09700741812901 12.183870035376493 660.08542729062333 13.537689852700398 660.07364729144797 14.891626705419492 660.06166050946365 16.245711435738222 660.04946011496179 17.599974457093598 660.03703899114794 18.954445161233217 660.02438942726735 20.309151250880234 660.01150287980226 21.664117989056631 659.99836980864586 23.019367368953674 659.98497959481665 24.37491715645471 659.97132054873418 25.73077994717109 659.95738001010466 27.086961668729 659.94314457153007 28.443461610868301 659.9286003428922 29.34799798242917 659.91868918332295 29.800315283900002 659.91367755690715 + 0 4 1.6289752841181817 1 3.2579505682363634 1 4.8869258523545449 1 6.5159011364727268 1 8.1448764205909079 1 9.7738517047090898 1 11.402826988827272 1 13.031802272945454 1 14.660777557063636 1 16.289752841181816 1 17.918728125299999 1 19.54770340941818 1 21.176678693536363 1 22.805653977654543 1 24.434629261772727 1 26.063604545890907 1 27.692579830009088 1 29.321555114127271 1 30.950530398245451 1 32.579505682363632 1 34.208480966481815 1 35.837456250599999 4 +7 0 0 4 5 2 -79.653715138300001 -0.12722194784899865 -80.195375734999999 -5.0778859281999988 -79.721695187600005 -10.151902611000001 -78.206434712700002 -15.002195088300002 -75.815867327500001 -19.343724987800005 + 0 5 35.837456250599999 5 +1 -1.0876783365224082e-09 3.6686742532765493e-10 1.6411868303530658e-12 1 +7 0 0 1 2 2 4.6797211180880023 666.09894498092524 4.6797211181471319 702.65059064078696 + 655.43433912 2 691.400773082 2 +7 0 0 3 25 23 0 655.43433912036903 0.43116631120284399 655.40870650427769 1.2935252630533545 655.35734101614014 2.5871573848631577 655.27999999067345 3.880900629164155 655.20237474623559 5.1747628947619493 655.1244717582158 6.4687465658332988 655.04629627501481 7.7628481738669883 654.96785223490122 9.0570592332262336 654.88914244086152 10.351366770500201 654.81016866876166 11.645753944815754 654.73093179607474 12.940200652986302 654.65143192798598 14.234684147920145 654.57166852720547 15.529179662399825 654.49164054584833 16.823661039816702 654.41134655983547 18.118101370852166 654.33078490567038 19.412473635215509 654.24995381950339 20.706751349096258 654.16885157870149 22.0009092123715 654.0874766447439 23.294923774442246 654.00582781151365 24.588774045030455 653.92390434349647 25.882442322027728 653.84170616147037 27.175914218664325 653.75923386061868 28.03809253070968 653.70407086276157 28.469145972100002 653.67644425510161 + 0 4 1.5862901450045455 1 3.1725802900090909 1 4.7588704350136366 1 6.3451605800181818 1 7.9314507250227271 1 9.5177408700272732 1 11.104031015031818 1 12.690321160036364 1 14.276611305040909 1 15.862901450045454 1 17.449191595049999 1 19.035481740054546 1 20.62177188505909 1 22.208062030063637 1 23.79435217506818 1 25.380642320072727 1 26.966932465077274 1 28.553222610081818 1 30.139512755086365 1 31.725802900090908 1 33.312093045095452 1 34.898383190099999 4 +1 28.469145969933411 5.9117155615240335e-11 2.991612574381619e-12 1 +7 0 0 1 2 2 -2.1094496830586378e-10 643.16207907428316 -9.9385162683620345e-11 679.86328967860084 + 653.67644425499998 2 690.97764348299995 2 +7 0 0 3 25 23 0 691.40077308238506 0.43105521575435851 691.39461769580589 1.293175679803626 691.38228055348759 2.5864054445083746 691.36369861214757 3.8797050526544918 691.34504355267848 5.1730889657478727 691.32631767941427 6.4665680168828539 691.30752282793208 7.7601492036581528 691.28866033460872 9.0538362591539219 691.26973110527888 10.347630018061599 691.25073565818127 11.641528841637912 691.2316741747303 12.935529030978783 691.21254654918823 14.229625247513042 691.19335243968226 15.523810935553932 691.17409131994634 16.818078748075049 691.15476253197528 18.112420975196635 691.13536533956483 19.406829974958246 691.11589898272018 20.701298607056145 691.09636273305614 21.995820665626198 691.07675594974228 23.290391324453051 691.05707813768004 24.585007543500101 691.03732900162686 25.879668626533558 691.01750851981717 27.174376220931709 690.99761694925428 28.037549677029393 690.98430904347697 28.469145972100002 690.97764348345891 + 0 4 1.5589566086318181 1 3.1179132172636361 1 4.6768698258954542 1 6.2358264345272723 1 7.7947830431590903 1 9.3537396517909084 1 10.912696260422727 1 12.471652869054545 1 14.030609477686362 1 15.589566086318181 1 17.14852269495 1 18.707479303581817 1 20.266435912213634 1 21.825392520845455 1 23.384349129477272 1 24.943305738109089 1 26.502262346740906 1 28.061218955372723 1 29.620175564004544 1 31.179132172636361 1 32.738088781268182 1 34.297045389899999 4 +7 0 0 3 4 2 -65.463960986199993 34.011187028999998 -68.669936325600005 28.4911828947 -71.864213652000004 22.990697546100002 -75.060655596199993 17.485931432699999 + 0 4 34.297045389899999 4 +8 0 34.297045389899999 +7 0 0 3 25 23 0 691.40077308238506 0.43105521575437838 691.39461769580589 1.2931756798036493 691.38228055348759 2.5864054445083524 691.36369861214757 3.8797050526545211 691.34504355267825 5.1730889657478665 691.32631767941427 6.4665680168828947 691.30752282793208 7.7601492036581474 691.28866033460872 9.0538362591539325 691.26973110527888 10.347630018061601 691.25073565818127 11.641528841637907 691.2316741747303 12.935529030978758 691.21254654918823 14.229625247513065 691.19335243968226 15.523810935553898 691.17409131994634 16.818078748075063 691.15476253197528 18.112420975196631 691.13536533956483 19.406829974958249 691.11589898272007 20.701298607056092 691.09636273305637 21.995820665626201 691.07675594974239 23.290391324453093 691.05707813767981 24.585007543500105 691.03732900162686 25.87966862653354 691.01750851981717 27.17437622093172 690.99761694925428 28.037549677029407 690.98430904347708 28.469145972100002 690.97764348345891 + 0 4 1.5589566086318181 1 3.1179132172636361 1 4.6768698258954542 1 6.2358264345272723 1 7.7947830431590903 1 9.3537396517909084 1 10.912696260422727 1 12.471652869054545 1 14.030609477686362 1 15.589566086318181 1 17.14852269495 1 18.707479303581817 1 20.266435912213634 1 21.825392520845455 1 23.384349129477272 1 24.943305738109089 1 26.502262346740906 1 28.061218955372723 1 29.620175564004544 1 31.179132172636361 1 32.738088781268182 1 34.297045389899999 4 +7 0 0 3 4 2 -65.463960986199993 34.011187029000006 -68.669936325600005 28.491182894700007 -71.864213652000004 22.990697546100005 -75.060655596199993 17.485931432700003 + 0 4 34.297045389899999 4 +7 0 0 3 25 23 0.41166659598201261 -6.0263780718000035 0.41209434126062749 -6.0533799010772764 0.41295758737307575 -6.1071121839053735 0.41427557395750408 -6.1868956494759262 0.41561652860183651 -6.2658633248826083 0.41698030232105393 -6.3440143786331777 0.41836674637813809 -6.4213479792353469 0.41977571232178096 -6.4978632951968853 0.42120705198096192 -6.573559495025509 0.42266061747098804 -6.6484357472289695 0.42413626119637671 -6.72249122031499 0.4256338358545122 -6.7957250827913276 0.42715319443904087 -6.8681365031657045 0.42869419024328626 -6.9397246499458713 0.43025667686362706 -7.0104886916395666 0.43184050820287001 -7.0804277967545213 0.43344553847358858 -7.1495411337984569 0.43507162220154849 -7.2178278712791544 0.43671861422885905 -7.2852871777043191 0.43838636971818379 -7.3519182215817001 0.44007474415309744 -7.417720171419055 0.44178359335296863 -7.4826921957240851 0.44351277343378609 -7.5468334630045542 0.44467901845854874 -7.5890399155136432 0.44526548162100571 -7.6100044051000033 + 0 4 0.27974928327545451 1 0.55949856655090902 1 0.83924784982636358 1 1.118997133101818 1 1.3987464163772725 1 1.6784956996527272 1 1.9582449829281816 1 2.2379942662036361 1 2.5177435494790905 1 2.797492832754545 1 3.0772421160299994 1 3.3569913993054543 1 3.6367406825809088 1 3.9164899658563632 1 4.1962392491318177 1 4.4759885324072721 1 4.7557378156827266 1 5.035487098958181 1 5.3152363822336355 1 5.5949856655090899 1 5.8747349487845444 1 6.1544842320599997 4 +7 0 0 3 25 23 0 718.19342249291878 0.076538691639723017 718.23285313603878 0.22977863170654275 718.31132324377916 0.46011446400275052 718.42785232313724 0.69091446968126546 718.5432027743135 0.92216690219476505 718.65737204849563 1.1538600262853826 718.7703576018597 1.3859821253608506 718.88215690032246 1.6185215093761578 718.99276742514587 1.8514665226305866 719.10218667832407 2.084805551615966 719.21041218801861 2.318527032859933 719.31744151396526 2.5526194607606563 719.42327225284987 2.7870713953952495 719.52790204365158 3.021871470283279 719.63132857293476 3.2570084001000206 719.73354958008292 3.4924709883047416 719.83456286246303 3.7282481347204861 719.93436628052848 3.9643288428897629 720.03295776276241 4.200702227767664 720.13033531081351 4.4373575216199246 720.2264970034397 4.6742840859960308 720.32144100441883 4.9114714003711528 720.4151655550985 5.0697632248766045 720.47683453417255 5.1489491437377106 720.50746523202781 + 0 4 0.27974928327545451 1 0.55949856655090902 1 0.83924784982636358 1 1.118997133101818 1 1.3987464163772725 1 1.6784956996527272 1 1.9582449829281816 1 2.2379942662036361 1 2.5177435494790905 1 2.797492832754545 1 3.0772421160299994 1 3.3569913993054543 1 3.6367406825809088 1 3.9164899658563632 1 4.1962392491318177 1 4.4759885324072721 1 4.7557378156827266 1 5.035487098958181 1 5.3152363822336355 1 5.5949856655090899 1 5.8747349487845444 1 6.1544842320599997 4 +7 0 0 3 47 45 0 2.0569004961999937 0.0050289020037216836 2.1746081407505815 0.015116079275069604 2.3946057760306894 0.030230223500237935 2.6771265761274425 0.045217800941943137 2.9103481539786964 0.059987079196723921 3.0945500133789379 0.074459513143383629 3.2310583893991489 0.088572442769881979 3.3221973905752336 0.10227977059393614 3.3709704978006729 0.11555339116980178 3.3808131522740399 0.12838399194656086 3.3553306305226567 0.14078394527293603 3.2980236805025185 0.15276968741466559 3.2120735777735194 0.16435703327406462 3.1003979214406394 0.17556274143236839 2.9656528122944676 0.18640411039055457 2.8102389226094662 0.19689908322898292 2.6363068401465517 0.20706626309019893 2.4457614236795777 0.21692475453078958 2.2402708382234326 0.22649476988832107 2.0212578599303175 0.23579504565710499 1.7899641496107943 0.24484048478546777 1.5475468080273569 0.25364578106381808 1.2950174048327741 0.26222465155330349 1.033271969072207 0.27058998801831591 0.76310203603156757 0.27875375915664613 0.48521073453368174 0.28672697489616622 0.20022765609763696 0.29451963677299653 -0.091276443803207097 0.30214066791306021 -0.38877305474019425 0.30959792813246167 -0.69176689449723883 0.31689910163091345 -0.99982914312185922 0.32405139852636011 -1.3125643532515563 0.33106159717560901 -1.6296112908156115 0.33793605993047604 -1.9506398203569077 0.3446807555766922 -2.2753488501939305 0.35130127950671464 -2.6034639936015536 0.3578028739945997 -2.9347353060761407 0.36419044791218408 -3.2689350022455872 0.3704685960595227 -3.6058551781143837 0.3766416180048146 -3.9453055323238746 0.38271353662897045 -4.2871110860172292 0.3886881156663492 -4.631109909269326 0.39456887886240433 -4.977150822653754 0.40035912096772674 -5.3250911916945434 0.40606194707326032 -5.6747943746438541 0.40980745173070687 -5.9090171009276595 0.41166659598201261 -6.0263780718000035 + 0 4 1.2225650732068181 1 2.4451301464136361 1 3.6676952196204544 1 4.8902602928272723 1 6.1128253660340901 1 7.3353904392409088 1 8.5579555124477267 1 9.7805205856545445 1 11.003085658861362 1 12.22565073206818 1 13.448215805274998 1 14.670780878481818 1 15.893345951688636 1 17.115911024895453 1 18.338476098102269 1 19.561041171309089 1 20.783606244515909 1 22.006171317722725 1 23.228736390929544 1 24.45130146413636 1 25.67386653734318 1 26.896431610549996 1 28.118996683756816 1 29.341561756963635 1 30.564126830170451 1 31.786691903377271 1 33.009256976584091 1 34.231822049790907 1 35.454387122997723 1 36.676952196204539 1 37.899517269411362 1 39.122082342618178 1 40.344647415824994 1 41.567212489031817 1 42.789777562238633 1 44.012342635445449 1 45.234907708652266 1 46.457472781859089 1 47.680037855065905 1 48.902602928272721 1 50.125168001479544 1 51.34773307468636 1 52.570298147893176 1 53.792863221099999 4 +7 0 0 3 47 45 24.317365812545553 726.89939354792841 24.521762260800926 726.71493021051447 24.955440747544415 726.36711158300329 25.674384694600192 725.91094535818104 26.455987282987735 725.52341533908111 27.292860513577153 725.20466681323876 28.177138940479526 724.9533644820749 29.100753214174883 724.76674052330748 30.055931830117338 724.64101735234874 31.035655711100105 724.57173350922847 32.03408742859704 724.55409616406769 33.047178744832912 724.58334803251694 34.071658712915891 724.65514220465218 35.104594941702452 724.76548310423993 36.143503547450592 724.91071750350625 37.186307408983375 725.0875290833975 38.231334838367616 725.29293244877158 39.277314163306016 725.52426942823672 40.32334917248027 725.77919970149242 41.368979274786881 726.05571413298935 42.413891808590748 726.35205618792816 43.457601090608826 726.6665937632672 44.499812457532713 726.99789389453167 45.540321039531875 727.34468448079565 46.579007626412746 727.70583921526179 47.615808148394969 728.0803560189338 48.650689402258834 728.46733666702585 49.683623712839541 728.86596641278959 50.714558907105918 729.27549057884585 51.743405688271885 729.69520158290675 52.770155947699621 730.12448537171042 53.794810925257117 730.56277445279125 54.817385939481511 731.0095494524312 55.837907207235702 731.46433494676864 56.856410716983596 731.9266967792571 57.872940482245966 732.39623893002749 58.887546888402767 732.87260045386518 59.900284938530973 733.35545234687936 60.911212448619196 733.84449437772651 61.920388172735244 734.33945187301799 62.927869874442855 734.8400724558569 63.933712288982214 735.34612274554991 64.937965173454344 735.85738498081867 65.940670704510779 736.37365370261318 66.941862982641752 736.89473198314909 67.608327222873982 737.24519673554619 67.941313710900005 737.42116683858831 + 0 4 1.2225650732068181 1 2.4451301464136361 1 3.6676952196204544 1 4.8902602928272723 1 6.1128253660340901 1 7.3353904392409088 1 8.5579555124477267 1 9.7805205856545445 1 11.003085658861362 1 12.22565073206818 1 13.448215805274998 1 14.670780878481818 1 15.893345951688636 1 17.115911024895453 1 18.338476098102269 1 19.561041171309089 1 20.783606244515909 1 22.006171317722725 1 23.228736390929544 1 24.45130146413636 1 25.67386653734318 1 26.896431610549996 1 28.118996683756816 1 29.341561756963635 1 30.564126830170451 1 31.786691903377271 1 33.009256976584091 1 34.231822049790907 1 35.454387122997723 1 36.676952196204539 1 37.899517269411362 1 39.122082342618178 1 40.344647415824994 1 41.567212489031817 1 42.789777562238633 1 44.012342635445449 1 45.234907708652266 1 46.457472781859089 1 47.680037855065905 1 48.902602928272721 1 50.125168001479544 1 51.34773307468636 1 52.570298147893176 1 53.792863221099999 4 +1 0 0 0 1 +1 96 15.610000000200003 0 1 +1 -1.5707963267948966 -7.610000000200003 1 0 +2 -18 1 1 0 -0 1 55 +8 1.5707963267948966 2.0160618084159014 +1 -1.5707963267948966 -7.610000000200003 1 0 +2 -18 1.0000000000000016 1 0 -0 1 55 +1 84.548470488630002 8 1 0 +1 -6.5484704886299996 56 -1 0 +1 -6.5484704886299996 56.000000000000014 -1 0 +7 0 0 3 25 23 6.6520049787112789 741.64093602214098 6.9298830091990533 741.42646429632748 7.4846929463710632 740.99670090319933 8.3140765323712369 740.3496012217505 9.14063582729794 739.70005225085822 9.9643779402250079 739.04805904935893 10.78531000294412 738.39362655618061 11.603439155818711 737.73675959651212 12.418772522348894 737.07746291905505 13.23131718712156 736.41574122457916 14.041080173212965 735.75159919647547 14.84806842008652 735.0850415304501 15.652288761703153 734.41607296415361 16.453747904917016 733.74469830655005 17.252452408128462 733.07092246709885 18.048408660201517 732.39475048475288 18.841622859656042 731.71618755676991 19.632100994045377 731.03523906745568 20.419848819876361 730.35191061645196 21.204871841721022 729.66620804807428 21.987175295552593 728.97813747617147 22.766764117542085 728.28770532518877 23.543642968317144 727.59491831032778 24.059758357077257 727.13149519984745 24.317365812545635 726.89939354792853 + 12.1243615709 4 13.664285955445454 1 15.204210339990908 1 16.744134724536362 1 18.284059109081817 1 19.823983493627271 1 21.363907878172725 1 22.903832262718183 1 24.443756647263633 1 25.983681031809091 1 27.523605416354542 1 29.0635298009 1 30.603454185445454 1 32.143378569990908 1 33.683302954536359 1 35.223227339081816 1 36.763151723627274 1 38.303076108172725 1 39.843000492718176 1 41.382924877263633 1 42.922849261809091 1 44.462773646354542 1 46.0026980309 4 +7 0 0 5 6 2 73.096939995110006 7.9999995884999997 77.656280158748004 9.9103933373999986 82.228392616050002 11.833117016399999 86.810938026070005 13.7672523074 91.402246973199993 15.712167712599999 96 17.666900496399997 + 12.1243615709 6 46.0026980309 6 +1 -7.0434510652381223e-10 -3.0649971449747682e-10 9.4056270715158681e-13 1 +7 0 0 1 2 2 0.51055604953232547 725.64819626400197 0.510556049561536 757.52066139432077 + 710.59217419499998 2 741.80333741499999 2 +7 0 0 3 25 23 0 710.59217419470906 1.0374088701677275 710.51284285264285 3.1111966327413754 710.3536918134422 6.2187957663609668 710.11326458571568 9.3232972996835866 709.87088778100133 12.424764938505364 709.62635905643936 15.523304281104613 709.37950370388558 18.619063215912863 709.13017661718936 21.71222261315652 708.87825847146769 24.802989883206966 708.62365328278838 27.891591974828984 708.36628543652716 30.978268646521613 708.10609669798998 34.063265682961649 707.8430430625732 37.146828026279202 707.57709147325329 40.229192705603744 707.30821638354109 43.310581467925026 707.03639615334112 46.391193022147725 706.76160926382863 49.471194784540764 706.48383032446452 52.550714165056078 706.20302589473783 55.629828956892815 705.91914995974719 58.708558298874635 705.6321395905702 61.78684873145189 705.34190875057573 64.864576018241138 705.04834781778004 66.915849392030907 704.85031631084087 67.941313710900005 704.75069568329241 + 0 4 3.8860318295954546 1 7.7720636591909091 1 11.658095488786364 1 15.544127318381818 1 19.430159147977271 1 23.316190977572727 1 27.202222807168184 1 31.088254636763637 1 34.974286466359089 1 38.860318295954542 1 42.746350125550002 1 46.632381955145455 1 50.518413784740908 1 54.404445614336367 1 58.29047744393182 1 62.176509273527273 1 66.062541103122726 1 69.948572932718179 1 73.834604762313631 1 77.720636591909084 1 81.606668421504551 1 85.492700251100004 4 +1 67.941313710396997 3.1081981433089823e-10 7.6729679221483582e-13 1 +7 0 0 1 2 2 3.7740845292748997e-11 686.37481116385084 6.2847856207131672e-11 718.19342249295005 + 704.750695683 2 737.42116683799998 2 +7 0 0 1 2 2 -6.6325513106734636e-12 741.80333741469815 6.6520030752781594 741.64093421163363 + 0 2 8.1123816029473819 2 +7 0 0 3 4 2 9.5158183786899997 56.513204642600002 7.98128615233 56.342488106099999 6.4436146490999997 56.171412924899997 4.9030571868299999 56.0000001091 + 0 4 8.1123864679299995 4 +7 0 0 3 4 2 -6.7195138342412974e-12 741.80333741469815 2.2189086162800282 741.74916457946131 4.4360356685588833 741.69503523964954 6.6520030752781496 741.64093421163363 + 0 4 8.1123816029473819 4 +7 0 0 3 4 2 9.5158183786899997 56.513204642600016 7.98128615233 56.342488106100014 6.4436146490999997 56.171412924900011 4.9030571868299999 56.000000109100014 + 0 4 8.1123864679299995 4 +1 9.8728655245729753e-10 -4.3962700146948919e-10 -1.2223652919855754e-12 1 +7 0 0 1 2 2 30.335781777893761 733.20801239345894 30.335781777855495 764.76336847748291 + 730.36218505099998 2 761.79506416599997 2 +7 0 0 1 2 2 9.465866663574078e-11 730.36218505056047 0.81548831975132463 730.3082777850002 + 0 2 1.00424895475 2 +1 0.81548831934801336 2.2737367544323206e-13 5.5225054965065252e-13 1 +7 0 0 1 2 2 -3.571400809759659e-11 728.64265843908493 -1.8250316845881415e-11 760.03967282123631 + 730.30827778499997 2 761.77706325300005 2 +7 0 0 1 2 2 5.6094706415082824e-11 761.7950641653739 0.81548831976873448 761.77706325268059 + 0 2 0.97955934883499995 2 +7 0 0 3 4 2 17.855219074499999 56.190243308200003 17.6769274344 56.221066817599997 17.489801402299999 56.2532926811 17.307986786600001 56.2844833029 + 0 4 0.97955934883499995 4 +7 0 0 5 6 2 5.6097959610923454e-11 761.7950641653739 0.1630191683351104 761.79146571552928 0.32997966020876585 761.78778026576788 0.4898052634226211 761.78425230998494 0.65383711045944692 761.78063150649336 0.81548831976870517 761.77706325268059 + 0 6 0.97955934883499995 6 +7 0 0 3 4 2 17.855219074499999 56.190243308200017 17.6769274344 56.221066817600011 17.489801402299999 56.253292681100014 17.307986786600001 56.284483302900014 + 0 4 0.97955934883499995 4 +7 0 0 3 25 23 28.672171307482671 764.80023035930537 28.248243793484708 764.3482512691711 27.40169058846018 763.44428254919603 26.135505254430274 762.08825989939305 24.872705579758275 760.73211123831004 23.613025115890952 759.37584484203012 22.356192384015255 758.01950340789608 21.101930607595087 756.66316460994449 19.849958673263846 755.30693379590855 18.599992238665259 753.95093917237534 17.351745308611981 752.59532668370764 16.104932239407166 751.24025531474524 14.859270242065964 749.88589260587071 13.61448243909409 748.53241042366597 12.370301545567028 747.17998096431666 11.126474253552461 745.82877298525295 9.8827663957800791 744.47894825868366 8.6389689981516646 743.13065823112925 7.3949052030014926 741.78404090917843 6.1504384888118144 740.43921784615441 4.9054808790429512 739.09629163103648 3.6600061648503379 737.75534229006621 2.4140493224662087 736.41642840577549 1.583191098074114 735.525190211893 1.1677266207107788 735.07991918645837 + 2.7419017680681805 4 4.841840505060536 1 6.9417792420528919 1 9.0417179790452469 1 11.141656716037602 1 13.241595453029957 1 15.341534190022314 1 17.441472927014669 1 19.541411664007025 1 21.641350400999382 1 23.741289137991735 1 25.841227874984092 1 27.941166611976449 1 30.041105348968802 1 32.141044085961155 1 34.240982822953512 1 36.340921559945869 1 38.440860296938226 1 40.540799033930583 1 42.640737770922932 1 44.740676507915289 1 46.840615244907646 1 48.940553981900003 4 +7 0 0 5 6 2 59.044360741700004 8.0000000008999983 59.623163158499999 12.255727284999999 60.213699431999999 16.591697398400001 60.818048069 21.023172516499997 61.427514942999998 25.486585483399999 62.044636816299999 30 + 2.7419015286600001 6 48.940553981900003 6 +7 0 0 3 25 23 1.1677265887355051 735.07991915730724 1.6160932290832009 735.0520787873329 2.5123177392698643 734.99646084488927 3.8549312377006895 734.91312595317595 5.1955986672627503 734.82977906012138 6.5341876893745674 734.7463429269867 7.8706157175224263 734.6627558726766 9.2048515934664223 734.57897264980363 10.536906442362378 734.49496198719078 11.866828092054309 734.41070496703651 13.19469525591763 734.32619314291651 14.52061249575166 734.24142670710933 15.844705650209198 734.15641263372981 17.167117742980395 734.07116282147524 18.488005278674969 733.98569222992421 19.807534851261533 733.90001700800792 21.125879981172343 733.81415261131849 22.443218091329292 733.72811189851393 23.759727557963313 733.64190321809792 25.075584682360955 733.555528415136 26.390960781587953 733.46898099150872 27.706018308713247 733.38224351916745 29.020909755296834 733.2952876408641 29.897479964164827 733.23713867484241 30.335781777800001 733.20801239341665 + 1.4093188681172746 4 3.0337566702528531 1 4.6581944723884314 1 6.2826322745240102 1 7.9070700766595889 1 9.5315078787951677 1 11.155945680930746 1 12.780383483066325 1 14.404821285201903 1 16.029259087337479 1 17.653696889473061 1 19.278134691608638 1 20.902572493744216 1 22.527010295879794 1 24.151448098015376 1 25.775885900150953 1 27.400323702286531 1 29.024761504422109 1 30.649199306557687 1 32.273637108693265 1 33.898074910828846 1 35.522512712964421 1 37.146950515100002 4 +7 0 0 1 2 2 28.672172086843059 764.80023049986494 30.335781777855619 764.76336847748291 + 32.864076451344175 2 34.868090442899998 2 +7 0 0 3 4 2 18.9556392583 55.999999929399998 18.588860641699998 56.063409513800003 18.2220502865 56.126824605300001 17.855219074499999 56.190243308200003 + 32.8640756872 4 34.868090442899998 4 +7 0 0 9 10 2 28.672172086843133 764.80023049986494 28.857015584658406 764.79613476445058 29.041872123783371 764.79203873998017 29.226712143296236 764.78794308179613 29.411481463243661 764.7838489897066 29.596496008591966 764.7797494645539 29.781146805872911 764.7756579986833 29.966125277046817 764.77155927269507 30.150932711517171 764.76746433628659 30.335781777855498 764.76336847748303 + 32.864076451344175 10 34.868090442899998 10 +7 0 0 3 4 2 18.9556392583 55.999999929400012 18.588860641699998 56.063409513800018 18.2220502865 56.126824605300015 17.855219074499999 56.190243308200017 + 32.8640756872 4 34.868090442899998 4 +1 45.522180577 8 1 0 +1 32.477819423 56 -1 0 +1 32.477819423 56.000000000000014 -1 0 +1 0 4 0 1 +1 32 19 0 1 +1 47.0223184082 30 1 0 +1 35 8 1 0 +1 78 91 0 -1 +1 78 91.000000000000014 0 -1 +1 0 4 0 1 +1 32 19 0 1 +1 35 30 1 0 +1 1.5707963267948966 4 0 1 +1 38 19 0 1 +1 3.1415926535897931 -73.658673020999998 1 0 +2 26 -74 1 0 -0 1 15 +8 1.4681840125696488 3.1415926535897931 +1 3.1415926535897931 -73.658673020999998 1 0 +1 -1.6162206991371215 -1.9999999959918471 1 0 +2 26 -74.000000000000014 1 0 -0 1 15 +1 2.9935559670373286 -2.2388064735423541e-09 2.9269516110201727e-15 1 +1 -0.14803668655237656 -2.2388064735423541e-09 5.4501857584513559e-15 1 +1 4.6097766661593322 -71.658673027248255 0 1 +1 4.2078297811960113 10.999999998968002 -1 1.4475061331373889e-13 +2 11.599735405267566 -69.032210875626348 -0.86632438691299207 -0.49948178809625149 0.49948178809625149 -0.86632438691299207 14.999999999999746 +1 8.9656431342571015 -60.658673026039651 -1 0 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 1.5253719541808366 71.658673025008198 0 1 +1 -2.0753555254889 10.999999998968633 1 0 +2 11.599735405267566 -69.032210875626348 0.86632438691299207 0.49948178809625149 0.49948178809625149 -0.86632438691299207 14.999999999999746 +1 -0.45913482651227772 -60.658673026039651 1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 -51.658673020999998 1 0 +8 0 1.4681840125696488 +1 3.1415926535897931 -73.658673020999998 1 0 +1 1.5253719544525974 -1.9999999959918471 1 0 +2 26 -74.000000000000014 1 0 -0 1 15 +1 1.525371954724432 71.658673025008184 0 1 +1 -3.1415926535897931 -73.658673020999998 1 0 +2 26 -74 1 0 -0 1 15 +8 6.1805725452882188 6.2831853071795862 +1 -3.1415926535897931 -73.658673020999998 1 0 +1 -4.7578133527269886 -1.9999999959918471 1 0 +2 26 -74.000000000000014 1 0 -0 1 15 +1 1.4227591928329584 1.2235545909788925e-10 0 1 +1 1.4227591928329584 1.2235545909788925e-10 0 1 +1 3.0389798916984319 -71.658673024885829 0 1 +1 -0.45913482651227772 -60.658673026039651 1 0 +1 7.3494224352804789 10.999999998970349 -1 -2.8950109429228596e-13 +2 11.599735405267566 -69.032210875626348 -0.86632438691299207 -0.49948178809625149 0.49948178809625149 -0.86632438691299207 14.999999999999746 +1 8.9656431342571015 -60.658673026039651 -1 0 +1 2.6824578270775152 -60.658673026039651 -1 0 +1 -3.1415926535897931 -51.658673020999998 1 0 +8 4.6097761291708617 6.1805725452882188 +1 -3.1415926535897931 -73.658673020999998 1 0 +1 -4.7578133527269886 -1.9999999959918471 1 0 +2 26 -74.000000000000014 1 0 -0 1 15 +7 0 0 1 2 2 -0.14803746343492552 11.000000002371053 -0.14803705751185259 -11.000000000816726 + -10.9999999985 2 10.9999999985 2 +7 0 0 1 2 2 2.9935551901549364 11.000000002371053 2.9935555960780098 -11.000000000816726 + -10.9999999985 2 10.9999999985 2 +7 0 0 8 9 2 1.468183235717416 -60.65867302263775 1.4681832657003726 -62.283673022433028 1.4681832956823655 -63.908673022262519 1.4681833256627215 -65.533673021622235 1.4681833556451238 -67.158673022058792 1.4681833856284356 -68.783673021185677 1.4681834156147033 -70.408673021462164 1.4681834455981126 -72.033673021204692 1.4681834755810692 -73.65867302099997 + -10.9999999985 9 1.999999996205764 9 +8 3.1415926535897931 4.6097761291708617 +1 -3.1415926535897931 -73.658673020999998 1 0 +1 -1.6162206991371215 -1.9999999959918471 1 0 +2 26 -74.000000000000014 1 0 -0 1 15 +1 3.1415926535897931 -73.658673020999998 1 0 +2 43 91 1 0 -0 1 15 +8 1.468183567226901 3.1415926535897931 +1 3.1415926535897931 -73.658673020999998 1 0 +1 4.4617390848848659 2.0000000058544369 -1 0 +2 43 91.000000000000014 1 0 -0 1 15 +7 0 0 1 2 2 -0.14803691849471079 -11.000000002998149 -0.1480372865386208 10.999999993443453 + -10.9999999985 2 10.999999991288211 2 +7 0 0 1 2 2 2.9935557350950823 -11.000000002998149 2.9935553670511723 10.999999993443453 + -10.9999999985 2 10.999999991288211 2 +7 0 0 8 9 2 4.6097760033361581 -60.658673012146778 4.6097760305212248 -62.283673013253264 4.6097760577113149 -63.908673014339001 4.6097760848533653 -65.533673015394015 4.6097761121272924 -67.158673016354442 4.6097761392375105 -68.783673017664114 4.609776166451411 -70.408673018784611 4.6097761936316282 -72.033673019892206 4.6097762208166948 -73.658673020998691 + -10.9999999985 9 2.0000000064211907 9 +1 -1.362311395847021 -11.000000004591863 1 -1.4475055202470537e-13 +2 138.06442175269905 23.199470804510085 -0.86632438691299207 -0.49948178809625149 0.49948178809625149 -0.86632438691299207 15.000000000000332 +1 8.9656431342495182 -60.658673010552363 -1 0 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 1.3201464314551921 -71.658673015145609 0 -1 +1 -4.5039040492924949 -11.000000004591232 1 -2.8950119468819665e-13 +2 138.06442175269905 23.199470804510085 -0.86632438691299207 -0.49948178809625149 0.49948178809625149 -0.86632438691299207 15.000000000000332 +1 8.9656431342495182 -60.658673010552363 -1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 -51.658673020999998 1 0 +8 0 1.468183567226901 +1 3.1415926535897931 -73.658673020999998 1 0 +1 1.320146431295073 2.0000000058544369 -1 0 +2 43 91.000000000000014 1 0 -0 1 15 +1 1.3201464311349544 -71.658673015145595 0 -1 +1 -3.1415926535897931 -73.658673020999998 1 0 +2 43 91 1 0 -0 1 15 +8 6.1805725453958553 6.2831853071795862 +1 -3.1415926535897931 -73.658673020999998 1 0 +1 7.603331738474659 2.0000000058544369 -1 0 +2 43 91.000000000000014 1 0 -0 1 15 +1 1.4227591929222976 -1.212683287121763e-10 -6.8631968780887063e-16 1 +1 1.4227591929222976 -1.212683287121763e-10 -6.8631968780887063e-16 1 +1 3.0389798918060684 -71.658673015023723 0 -1 +1 8.9656431342495182 -60.658673010552363 -1 0 +1 -4.5039040491529185 -11.00000000459638 1 5.7900243447484818e-13 +2 138.06442175269905 23.199470804510085 -0.86632438691299207 -0.49948178809625149 0.49948178809625149 -0.86632438691299207 15.000000000000332 +1 8.9656431342495182 -60.658673010552363 -1 0 +1 8.9656431342510832 -60.658673021606546 -1 0 +1 2.6824578270699311 -60.658673010552363 -1 0 +1 -3.1415926535897931 -51.658673020999998 1 0 +8 4.6097761157002193 6.1805725453958553 +1 -3.1415926535897931 -73.658673020999998 1 0 +1 7.603331738474659 2.0000000058544369 -1 0 +2 43 91.000000000000014 1 0 -0 1 15 +7 0 0 1 2 2 2.9935551821056849 -10.999999999220108 2.9935559279262245 10.999999996026418 + -10.9999999985 2 10.9999999985 2 +7 0 0 1 2 2 -0.14803747148410817 -10.999999999220108 -0.14803672566356862 10.999999996026418 + -10.9999999985 2 10.9999999985 2 +7 0 0 8 9 2 1.4681839028225572 -60.658673015925004 1.4681838477335407 -62.283673016559426 1.4681837926443677 -63.908673017082037 1.468183737556501 -65.533673018129775 1.4681836824638594 -67.158673018100671 1.4681836273739464 -68.783673019293929 1.4681835722874439 -70.408673019584967 1.4681835171994424 -72.033673020365967 1.4681834621104259 -73.658673021000396 + -10.9999999985 9 2.000000007612341 9 +8 3.1415926535897931 4.6097761157002193 +1 -3.1415926535897931 -73.658673020999998 1 0 +1 4.4617390848848659 2.0000000058544369 -1 0 +2 43 91.000000000000014 1 0 -0 1 15 +1 3.1415926535897931 -73.658673020999998 1 0 +2 -120 18.631168425399999 1 0 -0 1 15 +8 1.4681835672301702 3.1415926535897931 +1 3.1415926535897931 -73.658673020999998 1 0 +1 4.4617390848864327 1.9999999948011666 -1 0 +2 -120 18.631168425400002 1 0 -0 1 15 +7 0 0 8 9 2 4.6097760033394302 -60.658673023200961 4.6097760305244968 -62.283673022925861 4.6097760577063127 -63.908673022502626 4.609776084904297 -65.533673022786388 4.6097761120690848 -67.158673021243885 4.6097761392666143 -68.783673022262519 4.6097761664450445 -70.408673021418508 4.6097761936348984 -72.033673021275263 4.6097762208199651 -73.658673021000155 + -10.9999999985 9 1.9999999953684693 9 +1 8.9656431342510832 -60.658673021606546 -1 0 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 1.3201464314581883 -71.658673026198869 0 -1 +1 8.9656431342510832 -60.658673021606546 -1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 -51.658673020999998 1 0 +8 0 1.4681835672301702 +1 3.1415926535897931 -73.658673020999998 1 0 +1 1.3201464312966393 1.9999999948011666 -1 0 +2 -120 18.631168425400002 1 0 -0 1 15 +1 1.3201464311350908 -71.658673026198869 0 -1 +1 -3.1415926535897931 -73.658673020999998 1 0 +2 -120 18.631168425399999 1 0 -0 1 15 +8 6.180572545395747 6.2831853071795862 +1 -3.1415926535897931 -73.658673020999998 1 0 +1 7.6033317384762258 1.9999999948011666 -1 0 +2 -120 18.631168425400002 1 0 -0 1 15 +1 3.0389798918060378 -71.658673026076997 0 -1 +1 8.9656431342510832 -60.658673021606546 -1 0 +1 2.6824578270714969 -60.658673021606546 -1 0 +1 -3.1415926535897931 -51.658673020999998 1 0 +7 0 0 3 25 23 2.9413842412737159 -52.243309066199998 2.9346202661095249 -52.261554369487186 2.9210323319429192 -52.295787395075287 2.9004795084875266 -52.340205052241622 2.8797649084716697 -52.377524413567791 2.8588972703649382 -52.407604531714597 2.8378851284919824 -52.430321152992512 2.816736822046594 -52.445569068250414 2.7954605564078663 -52.453261482956684 2.7740644504025109 -52.453330185985692 2.7525565869294475 -52.445725504391085 2.7309450619091025 -52.430416315525683 2.7092380325314989 -52.407390043789427 2.68744376416522 -52.376652661516594 2.6655706757196684 -52.338228688679905 2.6436273831536758 -52.292161193186324 2.6216227408187089 -52.238511789990206 2.5995658804931292 -52.177360644344695 2.5774662473690872 -52.108806459682519 2.5553336345653421 -52.03296652284223 2.5331782092170467 -51.949976535281998 2.5110105551324824 -51.859991242998255 2.488841637969168 -51.76318208563729 2.4740692415390799 -51.69422467529931 2.4666866651556312 -51.658673082199996 + 0 4 0.55736116711818184 1 1.1147223342363637 1 1.6720835013545456 1 2.2294446684727274 1 2.7868058355909091 1 3.3441670027090913 1 3.901528169827273 1 4.4588893369454548 1 5.0162505040636365 1 5.5736116711818182 1 6.1309728382999999 1 6.6883340054181826 1 7.2456951725363643 1 7.803056339654546 1 8.3604175067727269 1 8.9177786738909095 1 9.4751398410090921 1 10.032501008127273 1 10.589862175245456 1 11.147223342363636 1 11.704584509481819 1 12.2619456766 4 +7 0 0 3 25 23 0 638.94598212974438 0.15314476762216392 638.96688559343045 0.45973483937745963 639.00494726863769 0.92010041252222174 639.05053403262764 1.3805231887694089 639.08433247598646 1.8405873200687057 639.10610405509544 2.2998815312852239 639.11563914247495 2.7579995875549299 639.11276110446613 3.2145398693860985 639.09732520980856 3.6691051822342682 639.06921889634532 4.1213024997519181 639.02836164723306 4.5707427224634198 638.97470494556569 5.0170404311517158 638.90823218214712 5.4598136417389203 638.82895855042 5.8986835610989301 638.73693091969005 6.3332743452664131 638.63222768998196 6.7632128608897277 638.51495862595016 7.1881284513258272 638.38526467861823 7.6076527072980298 638.24331776422048 8.0214192474807575 638.08932061591099 8.4290634941500606 637.92350627753672 8.8302225045608189 637.7461388483232 9.2245346368891283 637.5575094751191 9.4826047998851486 637.42446982361594 9.6103786540677589 637.35618168274664 + 0 4 0.55736116711818184 1 1.1147223342363637 1 1.6720835013545456 1 2.2294446684727274 1 2.7868058355909091 1 3.3441670027090913 1 3.901528169827273 1 4.4588893369454548 1 5.0162505040636365 1 5.5736116711818182 1 6.1309728382999999 1 6.6883340054181826 1 7.2456951725363643 1 7.803056339654546 1 8.3604175067727269 1 8.9177786738909095 1 9.4751398410090921 1 10.032501008127273 1 10.589862175245456 1 11.147223342363636 1 11.704584509481819 1 12.2619456766 4 +7 0 0 3 25 23 2.9413842412737159 -52.243309066199998 2.9436774187103771 -52.237123895118664 2.9482569564828709 -52.224493760665389 2.9551058512170751 -52.204776053606253 2.9619343757185987 -52.184292712660408 2.9687425635806104 -52.163050609320486 2.9755304431440255 -52.141056615078995 2.9822980367935865 -52.118317601428579 2.9890453612075381 -52.094840439861784 2.9957724273540194 -52.070632001871161 3.0024792405574354 -52.045699158949262 3.0091658005481223 -52.020048782588724 3.0158321015184564 -51.993687744282084 3.0224781321791201 -51.966622915521889 3.0291038758171296 -51.938861167800766 3.0357093103550454 -51.910409372611241 3.0422944084117742 -51.881274401445914 3.0488591373635092 -51.851463125797324 3.0554034594098005 -51.820982417158099 3.0619273316258941 -51.78983914702075 3.0684307060714238 -51.758040186877892 3.0749135296935566 -51.725592408222056 3.0813757450017949 -51.692502682545857 3.0856701069119854 -51.670019481743175 3.0878138320878672 -51.658673180669297 + 0 4 0.18892121139212928 1 0.37784242278425856 1 0.56676363417638786 1 0.75568484556851712 1 0.94460605696064637 1 1.1335272683527757 1 1.322448479744905 1 1.5113696911370342 1 1.7002909025291635 1 1.8892121139212927 1 2.0781333253134222 1 2.2670545367055515 1 2.4559757480976807 1 2.64489695948981 1 2.8338181708819392 1 3.0227393822740685 1 3.2116605936661977 1 3.400581805058327 1 3.5895030164504562 1 3.7784242278425855 1 3.9673454392347147 1 4.1562666506268444 4 +7 0 0 3 25 23 4.8565681339199998 643.83538639977735 4.8046716626461103 643.82824620434872 4.7009108190051618 643.81353151224027 4.5453700348240771 643.79016832842558 4.3899334992182233 643.76552580390421 4.2346064399097489 643.73961557966322 4.0793949364162208 643.71244921504285 3.9243059773628599 643.68403819020625 3.769347339148557 643.65439392873668 3.6145275122231575 643.62352781360767 3.4598556143662926 643.59145120369055 3.3053413072869819 643.55817544888748 3.1509947123029192 643.5237119043926 2.9968263264131916 643.48807194394476 2.8428469386332549 643.45126697209275 2.6890675468658247 643.41330843546348 2.5354992755399004 643.37420783302548 2.3821532941210966 643.33397672535989 2.2290407372139804 643.29262674285189 2.0761726246706416 643.25016959317452 1.9235597887140763 643.2066170666493 1.7712127829812545 643.16198104484693 1.6191418681277912 643.11627349244372 1.5179517705056225 643.08509550215604 1.4674059904554182 643.06933194477472 + 0 4 0.18892121139212928 1 0.37784242278425856 1 0.56676363417638786 1 0.75568484556851712 1 0.94460605696064637 1 1.1335272683527757 1 1.322448479744905 1 1.5113696911370342 1 1.7002909025291635 1 1.8892121139212927 1 2.0781333253134222 1 2.2670545367055515 1 2.4559757480976807 1 2.64489695948981 1 2.8338181708819392 1 3.0227393822740685 1 3.2116605936661977 1 3.400581805058327 1 3.5895030164504562 1 3.7784242278425855 1 3.9673454392347147 1 4.1562666506268444 4 +1 -3.1415926535897931 -51.658673020999998 1 0 +8 4.6097761157000363 6.180572545395747 +1 -3.1415926535897931 -73.658673020999998 1 0 +1 7.6033317384762258 1.9999999948011666 -1 0 +2 -120 18.631168425400002 1 0 -0 1 15 +7 0 0 8 9 2 1.4681839028223376 -60.658673026978285 1.4681838477333256 -62.283673026230943 1.4681837926441403 -63.908673025449389 1.4681837375501345 -65.533673024678137 1.4681836824702259 -67.158673023979645 1.4681836273730369 -68.783673023164738 1.4681835722885808 -70.408673022451694 1.4681835171992541 -72.033673021746893 1.4681834621102421 -73.658673020999544 + -10.9999999985 9 1.9999999965576745 9 +8 3.1415926535897931 4.6097761157000363 +1 -3.1415926535897931 -73.658673020999998 1 0 +1 4.4617390848864327 1.9999999948011666 -1 0 +2 -120 18.631168425400002 1 0 -0 1 15 +1 1.5716667508095923 4 0 1 +1 -121.91783464761529 0 0 -1 +1 -2.6599062816578418 8 1 0 +2 97.234650877544595 -138.86278533254807 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 33 +1 0 4 0 1 +1 4 0 1 0 +1 -2.6599062816578418 0 1 0 +2 -156.394413507 1.4365477612899999 1 0 -0 1 33 +2 -156.394413507 1.4365477612900015 1 0 -0 1 33 +1 1.2636428800708086 4 0 1 +1 4 98.520727336660599 1 0 +1 -1.3962634015930773 8 1 0 +2 9.6911430881349787 -184.05645700153656 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 33 +1 0 4 0 1 +1 -1.3962634015930773 0 1 0 +2 -110.752290391 88.747087288100005 1 0 -0 1 33 +2 -110.752290391 88.747087288100019 1 0 -0 1 33 +1 -75.875670868200004 116.10647646300001 -0.98480775301218992 0.1736481776670335 +1 -75.875670868200004 116.10647646300004 -0.98480775301218992 0.17364817766703353 +1 0 4 0 1 +1 -34.574811612586572 -186.38884200308692 0.70591234036776174 -0.70829920776216426 +1 -7.3818363913700002 109.18971689 -1 0 +1 -7.3818363913700002 109.18971689000003 -1 0 +1 0.60653049470760922 3.5527136788005009e-15 0 -1 +1 -86.638442382137299 -141.34857917723338 0.81818281241205493 -0.57495815975903863 +1 0.17453292519953767 4 0 1 +1 4.354655396590986 7.1054273576010019e-15 0 1 +1 0 -3.5527136788005009e-15 0 -1 +1 -4.1058576171676782 4.0000000000000036 1 0 +2 -117.40167461047258 -97.498613950421714 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 28.000022622300008 +1 0 0 0 1 +1 0.60653012342809198 3.907985046680551e-14 0 -1 +1 -4.1058576171676782 -4 1 0 +2 43.0000067844 91.000000406799998 1 0 -0 1 28.000022622300008 +2 43.0000067844 91.000000406800012 1 1.3458650046260789e-32 -1.3458650046260789e-32 1 28.000022622300008 +1 -1.5707961175190004 -3.9999999999999964 1 0 +2 -65.768585338055686 -78.550734405074493 0.81818281241205493 -0.57495815975903863 -0.57495815975903863 -0.81818281241205493 32.999977939600001 +1 0.60652851919430795 1.0658141036401503e-14 0 1 +1 0 -7.1054273576010019e-15 0 -1 +1 -1.5707961175190004 4 1 0 +2 11.6489385447 45.810305040400003 -1 0 0 1 32.999977939600001 +2 11.6489385447 45.81030504040001 -1 -3.81968493978202e-32 -3.81968493978202e-32 1 32.999977939600001 +1 0 -3.5527136788005009e-15 0 1 +1 4 0 1 -8.881784197e-16 +1 -4.1058606344574757 -3.9999999999999964 1 0 +2 -117.73295181317347 -152.49759043063455 0.81818281241205493 -0.57495815975903863 -0.57495815975903863 -0.81818281241205493 32.999970837799999 +1 0.60652865360453845 1.0658141036401503e-14 0 1 +1 -4.1058606344574757 4 1 0 +2 11.6489417921 136.18968819400001 -1 0 0 1 32.999970837799999 +2 11.6489417921 136.18968819400004 -1 3.8196841211313168e-32 3.8196841211313168e-32 1 32.999970837799999 +1 0 -3.5527136788005009e-15 0 1 +1 4.3546562893196228 7.1054273576010019e-15 0 -1 +1 -4.5378560551848084 8 1 0 +2 -138.33789976477345 -248.01786359479101 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 123 +1 0 4 0 1 +1 -4.5378560551848084 0 1 0 +2 -26.412604421400001 226.18971689 1 0 -0 1 123 +2 -26.412604421400001 226.18971689000006 1 0 -0 1 123 +1 0.17453292519953756 4 0 1 +1 1.2636428800749329 4 0 -1 +1 4 98.520727336463196 1 0 +1 8 49.260363667999961 0 1 +1 -157.50115507199999 57.600224206599997 0.46327432155297421 0.88621493047095057 +1 -157.50115507199999 57.600224206600011 0.4632743215529741 0.88621493047095057 +1 0 4 0 -1 +1 4 0 1 0 +1 0 49.260363667999961 0 1 +1 65.848403749512116 -185.45127017551374 -0.88857959290106114 -0.45872247283056083 +1 -2.5290360583931544 4.0000000000000036 1 0 +2 -8.6244704912098751 27.727261402305043 -0.57495815975903863 -0.81818281241205493 0.81818281241205493 -0.57495815975903863 28.000022896800004 +1 0 -3.5527136788005009e-15 0 1 +1 0.61255542766666515 6.7501559897209518e-14 -6.9388939039072284e-17 -1 +1 -2.5290360583931544 -4 1 0 +2 26.000006838800001 -73.999999580199997 0 1 -1 0 28.000022896800004 +2 26.000006838800001 -73.999999580200011 0 1 -1 0 28.000022896800004 +1 4.3667058613088301 3.5527136788005009e-15 0 1 +1 0 7.1054273576010019e-14 0 -1 +1 -2.6607861120890997 4 1 0 +2 37.190042946900419 -22.802654339203514 -0.57495815975903863 -0.81818281241205493 0.81818281241205493 -0.57495815975903863 33.001288613 +1 0 1.2434497875801753e-13 0 1 +1 8.7550013737954 0 6.8190230360083005e-17 -1 +1 -2.6607861120890997 -4 1 0 +2 -40.537227982799998 -58.998719344500003 0 1 -1 0 33.001288613 +2 -40.537227982799998 -58.998719344500017 0 1 -1 0 33.001288613 +1 0.48079690761268701 1.1723955140041653e-13 0 1 +1 -23.080161257499999 -86 -1 0 +1 -23.080161257499999 -86.000000000000014 -1 0 +1 0 4.2632564145606011e-14 0 -1 +1 38.431577633953168 9.3264123654099222 0.81818281241205493 -0.57495815975903863 +1 0.4807955405410031 1.2079226507921703e-13 2.7755575615628914e-17 1 +1 -3.1415925195315371 -4 1 0 +2 43.121850689058995 46.363698500928933 0.57495815975903863 0.81818281241205493 0.81818281241205493 -0.57495815975903863 32.999981984999991 +1 0.61255369628464873 2.8421709430404007e-14 1.110223024625156e-16 1 +1 0 3.5527136788005009e-15 0 -1 +1 -3.1415925195315371 4 1 0 +2 -5.6227721777599999 -118.999981699 0 -1 -1 -0 32.999981984999991 +2 -5.6227721777599999 -118.99998169900003 0 -1 -1 -0 32.999981984999991 +1 0 3.1974423109204508e-14 0 1 +1 4.3667067482609419 -3.5527136788005009e-15 0 -1 +1 -5.6706317856458686 -4.0000000000000693 1 1.1599680793212532e-14 +2 -8.6243639850926321 -27.27272418172133 0.57495815975903863 0.81818281241205493 0.81818281241205493 -0.57495815975903863 32.999981930200008 +1 0.61255369731886855 3.907985046680551e-14 0 1 +1 -49.889623308219996 0 -4.4408920985e-16 -1 +1 -5.6706317856458686 4 1 0 +2 -5.6227708008399997 -29.000017928999998 0 -1 -1 -0 32.999981930200008 +2 -5.6227708008399997 -29.000017929000006 0 -1 -1 -0 32.999981930199993 +7 0 0 3 25 23 0 626.41493012272758 0.54553491760405237 626.47280131813682 1.6368983192062481 626.58822141604048 3.2748092753272653 626.76038380537921 4.9135706896269893 626.93157730091229 6.5531690918270362 627.10180166765429 8.1935922070770637 627.27105722393685 9.8348290816140551 627.4393448976939 11.476869975979572 627.60666617494144 13.11970631736513 627.77302307770151 14.763330633014911 627.93841813460335 16.407736485654631 628.10285435404319 18.052918405370026 628.26633519726215 19.698871819468803 628.4288645520686 21.345592979944293 628.5904467070103 22.993078888671096 628.75108632606657 24.641327220314952 628.91078842382512 26.290336242978849 629.06955834120527 27.94010473659009 629.22740172153544 29.59063190901708 629.38432448766753 31.241917309975335 629.54033281757643 32.893960742491274 629.69543312795452 34.546762172775452 629.84963203024267 35.649135147774842 629.95183493796162 36.20044797646878 630.00278843407852 + 0 4 2.0634658179000001 1 4.1269316358000001 1 6.1903974537000002 1 8.2538632716000002 1 10.317329089499999 1 12.3807949074 1 14.444260725300001 1 16.5077265432 1 18.5711923611 1 20.634658178999999 1 22.698123996900001 1 24.761589814800001 1 26.8250556327 1 28.888521450600003 1 30.951987268500002 1 33.015453086400001 1 35.078918904300004 1 37.142384722199999 1 39.205850540100002 1 41.269316357999998 1 43.3327821759 1 45.396247993800003 4 +1 -4.0998319425599696 4.0000000000000036 1 0 +2 -8.6244699448373598 27.727261089121562 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 22.000016624600004 +1 -4.0998319425599696 -4 1 0 +2 26.000006211700001 -73.999999638099993 1 0 -0 1 22.000016624600004 +2 26.000006211700001 -73.999999638100007 1 -8.5377303984945917e-33 8.5377303984945917e-33 1 22.000016624600004 +1 -2.6607867828715279 4 1 0 +2 37.190165497078183 -22.802547784929839 -0.57495815975903863 -0.81818281241205493 0.81818281241205493 -0.57495815975903863 27.0011298971 +1 0 1.2079226507921703e-13 0 1 +1 8.7550013737715062 0 8.8976017736890636e-16 1 +1 -2.6607867828715279 -4 1 0 +2 -40.537266987000002 -58.998876986600003 0 1 -1 0 27.0011298971 +2 -40.537266987000002 -58.998876986600017 0 1 -1 0 27.0011298971 +1 41.881326592507406 14.235509239882251 0.81818281241205493 -0.57495815975903863 +1 0 7.460698725481052e-14 0 1 +1 -23.080161257499999 -92 -1 0 +1 -23.080161257499999 -92.000000000000014 -1 0 +1 -3.1415914830853064 -4.0000000000000036 1 0 +2 43.121779469933209 46.363644426238267 0.57495815975903863 0.81818281241205493 0.81818281241205493 -0.57495815975903863 26.9998959383 +1 -3.1415914830853064 4 1 0 +2 -5.62274499818 -118.99989650800001 0 -1 -1 -0 26.9998959383 +2 -5.62274499818 -118.99989650800003 0 -1 -1 -0 26.9998959383 +1 -5.6706310541855762 -4 1 0 +2 -8.6243360114286052 -27.272634659535701 0.57495815975903863 0.81818281241205493 0.81818281241205493 -0.57495815975903863 26.999891704899998 +1 0.61255552651090994 7.815970093361102e-14 -5.5511151231257827e-17 1 +1 -49.88962330823 0 -8.881784197e-16 1 +1 -5.6706310541855762 4.0000000000000036 1 0 +2 -5.6227422168999999 -29.0001072582 0 -1 -1 -0 26.999891704899998 +2 -5.6227422168999999 -29.000107258200007 0 -1 -1 -0 26.999891704900005 +1 -2.6599062816528045 8 1 0 +2 97.234650877544595 -138.86278533254807 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 27 +1 -2.6599062816528045 0 1 0 +2 -156.394413507 1.4365477612899999 1 0 -0 1 27 +2 -156.394413507 1.4365477612900015 1 0 -0 1 27 +1 1.5716667507973083 4 0 1 +1 -121.91783464796997 0 0 1 +1 -1.39626340159296 8 1 0 +2 9.6911430881349787 -184.05645700153656 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 27 +1 0 4 0 1 +1 -1.39626340159296 0 1 0 +2 -110.752290391 88.747087288100005 1 0 -0 1 27 +2 -110.752290391 88.747087288100019 1 0 -0 1 27 +1 -30.325016365482469 -182.15336796012076 0.70591234036776174 -0.70829920776216426 +1 -76.9175599342 110.197629944 -0.98480775301218992 0.1736481776670335 +1 -76.9175599342 110.19762994400003 -0.98480775301218992 0.17364817766703353 +1 -83.188693423583075 -136.43948230276106 0.81818281241205493 -0.57495815975903863 +1 -7.3818363913700002 103.18971689 -1 0 +1 -7.3818363913700002 103.18971689000003 -1 0 +1 -2.5350608447208369 4 1 0 +2 -117.40167407888924 -97.498614251256896 -0.57495815975903863 -0.81818281241205493 0.81818281241205493 -0.57495815975903863 22.000016404999997 +1 -2.5350608447208369 -4.0000000000000036 1 0 +2 43.000006176500001 91.000000347300002 0 1 -1 0 22.000016404999997 +2 43.000006176500001 91.000000347300016 0 1 -1 0 22.000016404999997 +1 0 3.1974423109204508e-14 0 1 +1 4 0 -1 -4.4408920985e-16 +1 -3.1415914956113351 -4.00000000000004 1 1.1714879579941093e-14 +2 -65.768651428447825 -78.550786086788065 0.57495815975903863 0.81818281241205493 0.81818281241205493 -0.57495815975903863 26.999897146199999 +1 -3.1415914956113351 4 1 0 +2 11.648962903899999 45.8103853247 0 -1 -1 -0 26.999897146199999 +2 11.648962903899999 45.810385324700007 0 -1 -1 -0 26.999897146199999 +1 -4.1058598684227476 -4 1 0 +2 -117.73292276199197 -152.49750181622576 0.81818281241205493 -0.57495815975903863 -0.57495815975903863 -0.81818281241205493 26.9998810387 +1 -4.1058598684227476 4 1 0 +2 11.648968972500001 136.189598988 -1 0 0 1 26.9998810387 +2 11.648968972500001 136.18959898800003 -1 2.3342659464742343e-32 2.3342659464742343e-32 1 26.9998810387 +1 -4.5378560551848803 8 1 0 +2 -138.33789976477345 -248.01786359479101 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 117 +1 -4.5378560551848803 0 1 0 +2 -26.412604421400001 226.18971689 1 0 -0 1 117 +2 -26.412604421400001 226.18971689000006 1 0 -0 1 117 +1 8 49.260363668463228 0 1 +1 68.600738585830172 -190.78274773243078 -0.88857959290106114 -0.45872247283056083 +1 -162.81844465399999 60.379870135899999 0.46327432155297421 0.88621493047095057 +1 0 49.260363668463228 0 1 +1 -162.81844465399999 60.379870135900013 0.4632743215529741 0.88621493047095057 +1 -4.7123889803846897 15 1 0 +1 -4.7123889803846897 -7 1 0 +2 46 88 1 0 -0 1 32 +8 4.7123889803846897 6.2831853071795862 +1 -4.7123889803846897 -7 1 0 +2 46 88.000000000000014 1 0 -0 1 32 +7 0 0 3 25 23 10.9069510097 727.83823493430009 10.74184318267824 727.85124443334098 10.411633062407818 727.87722579994238 9.9163349269784682 727.91606723968459 9.421055760220538 727.95475972095949 8.9257923056956887 727.99328710951681 8.4305382282663999 728.03163426832339 7.9352839591150737 728.06978698167177 7.440017235048094 728.10773162510304 6.9447235390419459 728.14545495348204 6.4493866516027998 728.18294390521862 5.9539892534342274 728.22018544715218 5.4585135916003908 728.25716645019872 4.9629422017253715 728.29387359465591 4.467258683398927 728.330293301349 3.9714485242055835 728.36641168519202 3.475499966387777 728.40221452739468 2.9794049125466202 728.43768726221811 2.4831598522507634 728.47281497452536 1.9867668393264808 728.50758240220284 1.490234363051949 728.54197394466462 0.99357864400230278 728.57597365135359 0.49682330959738519 728.60956526537245 0.16561110777559207 728.63167643469671 0 728.64265843910107 + 0 4 0.61617066565909095 1 1.2323413313181819 1 1.848511996977273 1 2.4646826626363638 1 3.0808533282954547 1 3.697023993954546 1 4.3131946596136368 1 4.9293653252727276 1 5.5455359909318185 1 6.1617066565909093 1 6.7778773222500002 1 7.3940479879090919 1 8.0102186535681827 1 8.6263893192272736 1 9.2425599848863644 1 9.8587306505454553 1 10.474901316204546 1 11.091071981863637 1 11.707242647522728 1 12.323413313181819 1 12.939583978840909 1 13.5557546445 4 +1 10.906951009206587 3.4572167351143435e-10 8.2067605140481525e-13 1 +7 0 0 1 2 2 1.0379912931171693e-10 725.68832145659758 1.2998982152081406e-10 757.53340309014777 + 727.83823493399996 2 759.77766033499995 2 +7 0 0 1 2 2 10.906951009830154 759.77766033529531 -1.8250316845881415e-11 760.03967282123631 + 0 2 13.219918375100001 2 +7 0 0 4 5 2 9.8668642498499999 56.550128620700001 11.728598828799999 56.734664060599997 13.610564907900001 56.749883115499998 15.4744423462 56.599030991399999 17.307986786600001 56.2844833029 + 0 5 13.219918375100001 5 +7 0 0 4 5 2 10.906951009830118 759.77766033529542 8.1804278286181624 759.84315830223761 5.455291457187065 759.9086229545095 2.7256245659334768 759.97419644130036 -1.830002815950138e-11 760.03967282123631 + 0 5 13.219918375100001 5 +7 0 0 4 5 2 9.8668642498499999 56.550128620700015 11.728598828799999 56.734664060600011 13.610564907900001 56.749883115500012 15.4744423462 56.599030991400014 17.307986786600001 56.284483302900014 + 0 5 13.219918375100001 5 +7 0 0 1 2 2 0.51055604953231248 725.64819626400197 1.0386855344799303e-10 725.68832145659758 + 0 2 0.63643511700599997 2 +7 0 0 1 2 2 0.51055604956155165 757.52066139432077 1.2998982152081406e-10 757.53340309014777 + 0 2 0.62082720170700001 2 +7 0 0 3 4 2 9.5158183786899997 56.513204642600002 9.6335255649999993 56.526299579000003 9.7501603100600001 56.5385608773 9.8668642498499999 56.550128620700001 + 0 4 0.62082720170700001 4 +7 0 0 5 6 2 0.510556049561536 757.52066139432077 0.40878001390448981 757.52320136870571 0.30747782381532496 757.52572951756804 0.20456289942321018 757.528297914635 0.10227829403426256 757.53085058114959 1.3003703669411948e-10 757.53340309014789 + 0 6 0.62082720170700001 6 +7 0 0 3 4 2 9.5158183786899997 56.513204642600016 9.6335255649999993 56.526299579000018 9.7501603100600001 56.538560877300014 9.8668642498499999 56.550128620700015 + 0 4 0.62082720170700001 4 +7 0 0 3 25 23 22.611802242900001 684.16937356111441 22.268067264777613 684.20402497914961 21.580729199962672 684.2731812912989 20.550117373541518 684.3764966355443 19.519902117689394 684.47941418446067 18.49007877077813 684.58195218367257 17.460639336544801 684.68412703879164 16.431572338634787 684.78595318427915 15.40286339786126 684.88744333740715 14.374495589565418 684.98860866130235 13.34644982688325 685.08945895952115 12.318705196695356 685.19000286384357 11.291239259970055 685.29024801967319 10.264028304988818 685.39020126169862 9.2370475478347291 685.48986877543587 8.2102712726808793 685.5892562393949 7.1836729051904626 685.68836894300784 6.1572250112758127 685.78721187539998 5.1308992181934627 685.88578978143209 4.1046660394902679 685.98410717849083 3.0784946460259182 686.08216834150858 2.052352402707232 686.17997721501933 1.026204826111444 686.27753739722982 0.34207727900810958 686.3424135667475 0 686.37481116383276 + 0 4 1.2965910925954545 1 2.5931821851909089 1 3.8897732777863636 1 5.1863643703818179 1 6.4829554629772721 1 7.7795465555727272 1 9.0761376481681815 1 10.372728740763636 1 11.66931983335909 1 12.965910925954544 1 14.262502018549998 1 15.559093111145454 1 16.855684203740907 1 18.152275296336363 1 19.448866388931815 1 20.745457481527271 1 22.042048574122727 1 23.33863966671818 1 24.635230759313636 1 25.931821851909088 1 27.228412944504544 1 28.5250040371 4 +1 22.611802243573969 1.3744738680543378e-10 -9.0178964706043602e-13 1 +7 0 0 1 2 2 5.7841342007299058e-11 675.90622660599161 2.5112469185925414e-11 711.29269387933232 + 684.16937356100004 2 719.98845051900003 2 +7 0 0 3 25 23 22.611802242900001 719.98845051875981 22.346563515282583 719.99634876715766 21.816142162031454 720.01213519654846 21.020683987561938 720.03578883332671 20.225405830592344 720.05942086124765 19.43031170898686 720.08303496635915 18.635404410590183 720.10663441817542 17.840685421396902 720.13022204626827 17.046155114338518 720.15380030696156 16.251812863267215 720.17737132946263 15.457657170492705 720.20093696999481 14.663685782541503 720.22449886509526 13.869895799137154 720.24805848516451 13.076283772141695 720.27161718660591 12.282845793313079 720.29517626155121 11.489577569049583 720.31873698392553 10.696474480467346 720.34230065063491 9.9035316268872364 720.36586861662659 9.1107438515626118 720.3894423225521 8.3181057457964336 720.41302331400414 7.5256116378440119 720.43661325053824 6.7332555351822423 720.46021390591113 5.9410311305135979 720.48382714944114 5.4129646791926591 720.49957901116909 5.1489511113342399 720.50745768933302 + 0 4 0.96893734378181806 1 1.9378746875636361 1 2.9068120313454542 1 3.8757493751272722 1 4.8446867189090899 1 5.8136240626909084 1 6.7825614064727269 1 7.7514987502545445 1 8.7204360940363621 1 9.6893734378181797 1 10.658310781599999 1 11.627248125381817 1 12.596185469163634 1 13.565122812945454 1 14.534060156727271 1 15.502997500509089 1 16.471934844290907 1 17.440872188072724 1 18.409809531854542 1 19.378746875636359 1 20.347684219418181 1 21.316621563199998 4 +7 0 0 4 5 2 -53.067407582900003 46.339516836599998 -50.427736811000003 47.843462654200003 -47.622748748600003 49.078114630599998 -44.691469558100003 50.0148113921 -41.688369386600002 50.637300832500003 + 0 5 21.316621563199998 5 +8 0 21.316621563199998 +7 0 0 3 25 23 22.611802242900001 719.98845051875981 22.346563515282526 719.99634876715777 21.816142162031397 720.01213519654846 21.020683987562013 720.03578883332636 20.225405830592319 720.05942086124799 19.430311708986697 720.08303496635904 18.635404410590198 720.10663441817542 17.840685421396973 720.13022204626827 17.046155114338578 720.15380030696156 16.251812863267194 720.17737132946263 15.457657170492684 720.20093696999481 14.663685782541544 720.22449886509526 13.86989579913709 720.24805848516451 13.076283772141741 720.27161718660591 12.282845793313061 720.29517626155121 11.489577569049615 720.31873698392553 10.696474480467332 720.34230065063491 9.9035316268872222 720.36586861662659 9.1107438515627344 720.3894423225521 8.318105745796359 720.41302331400414 7.5256116378441105 720.43661325053824 6.7332555351822565 720.46021390591113 5.9410311305135881 720.48382714944114 5.4129646791926271 720.49957901116909 5.1489511113342026 720.50745768933302 + 0 4 0.96893734378181806 1 1.9378746875636361 1 2.9068120313454542 1 3.8757493751272722 1 4.8446867189090899 1 5.8136240626909084 1 6.7825614064727269 1 7.7514987502545445 1 8.7204360940363621 1 9.6893734378181797 1 10.658310781599999 1 11.627248125381817 1 12.596185469163634 1 13.565122812945454 1 14.534060156727271 1 15.502997500509089 1 16.471934844290907 1 17.440872188072724 1 18.409809531854542 1 19.378746875636359 1 20.347684219418181 1 21.316621563199998 4 +7 0 0 4 5 2 -53.067407582900003 46.339516836600005 -50.427736811000003 47.84346265420001 -47.622748748600003 49.078114630600012 -44.691469558100003 50.014811392100015 -41.688369386600002 50.637300832500017 + 0 5 21.316621563199998 5 +7 0 0 3 25 23 21.530823719600001 674.0028234185869 21.199689154902366 674.02243623896049 20.537944764641303 674.06307683945704 19.546882498250874 674.12805001621416 18.557354856261743 674.19680383374407 17.56934143076839 674.26910326882467 16.582820611222104 674.34471187542397 15.597768953449602 674.42339196393118 14.614160558332077 674.50490516855825 13.63196641892343 674.58901282249371 12.651153747080292 674.67547629893727 11.67168527733979 674.76405727881308 10.693518550031159 674.85451795952019 9.7166051750835312 674.94662120551436 8.7408900788657853 675.04013064606499 7.7663107364584851 675.13481072534205 6.7927963936557125 675.23042671116764 5.8202672785257672 675.32674466990375 4.8486338217629337 675.42353141543629 3.877795835877035 675.52055444431494 2.9076418653178511 675.61758186012366 1.9380479465344629 675.7143823311535 0.96887865495873871 675.81072498094613 0.32294604974884811 675.87449476730637 0 675.90622660596887 + 0 4 1.2121153045636364 1 2.4242306091272727 1 3.6363459136909091 1 4.8484612182545455 1 6.0605765228181818 1 7.2726918273818182 1 8.4848071319454554 1 9.6969224365090909 1 10.909037741072726 1 12.121153045636364 1 13.333268350200001 1 14.545383654763636 1 15.757498959327272 1 16.969614263890911 1 18.181729568454546 1 19.393844873018182 1 20.605960177581817 1 21.818075482145453 1 23.030190786709092 1 24.242306091272727 1 25.454421395836363 1 26.666536700399998 4 +1 21.530823721691711 -3.9563019527122378e-10 -2.9840308610417624e-12 1 +7 0 0 1 2 2 7.9082237908996135e-11 666.37967020391102 -2.8656435771655001e-11 702.71822230335533 + 674.00282341900004 2 710.75707599999998 2 +7 0 0 3 25 23 21.530823719600001 710.75707600028954 21.202851896014771 710.76177122632316 20.547085132097855 710.77164624109241 19.563950341387322 710.78785328594734 18.581313962586837 710.80539790365879 17.599164822748172 710.82421538992219 16.617495022993417 710.84423705851373 15.636300030780252 710.8653902624385 14.655578005929648 710.88759934739664 13.675329255243385 710.91078627865545 12.695555572300695 710.93487127470769 11.716259524568432 710.95977335458883 10.737443668775819 710.98541082028794 9.7591096980010992 711.01170166546706 8.7812575188288307 711.03856391045167 7.8038842588566917 711.06591586193406 6.8269832064894951 711.09367629730787 5.8505426807797853 711.12176457426824 4.8745448485587852 711.15010066795821 3.8989644367734924 711.17860513761423 2.9237675502329301 711.20719903228087 1.9489098297532366 711.23580372405013 0.97433682924085629 711.26434074431734 0.32476287439837659 711.28326783682462 0 711.29269387932197 + 0 4 1.1812279742636365 1 2.3624559485272729 1 3.5436839227909092 1 4.7249118970545458 1 5.9061398713181825 1 7.0873678455818183 1 8.268595819845455 1 9.4498237941090917 1 10.631051768372728 1 11.812279742636365 1 12.993507716900002 1 14.174735691163637 1 15.355963665427273 1 16.53719163969091 1 17.718419613954548 1 18.899647588218183 1 20.080875562481818 1 21.262103536745457 1 22.443331511009092 1 23.62455948527273 1 24.805787459536365 1 25.9870154338 4 +7 0 0 4 5 2 -63.766211748300002 36.669320192000001 -61.705297684800001 39.613749358699998 -59.178752417600002 42.261323190100001 -56.256172922300003 44.522725847399997 -53.067407582900003 46.339516836599998 + 0 5 25.9870154338 5 +8 0 25.9870154338 +7 0 0 3 25 23 21.530823719600001 710.75707600028954 21.202851896014764 710.76177122632316 20.547085132097845 710.77164624109241 19.563950341387343 710.78785328594722 18.581313962586847 710.80539790365901 17.599164822748172 710.82421538992219 16.617495022993435 710.8442370585135 15.636300030780223 710.8653902624385 14.655578005929705 710.88759934739664 13.675329255243312 710.91078627865545 12.69555557230073 710.93487127470769 11.716259524568427 710.95977335458883 10.737443668775786 710.98541082028794 9.7591096980010335 711.01170166546706 8.7812575188287898 711.03856391045167 7.8038842588567894 711.06591586193406 6.8269832064895013 711.09367629730798 5.8505426807797463 711.12176457426813 4.8745448485588181 711.15010066795833 3.8989644367734302 711.178605137614 2.9237675502329878 711.20719903228087 1.9489098297532284 711.23580372405013 0.97433682924084686 711.26434074431734 0.32476287439836987 711.28326783682462 0 711.29269387932197 + 0 4 1.1812279742636365 1 2.3624559485272729 1 3.5436839227909092 1 4.7249118970545458 1 5.9061398713181825 1 7.0873678455818183 1 8.268595819845455 1 9.4498237941090917 1 10.631051768372728 1 11.812279742636365 1 12.993507716900002 1 14.174735691163637 1 15.355963665427273 1 16.53719163969091 1 17.718419613954548 1 18.899647588218183 1 20.080875562481818 1 21.262103536745457 1 22.443331511009092 1 23.62455948527273 1 24.805787459536365 1 25.9870154338 4 +7 0 0 4 5 2 -63.766211748300002 36.669320192000008 -61.705297684800001 39.613749358700005 -59.178752417600002 42.261323190100008 -56.256172922300003 44.522725847400004 -53.067407582900003 46.339516836600005 + 0 5 25.9870154338 5 +7 0 0 1 2 2 4.6797211180880209 666.09894498092524 7.9077318712996461e-11 666.37967020391102 + 0 2 5.74085382142 2 +7 0 0 1 2 2 4.6797211181471186 702.65059064078685 -2.8656435771655001e-11 702.71822230335533 + 0 2 5.6447975654400002 2 +7 0 0 3 4 2 -65.463960986199993 34.011187028999998 -64.936791371400005 34.918860594800002 -64.370627193299995 35.805791224899998 -63.766211748300002 36.669320192000001 + 0 4 5.6447975654400002 4 +7 0 0 5 6 2 4.6797211181471319 702.65059064078696 3.7428318394788516 702.66413063130153 2.8053020234297841 702.67767987891352 1.8686913442412145 702.69121584308652 0.93507687682748941 702.70470850579954 -2.8639607266981609e-11 702.71822230335545 + 0 6 5.6447975654400002 6 +7 0 0 3 4 2 -65.463960986199993 34.011187029000006 -64.936791371400005 34.918860594800009 -64.370627193299995 35.805791224900005 -63.766211748300002 36.669320192000008 + 0 4 5.6447975654400002 4 +7 0 0 1 2 2 1.4674058108479635 643.06933182883859 -2.1094524791555523e-10 643.16207907428316 + 4.1579419282599996 2 5.95830336654 2 +1 4.8565681367179065 -2.049773684120737e-10 -4.1672931509246109e-12 1 +7 0 0 1 2 2 1.1492412360820438e-10 638.94598212976177 -3.4961611877759948e-11 674.62682472340828 + 643.83538639999995 2 679.78926938899997 2 +7 0 0 1 2 2 4.8565681338850144 679.78926938968004 -9.9385162683620345e-11 679.86328967860084 + 0 2 5.8476302284699999 2 +7 0 0 3 4 2 -76.5393369361 14.589601394400001 -76.098789937099994 15.5812374722 -75.605832238999994 16.5470525327 -75.060655596199993 17.485931432699999 + 0 4 5.8476302284699999 4 +7 0 0 5 6 2 4.8565681338850251 679.78926938968004 3.8851155149140375 679.80407556588011 2.9144997684748271 679.81886898708285 1.9407712238614627 679.83370985128784 0.97118305122780124 679.84848761095395 -9.9386276986024313e-11 679.86328967860084 + 0 6 5.8476302284699999 6 +7 0 0 3 4 2 -76.5393369361 14.589601394400006 -76.098789937099994 15.581237472200005 -75.605832238999994 16.547052532700004 -75.060655596199993 17.485931432700003 + 0 4 5.8476302284699999 4 +7 0 0 1 2 2 13.080369286107782 637.12963065527344 9.6103785729668196 637.35618162665628 + 0 2 4.2525414581999996 2 +1 13.080369286406272 -7.2657257987884805e-10 -4.6847957782579023e-13 1 +7 0 0 1 2 2 7.7594787600458392e-12 633.65174829593752 -9.6894347774453755e-12 670.74380399430072 + 637.12963065600002 2 674.42527106199998 2 +7 0 0 1 2 2 13.080369286090319 674.42527106169075 -3.4961611877759948e-11 674.62682472340828 + 0 2 15.7474629637 2 +7 0 0 3 4 2 -78.896126108199994 6.1778912540400004 -78.521656975200003 9.0753907186700005 -77.725339623699995 11.9200043535 -76.5393369361 14.589601394400001 + 0 4 15.7474629637 4 +7 0 0 3 4 2 13.080369286090317 674.42527106169075 8.7197407440860708 674.49246340395564 4.3602049076343325 674.55963890886801 -3.4974365694076307e-11 674.62682472340828 + 0 4 15.7474629637 4 +7 0 0 3 4 2 -78.896126108199994 6.1778912540400039 -78.521656975200003 9.075390718670004 -77.725339623699995 11.920004353500003 -76.5393369361 14.589601394400006 + 0 4 15.7474629637 4 +7 0 0 1 2 2 1.7262420402203835 633.53872118919958 7.7559493954944493e-12 633.65174829593752 + 0 2 2.1153370390299999 2 +1 1.7262420397355731 1.9963408703915775e-10 7.6523809613823622e-13 1 +7 0 0 1 2 2 -2.9630012004289454e-11 631.64769563659877 -1.1588545068205763e-12 668.71457742199709 + 633.53872118899994 2 670.71657372799996 2 +7 0 0 1 2 2 1.7262420402488301 670.71657372790821 -9.6894347774453755e-12 670.74380399430072 + 0 2 2.0785737716499999 2 +7 0 0 3 4 2 -79.044517957099998 5.0299384177100004 -78.995039470699993 5.4126192504399997 -78.945574904799997 5.7952756985100002 -78.896126108199994 6.1778912540400004 + 0 4 2.0785737716499999 4 +7 0 0 4 5 2 1.726242040248831 670.71657372790821 1.2946956613045275 670.72338107159749 0.86316042740594034 670.73018823948235 0.43157747274008107 670.73699616012789 -9.6908037150456039e-12 670.74380399430072 + 0 5 2.0785737716499999 5 +7 0 0 3 4 2 -79.044517957099998 5.0299384177100031 -78.995039470699993 5.4126192504400024 -78.945574904799997 5.7952756985100029 -78.896126108199994 6.1778912540400039 + 0 4 2.0785737716499999 4 +7 0 0 3 25 23 6.7495741569399996 631.28419865903072 6.6471995477318169 631.28845999216196 6.4424616344025756 631.29710282259714 6.1353881106136754 631.31042468883152 5.8283473756615454 631.32410129707944 5.521338831269281 631.33812979198808 5.2143618599497339 631.35250733273028 4.9074158267427155 631.36723109465152 4.6005000862766678 631.38229826816155 4.2936139883817495 631.39770605837975 3.9867568840716827 631.41345168458986 3.6799281314099384 631.42953237976587 3.3731271013926629 631.44594539008926 3.0663531838152775 631.46268797448874 2.7596057931337765 631.47975740419088 2.4528843743218673 631.49715096228078 2.1461884087200112 631.51486594328344 1.8395174199013984 631.53289965275303 1.5328709794700686 631.5512494068787 1.226248713114986 631.56991253212448 0.91965030572001027 631.58888636478935 0.61307551001446259 631.60816825095446 0.30652414203470885 631.62775554505356 0.10217213123645491 631.64101559079324 0 631.64769563659922 + 0 4 0.37553743769454545 1 0.7510748753890909 1 1.1266123130836363 1 1.5021497507781818 1 1.8776871884727273 1 2.2532246261672726 1 2.6287620638618181 1 3.0042995015563636 1 3.3798369392509091 1 3.7553743769454546 1 4.1309118146400001 1 4.5064492523345452 1 4.8819866900290911 1 5.2575241277236362 1 5.6330615654181821 1 6.0085990031127272 1 6.3841364408072723 1 6.7596738785018182 1 7.1352113161963633 1 7.5107487538909092 1 7.8862861915854543 1 8.2618236292800002 4 +1 6.7495741571440631 -9.6906660473905504e-10 -2.9677065719358223e-13 1 +7 0 0 1 2 2 1.6699543912637956e-11 629.41567550885327 5.624523203678289e-12 666.65540174034504 + 631.28419866000002 2 668.63447709599996 2 +7 0 0 3 25 23 6.7495741569399996 668.63447709517413 6.6472861367004166 668.6352707165945 6.442713108089543 668.63689832864191 6.1358622778138372 668.63945992824085 5.8290198573667418 668.6421407797385 5.5221854734032956 668.64493996588533 5.2153587149770857 668.6478565771863 4.9085391333252781 668.65088971277771 4.6017262505221357 668.65403847984192 4.2949195657443813 668.6573019934101 3.988118562165861 668.66067937607227 3.6813227136746618 668.66416975771392 3.3745314916300231 668.66777227525324 3.06774437160291 668.67148607238209 2.7609608401159691 668.67531029931058 2.4541804013820165 668.67924411252068 2.1474025840372555 668.68328667451976 1.8406269478918249 668.68743715360063 1.533853090617991 668.69169472360795 1.2270806546785429 668.69605856371481 0.92030933337095688 668.70052785816381 0.61353888018758074 668.70510179619055 0.30676910582007966 668.70977957126763 0.10225631613912511 668.712966779044 0 668.71457742199721 + 0 4 0.36930854743772729 1 0.73861709487545457 1 1.1079256423131818 1 1.4772341897509091 1 1.8465427371886365 1 2.2158512846263636 1 2.5851598320640909 1 2.9544683795018183 1 3.3237769269395456 1 3.693085474377273 1 4.0623940218149999 1 4.4317025692527272 1 4.8010111166904545 1 5.1703196641281819 1 5.5396282115659092 1 5.9089367590036366 1 6.2782453064413639 1 6.6475538538790913 1 7.0168624013168186 1 7.3861709487545459 1 7.7554794961922733 1 8.1247880436299997 4 +7 0 0 3 4 2 -79.580737053700005 0.53978447022700005 -79.416857203199996 2.03762012386 -79.237821527199998 3.5348831985000002 -79.044517957099998 5.0299384177100004 + 0 4 8.1247880436299997 4 +8 0 8.1247880436299997 +7 0 0 3 25 23 6.7495741569399996 668.63447709517413 6.6472861367004157 668.6352707165945 6.442713108089543 668.63689832864191 6.1358622778138443 668.63945992824085 5.8290198573667347 668.6421407797385 5.5221854734033027 668.64493996588533 5.2153587149770857 668.6478565771863 4.9085391333252781 668.65088971277771 4.6017262505221366 668.65403847984192 4.2949195657443795 668.6573019934101 3.9881185621658672 668.66067937607227 3.6813227136746605 668.66416975771392 3.3745314916300204 668.66777227525324 3.0677443716029158 668.67148607238209 2.7609608401159678 668.67531029931058 2.4541804013820183 668.67924411252068 2.1474025840372581 668.68328667451965 1.8406269478918198 668.68743715360085 1.533853090617991 668.69169472360795 1.2270806546785464 668.69605856371481 0.920309333370956 668.70052785816381 0.61353888018758196 668.70510179619055 0.30676910582007738 668.70977957126763 0.10225631613912355 668.712966779044 0 668.71457742199721 + 0 4 0.36930854743772729 1 0.73861709487545457 1 1.1079256423131818 1 1.4772341897509091 1 1.8465427371886365 1 2.2158512846263636 1 2.5851598320640909 1 2.9544683795018183 1 3.3237769269395456 1 3.693085474377273 1 4.0623940218149999 1 4.4317025692527272 1 4.8010111166904545 1 5.1703196641281819 1 5.5396282115659092 1 5.9089367590036366 1 6.2782453064413639 1 6.6475538538790913 1 7.0168624013168186 1 7.3861709487545459 1 7.7554794961922733 1 8.1247880436299997 4 +7 0 0 3 4 2 -79.580737053700005 0.5397844702270016 -79.416857203199996 2.0376201238600018 -79.237821527199998 3.5348831985000024 -79.044517957099998 5.0299384177100031 + 0 4 8.1247880436299997 4 +7 0 0 1 2 2 1.0013199712223255 629.37405383537816 1.6699324230265581e-11 629.41567550885327 + 0 2 1.22469796652 2 +7 0 0 1 2 2 1.0013199712372314 666.64764424121745 5.624523203678289e-12 666.65540174034504 + 0 2 1.20537347996 2 +7 0 0 3 4 2 -79.653715138300001 -0.12722194784900001 -79.629387227300001 0.095129639284999998 -79.605061546599998 0.31746201687999998 -79.580737053700005 0.53978447022700005 + 0 4 1.20537347996 4 +8 0 1.20537347996 +7 0 0 1 2 2 1.0013199712372269 666.64764424121745 5.6234427479222428e-12 666.65540174034504 + 0 2 1.20537347996 2 +7 0 0 3 4 2 -79.653715138300001 -0.12722194784899865 -79.629387227300001 0.095129639285001413 -79.605061546599998 0.31746201688000142 -79.580737053700005 0.5397844702270016 + 0 4 1.20537347996 4 +1 0 15 1 0 +1 0 -7 1 0 +2 29 -71 1 0 -0 1 32 +8 0 1.5707963267948966 +1 0 -7 1 0 +2 29 -71.000000000000014 1 0 -0 1 32 +1 -4.7123889803846897 15 1 0 +1 -4.7123889803846897 -7 1 0 +2 29 -77 1 0 -0 1 32 +8 4.7123889803846897 6.2831853071795862 +1 -4.7123889803846897 -7 1 0 +2 29 -77.000000000000014 1 0 -0 1 32 +7 0 0 3 25 23 0 16.625204164535113 0.0072911024360174798 16.591604731470628 0.021873444010601782 16.524405248376777 0.04374722961025785 16.423652998321192 0.065621134899685671 16.322996644769518 0.087495064704365397 16.222484772104487 0.10936895730782516 16.122165743456147 0.13124278596367911 16.02208766954373 0.15311655300944141 15.922298417024612 0.17499028568868999 15.822845606257063 0.19686403128506605 15.723776611899808 0.21873785225439646 15.625138562751337 0.24061182121564634 15.52697834179299 0.26248601588269521 15.429342586177306 0.28436051396038964 15.332277687231706 0.306235388042776 15.235829790454893 0.32811070055170372 15.140044795528357 0.34998649873906623 15.04496835627336 0.37186280983458864 14.950645880811653 0.39373963620053082 14.857122530965828 0.41561695117678071 14.764443224496636 0.43749469323041279 14.672652626754024 0.45937276747617928 14.581795181835332 0.47395826975359717 14.521875058146271 0.48125102801880981 14.492085240032601 + 0 4 3.0966340224454543 1 6.1932680448909085 1 9.2899020673363637 1 12.386536089781817 1 15.48317011222727 1 18.579804134672727 1 21.676438157118181 1 24.773072179563634 1 27.869706202009088 1 30.966340224454541 1 34.062974246899998 1 37.159608269345455 1 40.256242291790905 1 43.352876314236362 1 46.449510336681811 1 49.546144359127268 1 52.642778381572725 1 55.739412404018175 1 58.836046426463632 1 61.932680448909082 1 65.029314471354539 1 68.125948493799996 4 +1 0.48125102801894976 7.6214590194467746e-11 0 1 +1 -39.473736709941363 -155.8829615120973 1 -1.0408340855860843e-16 +7 0 0 3 25 23 0.48125102802509634 36.515432703838854 0.47395826955391079 36.545222522911565 0.45937275550766954 36.605142700799703 0.43749463747032197 36.696000346339801 0.41561683368192642 36.787791224938822 0.39373944630282504 36.88047085889837 0.37186254346872299 36.973994552864042 0.34998615764222507 37.068317363173499 0.32811029144357995 37.163394106069795 0.30623492176478606 37.259179355500621 0.28436000458761052 37.355627443707888 0.26248547981292286 37.452692461069852 0.24061127624247328 37.550328256143381 0.21873731663057505 37.648488435652489 0.19686352278258851 37.747126364492203 0.17498982066207797 37.846195165724524 0.15311614546860833 37.945647720590266 0.13124244666271717 38.045436668466401 0.10936869285655854 38.145514407024343 0.087494876707098504 38.245833091639923 0.065621019134494543 38.346344637594491 0.043747175228638038 38.447000711861463 0.021873432861922521 38.547752763758105 0.0072911025329050637 38.614952194954377 0 38.648551628392013 + 0 4 3.0966340875409091 1 6.1932681750818181 1 9.2899022626227268 1 12.386536350163636 1 15.483170437704546 1 18.579804525245454 1 21.676438612786363 1 24.773072700327273 1 27.869706787868182 1 30.966340875409092 1 34.062974962950001 1 37.159609050490907 1 40.25624313803182 1 43.352877225572726 1 46.449511313113639 1 49.546145400654545 1 52.642779488195451 1 55.739413575736364 1 58.83604766327727 1 61.932681750818183 1 65.029315838359096 1 68.125949925900002 4 +7 0 0 4 5 2 -64.839284128399996 -97.641653013500004 -54.161674295600001 -103.211610928 -42.589160636300001 -107.069972591 -30.544393516900001 -109 -18.501313225099999 -109 + 0 5 68.125949925900002 5 +8 0 68.125949925900002 +7 0 0 3 25 23 0.48125102802509634 36.515432703838854 0.47395826955391079 36.545222522911565 0.45937275550766954 36.605142700799703 0.43749463747032197 36.696000346339801 0.41561683368192642 36.787791224938822 0.39373944630282504 36.88047085889837 0.37186254346872299 36.973994552864042 0.34998615764222507 37.068317363173499 0.32811029144357995 37.163394106069795 0.30623492176478606 37.259179355500621 0.28436000458761052 37.355627443707888 0.26248547981292286 37.452692461069852 0.24061127624247328 37.550328256143381 0.21873731663057505 37.648488435652489 0.19686352278258851 37.747126364492203 0.17498982066207797 37.846195165724524 0.15311614546860833 37.945647720590266 0.13124244666271717 38.045436668466401 0.10936869285655854 38.145514407024343 0.087494876707098504 38.245833091639923 0.065621019134494543 38.346344637594491 0.043747175228638038 38.447000711861463 0.021873432861922521 38.547752763758105 0.0072911025329050637 38.614952194954377 0 38.648551628392013 + 0 4 3.0966340875409091 1 6.1932681750818181 1 9.2899022626227268 1 12.386536350163636 1 15.483170437704546 1 18.579804525245454 1 21.676438612786363 1 24.773072700327273 1 27.869706787868182 1 30.966340875409092 1 34.062974962950001 1 37.159609050490907 1 40.25624313803182 1 43.352877225572726 1 46.449511313113639 1 49.546145400654545 1 52.642779488195451 1 55.739413575736364 1 58.83604766327727 1 61.932681750818183 1 65.029315838359096 1 68.125949925900002 4 +7 0 0 4 5 2 -64.839284128399996 -97.641653013500033 -54.161674295600001 -103.21161092800003 -42.589160636300001 -107.06997259100002 -30.544393516900001 -109.00000000000003 -18.501313225099999 -109.00000000000003 + 0 5 68.125949925900002 5 +1 0 15 1 0 +1 0 -7 1 0 +2 46 94 1 0 -0 1 32 +8 0 1.5707963267948966 +1 0 -7 1 0 +2 46 94.000000000000014 1 0 -0 1 32 +1 0 33.151841288272607 0 1 +1 -27.381813127014759 -97.125376019752849 0.040814503873385082 -0.99916674097648461 +1 6.2831853071795862 1.0044232112704776e-10 0 1 +1 0 1.0044232112704776e-10 0 1 +1 3.1415926535896102 3.4532376957940869e-11 0 1 +1 3.1415926535896102 3.4532376957940869e-11 0 1 +7 0 0 3 47 45 3.1415926535943299 185.42666444330067 3.16528214210211 185.36590513399912 3.2125440476553195 185.24152736429758 3.2831199568127887 185.04742995334928 3.3534087495167295 184.8468106452126 3.4234557722215864 184.64081073101488 3.4933148756252064 184.43065795824668 3.5630479390212497 184.21767849725342 3.6327223249394995 184.00329338470635 3.702408916171732 183.78901911710668 3.7721803537568812 183.57646716717784 3.842109846184786 183.36734365867068 3.9122708078536856 183.16344948463166 3.982737132314 182.96667849340469 4.0535856625448652 182.77902296023316 4.1248954023184261 182.602539012938 4.1967138146005878 182.4394183521357 4.2690598054307447 182.29193103317348 4.3419288685648478 182.16233022322808 4.4152953446101408 182.05276616656744 4.4891127364846373 181.9651976942113 4.563311107379965 181.9013043478345 4.6377936664255097 181.86239850229938 4.7124253064994504 181.84933687942996 4.7870470582740428 181.86244257639723 4.861522939714912 181.90140423894402 4.9357322121157896 181.96535652553939 5.0095707135113337 182.05297500573326 5.0829537578356092 182.16256765106482 5.1558220591362609 182.29216755788499 5.2281480713475137 182.43962414996841 5.2999466085217328 182.6026992336885 5.3712528341586445 182.77917611565971 5.4421105179541645 182.96686647752205 5.5125758326207048 183.1636506085261 5.5827196588220502 183.36752022742021 5.652628130091701 183.57660208181193 5.7223821578083962 183.78910954959645 5.7920576421187411 184.00334522042189 5.8617270159100769 184.21770193368263 5.9314593508280655 184.43066405402749 6.0013197725696754 184.64080896708555 6.0713683337349424 184.84680745680262 6.1416579410238059 185.04742833611797 6.212233951734401 185.24152718267175 6.2594958080274541 185.36590532825528 6.2831853071795862 185.42666444345053 + 0 4 0.8443388177022727 1 1.6886776354045454 1 2.5330164531068182 1 3.3773552708090908 1 4.2216940885113639 1 5.0660329062136364 1 5.910371723915909 1 6.7547105416181816 1 7.5990493593204542 1 8.4433881770227277 1 9.2877269947250003 1 10.132065812427273 1 10.976404630129545 1 11.820743447831818 1 12.665082265534091 1 13.509421083236363 1 14.353759900938636 1 15.198098718640908 1 16.042437536343183 1 16.886776354045455 1 17.731115171747728 1 18.575453989450001 1 19.419792807152273 1 20.264131624854546 1 21.108470442556818 1 21.952809260259091 1 22.797148077961364 1 23.641486895663636 1 24.485825713365909 1 25.330164531068181 1 26.174503348770454 1 27.018842166472727 1 27.863180984174999 1 28.707519801877272 1 29.551858619579544 1 30.396197437281817 1 31.240536254984089 1 32.084875072686366 1 32.929213890388638 1 33.773552708090911 1 34.617891525793183 1 35.462230343495456 1 36.306569161197729 1 37.150907978900001 4 +7 0 0 3 47 45 1.2196797439829035 -39.166612222319024 1.2147041550689619 -39.166607759320144 1.204754039058767 -39.180083360039617 1.1898953087553246 -39.23997477017393 1.1751674154910696 -39.33878894137397 1.1606307798533901 -39.475699494775 1.1463440780696417 -39.649837198133298 1.1323644910995867 -39.860286159658045 1.118748467249967 -40.106088625023538 1.105552326868515 -40.386247445321885 1.0928328882878648 -40.699729258076978 1.0806480587476366 -41.045467145069132 1.0690574285991703 -41.42236466985932 1.0581227680963325 -41.829294919701553 1.0479087915621552 -42.265118150204408 1.0384823345260752 -42.728615155971717 1.0299154899569836 -43.218217851250486 1.0222837713786159 -43.732000637425649 1.0156627677337158 -44.267669364239126 1.0101251253475907 -44.822551011555554 1.0057374184233145 -45.39358400256863 1.0025570444026375 -45.977305270702352 1.000629096792925 -46.569849680288939 0.9999833149209898 -47.16690327844583 1.0006309727109672 -47.763875085591117 1.0025612308217144 -48.356354184050097 1.0057441734740866 -48.94014089463856 1.0101341906624728 -49.511319044471108 1.0156733022776925 -50.066316790819293 1.0222945298005506 -50.601972677561186 1.0299251879097109 -51.115592205213865 1.0384904610121581 -51.605037104018628 1.0479171548409221 -52.068488985270996 1.0581331240573275 -52.504347906418218 1.0690687749177092 -52.911231801322366 1.0806586057411116 -53.287946891839489 1.0928417216727264 -53.633466118117163 1.1055590987800861 -53.946769486988394 1.1187532277543544 -54.226824777352462 1.1323675295233653 -54.472605391725153 1.1463457990686052 -54.683099642979002 1.1606316067512779 -54.857322564637137 1.1751677214906215 -54.994326191763818 1.1898953753982089 -55.09321343591354 1.204754036880165 -55.153139113249509 1.2147041570926476 -55.166618881701162 1.2196797439841653 -55.166612222367313 + 0 4 0.8443388177022727 1 1.6886776354045454 1 2.5330164531068182 1 3.3773552708090908 1 4.2216940885113639 1 5.0660329062136364 1 5.910371723915909 1 6.7547105416181816 1 7.5990493593204542 1 8.4433881770227277 1 9.2877269947250003 1 10.132065812427273 1 10.976404630129545 1 11.820743447831818 1 12.665082265534091 1 13.509421083236363 1 14.353759900938636 1 15.198098718640908 1 16.042437536343183 1 16.886776354045455 1 17.731115171747728 1 18.575453989450001 1 19.419792807152273 1 20.264131624854546 1 21.108470442556818 1 21.952809260259091 1 22.797148077961364 1 23.641486895663636 1 24.485825713365909 1 25.330164531068181 1 26.174503348770454 1 27.018842166472727 1 27.863180984174999 1 28.707519801877272 1 29.551858619579544 1 30.396197437281817 1 31.240536254984089 1 32.084875072686366 1 32.929213890388638 1 33.773552708090911 1 34.617891525793183 1 35.462230343495456 1 36.306569161197729 1 37.150907978900001 4 +7 0 0 3 47 45 0 185.42666444345053 0.022968858257008225 185.48559784473929 0.069015608420173361 185.60076523351637 0.13841473780832186 185.76480811945336 0.20814749086612705 185.91948255294966 0.27820897996379057 186.06430432663907 0.34858898571379104 186.19890863603521 0.41927093543005511 186.32306887880125 0.49023163421099403 186.43669666927744 0.56143910478151293 186.53984063838641 0.63286291744033674 186.63268466197891 0.70447602640818019 186.71553540346449 0.77625283596381278 186.7887993562189 0.84816882339535338 186.85296218092452 0.92020038438089724 186.90856742889767 0.99232513032661751 186.95619542652597 1.064522420483293 186.99644212928595 1.1367740137740336 187.02989793632457 1.209064677767558 187.05712669321198 1.281382633085181 187.07864398143542 1.3537195888348716 187.09489807276469 1.4260706071521176 187.10624093738897 1.4984317446522626 187.11296598982943 1.5707988178479986 187.11524102635718 1.6431673774636224 187.11310298018881 1.7155323778955871 187.10647348820626 1.7878880672711683 187.09516907605794 1.8602278837320374 187.07891278618811 1.9325443366939543 187.05734541576533 2.004828805693895 187.03003687209437 2.0770711951747445 186.99649744818518 2.1492594397496023 186.95618930022317 2.2213786747671405 186.90853719726496 2.293410616765414 186.85294198013585 2.3653310389293769 186.78878390958241 2.4371104739061749 186.71548383530654 2.5087228210549104 186.63256294897388 2.5801421503583732 186.53964041935683 2.6513421999954718 186.43644130562973 2.7222963629406687 186.32280174757585 2.7929785751640108 186.19867476999966 2.8633648084790111 186.06413635340229 2.9334348432457591 185.91938982540222 3.0031746256958742 185.76477670290774 3.0725768974979686 185.60076341054463 3.1186240083756842 185.48559983238172 3.1415926535943299 185.42666444330067 + 0 4 0.81871030775000009 1 1.6374206155000002 1 2.4561309232500004 1 3.2748412310000004 1 4.0935515387500008 1 4.9122618465000008 1 5.7309721542500007 1 6.5496824620000007 1 7.3683927697500007 1 8.1871030775000015 1 9.0058133852500006 1 9.8245236930000015 1 10.643234000750001 1 11.461944308500001 1 12.280654616250001 1 13.099364924000001 1 13.918075231750002 1 14.736785539500001 1 15.555495847250002 1 16.374206155000003 1 17.192916462750002 1 18.011626770500001 1 18.83033707825 1 19.649047386000003 1 20.467757693750002 1 21.286468001500001 1 22.105178309250004 1 22.923888617000003 1 23.742598924750002 1 24.561309232500001 1 25.380019540250004 1 26.198729848000003 1 27.017440155750002 1 27.836150463500005 1 28.654860771250004 1 29.473571079000003 1 30.292281386750002 1 31.110991694500004 1 31.929702002250004 1 32.748412310000006 1 33.567122617750002 1 34.385832925500004 1 35.204543233250007 1 36.023253541000003 4 +7 0 0 3 47 45 1.2196797439841653 -55.166612222367313 1.2245038664642953 -55.166627514376039 1.2341527842135036 -55.153938305881248 1.2485619617550456 -55.096493572428741 1.2628414470598492 -55.000309112521968 1.2769232119421703 -54.865326539413068 1.2907381170450116 -54.69169408268403 1.3042160602848252 -54.479811619052064 1.3172866008783608 -54.230351853523921 1.3298789390143784 -53.944264896990227 1.3419245097988048 -53.6227680612866 1.3533582155626478 -53.26734746921678 1.3641183809613497 -52.879732215368115 1.3741470301548318 -52.461874539490601 1.3833901113578879 -52.015928388891695 1.3917977655893949 -51.544228412199502 1.3993246093509086 -51.049268838639755 1.4059300375505233 -50.533682383887658 1.4115785328427701 -50.000219164108763 1.4162400097170167 -49.451725550664975 1.4198900701765482 -48.891123253973973 1.4225106073871587 -48.321387550090257 1.4240883415213546 -47.745528248323772 1.4246150408321916 -47.166591957134251 1.4240880061244703 -46.587645794585924 1.4225099611182417 -46.011760485821831 1.4198890706545428 -45.441993606703029 1.4162389046148671 -44.881372786692772 1.411578402283014 -44.332878928596273 1.4059318268567851 -43.79942940163312 1.3993287149199836 -43.283861324322338 1.3918038225018341 -42.78891451478659 1.383397060048057 -42.317215681564754 1.3741534434125708 -41.871257984972445 1.3641229540610083 -41.453397897719483 1.3533600096681513 -41.065850971096523 1.3419236188874761 -40.710561379991461 1.3298765151192675 -40.38921810447389 1.3172844086512798 -40.103254251605129 1.3042152209168694 -39.853850846855714 1.2907383414049149 -39.641939606869954 1.2769238913019365 -39.468205317234016 1.2628420355920225 -39.333090808882837 1.2485622178355855 -39.236791934947483 1.2341528081343782 -39.179289947204111 1.2245038413355662 -39.166592831516624 1.2196797439829035 -39.166612222319024 + 0 4 0.81871030775000009 1 1.6374206155000002 1 2.4561309232500004 1 3.2748412310000004 1 4.0935515387500008 1 4.9122618465000008 1 5.7309721542500007 1 6.5496824620000007 1 7.3683927697500007 1 8.1871030775000015 1 9.0058133852500006 1 9.8245236930000015 1 10.643234000750001 1 11.461944308500001 1 12.280654616250001 1 13.099364924000001 1 13.918075231750002 1 14.736785539500001 1 15.555495847250002 1 16.374206155000003 1 17.192916462750002 1 18.011626770500001 1 18.83033707825 1 19.649047386000003 1 20.467757693750002 1 21.286468001500001 1 22.105178309250004 1 22.923888617000003 1 23.742598924750002 1 24.561309232500001 1 25.380019540250004 1 26.198729848000003 1 27.017440155750002 1 27.836150463500005 1 28.654860771250004 1 29.473571079000003 1 30.292281386750002 1 31.110991694500004 1 31.929702002250004 1 32.748412310000006 1 33.567122617750002 1 34.385832925500004 1 35.204543233250007 1 36.023253541000003 4 +1 3.1415926535989986 16.014985605652786 0 1 +1 3.1415926535989982 16.014985605652786 0 1 +1 6.2831853071795862 16.01498560570624 0 1 +1 0 16.01498560570624 0 1 +1 3.141592653573984 16.014985606630788 0 1 +1 3.141592653573984 16.014985606630788 0 1 +1 6.2831853071795862 16.014985606499181 0 1 +1 0 16.014985606499181 0 1 +1 -6.7548279202840993 -62.941480755899128 0.040814503873385082 -0.99916674097648461 +1 -147.311579808 -54.620113243200002 0.8866178397970621 -0.46250276340103236 +1 -147.311579808 -54.620113243200016 0.88661783979706199 -0.46250276340103241 +7 0 0 3 47 45 0 -64.308528989099642 0.01159204787347794 -64.308932483757872 0.034776144839457492 -64.310083553874918 0.069552302630577684 -64.312838947865998 0.10432849203628387 -64.316620170386145 0.13910469527326774 -64.321422534598938 0.17388087599285154 -64.327240237402194 0.20865698221762027 -64.33406621137847 0.24343295496203068 -64.341892179946328 0.27820873614521302 -64.35070865804424 0.31298427684643115 -64.360504967478121 0.34775954478265764 -64.371269248089845 0.38253453112889541 -64.382988470970801 0.41730925404303432 -64.395648447676052 0.45208376611622564 -64.409233853500467 0.48685811550613045 -64.423728284529034 0.52163231814510758 -64.439114203011641 0.55640636566824719 -64.455372976627871 0.59118022925665414 -64.47248490654421 0.6259538667013278 -64.490429258473711 0.66072723005642942 -64.509184292936936 0.69550027388905278 -64.528727295711064 0.730272963453656 -64.54903460832962 0.76504528216654732 -64.570081658189267 0.79981723824880324 -64.591842990175479 0.83458886842280666 -64.614292292611211 0.86936024403170065 -64.637402444960017 0.90413142549200043 -64.661145548374478 0.9389024413362409 -64.685492902180712 0.97367329581554807 -64.710415057747198 1.0084439731761519 -64.735881858919086 1.0432144448697791 -64.761862486051569 1.0779846773362316 -64.788325499078439 1.1127546403322606 -64.815238880846508 1.1475243150006671 -64.842570080344828 1.1822937016331341 -64.870286056094628 1.2170628248286579 -64.898353318996897 1.2518317420364184 -64.926737977193142 1.2866005290553848 -64.955405772680322 1.3213692199422697 -64.984322080016568 1.356137831699024 -65.013451957343307 1.3909063672552595 -65.042760194854182 1.4256748234973484 -65.072211363871048 1.4604431995216074 -65.101769864354083 1.4952115017294918 -65.131399978067677 1.5183903411231183 -65.151177259814787 1.529979757593156 -65.161065905551709 + 0 4 1.9672369056613634 1 3.9344738113227269 1 5.9017107169840903 1 7.8689476226454538 1 9.8361845283068163 1 11.803421433968181 1 13.770658339629545 1 15.737895245290908 1 17.70513215095227 1 19.672369056613633 1 21.639605962274999 1 23.606842867936361 1 25.574079773597724 1 27.54131667925909 1 29.508553584920453 1 31.475790490581815 1 33.443027396243181 1 35.41026430190454 1 37.377501207565906 1 39.344738113227265 1 41.311975018888631 1 43.279211924549998 1 45.246448830211357 1 47.213685735872723 1 49.180922641534089 1 51.148159547195448 1 53.115396452856814 1 55.08263335851818 1 57.049870264179539 1 59.017107169840905 1 60.984344075502264 1 62.95158098116363 1 64.918817886824996 1 66.886054792486362 1 68.853291698147714 1 70.82052860380908 1 72.787765509470447 1 74.755002415131813 1 76.722239320793179 1 78.689476226454531 1 80.656713132115897 1 82.623950037777263 1 84.591186943438629 1 86.558423849099995 4 +7 0 0 5 15 5 -29.781974784035327 -38.367790527525216 -29.916921112175984 -35.064212874955757 -30.39327989975115 -31.77458172564809 -31.209179755145549 -28.545861321573256 -33.496557443645315 -22.303330786441734 -37.012187228403214 -16.660480097012368 -39.056650097849293 -14.031029437289618 -43.659684398249262 -9.2322682059981958 -49.146714682070673 -5.4761156388930203 -52.075666470258561 -3.8889860881088225 -57.302527136147084 -1.7227380390400242 -62.812267040730539 -0.50462662453637108 -65.11660107787543 -0.16820687753536845 -67.437176135761632 5.2776272241317201e-10 -69.757751342293375 1.7200818547280505e-10 + 0 6 23.379302620099999 3 46.762322248499999 3 70.1494792015 3 86.558423849099995 6 +1 -7.7715611723760958e-16 -4 1 0 +2 -105.566941595 75.81028311 1 0 -0 1 4 +8 0.84806207899359221 1.5707963267948952 +1 1.5707963267948983 -40.760416520999996 -1 -0 +2 -105.566941595 75.810283110000015 1 0 -0 1 4 +8 1.5707963267948952 2.2935305745962009 +1 7.853981633974481 -40.760416520999996 -1 -0 +2 -105.566941595 75.810283110000015 1 0 -0 1 4 +1 -108.38981724999999 78.81028311 -1 0 +1 8 120.0387488886 0 1 +1 -108.38981724999999 78.810283110000015 -1 0 +1 -108.566941595 78.633158765499999 0 1 +1 2.822875655499999 0 1 0 +1 -108.566941595 78.633158765500013 0 1 +1 -8.8817841970012523e-16 -4 1 0 +2 -105.566941595 75.81028311 1 0 -0 1 4 +8 2.4188584057884888 3.1415926535897931 +1 7.853981633974481 -40.760416520999996 -1 -0 +2 -105.566941595 75.810283110000015 1 0 -0 1 4 +1 0 -4 1 0 +2 -105.566941595 75.81028311 1 0 -0 1 4 +8 3.1415926535897931 3.8643269014098482 +1 7.8539816339744828 -40.760416520999996 -1 -0 +2 -105.566941595 75.810283110000015 1 0 -0 1 4 +1 -108.566941595 72.9874074544 0 1 +1 -2.8228756556000008 0 1 0 +1 -108.566941595 72.987407454400014 0 1 +1 -108.38981724999999 72.81028311 -1 0 +1 0 120.0387488886 0 1 +1 -108.38981724999999 72.810283110000015 -1 0 +1 -8.8817841970012523e-16 -4 1 0 +2 -105.566941595 75.81028311 1 0 -0 1 4 +8 3.9896547325833853 4.7123889803846879 +1 7.8539816339744828 -40.760416520999996 -1 -0 +2 -105.566941595 75.810283110000015 1 0 -0 1 4 +8 4.7123889803846879 5.4351232281859936 +1 7.853981633974481 -40.760416520999996 -1 -0 +2 -105.566941595 75.810283110000015 1 0 -0 1 4 +1 -45.636129322400002 72.81028311 -1 2.48072612245e-16 +1 0 57.285060960999999 0 1 +1 -45.636129322400002 72.810283110000015 -1 2.4807261224500005e-16 +1 -158.12851005600001 -34.878958321399999 0.8866178397970621 -0.46250276340103236 +1 -106.6592936665396 4 1 0 +1 -158.12851005600001 -34.878958321400006 0.88661783979706199 -0.46250276340103241 +1 -1.3322676295501878e-15 -4 1 0 +2 -140.86673680999999 -40.499889463999999 1 0 -0 1 4 +8 3.508838784665663 4.7123889803846879 +1 7.8539816339744846 -40.760416520999996 -1 -0 +2 -140.86673680999999 -40.499889464000006 1 0 -0 1 4 +8 4.7123889803846879 4.9543072803187638 +1 7.853981633974481 -40.760416520999996 -1 -0 +2 -140.86673680999999 -40.499889464000006 1 0 -0 1 4 +1 -139.751433185 -44.465330774800002 0.8866178397970621 -0.46250276340103236 +1 -85.932125718699993 4 1 0 +1 -139.751433185 -44.465330774800009 0.88661783979706199 -0.46250276340103241 +1 -139.51247108199999 -44.390209669900003 0.46250276340103236 0.8866178397970621 +1 -2.8228756553164347 -0 1 0 +1 -139.51247108199999 -44.39020966990001 0.46250276340103225 0.8866178397970621 +1 -3.5527136788005009e-15 -4 1 0 +2 -140.86673680999999 -40.499889463999999 1 0 -0 1 4 +8 5.0796351115126015 6.2831853071795862 +1 7.8539816339744828 -40.760416520999996 -1 -0 +2 -140.86673680999999 -40.499889464000006 1 0 -0 1 4 +1 0 -4 1 0 +2 -140.86673680999999 -40.499889463999999 1 0 -0 1 4 +8 0 0.2419182999098049 +1 1.5707963267948966 -40.760416520999996 -1 -0 +2 -140.86673680999999 -40.499889464000006 1 0 -0 1 4 +1 -136.90129549900001 -39.3845858384 0.46250276340103236 0.8866178397970621 +1 2.8228756558675956 0 1 0 +1 -136.90129549900001 -39.384585838400007 0.46250276340103225 0.8866178397970621 +1 -136.97641660400001 -39.145623735999997 0.8866178397970621 -0.46250276340103236 +1 -85.932125718168052 -4 1 0 +1 -136.97641660400001 -39.145623736000005 0.88661783979706199 -0.46250276340103241 +1 -1.609823385706477e-15 -4 1 0 +2 -140.86673680999999 -40.499889463999999 1 0 -0 1 4 +8 0.36724613109920412 1.5707963267948952 +1 1.5707963267948966 -40.760416520999996 -1 -0 +2 -140.86673680999999 -40.499889464000006 1 0 -0 1 4 +8 1.5707963267948952 1.8127146267229881 +1 7.853981633974481 -40.760416520999996 -1 -0 +2 -140.86673680999999 -40.499889464000006 1 0 -0 1 4 +1 -155.35349347499999 -29.559251282599998 0.8866178397970621 -0.46250276340103236 +1 -106.65929366600761 -4 1 0 +1 -155.35349347499999 -29.559251282600005 0.88661783979706199 -0.46250276340103241 +1 -45.636129322400002 78.81028311 -1 2.48072612245e-16 +1 8 57.285060960999999 0 1 +1 -45.636129322400002 78.810283110000015 -1 2.4807261224500005e-16 +1 -8.8817841970012523e-16 -4 1 0 +2 -105.402023218 -59 1 0 -0 1 4 +8 3.9896547325833853 4.7123889803846915 +1 7.8539816339744792 -40.760416520999996 -1 -0 +2 -105.402023218 -59.000000000000014 1 0 -0 1 4 +8 4.7123889803846915 5.4351232281859936 +1 7.8539816339744846 -40.760416520999996 -1 -0 +2 -105.402023218 -59.000000000000014 1 0 -0 1 4 +1 -54.189524254200002 -62 -1 2.92604619459e-16 +1 -1.3228756556999954 -4 1 0 +1 -54.189524254200002 -62.000000000000014 -1 2.9260461945900005e-16 +1 -59.614575774800002 -79.501302991800003 0.8866178397970621 -0.46250276340103236 +1 1.3228756552746579 -4 1 0 +1 -59.614575774800002 -79.501302991800017 0.88661783979706199 -0.46250276340103241 +1 2.7755575615628914e-16 -4 1 0 +2 -69.937309626300006 -77.500110535999994 1 0 -0 1 4 +8 0.36724613113150961 1.5707963267948952 +1 1.5707963267948983 -40.760416520999996 -1 -0 +2 -69.937309626300006 -77.500110536000008 1 0 -0 1 4 +8 1.5707963267948952 1.812714626680429 +1 7.853981633974481 -40.760416520999996 -1 -0 +2 -69.937309626300006 -77.500110536000008 1 0 -0 1 4 +1 -71.052613251799997 -73.534669225200005 0.8866178397970621 -0.46250276340103236 +1 -11.577877029355323 -4 1 0 +1 -71.052613251799997 -73.53466922520002 0.88661783979706199 -0.46250276340103241 +1 -71.291575354200006 -73.609790330099997 -0.46250276340103236 -0.8866178397970621 +1 -2.8228756555014387 0 1 0 +1 -71.291575354200006 -73.609790330100012 -0.46250276340103225 -0.8866178397970621 +1 8.8817841970012523e-16 -4 1 0 +2 -69.937309626300006 -77.500110535999994 1 0 -0 1 4 +8 1.938042457852813 3.1415926535897931 +1 7.8539816339744828 -40.760416520999996 -1 -0 +2 -69.937309626300006 -77.500110536000008 1 0 -0 1 4 +1 0 -4 1 0 +2 -69.937309626300006 -77.500110535999994 1 0 -0 1 4 +8 3.1415926535897931 3.3835109534996013 +1 7.8539816339744828 -40.760416520999996 -1 -0 +2 -69.937309626300006 -77.500110536000008 1 0 -0 1 4 +1 -73.902750937099995 -78.6154141616 -0.46250276340103236 -0.8866178397970621 +1 2.8228756556363308 0 1 0 +1 -73.902750937099995 -78.615414161600015 -0.46250276340103225 -0.8866178397970621 +1 -73.827629832200003 -78.854376263999995 0.8866178397970621 -0.46250276340103236 +1 -11.57787702935533 4 1 0 +1 -73.827629832200003 -78.85437626400001 0.88661783979706199 -0.46250276340103241 +1 -8.8817841970012523e-16 -4 1 0 +2 -69.937309626300006 -77.500110535999994 1 0 -0 1 4 +8 3.5088387846710463 4.7123889803846915 +1 7.853981633974481 -40.760416520999996 -1 -0 +2 -69.937309626300006 -77.500110536000008 1 0 -0 1 4 +8 4.7123889803846915 4.9543072802885089 +1 7.8539816339744846 -40.760416520999996 -1 -0 +2 -69.937309626300006 -77.500110536000008 1 0 -0 1 4 +1 -62.389592354999998 -84.821010030699995 0.8866178397970621 -0.46250276340103236 +1 1.3228756554982446 4 1 0 +1 -62.389592354999998 -84.821010030700009 0.88661783979706199 -0.46250276340103241 +1 -54.189524254399998 -56 -1 2.19453464593e-16 +1 -1.322875655499999 4 1 0 +1 -54.189524254399998 -56.000000000000014 -1 2.1945346459300005e-16 +1 -7.7715611723760958e-16 -4 1 0 +2 -105.402023218 -59 1 0 -0 1 4 +8 0.84806207899359221 1.5707963267948952 +1 1.570796326794897 -40.760416520999996 -1 -0 +2 -105.402023218 -59.000000000000014 1 0 -0 1 4 +8 1.5707963267948952 2.2935305745962009 +1 7.853981633974481 -40.760416520999996 -1 -0 +2 -105.402023218 -59.000000000000014 1 0 -0 1 4 +1 -108.224898874 -56 -1 0 +1 52.712498964100007 4 1 0 +1 -108.224898874 -56.000000000000014 -1 0 +1 -108.402023218 -56.177124344500001 0 1 +1 2.822875655499999 0 1 0 +1 -108.402023218 -56.177124344500015 0 1 +1 4.4408920985006262e-16 -4 1 0 +2 -105.402023218 -59 1 0 -0 1 4 +8 2.418858405769738 3.1415926535897931 +1 7.8539816339744828 -40.760416520999996 -1 -0 +2 -105.402023218 -59.000000000000014 1 0 -0 1 4 +1 0 -4 1 0 +2 -105.402023218 -59 1 0 -0 1 4 +8 3.1415926535897931 3.8643269014098482 +1 7.8539816339744828 -40.760416520999996 -1 -0 +2 -105.402023218 -59.000000000000014 1 0 -0 1 4 +1 -108.402023218 -61.822875655499999 0 1 +1 -2.822875655499999 0 1 0 +1 -108.402023218 -61.822875655500013 0 1 +1 -108.224898873 -62 -1 0 +1 52.712498963100003 -4 1 0 +1 -108.224898873 -62.000000000000014 -1 0 +1 3.9896547325833853 0 0 1 +1 4 119.86162454460001 1 0 +1 4 120.21587323360001 -1 0 +1 -3 -4 0 1 +1 8 120.0387488886 0 1 +1 16.921203772064203 -169.65891452860899 0.81818281241205493 -0.57495815975903863 +1 5.4351232281859945 0 0 1 +1 4 114.57012192260001 1 0 +1 8 57.285060960999999 0 1 +1 -34.422785105767979 -133.57816959966308 0.81818281241205493 -0.57495815975903863 +1 3.8643269014098478 0 0 -1 +1 -2.6457513110999997 -4 0 1 +1 0 -8 1 0 +1 15.341249387525835 -172.21530205329486 -0.57495815975903863 -0.81818281241205493 +1 2.4188584057884888 0 0 -1 +1 2.6457513109999979 -4 0 1 +1 3 -4 0 1 +1 4 120.21587323360001 1 0 +1 0 -8 1 0 +1 15.341249387525835 -172.21530205329486 -0.57495815975903863 -0.81818281241205493 +1 -106.65929366600761 4 1 0 +1 114.20427557680274 -112.90406983180424 -0.45949573997133342 0.88817997328705678 +1 1.8127146267229881 0 0 1 +1 -91.400752684978173 0 0 1 +1 -85.755001373397107 0 0 -1 +1 3.0000000003763843 -4 0 1 +1 -85.932125718168052 4 1 0 +1 104.68023020314706 -94.494614357551427 -0.45949573997133342 0.88817997328705678 +1 0.36724613109920412 0 0 1 +1 -86.109250062938969 0 0 1 +1 -11.577877029355323 4 1 0 +1 70.514769681885127 -28.45465974333403 -0.45949573997133342 0.88817997328705678 +1 -11.755001373771623 0 0 -1 +1 -3.0000000000063887 -4 -0 1 +1 1.812714626680429 0 0 1 +1 -11.400752684850387 0 0 1 +1 1.3228756554982446 4 1 0 +1 64.586928780773107 -16.996469568316861 -0.45949573997133342 0.88817997328705678 +1 0.36724613109022486 0 -1.1305741065559261e-11 1 +1 -6.1092500629460833 0 6.0296758295784074e-11 1 +1 -1.322875655499999 4 1 0 +1 50.085727908887399 -28.196557232452953 0.81818281241205493 -0.57495815975903863 +1 5.4351232281859945 0 -9.2785779060022833e-12 1 +1 47.243871997100001 0 4.9485748832000002e-11 1 +1 52.889623308099999 0 0 -1 +1 -3 -4 0 1 +1 52.712498964100007 4 1 0 +1 94.29654268489071 -59.264636785628433 0.81818281241205493 -0.57495815975903863 +1 3.9896547325833853 0 -1.0055956067844818e-11 1 +1 52.535374619099997 0 5.3631765695200001e-11 1 +1 3.8643269014098478 0 0 -1 +1 -2.6457513110999997 -4 0 1 +1 0 -8 1 0 +1 92.716588299534152 -61.821024309739364 -0.57495815975903863 -0.81818281241205493 +1 2.4188584057697384 0 0 -1 +1 2.6457513110999997 -4 0 1 +1 3 -4 0 1 +1 52.889623308099999 0 0 1 +1 0 -8 1 0 +1 92.716588299534152 -61.821024309739364 -0.57495815975903863 -0.81818281241205493 +1 -1.3228756556999954 -4 1 0 +1 46.63597895016953 -33.105654106810285 0.81818281241205493 -0.57495815975903863 +1 0.84806207899359209 0 9.2785779060022833e-12 -1 +1 47.243871997100001 0 4.9485748832000002e-11 1 +1 52.712498963100003 -4 1 0 +1 90.846793725518282 -64.173733659525809 0.81818281241205493 -0.57495815975903863 +1 2.2935305745962009 0 1.0055956067844818e-11 -1 +1 52.535374619099997 0 5.3631765695200001e-11 1 +1 0 -8 1 0 +1 73.260697483411391 -27.233490818924892 0.88817997328705678 0.45949573997133342 +1 1.938042457852813 0 0 -1 +1 -2.6457513109964825 -4 -0 1 +1 0 -8 1 0 +1 73.260697483411391 -27.233490818924892 0.88817997328705678 0.45949573997133342 +1 3.0000000000063696 -4 -0 1 +1 -11.755001373771609 0 0 1 +1 3.3835109534996013 0 0 -1 +1 2.6457513111313933 -4 -0 1 +1 -11.577877030473198 -4 1 0 +1 75.843849522143245 -25.697685304472106 -0.45949573997133342 0.88817997328705678 +7 0 0 1 2 2 3.5088387842581916 4 3.5088387846710463 -4 + 0 2 11.313708499000001 2 +7 0 0 5 6 2 -11.400752687086118 -4 -11.400752687086118 -2.3999999999999986 -11.400752687086118 -0.80000000000000071 -11.400752684850374 0.80000000000000071 -11.400752684850374 2.3999999999999986 -11.400752684850374 4 + 0 6 11.313708499000001 6 +1 1.3228756554982446 -4 1 0 +1 69.916008620500506 -14.239495128470878 -0.45949573997133342 0.88817997328705678 +1 4.9543072802885089 0 0 1 +1 -6.1092500627224968 0 0 -1 +1 -2.9999999999138738 -4 0 1 +1 -85.755001373929048 0 0 1 +1 0 -8 1 0 +1 107.26338224167549 -92.958808842344567 -0.88817997328705678 -0.45949573997133342 +1 5.0796351115126015 0 0 -1 +1 -2.6457513107189832 -4 0 1 +1 0 -8 1 0 +1 107.26338224167549 -92.958808842344567 -0.88817997328705678 -0.45949573997133342 +1 0.2419182999098049 0 0 -1 +1 2.6457513112701436 -4 0 1 +1 2.2935305745962009 0 0 -1 +1 4 119.86162454460001 1 0 +1 0 120.0387488886 0 1 +1 13.471454813509965 -174.5680114030813 0.81818281241205493 -0.57495815975903863 +1 0.84806207899359209 0 0 -1 +1 4 114.57012192260001 1 0 +1 0 57.285060960999999 0 1 +1 -37.872534064322217 -138.48726647413542 0.81818281241205493 -0.57495815975903863 +1 -106.65929366672461 -4 1 0 +1 119.5333554167911 -110.1470953926305 -0.45949573997133342 0.88817997328705678 +7 0 0 1 2 2 3.5088387843228084 4 3.508838784665663 -4 + 0 2 11.313708499000001 2 +7 0 0 5 6 2 -91.400752686720509 -4 -91.400752686720509 -2.3999999999999986 -91.400752686720509 -0.80000000000000071 -91.400752684623512 0.80000000000000071 -91.400752684623512 2.3999999999999986 -91.400752684623512 4 + 0 6 11.313708499000001 6 +1 -85.932125718699993 -4 1 0 +1 110.00931004336537 -91.737639918050405 -0.45949573997133342 0.88817997328705678 +1 4.9543072803187638 0 0 1 +1 -86.109250062584309 0 0 -1 +1 -4.4408920985006262e-16 4 1 0 +2 71.882210263570215 -24.56895089911869 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 4 +1 -1.609823385706477e-15 4 1 0 +2 108.6418694612712 -95.623348761978292 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 4 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 4.4408920985006262e-16 4 1 0 +2 90.262039862297982 -60.096149830462245 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 4 +1 0 4 1 0 +2 90.262039862297982 -60.096149830462245 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 4 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 -3.5527136788005009e-15 4 1 0 +2 108.6418694612712 -95.623348761978292 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 4 +1 0 4 1 0 +2 108.6418694612712 -95.623348761978292 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 4 +1 -1.3322676295501878e-15 4 1 0 +2 108.6418694612712 -95.623348761978292 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 4 +1 -8.8817841970012523e-16 4 1 0 +2 90.262039862297982 -60.096149830462245 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 4 +1 -8.8817841970012523e-16 4 1 0 +2 12.886700950289679 -170.49042757401776 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 4 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 8.8817841970012523e-16 4 1 0 +2 71.882210263570215 -24.56895089911869 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 4 +1 0 4 1 0 +2 71.882210263570215 -24.56895089911869 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 4 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 -8.8817841970012523e-16 4 1 0 +2 12.886700950289679 -170.49042757401776 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 4 +1 0 4 1 0 +2 12.886700950289679 -170.49042757401776 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 4 +1 -7.7715611723760958e-16 4 1 0 +2 12.886700950289679 -170.49042757401776 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 4 +1 -7.7715611723760958e-16 4 1 0 +2 90.262039862297982 -60.096149830462245 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 4 +1 -4.4408920985006262e-16 4 1 0 +2 71.882210263570215 -24.56895089911869 -0.81818281241205493 0.57495815975903863 -0.57495815975903863 -0.81818281241205493 4 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 -1.5707963267948966 -40.760416520999996 1 0 +2 -105.402023218 -59 -1 0 0 1 4 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 -1.5707963267948966 -32.760416520999996 1 0 +2 105.402023218 59 1 -0 -0 -1 4 +8 4.7123889803846897 5.2123889805372494 +1 5.2123889807538335 0 -1 -0 +1 -5.2123889803854739 4.1525902082497784e-09 1 0 +1 -1.5707963267948966 -40.760416520999996 1 0 +2 -105.402023218 -59 -1 0 0 1 4 +1 -1.5707963267948966 -32.760416520999996 1 0 +2 105.402023218 59 1 -0 -0 -1 4 +8 1.5707963267948966 2.0707963266440097 +1 1.0707963271624705 0 1 0 +8 2.0707963266440097 4.7123889803846897 +1 5.2123889802338024 0 -1 -0 +1 75.764929478538619 47.415092010192929 0.88138281220023618 0.4724027289908509 +1 90.827063581152686 4.5 -0.04280518429121246 -0.99908343805599908 +1 0 -39.2489666297 0 1 +1 8.7488663526301096 4.5 0 1 +1 49.712987172643771 1 1 0 +1 252.44970427334707 -1.0897645439759076e-10 1 -7.6327832942973201e-17 +1 0.2528281126840084 -62.941480756207703 0.040814503873385082 -0.99916674097648461 +1 162.84538564549007 1.1764615387771972e-10 1 1.1307675440731896e-16 +1 0.48125102801860253 40.019260720291385 -7.921500565987655e-18 1 +1 0.54552401027379904 -155.88296151213203 1 1.3877787807814457e-17 +1 -7.0475238179737811 29.99999999997484 1 1.3877787807814457e-17 +1 -7.9573951131876584 198.87856385377432 0.88531315494257756 0.46499528781012373 +1 0 1.4210854715202004e-14 0 1 +1 81.280457959000003 46.607579398200002 -0.046033930337705718 -0.99893987669812412 +7 0 0 3 25 23 0 45.655980424020328 0.0072904519767864103 45.622383995628482 0.021871650545931855 45.555190152088386 0.043744017174010434 45.454446047071038 0.065616596025040164 45.353798445235689 0.087489175724292892 45.25329641132641 0.1093616287692096 45.152988553702343 0.13123391501544115 45.052922991806632 0.15310606630089391 44.953147418567404 0.17497817477745911 44.85370913736179 0.19685037906273684 44.754655105795891 0.21872284995320773 44.65603197765806 0.24059577539958177 44.557886145362232 0.26246934499488139 44.460263782259325 0.28434373408177355 44.363210884984021 0.30621908762289585 44.266773315794623 0.32809550398378751 44.170996844902412 0.34997301872479591 44.075927192852369 0.3718515887116754 43.981610072707689 0.39373107605844365 43.88809123296781 0.4156112343891683 43.795416497748739 0.4374916888083939 43.703631817180849 0.45937194238095785 43.612783279674723 0.47395817237230647 43.552872604222301 0.48125102801884978 43.523088736816177 + 408.473308997 4 411.55422922854547 1 414.63514946009093 1 417.71606969163639 1 420.7969899231818 1 423.87791015472726 1 426.95883038627272 1 430.03975061781819 1 433.12067084936365 1 436.20159108090911 1 439.28251131245457 1 442.36343154400004 1 445.44435177554544 1 448.5252720070909 1 451.60619223863637 1 454.68711247018183 1 457.76803270172729 1 460.84895293327276 1 463.92987316481822 1 467.01079339636362 1 470.09171362790909 1 473.17263385945455 1 476.25355409100001 4 +7 0 0 1 2 2 408.47331051952318 -8.9960470360602036e-06 476.25355409100001 5.0837900789968605e-15 + 408.473308997 2 476.25355409100001 2 +1 1.570796326794897 0 0 1 +1 38 15 0 1 +1 0 0 0 1 +1 32 15 0 1 +1 -4.7123889803846897 -14 1 0 +1 -4.45058959258506 45.254833995939016 1 4.5234555469702956e-15 +1 1.5707963267948968 0 0 1 +1 64 15 0 1 +1 0 0 0 1 +1 32 15 0 1 +1 0 -14 1 0 +1 0.26179938779964396 45.254833995939038 1 0 +1 1.0013199713316772 -7.8250650403788313e-10 -1.4167936386399222e-13 1 +7 0 0 1 2 2 -2.7841790808597776e-12 660.18367645904539 -3.9575128241857479e-12 668.35204699985911 + 666.64764424199996 2 674.89599265200002 2 +7 0 0 1 2 2 4.8028478100077632e-12 674.80732583995928 1.0013199712360572 674.8959926516626 + 0 2 1.2041257620200001 2 +7 0 0 3 4 2 0.55138356252300003 3.1841125501999983 0.77165703278599995 3.1665985313999983 0.99192019075837001 3.1490864019 1.2121824795130001 3.1315753848000014 + 0 4 1.2041257620200001 4 +1 7.2859757639472022e-11 -6.5494987211422995e-10 -1.0085455583230249e-13 1 +7 0 0 1 2 2 6.7495741569456316 668.63447709517436 6.749574156944778 676.81060151183078 + 666.65540174099999 2 674.80732583999998 2 +7 0 0 1 2 2 6.74957415694481 676.81060151183078 5.9135878512060716 676.73627859772091 + 0 2 1.00517081199 2 +7 0 0 3 4 2 0.55138356252300003 3.1841125501999983 0.36759719543799996 3.198725486699999 0.18380222029899995 3.2134352455000013 0 3.2282433708999996 + 0 4 1.00517081199 4 +7 0 0 3 25 23 0 676.37017607343353 0.089683206164800217 676.37329914799204 0.2690486152950754 676.37976559952926 0.53809091931745712 676.39012617697335 0.80712459682107884 676.40114764449447 1.0761468896575688 676.41283000231465 1.3451550730941426 676.42517325736219 1.614146457497861 676.43817742419196 1.8831183827902118 676.45184252470006 2.1520682148362082 676.46616858816378 2.4209933413134452 676.4811556511886 2.6898911677202801 676.49680375768344 2.9587591133472655 676.51311295882613 3.2275946072602131 676.53008331302692 3.4963950842832054 676.54771488589586 3.7651579809847435 676.56600775020468 4.0338807316698491 676.58496198584817 4.3025607643695798 676.60457767980745 4.5711954968635036 676.62485492610017 4.8397823326058935 676.64579382575914 5.1083186570425045 676.66739448672104 5.3768018325046043 676.68965702401147 5.645229198451255 676.71258155883618 5.8241417673471432 676.728306000766 5.9135878512060778 676.73627859772091 + 0 4 0.3226620664140909 1 0.6453241328281818 1 0.96798619924227269 1 1.2906482656563636 1 1.6133103320704545 1 1.9359723984845454 1 2.2586344648986363 1 2.5812965313127272 1 2.9039585977268181 1 3.226620664140909 1 3.5492827305549999 1 3.8719447969690908 1 4.1946068633831821 1 4.5172689297972726 1 4.839930996211363 1 5.1625930626254544 1 5.4852551290395457 1 5.8079171954536362 1 6.1305792618677266 1 6.453241328281818 1 6.7759033946959093 1 7.0985654611099998 4 +7 0 0 3 25 23 1.4998334131329052 -12.153764196700003 1.5009106655531312 -12.155910614386372 1.5030650187312582 -12.160323178470254 1.5062960792812052 -12.167300875917938 1.5095266564092469 -12.174637089875887 1.5127567358210983 -12.18233148553248 1.5159863031674226 -12.190383728076108 1.5192153440382661 -12.198793482695178 1.5224438439682471 -12.20756041457806 1.5256717884388677 -12.21668418891317 1.5288991628816004 -12.226164470888881 1.5321259526807667 -12.236000925693594 1.5353521431764732 -12.246193218515701 1.5385777196675352 -12.256741014543609 1.5418026674144014 -12.26764397896566 1.545026971642081 -12.278901776970313 1.5482506175430704 -12.290514073745905 1.5514735902802792 -12.302480534480869 1.5546958749899553 -12.314800824363559 1.5579174567845946 -12.32747460858241 1.5611383207559464 -12.340501552325769 1.564358451977605 -12.353881320782071 1.5675778355091692 -12.367613579139675 1.5697235827660792 -12.377003188104549 1.5707963267948977 -12.381756629300003 + 0 4 0.3226620664140909 1 0.6453241328281818 1 0.96798619924227269 1 1.2906482656563636 1 1.6133103320704545 1 1.9359723984845454 1 2.2586344648986363 1 2.5812965313127272 1 2.9039585977268181 1 3.226620664140909 1 3.5492827305549999 1 3.8719447969690908 1 4.1946068633831821 1 4.5172689297972726 1 4.839930996211363 1 5.1625930626254544 1 5.4852551290395457 1 5.8079171954536362 1 6.1305792618677266 1 6.453241328281818 1 6.7759033946959093 1 7.0985654611099998 4 +1 -1.4315646184099629e-09 -2.9558577807620168e-12 2.1390378080549427e-12 1 +7 0 0 1 2 2 1.726242040248831 670.71657372790821 1.7262420402651968 678.39509169460655 + 668.71457742200005 2 676.37017607400003 2 +7 0 0 1 2 2 -1.6790483057696638e-11 678.34952318123203 1.7262420402651923 678.39509169460655 + 0 2 2.0705277709500001 2 +7 0 0 1 2 2 1.4790708437856541 -12.121095946800004 1.4998334131329052 -12.153764196700003 + 0 2 2.0705277709500001 2 +1 6.1660077812845825e-10 3.007016857736744e-10 -9.3372493219707172e-13 1 +7 0 0 1 2 2 13.080369286090317 674.42527106169075 13.080369286083224 682.0727352554992 + 670.74380399400002 2 678.349523181 2 +7 0 0 3 25 23 0 681.07345529135489 0.19879099139819886 681.10048729815946 0.59630760654968229 681.15345467197358 1.1923909466638336 681.22961881481592 1.7882872970325163 681.30249872220145 2.3840009966125573 681.37209819334521 2.9795362684954343 681.43842177361159 3.5748972298075405 681.50147486566095 4.170087932667867 681.56126370940103 4.7651123937929238 681.61779539513395 5.3599746243476742 681.67107786596807 5.9546786571583334 681.72111992139594 6.5492285722731154 681.76793121895196 7.143628520808802 681.81152227489247 7.7378827472926526 681.85190446373372 8.3319956106314432 681.88909001680111 8.9259716038303019 681.92309201977935 9.5198153726637607 681.95392440954993 10.113531733152191 681.98160196953449 10.707125688979193 682.00614032674878 11.300602445175381 682.02755593879488 11.893967432320624 682.04586611499678 12.487226288593238 682.06108890686085 12.882665427356642 682.06919195773128 13.0803692861 682.07273525549999 + 0 4 0.71126551424090911 1 1.4225310284818182 1 2.1337965427227275 1 2.8450620569636365 1 3.5563275712045455 1 4.2675930854454549 1 4.9788585996863635 1 5.6901241139272729 1 6.4013896281681824 1 7.1126551424090909 1 7.8239206566500004 1 8.5351861708909098 1 9.2464516851318184 1 9.9577171993727269 1 10.668982713613637 1 11.380248227854546 1 12.091513742095454 1 12.802779256336365 1 13.514044770577273 1 14.225310284818182 1 14.936575799059092 1 15.647841313300001 4 +7 0 0 3 25 23 1.3247135619936488 -11.479217481100005 1.3269897523146235 -11.496238476736369 1.3315499912553401 -11.529588762009512 1.3384130303017734 -11.577550719915992 1.3452978558466404 -11.623460855814768 1.3522035733189484 -11.667330817701375 1.3591292884145669 -11.709172253571339 1.3660741074742497 -11.748996811420193 1.3730371379614856 -11.786816139243463 1.3800174889258197 -11.82264188503669 1.3870142714811304 -11.856485696795382 1.394026599289818 -11.888359222515087 1.4010535890541753 -11.91827411019133 1.4080943610134389 -11.946242007819627 1.4151480394457157 -11.972274563395537 1.422213753174 -11.996383424914571 1.4292906360747009 -12.018580240372232 1.4363778275903023 -12.038876657764114 1.4434744732357783 -12.057284325085689 1.4505797251332297 -12.073814890332514 1.457692742441943 -12.088480001500116 1.4648126921753293 -12.101291306584017 1.4719387485665634 -12.112260453579758 1.4766929814149523 -12.118352878181824 1.4790708437856541 -12.121095946800004 + 0 4 0.71126551424090911 1 1.4225310284818182 1 2.1337965427227275 1 2.8450620569636365 1 3.5563275712045455 1 4.2675930854454549 1 4.9788585996863635 1 5.6901241139272729 1 6.4013896281681824 1 7.1126551424090909 1 7.8239206566500004 1 8.5351861708909098 1 9.2464516851318184 1 9.9577171993727269 1 10.668982713613637 1 11.380248227854546 1 12.091513742095454 1 12.802779256336365 1 13.514044770577273 1 14.225310284818182 1 14.936575799059092 1 15.647841313300001 4 +1 -1.3056796181264646e-08 -5.9173999034101143e-10 1.9302278077534664e-11 1 +7 0 0 1 2 2 4.8565681338850251 679.78926938968004 4.8565681340094038 686.28523148786348 + 674.62682472400002 2 681.07345529199995 2 +7 0 0 3 25 23 0 685.50722572143854 0.0737066829421512 685.52078294971545 0.22107778822738899 685.54773010448594 0.44203484496288281 685.58765189725591 0.66292181879292567 685.62707781441827 0.88376004611714332 685.66601057740445 1.1045663135867689 685.70445277171393 1.3253526727665672 685.74240686818268 1.5461272600288527 685.77987528220388 1.7668948352358493 685.81686041127364 1.9876573879308341 685.85336466686135 2.2084147201190238 685.88939049630176 2.4291650312924058 685.924940395818 2.6499054991541118 685.96001691432878 2.8706328573810351 685.99462264810916 3.0913439693022577 686.02876022626879 3.3120363963753974 686.06243228712003 3.5327089620039729 686.0956414453359 3.7533623049400795 686.12839025047106 3.9739994415052089 686.16068113497988 4.1946262647127686 686.19251635886144 4.4152522515142829 686.22389792439913 4.6358903724563474 686.25482755978692 4.7830034361895279 686.27514678813259 4.8565681339199998 686.28523148784643 + 0 4 0.26327499641227275 1 0.52654999282454551 1 0.78982498923681832 1 1.053099985649091 1 1.3163749820613637 1 1.5796499784736366 1 1.8429249748859093 1 2.106199971298182 1 2.3694749677104547 1 2.6327499641227274 1 2.8960249605350001 1 3.1592999569472733 1 3.422574953359546 1 3.6858499497718187 1 3.9491249461840914 1 4.2123999425963641 1 4.4756749390086368 1 4.7389499354209095 1 5.0022249318331822 1 5.2654999282454549 1 5.5287749246577276 1 5.7920499210700003 4 +7 0 0 3 25 23 1.2700223781359949 -10.993174312400004 1.2708381687170573 -11.001647330181823 1.2724708118593806 -11.018488375370252 1.2749230058713745 -11.043436688973655 1.2773784724781148 -11.068073465344183 1.2798372551916966 -11.092400421428216 1.2822993976629857 -11.116419274172125 1.2847649436995321 -11.140131740522301 1.2872339372579844 -11.163539537425098 1.2897064224433166 -11.1866443818269 1.2921824435061904 -11.209447990674086 1.2946620448407817 -11.23195208091302 1.2971452709824518 -11.254158369490089 1.2996321666054236 -11.276068573351656 1.302122776520416 -11.297684409444102 1.3046171456722555 -11.319007594713801 1.3071153191374507 -11.340039846107146 1.3096173421217552 -11.360782880570472 1.3121232599576087 -11.381238415050195 1.3146331181018927 -11.401408166492661 1.3171469621323557 -11.421293851844258 1.3196648377488196 -11.440897188051363 1.3221867907564004 -11.460219892060323 1.3238708416625822 -11.472915751231813 1.3247135619936488 -11.479217481100005 + 0 4 0.26327499641227275 1 0.52654999282454551 1 0.78982498923681832 1 1.053099985649091 1 1.3163749820613637 1 1.5796499784736366 1 1.8429249748859093 1 2.106199971298182 1 2.3694749677104547 1 2.6327499641227274 1 2.8960249605350001 1 3.1592999569472733 1 3.422574953359546 1 3.6858499497718187 1 3.9491249461840914 1 4.2123999425963641 1 4.4756749390086368 1 4.7389499354209095 1 5.0022249318331822 1 5.2654999282454549 1 5.5287749246577276 1 5.7920499210700003 4 +1 -1.1132497690964291e-08 6.0083493735874072e-10 1.6228428120462609e-11 1 +7 0 0 1 2 2 28.469145972000547 690.97764348343514 28.469145972092218 696.71384616720354 + 679.863289678 2 685.50722572100005 2 +1 4.6797211180732212 -2.1304913389030844e-10 1.051889735478056e-13 1 +7 0 0 1 2 2 4.7039506755745294e-11 691.40077308239529 4.7519510529901306e-11 695.48022611002239 + 702.65059064100001 2 706.79642065899998 2 +7 0 0 3 25 23 0 707.30745519141465 0.071018246776538368 707.30049510575896 0.21301293085132542 707.28650228280731 0.42590235463576903 707.26529551744829 0.63871325523296252 707.24387163267136 0.8514653261666516 707.22223108365722 1.0641756484888663 707.2003743663264 1.2768584639639369 707.17830202758489 1.4895254730946264 707.15601466940245 1.7021859838002698 707.13351295188909 1.9148470933509016 707.11079759393238 2.1275138562545934 707.0878693717633 2.3401894521027033 707.06472911530068 2.5528753506832889 707.04137770229636 2.7655714759056789 707.01781605024564 2.9782763687338276 706.99404510605586 3.190987349487989 706.97006583348616 3.4037006796679861 706.94587919831349 3.6164117233345294 706.9214861514057 3.829115108073132 706.89688760912406 4.0418048851268749 706.87208443334475 4.2544746895651162 706.84707740267083 4.4671178962564735 706.82186720652976 4.6088578229139143 706.80492529819344 4.6797211180999998 706.796420658545 + 0 4 0.26250855515636362 1 0.52501711031272724 1 0.78752566546909086 1 1.0500342206254545 1 1.312542775781818 1 1.5750513309381817 1 1.8375598860945455 1 2.100068441250909 1 2.3625769964072725 1 2.625085551563636 1 2.8875941067199999 1 3.1501026618763635 1 3.412611217032727 1 3.6751197721890909 1 3.9376283273454544 1 4.2001368825018179 1 4.4626454376581819 1 4.725153992814545 1 4.9876625479709089 1 5.250171103127272 1 5.5126796582836359 1 5.7751882134399999 4 +7 0 0 3 25 23 0.87207387937437153 -10.388402487500002 0.87299200423904277 -10.384562967254549 0.87482810425821156 -10.376841599760333 0.87758182497776549 -10.365133165335328 0.88033513621042681 -10.353298945552893 0.8830880577750565 -10.341339538239263 0.88584060948714294 -10.329255541220661 0.88859281115767308 -10.317047552323354 0.89134468259232791 -10.304716169373554 0.8940962435905927 -10.292261990197522 0.89684751394489448 -10.279685612621497 0.89959851343972741 -10.266987634471697 0.90234926185079478 -10.254168653574384 0.90509977894413629 -10.241229267755784 0.90785008447526938 -10.228170074842163 0.9106001981883225 -10.214991672659714 0.91335013981517732 -10.201694659034709 0.9160999290746028 -10.188279631793387 0.9188495856714084 -10.174747188761989 0.92159912929553944 -10.161097927766741 0.92434857962138994 -10.147332446633884 0.92709795630630154 -10.133451343189675 0.92984727899210806 -10.11945521526034 0.93168013786091741 -10.110048178868185 0.93259656483551434 -10.105325689200004 + 0 4 0.26250855515636362 1 0.52501711031272724 1 0.78752566546909086 1 1.0500342206254545 1 1.312542775781818 1 1.5750513309381817 1 1.8375598860945455 1 2.100068441250909 1 2.3625769964072725 1 2.625085551563636 1 2.8875941067199999 1 3.1501026618763635 1 3.412611217032727 1 3.6751197721890909 1 3.9376283273454544 1 4.2001368825018179 1 4.4626454376581819 1 4.725153992814545 1 4.9876625479709089 1 5.250171103127272 1 5.5126796582836359 1 5.7751882134399999 4 +1 -2.1804302050773674e-08 -6.447180567192845e-10 3.0987734377523718e-11 1 +7 0 0 1 2 2 21.53082371957079 710.75707600028215 21.530823719715581 715.3988081271807 + 702.71822230400005 2 707.30745519200002 2 +7 0 0 3 25 23 0 715.67736011292061 0.33375747640712505 715.70894844640827 1.0004521696689539 715.76771273724557 1.9980890631526635 715.84322292696709 2.9933772621729746 715.90671253030484 3.9863703497345981 715.9587454834608 4.9771212218948513 715.99985390672236 5.9656824602751675 716.03053478386789 6.9521069782162073 716.05125280346442 7.9364484056848328 716.06244149951704 8.9187613779589903 716.06450481043362 9.8991017041375908 716.05781850017365 10.877526440815227 716.04273160148034 11.85409388176333 716.01956784839979 12.828863477112986 715.98862711604966 13.801895693547637 715.95018687082552 14.773251826456251 715.90450363797299 15.742993773474835 715.85181448862477 16.711183779733261 715.79233855932091 17.677884157450634 715.72627857367422 18.643157006759708 715.65382249406889 19.607063869988639 715.57514483767636 20.5696656008374 715.49040940356338 21.210569482182009 715.42998106645928 21.530823719600001 715.39880812715057 + 0 4 1.176620628259091 1 2.3532412565181819 1 3.5298618847772731 1 4.7064825130363639 1 5.8831031412954546 1 7.0597237695545463 1 8.236344397813637 1 9.4129650260727278 1 10.589585654331819 1 11.766206282590909 1 12.94282691085 1 14.119447539109093 1 15.296068167368183 1 16.472688795627274 1 17.649309423886365 1 18.825930052145456 1 20.002550680404546 1 21.179171308663637 1 22.355791936922728 1 23.532412565181819 1 24.709033193440909 1 25.8856538217 4 +7 0 0 3 25 23 0.61229536955177155 -10.335975904900003 0.61597084743420727 -10.359856902533151 0.62336370393392304 -10.404800564248035 0.63456870994426728 -10.464141472189546 0.64587913983655765 -10.515798084261659 0.6572858037546877 -10.560126134642799 0.66878017973248416 -10.597459943647932 0.68035447317366571 -10.628110133138295 0.69200154243845979 -10.65236547513037 0.70371486024793262 -10.670493632917427 0.71548846554543688 -10.682742198941577 0.72731691809571597 -10.689339653151221 0.73919525266736608 -10.69049634266633 0.75111893378788452 -10.686405455727217 0.7630838109559831 -10.677243997201357 0.77508607449582034 -10.663173763574424 0.78712221216007183 -10.644342318446631 0.79918896661081573 -10.620883966523611 0.81128329390233866 -10.592920733123451 0.82340232308848849 -10.560563323125452 0.83554331708503904 -10.523912156634376 0.84770363488110234 -10.483058118343047 0.85988069532134437 -10.438084375383957 0.86800819323543821 -10.40540426347977 0.87207387937437153 -10.388402487500002 + 0 4 1.176620628259091 1 2.3532412565181819 1 3.5298618847772731 1 4.7064825130363639 1 5.8831031412954546 1 7.0597237695545463 1 8.236344397813637 1 9.4129650260727278 1 10.589585654331819 1 11.766206282590909 1 12.94282691085 1 14.119447539109093 1 15.296068167368183 1 16.472688795627274 1 17.649309423886365 1 18.825930052145456 1 20.002550680404546 1 21.179171308663637 1 22.355791936922728 1 23.532412565181819 1 24.709033193440909 1 25.8856538217 4 +1 -1.5347553222714316e-08 3.3230662666028365e-10 2.1612292413782799e-11 1 +7 0 0 1 2 2 22.611802242924689 719.98845051877015 22.611802243018193 724.42672055129526 + 711.29269387900001 2 715.67736011299996 2 +7 0 0 3 25 23 5.1489511113342399 720.50745768933302 5.4114278819750252 720.60899049730051 5.9372631062245746 720.80761353487424 6.7282853406093963 721.09239294254814 7.5211906472803731 721.36417828623701 8.3156300624212651 721.62317090657302 9.1112778151786937 721.86959541541762 9.9078337962429242 722.10370104229776 10.705021548525917 722.32575799086953 11.502587450559638 722.53605506570921 12.30029958737566 722.73489690417773 13.097946727120855 722.92260127194243 13.895337306335723 723.09949631147663 14.692298464429248 723.26591778471982 15.488675129992965 723.42220630964505 16.28432917075083 723.56870459992126 17.079138613802652 723.70575471493976 17.872996946810993 723.83369531956919 18.665812491840537 723.95285898009354 19.457507907069868 724.06356941568868 20.248019628271848 724.16613901982657 21.037297963908287 724.26086548680087 21.825305185910938 724.34803189481511 22.349782753139827 724.40127330240807 22.611802242900001 724.42672055124547 + 6.1544842320599997 4 7.0817575424754544 1 8.0090308528909091 1 8.9363041633063638 1 9.8635774737218185 1 10.790850784137273 1 11.718124094552728 1 12.645397404968183 1 13.572670715383637 1 14.49994402579909 1 15.427217336214545 1 16.354490646629998 1 17.281763957045456 1 18.209037267460907 1 19.136310577876365 1 20.063583888291816 1 20.990857198707275 1 21.918130509122726 1 22.845403819538181 1 23.772677129953635 1 24.69995044036909 1 25.627223750784545 1 26.554497061199999 4 +7 0 0 3 25 23 0.44526559187253206 -7.6100000275000035 0.4472095159854646 -7.6794916985470252 0.45117029706003625 -7.8154558577002318 0.45732198471203572 -8.0104833343095923 0.46367592107637096 -8.1967234158841276 0.47022378570163337 -8.3743334381669285 0.47695725791983706 -8.5434854828211613 0.48386803721368471 -8.7043671081771397 0.49094787226694836 -8.8571788770529185 0.49818858766223217 -9.0021327427963254 0.50558211117783802 -9.1394502053675986 0.51312050087350913 -9.2693605290382823 0.52079597214996098 -9.3920989435844504 0.5286009246899569 -9.5079048498864225 0.53652796925040991 -9.6170200244079833 0.54456995426107291 -9.7196868237513172 0.55271999214235645 -9.816146390029548 0.56097148541142572 -9.9066368528929427 0.5693181520396966 -9.991391544123184 0.5777540517763371 -10.070637165301303 0.58627360674204854 -10.144592130613322 0.59487164098155199 -10.213464256031054 0.60354334653490027 -10.277450887854885 0.60937079598968902 -10.316970247573533 0.61229536955177155 -10.335975904900003 + 6.1544842320599997 4 7.0817575424754544 1 8.0090308528909091 1 8.9363041633063638 1 9.8635774737218185 1 10.790850784137273 1 11.718124094552728 1 12.645397404968183 1 13.572670715383637 1 14.49994402579909 1 15.427217336214545 1 16.354490646629998 1 17.281763957045456 1 18.209037267460907 1 19.136310577876365 1 20.063583888291816 1 20.990857198707275 1 21.918130509122726 1 22.845403819538181 1 23.772677129953635 1 24.69995044036909 1 25.627223750784545 1 26.554497061199999 4 +1 0.51055605893846168 3.2082425605040044e-10 -1.2378442138820185e-11 1 +7 0 0 1 2 2 -6.6325513106734636e-12 741.80333741469815 -6.7937222236392864e-11 746.63002192098747 + 757.52066139399994 2 762.44961365899997 2 +7 0 0 1 2 2 2.0241275683126031e-10 762.80612899137168 0.51055604963783974 762.44961365866038 + 0 2 0.90711976005399997 2 +7 0 0 3 4 2 64.3596629181 4.3573662280999983 64.560660300600006 4.4355249934999996 64.753892482099999 4.5135600808999996 64.9559618981 4.5977859141999993 + 0 4 0.90711976005399997 4 +1 -1.0282713447929624e-08 1.4779288903810084e-10 1.3745536800062849e-11 1 +7 0 0 1 2 2 10.906951009830118 759.77766033529542 10.90695100990269 765.06600713621447 + 757.53340308999998 2 762.80612899100004 2 +7 0 0 3 47 45 0 762.72316676001765 0.067180341546670755 762.79454846127385 0.20285462570916926 762.93659834584685 0.41047838463026709 763.14731226977381 0.62239408486701486 763.35546471207044 0.83875305796823996 763.56078589757738 1.0596890002853319 763.76296431279138 1.285316043103248 763.96164296803897 1.5157302048288859 764.1564240129768 1.7510099797258902 764.34687113086113 1.9912170913428329 764.53251246297953 2.2363975426074783 764.71284363504185 2.4865814042285828 764.88732985004197 2.741787438829014 765.05541162092618 3.0020082723487675 765.21649592279562 3.2671135180904805 765.36990719131597 3.5368683037389128 765.51492417044699 3.8109352861649564 765.65080223592634 4.0888788897220101 765.77679805039475 4.3701696698717356 765.89219408543488 4.6541862776895604 765.99632188042631 4.9402271345194784 766.08859104425676 5.2274854641929984 766.16849690626418 5.5150446463033935 766.23563775992955 5.8020525627112569 766.2898060238573 6.0877051804673448 766.33095603640311 6.3712578246154905 766.35919003842412 6.6520289785518738 766.37473920915545 6.9294060163228526 766.37794592816829 7.2028503367007497 766.369245589299 7.4719025661037035 766.34914839870908 7.7361876685252549 766.31822103947968 7.9954199427124832 766.27706820649792 8.249408168022665 766.22631410696351 8.4980599099033061 766.16658355819197 8.7413887275619686 766.09848409661254 8.9795097797988959 766.022583832392 9.2125247193489628 765.93941321029831 9.4405430049225174 765.84947689329908 9.6636813169124061 765.75325061281353 9.882064137459432 765.65118092033504 10.095824051181069 765.54368406261381 10.305102019677191 765.43114546006393 10.510048055396638 765.31391764888212 10.71082033442884 765.19232376637933 10.842000218060443 765.10853485660004 10.9069510097 765.0660071361209 + 0 4 0.33194074371136362 1 0.66388148742272723 1 0.99582223113409085 1 1.3277629748454545 1 1.659703718556818 1 1.9916444622681817 1 2.3235852059795454 1 2.6555259496909089 1 2.9874666934022724 1 3.319407437113636 1 3.6513481808249999 1 3.9832889245363634 1 4.3152296682477269 1 4.6471704119590909 1 4.9791111556704539 1 5.3110518993818179 1 5.6429926430931818 1 5.9749333868045449 1 6.3068741305159088 1 6.6388148742272719 1 6.9707556179386359 1 7.3026963616499998 1 7.6346371053613629 1 7.9665778490727268 1 8.2985185927840899 1 8.6304593364954538 1 8.9624000802068178 1 9.2943408239181817 1 9.6262815676295457 1 9.9582223113409079 1 10.290163055052272 1 10.622103798763636 1 10.954044542475 1 11.285985286186364 1 11.617926029897726 1 11.94986677360909 1 12.281807517320454 1 12.613748261031818 1 12.945689004743182 1 13.277629748454544 1 13.609570492165908 1 13.941511235877272 1 14.273451979588636 1 14.6053927233 4 +7 0 0 5 15 5 58.790467833500003 6.1196662225999994 58.743928188400005 5.7627668874999998 58.725897337100001 5.4165248838999993 58.742695207899999 5.0834424455000011 58.8478538946 4.5546298500999995 59.115897339100002 4.1200365963000003 59.257493511700005 3.9611305913999999 59.734053203999999 3.6008568136000001 60.448353897899999 3.4501193522000015 60.981900156999998 3.4546719091 61.965827765599997 3.5854599006999983 63.012325480100003 3.8762667977999996 63.460156704900001 4.0209948392000001 63.9095398551 4.1823340890000011 64.3596629181 4.3573662280999983 + 0 6 3.88027937814 3 6.5910514190300002 3 11.2162442808 3 14.6053927233 6 +1 1.9244999051005916e-08 2.3635493562323973e-10 -2.5345057707781739e-11 1 +7 0 0 1 2 2 0.81548831976870517 761.77706325268059 0.81548831970107027 764.46669144580198 + 760.03967282099995 2 762.72316676000003 2 +1 1.5707963267948966 0 0 1 +1 38 15 0 1 +1 0 0 0 1 +1 32 15 0 1 +1 -4.7123889803846897 -14 1 0 +1 -4.4505895925850529 45.254833995939038 1 0 +1 1.5707963267948968 0 0 1 +1 106 15 0 1 +1 0 0 0 1 +1 32 15 0 1 +1 0 -14 1 0 +1 0.26179938779964423 45.254833995939038 1 4.5234555469703556e-15 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 -1.5707963267948966 -40.760416520999996 1 0 +2 -105.566941595 75.81028311 -1 0 0 1 4 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 -1.5707963267948966 -32.760416520999996 1 0 +2 105.566941595 -75.81028311 1 -0 -0 -1 4 +8 1.5707963267948966 2.0707963282287793 +1 2.070796327932936 0 -1 -0 +7 0 0 1 2 2 0 0 2.6415926547262671 0 + 2.0707963282287793 2 4.7123889803846897 2 +1 -1.5707963267948966 -40.760416520999996 1 0 +2 -105.566941595 75.81028311 -1 0 0 1 4 +1 -1.5707963267948966 -32.760416520999996 1 0 +2 105.566941595 -75.81028311 1 -0 -0 -1 4 +8 4.7123889803846897 5.212388978952843 +1 -2.0707963256584225 0 1 0 +1 8.3539816339752662 2.6510274915659752e-09 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 -1.5707963267948966 -40.760416520999996 1 0 +2 -140.86673680999999 -40.499889463999999 -1 0 0 1 4 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 -1.5707963267948966 -32.760416520999996 1 0 +2 140.86673680999999 40.499889463999999 1 -0 -0 -1 4 +8 1.5707963267948966 2.0707963277310424 +1 1.0707963263000404 0 1 0 +7 0 0 1 2 2 3.1415926535897931 0 0.49999999950698915 0 + 2.0707963277310424 2 4.7123889803846897 2 +1 -1.5707963267948966 -40.760416520999996 1 0 +2 -140.86673680999999 -40.499889463999999 -1 0 0 1 4 +1 -1.5707963267948966 -32.760416520999996 1 0 +2 140.86673680999999 40.499889463999999 1 -0 -0 -1 4 +8 4.7123889803846897 5.2123889794506972 +1 5.2123889798916787 0 -1 -0 +1 -5.2123889803856134 5.6571354711952119e-09 1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 -1.5707963267948966 -40.760416520999996 1 0 +2 -69.937309626300006 -77.500110535999994 -1 0 0 1 4 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 -1.5707963267948966 -32.760416520999996 1 0 +2 69.937309626300006 77.500110535999994 1 -0 -0 -1 4 +8 1.5707963267948966 2.0707963275693708 +1 1.0707963265766054 0 1 0 +8 2.0707963275693708 4.7123889803846897 +1 5.2123889811591635 0 -1 -0 +1 -1.5707963267948966 -40.760416520999996 1 0 +2 -69.937309626300006 -77.500110535999994 -1 0 0 1 4 +1 -1.5707963267948966 -32.760416520999996 1 0 +2 69.937309626300006 77.500110535999994 1 -0 -0 -1 4 +8 4.7123889803846897 5.2123889796122453 +1 5.2123889801679679 0 -1 -0 +1 -5.2123889803854739 8.2704749179961081e-09 1 0 +1 0.26179938779963008 44.547727214752491 -1.9626155733547325e-16 -1 +1 136.70760660899998 1 1 0 +7 0 0 1 2 2 408.47331051952335 -8.996047030120236e-06 408.47331081742442 1.4267998951234737 + -0.70710674081075076 2 0.70711563416344703 2 +1 75.707606608999996 108 1 0 +1 0.26179938779964412 44.547727214752491 1.9626155733547226e-16 -1 +1 -55.239506887399997 1 1 0 +1 1.8325957145945408 44.547727214752499 0 -1 +1 -60 -16.239506887400001 0 1 +1 4.450589592585052 54.447222151364151 0 1 +1 255.89825586199998 0.70710678118654757 0 1 +1 -40.707606608999996 1 1 0 +1 215.190649253 0 1 0 +1 1.8325957145945304 44.547727214752491 0 -1 +1 319.89825586199998 0.70710678118654757 0 1 +1 75.707606608999996 40 -1 0 +1 215.190649253 1.4142135623730951 1 0 +1 7.5921822461748514 55.154328932550705 -1 0 +2 35 1 0 -1 1 0 39 +1 7.5921822461748505 53.740115370177598 -1 4.5234555469703193e-15 +1 -1.5707963267948966 -14.610000000200007 1 2.2617277734851683e-15 +1 6.0213859193799539 54.447222151364151 6.2803698347350809e-16 1 +1 192.93806182200001 0.70710678118654757 -3.7682219008375888e-15 1 +1 4.450589592585052 78.488852711706784 0 1 +1 190.93806182200001 0.70710678118654757 -0 1 +1 175.6985549346 0 1 0 +1 -15.239506887400001 1 1 0 +1 74 -16.239506887400001 0 1 +1 175.6985549346 1.4142135623730951 1 0 +1 7.5921822461748496 79.195959492893294 -1 2.7140733281821949e-14 +2 18 -1 -1 0 -0 -1 56 +1 7.5921822461748496 77.781745930520231 -1 1.809382218788129e-14 +1 -1.5707963267948966 -14.61000000019996 1 -4.0711099922732994e-14 +1 6.021385919379953 78.488852711706784 6.2803698347351125e-16 1 +1 157.48304264399999 0.70710678118654757 -5.0242958677867844e-15 1 +1 0.26179938779963713 44.547727214752491 -1.1775693440128337e-16 -1 +1 93.483042643999994 0.70710678118654757 0 1 +1 153.70760660899998 1 1 0 +1 215.190649253 0 1 0 +1 75.707606608999996 -57 1 0 +1 215.190649253 1.4142135623730951 1 0 +1 0.26179938779964418 44.547727214752491 -3.9252311467094453e-17 -1 +1 109.7604931126 1 1 0 +1 1.8325957145945408 44.547727214752491 1.570092458683786e-16 -1 +1 -77 -16.239506887400001 0 1 +1 5.1487212933834252 142.12846301849606 0 1 +1 239.64712221459999 0.70710678118654757 0 1 +1 -15.707606608999996 1 1 0 +1 215.190649253 0 1 0 +1 1.8325957145945337 44.547727214752499 1.5700924586837702e-16 -1 +1 336.89825586199998 0.70710678118654757 0 1 +1 75.707606608999996 -125 -1 0 +1 215.190649253 1.4142135623730951 1 0 +1 8.2903139469732174 142.83556979968284 -1 -3.2568879938038943e-13 +2 51.251133647400003 -226 0 -1 1 0 101 +1 8.2903139469732174 141.42135623730928 -1 -1.6284439969051127e-13 +1 -2.9670597283899083 -42.748966629700703 1 5.6995539891792083e-13 +1 5.3232542185821261 142.12846301868296 5.6523328512792653e-15 1 +1 211.48558345321462 0.70710678132579186 -4.3983336464877232e-14 1 +7 0 0 1 2 2 307.6387844998593 -4.5088199840392917e-10 306.91981940813048 1.4427787334084599 + -0.80599647588199996 2 0.80599647588199996 2 +7 0 0 1 2 2 293.41378940942104 0.0005889351081549421 292.63907246452879 1.414213562246843 + -0.80599647588199996 2 0.80599647588199996 2 +1 206.39252150799999 -30.283853914600002 -0.46327432155297421 -0.88621493047095057 +1 182.40970937104731 1.4427787333399751 1 4.7790412883187849e-17 +7 0 0 1 2 2 70.86811532108419 1.429201578254478 69.8264207295571 0.00043302285136803675 + -0.88409662744600004 2 0.88409662744600004 2 +7 0 0 1 2 2 135.62792581698019 1.4427787333794697 134.60572382468521 -2.2794210963184014e-11 + -0.88409662744600004 2 0.88409662744600004 2 +1 18.271261898673494 158.67029261608954 0.48377002034767214 -0.87519515961459304 +1 182.40970937089224 -3.8688895653137538e-10 1 4.7790412883187849e-17 +1 -4.4505895925850458 43.840620433565462 1 1.1760984422122923e-13 +2 -46 -94 0 -1 1 0 31 +1 -4.4505895925850529 43.840620433565746 1 4.5234555469703157e-14 +2 -46 -88 -1 0 -0 -1 31 +1 1.5707963267948977 -13.495878314800002 0 1 +1 0 2.1141216854000007 0 1 +7 0 0 1 2 2 1.1950323248427241 668.44458136358628 -3.9570430613978089e-12 668.35204699985911 + 0 2 1.4354019036900001 2 +7 0 0 5 6 2 2 3.0762824050000006 1.842210429489 3.0858900025000011 1.6845247387610001 3.0962243228000013 1.5269406176 3.1072850737000017 1.369494022781 3.1190690224000015 1.2121824795130001 3.1315753848000014 + 0 6 1.4354019036900001 6 +1 0 -13.571858797700003 0 1 +1 2 2.0381412025000003 0 1 +1 -4.4505895925850458 43.840620433565419 1 1.2665675531517025e-13 +2 -29 71 0 -1 1 0 31 +1 -4.45058959258506 43.840620433566102 1 -3.6187644375762365e-14 +2 -29 77 -1 0 -0 -1 31 +1 476.25355409100001 -6.3857836088102277e-15 0 1 +7 0 0 1 2 2 255.86437531388887 -3.82982534574694e-11 255.86437531387239 1.429201578190316 + 0 2 1.4267998955500001 2 +1 0 1.4267998955500651 1 -1.5396958829233102e-16 +7 0 0 5 9 3 18.1787324529 107.99998748 25.876099490800001 107.996389385 33.573036743000003 107.246273407 41.173027957199999 105.749772338 50.349714562000003 102.99411222000001 59.0919832636 99.177582976099998 60.7627425899 98.401553426999996 62.413421073999999 97.587761994100006 64.044336139699993 96.7361426107 + 408.473308997 6 463.17647948799998 3 476.25355409100001 6 +1 195.74032892608898 1.4292015780277865 1 1.1307675440731896e-16 +1 117.35138826799999 68.928605009699993 -0.8866178397970621 0.46250276340103236 +1 75.707606608999996 -127.754248236 0.98480775301218992 -0.1736481776670335 +1 218.51031187986902 1.4142135620731038 1 -7.6327832942973201e-17 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 1.3201464314581883 -71.658673026198869 0 -1 +7 0 0 8 9 2 1.4681834621102421 -73.658673020999544 1.4681834282093116 -74.658673020999601 1.4681833943091078 -75.658673020989227 1.4681833604045096 -76.658673020603601 1.4681833265067326 -77.658673021069262 1.4681832926007701 -78.658673020661809 1.4681832587059489 -79.658673021025606 1.4681832248037299 -80.658673020999913 1.4681831909027994 -81.65867302099997 + 1.9999999965576745 9 9.9999999971959088 9 +1 -3.1415926535897931 -81.658673020999998 1 0 +2 120 -18.631168425399999 -1 0 -0 -1 15 +1 4.4617390848864327 9.999999994801172 -1 0 +1 3.0389798918060378 -71.658673026076997 0 -1 +1 7.6033317384762258 9.999999994801172 -1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 1.3201464311350908 -71.658673026198869 0 -1 +1 7.6033317384762258 9.999999994801172 -1 0 +7 0 0 8 9 2 4.6097762208199651 -73.658673021000155 4.6097762375492373 -74.658673021000112 4.6097762542835881 -75.658673020923743 4.609776270994189 -76.658673020865535 4.6097762877252535 -77.658673020545393 4.6097763044490421 -78.658673020952847 4.609776321195568 -79.658673020938295 4.6097763379248677 -80.658673020999856 4.6097763546541399 -81.658673020999814 + 1.9999999953684693 9 9.999999992949224 9 +1 3.1415926535897931 -81.658673020999998 1 0 +2 120 -18.631168425399999 -1 0 -0 -1 15 +1 1.3201464312966393 9.999999994801172 -1 0 +1 4.4617390848864327 9.999999994801172 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 1.3201464314551921 -71.658673015145609 0 -1 +7 0 0 8 9 2 1.4681834621104259 -73.658673021000396 1.4681834282094928 -74.658673021000268 1.4681833943075162 -75.658673020989227 1.4681833604081476 -76.658673020952847 1.4681833265076421 -77.658673020545393 1.4681832926016796 -78.658673021011055 1.468183258702993 -79.658673020952847 1.4681832248038937 -80.65867302099953 1.4681831909029606 -81.658673020999402 + 2.0000000076123405 9 10.000000008249481 9 +1 -3.1415926535897931 -81.658673020999998 1 0 +2 -43 -91 -1 0 -0 -1 15 +1 4.4617390848848659 10.000000005854442 -1 0 +1 3.0389798918060684 -71.658673015023723 0 -1 +1 7.603331738474659 10.000000005854442 -1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 1.3201464311349544 -71.658673015145595 0 -1 +1 7.603331738474659 10.000000005854442 -1 0 +7 0 0 8 9 2 4.6097762208166948 -73.658673020998691 4.609776237545967 -74.658673020998876 4.6097762542640339 -75.658673020974675 4.6097762710214738 -76.658673020894639 4.6097762876997876 -77.658673021069262 4.6097763044745079 -78.658673021069262 4.6097763211846541 -79.658673021011055 4.6097763379215975 -80.658673020999984 4.6097763546508697 -81.658673021000169 + 2.0000000064211911 9 10.000000004003761 9 +1 3.1415926535897931 -81.658673020999998 1 0 +2 -43 -91 -1 0 -0 -1 15 +1 1.320146431295073 10.000000005854442 -1 0 +1 4.4617390848848659 10.000000005854442 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 1.5253719541808366 71.658673025008198 0 1 +7 0 0 8 9 2 1.4681834755810692 -73.65867302099997 1.4681834940321195 -74.658673021000126 1.4681835124822555 -75.658673021011055 1.4681835309356757 -76.65867302074912 1.4681835493838662 -77.658673020720016 1.4681835678356947 -78.658673020778224 1.4681835862868411 -79.658673020996503 1.4681836047384202 -80.658673021001107 1.4681836231894705 -81.658673021001263 + 1.9999999962057644 9 9.9999999939569211 9 +1 -3.1415926535897931 -81.658673020999998 1 0 +2 -26 74 -1 0 -0 -1 15 +1 -1.6162206991371215 -9.9999999959918515 1 0 +1 3.0389798916984319 -71.658673024885829 0 1 +1 -4.7578133527269886 -9.9999999959918515 1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 1.525371954724432 71.658673025008184 0 1 +1 -4.7578133527269886 -9.9999999959918515 1 0 +1 4.6097766661593322 -71.658673027248255 0 1 +1 3.1415926535897931 -81.658673020999998 1 0 +2 -26 74 -1 0 -0 -1 15 +1 1.5253719544525974 -9.9999999959918515 1 0 +1 -1.6162206991371215 -9.9999999959918515 1 0 +1 0.17453292519953775 -39.2489666297 0 1 +1 8.7488663525999968 4.5 0 1 +1 30.335781766183128 -5.170477379579097e-10 1.526271790612774e-11 1 +7 0 0 1 2 2 5.6094706415082824e-11 761.7950641653739 8.3936995363504197e-11 763.59504961265031 + 764.76336847799996 2 766.57036749700001 2 +7 0 0 1 2 2 30.335781777883088 766.57036749680276 28.672171452474885 764.80023051389333 + 0 2 2.7419015286600001 2 +7 0 0 3 4 2 58.873047122800003 6.7401828608999992 58.930000347399996 7.1590799909999987 58.9871072957 7.5790358773000008 59.044360741700004 8.0000000008999983 + 0 4 2.7419015286600001 4 +7 0 0 1 2 2 0.81548831970109947 764.46669144580198 8.3916801125563756e-11 763.59504961265031 + 0 2 1.3309125799499999 2 +7 0 0 3 4 2 58.790467833500003 6.1196662225999994 58.817099938799998 6.3238996912000012 58.8454420805 6.5371448795000013 58.873047122800003 6.7401828608999992 + 0 4 1.3309125799499999 4 +7 0 0 3 25 23 0 746.63002192108615 0.10213678318348481 746.55560091633345 0.30628698743368543 746.40665165537962 0.6121425220939597 746.1829063344918 0.91762860086514764 745.95883990985669 1.2227455354058818 745.73445270430398 1.5274936347949803 745.50974503897055 1.8318732051381683 745.28471723312089 2.1358845497084196 745.0593696043361 2.439527968941372 744.83370246859499 2.7428037604689659 744.60771614039118 3.0457122191424069 744.38141093283116 3.3482536370557323 744.1547871577385 3.6504283035701963 743.92784512575292 3.952236505337654 743.70058514643267 4.2536785263202956 743.47300752834724 4.5547546478157992 743.24511257917766 4.855465148474897 743.01690060580802 5.1558103043256844 742.78837191441971 5.4557903887858545 742.55952681058113 5.7554056727050744 742.33036559934214 6.0546564242989476 742.10088858531083 6.3535429094843829 741.87109607277205 6.5525578969664329 741.71769093470493 6.6520047672866909 741.64093588391881 + 0 4 0.55110715152678447 1 1.1022143030535689 1 1.6533214545803534 1 2.2044286061071379 1 2.7555357576339223 1 3.3066429091607068 1 3.8577500606874913 1 4.4088572122142757 1 4.9599643637410598 1 5.5110715152678447 1 6.0621786667946296 1 6.6132858183214136 1 7.1643929698481976 1 7.7155001213749825 1 8.2666072729017674 1 8.8177144244285515 1 9.3688215759553355 1 9.9199287274821195 1 10.471035879008905 1 11.022143030535689 1 11.573250182062473 1 12.124357333589257 4 +7 0 0 3 4 2 64.9559618981 4.5977859141999993 67.663388317400006 5.7262841956999999 70.377450535660003 6.8605155348000011 73.096942813170003 8.0000008624999985 + 0 4 12.1243615709 4 +1 0 -11.110000000200003 0 1 +1 96 4.5 0 1 +7 0 0 3 25 23 0.93259656483551434 -10.105325689200004 0.93802065932808265 -10.07737448035995 0.94884093487233845 -10.025677189622071 0.96498720657615633 -9.9605685871107692 0.98104891896124446 -9.9077195079903611 0.99702571177828059 -9.8669513124632893 1.0129172695690105 -9.8380848169388386 1.0287233314804827 -9.8209402174533604 1.0444436943570119 -9.8153371101897537 1.0600782169454999 -9.8210944859792786 1.0756268231270747 -9.8380307317747544 1.0910895047481852 -9.8659636302559139 1.1064663239128194 -9.9047103599351161 1.1217574147893712 -9.9540874951286362 1.1369629849348579 -10.013911005966197 1.1520833161551223 -10.083996258381376 1.167118764910356 -10.164158014140462 1.1820697622994261 -10.254210430736604 1.1969368135710532 -10.353967061784514 1.2117204974287681 -10.463240855547271 1.2264214642068885 -10.581844160434541 1.2410404364342624 -10.709588704482968 1.2555781987332149 -10.846285671936128 1.2652164834692325 -10.943258835608441 1.2700223781359949 -10.993174312400004 + 0 4 1.5521225531136364 1 3.1042451062272729 1 4.6563676593409093 1 6.2084902124545458 1 7.7606127655681822 1 9.3127353186818187 1 10.864857871795454 1 12.416980424909092 1 13.969102978022729 1 15.521225531136364 1 17.07334808425 1 18.625470637363637 1 20.177593190477275 1 21.729715743590909 1 23.281838296704546 1 24.833960849818183 1 26.386083402931821 1 27.938205956045458 1 29.490328509159092 1 31.042451062272729 1 32.594573615386366 1 34.1466961685 4 +7 0 0 3 25 23 0 695.48022611001193 0.41886081504524209 695.43069514019714 1.2587286856508457 695.33832707791146 2.5245117995751083 695.21966341166535 3.7958147417970274 695.12069554380275 5.0721902642588423 695.04122882934325 6.3532004105178714 694.98106707217869 7.6384178922524759 694.940012195078 8.9274258571924179 694.91786414586966 10.219818165152041 694.91442076222518 11.515199597515075 694.9294776679892 12.813186146144332 694.96282817989277 14.113405334190526 695.01426322858651 15.415496572876275 695.08357129108526 16.719111544256329 695.17053833348666 18.023914604087636 695.27494776225501 19.329583196519135 695.39658038273001 20.635808278509941 695.53521436250162 21.942294730689003 695.69062520111686 23.248761811695061 695.8625856934799 24.55494341512216 696.05086592720511 25.86058900217088 696.25523315709609 27.165461928119889 696.47545213585829 28.034718902718616 696.63267320129887 28.469145972100002 696.71384616720547 + 0 4 1.5521225531136364 1 3.1042451062272729 1 4.6563676593409093 1 6.2084902124545458 1 7.7606127655681822 1 9.3127353186818187 1 10.864857871795454 1 12.416980424909092 1 13.969102978022729 1 15.521225531136364 1 17.07334808425 1 18.625470637363637 1 20.177593190477275 1 21.729715743590909 1 23.281838296704546 1 24.833960849818183 1 26.386083402931821 1 27.938205956045458 1 29.490328509159092 1 31.042451062272729 1 32.594573615386366 1 34.1466961685 4 +1 29.800315284890129 -1.0288658813806251e-10 -1.4424525595156784e-12 1 +7 0 0 1 2 2 3.957746940500264e-11 652.32018225164916 2.5763849199610484e-11 661.45733572319193 + 659.91367755700003 2 669.15719433599998 2 +7 0 0 3 25 23 29.800315283900002 669.15719433572588 29.364475036095758 669.16651064058135 28.493269428431418 669.18295710323503 27.187775465192519 669.20128072283705 25.883485835083299 669.21347738775967 24.580290071411824 669.21974258253761 23.278078290024219 669.22025630148755 21.976741656245252 669.21518097677608 20.67617288957215 669.20466224422682 19.376266678509197 669.18882904141901 18.07692004668252 669.16779397029813 16.778032665333825 669.14165366781992 15.479507118753284 669.11048924700344 14.18124912522423 669.07436678560964 12.88316771615886 669.03333786272685 11.585175375170934 668.98744013732471 10.28718813783345 668.9366979652383 8.9891256530485038 668.88112304778485 7.6909112023436936 668.82071511556148 6.3924716865852611 668.75546261216641 5.0937375361581836 668.68534348623746 3.7946426955597414 668.61032566280414 2.495124101086855 668.53036876870908 1.6284565655572929 668.47373706066844 1.1950323248427177 668.44458136358617 + 0 4 1.5612287948999999 1 3.1224575897999998 1 4.6836863846999996 1 6.2449151795999995 1 7.8061439744999994 1 9.3673727693999993 1 10.928601564299999 1 12.489830359199999 1 14.051059154099999 1 15.612287948999999 1 17.173516743899999 1 18.734745538799999 1 20.295974333699998 1 21.857203128599998 1 23.418431923499998 1 24.979660718399998 1 26.540889513299998 1 28.102118308199998 1 29.663347103099998 1 31.224575897999998 1 32.785804692900001 1 34.347033487799997 4 +7 0 0 3 25 23 0.49906734639575673 -12.970853313200003 0.49158882728802528 -12.97562219755992 0.4766127632392238 -12.983961763170379 0.4540968944086114 -12.992976129928286 0.43153465738063623 -12.998598369031217 0.40893110735430149 -13.000920042318269 0.38629110054940108 -13.000025309683991 0.36361928551524109 -12.995989886697403 0.34092013847263841 -12.988881323907091 0.31819798808532096 -12.978758932001593 0.29545704409935891 -12.965673801862803 0.27270142578065021 -12.949668799192121 0.24993519103281356 -12.930778565952243 0.22716236574610144 -12.909029519973942 0.20438697327955954 -12.884439855087154 0.18161306388851819 -12.857019540989874 0.15884474391032313 -12.826770323641419 0.1360862046070766 -12.793685723820619 0.11334175022614756 -12.757751042499624 0.090615826119024231 -12.71894334079054 0.067913042999286799 -12.67723151478509 0.045238211209511776 -12.632576016249393 0.022596332509208214 -12.584929895005097 0.0075272738936273589 -12.551133237475074 0 -12.533717595200002 + 0 4 1.5612287948999999 1 3.1224575897999998 1 4.6836863846999996 1 6.2449151795999995 1 7.8061439744999994 1 9.3673727693999993 1 10.928601564299999 1 12.489830359199999 1 14.051059154099999 1 15.612287948999999 1 17.173516743899999 1 18.734745538799999 1 20.295974333699998 1 21.857203128599998 1 23.418431923499998 1 24.979660718399998 1 26.540889513299998 1 28.102118308199998 1 29.663347103099998 1 31.224575897999998 1 32.785804692900001 1 34.347033487799997 4 +1 40.962673948392307 -6.7916516854893416e-10 4.6058045015608403e-11 1 +7 0 0 1 2 2 -3.3497839742588219e-11 652.72066405130602 1.3669215141141945e-11 653.78757318431838 + 652.927845929 2 653.99509371199997 2 +7 0 0 3 25 23 40.9626739785 653.99509371192812 40.3567828990926 654.29269185439125 39.135260217905355 654.86286893489637 37.279960276343076 655.64488996398563 35.407979670718284 656.35492799046881 33.525200027409277 656.99617461726848 31.636637493967154 657.57272739218536 29.746095495008746 658.08943150029074 27.855648725356023 658.55147061684545 25.966565051155026 658.96390245049179 24.080287423235827 659.33129500868017 22.198108048910626 659.6578367281661 20.321080032615825 659.9473590481507 18.44985562379059 660.20336597085611 16.584628597130116 660.42903445601485 14.724807707120377 660.62721969297058 12.869909197258968 660.80034904550268 11.019936215615212 660.95053137808168 9.1745238474677731 661.07965708092172 7.3332267015977779 661.18937512066975 5.4955353453469753 661.2811098337703 3.6609628288449616 661.35607347467976 1.8290790827114545 661.41530783389715 0.60945411435490993 661.44487886688216 0 661.4573357231983 + 0 4 2.1614808698636363 1 4.3229617397272726 1 6.4844426095909089 1 8.6459234794545452 1 10.807404349318182 1 12.968885219181818 1 15.130366089045454 1 17.29184695890909 1 19.453327828772728 1 21.614808698636363 1 23.776289568499998 1 25.937770438363636 1 28.099251308227274 1 30.260732178090908 1 32.422213047954543 1 34.583693917818181 1 36.745174787681819 1 38.906655657545457 1 41.068136527409088 1 43.229617397272726 1 45.391098267136364 1 47.552579137000002 4 +7 0 0 3 25 23 1.0568624444628327 -8.2539728217000032 1.0525371086294786 -8.4450553060449423 1.0431609707565497 -8.8107328566164664 1.0270836462267128 -9.311207427835086 1.0091476859168165 -9.7647181400313769 0.98953836811965867 -10.173542003171859 0.96844314771966467 -10.540476745726084 0.94604242942420913 -10.868749376325214 0.92249262566252654 -11.16179718474166 0.89793201574249037 -11.422926360231083 0.87249125819857742 -11.655132763640465 0.84628974173632399 -11.861149169401509 0.81943454863284659 -12.043451403070375 0.79201835342993654 -12.204276729854001 0.76411865315681371 -12.345634343643965 0.73579262126586498 -12.469335203033147 0.70709085225225277 -12.576941432059394 0.67806562982300178 -12.66977989839514 0.64875837692694449 -12.749023625213178 0.61920446624957781 -12.81569028309238 0.58943407132266135 -12.870660619725646 0.55947411326460184 -12.914688074990432 0.52934971482412096 -12.948423716765491 0.50917410121070583 -12.964400377856153 0.49906734639575673 -12.970853313200003 + 0 4 2.1614808698636363 1 4.3229617397272726 1 6.4844426095909089 1 8.6459234794545452 1 10.807404349318182 1 12.968885219181818 1 15.130366089045454 1 17.29184695890909 1 19.453327828772728 1 21.614808698636363 1 23.776289568499998 1 25.937770438363636 1 28.099251308227274 1 30.260732178090908 1 32.422213047954543 1 34.583693917818181 1 36.745174787681819 1 38.906655657545457 1 41.068136527409088 1 43.229617397272726 1 45.391098267136364 1 47.552579137000002 4 +7 0 0 3 25 23 0 653.7875731843252 0.028532012838707047 653.77296659272156 0.085573468726900526 653.74369945185549 0.17106780507619768 653.69963737995602 0.2564941679660146 653.65541445778661 0.34185238893390946 653.61103120283417 0.42714227217489625 653.56648813712491 0.51236359096752881 653.52178578778478 0.59751608911485965 653.47692468674256 0.68259948103889745 653.43190537066414 0.76761345223785382 653.38672838081584 0.85255765964494146 653.34139426295087 0.9374317320145974 653.29590356717995 1.0222352703019835 653.2502568478485 1.1069678480452445 653.20445466340539 1.1916290117497708 653.1584975762745 1.2762182812719667 653.11238615271941 1.3607351502035632 653.06612096270896 1.4451790862741634 653.01970257977939 1.529549531685098 652.97313158089878 1.6138459037150954 652.92640854630326 1.6980675943175365 652.87953405944199 1.782213973502961 652.83250870649044 1.838260910225902 652.80105828715546 1.8662716073467536 652.78530812963595 + 0 4 0.10308389947565391 1 0.20616779895130782 1 0.30925169842696176 1 0.41233559790261565 1 0.51541949737826953 1 0.61850339685392353 1 0.72158729632957741 1 0.82467119580523129 1 0.92775509528088518 1 1.0308389947565391 1 1.1339228942321931 1 1.2370067937078471 1 1.3400906931835008 1 1.4431745926591548 1 1.5462584921348086 1 1.6493423916104626 1 1.7524262910861166 1 1.8555101905617704 1 1.9585940900374244 1 2.0616779895130781 1 2.1647618889887323 1 2.2678457884643861 4 +7 0 0 3 25 23 1.0568624444628327 -8.2539728217000032 1.0570750252671377 -8.2445911765589805 1.0574986046365067 -8.2257929480149308 1.0581292192027121 -8.1974911182558117 1.0587550715149034 -8.1690851293966027 1.0593761537930533 -8.1405753092802886 1.0599924582480571 -8.1119619857497742 1.0606039770804681 -8.083245486648087 1.0612107024808515 -8.054426139818128 1.0618126266297125 -8.0255042731028858 1.0624097416975335 -7.9964802143453184 1.0630020398447906 -7.9673542913883733 1.0635895132219768 -7.9381268320750236 1.0641721539696236 -7.9087981642482132 1.0647499542183279 -7.8793686157509173 1.0653229060887817 -7.8498385144260858 1.065891001691796 -7.8202081881166814 1.0664542331283386 -7.7904779646656399 1.0670125924895708 -7.7606481719159648 1.0675660718568598 -7.7307191377105964 1.0681146633019067 -7.700691189892459 1.0686583588864604 -7.6705646563045722 1.0691971506635736 -7.6403398647898477 1.0695530706699405 -7.6201247170574611 1.0697302107191369 -7.6100008761511191 + 0 4 0.10308389947565391 1 0.20616779895130782 1 0.30925169842696176 1 0.41233559790261565 1 0.51541949737826953 1 0.61850339685392353 1 0.72158729632957741 1 0.82467119580523129 1 0.92775509528088518 1 1.0308389947565391 1 1.1339228942321931 1 1.2370067937078471 1 1.3400906931835008 1 1.4431745926591548 1 1.5462584921348086 1 1.6493423916104626 1 1.7524262910861166 1 1.8555101905617704 1 1.9585940900374244 1 2.0616779895130781 1 2.1647618889887323 1 2.2678457884643861 4 +1 1.5707963267948959 0 0 1 +1 0 15.610000000200003 0 1 +1 0 12.237646832623554 1 0 +2 0 0 1 -1.1967035549642146e-13 1.1967035549642146e-13 1 7.600000000001538 +2 105.56694159045128 -75.810283106371116 -0.47942553860381565 -0.87758256189058437 -0.87758256189058437 0.47942553860381565 7.6000000000015362 +1 0 12.237646832623554 1 0 +2 0 0 1 1.1967035549642146e-13 -1.1967035549642146e-13 1 7.600000000001538 +2 105.56694159045128 -75.810283106371116 -0.47942553860381565 -0.87758256189058437 0.87758256189058437 -0.47942553860381565 7.6000000000015362 +1 0 12.237646832625515 1 0 +2 0 0 1 -1.1967035549641071e-13 1.1967035549641071e-13 1 7.6000000000014634 +2 69.937309625429407 77.500110540859168 0.47942553860381609 0.87758256189058415 -0.87758256189058415 0.47942553860381609 7.6000000000014607 +1 0 12.237646832625515 1 0 +2 0 0 1 1.1967035549641071e-13 -1.1967035549641071e-13 1 7.6000000000014634 +2 69.937309625429407 77.500110540859168 0.47942553860381609 0.87758256189058415 0.87758256189058415 -0.47942553860381609 7.6000000000014607 +1 0 12.237646832622737 1 0 +2 0 0 1 0 -0 1 7.6000000000014634 +2 105.40202321947254 59.000000001431545 0.47942553860381609 0.87758256189058415 -0.87758256189058415 0.47942553860381609 7.6000000000014607 +1 0 12.237646832622737 1 0 +2 0 0 1 0 -0 1 7.6000000000014634 +2 105.40202321947254 59.000000001431545 0.47942553860381609 0.87758256189058415 0.87758256189058415 -0.47942553860381609 7.6000000000014607 +1 0 12.237646832629173 1 0 +2 0 0 1 -1.1967035549639998e-13 1.1967035549639998e-13 1 7.6000000000020727 +2 140.86673680802232 40.499889468183483 0.47942553860388082 0.87758256189054884 -0.87758256189054884 0.47942553860388082 7.6000000000020727 +1 0 12.237646832629173 1 0 +2 0 0 1 1.1967035549639998e-13 -1.1967035549639998e-13 1 7.6000000000020727 +2 140.86673680802232 40.499889468183483 0.47942553860388082 0.87758256189054884 0.87758256189054884 -0.47942553860388082 7.6000000000020727 +1 7.600000000001728 0 -1 1.3619660954589108e-12 +1 -7.600000000001728 9.0949470177292824e-13 1 -1.3622158956394512e-12 +1 7.600000000001728 0 -1 -1.3619660954589108e-12 +1 -7.6000000000024102 0 1 1.3618550731564481e-12 +1 5.9495267451839595 0.61360762899935983 -0.48367652571531472 0.87524683288313732 +1 -7.6000000000028987 1.7119639039719914e-13 1 -1.3618550731564483e-12 +1 101.75838912608288 52.330372531062039 0.47942553860262105 0.87758256189123696 +1 109.04565731286311 65.66962747180105 -0.47942553860262088 -0.87758256189123707 +1 7.6000000000010459 -9.0949470177292824e-13 -1 1.3616885397027543e-12 +1 -7.6000000000026375 9.0949470177292824e-13 1 -1.3618828287320637e-12 +1 7.6000000000010459 9.0949470177292824e-13 -1 -1.3616885397027543e-12 +1 -7.6000000000010459 1.8189894035458565e-12 1 1.3614942506734449e-12 +1 -3.6853515189233832 4.7107926080434854 -0.48367652571530073 -0.8752468328831452 +1 101.92330749706161 -82.479910576741077 0.47942553860262072 0.87758256189123718 +1 -7.6000000000004899 -7.4096284663482948e-13 1 -1.3614664950978293e-12 +1 109.21057568384185 -69.140655636002066 -0.47942553860262094 -0.87758256189123718 +1 7.6000000000024102 9.0949470177292824e-13 -1 1.4356571487184051e-12 +1 -7.6000000000028649 9.0949470177292824e-13 1 -1.4359069488989458e-12 +1 7.6000000000024102 -9.0949470177292824e-13 -1 -1.4356571487184051e-12 +1 -7.6000000000021828 -9.0949470177292824e-13 1 1.4355738819915583e-12 +1 5.9495267451821103 0.61360762899126431 -0.48367652571531494 0.8752468328831372 +1 -7.6000000000024217 1.4210854715202004e-14 1 -1.4355738819915583e-12 +1 137.22310271463175 33.830261997813068 0.47942553860262105 0.87758256189123696 +1 144.51037090141381 47.169516938552988 -0.47942553860262088 -0.87758256189123707 +1 7.600000000001728 9.0949470177292824e-13 -1 1.3619660954589108e-12 +1 -7.6000000000010459 0 1 -1.3622158956394512e-12 +1 7.600000000001728 -9.0949470177292824e-13 -1 -1.3619660954589108e-12 +1 -7.600000000001728 -1.8189894035458565e-12 1 1.3618550731564481e-12 +1 5.9495267451839595 0.61360762899794086 -0.48367652571531505 0.87524683288313709 +1 -7.600000000001967 7.1787020772262622e-13 1 -1.3618550731564483e-12 +1 66.293675532038833 70.830483070488299 0.47942553860262105 0.87758256189123696 +1 73.580943718819071 84.169738011229128 -0.47942553860262088 -0.87758256189123707 +1 -5.2123889803864545 7.1079862832072918 1 -2.8271597168548728e-16 +1 -5.2123889803864545 -8.881784197e-16 1 0 +1 0 3.553993141607557 0 1 +1 6.2831853071795862 3.553993141607557 0 1 +1 -5.212388980384306 0 1 0 +2 0 8 1 0 -0 1 10.265711135 +1 3.1415926535896666 3.553993141607557 -1.88057273662613e-14 1 +1 3.1415926535896666 3.553993141607557 -1.88057273662613e-14 1 +1 0 0.34999999999999998 0 1 +1 6.2831853071795862 0.34999999999999998 0 1 +1 3.1415926535915575 0.34999999999999998 0 1 +1 3.1415926535915575 0.34999999999999998 0 1 +1 -5.2123889803864545 0.40000000000000002 1 0 +1 -5.2123889803864545 3.141592653589802 1 -1.6962958301129236e-15 +1 1.0707963267948957 7.1079862832072882 1 2.8271597168580465e-16 +1 1.0707963267948957 -8.881784197e-16 1 0 +1 1.0707963267948961 0 1 0 +2 0 8 1 0 -0 1 10.265711135 +1 1.0707963267948957 0.40000000000000002 1 0 +1 -2.0707963267966614 3.1415926535897971 1 -1.8376538159556666e-15 +1 0 1.808331262509455e-11 0 1 +1 3.1415926535900751 1.8077317420761574e-11 4.8061715187112974e-15 1 +1 3.1415926535900751 1.8059553852367571e-11 4.806171518711239e-15 1 +1 0 1.8065549056700547e-11 0 1 +1 -5.2123889803849792 1.5707963267949125 1 -1.9083328088779348e-15 +2 0 11.500000000000002 1 0 -0 1 11.800000000000001 +1 -2.0707963267951865 1.5707963267948966 1 0 +2 -1.7763568394e-15 11.500000000000002 1 0 -0 1 11.800000000000001 +1 -5.2123889803845049 1.5707963267948706 1 3.8166656177564454e-15 +2 -1.23601678529e-15 11.499999999999998 1 0 -0 1 11.9 +1 -2.0707963267947114 1.5707963267949105 1 -3.8166656177564454e-15 +2 -1.23601678529e-15 11.499999999999998 1 0 -0 1 11.9 +1 3.7699111843081128 1.6444623440747819e-12 2.4596289536511505e-14 1 +1 0 1.6466827901240322e-12 0 1 +1 0.62831853071831956 1.6489032361732825e-12 2.4702308025893093e-14 1 +1 3.1415926535901546 1.6466827901240322e-12 2.4596289536511546e-14 1 +1 -2.0707963267952345 5.2359877559852102 1 -2.8271597168561557e-16 +1 -1.4424777960769388 2.0943951023904166 1 -5.6543194337129189e-16 +1 -5.2123889803850272 5.2359877559852084 1 0 +1 -5.2123889803850272 2.0943951023904148 1 0 +1 0 0 0 1 +1 3.1415926535896119 0 -2.8271597168804488e-15 1 +1 3.1415926535896119 0 -2.8271597168804488e-15 1 +1 0 0 0 1 +1 -5.2123889803831265 0.40000000000000002 1 0 +1 -5.2123889803831265 0 1 0 +1 1.0707963267948961 0.40000000000000002 1 0 +1 -2.0707963267933329 0 1 0 +1 3.1415926535895289 -3.7712055700467317e-12 1.1025922895796904e-14 1 +1 0 -3.7712055700467317e-12 0 1 +1 1.0707963267948957 4 1 0 +1 -2.0707963267952874 6.2831853071795862 1 0 +1 0 -3.7712055700467317e-12 0 1 +1 3.1415926535895289 -3.7712055700467317e-12 1.1025922895796904e-14 1 +1 -5.2123889803850805 4 1 0 +1 -5.2123889803850805 6.2831853071795862 1 0 +1 0 0.34999999999999998 0 1 +1 6.2831853071795862 0.34999999999999998 0 1 +1 3.1415926535882299 0.34999999999999998 0 1 +1 3.141592653588229 0.34999999999999998 0 1 +1 3.141592653590183 5 0 1 +1 3.141592653590183 5 0 1 +1 0 5 0 1 +1 6.2831853071795862 5 0 1 +1 1.0707963267948957 5 1 0 +1 -2.0613516725467402 15.311714550336266 1 0 +1 -5.2123889803850805 5 1 0 +1 -5.2123889803850805 15.311714550336225 1 5.6543194337122162e-15 +1 3.1510373078384712 16.547782527835931 -1.4371028711494499e-14 1 +1 0 16.547782527835924 0 1 +1 -2.0613516725467402 17.783850505329543 1 0 +2 -4.4408920984999998e-15 15.999999999999998 1 0 -0 1 10.453085056000001 +1 0.0094446543752079622 16.547782527835935 -7.1354122341508787e-14 1 +1 3.1415926537168448 16.547782527835945 -7.1316229980648576e-14 1 +1 -5.2123889803844818 17.783850505329504 1 5.6543194783985335e-15 +2 8.881784197e-16 16 1 0 -0 1 10.453085056000001 +1 0 0.75 0 1 +1 6.2831853071795862 0.75 0 1 +1 3.1415926535902567 0.75 0 1 +1 3.1415926535902567 0.75 0 1 +1 -5.2123889803851542 1 1 0 +1 -5.2123889803851542 3.1415926535898007 1 -1.4135798584280217e-15 +1 1.0707963267948961 1 1 0 +1 -2.0707963267953611 3.1415926535897989 1 -2.6858017310132402e-15 +1 7.3067840827778072 20.930360723121776 -1 9.0469110939406717e-15 +2 0 16.000000000000004 1 0 -0 1 14.800000000000001 +1 11.495574287563416 20.930360723121787 -1 3.3925916602286788e-15 +2 0 16.000000000000004 1 0 -0 1 14.800000000000001 +7 0 0 4 266 89 3.1415926535897931 1.6709637479565156 3.1356126786971843 1.6709637384906106 3.1296327038087228 1.6709637558458255 3.123652728889676 1.6709637479565262 3.1116676084393968 1.670963747956524 3.105662462874057 1.6709637479566186 3.0996573173087798 1.6709637479570965 3.0876470261836464 1.6709637479570849 3.0816418806182537 1.670963747956782 3.0756367350529845 1.6709637479563559 3.0638335175796407 1.6709637479563555 3.0580354456665395 1.6709637479582089 3.0522373737534312 1.6709637479560826 3.0404341578899157 1.6709637479560551 3.0344290139344849 1.6709637479581398 3.0284238699789912 1.670963747956147 3.0168277277670459 1.6709637479561559 3.0112367295058058 1.6709637479575641 3.0056457312447824 1.6709637479565886 2.9940495874230031 1.670963747956586 2.9880444418576233 1.6709637479575892 2.982039296292303 1.6709637479562593 2.9702360804286441 1.6709637479562525 2.9644380101252987 1.670963747957888 2.9586399398218775 1.6709637479560846 2.9468367239581479 1.6709637479560886 2.9408315783927126 1.6709637479576618 2.9348264328273244 1.6709637479567248 2.9230232153537727 1.6709637479567203 2.917225143440545 1.6709637479561965 2.911427071527366 1.670963747956691 2.8996238556637399 1.6709637479566815 2.8936187117083048 1.670963747956453 2.8876135677527111 1.6709637479565136 2.8758103518891671 1.6709637479564901 2.8700122799761392 1.6709637479577144 2.8642142080629927 1.6709637479561066 2.8528251395028685 1.6709637479561037 2.8472341428515731 1.6709637479570614 2.8416431462003611 1.6709637479567221 2.8300470039885566 1.6709637479567152 2.8240418584232927 1.670963747955595 2.8180367128580919 1.6709637479571895 2.8062334953847605 1.6709637479571851 2.8004354234715905 1.6709637479557542 2.7946373515584151 1.6709637479564146 2.7828341340849994 1.670963747956401 2.7768289885196786 1.6709637479573556 2.7708238429543699 1.6709637479564443 2.7590206270908046 1.670963747956439 2.7532225567875415 1.6709637479569797 2.7474244864841486 1.6709637479565183 2.7356212706205594 1.670963747956496 2.7296161250552942 1.6709637479571193 2.7236109794898984 1.670963747956175 2.7116006883647694 1.6709637479561674 2.7055955427994696 1.6709637479566932 2.6995903972341737 1.6709637479564294 2.6875801061091469 1.6709637479564148 2.6815749605439221 1.6709637479556521 2.6755698149786822 1.6709637479570441 2.66376659911516 1.6709637479570421 2.6579685288117538 1.6709637479542774 2.6521704585084844 1.6709637479572856 2.6403672426449432 1.670963747957281 2.6343620970795891 1.6709637479555883 2.6283569515144087 1.6709637479565906 2.616346660389433 1.6709637479565902 2.6103415148241353 1.6709637479561572 2.6043363692589847 1.6709637479558916 2.5925331533955358 1.6709637479558874 2.5867350830922424 1.6709637479564829 2.5809370127889015 1.6709637479564483 2.5695479442287588 1.6709637479564297 2.5639569459676994 1.670963747955996 2.5583659477066258 1.67096374795599 2.5467698038849274 1.6709637479559822 2.5407646583196102 1.670963747956556 2.534759512754321 1.6709637479563677 2.5227492232390363 1.6709637479563579 2.5167440792835603 1.6709637479560504 2.5107389353280238 1.6709637479557709 2.4987286458127906 1.6709637479557526 2.4927235002475916 1.6709637479578077 2.4867183546823055 1.6709637479561716 2.4747080635573124 1.6709637479561592 2.4687029179920819 1.6709637479559121 2.4626977724268135 1.6709637479557127 2.4511016302149362 1.6709637479557025 2.4455106335636243 1.6709637479569659 2.4399196369123586 1.6709637479561028 2.4283234947004755 1.6709637479561015 2.4223183491351969 1.6709637479567487 2.4163132035699015 1.6709637479567168 2.4043029124448458 1.670963747956699 2.3982977668796712 1.6709637479564132 2.3922926213142226 1.6709637479557276 2.3802823301891967 1.6709637479556978 2.37427718462407 1.6709637479566593 2.3682720390587808 1.670963747956246 2.3562617479337291 1.6709637479562411 2.3502566023683507 1.6709637479546242 2.3442514568030868 1.6709637479562047 2.3322411672877461 1.6709637479562007 2.3262360233321555 1.6709637479548733 2.3202308793766888 1.670963747957166 2.3086347371647262 1.6709637479571617 2.303043738903586 1.6709637479555908 2.2974527406424832 1.6709637479555699 2.2860636720821761 1.6709637479555619 2.2802656017787717 1.670963747957849 2.2744675314753215 1.670963747955811 2.2626643156116137 1.6709637479558006 2.2566591700462384 1.670963747956534 2.250654024480939 1.6709637479562864 2.2386437333557305 1.6709637479562842 2.2326385877903223 1.6709637479578106 2.226633442224967 1.6709637479547514 2.2150373000129577 1.6709637479547432 2.2094463033617084 1.6709637479595802 2.2038553067102793 1.6709637479550161 2.1924662381500539 1.6709637479549939 2.1866681662370624 1.6709637479586112 2.1808700943237849 1.6709637479552322 2.1690668768503976 1.6709637479552155 2.1630617312851621 1.6709637479574466 2.1570565857197863 1.6709637479561772 2.1450462945946427 1.670963747956163 2.1390411490293468 1.6709637479555954 2.1330360034639879 1.6709637479565953 2.1216469268548295 1.6709637479565891 2.1162629958066139 1.6709637479539545 2.1108790647584872 1.6709637479570281 2.0996970634108258 1.6709637479570263 2.0938989931073957 1.670963747955559 2.0881009228040264 1.6709637479555699 2.0762977069403314 1.6709637479555626 2.0702925613749983 1.6709637479560457 2.0642874158095461 1.6709637479557891 2.0522771246843754 1.6709637479557695 2.0462719791191599 1.6709637479558221 2.0402668335537859 1.6709637479564563 2.0284636176901274 1.6709637479564432 2.0226655473867425 1.6709637479563118 2.0168674770833053 1.6709637479552548 2.0050642612196161 1.670963747955249 1.9990591156542992 1.6709637479565809 1.9930539700889249 1.6709637479563424 1.9810436789637142 1.6709637479563317 1.9750385333983516 1.6709637479539965 1.969033387832986 1.6709637479567445 1.9570230967078017 1.6709637479567441 1.9510179511424375 1.670963747954147 1.9450128055771407 1.6709637479562862 1.9332095897135138 1.6709637479562782 1.9274115194102051 1.670963747955454 1.9216134491067591 1.6709637479554853 1.9098102332431122 1.6709637479554715 1.9038050876777919 1.670963747955091 1.8977999421124601 1.6709637479559971 1.8857896509872738 1.6709637479559967 1.8797845054218958 1.6709637479565354 1.8737793598565529 1.6709637479554889 1.8621832176445492 1.6709637479554837 1.8565922209931871 1.670963747955859 1.8510012243418881 1.6709637479565458 1.8394050821299484 1.6709637479565407 1.8333999365646383 1.6709637479557717 1.8273947909993895 1.6709637479553716 1.8153844998742967 1.6709637479553707 1.8093793543089245 1.6709637479560357 1.803374208743648 1.6709637479557167 1.7913639176185179 1.6709637479557145 1.7853587720531867 1.6709637479546198 1.7793536264878678 1.6709637479566277 1.7673433353627455 1.6709637479566295 1.7613381897974536 1.6709637479545141 1.7553330442321102 1.6709637479560537 1.7433227547168053 1.6709637479560466 1.7373176107613202 1.6709637479553132 1.7313124668058313 1.6709637479555217 1.7193021772905004 1.6709637479555168 1.7132970317251517 1.6709637479559112 1.7072918861597928 1.6709637479559765 1.6952815950345776 1.6709637479559711 1.6892764494691752 1.6709637479555226 1.6832713039038549 1.6709637479560333 1.6712610127786558 1.670963747956036 1.665255867213296 1.670963747953176 1.6592507216479468 1.6709637479568225 1.6472404305227362 1.6709637479568105 1.6412352849574061 1.6709637479566843 1.6352301393919828 1.6709637479545132 1.6232198498765844 1.670963747954511 1.6172147059210533 1.6709637479569959 1.6112095619655409 1.6709637479560417 1.5991992724501856 1.6709637479560409 1.5931941268848466 1.6709637479546759 1.587188981319527 1.6709637479565649 1.576006986411052 1.6709637479565649 1.5708301370638105 1.6709637479538748 1.5656532877166078 1.6709637479559467 1.554678366459779 1.6709637479559409 1.548880294546584 1.6709637479548558 1.5430822226332974 1.6709637479561783 1.5314860804212544 1.6709637479561708 1.5256880101178301 1.6709637479535975 1.5198899398144061 1.6709637479571173 1.5085008712540751 1.6709637479571173 1.5029098729929349 1.6709637479552333 1.4973188747318127 1.670963747954991 1.4857227309099854 1.6709637479549919 1.4797175853445754 1.6709637479553157 1.4737124397792016 1.6709637479564918 1.4619092239154701 1.6709637479564836 1.4561111536120783 1.6709637479531629 1.4503130833086155 1.6709637479564035 1.4385098674448618 1.6709637479563999 1.4325047218795217 1.670963747956427 1.4264995763141073 1.6709637479550425 1.4144892851888293 1.6709637479550399 1.4084841396234242 1.6709637479565307 1.4024789940580082 1.6709637479558961 1.3906757781942343 1.6709637479558883 1.3848777078908481 1.6709637479562418 1.3790796375873728 1.6709637479550983 1.3674834953754078 1.6709637479551023 1.3616854234622662 1.6709637479541768 1.355887351549071 1.6709637479570798 1.3440841340756211 1.670963747957078 1.3380789885103237 1.6709637479549437 1.332073842944947 1.6709637479554174 1.3200635518197839 1.670963747955416 1.3140584062544511 1.6709637479565953 1.3080532606891222 1.6709637479552535 1.2960429711738044 1.6709637479552522 1.2900378272183299 1.6709637479538111 1.2840326832627942 1.6709637479565966 1.2720223937474802 1.6709637479565962 1.2660172481821723 1.6709637479542985 1.2600121026168669 1.6709637479556321 1.2486230340566802 1.6709637479556374 1.2432391110574048 1.6709637479561266 1.2378551880582216 1.6709637479553401 1.2264661194979982 1.6709637479553401 1.2204609739326389 1.6709637479565855 1.2144558283672962 1.6709637479553621 1.2024455372420806 1.6709637479553598 1.1964403916766952 1.6709637479546977 1.1904352461113377 1.6709637479563391 1.1784249549861123 1.6709637479563453 1.1724198094207263 1.6709637479566426 1.1664146638553909 1.6709637479549486 1.154404372730216 1.670963747954946 1.148399227164894 1.6709637479546442 1.1423940815995297 1.6709637479562698 1.1303837920841719 1.6709637479562653 1.1243786481286604 1.6709637479545005 1.1183735041731409 1.6709637479563084 1.1063632146579165 1.6709637479563013 1.1003580690927033 1.6709637479558261 1.0943529235274831 1.670963747955603 1.0839599151690094 1.6709637479556005 1.0795720523850112 1.6709637479552226 1.0751841895758365 1.6709637479561068 1.0707963267948857 1.6709637479561059 + 0 5 0.011551063350370488 3 0.023150746981667657 3 0.034750430613050068 3 0.045950125797153657 3 0.057549806319023122 3 0.068349513056279204 3 0.079949196687636379 3 0.091148888762291339 3 0.1027485723937572 3 0.11394826757798876 3 0.12554794809970993 3 0.13674764328373959 3 0.14754734691124496 3 0.15914703054234688 3 0.17034672572653867 3 0.18194640935785333 3 0.19314610143230579 3 0.20474578506353133 3 0.21634546869467799 3 0.22794515232575022 3 0.23914484440029665 3 0.25074452803147479 3 0.26234421166255345 3 0.27354390373710563 3 0.28434361047426016 3 0.29594329410558629 3 0.30754297462735675 3 0.31914265825856714 3 0.3307423418896952 3 0.34154204551729639 3 0.35314172914845604 3 0.36474141277963024 3 0.37634109641069124 3 0.3879407800419305 3 0.39954046056360137 3 0.41034016730067041 3 0.42153985937532734 3 0.43313954300654861 3 0.44473922663779292 3 0.45553893026530889 3 0.46673862544934719 3 0.47833830908053054 3 0.48993799271173993 3 0.50033772343967486 3 0.51153741551431908 3 0.52313709914565909 3 0.53473678277684555 3 0.54593647485153063 3 0.55753615848278471 3 0.56913584211408641 3 0.58073552574532028 3 0.5919352178199323 3 0.60353490145126543 3 0.6151345850826726 3 0.62593428871037504 3 0.63753397234162812 3 0.6491336559729397 3 0.66073333960423952 3 0.67233302323553779 3 0.6839327037572438 3 0.6955323873886059 3 0.70713207101999953 3 0.71873175465129358 3 0.73033143828271163 3 0.74193111880450879 3 0.75353080243584336 3 0.76353052916916075 3 0.77473022435348204 3 0.78592991642823329 3 0.79672962316539953 3 0.80832930679678805 3 0.81952899887151298 3 0.83112868250285821 3 0.84272836613422619 3 0.85392805820896212 3 0.86512775339305148 3 0.87672743702431277 3 0.88832712065555619 3 0.89992680117719959 3 0.91152648480845033 3 0.92192619998883285 3 0.93352588362014621 3 0.94512556725150154 3 0.95672525088282956 3 0.96832493451412505 3 0.97992461503582839 3 0.99152429866679626 3 1 5 +7 0 0 4 266 89 5.2123889803846994 -0.50250628144667475 5.2064090054920911 -0.5025062767137175 5.2004290306036296 -0.50250628538994047 5.1944490556845846 -0.50250628144662179 5.1824639352343045 -0.50250628144662068 5.1764587896689456 -0.50250628144662157 5.1704536441036986 -0.50250628144613585 5.1584433529785647 -0.50250628144613407 5.1524382074131942 -0.50250628144640674 5.1464330618479259 -0.50250628144675524 5.1346298443745813 -0.50250628144674725 5.1288317724614263 -0.50250628144518661 5.123033700548377 -0.50250628144693499 5.111230484684862 -0.5025062814469301 5.1052253407293335 -0.50250628144538612 5.0992201967739001 -0.50250628144691145 5.0876240545619549 -0.50250628144691811 5.082033056300693 -0.50250628144576825 5.0764420580397474 -0.50250628144637566 5.064845914217968 -0.50250628144636478 5.0588407686525132 -0.50250628144576426 5.0528356230872404 -0.50250628144673337 5.0410324072235824 -0.50250628144672926 5.0352343369201886 -0.5025062814454172 5.0294362666168109 -0.50250628144684195 5.0176330507530817 -0.50250628144685072 5.0116279051875843 -0.50250628144579523 5.0056227596222449 -0.50250628144635523 4.9938195421486933 -0.50250628144635301 4.9880214702354788 -0.50250628144672649 4.9822233983222919 -0.50250628144634579 4.9704201824586658 -0.5025062814463449 4.9644150385031658 -0.50250628144689324 4.9584098945476631 -0.50250628144632248 4.9466066786841187 -0.50250628144632048 4.9408086067709824 -0.50250628144594045 4.9350105348579234 -0.50250628144673282 4.9236214662977993 -0.50250628144672826 4.9180304696465056 -0.50250628144590159 4.9124394729952572 -0.50250628144647624 4.9008433307834522 -0.50250628144647258 4.8948381852182257 -0.50250628144701603 4.8888330396530204 -0.50250628144583587 4.8770298221796891 -0.5025062814458322 4.8712317502664675 -0.50250628144745402 4.865433678353364 -0.50250628144627574 4.8536304608799483 -0.50250628144627285 4.8476253153146081 -0.50250628144569964 4.8416201697492589 -0.5025062814467901 4.8298169538856932 -0.50250628144678589 4.8240188835824505 -0.50250628144604026 4.818220813279086 -0.50250628144626286 4.8064175974154963 -0.5025062814462592 4.800412451850196 -0.50250628144605713 4.7944073062848043 -0.5025062814468032 4.7823970151596749 -0.50250628144680098 4.7763918695944731 -0.50250628144541365 4.7703867240290627 -0.50250628144680232 4.7583764329040363 -0.50250628144679343 4.7523712873388551 -0.50250628144634224 4.7463661417735956 -0.50250628144605947 4.7345629259100734 -0.50250628144605747 4.7287648556067179 -0.50250628144744058 4.7229667853033801 -0.50250628144609222 4.7111635694398384 -0.50250628144608944 4.7051584238745887 -0.5025062814460427 4.6991532783093053 -0.50250628144658616 4.6871429871843295 -0.50250628144658593 4.6811378416190879 -0.50250628144572473 4.6751326960539217 -0.50250628144654008 4.6633294801904732 -0.50250628144653464 4.6575314098871656 -0.50250628144619813 4.651733339583819 -0.50250628144642218 4.6403442710236762 -0.50250628144641651 4.6347532727626479 -0.50250628144591969 4.6291622745015584 -0.50250628144651188 4.6175661306798599 -0.50250628144650933 4.6115609851145223 -0.50250628144686227 4.6055558395492504 -0.50250628144624077 4.5935455500339657 -0.50250628144623943 4.5875404060784568 -0.50250628144699527 4.5815352621229675 -0.50250628144642073 4.5695249726077343 -0.50250628144641984 4.563519827042489 -0.50250628144563403 4.5575146814772403 -0.50250628144628318 4.5455043903522467 -0.50250628144628207 4.5394992447869811 -0.5025062814469613 4.5334940992217483 -0.50250628144656062 4.5218979570098714 -0.50250628144655873 4.5163069603585253 -0.5025062814462381 4.510715963707284 -0.50250628144642362 4.4991198214954009 -0.50250628144641907 4.4931146759301051 -0.5025062814462985 4.4871095303648154 -0.50250628144622489 4.4750992392397597 -0.50250628144621912 4.4690940936745598 -0.50250628144670906 4.4630889481091778 -0.50250628144609455 4.4510786569841514 -0.50250628144609055 4.4450735114189524 -0.50250628144665432 4.4390683658537098 -0.50250628144623011 4.4270580747286585 -0.50250628144622655 4.4210529291633236 -0.50250628144681986 4.415047783597978 -0.50250628144659759 4.4030374940826373 -0.50250628144659448 4.3970323501271409 -0.50250628144631271 4.3910272061715849 -0.50250628144629839 4.3794310639596228 -0.50250628144629605 4.3738400656984986 -0.50250628144682319 4.3682490674374339 -0.50250628144616727 4.3568599988771268 -0.50250628144616161 4.3510619285736301 -0.50250628144632525 4.3452638582702372 -0.5025062814466752 4.3334606424065294 -0.50250628144667331 4.3274554968411563 -0.50250628144585374 4.3214503512758613 -0.50250628144622889 4.3094400601506528 -0.50250628144622511 4.3034349145851998 -0.50250628144655451 4.2974297690199137 -0.50250628144652421 4.2858336268079036 -0.50250628144651932 4.2802426301565273 -0.5025062814466944 4.2746516335052416 -0.50250628144596055 4.2632625649450153 -0.50250628144595921 4.257464493031903 -0.50250628144699638 4.2516664211187294 -0.5025062814462139 4.2398632036453412 -0.50250628144621301 4.2338580580800134 -0.50250628144714671 4.2278529125147202 -0.50250628144596854 4.2158426213895765 -0.50250628144596787 4.2098374758242523 -0.50250628144689624 4.2038323302589022 -0.5025062814462159 4.1924432536497438 -0.50250628144621556 4.1870593226015913 -0.50250628144631837 4.1816753915533669 -0.50250628144686493 4.1704933902057055 -0.50250628144686094 4.1646953199023731 -0.50250628144580012 4.1588972495989385 -0.50250628144669118 4.147094033735244 -0.50250628144669029 4.1410888881698735 -0.50250628144779286 4.1350837426044897 -0.50250628144581033 4.1230734514793195 -0.50250628144580878 4.1170683059140369 -0.50250628144762 4.1110631603487082 -0.50250628144606646 4.0992599444850493 -0.50250628144606435 4.0934618741816093 -0.50250628144758824 4.0876638038782431 -0.5025062814461031 4.075860588014554 -0.50250628144609844 4.0698554424491933 -0.50250628144678866 4.0638502968838282 -0.50250628144660514 4.051840005758617 -0.50250628144660092 4.0458348601932768 -0.50250628144697262 4.0398297146278992 -0.50250628144618326 4.0278194235027147 -0.50250628144618037 4.0218142779373416 -0.50250628144734133 4.0158091323720733 -0.50250628144584164 4.0040059165084463 -0.50250628144583909 3.9982078462050312 -0.50250628144708631 3.9924097759017281 -0.50250628144660858 3.9806065600380811 -0.50250628144660203 3.974601414472648 -0.50250628144691567 3.9685962689073913 -0.50250628144590925 3.956585977782205 -0.50250628144590304 3.9505808322167781 -0.50250628144713205 3.9445756866514579 -0.50250628144672305 3.9329795444394535 -0.50250628144672183 3.927388547788162 -0.50250628144520137 3.9217975511367831 -0.50250628144675336 3.9102014089248431 -0.50250628144675036 3.9041962633595855 -0.50250628144583309 3.8981911177942994 -0.50250628144658127 3.8861808266692064 -0.50250628144657949 3.8801756811038683 -0.50250628144562159 3.8741705355385445 -0.5025062814468445 3.8621602444134142 -0.50250628144684339 3.8561550988481561 -0.50250628144541654 3.8501499532827737 -0.50250628144644949 3.8381396621576505 -0.50250628144645171 3.8321345165923613 -0.50250628144673937 3.8261293710270232 -0.50250628144631704 3.8141190815117181 -0.50250628144631637 3.8081139375562705 -0.50250628144613319 3.8021087936007412 -0.50250628144646214 3.7900985040854103 -0.50250628144646192 3.7840933585200367 -0.50250628144699971 3.7780882129547155 -0.50250628144605125 3.7660779218295 -0.50250628144604925 3.7600727762640718 -0.50250628144693343 3.7540676306987582 -0.5025062814465614 3.7420573395735586 -0.50250628144656384 3.7360521940082148 -0.50250628144696718 3.7300470484428745 -0.50250628144580078 3.7180367573176638 -0.50250628144580012 3.7120316117522707 -0.50250628144773068 3.7060264661869082 -0.50250628144597176 3.6940161766715098 -0.50250628144596754 3.6880110327159645 -0.50250628144639908 3.6820058887604428 -0.50250628144659371 3.669995599245087 -0.50250628144659326 3.6639904536797676 -0.50250628144604925 3.6579853081144167 -0.50250628144690712 3.6468033132059414 -0.50250628144690834 3.6416264638587199 -0.50250628144679033 3.636449614511537 -0.5025062814457687 3.6254746932547079 -0.50250628144576603 3.6196766213414562 -0.50250628144744358 3.6138785494282111 -0.5025062814462018 3.6022824072161677 -0.50250628144620091 3.5964843369127188 -0.50250628144702358 3.5906862666093144 -0.50250628144644471 3.5792971980489829 -0.50250628144644272 3.5737061997878374 -0.50250628144662546 3.5681152015267075 -0.5025062814466611 3.5565190577048797 -0.50250628144666132 3.550513912139504 -0.5025062814457909 3.5445087665741166 -0.50250628144618192 3.5327055507103848 -0.50250628144618104 3.5269074804069453 -0.50250628144664289 3.5211094101035445 -0.50250628144633813 3.5093061942397901 -0.50250628144633402 3.503301048674428 -0.50250628144587761 3.497295903108999 -0.502506281446646 3.4852856119837208 -0.50250628144664378 3.4792804664183463 -0.5025062814460125 3.4732753208529221 -0.50250628144612119 3.4614721049891477 -0.50250628144612031 3.4556740346857455 -0.50250628144690201 3.4498759643822745 -0.50250628144629483 3.4382798221703093 -0.50250628144629772 3.432481750257125 -0.50250628144664755 3.4266836783440096 -0.50250628144635712 3.4148804608705596 -0.50250628144635034 3.4088753153051692 -0.50250628144736176 3.4028701697398649 -0.50250628144590082 3.3908598786147008 -0.50250628144589748 3.3848547330493326 -0.50250628144718468 3.3788495874840314 -0.50250628144607667 3.3668392979687134 -0.50250628144607512 3.3608341540132045 -0.50250628144658782 3.3548290100577076 -0.502506281446643 3.3428187205423932 -0.50250628144664011 3.3368135749770853 -0.50250628144568654 3.3308084294117424 -0.50250628144705911 3.3194193608515556 -0.50250628144706033 3.3140354378523647 -0.50250628144552889 3.3086515148531186 -0.50250628144638909 3.2972624462928946 -0.50250628144638909 3.2912573007275348 -0.50250628144679255 3.2852521551622029 -0.50250628144607812 3.2732418640369874 -0.50250628144607745 3.2672367184715787 -0.50250628144646015 3.2612315729062273 -0.50250628144685305 3.2492212817810011 -0.50250628144685483 3.2432161362156542 -0.50250628144612808 3.2372109906502891 -0.50250628144609089 3.2252006995251139 -0.50250628144608955 3.219195553959779 -0.50250628144656972 3.2131904083944329 -0.50250628144649001 3.2011801188790749 -0.5025062814464889 3.1951749749235421 -0.50250628144630516 3.1891698309680416 -0.50250628144654941 3.1771595414528169 -0.50250628144654652 3.1711543958875872 -0.50250628144635312 3.165149250322373 -0.50250628144649989 3.154756241963899 -0.50250628144649756 3.1503683791799122 -0.50250628144628162 3.1459805163707437 -0.50250628144629939 3.1415926535897927 -0.50250628144629916 + 0 5 0.011551063350370488 3 0.023150746981667657 3 0.034750430613050068 3 0.045950125797153657 3 0.057549806319023122 3 0.068349513056279204 3 0.079949196687636379 3 0.091148888762291339 3 0.1027485723937572 3 0.11394826757798876 3 0.12554794809970993 3 0.13674764328373959 3 0.14754734691124496 3 0.15914703054234688 3 0.17034672572653867 3 0.18194640935785333 3 0.19314610143230579 3 0.20474578506353133 3 0.21634546869467799 3 0.22794515232575022 3 0.23914484440029665 3 0.25074452803147479 3 0.26234421166255345 3 0.27354390373710563 3 0.28434361047426016 3 0.29594329410558629 3 0.30754297462735675 3 0.31914265825856714 3 0.3307423418896952 3 0.34154204551729639 3 0.35314172914845604 3 0.36474141277963024 3 0.37634109641069124 3 0.3879407800419305 3 0.39954046056360137 3 0.41034016730067041 3 0.42153985937532734 3 0.43313954300654861 3 0.44473922663779292 3 0.45553893026530889 3 0.46673862544934719 3 0.47833830908053054 3 0.48993799271173993 3 0.50033772343967486 3 0.51153741551431908 3 0.52313709914565909 3 0.53473678277684555 3 0.54593647485153063 3 0.55753615848278471 3 0.56913584211408641 3 0.58073552574532028 3 0.5919352178199323 3 0.60353490145126543 3 0.6151345850826726 3 0.62593428871037504 3 0.63753397234162812 3 0.6491336559729397 3 0.66073333960423952 3 0.67233302323553779 3 0.6839327037572438 3 0.6955323873886059 3 0.70713207101999953 3 0.71873175465129358 3 0.73033143828271163 3 0.74193111880450879 3 0.75353080243584336 3 0.76353052916916075 3 0.77473022435348204 3 0.78592991642823329 3 0.79672962316539953 3 0.80832930679678805 3 0.81952899887151298 3 0.83112868250285821 3 0.84272836613422619 3 0.85392805820896212 3 0.86512775339305148 3 0.87672743702431277 3 0.88832712065555619 3 0.89992680117719959 3 0.91152648480845033 3 0.92192619998883285 3 0.93352588362014621 3 0.94512556725150154 3 0.95672525088282956 3 0.96832493451412505 3 0.97992461503582839 3 0.99152429866679626 3 1 5 +7 0 0 4 182 61 1.0707963267948983 1.6709637479558677 1.0664331298974929 1.6709637479558677 1.062069932979298 1.6709637479558734 1.0577067360795001 1.6709637479548494 1.0487882298238917 1.6709637479548507 1.0442329204759813 1.6709637479560868 1.0396776111281516 1.670963747955698 1.0305669924337775 1.6709637479556989 1.0260116830858745 1.6709637479557804 1.0214563737380036 1.6709637479558381 1.0123457550436405 1.6709637479558417 1.007790445695752 1.6709637479561508 1.0032351363479317 1.670963747955591 0.99412451765361354 1.670963747955595 0.98956920830573514 1.6709637479548951 0.98501389895791214 1.6709637479561412 0.97606035989622231 1.6709637479561472 0.97166213018113001 1.6709637479543216 0.96726390046597155 1.6709637479558659 0.95831036140429082 1.670963747955859 0.95375505205649058 1.6709637479569939 0.94919974270862961 1.6709637479549697 0.94040328327949463 1.6709637479549744 0.93616213319695152 1.6709637479576109 0.93192098311457472 1.670963747955668 0.92312452368545261 1.6709637479556763 0.91856921433756966 1.6709637479568828 0.91401390498977741 1.6709637479547639 0.90490328629545902 1.6709637479547661 0.90034797694760127 1.6709637479569508 0.89579266759970355 1.6709637479557942 0.88668204890535951 1.6709637479557928 0.88212673955754517 1.6709637479567487 0.87757143020964712 1.6709637479553145 0.8684608115153587 1.6709637479553132 0.86390550216754192 1.6709637479558834 0.85935019281976355 1.6709637479553194 0.850396653758142 1.6709637479553283 0.84599842404295234 1.6709637479565023 0.84160019432794853 1.6709637479557138 0.83264665526634707 1.6709637479557151 0.82809134591856981 1.6709637479564505 0.82353603657076746 1.6709637479553616 0.81442541787656575 1.6709637479553585 0.80987010852878594 1.6709637479571497 0.80531479918099191 1.670963747954892 0.79636126011928432 1.6709637479548998 0.79196303040403881 1.670963747957118 0.78756480068891777 1.6709637479557182 0.77861126162720162 1.6709637479557244 0.77405595227937329 1.6709637479555861 0.76950064293155784 1.6709637479555863 0.76039002423727842 1.6709637479555868 0.7558347148894452 1.6709637479557335 0.75127940554158856 1.6709637479560677 0.7421687868472423 1.6709637479560726 0.73761347749934469 1.6709637479548545 0.73305816815150848 1.6709637479560291 0.72426170872246365 1.6709637479560402 0.72002055864003722 1.6709637479565449 0.71577940855776367 1.6709637479551598 0.70698294912876802 1.6709637479551667 0.70242763978094802 1.670963747955045 0.69787233043305008 1.6709637479569186 0.68923295063662271 1.6709637479569137 0.68514888018700837 1.6709637479544688 0.68106480973732419 1.6709637479556496 0.67273958920613086 1.6709637479556578 0.66849843912371654 1.670963747955728 0.66425728904130643 1.6709637479557298 0.65561790924490015 1.6709637479557298 0.65121967952987592 1.6709637479562882 0.64682144981473355 1.6709637479561146 0.63818207001832628 1.6709637479561106 0.63394091993601087 1.670963747954239 0.62969976985354892 1.6709637479566981 0.62090331042448244 1.6709637479567003 0.61634800107668419 1.6709637479545032 0.61179269172879136 1.6709637479556414 0.60268207303453647 1.6709637479556418 0.59812676368683093 1.6709637479550294 0.5935714543389401 1.6709637479563721 0.58446083564476203 1.6709637479563713 0.57990552629707226 1.6709637479550681 0.57535021694922417 1.670963747955668 0.56623959825512393 1.6709637479556658 0.56168428890745736 1.6709637479562214 0.55712897955972329 1.6709637479556969 0.54801836086561095 1.6709637479557014 0.54346305151783847 1.6709637479556154 0.53890774217003956 1.6709637479557788 0.52979712347582286 1.6709637479557837 0.52524181412795323 1.6709637479569883 0.52068650478023437 1.6709637479551909 0.51173296571857285 1.6709637479552053 0.50733473600340007 1.6709637479556867 0.50293650628825637 1.6709637479557988 0.49398296722661933 1.6709637479557957 0.48942765787892678 1.6709637479555135 0.48487234853105515 1.6709637479558237 0.47576172983673154 1.6709637479558201 0.47120642048883421 1.6709637479567627 0.46665111114093011 1.6709637479550683 0.4575404924466252 1.6709637479550754 0.45298518309880637 1.6709637479577537 0.44842987375106763 1.67096374795574 0.43931925505686009 1.6709637479557431 0.43476394570902022 1.6709637479564714 0.43020863636122686 1.6709637479555537 0.42109801766701693 1.670963747955559 0.41654270831915885 1.6709637479577109 0.41198739897148184 1.670963747955458 0.40303385990982599 1.6709637479554698 0.39863563019467096 1.6709637479569563 0.39423740047949801 1.6709637479552721 0.385440941050403 1.6709637479552797 0.38104271133532774 1.6709637479555934 0.37664448162016839 1.6709637479566435 0.36831926108905244 1.6709637479566444 0.364392270272139 1.670963747954221 0.36046527945525936 1.6709637479562864 0.35198297929147615 1.6709637479562949 0.34742766994355917 1.6709637479549471 0.34287236059567772 1.6709637479560575 0.33376174190134772 1.6709637479560611 0.32920643255352683 1.6709637479560686 0.32465112320572076 1.6709637479553889 0.31554050451142923 1.6709637479553987 0.31098519516354844 1.6709637479574384 0.30642988581571429 1.6709637479549972 0.29747634675413404 1.6709637479550026 0.29307811703912434 1.6709637479575929 0.28867988732411953 1.6709637479553101 0.27972634826255832 1.6709637479553145 0.27517103891472533 1.6709637479568211 0.27061572956692376 1.6709637479555262 0.26197634977057072 1.6709637479555346 0.25789227932090264 1.6709637479565338 0.25380820887130262 1.6709637479556134 0.24516882907497456 1.6709637479556152 0.24061351972719666 1.6709637479575123 0.23605821037940933 1.6709637479552053 0.22710467131788889 1.6709637479552153 0.22270644160285072 1.6709637479571764 0.21830821188787358 1.6709637479556918 0.20951175245889789 1.6709637479556971 0.20511352274375647 1.6709637479564923 0.2007152930286239 1.6709637479553749 0.19176175396689074 1.6709637479553776 0.18720644461907782 1.6709637479571122 0.18265113527112259 1.6709637479560904 0.1735405165768138 1.6709637479560886 0.16898520722909874 1.670963747956336 0.16442989788117474 1.6709637479557702 0.15531927918685348 1.6709637479557671 0.15076396983902771 1.6709637479561825 0.14620866049109854 1.670963747955728 0.13709804179687357 1.6709637479557307 0.13254273244917586 1.6709637479560364 0.12798742310145464 1.6709637479559956 0.11934804330527206 1.6709637479560042 0.11526397285572927 1.6709637479558337 0.11117990240612979 1.6709637479562838 0.10285468187509837 1.6709637479562847 0.098613531792767647 1.6709637479562915 0.094372381710413705 1.6709637479557164 0.085575922281436304 1.6709637479557256 0.081020612933611597 1.6709637479563739 0.076465303585828717 1.6709637479561223 0.068297162687423585 1.6709637479561283 0.064684331135861042 1.6709637479569979 0.061071499584408155 1.6709637479554889 0.052903358686024374 1.6709637479554977 0.048348049338220407 1.6709637479571138 0.043792739990459274 1.6709637479558077 0.034996280561367908 1.6709637479558164 0.030755130478815278 1.6709637479566297 0.026513980396399385 1.6709637479562722 0.016704622743893345 1.6709637479562822 0.011136415145606104 1.6709637553006611 0.0055682075760519366 1.6709637391421532 0 1.6709637479562736 + 0 5 0.01629888635078252 3 0.033315415950536637 3 0.050331945550329701 3 0.067348475149911297 3 0.084365004749480166 3 0.10079475746637698 3 0.11781128706597646 3 0.13365426290057003 3 0.15067079249997961 3 0.16768732209962622 3 0.18470385169926098 3 0.2017203812988233 3 0.21815013401574312 3 0.23516666361508523 3 0.25218319321462396 3 0.26861294593201412 3 0.28562947553177709 3 0.30264600513158474 3 0.3196625347314363 3 0.33550551056572198 3 0.3525220401654301 3 0.36777823911728413 3 0.38362121495178819 3 0.4000509676687059 3 0.4158939435033463 3 0.43291047310310032 3 0.44992700270263047 3 0.46694353230206964 3 0.4839600619012791 3 0.50097659150080087 3 0.51799312110035001 3 0.53442287381745346 3 0.55143940341695219 3 0.56845593301689989 3 0.58547246261631081 3 0.60248899221601759 3 0.61950552181551877 3 0.63593527453285015 3 0.65236502725016554 3 0.66703444931931188 3 0.68405097891951339 3 0.70106750851941335 3 0.71808403811949995 3 0.73451379083653423 3 0.75153032043653878 3 0.76678651938838815 3 0.78380304898822362 3 0.80023280170522282 3 0.81666255442271496 3 0.83367908402285218 3 0.85069561362268786 3 0.86771214322270651 3 0.88472867282211665 3 0.89998487177358721 3 0.91582784760802638 3 0.93284437720761626 3 0.94634024551124762 3 0.96335677511072737 3 0.97919975094561906 3 1 5 +7 0 0 4 182 61 3.1415926535897931 -0.50250628144648457 3.1372294566923875 -0.50250628144648446 3.132866259774195 -0.50250628144624343 3.1285030628743833 -0.50250628144630705 3.1195845566187752 -0.50250628144630827 3.1150292472709102 -0.50250628144550868 3.1104739379230315 -0.50250628144677167 3.1013633192286569 -0.50250628144677367 3.0968080098807782 -0.50250628144577703 3.0922527005328981 -0.5025062814464788 3.0831420818385347 -0.50250628144648013 3.0785867724906981 -0.50250628144564013 3.0740314631427887 -0.50250628144661036 3.0649208444484706 -0.50250628144661413 3.0603655351006966 -0.50250628144600096 3.0558102257527624 -0.50250628144659149 3.0468566866910725 -0.50250628144659515 3.042458456976024 -0.50250628144592269 3.0380602272608899 -0.50250628144588838 3.0291066881992088 -0.50250628144588794 3.0245513788513358 -0.50250628144748055 3.0199960695035335 -0.50250628144573084 3.0111996100743981 -0.50250628144573406 3.0069584599918788 -0.50250628144796772 3.0027173099094226 -0.50250628144601228 2.9939208504803005 -0.50250628144601506 2.9893655411325377 -0.50250628144651288 2.9848102317846443 -0.50250628144644238 2.9756996130903257 -0.50250628144644571 2.9711443037425243 -0.50250628144642084 2.9665889943945976 -0.50250628144589793 2.9574783757002532 -0.50250628144589682 2.9529230663524411 -0.50250628144686937 2.9483677570045259 -0.50250628144644449 2.939257138310237 -0.50250628144644116 2.9347018289624804 -0.50250628144657916 2.9301465196145977 -0.50250628144617315 2.9211929805529762 -0.5025062814461777 2.91679475083791 -0.50250628144717291 2.9123965211228482 -0.5025062814457788 2.9034429820612466 -0.50250628144577991 2.8988876727134478 -0.50250628144684339 2.8943323633656388 -0.5025062814465534 2.885221744671437 -0.5025062814465483 2.8806664353236795 -0.50250628144650133 2.8761111259758647 -0.5025062814462018 2.867157586914157 -0.50250628144620235 2.8627593571989527 -0.50250628144649478 2.858361127483803 -0.50250628144647913 2.8494075884220864 -0.50250628144648046 2.8448522790742459 -0.50250628144638665 2.8402969697264502 -0.50250628144620579 2.8311863510321706 -0.50250628144620624 2.8266310416843323 -0.50250628144589105 2.8220757323364682 -0.50250628144677578 2.8129651136421217 -0.502506281446776 2.8084098042942425 -0.50250628144630227 2.8038544949463748 -0.50250628144605713 2.79505803551733 -0.50250628144605847 2.7908168854349933 -0.50250628144794263 2.786575735352617 -0.50250628144583986 2.7777792759236211 -0.50250628144584264 2.7732239665758311 -0.50250628144681719 2.7686686572279733 -0.50250628144653053 2.7600292774315456 -0.50250628144652942 2.7559452069818606 -0.50250628144629239 2.7518611365321979 -0.50250628144617027 2.743535916001004 -0.50250628144617127 2.7392947659185793 -0.50250628144682929 2.7350536158361969 -0.50250628144630727 2.7264142360397905 -0.50250628144630638 2.7220160063247421 -0.50250628144683318 2.7176177766096288 -0.50250628144646992 2.7089783968132215 -0.5025062814464677 2.7047372467308586 -0.50250628144578791 2.7004960966484353 -0.50250628144706577 2.6916996372193687 -0.50250628144706611 2.6871443278715361 -0.50250628144531151 2.6825890185236809 -0.50250628144622322 2.6734783998294258 -0.50250628144622411 2.668923090481619 -0.5025062814469039 2.6643677811338651 -0.50250628144616882 2.6552571624396868 -0.50250628144616527 2.6507018530918285 -0.50250628144660403 2.6461465437441443 -0.50250628144647336 2.6370359250500441 -0.50250628144647114 2.6324806157022529 -0.50250628144667586 2.6279253063546308 -0.50250628144595266 2.6188146876605183 -0.50250628144595644 2.6142593783126551 -0.50250628144707044 2.6097040689649411 -0.50250628144608833 2.6005934502707237 -0.50250628144609122 2.596038140922897 -0.50250628144701637 2.5914828315750507 -0.50250628144616549 2.5825292925133891 -0.50250628144616971 2.5781310627983238 -0.50250628144630549 2.5737328330831639 -0.50250628144637222 2.5647792940215268 -0.50250628144637199 2.5602239846737627 -0.50250628144655107 2.5556686753259568 -0.50250628144610099 2.5465580566316333 -0.50250628144609988 2.5420027472837301 -0.50250628144712572 2.5374474379357932 -0.50250628144600373 2.5283368192414883 -0.50250628144600507 2.5237815098937335 -0.50250628144761222 2.5192262005459405 -0.50250628144642617 2.5101155818517329 -0.50250628144642795 2.5055602725039656 -0.50250628144649812 2.5010049631560944 -0.50250628144630538 2.4918943444618846 -0.50250628144630693 2.4873390351141396 -0.50250628144698251 2.4827837257663368 -0.50250628144635534 2.4738301867046806 -0.50250628144635601 2.4694319569895771 -0.50250628144715193 2.4650337272743634 -0.50250628144604448 2.4562372678452684 -0.50250628144604514 2.4518390381302204 -0.50250628144611431 2.4474408084150583 -0.50250628144695453 2.4391155878839421 -0.50250628144695497 2.4351885970669764 -0.50250628144575904 2.4312616062501502 -0.50250628144659915 2.4227793060863667 -0.50250628144660248 2.4182239967384493 -0.50250628144566445 2.4136686873905502 -0.50250628144659559 2.40455806869622 -0.50250628144659737 2.4000027593484128 -0.50250628144661491 2.3954474500005789 -0.50250628144615395 2.3863368313062874 -0.50250628144615483 2.3817815219584211 -0.50250628144768028 2.3772262126106045 -0.50250628144563481 2.3682726735490243 -0.50250628144563647 2.3638744438340127 -0.50250628144790144 2.3594762141189696 -0.50250628144610388 2.3505226750574084 -0.50250628144610843 2.3459673657096252 -0.50250628144714427 2.3414120563618188 -0.50250628144587817 2.3327726765654657 -0.50250628144588194 2.3286886061158341 -0.50250628144662346 2.3246045356661393 -0.50250628144638876 2.3159651558698111 -0.50250628144639609 2.3114098465221531 -0.50250628144721565 2.3068545371742584 -0.50250628144592979 2.2979009981127376 -0.50250628144593179 2.2935027683977709 -0.50250628144727338 2.2891045386827371 -0.50250628144623821 2.2803080792537616 -0.50250628144624021 2.2759098495386643 -0.50250628144686682 2.2715116198234933 -0.50250628144587761 2.2625580807617602 -0.50250628144588017 2.2580027714139534 -0.50250628144752563 2.2534474620660285 -0.5025062814462905 2.2443368433717197 -0.50250628144629006 2.2397815340239591 -0.50250628144690024 2.2352262246760453 -0.50250628144619214 2.226115605981724 -0.50250628144618681 2.2215602966338874 -0.5025062814464345 2.2170049872860176 -0.50250628144612286 2.2078943685917922 -0.5025062814461273 2.2033390592439712 -0.50250628144647846 2.1987837498963279 -0.50250628144637999 2.1901443701001453 -0.5025062814463811 2.1860602996505554 -0.50250628144642762 2.1819762292010427 -0.50250628144646958 2.1736510086700114 -0.50250628144647214 2.1694098585876453 -0.50250628144663967 2.1651687085052695 -0.50250628144615295 2.1563722490762922 -0.50250628144615428 2.1518169397284836 -0.50250628144670473 2.1472616303807164 -0.5025062814464093 2.139093489482311 -0.50250628144641107 2.1354806579307235 -0.50250628144734988 2.1318678263793163 -0.50250628144576748 2.1236996854809322 -0.50250628144577325 2.1191443761330433 -0.50250628144754128 2.114589066785332 -0.50250628144612164 2.1057926073562405 -0.50250628144612264 2.1015514572737062 -0.50250628144688547 2.0973103071912775 -0.50250628144657372 2.0875009495387715 -0.50250628144657583 2.0819327419405154 -0.50250628511834627 2.07636453437095 -0.50250627703947848 2.0707963267948979 -0.50250628144652654 + 0 5 0.01629888635078252 3 0.033315415950536637 3 0.050331945550329701 3 0.067348475149911297 3 0.084365004749480166 3 0.10079475746637698 3 0.11781128706597646 3 0.13365426290057003 3 0.15067079249997961 3 0.16768732209962622 3 0.18470385169926098 3 0.2017203812988233 3 0.21815013401574312 3 0.23516666361508523 3 0.25218319321462396 3 0.26861294593201412 3 0.28562947553177709 3 0.30264600513158474 3 0.3196625347314363 3 0.33550551056572198 3 0.3525220401654301 3 0.36777823911728413 3 0.38362121495178819 3 0.4000509676687059 3 0.4158939435033463 3 0.43291047310310032 3 0.44992700270263047 3 0.46694353230206964 3 0.4839600619012791 3 0.50097659150080087 3 0.51799312110035001 3 0.53442287381745346 3 0.55143940341695219 3 0.56845593301689989 3 0.58547246261631081 3 0.60248899221601759 3 0.61950552181551877 3 0.63593527453285015 3 0.65236502725016554 3 0.66703444931931188 3 0.68405097891951339 3 0.70106750851941335 3 0.71808403811949995 3 0.73451379083653423 3 0.75153032043653878 3 0.76678651938838815 3 0.78380304898822362 3 0.80023280170522282 3 0.81666255442271496 3 0.83367908402285218 3 0.85069561362268786 3 0.86771214322270651 3 0.88472867282211665 3 0.89998487177358721 3 0.91582784760802638 3 0.93284437720761626 3 0.94634024551124762 3 0.96335677511072737 3 0.97919975094561906 3 1 5 +1 3.141592653589043 -5.9802829355248832e-11 -1.6114810385468342e-14 1 +1 0 -5.9792171214212431e-11 0 1 +1 0 -5.9795723927891231e-11 0 1 +1 3.1415926535890426 -5.9806382068927633e-11 -1.6114810385468297e-14 1 +7 0 0 4 266 89 3.1415926535897936 1.6709637479566011 3.135613988408144 1.6709637384927598 3.1296353232294165 1.6709637558419714 3.1236566580212175 1.6709637479564141 3.1118799209328527 1.6709637479564312 3.1060818490196054 1.6709637479559796 3.1002837771063931 1.6709637479562189 3.0888947085460607 1.6709637479562229 3.0833037118947559 1.6709637479563908 3.0777127152433619 1.6709637479561088 3.0661165730313389 1.6709637479561152 3.0601114274660182 1.6709637479563253 3.054106281900669 1.6709637479556587 3.0420959907755654 1.6709637479556743 3.0360908452102966 1.6709637479572699 3.0300856996449999 1.6709637479559145 3.0180754085199055 1.6709637479559216 3.0120702629545777 1.670963747955958 3.0060651173892845 1.6709637479566593 2.9940548262642181 1.6709637479566823 2.9880496806989307 1.6709637479567268 2.9820445351336975 1.6709637479557211 2.9702413192702517 1.6709637479557302 2.9644432489669481 1.6709637479561159 2.9586451786637031 1.6709637479568036 2.946841962800181 1.6709637479568118 2.9408368172348678 1.6709637479555834 2.934831671669567 1.6709637479563397 2.92282138054449 1.6709637479563499 2.9168162349792084 1.6709637479562873 2.9108110894139161 1.6709637479560411 2.8990078735502944 1.6709637479560515 2.8932098032468891 1.67096374795741 2.8874117329435083 1.6709637479558728 2.8756085170799661 1.6709637479558841 2.8696033715147617 1.6709637479561599 2.8635982259494677 1.6709637479569637 2.8517950084761958 1.6709637479569577 2.8459969365631932 1.6709637479558226 2.8401988646500098 1.6709637479562593 2.8283956471766123 1.6709637479562627 2.8223905016113333 1.6709637479564421 2.816385356045914 1.6709637479563679 2.8043750665306844 1.6709637479563746 2.7983699225752985 1.6709637479569173 2.7923647786198851 1.6709637479560422 2.7803544891047323 1.6709637479560444 2.7743493435395212 1.6709637479572221 2.768344197974216 1.6709637479561221 2.75674805415251 1.6709637479561308 2.7511570558914018 1.670963747957213 2.7455660576302705 1.6709637479564419 2.7341769890699896 1.670963747956449 2.7283789187665937 1.6709637479562853 2.7225808484631999 1.6709637479563177 2.7109847062511765 1.6709637479563288 2.7051866343379212 1.6709637479567019 2.6993885624246774 1.6709637479566011 2.6882065675161435 1.6709637479566093 2.6828226445169934 1.6709637479561765 2.6774387215177398 1.6709637479563781 2.6660496529576556 1.6709637479563813 2.660044507392465 1.6709637479571826 2.6540393618271771 1.6709637479559554 2.642443219615338 1.6709637479559609 2.6368522229641176 1.6709637479575778 2.6312612263127635 1.6709637479562656 2.6198721577525599 1.6709637479562665 2.6140740858394014 1.6709637479570734 2.6082760139262913 1.6709637479562527 2.5964727964529351 1.670963747956272 2.5904676508876125 1.6709637479569444 2.5844625053223664 1.6709637479563615 2.5726592894587248 1.670963747956367 2.5668612191553271 1.6709637479569457 2.5610631488518472 1.6709637479564918 2.5492599329881553 1.6709637479564994 2.543254787422788 1.6709637479566886 2.5372496418575823 1.6709637479566539 2.5252393507324911 1.6709637479566837 2.5192342051671037 1.6709637479572392 2.5132290596018612 1.6709637479560064 2.5014258437382777 1.6709637479560164 2.4956277734349301 1.6709637479577943 2.4898297031315444 1.6709637479566788 2.4782335609196213 1.6709637479566846 2.4724354890064686 1.6709637479572674 2.4666374170932555 1.6709637479562354 2.4548341996198886 1.6709637479562403 2.4488290540546434 1.6709637479567305 2.4428239084894074 1.6709637479567103 2.4314348399293166 1.6709637479567212 2.4260509169301532 1.6709637479569797 2.4206669939309089 1.6709637479567714 2.4092779253707834 1.6709637479567718 2.4032727798055351 1.6709637479571344 2.3972676342402375 1.6709637479566299 2.3852573431152031 1.6709637479566402 2.3792521975499841 1.6709637479563877 2.3732470519846496 1.6709637479573265 2.361236762469368 1.6709637479573469 2.355231618513935 1.6709637479568036 2.3492264745583169 1.6709637479564541 2.3376303323464747 1.6709637479564536 2.3320393340855592 1.6709637479565227 2.3264483358244634 1.6709637479573172 2.3148521920028644 1.6709637479573138 2.3088470464377426 1.6709637479570694 2.3028419008723047 1.6709637479555035 2.2922811285291447 1.6709637479554951 2.2877255017479383 1.6709637479589665 2.2831698749664815 1.6709637479563151 2.2726091026232984 1.6709637479563135 2.2666039570580918 1.6709637479566979 2.2605988114927298 1.670963747957299 2.2490026692808569 1.6709637479573001 2.2434116726296338 1.6709637479558759 2.2378206759783641 1.6709637479562545 2.2268457563314739 1.6709637479562622 2.2214618333322926 1.6709637479565305 2.2160779103331469 1.6709637479576418 2.2046888417729988 1.6709637479576469 2.1986836962076737 1.6709637479561052 2.1926785506423165 1.6709637479572186 2.1810824068205186 1.670963747957223 2.1754914085593438 1.6709637479559307 2.1699004102982942 1.6709637479574579 2.1585113417380271 1.6709637479574828 2.1527132714345409 1.670963747955863 2.1469152011312369 1.6709637479573847 2.1357332078325602 1.6709637479573889 2.1303492848333532 1.6709637479557038 2.1249653618341373 1.6709637479571593 2.1135762852249576 1.6709637479571682 2.1075711316106434 1.670963747957086 2.1015659779963638 1.6709637479572976 2.0897627524739617 1.6709637479573125 2.0839646805607366 1.6709637479559649 2.0781666086476118 1.6709637479572372 2.0663633927840648 1.6709637479572437 2.0603582488286443 1.6709637479558326 2.0543531048731416 1.6709637479573505 2.0425498890095266 1.6709637479573474 2.0367518170963672 1.6709637479548105 2.0309537451830928 1.670963747957755 2.0191505277095456 1.6709637479577613 2.0131453821441534 1.6709637479560082 2.0071402365787794 1.6709637479571111 1.9951299454535405 1.67096374795712 1.9891247998881441 1.6709637479565373 1.9831196543227927 1.6709637479578421 1.9711093648073397 1.6709637479578465 1.9651042208517431 1.670963747955283 1.9590990768962055 1.6709637479574611 1.9470887873808151 1.6709637479574797 1.9410836418154154 1.6709637479564194 1.9350784962501506 1.6709637479568882 1.9230682051250321 1.6709637479568953 1.9170630595596847 1.6709637479553474 1.911057913994413 1.6709637479579984 1.8994617717824638 1.6709637479580084 1.8938707751311525 1.6709637479544075 1.8882797784798382 1.6709637479574426 1.8766836362679387 1.6709637479574502 1.8706784907026464 1.6709637479556707 1.8646733451373847 1.6709637479571942 1.8526630540122642 1.6709637479572026 1.8466579084468804 1.6709637479556507 1.840652762881559 1.6709637479576562 1.8286424717563499 1.6709637479576633 1.8226373261909847 1.6709637479570691 1.8166321806256167 1.6709637479572841 1.8046218895003845 1.670963747957289 1.7986167439350256 1.670963747956554 1.7926115983696302 1.670963747955823 1.7806013088542105 1.6709637479558208 1.7745961648986717 1.6709637479595874 1.7685910209431022 1.6709637479566937 1.7567878050793804 1.6709637479566983 1.7509897331661439 1.6709637479558264 1.7451916612529055 1.6709637479574642 1.7333884437793867 1.670963747957467 1.7273832982140647 1.6709637479564459 1.721378152648696 1.6709637479566932 1.7095749367850113 1.6709637479566959 1.7037768664815913 1.6709637479569348 1.6979787961782136 1.6709637479569044 1.6861755803145335 1.6709637479569144 1.6801704347491642 1.6709637479581443 1.6741652891838585 1.6709637479564285 1.6621549980587118 1.6709637479564348 1.6561498524933755 1.6709637479583614 1.6501447069280588 1.6709637479569444 1.6381344158028783 1.6709637479569497 1.6321292702375196 1.6709637479563517 1.6261241246721594 1.6709637479574986 1.6141138335469321 1.670963747957503 1.6081086879815865 1.6709637479577628 1.6021035424161674 1.6709637479565489 1.5903003265524345 1.670963747956548 1.5845022562490274 1.6709637479581252 1.578704185945597 1.6709637479571593 1.5669009700818517 1.6709637479571628 1.5608958245164655 1.6709637479575228 1.554890678951085 1.6709637479569042 1.542880387825893 1.6709637479569086 1.536875242260602 1.6709637479609045 1.5308700966952318 1.6709637479551229 1.5188598055700884 1.6709637479551176 1.5128546600048274 1.6709637479594888 1.5068495144394634 1.6709637479572275 1.4948392249240909 1.6709637479572319 1.4888340809685032 1.6709637479552999 1.482828937012951 1.6709637479580248 1.4714398684526613 1.6709637479580262 1.4660559438436345 1.6709637479579968 1.4606720192345395 1.6709637479561896 1.4492829506742748 1.6709637479561905 1.4432778067187244 1.670963747959805 1.4372726627631378 1.6709637479571053 1.4252623732477172 1.6709637479571049 1.4192572276823583 1.6709637479550243 1.4132520821170087 1.6709637479585304 1.4012417909918371 1.6709637479585291 1.3952366454265099 1.6709637479558523 1.3892314998612065 1.6709637479568591 1.3772212087360469 1.6709637479568622 1.3712160631706845 1.6709637479572461 1.3652109176053249 1.6709637479583324 1.3532006264800933 1.6709637479583284 1.3471954809147164 1.6709637479564974 1.3411903353493337 1.6709637479569004 1.3291800458339205 1.6709637479568991 1.3231749018783803 1.6709637479588615 1.317169757922811 1.6709637479567969 1.3051594684074126 1.6709637479568005 1.2991543228420619 1.6709637479568895 1.2931491772767103 1.6709637479574733 1.2811388861515203 1.6709637479574755 1.2751337405861642 1.6709637479568695 1.2691285950208346 1.6709637479576138 1.257739526460582 1.6709637479576196 1.2523556034612775 1.6709637479566632 1.2469716804620505 1.6709637479563824 1.2355826119017921 1.6709637479563819 1.2295774663364361 1.6709637479594948 1.2235723207711082 1.6709637479566377 1.2115620296459026 1.6709637479566413 1.2055568840804827 1.6709637479575103 1.1995517385151375 1.6709637479580361 1.1875414473899175 1.6709637479580379 1.1815363018246197 1.6709637479535937 1.1755311562592328 1.6709637479589501 1.1637279403955303 1.670963747958949 1.1579298700921015 1.6709637479559865 1.152131799788682 1.6709637479559847 1.1405356575766428 1.6709637479559851 1.1347375856633957 1.6709637479609543 1.1289395137501923 1.6709637479554977 1.1171362962767089 1.6709637479554995 1.1111311507113428 1.670963747960365 1.1051260051460507 1.6709637479570121 1.0920397263855945 1.6709637479570136 1.0849585931943475 1.6709637479581529 1.0778774599772705 1.6709637479567996 1.0707963267949037 1.6709637479567963 + 0 5 0.011548533482787829 3 0.022748228667457054 3 0.033547932295468111 3 0.045147615927163397 3 0.056747299558701086 3 0.068346983190321939 3 0.07994666682178439 3 0.091146358896495944 3 0.10274604252801474 3 0.11434572615953249 3 0.12554541823442925 3 0.13714510186563086 3 0.14834479704975942 3 0.15994448068114825 3 0.17154416120277116 3 0.1831438448340445 3 0.1939435515713091 3 0.20514324364611133 3 0.2163429388306003 3 0.22674265401107108 3 0.23834233764221247 3 0.2491420412697509 3 0.26034173645395881 3 0.27194142008520567 3 0.28314111216001581 3 0.29474079579128204 3 0.30634047942248177 3 0.31754017149707647 3 0.32873986668120325 3 0.34033955031231117 3 0.35073926549257362 3 0.36233894912368908 3 0.37393863275470834 3 0.38553831327630411 3 0.39633802001307711 3 0.40793770364407461 3 0.41673746192573013 3 0.42833714555672125 3 0.43913684918397305 3 0.44953656436405021 3 0.46113624799513059 3 0.47193595473212169 3 0.48313564680651344 3 0.49353536198670106 3 0.5051350611653882 3 0.51633475634939829 3 0.52793443687085295 3 0.5391341320550479 3 0.55073381568635738 3 0.5623334993176492 3 0.57393317983940018 3 0.58553286347053146 3 0.59713254710165986 3 0.60793225072911627 3 0.61953193436015752 3 0.63113161799135487 3 0.64273130162256376 3 0.65433098525379763 3 0.66593066577552051 3 0.67713036095973655 3 0.6887300445909823 3 0.69992973666564051 3 0.71152942029684241 3 0.72312910392803065 3 0.73472878755931514 3 0.74632847119064916 3 0.75752816326532513 3 0.76912784689663038 3 0.78072753052780042 3 0.79232721415907092 3 0.80392689468086365 3 0.81432661297086495 3 0.82592629349268054 3 0.83752597712401355 3 0.84912566075522145 3 0.86072534438656667 3 0.87232502801793743 3 0.88392470853980132 3 0.89552439217116608 3 0.90712407580253085 3 0.91752379098303183 3 0.9291234746143967 3 0.94072315824579789 3 0.95232284187714 3 0.96352253395194432 3 0.97472222913632778 3 0.98632191276775827 3 1 5 +7 0 0 4 266 89 2.0707963267948788 -0.50250628144682674 2.0648176616132292 -0.50250627671491332 2.058838996434512 -0.50250628538900277 2.052860331226281 -0.50250628144667031 2.0410835941379162 -0.50250628144667164 2.0352855222246835 -0.50250628144623055 2.0294874503114899 -0.50250628144648302 2.0180983817511575 -0.50250628144648368 2.0125073850998612 -0.50250628144662579 2.0069163884484298 -0.50250628144633647 1.9953202462364068 -0.5025062814463398 1.9893151006711585 -0.50250628144664877 1.983309955105713 -0.50250628144585152 1.9712996639806093 -0.5025062814458553 1.9652945184153672 -0.50250628144741771 1.9592893728500855 -0.50250628144615017 1.9472790817249905 -0.50250628144615062 1.9412739361595392 -0.50250628144589082 1.9352687905943953 -0.5025062814468948 1.9232584994693291 -0.50250628144690768 1.9172533539039027 -0.50250628144653964 1.9112482083388056 -0.50250628144601661 1.8994449924753602 -0.50250628144602205 1.893646922172018 -0.50250628144625009 1.8878488518687799 -0.50250628144692644 1.8760456360052575 -0.50250628144692755 1.870040490439971 -0.50250628144584431 1.8640353448746436 -0.50250628144647747 1.8520250537495664 -0.50250628144647791 1.8460199081842463 -0.50250628144626219 1.8400147626189947 -0.50250628144612952 1.8282115467553732 -0.50250628144613019 1.8224134764519606 -0.5025062814474992 1.8166154061486104 -0.50250628144613385 1.8048121902850682 -0.50250628144613907 1.7988070447198166 -0.50250628144601805 1.7928018991545611 -0.50250628144711307 1.7809986816812891 -0.50250628144710807 1.7752006097682766 -0.5025062814459178 1.7694025378550817 -0.50250628144627441 1.757599320381684 -0.50250628144627874 1.7515941748163808 -0.50250628144625853 1.7455890292509961 -0.50250628144641918 1.7335787397357663 -0.50250628144642007 1.7275735957803384 -0.50250628144663034 1.7215684518250007 -0.50250628144640375 1.7095581623098477 -0.50250628144640686 1.7035530167445081 -0.50250628144640341 1.6975478711793239 -0.50250628144645137 1.6859517273576177 -0.50250628144645637 1.6803607290964251 -0.50250628144661857 1.6747697308353593 -0.50250628144654064 1.6633806622750782 -0.50250628144654153 1.6575825919716975 -0.5025062814465 1.6517845216682614 -0.50250628144611431 1.6401883794562377 -0.50250628144611675 1.634390307543016 -0.50250628144680209 1.6285922356297544 -0.5025062814465302 1.617410240721221 -0.50250628144653087 1.6120263177221199 -0.50250628144678022 1.6066423947227904 -0.50250628144600129 1.5952533261627062 -0.50250628144600928 1.5892481805975607 -0.50250628144719989 1.583243035032277 -0.50250628144620468 1.5716468928204379 -0.50250628144620679 1.5660558961690736 -0.50250628144674603 1.5604648995178922 -0.50250628144631693 1.5490758309576886 -0.5025062814463217 1.543277759044438 -0.50250628144715648 1.5374796871313599 -0.50250628144604848 1.5256764696580034 -0.50250628144605158 1.5196713240926731 -0.50250628144647924 1.5136661785274734 -0.50250628144667864 1.501862962663832 -0.50250628144668208 1.4960648923603499 -0.50250628144575293 1.4902668220569304 -0.50250628144641207 1.478463606193239 -0.50250628144641252 1.4724584606279054 -0.50250628144716436 1.4664533150626333 -0.50250628144606257 1.4544430239375421 -0.50250628144606768 1.4484378783721612 -0.50250628144662501 1.4424327328069844 -0.50250628144666654 1.4306295169434007 -0.50250628144667508 1.4248314466399341 -0.50250628144619536 1.4190333763366327 -0.50250628144660525 1.4074372341247092 -0.50250628144660547 1.4016391622115092 -0.50250628144629061 1.395841090298368 -0.50250628144666176 1.3840378728250018 -0.50250628144666576 1.3780327272597128 -0.50250628144630183 1.3720275816944845 -0.50250628144639953 1.3606385131343937 -0.5025062814464003 1.3552545901351816 -0.50250628144615184 1.3498706671360081 -0.50250628144683629 1.3384815985758824 -0.50250628144683696 1.3324764530105582 -0.50250628144584508 1.326471307445346 -0.50250628144693588 1.3144610163203119 -0.50250628144694187 1.3084558707549987 -0.50250628144510312 1.3024507251897406 -0.50250628144710552 1.2904404356744592 -0.50250628144711351 1.2844352917189747 -0.50250628144567411 1.2784301477634061 -0.50250628144641518 1.2668340055515639 -0.50250628144641241 1.2612430072906129 -0.50250628144577048 1.2556520090295622 -0.50250628144718035 1.244055865207963 -0.50250628144717779 1.2380507196427233 -0.50250628144477449 1.2320455740774336 -0.5025062814465473 1.2214848017342741 -0.50250628144654685 1.2169291749529019 -0.50250628144613352 1.2123735481715969 -0.50250628144650411 1.2018127758284136 -0.50250628144650289 1.1958076302631395 -0.50250628144631604 1.1898024846977959 -0.50250628144642739 1.1782063424859228 -0.50250628144643383 1.172615345834721 -0.50250628144601905 1.1670243491834649 -0.50250628144651954 1.1560494295365751 -0.50250628144652298 1.150665506537367 -0.50250628144615039 1.1452815835382122 -0.50250628144653942 1.1338925149780639 -0.50250628144654386 1.1278873694127953 -0.50250628144626808 1.1218822238473742 -0.50250628144661624 1.1102860800255763 -0.50250628144662246 1.1046950817645189 -0.50250628144640497 1.0991040835033226 -0.50250628144642351 1.0877150149430557 -0.50250628144642517 1.0819169446396764 -0.50250628144634979 1.0761188743363119 -0.50250628144652609 1.064936881037635 -0.50250628144652909 1.0595529580384526 -0.50250628144629028 1.0541690350392163 -0.50250628144651466 1.0427799584300372 -0.5025062814465151 1.0367748048157477 -0.50250628144668685 1.0307696512014279 -0.50250628144616205 1.0189664256790261 -0.50250628144616272 1.0131683537658454 -0.50250628144625664 1.0073702818526971 -0.50250628144665699 0.99556706598915023 -0.50250628144665743 0.98956192203370852 -0.50250628144520249 0.9835567780782335 -0.50250628144682963 0.97175356221461862 -0.50250628144682574 0.96595549030147454 -0.50250628144598919 0.96015741838815749 -0.50250628144632536 0.94835420091461031 -0.50250628144632969 0.94234905534926927 -0.50250628144669329 0.93634390978386717 -0.50250628144657195 0.92433361865862851 -0.50250628144657328 0.91832847309323962 -0.50250628144630638 0.91232332752787415 -0.50250628144670895 0.90031303801242135 -0.50250628144671095 0.89430789405687194 -0.50250628144689224 0.8883027501012648 -0.50250628144595277 0.87629246058587462 -0.50250628144595388 0.87028731502056944 -0.50250628144729526 0.86428216945523884 -0.50250628144646103 0.85227187833012041 -0.5025062814464617 0.84626673276478381 -0.50250628144601894 0.84026158719949373 -0.50250628144666287 0.8286654449875448 -0.50250628144666376 0.82307444833625454 -0.50250628144568699 0.81748345168492054 -0.50250628144649789 0.80588730947302156 -0.50250628144649834 0.79988216390775091 -0.50250628144615872 0.79387701834246616 -0.50250628144635112 0.78186672721734607 -0.50250628144635157 0.77586158165199681 -0.50250628144658716 0.76985643608663179 -0.50250628144621834 0.757846144961423 -0.50250628144622078 0.75184099939608895 -0.5025062814467568 0.74583585383069406 -0.50250628144621223 0.73382556270546184 -0.5025062814462149 0.7278204171401238 -0.5025062814465403 0.72181527157471803 -0.50250628144607845 0.70980498205929909 -0.50250628144607423 0.70379983810375424 -0.50250628144686493 0.69779469414819251 -0.50250628144638454 0.68599147828447093 -0.50250628144638498 0.6801934063712658 -0.50250628144678522 0.67439533445798439 -0.50250628144631437 0.66259211698446585 -0.50250628144631759 0.65658697141916744 -0.50250628144642406 0.6505818258537901 -0.50250628144645693 0.63877860999010561 -0.50250628144645737 0.63298053968670598 -0.5025062814469472 0.62718246938329492 -0.50250628144614184 0.61537925351961498 -0.50250628144614273 0.60937410795425506 -0.50250628144629805 0.60336896238897253 -0.50250628144696208 0.59135867126382591 -0.50250628144696718 0.58535352569846066 -0.50250628144632203 0.57934838013313561 -0.50250628144599185 0.56733808900795524 -0.50250628144599452 0.56133294344261564 -0.50250628144635778 0.55532779787725906 -0.50250628144671194 0.54331750675203216 -0.5025062814467135 0.53731236118666015 -0.50250628144577947 0.53130721562126226 -0.50250628144645193 0.5195039997575297 -0.50250628144644971 0.51370592945413718 -0.50250628144650555 0.50790785915069481 -0.50250628144659415 0.49610464328694986 -0.50250628144659482 0.49009949772153127 -0.50250628144567622 0.48409435215619318 -0.50250628144682896 0.47208406103100148 -0.50250628144683207 0.46607891546566727 -0.50250628144564236 0.46007376990033189 -0.50250628144651299 0.44806347877518837 -0.50250628144650966 0.4420583332099548 -0.50250628144731269 0.43605318764453982 -0.50250628144591336 0.42404289812916751 -0.50250628144591625 0.41803775417362238 -0.50250628144691756 0.41203261021805193 -0.50250628144661613 0.40064354165776267 -0.50250628144661635 0.39525961704874057 -0.50250628144659026 0.38987569243962911 -0.50250628144627796 0.37848662387936421 -0.50250628144628007 0.37248147992383257 -0.50250628144655451 0.36647633596822787 -0.5025062814462915 0.35446604645280744 -0.50250628144628862 0.34846090088745024 -0.50250628144631537 0.34245575532211259 -0.50250628144658882 0.33044546419694143 -0.50250628144658838 0.32444031863161421 -0.50250628144654375 0.31843517306629665 -0.50250628144628218 0.30642488194113709 -0.50250628144628329 0.30041973637579678 -0.50250628144659282 0.29441459081041632 -0.50250628144626863 0.28240429968518488 -0.50250628144626419 0.27639915411983934 -0.50250628144644582 0.27039400855444173 -0.50250628144675191 0.25838371903902896 -0.50250628144675169 0.25237857508345563 -0.50250628144560883 0.24637343112790483 -0.50250628144636467 0.23436314161250651 -0.50250628144636489 0.22835799604715243 -0.50250628144621523 0.22235285048180314 -0.50250628144622489 0.21034255935661322 -0.502506281446226 0.20433741379127529 -0.50250628144685672 0.19833226822593283 -0.50250628144631082 0.18694319966568057 -0.50250628144631271 0.18155927666638941 -0.50250628144670895 0.17617535366713996 -0.50250628144631981 0.16478628510688192 -0.50250628144631704 0.15878113954156811 -0.50250628144657994 0.15277599397619857 -0.50250628144628551 0.14076570285099327 -0.5025062814462864 0.13476055728557401 -0.50250628144588561 0.12875541172025382 -0.5025062814466309 0.11674512059503397 -0.50250628144663423 0.11073997502965288 -0.50250628144553544 0.10473482946435424 -0.50250628144648646 0.092931613600652246 -0.50250628144648368 0.087133543297201424 -0.50250628144609355 0.081335472993778676 -0.50250628144664145 0.069739330781739717 -0.50250628144664256 0.063941258868531761 -0.50250628144612275 0.058143186955275206 -0.50250628144642739 0.046339969481791983 -0.50250628144643039 0.040334823916474846 -0.50250628144587495 0.03432967835115415 -0.50250628144651333 0.021243399590698521 -0.5025062814465141 0.014162266399482993 -0.50250628144669496 0.007081133182366443 -0.50250628144637421 0 -0.50250628144637177 + 0 5 0.011548533482787829 3 0.022748228667457054 3 0.033547932295468111 3 0.045147615927163397 3 0.056747299558701086 3 0.068346983190321939 3 0.07994666682178439 3 0.091146358896495944 3 0.10274604252801474 3 0.11434572615953249 3 0.12554541823442925 3 0.13714510186563086 3 0.14834479704975942 3 0.15994448068114825 3 0.17154416120277116 3 0.1831438448340445 3 0.1939435515713091 3 0.20514324364611133 3 0.2163429388306003 3 0.22674265401107108 3 0.23834233764221247 3 0.2491420412697509 3 0.26034173645395881 3 0.27194142008520567 3 0.28314111216001581 3 0.29474079579128204 3 0.30634047942248177 3 0.31754017149707647 3 0.32873986668120325 3 0.34033955031231117 3 0.35073926549257362 3 0.36233894912368908 3 0.37393863275470834 3 0.38553831327630411 3 0.39633802001307711 3 0.40793770364407461 3 0.41673746192573013 3 0.42833714555672125 3 0.43913684918397305 3 0.44953656436405021 3 0.46113624799513059 3 0.47193595473212169 3 0.48313564680651344 3 0.49353536198670106 3 0.5051350611653882 3 0.51633475634939829 3 0.52793443687085295 3 0.5391341320550479 3 0.55073381568635738 3 0.5623334993176492 3 0.57393317983940018 3 0.58553286347053146 3 0.59713254710165986 3 0.60793225072911627 3 0.61953193436015752 3 0.63113161799135487 3 0.64273130162256376 3 0.65433098525379763 3 0.66593066577552051 3 0.67713036095973655 3 0.6887300445909823 3 0.69992973666564051 3 0.71152942029684241 3 0.72312910392803065 3 0.73472878755931514 3 0.74632847119064916 3 0.75752816326532513 3 0.76912784689663038 3 0.78072753052780042 3 0.79232721415907092 3 0.80392689468086365 3 0.81432661297086495 3 0.82592629349268054 3 0.83752597712401355 3 0.84912566075522145 3 0.86072534438656667 3 0.87232502801793743 3 0.88392470853980132 3 0.89552439217116608 3 0.90712407580253085 3 0.91752379098303183 3 0.9291234746143967 3 0.94072315824579789 3 0.95232284187714 3 0.96352253395194432 3 0.97472222913632778 3 0.98632191276775827 3 1 5 +7 0 0 4 182 61 1.0707963267948797 1.670963747957483 1.0662760502661324 1.6709637479574846 1.0617557737164471 1.6709637479564181 1.057235497185226 1.6709637479575812 1.0483169909307599 1.6709637479575845 1.0439187612154868 1.6709637479548776 1.0395205315002192 1.6709637479578598 1.0305669924383203 1.670963747957859 1.0260116830903991 1.6709637479577675 1.0214563737425082 1.6709637479568362 1.0123457550481263 1.6709637479568358 1.0077904457002247 1.6709637479573123 1.0032351363524237 1.6709637479578685 0.99428159729067378 1.6709637479578638 0.98988336757549755 1.6709637479543813 0.98548513786031855 1.6709637479576809 0.97653159879859308 1.6709637479576764 0.97197628945080083 1.6709637479553843 0.96742098010293154 1.6709637479581687 0.9583103614085996 1.6709637479581718 0.95375505206071465 1.6709637479570429 0.94919974271283891 1.670963747956506 0.94024620365100608 1.6709637479565098 0.93584797393580355 1.6709637479590769 0.93144974422054205 1.6709637479565529 0.92249620515870301 1.6709637479565498 0.91794089581082716 1.6709637479580599 0.91338558646296719 1.6709637479573491 0.90427496776861915 1.6709637479573478 0.89971965842075374 1.6709637479556581 0.89516434907290032 1.6709637479578736 0.88605373037854362 1.6709637479578754 0.88149842103070797 1.6709637479557367 0.8769431116827483 1.6709637479582333 0.86814665225360943 1.6709637479582227 0.86390550217126161 1.6709637479566233 0.85966435208876946 1.6709637479565955 0.85102497229221363 1.6709637479565937 0.84662674257700488 1.670963747958345 0.84222851286185285 1.6709637479564379 0.83343205343278925 1.6709637479564357 0.82903382371773515 1.6709637479577584 0.82463559400270414 1.6709637479569028 0.81583913457359203 1.6709637479569024 0.81144090485835441 1.670963747958762 0.80704267514312145 1.6709637479571646 0.79808913608119203 1.6709637479571602 0.79353382673323458 1.6709637479572554 0.78897851738525393 1.6709637479571475 0.77986789869081052 1.6709637479571466 0.77531258934291791 1.6709637479574264 0.77075727999512145 1.670963747956967 0.76196082056599956 1.6709637479569692 0.75771967048346844 1.6709637479577293 0.7534785204010972 1.6709637479572348 0.74468206097195233 1.6709637479572352 0.74012675162409824 1.6709637479557802 0.73557144227618265 1.6709637479580381 0.72646082358183517 1.6709637479580319 0.72190551423402594 1.6709637479556723 0.71735020488610468 1.6709637479576152 0.70855374545702698 1.6709637479576056 0.70431259537468127 1.6709637479565262 0.70007144529226961 1.6709637479576049 0.69127498586323621 1.6709637479576036 0.6867196765153899 1.6709637479572796 0.68216436716760931 1.6709637479568056 0.6733679077385506 1.6709637479568034 0.66912675765610607 1.6709637479590418 0.66488560757371296 1.6709637479569448 0.65608914814465735 1.6709637479569435 0.65153383879680127 1.6709637479574837 0.64697852944903256 1.6709637479572756 0.63786791075483706 1.670963747957277 0.63331260140705703 1.6709637479577455 0.62875729205932596 1.6709637479567139 0.61964667336514156 1.6709637479567157 0.61509136401728581 1.6709637479578174 0.61053605466949168 1.6709637479571466 0.60142543597514997 1.6709637479571426 0.59687012662726502 1.6709637479562909 0.5923148172793451 1.6709637479574422 0.58336127821770956 1.6709637479574404 0.57896304850275582 1.6709637479570816 0.57456481878768073 1.6709637479569082 0.56592543899125025 1.6709637479568999 0.56168428890876998 1.6709637479576585 0.55744313882629626 1.6709637479571706 0.54864667939710443 1.6709637479571697 0.54409137004919661 1.6709637479569983 0.53953606070131765 1.6709637479572996 0.53058252163950237 1.670963747957291 0.52618429192439842 1.6709637479566728 0.52178606220906165 1.6709637479577304 0.51298960278000882 1.6709637479577153 0.50859137306509039 1.6709637479565744 0.50419314335002918 1.6709637479569617 0.49555376355372172 1.6709637479569563 0.49131261347138133 1.670963747956929 0.48707146338899499 1.670963747957382 0.4782750039599617 1.6709637479573756 0.47371969461209812 1.6709637479574035 0.4691643852643021 1.6709637479564003 0.46005376657007041 1.6709637479564021 0.455498457222205 1.670963747957092 0.45094314787451067 1.6709637479571451 0.44183252918038246 1.6709637479571415 0.43727721983258921 1.670963747956747 0.43272191048490943 1.6709637479578334 0.42361129179070295 1.6709637479578294 0.4190559824428346 1.6709637479561295 0.41450067309496474 1.6709637479573662 0.40586129329862752 1.6709637479573531 0.40177722284913459 1.6709637479566535 0.39769315239945946 1.6709637479574175 0.38905377260311069 1.6709637479574095 0.38449846325528308 1.6709637479573143 0.37994315390745048 1.6709637479565391 0.3709896148458649 1.6709637479565391 0.36659138513080947 1.6709637479578257 0.36219315541581421 1.6709637479567689 0.35339669598693479 1.6709637479567623 0.34899846627194464 1.6709637479574362 0.34460023655685512 1.6709637479569208 0.33564669749528198 1.6709637479569082 0.33109138814753791 1.6709637479560868 0.32653607879966207 1.6709637479575674 0.31742546010541833 1.6709637479575594 0.3128701507576806 1.6709637479557156 0.30831484140979709 1.670963747957289 0.29920422271561031 1.6709637479572788 0.29464891336790261 1.6709637479562682 0.29009360402008394 1.6709637479571009 0.28098298532586441 1.6709637479570933 0.27642767597800966 1.6709637479574568 0.27187236663023184 1.6709637479566004 0.26276174793597107 1.6709637479565995 0.25820643858812498 1.6709637479573414 0.25365112924031441 1.6709637479568917 0.24501174944395324 1.6709637479568853 0.24092767899439579 1.6709637479566584 0.23684360854466222 1.6709637479569746 0.22820422874830257 1.6709637479569623 0.22364891940051002 1.6709637479558013 0.21909361005269581 1.6709637479578132 0.20998299135845599 1.6709637479578114 0.20542768201063605 1.6709637479557264 0.20087237266286309 1.6709637479569788 0.19254715213168622 1.6709637479569768 0.18877724094729512 1.6709637479573507 0.18500732976301795 1.6709637479567372 0.1768391888643942 1.6709637479567379 0.17244095914918242 1.6709637479576782 0.16804272943412207 1.670963747956534 0.15908919037246233 1.6709637479565347 0.15453388102462889 1.6709637479562087 0.14997857167686843 1.6709637479575621 0.14086795298270599 1.6709637479575608 0.13631264363495402 1.6709637479558324 0.13175733428717196 1.6709637479570669 0.12264671559323943 1.6709637479570549 0.11809140624576296 1.6709637479572388 0.1135360968981247 1.6709637479565718 0.1045825578367693 1.6709637479565631 0.10018432812171081 1.6709637479575412 0.095786098406636988 1.6709637479567307 0.087303798242948122 1.6709637479567236 0.083219727793339277 1.6709637479560937 0.079135657343736301 1.6709637479574997 0.070496277547350467 1.6709637479574928 0.065940968199494895 1.6709637479568107 0.061385658851591189 1.6709637479566535 0.052275040157147679 1.6709637479566428 0.047719730809208473 1.6709637479573567 0.043164421461262953 1.6709637479570463 0.034053802766858633 1.6709637479570418 0.029498493419003614 1.6709637479559518 0.024943184071188732 1.6709637479572732 0.015290906049099655 1.6709637479572663 0.010193937353019746 1.6709637546798461 0.0050969686774913828 1.6709637398888286 0 1.6709637479569894 + 0 5 0.016885663228528157 3 0.033315415946142603 3 0.05033194554617966 3 0.067348475145961539 3 0.083778227863323215 3 0.10079475746298808 3 0.11781128706285797 3 0.13424103978051699 3 0.15125756938043611 3 0.16827409898033363 3 0.18529062858025008 3 0.20113360441512082 3 0.21756335713266711 3 0.23399310984966756 3 0.25042286256732138 3 0.26743939216761792 3 0.28445592176736351 3 0.30029889760205897 3 0.31731542720195333 3 0.33433195680183331 3 0.3501749326363307 3 0.36719146223593191 3 0.38303443807062793 3 0.40005096767034393 3 0.41706749726982423 3 0.43408402686953967 3 0.45110055646958414 3 0.46753030918630489 3 0.48337328502127536 3 0.50038981462120724 3 0.51681956733858703 3 0.53324932005512993 3 0.54909229588934283 3 0.56610882548893782 3 0.58312535508829999 3 0.60014188468747232 3 0.61715841428696994 3 0.63241461323814696 3 0.64943114283736192 3 0.6658608955536609 3 0.68229064826996444 3 0.69930717786905539 3 0.71632370746814211 3 0.73334023706721796 3 0.75035676666659634 3 0.76737329626597206 3 0.78262949521752079 3 0.79964602481703828 3 0.81666255441655133 3 0.8307451996032621 3 0.84717495232036144 3 0.86419148191971829 3 0.8812080115189499 3 0.89822454111757233 3 0.91465429383441088 3 0.92991049278591253 3 0.9469270223855828 3 0.96394355198555626 3 0.98096008158505532 3 1 5 +7 0 0 4 182 61 6.2831853071795862 -0.50250628144673171 6.2786650306508394 -0.50250628144673359 6.2741447541011395 -0.50250628144715725 6.2696244775699057 -0.50250628144600273 6.2607059713154394 -0.50250628144600296 6.2563077416001835 -0.50250628144760712 6.2519095118849135 -0.50250628144628495 6.2429559728230153 -0.50250628144628495 6.2384006634750708 -0.5025062814458503 6.2338453541272258 -0.50250628144723186 6.2247347354328451 -0.50250628144722809 6.2201794260848811 -0.50250628144542375 6.2156241167371222 -0.50250628144651988 6.2066705776753723 -0.50250628144651877 6.20227234796016 -0.5025062814469895 6.1978741182450099 -0.50250628144621368 6.188920579183284 -0.50250628144621157 6.1843652698354799 -0.50250628144805876 6.1798099604876242 -0.50250628144599152 6.1706993417932932 -0.50250628144599352 6.166144032445402 -0.50250628144670662 6.1615887230975455 -0.50250628144706755 6.152635184035713 -0.50250628144707166 6.1482369543205122 -0.50250628144565135 6.1438387246052208 -0.5025062814467105 6.1348851855433821 -0.50250628144670739 6.1303298761955469 -0.50250628144688503 6.1257745668476487 -0.5025062814460548 6.1166639481533007 -0.5025062814460528 6.1121086388054211 -0.50250628144712894 6.1075533294576037 -0.5025062814463096 6.0984427107632468 -0.50250628144631249 6.0938874014153814 -0.50250628144689458 6.0893320920674681 -0.50250628144645382 6.0805356326383295 -0.50250628144645249 6.0762944825559568 -0.50250628144605558 6.0720533324734305 -0.502506281446648 6.0634139526768749 -0.502506281446643 6.0590157229617487 -0.50250628144625409 6.0546174932465293 -0.50250628144640941 6.0458210338174663 -0.5025062814464063 6.041422804102468 -0.50250628144747955 6.0370245743873738 -0.50250628144601428 6.0282281149582619 -0.50250628144601117 6.0238298852431109 -0.50250628144695386 6.019431655527816 -0.50250628144640386 6.0104781164658867 -0.50250628144640219 6.0059228071179227 -0.50250628144637832 6.0013674977699569 -0.50250628144658138 5.992256879075514 -0.50250628144658005 5.9877015697276423 -0.50250628144719744 5.9831462603797876 -0.50250628144592835 5.9743498009506659 -0.50250628144593046 5.9701086508682293 -0.50250628144759879 5.9658675007857953 -0.50250628144638476 5.9570710413566506 -0.50250628144638609 5.9525157320087558 -0.50250628144672238 5.9479604226609064 -0.50250628144641585 5.9388498039665594 -0.50250628144641407 5.9342944946186735 -0.50250628144637643 5.9297391852708223 -0.50250628144655141 5.9209427258417451 -0.5025062814465503 5.9167015757593369 -0.50250628144637732 5.912460425676981 -0.5025062814463892 5.9036639662479473 -0.50250628144638687 5.8991086569001094 -0.502506281447192 5.8945533475522831 -0.50250628144617293 5.8857568881232245 -0.50250628144616971 5.8815157380408944 -0.50250628144653753 5.8772745879583717 -0.50250628144642306 5.8684781285293157 -0.50250628144641796 5.8639228191815276 -0.5025062814463932 5.8593675098337297 -0.50250628144629383 5.8502568911395345 -0.50250628144629561 5.8457015817918201 -0.50250628144656906 5.8411462724439778 -0.50250628144663156 5.8320356537497933 -0.50250628144663601 5.8274803444020913 -0.50250628144691289 5.8229250350541797 -0.50250628144618381 5.813814416359838 -0.50250628144618137 5.809259107011945 -0.5025062814471476 5.8047037976640548 -0.50250628144634102 5.7957502586024194 -0.50250628144633902 5.7913520288874203 -0.5025062814461233 5.7869537991723865 -0.50250628144664955 5.7783144193759561 -0.50250628144664755 5.7740732692934973 -0.50250628144656162 5.7698321192109976 -0.50250628144637299 5.7610356597818058 -0.50250628144637188 5.7564803504338595 -0.50250628144608389 5.7519250410860492 -0.50250628144675813 5.7429715020242345 -0.50250628144675646 5.7385732723090079 -0.50250628144571985 5.7341750425937938 -0.50250628144639398 5.7253785831647415 -0.50250628144639198 5.7209803534498 -0.50250628144677689 5.7165821237347147 -0.50250628144625453 5.7079427439384069 -0.5025062814462512 5.7037015938560724 -0.50250628144611487 5.6994604437737264 -0.50250628144658327 5.6906639843446927 -0.50250628144658072 5.6861086749968148 -0.50250628144632536 5.6815533656489903 -0.50250628144670018 5.6724427469547596 -0.50250628144670084 5.6678874376069519 -0.50250628144650078 5.6633321282592188 -0.50250628144641019 5.6542215095650903 -0.5025062814464093 5.6496662002172799 -0.5025062814461273 5.6451108908696206 -0.50250628144593079 5.6360002721754139 -0.50250628144592968 5.6314449628275467 -0.50250628144726073 5.6268896534797044 -0.50250628144624909 5.6182502736833673 -0.50250628144624843 5.6141662032337898 -0.5025062814469351 5.6100821327841883 -0.50250628144609477 5.6014427529878397 -0.50250628144609333 5.5968874436399876 -0.50250628144658294 5.5923321342921266 -0.50250628144645781 5.583378595230541 -0.50250628144645582 5.5789803655155854 -0.50250628144648257 5.5745821358005001 -0.5025062814464184 5.5657856763716209 -0.50250628144641463 5.5613874466566582 -0.50250628144595411 5.5569892169415809 -0.50250628144668585 5.5480356778800077 -0.5025062814466843 5.5434803685321983 -0.50250628144655562 5.5389250591843835 -0.50250628144612164 5.5298144404901395 -0.50250628144612097 5.5252591311423531 -0.50250628144744902 5.5207038217945241 -0.50250628144597731 5.5115932031003378 -0.50250628144597687 5.5070378937525337 -0.50250628144670983 5.502482584404806 -0.50250628144647469 5.4933719657105859 -0.5025062814464738 5.4888166563627729 -0.50250628144636467 5.4842613470149111 -0.50250628144648857 5.4751507283206511 -0.50250628144648657 5.4705954189728816 -0.50250628144641896 5.4660401096250357 -0.50250628144658871 5.4574007298286746 -0.50250628144658771 5.4533166593790359 -0.50250628144606535 5.4492325889293811 -0.50250628144650722 5.4405932091330218 -0.502506281446505 5.4360378997851626 -0.50250628144674891 5.4314825904374366 -0.50250628144596121 5.4223719717431971 -0.50250628144595477 5.417816662395305 -0.50250628144709564 5.4132613530475862 -0.50250628144648579 5.4049361325164096 -0.50250628144648257 5.4011662213320353 -0.50250628144619724 5.3973963101476992 -0.50250628144641296 5.3892281692490753 -0.50250628144641385 5.3848299395339714 -0.50250628144624898 5.380431709818807 -0.50250628144657561 5.3714781707571468 -0.50250628144657605 5.3669228614093978 -0.50250628144728915 5.3623675520615608 -0.50250628144577869 5.3532569333673985 -0.50250628144577825 5.3487016240196859 -0.50250628144742726 5.3441463146718737 -0.50250628144626008 5.3350356959779406 -0.50250628144625564 5.3304803866304926 -0.50250628144614817 5.3259250772828368 -0.50250628144669285 5.3169715382214813 -0.50250628144669152 5.312573308506451 -0.50250628144585463 5.3081750787913613 -0.50250628144659493 5.2996927786276729 -0.50250628144659382 5.2956087081780243 -0.50250628144692333 5.2915246377284513 -0.50250628144590592 5.2828852579320662 -0.50250628144590559 5.2783299485841955 -0.50250628144638032 5.2737746392363221 -0.5025062814466561 5.2646640205418791 -0.50250628144665543 5.2601087111939195 -0.50250628144594767 5.2555534018459928 -0.50250628144627485 5.2464427831515881 -0.5025062814462713 5.2418874738037173 -0.50250628144715526 5.2373321644559008 -0.50250628144602838 5.2276798864338119 -0.50250628144602805 5.2225829177377552 -0.50250628480852988 5.2174859490622021 -0.50250627741217901 5.212388980384711 -0.50250628144626475 + 0 5 0.016885663228528157 3 0.033315415946142603 3 0.05033194554617966 3 0.067348475145961539 3 0.083778227863323215 3 0.10079475746298808 3 0.11781128706285797 3 0.13424103978051699 3 0.15125756938043611 3 0.16827409898033363 3 0.18529062858025008 3 0.20113360441512082 3 0.21756335713266711 3 0.23399310984966756 3 0.25042286256732138 3 0.26743939216761792 3 0.28445592176736351 3 0.30029889760205897 3 0.31731542720195333 3 0.33433195680183331 3 0.3501749326363307 3 0.36719146223593191 3 0.38303443807062793 3 0.40005096767034393 3 0.41706749726982423 3 0.43408402686953967 3 0.45110055646958414 3 0.46753030918630489 3 0.48337328502127536 3 0.50038981462120724 3 0.51681956733858703 3 0.53324932005512993 3 0.54909229588934283 3 0.56610882548893782 3 0.58312535508829999 3 0.60014188468747232 3 0.61715841428696994 3 0.63241461323814696 3 0.64943114283736192 3 0.6658608955536609 3 0.68229064826996444 3 0.69930717786905539 3 0.71632370746814211 3 0.73334023706721796 3 0.75035676666659634 3 0.76737329626597206 3 0.78262949521752079 3 0.79964602481703828 3 0.81666255441655133 3 0.8307451996032621 3 0.84717495232036144 3 0.86419148191971829 3 0.8812080115189499 3 0.89822454111757233 3 0.91465429383441088 3 0.92991049278591253 3 0.9469270223855828 3 0.96394355198555626 3 0.98096008158505532 3 1 5 +1 5.2359877559828139 21.77888886053676 1.465419628140081e-14 1 +1 3.1415926535896972 21.778888860536782 1.5177560434308014e-14 1 +1 1.0707963267948957 5.7999999999999998 1 0 +1 7.3067840827778063 22.62741699796949 -1 7.9160472071980886e-15 +1 2.0943951023930207 21.778888860536789 1.4915878357854395e-14 1 +1 6.2831853071795862 21.778888860536775 0 1 +1 -5.2123889803862173 5.7999999999999998 1 0 +1 11.495574287565804 22.627416997969508 -1 2.2617277734840687e-15 +1 3.1415926535897927 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 2 1 0 +2 0 0 1 0 -0 1 15.75 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 0 2 1 0 +2 0 0 1 0 -0 1 15.75 +1 3.1415926535913208 4.25 0 1 +1 3.1415926535913208 4.25 0 1 +1 0 4.25 0 1 +1 6.2831853071795862 4.25 0 1 +1 -6.2063353831181828e-17 4.0000000000009486 1 0 +2 5.0770335406894229e-13 2.9151509427980267e-13 -0.47942553860420345 0.87758256189037254 -0.87758256189037254 -0.47942553860420345 16 +1 -6.2063353831181828e-17 4.0000000000009486 1 0 +2 5.0770335406894229e-13 2.9151509427980267e-13 -0.47942553860420345 0.87758256189037254 -0.87758256189037254 -0.47942553860420345 16 +1 -1.0913936421275139e-09 3.7403521190436214e-09 0 1 +1 3.1415926524983995 3.7403521190436214e-09 0 1 +7 0 0 1 2 2 1.5994991997558827e-09 6.0000000000331966 3.1415926525268976 5.9999999981750989 + -4.7123889803800001 2 4.7123889803800001 2 +1 0 0 1 0 +1 0 -0.0060000000000000001 1 0 +7 0 0 5 9 3 11.866921577320682 -84.85198697597707 12.318769493636864 -84.024884901202768 13.095419648921961 -83.375223086211918 14.106301446468024 -83.078622287894632 16.115386139739712 -83.332713681094447 17.414709768783723 -84.886013982481018 17.711310571303329 -85.896895785187553 17.584264868948594 -86.901438132781095 17.132416945215482 -87.728540207555852 + -4.7123889803800001 6 4.4408920985e-16 3 4.7123889803800001 6 +7 0 0 5 9 3 1.3804513740303577 -2.6767604960567368 2.1766903071574433 -2.1725106146025084 2.7749107760224092 -1.3555784214583042 3.0056988518835794 -0.32767234295931047 2.6225636723649757 1.6608424734431324 0.98869929530465583 2.8572834108288419 -0.039206788614393417 3.0880714905493036 -1.0334641974000931 2.896503894984491 -1.8297031300490687 2.3922540061296758 + -4.7123889803800001 6 4.4408920985e-16 3 4.7123889803800001 6 +7 0 0 8 9 2 2.7065241669006777e-07 5.994000000110363 0.39269934914059768 5.9939999987923187 0.78502780501708003 5.9940000032220269 1.1787176565821937 5.9939999954222003 1.5707948274375667 5.9940000072201656 1.9628765608304093 5.9939999916423403 2.3565637742547096 5.9940000014676116 2.7488933035040892 5.9940000053218538 3.1415923834737605 5.9939999982522014 + -4.7123889803800001 9 4.7123889803800001 9 +1 3.1415926524983995 -3.7414730726808272e-09 0 1 +1 -1.0913936421275139e-09 -3.7414730726808272e-09 0 1 +1 -1.0230004996007462 6.0000000028838487 1 -2.8950115498336079e-13 +1 0 0 1 0 +1 0 -0.0060000000000000001 1 0 +2 14.499669257848783 -86.290263593508655 0.86632438691299207 0.49948178809625149 0.49948178809625149 -0.86632438691299207 2.9999999999998326 +2 -0.22462587952744037 -0.14225324848736423 0.44256969790802153 0.89673410913915974 -0.89673410913915985 0.44256969790802159 3.0000000000000004 +1 -1.0230004993253692 5.9940000029606786 1 0 +1 1.1704874662091976e-16 -4.9940000001304812 1 0 +2 -0.22362643161676507 -0.1325004887815526 -0.13102948760875693 0.99137847131001733 0.99137847131001733 0.13102948760875693 2 +1 0 -4.9940000001304812 1 0 +2 -0.22362643161676507 -0.1325004887815526 0.13102948760875693 -0.99137847131001733 -0.99137847131001733 -0.13102948760875693 2 +1 27.15017946467335 -80.108457799489614 0.16571050576735269 -0.98617444109971153 +1 13.500016430729907 20.000000001815291 1 6.7074124032728822e-13 +1 16.073919056636576 -95.658920788696719 -0.98617444109966845 -0.16571050576760793 +1 13.500000002700521 19.999999999635762 1 0 +1 0.52346956230137209 -84.582641484141902 0.16571050576735269 -0.98617444109971153 +1 13.500016399871859 20.000000001462816 1 6.7074124032728822e-13 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 -3.6415926535897936 12 1 0 +2 0 -3.5 0 1 -1 0 2 +1 -0.50000000000000056 12 1 0 +2 0 -3.5 0 1 -1 0 2 +1 16.514781440266344 -62.074853446617269 -0.16571050571425913 0.98617444110863295 +1 6.0466933095077646 13.999999997620051 1 -5.6732396558345487e-14 +7 0 0 1 2 2 3.1399764510063664 6.0000000014338184 3.1415926521806066 6.0000000014338184 + -6.0466933136050161 2 -6.0369961107772951 2 +1 -63.96301178930095 -6.0097648289007708 0.99999869394707286 -0.001616200528539002 +1 -63.96301178930095 -6.0097648289007708 0.99999869394707286 -0.001616200528539002 +1 3.1415926532485812 -6.6640026830100396e-10 0 1 +1 -1.2775958069255466e-09 17.000000000885009 2.5357493882438575e-13 1 +1 0 -4.4751966576939139e-09 0 1 +1 -2.918523200889922e-09 17.00000000185134 2.5357493882438575e-13 1 +1 -5.9266632423110881 -3.0000000043128239 1 0 +2 11.599735405355865 -69.032210875777594 -0.86632438691299207 -0.49948178809625149 0.49948178809625149 -0.86632438691299207 6.0000000000996963 +7 0 0 1 2 2 3.1399764524916765 5.9999999959897039 3.1415926537180696 5.9999999959909474 + 5.9266632423110881 2 5.9282794435323769 2 +2 -69.999999999078383 -1.7727366241615528e-09 -0.34750209718039204 0.93767920551499362 -0.93767920551499362 -0.34750209718039204 6.0000000000995923 +1 -5.9282794434196546 5.9999999925873473 1 0 +2 -69.999999999078383 -1.7727366241615528e-09 -0.34750209718039204 0.93767920551499362 -0.93767920551499362 -0.34750209718039204 6.0000000000995923 +1 4.6806881439946117 -64.063379515778081 -0.16571050511520283 0.98617444120929454 +1 6.0466933107366465 14.000000004328317 1 1.6803225477701744e-13 +1 -63.94361738304336 5.9902195014895803 0.9999986939460912 -0.001616201135992867 +1 27.000032803129297 17.000000000725034 -2.5357493882438575e-13 1 +1 26.999999998409912 16.999999995503224 2.0317081350640362e-14 1 +1 16.073919055937512 -95.658920787482671 -0.98617444109966845 -0.16571050576760793 +1 13.500000002016934 13.999999996752733 1 0 +1 27.00003286525483 16.999999994237861 -2.5357493882438575e-13 1 +1 -1.3103864660024556e-09 16.999999994659404 2.0317081350640362e-14 1 +1 -3.6415926535888348 0.75 1 0 +2 0 -5 0 1 -1 0 2.5 +2 0 -3.5 0 1 -1 0 2.5 +1 -0.49999999999904166 0.75 1 0 +2 0 -5 0 1 -1 0 2.5 +2 0 -3.5 0 1 -1 0 2.5 +1 -2.7850705882501723 5.9999999956912689 1 0 +2 -69.999999999906848 -2.072319205126405e-09 -0.34901712090067644 0.93711634780223663 -0.93711634780223663 -0.34901712090067644 11.500000000000137 +2 11.59973540579027 -69.032210876543914 -0.86551599274490654 -0.50088128963138467 0.50088128963138467 -0.86551599274490654 11.500000000000131 +1 0 0 1 0 +1 0 -2 1 0 +1 -5.9266632424324914 5.9999999956912689 1 0 +2 -69.999999999906848 -2.072319205126405e-09 -0.34901712090067644 0.93711634780223663 -0.93711634780223663 -0.34901712090067644 11.500000000000137 +2 11.59973540579027 -69.032210876543914 -0.86551599274490654 -0.50088128963138467 0.50088128963138467 -0.86551599274490654 11.500000000000131 +1 0 0 1 0 +1 0 -2 1 0 +2 11.59973540579027 -69.032210876543914 -0.86551599274490654 -0.50088128963138467 0.50088128963138467 -0.86551599274490654 11.500000000000131 +1 0 0 1 0 +1 0 -2 1 0 +7 0 0 1 2 2 0 5.9999999935748747 3.1415926537180696 5.9999999959909474 + -9.4247779607699993 2 9.4247779607699993 2 +7 0 0 5 15 5 -69.99999999949614 -5.9999999958099579 -69.057522204486077 -5.999999997078703 -68.115044407094274 -5.814944914640364 -67.221077895807412 -5.4446518606073369 -65.626505607370973 -4.3734943867721086 -64.555348134662836 -2.7789220985341672 -64.185055081615474 -1.8849555893375509 -63.814944919060736 6.235495675355196e-09 -64.185055081921291 1.8849556001123347 -64.555348133356574 2.7789221025304869 -65.626505605499233 4.3734943923900573 -67.221077896337647 5.4446518642162118 -68.115044405301887 5.8149449218799418 -69.057522204742554 6.0000000056415956 -69.999999999751026 6.0000000069103407 + -9.4247779607699993 6 -4.7123889803800001 3 8.881784197e-16 3 4.7123889803800001 3 9.4247779607699993 6 +1 1.0935246108253915e-16 2.9999999992460995 1 0 +2 -69.999999997586826 3.1023595701449464e-09 0.11585033087547396 -0.99326668162988496 0.99326668162988496 0.11585033087547396 5 +1 1.0935246108253915e-16 2.9999999992460995 1 0 +2 -69.999999997586826 3.1023595701449464e-09 0.11585033087547396 -0.99326668162988496 0.99326668162988496 0.11585033087547396 5 +1 0 0 1 0 +1 0 -2 1 0 +1 3.1415926535888339 0 0 1 +1 0 0 0 1 +1 0 0 0 1 +1 3.1415926535888339 0 0 1 +1 0 5.9041980193796917e-09 0 1 +1 3.1415926538515695 5.9041980193796917e-09 3.2936616399794159e-15 1 +1 3.1415926537446146 8.0318418582692175e-10 -1.6653345374038569e-15 1 +1 0 8.0318418582692175e-10 0 1 +1 1.8474585318591022e-16 4.0000000205248849 1 0 +2 -69.999679706891641 -2.8442509000953636e-05 -4.7247035061677836e-13 -1 1 -4.7247035061677836e-13 11.5 +1 1.8474585318591022e-16 4.0000000205248849 1 0 +2 -69.999679706891641 -2.8442509000953636e-05 4.7247035061677836e-13 1 -1 4.7247035061677836e-13 11.5 +1 1.1704874662091976e-16 -5.0000000000529301 1 0 +2 -0.22362546706631486 -0.13250050322559323 -0.13102948760875693 0.99137847131001733 0.99137847131001733 0.13102948760875693 2 +1 1.1704874662091976e-16 -5.0000000000529301 1 0 +2 -0.22362546706631486 -0.13250050322559323 0.13102948760875693 -0.99137847131001733 -0.99137847131001733 -0.13102948760875693 2 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +7 0 0 3 25 23 0 -0.64259243686846901 0.022818389394931519 -0.65295709013332792 0.069152324152227551 -0.67244392816773668 0.14048824801227791 -0.69792597241711907 0.21340831501431107 -0.71962438562860598 0.28764215998996123 -0.73755488778429568 0.36291910532657123 -0.7517525298057447 0.43897764327961014 -0.76226550664841919 0.51557673631757717 -0.76914162189854096 0.59251364666384987 -0.77241738050206854 0.66957379794029692 -0.77210738330867901 0.74652029959269739 -0.76820624096252887 0.82310404613390598 -0.76069283007221333 0.89907174441533821 -0.74953363501114478 0.97417078340692809 -0.73468785981869078 1.0481745013785009 -0.71610560161859504 1.1207984135045721 -0.69376038235694915 1.1917423912202467 -0.66766152062710793 1.2607487541112228 -0.63784988445284174 1.3276078400917906 -0.60440364061593466 1.3921652841773993 -0.56743985450352907 1.4543193447896645 -0.52712052670466791 1.514009961494386 -0.48365006607429406 1.5521472161465923 -0.45275815045178847 1.5707963263763236 -0.43687780045546043 + 0 4 0.98142083515696321 1 1.9628416703139264 1 2.9442625054708897 1 3.9256833406278528 1 4.9071041757848164 1 5.8885250109417795 1 6.8699458460987426 1 7.8513666812557057 1 8.8327875164126688 1 9.8142083515696328 1 10.795629186726595 1 11.777050021883559 1 12.758470857040521 1 13.739891692197485 1 14.721312527354447 1 15.702733362511411 1 16.684154197668374 1 17.665575032825338 1 18.646995867982302 1 19.628416703139266 1 20.609837538296226 1 21.59125837345319 4 +1 0 0 1 0 +1 0 -0.025999999999999999 1 0 +1 0 0 1 0 +1 0 -0.012 1 0 +7 0 0 5 12 4 2.6140268735789505 -72.938237271533126 2.9385695033561205 -73.684838848600975 3.3283080524888646 -74.369332393526292 3.7664452208464354 -74.986223879557656 4.7452291261897699 -76.130619657436455 5.886538063392436 -77.044249357737499 6.5160696204311535 -77.459583572700467 8.0661566892431438 -78.282544125717322 9.9014503000689729 -78.771602298139442 11.023244173460625 -78.91877084547923 12.216344962922449 -78.885752608627172 13.408941005289307 -78.661685164154733 + 0 6 6.3403688385199999 3 13.0306959711 3 21.591258380799999 6 +7 0 0 5 12 4 3.3322120954956134 -9.2064020547258636 4.0977436020158748 -8.9294483655510817 4.805389537240778 -8.5835223906873352 5.4486105238861526 -8.185042722234094 6.6522880490502629 -7.2801559640122875 7.6358758258641544 -6.1985551112416886 8.0899733882617326 -5.596385786839484 9.0087756254409115 -4.1011144262940462 9.6122701879907808 -2.3002049763407939 9.8296864734099429 -1.1898850969644741 9.8717563685848049 0.0029308241642951316 9.7231233918469187 1.2072562694521096 + 0 6 6.3403688385199999 3 13.0306959711 3 21.591258380799999 6 +7 0 0 8 9 2 0.092446876965083996 -0.20135792126653229 0.080689909175123281 -0.20135792112317524 0.068990781673104351 -0.20135792090465543 0.057349657140107979 -0.20135790629535677 0.045765835308742453 -0.2013578713640527 0.034240038506311521 -0.20135781588248847 0.022770478918133108 -0.20135774314678656 0.011357566287654103 -0.20135765833647501 7.0375661091672191e-11 -0.20135756727787255 + 0 9 1.4354671486843633 9 +1 0 0 1 0 +1 0 -5 1 0 +1 0 0 1 0 +1 0 -11 1 0 +7 0 0 11 12 2 1.5707963268652723 -0.20135756727787255 1.4548147062951389 -0.20135663740222151 1.3444905602082144 -0.20135537924124947 1.2381223936681636 -0.20135793468216434 1.1385731289628893 -0.2013763650029432 1.0302296566078439 -0.20132814667886123 0.9318784213392064 -0.20135284002753906 0.81683119176886976 -0.20141870582301635 0.70145462028449401 -0.20129867404466495 0.57828564868032117 -0.20136083203306043 0.44932770410610934 -0.2013579088439576 0.31678199883355934 -0.20135792227729615 + 1.4354671486843633 12 21.59125837345319 12 +1 0 0 1 0 +1 0 -5 1 0 +1 0 0 1 0 +1 0 -11 1 0 +7 0 0 3 47 45 -1.4016481131307046e-07 -0.43687766566790648 0.012342828496641367 -0.42637150638482241 0.03658983139920835 -0.40505103209533705 0.071720778799964968 -0.37221996580692335 0.1056885724615908 -0.33861435404675555 0.13857256642687954 -0.30430406646393277 0.17045428018865394 -0.26935289556849795 0.20141479307847732 -0.2338204382828401 0.23153436946899397 -0.19776216629748714 0.26089203970652175 -0.16122974275704349 0.28956546298746577 -0.12427126360917988 0.31763093427329547 -0.086931502194411148 0.3451635353648248 -0.049252130988894451 0.37223738734960854 -0.011271939865142371 0.39892603659704573 0.026972985002941624 0.42530276966749003 0.065448947885118028 0.45144033585734711 0.10412333842798026 0.47741151145342631 0.142964301610603 0.50328968870259061 0.18194051485361315 0.5291495260845771 0.22102094695791605 0.55506765826622573 0.26017461610297798 0.58112348196297692 0.2993703405455469 0.60739999755044405 0.33857642866311105 0.63398482709537518 0.37776046409320718 0.66097101425948157 0.41688855045752715 0.68845935195918084 0.45592666103766755 0.71655776219738243 0.49483729692094941 0.74538120505703542 0.53357702512894511 0.77505341411182727 0.57209669009210129 0.80570822018878996 0.61034085454113685 0.83749094890698661 0.6482472780798002 0.87055964198343538 0.68574618593985648 0.90508610875069273 0.72275947504238192 0.94125623097746836 0.75919954628973496 0.97927060756305195 0.79496897849468473 1.0193392229272256 0.82995610857157021 1.0616742058912418 0.8640315579111163 1.1064870360861976 0.89705210721945183 1.1539799871148961 0.92886239355621936 1.2043348153184024 0.95929768936539017 1.2576980090756189 0.98818757098197429 1.3141589188268625 1.0153589815209643 1.3737361037126261 1.0406470087859758 1.4363858680201931 1.0639135996213114 1.5019993244384962 1.0850448264184962 1.5475779885436047 1.0976615540925527 1.5707963263508402 1.1035883784424525 + 19.018065117900001 4 19.648450724193182 1 20.278836330486364 1 20.909221936779545 1 21.539607543072727 1 22.169993149365908 1 22.800378755659089 1 23.430764361952274 1 24.061149968245456 1 24.691535574538637 1 25.321921180831819 1 25.952306787125 1 26.582692393418181 1 27.213077999711363 1 27.843463606004548 1 28.473849212297729 1 29.104234818590911 1 29.734620424884092 1 30.365006031177273 1 30.995391637470455 1 31.625777243763636 1 32.256162850056818 1 32.886548456349999 1 33.51693406264318 1 34.147319668936362 1 34.777705275229543 1 35.408090881522725 1 36.038476487815913 1 36.668862094109087 1 37.299247700402276 1 37.92963330669545 1 38.560018912988639 1 39.190404519281813 1 39.820790125575002 1 40.451175731868176 1 41.081561338161364 1 41.711946944454539 1 42.342332550747727 1 42.972718157040909 1 43.60310376333409 1 44.233489369627272 1 44.863874975920453 1 45.494260582213634 1 46.124646188506816 1 46.755031794799997 4 +1 0 0 1 0 +1 0 -0.025999999999999999 1 0 +1 0 0 1 0 +1 0 -0.012 1 0 +7 0 0 5 21 7 13.408939284800908 -78.661676035077562 13.657016993754041 -78.615069831782876 13.904064783871945 -78.560386108190414 14.149668850262969 -78.497638814869788 15.271063213212983 -78.17210479968935 16.344637061598405 -77.678962327987847 17.137186586305688 -77.194343218038739 18.594214863987872 -76.04711288635599 19.745529517752402 -74.59363657618951 20.232327875515693 -73.802724094708992 21.013829364212143 -72.115364600203975 21.380847872510458 -70.303660521722577 21.456249516175376 -69.37885465030331 21.398251982556758 -67.823909837477004 21.055464924766056 -66.357040904798851 20.870323177254249 -65.777720613434667 20.500938800491895 -64.868954019156263 20.056358812099461 -64.064073766836827 19.870569479840924 -63.762224985860939 19.67862184706064 -63.478754727003434 19.482276637148971 -63.212799920987436 + 19.018065117900001 6 20.746417493599999 3 26.9695886435 3 33.193103160299998 3 39.485156688799997 3 43.865331243699998 3 46.755031794799997 6 +7 0 0 5 21 7 9.7231141726505612 1.2072551264091942 9.6921994539969276 1.4577725270736508 9.653158438128763 1.7077699656771799 9.6059790277433379 1.9568335790022147 9.3516030781063719 3.0964785186843216 8.9269433800893054 4.1989368835278569 8.4931192226805834 5.0203911009310858 7.4397778753993791 6.5466744435665802 6.0615731614882478 7.7871060550378104 5.3028359774653282 8.3226740526483525 3.6679568775136246 9.2087310311060833 1.882916360875214 9.6889441164928982 0.96468191670525982 9.8223488136317911 -0.59083267205923562 9.8622417827169784 -2.076353389034324 9.6123705517133047 -2.6661690499397466 9.4640231459122575 -3.5963643313203946 9.1525134684202314 -4.4276071940483561 8.7594245601348817 -4.7405411638389907 8.5929832999012064 -5.0355202185627164 8.4192402751165858 -5.313295004344134 8.2400069950518358 + 19.018065117900001 6 20.746417493599999 3 26.9695886435 3 33.193103160299998 3 39.485156688799997 3 43.865331243699998 3 46.755031794799997 6 +7 0 0 8 9 2 0.31678199883362301 -0.20135810721077421 0.27744690640364894 -0.2013580125684778 0.2380074995468533 -0.2013579204043765 0.19847990267646765 -0.20135790746621751 0.15887837960292472 -0.20135806390317157 0.11922523404410867 -0.20135785449838295 0.079518598504989768 -0.20135796770301795 0.039774685981777719 -0.20135798196958243 7.4622559672298614e-12 -0.20135800223729666 + 19.018065117900001 9 23.240357159641199 9 +1 0 0 1 0 +1 0 -5 1 0 +1 0 0 1 0 +1 0 -11 1 0 +7 0 0 10 11 2 1.5707963268023588 -0.20135800223729666 1.4099594873506807 -0.20135808419382298 1.24858783138734 -0.20135762112727207 1.0876688101234322 -0.20135850182305148 0.92540818271663738 -0.20135678711085347 0.76672086259350181 -0.20135977639802149 0.60421186788880732 -0.20135723536077421 0.44715528709275532 -0.20135686337016523 0.28788061419618316 -0.20135917319498731 0.13741051669356005 -0.2013579812428466 6.1873576638686255e-12 -0.20135782518429887 + 23.240357159641199 11 44.582452345325279 11 +1 0 0 1 0 +1 0 -5 1 0 +1 0 0 1 0 +1 0 -11 1 0 +7 0 0 8 9 2 1.5707963268010838 -0.20135782518429887 1.5533112074805977 -0.20135780532626768 1.5360432973470779 -0.20135780462544517 1.5190013990213629 -0.2013578286930624 1.502192887599449 -0.20135786598655159 1.4856219691064325 -0.20135789993310027 1.4692914231115992 -0.20135791892514021 1.4532006923345404 -0.20135792221157425 1.4373464925361088 -0.20135792088776175 + 44.582452345325279 9 46.755031794799997 9 +1 0 0 1 0 +1 0 -5 1 0 +1 0 0 1 0 +1 0 -11 1 0 +7 0 0 3 47 45 0 1.1035883784424536 0.011307750685212052 1.1064770326408218 0.034135696762817108 1.1120786496110959 0.068984495256330297 1.1199518169259022 0.10441320317823642 1.1272935846611125 0.14038265379478659 1.1341016628999456 0.17684824863280468 1.1403746300104889 0.21376148084450394 1.1461123867972078 0.25107359770390414 1.15131648769413 0.28873919296710143 1.1559901769188456 0.32672056732184401 1.1601382282078208 0.36499082221097384 1.1637662524199806 0.40351458603801638 1.1668785166067681 0.44225559128486414 1.1694788583637232 0.48117658188142109 1.1715705630548277 0.52023957983227387 1.1731563430474636 0.55940604587455711 1.1742382965876856 0.59863705864801364 1.1748178804440907 0.63789347963016441 1.1748958883103753 0.67713611543015984 1.1744724378585014 0.71632587319865171 1.1735469665105249 0.75542392698156635 1.1721182349248533 0.79439184174302413 1.170184342676492 0.83319186430834347 1.167742738257878 0.87178660941430364 1.1647902878071781 0.91014102796155916 1.1613231588572754 0.94821497299035573 1.1573375036010256 0.98596231457069461 1.1528302340728684 1.0233416351920539 1.1477982539637728 1.0603135621603841 1.1422386728397429 1.0968409803159556 1.1361488844542404 1.1328885041713441 1.1295267569580207 1.1684222086918716 1.1223708640574879 1.2034093736695428 1.1146807691148359 1.2378183138288903 1.106457353052978 1.2716183013735112 1.0977031716523693 1.3047794928370715 1.0884228645637244 1.3372731819392163 1.0786234924824212 1.3690711258471813 1.0683152228504429 1.4001490343013656 1.0575105816192514 1.4304906818882537 1.0462226854871699 1.4600844877040047 1.0344661511952256 1.4889239769184048 1.0222567124342512 1.5170074248911107 1.0096111264934569 1.5443370959111866 0.99654691863921008 1.5620593932745153 0.98757060508799055 1.5707971779952343 0.98301875808450023 + 0 4 0.28866221199545455 1 0.57732442399090911 1 0.86598663598636372 1 1.1546488479818182 1 1.4433110599772727 1 1.7319732719727274 1 2.0206354839681819 1 2.3092976959636364 1 2.5979599079590909 1 2.8866221199545454 1 3.1752843319499999 1 3.4639465439454549 1 3.7526087559409094 1 4.0412709679363639 1 4.3299331799318184 1 4.6185953919272729 1 4.9072576039227274 1 5.1959198159181819 1 5.4845820279136364 1 5.7732442399090909 1 6.0619064519045454 1 6.3505686638999999 1 6.6392308758954544 1 6.9278930878909097 1 7.2165552998863642 1 7.5052175118818187 1 7.7938797238772732 1 8.0825419358727277 1 8.3712041478681822 1 8.6598663598636367 1 8.9485285718590912 1 9.2371907838545457 1 9.5258529958500002 1 9.8145152078454547 1 10.103177419840909 1 10.391839631836364 1 10.680501843831818 1 10.969164055827273 1 11.257826267822727 1 11.546488479818182 1 11.835150691813636 1 12.123812903809091 1 12.412475115804545 1 12.7011373278 4 +1 0 0 1 0 +1 0 -0.025999999999999999 1 0 +1 0 0 1 0 +1 0 -0.012 1 0 +7 0 0 5 15 5 19.482276637148971 -63.212799920987436 19.29749235116833 -62.962504872095906 19.108424836969789 -62.727198708572359 18.915855839901269 -62.505529198111162 18.398311057771934 -61.951222588952987 17.860906965074719 -61.476389006506452 17.514682640571664 -61.20249544945591 16.829888058100551 -60.718610274414459 16.050717722790068 -60.288437963962224 15.660940303345342 -60.098611011638241 14.997304974744111 -59.82199992157166 14.262935876315169 -59.596801743348806 13.986005767439565 -59.522642225334948 13.700972661765263 -59.457638680344644 13.408934630977456 -59.402770434558988 + 0 6 2.5562203378000001 3 6.8074101031199996 3 10.5507444929 3 12.7011373278 6 +7 0 0 5 15 5 -5.313295004344134 8.2400069950518358 -5.5747140658443257 8.0713270669952522 -5.8214432356369699 7.8974298781430008 -6.0547829134961759 7.7191806558832283 -6.6405360664133681 7.2375151471382964 -7.1482222284389536 6.7310323233875451 -7.443344530737761 6.4027157228980016 -7.96933236258932 5.749703254754742 -8.44764802011548 4.9991243049615335 -8.6616087212544741 4.6220546470645445 -8.9794021458555733 3.9771260589299402 -9.2503321773668574 3.2583708083548544 -9.3417584459318945 2.9866519155067621 -9.4245563811781707 2.7062703288968137 -9.4976795476353146 2.4182603666570586 + 0 6 2.5562203378000001 3 6.8074101031199996 3 10.5507444929 3 12.7011373278 6 +7 0 0 11 12 2 1.4373464925361088 -0.20135792088776175 1.3656318804624425 -0.20135792204167186 1.2982890962193778 -0.20135919344193098 1.2339860711654183 -0.20135761247729533 1.1764431903138757 -0.20135439968726132 1.1136124084005132 -0.20135983446380123 1.0547334966249764 -0.20136665613972582 0.99061032151803374 -0.20134392076579388 0.9221360661322251 -0.20136412572901463 0.84776764860725962 -0.20135578676308796 0.76963750286101529 -0.20135858612287694 0.68821604099456157 -0.2013586099763407 + 0 12 12.7011373278 12 +1 0 0 1 0 +1 0 -5 1 0 +1 0 0 1 0 +1 0 -11 1 0 +7 0 0 3 47 45 0 0.98301825600120907 0.016072132992862972 0.974649582140655 0.047774644785334726 0.95726604940685012 0.093923779946429406 0.92932532424219871 0.13857451471373131 0.89958352610761128 0.18168347393521342 0.86813572367758451 0.22323980326843204 0.83509211625905433 0.26326598475796448 0.80057667004876043 0.30181147954030846 0.7647219000855866 0.33894742683204021 0.72766482054102422 0.37476023296142663 0.68954385048440581 0.4093479552997063 0.65049406308428226 0.44280816324471906 0.61065274350213727 0.47526424197180461 0.57012629318366181 0.50685517344643483 0.52899160389241895 0.53769945284726683 0.48733546080475626 0.56790623294224529 0.4452459687340603 0.59757577240820048 0.40281362577132485 0.62680256004903345 0.3601288280251303 0.6556775073598663 0.31727956685842063 0.68429017130945813 0.27434857452255923 0.71273079011534912 0.23141036994183417 0.74109211582612533 0.18852846888552369 0.76947141007123587 0.14575260111362212 0.79797120855659465 0.1031176162657995 0.82670418658501188 0.060638675208144734 0.85578130192533752 0.018338415831573193 0.88530197395011345 -0.023739159635083062 0.91535856024814344 -0.065534568460848958 0.94603711572299376 -0.10697465573419992 0.97741813040711001 -0.14797523285152048 1.0095764670836491 -0.18844316978447678 1.0425795927330694 -0.22827783548997879 1.0764891659345956 -0.26737357178362287 1.1113645473779628 -0.30562362637139401 1.1472615765281027 -0.34292131433431683 1.1842325781404131 -0.37916201508909159 1.2223268022241947 -0.4142457576946354 1.2615903930967201 -0.44807910833540393 1.3020706734203331 -0.48058043534170614 1.3438064712067763 -0.51167180084941322 1.3867893538508249 -0.54125228460855201 1.4310029289598367 -0.56923574341113825 1.4764147339116507 -0.59554602555558911 1.5229784526407222 -0.62011723249165818 1.5547434840017296 -0.63530549777705947 1.5707963267948966 -0.64259243686846956 + 8.4431149610805667e-09 4 0.66518181408986232 1 1.3303636197366095 1 1.9955454253833569 1 2.6607272310301044 1 3.3259090366768516 1 3.9910908423235991 1 4.6562726479703462 1 5.3214544536170933 1 5.9866362592638405 1 6.6518180649105876 1 7.3169998705573356 1 7.9821816762040827 1 8.6473634818508298 1 9.3125452874975778 1 9.977727093144324 1 10.642908898791072 1 11.30809070443782 1 11.973272510084566 1 12.638454315731314 1 13.303636121378061 1 13.968817927024809 1 14.633999732671557 1 15.299181538318303 1 15.964363343965051 1 16.629545149611801 1 17.294726955258547 1 17.959908760905293 1 18.625090566552043 1 19.290272372198789 1 19.955454177845535 1 20.620635983492285 1 21.285817789139031 1 21.950999594785777 1 22.616181400432527 1 23.281363206079273 1 23.94654501172602 1 24.611726817372769 1 25.276908623019516 1 25.942090428666262 1 26.607272234313008 1 27.272454039959758 1 27.937635845606504 1 28.60281765125325 1 29.2679994569 4 +1 0 0 1 0 +1 0 -0.025999999999999999 1 0 +1 0 0 1 0 +1 0 -0.012 1 0 +7 0 0 5 18 6 13.408940995250305 -59.402736586000628 12.649318236602994 -59.260017095209605 11.792518141161054 -59.176587290377938 10.848219713698199 -59.189793244428074 8.7315788876339866 -59.503997677346433 6.6459598429919424 -60.44452507790038 5.5894167995538737 -61.144084142600605 4.0948272296891446 -62.526598312694659 3.0014037898081369 -64.239225861674186 2.6472915929170995 -64.937019315029829 2.084113586897729 -66.395020335175559 1.8196686277860863 -67.918521125218376 1.7646917872916674 -68.681991999910679 1.7974370811934932 -70.048459953773545 2.0497851311001796 -71.33883469774355 2.20464333289965 -71.899404570273873 2.394481017427097 -72.433177938651625 2.6140268735789505 -72.938237271533126 + 0 6 7.0088545606999997 3 15.107013371400001 3 20.121076277099998 3 25.135139182900001 3 29.2679994569 6 +7 0 0 5 18 6 -9.4977129290216098 2.4182688467511042 -9.6879154564158156 1.6691236091090005 -9.8250561893368911 0.81926517663023901 -9.8712543396137917 -0.12399494032553093 -9.690767160944084 -2.2562044024969339 -8.8832458031590065 -4.3968369836008563 -8.2515070919343358 -5.4952778278818499 -6.965709391643415 -7.0738428999608018 -5.3252260537659097 -8.2727934237729812 -4.6510802471238861 -8.6700824657798563 -3.2313774425796922 -9.3238258313439459 -1.7275200005327207 -9.683545983266562 -0.96901695908295693 -9.7864214691068128 0.39680588085014534 -9.8396651835173543 1.7004948287982131 -9.6689559419238051 2.2696929318564187 -9.5496531166095338 2.8143470872295282 -9.3937550528268474 3.3322120954956134 -9.2064020547258636 + 0 6 7.0088545606999997 3 15.107013371400001 3 20.121076277099998 3 25.135139182900001 3 29.2679994569 6 +7 0 0 8 9 2 0.68821604099450306 -0.20135792109820996 0.61820780007956944 -0.20135792317672951 0.54199920169423876 -0.2013570145097674 0.45978207620680678 -0.20137953908647432 0.37325398938810395 -0.20135352265924666 0.28213557170579406 -0.20135947105461582 0.19021456275214632 -0.20134826764686409 0.095716036145316499 -0.20136333419925914 2.1465736903431435e-08 -0.20137012800038745 + 8.4431149610805667e-09 9 9.9522392343288892 9 +1 0 0 1 0 +1 0 -5 1 0 +1 0 0 1 0 +1 0 -11 1 0 +7 0 0 9 10 2 1.5707963482606335 -0.20137012800038745 1.4056674497240615 -0.20138184863983269 1.2367863796439451 -0.2013656978138556 1.0651078005066665 -0.20131586581510419 0.90781716081619379 -0.20135826057867234 0.71894522801085259 -0.20138552362004702 0.55911521780762996 -0.20135577806740912 0.39303266486376742 -0.20135571911623629 0.23838832496314177 -0.20135791938896921 0.092446876965083996 -0.20135792126653229 + 9.9522392343288892 10 29.2679994569 10 +1 0 0 1 0 +1 0 -5 1 0 +1 0 0 1 0 +1 0 -11 1 0 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 -0.50000000000000033 0.75 1 0 +2 -4.4408920985e-16 -5 0 1 -1 0 5.00000000059 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 -3.6415926535897936 0.75 1 0 +2 4.4408920985e-16 -5 0 1 -1 0 5.00000000059 +1 1.5707963267948966 -6.2831853071795862 0 1 +1 0 -6.2831853071795862 0 1 +7 0 0 1 2 2 1.5707963267948966 4.0000000112710916 3.1415926535897931 4.0000000111758718 + 0 2 15.7079632679 2 +7 0 0 1 2 2 0 1.1271091615604783e-09 1.5707963267948966 1.1175871783604744e-09 + 0 2 15.7079632679 2 +1 0 -3.1415926535897931 0 1 +1 1.5707963267948966 -3.1415926535897931 0 1 +1 1.5707963267948966 -3.1415926535897931 0 1 +1 0 -3.1415926535897931 0 1 +7 0 0 1 2 2 0 4.0000000113663114 1.5707963267948966 4.0000000112710916 + -15.7079632679 2 0 2 +7 0 0 1 2 2 0 1.1366311447604823e-09 1.5707963267948966 1.1271091615604783e-09 + -15.7079632679 2 0 2 +1 1.5707963267948966 -6.2831853071795862 0 1 +1 0 -6.2831853071795862 0 1 +1 -2.0707963267948966 4.0000000111758718 1 0 +7 0 0 3 25 23 0 1.11758780008131e-09 0.023799944345376273 1.1175874201405096e-09 0.071399833036130747 1.1175870661492749e-09 0.1427996660722651 1.117587208426773e-09 0.21419949910839364 1.1175871703036328e-09 0.28559933214452693 1.1175871805186972e-09 0.35699916518065788 1.1175871777815789e-09 0.42839899821678806 1.1175871785149878e-09 0.49979883125292146 1.117587178318471e-09 0.57119866428905264 1.1175871783711272e-09 0.64259849732518393 1.1175871783570182e-09 0.71399833036131755 1.117587178360799e-09 0.78539816339744706 1.1175871783597855e-09 0.85679799643357912 1.1175871783600577e-09 0.9281978294697113 1.1175871783599845e-09 0.99959766250584081 1.1175871783600039e-09 1.0709974955419745 1.117587178359999e-09 1.1423973285781057 1.1175871783600004e-09 1.2137971616142369 1.1175871783599996e-09 1.2851969946503705 1.1175871783600004e-09 1.3565968276864999 1.1175871783600002e-09 1.4279966607226322 1.11758717836e-09 1.4993964937587638 1.11758717836e-09 1.5469963824495181 1.11758717836e-09 1.5707963267948948 1.11758717836e-09 + 3.6415926535897936 4 3.7129924866259252 1 3.7843923196620568 1 3.8557921526981884 1 3.92719198573432 1 3.9985918187704517 1 4.0699916518065837 1 4.1413914848427149 1 4.212791317878847 1 4.2841911509149782 1 4.3555909839511102 1 4.4269908169872414 1 4.4983906500233735 1 4.5697904830595046 1 4.6411903160956367 1 4.7125901491317679 1 4.7839899821678999 1 4.8553898152040311 1 4.9267896482401632 1 4.9981894812762944 1 5.0695893143124264 1 5.1409891473485576 1 5.2123889803846897 4 +1 -2.0707963267948966 4.0000000111758718 1 0 +7 0 0 3 25 23 0 1.11758780008131e-09 0.023799944345376273 1.1175874201405096e-09 0.071399833036130747 1.1175870661492749e-09 0.1427996660722651 1.117587208426773e-09 0.21419949910839364 1.1175871703036328e-09 0.28559933214452687 1.1175871805186972e-09 0.35699916518065805 1.1175871777815789e-09 0.42839899821678784 1.117587178514988e-09 0.49979883125292307 1.117587178318471e-09 0.5711986642890502 1.1175871783711272e-09 0.64259849732518781 1.1175871783570186e-09 0.71399833036131366 1.1175871783607986e-09 0.78539816339744872 1.1175871783597858e-09 0.8567979964335799 1.1175871783600571e-09 0.92819782946971308 1.1175871783599851e-09 0.99959766250584337 1.1175871783600035e-09 1.070997495541975 1.1175871783599994e-09 1.1423973285781039 1.1175871783600002e-09 1.21379716161424 1.1175871783599998e-09 1.2851969946503679 1.1175871783600004e-09 1.356596827686501 1.1175871783599998e-09 1.4279966607226349 1.11758717836e-09 1.499396493758764 1.11758717836e-09 1.5469963824495183 1.11758717836e-09 1.5707963267948966 1.11758717836e-09 + 2.070796326794897 4 2.1421961598310286 1 2.2135959928671602 1 2.2849958259032919 1 2.3563956589394235 1 2.4277954919755551 1 2.4991953250116872 1 2.5705951580478188 1 2.6419949910839504 1 2.713394824120082 1 2.7847946571562137 1 2.8561944901923453 1 2.9275943232284769 1 2.9989941562646085 1 3.0703939893007401 1 3.1417938223368722 1 3.2131936553730034 1 3.2845934884091355 1 3.3559933214452666 1 3.4273931544813987 1 3.4987929875175303 1 3.5701928205536619 1 3.6415926535897936 4 +1 2.0707963267945018 0 0 -1 +1 8.3539816339740884 0 0 -1 +1 5.2123889803842944 0 0 -1 +1 5.2123889803842944 0 0 -1 +1 -0.49999999999831274 12 1 0 +2 0 -3.5 0 1 -1 0 3.50000000003 +2 0 -5 0 1 -1 0 3.50000000003 +1 -3.641592653588106 12 1 0 +2 0 -3.5 0 1 -1 0 3.50000000003 +2 0 -5 0 1 -1 0 3.50000000003 +1 -5.2123889803846897 6 1 0 +2 -8.881784197e-16 4.4408920985e-16 -1 0 -0 -1 10.0000000003 +2 11.599735399164665 -69.032210880102468 -0.53730747100813692 -0.84338643669366664 -0.84338643669366664 0.53730747100813692 10.000000000299524 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 -2.0707963267948966 6 1 0 +2 0 0 -1 0 -0 -1 10 +2 11.599735399164665 -69.032210880102468 -0.53730747100813692 -0.84338643669366664 -0.84338643669366664 0.53730747100813692 10.000000000000059 +1 1.0935246108253915e-16 24.74999992026131 1 0 +2 -0.0010047410068025852 1.5042493252836207e-05 0.21790508690551391 0.97596996526568403 0.97596996526568403 -0.21790508690551391 5 +1 1.0935246108253915e-16 24.74999992026131 1 0 +2 -0.0010047410068025852 1.5042493252836207e-05 0.21790508690551391 0.97596996526568403 0.97596996526568403 -0.21790508690551391 5 +1 3.1415926535881051 0 0 1 +1 0 0 0 1 +1 -0.49999999999831274 16.000000000000004 1 0 +1 0 0 0 1 +1 3.1415926535881051 0 0 1 +1 -3.641592653588106 16 1 0 +1 -2.0753555252948415 -10.999999998485794 1 2.895011691155228e-13 +2 11.599735392282568 -69.032210881310178 0.86632438691299207 0.49948178809625149 0.49948178809625149 -0.86632438691299207 15.000000000000332 +1 4.2078297818848789 -10.999999998485061 -1 -1.4475059453110483e-13 +2 11.599735392282568 -69.032210881310178 -0.86632438691299207 -0.49948178809625149 0.49948178809625149 -0.86632438691299207 14.999999999999746 +1 -2.0753555257553824 -10.999999998482757 1 -5.7900214556896248e-13 +2 11.599735392282568 -69.032210881310178 0.86632438691299207 0.49948178809625149 0.49948178809625149 -0.86632438691299207 15.000000000000332 +1 0 34 1 0 +1 0 34 1 0 +1 9.0682558964777229 10.999999999452484 -1 0 +2 11.599735404830046 -69.032210874867914 -0.86632438691299207 -0.49948178809625149 0.49948178809625149 -0.86632438691299207 5.0000000000498339 +7 0 0 1 2 2 3.1415926530737459 10.999999998969088 0 10.999999998969088 + 2.7850705886865965 2 5.9266632427686501 2 +2 11.599735405267566 -69.032210875626348 -0.86632438691299207 -0.49948178809625149 0.49948178809625149 -0.86632438691299207 5.0000000000498339 +1 0 -34 1 0 +2 0 0 1 0 -0 1 5 +1 6.1660182781601867 10.000000000695561 -1 0 +1 0 -34 1 0 +2 0 0 1 0 -0 1 5 +1 6.1660182781601867 10.000000000695561 -1 0 +1 3.141592653391478 -2.5596840202979365e-09 0 1 +1 0 -2.5596840202979365e-09 0 1 +1 0 2.560511802585097e-09 0 1 +1 3.1415926533913643 2.560511802585097e-09 6.197063059432077e-15 1 +1 9.3076109317499807 10.000000000695561 -1 0 +1 3.0244256245703935 10.000000000695561 -1 0 +7 1 0 5 10 3 58.596053313048905 2.9068883746141836 1 57.141405589198072 -0.0024070727374500777 0.99999999999999867 56.42792241762703 -4.0922262532026092 0.96568542494831844 57.805036168098006 -8.2235675052020785 0.96568542494831555 60.829714213392194 -11.067332946889117 1.0000000000000007 66.648305108128099 -13.976628394526108 0.99999999999999933 70.738124288600872 -14.690111566051762 0.96568542494831744 74.869465540585423 -13.312997815534752 0.96568542494831688 77.713230982238315 -10.288319770209261 0.99999999999999956 79.16787870602451 -7.3790243228253729 1 + 0.75062665280892582 6 2.3214229796149315 4 3.892219306420964 6 +7 0 0 2 3 2 -1.6452914022325467e-10 6.0000000023027011 1.5707963270696701 6.0000000023035192 3.1415926536213949 6.0000000023034552 + 0.75062665280892582 3 3.892219306420964 3 +1 0 0 1 0 +1 0 -2 1 0 +1 0 0 1 0 +1 0 -0.070000000000000007 1 0 +1 3.892219306420964 0 0 -1 +1 2.4999861738130047 0 0 -1 +7 0 0 6 62 13 -5.9153361947571632 79.115383382770915 -5.2236865298382789 78.903998235329567 -4.5478525137678032 78.640374036878598 -3.8928685417477666 78.32600733025518 -3.263443858453881 77.963024714882863 -2.664012883549165 77.554077980295133 -1.4880828028465958 76.614648822815383 -0.91718610904327402 76.076996829115473 -0.3911878480076858 75.493600745213385 0.085453651192032076 74.869201370581465 0.50888777453049538 74.209045224751321 1.2442966173950794 72.826769322995204 1.5559676181666546 72.1043647752591 1.8078691738228585 71.357681212965502 1.9977841803614282 70.592902764906071 2.1242636711430336 69.816437092698493 2.244358929034032 68.315800571816141 2.2477722906392597 67.592314783892647 2.1966318274980097 66.869688619062387 2.0912182246582312 66.153035775253144 1.9323946851966962 65.447404679615943 1.7102694515420005 64.720278440789514 1.6986654983960712 64.68284158739236 1.6869083513908691 64.645451920814054 1.6749983287362493 64.608110479788337 1.6629356216150377 64.570817867804564 1.611380609652634 64.413630712501131 1.5704598451314418 64.294201697712595 1.5279666370821594 64.175314080293276 1.4839099855465394 64.056993834710468 1.4382994647356124 63.939266727575664 1.2758706697431073 63.535871885024143 1.1513702933213763 63.253282404240593 1.0177927600835526 62.974764132977704 0.87530623452738432 62.700681649797353 0.72409837932930599 62.431389854139361 0.45786949492852363 61.991087849650057 0.34757659219127818 61.817225188079078 0.23355898409516807 61.645748173325124 0.11588156303756365 61.476756588121226 -0.0053872231492606559 61.310347806216953 -0.20860949646326166 61.043705586066068 -0.2884340025071962 60.941852232128703 -0.36963102324711111 60.841080292723881 -0.45218217332010685 60.741412907235457 -0.53606854808320392 60.642872792273636 -0.66998200902069682 60.489802690341094 -0.71912337486558053 60.434498880178467 -0.7686911926212493 60.379574975785879 -0.81868178079181086 60.325035093727053 -0.8690914049122247 60.270883302530649 -1.3192633263288034 59.794716868396669 -1.7442551970221629 59.396509113979711 -2.1930384088716881 59.024471820455297 -2.6635826198926518 58.680351460597713 -3.153700454575012 58.365693299481286 -4.1636662235977688 57.800565113193834 -4.6832181559123498 57.549516665991874 -5.2173905820937527 57.329958404413659 -5.7637912138370053 57.142920152024026 -6.3199412392143 56.989201245398462 -6.8832659371405409 56.869342836467865 + 0 7 0.14325161115071949 5 0.29797209848799416 5 0.45317950359161796 5 0.5960097984592162 5 0.60377290958952601 5 0.62877471527277029 5 0.68989481554852139 5 0.73065131127946115 5 0.75626832813170985 5 0.77091393795810859 5 0.88598911195100138 5 1 7 +7 0 0 6 62 13 3.892219306420964 -0.059968565559213906 3.8223664751006909 -0.05996941977663308 3.7546834112218459 -0.059970437400136752 3.688804823760139 -0.059971612346942933 3.624415669546047 -0.059972936597756356 3.5612398113390102 -0.059974400520055669 3.4318500147495996 -0.059977712074542569 3.3657895480582463 -0.059979581256970275 3.3005501241144306 -0.059981585598912777 3.2358450053670698 -0.059983708765600059 3.1714022306496874 -0.059985932956622807 3.0423234605083578 -0.059990551487755332 2.9776786184684827 -0.0599929466631609 2.9127697755647288 -0.059995404396457667 2.8473223862955646 -0.059997904298931877 2.781046917754141 -0.060000425461615221 2.6516024225873704 -0.060005266228854999 2.5886001089462738 -0.06000758613988829 2.5243895641237808 -0.060009889362236904 2.4586969085008827 -0.060012159576353821 2.3912097665969223 -0.06001438082057161 2.3177808046817701 -0.060016654797180637 2.3140003034097467 -0.06001677183244588 2.3102288817736598 -0.060016888677299172 2.3064611801578248 -0.060017005328575679 2.3027009556995202 -0.060017121784304135 2.2868554015944986 -0.060017612459871278 2.2748279744223177 -0.060017984822675098 2.2628624009195764 -0.060018355048491234 2.2509568046824318 -0.060018723056359857 2.2391093612940547 -0.060019088766135674 2.1984935422178022 -0.060020340310727061 2.1700056472380083 -0.060021214316559962 2.1418288664810601 -0.060022072954321194 2.1139388658151486 -0.060022915098351025 2.0863127238808326 -0.060023739658995483 2.04066869710873 -0.060025082993737183 2.0225161854377625 -0.060025612118580186 2.0044649878755583 -0.06002613264523976 1.9865088923522769 -0.060026644270449521 1.9686418839308122 -0.060027146699572265 1.9396803843868726 -0.060027949482666286 1.9285355166133564 -0.060028255572815943 1.9174220939978088 -0.060028557846087204 1.9063386929408335 -0.060028856233005683 1.8952839137320741 -0.060029150665584237 1.8779517843023112 -0.060029607109809972 1.8716560933453106 -0.06002977182806344 1.8653690503797644 -0.060029935219660741 1.8590904002575253 -0.060030097272346976 1.8528198899817439 -0.060030257974035182 1.7973498788200626 -0.060031669287768222 1.7486285011132743 -0.060032837146214844 1.7002736780360579 -0.060033915042242689 1.6521700508170551 -0.060034897896368254 1.6042061014855784 -0.060035781314061086 1.5087854180839009 -0.060037334809583912 1.4613261369494099 -0.06003800681706855 1.4137914716670388 -0.060038574152729639 1.3660738861926287 -0.060039034126626381 1.3180631089825501 -0.060039384809671831 1.2696459962357198 -0.06003962512487112 + 0 7 0.14325161115071949 5 0.29797209848799416 5 0.45317950359161796 5 0.5960097984592162 5 0.60377290958952601 5 0.62877471527277029 5 0.68989481554852139 5 0.73065131127946115 5 0.75626832813170985 5 0.77091393795810859 5 0.88598911195100138 5 1 7 +7 0 0 4 29 10 12.119650481166085 14.010167362798169 12.119650512367379 14.009966313438532 12.1196505435686 14.009765264078988 12.119650574769928 14.009564214719299 12.119650638894704 14.009151018868531 12.119650671818174 14.008938872377399 12.119650704741687 14.008726725886268 12.119650773027429 14.008286718349106 12.119650808389668 14.008058857303077 12.119650843751922 14.007830996257047 12.119650914476439 14.007375274164987 12.119650949838718 14.007147413118954 12.119650985200972 14.006919552072926 12.1196510547061 14.006471687258315 12.119651088848999 14.006251683489735 12.119651122991813 14.006031679721154 12.119651191277553 14.005591672183993 12.119651225420485 14.005371668415412 12.119651259563323 14.005151664646831 12.119651329068452 14.004703799832221 12.119651364430712 14.004475938786189 12.119651399792966 14.004248077740161 12.119651470517484 14.003792355648102 12.119651505879741 14.003564494602069 12.11965154124201 14.003336633556041 12.119651697218798 14.002331578022892 12.119651817833219 14.001554383535769 12.119651938447834 14.000777189048653 12.119652059062362 13.999999994561533 + 0 5 0.079095929234617821 3 0.16255764172196074 3 0.25220170328267788 3 0.34184576484339502 3 0.42839865186778153 3 0.51495153889216805 3 0.60459560045288518 3 0.69423966201360232 3 1 5 +7 0 0 4 29 10 1.5550174579443381 -0.07000060000000001 1.5550174581900766 -0.069803571625005029 1.5550174584358181 -0.069606543249964736 1.5550174586815562 -0.069409514874994957 1.5550174591865968 -0.069004582935999897 1.5550174594458979 -0.068796679371998418 1.5550174597051998 -0.068588775808000046 1.5550174602430118 -0.068157568416000083 1.5550174605215232 -0.06793426458799974 1.5550174608000324 -0.06771096075999973 1.5550174613570522 -0.067264353103999724 1.5550174616355619 -0.0670410492760007 1.5550174619140709 -0.066817745447999968 1.5550174624614868 -0.06637883792399997 1.5550174627303908 -0.066163234228000176 1.5550174629993014 -0.065947630531999576 1.5550174635371135 -0.065516423139999766 1.5550174638060144 -0.065300819444002192 1.5550174640749239 -0.065085215747999664 1.5550174646223398 -0.064646308223999666 1.5550174649008477 -0.064423004396002487 1.5550174651793587 -0.064199700567999604 1.5550174657363784 -0.063753092911999446 1.5550174660148888 -0.063529789084001531 1.555017466293398 -0.063306485255999689 1.5550174675218564 -0.062321530820763318 1.5550174684718066 -0.061559880213525257 1.5550174694217545 -0.060798229606293205 1.555017470371703 -0.060036578999054693 + 0 5 0.079095929234617821 3 0.16255764172196074 3 0.25220170328267788 3 0.34184576484339502 3 0.42839865186778153 3 0.51495153889216805 3 0.60459560045288518 3 0.69423966201360232 3 1 5 +1 -2.499999998772906 0 0 -1 +1 0.75062665280892582 0 0 -1 +8 -6.0000000021579138 6.0000000023030227 +7 0 0 2 3 2 3.1415926535103749 -6.0000000019087194 3.1415926535103802 3.2242696257998289e-10 3.1415926535103882 6.0000000025535787 + -6.0000000021579138 3 6.0000000023030227 3 +8 -6.0000000021579138 6.0000000023030227 +7 0 0 1 2 2 4.9999723418362123 1.9999999935921422 4.9999723418359423 13.999999998054179 + -6.0000000021579138 2 6.0000000023035378 2 +8 0.75062665258627748 3.8922193066324917 +7 1 0 2 5 3 -12.576680642164888 57.304228182498434 1 -1.5807345384786657 53.936859871699951 0.707106781105863 1.7866337698118144 64.932805976155578 1 5.1540020780996159 75.928752080610579 0.707106781105863 -5.8419440271233611 79.296120386390641 1 + 0.75062665258627748 3 2.3214229796093848 2 3.8922193066324917 3 +8 0.75062665258627748 3.8922193066324917 +7 0 0 2 5 3 6.3562567206563142e-11 -6.0000000003211378 0.78539816339251611 -6.0000000003214815 1.5707963264904348 -6.0000000003209237 2.3561944899003033 -6.0000000003216831 3.1415926533808998 -6.0000000003229843 + 0.75062665258627748 3 2.3214229796093848 2 3.8922193066324917 3 +8 -6.0000000015784849 6.0000000029798697 +7 0 0 1 2 2 -4.8869708280108171e-10 1.9999999920148532 1.3711343171962653e-09 13.99999999657364 + -6.0000000015784849 2 6.0000000029801521 2 +8 -6.0000000015784849 6.0000000029798697 +7 0 0 2 3 2 -5.051398038923814e-11 -6.000000002698644 -1.4027219246395606e-10 -4.1968125053624395e-10 -2.300307584640319e-10 6.0000000018592745 + -6.0000000015784849 3 6.0000000029798697 3 +7 0 0 6 32 7 0 4.0000000282642452 0.069474948174319665 4.0000000282642603 0.13680358999386372 4.000000028264302 0.20234523834805318 4.0000000282643056 0.26641015269516477 4.0000000282643375 0.32927043418044838 4.0000000282643553 0.45154803019781392 4.0000000282643899 0.51101753032464614 4.0000000282644024 0.56979514101406958 4.0000000282644184 0.62809058329677625 4.0000000282644272 0.6861027614870725 4.0000000282644361 0.80881504653964531 4.0000000282644459 0.87349897160325685 4.0000000282644566 0.93833374926738577 4.0000000282644459 1.0035929973717814 4.0000000282644503 1.0695620732577791 4.0000000282644379 1.2050042777106764 4.0000000282644166 1.2745330240326733 4.0000000282644033 1.345444158815869 4.0000000282643846 1.4181047700605243 4.0000000282643615 1.4929376008894539 4.0000000282643375 1.5895750385308665 4.0000000282643304 1.608548072270134 4.0000000282643491 1.6273656213341237 4.0000000282643695 1.6460349669767431 4.0000000282643908 1.6645631393829881 4.0000000282644113 1.7467110676753161 4.0000000282645019 1.8088527725497872 4.0000000282645543 1.8696559761225808 4.0000000282646306 1.9293639762712589 4.0000000282646813 1.9881950423822738 4.000000028264739 2.0463449903702471 4.0000000282647905 + 0 7 0.184752061003228 5 0.36499286170915513 5 0.56663732280275614 5 0.77276093345069197 5 0.82364209742598549 5 1 7 +7 0 0 6 32 7 58.596373634203417 2.9068602639320886 58.274684686720192 2.2634823876435402 58.001223503726933 1.5958311343286979 57.778337147993632 0.9085118129757177 57.60770524359117 0.20632220344003827 57.490449965093724 -0.5057806334745667 57.36515567398299 -1.9220193771602219 57.354513892090743 -2.6259913423365262 57.395544883468112 -3.329796640263595 57.488069772141912 -4.0287201401289821 57.631385563753796 -4.7180959521743109 58.039846753951416 -6.1487241718971894 58.317464746221141 -6.8865074062969622 58.655192000782883 -7.6001887522601468 59.050317249605143 -8.2837447939788103 59.499417230282276 -8.9315254204679473 60.508044088867308 -10.158645492533473 61.069881210246109 -10.736241022252868 61.679132694436596 -11.265565025710913 62.330547917799962 -11.741901654554713 63.018333503448297 -12.161221213693668 63.913180422239577 -12.609004596011047 64.092179771042936 -12.693997092271248 64.272924036720028 -12.775282880196867 64.455316849902587 -12.852817184588025 64.639260345630859 -12.92655861913498 65.467247402455826 -13.238784423625576 66.127303144041733 -13.435087328547736 66.800632977995434 -13.583768138684544 67.482941816372204 -13.683778921845569 68.169845987903102 -13.734548978331631 68.856859674506552 -13.736067974419093 + 0 7 0.184752061003228 5 0.36499286170915513 5 0.56663732280275614 5 0.77276093345069197 5 0.82364209742598549 5 1 7 +8 -2.4999861696139654 2.4999861738130047 +7 0 0 1 2 2 81.40393431625202 -2.9069131051771961 79.167878707893635 -7.3790243237591113 + -2.4999861696139654 2 2.4999861738130713 2 +8 -2.4999861696139654 2.4999861738130047 +7 0 0 1 2 2 -2.7413449288360425e-09 14.00000000268242 4.9999723406858863 14.000000002682668 + -2.4999861696139654 2 2.4999861738130713 2 +1 0 0 1 0 +1 0 -2 1 0 +1 0 0 1 0 +1 0 -0.070000000000000007 1 0 +7 0 0 1 2 2 -5.9153361953024168 79.115383385122158 -10.696975337305219 80.576769901466704 + 0 2 1 2 +7 0 0 1 2 2 2.4999861738130047 -0.059968560680082071 -2.4999861696139654 -0.059962655147618546 + 0 2 1 2 +8 -6.6707929858015955 6.6707929751239305 +7 0 0 1 2 2 -5.682688758132997 70.02647391557332 -3.4718478050102561 56.869342836468007 + -6.6707929858015955 2 6.6707929751239305 2 +8 -6.6707929858015955 6.6707929751239305 +7 0 0 1 2 2 -4.6872372649886529e-09 13.999999994563044 13.341585956238205 13.999999994561273 + -6.6707929858015955 2 6.6707929751239305 2 +7 0 0 4 9 3 -10.696974555651064 80.576760096175988 -14.471140710595023 81.792070765087828 -20.307780772572187 81.329973666364822 -23.953811984319032 76.748886746867356 -25.056035400839896 72.940158121818129 -26.342176350547653 69.545657555774554 -25.475403275416994 64.998738164219645 -22.984634586472552 61.036047443963582 -19.398788694738961 59.394232891816564 + 3.8922169017261097 5 5.4630144308545114 4 6.8339675265723265 5 +8 5.9266632421900418 7.3248579574747392 +7 1 0 2 3 2 -27.2435029899368 68.444205921544793 1 -25.641316863506546 58.909294414555802 0.76542337379494674 -15.972913016829366 58.8500923249116 1 + 5.9266632421900418 3 7.3248579574747517 3 +8 5.9266632421900418 7.3248579574747392 +7 0 0 2 3 2 1.2446448131996884e-10 -3.000000003876603 0.69909735807846585 -3.0000000038778634 1.398194715621256 -3.0000000038769512 + 5.9266632421900418 3 7.3248579574747392 3 +8 -11.993769407756835 11.993769409068731 +7 0 0 1 2 2 -27.243502999430618 68.444205919949127 -31.218490188882399 92.100103605991436 + -11.993769407757224 2 11.993769409069305 2 +8 -11.993769407756835 11.993769409068731 +7 0 0 1 2 2 -1.2261125448276289e-09 13.999999995906517 23.987538815601425 13.999999995891105 + -11.993769407757224 2 11.993769409069305 2 +8 -15.52492236714993 15.52492235992756 +7 0 0 1 2 2 -0.59792691999604131 97.245389079626847 -31.218490189954437 92.100103605896251 + -15.52492236715042 2 15.524922359928077 2 +8 -15.52492236714993 15.52492235992756 +7 0 0 1 2 2 1.5755290405650157e-09 14.00000000296259 31.049844728654399 14.000000002962334 + -15.52492236715042 2 15.524922359928077 2 +8 -14.006230591175644 14.006230588715699 +7 0 0 1 2 2 4.0440321855334318 69.620215830072993 -0.59792692437365247 97.245389077979951 + -14.006230591175644 2 14.006230588715699 2 +8 -14.006230591175644 14.006230588715699 +7 0 0 1 2 2 -5.0818300678656669e-09 13.999999998898476 28.012461174809602 13.999999998879158 + -14.006230591175644 2 14.006230588715699 2 +8 1.386875873711265 2.7850705877008566 +7 1 0 2 3 2 -3.4718477917955539 56.869342839436783 1 5.6462183067406002 60.085304329809034 0.76542337421165119 4.0440321901298262 69.620215830844643 1 + 1.386875873711211 3 2.7850705877008566 3 +8 1.386875873711265 2.7850705877008566 +7 0 0 2 3 2 5.7847280984761531e-10 -3.0000000004566214 0.69909735790519423 -3.0000000004580385 1.3981947152708234 -3.0000000004557701 + 1.386875873711265 3 2.7850705877008566 3 +7 0 0 2 3 2 1.5199058275350512e-09 6.0000000029805287 1.5707963271083949 6.0000000029812499 3.1415926553177851 6.0000000029808769 + 1.023000500999343 3 4.1645931542697339 3 +7 1 0 5 10 3 -12.079878084433531 86.119331326740522 1 -12.48668414495266 85.374677830804359 0.99999999999999833 -13.25672328493412 84.613114838518058 0.9656854249624508 -14.346809057954911 84.293274961516786 0.96568542496244369 -15.406248891495725 84.518054203066953 1.000000000000002 -16.8955558834976 85.331666323868006 1.0000000000000004 -17.657118875906786 86.101705463728919 0.96568542496244436 -17.97695875308111 87.191791236698066 0.96568542496245047 -17.752179511699971 88.251231070275367 0.99999999999999867 -17.345373451418126 88.995884566341104 1 + 1.023000500999137 6 2.5937968276348657 4 4.1645931542700261 6 +1 0 0 1 0 +1 0 -0.0060000000000000001 1 0 +7 0 0 2 5 3 -1.1280911728192599e-09 5.9938775540800693 0.78539779653966491 5.9938775540806919 1.570796527968503 5.9938775540805489 2.3561951450880207 5.993877554080342 3.141592654639072 5.9938775540804121 + 1.023000500999343 3 2.5937968276345815 2 4.1645931542697339 3 +8 -4.7123889803800001 4.7123889803800001 +7 0 0 3 6 3 1.8443272367093364e-09 6.0000000002274918 0.57935305621042588 5.9999999995364703 0.99144326830507179 6.0000000004736549 2.1501493848814341 5.9999999971399873 2.5622395960447371 6.0000000055706764 3.1415926522375299 5.9999999982249062 + -4.7123889803800001 4 0 2 4.7123889803800001 4 +8 -4.7123889803800001 4.7123889803800001 +7 0 0 5 9 3 -17.345373448313651 88.9958845646442 -16.893525531910058 89.822986639265764 -16.116875376319356 90.472648453726237 -15.105993579165499 90.769249252726652 -13.096908885586217 90.515157858996119 -11.797585256674665 88.961857557836595 -11.500984454198829 87.950975755205761 -11.628030156424288 86.946433407384248 -12.079878080287031 86.119331332837604 + -4.7123889803800001 6 4.4408920985e-16 3 4.7123889803800001 6 +1 0 0 1 0 +1 0 -0.0060000000000000001 1 0 +7 0 0 3 6 3 3.0678575067483724e-07 5.9938775513270262 0.57935319401980134 5.9938775506360074 0.99144326556329254 5.9938775515731848 2.1501490794026719 5.9938775482395172 2.5622392547886221 5.9938775566702205 3.141592347296001 5.9938775493244441 + -4.7123889803800001 4 0 2 4.7123889803800001 4 +8 -3.0000000046015805 2.9999999973619302 +7 0 0 1 2 2 -5.3722573056802503e-09 14.00000000127781 -5.3743889338875306e-09 20.000000003243255 + -3.0000000046020872 2 2.9999999973624822 2 +8 -3.0000000046015805 2.9999999973619302 +7 0 0 2 3 2 1.0948094349427566e-09 -2.9999999936129633 1.0948808239826854e-09 7.3687953165783619e-09 1.0949542689473327e-09 3.0000000083505491 + -3.0000000046015805 3 2.9999999973619302 3 +8 -6.6707929873592171 6.6707929811188045 +7 0 0 1 2 2 -5.6826887613108283 70.026473915288321 -3.4718477996976134 56.869342829950511 + -6.6707929873597873 2 6.6707929811188045 2 +8 -6.6707929873592171 6.6707929811188045 +7 0 0 1 2 2 -5.7335398651048308e-09 19.999999997442423 13.341585962745214 19.999999997448583 + -6.6707929873597873 2 6.6707929811188045 2 +8 -3.0000000043124513 2.9999999931883199 +7 0 0 2 3 2 1.9709458378994366e-10 -3.0000000003773826 1.9705834028941927e-10 -1.6263267203530564e-09 1.9702138996898227e-10 2.9999999971247227 + -3.0000000043124513 3 2.9999999931883199 3 +8 -3.0000000043124513 2.9999999931883199 +7 0 0 1 2 2 13.341585955060481 13.999999999384004 13.341585955058619 19.999999996885649 + -3.0000000043125801 2 2.9999999931884203 2 +7 0 0 1 2 2 -5.7334448300139229e-09 14.010206366790833 12.784827380766625 14.01016457637046 + 0 2 1 2 +7 0 0 1 2 2 70.166791382457831 -6.0972845177427466 57.381966009279971 -6.0901221460544805 + 0 2 1 2 +7 0 0 4 14 5 0.5555099132897654 -2.9898123456222288 0.62010132887156677 -2.9898143779857786 0.68426376795771393 -2.9898162762517893 0.74838271465636264 -2.9898180158669643 0.87610843164381547 -2.9898211112202673 0.93970550133456454 -2.9898224735155483 1.0039929295216796 -2.9898236470349042 1.1021337607568829 -2.9898251080871439 1.135162882858469 -2.9898255454959064 1.1685207788217955 -2.9898259313088591 1.2499173638075454 -2.9898267351704382 1.2983413057524296 -2.9898271009806829 1.3477004663234191 -2.9898273593019851 1.3981947160273114 -2.989827509310655 + 0 5 0.31571161465858466 3 0.62559550802750974 3 0.78081384408272403 3 1 5 +7 0 0 4 14 5 66.182989627757706 13.736067977646652 65.525926526527513 13.334050879747386 64.904738391174448 12.8733320284359 64.327363171036708 12.358766801244846 63.282707160749659 11.245879287960005 62.813569320669309 10.649255720886181 62.398768796055329 10.013689975716197 61.863958205449485 9.012981174109413 61.700143889361684 8.6711894930747953 61.551513391698208 8.3225429223407961 61.230549059097072 7.46751826767587 61.073688788281103 6.955346899117191 60.948949607126359 6.4344655437119682 60.856851938008035 5.9079330158697223 + 0 5 0.31571161465858466 3 0.62559550802750974 3 0.78081384408272403 3 1 5 +7 0 0 1 2 2 -5.3741229244504193e-09 14.010202951486582 9.3166636002070877 14.010172497630633 + 0 2 1 2 +7 0 0 1 2 2 70.173514074831175 5.9027135946907974 60.85685193652364 5.9079330165575383 + 0 2 1 2 +7 0 0 4 56 19 0 -2.9897936281008732 0.060472130865792381 -2.9897925603153075 0.11915819702101271 -2.9897914987258591 0.17640394934051326 -2.9897904519664888 0.27385527656574971 -2.9897886729471317 0.31459529556291366 -2.9897879301558223 0.35480671716884599 -2.9897872032525599 0.42348030361329919 -2.9897859810806358 0.45214758741237748 -2.9897854768405514 0.48062224932086578 -2.9897849838109019 0.57901542857841948 -2.9897833134162846 0.64812175457489862 -2.9897821991579985 0.71676094153030179 -2.9897811772757188 0.84385153105146515 -2.9897794802909363 0.90230577245294152 -2.9897787761977699 0.96104966962448135 -2.9897781565251647 1.0447215958246008 -2.9897774094013889 1.0691542261424081 -2.9897772072333719 1.0937085047600905 -2.9897770205350449 1.152491647317605 -2.9897766136914212 1.1868510278381998 -2.9897764077983409 1.2215442466102067 -2.9897762326732651 1.3046602116040893 -2.9897758918327484 1.3534322226061521 -2.9897757533585616 1.4031206219511978 -2.9897756744946236 1.4825736319547385 -2.9897756444264312 1.5115743558796537 -2.9897756525407475 1.540967956441208 -2.9897756796137669 1.600624695605968 -2.9897757714546951 1.6300182961677168 -2.98977583624603 1.6590190200924462 -2.9897759198399285 1.7384720300975691 -2.989776203355309 1.788160429443459 -2.9897764432404608 1.8369324404446976 -2.9897767406829261 1.9200484054376634 -2.9897773514386805 1.9547416242101017 -2.989777638916558 1.9891010047302731 -2.9897779551782304 2.047884147287192 -2.9897785483316155 2.0724384259050868 -2.9897788120821995 2.0968710562226884 -2.989779089939379 2.1805429824267923 -2.9897800922100588 2.2392868795998799 -2.9897808839673057 2.2977411209999086 -2.9897817494175847 2.4245239864162187 -2.9897837656796922 2.4928554050522775 -2.9897849400543048 2.5616477665847079 -2.9897861868429572 2.6597147891484743 -2.9897880158141752 2.6881897944476201 -2.9897885528460764 2.7168567404303099 -2.9897890975770678 2.7855311656166153 -2.9897904074967179 2.8257432165488701 -2.989791178441763 2.8664826238871388 -2.9897919582453736 2.9642265076468606 -2.989793813220992 3.021776801312301 -2.9897948930458131 3.0807816656289968 -2.98979597421742 3.1415926533626157 -2.9897970479863387 + 0 5 0.069432500370469594 3 0.12066728999683643 3 0.15788684094784391 3 0.24999983266899856 3 0.32844582987829196 3 0.36061273557803419 3 0.40500406012653134 3 0.46575188617158519 3 0.49999999641145282 3 0.53424810663526645 3 0.59499593265598716 3 0.63938725719051892 3 0.67155416288238001 3 0.7500001600810573 3 0.84170017814769971 3 0.87892801119824771 3 0.93017843303691039 3 1 5 +7 0 0 4 56 19 70.166791376693126 -6.0972845241217062 70.493455975127304 -6.0974675977535844 70.820305814807469 -6.0739369751266095 71.14470420790083 -6.0266379366425857 71.699737719159728 -5.9040588004218613 71.932666220084656 -5.8393608623002544 72.161825231008237 -5.762226206239518 72.549251262092511 -5.6082439742138268 72.709763433015468 -5.5370896065492996 72.867391336073467 -5.4597190862563503 73.403864990968714 -5.1699274076249946 73.766114584225363 -4.9266138039958829 74.103087129815847 -4.6492872036571846 74.672145841058679 -4.0808655774278613 74.912387409670004 -3.7979079896884218 75.128453900465743 -3.4961159771202115 75.396298301512346 -3.0486248187808553 75.469799063905967 -2.9158735191844141 75.538777068578995 -2.7807282292476683 75.691923300247652 -2.4539437914447295 75.771902433530798 -2.2603529514652374 75.842774259233536 -2.0632758356458041 75.988599109615038 -1.5898060721058611 76.055434719675304 -1.3109424470070508 76.104349975766169 -1.0284669426209589 76.152565935471358 -0.58383478670843036 76.164201695022641 -0.42294432664830062 76.170061511201482 -0.26177661115375006 76.17024204915819 0.060482978934081721 76.164562817050893 0.22165715881877812 76.153107334551379 0.38256055509935027 76.105389593311031 0.82724645530161478 76.056790867680292 1.1097765893676224 75.990267752411569 1.388714925278812 75.844973492930521 1.8623477809242965 75.774322526841743 2.0595041813247574 75.694560352694822 2.2531845123598346 75.541780362913741 2.5801403376701257 75.472953825133217 2.7153628291613936 75.399601850125634 2.8481963993406305 75.132259008847441 3.2959873830272981 74.916530796653802 3.5980212978627995 74.676606418785099 3.8812478866652524 74.109561265845826 4.4489288952714761 73.774541626722169 4.7255199586154744 73.414413688698204 4.9684499921971179 72.880317603930905 5.2586281492803364 72.722841067202225 5.336395830494614 72.562463947947492 5.4079515379057375 72.175301337482651 5.5629025185400076 71.946255211367287 5.640605432184171 71.713407663678183 5.7058729134730077 71.156799336144985 5.8301678758142019 70.830664729374618 5.8783652643655815 70.502009143187109 5.9025296317648293 70.173514074828319 5.9027135927186949 + 0 5 0.069432500370469594 3 0.12066728999683643 3 0.15788684094784391 3 0.24999983266899856 3 0.32844582987829196 3 0.36061273557803419 3 0.40500406012653134 3 0.46575188617158519 3 0.49999999641145282 3 0.53424810663526645 3 0.59499593265598716 3 0.63938725719051892 3 0.67155416288238001 3 0.7500001600810573 3 0.84170017814769971 3 0.87892801119824771 3 0.93017843303691039 3 1 5 +8 -2.499999998772906 2.4999999987092778 +7 0 0 1 2 2 58.596053313288358 2.90688837449445 60.832121291898581 7.3790243261249202 + -2.4999999987735597 2 2.4999999987092778 2 +8 -2.499999998772906 2.4999999987092778 +7 0 0 1 2 2 6.9297811933211051e-10 13.999999996347356 4.9999999981761363 13.999999996347391 + -2.4999999987735597 2 2.4999999987092778 2 +1 0 0 1 0 +1 0 -2 1 0 +1 0 0 1 0 +1 0 -0.070000000000000007 1 0 +7 0 0 6 17 4 6.2831853071795871 3.0700033255551422 6.2631996302820205 3.070003004520018 6.243213949240686 3.070002681886328 6.2232282663018621 3.0700023578852522 6.203242583536734 3.0700020327493331 6.1832569028413813 3.0700017067124676 6.0739847055555636 3.0699999204579314 5.9846811098078838 3.0699984473321131 5.8953975923848869 3.0699969822080719 5.8061139746290653 3.0699955459676227 5.7168101044243143 3.0699941589348021 5.5934398755928925 3.0699923372988933 5.5593559696367647 3.0699918439958309 5.5252720354571307 3.0699913617154082 5.4911880959563648 3.0699908914727199 5.4571041772839051 3.0699904342410016 5.4230203088362439 3.0699899909516297 + 0 7 0.13941279906852894 5 0.76224302818006229 5 1 7 +7 0 0 6 17 4 70.596393220007045 -5.0670571825650876 70.495124592753996 -5.078977122844754 70.393570035706446 -5.0884683615836268 70.29180247432231 -5.0955223177946314 70.189895000772495 -5.1001333371853974 70.087920873940874 -5.1022986921582598 69.530411767161837 -5.100767181699311 69.074915477969839 -5.0507068475745776 68.626201594130592 -4.9518223992195907 68.190676620242996 -4.8053957946976738 67.774492288271958 -4.6136282022309656 67.234129604923268 -4.2908235988384353 67.088488992491548 -4.1955350438045711 66.946808889273981 -4.0943274904437326 66.809388005608582 -3.9874082127982846 66.676510237573837 -3.8750043849569877 66.548444666988544 -3.7573630810549941 + 0 7 0.13941279906852894 5 0.76224302818006229 5 1 7 +7 0 0 7 62 11 3.1415926535897931 3.069996656048374 3.122558043412988 3.0699969618062659 3.1035234277785944 3.0699972689739896 3.0844888083955939 3.0699975773702524 3.0654541874592445 3.0699978868129056 3.0464195676510828 3.0699981971189438 3.0273849521389193 3.0699985081045078 2.9357758786138768 3.0700000071860303 2.8631920209855095 3.0700012021402672 2.7906151218315247 3.0700023939533403 2.7180426039988603 3.0700035723711538 2.6454656012304101 3.0700047273507503 2.5728816233179854 3.0700058490779329 2.4567528364484459 3.0700075755492038 2.4131977069904154 3.0700082077239594 2.3696431091095107 3.0700088225316415 2.3260888397475123 3.070009418040204 2.2825342163699687 3.0700099924108426 2.2389790498123392 3.070010543899123 2.1710543000454758 3.0700113657080297 2.1466839713726893 3.0700116528830841 2.1223136366633044 3.0700119320943706 2.0979433013839817 3.0700122030671766 2.0735729709125175 3.0700124655389667 2.0492026505378393 3.070012719259386 1.9573518614025964 3.0700136416410992 1.8898646630256941 3.0700142504393888 1.8223823375102415 3.0700147851997857 1.7549031527419869 3.0700152417207955 1.6874209186550655 3.0700156166352515 1.6199338286157479 3.0700159074143918 1.5375093351122071 3.0700161579485674 1.5225653900020166 3.0700161991712069 1.5076214438510236 3.0700162361768877 1.492677496278622 3.0700162689513451 1.4777335481883589 3.0700162974826282 1.462789601767932 3.0700163217611061 1.4332904986968711 3.0700163612770202 1.4187353247738075 3.0700163767332627 1.4041801473997106 3.070016388141422 1.3896249717632032 3.0700163954968436 1.3750697995618251 3.0700163987969806 1.3605146290020298 3.0700163980413939 1.2784003414275098 3.0700163709073949 1.2108346489071491 3.0700162612387039 1.1432738402706273 3.0700160643663637 1.075716098114097 3.0700157814893991 1.0081551966707627 3.0700154146988856 0.94058939418321974 3.0700149669756365 0.84965396394013137 3.0700142608246912 0.82627756970268584 3.0700140700838801 0.80290116708091019 3.0700138702919757 0.77952476036041241 3.070013661623249 0.75614835389387081 3.0700134442637337 0.73277195210103307 3.0700132184112223 0.60807035455487757 3.0700119694106567 0.50669343120687649 3.0700107983906126 0.40535844616107952 3.07000948890499 0.30403587934334775 3.0700080621694421 0.20270192642733253 3.0700065416630928 0.101326588469768 3.0700049531904754 0 3.0700033255551427 + 0 8 0.042414656661629295 6 0.20413173153070058 6 0.30118378412760549 6 0.35548799954823113 6 0.50585438729915921 6 0.53915386712064628 6 0.57158703233199826 6 0.72212840373571585 6 0.77421783693834578 6 1 8 +7 0 0 7 62 11 69.403544929177556 5.0670631500720651 69.499994444136789 5.0784158511948281 69.596696139207623 5.0876266999438418 69.693592826804164 5.0946889669686994 69.790627220094123 5.099597836131962 69.887741932998622 5.1023504045091439 69.984879480192291 5.1029456823887198 70.452212322894539 5.0954325289289075 70.821987056826984 5.058132128427177 71.188033698269052 4.9895219048954278 71.547193390583558 4.8900841903106178 71.896405213935807 4.7606662727561337 72.232711577561616 4.6024791405735908 72.745672269433854 4.30596566054209 72.932411686952406 4.1849795608334013 73.112901870940988 4.054563610410935 73.286573839795011 3.9151072740148862 73.452891331169312 3.7670411514920934 73.611351129732313 3.6108367242910284 73.845487953836781 3.3553368052270822 73.926886300207997 3.2612789292353468 74.005596699292269 3.1649216893905816 74.081541493915282 3.0663574415559833 74.154647104469888 2.9656816820489591 74.224844028916181 2.8629930476411274 74.478204357467646 2.4687604804058432 74.641558601447144 2.1644443144508201 74.78070391745608 1.8476457670755291 74.894531951622 1.5206815136692398 74.982203167369661 1.1859634578715983 75.043147826026811 0.84599537387277779 75.084638972890744 0.42751407410644809 75.09083870371532 0.3515102974901918 75.095712880491334 0.27540305597698417 75.099259483700948 0.19922008699177773 75.101477220421316 0.12298916832910158 75.10236552432454 0.046738118153060802 75.101495059209626 -0.10376499252570033 75.099804553287029 -0.17801755973489558 75.096853187749844 -0.25223713983710949 75.092641765695447 -0.32639802093880405 75.087171743478734 -0.40047454604604188 75.080445230712158 -0.47444111306448722 75.035424006657877 -0.89096550162516441 74.971368578995026 -1.2307731115522771 74.880572211683585 -1.5650786289483511 74.76362924361986 -1.891374763461253 74.621404181886874 -2.2072489724844999 74.455030684674767 -2.5103868349549252 74.200539142501015 -2.8983165729839628 74.13239828349694 -2.9962559659498047 74.061596183734878 -3.0923220577830386 73.988194846505351 -3.186428269836671 73.912259711066213 -3.2784907024138303 73.833859652642758 -3.3684281347677651 73.402870354836239 -3.8364454399046757 73.00753993257581 -4.1755243596699323 72.573194787982558 -4.4666005049780626 72.106907596546861 -4.704552117277899 71.616351649760915 -4.8854653126494068 71.109821139970038 -5.0066235585506336 70.596393220007059 -5.0670571825650876 + 0 8 0.042414656661629295 6 0.20413173153070058 6 0.30118378412760549 6 0.35548799954823113 6 0.50585438729915921 6 0.53915386712064628 6 0.57158703233199826 6 0.72212840373571585 6 0.77421783693834578 6 1 8 +7 0 0 7 32 6 5.4230203088362439 3.0699899909516297 5.3514983328186458 3.0699890607481857 5.2799673252020511 3.0699881901043669 5.20844282171121 3.0699873870301668 5.1369225514019856 3.0699866584568958 5.0653982555001642 3.069986010415557 4.993867483091873 3.0699854480280169 4.8753429069229721 3.0699846646537501 4.8283393420230478 3.0699843926906416 4.7813365893320805 3.0699841605587985 4.7343343560002298 3.0699839691612985 4.6873316101210731 3.0699838191858748 4.6403280543077283 3.0699837111046469 4.5463252853379661 3.0699835792080536 4.4993238613245223 3.0699835553857246 4.4523232442438312 3.0699835739320633 4.4053231414050513 3.0699836348499048 4.3583225221892601 3.0699837379203703 4.3113210916728546 3.0699838827029717 4.204850346258147 3.0699843036291425 4.1453764462239011 3.0699846044544188 4.0859051413684515 3.0699849696224999 4.0264354528185837 3.0699853971851234 3.9669640663001604 3.0699858846887627 3.907490064325728 3.0699864291764754 3.7471181912506832 3.0699880416262033 3.6461660663278126 3.0699892106280529 3.5452549814740792 3.0699905165908783 3.4443561386629677 3.0699919385300651 3.3434460600175457 3.069993453236961 3.2424954757041702 3.0699950352201077 3.1415926535897918 3.0699966560483745 + 0 8 0.21946248234994364 6 0.36368745660993884 6 0.50790585739418814 6 0.6903881816598002 6 1 8 +7 0 0 7 32 6 66.548444666988544 -3.7573630810549941 66.279710421574265 -3.5105032350466727 66.031540344718309 -3.24118786810687 65.806249980464202 -2.9515259037389745 65.605796935036665 -2.6438677689913406 65.431840483772973 -2.3207606844541098 65.285739198580956 -1.9849442594528028 65.091431267745563 -1.4122948461214981 65.026826951352888 -1.1809724881222194 64.974955949138632 -0.94624787709253921 64.936026360043613 -0.70896229059544935 64.91017806488837 -0.46996837260905427 64.897482673665849 -0.23012976936271912 64.898392175197614 0.24947533239875178 64.911995890743569 0.48925318665762846 64.938748024287563 0.72813661263560703 64.978573701378863 0.96526233452615784 65.031329828302134 1.1997783549622401 65.096805154525171 1.4308443161467905 65.273294243505788 1.9445927891441777 65.391789934170376 2.2247299890072494 65.529625602057351 2.4963550949436657 65.686053538527332 2.7578785762785398 65.860176077768998 3.0077994905893517 66.050946300441566 3.2447069032086011 66.607002251202957 3.8449502166525646 67.001490409309909 4.1816107976883252 67.434551266901153 4.4705841631168095 67.899191113907889 4.7068265579853836 68.387826360199441 4.8864839980450441 68.892264258832725 5.0068822705443168 69.403544929177571 5.0670631500720678 + 0 8 0.21946248234994364 6 0.36368745660993884 6 0.50790585739418814 6 0.6903881816598002 6 1 8 +8 -5.9999999957125407 5.9999999958837318 +7 0 0 1 2 2 -9.0663121454781503e-09 2.0000000034285583 -9.0671505859063473e-09 13.999999995026243 + -5.9999999957125407 2 5.999999995884532 2 +8 -5.9999999957125407 5.9999999958837318 +7 0 0 2 3 2 5.4214506525262982e-10 -5.9999999916675355 5.4213359930111735e-10 4.1304270543045661e-09 5.4212631964171604e-10 5.9999999999283888 + -5.9999999957125407 3 5.9999999958837318 3 +1 3.8922169017261097 0 0 -1 +1 -2.4999861696139654 0 0 -1 +7 0 0 2 3 2 -2.7413391796565708e-09 13.999999995025609 5.9052910016006259e-05 13.00000000706461 0.00011810856135590471 12.000000019103624 + 0 3 2 3 +7 0 0 2 3 2 0 5.9999999999280176 0 4.9999999972910221 0 3.9999999952926708 + 0 3 2 3 +8 -2.4999861731716773 2.4999861736850213 +7 0 0 1 2 2 -10.622763715403138 80.760185472892047 -5.8419440267148417 79.296120387724216 + -2.4999861731731805 2 2.4999861736853077 2 +8 -2.4999861731716773 2.4999861736850213 +7 0 0 1 2 2 -3.6823308846578584e-09 1.9999999983162819 4.9999723431768928 1.9999999983172456 + -2.4999861731731805 2 2.4999861736853077 2 +8 -2.5000000042637143 2.4999999994136952 +7 0 0 1 2 2 -12.576680642088206 57.304228182752098 -17.357526777277442 58.768301360025518 + -2.5000000042637143 2 2.499999999413721 2 +8 -2.5000000042637143 2.4999999994136952 +7 0 0 1 2 2 -1.6688517234797473e-09 1.9999999997064966 5.0000000020076953 1.9999999997057567 + -2.5000000042637143 2 2.499999999413721 2 +8 3.8922169014523766 7.0338119600051643 +7 1 0 2 5 3 -10.622763716828928 80.760185468232791 1 -21.618714943092044 84.127584269785487 0.70710635604500927 -24.98610052221504 73.131628994295752 1 -28.353486101337154 62.135673718806984 0.70710635604500927 -17.357526776637854 58.768301362119715 1 + 3.8922169014523766 3 5.4630144307287702 2 7.0338119600051643 3 +8 3.8922169014523766 7.0338119600051643 +7 0 0 2 5 3 2.2042260893245135e-11 -5.9999999950137539 0.78539876484771898 -5.9999999950143561 1.5707975290729417 -5.9999999950138676 2.3561962934174527 -5.999999995013761 3.141595057575302 -5.9999999950143081 + 3.8922169014523766 3 5.4630144307287702 2 7.0338119600051643 3 +7 0 0 8 23 4 1.5707963267948966 0.20135725350457731 1.534863696579541 0.20135736894362632 1.498930648812318 0.2013574853681821 1.462997784923072 0.20135760254917859 1.4270651516515442 0.20135772025662466 1.3911325181689451 0.20135783825966092 1.3551996531995247 0.20135795632661546 1.319266602142146 0.20135807422506038 1.2119477219007195 0.20135842514908137 1.1405487901903608 0.20135865703871927 1.0691555872973719 0.20135888551323863 0.99776946726727467 0.20135910877768945 0.92638326553654615 0.2013593251079247 0.85498986258037546 0.2013595328482187 0.78359076562615559 0.20135973041829408 0.62319381956009412 0.20136014814175618 0.53414371264074378 0.20136036198374557 0.44511461143530207 0.20136055487170124 0.35610217237997122 0.20136072435650773 0.26708983015935589 0.20136086837311754 0.17806097763812717 0.20136098525831639 0.089011102217690444 0.20136107374019263 0 0.20136113310617049 + 0 9 0.18302163686910564 7 0.54662496964235008 7 1 9 +7 0 0 8 23 4 -21.198155168586947 66.234240091575018 -21.298694100257155 66.579136560088301 -21.385070432952897 66.928165807961406 -21.457085026487196 67.280643427883632 -21.514578995673194 67.635879000142296 -21.557433733659849 67.99317626316288 -21.585570935267647 68.351833284048993 -21.598952620324283 68.711142629122307 -21.594856513926111 69.78410004189081 -21.533903622850879 70.497715561037666 -21.414709741115466 71.205500208035915 -21.237975169706036 71.901912140168022 -21.004996507522673 72.581578757051531 -20.717626585544902 73.239292590801554 -20.378311080894079 73.870029885171178 -19.506270459635513 75.215834317267849 -18.946151873593692 75.913777309412524 -18.31590070245133 76.553220917325561 -17.622805095132286 77.126102491111666 -16.875002586520395 77.625466333784857 -16.081492938284793 78.045516560813141 -15.252090619587172 78.381589023962974 -14.397725501196435 78.63064092841789 + 0 9 0.18302163686910564 7 0.54662496964235008 7 1 9 +7 0 0 6 7 2 0.56368159725240252 0.20135564015967661 0.46974121963872173 0.20135586179159037 0.375777655553307 0.20135610762717615 0.28184054248373752 0.20135637404296702 0.18790376757209848 0.20135665689671312 0.093940962074719997 0.20135695170492426 0 0.20135725350457728 + 0 7 1 7 +7 0 0 6 7 2 -18.218250717333518 61.53865181593482 -18.922200037668979 62.160397811666087 -19.556237438082395 62.861655854065482 -20.108724338172987 63.632271233657292 -20.570755478070232 64.460287310822395 -20.935309840803839 65.332555303288501 -21.198155168586947 66.234240091575018 + 0 7 1 7 +7 0 0 6 17 4 1.5707963267948966 0.20135470780228973 1.5228891931120649 0.20135467585057473 1.4749812821232313 0.20135465274653153 1.4270742774936209 0.20135463862295647 1.3791672749789334 0.20135463355047478 1.3312593681095921 0.20135463753751168 1.2409658828006951 0.20135466202574168 1.1985791069766283 0.20135468057113226 1.15619282624235 0.20135470612885312 1.113806544719804 0.20135473862394093 1.0714197668023726 0.20135477794409631 0.95147714175535469 0.20135490810006226 0.87391230510849471 0.20135501462041269 0.79635760467159733 0.20135514257744641 0.71880279934051283 0.20135529064370145 0.64123773937846384 0.20135545718280723 0.56368159725240297 0.20135564015967661 + 0 7 0.28541677108594898 5 0.53794232192554325 5 1 7 +7 0 0 6 17 4 -8.8017452706894641 59.433807656887389 -9.2615781831536808 59.299763819920237 -9.7291246685657296 59.192153500383625 -10.20246874800814 59.111534188073044 -10.679666391291468 59.058275562269927 -11.158747108081196 59.032559274914348 -12.061487997799901 59.035988519530427 -12.485182803903689 59.05915320576441 -12.907420377566147 59.103867071364299 -13.326835626058953 59.17000897850977 -13.742078643264518 59.25734246654968 -14.901529717683848 59.563445680361383 -15.632907000385606 59.831171881240579 -16.337634441866662 60.1665298327692 -17.008065139858015 60.566067052898958 -17.63707790406254 61.02534516296879 -18.218250717333518 61.53865181593482 + 0 7 0.28541677108594898 5 0.53794232192554325 5 1 7 +7 0 0 8 23 4 1.5707963267948968 0.20135858740592824 1.5349722203764717 0.20135847231555806 1.4991477046038439 0.2013583562456378 1.4633233719730649 0.2013582394231524 1.4274992684920047 0.20135812207600565 1.3916751667164386 0.2013580044329657 1.3558508387861286 0.20135788672360863 1.3200263294609083 0.20135776917826362 1.2126728580092236 0.20135741811593472 1.1411306793486122 0.20135718573080183 1.069594293859129 0.20135695676181076 0.99806506901100589 0.20135673301500212 0.92653576905379698 0.20135651622511722 0.85499920349444525 0.20135630805800023 0.78345689406013197 0.20135611010349019 0.62295143619668425 0.2013556921858215 0.53393597843055807 0.20135547847557747 0.4449414919717809 0.20135528570783065 0.3559636471980917 0.20135511632833958 0.26698590590184651 0.20135497239924355 0.17799168790298395 0.20135485558149899 0.088976493824639319 0.20135476714525929 0 0.20135470780228976 + 0 9 0.18246871996539238 7 0.54680090646594581 7 1 9 +7 0 0 8 23 4 -2.0013218865007825 71.830220320785543 -1.9010861790062212 71.486365734321126 -1.8149276459167618 71.138403314942622 -1.7430436222251358 70.787011252569613 -1.6855916749088882 70.432873691997671 -1.6426895798872572 70.076680565810946 -1.6144152989780449 69.719127427294595 -1.6008069568544898 69.360915283347481 -1.6039710379788954 68.287608757514604 -1.6645413129051827 67.572508836718811 -1.7835916789315531 66.863223925261252 -1.9604209203212628 66.165329840413293 -2.1937267132363978 65.48423202588971 -2.4816461715558029 64.825169687904108 -2.821718794724819 64.193196997853562 -3.6947215861542855 62.84672180145779 -4.2547858306471378 62.14918518437716 -4.8849144240977322 61.510118118075667 -5.577826131921797 60.937572381950432 -6.3253917155877364 60.438494259596425 -7.1186212171863392 60.018671913286759 -7.9477112855399623 59.682763286566683 -8.8017452706894623 59.433807656887403 + 0 9 0.18246871996539238 7 0.54680090646594581 7 1 9 +7 0 0 7 20 4 1.5707963267948966 0.20136113310617046 1.5298202997896342 0.20136116043514235 1.488843722847184 0.20136118147117735 1.4478675481877998 0.2013611961388759 1.4068916304621926 0.20136120438925681 1.3659154578395198 0.20136120619976564 1.3249388830953797 0.20136120157428247 1.1929071063274459 0.20136116603002069 1.1018224121970508 0.20136110987698022 1.0107592625715336 0.20136102239634784 0.91970963415986429 0.20136090462469514 0.8286460577991378 0.20136075813376525 0.73756086979067281 0.20136058502604492 0.55415871886167356 0.20136018841052258 0.46177850546779536 0.20135996408240722 0.36942472544693022 0.20135971801148261 0.27708000090915252 0.20135945351969678 0.18472704438783649 0.20135917423358055 0.092347948341406333 0.20135888408770541 0 0.20135858740592824 + 0 8 0.18261951868404011 6 0.5884313455561363 6 1 8 +7 0 0 7 20 4 -14.397725501196444 78.63064092841789 -14.004420764019786 78.745291318182737 -13.605629768762924 78.841140798160566 -13.202440355956222 78.917872837775235 -12.795952306692785 78.975250710822252 -12.387276894478806 79.013117556702156 -11.977536437083879 79.031396441653868 -10.657501238552388 79.02718821631386 -9.7471505422864357 78.927574609829122 -8.8496840248584441 78.731185882601721 -7.9772851980308923 78.440226499763227 -7.1416012340677355 78.058579156259853 -6.3537035628288328 77.591794358983392 -4.8836561669820142 76.495805658581475 -4.2026453267302486 75.864004282225707 -3.5916844192618029 75.160201804153175 -3.059601131830199 74.393853656385204 -2.6136877600408415 73.575467699312767 -2.2597110792291684 72.716614114307745 -2.0013218865007971 71.830220320785543 + 0 8 0.18261951868404011 6 0.5884313455561363 6 1 8 +7 0 0 1 2 2 -1.6696439786301198e-09 12.000000022977199 5.0000000020077913 12.000000022977368 + 0 2 1 2 +7 0 0 1 2 2 58.596373638214047 2.9068602648940853 60.832441616095892 7.3789962206590038 + 0 2 1 2 +8 -5.9999999945314171 6.0000000026412819 +7 0 0 1 2 2 4.9999999993390816 1.9999999989961168 4.9999999956116596 13.999999996169683 + -5.999999994532228 2 6.0000000026412819 2 +8 -5.9999999945314171 6.0000000026412819 +7 0 0 2 3 2 3.1415950578332099 -5.9999999953130825 3.1415950580132606 3.2734915023744634e-09 3.1415950581933183 6.0000000018600721 + -5.9999999945314171 3 6.0000000026412819 3 +7 0 0 2 3 2 1.9626791302407833 4.000000028201864 2.5521585697782974 4.0000000555834667 3.1415950585527876 3.9999999977182088 + 5.8548683814696911 3 7.0338119599827928 3 +7 0 0 2 5 3 0 3.9999999977158356 0.78540005163816407 4.0000000537390141 1.5708264150812128 4.0000000279259948 1.7667532919964857 4.0000000281884214 1.9626791302407816 4.0000000282018657 + 3.8922169017261097 3 5.4630144308545114 2 5.8548683814696911 3 +8 -3.0000000053754761 2.9999999970241227 +7 0 0 2 3 2 1.8374248706926875e-10 -3.0000000044752277 1.8376588308539907e-10 -3.2758183175855577e-09 1.8378911498932503e-10 2.9999999979235912 + -3.0000000053754761 3 2.9999999970241227 3 +8 -3.0000000053754761 2.9999999970241227 +7 0 0 1 2 2 -1.8532233525547781e-09 13.999999995847997 -1.8518306887926883e-09 19.999999998246814 + -3.0000000053754761 2 2.9999999970241227 2 +8 5.9266632422328387 7.3248579574708819 +7 1 0 2 3 2 -27.243502989855273 68.444205921058824 1 -25.641316863092257 58.909294414590306 0.76542337380995917 -15.972913016874983 58.850092324911842 1 + 5.9266632422328289 3 7.3248579574708819 3 +8 5.9266632422328387 7.3248579574708819 +7 0 0 2 3 2 9.5560657842813824e-11 2.9999999982315964 0.6990973579657499 2.9999999982318433 1.3981947154950467 2.999999998231623 + 5.9266632422328387 3 7.3248579574708819 3 +8 -2.9999999990548765 3.0000000030069578 +7 0 0 1 2 2 9.3166636002072352 14.000000004226868 9.3166636002058993 20.000000006287809 + -2.9999999990548765 2 3.0000000030069747 2 +8 -2.9999999990548765 3.0000000030069578 +7 0 0 2 3 2 1.3981947160274271 -3.0000000027140996 1.3981947160273829 -1.6840912120723713e-09 1.3981947160273482 2.9999999993459139 + -2.9999999990548765 3 3.0000000030069578 3 +8 -11.993769407593151 11.993769408905738 +7 0 0 1 2 2 -27.243502999109296 68.444205919503759 -31.218490188506365 92.10010360522152 + -11.993769407593151 2 11.993769408905738 2 +8 -11.993769407593151 11.993769408905738 +7 0 0 1 2 2 -9.1780805178132141e-10 19.999999998403979 23.987538815580592 19.999999998387256 + -11.993769407593151 2 11.993769408905738 2 +8 -2.9999999979425218 3.0000000046508966 +7 0 0 1 2 2 23.987538814975807 13.999999995174949 23.987538814977484 19.999999997768398 + -2.9999999979425218 2 3.0000000046509361 2 +8 -2.9999999979425218 3.0000000046508966 +7 0 0 1 2 2 31.049844725430212 14.000000001820988 31.049844725429615 20.000000004414439 + -2.9999999979425218 2 3.0000000046509361 2 +8 -15.524922359896969 15.524922367241414 +7 0 0 1 2 2 -0.5979269192960146 97.245389077665536 -31.218490189313968 92.100103603926101 + -15.524922359896969 2 15.524922367241414 2 +8 -15.524922359896969 15.524922367241414 +7 0 0 1 2 2 2.381256081207539e-09 19.999999998847365 31.049844729520352 19.999999998846654 + -15.524922359896969 2 15.524922367241414 2 +8 -3.00000000474822 2.9999999979416097 +7 0 0 1 2 2 5.6049174190775375e-09 13.999999997249729 5.604356090316287e-09 19.999999999940037 + -3.00000000474822 2 2.9999999979420093 2 +8 -3.00000000474822 2.9999999979416097 +7 0 0 1 2 2 28.0124611752492 13.999999993675406 28.012461175250451 19.999999996365716 + -3.00000000474822 2 2.9999999979420093 2 +8 -14.006230586172553 14.006230588468821 +7 0 0 1 2 2 4.0440321850973717 69.620215834323858 -0.59792692394105984 97.245389077054185 + -14.006230586172553 2 14.00623058846959 2 +8 -14.006230586172553 14.006230588468821 +7 0 0 1 2 2 -1.6711965145077556e-11 20.000000001443382 28.012461174625713 20.000000001424446 + -14.006230586172553 2 14.00623058846959 2 +8 -2.9999999963474102 3.0000000106820224 +7 0 0 1 2 2 -2.9996130024301237e-09 13.99999999811954 -2.9983908689246164e-09 20.000000005150415 + -2.9999999963474102 2 3.0000000106832441 2 +8 -2.9999999963474102 3.0000000106820224 +7 0 0 2 3 2 1.3981947154675824 -3.000000002678008 1.3981947154675838 8.3648218253978495e-10 1.398194715467584 3.0000000043509698 + -2.9999999963474102 3 3.0000000106820224 3 +8 1.3868758736500966 2.7850705890210428 +7 1 0 2 3 2 -3.4718477961023524 56.869342831716082 1 5.646218312086404 60.085304324865774 0.76542337376719527 4.0440321812259086 69.620215833673313 1 + 1.3868758736500966 3 2.7850705890210543 3 +8 1.3868758736500966 2.7850705890210428 +7 0 0 2 3 2 -1.4391897941321933e-10 2.9999999991727235 0.69909735737591605 2.9999999991719482 1.3981947157492363 2.9999999991704658 + 1.3868758736500966 3 2.7850705890210428 3 +7 0 0 8 37 6 1.8901349713662494 -4.9399999999943294 1.7681526530728557 -4.9399999999943116 1.6459967664004536 -4.9399999999942992 1.5239412146305185 -4.9399999999942628 1.4019453874871881 -4.9399999999942539 1.2799510411256247 -4.9399999999942255 1.1578994686603958 -4.9399999999941935 1.0357476933967762 -4.9399999999941739 0.91195226873191426 -4.93999999999415 0.91014403131976251 -4.9399999999941491 0.90833579381089913 -4.9399999999941455 0.90652755609804414 -4.9399999999941437 0.90471931814779538 -4.9399999999941446 0.9029110800006287 -4.9399999999941455 0.90110284177089695 -4.9399999999941455 0.82430917010185623 -4.9399999999941304 0.74930921684659246 -4.9399999999941198 0.67431586160003065 -4.939999999994102 0.59933063983545853 -4.939999999994086 0.52434531420899833 -4.9399999999940754 0.44935170720197398 -4.9399999999940665 0.37435155697711242 -4.9399999999940496 0.27808109201783371 -4.9399999999940372 0.25679577789567881 -4.9399999999940363 0.2355104570513612 -4.9399999999940318 0.21422513250983152 -4.9399999999940301 0.19293980735174168 -4.9399999999940265 0.17165448471344408 -4.939999999994023 0.15036916778699227 -4.9399999999940212 0.11294837843146885 -4.9399999999940158 0.096812895628256165 -4.939999999994015 0.080677411638367905 -4.939999999994015 0.064541926948753839 -4.9399999999940141 0.048406442305448522 -4.9399999999940105 0.032270958713571087 -4.9399999999940087 0.016135477437325407 -4.9399999999940079 0 -4.939999999994007 + 0 9 0.51645338385953332 7 0.5241088630587255 7 0.84157226520106265 7 0.93168749750275959 7 1 9 +7 0 0 8 37 6 -15.999990051098351 86.06096520183273 -16.206010768957746 86.200709015117454 -16.392843796229972 86.36937336227561 -16.555253267788629 86.563613619621449 -16.689366876996765 86.779160532823255 -16.792091305823742 87.011308608408612 -16.861281776858654 87.254853683279194 -16.895592818848751 87.504198758217811 -16.895190793908121 87.756842162157895 -16.895177295503736 87.760532425783538 -16.895156170960757 87.764222659084481 -16.895127420358403 87.767912843893157 -16.895091043830405 87.771602961891773 -16.895047041565 87.775292994612101 -16.894995413804924 87.778982923435692 -16.892479012837939 87.935684498772076 -16.876908529671176 88.088515954784071 -16.848238050203442 88.239809925383497 -16.806657226323193 88.388257844925619 -16.75250347693154 88.532594894455272 -16.686251675545758 88.671601068065414 -16.608522071525663 88.804108165525506 -16.495008765390001 88.964468143431887 -16.469048556148021 88.999313097745514 -16.442243200695511 89.033523022645738 -16.414610863468635 89.06707402563319 -16.386170489841266 89.099942873184048 -16.356941806124993 89.132106990750017 -16.326945319569116 89.163544462758324 -16.272897364323612 89.217498482624194 -16.249163390918255 89.24033318590962 -16.225009660148679 89.262728897486056 -16.200445656858378 89.284676625690125 -16.175481088730223 89.306167632176638 -16.150125886286464 89.3271934319189 -16.124390202888726 89.347745793208531 -16.098284414738004 89.367816737655531 + 0 9 0.51645338385953332 7 0.5241088630587255 7 0.84157226520106265 7 0.93168749750275959 7 1 9 +7 0 0 6 12 3 3.1415926535897936 -4.9399999999943658 3.0326537744141007 -4.9399999999943756 2.9236720960722922 -4.9399999999943853 2.8147397744042424 -4.9399999999943853 2.7058078340853848 -4.9399999999943933 2.5968270492564764 -4.939999999994388 2.388269429428107 -4.9399999999943809 2.2886247006428246 -4.9399999999943809 2.1890114233952369 -4.9399999999943587 2.0893979506699409 -4.9399999999943631 1.9897527181516415 -4.9399999999943436 1.8901349713662494 -4.9399999999943294 + 0 7 0.52234735607447424 5 1 7 +7 0 0 6 12 3 -13.61048143214984 86.131992046118498 -13.786734989702385 85.996482811851948 -13.980774471669736 85.883960351599455 -14.188698137639879 85.797475181870027 -14.406146869933776 85.738929114812166 -14.628507867003457 85.709477870462152 -15.054135018684338 85.708737524471502 -15.257534726924481 85.732687045502885 -15.457274179358777 85.780969448589772 -15.64980350630535 85.852800232780879 -15.831741734527593 85.94684240107452 -15.999990051098351 86.06096520183273 + 0 7 0.52234735607447424 5 1 7 +7 0 0 8 30 5 3.1415926535897931 -4.9399999999940052 3.0597992380582091 -4.9399999999939972 2.9779827706282003 -4.9399999999939945 2.8961763416677644 -4.9399999999939892 2.8143826360021773 -4.9399999999939848 2.7325891087240457 -4.9399999999939848 2.6507831144172234 -4.9399999999939865 2.5689669897945966 -4.9399999999939874 2.3894034554017765 -4.9399999999939936 2.2915795022311611 -4.9399999999939999 2.1937853332432748 -4.9399999999940096 2.096014439345018 -4.9399999999940185 1.9982430774943964 -4.9399999999940292 1.900447626045868 -4.9399999999940469 1.802622400516581 -4.9399999999940594 1.6058962523869347 -4.9399999999940913 1.5068772845598577 -4.9399999999941144 1.40789003291661 -4.9399999999941215 1.3089282074803816 -4.9399999999941482 1.20996689232251 -4.9399999999941739 1.1109810378035627 -4.9399999999941802 1.0119634535479438 -4.9399999999942086 0.79892093907229722 -4.9399999999942503 0.68472097164018808 -4.9399999999942628 0.57059040668162664 -4.9399999999943018 0.45650347117862033 -4.9399999999943045 0.34241535932293399 -4.9399999999943294 0.22828172204128117 -4.9399999999943445 0.11407856974803987 -4.9399999999943551 0 -4.9399999999943658 + 0 9 0.20833595836150004 7 0.45736345869293205 7 0.70942248128458163 7 1 9 +7 0 0 8 30 5 -16.098284414738004 89.367816737655531 -15.965949837946875 89.469559689213327 -15.824066133179135 89.558961472078877 -15.674031454931718 89.634928905942431 -15.5173423600466 89.696616149769724 -15.355571859588713 89.743381278641721 -15.190357713173983 89.774773148618792 -15.023400965747342 89.79054854962969 -14.656944965606852 89.790924161235537 -14.457281594105941 89.768833477967917 -14.26056213737527 89.724404303008143 -14.069693841403835 89.658143281256642 -13.8874250350468 89.570966664590514 -13.716354644521715 89.464155833373312 -13.558907497977051 89.339396614862125 -13.273854073238274 89.05667362474162 -13.146461485769304 88.898152578924766 -13.037370711897008 88.725549857815167 -12.948344915777135 88.541370984332758 -12.880723614439313 88.348305425139273 -12.835464914787693 88.149200199191498 -12.813097967597816 87.947070521942521 -12.814118953804481 87.512291078937338 -12.845021554167365 87.279301387393261 -12.906376839154232 87.051145449820694 -12.997164992971278 86.832410738911065 -13.115717730438117 86.627388922351301 -13.259641896129301 86.440015713625741 -13.425912305766865 86.273894549152786 -13.61048143214984 86.131992046118498 + 0 9 0.20833595836150004 7 0.45736345869293205 7 0.70942248128458163 7 1 9 +8 2.7850705895153367 5.9266632418324123 +7 1 0 2 5 3 -5.6826887595616995 70.026473915581633 1 -6.6769517986581235 75.943520557654864 0.70710678141153438 -12.5939984413628 74.949257522324004 1 -18.511045084069295 73.954994486993002 0.70710678141153438 -17.516782052503984 68.03794784365472 1 + 2.7850705895153367 3 4.3558669156738743 2 5.9266632418324123 3 +8 2.7850705895153367 5.9266632418324123 +7 0 0 2 5 3 1.1613304730105739e-09 3.0000000043596833 0.78539816451604372 3.0000000043605355 1.5707963278501509 3.0000000043600763 2.356194490499973 3.0000000043600052 3.1415926529571623 3.0000000043607997 + 2.7850705895153367 3 4.3558669156738743 2 5.9266632418324123 3 +8 -3.0000000028141396 2.9999999983775507 +7 0 0 1 2 2 -5.3729110049971496e-09 14.000000003066786 -5.3739199756819289e-09 20.000000004257796 + -3.0000000028141396 2 2.9999999983775507 2 +8 -3.0000000028141396 2.9999999983775507 +7 0 0 2 3 2 3.1415926527047056 -2.9999999964057547 3.1415926527047837 4.1897672341332821e-09 3.141592652704869 3.0000000047852873 + -3.0000000028141396 3 2.9999999983775507 3 +8 -4.6583318043520627 4.6583317964717299 +7 0 0 1 2 2 -17.51678204686624 68.037947844601661 -15.972913015708087 58.850092324103642 + -4.6583318043520627 2 4.6583317964720026 2 +8 -4.6583318043520627 4.6583317964717299 +7 0 0 1 2 2 -4.0106442611431703e-09 19.999999999420812 9.316663596813143 19.999999999421092 + -4.6583318043520627 2 4.6583317964720026 2 +8 -4.7123889803800001 4.7123889803800001 +7 0 0 3 6 3 -8.4055808012881081e-10 4.8037186683080547e-09 0.57935305920168911 2.5781316894906296e-09 0.9914432687447654 3.4912348537033447e-09 2.1501493848034059 2.0282994043201223e-09 2.5622395953068171 4.8791943544884062e-09 3.1415926549898918 2.60827130583483e-09 + -4.7123889803800001 4 0 2 4.7123889803800001 4 +8 -4.7123889803800001 4.7123889803800001 +7 0 0 5 9 3 -17.345373454363511 88.995884559794064 -16.893525525456766 89.822986640934289 -16.11687537723796 90.472648455318605 -15.105993572668069 90.769249254318723 -13.096908886461634 90.51515786051246 -11.797585262594069 88.961857552758858 -11.50098446007506 87.950975750051981 -11.628030157253832 86.946433408825158 -12.079878086161472 86.119331327684407 + -4.7123889803800001 6 4.4408920985e-16 3 4.7123889803800001 6 +8 1.023000500999137 4.1645931518692887 +7 0 0 2 5 3 1.5555876374245645e-09 8.6948751543460582e-10 0.78539816437114729 8.7010064361220517e-10 1.5707963275834051 8.6965158733624551e-10 2.3561944906407013 8.703305068881931e-10 3.1415926526156812 8.7022346886898682e-10 + 1.023000500999137 3 2.5937968264342128 2 4.1645931518692887 3 +8 1.023000500999137 4.1645931518692887 +7 1 0 2 5 3 -12.079878084434441 86.119331326740451 1 -13.518154702697132 83.486583647057415 0.70710678166731677 -16.150902384336746 84.924860261741259 1 -18.783650065975422 86.363136876424718 0.70710678166731677 -17.345373454872089 88.995884560019746 1 + 1.023000500999137 3 2.5937968264342128 2 4.1645931518692887 3 +7 0 0 6 62 13 0.48496091252681811 4.0000000286683814 0.53356356773164171 4.0000000286684019 0.58170676506821428 4.0000000286684241 0.62950539487868185 4.0000000286684463 0.6770708071864443 4.0000000286684703 0.72451081169615561 4.0000000286684942 0.82415781168615898 4.0000000286685449 0.87636303689029604 4.0000000286685733 0.92868419734819629 4.0000000286686008 0.98126481557350564 4.0000000286686275 1.0342530931143397 4.000000028668655 1.0934938566050187 4.0000000286686861 1.0991918618895233 4.000000028668687 1.1048964094176921 4.0000000286686905 1.1106076887206324 4.0000000286686941 1.1163258907523623 4.0000000286686976 1.1273145875998012 4.0000000286687039 1.1325839806337445 4.0000000286687056 1.1378595364697512 4.0000000286687074 1.1431414057243254 4.0000000286687092 1.1484297401523629 4.0000000286687127 1.1630619926121446 4.0000000286687181 1.1724198731672528 4.0000000286687252 1.1817991722506036 4.0000000286687305 1.1912007404683587 4.0000000286687341 1.2006254410947168 4.0000000286687367 1.2257461300631511 4.0000000286687483 1.2414841643244376 4.0000000286687571 1.2572922432284754 4.000000028668766 1.2731744761059742 4.0000000286687722 1.2891350912456543 4.0000000286687785 1.3298560264530745 4.0000000286687971 1.3547294150364568 4.0000000286688087 1.3798143563036609 4.0000000286688211 1.4051275143172957 4.0000000286688318 1.4306864625433116 4.0000000286688406 1.4751300271635459 4.0000000286688575 1.4938878153282598 4.0000000286688673 1.5127899930560664 4.0000000286688744 1.531843837825611 4.0000000286688806 1.551056959883258 4.0000000286688877 1.6383874526433972 4.0000000286688433 1.7042841320700175 4.0000000286687882 1.7684625164108905 4.0000000286687349 1.8312154575374553 4.0000000286686879 1.8927977456001628 4.0000000286686372 2.0119223537977842 4.0000000286685484 2.0695351719088584 4.0000000286685005 2.1264757332879278 4.0000000286684756 2.1829349350944098 4.0000000286684214 2.2390935555578664 4.0000000286684028 2.3571310444243356 4.0000000286683397 2.4189870355778278 4.0000000286683015 2.4809209242541415 4.0000000286682935 2.5431711442219416 4.0000000286682607 2.6059841140780784 4.0000000286682589 2.7439379224257201 4.000000028668242 2.8193899417878678 4.0000000286682349 2.8963735616199568 4.0000000286682518 2.9753567169199537 4.0000000286682544 3.0568823480166887 4.0000000286682837 3.1415950585527876 4.0000000286683077 + 0 7 0.11235271013143204 5 0.23610031671290221 5 0.24925325665739259 5 0.26134497412333085 5 0.28266792147923886 5 0.31803495550000072 5 0.37243591656333969 5 0.41166279810071787 5 0.54916105106110169 5 0.68178373554459581 5 0.82856001765789955 5 1 7 +7 0 0 6 62 13 82.618033988073975 2.3218727798221237 82.61374179923429 2.8969702907780346 82.574935142673993 3.4718417220442483 82.501631604705224 4.0438674127089227 82.394106428915606 4.6104683936292972 82.252892516168288 5.1691063874316994 81.887010065332476 6.3210578953549614 81.655321724486498 6.9121741537018018 81.384772757208538 7.4872877215623213 81.07678324695874 8.0432381845674819 80.733089416298199 8.5770268848632263 80.315687257063615 9.1399228069670269 80.275204891767416 9.1937219776375141 80.234345229351788 9.2472358492335385 80.193110794025756 9.3004611121265182 80.151504148848133 9.3533944866168373 80.070938424845423 9.4544239331232571 80.032036582073189 9.5025657096041645 79.992824388907408 9.5504555275525309 79.953303893855306 9.5980908844606088 79.913477172434824 9.645469300136952 79.802578224698991 9.7756795990399894 79.730864385988113 9.8579642306640611 79.658216343712411 9.9394287299379798 79.584645881759101 10.020059842753751 79.51016503523195 10.099844542536038 79.30975976757 10.30967878153538 79.182262675464827 10.43822380539253 79.052350914236669 10.564346663875527 78.920082350768794 10.687990781465908 78.785516618726774 10.809101445064849 78.438289415241186 11.109937928867376 78.222573559001447 11.286131095875197 78.001791330954774 11.456012727668893 77.77617509464352 11.619401802514275 77.545965796037066 11.776128854290699 77.142284038531784 12.034129447799657 76.970896548203697 12.138677086681477 76.797343952001583 12.239619765650774 76.621721626707028 12.336901758716373 76.444126866428917 12.430470737381691 75.635586851020747 12.835069822605879 74.983288336596232 13.103746553821129 74.312066805971455 13.324113574211355 73.626403954149325 13.494584212755898 72.930929995111072 13.614083422688255 71.554806334257819 13.747786560836403 70.874448597145346 13.765579442894207 70.193680642799421 13.735084768488248 69.516766112396908 13.656407652966633 68.847932124732893 13.530114814578766 67.464720833104067 13.166069290404765 66.753025691559785 12.917840134464949 66.061968261317958 12.614108602650292 65.39688326193 12.257099783857901 64.762807651159775 11.849650146326265 63.465468884434415 10.864681945057688 62.815077049931595 10.269993128662145 62.220763648430918 9.6169639175276185 61.688841526480346 8.9123010381397325 61.224685541959651 8.1634841586457441 60.832441612831353 7.3789962159364695 + 0 7 0.11235271013143204 5 0.23610031671290221 5 0.24925325665739259 5 0.26134497412333085 5 0.28266792147923886 5 0.31803495550000072 5 0.37243591656333969 5 0.41166279810071787 5 0.54916105106110169 5 0.68178373554459581 5 0.82856001765789955 5 1 7 +1 1.5707963267948966 -6.2831853071795862 0 1 +1 0 -6.2831853071795862 0 1 +1 1.5707963267948966 -3.1415926535897931 0 1 +1 0 -3.1415926535897931 0 1 +7 0 0 3 47 45 -1.4016481131307046e-07 0.43687766653166465 0.012342840101998853 0.42637149715075284 0.036589865862006903 0.40505100161326918 0.071720846078387662 0.37221990124650844 0.10568867037516175 0.33861425472599166 0.13857269313248613 0.30430393121732913 0.17045443380662739 0.26935272366880009 0.2014149719398689 0.23382022920512952 0.23153457218229892 0.19776191960052134 0.26089226522012665 0.1612294579817925 0.289565710604618 0.12427094022792562 0.31763120363318664 0.086931139611793537 0.34516382639814874 0.049251728584329975 0.3722377002069483 0.011271497082431445 0.39892637154142074 -0.026973468505205149 0.42530312701086559 -0.065449472174393619 0.45144071608342462 -0.10412390346737285 0.4774119152515518 -0.14296490725516842 0.50329011700489179 -0.18194116086836792 0.52914998009874992 -0.22102163302443364 0.55506813949822664 -0.26017534181867824 0.58112399224067091 -0.29937110541937351 0.60740053903480418 -0.33857723210102775 0.63398540231289824 -0.37776130540393621 0.6609716260561348 -0.4168894287712393 0.68846000379615113 -0.45592757564866576 0.71655845825229414 -0.49483824718694058 0.74538195010507891 -0.5335780101412253 0.77505421349024972 -0.57209770847744967 0.80570907976754735 -0.61034190431126534 0.83749187510365919 -0.64824835655891677 0.87056064181896653 -0.68574728975768484 0.90508718999208104 -0.72276060021764243 0.94125740225065013 -0.7592006882727188 0.97927187898313806 -0.79497013261063287 1.0193406047540332 -0.82995726871498898 1.0616757079429642 -0.86403271653003122 1.1064886695526928 -0.89705325671122338 1.1539817619620405 -0.92886352537101324 1.2043367508694083 -0.95929879828623743 1.257700092565484 -0.9881886384998676 1.3141612532182645 -1.0153600357254569 1.3737381019930273 -1.0406477917449106 1.4363867945409194 -1.0639139170142655 1.5019993767119351 -1.0850448456235284 1.547577873230167 -1.097661520331048 1.570796326128816 -1.1035883779920619 + 19.018065227600001 4 19.648451455484093 1 20.278837683368181 1 20.909223911252273 1 21.539610139136364 1 22.169996367020456 1 22.800382594904548 1 23.430768822788636 1 24.061155050672728 1 24.691541278556819 1 25.321927506440908 1 25.952313734324999 1 26.582699962209091 1 27.213086190093183 1 27.843472417977274 1 28.473858645861363 1 29.104244873745454 1 29.734631101629546 1 30.365017329513634 1 30.995403557397726 1 31.625789785281818 1 32.256176013165913 1 32.886562241050001 1 33.516948468934089 1 34.147334696818177 1 34.777720924702272 1 35.408107152586368 1 36.038493380470456 1 36.668879608354544 1 37.299265836238632 1 37.92965206412272 1 38.560038292006816 1 39.190424519890911 1 39.820810747774999 1 40.451196975659087 1 41.081583203543175 1 41.711969431427271 1 42.342355659311366 1 42.972741887195454 1 43.603128115079542 1 44.23351434296363 1 44.863900570847726 1 45.494286798731821 1 46.124673026615909 1 46.755059254499997 4 +7 0 0 5 21 7 136.25521787820981 32.828935970554994 136.00714020517808 32.782329774228401 135.76009244356646 32.727646057605398 135.51448839928071 32.664898767010072 134.39309405129825 32.339364769416079 133.31952020609242 31.846222322884842 132.52697072382398 31.361603254626516 131.06994241994107 30.214372942661612 129.91862772588229 28.760896633109951 129.4318293633105 27.969984159972228 128.65032785218864 26.282624693978505 128.28330929994081 24.470920637799281 128.2079076438531 23.546114667666188 128.26590516453143 21.991169849080052 128.60869221112989 20.524300907608904 128.79383392742966 19.944980706022307 129.16321969308956 19.036210649568602 129.60780164135031 18.231327727707594 129.79358628918817 17.92949149146807 129.9855332730931 17.646017094420586 130.18188052586356 17.380059856463959 + 19.018065227600001 6 20.746417417 3 26.969588666500002 3 33.193103196999999 3 39.485156584899997 3 43.865331295600001 3 46.755059254499997 6 +7 0 0 11 22 3 -9.1731067186628934e-12 -0.20135796299583372 0.071594946761755374 -0.20135794270649485 0.14342692368798104 -0.20135791709662121 0.21541548291715351 -0.20135801359284242 0.28752408128493823 -0.20135812098945527 0.35970226148867468 -0.20135807734581504 0.43190137971225351 -0.20135789214725719 0.50409735862925675 -0.20135776601435226 0.5762872185817951 -0.20135787579733735 0.64845941360289761 -0.20135809744461114 0.72057127282070788 -0.20135804358621948 0.86462897048548015 -0.20135795106439022 0.936572042021659 -0.20135778947496874 1.0084208683008242 -0.20135846838456928 1.0800464271930892 -0.20135609054705128 1.1516391511438329 -0.20136141323018819 1.222893840390249 -0.20135494080022909 1.2939765334492463 -0.20135972107527778 1.3643773200353522 -0.20135741910053184 1.4342766589149747 -0.20135763545295049 1.5032107805877697 -0.201358133328675 1.5707963267883898 -0.20135821386756578 + 20.328620711982662 12 30.8436089151582 10 41.358597118333741 12 +7 0 0 3 47 45 8.5120033676707309e-07 -0.98301875758519164 0.019282798012365321 -0.97297630198059093 0.056635827373156478 -0.95227278877478805 0.10924281829735449 -0.91956362745305475 0.15862402382613025 -0.88540484849685208 0.20502266351039877 -0.84999246787849225 0.24870257212098534 -0.81350134424265919 0.28993449131249593 -0.77608538848212749 0.32897721529345264 -0.73788373818153374 0.36607509756119055 -0.69902030968444739 0.40145527249666069 -0.65960508575916166 0.43532751602528957 -0.6197348364408104 0.46788502629606193 -0.57949377339019903 0.49930591607631664 -0.5389539746073404 0.52975510854687935 -0.49817556896379461 0.55938617281275504 -0.45720693876718843 0.58833590798365909 -0.41609659236683594 0.61672973393492669 -0.37488940977124663 0.64468345067515098 -0.33362735506974528 0.67230487851808984 -0.29235009288167385 0.69969532169085036 -0.25109551203518038 0.72695089295558935 -0.2099001767646273 0.75416371368913615 -0.1687997153282175 0.78142300227678319 -0.12782918115119921 0.80881608606038391 -0.087023331448300781 0.83642929621078299 -0.046417121093195825 0.86434786081798065 -0.0060473193748692032 0.89265660616256282 0.034047141271551409 0.92144066478842912 0.073824894249473319 0.95078606873261284 0.11324185609777954 0.98078024698241573 0.15225093278903601 1.0115124201396026 0.19080171917483865 1.0430738188700339 0.22884011447681085 1.0755578987203509 0.26630811609097799 1.1090597132421343 0.30314275036803179 1.1436745306003024 0.33927472747628767 1.1794981907381434 0.37462950237998954 1.2166260517480005 0.40912688121731339 1.2551517330874451 0.44268099782789416 1.2951654055394195 0.47520037892457356 1.3367512879494174 0.50658794889600534 1.3799855013842375 0.53674202088134126 1.4249296037580834 0.56555447059960229 1.4716370665304139 0.59292056067270582 1.5202030624476512 0.61875848787459053 1.5537439436707277 0.63485236196632833 1.5707963269198102 0.64259243746773609 + 12.701137518299999 4 13.337986130352272 1 13.974834742404544 1 14.611683354456817 1 15.248531966509089 1 15.885380578561362 1 16.522229190613636 1 17.159077802665909 1 17.795926414718181 1 18.432775026770454 1 19.069623638822726 1 19.706472250874999 1 20.343320862927271 1 20.980169474979544 1 21.617018087031816 1 22.253866699084089 1 22.890715311136361 1 23.527563923188634 1 24.164412535240906 1 24.801261147293179 1 25.438109759345451 1 26.074958371397724 1 26.711806983449996 1 27.348655595502269 1 27.985504207554541 1 28.622352819606817 1 29.259201431659086 1 29.896050043711362 1 30.532898655763631 1 31.169747267815907 1 31.806595879868176 1 32.443444491920452 1 33.080293103972721 1 33.717141716024997 1 34.353990328077266 1 34.990838940129542 1 35.627687552181811 1 36.264536164234087 1 36.901384776286356 1 37.538233388338632 1 38.175082000390901 1 38.811930612443177 1 39.448779224495446 1 40.085627836547722 1 40.722476448599998 4 +7 0 0 5 21 7 136.25522253000781 13.570030358209806 136.54780311800823 13.515060172412177 136.84741466329069 13.470262965779966 137.15295294859607 13.436623533402326 138.33687917348107 13.353908719996525 139.56911982305337 13.452681606304395 140.47796892367478 13.635919773908427 142.23127175968602 14.212427813226896 143.81649969366481 15.187524515712994 144.54438959199069 15.763557564667735 145.85148424877843 17.076412505298322 146.82005573405331 18.65836430815807 147.20845945225938 19.502372457141973 147.78099193264006 21.270655885583892 147.92739643076948 23.115160269663193 147.89082794065962 24.041479273914774 147.70345058977 25.224583828413415 147.34986613733236 26.344815906242729 147.25814262603853 26.603445749767161 147.15821714035337 26.856846284719268 147.05013027692803 27.105497200492664 + 12.701137518299999 6 14.8555252341 3 20.925139790700001 3 26.905251248399999 3 32.874904180000001 3 38.8892343188 3 40.722476448599998 6 +7 0 0 9 10 2 1.1014338432079616 -0.20135861109332481 1.1505156797194427 -0.20135862594497986 1.2008041728017815 -0.20135825501699856 1.2520873659814242 -0.20135632684741722 1.3041718406166183 -0.20135964733526635 1.3567025141601334 -0.20135652433327778 1.4098287178640021 -0.20135897785212364 1.463229263368703 -0.20135854120849217 1.516914197690912 -0.20135850990361673 1.5707963268484892 -0.20135831908329585 + 12.701137518299999 10 18.965462881499537 10 +7 0 0 3 47 45 0 -1.103588377992061 0.011307750658860062 -1.1064770322116857 0.03413569687746431 -1.1120786492649717 0.068984495907348758 -1.1199518167409817 0.10441320431467972 -1.1272935845589376 0.14038265540842615 -1.1341016627930824 0.17684825068564369 -1.1403746298427062 0.2137614833249413 -1.1461123865618186 0.25107360064591056 -1.1513164874362225 0.28873919645115875 -1.1559901767054817 0.32672057146967604 -1.1601382280874881 0.3649908270920571 -1.1637662523606256 0.40351459155949199 -1.1668785165599114 0.4422555972674222 -1.1694788582790403 0.48117658810438735 -1.1715705628911164 0.52023958608046483 -1.1731563427792902 0.55940605197429083 -1.1742382962057922 0.59863706449519816 -1.1748178799542823 0.6378934852027065 -1.1748958877281426 0.6771361207992237 -1.1744724372061532 0.7163258785073402 -1.1735469658070017 0.75542393243470773 -1.1721182341829675 0.79439184756543768 -1.170184341896364 0.83319187071105127 -1.1677427374241383 0.87178661651975009 -1.1647902868909743 0.91014103583466222 -1.1613231578085976 0.9482149812187548 -1.1573375024084518 0.9859623221567273 -1.1528302328385054 1.0233416410182892 -1.1477982528648445 1.0603135652246547 -1.1422386720967557 1.0968409799250933 -1.1361488842904648 1.1328885000306941 -1.1295267575577856 1.1684222009286824 -1.1223708655325779 1.2034093627940672 -1.1146807714807423 1.2378183006302645 -1.1064573562217237 1.2716182867989425 -1.0977031754434741 1.3047794778151387 -1.088422868742084 1.3372731672376519 -1.0786234968081323 1.3690711117991734 -1.0683152271991385 1.4001490210907239 -1.0575105859408214 1.4304906699588389 -1.0462226896229772 1.460084477530869 -1.0344661549165834 1.4889239689535632 -1.0222567154564466 1.517007419477068 -1.0096111285235454 1.5443370932325202 -0.9965469194323554 1.5620593924053205 -0.98757060501142269 1.5707971779952334 -0.98301875758519164 + 0 4 0.288662216325 1 0.57732443265 1 0.865986648975 1 1.1546488653 1 1.4433110816250001 1 1.73197329795 1 2.0206355142749999 1 2.3092977306 1 2.5979599469250001 1 2.8866221632500002 1 3.1752843795749999 1 3.4639465959 1 3.7526088122250001 1 4.0412710285499998 1 4.3299332448749999 1 4.6185954612 1 4.9072576775250001 1 5.1959198938500002 1 5.4845821101750003 1 5.7732443265000004 1 6.0619065428249996 1 6.3505687591499997 1 6.6392309754749999 1 6.9278931918 1 7.2165554081250001 1 7.5052176244500002 1 7.7938798407750003 1 8.0825420570999995 1 8.3712042734250005 1 8.6598664897499997 1 8.9485287060750007 1 9.2371909223999999 1 9.5258531387249992 1 9.8145153550500002 1 10.103177571374999 1 10.3918397877 1 10.680502004025 1 10.969164220350001 1 11.257826436675 1 11.546488653000001 1 11.835150869325 1 12.123813085649999 1 12.412475301975 1 12.701137518299999 4 +7 0 0 5 15 5 130.18188052586356 17.380059856463959 130.36666479989435 17.129764830775002 130.55573229372021 16.894458674385078 130.74830127273526 16.672789184851808 131.26584603667834 16.118482579034207 131.80325011468449 15.643648993861461 132.14947441938602 15.369755460772012 132.83426901919302 14.885870250701828 133.61343937154015 14.455697923564912 134.00321669260757 14.265871021152179 134.66685203752695 13.989259900298748 135.40122117859573 13.76406170205064 135.67815131148745 13.689902168110166 135.96318446095211 13.624898616436894 136.25522253000781 13.570030358209806 + 0 6 2.5562201436500001 3 6.8074099178000003 3 10.550744568600001 3 12.701137518299999 6 +7 0 0 12 24 3 0.3523033910987069 -0.20135792203459693 0.38517258857439973 -0.20135792247891893 0.41713634884217754 -0.20135791181564855 0.44826060958439484 -0.2013589088601293 0.47864926874171942 -0.20135989465052262 0.50827527837827802 -0.2013510363176465 0.53663584869354963 -0.20136648253537714 0.56581713864579797 -0.20135175902396441 0.59361864509992301 -0.2013606633991003 0.62195899017388001 -0.2013572671712609 0.65014447396970354 -0.20135799304262036 0.67860801561868878 -0.20135791520875085 0.73631019228244388 -0.20135793380533448 0.76555292305914591 -0.20135771804450497 0.79535916052978761 -0.20135953791616557 0.82584545486560923 -0.20135469033520667 0.85705323346447793 -0.20135483570381693 0.88917957556457783 -0.20135917517754109 0.9223726848250603 -0.201359497183589 0.95655684416774533 -0.20135689076752863 0.99159150491386272 -0.20135747283990693 1.0274717017157446 -0.20135842397526618 1.064115669597957 -0.20135859999847913 1.101433843207962 -0.20135861109332479 + 0 13 6.3505687591500237 11 12.701137518299999 13 +7 0 0 9 10 2 -6.5067951027231175e-12 -0.20135821386756578 0.042393995368270154 -0.20135826438673082 0.084245721160847609 -0.20135826382454525 0.1254443884433627 -0.20135741067315394 0.16586410098964421 -0.20135846854736883 0.20543171895108259 -0.20135759474396764 0.24384107222861218 -0.201357608415492 0.28116090765681889 -0.20135799320109982 0.3172987751765417 -0.20135792006352551 0.35230339109870723 -0.20135792203459693 + 41.358597118333741 10 46.755059254499997 10 +1 0 -6.2831853071795862 0 1 +1 1.5707963267948966 -6.2831853071795862 0 1 +1 0 -1.5707963267948968 0 1 +1 1.5707963267948968 -1.5707963267948968 0 1 +7 0 0 12 24 3 5.3593442980386077e-11 -0.20135831908329557 0.064817047105046724 -0.20135808953762036 0.12991956603811353 -0.20135765038959097 0.19518188571326686 -0.20135802583968607 0.26062471186981134 -0.2013580337575355 0.32621002166809959 -0.20135785593728886 0.3918824919305321 -0.20135795562398265 0.4576165296695287 -0.20135816928785746 0.52340613184529394 -0.20135809271057112 0.58923396835115083 -0.20135784058009634 0.65507625797948488 -0.2013578839697725 0.72094119157693515 -0.20135796130150982 0.85266050792981307 -0.20135807002552467 0.91852163577277679 -0.20135814316381584 0.9843073965748772 -0.20135765025042929 1.0503133670426905 -0.20135924912756309 1.1154759544879198 -0.20135441340971738 1.18206343986094 -0.20136295456904918 1.2464592251926661 -0.20135251001920551 1.3127364818938076 -0.20136307389475405 1.3772806237684563 -0.20135590733843856 1.4423303965304513 -0.20135860620575841 1.5067394801680838 -0.20135782758032802 1.5707963267935303 -0.20135793727170209 + 18.965462881499537 13 29.012951802478018 11 39.06044072345648 13 +7 0 0 8 9 2 1.4728678844558118 -0.20135810811737273 1.4850770871108205 -0.2013580789732809 1.4972964038493046 -0.20135805054545131 1.5095250799568021 -0.2013580245080675 1.5217631615123537 -0.20135800233128975 1.5340095782030403 -0.20135798510580116 1.5462642979302927 -0.20135797329623983 1.5585266904384347 -0.20135796647293405 1.5707963267857243 -0.20135796299583375 + 19.018065227600001 9 20.328620711982662 9 +7 0 0 3 47 45 0 0.6425924374677372 0.011062830125652592 0.64761562754227997 0.03343377480643258 0.65740979897019292 0.067707800283803993 0.67131817362855395 0.10268293319423256 0.68441677735514284 0.1383365691827986 0.69668093415065468 0.1746418477953709 0.70808748591861326 0.21156702777469277 0.71861505882988053 0.24907567048724122 0.72824407714761608 0.28712676877746862 0.73695684014737839 0.3256750652941714 0.74473756800074287 0.3646714953533774 0.7515724274056117 0.4040637868281825 0.75744953484604982 0.44379751927011696 0.7623589369276037 0.4838146809081238 0.76629226975577669 0.5240542114816833 0.76924284266654597 0.56445273938049445 0.77120569391883509 0.60494536409834487 0.77217761770810134 0.64546650196706612 0.7721571583802318 0.68595074299834424 0.77114457227668509 0.72633376698761742 0.76914174873160046 0.76655302651012425 0.76615211882004497 0.80654916543501998 0.7621804473546544 0.84626422161341741 0.75723293254061119 0.88563844848333895 0.75131794226687776 0.92461534388185773 0.74444569272049799 0.96314156336640355 0.73662833408453166 1.0011676938764653 0.7278799228210634 1.0386486265852115 0.71821639516645341 1.0755438625639844 0.70765552148994537 1.1118176655306378 0.69621685671004685 1.1474390932748861 0.68392169205356668 1.1823819187340661 0.67079301259077118 1.2166244394052814 0.65685547163663782 1.2501492591024503 0.64213535943182354 1.2829428053467491 0.62666066298371637 1.3149957167384567 0.61046079437883227 1.3463042258628615 0.59356562479463093 1.3768694468229643 0.5760052792105298 1.4066968837924352 0.55780990534338171 1.4357958870808534 0.5390094842201496 1.4641791479051935 0.51963366114923315 1.4918622007793447 0.49971161237331196 1.5188630187611578 0.47927190120524499 1.5452014281636379 0.45834248539251399 1.5623333920265745 0.44408100612551732 1.570796186630085 0.43687766653166465 + 0 4 0.4322287551727273 1 0.86445751034545459 1 1.2966862655181819 1 1.7289150206909092 1 2.1611437758636365 1 2.5933725310363638 1 3.0256012862090911 1 3.4578300413818184 1 3.8900587965545457 1 4.322287551727273 1 4.7545163069000003 1 5.1867450620727276 1 5.6189738172454549 1 6.0512025724181822 1 6.4834313275909095 1 6.9156600827636368 1 7.347888837936364 1 7.7801175931090913 1 8.2123463482818195 1 8.6445751034545459 1 9.0768038586272723 1 9.5090326138000005 1 9.9412613689727287 1 10.373490124145455 1 10.805718879318182 1 11.23794763449091 1 11.670176389663638 1 12.102405144836364 1 12.534633900009091 1 12.966862655181819 1 13.399091410354547 1 13.831320165527274 1 14.2635489207 1 14.695777675872728 1 15.128006431045456 1 15.560235186218183 1 15.992463941390909 1 16.424692696563639 1 16.856921451736365 1 17.289150206909092 1 17.721378962081818 1 18.153607717254545 1 18.585836472427275 1 19.018065227600001 4 +7 0 0 5 15 5 147.05013027692803 27.105497200492664 146.80283715620499 27.674388392550554 146.51306411281257 28.217863788943305 146.18509075733982 28.731169884555129 145.44948276519153 29.7094814979896 144.58575905779708 30.550054714112775 144.11651800565414 30.940769819096658 143.01504218368518 31.722778257344089 141.77841575416733 32.312860793397704 141.06272225757493 32.574771666533252 139.68981127938787 32.928123523154682 138.24460981364791 33.029068665115119 137.57938195456973 33.019437235787336 136.91367209044438 32.952639341865051 136.25521787820981 32.828935970554994 + 0 6 4.38882424138 3 8.9264264320799995 3 14.4306279067 3 19.018065227600001 6 +7 0 0 11 22 3 0.12640668035358829 -0.20135792231866861 0.18875752575280894 -0.2013579225860741 0.25055412788172143 -0.20135791866139197 0.31173304566792387 -0.20135776959089277 0.37231706705775153 -0.20135788578012248 0.43233890482753684 -0.20135830096941473 0.49182813993750396 -0.20135782643476638 0.5510381384480173 -0.20135739117309145 0.6101978455913426 -0.20135808503875358 0.6692684113970494 -0.20135785831238523 0.72861563507941074 -0.20135797798285304 0.84803504288931963 -0.20135779219384836 0.90811191820830572 -0.201357452805496 0.96865924174198881 -0.20135779624251882 1.0298851598054171 -0.20135435958218295 1.0914544489933178 -0.20136431095306762 1.1541756755905226 -0.20135231091990136 1.2169818968977779 -0.20136010502756108 1.2804674767248798 -0.20135798709816299 1.3442823642544681 -0.20135848929658096 1.4084412374742692 -0.20135826323227243 1.4728678844558118 -0.20135810811737273 + 0 12 9.5090326138000005 10 19.018065227600001 12 +7 0 0 8 9 2 -1.3660184094987926e-12 -0.20135793727170209 0.01589423512079069 -0.20135796448909699 0.031766947432267045 -0.20135805834735265 0.04762303209347607 -0.20135824511669398 0.063456621811134539 -0.2013582933706175 0.079256813664621006 -0.20135812494152106 0.09501421834259105 -0.20135792239906891 0.1107269612060291 -0.20135792219740931 0.12640668035358793 -0.20135792231866864 + 39.06044072345648 9 40.722476448599998 9 +8 1.0150718478574368e-09 5.9999999964860287 +7 0 0 2 3 2 -1.2117933400182327e-09 4.7561438975882657e-09 -1.2120231843770705e-09 3.0000000024916083 -1.2122542649362394e-09 6.0000000002270779 + 1.0150718478574368e-09 3 5.9999999964860287 3 +8 1.0150718478574368e-09 5.9999999964860287 +7 0 0 2 3 2 3.1415926522613882 4.7566273787632118e-09 3.1415926522612816 3.0000000024918645 3.1415926522611981 6.0000000002271081 + 1.0150718478574368e-09 3 5.9999999964860287 3 +8 6.5910798695318923e-09 6.0000000087015959 +7 0 0 2 3 2 3.1415926523069584 2.6082693403065834e-09 3.1415926523068789 3.0000000036632937 3.1415926523068118 6.0000000047183306 + 6.5910798695318923e-09 3 6.0000000087015959 3 +8 6.5910798695318923e-09 6.0000000087015959 +7 0 0 2 3 2 -1.1275024802099072e-09 2.6086108744061848e-09 -1.1278005764994702e-09 3.0000000036634127 -1.1280911728192599e-09 6.0000000047182196 + 6.5910798695318923e-09 3 6.0000000087015959 3 +1 -4.5039040492315143 10.999999991296033 1 -2.895010797918281e-13 +2 138.06442175178032 23.199470806102283 -0.86632438691299207 -0.49948178809625149 0.49948178809625149 -0.86632438691299207 14.999999999999746 +1 -1.3623113956622772 10.999999991293862 1 0 +2 138.06442175178032 23.199470806102283 -0.86632438691299207 -0.49948178809625149 0.49948178809625149 -0.86632438691299207 14.999999999999746 +1 -4.5039040494772875 10.999999991292601 1 2.8950118557132047e-13 +2 138.06442175178032 23.199470806102283 -0.86632438691299207 -0.49948178809625149 0.49948178809625149 -0.86632438691299207 14.999999999999746 +7 0 0 8 37 6 1.8901347938561464 -4.9340000000718796 1.7681489729709583 -4.9340000000718627 1.6459895586939133 -4.9340000000718209 1.5239304950412218 -4.9340000000718636 1.4019311627826778 -4.9340000000717454 1.2799333114830813 -4.9340000000717996 1.1578782276922248 -4.9340000000717366 1.0357229254576139 -4.9340000000717206 0.91228218807775407 -4.9340000000716957 0.91083214118054534 -4.9340000000716957 0.9093820942447518 -4.9340000000716957 0.90793204724104748 -4.9340000000716957 0.9064820001415288 -4.9340000000716948 0.90503195291971372 -4.9340000000716939 0.90358190555054052 -4.9340000000716939 0.82819104297724855 -4.9340000000716788 0.75423667029389141 -4.9340000000716664 0.68028845377341807 -4.9340000000716495 0.60634782948264598 -4.9340000000716353 0.53240711148100872 -4.9340000000716246 0.45845866797782736 -4.934000000071614 0.38450411790793143 -4.934000000071598 0.2878188705222417 -4.9340000000715856 0.26507417975229081 -4.9340000000715847 0.24232947975020927 -4.9340000000715802 0.21958477473393245 -4.9340000000715785 0.19684006900489801 -4.9340000000715749 0.17409536694804634 -4.9340000000715714 0.15135067303182001 -4.9340000000715669 0.11253024392951025 -4.9340000000715634 0.096454494606985755 -4.9340000000715634 0.080378744123599785 -4.9340000000715625 0.064302992988089142 -4.9340000000715598 0.048227241934918182 -4.934000000071558 0.032151491924278762 -4.9340000000715563 0.016075744142090363 -4.9340000000715545 0 -4.9340000000715518 + 0 9 0.51646752819697217 7 0.52260653872074503 7 0.83564692467437518 7 0.93194051010993306 7 1 9 +7 0 0 8 37 6 -15.999990272717248 86.060964423954033 -16.206016881434536 86.200712286404681 -16.39285471803387 86.369382357563097 -16.555267428792256 86.563629716544455 -16.689382411915247 86.779184699151315 -16.792106133324204 87.011341373140425 -16.861293723216747 87.254895088850745 -16.895599697835518 87.504248335031122 -16.895191702656458 87.756167876851762 -16.89518200587414 87.759127144410471 -16.895167405006109 87.762086394623893 -16.895147900088936 87.765045618070303 -16.895123491180716 87.768004805325347 -16.895094178361028 87.7709639469618 -16.895059961730976 87.773923033549707 -16.893026018412996 87.927768492279554 -16.878280255115151 88.078514598061304 -16.850792943356854 88.227820343889604 -16.810739835658861 88.374430477819089 -16.758436725822662 88.51713024436728 -16.694329954245912 88.65474644340847 -16.619003737956191 88.786153828666215 -16.506811778466247 88.948471098786499 -16.479426620142522 88.985969375641716 -16.451069733377341 89.022751472587146 -16.421763024002214 89.058788039548006 -16.391529420694653 89.094050580156804 -16.360392874978178 89.128511451753369 -16.328378361222327 89.162143865384834 -16.272282123956074 89.218089112774962 -16.248626726398104 89.240829565489122 -16.224554847830124 89.263134105672975 -16.20007587156444 89.284993844728533 -16.175199400364267 89.30640014373536 -16.149935256443779 89.327344613450393 -16.124293481468069 89.34781911430801 -16.09828433655316 89.367815756420001 + 0 9 0.51646752819697217 7 0.52260653872074503 7 0.83564692467437518 7 0.93194051010993306 7 1 9 +7 0 0 6 12 3 3.1415926535897936 -4.9340000000719115 3.0325190170613952 -4.9340000000719213 2.923402319732201 -4.9340000000719382 2.8143352805263206 -4.9340000000719257 2.7052686248895168 -4.9340000000719435 2.5961528264817106 -4.9340000000719346 2.3875952035498074 -4.9340000000719275 2.2880853962584053 -4.9340000000719249 2.1886068409591459 -4.934000000071916 2.0891280829668575 -4.9340000000718991 1.9896177961067529 -4.9340000000718938 1.8901347938561468 -4.9340000000718796 + 0 7 0.52299350882995754 5 1 7 +7 0 0 6 12 3 -13.610481353964987 86.131991064882939 -13.786952937102157 85.996314205744397 -13.981254738608891 85.883680825585685 -14.189470191121904 85.797153205779352 -14.407223273283705 85.738638642387258 -14.629883512170393 85.709295083408819 -15.055511129836272 85.708899063376379 -15.258615974618575 85.73294767176391 -15.458056009147652 85.781260291759807 -15.650296147178519 85.853053982468325 -15.831969551702487 85.946995957669898 -15.999990272717248 86.060964423954033 + 0 7 0.52299350882995754 5 1 7 +7 0 0 6 47 10 3.1415926535897931 -4.9340000000715527 3.0324785432665764 -4.9340000000715429 2.9233212935213269 -4.9340000000715394 2.8142137927202979 -4.9340000000715278 2.7051066761136098 -4.9340000000715323 2.5959503268215887 -4.9340000000715323 2.4211418583412554 -4.9340000000715394 2.3554447165043197 -4.9340000000715429 2.2897515976881659 -4.9340000000715509 2.2240584657270603 -4.93400000007155 2.1583612946764248 -4.9340000000715616 2.0266582321123718 -4.9340000000715758 1.9606454048363859 -4.9340000000715785 1.8946366801899437 -4.9340000000716016 1.8286279062929243 -4.9340000000715962 1.7626149787518035 -4.9340000000716149 1.6708466319395523 -4.93400000007163 1.6450875935857263 -4.9340000000716318 1.6193285507990145 -4.9340000000716353 1.5935695089840296 -4.9340000000716415 1.5678104734028049 -4.9340000000716477 1.4780102112042905 -4.9340000000716637 1.4139660457038286 -4.9340000000716735 1.3499252713426777 -4.9340000000716859 1.2858845268332246 -4.9340000000717001 1.2218404156795033 -4.9340000000717126 1.1169938125657521 -4.934000000071733 1.0761883653813837 -4.9340000000717437 1.0353828637803411 -4.9340000000717508 0.99457736227855464 -4.9340000000717588 0.95377191550015683 -4.934000000071765 0.8721583106851899 -4.934000000071781 0.83134993102253041 -4.9340000000717881 0.79054149637873972 -4.9340000000717978 0.74973306248660043 -4.9340000000718058 0.70892468362244865 -4.9340000000718121 0.57825969061508875 -4.9340000000718351 0.48838710621887488 -4.9340000000718529 0.39853338499457963 -4.9340000000718618 0.30867944003094161 -4.9340000000718822 0.21880637119048399 -4.9340000000718893 0.10745831514568754 -4.9340000000719009 0.085966651210252043 -4.9340000000719053 0.064474985296018555 -4.9340000000719089 0.042983319247005332 -4.9340000000719106 0.021491656083088107 -4.9340000000719106 0 -4.9340000000719115 + 0 7 0.20840114640558499 5 0.33387129222372658 5 0.45994434719129451 5 0.50914224041144374 5 0.63145642279155734 5 0.70939166684761179 5 0.78733250731583015 5 0.95895233484814402 5 1 7 +7 0 0 6 47 10 -16.09828433655316 89.367815756420001 -15.921747270363674 89.503542960972283 -15.727366671628383 89.616209641743382 -15.519063568263327 89.702749978021373 -15.301219067175806 89.761255025775739 -15.078468957632312 89.790566168504952 -14.72171706544327 89.790811422257278 -14.587633966324194 89.780334617931658 -14.454593669176923 89.759286089100925 -14.32362846682525 89.727807775306317 -14.195746394562127 89.68616365623069 -13.947504879367699 89.583111316021203 -13.827171277635228 89.521603582148146 -13.711913613462391 89.45064707236466 -13.602643129893719 89.370777528517237 -13.50020049597274 89.282635940329527 -13.368321840263569 89.149659644673235 -13.332457728119216 89.111189396077748 -13.297791666253886 89.07161954219464 -13.264365509499941 89.030996876289279 -13.232218645697474 88.989370285570757 -13.124737848694847 88.840930914667055 -13.05621994797154 88.729175434280009 -12.996406890077111 88.612316667556328 -12.945760716209479 88.49120299130999 -12.904631114328746 88.366734854953748 -12.853260742840307 88.159020185489567 -12.837226212896072 88.077199846414146 -12.825210250761828 87.99464368960777 -12.817252833064062 87.911598029107267 -12.813373693735494 87.828311619961241 -12.813770968557941 87.66175371657819 -12.818047972168408 87.5784807758494 -12.826402645116461 87.495468090999779 -12.838814061120393 87.412964375804563 -12.855241057346774 87.33121580285821 -12.920500042650124 87.072661061478428 -12.984558350225193 86.89966329625473 -13.067138822673007 86.734132422886049 -13.167101119262918 86.578479889653579 -13.28295723632597 86.434920063077683 -13.443802026812895 86.274397809292466 -13.475646287197279 86.244215509104706 -13.50826375974629 86.21485964862795 -13.541627552561016 86.186354852484087 -13.575709738257146 86.158724567935067 -13.610481353964987 86.131991064882939 + 0 7 0.20840114640558499 5 0.33387129222372658 5 0.45994434719129451 5 0.50914224041144374 5 0.63145642279155734 5 0.70939166684761179 5 0.78733250731583015 5 0.95895233484814402 5 1 7 +1 5.2123889803842944 0 0 -1 +1 5.2123889803842944 0 0 -1 +1 2.0707963267945018 0 0 -1 +1 8.3539816339740884 0 0 -1 +1 1.0935246108253915e-16 24.749999920068458 1 0 +2 -0.0010047413191927026 1.5042647874041046e-05 0.21790508690551391 0.97596996526568403 0.97596996526568403 -0.21790508690551391 5 +1 0 24.749999920068458 1 0 +2 -0.0010047413191927026 1.5042647874041046e-05 0.21790508690551391 0.97596996526568403 0.97596996526568403 -0.21790508690551391 5 +7 0 0 1 2 2 0 -11.000000003624791 3.1415926533063034 -11.000000003625246 + 2.7850705891788574 2 5.9266632409953832 2 +2 138.06442175357344 23.19947080299319 -0.86632438691299207 -0.49948178809625149 0.49948178809625149 -0.86632438691299207 4.9999999999006635 +7 0 0 1 2 2 0 -11.000000003625246 3.1415926531531904 -11.000000003624791 + 5.9266632409953832 2 9.0682558963584441 2 +2 138.06442175357344 23.19947080299319 -0.86632438691299207 -0.49948178809625149 0.49948178809625149 -0.86632438691299207 4.9999999999006635 +1 3.1415926537881993 2.5604656173072726e-09 0 1 +1 0 2.5604656173072726e-09 0 1 +1 -6.1660182781677717 -9.9999999915560291 1 0 +1 0.11716702901181487 -9.9999999915560291 1 0 +1 0 -2.0759554075766573e-09 0 1 +1 3.1415926539521162 -2.0759554075766573e-09 -5.9347976332309902e-15 1 +1 -3.0244256245779781 -9.9999999915560291 1 0 +1 -3.0244256245779781 -9.9999999915560291 1 0 +7 0 0 6 37 8 1.4536293252053125 0.94221229420932462 1.4168481445400751 0.94221229698054609 1.3800443767251938 0.94221229631101711 1.3432207061224337 0.94221229559478259 1.3063795314986903 0.94221229637201587 1.2695229660259895 0.94221229832901754 1.2061415227506833 0.9422122999951138 1.1796231439818123 0.94221230071554229 1.1530983781299862 0.94221230145863333 1.126567857486811 0.94221230222347241 1.100032169480389 0.94221230300909842 1.0542148528126152 0.94221230439949366 1.0349353991241046 0.94221230499491826 1.0156537030067061 0.94221230560039437 0.99636996383782328 0.94221230621552643 0.97708437297534401 0.94221230683990698 0.90955346350320665 0.94221230905698394 0.86129851340169716 0.94221231069613243 0.81303695528768172 0.94221231238398773 0.76477040710374566 0.942212314113683 0.71650037010977308 0.94221231587806076 0.61133880224263049 0.94221231978136022 0.55444441912239895 0.94221232193099769 0.49755643876232458 0.94221232410635414 0.44067664287546826 0.94221232629502361 0.38380703717904902 0.94221232848453107 0.3041924612119386 0.94221233153415129 0.28143086993189581 0.94221233240424596 0.25867238561770634 0.94221233327164544 0.23591734521312133 0.94221233413554994 0.21316610486856383 0.94221233499516333 0.1586585864917909 0.94221233704282747 0.12690622736191159 0.94221233822605732 0.095162986264096416 0.94221233939722693 0.063430006358344976 0.94221234055421876 0.03170855025205057 0.9422123416949556 0 0.94221234281739896 + 0 7 0.15232778011244325 5 0.26185844430740934 5 0.34141376274989538 5 0.54040724935664231 5 0.77495055175609262 5 0.86886813530304174 5 1 7 +7 0 0 6 37 8 3.1415926541247656 0.088607402915794178 3.1007390337794205 0.088608121137919105 3.0606069469057346 0.088608830792269222 3.0211265937695604 0.088609541809748713 2.9822331923448036 0.08861025772362581 2.9438669783134261 0.088610975669532688 2.8787258431617864 0.088612197422835937 2.8517225213856001 0.088612706569188696 2.8249427200710913 0.088613213161066573 2.798366768716825 0.088613716541997914 2.7719758459857275 0.088614216062496684 2.7267048201896897 0.088615070625769191 2.7077457562718963 0.088615427796574331 2.6888678785148721 0.088615782346641581 2.6700644359028822 0.088616134033467284 2.6513288358412965 0.088616482617880396 2.5859444733514851 0.088617691435942988 2.5396176383127487 0.088618534137310592 2.493574937125238 0.088619352251161521 2.4477194104298508 0.088620142261765691 2.4019565472125728 0.088620900858521381 2.3022571277831272 0.088622478376915254 2.24831787462377 0.088623283913677964 2.1942275399129958 0.088624036446169813 2.1398307507587568 0.088624731487315353 2.084966524538272 0.08862536508947623 2.0072460624271202 0.088626161715672128 1.9849213725176462 0.088626379116948414 1.9624839012385349 0.0886265859271229 1.939922392140865 0.088626781952864594 1.917225215924294 0.088626967018712297 1.8624833914655168 0.0886273838414358 1.8302983515353664 0.08862760504355606 1.7977927559874411 0.088627804143652955 1.7649319346780556 0.088627980785450797 1.73167904197901 0.08862813468618054 1.6979950567775852 0.08862826563657987 + 0 7 0.15232778011244325 5 0.26185844430740934 5 0.34141376274989538 5 0.54040724935664231 5 0.77495055175609262 5 0.86886813530304174 5 1 7 +1 0 0 1 0 +1 0 -20 1 0 +1 0 0 1 0 +1 0 -5 1 0 +7 0 0 6 37 8 0.60164773277277561 5.8491384004678224 0.38650950468249334 5.8712676959759023 0.17026135769425821 5.8839149031789617 -0.046556122598957472 5.8870027908344156 -0.26340181442759558 5.8804969601701202 -0.47973405984555484 5.864405844884331 -0.84980442264678402 5.8203550640552635 -1.0040534333554234 5.7969999200384166 -1.1575567446617896 5.7687342687676733 -1.3101154503690111 5.7355881502337098 -1.4615326902778634 5.6976026547455092 -1.7206218320093427 5.6237628393406141 -1.828925247322303 5.5901701727968316 -1.9364493567697281 5.5540718758806946 -2.0431206108161888 5.5154908420533957 -2.1488664497465919 5.4744529056558946 -2.515625940636852 5.3222642103683455 -2.7714035746610932 5.19834736698553 -3.0198202427033323 5.0596906390676111 -3.2598082640574972 4.9068534090237819 -3.4903614371424254 4.7404991759332944 -3.9700448532854153 4.3502933624097437 -4.2151505858708163 4.1214677542879059 -4.4443008498945034 3.8761769424849177 -4.6561288095141578 3.6158436480743319 -4.8494302197130423 3.3420306862578997 -5.0927690904441789 2.9421114949873868 -5.1592153357130428 2.8258749133400158 -5.2224648019081172 2.7078609385724661 -5.2824583150756865 2.5881816510735973 -5.3391421035010183 2.4669518457521917 -5.4669234795257893 2.1730218115236397 -5.5348329503898555 1.9989600893001978 -5.5960642707292294 1.82242442548025 -5.6505077360545783 1.643742196649896 -5.6980758769585265 1.4632475958678413 -5.7387034591154134 1.2812816326653689 + 0 7 0.15232778011244325 5 0.26185844430740934 5 0.34141376274989538 5 0.54040724935664231 5 0.77495055175609262 5 0.86886813530304174 5 1 7 +8 6.8325802563595259e-09 6.0000000077340729 +7 0 0 2 3 2 -4.5499417154884453e-10 6.4087658406954575e-09 -4.5495276286735641e-10 3.0000000068592811 -4.5491027828155233e-10 6.0000000073098025 + 6.8325802563595259e-09 3 6.0000000077340729 3 +8 6.8325802563595259e-09 6.0000000077340729 +7 0 0 2 3 2 3.1415926530756324 6.408851324444577e-09 3.1415926530756551 3.0000000068593518 3.1415926530756804 6.0000000073098638 + 6.8325802563595259e-09 3 6.0000000077340729 3 +7 0 0 6 47 10 1.5707963267948966 0.94221234281739907 1.551255129228571 0.94221234350913319 1.5317188186426607 0.94221234419392108 1.5121877202303506 0.94221234487128835 1.4926621854587168 0.94221234554076927 1.4731425920687278 0.94221234620190664 1.4358646265776069 0.94221234744814142 1.4180946500884641 0.9422123480350969 1.4003197199467909 0.94221234861476288 1.3825401229392733 0.94221234918679142 1.3647561273003097 0.942212349750843 1.3151082854268186 0.94221235130195879 1.2832352442653445 0.9422123522706819 1.2513502870022577 0.94221235321083963 1.219454716610296 0.94221235412060766 1.1875497112602642 0.94221235499825218 1.1324008371642726 0.94221235645654178 1.1091608816206475 0.94221235705305528 1.085916863263068 0.9422123576310395 1.0626691661973113 0.94221235818989324 1.0394181530620212 0.94221235872904507 0.99942711595137002 0.94221235962143846 0.98268852072491109 0.94221235998443709 0.96594850626957152 0.94221236033674838 0.94920719572363776 0.94221236067817971 0.9324647084434422 0.94221236100854899 0.87452233141749414 0.9422123621129409 0.83331668142571813 0.94221236283018417 0.79210676941910629 0.94221236347680781 0.75089374546805843 0.94221236405058895 0.70967870663077137 0.94221236454968593 0.61157057515488278 0.9422123655564838 0.55467508660718523 0.94221236599526215 0.49778599027601922 0.94221236628508664 0.44090506754398795 0.94221236642370332 0.38403432349108879 0.94221236641026107 0.30441754665394233 0.94221236617968873 0.28165490304214358 0.94221236608951331 0.25889536455400503 0.94221236597514413 0.23613926809145994 0.94221236583667534 0.21338696975250712 0.9422123656742416 0.15884171034121053 0.94221236522771823 0.12705268409043788 0.94221236492093741 0.095272793032600264 0.94221236456815793 0.063503184084487171 0.94221236417001675 0.031745124125969554 0.94221236372730477 0 0.94221236324096969 + 0 7 0.074770817129581418 5 0.14284161927477224 5 0.26476075139898975 5 0.35352758877760448 5 0.41741748635207526 5 0.57462364536664379 5 0.79163396657599061 5 0.87853311434506309 5 1 7 +7 0 0 6 47 10 1.6979950567775817 0.088628265636582534 1.6772364473675008 0.088628346338084599 1.6563140422933877 0.088628418323471556 1.6352186681496157 0.088628481543999341 1.6139407068517635 0.088628535962086405 1.5924700956366167 0.088628581551313632 1.5510646875133443 0.088628651748902831 1.5315014304907637 0.088628677891080032 1.5120986234351561 0.088628696695255013 1.492848642458118 0.08862870814146534 1.4737441723421092 0.088628712217487068 1.4208089566188331 0.08862870301073833 1.3872838417147439 0.088628673445059938 1.3541628141777291 0.088628620196370009 1.3214080990284007 0.088628543317296291 1.2889841939584425 0.088628442938523802 1.2334673465789698 0.088628229227383504 1.2102344708400852 0.088628126839075547 1.1871463480556905 0.088628012184262264 1.1641904998810109 0.08862788536436865 1.1413548636847608 0.088627746501853344 1.1022699917093055 0.088627487229572144 1.0859684149604467 0.088627372554606662 1.0697187091563916 0.088627251768745988 1.0535165967722981 0.088627124930815745 1.0373578759046591 0.088626992105033386 0.98157522152266974 0.088626511970333013 0.94214935281849044 0.088626134744062543 0.902900025228492 0.088625722725600223 0.86376744117995419 0.088625277139134387 0.824692911292356 0.088624799388499431 0.73168057375418505 0.08862358934440101 0.67774070406083919 0.088622829324067801 0.62365016251137473 0.088622015178416558 0.56925357450172764 0.088621151628296577 0.5143899630587323 0.088620243854476879 0.43667038449780682 0.088618918634905272 0.41434559926290454 0.088618533523111317 0.39190809589718856 0.088618142591936788 0.36934661814295117 0.088617746212559578 0.34664953706602869 0.088617344765041503 0.29187274430141269 0.08861637095788194 0.25965206296736926 0.088615794132290426 0.22711020640760546 0.088615209226128977 0.19421238900408191 0.088614617326265396 0.16092164016678559 0.088614019541860115 0.12719880433372954 0.088613417004366521 + 0 7 0.074770817129581418 5 0.14284161927477224 5 0.26476075139898975 5 0.35352758877760448 5 0.41741748635207526 5 0.57462364536664379 5 0.79163396657599061 5 0.87853311434506309 5 1 7 +1 0 0 1 0 +1 0 -20 1 0 +1 0 0 1 0 +1 0 -5 1 0 +7 0 0 6 47 10 -5.7387034591154418 1.2812816326653689 -5.7637412360953988 1.1691404969458006 -5.7861431175253415 1.0564402402624467 -5.80589390528786 0.94326049131059619 -5.8229817795633636 0.82968135563196199 -5.8373982988296689 0.7157834156148084 -5.859826501520601 0.4977394419685055 -5.868302684504485 0.393572518836379 -5.8745582376857755 0.28920760626891706 -5.8785867894503667 0.18470551227285625 -5.8803843076982218 0.080127207690054547 -5.8791696149205421 -0.21179956632383323 -5.8712276716026963 -0.39918212221388671 -5.8561136812403447 -0.58626161145237177 -5.8338417111388452 -0.77268774880622004 -5.8044494845584751 -0.95811219382962065 -5.7414590742836253 -1.2762107979505117 -5.7111777494284013 -1.4095189305124762 -5.677178048914854 -1.5419795430136674 -5.6394899939523953 -1.6734608739347578 -5.5981499841935829 -1.8038328057733253 -5.5208486378089958 -2.0259110552820374 -5.4866267481896074 -2.1182140735550092 -5.4505510625010061 -2.2098280715906071 -5.4126391493399666 -2.3007058463834937 -5.372910212274931 -2.3908008401949132 -5.2292092334524511 -2.6997139507916472 -5.1161573041863448 -2.9143456307681532 -4.9925416922457515 -3.1232746358036252 -4.8587297375706413 -3.325846815644482 -4.7151433605828146 -3.5214418633686932 -4.3512138391853483 -3.969036515986474 -4.1224405566807292 -4.2142000109919877 -3.8771976932633692 -4.4434112713866796 -3.6169077248336237 -4.6553030430207798 -3.343133269797292 -4.8486706405970779 -2.9432580959238663 -5.0921066813384215 -2.8270310916625192 -5.1585821431172434 -2.7090258007415713 -5.2218609358423294 -2.5893543047361902 -5.2818838513262136 -2.4681314014385123 -5.3385970839061088 -2.1740259834658531 -5.4665315980211489 -1.9997749315970594 -5.5345502536794271 -1.8230430920063725 -5.595875725235544 -1.6441589578856508 -5.6503978774069168 -1.4634578728634011 -5.6980289118114911 -1.281282031004622 -5.7387033669677976 + 0 7 0.074770817129581418 5 0.14284161927477224 5 0.26476075139898975 5 0.35352758877760448 5 0.41741748635207526 5 0.57462364536664379 5 0.79163396657599061 5 0.87853311434506309 5 1 7 +7 0 0 4 92 31 1 -3.9113718134068196 0.99508958410271064 -3.9113718428285456 0.99017966699018822 -3.9113718735345508 0.985270229745421 -3.9113719055208449 0.95975010063649702 -3.9113720784394084 0.93914709404089924 -3.9113722405866524 0.91855110661571571 -3.9113724248914661 0.89586116149309591 -3.9113726518703942 0.89376113071018659 -3.9113726731040925 0.89166116253528527 -3.9113726945626666 0.88426068491674092 -3.9113727709774495 0.87896050649047164 -3.9113728271387043 0.87366070208217717 -3.9113728847206946 0.86556110586462798 -3.9113729748853525 0.86276105744819831 -3.9113730064506598 0.85996110821993199 -3.9113730384086498 0.83395243824967769 -3.9113733389104643 0.81075033498638438 -3.9113736339472798 0.78755341505648946 -3.9113739550536386 0.74115552130847018 -3.9113746475051956 0.71795452016353167 -3.9113750188806313 0.69475664527010983 -3.9113754142507919 0.66986123647674356 -3.9113758629864428 0.66816123020452289 -3.9113758937510754 0.66646123678571778 -3.9113759246372695 0.66106116988801122 -3.9113760231332173 0.65736114330015549 -3.9113760911954003 0.65366117300928062 -3.911376159825855 0.64746122044886145 -3.9113762757732267 0.64496120926898559 -3.9113763227842346 0.64246122141575635 -3.9113763700506086 0.6356611617622282 -3.9113764993080991 0.63136113373211711 -3.911376581796095 0.62706116688524005 -3.9113766650261268 0.62056123470105973 -3.911376791948705 0.61836122811265259 -3.9113768350999334 0.61616123543533186 -3.9113768784419456 0.61186123860007169 -3.9113769635271716 0.60976123327324905 -3.9113770052535468 0.60766123927764149 -3.9113770471516456 0.60266122738662176 -3.9113771473164149 0.59976121913446656 -3.9113772057379017 0.59686122932007346 -3.9113772644821219 0.59166124146931898 -3.9113773703909667 0.58936123734481694 -3.9113774174369094 0.587061242527949 -3.9113774646826993 0.582261242831971 -3.9113775636972856 0.57976123944087599 -3.9113776155020976 0.5772612443235613 -3.9113776675395315 0.57216124684321013 -3.9113777741671258 0.56956124502648631 -3.9113778287761236 0.5669612487036052 -3.9113778836326549 0.5616612524613096 -3.9113779959561299 0.55896125281749298 -3.9113780534423168 0.55626125478837218 -3.9113781111908277 0.55136125812077463 -3.9113782164653874 0.54916125976537056 -3.9113782639040768 0.54696125951718833 -3.9113783115140537 0.53486128896674645 -3.9113785743027409 0.52496128721804514 -3.9113787927535646 0.5150613445007558 -3.9113790145274714 0.49006193569188827 -3.9113795826209317 0.47496233600501464 -3.9113799331822356 0.45986217706066229 -3.9113802907417057 0.42726315741266535 -3.9113810767156254 0.40976402288307129 -3.9113815073678144 0.3922635455546335 -3.9113819460566748 0.36656191158914997 -3.9113826009273649 0.35836216751550193 -3.9113828114388678 0.35016197245071867 -3.9113830234655098 0.32416513495684629 -3.9113837001510046 0.30636672828933265 -3.9113841701296042 0.28856560281958171 -3.911384646033484 0.26866132412833782 -3.9113851837300246 0.26656134745197835 -3.9113852405282898 0.26446132501885866 -3.9113852973956069 0.23497507749173124 -3.9113860967969503 0.20758098991594873 -3.9113868507671459 0.1801771543345034 -3.9113876130939618 0.14846170461538669 -3.9113885008776923 0.14416186069817283 -3.9113886214496545 0.13986171539903031 -3.9113887422185516 0.12966216921517473 -3.9113890289287894 0.12376249211308091 -3.9113891949862816 0.11786219651067482 -3.9113893611453645 0.090275671072457403 -3.9113901380437981 0.068581349276989584 -3.9113907490943811 0.046877086340124864 -3.9113913566458303 0.018872445177607992 -3.9113921437588339 0.012582662053818656 -3.9113923207509438 0.0062918636349065431 -3.9113924981321144 0 -3.9113926761281075 + 0 5 0.019604221342885218 3 0.10191585389936419 3 0.11031135918279593 3 0.13150324046741491 3 0.14270072140373399 3 0.23552000792507158 3 0.32839362595037047 3 0.33520045093951528 3 0.35001581648493568 3 0.36002656492913798 3 0.37724566688213956 3 0.38605570732976335 3 0.39446543901404307 3 0.40607908425743366 3 0.41529004866491592 3 0.42530207716418361 3 0.43571467140908859 3 0.4465277938670309 3 0.45533848107931163 3 0.49498637623873276 3 0.55545616496350814 3 0.62552515673250642 3 0.65835056425685878 3 0.7295839644372154 3 0.73798558018163851 3 0.84754775951249894 3 0.86473006020756771 3 0.88829960710353228 3 0.9749162067070305 3 1 5 +7 0 0 4 92 31 64.042083979501271 -0.70147758428241325 64.047080872238951 -0.74392986750537382 64.052481024931879 -0.78633471410605793 64.058283758197291 -0.82868637705031567 64.090538766005238 -1.0485523959127558 64.123671532704748 -1.2250873192387273 64.163824396879164 -1.400159458810541 64.21568495916847 -1.5910202032564342 64.22055683721446 -1.6086660200800003 64.225500459138416 -1.626291875618767 64.243175140868601 -1.6883369163025721 64.256290908271907 -1.7326465306471572 64.269861000160972 -1.7768191455813396 64.291292327000704 -1.8441118913826653 64.298827678179848 -1.8673357938293966 64.306488926974993 -1.8905184751334163 64.378822877709709 -2.1054769636430359 64.451997237143758 -2.2943926485437278 64.533602606271629 -2.4798227219389806 64.713182228857136 -2.8427147846239986 64.811166286748843 -3.0201725483704602 64.917044923470058 -3.1930364335426162 65.038786205867908 -3.3730910573979327 65.047140040607104 -3.3853589325904649 65.055534292726961 -3.3975991887246555 65.082326968520576 -3.4363925552272154 65.100875931773587 -3.462841698656181 65.119614295159579 -3.4891570017338567 65.151329104325882 -3.5330258976897357 65.164203419701536 -3.5506533232136293 65.177163090311936 -3.5682180926161773 65.212645109192621 -3.615823234950224 65.235333733462809 -3.6457396789916015 65.25827118543188 -3.6754657762975209 65.293316912990633 -3.7201086372875682 65.305243286072283 -3.7351681958651612 65.317233838975426 -3.7501767051761008 65.340794919933572 -3.7794111921195608 65.352359777383313 -3.7936417398056443 65.363982527902635 -3.8078250437198173 65.391793177796359 -3.8414818380567071 65.408033327902118 -3.8609121543809444 65.424382564591497 -3.8802507733117149 65.453892840580863 -3.9147610910457464 65.46701370234409 -3.9299671457935492 65.480202301277814 -3.9451144886103329 65.507867030931465 -3.976603045532193 65.522355384096159 -3.9929335215553952 65.536922792022935 -4.00919351761834 65.566800644768009 -4.0422191012134823 65.582117499645463 -4.0589788896966077 65.597518720540535 -4.0756611845882222 65.62908435354494 -4.1095082106493805 65.645255334525046 -4.1266668157471322 65.661515996753465 -4.1437404569259098 65.691187612494971 -4.1745704822448069 65.704568652455336 -4.188355655997932 65.718008422484431 -4.2020835772951664 65.792247840785734 -4.2772698938784099 65.854170940607105 -4.3376189858537035 65.917242213964172 -4.3967670949946633 66.079317409261577 -4.5430124827529008 66.179796840704498 -4.6284745903893789 66.282738220761274 -4.7109545974340552 66.509984133648487 -4.8823492416833716 66.635085940940812 -4.9702069361920778 66.763100116244658 -5.0537640059136368 66.955029834725494 -5.1699488849051454 67.016848837036477 -5.2060403421440213 67.079234111078392 -5.2411438495228486 67.278719175421713 -5.3492513890016617 67.417830861801065 -5.4185429228505573 67.559252485048219 -5.4829886510710484 67.719649452056487 -5.5494990969383746 67.736600140169074 -5.5564471603771537 67.753578970795502 -5.5633261592558183 67.992361281041028 -5.6589394016851928 68.218851574202034 -5.7359693647611429 68.449116125275509 -5.8008495245244429 68.718715483703079 -5.8615919754532255 68.755332655741086 -5.8695223247977966 68.792014567466822 -5.8771475300964919 68.879158789245338 -5.894506962922458 68.929674808817211 -5.9039714880089385 68.980295593200722 -5.9128584410157945 69.217387942000215 -5.9516966732881311 69.405045691918232 -5.9744050026792026 69.59349111622052 -5.9892104739505596 69.836880988526119 -5.9980888612168739 69.891561568956575 -5.9994183318326373 69.946254194749258 -6.0000830747231904 70.000946770251261 -6.0000830796721907 + 0 5 0.019604221342885218 3 0.10191585389936419 3 0.11031135918279593 3 0.13150324046741491 3 0.14270072140373399 3 0.23552000792507158 3 0.32839362595037047 3 0.33520045093951528 3 0.35001581648493568 3 0.36002656492913798 3 0.37724566688213956 3 0.38605570732976335 3 0.39446543901404307 3 0.40607908425743366 3 0.41529004866491592 3 0.42530207716418361 3 0.43571467140908859 3 0.4465277938670309 3 0.45533848107931163 3 0.49498637623873276 3 0.55545616496350814 3 0.62552515673250642 3 0.65835056425685878 3 0.7295839644372154 3 0.73798558018163851 3 0.84754775951249894 3 0.86473006020756771 3 0.88829960710353228 3 0.9749162067070305 3 1 5 +7 0 0 3 4 2 3.0461248870683577 4.0000000284908399 3.0774213041864655 4.0000000284908701 3.1092144237469839 4.0000000285010948 3.1415926520127462 4.0000000285214723 + 0.93976483633213348 4 0.99992817082446539 4 +7 0 0 4 5 2 1.5707963267948966 0.94221236324096924 1.5414845123940413 0.94221236279191234 1.5121849141290462 0.94221236093548077 1.4828991613172184 0.94221236340307335 1.4536292709695595 0.94221236120151897 + 0 5 1 5 +7 0 0 4 5 2 0.12719880433372813 0.088613417004362913 0.096060872691482113 0.088612860652240361 0.064513450959478288 0.088612295081149081 0.032510671381072873 0.088611741381047313 0 0.088611169853629837 + 0 5 1 5 +1 0 0 1 0 +1 0 -20 1 0 +1 0 0 1 0 +1 0 -5 1 0 +7 0 0 4 5 2 -1.281282031004622 -5.7387033669677976 -1.113070231180032 -5.776260066247545 -0.94346062001176278 -5.8072270333626648 -0.77285135544960326 -5.8315282198880567 -0.60164772535109989 -5.8491383974867546 + 0 5 1 5 +7 0 0 6 67 14 0 4.000000028491498 0.040331693831346334 4.0000000284914989 0.079948361669991655 4.000000028491498 0.1189192402762146 4.0000000284914963 0.15730840603865617 4.0000000284914945 0.19517477497431956 4.0000000284914927 0.26009159957542605 4.0000000284914883 0.28735737998163624 4.0000000284914874 0.31439105066784651 4.0000000284914847 0.34121327308621091 4.0000000284914812 0.3678437634203911 4.0000000284914767 0.41362974765118743 4.0000000284914732 0.43286593617278202 4.0000000284914714 0.45201720358248937 4.0000000284914705 0.47109071683702353 4.000000028491467 0.49009346441766422 4.0000000284914643 0.55575021114897727 4.0000000284914563 0.60207986103999944 4.0000000284914483 0.64812199369077306 4.0000000284914394 0.69397481311246967 4.0000000284914341 0.73973393963998413 4.0000000284914252 0.82446108759627867 4.0000000284914075 0.86343020881530264 4.0000000284914004 0.90245752907488541 4.0000000284913924 0.94160195729674456 4.0000000284913844 0.98092355583843738 4.0000000284913746 1.0364986807165983 4.0000000284913613 1.0525529523052686 4.0000000284913586 1.0686504589739541 4.0000000284913559 1.0847953822804393 4.0000000284913506 1.1009919816257101 4.0000000284913462 1.1397447665432148 4.0000000284913382 1.1623523262590045 4.000000028491332 1.1850787524618662 4.0000000284913275 1.2079359475249085 4.0000000284913222 1.2309362371338048 4.0000000284913169 1.2857348866615157 4.0000000284913027 1.3176686117507981 4.0000000284912955 1.349925891188408 4.0000000284912876 1.3825413550512533 4.0000000284912787 1.4155519178593841 4.0000000284912716 1.4688588879069873 4.00000002849126 1.4888742421535313 4.0000000284912556 1.5090510943873925 4.0000000284912494 1.5293981027756851 4.0000000284912458 1.5499243305808665 4.0000000284912405 1.6408434902190929 4.0000000284911756 1.708883593829094 4.0000000284911028 1.7751206161214728 4.0000000284910664 1.839869846366823 4.0000000284909909 1.9034077472051065 4.0000000284909589 2.0329778475811291 4.0000000284908692 2.0988765714583568 4.0000000284908133 2.1639699685170104 4.0000000284907937 2.2285401828752365 4.0000000284907538 2.2928552071033992 4.0000000284907351 2.4216894779187479 4.0000000284907022 2.4862178214326205 4.0000000284906898 2.5510091602041225 4.0000000284906916 2.6163342637231271 4.0000000284906907 2.6824784378774975 4.0000000284907031 2.8117757824448586 4.0000000284907351 2.8747689922720108 4.0000000284907564 2.9389583089318192 4.0000000284907831 3.0046134208773214 4.0000000284908177 3.072041036761989 4.0000000284908506 3.1415926541247656 4.0000000284908959 + 0 7 0.069462275837930798 5 0.12057728851767517 5 0.15791917678454734 5 0.25003361415882819 5 0.32847981682716776 5 0.36023734053369499 5 0.40420256653312747 5 0.46428042660867785 5 0.49995923052356572 5 0.62086296467429924 5 0.75032888974570622 5 0.88021336582464671 5 1 7 +7 0 0 6 67 14 70.000320320057327 5.9999718920691967 69.782452378644578 5.9999719375878797 69.564515595645602 5.99047849114356 69.347037981654879 5.9714808911730808 69.13054361616112 5.9430078451360799 68.915552647547088 5.90512742951499 68.545862650042039 5.8232286324500322 68.390236662393335 5.7834740467457957 68.235908498563234 5.7387260999147669 68.083080032696117 5.6890385633425895 67.931949844660963 5.6344762125881234 67.67368894114459 5.5317485832239397 67.565675059114511 5.4858210288391973 67.458747605801946 5.4373616804944227 67.352981249556152 5.3864030132538296 67.248449295235034 5.3329804609806315 66.890588152452338 5.1393673797533763 66.643897150994974 4.9868398569834236 66.406238380770716 4.8201317279770928 66.178627904489502 4.6399214256547241 65.962010146633375 4.4469839359070908 65.582887328017634 4.0677856260237855 65.417117686601017 3.8847778974123144 65.260485946672631 3.6937052412216604 65.113479134661532 3.4951440531080351 64.976534325959761 3.2897094949231804 64.798829141954997 2.9923712190121297 64.749331885104382 2.9056673138366214 64.701572387384076 2.8179869370980044 64.655574655094128 2.7293740390513435 64.611361187821203 2.6398733622966031 64.510242905196066 2.4244593896649707 64.454992665160191 2.297773950628986 64.403258005329192 2.1695950731499072 64.355088810696898 2.0400459348635223 64.310529104252694 1.9092519425621923 64.213711292877136 1.5970859290516526 64.164616480183511 1.4147441221600892 64.122430095816824 1.2306416277074399 64.087228045133884 1.0451090884802459 64.059064651931919 0.85848147386431484 64.025446618222773 0.55981556583623626 64.015414522894218 0.4482662352103719 64.007883183227179 0.33652097660829389 64.002856648279717 0.22465080740131835 64.000336205403855 0.11272687369091254 64.000266743169831 -0.37839362016812661 64.028973789300892 -0.75783728930889716 64.086505761649676 -1.1346947998467831 64.172538698969362 -1.5062205485345546 64.286429591521411 -1.8697267557321675 64.577842993323415 -2.6004559212679248 64.759320398166736 -2.9661685779704334 64.970338796182702 -3.3165087029717295 65.209220040580149 -3.6485301761612083 65.473938241309327 -3.9595142329495263 66.051073391315214 -4.5354648768641859 66.363683670094588 -4.8003212466562033 66.697405752650312 -5.0391215462420158 67.049489088420771 -5.2498273697769697 67.416953976332522 -5.4307529277144067 68.146612216665872 -5.7188941896517278 68.507036507951881 -5.8307635839021383 68.875263640978133 -5.915270945992356 69.248678205331643 -5.9717963693072171 69.624609663109737 -6.0000281137848566 70.000320317780918 -6.0000281079306257 + 0 7 0.069462275837930798 5 0.12057728851767517 5 0.15791917678454734 5 0.25003361415882819 5 0.32847981682716776 5 0.36023734053369499 5 0.40420256653312747 5 0.46428042660867785 5 0.49995923052356572 5 0.62086296467429924 5 0.75032888974570622 5 0.88021336582464671 5 1 7 +8 -8.6938188535674487e-10 6.0000000025925049 +7 0 0 2 3 2 3.1415926531933271 -3.9593550667616706e-10 3.1415926531933973 3.0000000013353629 3.1415926531934706 6.0000000030666678 + -8.6938188535674487e-10 3 6.0000000025925049 3 +8 -8.6938188535674487e-10 6.0000000025925049 +7 0 0 2 3 2 -4.3979825997579165e-10 -3.9583152957406455e-10 -4.3980784604161377e-10 3.0000000013354531 -4.3981933511425414e-10 6.0000000030667442 + -8.6938188535674487e-10 3 6.0000000025925049 3 +7 0 0 7 538 90 3.0461362562498495 5.0886194372126647 3.0461361733659627 5.080864574549504 3.0461360905759816 5.0731097118867741 3.0461360078921205 5.0653548492240201 3.0461359253209399 5.0575999865609953 3.046135842863344 5.0498451238976614 3.0461357605145833 5.0420902612341871 3.0461355895546398 5.0259715314410176 3.0461355009661952 5.0176076643110745 3.0461354125009739 5.0092437971811163 3.0461353241612694 5.0008799300511431 3.0461352359496123 4.9925160629211529 3.0461351478687715 4.9841521957911468 3.046134978120302 4.9680089122192328 3.0461348964410648 4.9602294957773259 3.0461348148757614 4.9524500793354056 3.0461347334198137 4.9446706628934711 3.0461346520723471 4.9368912464515207 3.0461345708361898 4.929111830009556 3.0461344025053116 4.9129685464376323 3.0461343154229406 4.9046046793076625 3.0461342284731496 4.8962408121776795 3.0461341416583658 4.8878769450476804 3.0461340549810578 4.8795130779176663 3.0461339684437383 4.8711492107876353 3.0461337956541734 4.8544214765276186 3.0461337094076364 4.8460576093976417 3.0461336233018619 4.8376937422676471 3.0461335373329361 4.8293298751376339 3.0461334515005096 4.8209660080076011 3.046133365807794 4.8126021408775523 3.0461331948485144 4.7958874263641977 3.0461331095727213 4.7875365789808786 3.0461330244429616 4.7791857315975417 3.0461329394641501 4.7708348842141906 3.0461328546373427 4.762484036830827 3.04613276995974 4.7541331894474448 3.0461326094346672 4.7382756213461059 3.046132533565646 4.7307689006281572 3.0461324578160069 4.7232621799101944 3.0461323821858128 4.7157554591922191 3.0461323066768 4.7082487384742313 3.0461322312923835 4.7007420177562285 3.04613207232057 4.6848844496548834 3.0461319887520162 4.6765336022715456 3.0461319053432625 4.6681827548881847 3.0461318220997469 4.6598319075048051 3.0461317390210811 4.6514810601214078 3.0461316561010419 4.6431302127379892 3.0461314932570693 4.6267012136952292 3.046131413325071 4.6186230620358799 3.0461313335442992 4.6105449103765128 3.0461312539222365 4.6024667587171297 3.0461311744611299 4.5943886070577333 3.046131095157989 4.5863104553983192 3.0461309340516194 4.5698684366088518 3.0461308522656547 4.5615045694787986 3.0461307706475962 4.5531407023487267 3.0461306891986561 4.5447768352186371 3.0461306079203601 4.5364129680885314 3.0461305268145407 4.5280491009584072 3.0461303649521514 4.5113213666982066 3.0461302842009559 4.502957499568141 3.0461302036221682 4.4945936324380567 3.0461301232130462 4.486229765307951 3.046130042975701 4.4778658981778259 3.0461299629170933 4.4695020310476776 3.0461298060336608 4.4530730320048102 3.0461297291922063 4.4450079000920946 3.0461296525202957 4.4369427681793576 3.0461295760160754 4.4288776362665994 3.0461294996802262 4.4208125043538207 3.0461294235159548 4.4127473724410233 3.0461292687274719 4.396318373398131 3.0461291901152281 4.387954506268029 3.0461291116916738 4.3795906391379065 3.0461290334574316 4.3712267720077636 3.0461289554143454 4.3628629048775993 3.0461288775654825 4.354499037747412 3.046128722264783 4.3377713034871084 3.0461286448106644 4.3294074363569885 3.0461285675555749 4.3210435692268483 3.0461284905013359 4.3126797020966849 3.0461284136487876 4.3043158349665012 3.0461283369977914 4.2959519678362952 3.0461281894388841 4.2798086842640046 3.0461281185028888 4.2720292678219218 3.0461280477439998 4.2642498513798186 3.046127977165733 4.2564704349376976 3.0461279067703737 4.248691018495558 3.0461278365589735 4.2409116020533988 3.0461276912427016 4.2247683184810825 3.0461276161671629 4.2164044513509245 3.0461275413064426 4.2080405842207425 3.0461274666621101 4.1996767170905391 3.0461273922355994 4.1913128499603145 3.0461273180282049 4.1829489828300659 3.0461271700539636 4.1662212485696362 3.0461270962908644 4.1578573814394577 3.0461270227509218 4.1494935143092553 3.0461269494346506 4.1411296471790298 3.0461268763439482 4.1327657800487794 3.0461268034820961 4.124401912918505 3.0461266608195134 4.1079729138753951 3.0461265909951045 4.0999077819625631 3.0461265213896529 4.0918426500497089 3.0461264520084321 4.083777518136829 3.0461263828528642 4.0757123862239242 3.0461263139205172 4.0676472543109954 3.0461261739444683 4.05121825526785 3.0461261029250686 4.0428543881376271 3.0461260321461161 4.0344905210073811 3.0461259616091048 4.0261266538771077 3.0461258913178257 4.0177627867468093 3.0461258212783653 4.0093989196164852 3.046125681719841 3.992671185355916 3.0461256122006879 3.9843073182256665 3.0461255429387797 3.9759434510953926 3.0461254739328494 3.9675795839650925 3.0461254051832318 3.9592157168347675 3.0461253366918588 3.9508518497044181 3.0461252002326709 3.9341241154437938 3.0461251322594896 3.9257602483135217 3.0461250645513398 3.9173963811832229 3.0461249971145508 3.9090325140528974 3.0461249299531654 3.9006686469225462 3.0461248630689353 3.892304779792167 3.0461247298537124 3.8755770455314882 3.0461246635201182 3.8672131784011903 3.0461245974688724 3.8588493112708662 3.0461245317048005 3.8504854441405123 3.0461244662292208 3.84212157701013 3.0461244010399495 3.8337577098797202 3.0461242735410101 3.8173287108363567 3.0461242112060796 3.8092635789233995 3.0461241491468085 3.8011984470104152 3.0461240873743947 3.7931333150974065 3.0461240258909266 3.7850681831843711 3.0461239646893836 3.7770030512713109 3.0461238405608131 3.7605740522278919 3.0461237776579582 3.7522101850975349 3.0461237150623992 3.7438463179671504 3.0461236527847215 3.7354824508367366 3.0461235908287714 3.727118583706293 3.0461235291916582 3.718754716575821 3.0461234065358416 3.702026982314965 3.0461233455176902 3.6936631151845809 3.0461232848235738 3.6852992480541671 3.0461232244620251 3.6769353809237231 3.0461231644358335 3.6685715137932493 3.0461231047420467 3.6602076466627458 3.0461229860018859 3.6434799124018258 3.0461229269582986 3.6351160452714053 3.0461228682520898 3.6267521781409546 3.0461228098908757 3.6183883110104764 3.0461227518790106 3.6100244438799689 3.0461226942175803 3.6016605767494299 3.0461225796804423 3.5849458622351036 3.0461225228084245 3.5765950148513226 3.0461224662901958 3.5682441674675118 3.0461224101284397 3.5598933200836691 3.0461223543266738 3.5515424726997913 3.0461222988892507 3.5431916253158842 3.0461221924357895 3.5270483417428986 3.0461221413693935 3.5192559055538153 3.0461220906285482 3.5114634693647035 3.0461220402177056 3.5036710331755678 3.0461219901393894 3.4958785969864055 3.0461219403941966 3.4880861607972173 3.0461218379438386 3.4719298574775053 3.0461217852860338 3.46356599034698 3.0461217330204398 3.4552021232164236 3.0461216811560163 3.4468382560858362 3.0461216296976228 3.438474388955215 3.0461215786460265 3.4301105218245631 3.0461214774286001 3.4133958073100148 3.0461214272744273 3.4050449599261192 3.0461213775288987 3.3966941125421903 3.0461213281913828 3.3883432651582313 3.0461212792670875 3.3799924177742393 3.0461212307670609 3.3716415703902172 3.0461211345744021 3.3549268558755823 3.0461210868817625 3.346562988744973 3.0461210396248761 3.3381991216143336 3.0461209928029112 3.3298352544836596 3.0461209464196068 3.3214713873529504 3.0461209004832739 3.3131075202222102 3.0461208095303087 3.2963797859608155 3.0461207645149568 3.288015918830161 3.0461207199566802 3.279652051699474 3.0461206758564612 3.2712881845687534 3.0461206322203211 3.2629243174379985 3.0461205890593228 3.2545604503072125 3.0461205037198105 3.2378327160457259 3.0461204615440249 3.2294688489150238 3.0461204198517078 3.2211049817842903 3.0461203786404281 3.2127411146535221 3.046120337915823 3.2043772475227223 3.0461202976916013 3.1960133803918906 3.0461202182874803 3.1792856461303041 3.0461201791099604 3.1709217789995483 3.0461201404423233 3.162557911868761 3.0461201022805988 3.1541940447379413 3.0461200646315056 3.1458301776070892 3.0461200275124503 3.1374663104762059 3.046119955696466 3.1210373114318912 3.0461199209628194 3.1129721795184637 3.0461198867336843 3.1049070476050069 3.0461198530029963 3.0968419156915203 3.0461198197755266 3.0887767837780018 3.0461197870668864 3.0807116518644548 3.0461197226882319 3.0645683682907623 3.0461196910188808 3.0564902166306118 3.0461196598810978 3.0484120649704338 3.046119629271677 3.0403339133102265 3.0461195991985712 3.0322557616499899 3.0461195696808896 3.0241776099897266 3.0461195107936265 3.0077355911985326 3.0461194814541837 2.9993717240676068 3.0461194527293292 2.9910078569366489 3.0461194246207195 2.98264398980566 3.0461193971329115 2.9742801226746391 3.046119370273364 2.9659162555435872 3.0461193178723325 2.9492015410282102 3.0461192923166336 2.9408506936438803 3.0461192674100075 2.9324998462595202 3.0461192431691946 2.9241489988751312 3.0461192196030202 2.915798151490713 3.0461191967123886 2.9074473041062663 3.0461191522335378 2.8907325895907472 3.0461191306596587 2.8823687224596788 3.0461191097768294 2.8740048553285824 3.046119089593581 2.8656409881974567 3.0461190701187943 2.857277121066303 3.0461190513617011 2.848913253935121 3.0461190153020676 2.8321855196727959 3.0461189979991845 2.8238216525416475 3.046118981430368 2.8154577854104743 3.0461189656046295 2.8070939182792753 3.0461189505328647 2.798730051148052 3.0461189362278516 2.7903661840168041 3.0461189091806475 2.7736384497543227 3.0461188964613046 2.7652745826230913 3.0461188845192178 2.7569107154918369 3.0461188733468951 2.7485468483605611 3.0461188629563543 2.7401829812292635 3.0461188533791215 2.7318191140979446 3.0461188362645522 2.7153901150527 3.0461188286504601 2.7073249831387751 3.0461188218197486 2.6992598512248334 3.0461188157739314 2.6911947193108738 3.0461188105202437 2.6831295873968988 3.0461188060716409 2.6750644554829073 3.046118798816114 2.6589211719082373 3.0461187959938241 2.6508430202475592 3.0461187940087351 2.6427648685868657 3.0461187928814621 2.6346867169261605 3.0461187926244286 2.6266085652654447 3.046118793241869 2.6185304136047156 3.0461187962704175 2.6020883948124642 3.0461187987401988 2.5937245276809393 3.0461188021779257 2.5853606605494046 3.0461188066084057 2.5769967934178619 3.0461188120425029 2.5686329262863139 3.0461188184771335 2.5602690591547601 3.0461188333134102 2.5435413248915646 3.0461188417117522 2.5351774577599242 3.0461188511407209 2.5268135906282794 3.0461188616345072 2.5184497234966359 3.0461188732110736 2.5100858563649942 3.0461188858721515 2.5017219892333538 3.0461189133129585 2.485007274716601 3.0461189281141481 2.4766564273314944 3.0461189440159591 2.4683055799463927 3.0461189610318149 2.4599547325612972 3.0461189791794143 2.4516038851762105 3.046118998480734 2.4432530377911346 3.0461190394752533 2.4265383232741491 3.0461190611833757 2.4181744561422467 3.0461190840777954 2.4098105890103594 3.0461191081639818 2.4014467218784867 3.0461191334614708 2.3930828547466296 3.0461191600038653 2.3847189876147965 3.0461192147229483 2.3682769688216783 3.0461192428294388 2.3601988171603812 3.0461192721281214 2.3521206654991111 3.0461193026130937 2.3440425138378713 3.0461193343027402 2.3359643621766644 3.0461193672397324 2.3278862105154916 3.0461194369537545 2.3114441917220852 3.0461194737892106 2.3030803245898519 3.0461195120189761 2.2947164574576635 3.0461195516634096 2.2863525903255248 3.0461195927416531 2.2779887231934408 3.04611963527163 2.2696248560614132 3.0461197201939396 2.2534815724851884 3.046119762393356 2.2457021560409869 3.046119805883436 2.2379227395968413 3.0461198506845366 2.2301433231527539 3.0461198968222263 2.2223639067087286 3.0461199443272897 2.2145844902647709 3.0461200458185438 2.198441206688186 3.0461201000050648 2.1900773395555579 3.0461201558285089 2.1817134724230196 3.0461202133162075 2.1733496052905799 3.0461202724895999 2.1649857381582436 3.0461203333642279 2.1566218710260117 3.0461204585352539 2.1398941367609035 3.0461205228329291 2.1315302696280454 3.0461205888954539 2.1231664024953067 3.0461206567671577 2.1148025353626889 3.0461207264840127 2.1064386682301985 3.04612079807363 2.0980748010978494 3.0461209449225124 2.081360086579024 3.0461210201846876 2.0730092391925377 3.0461210973737551 2.0646583918062067 3.0461211765223366 2.0563075444200409 3.0461212576637053 2.0479566970340484 3.046121340831788 2.0396058496482374 3.0461215114234199 2.0228911351289809 3.0461215988441452 2.0145272679955353 3.0461216883763131 2.0061634008622926 3.046121780067057 1.9977995337292636 3.0461218739576692 1.9894356665964585 3.0461219700836 1.98107179946389 3.0461221668653207 1.9643440651975241 3.0461222675269313 1.9559801980637268 3.0461223705066192 1.9476163309301906 3.0461224758503493 1.9392524637969277 3.0461225836027244 1.9308885966639511 3.0461226938069892 1.9225247295312771 3.0461229192030603 1.9057969952643978 3.0461230344290695 1.8974331281301988 3.0461231521879513 1.8890692609963309 3.0461232725104375 1.8807053938628064 3.046123395453094 1.8723415267296437 3.0461235210983211 1.863977659596866 3.0461237780103838 1.8472499253294237 3.0461239092625059 1.8388860581947442 3.0461240433323682 1.8305221910604901 3.0461241802572192 1.8221583239266848 3.0461243200899193 1.8137944567933491 3.0461244628989319 1.8054305896605014 3.0461247439905201 1.7893133455742778 3.0461248817817967 1.7815599686208277 3.0461250222650724 1.7738065916678423 3.0461251655234372 1.7660532147153505 3.0461253116001581 1.7582998377633732 3.0461254604986823 1.7505464608119212 3.0461257744045658 1.734507335204704 3.0461259398469402 1.726221586549016 3.0461261086596987 1.7179358378939875 3.0461262809525778 1.709650089239664 3.0461264567951036 1.7013643405860761 3.0461266362166 1.6930785919332467 3.0461270022834066 1.6765070946243152 3.0461271890748134 1.6682213459682658 3.0461273796176358 1.659935597313053 3.046127573976126 1.6516498486587068 3.0461277722415501 1.643364100005271 3.0461279745321908 1.6350783513528027 3.0461283872959903 1.6185068540437879 3.0461285978284747 1.6102211053872426 3.0461288125932566 1.6019353567317671 3.0461290316363905 1.5936496080774025 3.0461292550475245 1.5853638594242019 3.0461294829599006 1.5770781107722294 3.0461299480742801 1.5605066134630887 3.0461301852103153 1.5522208648059039 3.0461304270910814 1.5439351161500796 3.0461306738353082 1.5356493674956855 3.0461309255478328 1.5273636188427895 3.046131182319598 1.5190778701914571 3.0461317062347568 1.5025063728821109 3.0461319733954193 1.4942206242241054 3.046132245890941 1.4859348755678325 3.0461325238806696 1.4776491269133885 3.0461328075020053 1.4693633782608653 3.0461330968703986 1.4610776296103534 3.0461336770800425 1.4447918477720505 3.046133967631961 1.4367918145841609 3.0461342638380384 1.4287917813983488 3.0461345658216472 1.4207917482147085 3.0461348737265963 1.4127917150333484 3.046135187717137 1.404791681854394 3.0461358396982305 1.3885059000148519 3.0461361780271128 1.3802201513543924 3.0461365232372124 1.3719344026967886 3.0461368755590827 1.3636486540422115 3.0461372351812259 1.35536290539082 3.046137602250091 1.3470771567427622 3.0461383516398981 1.3305056594323308 3.0461387340504436 1.3222199107700023 3.0461391243308245 1.3139341621113789 3.0461395227207775 1.3056484134566679 3.0461399294706628 1.2973626648060956 3.0461403448414628 1.2890769161599063 3.0461411786253612 1.2727911343207023 3.0461415965392304 1.2647911011274271 3.0461420229651823 1.2567910679387022 3.0461424580910923 1.2487910347547448 3.0461429021739113 1.2407910015758221 3.0461433555396704 1.2327909684022529 3.0461442979875293 1.2165051865600669 3.0461447876134349 1.2082194378917646 3.0461452878740549 1.1999336892299177 3.0461457991210033 1.191647940574921 3.0461463216446458 1.1833621919271429 3.0461468556740994 1.1750764432869278 3.0461479478163018 1.1585049459735879 3.0461485058589566 1.150219197300443 3.0461490761813512 1.1419334486358159 3.046149659365514 1.1336476999803387 3.0461502558993527 1.1253619513346202 3.0461508661766534 1.1170762026992473 3.0461521147561079 1.1005047053836972 3.0461527533668389 1.0922189567037417 3.0461534066569342 1.0839332080354633 3.0461540750680984 1.0756474593795491 3.0461547591560767 1.0673617107368258 3.0461554595906581 1.0590759621082635 3.046156894480383 1.0425044647898716 3.0461576288515846 1.0342187160999978 3.0461583807771047 1.0259329674262192 3.0461591508595274 1.0176472187695691 3.046159939796202 1.0093614701312428 3.0461607483792412 1.0010757215125996 3.0461624065045663 0.98450422418946359 3.0461632559872669 0.97621847548493446 3.0461641267048134 0.96793272680297804 3.0461650194839884 0.95964697814517996 3.0461659352171679 0.95136122951331026 3.0461668748623203 0.94307548090932192 3.0461687375930184 0.92707541453473163 3.0461696574226944 0.91936109676029221 3.0461705996785917 0.91164677901362168 3.0461715652251824 0.90393246129661919 3.046172555044858 0.89621814361149299 3.0461735702379249 0.88850382596076116 3.0461757306557051 0.87250375954618575 3.0461768799669069 0.86421801078809324 3.0461780611514135 0.85593226207599271 3.0461792755806849 0.84764651341346109 3.0461805248024385 0.83936076480463562 3.0461818105406553 0.83107501625421065 3.0461844589877458 0.8145035188924844 3.0461858213722368 0.80621777008078932 3.0461872239296999 0.79793202133792318 3.0461886687836177 0.78964627267006959 3.0461901581003024 0.7813605240840259 3.0461916940888929 0.7730747755872035 3.0461948641603223 0.75650327818914265 3.0461964986840386 0.74821752928907315 3.0461981849026682 0.73993178049536013 3.0461999255360719 0.73164603181779986 3.0462017236938084 0.72336028326804303 3.0462035828751364 0.71507453485959505 3.0462074305449804 0.69850303739549147 3.0462094191008151 0.69021728834063167 3.0462114760011962 0.68193153945703688 3.0462136051452302 0.6736457907618415 3.046215810966455 0.66536004227551382 3.0462180984328344 0.65707429402185624 3.0462226838083688 0.64107422750638521 3.0462249703233222 0.63335990921164964 3.0462273367679082 0.6256455911645098 3.0462297879323024 0.61793127339064158 3.0462323292205746 0.61021695592068614 3.0462349666506841 0.60250263879025012 3.0462405485502413 0.58678828734639121 3.0462435009919888 0.57878825306486792 3.0462465712714608 0.57078821923793199 3.0462497676541451 0.56278818592040769 3.046253099579284 0.55478815317934571 3.0462565776598725 0.54678812109402442 3.0462639794293538 0.53050233802682512 3.0462679147169922 0.52221658710706442 3.0462720325441537 0.51393083709313936 3.0462763481505499 0.50564508811440467 3.0462808790170266 0.49735934033309792 3.0462856448655677 0.48907359394434102 3.0462956908499437 0.47250209401142246 3.0463009732163515 0.46421634050848165 3.0463065361388999 0.45593058887082599 3.046312406428874 0.44764483940348193 3.046318616328461 0.43935909251299216 3.046325203510746 0.43107334870741554 3.0463372847909893 0.41678757628733998 3.0463425803833029 0.41078754595282824 3.0463481135014883 0.40478751781146077 3.0463539030892561 0.39878749216283671 3.0463599713892058 0.39278746938748449 3.046366343942819 0.38678744994686293 3.0463813502019415 0.37335880668958671 3.0463901660839769 0.36593018516215309 3.0463995461502593 0.35850157058091581 3.0464095563973808 0.35107296433647578 3.0464202799048303 0.34364436843017848 3.0464318168349975 0.33621578547411363 3.0464644387808968 0.31678687617676676 3.0464869745164043 0.30478659088939031 3.0465125589009423 0.29278635865538061 3.0465418027974271 0.28078619658029524 3.0465756658241787 0.2687861548923588 3.0466158615086565 0.25678632878596547 3.0466923388740086 0.23821471385593457 3.0467221728855494 0.23164269750747582 3.0467553546988979 0.22507082997256139 3.0467925038540273 0.21849915816350726 3.0468345055867467 0.21192778243087743 3.0468827472076394 0.20535687184217008 3.0470085006488623 0.19077025153946503 3.0470896801482112 0.18275886684715412 3.0471889641779808 0.17474813091152444 3.0473076202939926 0.16673649537841906 3.0474657054506089 0.15873074018744635 3.0476668581591473 0.15073766539992328 3.0481526581481981 0.13890974644699777 3.0483409455356845 0.13507289748822579 3.0485676166416957 0.13124171108278737 3.048851894262036 0.12742601178207796 3.0492104093882033 0.1236658899178138 3.0496960674240041 0.12007401015787249 3.0503551833457485 0.1167863393304267 3.0507309613369449 0.11478633103457112 3.051339242776582 0.11278632273871558 3.0519549997436397 0.11078631444286002 3.0524679820770109 0.10878630614700446 3.0528827173755033 0.1067862978511489 3.0533185109978396 0.10478628955529334 3.0540094460626546 0.10278628125943778 3.0544300127394566 0.10078627296358222 3.0551436322458341 0.098786264667726664 3.0559935489460655 0.096786256371871104 3.0567701405339855 0.094786248076015545 3.0572109180329794 0.092786239780159985 3.0570005257959889 0.090786231484304411 3.055770741505508 0.088786223188448865 + 0 8 0.010681794548197362 6 0.022202451223878795 6 0.032918066927829642 6 0.044438723603284838 6 0.055959380278620144 6 0.067462103140541504 6 0.077802099078170331 6 0.089304821939833925 6 0.10043192503550971 6 0.11195258171018221 6 0.12347323838470914 6 0.13458240766668911 6 0.14610306434093442 6 0.15762372101502192 6 0.16833933671745172 6 0.1798599933912306 6 0.19138065006484678 6 0.20248981934592852 6 0.21401047601921899 6 0.2255311326923333 6 0.23705178936526533 6 0.2485724460380114 6 0.25968161531823036 6 0.2712022719906037 6 0.28272292866277887 6 0.29424358533475953 6 0.30574630819327081 6 0.31647985770679365 6 0.32800051437818317 6 0.33950323723609532 6 0.35102389390708066 6 0.36254455057786783 6 0.37406520724845432 6 0.38558586391884508 6 0.39669503319680149 6 0.40782213628785391 6 0.41934279295771859 6 0.4308455158141673 6 0.44236617248373955 6 0.4538868291531919 6 0.46540748582255492 6 0.47651665509965224 6 0.48764375818998829 6 0.49916441485931651 6 0.51068507152873888 6 0.52218779438509344 6 0.53370845105498044 6 0.54483555414627138 6 0.55635621081708586 6 0.56707182651726773 6 0.57859248318964751 6 0.59011313986319691 6 0.60161586272500667 6 0.61313651940194791 6 0.6246571760812748 6 0.63617783276359174 6 0.64769848944965103 6 0.65837823754103308 6 0.66979129135728077 6 0.68120434518023221 6 0.69261739901150965 6 0.70403045285346777 6 0.71544350670923207 6 0.7264630070003919 6 0.73787606089563706 6 0.74928911482044025 6 0.76030861519792226 6 0.77172166920979224 6 0.78313472329069178 6 0.7945477774631774 6 0.80596083176126854 6 0.81737388623558549 6 0.82799983372944586 6 0.83941288879209319 6 0.85082594439033388 6 0.86223900081547533 6 0.87365205855875416 6 0.88427801083175206 6 0.89529752034720123 6 0.90671059063940029 6 0.91812367526188332 6 0.92638834146503979 6 0.93662083621902159 6 0.95315073391117655 6 0.96220423513975339 6 0.97325062750164748 6 0.97863641090360542 7 0.98931820545180282 7 1 8 +7 0 0 7 538 90 0.060414556324855033 -5.0000103999999999 0.060414466280877717 -4.9922555372391404 0.060414376168695036 -4.984500674478042 0.06041428598853902 -4.9767458117169365 0.060414195740585611 -4.9689909489559501 0.060414105424954637 -4.9612360861951021 0.060414015041709769 -4.9534812234343084 0.060413827036725896 -4.9373624934380897 0.060413729404777974 -4.9289986262027901 0.06041363169369502 -4.9206347589674779 0.060413533902004435 -4.9122708917321507 0.060413436028080879 -4.9039070244968119 0.060413338070146212 -4.8955431572614581 0.060413148833507332 -4.8793998734862098 0.060413057562258912 -4.87162045694632 0.060412966217840869 -4.8638410404064185 0.0604128748031924 -4.8560616238665038 0.060412783318875347 -4.8482822073265766 0.060412691763074268 -4.8405027907866369 0.060412501616044119 -4.8243595070114083 0.060412403016882818 -4.8159956397761103 0.060412304332577847 -4.8076317725407973 0.060412205561569024 -4.7992679053054719 0.060412106702270534 -4.790904038070134 0.060412007753070839 -4.7825401708347828 0.060411809671594825 -4.7658124363641301 0.060411710535652509 -4.7574485691288357 0.060411611309309721 -4.749084701893528 0.060411511995081012 -4.7407208346582035 0.060411412593191542 -4.732356967422862 0.060411313101577102 -4.7239931001875082 0.060411114085212915 -4.7072783854637112 0.060411014566390489 -4.6989275379752566 0.060410914953783555 -4.6905766904867852 0.060410815244236006 -4.6822258429983039 0.060410715437068836 -4.6738749955098111 0.060410615534080205 -4.6655241480213032 0.060410425652733801 -4.6496665797203418 0.060410335688215758 -4.6421598589078998 0.060410245647029064 -4.6346531380954445 0.060410155529134472 -4.6271464172829777 0.060410065333415787 -4.6196396964705011 0.06040997505767981 -4.6121329756580138 0.06040978417880994 -4.5962754073570755 0.060409683563574561 -4.5879245598686298 0.060409582845713683 -4.5795737123801654 0.060409482021734531 -4.5712228648916868 0.060409381091888245 -4.5628720174031923 0.060409280060169712 -4.5545211699146808 0.060409081110715988 -4.538092170665168 0.06040898319816148 -4.5300140189041622 0.060408885188486763 -4.5219358671431413 0.060408787076886745 -4.513857715382108 0.060408688861918733 -4.5057795636210614 0.060408590545502454 -4.4977014118599987 0.060408390239591221 -4.4812593928636479 0.060408288239008838 -4.4728955256283616 0.060408186130594607 -4.4645316583930565 0.06040808391357004 -4.4561677911577382 0.060407981586956448 -4.4478039239224065 0.06040787914957501 -4.4394400566870589 0.060407674050518244 -4.4227123222164195 0.060407571385391566 -4.4143484549811376 0.060407468609542166 -4.4059845877458406 0.06040736572473019 -4.3976207205105249 0.060407262729600272 -4.3892568532751897 0.060407159619681523 -4.3808929860398385 0.060406956842278293 -4.3644639867903274 0.060406857185471952 -4.3563988547761703 0.060406757419782291 -4.3483337227619954 0.060406657546398075 -4.3402685907478036 0.060406557564883293 -4.3322034587335958 0.060406457473177001 -4.324138326719372 0.060406253350361094 -4.3077093274698735 0.060406149311564308 -4.2993454602345933 0.060406045151588164 -4.2909815929992954 0.060405940870032822 -4.2826177257639788 0.060405836465713417 -4.2742538585286471 0.060405731936660094 -4.2658899912932968 0.060405522623576055 -4.249162256822669 0.060405417841010452 -4.2407983895873951 0.060405312930624164 -4.2324345223521025 0.060405207891248688 -4.2240706551167904 0.060405102722344138 -4.2157067878814596 0.060404997423999275 -4.2073429206461102 0.060404793936901145 -4.1911996368708895 0.060404695766184603 -4.1834202203310165 0.060404597481728203 -4.1756408037911257 0.060404499081271421 -4.1678613872512225 0.060404400563346838 -4.1600819707113041 0.060404301927280142 -4.1523025541713681 0.06040409699991952 -4.1361592703961607 0.060403990689786455 -4.1277954031608894 0.060403884241693226 -4.1194315359255977 0.060403777654630827 -4.1110676686902883 0.060403670927679058 -4.1027038014549584 0.060403564060006416 -4.0943399342196098 0.060403350041733958 -4.07761219974899 0.060403242888727261 -4.0692483325137223 0.060403135592405288 -4.0608844652784351 0.060403028152436089 -4.0525205980431256 0.060402920567600563 -4.0441567308077975 0.060402812835792477 -4.0357928635724489 0.06040260092549609 -4.019363864322953 0.060402496762214965 -4.0112987323088065 0.060402392458313837 -4.0032336002946414 0.060402288010405689 -3.9951684682804554 0.060402183417577714 -3.9871033362662502 0.060402078681391261 -3.9790382042520243 0.060401865045748106 -3.9626092050025394 0.060401756130681973 -3.9542453377672762 0.060401647061196197 -3.9458814705319916 0.060401537836329858 -3.9375176032966865 0.060401428453648522 -3.9291537360613598 0.060401318909244127 -3.920789868826013 0.0604010994862259 -3.9040621343554052 0.060400989607668258 -3.8956982671201428 0.060400879563903005 -3.8873343998848591 0.060400769355743442 -3.8789705326495536 0.060400658982975121 -3.8706066654142282 0.060400548444356036 -3.8622427981788832 0.060400327030876874 -3.8455150637082767 0.060400216159463622 -3.8371511964730187 0.06040010511784101 -3.828787329237739 0.060399993901943526 -3.8204234620024371 0.060399882509175974 -3.8120595947671134 0.060399770938413318 -3.8036957275317675 0.060399547441588389 -3.7869679930611673 0.060399435517196905 -3.778604125825912 0.060399323411475345 -3.7702402585906349 0.060399211121324181 -3.7618763913553344 0.060399098645895384 -3.7535125241200111 0.060398985986592449 -3.7451486568846657 0.060398764337877664 -3.7287196576351884 0.06039865536468831 -3.7206545256210526 0.060398546214463895 -3.7125893936068946 0.06039843688001454 -3.7045242615927174 0.060398327359998942 -3.6964591295785199 0.060398217658924405 -3.6883939975643014 0.060397993845681362 -3.6719649983148295 0.06039787971798901 -3.6636011310795782 0.060397765392944017 -3.6552372638443056 0.060397650863748376 -3.6468733966090072 0.060397536127931729 -3.6385095293736849 0.060397421187351398 -3.6301456621383394 0.060397190909033456 -3.6134179276677512 0.060397075570942017 -3.6050540604325065 0.06039696002474805 -3.5966901931972379 0.06039684426497062 -3.5883263259619449 0.060396728289817812 -3.5799624587266288 0.060396612101186811 -3.5715985914912887 0.060396379308140895 -3.5548708570207066 0.060396262701936612 -3.5465069897854611 0.060396145879060267 -3.5381431225501916 0.060396028834618969 -3.5297792553148994 0.060395911565817681 -3.5214153880795851 0.060395794071959115 -3.5130515208442463 0.060395558820175478 -3.4963368061204951 0.060395441059881518 -3.4879859586320889 0.060395323072374822 -3.4796351111436592 0.06039520485593227 -3.4712842636552041 0.060395086408294843 -3.4629334161667233 0.060394967726667581 -3.4545825686782181 0.060394737840739766 -3.4384392849030405 0.060394626668781662 -3.4306468486163659 0.060394515287746371 -3.4228544123296691 0.060394403694773793 -3.4150619760429519 0.060394291888242822 -3.4072695397562152 0.060394179867771187 -3.3994771034694575 0.060393947170406317 -3.3833207999474659 0.060393826463095365 -3.3749569327122311 0.060393705503897208 -3.3665930654769709 0.060393584287057843 -3.3582291982416868 0.060393462809454776 -3.3498653310063786 0.060393341070596976 -3.3415014637710456 0.060393097264562878 -3.3247867490473131 0.06039297518990043 -3.3164359015589135 0.060392852852795754 -3.3080850540704896 0.060392730253655505 -3.2997342065820408 0.060392607389134878 -3.2913833590935702 0.06039248425213746 -3.2830325116050743 0.060392237219069549 -3.2663177968813453 0.060392113323003496 -3.2579539296461149 0.060391989147086031 -3.2495900624108613 0.060391864691850712 -3.2412261951755812 0.060391739954895947 -3.2328623279402757 0.060391614930884914 -3.2244984607049463 0.060391364292206332 -3.2077707262343931 0.060391238676715552 -3.1994068589991653 0.060391112767679701 -3.1910429917639136 0.060390986564468153 -3.182679124528637 0.060390860063213266 -3.1743152572933369 0.060390733256810429 -3.1659513900580127 0.060390479013025522 -3.1492236555874649 0.060390351573893164 -3.1408597883522416 0.060390223824264282 -3.1324959211169952 0.060390095765700126 -3.1241320538817239 0.060389967394579747 -3.1157681866464286 0.060389838702100074 -3.1074043194111107 0.060389580646451682 -3.0906765849405713 0.060389451281753805 -3.0823127177053493 0.060389321589595972 -3.0739488504701042 0.060389191572527555 -3.0655849832348365 0.06038906122623363 -3.0572211159995457 0.060388930539534959 -3.0488572487642323 0.060388673129827083 -3.0324282495148069 0.060388546430397989 -3.0243631175006986 0.060388419406958001 -3.0162979854865699 0.060388292063403425 -3.0082328534724199 0.060388164396669546 -3.0001677214582485 0.060388036396730571 -2.9921025894440567 0.06038777948927003 -2.975959305668932 0.06038765058132517 -2.9678811539079963 0.060387521331992045 -2.9598030021470412 0.060387391743330639 -2.9517248503860665 0.060387261810234065 -2.9436466986250722 0.060387131520428607 -2.935568546864058 0.060386865567005413 -2.9191265278678258 0.060386729884031043 -2.9107626606326105 0.060386593806351495 -2.9023987933973743 0.060386457332903723 -2.8940349261621185 0.06038632046076068 -2.8856710589268419 0.06038618318513124 -2.8773071916915458 0.060385908027920161 -2.8605924769678643 0.060385770155465805 -2.8522416294794746 0.060385631866160416 -2.8438907819910653 0.060385493149252074 -2.83553993450264 0.060385353999073903 -2.8271890870141978 0.060385214415043922 -2.8188382395257392 0.060384934169992611 -2.8021235248020586 0.060384793499762175 -2.7937596575668411 0.06038465238572082 -2.7853957903316071 0.06038451082239011 -2.7770319230963572 0.060384368804066203 -2.7686680558610917 0.060384226324819844 -2.7603041886258119 0.060383940432173065 -2.7435764541553147 0.060383797018992935 -2.7352125869200949 0.060383653134375832 -2.7268487196848623 0.060383508772533019 -2.7184848524496172 0.060383363926467183 -2.7101209852143611 0.060383218587972541 -2.7017571179790951 0.060382926907296949 -2.6850293835086054 0.060382780550442786 -2.6766655162733848 0.060382633694413143 -2.6683016490381557 0.060382486344019472 -2.6599377818029168 0.06038233849154373 -2.6515739145676704 0.060382190116738448 -2.6432100473324174 0.060381897576297479 -2.6267810480830498 0.060381753459955244 -2.6187159160689339 0.060381608840503843 -2.6106507840548141 0.060381463716971999 -2.6025856520406916 0.060381318084713441 -2.5945205200265673 0.060381171935406749 -2.5864553880124403 0.060380878341917507 -2.5703121042373702 0.060380730907603035 -2.5622339524764248 0.060380582935615004 -2.5541558007154808 0.060380434412715268 -2.5460776489545389 0.060380285330924495 -2.5379994971936015 0.060380135687522221 -2.5299213454326681 0.060379829970072629 -2.5134793264364954 0.06037967385834353 -2.5051154592012543 0.060379517124973248 -2.4967515919660199 0.060379359754030471 -2.4883877247307966 0.060379201738538932 -2.4800238574955862 0.060379043080477278 -2.4716599902603877 0.06037872450108115 -2.4549322557899389 0.060378564581868847 -2.4465683885546903 0.060378404000759993 -2.4382045213194554 0.060378242735795715 -2.4298406540842401 0.060378080775440553 -2.4214767868490461 0.060377918118582466 -2.4131129196138739 0.06037759168475533 -2.3963982048902568 0.060377427894003431 -2.3880473574018168 0.060377263396402606 -2.3796965099134022 0.060377098183331881 -2.3713456624250155 0.060376932243423921 -2.3629948149366582 0.060376765562564987 -2.3546439674483324 0.060376430424172463 -2.3379292527247268 0.060376261957056164 -2.3295653854894538 0.060376092728066558 -2.3212015182542181 0.060375922733690621 -2.3128376510190187 0.06037575196138191 -2.3044737837838589 0.060375580389560438 -2.2961099165487453 0.060375241475034577 -2.279667897552637 0.060375074177411878 -2.2715897457916303 0.060374906114131273 -2.2635115940306725 0.060374737288982523 -2.2554334422697657 0.060374567690158351 -2.247355290508914 0.06037439729025449 -2.2392771387481205 0.060374048745570966 -2.2228351197519935 0.060373870563265909 -2.2144712525166645 0.060373691485498412 -2.2061073852814053 0.06037351149919374 -2.1977435180462215 0.060373330592058634 -2.1893796508111172 0.060373148752581332 -2.1810157835760959 0.060372795959969097 -2.1648724998011319 0.060372625130732174 -2.1570930832611817 0.060372453472595525 -2.14931366672131 0.060372280972485856 -2.1415342501815213 0.060372107613981714 -2.1337548336418179 0.060371933377313551 -2.1259754171022074 0.060371569943679544 -2.1098321333271808 0.060371380618056691 -2.1014682660917705 0.060371190241157016 -2.0931043988564788 0.060370998795427726 -2.084740531621315 0.060370806267101416 -2.0763766643862849 0.060370612646196031 -2.0680127971513906 0.060370223206833731 -2.0512850626810186 0.060370027387556306 -2.0429211954455595 0.060369830434845791 -2.0345573282102518 0.060369632320232972 -2.0261934609750969 0.060369433020616307 -2.0178295937401036 0.060369232518261852 -2.0094657265052844 0.060368829397351442 -1.9927510117817484 0.060368626776927614 -1.9844001642930209 0.060368422919002025 -1.9760493168044839 0.060368217802625357 -1.9676984693161452 0.060368011406428758 -1.9593476218280155 0.060367803708623859 -1.9509967743401049 0.060367385339497578 -1.9342820596165657 0.060367174669989823 -1.925918192380937 0.060366962644459017 -1.9175543251455491 0.060366749232635485 -1.9091904579104124 0.06036653440800032 -1.9008265906755397 0.060366318147785376 -1.8924627234409448 0.060365882718161311 -1.8757349889706063 0.060365663545012924 -1.8673711217348636 0.060365442883136486 -1.8590072544994238 0.060365220703013311 -1.8506433872642998 0.060364996975997724 -1.8422795200295066 0.060364771674317086 -1.8339156527950597 0.060364317867826416 -1.8171879183247237 0.060364089341050656 -1.8088240510888414 0.06036385918760008 -1.8004601838533365 0.060363627387738601 -1.7920963166182216 0.060363393905138514 -1.7837324493835145 0.060363158686880469 -1.7753685821492418 0.060362684640026441 -1.7586408476789104 0.060362445820879289 -1.7502769804428375 0.060362205192110663 -1.7419131132072412 0.060361962729796437 -1.7335492459721451 0.060361718399989835 -1.7251853787375706 0.06036147215872132 -1.7168215115035379 0.060360993862226424 -1.7007042672224362 0.060360762122525349 -1.6929508901752848 0.060360528653956101 -1.6851975131286465 0.06036029340315556 -1.6774441360825498 0.060360056342336717 -1.6696907590370169 0.060359817469288778 -1.6619373819920615 0.060359319541931002 -1.6458982561915314 0.060359060208237794 -1.6376125074360353 0.06035879871000286 -1.6293267586812603 0.060358534976752698 -1.6210410099272512 0.060358268963835109 -1.6127552611740423 0.060358000652419044 -1.6044695124216564 0.060357459390280081 -1.5878980149137518 0.060357186345733171 -1.5796122661582745 0.060356910891939362 -1.5713265174036997 0.060356632987634717 -1.5630407686500658 0.060356352574206011 -1.5547550198974189 0.060356069575690764 -1.5464692711458128 0.060355498323659877 -1.5298977736386574 0.060355210032042417 -1.5216120248831138 0.060354919022346458 -1.5133262761287161 0.060354625264996298 -1.5050405273755101 0.060354328702418927 -1.49675477862355 0.060354029249044004 -1.4884690298728995 0.0603534243762852 -1.47189753236656 0.060353118999269074 -1.4636117836108598 0.060352810575081781 -1.4553260348566059 0.060352499027472674 -1.4470402861038705 0.060352184289114229 -1.4387545373527224 0.060351866301602032 -1.430468788603229 0.060351223665692906 -1.4138972910977483 0.060350899006208047 -1.4056115423417688 0.060350570920562834 -1.397325793587618 0.060350239306418682 -1.389040044835395 0.060349904075535719 -1.3807542960851944 0.06034956515377278 -1.3724685473371088 0.060348891643090354 -1.3561827653072294 0.060348557239981185 -1.3481827320253341 0.060348219205655078 -1.3401826987456189 0.060347877460880897 -1.3321826654681777 0.060347531913301368 -1.3241826321931218 0.060347182457432938 -1.3161825989205806 0.060346462853661069 -1.2998968168907543 0.06034609248847983 -1.2916110681336086 0.060345717704045752 -1.2833253193794423 0.06034533835229159 -1.2750395706284265 0.060344954312159194 -1.2667538218807242 0.060344565489599579 -1.2584680731364899 0.060343778049312284 -1.2418965756339844 0.060343379374036443 -1.2336108268757704 0.060342975644605154 -1.2253250781214027 0.060342566707056303 -1.2170393293710842 0.060342152400605996 -1.2087535806250451 0.060341732557648499 -1.2004678318835451 0.060340896196688205 -1.184182049857339 0.060340479999298612 -1.1761820165723635 0.060340058335298728 -1.1681819832920919 0.060339631084035637 -1.1601819500167336 0.060339198080492283 -1.1521819167465608 0.060338759115287396 -1.1441818834819095 0.060337852968457943 -1.1278961014546973 0.060337385437590187 -1.1196103526924295 0.060336911076932141 -1.111324603936809 0.060336429660677031 -1.1030388551882389 0.060335941002351366 -1.0947531064470941 0.060335444954814847 -1.0864673577137209 0.060334437393075195 -1.069895860214493 0.06033392592389325 -1.0616101114486185 0.060333406568478555 -1.0533243626914821 0.060332878953044157 -1.0450386139437287 0.060332342764252263 -1.0367528652059768 0.060331797749214253 -1.0284671164788191 0.060330689721195749 -1.0118956189802053 0.06033012651003973 -1.0036098702089702 0.06032955387159767 -0.99532412144967719 0.06032897152220594 -0.98703837270302486 0.060328379104962103 -0.97875262396985108 0.060327776189724992 -0.9704668752511324 0.060326548510836984 -0.95389537775303079 0.060325923801089983 -0.94560962897360257 0.060325287817753814 -0.93732388021058799 0.060324640173849434 -0.92903813146503433 0.060323980421538602 -0.92075238273814908 0.060323308052123867 -0.91246663403130046 0.06032193700884235 -0.8958951365324801 0.060321238373246766 -0.88760938774047382 0.06032052610042575 -0.87932363897142252 0.060319799659420206 -0.87103789022693145 0.060319058477148232 -0.86275214150878676 0.060318301938404977 -0.85446639281895542 0.060316810053636385 -0.83846632627945694 0.060316076798559159 -0.83075200842590491 0.060315329141194883 -0.82303769060052578 0.060314566526382042 -0.81532337280523137 0.060313788323233759 -0.80760905504224811 0.060312993825137766 -0.7998947373141172 0.060311310763712482 -0.78389467074002239 0.060310419576015677 -0.7756089218998542 0.06030950791912066 -0.76732317310625076 0.060308574912289102 -0.75903742436282573 0.060307619561589663 -0.7507516756737439 0.060306640759898049 -0.74246592704372194 0.060304633725742754 -0.7258944295241746 0.060303605701605846 -0.71760868063424499 0.06030255187830362 -0.70932293181386807 0.06030147089215649 -0.70103718306927665 0.060300361351987852 -0.69275143440730746 0.060299221839124083 -0.6844656858354019 0.060296879817344787 -0.66789418828890412 0.060295677025296014 -0.65960843931552304 0.060294441034852785 -0.6513226904494317 0.060293170099365502 -0.64303694170046855 0.060291862221930406 -0.63475119308033989 0.060290515155389621 -0.62646544460262021 0.060287737981850165 -0.60989394700231803 0.060286307831625453 -0.60160819788052822 0.060284833790927424 -0.59332244893123642 0.060283313355836983 -0.58503670017164366 0.060281743679245381 -0.57675095162229795 0.060280121570854169 -0.56846520330709394 0.060276881207810537 -0.55246513667582309 0.060275270270404878 -0.5447508183266071 0.060273608003059712 -0.53703650022642946 0.06027189132966386 -0.52932218240106077 0.060270116779893544 -0.52160786488123845 0.060268280489212463 -0.51389354770266726 0.060264405451400424 -0.49817919616451001 0.060262361584599203 -0.49017916183696936 0.060260242044392578 -0.48217912796614026 0.060258041522990538 -0.47417909460700602 0.060255753958888644 -0.46617906182678803 0.060253372536867973 -0.45817902970494628 0.060248318251928203 -0.44189324656916185 0.060245637940605869 -0.43360749561757395 0.060242840406876941 -0.42532174557511354 0.060239915864516921 -0.41703599657140639 0.06023685308822805 -0.40875024876900518 0.060233639413639302 -0.40046450236339048 0.060226881805845255 -0.38389300240603752 0.06022333644034069 -0.37560724889555702 0.06021961091146321 -0.36732149725542013 0.060215688002658974 -0.35903574779113451 0.06021154701014992 -0.35075000090982467 0.060207163742933702 -0.34246425712023143 0.060199141421473569 -0.32817848474077888 0.060195629838483582 -0.32217845442731846 0.060191965727869064 -0.31617842631128446 0.060188136925503989 -0.31017840069261871 0.060184129149081049 -0.30417837795225111 0.060179925998111665 -0.29817835855210006 0.060170041271334129 -0.28474971539880917 0.060164242713119216 -0.27732109393817977 0.060158081871004507 -0.26989247943391853 0.060151516368531444 -0.26246387327781451 0.060144492861059558 -0.25503527747271143 0.060136947035766442 -0.24760669463250778 0.060115639612241707 -0.22817778568231553 0.060100946468464769 -0.21617750065242741 0.060084295774844657 -0.20417726873083972 0.06006529530052198 -0.19217710703413524 0.060043328910136175 -0.18017706580787921 0.060017296484711324 -0.16817724027736616 0.059967846313693354 -0.14960562649576356 0.059948568280951853 -0.14303361060364034 0.059927140850724488 -0.13646174358542545 0.059903166286352887 -0.12989007236460243 0.059876076306636945 -0.12331869730767729 0.059844980384358634 -0.11674778750714575 0.059763970398495764 -0.10216116929057062 0.059711701517704843 -0.094149785962008181 0.059647812077240701 -0.086139051717307957 0.059571484375803056 -0.078127418223048473 0.059469853582171411 -0.070121665782669318 0.059340574049320013 -0.062128594521440483 0.059028553459634134 -0.05030068417628808 0.058907640131694403 -0.046463838562651461 0.058762100691118979 -0.042632656194258267 0.05857960704041492 -0.038816961967495622 0.058349498690487153 -0.035056846515682416 0.058037856325554381 -0.031464975458620259 0.0576150829687989 -0.02817731645807342 0.057374023390244763 -0.026177314904083055 0.056983967382362347 -0.0241773175328002 0.056589173139351655 -0.02217732029474365 0.056260323471949418 -0.020177321205748704 0.055994525807429148 -0.018177320346967157 0.055715312189601074 -0.016177319864867302 0.055272639278812194 -0.014177323971233946 0.055003095071830863 -0.012177323217817155 0.054546100986226143 -0.010177327726152541 0.054001974835367887 -0.0081773346804139557 0.053504862734363563 -0.0061773403150744031 0.053222739100058258 -0.0041773399149060654 0.053357406651034736 -0.0021773278149802727 0.054144496407613325 -0.00017729740066751987 + 0 8 0.010681794548197362 6 0.022202451223878795 6 0.032918066927829642 6 0.044438723603284838 6 0.055959380278620144 6 0.067462103140541504 6 0.077802099078170331 6 0.089304821939833925 6 0.10043192503550971 6 0.11195258171018221 6 0.12347323838470914 6 0.13458240766668911 6 0.14610306434093442 6 0.15762372101502192 6 0.16833933671745172 6 0.1798599933912306 6 0.19138065006484678 6 0.20248981934592852 6 0.21401047601921899 6 0.2255311326923333 6 0.23705178936526533 6 0.2485724460380114 6 0.25968161531823036 6 0.2712022719906037 6 0.28272292866277887 6 0.29424358533475953 6 0.30574630819327081 6 0.31647985770679365 6 0.32800051437818317 6 0.33950323723609532 6 0.35102389390708066 6 0.36254455057786783 6 0.37406520724845432 6 0.38558586391884508 6 0.39669503319680149 6 0.40782213628785391 6 0.41934279295771859 6 0.4308455158141673 6 0.44236617248373955 6 0.4538868291531919 6 0.46540748582255492 6 0.47651665509965224 6 0.48764375818998829 6 0.49916441485931651 6 0.51068507152873888 6 0.52218779438509344 6 0.53370845105498044 6 0.54483555414627138 6 0.55635621081708586 6 0.56707182651726773 6 0.57859248318964751 6 0.59011313986319691 6 0.60161586272500667 6 0.61313651940194791 6 0.6246571760812748 6 0.63617783276359174 6 0.64769848944965103 6 0.65837823754103308 6 0.66979129135728077 6 0.68120434518023221 6 0.69261739901150965 6 0.70403045285346777 6 0.71544350670923207 6 0.7264630070003919 6 0.73787606089563706 6 0.74928911482044025 6 0.76030861519792226 6 0.77172166920979224 6 0.78313472329069178 6 0.7945477774631774 6 0.80596083176126854 6 0.81737388623558549 6 0.82799983372944586 6 0.83941288879209319 6 0.85082594439033388 6 0.86223900081547533 6 0.87365205855875416 6 0.88427801083175206 6 0.89529752034720123 6 0.90671059063940029 6 0.91812367526188332 6 0.92638834146503979 6 0.93662083621902159 6 0.95315073391117655 6 0.96220423513975339 6 0.97325062750164748 6 0.97863641090360542 7 0.98931820545180282 7 1 8 +7 0 0 6 37 8 1.4536292705773233 0.9422123612015697 1.4168480865382758 0.9422123625997384 1.3800443154324646 0.94221236034051969 1.3432206416301213 0.94221235792530555 1.3063794639061861 0.94221235694532135 1.2695228954403075 0.94221235708162832 1.2061414472263481 0.94221235540296788 1.1796230664568299 0.94221235467605979 1.1530982986660578 0.94221235392529035 1.1265677761481556 0.94221235315160934 1.1000320863336011 0.94221235235602396 1.0542147666695181 0.94221235094660505 1.0349353117603115 0.94221235034261552 1.0156536144593804 0.94221234972803669 0.99636987414493738 0.94221234910328799 0.97708428217563459 0.94221234846880231 0.9095533689920613 0.94221234621472882 0.86129841649332894 0.94221234454626523 0.81303685624023669 0.94221234282666433 0.76477030618479558 0.94221234106330998 0.71650026759435204 0.94221233926393 0.61133869691045273 0.94221233528279402 0.55444431267926264 0.94221233309003938 0.49755633160631785 0.94221233087150902 0.44067653541045076 0.94221232864068682 0.38380692980884212 0.94221232641098995 0.30419235455127036 0.94221232330907834 0.28143076354930913 0.94221232242448882 0.25867227957724698 0.94221232154310586 0.23591723957851676 0.94221232066578253 0.21316599970311464 0.94221231979336428 0.1586584990237947 0.94221231771660019 0.12690615717350426 0.94221231651770065 0.095162933466295882 0.94221231533227046 0.063429971058481249 0.94221231416253148 0.031708532553116016 0.94221231301064845 0 0.94221231187872745 + 0 7 0.15232779066728822 5 0.26185846240868399 5 0.34141378630637109 5 0.54040728645209835 5 0.77495060460148646 5 0.86886819439191132 5 1 7 +7 0 0 6 37 8 3.1415926531974598 0.088611169853833202 3.1007390328722377 0.088610465814715725 3.0606069460152834 0.088609746211965768 3.0211265928924376 0.088609024551051685 2.9822331914775897 0.088608307941806741 2.9438669774526773 0.088607597098429094 2.8787258423168738 0.088606375271182328 2.851722520551546 0.088605866086702886 2.8249427192459113 0.088605359449647772 2.7983667678985387 0.088604856016698472 2.771975845172348 0.088604356437613663 2.7267048193875549 0.088603501762442846 2.7077457554769864 0.088603144541267262 2.688867877726079 0.088602789937665419 2.6700644351191012 0.088602438194279987 2.6513288350614181 0.088602089550433208 2.5859444726063026 0.088600880514785499 2.5396176375920998 0.088600037641009585 2.4935749364218474 0.088599219340481802 2.4477194097364738 0.0885984291319456 2.4019565465218982 0.088597670329342057 2.302257127129737 0.088596092353242187 2.2483178740022911 0.088595286562992967 2.1942275393126467 0.088594533776572504 2.1398307501697711 0.088593838487577778 2.0849665239497082 0.088593204649141041 2.0072460618388264 0.088592407715494551 1.9849213719384775 0.088592190228974729 1.962483900666854 0.088591983336578986 1.9399223915750243 0.088591787231956501 1.9172252153626275 0.088591602090848667 1.8624834074032341 0.088591185097165917 1.8302983842648202 0.088590963803009681 1.7977928058534778 0.088590764619143905 1.7649320020802737 0.088590587902467502 1.7316791273764975 0.088590433936255 1.6979951606936599 0.088590302930156559 + 0 7 0.15232779066728822 5 0.26185846240868399 5 0.34141378630637109 5 0.54040728645209835 5 0.77495060460148646 5 0.86886819439191132 5 1 7 +1 0 0 1 0 +1 0 -20 1 0 +1 0 0 1 0 +1 0 -5 1 0 +7 0 0 6 37 8 -0.60164772305680003 -5.8491383977223421 -0.386509495038311 -5.8712676930213945 -0.17026134811857219 -5.8839149000239388 0.046556132111874149 -5.8870027874858266 0.26340182388555888 -5.8804969566330385 0.47973406925787287 -5.864405841161485 0.84980443193752819 -5.8203550600200202 1.0040534425657199 -5.7969999158805052 1.1575567537979623 -5.7687342644898507 1.3101154594379949 -5.7355881458375819 1.4615326992867779 -5.6976026502315165 1.7206218408914395 -5.623762834631691 1.828925256134653 -5.5901701680130031 1.9364493655167934 -5.5540718710225718 2.0431206195024316 -5.5154908371212059 2.1488664583764319 -5.47445290064924 2.5156259489450861 -5.3222642051559177 2.7714035827338961 -5.1983473616532763 3.01982025057643 -5.059690633617123 3.2598082717652801 -4.9068534034475988 3.4903614447158446 -4.7404991702150454 3.9700448603923917 -4.3502933565165449 4.2151505926801462 -4.1214677483847879 4.4443008564650484 -3.8761769365524401 4.6561288158908525 -3.6158436420829787 4.8494302259327355 -3.342030680163532 5.092769096425414 -2.9421114887573623 5.1592153416001736 -2.8258749071208058 5.2224648077078797 -2.7078609323580309 5.2824583207940066 -2.5881816448573574 5.3391421091428839 -2.4669518395271126 5.4669234464943059 -2.1730218938193673 5.5348328855347688 -1.9989602630095362 5.5960641810306413 -1.8224246929802064 5.6505076286488816 -1.6437425598052613 5.6980757590917221 -1.4632480560185854 5.7387033380968546 -1.2812821906140783 + 0 7 0.15232779066728822 5 0.26185846240868399 5 0.34141378630637109 5 0.54040728645209835 5 0.77495060460148646 5 0.86886819439191132 5 1 7 +7 0 0 6 47 10 1.5707963267948966 0.942212311878729 1.5512551136652453 0.94221231118115334 1.5317187875664871 0.94221231049115639 1.5121876736919644 0.94221230980922943 1.4926621235089401 0.94221230913585075 1.4731425147585979 0.9422123084714874 1.4358642857714408 0.94221230722037641 1.4180940609812207 0.94221230663165534 1.4003188824378547 0.94221230605078965 1.3825390369395227 0.94221230547812918 1.3647547927301071 0.94221230491401542 1.3151066894108687 0.94221230336433548 1.2832336355817591 0.94221230239836906 1.2513486657811157 0.942212301462793 1.2194530829762658 0.9422123005594053 1.1875480653326125 0.94221229968989029 1.132399172921188 0.94221229824855124 1.1091592113032396 0.94221229766007031 1.0859151869304726 0.94221229709098031 1.0626674839064458 0.94221229654184946 1.0394164648675959 0.94221229601321088 0.9994254192302422 0.94221229514018556 0.98268682135560426 0.94221229478568169 0.96594680427870994 0.94221229444223553 0.94920549113699504 0.94221229411002005 0.93246300128594395 0.94221229378920002 0.87452062119563634 0.94221229271894968 0.83331497083369477 0.94221229202788992 0.79210505859144098 0.94221229140905116 0.75089203452607489 0.94221229086432512 0.70967699568287301 0.94221229039519694 0.61156887806434346 0.94221228946100177 0.55467340346813776 0.94221228906534349 0.49778432123521654 0.94221228881867258 0.44090341271522882 0.94221228872221818 0.38403268295909265 0.94221228877584684 0.30441593048049564 0.94221228905871435 0.28165329688554203 0.94221228916338717 0.2588937684199446 0.94221228929174183 0.23613768198373794 0.94221228944363145 0.21338539367310738 0.94221228961887216 0.15884040571515937 0.94221229009452123 0.1270516407644712 0.9422122904169915 0.095272010853205302 0.94221229078404845 0.063502662865925888 0.94221229119495031 0.031744863646880457 0.94221229164881837 0 0.94221229214463686 + 0 7 0.074770873192650592 5 0.14284262397464381 5 0.26476179997704608 5 0.35352865886486839 5 0.41741856605864036 5 0.57462472680546017 5 0.79163499837064677 5 0.87853410998728632 5 1 7 +7 0 0 6 47 10 1.6979951606936587 0.088590302930165774 1.677236534576263 0.088590222194228782 1.6563141125499312 0.088590150178121371 1.6352187211870133 0.088590086930724413 1.6139407423796091 0.088590032489703596 1.5924701133395684 0.08858998688150943 1.5510644103248978 0.088589916654782261 1.5315008812981823 0.088589890501998225 1.512097806627269 0.088589871690745739 1.4928475621077244 0.088589860241003585 1.4737428322217576 0.088589856165008848 1.4208073623703885 0.088589865381712804 1.3872822487505203 0.088589894964536411 1.3541612216403076 0.08858994824112558 1.3214065060682616 0.088590025158692021 1.2889825997297082 0.088590125586261462 1.2334657514455634 0.088590339398800191 1.2102328764312682 0.088590441835070047 1.1871447538899524 0.088590556542912091 1.1641889054797805 0.088590683420702518 1.141353268571037 0.088590822345764486 1.1022683960511241 0.088591081733188803 1.085966819689778 0.088591196458633545 1.0697171140171815 0.088591317297146491 1.0535150015093768 0.088591444189788759 1.0373562802633487 0.088591577072238595 0.98157362922560631 0.088592057409431435 0.94214776289087432 0.088592434790846955 0.90289843609010367 0.088592846973888348 0.86376585126263949 0.088593292732369933 0.82469131902521964 0.088593770660316248 0.73167898504743789 0.088594981133742604 0.67773911982693691 0.08859574140887122 0.62364857978775412 0.088596555809417207 0.56925199033829899 0.088597419608437589 0.51438837446649455 0.088598327619512293 0.43666878954134064 0.088599653147636626 0.41434400500151308 0.088600038344895896 0.39190650187407411 0.088600429358506372 0.36934502390001173 0.088600825816985626 0.34664794214259625 0.088601227339981228 0.29187139508975862 0.088602201314348802 0.25965096419899686 0.088602778227820755 0.22710936241454616 0.088603363213407782 0.19421180493064874 0.088603955183647609 0.16092132203633736 0.088604553028894528 0.12719875911543557 0.088605155617319478 + 0 7 0.074770873192650592 5 0.14284262397464381 5 0.26476179997704608 5 0.35352865886486839 5 0.41741856605864036 5 0.57462472680546017 5 0.79163499837064677 5 0.87853410998728632 5 1 7 +1 0 0 1 0 +1 0 -20 1 0 +1 0 0 1 0 +1 0 -5 1 0 +7 0 0 6 47 10 5.7387033380968262 -1.2812821906140499 5.7637411470510074 -1.1691409632572203 5.7861430560897702 -1.0564406137270907 5.80589386704861 -0.94326077091768923 5.8229817600718832 -0.82968154057127208 5.8373982936128357 -0.71578350527845203 5.8598266559389032 -0.49773797868780889 5.8683029267278215 -0.39356959102568112 5.8745585053052594 -0.28920320922395604 5.8785870198213246 -0.18469964385187154 5.8803844380713599 -0.080119868315534859 5.8791693017166722 0.21180845961869466 5.8712270708077483 0.39919109053634827 5.8561127866691152 0.58627064339081869 5.8338405171917174 0.77269683250514731 5.8044479862575145 0.95812131703000603 5.741457045690467 1.2762199518410284 5.7111754978060105 1.4095280816917466 5.6771755730975144 1.5419886848667232 5.6394872930248994 1.6734699997665956 5.5981470574964192 1.8038419088213828 5.5208453251273113 2.0259200988954404 5.4866232758281086 2.1182230839211229 5.4505474306889425 2.2098370452881966 5.4126353583996973 2.3007147799872314 5.3729062626225499 2.3908097302790026 5.2292047505870016 2.6997226477770226 5.1161524524288069 2.9143541622722751 4.9925364789923634 3.1232829828303892 4.8587241714584763 3.3258549596331761 4.7151374514529039 3.5214497863012468 4.3512071903384282 3.9690438091307811 4.1224335295825369 4.2142068865663163 3.877190319553975 4.4434177060224727 3.6169000379240117 4.6553090163726267 3.3431253045286695 4.8486761354942729 2.9432498124626818 5.0921114738143132 2.8270227389641889 5.1585867243916965 2.7090173852669608 5.2218653051196497 2.5893458329380508 5.281888008058246 2.4681228797491457 5.3386010277901477 2.1740186914995547 5.466534451113489 1.9997689689752889 5.5345523308581051 1.8230385072389197 5.5958771322393517 1.6441557916223104 5.6503987230253756 1.4634561576541643 5.6980293071677437 1.2812817910595982 5.7387034248015425 + 0 7 0.074770873192650592 5 0.14284262397464381 5 0.26476179997704608 5 0.35352865886486839 5 0.41741856605864036 5 0.57462472680546017 5 0.79163499837064677 5 0.87853410998728632 5 1 7 +7 0 0 4 5 2 1 -3.9113889091908254 0.74990812843252286 -3.9113883374533547 0.49988289054620194 -3.9113877837022955 0.24991579036910125 -3.9113872182047387 0 -3.9113866620399911 + 0 5 1 5 +7 0 0 4 5 2 70.00094677110269 5.9999169203783103 69.825262899412309 5.999916904539738 69.649530490470227 5.9930580734813477 69.474158086150339 5.9793318928381387 69.299551849911339 5.9587796612063588 + 0 5 1 5 +7 0 0 2 3 2 3.1414766862321732 4.0000000285219528 3.1415346679053857 4.000000028521983 3.141592652129479 4.0000000285220239 + 0 3 0.00089143572026578754 3 +7 0 0 4 5 2 1.5707963267948968 0.94221229214463831 1.5414845259127594 0.94221229260245509 1.5121849411074419 0.94221229169192289 1.482899201694899 0.94221229531850692 1.4536293246703924 0.94221229420936226 + 0 5 1 5 +7 0 0 4 5 2 0.12719875911543396 0.088605155617328638 0.096060838330256637 0.088605712020787319 0.064513427717819316 0.088606268206234323 0.032510659576739057 0.088606842630344809 0 0.088607402915947625 + 0 5 1 5 +1 0 0 1 0 +1 0 -20 1 0 +1 0 0 1 0 +1 0 -5 1 0 +7 0 0 4 5 2 1.281281791059584 5.7387034248015425 1.1130700507651881 5.7762601032740406 0.94346050042229024 5.8072270543112836 0.77285129759076199 5.8315282295836539 0.60164772964391489 5.8491384007893572 + 0 5 1 5 +7 0 0 5 102 26 1 -3.9114097761142288 0.99615169043855989 -3.9114097530465011 0.99230366807959847 -3.9114097292389629 0.98845592580874497 -3.9114097046931193 0.98460845696603716 -3.9114096794105686 0.96619420588086469 -3.9114095548800316 0.95163098078987252 -3.911409445829201 0.93707126211867775 -3.9114093263323171 0.92251476853847691 -3.9114091965005686 0.90628117688995302 -3.9114090402985582 0.90460113806892584 -3.9114090239966055 0.90292113847712874 -3.9114090075588628 0.90124117770635936 -3.9114089909855343 0.89796118636862443 -3.9114089583623532 0.89636115223663393 -3.9114089423250649 0.89476115259505984 -3.9114089261651408 0.89316118708547698 -3.9114089098827649 0.88692070518943766 -3.9114088458969825 0.88228043937334721 -3.9114087972872391 0.87764044837718935 -3.9114087476534012 0.87300072319712252 -3.9114086970001694 0.86612113530613433 -3.9114086203851968 0.8638810762463448 -3.9114085952014408 0.8616410771884665 -3.9114085697817216 0.85940113719037803 -3.9114085441266 0.84523821473258942 -3.9114083804227051 0.83331681953539327 -3.9114082359548172 0.82139693985670648 -3.9114080849193029 0.80947845537521723 -3.9114079274106515 0.77243173963981226 -3.9114074179634972 0.74730769245226703 -3.9114070440676754 0.72218940565469636 -3.9114066428093102 0.69707387522031794 -3.9114062153033657 0.66108036699007089 -3.9114055667568595 0.6501999843066163 -3.9114053660096695 0.63932004720007574 -3.9114051606743261 0.62844049277699121 -3.9114049508580804 0.61516122615283286 -3.91140468942231 0.61276121231938419 -3.9114046419590736 0.61036121309937075 -3.9114045942844151 0.60796122771280636 -3.9114045463995462 0.60372124079019773 -3.9114044614330181 0.60188123388680503 -3.9114044244375044 0.60004123426866962 -3.9114043873196978 0.59820124155392729 -3.9114043500801543 0.59452124314359245 -3.9114042753581844 0.59268123744778423 -3.9114042378757539 0.59084123786191201 -3.9114042002727003 0.58900124397184839 -3.9114041625495846 0.58492124134554946 -3.9114040786371369 0.58268123514621861 -3.9114040323901982 0.58044123596974351 -3.9114039859671776 0.57820124299259945 -3.911403939369106 0.57380124703856605 -3.9114038474949373 0.57164124368684965 -3.9114038022310469 0.56948124451170457 -3.9114037568062736 0.56732124868827616 -3.9114037112215527 0.56300125217916752 -3.9114036197338971 0.56084125149256847 -3.9114035738309605 0.55868125241558686 -3.9114035277699593 0.55652125402520425 -3.9114034815518437 0.55260125681229888 -3.9114033973911306 0.55084125808635664 -3.9114033595010147 0.54908125864019497 -3.9114033215077391 0.54732125791997577 -3.9114032834118233 0.53732128707502247 -3.9114030663784773 0.52908129153155947 -3.9114028853047826 0.52084131508886178 -3.911402702046324 0.51260133418962806 -3.9114025166580446 0.49212182471866817 -3.9114020507490905 0.4798822170150136 -3.9114017677270256 0.46764231684849361 -3.9114014803142991 0.45540202438562788 -3.9114011887008848 0.4297226643168699 -3.9114005685362008 0.41628349226261274 -3.9114002391625973 0.40284362963670273 -3.9113999052206125 0.38940293906504941 -3.9113995669763151 0.36916181544999938 -3.9113990515647288 0.3623621202594467 -3.9113988773955861 0.35556214722264945 -3.9113987022307484 0.34876186937640474 -3.9113985261059279 0.32716462355591913 -3.9113979638384189 0.31236650995848614 -3.9113975742458416 0.29756672074417639 -3.9113971806519019 0.28276504512729905 -3.9113967834363534 0.24493330108103137 -3.9113957600684066 0.2219002161100086 -3.9113951293219875 0.19886117133607623 -3.9113944922067292 0.17581521153316584 -3.9113938502085261 0.14860178292585507 -3.9113930883998327 0.14444205398475002 -3.9113929719352014 0.14028206167718663 -3.9113928554382857 0.13612179831072818 -3.9113927388904366 0.11029850933992244 -3.9113920150092616 0.088628144703234935 -3.9113914056994545 0.066949226577699264 -3.9113907920461082 0.045260673088851136 -3.9113901766929047 0.018850062683717757 -3.9113894348883149 0.014138355353480278 -3.9113893028403295 0.0094261196805021773 -3.9113891711470345 0.004713340268568943 -3.911389039897164 0 -3.9113889091905185 + 0 6 0.019204870208588846 4 0.091922216977111115 4 0.10031681188111653 4 0.10831237834258386 4 0.13150325972636132 4 0.14270074180721354 4 0.20230568657177309 4 0.32799321316729824 4 0.38245156723210949 4 0.39446542761467929 4 0.40367623282236864 4 0.41288716815571486 4 0.42410062013763622 4 0.43491369291145615 4 0.44572681486732196 4 0.45453750487822969 4 0.49578733439959866 4 0.55705791644065517 4 0.62432413897105365 4 0.65835057841741318 4 0.73238458378236959 4 0.84754777609842324 4 0.86832590712115476 4 0.97651163639678074 4 1 6 +7 0 0 5 102 26 75.959809496723437 0.70131200777481739 75.955893411970195 0.73458200330021006 75.951745128529893 0.76782468460256703 75.947364901887184 0.80103789052075225 75.942753016993535 0.83421946382035372 75.919571380408954 0.99287807854403098 75.897916232272038 1.1179045748700649 75.872961409310136 1.2423297107929936 75.844730106819625 1.366037687998692 75.809617731687013 1.5030989500819119 75.805940539406606 1.5172728773747417 75.80222011818293 1.5314355450706492 75.798456514174603 1.5455867774060856 75.791023984507476 1.5731939080150021 75.787359062192408 1.5866508838744875 75.78365504848162 1.6000971748500117 75.779911985066519 1.6135326295555008 75.765160141467462 1.66589432913572 75.753862212512871 1.7047391276127766 75.742237166729723 1.7434878038922292 75.730286104456965 1.7821366879550182 75.712082885088506 1.8392934033617951 75.706079847932841 1.8578805623251615 75.700001206756284 1.8764431940794093 75.69384709578614 1.8949808887489101 75.654457910270153 2.0120357062231995 75.619163620368084 2.1098600165134735 75.5817555372181 2.2069044602391452 75.54225704741124 2.3031083441693356 75.413051520116966 2.599376516856438 75.316229188661978 2.7963388564356344 75.210471841002743 2.9887380261558456 75.096073166636359 3.1760396291014787 74.920212741087155 3.4364626365575459 74.865491816184772 3.514136783808619 74.809240603889435 3.5907176905804867 74.751488470082379 3.6661653745815328 74.679201589467112 3.7568266965691741 74.666065275237287 3.7731553374724962 74.652857753333663 3.7894265223257007 74.639579359442379 3.8056398375517353 74.615996057023054 3.8341806398871157 74.605720222022342 3.8465321500935445 74.595403080766943 3.8588492180657328 74.585044787395489 3.8711316597776539 74.564246060248024 3.8956270977206757 74.553805625311568 3.9078400929706816 74.54332434784871 3.9200180949828516 74.532802384457156 3.9321609218031233 74.509381047788494 3.9590081053401165 74.496462136778277 3.9736954176494343 74.483483444674064 3.9883300030432585 74.470445258870683 4.0029115374526576 74.444718125627062 4.0314491290700598 74.432033330469125 4.0454089296136155 74.41929374399983 4.0593188122999475 74.406499628539308 4.0731784907084299 74.380802810343113 4.1007969330581062 74.367900107108866 4.1145556965451773 74.354943403535387 4.1282636865754556 74.341932966420032 4.1419206208789703 74.318224406544914 4.1666122599641024 74.307544251985462 4.1776642175701602 74.296828746632414 4.1886819405317732 74.28607803698111 4.1996652782189638 74.224795541134171 4.2618741122267005 74.173530386129372 4.312377159618185 74.121511939767856 4.3621078640615849 74.068755791461982 4.4110513331090626 73.935844535462365 4.530700747591446 73.854818879138833 4.6004396869471567 73.772253566633964 4.6683626317264526 73.688203148921417 4.7344246882012442 73.508880651848614 4.8690203625572916 73.4133152652619 4.937163282699383 73.316102881913579 5.0029559880637535 73.217320932792873 5.0663461016598905 73.066327336832302 5.1581108366473654 73.015224095259001 5.1883094279530786 72.963750037002555 5.2178745272773224 72.911915653136134 5.2468001018118517 72.746190581514455 5.3366119797708675 72.630994123442264 5.3950887919410082 72.514251946852113 5.4504513547915519 72.396076664980598 5.5026462778290339 72.090707234128516 5.6278167329862425 71.901641858925174 5.6962281303910123 71.709823121662652 5.7566820293106531 71.515698327381159 5.8090375237898098 71.284368723870571 5.8611575516977261 71.248950706854984 5.8688569200216749 71.213475240352579 5.8762886977500184 71.177945021645243 5.8834523204372058 70.957096174381945 5.9262472422359407 70.770418267212392 5.9548634150614284 70.58271193254842 5.9761216196421865 70.394363530798415 5.9899782114474851 70.164815520145481 5.9978186639988795 70.12385624565988 5.9988677520667766 70.08288904393504 5.9995671927554683 70.041917894569522 5.9999169166739641 70.000946774487318 5.9999169203807448 + 0 6 0.019204870208588846 4 0.091922216977111115 4 0.10031681188111653 4 0.10831237834258386 4 0.13150325972636132 4 0.14270074180721354 4 0.20230568657177309 4 0.32799321316729824 4 0.38245156723210949 4 0.39446542761467929 4 0.40367623282236864 4 0.41288716815571486 4 0.42410062013763622 4 0.43491369291145615 4 0.44572681486732196 4 0.45453750487822969 4 0.49578733439959866 4 0.55705791644065517 4 0.62432413897105365 4 0.65835057841741318 4 0.73238458378236959 4 0.84754777609842324 4 0.86832590712115476 4 0.97651163639678074 4 1 6 +7 0 0 2 3 2 3.0459661094002057 4.0000000284913648 3.092908996290241 4.0000000284914163 3.1414766857965177 4.0000000285219537 + 0.93980729700792565 3 1 3 +7 0 0 6 42 9 0 4.0000000284908284 0.069598693355392691 4.0000000284908426 0.13707051887799776 4.0000000284908666 0.20276766631084248 4.0000000284908834 0.26699745453030743 4.0000000284909083 0.33003006014235736 4.0000000284909332 0.45936443187228748 4.0000000284909882 0.52550759872067454 4.0000000284910193 0.59083237630145069 4.0000000284910548 0.65562405643721111 4.000000028491085 0.72015341238494268 4.0000000284911232 0.84942978681396131 4.0000000284911961 0.91418602654347736 4.0000000284912343 0.97920337985623962 4.0000000284912662 1.0447554669057579 4.000000028491316 1.1111305747285734 4.0000000284913426 1.240774972773373 4.0000000284914154 1.3038797138004223 4.0000000284914616 1.3681850841192236 4.000000028491483 1.4339606099084841 4.0000000284915238 1.5015167651219981 4.000000028491554 1.6411481517224702 4.0000000284915371 1.7089438454269361 4.0000000284914936 1.774949765779831 4.0000000284914563 1.83947758328455 4.0000000284914163 1.9028011934337932 4.0000000284913844 2.0321671961472445 4.0000000284913257 2.0980691631594257 4.0000000284912911 2.1631636099060314 4.000000028491276 2.2277327253984458 4.0000000284912538 2.2920444900688155 4.0000000284912423 2.4208787958222664 4.0000000284912263 2.485410419611525 4.0000000284912192 2.550202864400509 4.0000000284912289 2.6155269118991553 4.0000000284912254 2.6816678224545614 4.0000000284912449 2.8110851236056287 4.000000028491276 2.8742059587938984 4.0000000284912938 2.9385263745898609 4.0000000284913142 3.0043176789913177 4.0000000284913506 3.0718885173252151 4.0000000284913728 3.1415926531974598 4.0000000284914128 + 0 7 0.11986843911563963 5 0.24975714770374671 5 0.38011042853895527 5 0.50011610227304726 5 0.62059588068326688 5 0.75005225653602259 5 0.87994933437546152 5 1 7 +7 0 0 6 42 9 70.000320320238757 -6.0000281079310884 70.376285297219695 -6.0000281137243254 70.752471363221161 -5.9717581373978375 71.12613530635204 -5.9151561184941492 71.494601105956122 -5.8305346957269082 71.855248213045741 -5.7185154559410307 72.58508052718075 -5.430090490640505 72.952508921176488 -5.2490655677927771 73.304547199089598 -5.0382627533895032 73.638215869373369 -4.7993687584755609 73.950764706668167 -4.5344228837002518 74.529726801018512 -3.9563418852565246 74.796013664818844 -3.6429952375631127 75.036085435905648 -3.3083460889565801 75.247878166222478 -2.9551722584554305 75.429685050492978 -2.5864841998017933 75.718850626473582 -1.854911187567307 75.830990383450711 -1.4938461291701302 75.915668871750654 -1.1249457415128834 75.972262640640608 -0.75083949522610816 76.000458535815184 -0.37421286578532253 76.000180754924244 0.38006297339667672 75.971482585916959 0.75815739436785989 75.914163380186679 1.1336789487880257 75.828543684437335 1.5039109144425371 75.715258887358289 1.8661935338120728 75.424956533160824 2.5958875745004963 75.243799649103337 2.9617192950964064 75.033094003278563 3.3122060088966574 74.794514791650741 3.644400908469807 74.530085040809638 3.9555841725120597 73.953445645556798 4.5320317725032702 73.641034548769653 4.7971780289189727 73.307485643564277 5.0362818055758769 72.955548424971965 5.2473017984723587 72.588201913222008 5.4285492332131753 71.857980079345495 5.7176100298180419 71.496834099863449 5.8299652396249879 71.127833768499585 5.9148424200918139 70.753611324863499 5.9716161975361874 70.376854887950017 5.9999718978567547 70.000320322648605 5.9999718920691656 + 0 7 0.11986843911563963 5 0.24975714770374671 5 0.38011042853895527 5 0.50011610227304726 5 0.62059588068326688 5 0.75005225653602259 5 0.87994933437546152 5 1 7 +7 0 0 2 3 2 -4.5499294827566225e-10 4.0000000285192918 5.7982454777367513e-05 4.0000000285234885 0.00011596598188903357 4.0000000285214767 + 0.99992817082446539 3 1 3 +7 0 0 7 539 90 3.0371103627877578 0.090148050180385741 3.0365472725138858 0.091862343005412211 3.0379251092846959 0.093576635830438695 3.039603970906716 0.095290928655465165 3.0406585555340144 0.097005221480491635 3.0408781616682012 0.098719514305518105 3.0407666881584285 0.10043380713054459 3.0415426342013894 0.10214809995557106 3.0412891179717714 0.10580556508702935 3.0434259955076546 0.1057607736304277 3.0426956405763721 0.11030945985154496 3.0426279451961693 0.11392208558040211 3.0439188166631035 0.11535666143393253 3.043423867884202 0.11938725456163558 3.0437673010168891 0.12214818291421325 3.0439441117506276 0.12529090618293762 3.0440891659265517 0.12843405162094745 3.0442120839997222 0.13157690929631935 3.0443186868054881 0.13471957043210847 3.0444123071229092 0.13786240216880133 3.0444951012381725 0.14100552232676897 3.0445693605080146 0.14414827416871967 3.0448049726820008 0.15412814255346668 3.0449535424940182 0.1641250122839148 3.04507068341987 0.17412726441160176 3.0451597556994332 0.1841320589619389 3.0452343736833209 0.19413665399375218 3.0452958282331184 0.20414158853497466 3.045393190857502 0.22271941243879256 3.0454313264765722 0.23129061307802809 3.0454644455284674 0.23986204055764831 3.045493682042598 0.248433611074205 3.0455197543582755 0.25700527525626654 3.0455431601576399 0.26557701051585669 3.045576387870832 0.27900593399824886 3.0455876939188675 0.28386307289154 3.045598361812305 0.28872022709159056 3.0456084548323554 0.29357739410261618 3.0456180273718259 0.2984345719212248 3.0456271249351192 0.30329175903641697 3.0456505531456419 0.31643465395855408 3.0456640597177755 0.32472037671590426 3.045676482571269 0.33300611754226722 3.0456879724452892 0.34129187232567931 3.0456986521015352 0.34957763800158181 3.0457086163242404 0.35786341255282084 3.0457272495283929 0.37443492694691111 3.0457359280745684 0.38272066634333957 3.0457440413631507 0.39100641181951434 3.0457516532626263 0.3992921622433423 3.0457588177055124 0.40757791673005694 3.0457655786883597 0.41586367464221768 3.045778361339508 0.43243517737205567 3.0457843865078402 0.44072092209005354 3.0457900807871008 0.44900666928494409 3.0457954752691889 0.45729241856972574 3.0458005971275517 0.46557816962915499 3.0458054696171777 0.47386392221974633 3.0458145939250536 0.49014970632445626 3.0458188622311164 0.49814973772502208 3.0458229340226874 0.50614977020714635 3.0458268246993074 0.51414980362905383 3.0458305480301631 0.52214983787151958 3.0458341161540821 0.53014987283786741 3.0458410852136271 0.54643565540286387 3.0458444756249832 0.55472140304304351 3.0458477225421805 0.56300715128920797 3.0458508364545382 0.57129290006766564 3.0458538266121296 0.57957864931633518 3.0458567010257704 0.58786439898474485 3.0458622325053915 0.60443589674025977 3.0458648899119334 0.61272164482408342 3.0458674461150244 0.62100739324302923 3.0458699077916824 0.62929314196015285 3.0458722808675764 0.63757889094403986 3.0458745705170225 0.64586464016880563 3.0458789922073644 0.66243613770972087 3.0458811242063635 0.67072188602470184 3.0458831822473553 0.67900763453617674 3.0458851708356312 0.68729338322426625 3.0458870938944016 0.69557913207207267 3.0458889547648025 0.70386488106568079 3.0458925583773886 0.72043637850301445 3.0458943011608492 0.72872212694611882 3.0458959882009116 0.73700787551024782 3.045897622689925 0.7452936241839403 3.0458992073679481 0.75357937295749766 3.0459007445227413 0.76186512182298238 3.0459037277891485 0.77843661920720275 3.045905174431915 0.7867223677247025 3.0459065780252503 0.79500811631970669 3.04590794062974 0.80329386498576694 3.045909264259385 0.8115796137170006 3.0459105508815996 0.81986536250808995 3.045913052991168 0.83643685986266447 3.0459142688018757 0.84472260842550373 3.0459154508650985 0.85300835703934852 3.0459166003874003 0.86129410570070741 3.0459177187661459 0.8695798544060479 3.0459188075895001 0.87786560315179785 3.0459208924296108 0.89415138502449543 3.0459218900765763 0.90215141814930511 3.0459228624989123 0.9101514513064981 3.0459238106031377 0.91815148449394057 3.045924735280702 0.92615151770963933 3.0459256374079819 0.9341515509517434 3.0459274303717945 0.95043733280171383 3.045928319153568 0.95872308141190021 3.0459291856079322 0.96700883004670968 3.0459300308697945 0.97529457870415803 3.0459308557926477 0.98358032738266765 3.045931660948562 0.99186607608107047 3.0459332056465818 1.0081518579348754 3.0459339466692334 1.0161518910887686 3.0459346705376054 1.0241519242589712 3.0459353779695184 1.0321519574443474 3.0459360695591591 1.0401519906439374 3.0459367457770838 1.0481520238569579 3.0459380918580061 1.0644378057003157 3.0459387608406421 1.07272355433139 3.0459394144406557 1.0810093029751837 3.0459400531665253 1.0892950516309143 3.0459406775126747 1.0975808002978653 3.0459412879594723 1.1058665489753801 3.0459424821221028 1.1224380462901118 3.0459430657635527 1.1307237949273499 3.0459436364669621 1.1390095435739018 3.0459441947050361 1.1472952922291826 3.0459447408538125 1.155581040892699 3.0459452751926572 1.1638667895640504 3.0459463210159043 1.1804382868770027 3.0459468325146366 1.1887240355185686 3.0459473329466897 1.197009784167099 3.0459478227541346 1.2052955328221429 3.0459483022748874 1.2135812814833253 3.0459487717427121 1.2218670301503487 3.0459496911350632 1.2384385274620764 3.0459501410764562 1.2467242761067752 3.0459505815207963 1.2550100247567155 3.0459510128191574 1.2632957734115711 3.0459514352642878 1.2715815220710613 3.0459518490906126 1.2798672707349519 3.0459526598374396 1.2964387680458498 3.045953056856511 1.3047245166928003 3.0459534456935904 1.313010265343721 3.045953826546195 1.3212960139984193 3.0459541996472126 1.3295817626566937 3.0459545652649003 1.3378675113183325 3.0459552696662464 1.3541532931583355 3.0459556088264144 1.3621533263365386 3.0459559413906576 1.3701533595175646 3.045956267536599 1.3781533927012717 3.0459565874122183 1.3861534258875348 3.0459569011358538 1.3941534590762454 3.0459575274801556 1.4104392409147397 3.0459578397739802 1.4187249895646512 3.0459581458394136 1.4270107382169213 3.0459584458319582 1.4352964868714335 3.0459587399008776 1.4435822355280794 3.0459590281891962 1.4518679841867574 3.045959593426494 1.4684394814963324 3.0459598703909614 1.4767252301472156 3.0459601418933331 1.4850109787999257 3.0459604080703078 1.4932967274543747 3.0459606690290508 1.5015824761104855 3.0459609248471944 1.5098682247681914 3.0459614265932236 1.5264397220775148 3.0459616724365346 1.534725470729142 3.0459619133658302 1.5430112193822196 3.0459621495833149 1.5512969680366615 3.0459623812303378 1.5595827166923946 3.0459626083873905 1.5678684653493564 3.0459630537258637 1.5844399626585202 3.0459632719361034 1.5927257113107232 3.0459634858610261 1.6010114599640435 3.045963695613104 1.6092972086184265 3.0459639012610848 1.6175829572738276 3.0459641028299913 1.6258687059302142 3.0459644980609171 1.6424402032392407 3.0459646916745338 1.6507259518919 3.0459648814123388 1.6590117005454503 3.0459650674515752 1.6672974491998251 3.0459652498763612 1.6755831978549847 3.0459654286776909 1.683868946510914 3.045965778986838 1.700440443819881 3.0459659506545713 1.7087261924728705 3.0459661188666294 1.7170119411265579 3.0459662837090766 1.7252976897809109 3.0459664452440469 1.7335834384359006 3.0459666035097408 1.7418691870915004 3.0459669096286746 1.7582200689159895 3.04596705753498 1.7662852020848747 3.0459672024517337 1.7743503352542895 3.0459673445258497 1.7824154684241946 3.0459674838387687 1.7904806015945629 3.0459676204064534 1.798545734765381 3.0459678929073348 1.8149747365730451 3.0459680286996735 1.8233386052099203 3.0459681616127168 1.8317024738472416 3.0459682917048245 1.8400663424849835 3.0459684190364165 1.8484302111231261 3.0459685436699675 1.8567940797616538 3.0459687835024494 1.8732361015662253 3.0459688988700355 1.8813142547322381 3.0459690118152891 1.889392407898578 3.0459691223801277 1.8974705610652287 3.0459692306058632 1.9055487142321763 3.0459693365332039 1.9136268673994077 3.0459695475379687 1.9300688892033064 3.0459696524473188 1.93843275783999 3.0459697549910123 1.9467966264769498 3.0459698552209704 1.9551604951141732 3.0459699531803301 1.963524363751646 3.0459700489034462 1.971888232389357 3.0459702357827609 1.9886029496663225 3.0459703269447251 1.9969537983055825 3.0459704159621981 2.0053046469450555 3.045970502883601 2.0136554955847297 3.04597058774536 2.0220063442245944 3.045970670571907 2.0303571928646433 3.0459708323054193 2.0470719101411659 3.0459709111868412 2.0554357787776238 3.0459709881022863 2.0637996474142475 3.0459710631108043 2.0721635160510319 3.0459711362481472 2.0805273846879677 3.0459712075267613 2.0888912533250452 3.0459713439737759 2.1053332751277081 3.0459714093090504 2.1134114282932956 3.0459714729498022 2.1214895814590018 3.0459715349156915 2.1295677346248194 3.0459715952378614 2.1376458877907423 3.045971653958933 2.1457240409567659 3.0459717703292708 2.1621660627590282 3.0459718278751149 2.1705299313952713 3.04597188375674 2.178893800031612 3.0459719379793539 2.1872576686680438 3.0459719905671738 2.1956215373045609 3.0459720415634228 2.2039854059411574 3.0459721404202407 2.2207001232165635 3.0459721882834736 2.2290509718553668 3.0459722346127762 2.2374018204942399 3.0459722794177515 2.2457526691331804 3.0459723227248574 2.2541035177721849 3.0459723645774091 2.2624543664112462 3.0459724441725911 2.2788833682155802 3.0459724819771998 2.2869615213808454 3.0459725184762871 2.2950396745461554 3.0459725536900772 2.3031178277115116 3.0459725876321406 2.3111959808769105 3.0459726203093926 2.3192741340423457 3.0459726842458275 2.335716155843703 3.0459727153934213 2.344080024479632 3.0459727452401526 2.3524438931155922 3.0459727738343099 2.3608077617515835 3.0459728011971925 2.3691716303876018 3.0459728273231113 2.3775354990236433 3.0459728770356662 2.3942632362955103 3.0459729006529335 2.402627104931343 3.0459729230566595 2.4109909735671935 3.0459729442696903 2.4193548422030582 3.0459729643122451 2.4277187108389335 3.0459729832019207 2.4360825794748204 3.0459730186778269 2.4527972967491141 3.0459730352819783 2.4611481453875186 3.0459730507644296 2.4694989940259302 3.045973065131975 2.4778498426643467 3.0459730783999199 2.486200691302765 3.0459730905920814 2.4945515399411846 3.0459731129068692 2.5112662572152482 3.0459731230089964 2.519630125850886 3.0459731320698085 2.5279939944865228 3.0459731401074182 2.5363578631221579 3.0459731471354146 2.5447217317577895 3.0459731531628562 2.5530856003934139 3.0459731632256974 2.5698133376645913 3.0459731672434072 2.5781772063001478 3.0459731702932475 2.5865410749356954 3.0459731724050414 2.5949049435712324 3.0459731735925963 2.6032688122067569 3.0459731738537026 2.6116326808422685 3.0459731724865677 2.6283604181132554 3.0459731708848756 2.6367242867487293 3.0459731683728952 2.645088155384189 3.0459731649613828 2.6534520240196318 3.0459731606640199 2.6618158926550568 3.0459731554974132 2.670179761290465 3.0459731438851749 2.6863230476224547 3.0459731375374672 2.6941024653190406 3.0459731304631505 2.7018818830156102 3.0459731226779652 2.7096613007121624 3.0459731141882078 2.7174407184086951 3.0459731049907286 2.7252201361052082 3.0459730844100434 2.7413634224370469 3.0459730729158481 2.7497272910723716 3.0459730606265056 2.7580911597076727 3.0459730475661368 2.7664550283429494 3.0459730337468218 2.7748188969781995 3.0459730191686032 2.7831827656134251 3.0459729889947083 2.7996247874131734 3.0459729734625478 2.8077029405776983 3.0459729572340501 2.8157810937421992 3.0459729403191047 2.8238592469066721 3.0459729227264463 2.8319374000711179 3.0459729044636563 2.8400155532355389 3.0459728659717653 2.8564445550378177 3.0459728456882496 2.8647954036756667 3.0459728247118321 2.8731462523134885 3.0459728030583375 2.8814971009512824 3.0459727807341972 2.8898479495890497 3.0459727577364535 2.8981987982267876 3.0459727103321295 2.9149135154996459 3.0459726859268237 2.9232773841347637 3.0459726608605893 2.9316412527698517 3.0459726351506617 2.9400051214049117 3.0459726088077645 2.9483689900399432 3.0459725818361023 2.956732858674946 3.0459725266306354 2.9734605959450056 3.0459724984117087 2.9818244645800691 3.0459724695715287 2.9901883332151016 3.045972440111048 2.9985522018501025 3.0459724100372325 3.0069160704850715 3.0459723793630609 3.0152799391200085 3.0459723168519912 3.0320076763899442 3.0459722849971484 3.0403715450249442 3.0459722525635335 3.0487354136599132 3.0459722195640175 3.0570992822948502 3.0459721860038043 3.0654631509297552 3.0459721518804321 3.0738270195646282 3.0459720824871162 3.0905547568344476 3.0459720472314684 3.0989186254693935 3.0459720114188853 3.1072824941043065 3.0459719750553185 3.115646362739187 3.0459719381506143 3.1240102313740357 3.0459719007185178 3.1323741000088532 3.0459718248938787 3.1490888172812235 3.0459717865170051 3.1574396659187767 3.045971747622823 3.165790514556297 3.0459717082010025 3.1741413631937845 3.0459716682541069 3.1824922118312409 3.0459716277975915 3.1908430604686648 3.0459715458581988 3.2075577777409281 3.0459715043385871 3.2159216463757696 3.0459714623324987 3.2242855150105783 3.0459714198583856 3.2326493836453554 3.0459713769216266 3.2410132522801001 3.0459713335145246 3.2493771209148128 3.0459712457180976 3.2661048581843213 3.0459712013385105 3.2744687268191122 3.045971156495586 3.2828325954538715 3.0459711112012084 3.2911964640886002 3.0459710654611136 3.2995603327232987 3.0459710192748877 3.3079242013579635 3.045970925997048 3.3246519386273752 3.0459708789004578 3.3330158072621217 3.0459708313679625 3.3413796758968357 3.04597078341251 3.3497435445315205 3.0459707350382339 3.3581074131661746 3.045970686240445 3.3664712818007971 3.0459705877708356 3.3831990190701218 3.0459705381170252 3.3915628877048234 3.0459704880432406 3.3999267563394939 3.0459704375518912 3.4082906249741334 3.0459703866487713 3.4166544936087422 3.0459703353430538 3.4250183622433199 3.0459702320320123 3.4417330795152203 3.0459701800323153 3.4500839281525422 3.0459701276360462 3.4584347767898342 3.0459700748390808 3.4667856254270952 3.0459700216453278 3.4751364740643251 3.0459699680667285 3.4834873227015248 3.0459698600956822 3.5002020399733431 3.0459698056771103 3.5085659086079621 3.0459697508889896 3.516929777242551 3.0459696957430631 3.5252936458771105 3.0459696402413701 3.5336575145116411 3.045969584376246 3.5420213831461416 3.0459694718843946 3.558749120415226 3.0459694152732584 3.5671129890498112 3.0459693583037422 3.5754768576843659 3.0459693009816822 3.5838407263188903 3.0459692433119221 3.5922045949533841 3.0459691852983122 3.600568463587849 3.0459690685891054 3.6172962008568637 3.0459690098841405 3.6256600694914125 3.0459689508446135 3.6340239381259321 3.0459688914792649 3.642387806760421 3.0459688317897755 3.6507516753948823 3.0459687717707715 3.6591155440293144 3.0459686510488635 3.6758432812982584 3.0459685903498444 3.6842071499327709 3.0459685293256453 3.6925710185672544 3.045968467985392 3.7009348872017087 3.0459684063344525 3.7092987558361363 3.0459683443744412 3.7176626244705337 3.0459682199289206 3.7343773417420718 3.0459681574560582 3.7427281903792147 3.0459680946740737 3.7510790390163282 3.0459680315791582 3.7594298876534133 3.0459679681742426 3.7677807362904683 3.0459679044689993 3.7761315849274952 3.045967778580231 3.7925605867282681 3.0459677164141952 3.8006387398920118 3.0459676539748264 3.8087168930557311 3.0459675912592803 3.8167950462194233 3.0459675282687657 3.8248731993830902 3.0459674650085504 3.8329513525467305 3.0459673357207064 3.8493933743447939 3.0459672696626359 3.8577572429792122 3.0459672033258824 3.8661211116136052 3.0459671367177452 3.8744849802479711 3.0459670698406818 3.8828488488823121 3.0459670026923105 3.891212717516626 3.0459668702468159 3.9076417193172825 3.0459668049833404 3.9157068524836336 3.0459667394651002 3.9237719856499589 3.0459666736893429 3.9318371188162571 3.0459666076604406 3.9399022519825277 3.0459665413898938 3.9479673851487744 3.0459664059398124 3.964396386949395 3.0459663367487297 3.9727602555837604 3.0459662672977879 3.9811241242180997 3.0459661975751726 3.9894879928524127 3.0459661275825525 3.9978518614866987 3.0459660573350718 4.0062157301209584 3.0459659163876402 4.0229434673895605 3.0459658456760188 4.0313073360238958 3.0459657747197082 4.0396712046582053 3.0459657035158343 4.0480350732924917 3.0459656320654322 4.0563989419267568 3.045965560373447 4.0647628105609952 3.0459654165240204 4.081490547829544 3.0459653443717061 4.0898544164638597 3.0459652719813661 4.0982182850981479 3.0459651993492511 4.106582153732413 3.0459651264782903 4.1149460223666541 3.0459650533780871 4.1233098910008703 3.0459649067517574 4.1400376282693774 3.0459648332189126 4.1484014969036664 3.045964759462426 4.1567653655379315 3.0459646854807327 4.1651292341721744 3.0459646112746621 4.173493102806396 3.0459645368474404 4.1818569714405927 3.0459643876781333 4.1985716887117048 3.0459643129299718 4.2069225373486274 3.0459642379703356 4.2152733859855251 3.04596416280474 4.2236242346224016 3.0459640874340819 4.2319750832592558 3.0459640118546392 4.240325931896086 3.0459638601433334 4.2570406491671582 3.045963784000381 4.2654045178013984 3.0459637076540855 4.27376838643562 3.04596363111806 4.2821322550698158 3.0459635543946595 4.2904961237039902 3.0459634774749813 4.2988599923381434 3.0459633258377772 4.3153020141358205 3.0459632511598893 4.3233801672993479 3.045963176290897 4.3314583204628532 3.0459631012255772 4.3395364736263362 3.0459630259677861 4.3476146267897979 3.0459629505304613 4.3556927799532392 3.045962799462623 4.371836066282845 3.045962723828143 4.3799011994490087 3.0459626480190609 4.3879663326151528 3.0459625720281456 4.3960314657812773 3.0459624958540563 4.4040965989473824 3.0459624195013406 4.412161732113467 3.04596226362517 4.4285907339137323 3.0459621840780398 4.4369546025479165 3.0459621043482139 4.4453184711820777 3.0459620244413932 4.4536823398162193 3.0459619443598038 4.4620462084503378 3.0459618641022037 4.4704100770844368 3.0459617032255486 4.4871378143527112 3.0459616226015953 4.4955016829868653 3.0459615418069119 4.5038655516209998 3.0459614608488783 4.5122294202551245 3.0459613797273568 4.520593288889236 3.0459612984346975 4.5289571575233278 3.0459611354767651 4.5456848947915471 3.0459610538180386 4.554048763425695 3.0459609719890239 4.5624126320598197 3.0459608899959982 4.5707765006939232 3.0459608078420475 4.5791403693280097 3.0459607255270669 4.5875042379620785 3.0459605635143907 4.6039332397622408 3.0459604838352696 4.611998372928328 3.0459604040045889 4.6200635060943975 3.0459603240198563 4.6281286392604528 3.0459602438818947 4.6361937724264939 3.0459601635948381 4.6442589055925163 3.0459599997583267 4.6606879073926404 3.0459599161957174 4.66905177602675 3.0459598324765542 4.6774156446608428 3.0459597486004761 4.685779513294916 3.0459596645685183 4.6941433819289689 3.045959580383109 4.702507250563003 3.0459594117130351 4.719234987831129 3.045959327231754 4.7275988564652254 3.0459592425974451 4.7359627250993031 3.0459591578076521 4.7443265937333594 3.0459590728642438 4.7526904623673971 3.045958987773421 4.7610543310014179 3.0459588202294365 4.7774963527988268 3.04595873778903 4.7855745059622157 3.0459586552117264 4.7936526591255859 3.045958572491442 4.8017308122889402 3.0459584896287741 4.8098089654522767 3.0459584066310037 4.8178871186155954 3.0459582375873206 4.8343161204156369 3.045958151515475 4.8426669690523543 3.0459580653088074 4.8510178176890566 3.0459579789731448 4.8593686663257429 3.0459578925078898 4.8677195149624115 3.0459578059060228 4.8760703635990641 3.0459576322669131 4.8927850808697686 3.0459575452359586 4.9011489495038116 3.0459574580692541 4.909512818137836 3.0459573707719421 4.917876686771848 3.0459572833462869 4.9262405554058493 3.0459571957916767 4.9346044240398346 3.0459570204175619 4.9513321613078478 3.0459569326061073 4.9596960299418802 3.0459568446613567 4.9680598985758957 3.045956756579828 4.9764237672098961 3.0459566683634614 4.9847876358438814 3.0459565800196131 4.9931515044778516 3.0459564031025095 5.0098792417458355 3.0459563145246951 5.0182431103798555 3.0459562258247082 5.0266069790138603 3.0459561370003745 5.0349708476478483 3.0459560480502526 5.0433347162818221 3.0459559589736354 5.0516985849157789 3.0459558262601965 5.0641420758367639 3.0459557827018489 5.0682216981240469 3.0459557391170997 5.0723013204111984 3.045955695517121 5.0763809426980524 3.0459556519026618 5.0804605649846479 3.0459556082640482 5.0845401872712319 3.0459555645811873 5.088619809558252 + 0 8 0.013591237713536762 7 0.027182475427073523 7 0.040773713140610283 7 0.054364950854147047 6 0.066005665054375703 6 0.072601751205641343 6 0.083853756251872219 6 0.095105692787787813 6 0.10635760328198175 6 0.1172215057942492 6 0.12847339908647665 6 0.13972528920498234 6 0.15097717749500111 6 0.16222906467842749 6 0.17348095116046314 6 0.18473283717785458 6 0.19559672682737031 6 0.20684861232483265 6 0.2177125016252959 6 0.22896438686290821 6 0.240216272019116 6 0.25146815711547982 6 0.26272004216693129 6 0.2739719271839785 6 0.28483581614081843 6 0.29608770111184385 6 0.30733958606697032 6 0.31859147100996416 6 0.32984335594322245 6 0.34109524086904741 6 0.35234712578894645 6 0.36329941918332276 6 0.37465738950725469 6 0.38562736379655138 6 0.39698533411449011 6 0.40832562352810814 6 0.41968359384217646 6 0.43065356812389582 6 0.44201153843559504 6 0.45335182784430539 6 0.464321802123625 6 0.47567977243343101 6 0.48703774274289691 6 0.49837803214995224 6 0.50973600245902806 6 0.52109397276803149 6 0.53245194307701438 6 0.54301624042206142 6 0.55437421073113158 6 0.56534418500939787 6 0.57668447441650217 6 0.58804244472593259 6 0.59940041503553065 6 0.61075838534529636 6 0.62211635565524903 6 0.63345664506320865 6 0.64481461537355156 6 0.65617258568408987 6 0.66753055599483435 6 0.67888852630578267 6 0.69022881571474759 6 0.7015867860260947 6 0.71294475633764687 6 0.72430272664939566 6 0.73566069696133862 6 0.74700098637128731 6 0.7579709606526035 6 0.76932893096510324 6 0.78028122434456815 6 0.79163919465741128 6 0.80299716497043294 6 0.81435513528362702 6 0.82571310559699118 6 0.83705339500832043 6 0.84841136532199735 6 0.85938133960476515 6 0.87033363298547151 6 0.88169160329958296 6 0.8930495736138464 6 0.90440754392826184 6 0.91535983730953341 6 0.92671780762421452 6 0.93807577793901742 6 0.94904575222284115 6 0.9603860416356752 6 0.97174401195082782 6 0.98310198226610224 6 0.99445995258148878 6 1 8 +7 0 0 7 539 90 0.066127367085483571 -0.0015387394450261382 0.066489868627134838 -0.0032530425365399551 0.065602542211566792 -0.0049673103027534984 0.064521513880446676 -0.0066815725942488162 0.063842663563133353 -0.0083958462531156085 0.063701625076677232 -0.01011013511295124 0.063773786125820492 -0.011824429998860733 0.063274288302996876 -0.013538708727456772 0.0634372396942504 -0.01719617850512797 0.062062978051753162 -0.017151348217156963 0.062532687526553901 -0.021700047764344914 0.062576242447018496 -0.02531267476767507 0.061746089533571934 -0.02674722718332883 0.062064408926152261 -0.030777829354729263 0.06184355402437608 -0.033538751501612118 0.061729855714597034 -0.036681471597029496 0.061636575483628435 -0.039824614438815985 0.061557525819271187 -0.042967469920283489 0.061488963546850975 -0.046110129158657767 0.061428745967061063 -0.049252959233783151 0.061375486993805059 -0.052396077926827163 0.061327713292039669 -0.055538828458985279 0.06117613540258534 -0.065518692687713376 0.061080499916828436 -0.0755155598454893 0.061005056082165172 -0.085517809966362712 0.060947649610048261 -0.095522603027981212 0.060899528580176082 -0.10552719682503398 0.060859865459161014 -0.1155321303761685 0.060796977430426412 -0.13410995274199991 0.060772321624435112 -0.14268115279513646 0.06075088865152712 -0.15125257977968928 0.060731949898923492 -0.15982414987162866 0.060715043860327431 -0.16839581368656861 0.060699850805625642 -0.17696754862753192 0.060678259064252602 -0.1903964716731284 0.060670906985506652 -0.19525361042136766 0.060663964849738086 -0.20011076448795523 0.060657392002901704 -0.20496793137596198 0.060651153501520873 -0.20982510908100746 0.06064522011268754 -0.21468229609126002 0.06062992866629336 -0.22782519075101451 0.06062109996962621 -0.23611091336588177 0.060612967415126784 -0.24439665406944061 0.060605434167527263 -0.25268240874699816 0.060598421365225995 -0.260968174331766 0.06059186812028762 -0.2692539488048607 0.060579593624722851 -0.28582546306616269 0.060573866229147434 -0.29411120240777738 0.060568501921536004 -0.30239694783939985 0.060563459674559818 -0.31068269822778405 0.060558704843742116 -0.31896845268718504 0.060554209167458274 -0.32725421057935972 0.060545692697899826 -0.3438257132826229 0.0605416696562006 -0.35211145799399995 0.060537859152759985 -0.36039720518827956 0.060534241215638905 -0.36868295447788396 0.060530798390037159 -0.37696870554707484 0.060527515738293278 -0.38525445815195386 0.060521354376977192 -0.4015402422930055 0.060518465076944972 -0.40954027371528551 0.060515702000809343 -0.41754030622269089 0.060513055256874941 -0.42554033967317823 0.060510516000729798 -0.43354037394727268 0.060508076435245299 -0.44154040894806773 0.060503299414276686 -0.4578261915885059 0.060500968718559936 -0.4661119392698948 0.0604987301898555 -0.47439768755987238 0.060496577090610702 -0.48268343638455524 0.060494503479290897 -0.49096918568169462 0.060492504210379272 -0.49925493540067745 0.060488645274904489 -0.51582643326129074 0.060486785389585511 -0.524112181399636 0.060484990507056142 -0.53239792987493983 0.060483256338563531 -0.54068367865013101 0.060481579077965759 -0.54896942769368828 0.060479955401731914 -0.55725517697964055 0.060476809280288993 -0.57382667464580217 0.060475286861978179 -0.58211242302484378 0.060473811946354379 -0.59039817160172336 0.060472381639635746 -0.59868392035647244 0.06047099342191381 -0.60696966927212215 0.060469645147153549 -0.61525541833470221 0.060467024470116128 -0.63182691591215323 0.060465752041323109 -0.64011266442636683 0.06046451541585824 -0.64839841306261758 0.060463312543271912 -0.65668416180939804 0.060462141663620926 -0.66496991065695943 0.06046100130746853 -0.67325565959731093 0.060458779070862535 -0.68982715713288856 0.060457696849258405 -0.69811290572687945 0.06045664227763619 -0.70639865439915561 0.060455614032485443 -0.71468440314323911 0.060454610820221175 -0.72297015195321068 0.060453631377183827 -0.73125590082370995 0.060451718179753332 -0.74782739833837741 0.060450784217678084 -0.75611314698190579 0.060449871930983348 -0.76439889567705177 0.060448980544695156 -0.77268464442030249 0.060448109161295727 -0.78097039320810036 0.060447256760723475 -0.78925614203684469 0.060445616845675336 -0.8055419240736581 0.060444828284148544 -0.81354195727958589 0.060444055923864377 -0.82154199051835575 0.060443299182573684 -0.82954202378780462 0.060442557487706473 -0.83754205708592289 0.060441830276371795 -0.84554209041085582 0.060440377827066995 -0.86182787243025483 0.060439653908822555 -0.87011362112708057 0.060438944330944731 -0.87839936984893463 0.060438248364501346 -0.88668511859379806 0.06043756546130772 -0.89497086736007925 0.060436895253926773 -0.90325661614661323 0.060435602259747034 -0.91954239817437011 0.060434978522026839 -0.9275424314140317 0.060434365802061449 -0.93554246467031299 0.060433763638808542 -0.94354249794206269 0.060433171650630557 -0.95154253122831101 0.060432589535294547 -0.95954256452827047 0.060431424107687613 -0.97582834654917328 0.060430841360852368 -0.9841140952708668 0.060430268493853946 -0.99239984400555836 0.060429705180106361 -1.0006855927524556 0.060429151102050258 -1.0089713415108315 0.060428605951152826 -1.0172570902800235 0.060427532817891642 -1.0338285877785947 0.060427004883301605 -1.042114336508005 0.060426485258440903 -1.050400085246965 0.060425973639700432 -1.058685833994873 0.060425469785558884 -1.0669715827512303 0.060424973516582652 -1.0752573315156366 0.060423995657350571 -1.0918288290151312 0.060423514057890745 -1.1001145777501737 0.06042303956622265 -1.1084003264923821 0.060422571898416169 -1.1166860752412953 0.060422110837434796 -1.1249718239965334 0.060421656233135702 -1.1332575727577954 0.060420759576580919 -1.1498290702583549 0.060420317513493901 -1.1581148189976502 0.060419881550063573 -1.1664005677423592 0.060419451460804643 -1.1746863164921462 0.060419027057691595 -1.1829720652467255 0.060418608190158728 -1.1912578140058618 0.060417781313149128 -1.2078293115075742 0.06041737324036723 -1.2161150602500779 0.060416970422610954 -1.2244008089966993 0.060416572733019543 -1.2326865577472437 0.060416180022015036 -1.2409723065015068 0.060415792117302171 -1.2492580552592716 0.060415038821118927 -1.2655438372884622 0.060414673187829816 -1.2735438705597295 0.0604143117908797 -1.2815439038339405 0.060413954516186155 -1.2895439371109454 0.060413601268705645 -1.2975439703906164 0.060413251972433621 -1.3055440036728467 0.060412548809632517 -1.3218297857019494 0.060412195153020889 -1.3301155344489555 0.06041184549668905 -1.3384012831984353 0.060411499740762709 -1.3466870319502657 0.060411157789373775 -1.3549727807043332 0.060410819550660362 -1.3632585294605377 0.060410150356091354 -1.3798300269653692 0.060409819390286702 -1.3881157757139913 0.060409491932590154 -1.3964015244645398 0.060409167895206284 -1.4046872732169196 0.060408847209307073 -1.4129730219710503 0.060408529825031816 -1.42125877072687 0.060407901408630484 -1.4378302682326041 0.060407590430829182 -1.4461160169825358 0.060407282609122849 -1.4544017657340091 0.060406977813639115 -1.4626875144869267 0.060406675953593704 -1.4709732632412098 0.060406376977290413 -1.4792590119968039 0.060405784789408674 -1.4958305095034208 0.060405491559316522 -1.5041162582544183 0.06040520108152464 -1.5124020070066102 0.060404913283795839 -1.5206877557599474 0.060404628121975827 -1.528973504514384 0.060404345579993114 -1.5372592532698799 0.060403785574323784 -1.5538307507772491 0.060403508141726743 -1.5621164995291537 0.06040323319841797 -1.5704022482820197 0.060402960630559228 -1.5786879970357794 0.060402690384124033 -1.5869737457903916 0.060402422464897597 -1.5952594945458396 0.060401891310794244 -1.6118309920539697 0.060401627973205085 -1.6201167408066024 0.060401366855064371 -1.6284024895599971 0.060401107901096526 -1.6366882383141206 0.06040085107139527 -1.6449739870689422 0.060400596341423751 -1.653259735824433 0.060400097644942849 -1.6696106178461465 0.060399853644354642 -1.6776757511123745 0.060399611563838891 -1.6857408843791877 0.060399371309037497 -1.6938060176465408 0.060399132827645086 -1.7018711509144051 0.060398896109409135 -1.7099362841827674 0.060398417561206966 -1.7263652861892413 0.060398175821708137 -1.7347291549273827 0.060397935931468451 -1.7430930236660223 0.060397697853003071 -1.7514568924051337 0.06039746154750715 -1.759820761144695 0.060397226974855896 -1.7681846298846911 0.060396769167736002 -1.7846266518888272 0.060396545824945712 -1.7927048051529322 0.06039632403792352 -1.8007829584174095 0.060396103779747502 -1.8088611116822413 0.060395885023883968 -1.8169392649474125 0.060395667744187441 -1.8250174182129086 0.060395228451967396 -1.8414594402168956 0.060395006547390433 -1.8498233089554055 0.060394786162180587 -1.8581871776942347 0.060394567262990369 -1.866551046433369 0.060394349822113967 -1.8749149151727944 0.06039413381748724 -1.8832787839124983 0.060393704981931418 -1.8999935013933718 0.060393492147300103 -1.9083443501345465 0.060393280689988837 -1.9166951988759737 0.060393070578897791 -1.9250460476176385 0.060392861790632142 -1.9333968963595314 0.060392654309502129 -1.9417477451016454 0.060392241624081029 -1.9584624625825324 0.060392036436196943 -1.966826331321291 0.060391832510979945 -1.9751902000602506 0.060391629810504215 -1.9835540687994044 0.060391428311808847 -1.9919179375387437 0.06039122800689796 -2.0002818062782568 0.060390836600117515 -2.0167238282823616 0.060390645391070578 -2.0248019815469509 0.060390455270346477 -2.0328801348116881 0.060390266225318061 -2.0409582880765691 0.060390078235984343 -2.0490364413415856 0.060389891274970513 -2.0571145946067313 0.060389512762619647 -2.0735566166107993 0.060389321277708005 -2.0819204853497291 0.060389130861655191 -2.090284354088785 0.060388941511115797 -2.0986482228279622 0.060388753210536932 -2.1070120915672557 0.060388565932158182 -2.115375960306658 0.060388193629871426 -2.1320906777875694 0.060388008604252488 -2.1404415265290742 0.060387824563813135 -2.1487923752706748 0.060387641502385951 -2.1571432240123722 0.060387459402977732 -2.1654940727541612 0.060387278237769522 -2.1738449214960327 0.060386923585137038 -2.1902739235026782 0.0603867500579056 -2.1983520767674447 0.060386577369157465 -2.2064302300322809 0.060386405505902352 -2.214508383297185 0.060386234459424461 -2.2225865365621544 0.060386064225282463 -2.2306646898271838 0.060385719389066062 -2.2471067118312993 0.060385544858659206 -2.255470580570393 0.060385371163742728 -2.263834449309543 0.060385198273303589 -2.2721983180487464 0.060385026173661781 -2.280562186787999 0.060384854868470381 -2.2889260555272974 0.060384513888960663 -2.3056537930057242 0.060384344194968305 -2.3140176617448582 0.060384175280383166 -2.3223815304840327 0.060384007130534115 -2.3307453992232423 0.060383839732434233 -2.3391092679624852 0.060383673074780785 -2.3474731367017618 0.06038334147942713 -2.3641878541827119 0.060383176530217526 -2.3725387029243845 0.06038301230142952 -2.380889551666086 0.060382848788699747 -2.3892404004078105 0.060382685982198203 -2.3975912491495577 0.06038252386662827 -2.4059420978913262 0.060382200724111997 -2.4226568153722852 0.060382039710331896 -2.4310206841114703 0.060381879365345593 -2.4393845528506732 0.060381719677519416 -2.4477484215898935 0.060381560638126899 -2.4561122903291284 0.060381402241348803 -2.4644761590683757 0.060381086727197268 -2.4812038965468317 0.060380929621184312 -2.4895677652860471 0.060380773136794193 -2.49793163402527 0.060380617254872884 -2.5062955027644995 0.060380461966552543 -2.5146593715037335 0.060380307273251312 -2.523023240242972 0.060379999100095609 -2.5397509777214458 0.060379845603188938 -2.5481148464606798 0.060379692690923477 -2.556478715199916 0.060379540356390704 -2.5648425839391513 0.060379388590803509 -2.5732064526783858 0.060379237383496306 -2.5815703214176184 0.060378946588292189 -2.597713607950034 0.060378806937504123 -2.6054930257432178 0.060378667753386683 -2.6132724435363985 0.06037852902583106 -2.6210518613295739 0.060378390750793577 -2.6288312791227431 0.060378252930295688 -2.6366106969159064 0.060377967895150549 -2.6527539834483327 0.060377820751787506 -2.6611178521875973 0.060377674119113746 -2.6694817209268535 0.060377527981639097 -2.6778455896660978 0.060377382331604404 -2.6862094584053295 0.06037723716898153 -2.6945733271445507 0.06037695277590608 -2.7110153491487652 0.060376813504658663 -2.7190935024137595 0.060376674680639966 -2.7271716556787413 0.06037653629749927 -2.7352498089437094 0.060376398349626208 -2.7433279622086628 0.060376260832150801 -2.7514061154736038 0.060375982021926858 -2.7678351174803386 0.060375840764127608 -2.7761859662221253 0.060375699951349941 -2.7845368149638969 0.060375559573430437 -2.7928876637056534 0.060375419626237971 -2.8012385124473949 0.060375280111673743 -2.8095893611891207 0.060375001746835355 -2.8263040786701388 0.060374862895742024 -2.8346679474094323 0.060374724469136214 -2.843031816148708 0.060374586455947253 -2.851395684887966 0.060374448849288852 -2.8597595536272071 0.060374311646459157 -2.8681234223664305 0.060374038051422163 -2.8848511598449558 0.060373901649656871 -2.8932150285842613 0.060373765646897608 -2.9015788973235468 0.060373630042533807 -2.9099427660628132 0.060373494832091486 -2.9183066348020601 0.06037336000723325 -2.9266705035412857 0.060373091104283308 -2.943398241019819 0.060372957037717202 -2.951762109759128 0.060372823342872466 -2.9601259784984171 0.060372690011484202 -2.9684898472376835 0.060372557040209988 -2.976853715976929 0.060372424430629908 -2.9852175847161533 0.060372159947863248 -3.0019453221946946 0.06037202806549679 -3.0103091909340116 0.06037189654082669 -3.0186730596733051 0.060371765370030493 -3.0270369284125769 0.060371634546783848 -3.0354007971518278 0.060371504062260481 -3.043764665891056 0.060371243950618915 -3.0604793833721033 0.060371114313437925 -3.0688302321139216 0.060370985008503152 -3.0771810808557185 0.060370856042448448 -3.0855319295974928 0.060370727413627361 -3.0938827783392435 0.060370599112113323 -3.1022336270809707 0.060370342927729803 -3.1189483445620216 0.060370215068451465 -3.1273122133013485 0.060370087521617301 -3.1356760820406522 0.06036996027537668 -3.144039950779931 0.060369833326275484 -3.1524038195191859 0.060369706679256056 -3.1607676882584181 0.060369454016058519 -3.1774954257369816 0.060369327993625807 -3.1858592944763098 0.060369202268776623 -3.1942231632156144 0.060369076833877787 -3.2025870319548972 0.060368951685245434 -3.2109509006941575 0.060368826823145129 -3.2193147694333928 0.060368577680438358 -3.2360425069119598 0.060368453403027995 -3.244406375651292 0.060368329405581789 -3.252770244390601 0.060368205679783786 -3.261134113129887 0.060368082222980908 -3.2694979818691503 0.060367959038182949 -3.2778618506083892 0.060367713229942367 -3.2945895880869629 0.06036759059493281 -3.3029534568262982 0.060367468229656503 -3.3113173255656099 0.060367346132564448 -3.3196811943048976 0.06036722429993624 -3.3280450630441609 0.060367102725880008 -3.3364089317833998 0.060366860267648634 -3.3531236492644765 0.060366739379858647 -3.3614744980063134 0.060366618746771218 -3.3698253467481263 0.06036649837103554 -3.3781761954899143 0.060366378250141288 -3.3865270442316802 0.060366258376418472 -3.3948778929734229 0.060366018911124315 -3.4115926104545022 0.060365899336333448 -3.4199564791938406 0.060365779998889084 -3.4283203479331545 0.060365660891248521 -3.4366842166724467 0.060365542012102265 -3.4450480854117163 0.060365423366374078 -3.4534119541509622 0.060365186564067759 -3.4701396916295488 0.06036506839747497 -3.478503560368893 0.06036495046105602 -3.4868674291082122 0.060364832751062261 -3.4952312978475097 0.060364715264382952 -3.5035951665867828 0.060364597998545232 -3.5119590353260333 0.060364363904883082 -3.5286867728046269 0.060364247083075251 -3.5370506415439729 0.060364130476143994 -3.5454145102832939 0.060364014078475789 -3.5537783790225932 0.060363897888990228 -3.5621422477618689 0.060363781911140099 -3.5705061165011225 0.060363550394682518 -3.5872338539797193 0.060363434853579166 -3.5955977227190656 0.060363319521327251 -3.6039615914583876 0.060363204392065439 -3.6123254601976882 0.060363089462345178 -3.6206893289369648 0.060362974731130621 -3.6290531976762184 0.060362745846757139 -3.6457679151573172 0.060362631685475732 -3.6541187638991635 0.060362517722731567 -3.6624696126409861 0.060362403960972047 -3.6708204613827853 0.060362290398314797 -3.6791713101245618 0.060362177028547771 -3.6875221588663165 0.06036195434982549 -3.7039511608731304 0.06036184502963933 -3.7120293141381913 0.06036173588500425 -3.7201074674032313 0.060361626917748427 -3.7281856206682495 0.060361518127094664 -3.7362637739332465 0.060361409509660291 -3.7443419271982239 0.060361188773488721 -3.7607839492025539 0.060361076674303966 -3.7691478179419038 0.060360964754106919 -3.7775116866812319 0.060360853008210195 -3.7858755554205383 0.060360741435035108 -3.7942394241598243 0.060360630036111661 -3.8026032928990872 0.06036041156853348 -3.8190322949059046 0.060360304478269247 -3.8270974281734662 0.060360197551630863 -3.8351625614410083 0.060360090790386511 -3.8432276947085273 0.060359984191727625 -3.8512928279760232 0.060359877748268856 -3.8593579612434992 0.060359661210428461 -3.8757869632503348 0.060359551123462696 -3.8841508319896874 0.060359441203396091 -3.8925147007290195 0.060359331457816127 -3.900878569468329 0.060359221885652341 -3.9092424382076172 0.060359112477176402 -3.9176063069468845 0.06035889395082783 -3.934334044425507 0.060358784840450548 -3.9426979131648574 0.060358675887228062 -3.9510617819041869 0.060358567093006958 -3.9594256506434959 0.060358458457122559 -3.9677895193827886 0.060358349976399057 -3.9761533881220612 0.060358133313899685 -3.9928811256006829 0.060358025128831296 -4.0012449943400386 0.06035791709663877 -4.0096088630793734 0.060357809219729046 -4.0179727318186886 0.060357701496221536 -4.0263366005579835 0.060357593919948042 -4.034700469297257 0.06035737904095749 -4.0514282067758876 0.060357271742554293 -4.0597920755152437 0.060357164587788559 -4.0681559442545785 0.060357057577666441 -4.0765198129938955 0.060356950711654811 -4.0848836817331948 0.060356843987681361 -4.0932475504724755 0.060356630982508895 -4.1099622679535965 0.060356524705212404 -4.1183131166954459 0.060356418563738808 -4.1266639654372756 0.060356312554547063 -4.1350148141790859 0.060356206677061319 -4.1433656629208757 0.06035610093367088 -4.1517165116626469 0.060355889561140096 -4.168431229143776 0.06035578393912111 -4.1767950978831303 0.060355678447702399 -4.1851589666224678 0.060355573078142252 -4.1935228353617848 0.060355467828928137 -4.2018867041010841 0.060355362705776634 -4.2102505728403647 0.060355156323820526 -4.2266925948447156 0.060355055039558625 -4.234770748109784 0.060354953878036521 -4.2428489013748365 0.060354852842610017 -4.2509270546398685 0.060354751930802052 -4.2590052079048846 0.060354651134302668 -4.2670833611698828 0.06035444990593157 -4.2832266477024454 0.06035434947660713 -4.2912917809700089 0.060354249159424563 -4.2993569142375554 0.060354148959028978 -4.3074220475050868 0.060354048876281818 -4.3154871807726005 0.060353948908260839 -4.3235523140400973 0.060353745489408514 -4.3399813160469511 0.060353642053784497 -4.348345184786309 0.060353538735499278 -4.3567090535256474 0.060353435530893229 -4.3650729222649689 0.060353332438535877 -4.3734367910042753 0.060353229459225943 -4.3818006597435657 0.060353023732756479 -4.3985283972222202 0.060352920988744792 -4.4068922659615692 0.060352818354388126 -4.4152561347009023 0.060352715824946106 -4.4236200034402264 0.060352613400506003 -4.4319838721795408 0.060352511085982767 -4.4403477409188392 0.060352306696255291 -4.4570754783974804 0.060352204616845227 -4.4654393471368392 0.060352102646807064 -4.4738032158761802 0.060352000782108825 -4.4821670846155062 0.060351899020768415 -4.4905309533548161 0.060351797362853572 -4.4988948220941101 0.060351597885294803 -4.5153238241009701 0.060351500053721266 -4.5233889573685317 0.060351402319490412 -4.5314540906360765 0.060351304684202876 -4.5395192239036088 0.060351207147330846 -4.5475843571711305 0.060351109706218035 -4.5556494904386389 0.060350911400056835 -4.5720784924454945 0.060350810543457159 -4.5804423611848524 0.060350709787407857 -4.5888062299241961 0.060350609132140312 -4.5971700986635211 0.060350508576990251 -4.6055339674028302 0.060350408120397665 -4.6138978361421241 0.060350207399416003 -4.6306255736207778 0.060350107132852562 -4.6389894423601392 0.060350006964575334 -4.647353311099482 0.060349906896162799 -4.6557171798388097 0.060349806926413153 -4.6640810485781214 0.060349707051344313 -4.6724449173174163 0.060349510885840653 -4.6888869393217876 0.06034941458721229 -4.6969650925868587 0.06034931837650976 -4.7050432458519165 0.060349222257641597 -4.7131213991169592 0.060349126230223739 -4.7211995523819876 0.060349030289579615 -4.7292777056470019 0.060348835327843776 -4.745706707653869 0.060348736323409903 -4.7540575563957201 0.060348637405569026 -4.762408405137557 0.060348538570578154 -4.7707592538793788 0.060348439818820668 -4.7791101026211873 0.060348341154806327 -4.7874609513629816 0.060348143865857275 -4.8041756688441399 0.060348045236884466 -4.8125395375834925 0.060347946695100421 -4.82090340632283 0.060347848237201594 -4.8292672750621586 0.060347749861733448 -4.8376311438014783 0.060347651569090451 -4.8459950125407829 0.060347455153941687 -4.8627227500194437 0.060347357026265321 -4.8710866187588016 0.060347258984202345 -4.8794504874981444 0.060347161029987814 -4.8878143562374756 0.060347063162376494 -4.8961782249767936 0.060346965376642844 -4.9045420937160999 0.060346769952519308 -4.9212698311947589 0.060346672317057051 -4.9296336999341168 0.060346574760063332 -4.9379975686734614 0.060346477282935344 -4.9463614374127944 0.060346379886598536 -4.9547253061521133 0.060346282571506482 -4.9630891748914197 0.060346137910133206 -4.9755326659691397 0.06034609051345103 -4.9796122883074405 0.0603460431337252 -4.9836919106458035 0.060345995763780601 -4.9877715329843122 0.060345948403136243 -4.9918511553229497 0.060345901058005212 -4.9959307776615898 0.060345853741294739 -5.0000103999999999 + 0 8 0.013591237713536762 7 0.027182475427073523 7 0.040773713140610283 7 0.054364950854147047 6 0.066005665054375703 6 0.072601751205641343 6 0.083853756251872219 6 0.095105692787787813 6 0.10635760328198175 6 0.1172215057942492 6 0.12847339908647665 6 0.13972528920498234 6 0.15097717749500111 6 0.16222906467842749 6 0.17348095116046314 6 0.18473283717785458 6 0.19559672682737031 6 0.20684861232483265 6 0.2177125016252959 6 0.22896438686290821 6 0.240216272019116 6 0.25146815711547982 6 0.26272004216693129 6 0.2739719271839785 6 0.28483581614081843 6 0.29608770111184385 6 0.30733958606697032 6 0.31859147100996416 6 0.32984335594322245 6 0.34109524086904741 6 0.35234712578894645 6 0.36329941918332276 6 0.37465738950725469 6 0.38562736379655138 6 0.39698533411449011 6 0.40832562352810814 6 0.41968359384217646 6 0.43065356812389582 6 0.44201153843559504 6 0.45335182784430539 6 0.464321802123625 6 0.47567977243343101 6 0.48703774274289691 6 0.49837803214995224 6 0.50973600245902806 6 0.52109397276803149 6 0.53245194307701438 6 0.54301624042206142 6 0.55437421073113158 6 0.56534418500939787 6 0.57668447441650217 6 0.58804244472593259 6 0.59940041503553065 6 0.61075838534529636 6 0.62211635565524903 6 0.63345664506320865 6 0.64481461537355156 6 0.65617258568408987 6 0.66753055599483435 6 0.67888852630578267 6 0.69022881571474759 6 0.7015867860260947 6 0.71294475633764687 6 0.72430272664939566 6 0.73566069696133862 6 0.74700098637128731 6 0.7579709606526035 6 0.76932893096510324 6 0.78028122434456815 6 0.79163919465741128 6 0.80299716497043294 6 0.81435513528362702 6 0.82571310559699118 6 0.83705339500832043 6 0.84841136532199735 6 0.85938133960476515 6 0.87033363298547151 6 0.88169160329958296 6 0.8930495736138464 6 0.90440754392826184 6 0.91535983730953341 6 0.92671780762421452 6 0.93807577793901742 6 0.94904575222284115 6 0.9603860416356752 6 0.97174401195082782 6 0.98310198226610224 6 0.99445995258148878 6 1 8 +1 1.0935246108253915e-16 -2.9113907224461562 1 0 +2 -1.8394783524052177e-07 -2.5876592246808826e-07 0.21790508690556759 0.97596996526567203 0.97596996526567203 -0.21790508690556759 5 +7 0 0 7 32 6 5.4229976272795568 0.99999001850240621 5.3490444441622316 0.99998905669584293 5.2750806045536711 0.99998815855546064 5.2011244351373067 0.99998733295542375 5.1271732584585488 0.99998658752008551 5.0532173339476216 0.99998592884281223 4.9792537698548847 0.99998536247520486 4.8602616599079651 0.99998460657824728 4.8152220550664868 0.99998435626201332 4.7701830824511893 0.99998414269390656 4.7251445127992895 0.9999839666426531 4.6801055432476337 0.99998382868942159 4.6350659438720836 0.99998372922742396 4.545180653453655 0.99998360795491059 4.5003332565278384 0.99998358581255697 4.4554864753853662 0.99998360223369276 4.4106400865109698 0.99998365722786275 4.3657933039911745 0.99998375061505751 4.3209459025673196 0.99998388202584843 4.2150247298516543 0.99998428088607472 4.1539461494767664 0.99998458037413385 4.0928705301465369 0.99998494795337367 4.0317967551528415 0.99998538156274996 3.9707210436787017 0.99998587857888488 3.9096423494201589 0.99998643581822066 3.7475880588091011 0.9999880640320068 3.6465575011925613 0.99998923340886015 3.5455681482997941 0.99999054002374088 3.4445910698101523 0.99999196284947889 3.3436027277153357 0.99999347862759336 3.2425737188154287 0.99999506180903752 3.1415926535897918 0.99999668389414376 + 0 8 0.22692526494317439 6 0.36512627288818755 6 0.50273755083569294 6 0.69014445328972962 6 1 8 +7 0 0 7 32 6 66.548697744170752 -3.757314480187226 66.270834353275362 -3.5020569610908199 66.014953647283548 -3.222788275944072 65.783621142419506 -2.9218431440285255 65.578988035424459 -2.6018314317037445 65.402864251580979 -2.2655842311930172 65.256715559911385 -1.9161483929483067 65.071468309010527 -1.3379987366729973 65.012849367691459 -1.1154794286450416 64.965962080587758 -0.89000395101231133 64.930981300059472 -0.66231455419044316 64.908022502226657 -0.43316286852532049 64.897141707362977 -0.2033093973093997 64.899523999500815 0.25528283547454123 64.912684297394861 0.48403078108846842 64.937811887567321 0.71196180609208348 64.97484391818908 0.93832569790330012 65.023659177270574 1.1623815431851743 65.084078177926514 1.3833982187214755 65.253624248469094 1.8965274224254134 65.372473717007978 2.1854535618203834 65.511809371631628 2.4655943542963734 65.670836084580486 2.7352210644638362 65.848591706449582 2.9927021698625773 66.04394788669083 3.2365050433912956 66.605504737366559 3.8433532279782741 67.000149106424416 4.1804598290490818 67.433447551733636 4.4698209510113909 67.898391820653003 4.7063785015152604 68.387381807902543 4.8862674867802411 68.892206095486287 5.0068059184182392 69.403883228383279 5.0670334640268173 + 0 8 0.22692526494317439 6 0.36512627288818755 6 0.50273755083569294 6 0.69014445328972962 6 1 8 +7 0 0 6 17 4 6.2831853071795871 1.0000033534009101 6.262868005852364 1.0000030270388172 6.242550702838308 1.0000026990247031 6.2222333969603838 1.0000023696014049 6.2019160895026593 1.0000020390132427 6.1815987842102968 1.0000017075060199 6.115088349492189 1.0000006200892508 6.0688945648246175 0.99999986136702435 6.0227015256539991 0.99999910208382603 5.9765084876256269 0.99999834515059749 5.930314703115446 0.99999759346321282 5.8072698009698476 0.99999561283032601 5.7304099801982753 0.99999439808750712 5.6535597107943136 0.9999932191266766 5.5767093314039951 0.99999208849420007 5.4998492740602209 0.99999101800526946 5.4229976272795568 0.99999001850240621 + 0 7 0.14172007033903283 5 0.46393294951118735 5 1 7 +7 0 0 6 17 4 70.596731519212767 -5.0670868686103363 70.493782531022859 -5.0792045977073172 70.390538056759169 -5.088812356541351 70.287074698338429 -5.0959011305067738 70.183469246096649 -5.1004650305877286 70.079798678789032 -5.1025012933581824 69.740463533222112 -5.1008939217316751 69.504845500980892 -5.0867133518112739 69.270198324352762 -5.0594732817794048 69.037423059850212 -5.0192614358563032 68.807408786530161 -4.9662484248239664 68.204407443923358 -4.791613804324415 67.837802053623761 -4.6477952414336166 67.485313306365882 -4.4704042419266266 67.150700280963235 -4.261238158782537 66.837451497156508 -4.0225763643793311 66.548697744170752 -3.757314480187226 + 0 7 0.14172007033903283 5 0.46393294951118735 5 1 7 +1 0 -2.9113907224461562 1 0 +2 -1.8394783524052177e-07 -2.5876592246808826e-07 0.21790508690556759 0.97596996526567203 0.97596996526567203 -0.21790508690556759 5 +7 0 0 6 52 11 3.1415926535897931 0.99999668389414398 3.1209326995442503 0.99999701576035749 3.1002727392558125 0.99999734933486462 3.0796127757409173 0.999997684362251 3.058952812177798 0.99999802058556841 3.0382928519064869 0.99999835774633272 2.9373945293933739 1.0000000076681042 2.8571460558379793 1.0000013301410042 2.7769094461057655 1.0000026474273338 2.6966727794015717 1.0000039443424995 2.6164241802627966 1.0000052060329474 2.4992538130884587 1.0000069760254293 2.4623216803628956 1.0000075234552188 2.425389508378029 1.0000080590369662 2.3884573324556659 1.0000085814476634 2.3515251890182163 1.000009089418106 2.2939442563081798 1.0000098569879217 2.2732953916176881 1.0000101273501663 2.252646523255414 1.000010392608037 2.2319976529729626 1.0000106525567285 2.2113487825353477 1.0000109069982237 2.1418050089015086 1.0000117447454062 2.0929092559854632 1.000012301808292 2.0440145020027978 1.0000128243744359 1.9951197635431255 1.0000133101495228 1.9462240462014766 1.0000137571026704 1.8223649422465025 1.0000147864972888 1.7473933803510155 1.0000153142010328 1.672430342538417 1.0000157401067364 1.597467341242006 1.0000160596996344 1.5224958583912769 1.0000162700107154 1.3735407636242418 1.0000164687805801 1.2995431397985091 1.0000164601033292 1.2255534662374583 1.0000163429840618 1.1515637588338823 1.0000161183295766 1.0775660607623425 1.0000157885757888 0.95468897985513479 1.0000150736630118 0.90580188249980653 1.000014745240376 0.8569157632086547 1.0000143740565883 0.80802962847669935 1.0000139616440991 0.75914249574085568 1.0000135098304235 0.68319578051713348 1.0000127500041829 0.65613533908071764 1.0000124678462829 0.62907489353168122 1.0000121746206456 0.6020144511584854 1.0000118707086465 0.57495401909306221 1.0000115565151166 0.4565834934386454 1.0000101390354907 0.36525373366884545 1.0000089331677231 0.27394661260238429 1.0000076317236284 0.18263968862904328 1.0000062538304706 0.091310371985325739 1.0000048201431537 0 1.0000033534009105 + 0 7 0.039458558097596984 5 0.19270625779177178 5 0.2632430533740347 5 0.30268043749101903 5 0.39606507565524723 5 0.53923970690914458 5 0.68055522031377191 5 0.77392339104852115 5 0.8256062468689962 5 1 7 +7 0 0 6 52 11 69.403883228383279 5.0670334640268146 69.508568458512173 5.0793555594787563 69.61355925045082 5.0890823111637626 69.718775035185146 5.0962042380205608 69.824135058201421 5.1007152022211466 69.929558379486238 5.1026124091707867 70.444333862588209 5.0991156265294917 70.853488370758498 5.0569177841140105 71.25756613866379 4.9753178660900277 71.651900890805948 4.8551607627163564 72.031984815094603 4.697919500980908 72.559944870208142 4.4175044876306684 72.722441498933165 4.3217420263584554 72.880611259327466 4.2188220677533126 73.03406275769477 4.1089911148534926 73.182423876763266 3.9925239251066391 73.405247703229819 3.8010653428740171 73.483452426249656 3.7304271696124189 73.55989452016729 3.6578617726813136 73.634514889447232 3.5834243280653424 73.707256767596476 3.507172405637458 73.945735766338615 3.2444528344484849 74.102570635325478 3.0498984464075982 74.247842922258116 2.8463049884072116 74.380911980916224 2.6345340756773545 74.50122453729125 2.4155058041131485 74.772503781298113 1.8447620703228784 74.905634094715424 1.4845221670041031 75.005998236368455 1.1130429679025413 75.072512544559331 0.7340370828608016 75.104585509633736 0.35132638341587352 75.099951445816288 -0.40863446129432468 75.064131683679946 -0.78596236701492916 74.994805996385892 -1.15932283645013 74.892579450473562 -1.5250467133990133 74.758524952865329 -1.879573279939057 74.485804157396728 -2.4440703319366617 74.364126070416276 -2.6622923429052858 74.229742250267506 -2.8731788442628772 74.083211494891273 -3.0758137492650497 73.925179541139997 -3.2693399621541825 73.662940574771042 -3.5546012221706262 73.56620201475431 -3.6532081124997386 73.466286288359058 -3.7486466562761582 73.363323608904707 -3.8407897507345594 73.257450877508006 -3.9295175293798135 72.782229833992602 -4.3022076397323197 72.384066582079015 -4.5495935305066837 71.95997863040887 -4.7523886552034238 71.516212219592475 -4.9074592548195675 71.059406667636011 -5.0126271579606749 70.596731519212767 -5.0670868686103381 + 0 7 0.039458558097596984 5 0.19270625779177178 5 0.2632430533740347 5 0.30268043749101903 5 0.39606507565524723 5 0.53923970690914458 5 0.68055522031377191 5 0.77392339104852115 5 0.8256062468689962 5 1 7 +7 0 0 3 47 45 0 0 -4.0106753966821868e-11 0.14844440407250586 -8.3954569190116748e-11 0.44416846054281584 -8.3909774652288533e-11 0.88418365397198384 -6.9540364551863061e-11 1.3205499577731277 -6.3598547017373145e-11 1.7531941409428964 -7.5768330789932417e-11 2.1820515631542796 -1.0408794724608087e-10 2.607070792808388 -1.3993602790681887e-10 3.0282161018267599 -1.7296096425116531e-10 3.445467967753709 -1.9529634771680626e-10 3.858817751616503 -2.0821912791620815e-10 4.2682678273562917 -2.2059609839544414e-10 4.673789340507863 -2.2594424856103328e-10 5.0753723224407006 -2.1832937445046816e-10 5.4730447432068399 -1.9157216504485143e-10 5.8668456151953192 -1.4173796843441916e-10 6.256820100063476 -7.0737666342198625e-11 6.6430167040005736 1.3174557210376878e-11 7.0254880562088209 9.3223902648075995e-11 7.4042937687612955 1.3287030436698589e-10 7.7794967491141271 1.4276896253608371e-10 8.1511888192203585 1.3661278727620054e-10 8.5194958784331032 1.2762759118947202e-10 8.8844535567756875 1.151080239127572e-10 9.2461620645595541 9.0627682628518009e-11 9.6047572326724264 4.4327758418188877e-11 9.960387229942981 -2.6295900636671548e-11 10.313196108601129 -1.1106903853606323e-10 10.663309310666929 -1.3305781095592643e-10 11.010845783236938 -1.1331572060162164e-10 11.355918779397319 -1.1417697435542514e-10 11.698644838798794 -1.8383424339093329e-10 12.0391554658261 -2.712417564308791e-10 12.377624785258453 -2.6239025362938598e-10 12.714231113686379 -2.6549687450766954e-10 13.049094923625915 -2.7112280735866393e-10 13.382360574903466 -2.4847405613307091e-10 13.714182233368911 -1.7238179928825622e-10 14.044724837406433 -9.0067280028197164e-11 14.37415719892425 -5.8708460111846063e-11 14.702646864999098 -7.9915053423369805e-11 15.030351366607286 -1.2367022810228822e-10 15.357417641746222 -1.5943155120877466e-10 15.683989769622901 -1.1710730332743068e-11 16.01021531904421 4.2668377373775628e-11 16.227591406896767 3.7470787253524443e-11 16.336281617922587 + 0 4 0.52791842868409089 1 1.0558368573681818 1 1.5837552860522726 1 2.1116737147363636 1 2.6395921434204546 1 3.1675105721045451 1 3.6954290007886361 1 4.2233474294727271 1 4.7512658581568177 1 5.2791842868409091 1 5.8071027155249997 1 6.3350211442090902 1 6.8629395728931817 1 7.3908580015772722 1 7.9187764302613637 1 8.4466948589454542 1 8.9746132876295448 1 9.5025317163136354 1 10.030450144997728 1 10.558368573681818 1 11.086287002365909 1 11.614205431049999 1 12.14212385973409 1 12.67004228841818 1 13.197960717102273 1 13.725879145786363 1 14.253797574470454 1 14.781716003154544 1 15.309634431838635 1 15.837552860522727 1 16.365471289206816 1 16.893389717890908 1 17.421308146575001 1 17.94922657525909 1 18.477145003943182 1 19.005063432627271 1 19.532981861311363 1 20.060900289995455 1 20.588818718679544 1 21.116737147363636 1 21.644655576047725 1 22.172574004731818 1 22.70049243341591 1 23.228410862099999 4 +7 0 0 3 47 45 3.7478356888392143e-11 16.336281798698415 2.9854023498641613e-11 16.444972077094036 6.156883062193253e-11 16.662350368514627 1.5550160081738222e-10 16.988581156937663 1.8179753183508671e-10 17.315155047818358 9.4595602703176593e-11 17.642218179157304 2.9466977664304545e-11 17.969918685652196 4.4643771178547141e-11 18.298408667636444 1.0585449933018998e-10 18.62784546584318 1.7578176595133672e-10 18.95839172612056 2.1632533305692885e-10 19.290213138167221 2.3155504038268982e-10 19.623475662713979 2.2662668159482818e-10 19.958337083328644 1.688569366636214e-10 20.29494454006289 6.6547443972404599e-11 20.633418286377541 -4.7077542149855507e-11 20.973935217656617 -1.319287716562662e-10 21.31666667400291 -1.6899277431430107e-10 21.661741947769862 -1.6840576356286245e-10 22.009278477067365 -1.8813936025611642e-10 22.359391456923088 -1.9540281518978175e-10 22.712193545968208 -1.7872703471451866e-10 23.067817835814601 -1.4209264851611239e-10 23.426410152849673 -9.8231308271980383e-11 23.788118706396382 -6.1431029670645348e-11 24.153078033214971 -4.0487838864430668e-11 24.5213870046748 -3.1209473768069072e-11 24.893080183145031 -3.5507090619307148e-11 25.268284203185594 -4.5216429031853679e-11 25.647087538615562 -5.7156051174099296e-11 26.029553000490019 -6.7916185327705718e-11 26.415741347831634 -7.4777727469615158e-11 26.805706711740196 -7.7000456278933559e-11 27.199499246996176 -7.5566360632924829e-11 27.597165513507271 -7.3819355219360937e-11 27.998745195744924 -7.757646347272082e-11 28.404266274353478 -9.7854796486663525e-11 28.813716334366184 -1.3799466872740915e-10 29.227072996093728 -1.6499144098191821e-10 29.644333507624935 -1.6363658332086312e-10 30.0654864365533 -1.2800301239687452e-10 30.490510678292523 -6.4129842546899834e-11 30.919370267208588 1.2727554400698747e-11 31.35201449565545 7.6706766786251425e-11 31.788379947668847 9.4287778815067252e-11 32.228394711936957 4.5965982073322373e-11 32.52411891860811 0 32.672563597299998 + 23.228411154772989 4 23.756330206532695 1 24.284249258292398 1 24.812168310052105 1 25.340087361811808 1 25.868006413571514 1 26.395925465331217 1 26.923844517090924 1 27.451763568850627 1 27.979682620610333 1 28.507601672370036 1 29.035520724129743 1 29.563439775889449 1 30.091358827649152 1 30.619277879408855 1 31.147196931168562 1 31.675115982928268 1 32.203035034687971 1 32.730954086447674 1 33.258873138207377 1 33.786792189967088 1 34.314711241726791 1 34.842630293486494 1 35.370549345246204 1 35.898468397005907 1 36.42638744876561 1 36.95430650052532 1 37.482225552285023 1 38.010144604044726 1 38.538063655804429 1 39.065982707564132 1 39.593901759323842 1 40.121820811083545 1 40.649739862843248 1 41.177658914602958 1 41.705577966362661 1 42.233497018122364 1 42.761416069882074 1 43.28933512164177 1 43.81725417340148 1 44.345173225161183 1 44.873092276920886 1 45.401011328680596 1 45.928930380440299 1 46.456849432200002 4 +7 0 0 3 47 45 -1.4469492271e-09 0 -4.8718490173036886e-10 0.14092978557005084 3.2732661756240051e-10 0.42208604144117007 -2.6743782823215824e-10 0.84164376418263731 -3.5424164051886049e-10 1.2589577585494374 -4.9949687128145114e-10 1.673962189411289 -5.5331366289884576e-10 2.0865934683432688 -6.0315152175461094e-10 2.4967919497417572 -6.9650378252827507e-10 2.9045049665690787 -7.8286115475201373e-10 3.3096880048270347 -8.4140694627570165e-10 3.7122977124420142 -8.7303681428046763e-10 4.1123031991699479 -8.9478214355642055e-10 4.5096766412762621 -9.3121220652669441e-10 4.9043672529914382 -9.9801803394066708e-10 5.2963686723765608 -1.0973254159022011e-09 5.6856833508258804 -1.2098060358287731e-09 6.0723071497358863 -1.3188780934096706e-09 6.4562356773188885 -1.415494280803605e-09 6.8374648812737835 -1.4935324069492242e-09 7.2159991616174128 -1.5474461177386943e-09 7.5918610417462515 -1.5700160689195414e-09 7.9650906345135271 -1.548587564679485e-09 8.3357688420618743 -1.4673361496858149e-09 8.7039189226514981 -1.4184137460052595e-09 9.0695431582214905 -1.4274743670986504e-09 9.4327182237612242 -1.4669865353929878e-09 9.7935406902615103 -1.4915707333859627e-09 10.152115862520571 -1.4612546624043133e-09 10.508542202479521 -1.3842269778700911e-09 10.862902739431112 -1.2945129627643541e-09 11.215262410171132 -1.1570018460731482e-09 11.565693042445243 -1.0015278382562363e-09 11.91428246939536 -8.7404502192023263e-10 12.261149980796063 -8.1768737072258359e-10 12.606464718544746 -8.1642001175826411e-10 12.950321024740829 -7.9253428256835309e-10 13.292820172701088 -7.5340289623017151e-10 13.634083213354151 -7.004359570984508e-10 13.974247996335032 -6.259483808780967e-10 14.31345931580219 -5.1892787708206388e-10 14.65186124269896 -3.8923388897631748e-10 14.989590812408117 -2.0628124433953774e-10 15.326771110632954 -1.9691663800176943e-10 15.66352329736252 2.2181722708457927e-10 15.999972373415314 -5.7055873581750352e-10 16.224177548965553 -1.4469492271e-09 16.3362817987 + 0 4 0.47076259421363637 1 0.94152518842727273 1 1.412287782640909 1 1.8830503768545455 1 2.3538129710681819 1 2.8245755652818181 1 3.2953381594954547 1 3.7661007537090909 1 4.2368633479227276 1 4.7076259421363638 1 5.17838853635 1 5.6491511305636362 1 6.1199137247772724 1 6.5906763189909094 1 7.0614389132045456 1 7.5322015074181818 1 8.002964101631818 1 8.4737266958454551 1 8.9444892900590904 1 9.4152518842727275 1 9.8860144784863628 1 10.3567770727 1 10.827539666913637 1 11.298302261127272 1 11.769064855340909 1 12.239827449554545 1 12.710590043768182 1 13.181352637981819 1 13.652115232195454 1 14.122877826409091 1 14.593640420622727 1 15.064403014836364 1 15.535165609050001 1 16.005928203263636 1 16.476690797477271 1 16.94745339169091 1 17.418215985904546 1 17.888978580118181 1 18.35974117433182 1 18.830503768545455 1 19.30126636275909 1 19.772028956972726 1 20.242791551186365 1 20.7135541454 4 +7 0 0 3 47 45 0 16.3362817987 4.020471547628824e-11 16.448385879600476 1.0444954433302213e-10 16.672589975046144 1.7577915257819262e-10 17.009035618113021 2.5558998038197873e-10 17.345782707935303 3.421814906146022e-10 17.682957323745217 4.3161368603490417e-10 18.020683839676366 5.3407814070864704e-10 18.35908935556871 6.7732906221922056e-10 18.698305762297281 7.5174922089535183e-10 19.038472654846505 7.8559523306349577e-10 19.379734877259924 8.4001799905424806e-10 19.72223126594465 9.3695183261591551e-10 20.066087081276148 9.4985999442855711e-10 20.411406754700266 9.7405836206113906e-10 20.758276727092081 1.0410033186834127e-09 21.106864883609919 1.1401452992324785e-09 21.45729158093744 1.2465431789118787e-09 21.809646936470827 1.3379574360596089e-09 22.164005168535713 1.4218006418689415e-09 22.520437397239011 1.5179418053627138e-09 22.87901805439509 1.6182692942778683e-09 23.239841804830601 1.7033600949176487e-09 23.60301426084964 1.7483106320850167e-09 23.968634429969867 1.7353621012637394e-09 24.336780888948752 1.6513333926742612e-09 24.707460392277646 1.5425569773035412e-09 25.080696852125463 1.4681863148246759e-09 25.456563883250634 1.4312390807949517e-09 25.835100210561581 1.4124860436062286e-09 26.216328702473312 1.3819854120422406e-09 26.600255501631683 1.3163185527094047e-09 26.986877818568793 1.2174598960085235e-09 27.376192122571315 1.1104181461881555e-09 27.768195959895454 1.0123227823843744e-09 28.162889456646042 9.3697706645767035e-10 28.560265170168119 8.8731334452920408e-10 28.960271425414696 8.5651081400145671e-10 29.362880213263374 8.3120946306592358e-10 29.768061028084418 7.8434201037779744e-10 30.175772236474494 6.8246273599100438e-10 30.585969983225755 5.382280718318048e-10 30.998601224257229 3.7947831486768394e-10 31.413606331052542 2.3360979717895503e-10 31.830921009508295 1.1785063598029595e-10 32.250478624427551 4.1026610084797691e-11 32.531634281123679 0 32.672563597299998 + 20.7135541454 4 21.184315450547729 1 21.655076755695454 1 22.125838060843183 1 22.596599365990908 1 23.067360671138637 1 23.538121976286362 1 24.008883281434091 1 24.47964458658182 1 24.950405891729545 1 25.421167196877271 1 25.891928502024999 1 26.362689807172728 1 26.833451112320454 1 27.304212417468182 1 27.774973722615911 1 28.245735027763637 1 28.716496332911362 1 29.187257638059091 1 29.65801894320682 1 30.128780248354545 1 30.599541553502274 1 31.070302858650003 1 31.541064163797728 1 32.011825468945453 1 32.482586774093178 1 32.953348079240911 1 33.424109384388636 1 33.894870689536361 1 34.365631994684094 1 34.836393299831819 1 35.307154604979544 1 35.777915910127277 1 36.248677215275002 1 36.719438520422727 1 37.19019982557046 1 37.660961130718178 1 38.13172243586591 1 38.602483741013636 1 39.073245046161361 1 39.544006351309093 1 40.014767656456819 1 40.485528961604544 1 40.956290266752276 1 41.427051571900002 4 +1 -1.0332125649185485e-14 0 6.8277405112363138e-15 1 +1 20.000000000000011 -2.1465580583159526e-14 1.3568191902632249e-12 1 +1 1.5104690811152784e-14 16.336281798700035 1 7.1054273576010072e-16 +1 1.8521630780019317e-14 16.336281798699979 1 7.1054273576010023e-16 +1 1.6734518557824769e-14 32.672563597300083 1 -1.4210854715202006e-15 +1 1.2593871614537771e-14 -1.0341375463362714e-14 1 -5.5621025598984075e-16 +7 0 0 3 25 23 0 16.336281798649999 0 16.583801219841728 0 17.078840062225048 0 17.821398325799855 0 18.56395658937501 0 19.306514852949974 0 20.049073116524802 0 20.791631380100043 0 21.534189643674924 0 22.276747907249963 0 23.019306170825029 0 23.761864434399929 0 24.504422697975247 0 25.246980961549973 0 25.989539225125363 0 26.732097488700084 0 27.474655752275464 0 28.217214015850548 0 28.959772279424964 0 29.70233054300029 0 30.444888806575623 0 31.187447070150071 0 31.930005333725124 -0 32.425044176108408 0 32.672563597299998 + 16.336281798649999 4 17.078840062224998 1 17.821398325800001 1 18.563956589375 1 19.306514852949999 1 20.049073116524998 1 20.7916313801 1 21.534189643674999 1 22.276747907249998 1 23.019306170824997 1 23.7618644344 1 24.504422697974999 1 25.246980961550001 1 25.989539225125 1 26.732097488699999 1 27.474655752274998 1 28.217214015849997 1 28.959772279425 1 29.702330542999999 1 30.444888806575001 1 31.18744707015 1 31.930005333724999 1 32.672563597299998 4 +1 20.000000000044324 5.9127813756276737e-11 -1.356166768799915e-12 1 +1 5.7317651011675261e-16 16.336281798699968 1 5.3290705182007522e-16 +1 1.6844664119725599e-10 16.336281798410031 1 1.4497381073519337e-11 +1 -1.2316181359896076e-14 32.672563597299963 1 -1.0658141036401506e-15 +1 1.6840097649563081e-10 5.7986322021625931e-10 1 -2.8993406877020742e-11 +1 -1.6601241325148167e-15 -2.0442672586551718e-14 -4.3996191613611181e-16 1 +1 20.000000000088644 -9.4615576180245755e-11 -5.4235797060101708e-12 1 +1 -4.66199963552339e-15 2.1316282072803006e-14 -1.5947761521530518e-16 1 +1 19.999999999911349 -2.1316282072803006e-14 5.4264068658230607e-12 1 +7 0 0 3 25 23 0 32.672563597299998 0.47662975442063638 32.672563599886281 1.4298893283489649 32.672563748160769 2.8597788180915407 32.672564262984359 4.289668365241817 32.672564921747906 5.7195579159669805 32.672565616502595 7.1494474289992 32.672566262582833 8.5793368769746738 32.672566799947234 10.009226245132963 32.672567189539116 11.439115529940123 32.672567410982296 12.869004737118438 32.672567459920096 14.298893879409247 32.672567345448535 15.728782974177596 32.672567087525167 17.158672041018615 32.672566714382661 18.588561099507967 32.672566259945079 20.018450167222188 32.672565761238786 21.448339258145836 32.672565255808692 22.878228381562629 32.672564779127633 24.308117541506018 32.672564362023337 25.738006736839516 32.672564028044455 27.167895961941213 32.672563791052319 28.597785208208442 32.672563651969206 30.027674465565266 32.672563598675687 30.980933973102807 32.672563595661927 31.4575637262 32.672563597299998 + 0 4 1.4298892602818183 1 2.8597785205636366 1 4.2896677808454546 1 5.7195570411272731 1 7.1494463014090917 1 8.5793355616909093 1 10.009224821972728 1 11.439114082254546 1 12.869003342536365 1 14.298892602818183 1 15.728781863100002 1 17.158671123381819 1 18.588560383663637 1 20.018449643945456 1 21.448338904227274 1 22.878228164509093 1 24.308117424790911 1 25.73800668507273 1 27.167895945354548 1 28.597785205636367 1 30.027674465918185 1 31.4575637262 4 +1 -1.0332125649185485e-14 0 1 0 +1 -1.7335850636956788e-15 0 1.8993121050780822e-16 1 +1 31.457563726200004 -5.1706877185631001e-15 1.3048429462428024e-15 1 +1 -1.7480236661030903e-11 16.33628179864079 1 5.7846181672518846e-13 +1 -1.7480236661030903e-11 16.33628179864079 1 5.783488800175109e-13 +1 -3.5216512864388737e-15 4.2632564145606011e-14 2.9938489432560898e-16 1 +7 0 0 3 25 23 31.4575637262 16.336281798649999 31.4575637262 16.583801219841767 31.457563726199997 17.07884006222513 31.457563726199997 17.821398325799883 31.457563726200004 18.563956589375074 31.457563726199993 19.306514852949725 31.457563726200004 20.049073116525349 31.457563726199997 20.791631380099631 31.457563726200004 21.534189643675031 31.4575637262 22.276747907249927 31.457563726200007 23.019306170825086 31.4575637262 23.761864434399897 31.4575637262 24.504422697975098 31.4575637262 25.246980961550097 31.4575637262 25.98953922512495 31.4575637262 26.732097488699999 31.457563726199997 27.474655752275108 31.457563726200004 28.217214015850118 31.457563726200004 28.959772279425035 31.4575637262 29.702330542999828 31.4575637262 30.444888806575186 31.4575637262 31.187447070149968 31.457563726199997 31.930005333725251 31.4575637262 32.4250441761085 31.4575637262 32.672563597299998 + 16.336281798649999 4 17.078840062224998 1 17.821398325800001 1 18.563956589375 1 19.306514852949999 1 20.049073116524998 1 20.7916313801 1 21.534189643674999 1 22.276747907249998 1 23.019306170824997 1 23.7618644344 1 24.504422697974999 1 25.246980961550001 1 25.989539225125 1 26.732097488699999 1 27.474655752274998 1 28.217214015849997 1 28.959772279425 1 29.702330542999999 1 30.444888806575001 1 31.18744707015 1 31.930005333724999 1 32.672563597299998 4 +1 15.728781863100007 16.336281798700011 -1 7.9055695374435198e-16 +1 15.728781863100004 16.336281798700021 -1 3.3881012303329369e-16 +1 15.728781863099996 32.672563597300019 -1 -6.7762024606658748e-16 +1 15.728781863100014 -4.7377771841996417e-14 -1 -1.5576005746060466e-15 +1 3.1355313202139731e-16 -7.0413720344937735e-14 4.5037037199506319e-17 1 +1 31.457563728775011 -5.4155656124547208e-14 -2.1322721300459833e-10 1 +1 4.5319406326567789e-16 -7.1054273576010019e-15 -4.5050275097624378e-17 1 +1 31.457563721808352 1.7763568394002505e-14 2.1322612563678264e-10 1 +7 0 0 3 47 45 10 0 10 0.14844407084170197 9.9999999999999982 0.44416614626147244 10.000000000000004 0.88417519217469576 9.9999999999999982 1.3205329458839852 9.9999999999999982 1.7531669303687296 10 2.1820162258583906 9.9999999999999964 2.6070338742199493 10.000000000000004 3.0281867919532726 9.9999999999999982 3.4454530533664065 10 3.8588180409423036 9.9999999999999964 4.2682668974269529 10.000000000000004 4.67378634931036 9.9999999999999964 5.0753820542230734 10.000000000000002 5.4730675658154562 9.9999999999999964 5.8668703063072503 10.000000000000002 6.2568319513982322 10 6.6430076205757 9.9999999999999982 7.0254622004082226 9.9999999999999964 7.4042662425015955 10.000000000000002 7.7794843337852981 10 8.1511942350135467 9.9999999999999964 8.5194863993179535 10.000000000000004 8.8844572300486497 9.9999999999999947 9.2462121372479622 10 9.6048651383381518 10 9.960537458995228 10 10.313354932762076 9.9999999999999964 10.663440215092358 9.9999999999999964 11.010924957773394 9.9999999999999964 11.355945333885092 10 11.698639994983138 10 12.039151804776061 9.9999999999999964 12.37762717198501 9.9999999999999964 12.714215254100635 9.9999999999999964 13.049068484672205 9.9999999999999964 13.38233811388702 9.9999999999999964 13.714176506280662 9.9999999999999964 14.044738596651449 9.9999999999999964 14.374182184093488 9.9999999999999964 14.70266818929777 9.9999999999999964 15.030355579282194 9.9999999999999964 15.35740150023887 9.9999999999999964 15.683963733970334 9.9999999999999964 16.01020241147744 9.9999999999999964 16.22758824786802 9.9999999999999964 16.336281617683991 + 0 4 0.52791842867272731 1 1.0558368573454546 1 1.5837552860181821 1 2.1116737146909093 1 2.6395921433636365 1 3.1675105720363641 1 3.6954290007090913 1 4.2233474293818185 1 4.7512658580545457 1 5.2791842867272729 1 5.8071027154000001 1 6.3350211440727282 1 6.8629395727454554 1 7.3908580014181826 1 7.9187764300909098 1 8.446694858763637 1 8.9746132874363642 1 9.5025317161090914 1 10.030450144781819 1 10.558368573454546 1 11.086287002127273 1 11.6142054308 1 12.142123859472727 1 12.670042288145456 1 13.197960716818184 1 13.725879145490911 1 14.253797574163638 1 14.781716002836365 1 15.309634431509092 1 15.83755286018182 1 16.365471288854547 1 16.893389717527274 1 17.421308146200001 1 17.949226574872728 1 18.477145003545456 1 19.005063432218183 1 19.53298186089091 1 20.060900289563637 1 20.588818718236364 1 21.116737146909092 1 21.644655575581819 1 22.172574004254546 1 22.700492432927273 1 23.2284108616 4 +7 0 0 5 24 8 -4.7774290740655232 2.1777447412181061 -4.7555255097908571 1.628761902419086 -4.6600869567150909 1.0568749346866326 -4.4780199912758576 0.47560520957392782 -3.9522398942785628 -0.59504341159009755 -3.0882147099177644 -1.5241510744077118 -2.6094292464383528 -1.9105383010653156 -1.5653802527405247 -2.518399481845961 -0.34554834389246025 -2.8113013357695991 0.2665198344815991 -2.8673230461179884 1.3317017169136989 -2.8050086317528411 2.3617712764481666 -2.4699170160154722 2.7781943739642543 -2.2823752010217646 3.5589082178623244 -1.8212847372204664 4.2290835094946999 -1.1963215274189452 4.5266888187703955 -0.85115527146838588 5.0400645527447665 -0.10366945174092734 5.3827787972987551 0.74122126204936478 5.506932155143943 1.1786161018031009 5.5998792915689108 1.7286426969059789 5.6189736859165578 2.2833927497421485 5.6199671107531088 2.3864240168095705 5.6184087915870577 2.4894419718965679 5.6143022860847793 2.592358484884258 + 0 6 5.1153601181199999 3 9.6375519396900007 3 13.802367841400001 3 16.786785141199999 3 19.7000153625 3 22.5735743149 3 23.2284108616 6 +7 0 0 9 18 3 0.018313627372752765 -6.104352017266268e-09 0.15089169749629452 -6.181237402451131e-09 0.29050313330867539 -1.6090139026826798e-06 0.43712996156136796 1.8022863298185025e-05 0.59011075841772254 -2.3051946306600415e-05 0.75007171954712248 1.510198110082385e-05 0.91503951455706556 -1.0248714214988394e-05 1.0856156352956532 5.8375901310658319e-06 1.2606049657234997 -1.2869011712478292e-06 1.6184419545801414 -1.7285704960721435e-06 1.8012760979857216 4.4477105469419698e-06 1.9874359511378163 -3.4287323186379581e-06 2.1762826704636811 -1.4232983336775065e-06 2.3672314972581159 2.4507072561068843e-06 2.5597533034524531 -3.8031866699907662e-07 2.7533328618715567 -1.5056755537098691e-06 2.9474427629131701 3.9923806906699602e-07 3.1415926535896976 -9.3516699108734701e-08 + 0 10 11.553660112134626 8 23.107320224269284 10 +7 0 0 1 2 2 3.1415926535897931 -8.4131895470835755e-14 3.1232790247888484 -8.4131895470835755e-14 + 23.107320224269284 2 23.2284108616 2 +1 1.3691847135280442e-15 16.336281798659108 1 1.7763568394002513e-15 +1 1.3691847135233297e-15 16.336281798659126 1 -1.0658141036401508e-15 +1 -1.7335850636956788e-15 32.672563597299998 1 0 +1 -8.4540664400887612e-16 0 1 0 +7 0 0 3 47 45 9.9999999999999964 16.336281798657499 9.9999999999999964 16.444975236504185 9.9999999999999982 16.662363276980816 9.9999999999999947 16.988607193005354 9.9999999999999964 17.315171189168318 9.9999999999999947 17.642213966756902 9.9999999999999929 17.96989736182638 9.9999999999999982 18.298383682810478 9.9999999999999929 18.627831707620771 9.9999999999999947 18.958397454752433 10 19.290235600161367 9.9999999999999911 19.623502102187601 9.9999999999999964 19.958352943640786 9.9999999999999947 20.294942153514885 9.9999999999999947 20.633421949258384 9.9999999999999947 20.973940062793712 9.9999999999999947 21.316640118380231 9.9999999999999947 21.661662771114777 9.9999999999999947 22.009147571711559 9.9999999999999911 22.359232634365011 9.9999999999999964 22.712043320366366 9.9999999999999947 23.067709933510223 9.9999999999999911 23.426360082905976 9.9999999999999982 23.78811503505985 9.9999999999999911 24.153087512712343 9.9999999999999929 24.521381589105257 9.9999999999999929 24.893092599484788 9.9999999999999929 25.268311729912142 9.9999999999999929 25.647113394323874 9.9999999999999929 26.029562083954062 9.9999999999999929 26.415729497163049 9.9999999999999929 26.80568202138684 9.9999999999999929 27.199476424370367 9.9999999999999947 27.597155781077689 9.9999999999999929 27.998748186859221 9.9999999999999929 28.404267205598497 9.9999999999999929 28.813716044965609 9.9999999999999929 29.227087910435465 9.9999999999999929 29.64436281802125 9.9999999999999929 30.065523355788859 9.9999999999999929 30.490546015801169 9.9999999999999947 30.91939747747152 9.9999999999999911 31.352031506926011 9.9999999999999947 31.788388408786407 9.9999999999999893 32.22839702575466 9.9999999999999964 32.524119251664033 10 32.672563597299998 + 23.22841115459314 4 23.756330206431933 1 24.284249258270723 1 24.812168310109517 1 25.340087361948306 1 25.8680064137871 1 26.395925465625893 1 26.923844517464683 1 27.451763569303477 1 27.979682621142267 1 28.50760167298106 1 29.035520724819854 1 29.563439776658647 1 30.091358828497437 1 30.619277880336231 1 31.147196932175021 1 31.675115984013814 1 32.203035035852608 1 32.730954087691401 1 33.258873139530195 1 33.786792191368981 1 34.314711243207775 1 34.842630295046568 1 35.370549346885362 1 35.898468398724148 1 36.426387450562942 1 36.954306502401735 1 37.482225554240529 1 38.010144606079322 1 38.538063657918116 1 39.065982709756909 1 39.593901761595696 1 40.121820813434489 1 40.649739865273283 1 41.177658917112069 1 41.705577968950863 1 42.233497020789656 1 42.76141607262845 1 43.289335124467243 1 43.817254176306037 1 44.34517322814483 1 44.873092279983624 1 45.40101133182241 1 45.928930383661204 1 46.456849435499997 4 +7 0 0 5 21 7 5.6143022860847793 2.592358484884258 5.6004743233390855 2.938912420500543 5.5577526899550946 3.2843161111666603 5.4862732184804628 3.6252045836924935 5.2573485967975131 4.3917196590313949 4.8874245992815446 5.1004174027363831 4.6361137279103986 5.4759787046852324 3.9555056851844199 6.2878030754254439 3.0986537988646603 6.9020513856086154 2.5610699064938416 7.1791833388728179 1.3383703990050151 7.6016157786157379 0.069748971495613432 7.6393162207146759 -0.60003992912244541 7.5483400364084901 -1.9058999734290154 7.1538796319500761 -2.9803445158453314 6.4046823699486453 -3.453472432141325 5.943865834480917 -4.220531921275338 4.9265516641345357 -4.6345237113486348 3.8079180346111912 -4.7546123210869382 3.2457773202578295 -4.798219833924378 2.6988366548039551 -4.7774290740655232 2.1777447412181061 + 23.2284108616 6 25.433462073800001 3 28.303717743499998 3 32.199539421499999 3 36.747675514800001 3 41.601373814200002 3 46.456849435499997 6 +7 0 0 9 18 3 3.1232790247892415 -1.4435359055485848e-07 2.9295947321932787 -7.2080011638191714e-07 2.7359064710254941 -1.1298533341483124e-06 2.5427267250427121 3.2470102808095018e-06 2.350547704260963 7.2585208567623346e-07 2.1598855728348605 -5.859039044212462e-06 1.9712732253879039 -3.1632620455149178e-06 1.7852853031284193 6.3861610900199282e-06 1.6025611652437166 -3.282744537260397e-06 1.2447859452020869 -1.8071868503265356e-06 1.069751672962866 8.0861091506581606e-06 0.89905043364615267 -1.1635102985858847e-05 0.73386645469145151 1.2999521580112083e-05 0.57369771635785582 -1.7379178657593586e-05 0.42024690579455637 1.1290767431264975e-05 0.27323091079415462 3.5676612503664218e-07 0.13311739203840237 1.1036302516849056e-08 1.8310139731620705e-13 -5.6762328451803416e-09 + 23.22841115459314 10 34.754252696211921 8 46.280094237830717 10 +7 0 0 3 4 2 1.3179750860694563e-18 -8.4131895470835755e-14 0.0061242879800787395 -8.4131895470835819e-14 0.012228837934750285 -8.4131895470835692e-14 0.018313627372752897 -8.4131895470835768e-14 + 46.280094237830717 4 46.456849435499997 4 +1 -2.8275992583807113e-16 16.336281798699993 1 -3.5527136788005016e-16 +1 1.0492908630910694e-15 16.3362817987 1 -1.7763568394002513e-15 +1 -1.018713914937315e-15 32.672563597299991 1 7.1054273576010003e-16 +1 3.1355313202140244e-16 -5.0248038220422738e-14 1 7.6689861533348764e-16 +7 0 0 3 47 45 10 16.3362817987 9.9999999999999982 16.224177717827587 9.9999999999999964 15.999973622436686 10.000000000000002 15.663527979378429 9.9999999999999964 15.326780889324224 10.000000000000002 14.989606273216275 9.9999999999999982 14.651879757088352 9.9999999999999982 14.313474241144768 9.9999999999999982 13.974257834331942 10.000000000000002 13.634090941901444 10 13.292828719723609 9.9999999999999982 12.950332331217309 9.9999999999999982 12.606476515921061 10 12.261156842607601 9.9999999999999982 11.91428687039666 10.000000000000002 11.565698714111624 9.9999999999999982 11.215272017015078 10.000000000000002 10.862916661636898 9.9999999999999982 10.508558429597771 10.000000000000002 10.152126200901588 9.9999999999999982 9.7935455437051679 10.000000000000002 9.4327217931484206 9.9999999999999964 9.069549336977957 9.9999999999999982 8.7039291677460149 9.9999999999999982 8.3357827087488729 9.9999999999999964 7.9651032054426425 10 7.5918667455468709 10.000000000000002 7.2159997143512191 9.9999999999999982 6.8374633869763102 10.000000000000002 6.4562348950219208 9.9999999999999982 6.0723080958346278 10.000000000000002 5.6856857788668442 9.9999999999999947 5.2963714748756399 10.000000000000002 4.9043676376048229 9.9999999999999947 4.5096741409130328 10.000000000000002 4.1122984274881764 9.9999999999999947 3.7122921724326341 10.000000000000002 3.3096833848729053 9.9999999999999982 2.9045025703802674 10.000000000000002 2.4967913621677318 9.9999999999999982 2.0865936151548992 10.000000000000002 1.6739623735769358 9.9999999999999964 1.2589572662235093 9.9999999999999964 0.84164258747020049 10.000000000000004 0.4220849726814716 10.000000000000002 0.14092931612600762 10 0 + 20.713544667000001 4 21.184305972136364 1 21.655067277272728 1 22.125828582409092 1 22.596589887545456 1 23.067351192681819 1 23.538112497818183 1 24.008873802954547 1 24.47963510809091 1 24.950396413227274 1 25.421157718363638 1 25.891919023500002 1 26.362680328636365 1 26.833441633772729 1 27.304202938909089 1 27.774964244045453 1 28.245725549181817 1 28.71648685431818 1 29.187248159454544 1 29.658009464590908 1 30.128770769727272 1 30.599532074863635 1 31.070293379999999 1 31.541054685136363 1 32.011815990272723 1 32.482577295409087 1 32.95333860054545 1 33.424099905681814 1 33.894861210818178 1 34.365622515954541 1 34.836383821090905 1 35.307145126227269 1 35.777906431363633 1 36.248667736499996 1 36.71942904163636 1 37.190190346772724 1 37.660951651909087 1 38.131712957045451 1 38.602474262181815 1 39.073235567318179 1 39.543996872454542 1 40.014758177590906 1 40.48551948272727 1 40.956280787863633 1 41.427042092999997 4 +7 0 0 5 24 8 4.4152569797943784 2.5445186663902462 4.4309824357866603 2.1503816558453082 4.3981242550697175 1.754306686831967 4.3163303450551496 1.364807363939363 4.0796070023680215 0.67520724567101809 3.6990415425181453 0.061208783854823423 3.4976011591389238 -0.19937307679899163 2.9955652355347979 -0.72731117732855921 2.3952968618434767 -1.1258100488157226 2.0422260407228237 -1.301546271692942 1.2955135252651644 -1.5659811246721773 0.52605369727803009 -1.6420471914135817 0.13758078219201764 -1.6324701014219301 -0.6382120033998433 -1.5202983273032231 -1.3398055220702929 -1.2385968151748301 -1.6733931334492951 -1.0548493640011429 -2.3023713657409814 -0.60668309169699342 -2.7852044876520665 -0.054133583386175133 -2.9940465735524242 0.25195505793922734 -3.3038444633929771 0.83629635184115614 -3.4813746391557885 1.4308883894066042 -3.5366249928285356 1.7018717114242605 -3.5680863932064995 1.9675127912790771 -3.5783830669197414 2.2255848182831528 + 20.713544667000001 6 23.532195011900001 3 25.9054042084 3 28.819572364300001 3 31.840203621699999 3 35.0332986377 3 38.4907602603 3 41.427042092999997 6 +7 0 0 1 2 2 3.1232790245428861 11.999999999999872 3.1415926535897931 11.999999999999872 + 20.713544667000001 2 20.818236940029276 2 +7 0 0 8 9 2 3.1415926535894805 12.000000005657117 2.6909634127615774 12.000000005657093 2.2406239943819628 12.000000005653419 1.7994159351624148 12.000000005609763 1.37628316246537 12.000000005617039 0.98042704957333626 12.000000005638867 0.62181809368667018 12.000000005640686 0.30155809289970509 12.000000005657148 0.01831362719058378 12.000000005657162 + 20.818236940029276 9 41.427042092999997 9 +7 0 0 3 47 45 10 32.672563597299998 10 32.531633926183233 10.000000000000002 32.250477697891 9.9999999999999964 31.830919516747986 10.000000000000002 31.41360452878185 10 30.998599022439091 9.9999999999999982 30.585967066093112 9.9999999999999982 30.175768295510061 10.000000000000002 29.768056217452031 9.9999999999999982 29.362875179567226 10 28.960266725535107 9.9999999999999982 28.560261000901818 10 28.162885571169983 10 27.768191800001023 9.9999999999999964 27.376187100431224 10.000000000000002 26.986871837705138 10 26.600249138510794 10.000000000000002 26.216322438479015 10 25.835094214887292 10 25.456557918836566 9.9999999999999982 25.080690420940691 10.000000000000002 24.707453011807839 9.9999999999999964 24.336772724021863 9.9999999999999947 23.968626018589681 10.000000000000002 23.603005866736993 9.9999999999999964 23.239833379592852 10 22.879009252381358 10 22.520427777173307 9.9999999999999982 22.163994624219615 10.000000000000002 21.809635987826464 10 21.457280462237634 10.000000000000002 21.106853573695165 10.000000000000002 20.758264954283 9.9999999999999964 20.411394176841281 10.000000000000002 20.066073513334278 10 19.722217346186007 9.9999999999999982 19.379723225005794 10 19.038466394482601 10 18.698307811950695 9.9999999999999982 18.359101198889913 9.9999999999999982 18.020701485162039 10.000000000000002 17.682971813476321 9.9999999999999964 17.345791825202522 10.000000000000002 17.009039909197138 9.9999999999999982 16.672591064158254 9.9999999999999982 16.448386003265941 10 16.3362817987 + 0 4 0.47076237879545457 1 0.94152475759090914 1 1.4122871363863636 1 1.8830495151818183 1 2.353811893977273 1 2.8245742727727272 1 3.2953366515681819 1 3.7660990303636366 1 4.2368614091590908 1 4.7076237879545459 1 5.1783861667500002 1 5.6491485455454544 1 6.1199109243409096 1 6.5906733031363638 1 7.0614356819318189 1 7.5321980607272732 1 8.0029604395227274 1 8.4737228183181816 1 8.9444851971136377 1 9.4152475759090919 1 9.8860099547045461 1 10.3567723335 1 10.827534712295455 1 11.298297091090909 1 11.769059469886365 1 12.239821848681819 1 12.710584227477273 1 13.181346606272728 1 13.652108985068182 1 14.122871363863638 1 14.593633742659092 1 15.064396121454546 1 15.535158500250001 1 16.005920879045455 1 16.476683257840911 1 16.947445636636363 1 17.418208015431819 1 17.888970394227275 1 18.359732773022728 1 18.830495151818184 1 19.301257530613636 1 19.772019909409092 1 20.242782288204548 1 20.713544667000001 4 +7 0 0 5 24 8 -3.5783830669197414 2.2255848182831528 -3.5886797478039654 2.4836570153220521 -3.5784819782634116 2.7509604125322369 -3.5449963679973564 3.0254830201347858 -3.4154020937479572 3.6323305187098072 -3.1531424296013597 4.2394956519298432 -2.9693519904770085 4.5612473354632357 -2.5320745830324825 5.1505104468710954 -1.9408003083858745 5.6473620381390504 -1.6229144669584201 5.8571013310935029 -0.94599238003735309 6.1938051892349648 -0.18160252993331483 6.3674267857452946 0.20487067679742665 6.4079233499017221 0.97794719227819371 6.3934024437636765 1.7433526107370767 6.189298214680349 2.1093010759142885 6.042250709667826 2.8516087393020655 5.630625563669696 3.4723283066227708 5.0290727195860114 3.7565031135892468 4.6609493271274403 4.1137113007418407 4.025003453505974 4.319288548334697 3.3269099991141928 4.3727614028837252 3.0686471735581051 4.4047838740881105 2.8070127131399687 4.4152569797943784 2.5445186663902462 + 0 6 2.9362837615799999 3 6.3937513017100001 3 9.5868506117399992 3 12.607484850800001 3 15.5216549243 3 18.836332135599999 3 20.713544667000001 6 +7 0 0 3 4 2 0.018313627190257024 11.999999999999872 0.012231480012354261 11.99999999999987 0.0061269545662308335 11.999999999999872 -6.1192466620341178e-19 11.999999999999874 + 0 4 0.165950884779378 4 +7 0 0 8 9 2 -8.1712414612411521e-14 12.000000005657164 0.28448365999155101 12.00000000565718 0.60582572935320655 12.000000005655238 0.96527832660715518 12.000000005602487 1.3612826404321154 12.000000005646143 1.7842996776605347 12.000000005624315 2.2246778557480198 12.000000005658876 2.6739831718762694 12.000000005657141 3.1232790245432156 12.000000005657119 + 0.165950884779378 9 20.713544667000001 9 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 -5.7142589111487059 -3.0899182806420185 0.95310690166609091 0.30263382824209295 +8 0 12.237646832629226 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 4.2082912526063749 3.7644962273719074 -0.87524683288310912 -0.48367652571536579 +8 0 11.999999999999872 +1 3.1415926535897931 0 0 1 +7 0 0 3 47 45 0 0 -3.6660311780504418e-11 0.1484440709064162 -9.4956758748033946e-11 0.44416614645717301 -1.3524451036533667e-10 0.88417519251120325 -1.2183403116361205e-10 1.3205329462203712 -6.3783239418011626e-11 1.7531669305659952 2.4055856467234479e-11 2.1820162258144431 1.2339894973909995e-10 2.6070338738955652 2.1579456184050456e-10 3.0281867913765863 2.8670826256465626e-10 3.4454530526219775 3.2833881622731416e-10 3.8588180401454104 3.4558327101087731e-10 4.2682668966862467 3.4833216642292297e-10 4.6737863486827047 3.2977080928011157e-10 5.075382053723863 2.8942104642619867e-10 5.4730675654438734 2.2932851856406486e-10 5.8668703060549374 1.5351152797930629e-10 6.2568319512527681 6.7668345772826153e-11 6.6430076205188255 -2.2390794621188871e-11 7.0254622004087324 -1.0861068435778559e-10 7.4042662425129064 -1.9009239952462864e-10 7.7794843337258035 -2.2205631941117484e-10 8.1511942348791777 -1.9300047248201142e-10 8.5194863991671621 -1.2545069889933795e-10 8.8844572299461912 -5.3874265224242709e-11 9.246212137234286 -8.261525991511674e-12 9.6048651384133876 6.2290474549373217e-12 9.9605374591264848 1.7481884467171867e-11 10.313354932907201 1.4069614453715999e-10 10.6634402152668 2.5093012277397334e-10 11.010924957961921 2.7275587313821334e-10 11.355945334044383 2.0623645439559692e-10 11.698639995082752 8.7888167011068363e-11 12.039151804817738 -5.1624932585754802e-11 12.37762717198493 -1.5320053366109021e-10 12.714215254042344 -1.0546448985272554e-10 13.049068484573796 4.0308189049493146e-11 13.382338113783193 1.9280900621667452e-10 13.71417650621088 2.6740075485411732e-10 14.044738596644427 3.2836204704296525e-10 14.374182184215027 3.0451480501986714e-10 14.702668189495544 1.5520896457341121e-10 15.030355579424281 -4.0846022655629212e-11 15.357401500213273 -1.3131564614120513e-10 15.683963733823429 -1.3313072747260548e-10 16.010202411064434 2.0665122369726703e-10 16.227588247881616 5.11321288403276e-10 16.336281618177885 + 0 4 0.52791842867272731 1 1.0558368573454546 1 1.5837552860181821 1 2.1116737146909093 1 2.6395921433636365 1 3.1675105720363641 1 3.6954290007090913 1 4.2233474293818185 1 4.7512658580545457 1 5.2791842867272729 1 5.8071027154000001 1 6.3350211440727282 1 6.8629395727454554 1 7.3908580014181826 1 7.9187764300909098 1 8.446694858763637 1 8.9746132874363642 1 9.5025317161090914 1 10.030450144781819 1 10.558368573454546 1 11.086287002127273 1 11.6142054308 1 12.142123859472727 1 12.670042288145456 1 13.197960716818184 1 13.725879145490911 1 14.253797574163638 1 14.781716002836365 1 15.309634431509092 1 15.83755286018182 1 16.365471288854547 1 16.893389717527274 1 17.421308146200001 1 17.949226574872728 1 18.477145003545456 1 19.005063432218183 1 19.53298186089091 1 20.060900289563637 1 20.588818718236364 1 21.116737146909092 1 21.644655575581819 1 22.172574004254546 1 22.700492432927273 1 23.2284108616 4 +7 0 0 3 47 45 5.1131675803117727e-10 16.336281798665727 4.940486459839719e-10 16.444975236318605 3.8194097341170427e-10 16.662363276552934 1.2396194646922966e-10 16.98860719247245 -1.2569669358585903e-10 17.31517118856469 -1.1224081345896365e-10 17.642213966056204 -1.1004707124752513e-10 17.969897361055367 -1.2209423823250687e-10 18.298383681941583 -7.0739502232067424e-11 18.62783170662038 1.3907454058682804e-11 18.958397453643727 8.6225242989298153e-11 19.290235599028229 8.1707271896369414e-11 19.623502101126043 2.4792274462280887e-11 19.958352942658141 1.4967133035191968e-12 20.294942152557681 3.3399998550426764e-11 20.633421948259603 1.150405745930484e-10 20.973940061700471 2.1606250005407804e-10 21.3166401171672 2.9439772224864636e-10 21.661662769784208 3.0295037992036558e-10 22.009147570276117 2.0687916842625899e-10 22.359232632832864 9.9910943833262938e-11 22.712043318916653 3.1768926259225341e-11 23.067709932356372 2.1415288782739532e-11 23.42636008220321 6.3224119573335887e-11 23.788115034848623 1.3517420262301056e-10 24.153087512907277 2.0442625868290443e-10 24.521381589530531 2.3923408923824739e-10 24.893092599942275 2.0296042433986822e-10 25.268311730316547 1.1506434415593924e-10 25.647113394721032 3.9761119855267226e-11 26.029562084360876 -3.3362242109766444e-12 26.415729497593887 -1.0939381413951512e-11 26.805682021846323 6.0069978370139172e-12 27.199476424857142 3.1890022763588536e-11 27.59715578158573 5.3742760239122693e-11 27.998748187377657 6.9046399344148848e-11 28.404267206110301 9.7051817644964135e-11 28.813716045436145 1.6882395192413926e-10 29.227087910812745 2.5335503083759288e-10 29.644362818300692 3.3312067160065701e-10 30.065523355997733 3.923990884012177e-10 30.490546015983696 4.1947647323777132e-10 30.919397477669055 4.0440969128293481e-10 31.35203150715644 3.3803330008170465e-10 31.788388409029739 2.1164503519589624e-10 32.22839702594225 7.968941178350306e-11 32.524119251743052 0 32.672563597299998 + 23.22841115380686 4 23.756330205577157 1 24.284249257347458 1 24.812168309117755 1 25.340087360888056 1 25.868006412658353 1 26.39592546442865 1 26.923844516198951 1 27.451763567969248 1 27.979682619739549 1 28.507601671509846 1 29.035520723280143 1 29.563439775050444 1 30.091358826820741 1 30.619277878591042 1 31.147196930361339 1 31.675115982131636 1 32.203035033901941 1 32.730954085672238 1 33.258873137442535 1 33.786792189212832 1 34.314711240983129 1 34.842630292753427 1 35.370549344523731 1 35.898468396294028 1 36.426387448064325 1 36.954306499834622 1 37.482225551604927 1 38.010144603375224 1 38.538063655145521 1 39.065982706915818 1 39.593901758686115 1 40.121820810456413 1 40.64973986222671 1 41.177658913997014 1 41.705577965767311 1 42.233497017537616 1 42.761416069307913 1 43.28933512107821 1 43.817254172848507 1 44.345173224618804 1 44.873092276389102 1 45.401011328159399 1 45.928930379929696 1 46.4568494317 4 +7 0 0 3 47 45 0 0 -9.193118460096451e-11 0.14092797550597663 -2.1147356597702113e-10 0.42208665081041519 -2.5987576005281064e-10 0.84166661133466858 -2.5045985444245727e-10 1.2590270654379814 -2.1766270260320799e-10 1.6740898595071896 -1.7913486370395012e-10 2.0867769579980893 -1.3836845223122146e-10 2.4970160337628671 -9.0377436852585431e-11 2.9047468234877769 -2.8227582906334969e-11 3.3099243188192076 5.2131761285353511e-11 3.7125181427023057 1.4810153891644977e-10 4.1125115568374282 2.4226479665479121e-10 4.5098852456128276 3.0081749901089065e-10 4.904583792174301 3.0999564531123188e-10 5.2965898347437044 2.7794414393586759e-10 5.6858994308919506 2.1872406000379026e-10 6.0725056078143869 1.5042063663361225e-10 6.4564028808368663 8.9880505880309316e-11 6.8375918643526008 4.9092836829226926e-11 7.2160850003143597 3.2113433911577415e-11 7.591913178835517 3.169211648788528e-11 7.9651221710686757 2.524506420695037e-11 8.3357942722281457 -1.7536127073321954e-11 8.7039446924287578 -5.6250604966281824e-11 9.0695687779914316 -6.8697967925271129e-11 9.4327441770580762 -6.4608251762306119e-11 9.7935663635619807 -5.8542557073704916e-11 10.152140305186478 -5.8677018950647318e-11 10.508564422106298 -3.8459198001417514e-11 10.862923428535193 5.0545731065017663e-11 11.215282933882619 8.5418733712940184e-11 11.565713496503848 6.8025812008139285e-11 11.914302719227642 4.3449814260439042e-11 12.261169471596395 5.2153369979869089e-11 12.606482789578671 1.2755017627452603e-10 12.950337539594855 1.4203344943729347e-10 13.29283633879902 1.2295827529377519e-10 13.634099096692459 1.1942451045561208e-10 13.974263502649503 1.3143385675832306e-10 14.313474116217263 1.421026181985224e-10 14.651874960124212 1.3055318531169644e-10 14.98960325599999 5.8907050437534739e-11 15.326783170317499 6.0742009458974312e-11 15.663533186597643 2.0966698325074795e-10 15.999977771389167 1.3027320333764236e-10 16.224179352549815 -5.1141436578588122e-15 16.336281798699996 + 0 4 0.47076163400227278 1 0.94152326800454555 1 1.4122849020068182 1 1.8830465360090911 1 2.353808170011364 1 2.8245698040136364 1 3.2953314380159093 1 3.7660930720181822 1 4.2368547060204547 1 4.707616340022728 1 5.1783779740250004 1 5.6491396080272729 1 6.1199012420295462 1 6.5906628760318187 1 7.061424510034092 1 7.5321861440363644 1 8.0029477780386369 1 8.4737094120409093 1 8.9444710460431835 1 9.415232680045456 1 9.8859943140477284 1 10.356755948050001 1 10.827517582052273 1 11.298279216054546 1 11.76904085005682 1 12.239802484059092 1 12.710564118061365 1 13.181325752063637 1 13.65208738606591 1 14.122849020068184 1 14.593610654070456 1 15.064372288072729 1 15.535133922075001 1 16.005895556077274 1 16.476657190079546 1 16.947418824081819 1 17.418180458084091 1 17.888942092086367 1 18.35970372608864 1 18.830465360090912 1 19.301226994093184 1 19.771988628095457 1 20.242750262097729 1 20.713511896100002 4 +7 0 0 3 47 45 -1.172059498947604e-15 16.3362817987 3.1614041183785705e-10 16.448381923325851 6.5604304183965148e-10 16.672580545899116 6.1532052131011899e-10 17.009022409107697 4.111741555046529e-10 17.345768906961354 2.187004112453825e-10 17.682939109063245 1.7036802265691793e-10 18.0206568148994 2.0968224636969469e-10 18.359050688521133 2.4784493541466115e-10 18.698257649374778 2.1200504008704766e-10 19.038420074581097 2.22374551643495e-10 19.379679441882146 1.9814561771124322e-10 19.722167288813125 6.6321846777416887e-11 20.066009086332503 -9.5704047678250666e-11 20.411315023596426 -1.7495979751507874e-10 20.758179508796935 -1.1409177933258971e-10 21.10676849163373 1.0747641181380092e-11 21.457197149861749 1.5694229833176518e-10 21.809545579442748 3.3994484709608445e-10 22.163887262007989 4.9922614973013517e-10 22.520300813322638 5.7836513120883105e-10 22.878872685960264 5.5044619313483645e-10 23.239697199472232 4.7238173410854999e-10 23.602874385911612 4.7748293180873454e-10 23.968490415375452 5.1372695958342321e-10 24.336606470664464 5.6606105012006054e-10 24.707235403890117 6.0440161717269685e-10 25.080418971989651 6.0391730577622206e-10 25.456245652456516 5.6106858404339417e-10 25.834756819917853 4.8320950752452752e-10 26.215971778581697 3.83541433723601e-10 26.599890046516322 2.7468950524154013e-10 26.986503645526071 1.6129771925520779e-10 27.375807013508098 6.8392045371077521e-11 27.76779071856447 1.38923536409999e-11 28.162456974697243 2.8751656996664286e-12 28.55980324036992 1.8457703108916282e-11 28.959785143349194 5.1403168377033406e-11 29.362381577687234 9.3207222083765601e-11 29.767565191129901 1.3310941027637133e-10 30.17529137691135 1.6484145807383261e-10 30.585497507365218 1.7171886252056105e-10 30.998132516853904 1.852243447848769e-10 31.41308524802556 3.3878226636373989e-11 31.830584878579707 -2.5534878120576835e-11 32.250439392019707 -2.1761995857245515e-11 32.531669382519397 0 32.672563597299998 + 20.713511896100002 4 21.184264685909092 1 21.655017475718182 1 22.125770265527276 1 22.596523055336366 1 23.067275845145456 1 23.538028634954546 1 24.008781424763637 1 24.47953421457273 1 24.950287004381821 1 25.421039794190911 1 25.891792584000001 1 26.362545373809091 1 26.833298163618181 1 27.304050953427272 1 27.774803743236365 1 28.245556533045455 1 28.716309322854546 1 29.187062112663639 1 29.65781490247273 1 30.12856769228182 1 30.59932048209091 1 31.0700732719 1 31.54082606170909 1 32.01157885151818 1 32.482331641327271 1 32.953084431136361 1 33.423837220945458 1 33.894590010754541 1 34.365342800563639 1 34.836095590372729 1 35.306848380181819 1 35.777601169990909 1 36.248353959799999 1 36.719106749609089 1 37.18985953941818 1 37.660612329227277 1 38.13136511903636 1 38.602117908845457 1 39.07287069865454 1 39.543623488463638 1 40.014376278272728 1 40.485129068081818 1 40.955881857890908 1 41.426634647699998 4 +1 -1.6770680153554557e-14 0 7.2086961823403575e-15 1 +1 20 0 3.0446335412331948e-15 1 +1 -1.1547257315702775e-11 16.336281798667358 1 9.4999563770649415e-13 +1 -1.1535188386077588e-11 16.336281798667368 1 9.4892982360285921e-13 +1 1.588733042281629e-14 32.672563597299998 1 0 +1 -1.917739571266204e-14 0 1 0 +7 0 0 3 25 23 0 16.336281798649999 0 16.583801219841629 0 17.078840062224916 0 17.821398325799905 0 18.563956589374968 0 19.30651485294986 0 20.049073116524951 0 20.791631380099989 0 21.534189643674882 0 22.276747907250034 0 23.01930617082505 0 23.7618644344 0 24.504422697975194 0 25.246980961550015 0 25.989539225125124 0 26.732097488700123 0 27.474655752275069 0 28.217214015850214 0 28.959772279425174 0 29.702330543000077 0 30.444888806575317 0 31.187447070150153 0 31.93000533372523 -0 32.42504417610845 0 32.672563597299998 + 16.336281798649999 4 17.078840062224998 1 17.821398325800001 1 18.563956589375 1 19.306514852949999 1 20.049073116524998 1 20.7916313801 1 21.534189643674999 1 22.276747907249998 1 23.019306170824997 1 23.7618644344 1 24.504422697974999 1 25.246980961550001 1 25.989539225125 1 26.732097488699999 1 27.474655752274998 1 28.217214015849997 1 28.959772279425 1 29.702330542999999 1 30.444888806575001 1 31.18744707015 1 31.930005333724999 1 32.672563597299998 4 +1 20.000000000000099 -3.907985046680551e-14 -3.0446335412331802e-15 1 +1 -1.172059498947604e-15 16.3362817987 1 0 +1 -5.1141436578588122e-15 16.336281798699996 1 -2.3652191316719162e-12 +1 -3.2433678430930898e-15 32.67256359729997 1 2.4868995751603493e-15 +1 -2.5187743281449267e-14 2.6887576171604135e-14 1 -5.3175294644279598e-18 +1 -9.883711016975503e-16 3.764601919295149e-14 1.0914340023598434e-16 1 +1 20.000000000088601 -9.4577155284822199e-11 -1.9108989999912701e-11 1 +1 -5.4089740731164347e-14 -1.7763568394002505e-14 2.197469598955972e-15 1 +1 19.999999999641503 4.3165471197426086e-11 1.3684975346527356e-11 1 +7 0 0 3 25 23 0 32.672563597299998 0.47662984845443895 32.67256359706596 1.4298895458139613 32.672563597496492 2.8597790949334461 32.672563605110113 4.2896686493940521 32.672563624979944 5.7195582095924111 32.672563658837149 7.1494477749183591 32.672563706550285 8.5793373438230542 32.672563766138758 10.009226914154 32.672563834238638 11.439116483453185 32.672563906445738 12.869006049266284 32.672563977692093 14.298895609431467 32.672564042614276 15.728785162326542 32.672564095922347 17.158674707061071 32.672564132770006 18.58856424359729 32.672564149123666 20.018453772788376 32.672564142132231 21.448343296323827 32.672564110496353 22.878232816578752 32.672564054838219 24.30812233636307 32.672563978069043 25.738011858567596 32.672563885768255 27.167901385747136 32.672563786513891 28.597790919512441 32.672563692401326 30.027680460275075 32.672563618852308 30.980940157007943 32.672563597669459 31.457570005800001 32.672563597299998 + 0 4 1.4298895457181819 1 2.8597790914363639 1 4.2896686371545458 1 5.7195581828727278 1 7.1494477285909097 1 8.5793372743090917 1 10.009226820027273 1 11.439116365745456 1 12.869005911463638 1 14.298895457181819 1 15.7287850029 1 17.158674548618183 1 18.588564094336366 1 20.018453640054545 1 21.448343185772728 1 22.878232731490911 1 24.308122277209094 1 25.738011822927277 1 27.167901368645456 1 28.597790914363639 1 30.027680460081822 1 31.457570005800001 4 +1 -1.6770680153554557e-14 0 1 0 +1 -1.7335850636956804e-15 0 1.8993121050727949e-16 1 +1 31.457570005800005 1.0341375440177741e-14 -2.1747382437379902e-16 1 +1 7.0416320315606287e-11 16.336281798686411 1 -3.3960061219628011e-13 +1 7.0416320315606287e-11 16.336281798686411 1 -3.3993942225168043e-13 +1 -3.5216512864388623e-15 -4.6185277824406512e-14 2.9938489432560789e-16 1 +7 0 0 3 25 23 31.457570005800001 16.336281798649999 31.457570005800001 16.5838012198416 31.457570005800001 17.078840062224899 31.457570005799997 17.821398325799994 31.457570005799997 18.563956589374833 31.457570005799994 19.306514852949928 31.457570005800005 20.049073116524927 31.45757000579999 20.791631380099982 31.457570005800008 21.53418964367474 31.457570005799997 22.276747907249966 31.457570005800005 23.019306170824912 31.457570005799994 23.761864434399911 31.457570005800001 24.504422697975137 31.457570005800001 25.246980961549905 31.457570005800008 25.989539225125043 31.457570005799994 26.732097488700063 31.457570005800001 27.474655752275051 31.457570005800001 28.217214015849937 31.457570005800001 28.959772279425117 31.457570005800001 29.702330543000105 31.457570005800001 30.444888806575008 31.457570005799997 31.187447070150128 31.457570005800008 31.930005333725045 31.457570005800001 32.425044176108337 31.457570005800001 32.672563597299998 + 16.336281798649999 4 17.078840062224998 1 17.821398325800001 1 18.563956589375 1 19.306514852949999 1 20.049073116524998 1 20.7916313801 1 21.534189643674999 1 22.276747907249998 1 23.019306170824997 1 23.7618644344 1 24.504422697974999 1 25.246980961550001 1 25.989539225125 1 26.732097488699999 1 27.474655752274998 1 28.217214015849997 1 28.959772279425 1 29.702330542999999 1 30.444888806575001 1 31.18744707015 1 31.930005333724999 1 32.672563597299998 4 +1 15.728785002899997 16.336281798699989 -1 0 +1 15.7287850029 16.336281798700007 -1 4.5174674053278343e-16 +1 15.728785002899997 32.672563597300012 -1 -2.2587337026639181e-16 +1 15.7287850029 2.34121644039788e-14 -1 -7.3008021163407545e-16 +1 3.1355313202140234e-16 -4.4203342459856602e-16 4.5037037199755636e-17 1 +1 31.457570005600001 1.0348646711699262e-14 6.6314293266099634e-12 1 +1 4.0059077417113312e-15 4.7311488060586271e-11 -1.5378718727388712e-16 1 +1 31.457570005816663 -1.0658141036401503e-14 -6.6314293266505405e-12 1 +7 0 0 3 47 45 10 0 10 0.14844407085295352 10 0.44416614632465562 10 0.88417519232305841 10.000000000000002 1.3205329460162532 10 1.7531669303715101 9.9999999999999964 2.1820162256448041 10 2.6070338737587178 9.9999999999999982 3.0281867912750009 10.000000000000002 3.4454530525553393 9.9999999999999964 3.8588180401089773 10 4.2682668966800206 10 4.6737863486835103 9.9999999999999947 5.0753820536588066 10.000000000000002 5.4730675652443335 9.9999999999999964 5.8668703056809717 10.000000000000002 6.2568319507073742 10 6.6430076198458483 10 7.0254621996771736 10.000000000000002 7.4042662417914311 10 7.7794843330359997 9.9999999999999964 8.1511942342289423 10.000000000000002 8.5194863985627052 10.000000000000002 8.8844572293845854 10 9.2462121367084684 10 9.6048651379166774 10 9.960537458654068 10.000000000000002 10.313354932453514 9.9999999999999964 10.663440214802071 10 11.010924957502667 9.9999999999999964 11.355945333625469 10.000000000000005 11.698639994724122 9.9999999999999947 12.039151804513866 10.000000000000002 12.377627171722009 9.9999999999999964 12.714215253823953 10.000000000000002 13.049068484374963 9.9999999999999964 13.382338113578447 10 13.714176505988904 10 14.044738596416295 9.9999999999999982 14.374182183968095 9.9999999999999947 14.702668189267962 9.9999999999999982 15.030355579273815 9.9999999999999982 15.357401500154324 10.000000000000002 15.683963733794386 9.9999999999999947 16.010202411054617 9.9999999999999947 16.227588247774658 9.9999999999999964 16.33628161797893 + 0 4 0.5279184286909091 1 1.0558368573818182 1 1.5837552860727273 1 2.1116737147636364 1 2.6395921434545455 1 3.1675105721454546 1 3.6954290008363637 1 4.2233474295272728 1 4.7512658582181819 1 5.279184286909091 1 5.8071027156000001 1 6.3350211442909092 1 6.8629395729818183 1 7.3908580016727274 1 7.9187764303636365 1 8.4466948590545456 1 8.9746132877454556 1 9.5025317164363639 1 10.030450145127272 1 10.558368573818182 1 11.086287002509092 1 11.6142054312 1 12.142123859890908 1 12.670042288581818 1 13.197960717272728 1 13.725879145963637 1 14.253797574654545 1 14.781716003345455 1 15.309634432036365 1 15.837552860727273 1 16.365471289418181 1 16.893389718109091 1 17.421308146800001 1 17.949226575490911 1 18.477145004181818 1 19.005063432872728 1 19.532981861563638 1 20.060900290254544 1 20.588818718945454 1 21.116737147636364 1 21.644655576327274 1 22.172574005018184 1 22.700492433709091 1 23.228410862400001 4 +7 0 0 5 24 8 -4.7774290741024004 2.1777447410815398 -4.7555255097022098 1.6287619016626635 -4.6600869562019511 1.0568749327901017 -4.4780199908753247 0.47560520807406448 -3.9522398933189891 -0.59504341346071499 -3.0882147073069177 -1.5241510769441291 -2.6094292440895401 -1.9105383029450067 -1.5653802497718345 -2.5183994836000991 -0.34554834113797028 -2.8113013361474799 0.26651983765665932 -2.8673230460235146 1.3317017200130579 -2.8050086311251903 2.3617712791987486 -2.4699170147808758 2.7781943767148505 -2.2823751997871966 3.5589082203638043 -1.8212847355523607 4.2290835118098187 -1.1963215256272548 4.5266888208991816 -0.85115526955311793 5.0400645543513605 -0.10366944931837452 5.3827787980104631 0.74122126522636478 5.5069321557320734 1.1786161047937398 5.5998792919855873 1.728642698990754 5.618973686111957 2.2833927510077743 5.6199671107382017 2.3864240178389977 5.6184087914615475 2.489441972516417 5.6143022858984324 2.5923584850078285 + 0 6 5.1153601240000004 3 9.6375519456400003 3 13.802367846299999 3 16.7867851462 3 19.700015367399999 3 22.573574319799999 3 23.228410862400001 6 +7 0 0 9 18 3 0.018313627509921323 -8.8711852092656338e-09 0.15089169765395918 -8.9542989285595783e-09 0.29050313374227699 -1.6118251477971988e-06 0.4371299615213502 1.8020333903179947e-05 0.5901107579775271 -2.3054723915193198e-05 0.75007172057303251 1.5099348586953762e-05 0.91503951415143092 -1.0251327258374229e-05 1.0856156356517204 5.835184844179284e-06 1.2606049657959195 -1.2893855132507666e-06 1.6184419547832711 -1.73106230813939e-06 1.8012760981524021 4.4453780793686809e-06 1.9874359512703752 -3.4314293572099976e-06 2.1762826708755814 -1.425444579017667e-06 2.3672314970984494 2.4488217502619675e-06 2.5597533030609156 -3.8275170664668753e-07 2.7533328626590836 -1.5082253730776332e-06 2.9474427624739792 3.9707581164539517e-07 3.1415926535894467 -9.5891386480584914e-08 + 0 10 11.55366011291702 8 23.107320225834055 10 +7 0 0 1 2 2 3.1415926535897931 -4.1107924080599871e-14 3.1232790249432636 -4.1107924080599871e-14 + 23.107320225834055 2 23.228410862400001 2 +1 1.3691847135366934e-15 16.33628179867565 1 7.1054273576010052e-16 +1 1.3691847135233193e-15 16.336281798675657 1 -7.1054273576010052e-16 +1 -1.7335850636956804e-15 32.672563597299998 1 0 +1 -8.454066440088776e-16 0 1 0 +7 0 0 3 47 45 9.9999999999999964 16.336281798674026 9.9999999999999964 16.444975236338131 9.9999999999999964 16.662363276635588 9.9999999999999964 16.98860719268794 9.9999999999999964 17.315171188881273 9.9999999999999964 17.642213966323027 9.9999999999999929 17.969897361293786 9.9999999999999982 18.298383682189812 9.9999999999999929 18.627831706871838 9.9999999999999947 18.958397453892935 9.9999999999999947 19.290235599272936 9.9999999999999982 19.623502101376076 9.9999999999999929 19.958352942912441 9.9999999999999964 20.294942152792753 9.9999999999999929 20.63342194845584 9.9999999999999929 20.973940061850751 9.9999999999999964 21.316640117280638 9.9999999999999929 21.661662769880547 9.9999999999999964 22.00914757037512 9.9999999999999947 22.359232632938767 9.9999999999999947 22.712043319056043 9.9999999999999982 23.067709932565588 9.9999999999999893 23.42636008251478 9.9999999999999964 23.788115035278889 9.9999999999999893 24.153087513449893 9.9999999999999982 24.521381590155951 9.9999999999999929 24.893092600604994 9.9999999999999947 25.268311730973217 9.9999999999999911 25.647113395347883 9.9999999999999947 26.029562084947074 9.9999999999999893 26.415729498140479 9.9999999999999982 26.805682022361097 9.9999999999999911 27.199476425349228 9.9999999999999982 27.597155782061346 9.9999999999999893 27.998748187838032 9.9999999999999964 28.404267206553495 9.9999999999999947 28.813716045865416 9.9999999999999947 29.227087911243871 9.9999999999999911 29.644362818735978 10 30.065523356432589 9.9999999999999929 30.490546016408789 9.9999999999999929 30.919397478069868 9.9999999999999929 31.352031507513782 9.9999999999999947 31.788388409315843 9.9999999999999893 32.228397026118621 9.9999999999999929 32.524119251809594 10 32.672563597299998 + 23.228411154942396 4 23.756330206695978 1 24.28424925844956 1 24.812168310203141 1 25.340087361956723 1 25.868006413710305 1 26.395925465463886 1 26.923844517217468 1 27.451763568971053 1 27.979682620724631 1 28.507601672478216 1 29.035520724231798 1 29.56343977598538 1 30.091358827738961 1 30.619277879492543 1 31.147196931246125 1 31.675115982999706 1 32.203035034753285 1 32.73095408650687 1 33.258873138260455 1 33.786792190014033 1 34.314711241767618 1 34.842630293521196 1 35.370549345274782 1 35.89846839702836 1 36.426387448781945 1 36.954306500535523 1 37.482225552289108 1 38.010144604042694 1 38.538063655796272 1 39.06598270754985 1 39.593901759303435 1 40.12182081105702 1 40.649739862810598 1 41.177658914564176 1 41.705577966317762 1 42.233497018071347 1 42.761416069824925 1 43.289335121578503 1 43.817254173332088 1 44.345173225085674 1 44.873092276839259 1 45.401011328592837 1 45.928930380346415 1 46.4568494321 4 +7 0 0 5 21 7 5.6143022858984324 2.5923584850078285 5.6004743234626631 2.9389124206868829 5.5577526899033103 3.284316112059571 5.4862732180171463 3.6252045855022459 5.2573485960611634 4.3917196609149229 4.8874245977130784 5.1004174050644195 4.6361137263678103 5.4759787065668135 3.9555056830717774 6.2878030770948072 3.0986537958959843 6.9020513873627038 2.5610699037005134 7.1791833399203355 1.3383703966730565 7.6016157786596992 0.069748969872165389 7.6393162201277676 -0.60003993332503569 7.5483400354928634 -1.9058999764876035 7.1538796298464575 -2.9803445180109804 6.404682367896811 -3.4534724341943814 5.9438658320324365 -4.2205319220627615 4.9265516614906488 -4.6345237117911893 3.8079180329728359 -4.7546123209096436 3.2457773187450201 -4.7982198336862751 2.6988366537874384 -4.7774290741024004 2.1777447410815398 + 23.228410862400001 6 25.433462078400002 3 28.303717748099999 3 32.199539426500003 3 36.747675515600001 3 41.601373815099997 3 46.4568494321 6 +7 0 0 9 18 3 3.1232790249436597 -1.4674633623664913e-07 2.9295947326801111 -7.2303208794327541e-07 2.7359064710490077 -1.1325845136922303e-06 2.5427267257391577 3.2448526656722564e-06 2.3505477051320565 7.2324805082426231e-07 2.1598855730341406 -5.8618183190785805e-06 1.9712732255699545 -3.1656307524881595e-06 1.785285304317676 6.3834265474571763e-06 1.6025611658017802 -3.2855156442390714e-06 1.2447859451801202 -1.8099664797493828e-06 1.0697516725542755 8.0834200987184909e-06 0.89905043478756852 -1.163837218501329e-05 0.73386645343816781 1.2997416882732163e-05 0.57369771703270089 -1.7382826694119224e-05 0.42024690554080735 1.1288398460191848e-05 0.27323091087578177 3.5382101867625047e-07 0.13311739193707278 8.183000828902195e-09 4.4750528084695544e-14 -8.4538546028353608e-09 + 23.228411154942396 10 34.754252693979083 8 46.280094233015774 10 +7 0 0 3 4 2 1.7347234759768071e-18 -4.1107924080599871e-14 0.0061242880251943851 -4.1107924080599871e-14 0.012228838028209408 -4.1107924080599878e-14 0.018313627509921413 -4.1107924080599871e-14 + 46.280094233015774 4 46.4568494321 4 +1 -2.8275992583807113e-16 16.336281798747308 1 3.5527136788005016e-16 +1 1.0492908630910694e-15 16.336281798609498 1 0 +1 -1.018713914937344e-15 32.672563597299948 1 7.1054273576010003e-16 +1 3.1355313202139894e-16 -1.3885821491552168e-14 1 -2.3599609785009359e-15 +7 0 0 3 47 45 10 16.3362817987 9.9999999999999964 16.224177717766846 10 15.999973622316601 10.000000000000002 15.663527979322016 9.9999999999999964 15.326780889484336 10 14.989606273627345 9.9999999999999982 14.6518797576356 10 14.313474241667942 9.9999999999999982 13.974257834839179 10 13.634090942438188 10 13.292828720282024 9.9999999999999982 12.950332331751275 10.000000000000002 12.606476516387126 9.9999999999999982 12.261156843003729 10 11.914286870708599 9.9999999999999982 11.565698714307217 10 11.215272017074598 10.000000000000002 10.862916661576625 9.9999999999999964 10.508558429475517 10.000000000000002 10.152126200739518 10 9.7935455435455161 10.000000000000002 9.4327217930569809 9.9999999999999982 9.0695493369900539 10 8.7039291678419399 9.9999999999999964 8.3357827088542784 9.9999999999999982 7.9651032054931825 10.000000000000002 7.5918667455551612 10 7.2159997143308914 9.9999999999999982 6.8374633869518702 10 6.4562348950209252 10 6.0723080958772844 10.000000000000002 5.6856857789533715 9.9999999999999947 5.2963714749302131 10.000000000000004 4.9043676375794423 9.9999999999999982 4.5096741408380279 10 4.1122984273933385 9.9999999999999964 3.7122921723049744 10 3.3096833846757709 10.000000000000002 2.9045025700922684 9.9999999999999982 2.4967913618844872 10 2.0865936151287001 9.9999999999999982 1.673962373886243 10 1.2589572667956164 9.9999999999999964 0.84164258810170667 10 0.42208497309555698 10.000000000000002 0.14092931627789657 10 0 + 20.713544667899999 4 21.184305973072725 1 21.655067278245454 1 22.12582858341818 1 22.596589888590909 1 23.067351193763635 1 23.538112498936364 1 24.00887380410909 1 24.479635109281816 1 24.950396414454545 1 25.421157719627274 1 25.8919190248 1 26.362680329972726 1 26.833441635145455 1 27.304202940318181 1 27.774964245490906 1 28.245725550663636 1 28.716486855836365 1 29.187248161009091 1 29.658009466181817 1 30.128770771354546 1 30.599532076527272 1 31.070293381699997 1 31.541054686872727 1 32.011815992045456 1 32.482577297218185 1 32.953338602390907 1 33.424099907563637 1 33.894861212736359 1 34.365622517909088 1 34.836383823081817 1 35.307145128254547 1 35.777906433427276 1 36.248667738599998 1 36.719429043772728 1 37.19019034894545 1 37.660951654118179 1 38.131712959290908 1 38.602474264463638 1 39.073235569636367 1 39.543996874809096 1 40.014758179981818 1 40.485519485154541 1 40.95628079032727 1 41.427042095499999 4 +7 0 0 5 24 8 4.4152569799936856 2.5445186660433876 4.4309824357497689 2.1503816557087561 4.3981242551454329 1.7543066862987615 4.3163303449425712 1.3648073643359879 4.0796070023181983 0.67520724575769009 3.6990415424812539 0.06120878371827132 3.4976011589525626 -0.19937307667542115 2.9955652355347695 -0.72731117732857342 2.3952968620925787 -1.1258100492492531 2.0422260405992461 -1.3015462718793032 1.2955135251415868 -1.565981124858574 0.52605369719134387 -1.6420471914634263 0.13758078239129645 -1.6324701017687673 -0.6382120033998433 -1.5202983273032444 -1.3398055222068308 -1.2385968151379672 -1.6733931335359955 -1.0548493640509875 -2.3023713655785798 -0.60668309218037564 -2.7852044875524058 -0.054133583559604403 -2.9940465734398458 0.25195505754255976 -3.3038444636291473 0.83629635205141994 -3.4813746389565097 1.430888389059767 -3.5366249925664732 1.7018717107674775 -3.5680863931437443 1.967512790969117 -3.5783830670562793 2.2255848183200229 + 20.713544667899999 6 23.532195013599999 3 25.905404210299999 3 28.819572365700001 3 31.840203623499999 3 35.0332986393 3 38.490760262400002 3 41.427042095499999 6 +7 0 0 1 2 2 3.1232790247764179 11.999999999999872 3.1415926535897931 11.999999999999872 + 20.713544667899999 2 20.818236939704867 2 +7 0 0 8 9 2 3.1415926535894676 12.000000008270456 2.6909634129866733 12.000000008270431 2.2406239957799698 12.000000008267307 1.7994159333438802 12.000000008236384 1.3762831650574299 12.000000008229108 0.98042704898216471 12.000000008258212 0.62181809396656718 12.000000008269126 0.3015580934225453 12.000000008270487 0.018313627324381191 12.000000008270501 + 20.818236939704867 9 41.427042095499999 9 +7 0 0 3 47 45 10 32.672563597299998 10 32.53163392638465 9.9999999999999982 32.250477698358601 10.000000000000002 31.830919517346285 9.9999999999999982 31.413604529471108 10 30.998599023101999 10 30.585967066564695 10.000000000000002 30.175768295660212 9.9999999999999982 29.768056217406102 10.000000000000002 29.362875179517303 9.9999999999999982 28.960266725595218 10.000000000000002 28.56026100111292 9.9999999999999982 28.162885571501896 10 27.768191800387328 10 27.37618710079742 9.9999999999999964 26.98687183798835 10.000000000000002 26.600249138747809 10.000000000000002 26.216322438764312 10 25.835094215267116 10.000000000000002 25.456557919298106 9.9999999999999982 25.08069042143007 10.000000000000002 24.707453012268768 9.9999999999999964 24.336772724413798 9.9999999999999964 23.96862601891614 10.000000000000002 23.603005867036625 9.9999999999999947 23.239833379890662 10.000000000000002 22.879009252661291 9.9999999999999982 22.520427777381318 10.000000000000002 22.163994624322573 9.9999999999999982 21.809635987901512 10 21.457280462355779 10.000000000000002 21.106853573905205 10.000000000000002 20.758264954603142 10 20.41139417726842 10 20.06607351386165 9.9999999999999982 19.722217346744056 10 19.379723225511707 10 19.038466394859562 10 18.698307812146428 10 18.359101198892532 10 18.02070148501792 10 17.682971813308239 9.9999999999999964 17.345791825237821 10 17.009039909317149 10 16.672591064090913 9.9999999999999964 16.448386003192756 10 16.3362817987 + 0 4 0.47076237881590904 1 0.94152475763181809 1 1.4122871364477272 1 1.8830495152636362 1 2.3538118940795454 1 2.8245742728954544 1 3.2953366517113634 1 3.7660990305272724 1 4.2368614093431818 1 4.7076237881590908 1 5.1783861669749998 1 5.6491485457909087 1 6.1199109246068177 1 6.5906733034227267 1 7.0614356822386357 1 7.5321980610545447 1 8.0029604398704546 1 8.4737228186863636 1 8.9444851975022726 1 9.4152475763181815 1 9.8860099551340905 1 10.35677233395 1 10.827534712765909 1 11.298297091581817 1 11.769059470397726 1 12.239821849213635 1 12.710584228029544 1 13.181346606845453 1 13.652108985661362 1 14.122871364477271 1 14.59363374329318 1 15.064396122109089 1 15.535158500924998 1 16.005920879740909 1 16.476683258556818 1 16.947445637372727 1 17.418208016188636 1 17.888970395004545 1 18.359732773820454 1 18.830495152636363 1 19.301257531452272 1 19.772019910268181 1 20.24278228908409 1 20.713544667899999 4 +7 0 0 5 24 8 -3.5783830670562793 2.2255848183200229 -3.5886797476544814 2.483657015061894 -3.5784819783501263 2.7509604124823781 -3.5449963677851315 3.0254830195647315 -3.4154020938974128 3.63233051896988 -3.1531424297010204 4.239495652103237 -2.9693519904142534 4.5612473351532898 -2.5320745828700808 5.1505104463877203 -1.9408003085353585 5.6473620383991374 -1.6229144670321745 5.8571013308204343 -0.94599238002442121 6.1938051890117194 -0.18160252968419854 6.3674267853117712 0.20487067676054949 6.40792334976517 0.97794719257713325 6.3934024432434242 1.743352610986193 6.1892982142468114 2.1093010759770578 6.0422507093578588 2.8516087391655418 5.6306255637065448 3.4723283065858794 5.0290727194494877 3.7565031136888933 4.6609493269540252 4.1137113009540514 4.0250034529359198 4.3192885482848453 3.3269099992008861 4.3727614027472015 3.0686471735949752 4.4047838743003354 2.8070127125699074 4.4152569799936856 2.5445186660433876 + 0 6 2.9362837617099999 3 6.3937513023000001 3 9.5868506127799993 3 12.607484852000001 3 15.5216549257 3 18.836332136399999 3 20.713544667899999 6 +7 0 0 3 4 2 0.018313627324306737 11.999999999999872 0.012231480104866441 11.99999999999987 0.0061269546108461467 11.999999999999872 -6.119246959231817e-19 11.999999999999874 + 0 4 0.16595088611804829 4 +7 0 0 8 9 2 5.5067062071278503e-14 12.000000008270503 0.28448365976233664 12.000000008270517 0.6058257300699097 12.000000008254574 0.96527832697847771 12.000000008287316 1.3612826386770394 12.000000008200004 1.784299680813092 12.00000000828004 2.2246778544590597 12.000000008263669 2.6739831725253271 12.000000008270483 3.1232790247764921 12.000000008270458 + 0.16595088611804829 9 20.713544667899999 9 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 -5.7142589111363495 -3.0899182806561001 0.95310690166551937 0.30263382824389307 +8 0 12.237646832624943 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 4.2082912526076539 3.7644962273785301 -0.87524683288310923 -0.48367652571536579 +8 0 11.999999999999872 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 -6.0421110652058054 -29.5 1 0 +1 0 -1.4502592058062067 0 1 +1 3.1415926536024514 0 0 1 +1 3.1415926536024519 0 0 1 +1 -6.0421110652058054 29.5 1 0 +2 0 0 -0.9710820643040643 -0.23874594109001579 0.23874594109001579 -0.9710820643040643 5.1999999999999993 +1 6.3765972528587014 1.0932963242716166e-09 -1 0 +1 -6.3765972528587014 1.0932963242716166e-09 1 0 +1 0.24107424196777005 -29.5 1 0 +1 0 -1.450259205816065 0 1 +1 0.24107424196777005 29.5 1 0 +2 0 0 -0.9710820643040643 -0.23874594109001579 0.23874594109001579 -0.9710820643040643 5.1999999999999993 +8 2.9005184116346845 3.235004600013403 +1 -0.09341194633798322 -1.2877579776538252e-12 1 0 +7 0 0 1 2 2 3.1415926535897931 -1.2877579776538252e-12 0.33448618699402671 -1.2877579776538252e-12 + 3.235004600013403 2 6.0421110652058054 2 +1 1.5707963267948966 1.5707963267948961 0 1 +1 -3.0210555326069497 26.415147704881512 1 0 +1 0 7.7334445129968099 1 -4.0224828451366575e-12 +1 0 1.4502592058172235 1 -4.0224828451366575e-12 +1 0 4.5918518594093092 1 -4.7513246201593651e-12 +1 0 4.5918518594093092 1 -4.7513246201593651e-12 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 5.6567868139547901 -3.1939180994664329 -0.763393359904183 0.64593388055915035 +8 0 12.237646832625115 +1 3.1415926535897931 0 0 1 +1 1.5707963267948966 -4.7123889803846906 0 1 +1 -3.0210555326060535 26.415147704881512 1 0 +1 0 -6.617284498133813e-11 0 1 +1 6.2831853071795862 -6.617284498133813e-11 0 1 +1 -3.0210555326060797 -26.415147704882713 1 0 +1 0 1.5707963267948957 0 1 +1 3.1415926535895822 -3.3338665161863901e-11 0 1 +1 3.1415926535895822 -3.3338665161863901e-11 0 1 +1 -3.0210555326058337 -26.415147704882713 1 0 +1 0 -4.7123889803846897 0 1 +1 1.5707963267948988 3.0210555326107471 -7.0678992921623776e-17 1 +1 1.5707963267948963 1.4999999999999973 1 8.4814791505693748e-16 +1 -1.5707963267948966 7.7334445129968108 1 -4.0230482770867373e-12 +1 -1.5707963267948966 1.4502592058172252 1 -4.0231896350725805e-12 +1 -1.5707963267948966 4.5918518593883428 1 8.0427039625132465e-12 +1 -1.5707963267948966 4.5918518593883428 1 8.0427039625132481e-12 +1 -2.9005184116220235 29.5 1 0 +2 0 0 -0.9710820643040643 -0.23874594109001579 0.23874594109001579 -0.9710820643040643 4 +1 6.376597252857108 11.999999998928898 -1 0 +1 -2.9005184116368254 29.5 1 0 +2 0 0 -0.9710820643040643 -0.23874594109001579 0.23874594109001579 -0.9710820643040643 4 +7 0 0 1 2 2 3.1415926535897931 12.000000000000488 0.33448618680070646 12.000000000000488 + 3.2350046002350785 2 6.0421110651999577 2 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 -5.4265870114996435 1.5599040096628418 0.87524683288313021 -0.48367652571532771 +8 0 12.000000000000488 +1 3.1415926535897931 0 0 1 +1 -6.376597252857108 11.999999998928898 1 0 +8 2.9005184116368254 3.2350046002350785 +1 -0.093411946533962897 12.000000000000488 1 0 +1 1.5707963267948979 -3.2621297745782751 7.0678992921199196e-17 1 +1 -4.7123889803846888 1.5000000000000053 1 -8.4814791505693827e-16 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -1.5 1 0 +2 0 0 1 0 -0 1 5.2000000000000002 +8 3.1415926535897931 6.1897733615002597 +1 -3.0481807079108045 3.3948874590115935e-13 1 0 +8 6.1897733615002597 6.2831853071795862 +1 9.3313660150900528 3.3948874590115935e-13 -1 -0 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535779342 0 0 1 +1 3.1415926535779342 0 0 1 +1 -2.9005184116220235 -29.5 1 0 +1 0 -1.4502592058047235 0 1 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 -2.9005184116368254 -29.5 1 0 +1 0 -1.450259205817541 0 1 +1 0 -1.5 1 0 +2 0 0 1 0 -0 1 5.2000000000000002 +8 0 3.0481807079107206 +1 3.0481807079106571 3.3948874590115935e-13 -1 -0 +8 3.0481807079107206 3.1415926535897931 +1 -3.0481807079107206 3.3948874590115935e-13 1 0 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 5.6567868139547883 -3.1939180994620626 -0.76339335990444313 0.64593388055884293 +8 0 12.23764683262354 +1 3.1415926535897931 0 0 1 +1 1.5707963267948966 1.5707963267948961 0 1 +1 0.12053712098372804 26.415147704881512 1 0 +1 0 7.733444512981924 1 3.1732040662029404e-12 +1 0 1.4502592058023378 1 3.1734867821746264e-12 +1 0 4.5918518593939259 1 2.6004215075622043e-12 +1 0 4.5918518593939259 1 2.6004215075622043e-12 +1 1.5707963267948966 -4.7123889803846897 0 1 +1 -6.1626481861920128 26.415147704881512 1 0 +1 3.1415926535859544 -2.0079937712580431e-11 0 1 +1 3.1415926535859544 -2.0079937712580431e-11 0 1 +1 0.12053712098344294 -26.415147704882713 1 0 +1 0 1.5707963267948961 0 1 +1 6.2831853071795862 2.0083490426259232e-11 0 1 +1 0 2.0083490426259232e-11 0 1 +1 -6.1626481861917144 -26.415147704882713 1 0 +1 0 -4.7123889803846897 0 1 +1 0 -1.5 1 0 +2 0 0 1 0 -0 1 4 +8 3.0481807079123651 3.1415926535897931 +1 -3.0481807079123651 12.000000000000488 1 0 +1 0 -1.5 1 0 +2 0 0 1 0 -0 1 4 +8 3.1415926535897931 6.1897733615020325 +1 -3.0481807079123677 12.000000000000488 1 0 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 -5.4265870115016295 1.5599040096624468 0.87524683288312977 -0.48367652571532838 +8 0 12.000000000000488 +1 3.1415926535897931 0 0 1 +8 0 3.0481807079123651 +1 3.0481807079121759 12.000000000000488 -1 -0 +8 6.1897733615020325 6.2831853071795862 +1 9.3313660150918256 12.000000000000488 -1 -0 +1 1.5707963267948988 3.0210555326121629 -7.0678992921687476e-17 1 +1 1.5707963267948963 1.4999999999999982 1 5.6543194337129189e-16 +1 -1.5707963267948966 7.7334445129813281 1 3.3626237672290689e-12 +1 -1.5707963267948966 1.4502592058017427 1 3.3623410512573834e-12 +1 -1.5707963267948966 4.5918518593921309 1 3.1732040661996862e-12 +1 -1.5707963267948966 4.5918518593921309 1 3.1732040661996862e-12 +1 1.5707963267948981 -3.2621297745796909 7.0678992921135495e-17 1 +1 -4.7123889803846897 1.5000000000000036 1 -5.6543194337129189e-16 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 8.0870199198131409 -4.3893024320008891e-10 -1 0 +1 -8.0870199198131409 -4.3893024320008891e-10 1 0 +8 2.9005184116346845 4.9454272665978323 +1 -1.8038346124693236 -4.5392902607417395e-13 1 0 +8 4.9454272665978323 6.0421110652058054 +1 8.0870199201876254 -4.5392902607417395e-13 -1 -0 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 -5.7142589111330846 -3.0899182806590915 0.95310690166539469 0.30263382824428575 +8 0 12.237646832623717 +1 3.1415926535897931 0 0 1 +1 8.0870199198116861 12.000000000430461 -1 0 +8 4.9454272667087187 6.0421110651999577 +1 8.0870199202985127 11.999999999999872 -1 -0 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 4.208291252608225 3.7644962273800031 -0.87524683288310923 -0.48367652571536557 +8 0 11.999999999999872 +1 3.1415926535897931 0 0 1 +1 -8.0870199198116861 12.000000000430461 1 0 +8 2.9005184116368254 4.9454272667087187 +1 -1.8038346124186004 11.999999999999872 1 0 +8 3.1415926535897931 4.4793506945461887 +1 4.4793506945459791 -4.7779252437511843e-13 -1 -0 +8 4.4793506945461887 6.2831853071795862 +1 -4.4793506945461887 -4.7779252437511843e-13 1 0 +8 0 1.3377580409557464 +1 1.8038346126336759 -4.7779252437511843e-13 1 0 +8 1.3377580409557464 3.1415926535897931 +1 4.4793506945455395 -4.7779252437511843e-13 -1 -0 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 5.6567868139547883 -3.1939180994619352 -0.76339335990444668 0.64593388055883871 +8 0 12.237646832623485 +1 3.1415926535897931 0 0 1 +8 3.1415926535897931 4.4793506945475787 +1 4.4793506945475317 12.000000000000496 -1 -0 +8 1.337758040956976 3.1415926535897931 +1 4.4793506945467687 12.000000000000496 -1 -0 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 -5.4265870115016304 1.5599040096624894 0.87524683288312932 -0.48367652571532915 +8 0 12.000000000000496 +1 3.1415926535897931 0 0 1 +8 4.4793506945475787 6.2831853071795862 +1 -4.4793506945475787 12.000000000000496 1 0 +8 0 1.337758040956976 +1 1.8038346126321447 12.000000000000496 1 0 +1 1.7801842971283665e-09 -1.4006907368519636e-09 5.05274835137164e-14 1 +1 3.1415926553699762 -1.4006907368519636e-09 5.0626169890419095e-14 1 +1 -4.1645931529437537 6.0000000019179653 1 -2.895011552794647e-13 +1 0 0 1 0 +1 0 -0.0060000000000000001 1 0 +2 156.30864891385494 26.265115161828646 0.86632438691299207 0.49948178809625149 0.49948178809625149 -0.86632438691299207 3.000000000000417 +2 0.22462587937325323 0.14225324864574407 0.4425696979080283 0.89673410913915652 -0.89673410913915652 0.4425696979080283 3.0000000000000018 +1 -4.1645931529151614 5.9940000019936317 1 0 +1 3.1415926524980966 -3.7416612030938268e-09 1.0103029521674606e-13 1 +1 -1.0916965109686316e-09 -3.7416612030938268e-09 1.0095628034845541e-13 1 +7 0 0 1 2 2 0 5.9999999976912477 3.1415926530777476 6.000000007590188 + -4.7123889803800001 2 4.7123889803800001 2 +1 0 0 1 0 +1 0 -0.0060000000000000001 1 0 +7 0 0 5 9 3 158.94139660078508 24.826838548539854 158.48954867152679 23.999736468006176 157.71289852322116 23.350074653772936 156.70201671869654 23.053473854697586 154.69293203196503 23.307565249413983 153.39360840248446 24.860865551559073 153.09700759996485 25.871747354265608 153.22405330188121 26.876289702618124 153.67590122561523 27.703391777392426 + -4.7123889803800001 6 4.4408920985e-16 3 4.7123889803800001 6 +7 0 0 5 9 3 -1.3804513703635379 2.6767605028735204 -2.1766903084040621 2.1725106081333934 -2.7749107769618817 1.3555784220032194 -3.0056988531292923 0.32767233649289551 -2.6225636725196182 -1.6608424732847453 -0.98869929467448614 -2.8572834110569829 0.039206789245014306 -3.088071490779285 1.0334641988159774 -2.8965038956028053 1.8297031314649459 -2.3922540067461853 + -4.7123889803800001 6 4.4408920985e-16 3 4.7123889803800001 6 +7 0 0 8 9 2 -2.6996369228982076e-07 5.9939999977691443 0.39269881321588684 5.9939999983353403 0.78502843468752559 5.9940000066480934 1.1787158350786981 5.993999989634176 1.5707978374964355 5.9940000051938114 1.9628752406322079 5.9940000134192815 2.3565652933836887 5.994000003367546 2.7488938421602516 5.9940000005999483 3.1415929221303287 5.9940000076673261 + -4.7123889803800001 9 4.7123889803800001 9 +1 0 -4.9940000062364849 1 0 +2 0.23493497025905988 0.14119567870129082 0.48778363514910567 0.87296456129714928 0.87296456129714928 -0.48778363514910567 2 +1 0 -4.9940000062364849 1 0 +2 0.23493497025905988 0.14119567870129082 -0.48778363514910567 -0.87296456129714928 -0.87296456129714928 0.48778363514910567 2 +1 148.81330816273686 37.680887890067503 0.98617444109966845 0.16571050576760793 +1 13.000000000566635 20.000000000887901 1 0 +1 163.70495722662957 27.507943957896295 0.16571050576807386 -0.98617444109959018 +1 12.499999999693545 19.999999998090178 1 -1.1102230246251565e-16 +1 152.95607080908886 13.026526872490905 0.98617444109966845 0.16571050576760793 +1 12.999999999039202 19.999999998471583 1 0 +1 133.65156128207684 16.373845382195341 -0.98617444104127372 -0.16571050611512617 +1 5.4829280517353824 14.000000001537657 1 4.9404924595819447e-14 +1 133.64073385259798 16.380857653630947 -0.98643619904757918 -0.16414513458694116 +3 0.52311807925274822 -37483.472810790176 -1.3964534844468456e-05 0.999999999902496 -0.999999999902496 -1.3964534844468456e-05 62434.122103202208 10.000000000000453 +7 0 0 8 9 2 3.88776292737978 36.398926863000042 3.8877644331013688 36.474092449655799 3.8877659388208485 36.549257939295785 3.8877674445520825 36.62442333085346 3.8877689502442081 36.699588627554476 3.8877704559890844 36.774753823818173 3.8877719617075854 36.849918925865495 3.887773467430899 36.925083929271537 3.8877749731524878 37.00024883581932 + 5.3566190454700333 9 5.3566310912427415 9 +8 -10.666399391132062 -0.00035611385742853559 +1 -0.000356111859257934 14.001209728600935 -0.99999999990249588 -1.396453484434665e-05 +8 -10.666399391132062 -0.00035611385742853559 +1 0.61102579130101731 -5.9747635144440778 0.99480859493442286 0.10176374327136048 +1 0 -1.0881846534971373e-09 0 1 +1 6.0018532366257205e-09 17.000000001367752 2.0317081350640362e-14 1 +7 0 0 1 2 2 0 5.9999999935757842 3.1415926532393343 5.9999999868664418 + -9.4247779607699993 2 9.4247779607699993 2 +7 0 0 5 15 5 143.98146839866604 24.193733844093458 143.82528992783227 25.123181357046633 143.48661486285346 26.02196330083234 142.97330167408654 26.842208776954521 141.6527161701606 28.237233166308215 139.90268768889291 29.029343907160182 138.95971931678287 29.246377810171452 137.03949314359397 29.299014047781839 135.24192926355954 28.621663920723677 134.42168378357201 28.108350730666189 133.02665940070801 26.787765228610169 132.23454865254644 25.037736745244274 132.01751475311721 24.094768373037368 131.99119663722558 23.134655290918545 132.14737510806026 22.20520777796628 + -9.4247779607699993 6 -4.7123889803800001 3 8.881784197e-16 3 4.7123889803800001 3 9.4247779607699993 6 +7 0 0 8 9 2 1.7447409904920865 -2.9999999988131929 1.9193467044739125 -2.9999999984699959 2.0939551337933153 -2.9999999956849024 2.2685638675475275 -2.9999999904557626 2.4431631290699443 -3.0000000004183676 2.6177724397530255 -2.999999998288331 2.7923817376190527 -2.9999999987990122 2.9669862343729765 -2.9999999996640159 3.1415926539699051 -3.0000000007581811 + -8.390630788852194 9 -0.0095226304350433111 9 +7 0 0 5 15 5 143.97988294614515 24.203123568799128 143.82222954080498 25.13232203945563 143.48212844065711 26.03056533822928 142.96751408232376 26.849995099134503 141.64471619081087 28.242921823079087 139.89343275035026 29.032254086575904 138.95012111017422 29.247791126006632 137.02981381616337 29.297379695911786 135.23332722614759 28.617177498525507 134.41389746137793 28.102563138895675 133.02097074392077 26.779765249262255 132.23163847311662 25.028481806694344 132.01610143726975 24.085170166427361 131.99130715522369 23.12501652390165 132.14896056056568 22.195818053245603 + -9.4247779607699993 6 -4.7123889803800001 3 8.881784197e-16 3 4.7123889803800001 3 9.4247779607699993 6 +7 0 0 8 9 2 2.3684757858670005e-15 -2.9987902688815016 0.21815664038959273 -2.9988085476175672 0.43631328077867693 -2.9988790971447088 0.65446992116858382 -2.9990005907638988 0.87262656155598961 -2.9991664004210179 1.0907832019493071 -2.9993647757692088 1.3089398423372813 -2.999580449599307 1.5270964827271321 -2.999797306988838 1.7452531231167223 -3.0000006033451214 + 0.086966434149447797 9 1.8322195572661708 9 +3 8.9067349776428273e-05 -0.0059481074449330151 0.014973213887728463 -0.99988789514918741 0.99988789514918741 0.014973213887728463 6.0000000775471829 6 +1 3.1415926537228827 1.0885785606262743e-09 0 1 +1 6.6131198295238391e-09 17.000000000401684 2.0317081350640362e-14 1 +1 131.66303521341024 28.207938673589794 -0.98617444111517261 -0.16571050567534068 +1 5.4829280505129692 14.0000000034709 1 -5.9396931817445845e-13 +1 131.67099224226956 28.218092041094522 -0.98643619912077973 -0.16414513414703877 +1 26.000000007511776 16.999999997041314 -2.0317081350640362e-14 1 +1 4.1474557122000988e-09 16.999999995143781 -2.5357493882438575e-13 1 +1 26.000000006290712 16.999999995108183 -2.0317081350640362e-14 1 +1 24.999999995547768 16.99999999863703 -2.5357493882438575e-13 1 +1 163.70495722636747 27.507943958351696 0.16571050576807386 -0.98617444109959018 +1 12.500000000001698 13.999999995690642 1 -1.1102230246251565e-16 +1 -5.9266632420101875 5.9999999900713465 1 -4.3425173250153374e-13 +2 138.06442175322408 23.199470803600612 -0.86632438691299207 -0.49948178809625149 0.49948178809625149 -0.86632438691299207 12.500000000700135 +2 138.06442175322843 23.199470803592142 -0.86553056555362395 -0.50085610717293239 0.50085610717293239 -0.86553056555362395 12.500000000700204 +7 0 0 1 2 2 0 5.9999999910351107 3.1415926538784484 5.999999991034656 + 2.7850705893592203 2 5.9266632418789236 2 +2 138.06442175409848 23.199470802083702 -0.86632438691299207 -0.49948178809625149 0.49948178809625149 -0.86632438691299207 12.500000000700135 +2 138.06442175410433 23.199470802076569 -0.86553056555362395 -0.50085610717293239 0.50085610717293239 -0.86553056555362395 12.500000000700204 +8 -79.749916533025768 -59.747674184625453 +1 68.429867952768589 19.313871385488397 -0.99696539148761798 -0.077846054337651821 +8 -79.749916533025768 -59.747674184625453 +1 -69.740976180510046 0.49682750053865732 -0.99988789514893639 -0.014973213904488931 +3 138.06395866775171 23.205401487472329 -0.07784605433765189 0.99696539148761809 -0.99696539148761809 -0.07784605433765189 10.000000129245757 10.000000000000453 +7 0 0 8 9 2 3.0014703586088025 37.000248835802608 3.4116847271801505 36.999597224288827 3.8218990957452661 36.998897835615935 4.2321134643370897 36.998317901670816 4.6423278328693414 36.998040890495759 5.0525422014761716 36.99818105828308 5.4627565700320702 36.998662122736278 5.8729709386082387 36.999316948890296 6.2831853071795862 36.999976402983776 + 1.415700258361021 9 4.6974152069318045 9 +1 0 37.000248235802601 1 0 +2 0 0 1 0 -0 1 10.000000000000453 +7 0 0 8 9 2 0.17157341609009422 6.0000005959932734 0.49924075870532647 5.9996951428876892 0.82690810132021397 5.9994201337385675 1.1545754439330267 5.9992255481847678 1.482242786552888 5.9991543517644459 1.8099101291636543 5.9992255481847678 2.1375774717814693 5.999420133739477 2.4652448143967196 5.9996951428876875 2.7929121570119517 6.0000005959932716 + 1.830923283127764 9 4.452262024049622 9 +3 8.9071243138505451e-05 -0.0059481025233019125 0.014973213904488931 -0.99988789514893639 0.99988789514893639 0.014973213904488931 6.0000000775471829 6 +3 8.9072174759508016e-05 -0.0059481010486415187 0.014973213905720937 -0.99988789514891796 0.99988789514891796 0.014973213905720937 5.0000000646226521 5 +7 0 0 8 9 2 -8.8817841970012523e-16 3.0000853110948835 0.39269908169872281 2.9997762177444565 0.78539816339616664 2.9994959254722744 1.1780972450987974 2.9993170527686743 1.5707963267886953 2.9993027786695166 1.9634954084949641 2.9994711262115743 2.3561944901900915 2.9997651242260872 2.7488935718910685 3.0001030235815542 3.1415926535897931 3.0004121169319813 + 1.7754900143772263 9 4.9170826679670192 9 +3 8.9072174759508016e-05 -0.0059481010486415187 0.014973213905720937 -0.99988789514891796 0.99988789514891796 0.014973213905720937 5.0000000646226521 5 +7 0 0 8 9 2 3.1415926535897931 3.0004121169319813 3.5342917352885173 3.0007212102824083 3.9269908169922019 3.0010015025563916 4.3196898986479937 3.0011803752367996 4.7123889804097416 3.0011946493596042 5.1050880620496173 3.0010263017993566 5.4977871437886279 3.0007323038030336 5.8904862254808599 3.0003944044453106 6.2831853071795845 3.0000853110948835 + 4.9170826679670192 9 8.0586753215568123 9 +1 0 -3.545768123558446e-09 0 1 +1 3.1415926534234924 -3.545768123558446e-09 1.5173047997751499e-15 1 +1 0 -5.0000000061589391 1 0 +2 0.23493593480950298 0.14119566425725022 0.48778363514910567 0.87296456129714928 0.87296456129714928 -0.48778363514910567 2 +1 -1.957814805987262e-16 -5.0000000061589391 1 0 +2 0.23493593480950298 0.14119566425725022 -0.48778363514910567 -0.87296456129714928 -0.87296456129714928 0.48778363514910567 2 +3 138.06410886232337 23.203478026185042 -0.07784605433765189 0.99696539148761809 -0.99696539148761809 -0.07784605433765189 10.000000129245757 10.000000000000453 +7 0 0 9 10 2 0 24.999976250377856 0.6981317007977319 25.001098555794616 1.3962634016686266 25.002234720741399 2.0943951021952003 25.002585430513136 2.7925268036385447 25.001396154752001 3.4906585033938669 24.998692056280561 4.1887902050118342 24.997445596382022 4.8869219055638737 24.997744277585298 5.5850536063818232 24.998853944961095 6.2831853071795543 24.999976250377856 + 4.6974152069318045 10 10.980600514111391 10 +1 6.2831853071795862 -0 0 1 +1 0 -0 0 1 +7 0 0 9 10 2 -8.8817841970012523e-16 20.999976195003388 0.69813170079773101 21.001098500420134 1.3962634016649886 21.002234665415017 2.0943951022243041 21.002585374430055 2.7925268033475064 21.001396099978592 3.4906585034520745 20.998692000284791 4.1887902050991457 20.997445541375782 4.8869219055711497 20.997744222026085 5.5850536063818232 20.998853889586641 6.2831853071795543 20.999976195003388 + 4.697415206930577 10 10.980600514110163 10 +3 138.06415546162259 23.202836598617228 -0.078869778603896434 0.99688492717212485 -0.99688492717212485 -0.078869778603896434 10.000000129245757 10.000000000000453 +1 5.2123889803842944 0 0 -1 +1 5.2123889803842944 0 0 -1 +1 8.3539816339740884 0 0 -1 +1 2.0707963267945018 0 0 -1 +1 1.0935246108253915e-16 24.74999942093293 1 0 +2 -0.001004621035990877 1.5124460304883359e-05 0.2179050869057417 0.97596996526563318 0.97596996526563318 -0.2179050869057417 5 +1 1.0935246108253915e-16 24.74999942093293 1 0 +2 -0.001004621035990877 1.5124460304883359e-05 0.2179050869057417 0.97596996526563318 0.97596996526563318 -0.2179050869057417 5 +3 -4.7569415073667187e-10 -3.143462379284756e-09 0.014973213905715767 -0.99988789514891807 0.99988789514891807 0.014973213905715767 5.0000000646226521 5 +7 0 0 8 9 2 7.1054273576010023e-16 -10.000070272011524 0.39269908174402318 -10.000384747357995 0.78539816348848035 -10.000686838277943 1.1780972452252172 -10.000902635616512 1.5707963269760512 -10.000962406906183 1.9634954087177903 -10.000836376450025 2.3561944904640768 -10.000571069536818 2.748893572208158 -10.000244204726117 3.1415926539521806 -9.9999297293796552 + 1.6583229853638504 9 4.7999156393160316 9 +1 0.11716702901338109 -10.000000000696236 1 0 +1 -3.0244256245764118 -10.000000000696236 1 0 +1 -3.0244256245764118 -10.000000000696236 1 0 +3 -4.7569415073667187e-10 -3.143462379284756e-09 0.014973213905715767 -0.99988789514891807 0.99988789514891807 0.014973213905715767 5.0000000646226521 5 +7 0 0 8 9 2 0 -9.9999297293799465 0.39269908175277524 -9.9996152540334684 0.78539816350371439 -9.9993131631126744 1.1780972452588685 -9.9990973657513678 1.570796327005155 -9.9990375944471452 1.963495408765084 -9.9991636249396834 2.3561944905150085 -9.999428931851071 2.7488935722694281 -9.9997557966654007 3.1415926540222032 -10.000070272011868 + 4.7999156389536433 9 7.9415082929758469 9 +8 -5.106609179852228 5.106609179852228 +1 0 0 0.99988789514891796 0.014973213905720937 +8 -5.106609179852228 5.106609179852228 +1 0 0 0.97912329373611606 -0.20326725182217473 +Curves 2246 +2 50.5 5.5 9.5 0 0 1 1 0 -0 -0 1 0 8 +2 50.5 5.5 9.5 0 0 1 1 0 -0 -0 1 0 8 +7 0 0 5 6 2 -38 -32.5 13 -16.199999999999999 -32.5 13 5.5999999999999996 -32.5 13 27.399999999999999 -32.5 13 49.200000000000003 -32.5 13 71 -32.5 13 + 0 6 109 6 +7 0 0 5 9 3 71 -32.5 13 75.712388980399993 -32.5 13 80.4247779608 -31.574724587399999 13 84.8946105096 -29.723259324099999 13 92.867471954300001 -24.367471954300001 13 98.223259324099999 -16.3946105096 13 100.07472458700001 -11.9247779608 13 101 -7.2123889803800001 13 101 -2.5 13 + 31.705691563799999 6 55.511447068999999 3 79.317202574099994 6 +7 0 0 5 6 2 101 -2.5 13 101 -0.5 13 101 1.5 13 101 3.5 13 101 5.5 13 101 7.5 13 + 0 6 10 6 +7 0 0 5 6 2 101 7.5 13 101 12.4776888283 13 99.654424864299997 17.455903910100002 13 96.956647293900005 21.945748933499999 13 93.192846020999994 25.470943655100001 13 88.797802672700001 27.807817643500002 13 + 0 6 25.507102763500001 6 +7 0 0 5 6 2 88.797802672700001 27.807817643500002 13 83.672569027799995 30.532952712 13 78.547335382900002 33.258087780499999 13 73.422101737999995 35.983222848899999 13 68.296868093100002 38.708357917400001 13 63.171634448200003 41.433492985900003 13 + 0 6 29.023430645000001 6 +7 0 0 5 6 2 63.171634448200003 41.433492985900003 13 55.7500134434 45.379638872299999 13 47.845323711900001 48.4193390577 13 39.609065293299999 50.472868920099998 13 31.202585726199999 51.5 13 22.797080048600002 51.5 13 + 31.519741269600001 6 73.710500387699994 6 +7 0 0 5 6 2 22.797080048600002 51.5 13 15.8376640389 51.5 13 8.8782480291599999 51.5 13 1.9188320194399999 51.5 13 -5.04058399028 51.5 13 -12 51.5 13 + 0 6 34.797080048600002 6 +7 0 0 5 9 3 -12 51.5 13 -20.4823001647 51.5 13 -28.9646003294 49.834504257299997 13 -37.0102989174 46.501866783399997 13 -51.361449517799997 36.861449517799997 13 -61.001866783399997 22.5102989174 13 -64.334504257299997 14.4646003294 13 -66 5.9823001646899998 13 -66 -2.5 13 + 0 6 43.123692182900001 3 86.247384365800002 6 +7 0 0 5 6 2 -66 -2.5 13 -66 -2.8999999999999999 13 -66 -3.2999999999999998 13 -66 -3.7000000000000002 13 -66 -4.0999999999999996 13 -66 -4.5 13 + 0 6 2 6 +7 0 0 5 6 2 -66 -4.5 13 -66 -13.296459430100001 13 -62.555579886700002 -22.101126014199998 13 -55.601126014199998 -29.055579886699999 13 -46.796459430100001 -32.5 13 -38 -32.5 13 + 0 6 46.336855176699999 6 +2 -22.5 -12.5 8.5 0 0 1 1 0 -0 -0 1 0 6 +2 -22.5 -12.5 8.5 0 0 1 1 0 -0 -0 1 0 6 +2 -22.5 29.5 8.5 0 0 1 1 0 -0 -0 1 0 6 +2 -22.5 29.5 8.5 0 0 1 1 0 -0 -0 1 0 6 +7 0 0 5 15 5 2.0410958904099998 8.5 5 2.0410958904099998 7.0862833058800003 5 2.3186785141900002 5.6725666117699998 5 2.8741180931799999 4.3316168471100003 5 4.4808543041200002 1.9397584137099999 5 6.8727127375199997 0.333022202765 5 8.21366250218 -0.22241737621900001 5 11.041095890399999 -0.77758262378099996 5 13.868529278600001 -0.22241737621900001 5 15.2094790433 0.333022202765 5 17.601337476699999 1.9397584137099999 5 19.208073687599999 4.3316168471100003 5 19.7635132666 5.6725666117699998 5 20.041095890400001 7.0862833058800003 5 20.041095890400001 8.5 5 + 28.274333882299999 6 35.342917352900002 3 42.411500823499999 3 49.480084294000001 3 56.548667764599998 6 +7 0 0 5 15 5 20.041095890400001 8.5 5 20.041095890400001 9.9137166941199997 5 19.7635132666 11.327433388199999 5 19.208073687599999 12.668383152900001 5 17.601337476699999 15.0602415863 5 15.2094790433 16.666977797200001 5 13.868529278600001 17.222417376199999 5 11.041095890399999 17.777582623800001 5 8.21366250218 17.222417376199999 5 6.8727127375199997 16.666977797200001 5 4.4808543041200002 15.0602415863 5 2.8741180931799999 12.668383152900001 5 2.3186785141900002 11.327433388199999 5 2.0410958904099998 9.9137166941199997 5 2.0410958904099998 8.5 5 + 0 6 7.0685834705800001 3 14.1371669412 3 21.205750411699999 3 28.274333882299999 6 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 3.5 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 3.5 +7 0 0 5 15 5 -49.958904109599999 2.1000000000000001 6 -48.953593483399999 2.1000000000000001 6 -47.948282857099997 2.2973924717199998 6 -46.994717754100002 2.6923724964 6 -45.293839593599998 3.8349426061599998 6 -44.151272080600002 5.5358225109700001 6 -43.756293511700001 6.4893882170200001 6 -43.361511637900001 8.5000100721899994 6 -43.756299650899997 10.5106307219 6 -44.151281131399998 11.464195222000001 6 -45.293853837900002 13.165071638100001 6 -46.994735487 14.3076365544 6 -47.948301796099997 14.7026136675 6 -48.953613025000003 14.9000030696 6 -49.958923651299997 14.9 6 + 30.1592894745 6 35.185842605600001 3 40.212395736799998 3 45.2389488679 3 50.265501999100003 6 +1 -50.958904109599999 2.1000000000000001 6 1 0 0 +7 0 0 5 15 5 -51.958923638999998 14.9 6 -52.964232311700002 14.899996932300001 6 -53.969540381999998 14.7026021601 6 -54.923102628400002 14.307620762199999 6 -56.623975198499998 13.1650497359 6 -57.766538439400001 11.4641719361 6 -58.161515472700003 10.5106078818 6 -58.556295814099997 8.4999899341099994 6 -58.161509337299997 6.4893731911000003 6 -57.766529394300001 5.5358103420699996 6 -56.623960963199998 3.8349360287300001 6 -54.923084906600003 2.6923701926999999 6 -53.969521454899997 2.2973917045599999 6 -52.964212782300002 2.1000000000000001 6 -51.958904109599999 2.1000000000000001 6 + 10.053116020899999 6 15.079659384299999 3 20.106202747699999 3 25.132746111100001 3 30.1592894745 6 +1 -50.958904109599999 14.9 6 1 0 0 +2 28.235903341899999 -16.5 0 0 0 -1 -1 0 -0 0 1 0 8 +1 33.926407280100001 -10.876996805099999 -2.5 0 0 -1 +2 28.235903341899999 -16.5 -4.5 0 0 -1 -1 0 -0 0 1 0 8 +1 28.235903341899999 -8.5 -2.5 0 0 -1 +1 15.358848356199999 -8.5 -4.5 -1 0 0 +1 15.358848356199999 -8.5 0 -1 0 0 +1 2.4817933703700001 -8.5 -2.25 0 0 1 +2 2.4817933703700001 -16.5 0 0 0 1 1 0 -0 -0 1 0 8 +2 2.4817933703700001 -16.5 -4.5 0 0 1 1 0 -0 -0 1 0 8 +1 -5.41758793251 -15.235177865600001 -2.5 0 0 1 +2 -47.7802294293 -13.5 0 0 0 -1 -1 0 -0 0 1 0 8 +1 -39.786480993200001 -13.1837944664 -2.5 0 0 -1 +2 -47.7802294293 -13.5 -4.5 0 0 -1 -1 0 -0 0 1 0 8 +1 -47.7802294293 -5.5 -2.5 0 0 -1 +2 -47.7802294293 30.5 0 0 0 1 1 0 -0 -0 1 0 8 +1 -47.7802294293 22.5 -2.5 0 0 1 +2 -47.7802294293 30.5 -4.5 0 0 1 1 0 -0 -0 1 0 8 +1 -39.786480993200001 30.183794466399998 -2.5 0 0 1 +2 2.4817933703700001 33.5 0 0 0 1 1 0 -0 -0 1 0 8 +1 -5.41758793251 32.235177865600001 -2.5 0 0 1 +2 2.4817933703700001 33.5 -4.5 0 0 1 1 0 -0 -0 1 0 8 +1 2.4817933703700001 25.5 -2.5 0 0 1 +1 36.511075809799998 25.5 -2.25 0 0 1 +1 19.496434590100002 25.5 -4.5 -1 0 0 +1 19.496434590100002 25.5 0 -1 0 0 +2 36.511075809799998 33.5 0 0 0 1 1 0 -0 -0 1 0 8 +2 36.511075809799998 33.5 -4.5 0 0 1 1 0 -0 -0 1 0 8 +1 40.086519692300001 26.343450479200001 -2.5 0 0 1 +2 50.5 5.5 -4.5999999999999996 0 0 1 1 0 -0 -0 1 0 8 +1 3.8354043088299998 -7.0206604951199996 29 0 0 1 +2 0 0 1.8 0 0 1 1 0 -0 -0 1 0 8 +1 43.479339504899997 1.6645956911699999 2.0949999999700002 0 0 1 +2 0 0 1.8 0 0 1 1 0 -0 -0 1 0 8 +1 57.520660495100003 9.3354043088300003 2.0949999999700002 0 0 1 +2 50.5 5.5 -4.5999999999999996 0 0 1 1 0 -0 -0 1 0 8 +1 -3.8354043088299998 7.0206604951199996 29 0 0 1 +2 50.5 5.5 -5 -1.8684409237800001e-15 3.42015816972e-15 1 0 1 -3.42015816972e-15 -1 -6.3903634901053515e-30 -1.8684409237800001e-15 8.4000000000000004 +1 43.303822992500002 1.5687105834499999 -4.7999999999999998 -0.62054458056371298 -0.3390050494208432 -0.70710678118667292 +1 57.696177007499998 9.4312894165499994 -4.7999999999999998 0.62054458056371298 0.3390050494208432 -0.70710678118667292 +2 50.5 5.5 -5 2.9598024531600001e-15 4.8580609417199997e-15 1 0 1 -4.8580609417199997e-15 -1 1.4378900692903634e-29 2.9598024531600001e-15 8.4000000000000004 +2 -22.5 29.5 -4.5999999999999996 0 0 1 1 0 -0 -0 1 0 6 +1 2.87655323163 -5.2654953713400001 28 0 0 1 +2 0 0 1.8 0 0 1 1 0 -0 -0 1 0 6 +1 -28.5 29.5 1.75 0 0 1 +2 0 0 1.8 0 0 1 1 0 -0 -0 1 0 6 +1 -16.5 29.5 1.75 0 0 1 +2 -22.5 29.5 -4.5999999999999996 0 0 1 1 0 -0 -0 1 0 6 +1 -2.87655323163 5.2654953713400001 28 0 0 1 +2 -22.5 29.5 -5 6.6613381477499997e-15 3.8459253727699997e-15 1 1 0 -6.6613381477499997e-15 -2.5619009399032436e-29 1 -3.8459253727699997e-15 6.4000000000000004 +1 -16.300000000000001 29.5 -4.7999999999999998 0.70710678118654757 0 -0.70710678118654757 +1 -28.699999999999999 29.5 -4.7999999999999998 -0.70710678118654757 0 -0.70710678118654757 +2 -22.5 29.5 -5 -0 0 1 1 0 0 0 1 -0 6.4000000000000004 +2 -22.5 -12.5 -4.5999999999999996 0 0 1 1 0 -0 -0 1 0 6 +1 -28.5 -12.5 1.75 0 0 1 +1 -16.5 -12.5 1.75 0 0 1 +2 -22.5 -12.5 -4.5999999999999996 0 0 1 1 0 -0 -0 1 0 6 +2 -22.5 -12.5 -5 8.5843008341299994e-15 4.9561483973900002e-15 1 1 0 -8.5843008341299994e-15 -4.254506882178704e-29 1 -4.9561483973900002e-15 6.4000000000000004 +1 -16.300000000000001 -12.5 -4.7999999999999998 0.70710678118654757 -3.1401849173679908e-15 -0.70710678118654757 +1 -28.699999999999999 -12.5 -4.7999999999999998 -0.70710678118654757 -3.1401849173679908e-15 -0.70710678118654757 +2 -22.5 -12.5 -5 -1.47911419729e-29 -1.7763568393999999e-14 1 0 1 1.7763568393999999e-14 -1 2.6274346206097322e-43 -1.47911419729e-29 6.4000000000000004 +1 -39.799999999999997 -12.5 -2.5 0 0 1 +2 -22.5 -12.5 -4.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +1 -5.2000000000000002 -12.5 -2.5 0 0 1 +2 -22.5 -12.5 -4.7999999999999998 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 -12.5 -4.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 -12.5 0 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 -12.5 -4.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 -12.5 -4.7999999999999998 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 -12.5 -5 0 0 1 1 0 -0 -0 1 0 17.100000000000001 +2 -22.5 -12.5 -5 0 0 1 1 0 -0 -0 1 0 17.100000000000001 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 17 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 17 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 7.7999999999999998 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 7.7999999999999998 +1 -39.700000000000003 -12.5 -4.9000000000000004 -0.70710678118654757 3.7682219008375893e-14 0.70710678118654757 +1 -5.2999999999999998 -12.5 -4.9000000000000004 0.70710678118654757 4.3962588843071872e-14 0.70710678118654757 +1 -5.2000000000000002 29.5 -2.5 0 0 1 +2 -22.5 29.5 -4.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +1 -39.799999999999997 29.5 -2.5 0 0 1 +2 -22.5 29.5 -4.7999999999999998 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 29.5 -4.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 29.5 0 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 29.5 -4.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 29.5 -4.7999999999999998 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 29.5 -5 0 0 1 1 0 -0 -0 1 0 17.100000000000001 +2 -22.5 29.5 -5 0 0 1 1 0 -0 -0 1 0 17.100000000000001 +1 -5.2999999999999998 29.5 -4.9000000000000004 0.70710678118654757 1.2560739669491962e-14 0.70710678118654757 +1 -39.700000000000003 29.5 -4.9000000000000004 -0.70710678118654757 1.2560739669491962e-14 0.70710678118654757 +1 73.799999999999997 5.5 -2.5 0 0 1 +2 50.5 5.5 0 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +2 50.5 5.5 -4.5 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +1 27.199999999999999 5.5 -2.5 0 0 1 +2 50.5 5.5 -4.7999999999999998 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +2 50.5 5.5 -4.5 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +2 50.5 5.5 0 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +2 50.5 5.5 -4.7999999999999998 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +2 50.5 5.5 -5 0 0 1 1 0 -0 -0 1 0 23.100000000000001 +2 50.5 5.5 -5 0 0 1 1 0 -0 -0 1 0 23.100000000000001 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 23 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 23 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 10 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 10 +2 4.5562353437399997e-16 8.881784197e-16 13 0 0 1 1 0 -0 -0 1 0 9.8000000000000007 +2 4.5562353437399997e-16 8.881784197e-16 13 0 0 1 1 0 -0 -0 1 0 9.8000000000000007 +1 73.700000000000003 5.5 -4.9000000000000004 0.70710678118654757 -5.6523328512563833e-14 0.70710678118654757 +1 27.300000000000001 5.5 -4.9000000000000004 -0.70710678118654757 -5.6523328512563833e-14 0.70710678118654757 +1 -50.958904109599999 2.1000000000000001 -4.0999999999999996 -1 -2.22044604925e-16 0 +1 -51.958904109599999 2.1000000000000001 0.94999999999999996 0 0 -1 +1 -49.958904109599999 2.1000000000000001 0.94999999999999996 0 0 -1 +1 -51.958923638999998 14.9 -2.25 0 0 1 +2 -51.958904109599999 8.5 -4.0999999999999996 0 0 1 1 0 -0 -0 1 0 6.4000000000000004 +1 -50.9589236451 14.9 -4.0999999999999996 1 0 0 +1 -49.958923651299997 14.9 0.94999999999999996 0 0 -1 +2 -49.958904109599999 8.5 -4.0999999999999996 0 0 1 1 0 -0 -0 1 0 6.4000000000000004 +1 -51.958923638999998 15.1 -4.2999999999999998 0 -0.70710678118654757 0.70710678118654757 +1 -11.2067401539 15.300000000000001 -4.5 1 0 0 +1 -49.958923651299997 15.1 -4.2999999999999998 0 -0.70710678118654757 0.70710678118654757 +1 -49.958904109599999 1.8999999999999999 -4.2999999999999998 1.2560739669491962e-14 -0.70710678118654757 -0.70710678118654757 +2 -49.958904109599999 8.5 -4.5 -6.7799206850700001e-21 4.4409192180100003e-15 1 0 1 -4.4409192180100003e-15 -1 -3.0109080066910889e-35 -6.7799206850700001e-21 6.7999999999999998 +1 -11.2067401539 1.7 -4.5 -1 -2.2263035843300001e-16 0 +1 -51.958904109599999 1.8999999999999999 -4.2999999999999998 0 0.70710678118654757 0.70710678118654757 +2 -51.958904109599999 8.5 -4.5 1.3551270599100001e-20 -8.8817841969800004e-15 1 0 1 8.8817841969800004e-15 -1 -1.203594610560861e-34 1.3551270599100001e-20 6.7999999999999998 +1 20.041095890400001 8.5 -2.25 0 0 1 +1 2.0410958904099998 8.5 -2.25 0 0 1 +2 11.041095890399999 8.5 -4.0999999999999996 0 0 1 1 0 -0 -0 1 0 9 +2 11.041095890399999 8.5 -4.0999999999999996 0 0 1 1 0 -0 -0 1 0 9 +2 11.041095890399999 8.5 -4.5 -6.7137098316700001e-30 1.7763568393999999e-14 1 0 1 -1.7763568393999999e-14 -1 -1.1925944377234027e-43 -6.7137098316700001e-30 9.4000000000000004 +1 1.8410958904100001 8.5 -4.2999999999999998 -0.70710678118654757 -1.2560739669491962e-14 -0.70710678118654757 +1 20.2410958904 8.5 -4.2999999999999998 0.70710678118654757 -1.2560739669491962e-14 -0.70710678118654757 +2 11.041095890399999 8.5 -4.5 -3.33066907388e-15 -1.92296268638e-15 1 1 0 3.33066907388e-15 -6.4047523497510717e-30 1 1.92296268638e-15 9.4000000000000004 +1 -52.084386624700002 -5.5 -4.5 -1 0 0 +1 -52.084386624700002 -5.5 0 -1 0 0 +1 -56.388543820000002 -5.5 -2.25 0 0 1 +2 -56.388543820000002 -2.5 -4.5 0 0 1 1 0 -0 -0 1 0 3 +2 -56.388543820000002 -2.5 0 0 0 1 1 0 -0 -0 1 0 3 +1 -58.944050079999997 -4.0714285714300003 -2.25 0 0 1 +1 -56.388543820000002 22.5 -2.25 0 0 -1 +1 -52.084386624700002 22.5 0 -1 0 0 +1 -52.084386624700002 22.5 -4.5 -1 0 0 +2 -38.5 8.5 -4.5 0 0 1 1 0 -0 -0 1 0 24 +2 -38.5 8.5 0 0 0 1 1 0 -0 -0 1 0 24 +1 -58.944050079999997 21.071428571399998 -2.25 0 0 1 +2 -56.388543820000002 19.5 -4.5 0 0 1 1 0 -0 -0 1 0 3 +2 -56.388543820000002 19.5 0 0 0 -1 -1 0 -0 0 1 0 3 +1 71 -32.5 6.9000000000000004 0 0 1 +1 -38 -32.5 6.9000000000000004 0 0 1 +1 16.5 -32.5 0.80000000000000004 1 0 0 +1 101 -2.5 6.5 0 0 1 +7 0 0 5 9 3 71 -32.5 0.80000000000000004 75.712388980399993 -32.5 0.80000000000000004 80.4247779608 -31.574724587399999 0.80000000000000004 84.8946105096 -29.723259324099999 0.80000000000000004 92.867471954300001 -24.367471954300001 0.80000000000000004 98.223259324099999 -16.3946105096 0.80000000000000004 100.07472458700001 -11.9247779608 0.80000000000000004 101 -7.2123889803800001 0.80000000000000004 101 -2.5 0.80000000000000004 + 109 6 132.56194490199999 3 156.12388980399999 6 +1 101 7.5 6.9000000000000004 0 0 1 +1 101 2.5 0.80000000000000004 2.8421709430400002e-15 1 0 +1 88.797802672700001 27.807817643500002 6.5 0 0 1 +7 0 0 5 6 2 101 7.5 0.80000000000000004 101 12.4776888283 0.80000000000000004 99.654424864299997 17.455903910100002 0.80000000000000004 96.956647293900005 21.945748933499999 0.80000000000000004 93.192846020999994 25.470943655100001 0.80000000000000004 88.797802672700001 27.807817643500002 0.80000000000000004 + 166.12388980399999 6 191.01233394499999 6 +1 63.171634448200003 41.433492985900003 6.9000000000000004 -3.21491467328e-13 -6.04543737475e-13 1 +1 75.984718560499999 34.620655314700002 0.80000000000100002 -0.88294759285826285 0.46947156278713975 0 +1 22.797080048600002 51.5 6.5 0 0 1 +7 0 0 5 6 2 63.171634448200003 41.433492985900003 0.80000000000000004 55.7500134434 45.379638872299999 0.80000000000000004 47.845323711900001 48.4193390577 0.80000000000000004 39.609065293299999 50.472868920099998 0.80000000000000004 31.202585726199999 51.5 0.80000000000000004 22.797080048600002 51.5 0.80000000000000004 + 220.03576459000001 6 262.06329297799999 6 +1 -12 51.5 6.9000000000000004 0 0 1 +1 5.3985400242999999 51.5 0.80000000000000004 -1 0 0 +1 -66 -2.5 6.5 0 0 1 +7 0 0 5 9 3 -12 51.5 0.80000000000000004 -20.4823001647 51.5 0.80000000000000004 -28.9646003294 49.834504257299997 0.80000000000000004 -37.0102989174 46.501866783399997 0.80000000000000004 -51.361449517799997 36.861449517799997 0.80000000000000004 -61.001866783399997 22.5102989174 0.80000000000000004 -64.334504257299997 14.4646003294 0.80000000000000004 -66 5.9823001646899998 0.80000000000000004 -66 -2.5 0.80000000000000004 + 296.86037302699998 6 339.27187385000002 3 381.68337467399999 6 +1 -66 -4.5 6.9000000000000004 0 0 1 +1 -66 -3.5 0.80000000000000004 0 -1 0 +7 0 0 5 6 2 -66 -4.5 0.80000000000000004 -66 -13.296459430100001 0.80000000000000004 -62.555579886700002 -22.101126014199998 0.80000000000000004 -55.601126014199998 -29.055579886699999 0.80000000000000004 -46.796459430100001 -32.5 0.80000000000000004 -38 -32.5 0.80000000000000004 + 383.68337467399999 6 427.66567182400001 6 +7 0 0 5 15 5 -65.200000000000003 -4.5 0 -65.200000000000003 -7.3961324085399998 0 -64.815683064799998 -10.292565314899999 0 -64.044701936199999 -13.1202251169 0 -61.767762986000001 -18.502156188099999 0 -58.162061913499997 -23.101311403499999 0 -56.061385811000001 -25.147230317799998 0 -51.7602007208 -28.339419764199999 0 -46.831052239900004 -30.3981516644 0 -44.496038364599997 -31.080147596500002 0 -41.768787502400002 -31.555521804400001 0 -39.019917637299997 -31.684083704100001 0 -38.678137464199999 -31.6947756669 0 -38.338923938100002 -31.700003949900001 0 -38.000003569900002 -31.7000003729 0 + 103.76581805399999 6 124.547002021 3 145.33505857899999 3 162.64698145599999 3 165.07828899200001 6 +1 -65.200000000000003 -3.5 0 0 -1 0 +7 0 0 5 15 5 -12 50.700000000000003 0 -17.395146434200001 50.700000000000003 0 -22.790272716 50.016080707500002 0 -28.0703760954 48.647586647799997 0 -38.167235070799997 44.603325626500002 0 -46.935695196499999 38.167852959100003 0 -50.887142559099999 34.407592682999997 0 -58.071200711000003 25.572774405099999 0 -62.709492242700001 15.153781134600001 0 -64.358373071900004 9.4059114346899992 0 -65.191238028499995 3.4851502435200001 0 -65.199969163700004 -2.4372544982000002 0 -65.199989732399999 -2.4581681825900001 0 -65.200000056600004 -2.4790835333599999 0 -65.2000001567 -2.5000012219399999 0 + 206.34732287700001 6 244.784677386 3 283.22234807799998 3 325.26716929499997 3 325.41616118000002 6 +1 5.3985400242999999 50.700000000000003 0 -1 0 0 +7 0 0 5 9 3 62.796057198 40.727134911599997 0 55.583984463199997 44.5618620065 0 47.911829203899998 47.532368133200002 0 39.920285127100001 49.564612909099999 0 31.602084407900001 50.640506765600001 0 23.274783774399999 50.698883892399998 0 23.115519849199998 50.699624028199999 0 22.956266601100001 50.699990847400002 0 22.797018728600001 50.699991800799999 0 + 120.58639119999999 6 178.61598027900001 3 179.74754108900001 6 +1 75.609141310200002 33.914297240400003 0 -0.88294759285826285 0.46947156278713975 0 +7 0 0 5 12 4 100.2 7.5 0 100.2 9.6809699653300001 0 99.932382303899999 11.8619313793 0 99.396510492800004 13.9991336012 0 97.692003087800003 18.4059546282 0 94.895791927999994 22.228794922799999 0 93.118707907000001 24.048197016300001 0 91.017193152399997 25.661658038100001 0 88.725037743800002 26.937935644900001 0 88.624460949500005 26.993092693200001 0 88.523529253199996 27.047590689700002 0 88.422255048899999 27.101440138200001 0 + 62.094959105999997 6 77.796852188800003 3 95.859399766099997 3 96.6845153915 6 +1 100.2 2.5 0 0 1 0 +7 0 0 5 15 5 71 -31.699999999999999 0 73.999932498999996 -31.699999999999999 0 76.999844077000006 -31.3147433629 0 79.934138087199997 -30.543852039600001 0 85.538504313100006 -28.266498915 0 90.385589047600007 -24.647042713800001 0 92.562629609400005 -22.5336263714 0 96.364010810600007 -17.7458581679 0 98.8181968098 -12.1443684266 0 99.678127191599998 -9.1664285505599992 0 100.153771088 -6.00175461166 0 100.19845569100001 -2.8289666115399998 0 100.19948233300001 -2.71933652926 0 100.199990855 -2.60969449139 0 100.199991877 -2.50002261243 0 + 243.59478752199999 6 265.100062267 3 286.60708227999999 3 308.56748184100002 3 309.35350848100001 6 +1 16.5 -31.699999999999999 0 1 0 0 +1 -38 -32.100000000000001 0.40000000000000002 0 -0.70710678118654757 0.70710678118654757 +1 71 -32.100000000000001 0.40000000000000002 0 -0.70710678118654757 0.70710678118654757 +7 0 0 1 2 2 100.199991877 -2.50002261243 -1.1102230246299999e-16 100.999991178 -2.5000008830899998 0.80000000000000004 + 0 2 1.1313708498999999 2 +1 100.59999999999999 7.5 0.40000000000000002 0.70710678118654757 -2.3551386880284931e-15 0.70710678118654757 +7 0 0 1 2 2 88.422255048899999 27.101440138200001 0 88.7978013237 27.8078143111 0.80000000000000004 + 0 2 1.1313708498999999 2 +1 62.983845823099998 41.080313948700002 0.40000000000000002 0.33196652562098372 0.62433823034196934 0.70710678118696524 +7 0 0 1 2 2 22.797018728600001 50.699991800799999 0 22.797080812699999 51.499991602800002 0.80000000000000004 + 0 2 1.1313708498999999 2 +1 -12 51.100000000000001 0.40000000000000002 0 0.70710678118654757 0.70710678118654757 +7 0 0 1 2 2 -65.2000001567 -2.5000012219399999 0 -66.0000001704 -2.5000000367799999 0.80000000000000004 + 0 2 1.1313708498999999 2 +1 -65.599999999999994 -4.5 0.40000000000000002 -0.70710678118654757 0 0.70710678118654757 +1 -38 -32.5 0.5 0 0 1 +1 71 -32.5 0.5 0 0 1 +1 16.5 -32.5 1 1 0 0 +1 101 -2.5 0.5 0 0 1 +7 0 0 5 9 3 71 -32.5 1 75.712388980399993 -32.5 1 80.4247779608 -31.574724587399999 1 84.8946105096 -29.723259324099999 1 92.867471954300001 -24.367471954300001 1 98.223259324099999 -16.3946105096 1 100.07472458700001 -11.9247779608 1 101 -7.2123889803800001 1 101 -2.5 1 + 109 6 132.56194490199999 3 156.12388980399999 6 +1 101 7.5 0.5 2.84217094304e-14 0 1 +1 101 2.5 1 4.2632564145599998e-15 1 0 +1 88.797802672700001 27.807817643500002 0.5 0 0 1 +7 0 0 5 6 2 101 7.5 1 101 12.4776888283 1 99.654424864299997 17.455903910100002 1 96.956647293900005 21.945748933499999 1 93.192846020999994 25.470943655100001 1 88.797802672700001 27.807817643500002 1 + 166.12388980399999 6 191.01233394499999 6 +1 63.171634448200003 41.433492985900003 0.5 -5.85487214266e-12 -1.1006306976900001e-11 1 +1 75.984718560399998 34.620655314700002 1 -0.88294759285848323 0.46947156278672519 0 +1 22.797080048600002 51.5 0.5 0 0 1 +7 0 0 5 6 2 63.171634448200003 41.433492985900003 1 55.7500134434 45.379638872299999 1 47.845323711900001 48.4193390577 1 39.609065293299999 50.472868920099998 1 31.202585726199999 51.5 1 22.797080048600002 51.5 1 + 220.03576459000001 6 262.06329297799999 6 +1 -12 51.5 0.5 0 0 1 +1 5.3985400242999999 51.5 1 -1 0 0 +1 -66 -2.5 0.5 0 0 1 +7 0 0 5 9 3 -12 51.5 1 -20.4823001647 51.5 1 -28.9646003294 49.834504257299997 1 -37.0102989174 46.501866783399997 1 -51.361449517799997 36.861449517799997 1 -61.001866783399997 22.5102989174 1 -64.334504257299997 14.4646003294 1 -66 5.9823001646899998 1 -66 -2.5 1 + 296.86037302699998 6 339.27187385000002 3 381.68337467399999 6 +1 -66 -4.5 0.5 0 0 1 +1 -66 -3.5 1 0 -1 0 +7 0 0 5 6 2 -66 -4.5 1 -66 -13.296459430100001 1 -62.555579886700002 -22.101126014199998 1 -55.601126014199998 -29.055579886699999 1 -46.796459430100001 -32.5 1 -38 -32.5 1 + 383.68337467399999 6 427.66567182400001 6 +1 11.300000000000001 1.7922171683299999e-15 0.10000000000000001 0.70710678118654757 1.2672889130791892e-14 0.70710678118654757 +2 8.7090243936400008e-28 -1.7763568394e-15 9.7699626167000005e-14 2.7679330007800001e-30 1.7763568393999999e-14 1 0 1 -1.7763568393999999e-14 -1 4.9168367169365182e-44 2.7679330007800001e-30 11.199999999999999 +1 -11.300000000000001 8.1628337162099993e-15 0.10000000000000001 -0.70710678118654757 1.3071535693791637e-14 0.70710678118654757 +2 1.7763568394e-15 1.7763568394e-15 0.20000000000000001 2.7679330007800001e-30 1.7763568393999999e-14 1 0 1 -1.7763568393999999e-14 -1 4.9168367169365182e-44 2.7679330007800001e-30 11.4 +2 1.00974195868e-28 -2.3075552236599999e-15 -8.8817841969999996e-15 -1.38379325944e-14 -7.9893341084e-15 1 1 0 1.38379325944e-14 -1.1055586686618002e-28 1 7.9893341084e-15 11.199999999999999 +2 -2.6645352590999998e-15 -4.0839120630600003e-15 0.20000000000000001 -1.38379325944e-14 -7.9893341084e-15 1 1 0 1.38379325944e-14 -1.1055586686618002e-28 1 7.9893341084e-15 11.4 +1 11.4 0 1.5 0 0 1 +1 -11.4 1.3960973510299999e-15 1.5 0 0 1 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 11.4 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 11.4 +1 11.300000000000001 -1.7607747618600001e-15 2.8999999999999999 0.70710678118654757 1.2450557742492034e-14 -0.70710678118654757 +1 -11.300000000000001 3.1446256449e-15 2.8999999999999999 -0.70710678118654757 1.2757517201991837e-14 -0.70710678118654757 +2 8.7090243936400008e-28 -1.7763568394e-15 3 -2.7679330007800001e-30 -1.7763568393999999e-14 1 0 1 1.7763568393999999e-14 -1 4.9168367169365182e-44 -2.7679330007800001e-30 11.199999999999999 +2 7.5730646901200004e-29 -2.3075552236599999e-15 3 1.38379325944e-14 7.9893341084e-15 1 1 0 -1.38379325944e-14 -1.1055586686618002e-28 1 -7.9893341084e-15 11.199999999999999 +2 0 0 4.5999999999999996 0 0 1 1 0 -0 -0 1 0 10 +2 0 0 4.5999999999999996 0 0 1 1 0 -0 -0 1 0 10 +2 4.5562353437399997e-16 0 20.399999999999999 0 0 1 1 0 -0 -0 1 0 9.8000000000000007 +2 4.5562353437399997e-16 0 20.399999999999999 0 0 1 1 0 -0 -0 1 0 9.8000000000000007 +2 6.5077460204099998e-16 -3.5523141753600001e-16 3 0 0 1 1 0 -0 -0 1 0 8.1999999999999993 +2 6.5077460204099998e-16 -3.5523141753600001e-16 3 0 0 1 1 0 -0 -0 1 0 8.1999999999999993 +2 4.4408920985e-16 0 2.7999999999999998 1.2025318677099999e-31 -2.2204460492499999e-15 1 0 1 2.2204460492499999e-15 -1 -2.6701571347538926e-46 1.2025318677099999e-31 8 +1 -8.0999999999999996 -6.8629993849700002e-15 2.8999999999999999 -0.70710678118654757 -2.1498287745486247e-15 0.70710678118654757 +1 8.0999999999999996 2.1662888285400001e-16 2.8999999999999999 0.70710678118654757 -1.5317975206690201e-15 0.70710678118654757 +2 -8.881784197e-16 -6.5019172940700005e-16 2.7999999999999998 0 -0 1 1 0 0 -0 1 0 8 +2 -5.2841545998399997e-16 0 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 9.0999999999999996 +2 -5.2841545998399997e-16 0 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 9.0999999999999996 +2 6.5077460204099998e-16 -3.5523141753600001e-16 0 0 0 1 1 0 -0 -0 1 0 8.1999999999999993 +2 6.5077460204099998e-16 -3.5523141753600001e-16 0 0 0 1 1 0 -0 -0 1 0 8.1999999999999993 +2 0 0 0.20000000000000001 0 0 1 1 0 -0 -0 1 0 8 +1 -8 9.7971743931799991e-16 1.5 0 0 1 +2 0 0 22.875500200200001 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 22.875500200200001 0 0 1 1 0 -0 -0 1 0 8 +1 8 -1.9594348786400001e-15 1.5 0 0 1 +1 -3.8354043088299998 7.0206604951199996 29 0 0 1 +2 0 0 0.20000000000000001 0 0 1 1 0 -0 -0 1 0 8 +1 3.8354043088299998 -7.0206604951199996 29 0 0 1 +1 8.0999999999999996 -1.3988810110299999e-14 0.10000000000000001 0.70710678118654757 -1.5700924586789954e-15 -0.70710678118654757 +1 -8.0999999999999996 1.55431223448e-15 0.10000000000000001 -0.70710678118654757 1.5700924586789954e-15 -0.70710678118654757 +1 9.3000000000000007 -2.46662593732e-15 0.10000000000000001 0.70710678118654757 -1.7441679269288843e-14 0.70710678118654757 +2 1.3322676295499999e-15 2.2204460492499999e-15 -2.1316282072799998e-14 6.9235132639099993e-30 -2.4424906541799999e-14 1 0 1 2.4424906541799999e-14 -1 -1.691061644119144e-43 6.9235132639099993e-30 9.1999999999999993 +1 -9.3000000000000007 -9.9793715242500008e-15 0.10000000000000001 -0.70710678118654757 -1.8012895758488476e-14 0.70710678118654757 +2 8.881784197e-16 -2.6645352590999998e-15 0.20000000000000001 6.9235132639099993e-30 -2.4424906541799999e-14 1 0 1 2.4424906541799999e-14 -1 -1.691061644119144e-43 6.9235132639099993e-30 9.4000000000000004 +2 2.6645352590999998e-15 -1.84083345573e-17 -4.9737991503200002e-14 -7.1765944466400001e-15 -4.1434087356300003e-15 1 1 0 7.1765944466400001e-15 -2.9735564122281926e-29 1 4.1434087356300003e-15 9.1999999999999993 +2 1.7763568394e-15 -1.79476517396e-15 0.20000000000000001 -7.1765944466400001e-15 -4.1434087356300003e-15 1 1 0 7.1765944466400001e-15 -2.9735564122281926e-29 1 4.1434087356300003e-15 9.4000000000000004 +1 9.4000000000000004 0 1.5 0 0 1 +1 -9.4000000000000004 1.1511679911999999e-15 1.5 0 0 1 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 9.4000000000000004 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 9.4000000000000004 +1 9.3000000000000007 2.4141445344000001e-15 2.8999999999999999 0.70710678118654757 -1.707057971038908e-14 -0.70710678118654757 +1 -9.3000000000000007 -1.71931222104e-15 2.8999999999999999 -0.70710678118654757 -1.7384858774988878e-14 -0.70710678118654757 +2 1.3322676295499999e-15 2.2204460492499999e-15 3 -6.9235132639099993e-30 2.4424906541799999e-14 1 0 1 -2.4424906541799999e-14 -1 -1.691061644119144e-43 -6.9235132639099993e-30 9.1999999999999993 +2 2.6645352590999998e-15 -1.84083345573e-17 3 7.1765944466400001e-15 4.1434087356300003e-15 1 1 0 -7.1765944466400001e-15 -2.9735564122281926e-29 1 -4.1434087356300003e-15 9.1999999999999993 +2 0 0 4.5999999999999996 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 4.5999999999999996 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 19.399999999999999 0 0 1 1 0 -0 -0 1 0 7.7999999999999998 +2 0 0 19.399999999999999 0 0 1 1 0 -0 -0 1 0 7.7999999999999998 +2 5.6917383248299999e-16 -3.0773183653900002e-16 3 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +2 5.6917383248299999e-16 -3.0773183653900002e-16 3 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +2 -2.22044604925e-16 3.7865323450600002e-29 2.7999999999999998 1.4314008360899999e-30 -6.6613381477499997e-15 1 0 1 6.6613381477499997e-15 -1 -9.5350449941675611e-45 1.4314008360899999e-30 6 +1 -6.0999999999999996 1.47906547081e-15 2.8999999999999999 -0.70710678118654757 -4.4616077101771458e-15 0.70710678118654757 +1 6.0999999999999996 6.4464562720200003e-16 2.8999999999999999 0.70710678118654757 -4.5583329445670837e-15 0.70710678118654757 +2 1.3322676295499999e-15 -2.6559919212999999e-16 2.7999999999999998 -9.9920072216299998e-15 -5.7688880591500001e-15 1 1 0 9.9920072216299998e-15 -5.7642771147801877e-29 1 5.7688880591500001e-15 6 +2 -2.2977359924999999e-16 8.881784197e-16 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 6.9000000000000004 +2 -2.2977359924999999e-16 8.881784197e-16 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 6.9000000000000004 +2 5.6917383248299999e-16 -3.0773183653900002e-16 0 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +2 5.6917383248299999e-16 -3.0773183653900002e-16 0 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +2 0 0 0.20000000000000001 0 0 1 1 0 -0 -0 1 0 6 +1 -6 7.3478807948799999e-16 1.5 0 0 1 +2 0 0 21.9255437353 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 21.9255437353 0 0 1 1 0 -0 -0 1 0 6 +1 6 -1.4695761589800001e-15 1.5 0 0 1 +1 -2.87655323163 5.2654953713400001 28 0 0 1 +2 0 0 0.20000000000000001 0 0 1 1 0 -0 -0 1 0 6 +1 2.87655323163 -5.2654953713400001 28 0 0 1 +1 -6.0999999999999996 -1.22987870927e-15 0.10000000000000001 -0.70710678118654757 -4.7756262019069448e-15 -0.70710678118654757 +1 6.0999999999999996 -6.6613381477499995e-16 0.10000000000000001 0.70710678118654757 -4.7102773760469866e-15 -0.70710678118654757 +2 0 0 13 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 13 0 0 1 1 0 -0 -0 1 0 8 +2 -2.84586916241e-16 3.9130700983199998e-16 0 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +2 -2.84586916241e-16 3.9130700983199998e-16 0 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +1 3.4039213240900001 -6.2308361894199997 0.90000000000000002 0.3390050494208432 -0.62054458056371298 0.70710678118667292 +1 -3.4039213240900001 6.2308361894199997 0.90000000000000002 -0.3390050494208432 0.62054458056371298 0.70710678118667292 +2 -2.84586916241e-16 0 58 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +2 -2.84586916241e-16 0 58 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +1 3.4039213240900001 -6.2308361894199997 57.100000000000001 0.3390050494208432 -0.62054458056371298 -0.70710678118667292 +2 2.6645352590999998e-15 -1.3322676295499999e-15 56.200000000000003 -1.5377165720499999e-15 9.3686294527999993e-16 1 1 0 1.5377165720499999e-15 1.4406296766966282e-30 1 -9.3686294527999993e-16 8 +1 -3.4039213240900001 6.2308361894199997 57.100000000000001 -0.3390050494208432 0.62054458056371298 -0.70710678118667292 +2 -1.7763568394e-15 2.22044604925e-16 56.200000000000003 2.45644256797e-16 1.3419606910400001e-16 1 1 0 -2.45644256797e-16 -3.2964493660130939e-32 1 -1.3419606910400001e-16 8 +2 0 0 20.399999999999999 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 20.399999999999999 0 0 1 1 0 -0 -0 1 0 8 +1 4.7463128321800001 -8.6880673627099991 20.300000000000001 0.3390050494208432 -0.62054458056371298 -0.70710678118667292 +2 3.9968028886399999e-15 1.7763568394e-15 20.199999999999999 -1.87245477905e-14 1.140804184e-14 1 1 0 1.87245477905e-14 2.1361042462910357e-28 1 -1.140804184e-14 10 +1 -4.7463128321800001 8.6880673627099991 20.300000000000001 -0.3390050494208432 0.62054458056371298 -0.70710678118667292 +2 2.6645352590999998e-15 3.8857805861899998e-16 20.199999999999999 -2.0083033176799999e-14 -1.09714110281e-14 1 1 0 2.0083033176799999e-14 -2.2033921167364167e-28 1 1.09714110281e-14 10 +2 0 0 13.199999999999999 0 0 1 1 0 -0 -0 1 0 10 +1 -10 1.2246467991500001e-15 6 0 0 1 +1 4.7942553860399997 -8.7758256189000008 16.699999999999999 0 0 1 +1 -4.7942553860399997 8.7758256189000008 16.699999999999999 0 0 1 +2 0 0 13.199999999999999 0 0 1 1 0 -0 -0 1 0 10 +1 10 0 6 0 0 1 +1 4.7463128321800001 -8.6880673627099991 13.1 0.3390050494208432 -0.62054458056371298 0.70710678118667292 +1 -4.7463128321800001 8.6880673627099991 13.1 -0.3390050494208432 0.62054458056371298 0.70710678118667292 +1 -3.6915766472499998 6.7573857265599999 24.899999999999999 0 0 1 +2 0 0 23.5 0 0 1 1 0 -0 -0 1 0 7.7000000000000002 +1 3.6915766472499998 -6.7573857265599999 24.899999999999999 0 0 1 +2 0 0 26.300000000000001 0 0 1 1 0 -0 -0 1 0 7.7000000000000002 +2 0 0 23.5 0 0 1 1 0 -0 -0 1 0 7.7000000000000002 +2 0 0 26.300000000000001 0 0 1 1 0 -0 -0 1 0 7.7000000000000002 +2 0 0 26.9244997998 0 0 1 1 0 -0 -0 1 0 8 +1 3.8354043088299998 -7.0206604951199996 29 0 0 1 +2 0 0 -7 0 0 1 1 0 -0 -0 1 0 8 +1 -3.8354043088299998 7.0206604951199996 29 0 0 1 +1 -3.8354043088299998 7.0206604951199996 -2 0 0 1 +1 3.8354043088299998 -7.0206604951199996 -2 0 0 1 +2 0 0 2.2679491924300001 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 26.9244997998 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 -7 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 2.2679491924300001 0 0 1 1 0 -0 -0 1 0 8 +2 -3.8354043088299998 7.0206604951199996 26.300000000000001 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.29999999999999999 +2 3.8354043088299998 -7.0206604951199996 26.300000000000001 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -2.6645352590999998e-15 1.3322676295499999e-15 26.534187424900001 0 0 1 1 0 -0 -0 1 0 7.8125 +2 -8.881784197e-16 -1.56819002228e-15 26.534187424900001 0 -0 1 1 0 0 -0 1 0 7.8125 +2 3.5956915395300002 -6.5818692141800001 26.9244997998 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.5 +2 -3.5956915395300002 6.5818692141800001 26.9244997998 -0.87758256189037243 -0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 -0 0 1 0.5 +2 3.8354043088299998 -7.0206604951199996 23.5 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -3.8354043088299998 7.0206604951199996 23.5 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -8.881784197e-16 -4.4408920985e-16 23.2658125751 0 0 1 1 0 -0 -0 1 0 7.8125 +2 -8.881784197e-16 1.09634523682e-15 23.2658125751 0 -0 1 1 0 0 -0 1 0 7.8125 +2 3.5956915395300002 -6.5818692141800001 22.875500200200001 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.5 +2 -3.5956915395300002 6.5818692141800001 22.875500200200001 -0.87758256189037243 -0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 -0 0 1 0.5 +1 2.7327255700399999 -5.0022206027799996 23.899999999999999 0 0 1 +2 0 0 25.300000000000001 0 0 1 1 0 -0 -0 1 0 5.7000000000000002 +1 -2.7327255700399999 5.0022206027799996 23.899999999999999 0 0 1 +2 0 0 22.5 0 0 1 1 0 -0 -0 1 0 5.7000000000000002 +2 0 0 25.300000000000001 0 0 1 1 0 -0 -0 1 0 5.7000000000000002 +2 0 0 22.5 0 0 1 1 0 -0 -0 1 0 5.7000000000000002 +2 0 0 19.399999999999999 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 19.399999999999999 0 0 1 1 0 -0 -0 1 0 6 +2 2.87655323163 -5.2654953713400001 22.5 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -2.87655323163 5.2654953713400001 22.5 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.29999999999999999 +2 0 1.7763568394e-15 22.253804458000001 0 0 1 1 0 -0 -0 1 0 5.8285714285700001 +2 -4.4408920985e-16 -3.1918911957999998e-16 22.253804458000001 0 -0 1 1 0 0 -0 1 0 5.8285714285700001 +2 2.6847830161799999 -4.9144623465899997 21.9255437353 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.40000000000000002 +2 -2.6847830161799999 4.9144623465899997 21.9255437353 -0.87758256189037243 -0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 -0 0 1 0.40000000000000002 +2 -2.87655323163 5.2654953713400001 25.300000000000001 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.29999999999999999 +2 2.87655323163 -5.2654953713400001 25.300000000000001 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 0 8.881784197e-16 25.546195542 0 0 1 1 0 -0 -0 1 0 5.8285714285700001 +2 8.881784197e-16 1.4294121442000001e-15 25.546195542 0 -0 1 1 0 0 -0 1 0 5.8285714285700001 +2 2.6847830161799999 -4.9144623465899997 25.874456264700001 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.40000000000000002 +2 4.7184478546599997e-16 1.3322676295499999e-15 25.874456264700001 0 0 -1 -1 0 -0 0 1 0 6 +2 -2.6847830161799999 4.9144623465899997 25.874456264700001 -0.87758256189037243 -0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 -0 0 1 0.40000000000000002 +2 1.1102230246299999e-16 -8.881784197e-16 25.874456264700001 -0 0 -1 -1 0 0 0 1 0 6 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 6 +2 -1.5503856378e-16 1.16278922835e-16 0 0 0 1 1 0 -0 -0 1 0 4.2000000000000002 +2 -1.5503856378e-16 1.16278922835e-16 0 0 0 1 1 0 -0 -0 1 0 4.2000000000000002 +1 2.4450702468799999 -4.4756710656400003 0.90000000000000002 0.3390050494208432 -0.62054458056371298 0.70710678118667292 +1 -2.4450702468799999 4.4756710656400003 0.90000000000000002 -0.3390050494208432 0.62054458056371298 0.70710678118667292 +2 0 -8.881784197e-16 56 0 0 1 1 0 -0 -0 1 0 4.2000000000000002 +2 0 -8.881784197e-16 56 0 0 1 1 0 -0 -0 1 0 4.2000000000000002 +1 2.87655323163 -5.2654953713400001 28 0 0 1 +2 0 0 -4.5 0 0 1 1 0 -0 -0 1 0 6 +1 -2.87655323163 5.2654953713400001 28 0 0 1 +1 2.87655323163 -5.2654953713400001 -0.75 0 0 1 +1 -2.87655323163 5.2654953713400001 -0.75 0 0 1 +2 0 0 2.2679491924300001 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 54.200000000000003 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 -4.5 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 2.2679491924300001 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 54.200000000000003 0 0 1 1 0 -0 -0 1 0 6 +1 -2.4450702468799999 4.4756710656400003 55.100000000000001 -0.3390050494208432 0.62054458056371298 -0.70710678118667292 +1 2.4450702468799999 -4.4756710656400003 55.100000000000001 0.3390050494208432 -0.62054458056371298 -0.70710678118667292 +1 3.7874617549699998 -6.9329022389299997 19.300000000000001 0.3390050494208432 -0.62054458056371298 -0.70710678118667292 +2 2.6645352590999998e-15 -1.3322676295499999e-15 19.199999999999999 -2.0493787731500001e-14 1.24859617715e-14 1 1 0 2.0493787731500001e-14 2.5588465016874472e-28 1 -1.24859617715e-14 8 +1 -3.7874617549699998 6.9329022389299997 19.300000000000001 -0.3390050494208432 0.62054458056371298 -0.70710678118667292 +2 -1.7763568394e-15 2.2204460492599998e-16 19.199999999999999 1.9181567784200001e-14 1.04789382396e-14 1 1 0 -1.9181567784200001e-14 -2.0100246414933284e-28 1 -1.04789382396e-14 8 +2 0 0 12.199999999999999 0 0 1 1 0 -0 -0 1 0 8 +1 -8 9.7971743931799991e-16 6 0 0 1 +1 3.8354043088299998 -7.0206604951199996 15.699999999999999 0 0 1 +1 -3.8354043088299998 7.0206604951199996 15.699999999999999 0 0 1 +2 0 0 12.199999999999999 0 0 1 1 0 -0 -0 1 0 8 +1 8 0 6 0 0 1 +1 3.7874617549699998 -6.9329022389299997 12.1 0.3390050494208432 -0.62054458056371298 0.70710678118667292 +1 -3.7874617549699998 6.9329022389299997 12.1 -0.3390050494208432 0.62054458056371298 0.70710678118667292 +1 23 0 6 0 0 1 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 23 +1 -23 2.8166876380400002e-15 6 0 0 1 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 23 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +1 -21.399999999999999 2.62074415018e-15 1.4100000000099999 0 0 1 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +1 10.2597065261 -18.7802668245 1.55 0 0 1 +1 21.399999999999999 -5.2414883003499996e-15 1.4100000000099999 0 0 1 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +1 -10.2597065261 18.7802668245 1.55 0 0 1 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 11.5 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 11.5 +1 11.5 0 3.1000000000000001 0 0 1 +1 -11.5 1.4083438190200001e-15 3.1000000000000001 0 0 1 +2 0 0 4.5999999999999996 0 0 1 1 0 -0 -0 1 0 11.5 +2 0 0 4.5999999999999996 0 0 1 1 0 -0 -0 1 0 11.5 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +2 -9.9045007336499992e-16 3.5527136788e-15 0 0 0 1 1 0 -0 -0 1 0 9.4000000000000004 +2 -9.9045007336499992e-16 3.5527136788e-15 0 0 0 1 1 0 -0 -0 1 0 9.4000000000000004 +2 4.5066000628799996 -8.2492760817700006 0.59999999999999998 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.59999999999999998 +2 -4.4408920984999998e-15 2.6645352590999998e-15 0.59999999999999998 0 0 1 1 0 -0 -0 1 0 8.8000000000000007 +2 -4.5066000628799996 8.2492760817700006 0.59999999999999998 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.59999999999999998 +2 -4.4408920984999998e-15 4.8572257327400001e-16 0.59999999999999998 0 -0 1 1 0 0 -0 1 0 8.8000000000000007 +1 -4.2189447397200004 7.7227265446400004 1.55 0 0 1 +1 4.2189447397200004 -7.7227265446400004 1.55 0 0 1 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 8.8000000000000007 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 8.8000000000000007 +2 4.3627724013 -7.9860013132000001 2.7999999999999998 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -4.3627724013 7.9860013132000001 2.7999999999999998 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.29999999999999999 +1 17 0 6 0 0 1 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 17 +1 -17 2.0818995585500001e-15 6 0 0 1 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 17 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 15.4 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 15.4 +1 -15.4 1.88595607069e-15 1.4100000000099999 0 0 1 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 15.4 +1 7.3831532944999996 -13.5147714531 1.55 0 0 1 +1 15.4 -3.7719121413700003e-15 1.4100000000099999 0 0 1 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 15.4 +1 -7.3831532944999996 13.5147714531 1.55 0 0 1 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 9.5 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 9.5 +2 0 0 4.5999999999999996 0 0 -1 -1 0 -0 0 1 0 9.5 +1 -9.5 -5.3822619527700003e-15 3.1000000000000001 0 0 -1 +1 9.5 0 3.1000000000000001 0 0 -1 +2 0 0 4.5999999999999996 0 0 -1 -1 0 -0 0 1 0 9.5 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 15.4 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 15.4 +2 -40 -22 20.5 0 0 1 1 0 -0 -0 1 0 7.4000000000000004 +2 -40 -22 20.5 0 0 1 1 0 -0 -0 1 0 7.4000000000000004 +2 -6.3307413543499999e-16 -1.7763568394e-15 0 0 0 1 1 0 -0 -0 1 0 7.2000000000000002 +2 -6.3307413543499999e-16 -1.7763568394e-15 0 0 0 1 1 0 -0 -0 1 0 7.2000000000000002 +2 3.4518638779500002 -6.3185944456099996 0.59999999999999998 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.59999999999999998 +2 -8.881784197e-16 8.881784197e-16 0.59999999999999998 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +2 -3.4518638779500002 6.3185944456099996 0.59999999999999998 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.59999999999999998 +2 -5.3290705181999996e-15 -8.3266726846900003e-16 0.59999999999999998 0 -0 1 1 0 0 -0 1 0 6.5999999999999996 +1 -3.1642085547900001 5.7920449084800003 1.55 0 0 1 +1 3.1642085547900001 -5.7920449084800003 1.55 0 0 1 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +2 3.3080362163700001 -6.05531967704 2.7999999999999998 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -3.3080362163700001 6.05531967704 2.7999999999999998 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -40 20 20.5 -0 0 1 1 0 0 0 1 -0 7.4000000000000004 +2 -40 20 20.5 0 -0 1 1 0 0 -0 1 0 7.4000000000000004 +2 33 -4 8 0 0 1 1 0 -0 -0 1 0 10.589384154299999 +2 33 -4 8 0 0 1 1 0 -0 -0 1 0 10.589384154299999 +2 33 -4 8 0 0 1 1 0 -0 -0 1 0 8.8000000000000007 +2 33 -4 8 0 0 1 1 0 -0 -0 1 0 8.8000000000000007 +7 0 0 5 6 2 -77.420310216800004 -35.920310216799997 52 -80.863544493899994 -32.477075939700001 52 -83.630701301599998 -28.3577641933 52 -85.543882073600003 -23.738937226099999 52 -86.5 -18.8694686131 52 -86.5 -14 52 + 24.756193660499999 6 49.5123873211 6 +7 0 0 5 6 2 -77.365502634999999 -35.974981103600001 52 -77.376477798099998 -35.9640606185 52 -77.3874461435 -35.953133281600003 52 -77.398407665500002 -35.9421990986 52 -77.409362358500005 -35.931258075000002 52 -77.420310216800004 -35.920310216799997 52 + 24.677480660699999 6 24.756193660499999 6 +7 0 0 5 6 2 -55.5 -45 52 -60.353986003400003 -45 52 -65.207972006899993 -44.049952414499998 52 -69.813699537000005 -42.148921308600002 52 -73.924655812099999 -39.3986856868 52 -77.365502634999999 -35.974981103600001 52 + 0 6 24.677480660699999 6 +7 0 0 5 6 2 53.5 -45 52 31.699999999999999 -45 52 9.9000000000000004 -45 52 -11.9 -45 52 -33.700000000000003 -45 52 -55.5 -45 52 + 0 6 109 6 +7 0 0 5 9 3 86.5 -12 52 86.5 -17.183627878399999 52 85.482197046099998 -22.367255756799999 52 83.445585256499996 -27.284071560600001 52 77.554219149700003 -36.054219149700003 52 68.784071560599997 -41.945585256500003 52 63.867255756799999 -43.982197046099998 52 58.683627878400003 -45 52 53.5 -45 52 + 0 6 26.353367445100002 3 52.706734890200003 6 +1 86.5 -6.9992591740399996 52 0 -1 0 +7 0 0 5 6 2 72.706232063000002 20.958205170700001 52 77.674548047100004 18.3165126335 52 81.929282422 14.331497071999999 52 84.978940591300002 9.2560050281099997 52 86.500015347200005 3.6284438144700002 52 86.5 -1.99851834808 52 + 0 6 28.834167653600002 6 +7 0 0 5 6 2 47.082969087899997 34.5823357644 52 52.207621682899997 31.857509645699999 52 57.332274278 29.132683526899999 52 62.456926873 26.407857408200002 52 67.581579468000001 23.683031289399999 52 72.706232063000002 20.958205170700001 52 + 0 6 29.0201402464 6 +7 0 0 5 6 2 23.0000015518 43.222180868400002 52 28.032290530600001 42.200987762300002 52 32.990839903000001 40.816879762500001 52 37.840922780699998 39.076902099599998 52 42.549049793400002 36.9930634157 52 47.082969087899997 34.5823357644 52 + 17.9076813233 6 43.710801788600001 6 +7 0 0 5 6 2 5.2999999999999998 45 52 8.8637397867299992 45 52 12.4276487353 44.821590245800003 52 15.9795444001 44.464822848399997 52 19.507531426700002 43.930901378999998 52 23.0000015518 43.222180868400002 52 + 0 6 17.9076813233 6 +7 0 0 5 6 2 -29.5 45 52 -22.539999999999999 45 52 -15.58 45 52 -8.6199999999999992 45 52 -1.6599999999999999 45 52 5.2999999999999998 45 52 + 0 6 34.799999999999997 6 +7 0 0 5 9 3 -86.5 -12 52 -86.5 -3.04646093727 52 -84.741976716099998 5.90707812546 52 -81.224192715800001 14.3997599683 52 -71.048196713199999 29.548196713199999 52 -55.899759968300003 39.724192715800001 52 -47.4070781255 43.241976716099998 52 -38.453539062700003 45 52 -29.5 45 52 + 0 6 45.519452859700003 3 91.038905719400006 6 +1 -86.5 -13 52 0 1 0 +1 -84.5 -13 52 0 -1 0 +2 -29.5 -12 52 0 0 1 1 0 -0 -0 1 0 55 +1 -12.1 43 52 1 0 0 +2 5.2999999999999998 -44 52 0 0 1 1 0 -0 -0 1 0 87 +1 58.955657449900002 26.004375281800002 52 0.8829475928588979 -0.46947156278594571 0 +2 60.5 -1.9984474343 52 0 0 1 1 0 -0 -0 1 0 24 +1 84.5 -6.9992564465899996 52 0 -1 0 +2 53.5 -12 52 0 0 1 1 0 -0 -0 1 0 31 +1 -1 -43 52 1 0 0 +2 -55.5 -14 52 0 0 1 1 0 -0 -0 1 0 29 +2 33 -4 20.5 0 0 1 1 0 -0 -0 1 0 23 +2 33 -4 20.5 0 0 1 1 0 -0 -0 1 0 23 +1 28.7810552603 3.72272654464 7.75 0 0 1 +1 37.2189447397 -11.7227265446 7.75 0 0 1 +2 33 -4 19.899999999999999 0 0 1 1 0 -0 -0 1 0 8.8000000000000007 +2 33 -4 19.899999999999999 0 0 1 1 0 -0 -0 1 0 8.8000000000000007 +2 28.493399937100001 4.2492760817699997 19.899999999999999 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.59999999999999998 +2 37.506600062899999 -12.2492760818 19.899999999999999 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.59999999999999998 +2 -32.600000000000001 20 19.899999999999999 0 -1 0 0 -0 -1 1 0 0 0.59999999999999998 +2 -47.399999999999999 20 19.899999999999999 -1.66533453694e-15 1 -0 1 1.66533453694e-15 0 0 0 -1 0.59999999999999998 +2 -40 20 19.899999999999999 -0 0 1 1 0 0 0 1 -0 6.7999999999999998 +2 -40 20 19.899999999999999 0 -0 1 1 0 0 -0 1 0 6.7999999999999998 +2 -40 -22 20.5 0 0 1 1 0 -0 -0 1 0 17 +1 -57 -1 20.5 0 -1 0 +1 -23 -1 20.5 0 1 0 +2 -40 20 20.5 0 0 1 1 0 -0 -0 1 0 17 +2 -32.600000000000001 -22 19.899999999999999 0 -1 0 0 -0 -1 1 0 0 0.59999999999999998 +2 -47.399999999999999 -22 19.899999999999999 -7.7715611723799997e-16 1 -0 1 7.7715611723799997e-16 0 0 0 -1 0.59999999999999998 +2 -40 -22 19.899999999999999 -0 0 1 1 0 0 0 1 -0 6.7999999999999998 +2 -40 -22 19.899999999999999 0 -0 1 1 0 0 -0 1 0 6.7999999999999998 +2 44.266500157199999 -24.6231902044 20.300000000000001 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.5 +2 33 -4 20.300000000000001 0 -0 1 1 0 0 -0 1 0 24 +2 21.733499842800001 16.6231902044 20.300000000000001 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.5 +2 33 -4 19.800000000000001 0 -0 1 1 0 0 -0 1 0 23.5 +2 33 -4 20.300000000000001 0 0 1 1 0 -0 -0 1 0 24 +2 33 -4 19.800000000000001 0 0 1 1 0 -0 -0 1 0 23.5 +1 44.026787387900001 -24.184398923500002 20.149999999999999 0 0 1 +1 21.973212612099999 16.184398923500002 20.149999999999999 0 0 1 +2 33 -4 20.300000000000001 0 0 1 1 0 -0 -0 1 0 23 +2 33 -4 20.300000000000001 0 0 1 1 0 -0 -0 1 0 23 +2 21.733499842800001 16.6231902044 20.300000000000001 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.5 +2 44.266500157199999 -24.6231902044 20.300000000000001 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.5 +2 -22.5 20 20.300000000000001 -0 1 0 0 0 1 1 0 -0 0.5 +1 -22 -1 20.300000000000001 0 1 0 +2 -22.5 -22 20.300000000000001 -0 1 0 0 0 1 1 0 -0 0.5 +1 -22.5 -1 19.800000000000001 0 1 0 +2 -40 -22 20.300000000000001 0 -0 1 1 0 0 -0 1 0 18 +2 -57.5 -22 20.300000000000001 -4.4408920985e-16 1 0 1 4.4408920985e-16 0 0 0 -1 0.5 +2 -40 -22 19.800000000000001 0 -0 1 1 0 0 -0 1 0 17.5 +1 -58 -1 20.300000000000001 0 -1 0 +2 -57.5 20 20.300000000000001 0 -1 0 0 -0 -1 1 0 0 0.5 +1 -57.5 -1 19.800000000000001 0 -1 0 +2 -40 20 20.300000000000001 -0 0 1 1 0 0 0 1 -0 18 +2 -40 20 19.800000000000001 -0 0 1 1 0 0 0 1 -0 17.5 +1 -57 20 20.149999999999999 0 0 1 +1 -23 20 20.149999999999999 0 0 1 +2 -40 20 20.300000000000001 0 0 1 1 0 -0 -0 1 0 17 +1 -23 -1 20.300000000000001 0 1 0 +1 -23 -22 20.399999999999999 0 0 -1 +1 -57 -22 20.149999999999999 0 0 1 +2 -40 -22 20.300000000000001 0 0 1 1 0 -0 -0 1 0 17 +1 -57 -1 20.300000000000001 0 -1 0 +2 -22.5 -22 20.300000000000001 -1.3877787807800001e-15 -1 0 -1 1.3877787807800001e-15 0 -0 0 -1 0.5 +2 -57.5 -22 20.300000000000001 -1.3322676295499999e-15 1 0 1 1.3322676295499999e-15 0 0 0 -1 0.5 +2 -57.5 20 20.300000000000001 0 -1 0 0 -0 -1 1 0 0 0.5 +2 -22.5 20 20.300000000000001 -1.3322676295499999e-15 -1 0 -1 1.3322676295499999e-15 0 -0 0 -1 0.5 +1 -55.5 -45 41.5 0 0 -1 +1 -77.420310216800004 -35.920310216799997 41.5 0 0 -1 +7 0 0 4 5 2 -55.5 -45 50.999999993499998 -61.586749425800001 -45 50.999999993499998 -67.679800951900006 -43.403984354099997 50.999999993499998 -73.116328422400002 -40.224292011199999 50.999999993499998 -77.420310216800004 -35.920310216799997 50.999999993499998 + 0 5 34.4318543551 5 +2 -6.4589041095899997 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 9.5 +1 -15.958904109600001 -1 32.899999999999999 0 0 1 +2 -6.4589041095899997 -1 33.5 0 0 1 1 0 -0 -0 1 0 9.5 +1 3.0410958904099998 -1 32.899999999999999 0 0 1 +2 -6.4589041095899997 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 9.5 +2 -6.4589041095899997 -1 33.5 0 0 1 1 0 -0 -0 1 0 9.5 +2 -6.4589041095899997 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 8 +2 -6.4589041095899997 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 8 +1 -22 20 26.899999999999999 0 0 -1 +1 -22 -22 26.899999999999999 0 0 -1 +1 -22 -1.00000000006 33.5 -1.69176841848e-16 -1 0 +2 11.159670332199999 -26 33.5 0 0 1 1 0 -0 -0 1 0 7 +2 33 -4 33.5 0 0 1 1 0 -0 -0 1 0 24 +2 33 -4 33.5 0 0 1 1 0 -0 -0 1 0 24 +2 19.6958653043 24 33.5 0 0 1 1 0 -0 -0 1 0 7 +1 2.1868953314300001 17 33.5 1 0 0 +2 -15.3220746415 24 33.5 0 0 1 1 0 -0 -0 1 0 7 +2 -40 20 33.5 0 0 1 1 0 -0 -0 1 0 18 +2 -40 -22 33.5 0 0 1 1 0 -0 -0 1 0 18 +2 -15.3220746415 -26 33.5 0 0 1 1 0 -0 -0 1 0 7 +1 -2.0812021546700001 -19 33.5 -1 0 0 +1 -58 -22 26.899999999999999 0 0 -1 +1 -58 20 26.899999999999999 0 0 -1 +1 -58 -1.00000000025 33.5 0 -1 0 +1 -55.5 -43 45.399999999999999 0 0 -1 +1 53.5 -43 45.399999999999999 0 0 -1 +1 -1 -43 38.799999999999997 1 0 0 +1 -84.5 -14 33.5 0 0 1 +2 -55.5 -14 38.799999999999997 0 0 1 1 0 -0 -0 1 0 29 +1 84.5 -12 45 0 0 1 +2 53.5 -12 38.799999999999997 0 0 1 1 0 -0 -0 1 0 31 +1 -84.5 -12 45.399999999999999 0 0 -1 +1 -84.5 -13 38.799999999999997 0 -1 0 +1 84.5 -6.9992564465899996 38.799999999999997 0 -1 0 +1 84.5 -1.99851289317 45.399999999999999 0 0 -1 +1 71.767288937399996 19.1923099849 45 0 0 1 +2 60.5 -1.9984474343 38.799999999999997 0 0 1 1 0 -0 -0 1 0 24 +1 58.955657449900002 26.004375281800002 38.799999999999997 0.8829475928588979 -0.46947156278594571 0 +1 46.144025962400001 32.816440578700004 45.399999999999999 0 0 -1 +1 5.2999999999999998 43 45 0 0 1 +2 5.2999999999999998 -44 38.799999999999997 0 0 1 1 0 -0 -0 1 0 87 +1 -12.1 43 38.799999999999997 1 0 0 +1 -29.5 43 45.399999999999999 0 0 -1 +2 -29.5 -12 38.799999999999997 0 0 1 1 0 -0 -0 1 0 55 +2 5.2999999999999998 42.200000000000003 38.799999999999997 1 8.3266726846900003e-16 -0 -8.3266726846900003e-16 1 0 0 0 1 0.80000000000000004 +2 45.768448712100003 32.110082504399998 38.799999999999997 0.8829475928588979 -0.46947156278594571 0 0.46947156278594571 0.8829475928588979 0 -0 0 1 0.80000000000000004 +2 5.2999999999999998 -44 38 0 0 1 1 0 -0 -0 1 0 86.200000000000003 +2 71.391711687200001 18.485951910699999 38.799999999999997 0.8829475928588979 -0.46947156278594571 0 0.46947156278594571 0.8829475928588979 0 -0 0 1 0.80000000000000004 +1 55.619498734399997 26.872186295799999 38 0.8829475928588979 -0.46947156278594571 0 +2 83.699999999900001 -1.99851071121 38.799999999999997 -2.7274528199907653e-06 -0.99999999999628053 0 -0.99999999999628053 2.7274528199907653e-06 0 -0 0 -1 0.80000000000000004 +2 60.5 -1.9984474343 38 0 -0 1 1 0 0 -0 1 0 23.199999999999999 +2 83.700000000000003 -12 38.799999999999997 0 -1 0 0 -0 -1 1 0 0 0.80000000000000004 +1 83.700000000000003 1.42108547152e-14 38 0 -1 0 +2 53.5 -42.200000000000003 38.799999999999997 -1 1.36838683111e-15 -0 -1.36838683111e-15 -1 0 0 0 1 0.80000000000000004 +2 53.5 -12 38 -0 0 1 1 0 0 0 1 -0 30.199999999999999 +2 -55.5 -42.200000000000003 38.799999999999997 1 0 0 -0 0 1 0 -1 0 0.80000000000000004 +1 0 -42.200000000000003 38 1 0 0 +2 -83.700000000000003 -14 38.799999999999997 -1.65384947117e-15 1 0 1 1.65384947117e-15 0 0 0 -1 0.80000000000000004 +2 -55.5 -14 38 0 0 1 1 0 -0 -0 1 0 28.199999999999999 +2 -83.700000000000003 -12 38.799999999999997 0 -1 0 0 -0 -1 1 0 0 0.80000000000000004 +1 -83.700000000000003 1.42108547152e-14 38 0 -1 0 +2 -29.5 42.200000000000003 38.799999999999997 1 5.8135314744000002e-16 0 -5.8135314744000002e-16 1 0 0 -0 1 0.80000000000000004 +2 -29.5 -12 38 -0 0 1 1 0 0 0 1 -0 54.200000000000003 +1 0 42.200000000000003 38 1 0 0 +1 -22.231893741899999 22.879999999999999 29.149999999999999 0 0 -1 +1 -15.3220746415 17 29.149999999999999 0 0 -1 +2 -15.3220746415 24 37.600000000000001 -0 0 -1 -1 0 0 0 1 0 7 +1 -15.3220746415 -19 29.149999999999999 0 0 -1 +1 -22.231893741899999 -24.879999999999999 29.149999999999999 0 0 -1 +2 -15.3220746415 -26 37.600000000000001 0 0 -1 -1 0 -0 0 1 0 7 +1 44.506212926499998 -25.0619814854 29.899999999999999 0 0 1 +1 21.493787073499998 17.0619814854 29.899999999999999 0 0 1 +1 22.700024751800001 17.677419354800001 29.899999999999999 0 0 1 +2 33 -4 37.600000000000001 0 0 1 1 0 -0 -0 1 0 24 +1 19.6958653043 17 35.549999999999997 0 0 -1 +1 2.1868953314300001 17 37.600000000000001 1 0 0 +2 19.6958653043 24 37.600000000000001 0 0 -1 -1 0 -0 0 1 0 7 +1 11.159670332199999 -19 35.549999999999997 0 0 -1 +1 -2.0812021546700001 -19 37.600000000000001 -1 0 0 +1 16.091357676499999 -21.032258064499999 29.899999999999999 0 0 1 +2 33 -4 37.600000000000001 0 0 1 1 0 -0 -0 1 0 24 +2 11.159670332199999 -26 37.600000000000001 0 0 -1 -1 0 -0 0 1 0 7 +1 -57.985594235400001 -22.719999999999999 45.149999999999999 0 0 1 +2 -40 -22 33.5 0 0 1 1 0 -0 -0 1 0 18 +2 -40 -22 37.600000000000001 0 0 1 1 0 -0 -0 1 0 18 +2 -64.979991993599995 -23 33.5 0 0 -1 -1 0 -0 0 1 0 7 +1 -64.979991993599995 -16 29.149999999999999 0 0 -1 +2 -64.979991993599995 -23 37.600000000000001 0 0 -1 -1 0 -0 0 1 0 7 +2 -40 20 33.5 0 0 1 1 0 -0 -0 1 0 18 +1 -57.985594235400001 20.719999999999999 45.149999999999999 0 0 1 +2 -40 20 37.600000000000001 0 0 1 1 0 -0 -0 1 0 18 +1 -64.979991993599995 14 29.149999999999999 0 0 -1 +2 -64.979991993599995 21 33.5 0 0 -1 -1 0 -0 0 1 0 7 +2 -64.979991993599995 21 37.600000000000001 0 0 -1 -1 0 -0 0 1 0 7 +1 -69.434267906800002 -16 33.5 -1 0 0 +1 -73.888543819999995 -16 35.549999999999997 0 0 -1 +1 -69.434267906800002 -16 37.600000000000001 -1 0 0 +1 -77.295885499999997 -14.095238095199999 35.75 0 0 -1 +2 -73.888543819999995 -12 33.5 -0 0 -1 -1 0 0 0 1 0 4 +2 -73.888543819999995 -12 37.600000000000001 -0 0 -1 -1 0 0 0 1 0 4 +1 -73.888543819999995 14 35.549999999999997 0 0 -1 +1 -69.434267906800002 14 33.5 1 0 0 +1 -69.434267906800002 14 37.600000000000001 1 0 0 +1 -77.295885499999997 12.095238095199999 45 0 0 1 +2 -56 -0.99999999994099997 33.5 0 0 1 1 0 -0 -0 1 0 25 +2 -56 -0.99999999994099997 37.600000000000001 0 0 1 1 0 -0 -0 1 0 25 +2 -73.888543819999995 10 33.5 0 0 -1 -1 0 -0 0 1 0 4 +2 -73.888543819999995 10 37.600000000000001 0 0 -1 -1 0 -0 0 1 0 4 +2 -64.979991993599995 -23 38 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +1 -69.434267906800002 -16.399999999999999 38 -1 0 0 +2 -73.888543819999995 -12 38 0 0 1 1 0 -0 -0 1 0 4.4000000000000004 +2 -56 -0.99999999994099997 38 0 0 1 1 0 -0 -0 1 0 25.399999999999999 +2 -73.888543819999995 10 38 0 0 1 1 0 -0 -0 1 0 4.4000000000000004 +1 -69.434267906800002 14.4 38 1 0 0 +2 -64.979991993599995 21 38 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +2 -40 20 38 0 0 1 1 0 -0 -0 1 0 18.399999999999999 +2 -15.3220746415 24 38 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +1 2.1868953314300001 17.399999999999999 38 1 0 0 +2 19.6958653043 24 38 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +2 33 -4 38 0 0 1 1 0 -0 -0 1 0 24.399999999999999 +2 33 -4 38 0 0 1 1 0 -0 -0 1 0 24.399999999999999 +2 11.159670332199999 -26 38 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +1 -2.0812021546700001 -19.399999999999999 38 -1 0 0 +2 -15.3220746415 -26 38 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +2 -40 -22 38 0 0 1 1 0 -0 -0 1 0 18.399999999999999 +1 -22.034470338999999 -24.911999999999999 37.799999999999997 0.69799713466457269 -0.11313708498993073 0.70710678118656711 +1 -58.185434171300003 -22.728000000000002 37.799999999999997 -0.70654086930588689 -0.028284271247495472 0.70710678118688675 +1 -15.3220746415 -19.199999999999999 37.799999999999997 -9.4205547520939732e-15 0.70710678118654757 -0.70710678118654757 +1 11.159670332199999 -19.199999999999999 37.799999999999997 0 -0.70710678118654757 0.70710678118654757 +1 15.9504523238 -21.174193548400002 37.799999999999997 0.49817565198284453 0.50181771568084343 -0.70710678118677939 +1 22.614191624699998 17.858064516100001 37.799999999999997 0.30346593100379843 -0.63867709268457573 -0.70710678118653036 +1 19.6958653043 17.199999999999999 37.799999999999997 0 -0.70710678118654757 -0.70710678118654757 +1 -15.3220746415 17.199999999999999 37.799999999999997 0 0.70710678118654757 0.70710678118654757 +1 -22.034470338999999 22.911999999999999 37.799999999999997 -0.69799713466457269 -0.11313708498993073 -0.70710678118656711 +1 -58.185434171300003 20.728000000000002 37.799999999999997 -0.70654086930588689 0.028284271247495472 0.70710678118688675 +1 -64.979991993599995 14.199999999999999 37.799999999999997 0 -0.70710678118654757 -0.70710678118654757 +1 -73.888543819999995 14.199999999999999 37.799999999999997 0 0.70710678118654757 0.70710678118654757 +1 -77.466252584000003 12.199999999999999 37.799999999999997 -0.60233860193778832 0.37038926633386982 0.70710678118675141 +1 -77.466252584000003 -14.199999999999999 37.799999999999997 -0.6023386019356215 -0.37038926633776725 0.70710678118655568 +1 -73.888543819999995 -16.199999999999999 37.799999999999997 2.5121479338883926e-14 -0.70710678118654757 0.70710678118654757 +1 -64.979991993599995 -16.199999999999999 37.799999999999997 0 -0.70710678118654757 0.70710678118654757 +2 -68.458904109599999 -1 33.5 0 0 1 1 0 -0 -0 1 0 7.5 +2 -68.458904109599999 -1 33.5 0 0 1 1 0 -0 -0 1 0 7.5 +2 -68.458904109599999 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 7.5 +1 -75.958904109599999 -1 32.899999999999999 0 0 1 +1 -60.958904109599999 -1 32.899999999999999 0 0 1 +2 -68.458904109599999 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 7.5 +2 -68.458904109599999 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 6 +2 -68.458904109599999 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 6 +1 5.2999999999999998 45 41.5 0 0 -1 +1 23.0000015518 43.222180868400002 41.5 0 0 -1 +7 0 0 3 4 2 5.2999999999999998 45 50.999999993499998 11.2395859398 45 50.999999993499998 17.179129001100002 44.403399781899999 50.999999993499998 23.0000015518 43.222180868400002 50.999999993499998 + 0 4 25.199528972900001 4 +1 -86.5 -12 41.5 0 0 -1 +1 -29.5 45 41.5 0 0 -1 +7 0 0 5 12 4 -86.5 -12 50.999999993499998 -86.5 -1.14593754481 50.999999993499998 -83.916432636400003 9.7081249113499997 50.999999993599999 -78.7435536391 19.7407710785 50.999999993599999 -67.727479097200003 32.340321766899997 50.999999993499998 -53.339827832300003 40.203659332199997 50.999999993599999 -48.252184600699998 42.239456674700001 50.999999993499998 -41.391055897599998 44.072566488 50.999999993499998 -34.374910612599997 44.8260247459 50.999999993499998 -32.749487840199997 44.9421098069 50.999999993499998 -31.124743920099998 45 50.999999993499998 -29.5 45 50.999999993499998 + 2.36494886716e-12 6 76.749811654799998 3 115.12646151200001 3 126.615135948 6 +1 -12.1983481148 -45 26 0 0 1 +2 -12.1983481148 -55 7 0 -0 1 1 0 0 -0 1 0 10 +1 -19.269415926699999 -47.928932188099999 26 0 0 1 +2 -12.1983481148 -55 23.499999994500001 0 -0 1 1 0 0 -0 1 0 10 +1 20.650825942600001 -45 7 -1 0 0 +1 53.499751589699997 -45 15.2499999973 0 0 1 +1 20.650825942600001 -45 23.499999994500001 -1 0 -1.0815229852e-16 +1 53.499751589699997 -45 51.4999999968 0 0 1 +1 -0.99999999999900002 -45 50.999999993499998 -1 0 -1.3037481390099999e-16 +1 -24.340483738500001 -53 15.2499999973 0 0 1 +1 -21.804949832599998 -50.464466094099997 7 0.70710678118654757 0.70710678118654757 0 +1 -21.804949832599998 -50.464466094099997 23.499999994500001 0.70710678118654757 0.70710678118654757 0 +1 -21.928932188099999 47.928932188099999 26 0 0 1 +2 -14.8578643763 55 7 0 0 1 1 0 -0 -0 1 0 10 +1 -14.8578643763 45 26 0 0 1 +2 -14.8578643763 55 23.499999994500001 0 0 1 1 0 -0 -0 1 0 10 +1 -12.1 45 50.999999993499998 1 0 2.0417894705799999e-16 +1 5.2999999999999998 45 15.2499999973 0 0 1 +1 -4.7789321881299998 45 7 1 0 0 +1 -4.7789321881299998 45 23.499999994500001 1 0 1.7624454716500001e-16 +1 -24.464466094100001 50.464466094099997 7 -0.70710678118654757 0.70710678118654757 0 +1 -27 53 15.2499999973 0 0 1 +1 -24.464466094100001 50.464466094099997 23.499999994500001 -0.70710678118654757 0.70710678118654757 0 +1 -68.326309529599996 34.750457374500002 23.499999994500001 0.50000000000018996 0.86602540378432902 0 +1 -57.789931182099998 53 15.2499999973 0 0 1 +1 -68.326309529599996 34.750457374500002 7 0.50000000000018996 0.86602540378432902 0 +1 -78.862687876999999 16.500914749 15.2499999973 0 0 1 +7 0 0 4 5 2 -78.862687876999999 16.500914749 7 -82.5869740638 10.050262138800001 7 -85.188155349599995 2.9491496505499999 7 -86.4932857923 -4.50021638696 7 -86.499977001199994 -11.948795860200001 7 + 0 5 42.135545458199999 5 +1 -86.499977001199994 -11.948795860200001 25 0 0 1 +7 0 0 4 5 2 -78.862687876999999 16.500914749 23.499999994500001 -82.586974064700001 10.050262137300001 23.499999994500001 -85.188155348699993 2.94914965216 23.4999999946 -86.4932857923 -4.5002163852899999 23.499999994500001 -86.499977001199994 -11.948795860200001 23.499999994500001 + 0 5 42.135545467599997 5 +1 -86.5 -13 50.999999993499998 0 1 0 +1 -86.5 -14 51.4999999968 0 0 1 +1 -86.5 -12.974397935300001 23.499999994500001 0 1 0 +1 -86.5 -12.9743979301 7 0 1 0 +1 -86.5 -14 15.2499999973 0 0 1 +1 -42.394965591099997 53 23.499999994500001 1 0 0 +1 -42.394965591099997 53 7 1 0 0 +1 23 43.222181183300002 25 0 0 1 +7 0 0 3 4 2 23 43.222181183300002 7 17.179127945400001 44.403399888300001 7 11.2395854121 45 7 5.2999999999999998 45 7 + 0 4 25.199526734100001 4 +7 0 0 3 4 2 23 43.222181183300002 23.499999994500001 17.179127945200001 44.403399888300001 23.499999994500001 11.2395854123 45 23.499999994500001 5.2999999999999998 45 23.499999994500001 + 0 4 25.199526734799999 4 +1 -62.458904109599999 -1 20.5 0 0 1 +1 -74.458904109599999 -1 20.5 0 0 1 +2 -68.458904109599999 -1 7 0 0 1 1 0 -0 -0 1 0 6 +2 -68.458904109599999 -1 7 0 0 1 1 0 -0 -0 1 0 6 +1 -14.458904109600001 -1 25 0 0 1 +1 1.5410958904100001 -1 25 0 0 1 +2 -6.4589041095899997 -1 7 0 0 1 1 0 -0 -0 1 0 8 +2 -6.4589041095899997 -1 7 0 0 1 1 0 -0 -0 1 0 8 +1 47.082969087899997 34.5823357644 51.4999999968 2.8421709246399999e-14 5.6843418492799998e-14 1 +1 72.706232063000002 20.958205170700001 51.4999999968 2.8421709246399999e-14 5.3290704836999999e-14 1 +1 59.8946005755 27.7702704676 50.999999993499998 0.8829475928588979 -0.46947156278594571 0 +1 72.706232063000002 20.958205170700001 15.2499999973 2.92829733623e-14 5.4259627112399999e-14 1 +1 59.8946005755 27.7702704676 7 0.8829475928588979 -0.46947156278594571 0 +1 47.082969087899997 34.5823357644 15.2499999973 2.8852341400999997e-14 5.4690259073599999e-14 1 +1 59.8946005755 27.7702704676 23.499999994500001 0.8829475928588979 -0.46947156278594571 0 +2 5.2998818036899999 -44.0004740595 7 0 0 1 1 0 -0 -0 1 0 89.000474059599995 +2 5.2998818036899999 -44.0004740595 23.499999994500001 0 0 1 1 0 -0 -0 1 0 89.000474059599995 +2 5.2998818036899999 -44.0004740595 50.999999993499998 0 0 1 1 0 -0 -0 1 0 89.000474059599995 +1 86.5 -1.99851834808 50 0 0 1 +2 60.500078944800002 -1.9983999996099999 7 0 0 1 1 0 -0 -0 1 0 25.999921055400002 +2 60.500078944800002 -1.9983999996099999 23.499999994500001 0 0 1 1 0 -0 -0 1 0 25.999921055400002 +1 86.5 -1.99851834808 50 0 0 1 +2 60.500078944800002 -1.9983999996099999 50.999999993499998 0 0 1 1 0 -0 -0 1 0 25.999921055400002 +1 86.5 -6.9992591740399996 23.499999994500001 0 -1 0 +1 86.5 -12 15.2499999973 0 0 1 +1 86.5 -6.9992591740399996 7 0 -1 0 +1 86.5 -6.9992591740399996 50.999999993499998 0 -1 0 +1 86.5 -12 51.4999999968 0 0 1 +2 53.499751589699997 -11.999751589700001 7 0 0 1 1 0 -0 -0 1 0 33.000248411299999 +2 53.499751589699997 -11.999751589700001 23.499999994500001 0 0 1 1 0 -0 -0 1 0 33.000248411299999 +2 53.499751589699997 -11.999751589700001 50.999999993499998 0 0 1 1 0 -0 -0 1 0 33.000248411299999 +2 -55.499766644799998 -13.999766644799999 7 0 0 1 1 0 -0 -0 1 0 31.000233355999999 +1 -77.4202418693 -35.9202418693 50 0 0 1 +2 -55.499766644799998 -13.999766644799999 23.499999994500001 0 0 1 1 0 -0 -0 1 0 31.000233355999999 +2 -55.499766644799998 -13.999766644799999 50.999999993499998 0 0 1 1 0 -0 -0 1 0 31.000233355999999 +1 -42.340483738499998 -53 23.499999994500001 -1 0 -1.9737298215599999e-16 +1 -60.340483738499998 -53 15.2499999973 0 0 1 +1 -42.340483738499998 -53 7 -1 0 0 +1 -68.880362803899999 -44.460120934599999 7 0.70710678118654757 -0.70710678118654757 0 +1 -68.880362803899999 -44.460120934599999 23.499999994500001 0.70710678118654757 -0.70710678118654757 0 +1 -33.200000000000003 -22 50 0 0 1 +1 -46.799999999999997 -22 50 0 0 1 +2 -40 -22 7 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 -22 7 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +1 -33.200000000000003 20 50 0 0 1 +1 -46.799999999999997 20 50 0 0 1 +2 -40 20 7 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 20 7 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +1 42.912024808799998 1.41496383246 4 0.15239061262502063 0.083251371105611274 -0.98480775301213319 +1 23.087975191200002 -9.4149638324599998 4 -0.15239061262502063 -0.083251371105611274 -0.98480775301213319 +2 33 -4 7 0 0 -1 -1 0 -0 0 1 0 10.765711135 +2 33 -4 7 0 0 -1 -1 0 -0 0 1 0 10.765711135 +2 -40.000000188800001 -22.000011602899999 13 5.76090795865e-17 2.3455816874200001e-17 1 1 0 -5.76090795865e-17 -1.3512680210721575e-33 1 -2.3455816874200001e-17 24.000006407600001 +1 -63.380132715099997 -27.4193944658 10 0 0 1 +2 -40.000000188800001 -22.000011602899999 7 5.76090795865e-17 2.3455816874200001e-17 1 1 0 -5.76090795865e-17 -1.3512680210721575e-33 1 -2.3455816874200001e-17 24.000006407600001 +1 -16.812920653799999 -28.193528390800001 10 0 0 1 +2 -10.050091973400001 -29.999935313400002 13 2.69383714935e-16 -1.7976870128500001e-16 -1 -1 0 -2.69383714935e-16 4.8426760581193609e-32 1 -1.7976870128500001e-16 6.9999338036700003 +1 -10.050041736300001 -23.000001509899999 10 0 0 -1 +2 -10.050091973400001 -29.999935313400002 7 2.69383714935e-16 -1.7976870128500001e-16 -1 -1 0 -2.69383714935e-16 4.8426760581193609e-32 1 -1.7976870128500001e-16 6.9999338036700003 +1 -53.638411611599999 23.161336702100002 10 0 0 1 +2 -40.000005889900002 20.000007856700002 13 1.2518649094500001e-16 3.3689686731300001e-16 1 0 1 -3.3689686731300001e-16 -1 4.2174936629277745e-32 1.2518649094500001e-16 14.0000039535 +1 -26.474205143599999 23.612877197100001 10 0 0 1 +2 -40.000005889900002 20.000007856700002 7 1.2518649094500001e-16 3.3689686731300001e-16 1 0 1 -3.3689686731300001e-16 -1 4.2174936629277745e-32 1.2518649094500001e-16 14.0000039535 +1 -10.050041736300001 10.9999977619 10 0 0 -1 +2 -10.050077960799999 27.999952680300002 13 -1.3606594428900001e-16 1.04491966795e-16 -1 -1 0 1.3606594428900001e-16 1.421779813257651e-32 1 1.04491966795e-16 16.9999549184 +2 -10.050077960799999 27.999952680300002 7 -1.3606594428900001e-16 1.04491966795e-16 -1 -1 0 1.3606594428900001e-16 1.421779813257651e-32 1 1.04491966795e-16 16.9999549184 +1 -0.937212455434 11 13 -1 0 0 +1 8.1756168253899997 11 10 0 0 -1 +1 -0.937212455434 11 7 -1 0 0 +1 18.5957658562 14.5679304444 10 0 -1.1842378929300001e-15 -1 +2 8.1756210378799992 27.9999879308 13 1.61279430607e-16 -9.6888452206000006e-16 -1 0 -1 9.6888452206000006e-16 -1 -1.5626114404177214e-31 -1.61279430607e-16 16.999987833900001 +2 8.1756210378799992 27.9999879308 7 1.61279430607e-16 -9.6888452206000006e-16 -1 0 -1 9.6888452206000006e-16 -1 -1.5626114404177214e-31 -1.61279430607e-16 16.999987833900001 +2 33.000154312699998 -3.9999358403 13 5.9907681504699996e-17 1.03890016243e-17 1 1 0 -5.9907681504699996e-17 -6.2238100046037534e-34 1 -1.03890016243e-17 23.4999954223 +1 53.469313867700002 -15.543907945200001 10 0 0 1 +2 33.000154312699998 -3.9999358403 7 5.9907681504699996e-17 1.03890016243e-17 1 1 0 -5.9907681504699996e-17 -6.2238100046037534e-34 1 -1.03890016243e-17 23.4999954223 +2 32.999998499500002 -4.0000094690600001 13 -1.07608474141e-16 1.6621763078200001e-16 1 0 1 -1.6621763078200001e-16 -1 -1.7886425623783132e-32 -1.07608474141e-16 23.499997080899998 +1 14.981975072599999 -19.086450221900002 10 0 0 1 +2 32.999998499500002 -4.0000094690600001 7 -1.07608474141e-16 1.6621763078200001e-16 1 0 1 -1.6621763078200001e-16 -1 -1.7886425623783132e-32 -1.07608474141e-16 23.499997080899998 +1 1.9476248895499999 -13.0000002125 10 4.4408920985e-16 1.1842378929300001e-15 -1 +2 1.9476373989 -29.999971756400001 13 4.70738733509e-16 1.0081044974899999e-15 -1 0 -1 -1.0081044974899999e-15 -1 4.7455383439316942e-31 -4.70738733509e-16 16.999971543899999 +2 1.9476373989 -29.999971756400001 7 4.70738733509e-16 1.0081044974899999e-15 -1 0 -1 -1.0081044974899999e-15 -1 4.7455383439316942e-31 -4.70738733509e-16 16.999971543899999 +1 -4.0512084233500003 -13 7 -1 0 0 +1 -4.0512084233500003 -13 13 -1 0 0 +1 -10.050041736300001 -13 10 0 0 -1 +1 -26.474207676999999 -25.612876528800001 10 0 0 -1 +2 -10.0500782264 -29.9999528508 13 2.2184535635e-16 -1.48044541144e-16 -1 -1 0 -2.2184535635e-16 3.2842993985762914e-32 1 -1.48044541144e-16 16.999954907700001 +2 -10.0500782264 -29.9999528508 7 2.2184535635e-16 -1.48044541144e-16 -1 -1 0 -2.2184535635e-16 3.2842993985762914e-32 1 -1.48044541144e-16 16.999954907700001 +2 -40.000005894799997 -22.000007838799998 13 5.5640088590099997e-18 3.34722974126e-16 1 0 1 -3.34722974126e-16 -1 1.8624015933512388e-33 5.5640088590099997e-18 14.000003959200001 +1 -53.638411617999999 -25.161336703 10 0 0 1 +2 -40.000005894799997 -22.000007838799998 7 5.5640088590099997e-18 3.34722974126e-16 1 0 1 -3.34722974126e-16 -1 1.8624015933512388e-33 5.5640088590099997e-18 14.000003959200001 +1 -4.0512084233500003 -23 13 -1 0 0 +1 1.9476248895499999 -23 10 0 0 1 +1 -4.0512084233500003 -23 7 -1 0 0 +2 1.94758182896 -30.000090517899999 13 -4.2166878908399999e-16 -5.48623878844e-16 -1 0 -1 5.48623878844e-16 -1 2.3133756665471658e-31 4.2166878908399999e-16 7.0000925632 +1 7.3147213727000002 -25.506193655299999 10 -5.9211894646699999e-16 0 -1 +2 1.94758182896 -30.000090517899999 7 -4.2166878908399999e-16 -5.48623878844e-16 -1 0 -1 5.48623878844e-16 -1 2.3133756665471658e-31 4.2166878908399999e-16 7.0000925632 +2 33.000000815600004 -4.0000089966100001 13 -5.2933418242299998e-17 -1.2842066634500001e-16 1 0 1 1.2842066634500001e-16 -1 6.7977448425947445e-33 -5.2933418242299998e-17 33.499997306399997 +2 33.000000815600004 -4.0000089966100001 7 -5.2933418242299998e-17 -1.2842066634500001e-16 1 0 1 1.2842066634500001e-16 -1 6.7977448425947445e-33 -5.2933418242299998e-17 33.499997306399997 +1 62.1795402395 -20.456141547600001 10 0 0 1 +2 33.000231648499998 -3.99990394745 13 2.1012375303300001e-17 3.6438932552000002e-18 1 1 0 -2.1012375303300001e-17 -7.656685264342593e-35 1 -3.6438932552000002e-18 33.499988350499997 +2 33.000231648499998 -3.99990394745 7 2.1012375303300001e-17 3.6438932552000002e-18 1 1 0 -2.1012375303300001e-17 -7.656685264342593e-35 1 -3.6438932552000002e-18 33.499988350499997 +1 12.4663281178 22.4690972667 10 0 0 1 +2 8.1755617599299999 28.000161024899999 13 -1.95855484681e-16 1.17654303265e-15 -1 0 -1 -1.17654303265e-15 -1 -2.3043240590771934e-31 1.95855484681e-16 7.0001627314999997 +1 8.1756168254000006 20.999998293600001 10 0 1.1842378929300001e-15 -1 +2 8.1755617599299999 28.000161024899999 7 -1.95855484681e-16 1.17654303265e-15 -1 0 -1 -1.17654303265e-15 -1 -2.3043240590771934e-31 1.95855484681e-16 7.0001627314999997 +1 -10.050041736300001 21 10 0 0 1 +1 -0.937212455434 21 7 -1 0 0 +1 -0.937212455434 21 13 -1 0 0 +2 -10.0500892177 27.999937760200002 13 -2.6938377685800001e-16 -1.79768782062e-16 -1 -1 0 2.6938377685800001e-16 -4.8426793473024245e-32 1 -1.79768782062e-16 6.9999367231200003 +1 -16.812928262700002 26.193526351199999 10 0 0 -1 +2 -10.0500892177 27.999937760200002 7 -2.6938377685800001e-16 -1.79768782062e-16 -1 -1 0 2.6938377685800001e-16 -4.8426793473024245e-32 1 -1.79768782062e-16 6.9999367231200003 +2 -40.000000158600002 20.0000116416 13 3.6512598978999999e-17 9.8261528521100004e-17 1 0 1 -9.8261528521100004e-17 -1 3.5877837859544956e-33 3.6512598978999999e-17 24.000006379399998 +2 -40.000000158600002 20.0000116416 7 3.6512598978999999e-17 9.8261528521100004e-17 1 0 1 -9.8261528521100004e-17 -1 3.5877837859544956e-33 3.6512598978999999e-17 24.000006379399998 +1 -63.3801326675 25.419394455199999 10 0 0 1 +2 -70.199389163800006 27.000064425600002 7 3.6359605203699998e-16 -4.57512413114e-16 -1 0 -1 4.57512413114e-16 -1 -1.6634970716617138e-31 -3.6359605203699998e-16 7.0000700167899996 +2 -70.199389163800006 27.000064425600002 13 3.6359605203699998e-16 -4.57512413114e-16 -1 0 -1 4.57512413114e-16 -1 -1.6634970716617138e-31 -3.6359605203699998e-16 7.0000700167899996 +1 -67.282680344799999 20.636591324699999 10 0 0 -1 +2 -65.199337741099995 16.091298859399998 13 0 0 1 1 0 -0 -0 1 0 5 +2 -65.199337741099995 16.091298859399998 7 0 0 1 1 0 -0 -0 1 0 5 +1 -70.199337741099995 16.091298859399998 10 0 0 1 +2 -70.199302031900004 26.9999554113 7 0 0 -1 -1 0 -0 0 1 0 16.999958414799998 +2 -70.199302031900004 26.9999554113 13 0 0 -1 -1 0 -0 0 1 0 16.999958414799998 +1 -63.116012066899998 11.545972449700001 10 0 0 -1 +2 -65.199337741099995 16.091272674700001 7 0 0 1 1 0 -0 -0 1 0 5 +2 -65.199337741099995 16.091272674700001 13 0 0 1 1 0 -0 -0 1 0 5 +2 -70.199384206299996 -29.000057785500001 13 2.03942557704e-16 5.8439850052099999e-16 -1 0 -1 -5.8439850052099999e-16 -1 1.1918372491463511e-31 -2.03942557704e-16 7.0000631979800003 +2 -70.199384206299996 -29.000057785500001 7 2.03942557704e-16 5.8439850052099999e-16 -1 0 -1 -5.8439850052099999e-16 -1 1.1918372491463511e-31 -2.03942557704e-16 7.0000631979800003 +1 -67.282679462999994 -22.636590317500001 10 0 0 -1 +2 -65.199337741099995 -18.091297447999999 13 9.8355079826499999e-17 -6.3129980462000004e-16 1 0 1 6.3129980462000004e-16 -1 -6.2091542677853961e-32 9.8355079826499999e-17 5 +1 -70.199337741099995 -18.091297447999999 10 0 -8.4588420923799999e-16 1 +2 -65.199337741099995 -18.091297447999999 7 9.8355079826499999e-17 -6.3129980462000004e-16 1 0 1 6.3129980462000004e-16 -1 -6.2091542677853961e-32 9.8355079826499999e-17 5 +7 0 0 5 9 3 -53.638400442600002 -25.161334112599999 7 -54.003979222200002 -23.584138428700001 7 -54.557315125400002 -22.050463563099999 7 -55.291490251799999 -20.5902685633 7 -57.019285000799997 -17.984147073199999 7 -59.287073799600002 -15.837099635 7 -60.481358048700002 -14.9322948693 7 -61.7647902569 -14.165305821500001 7 -63.116009920099998 -13.545968072999999 7 + 0 6 10.190667787600001 3 19.550105514999998 6 +2 -65.199337741099995 -18.0912726864 7 0 0 1 1 0 -0 -0 1 0 5 +2 -70.199302332399995 -28.999955369599999 13 -0 0 -1 -1 0 0 0 1 0 16.999958491400001 +1 -63.116011954999998 -13.545972512700001 10 0 0 -1 +2 -65.199337741099995 -18.0912726864 13 0 0 1 1 0 -0 -0 1 0 5 +1 6.5141038693100004 -109.712455713 23.499999994500001 0.99473992845615244 -0.1024327815450157 5.0159347423207682e-15 +1 26.946339062700002 -111.816453577 37.249999994500001 -5.4259627094400001e-15 -3.6173084729600001e-15 1 +1 6.5141038693100004 -109.712455713 50.999999994500001 0.99473992845615244 -0.1024327815450157 4.8429714753407426e-15 +1 -13.918131324000001 -107.60845784999999 37.249999994500001 -5.36136791528e-15 -3.6173084729600001e-15 1 +1 19.251906933600001 -111.02412378 37.499999995499998 5.52644349937e-15 3.15796771393e-15 -1 +1 5.8229157942800001 -109.64128101199999 32.999999994200003 -0.99473992845615244 0.1024327815450157 -3.1579672189504841e-15 +1 -7.6060753518500004 -108.258438244 37.499999995499998 5.3290705172299997e-15 3.1579677139100001e-15 -1 +1 5.8229157908699998 -109.64128101199999 41.999999996299998 -0.99473992845615244 0.1024327815450157 -4.7369508279607256e-15 +1 87.499999999799996 -28.101125938100001 37.249999994 -5.1675835329900002e-15 -3.4881188847699999e-15 1 +1 87.499999999799996 -9.1571596159599995 23.499999994500001 1.5865715347900001e-13 -1 -3.28191511333e-15 +1 87.499999999799996 9.7868067061600001 37.249999994 -5.1675835329900002e-15 -3.4881188847699999e-15 1 +1 87.499999999799996 -9.1571596159599995 50.999999993499998 1.5865715347900001e-13 -1 -3.1881461100899998e-15 +1 -159.616418463 -13.4267384906 50.999999994500001 0.83981625644186431 -0.54287075387791239 2.9197633232995284e-15 +1 -164.72578242700001 -10.123963334500001 37.249999994500001 -5.1675835327999999e-15 -3.4235240904799999e-15 1 +1 -159.616418463 -13.4267384906 23.499999994500001 0.83981625644186431 -0.54287075387791239 2.6277869909695761e-15 +1 -154.507054498 -16.729513646600001 37.249999994500001 -5.1675835327999999e-15 -3.4881188846399999e-15 1 +1 -162.59825610199999 10.5367602475 23.499999994500001 -0.1024327815450157 -0.99473992845615244 -3.8486352171705897e-15 +1 -162.59825610199999 10.5367602475 50.999999994500001 -0.1024327815450157 -0.99473992845615244 -3.934160444220603e-15 +1 -160.47072977600001 31.197483829599999 37.249999994500001 -5.1675835327999999e-15 -3.4881188846399999e-15 1 +1 -161.19916561400001 24.123535403799998 37.499999995000003 6.31593542723e-15 3.5527136778100001e-15 -1 +1 -162.479575584 11.689284349399999 41.999999996299998 0.1024327815450157 0.99473992845615244 3.6948216469305667e-15 +1 -163.759985554 -0.74496670486799998 37.499999995099998 6.31593542731e-15 3.4540271868099999e-15 -1 +1 -162.479575584 11.689284348099999 32.999999994200003 -0.1024327815450157 -0.99473992845615244 -3.9790386957306101e-15 +1 -155.253129836 33.6438877175 23.499999994500001 -0.90541532198995012 -0.42452690692797662 -6.165059484819661e-15 +1 -155.253129836 33.6438877175 50.999999994500001 -0.90541532198995012 -0.42452690692797662 -6.165059484819661e-15 +1 -150.035529897 36.090291605399997 37.249999994500001 -5.1675835327999999e-15 -3.3589292963199998e-15 1 +1 29.578781049 107.065231391 23.499999994500001 -0.99473992845615244 0.1024327815450157 -5.0363893608007718e-15 +1 6.4227351959299996 109.449712116 37.249999994500001 -5.3936653123599997e-15 -3.6173084729600001e-15 1 +1 29.578781049 107.065231391 50.999999994500001 -0.99473992845615244 0.1024327815450157 -5.0363893608007718e-15 +1 52.734826902000002 104.68075066500001 37.249999994500001 -5.4259627094400001e-15 -3.6173084729600001e-15 1 +1 28.1333348042 107.2140754 32.9999999988 -0.99473992845615244 0.1024327815450157 -5.0344656719307717e-15 +1 43.576597384700001 105.62381417 37.499999995700001 5.5264434996000003e-15 3.15796771406e-15 -1 +1 28.133334802299999 107.214075401 41.999999996299998 -0.99473992845615244 0.1024327815450157 -5.0344656707107715e-15 +1 12.690072219899999 108.804336631 37.499999997099998 5.32907051908e-15 3.1579677150099999e-15 -1 +1 70.117413450900003 57.233778685799997 23.499999994500001 -0.34399930899512393 0.93896990122733826 1.2655400189304559e-15 +1 70.117413450900003 57.233778685799997 50.999999993499998 -0.34399930899512393 0.93896990122733826 1.2655400189304559e-15 +1 57.2231695312 -69.958789757399998 50.999999993499998 0.58607935522689247 0.81025365742885125 5.8455468867089262e-15 +1 57.2231695312 -69.958789757399998 23.499999994500001 0.58607935522689247 0.81025365742885125 5.8111613167889323e-15 +1 18.172036477799999 68.839081131300006 35.9999999988 1.1842378929300001e-15 -4.7369515717299999e-15 -1 +2 21.2909982183 79.908050263700005 32.9999999988 5.9293703800799996e-16 -4.0777774832000003e-15 -1 0 -1 4.0777774832000003e-15 -1 -2.417865302544325e-30 -5.9293703800799996e-16 11.4999999998 +1 26.286492957699998 69.549718723200002 35.9999999988 1.1842378929300001e-15 -4.7369515717299999e-15 -1 +2 21.2909982183 79.908050263700005 41.999999996299998 5.9293703800799996e-16 -4.0777774832000003e-15 -1 0 -1 4.0777774832000003e-15 -1 -2.417865302544325e-30 -5.9293703800799996e-16 11.4999999998 +2 23.161170569300001 80.6168936097 41.999999996299998 6.3285417819799996e-16 -4.0332696041599998e-15 -1 0 -1 4.0332696041599998e-15 -1 -2.5524715207916493e-30 -6.3285417819799996e-16 11.5 +2 23.161170569300001 80.6168936097 32.9999999988 6.3285417819799996e-16 -4.0332696041599998e-15 -1 0 -1 4.0332696041599998e-15 -1 -2.5524715207916493e-30 -6.3285417819799996e-16 11.5 +1 27.223459950599999 69.858278225600003 45.000000001899998 6.3285412466000003e-16 -4.0332693629399997e-15 -1 +2 23.161170569300001 80.6168936097 51.000000002999997 6.3285417819799996e-16 -4.0332696041599998e-15 -1 0 -1 4.0332696041599998e-15 -1 -2.5524715207916493e-30 -6.3285417819799996e-16 11.5 +1 19.098881188099998 91.375508993799997 45.000000001899998 6.3285412466000003e-16 -4.0332693629399997e-15 -1 +2 23.161170569300001 80.6168936097 41.999999996299998 6.3285417819799996e-16 -4.0332696041599998e-15 -1 0 -1 4.0332696041599998e-15 -1 -2.5524715207916493e-30 -6.3285417819799996e-16 11.5 +1 23.776514180900001 93.1417119993 46.4999999956 4.85537536183e-14 -2.7948014277899999e-13 -1 +1 21.437697683700002 92.258610495799999 50.999999998500002 -0.93553177252933062 -0.35324255489412487 1.4901769405105267e-09 +1 21.437697684500002 92.258610496100005 41.999999996299998 -0.93553177252933062 -0.35324255489412487 5.258045326691858e-14 +2 27.8388294288 82.3831063855 41.999999996299998 5.4171342637599998e-16 -3.9490123110599997e-15 -1 0 -1 3.9490123110599997e-15 -1 -2.1392329898253185e-30 -5.4171342637599998e-16 11.5 +1 32.834324168099997 72.024774844600003 45.000000001899998 5.4171351848700002e-16 -3.9490117842399999e-15 -1 +8 3.8922169017261097 7.0338119599827928 +7 1 0 2 5 3 69.536356688621012 114.3868060326629 -8.8754029057758999 1 80.079355609041698 118.36906402902218 -8.8760820507181961 0.70710635609732231 84.061600984721878 107.82606045526799 -8.8743623671825844 1 88.043846360403847 97.283056881514256 -8.872642683646518 0.70710635609732231 77.500837864008403 93.30082423756842 -8.8719635428392394 1 + 3.8922169017260813 3 5.4630144308545114 2 7.0338119599829421 3 +1 31.9011446799 71.624500769500003 45.000000001899998 5.4171351848700002e-16 -3.9490117842399999e-15 -1 +7 0 0 5 15 5 23.776514180100001 93.141712002399998 50.999999994100001 25.466471998500001 93.779818989500001 50.9999999944 27.2817218307 94.086103534800003 50.999999994600003 29.135401868500001 94.027393012900006 50.999999994900001 32.719860822400001 93.1863087646 50.999999995300001 35.720163512399999 91.052309590899995 50.999999995800003 36.989398629199997 89.700045257900001 50.999999996100001 38.929257486899999 86.570713649300004 50.999999996600003 39.5418265781 82.940213984899998 50.999999997000003 39.4831160564 81.086533947099994 50.999999997300002 38.642031808399999 77.502074993099995 50.999999997800003 36.508032635100001 74.501772302899994 50.999999998299998 35.155768302299997 73.2325371859 50.999999998500002 33.5911024981 72.262607756899996 50.999999998699998 31.9011446799 71.624500769500003 50.999999999000003 + -18.064157756899998 6 -9.0320788784400001 3 0 3 9.0320788784400001 3 18.064157756899998 6 +2 27.8388294288 82.3831063855 32.9999999988 5.4171342637599998e-16 -3.9490123110599997e-15 -1 0 -1 3.9490123110599997e-15 -1 -2.1392329898253185e-30 -5.4171342637599998e-16 11.5 +1 29.562295848000002 70.741387057699995 32.9999999988 0.93553177252933062 0.35324255489412487 -5.2580017097318581e-14 +1 29.562289381799999 70.741384616199994 51.000000000599996 0.93553177252933062 0.35324255489412487 -1.117639668870395e-09 +1 41.149169102000002 81.920381622500003 35.999999992500001 5.5888520478200004e-16 -6.5302060647800001e-15 -1 +2 29.7090017885 83.091949733700005 41.999999996299998 5.5888520866500001e-16 -6.53020587755e-15 -1 0 -1 6.53020587755e-15 -1 -3.6496354744999411e-30 -5.5888520866500001e-16 11.5 +2 29.7090017885 83.091949733700005 32.999999993499998 5.5888520866500001e-16 -6.53020587755e-15 -1 0 -1 6.53020587755e-15 -1 -3.6496354744999411e-30 -5.5888520866500001e-16 11.5 +1 9.8508308940700005 81.079618377299994 35.9999999944 6.0304365945299997e-16 -6.4562556190099998e-15 -1 +2 21.290998208000001 79.9080502698 32.999999998 6.0304357727700005e-16 -6.45625595758e-15 -1 0 -1 6.45625595758e-15 -1 -3.893403688474987e-30 -6.0304357727700005e-16 11.5 +2 21.2909982079 79.9080502698 41.999999996299998 6.0304357727700005e-16 -6.45625595758e-15 -1 0 -1 6.45625595758e-15 -1 -3.893403688474987e-30 -6.0304357727700005e-16 11.5 +1 11.2704515577 94.941977504500002 32.999999997700002 0.10187548792598977 0.99479715769590016 5.7924984355594186e-11 +1 11.2704515576 94.941977504299999 41.999999996299998 0.10187548792598977 0.99479715769590016 -2.6005054595897391e-13 +1 42.362883243200002 93.772097895499996 41.999999996299998 0.10187548792598977 0.99479715769590016 -2.6003390784597389e-13 +1 42.362883243200002 93.772097895499996 32.999999993899998 0.10187548792598977 0.99479715769590016 -2.6003390784597389e-13 +7 0 0 5 9 3 28.538625593500001 101.847047723 41.999999996299998 29.060364657699999 101.496944132 41.999999996299998 29.444618362899998 100.941954088 41.999999996299998 29.580279002600001 100.252849845 41.999999996299998 29.2898447219 98.934400998599997 41.999999996299998 28.1798646357 98.165893588200007 41.999999996299998 27.4907603921 98.0302329485 41.999999996299998 26.831535969000001 98.175450088800005 41.999999996299998 26.309796904799999 98.525553680599998 41.999999996299998 + 4.4524817489300004 6 7.5940744025200004 3 10.7356670561 6 +7 0 0 5 9 3 26.309796904799999 98.525553680599998 41.999999996299998 25.788057840600001 98.875657272300003 41.999999996299998 25.403804135400001 99.430647315399995 41.999999996299998 25.268143495699999 100.11975155899999 41.999999996299998 25.5585777764 101.438200405 41.999999996299998 26.6685578626 102.20670781600001 41.999999996299998 27.357662106199999 102.342368455 41.999999996299998 28.016886529400001 102.197151315 41.999999996299998 28.538625593500001 101.847047723 41.999999996299998 + 10.7356670561 6 13.877259709700001 3 17.018852363299999 6 +7 0 0 5 9 3 28.538625593500001 101.847047723 32.9999999988 29.060364657699999 101.496944132 32.9999999988 29.444618362899998 100.941954088 32.9999999988 29.580279002600001 100.252849845 32.9999999988 29.2898447219 98.934400998599997 32.9999999988 28.1798646357 98.165893588200007 32.9999999988 27.4907603921 98.0302329485 32.9999999988 26.831535969000001 98.175450088800005 32.9999999988 26.309796904799999 98.525553680599998 32.9999999988 + 0.97681177770100003 6 4.1184044312900001 3 7.2599970848800002 6 +7 0 0 5 9 3 26.309796904799999 98.525553680599998 32.9999999988 25.788057840600001 98.875657272300003 32.9999999988 25.403804135400001 99.430647315399995 32.9999999988 25.268143495699999 100.11975155899999 32.9999999988 25.5585777764 101.438200405 32.9999999988 26.6685578626 102.20670781600001 32.9999999988 27.357662106199999 102.342368455 32.9999999988 28.016886529400001 102.197151315 32.9999999988 28.538625593500001 101.847047723 32.9999999988 + 7.2599970848800002 6 10.4015897385 3 13.5431823921 6 +7 0 0 5 15 5 30.379727411299999 80.409926420000005 32.9999999988 30.208499053800001 79.643420630999998 32.9999999988 29.8867676365 78.910535451300007 32.9999999988 29.423197897800001 78.250757750099993 32.9999999988 28.262338296300001 77.148518143100006 32.9999999988 26.770885201799999 76.567058916099995 32.9999999988 25.976558609400001 76.428318935299998 32.9999999988 24.3763058125 76.469769530899995 32.9999999988 22.910535453200001 77.113232365399995 32.9999999988 22.250757751999998 77.576802104099997 32.9999999988 21.148518144899999 78.737661705600004 32.9999999988 20.567058917899999 80.229114800100007 32.9999999988 20.428318937099998 81.023441392500004 32.9999999988 20.449044234900001 81.8235677909 32.9999999988 20.620272592500001 82.590073579999995 32.9999999988 + 8.4398167790700001 6 12.366807596099999 3 16.293798413000001 3 20.220789230000001 3 24.147780047000001 6 +7 0 0 5 15 5 20.620272592500001 82.590073579999995 32.9999999988 20.79150095 83.356579369000002 32.9999999988 21.1132323673 84.089464548699993 32.9999999988 21.576802105999999 84.749242249900007 32.9999999988 22.737661707499999 85.851481856999996 32.9999999988 24.229114802000002 86.432941084000007 32.9999999988 25.023441394399999 86.571681064800003 32.9999999988 26.623694191199998 86.530230469200006 32.9999999988 28.089464550599999 85.886767634600005 32.9999999988 28.749242251799998 85.423197895900003 32.9999999988 29.8514818588 84.262338294399996 32.9999999988 30.4329410858 82.770885199899993 32.9999999988 30.5716810666 81.976558607499996 32.9999999988 30.550955768800002 81.1764322091 32.9999999988 30.379727411299999 80.409926420000005 32.9999999988 + 24.147780047000001 6 28.074770864000001 3 32.001761680999998 3 35.928752498000001 3 39.855743314999998 6 +1 20.620272592500001 82.590073579999995 41.999999994200003 1.0449157878799999e-16 0 -1 +1 30.379727411299999 80.409926420000005 41.999999994200003 1.0449157878799999e-16 0 -1 +2 25.500000001899998 81.5 23.499999994500001 1.32556210217e-16 8.4147218736300005e-17 -1 -1 0 -1.32556210217e-16 -1.1154236415984865e-32 1 8.4147218736300005e-17 5 +2 25.500000001899998 81.5 23.499999994500001 1.32556210217e-16 8.4147218736300005e-17 -1 -1 0 -1.32556210217e-16 -1.1154236415984865e-32 1 8.4147218736300005e-17 5 +1 26.309796904799999 98.525553680599998 33.999999996299998 7.8154560156899994e-15 8.4870485750299999e-14 -1 +2 27.424211249199999 100.186300702 49.999999996299998 7.8154559352599992e-15 8.4870486415000004e-14 -1 0 -1 -8.4870486415000004e-14 -1 6.6330154678051494e-28 -7.8154559352599992e-15 2 +1 28.538625593500001 101.847047723 33.999999996299998 7.8154560156899994e-15 8.4870485750299999e-14 -1 +1 26.309796904799999 98.525553680599998 33.999999996299998 7.8154560156899994e-15 8.4870485750299999e-14 -1 +1 28.538625593500001 101.847047723 33.999999996299998 7.8154560156899994e-15 8.4870485750299999e-14 -1 +2 27.424211249199999 100.186300702 23.499999994500001 7.8154559352599992e-15 8.4870486415000004e-14 -1 0 -1 -8.4870486415000004e-14 -1 6.6330154678051494e-28 -7.8154559352599992e-15 2 +2 27.424211249199999 100.186300702 49.999999996299998 7.8154559352599992e-15 8.4870486415000004e-14 -1 0 -1 -8.4870486415000004e-14 -1 6.6330154678051494e-28 -7.8154559352599992e-15 2 +2 27.424211249199999 100.186300702 23.499999994500001 7.8154559352599992e-15 8.4870486415000004e-14 -1 0 -1 -8.4870486415000004e-14 -1 6.6330154678051494e-28 -7.8154559352599992e-15 2 +1 3.6202725862 -82.409926417600005 41.999999994200003 1.56737368182e-16 0 -1 +2 8.4999999956199996 -83.499999997499998 32.999999994200003 1.32556210217e-16 8.4147218736300005e-17 -1 -1 0 -1.32556210217e-16 -1.1154236415984865e-32 1 8.4147218736300005e-17 5 +1 13.379727405000001 -84.590073577499993 41.999999994200003 1.56737368182e-16 0 -1 +2 8.4999999956199996 -83.499999997499998 23.499999994500001 1.32556210217e-16 8.4147218736300005e-17 -1 -1 0 -1.32556210217e-16 -1.1154236415984865e-32 1 8.4147218736300005e-17 5 +2 8.4999999956199996 -83.499999997499998 32.999999994200003 1.32556210217e-16 8.4147218736300005e-17 -1 -1 0 -1.32556210217e-16 -1.1154236415984865e-32 1 8.4147218736300005e-17 5 +2 8.4999999956199996 -83.499999997499998 23.499999994500001 1.32556210217e-16 8.4147218736300005e-17 -1 -1 0 -1.32556210217e-16 -1.1154236415984865e-32 1 8.4147218736300005e-17 5 +1 19.938258883100001 -84.6900561848 44.999999988799999 -3.7372132055699999e-16 -9.0990113221800002e-16 -1 +2 8.5 -83.5 41.999999996299998 -3.7372158294600001e-16 -9.0990075420400002e-16 -1 0 -1 9.0990075420400002e-16 -1 3.4004955018487817e-31 3.7372158294600001e-16 11.5 +1 -2.9382588831000001 -82.3099438152 44.999999988799999 -3.7372149819199999e-16 -9.0990113221800002e-16 -1 +7 0 0 5 15 5 -2.93825888295 -82.309943813700002 50.999999992100001 -2.75132529435 -80.513226309900006 50.999999991999999 -2.2116070488499999 -78.753213130500001 50.999999991899998 -1.3283773532300001 -77.122421325000005 50.999999991800003 1.0299238313600001 -74.29502248 50.999999991599999 4.2822352022899999 -72.569264834199998 50.999999991300001 6.0599168537799999 -72.040658596900002 50.999999991199999 9.7267605098499992 -71.708956460099998 50.999999991000003 13.246786868799999 -72.788392950800002 50.999999990799999 14.8775786744 -73.671622646399996 50.999999990699997 17.704977519500002 -76.029923830800001 50.999999990500001 19.4307351655 -79.282235201600002 50.999999990299997 19.959341403 -81.059916853000004 50.999999990200003 20.1251924715 -82.893338681100005 50.999999990100001 19.938258883100001 -84.6900561848 50.999999989999999 + -18.0641577574 6 -9.0320788787000001 3 1.7763568394e-15 3 9.0320788787000001 3 18.0641577574 6 +7 0 0 5 15 5 19.9382588828 -84.690056188100002 50.999999995800003 19.751325293899999 -86.486773691799996 50.999999995300001 19.211607048099999 -88.246786871099999 50.999999994699998 18.328377352299999 -89.877578676400006 50.999999994200003 15.9700761675 -92.704977520900002 50.999999993099998 12.717764796599999 -94.430735166199995 50.999999991999999 10.940083145099999 -94.959341403300002 50.999999991400003 7.2732394892099999 -95.2910435398 50.999999990299997 3.7532131304799998 -94.211607048800005 50.999999989199999 2.1224213250399999 -93.328377353299999 50.999999988699997 -0.70497751977800005 -90.970076168800006 50.999999987599999 -2.4307351656199998 -87.717764798100006 50.999999986500001 -2.9593414029899998 -85.940083146800006 50.999999985999999 -3.1251924714700001 -84.106661318799993 50.999999985400002 -2.9382588831000001 -82.3099438152 50.999999984900001 + -18.064157756499998 6 -9.0320788782400001 3 0 3 9.0320788782400001 3 18.064157756499998 6 +2 8.5 -83.5 41.999999996299998 -3.7372158294600001e-16 -9.0990075420400002e-16 -1 0 -1 9.0990075420400002e-16 -1 3.4004955018487817e-31 3.7372158294600001e-16 11.5 +1 8.6902126879499999 -100.646112499 33.999999996299998 2.2964359018800001e-13 1.6778850948600001e-13 -1 +2 6.7074263208199998 -100.90794875 49.9999999968 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +1 4.7246399536899997 -101.16978500099999 33.999999996299998 2.2964359018800001e-13 1.6778850948600001e-13 -1 +2 6.7074263208199998 -100.90794875 41.999999996299998 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +1 8.6902126879499999 -100.646112499 33.999999996299998 2.2964359018800001e-13 1.6778850948600001e-13 -1 +2 6.7074263208199998 -100.90794875 32.999999994200003 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +1 4.7246399536899997 -101.16978500099999 33.999999996299998 2.2964359018800001e-13 1.6778850948600001e-13 -1 +2 6.7074263208199998 -100.90794875 23.499999994500001 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +2 6.7074263208199998 -100.90794875 41.999999996299998 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +2 6.7074263208199998 -100.90794875 49.9999999968 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +2 6.7074263208199998 -100.90794875 32.999999994200003 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +2 6.7074263208199998 -100.90794875 23.499999994500001 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +7 0 0 5 6 2 -4.9297582828299999 -82.124648222700003 41.999999996299998 -4.4976787792500001 -77.905565226999997 41.999999996299998 -2.4131343732300001 -73.8517347035 41.999999996299998 1.2640604474699999 -70.857741346300003 41.999999996299998 5.6562687796000004 -69.638162213699999 41.999999996299998 9.8753517753400004 -70.070241717599998 41.999999996299998 + 2.2474917242100001 6 23.453242136899998 6 +7 0 0 5 6 2 9.8753517753400004 -70.070241717599998 41.999999996299998 14.0944347709 -70.502321221499997 41.999999996299998 18.148265294000002 -72.586865627600005 41.999999996299998 21.142258650900001 -76.264060448199999 41.999999996299998 22.361837783399999 -80.656268780100007 41.999999996299998 21.9297582795 -84.875351775699997 41.999999996299998 + 23.453242136899998 6 44.658992548599997 6 +7 0 0 1 2 2 21.929761623299999 -84.875319113900005 41.999999996299998 19.251906933600001 -111.02412378 41.999999996299998 + -13.142782156000001 2 13.142782156000001 2 +7 0 0 1 2 2 -4.9297582865100003 -82.124648223299999 41.999999996299998 -7.6060753518500004 -108.258438244 41.999999996299998 + -13.135235569600001 2 13.135235569600001 2 +1 20.590835950100001 -97.949705116299995 32.999999994200003 -0.10187548771604103 -0.99479715771740063 6.7579093968127222e-15 +2 8.4999999983999999 -83.499999998700005 32.999999994200003 1.10785473343e-16 -6.8905455708200003e-15 -1 0 -1 6.8905455708200003e-15 -1 -7.6337235265480587e-31 -1.10785473343e-16 13.5 +1 6427.80848023 -147.96864769000001 4400.60808086 -0.1228899963770408 0.82036829098827235 0.55847463320318536 +2 6432.9396074799997 -154.76237785800001 4400.8896186399998 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 6.0000000001 +1 6436.5845784900002 -151.63507711 4407.9250060699997 -0.1228899963770408 0.82036829098827235 0.55847463320318536 +2 8.4999999983999999 -83.499999998700005 32.999999994200003 1.10785473343e-16 -6.8905455708200003e-15 -1 0 -1 6.8905455708200003e-15 -1 -7.6337235265480587e-31 -1.10785473343e-16 13.5 +1 -6.2679168155999996 -95.191543233800004 32.999999994200003 -0.10187548783502212 -0.99479715770521604 6.761800463941468e-15 +2 6435.09018242 -169.118822948 4391.1163125599996 0.67084843793829319 0.48336709773221126 -0.56242210318024577 0.64246138354497484 2.7755575615628907e-17 0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 3 +7 0 0 5 9 3 6433.1377512700001 -166.87685738799999 4390.7143137700004 6433.4728391999997 -166.44715955199999 4391.4833002799996 6434.0487986600001 -166.294053131 4392.3018813999997 6434.7984630299998 -166.511125695 4393.0095090499999 6436.2883891399997 -167.58231031099999 4393.8660529299996 6437.2519603700002 -169.32846270900001 4393.5146756200002 6437.4719178900004 -170.22480142200001 4393.0066897400002 6437.3777014999996 -170.931090673 4392.28729785 6437.04261357 -171.360788509 4391.5183113399999 + -4.7123889803800001 6 4.4408920985e-16 3 4.7123889803800001 6 +1 6437.85404569 -145.22446035900001 4409.6146645899998 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 +2 6436.9646981100004 -151.862175272 4397.5150860100002 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 13.500000006300001 +1 -4.9297582827399999 -82.124648221800001 35.999999990699997 -1.10785158824e-16 -7.0754438752399996e-15 -1 +1 9.8753517753400004 -70.070241717599998 35.999999990699997 -1.10785158824e-16 -7.0754438752399996e-15 -1 +1 6429.0779474199999 -141.55803093700001 4402.2977393800002 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 +2 6436.9646981100004 -151.86217526900001 4397.5150860200001 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 13.4999999967 +1 21.9297582795 -84.875351775699997 35.999999990699997 -1.10784981189e-16 -7.0754438752399996e-15 -1 +1 6448.4968215899999 -167.06186681899999 4398.2072285100003 0.12288999641600278 -0.82036829100501851 -0.55847463317001256 +1 6428.7506004899997 -158.81240064400001 4381.74414677 0.12288999641600278 -0.82036829100501851 -0.55847463317001256 +1 -142.379727409 10.221242007000001 41.999999994200003 0 -2.24656894395e-15 -1 +2 -137.5 9.1311684270499995 23.499999994500001 3.5275243950799999e-16 -2.2402162931099999e-15 -1 0 -1 2.2402162931099999e-15 -1 -7.9024176242012117e-31 -3.5275243950799999e-16 5 +1 -132.62027259000001 8.0410948470800001 41.999999994200003 0 -2.24656894395e-15 -1 +2 -137.5 9.1311684270499995 32.999999994200003 3.5275243950799999e-16 -2.2402162931099999e-15 -1 0 -1 2.2402162931099999e-15 -1 -7.9024176242012117e-31 -3.5275243950799999e-16 5 +2 -137.5 9.1311684270499995 23.499999994500001 3.5275243950799999e-16 -2.2402162931099999e-15 -1 0 -1 2.2402162931099999e-15 -1 -7.9024176242012117e-31 -3.5275243950799999e-16 5 +2 -137.5 9.1311684270499995 32.999999994200003 3.5275243950799999e-16 -2.2402162931099999e-15 -1 0 -1 2.2402162931099999e-15 -1 -7.9024176242012117e-31 -3.5275243950799999e-16 5 +7 0 0 3 4 2 -125.00301579800001 8.8566035419099993 39.000000005799997 -125.01034536100001 8.5229941308200008 39.000000005899999 -125.031040706 8.1896786012800007 39.000000006100002 -125.065035529 7.8577248189100004 39.000000006199997 + 18.614045512400001 4 19.615115267699998 4 +7 0 0 5 6 2 -136.22655639800001 21.566132897999999 38.999999997499998 -132.519169363 21.186465685400002 38.9999999992 -128.95037998399999 19.428203057699999 39.0000000008 -126.224448873 16.341360615599999 39.000000002500002 -124.92115643299999 12.582481272400001 39.000000004100002 -125.00301579800001 8.8566035419000002 39.000000005799997 + -0.019838823690999999 6 18.614045512400001 6 +1 -136.22655639600001 21.566132897799999 44.999999987000002 5.7838178690899997e-17 -2.1268192540399999e-15 -1 +2 -137.5 9.1311684270499995 41.999999996299998 5.7837690158399994e-17 -2.12681934891e-15 -1 0 -1 2.12681934891e-15 -1 -1.2301031852514658e-31 -5.7837690158399994e-17 12.5 +1 -149.93292772000001 10.4243460221 44.999999987000002 5.7838178690899997e-17 -2.1268194316799998e-15 -1 +7 0 0 5 15 5 -149.93292772000001 10.4243460221 50.999999992600003 -149.72979585900001 12.377305741600001 50.999999992299998 -149.143201253 14.2903806133 50.999999991899998 -148.183220549 16.063008333599999 50.999999991599999 -145.61993911499999 19.1363425282 50.999999990900001 -142.08487263800001 21.0122689104 50.999999990299997 -140.15262669099999 21.586897126699998 50.999999989899997 -136.16693755700001 21.947558892 50.999999989199999 -132.34078781299999 20.774369680300001 50.999999988600003 -130.56816009299999 19.814388976899998 50.999999988200003 -127.494825898 17.251107542100002 50.999999987599999 -125.618899516 13.716041065400001 50.999999986900001 -125.04427130000001 11.783795118800001 50.999999986600002 -124.86394041699999 9.7909505515199999 50.999999986200002 -125.067072279 7.83799083202 50.999999985899997 + -19.634954084899999 6 -9.8174770424699993 3 0 3 9.8174770424699993 3 19.634954084899999 6 +1 -125.067072279 7.83799083202 44.999999987000002 5.7838178690899997e-17 -2.1268194316799998e-15 -1 +7 0 0 3 4 2 -125.065035529 7.8577248235099999 39.000000006199997 -125.06570922500001 7.8511462889699999 39.000000006199997 -125.06638814199999 7.8445682890499997 39.000000006199997 -125.067072279 7.83799083202 39.000000006199997 + 19.615115263100002 4 19.634954084899999 4 +2 -137.5 9.1311684270499995 50.999999990799999 5.7837690158399994e-17 -2.12681934891e-15 -1 0 -1 2.12681934891e-15 -1 -1.2301031852514658e-31 -5.7837690158399994e-17 12.5 +2 -137.5 9.1311684270499995 41.999999996299998 5.7837690158399994e-17 -2.12681934891e-15 -1 0 -1 2.12681934891e-15 -1 -1.2301031852514658e-31 -5.7837690158399994e-17 12.5 +1 -138.773443598 -3.3037960442399998 44.999999987000002 5.7838178690899997e-17 -2.1268194316799998e-15 -1 +2 -137.5 9.1311684270499995 38.999999994500001 5.7837690158399994e-17 -2.12681934891e-15 -1 0 -1 2.12681934891e-15 -1 -1.2301031852514658e-31 -5.7837690158399994e-17 12.5 +2 -137.5 9.1311684270499995 38.999999994500001 5.7837690158399994e-17 -2.12681934891e-15 -1 0 -1 2.12681934891e-15 -1 -1.2301031852514658e-31 -5.7837690158399994e-17 12.5 +7 0 0 1 2 2 -136.22655639999999 21.566132893300001 41.999999996299998 -161.19916561400001 24.1235354037 41.999999996299998 + -12.5516086474 2 12.5516086474 2 +7 0 0 1 2 2 -138.773443598 -3.3037960437399998 41.999999996299998 -163.759985554 -0.74496670486899996 41.999999996299998 + -12.558611452899999 2 12.558611452899999 2 +7 0 0 5 9 3 -157.64850820199999 12.0019382692 41.999999996299998 -157.34196309399999 12.5504036491 41.999999996299998 -156.82003613500001 12.9784890466 41.999999996299998 -156.14423603399999 13.169702776399999 41.999999996299998 -154.806545309 12.9873762627 41.999999996299998 -153.950374514 11.9435223449 41.999999996299998 -153.75916078500001 11.2677222434 41.999999996299998 -153.85032404099999 10.598876881200001 41.999999996299998 -154.15686914899999 10.050411501399999 41.999999996299998 + 1.1481745586300001 6 4.2897672122200001 3 7.4313598658200002 6 +7 0 0 5 9 3 -154.15686914899999 10.050411501399999 41.999999996299998 -154.46341425700001 9.5019461215399996 41.999999996299998 -154.98534121599999 9.0738607240500002 41.999999996299998 -155.66114131800001 8.8826469942599999 41.999999996299998 -156.998832042 9.0649735079500005 41.999999996299998 -157.855002837 10.108827425699999 41.999999996299998 -158.04621656699999 10.7846275272 41.999999996299998 -157.95505331000001 11.4534728894 41.999999996299998 -157.64850820199999 12.0019382692 41.999999996299998 + 7.4313598658100002 6 10.572952519399999 3 13.714545172999999 6 +1 -151.266714576 -2.0243813780600002 32.999999994200003 -0.99479715770132338 0.10187548787303312 -3.3946877250611036e-15 +2 -137.49999999600001 9.1311684221299991 32.999999994200003 2.9860183649199999e-15 -4.03497471773e-15 -1 0 -1 4.03497471773e-15 -1 -1.2048508609129673e-29 -2.9860183649199999e-15 12.5 +1 6523.4525678700002 -143.35858641600001 4518.6529413999997 -0.73134152221295778 0.30553578512298235 -0.60974376741096481 +2 6526.7251208400003 -140.11160739600001 4525.3469703999999 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 5.99999999994 +1 6521.9778879100004 -133.514166923 4525.3546370000004 -0.73134152219301962 0.30553578498500822 -0.60974376750401638 +2 -137.49999999600001 9.1311684221299991 32.999999994200003 2.9860183649199999e-15 -4.03497471773e-15 -1 0 -1 4.03497471773e-15 -1 -1.2048508609129673e-29 -2.9860183649199999e-15 12.5 +1 -148.712861006 22.844834150800001 32.999999994200003 -0.99479715770132338 0.10187548787303312 -3.679630166921196e-15 +2 6540.2549390000004 -145.764019418 4536.6272300999999 0.67084843793829319 0.48336709773221126 -0.56242210318024577 0.64246138354497484 2.7755575615628907e-17 0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 3 +2 6540.2549390000004 -145.764019418 4536.6272300999999 0.67084843793829319 0.48336709773221126 -0.56242210318024577 0.64246138354497484 2.7755575615628907e-17 0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 3 +2 -137.49999999600001 9.1311684221299991 32.999999994200003 2.9860183649199999e-15 -4.03497471773e-15 -1 0 -1 4.03497471773e-15 -1 -1.2048508609129673e-29 -2.9860183649199999e-15 12.5 +2 -137.49999999600001 9.1311684221299991 32.999999994200003 2.9860183649199999e-15 -4.03497471773e-15 -1 0 -1 4.03497471773e-15 -1 -1.2048508609129673e-29 -2.9860183649199999e-15 12.5 +2 -155.902688676 11.0261748853 32.999999994200003 2.9860183649199999e-15 -4.03497471773e-15 -1 0 -1 4.03497471773e-15 -1 -1.2048508609129673e-29 -2.9860183649199999e-15 2 +2 -155.902688676 11.0261748853 32.999999994200003 2.9860183649199999e-15 -4.03497471773e-15 -1 0 -1 4.03497471773e-15 -1 -1.2048508609129673e-29 -2.9860183649199999e-15 2 +1 -125.065035524 7.8577248230599999 35.999999996299998 2.75570357644e-15 -4.2209968853499998e-15 -1 +1 -125.00301579400001 8.8566035418200002 35.999999996299998 2.75570357644e-15 -4.2209968853499998e-15 -1 +1 -125.20676677 6.8670092278099997 35.999999996299998 2.75570357644e-15 -4.2209968853499998e-15 -1 +1 6521.45522024 -140.233254394 4513.6224938799996 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 +1 -138.773443598 -3.3037960487200002 35.999999996299998 2.75570357644e-15 -4.2209968853499998e-15 -1 +1 6519.9805402800002 -130.388834901 4520.3241894800003 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 +1 -136.226556397 21.566132893300001 35.999999996299998 2.8070303415000002e-15 -4.1935665606699999e-15 -1 +1 6538.7215262999998 -130.928766376 4536.8800396699999 0.73134152220185855 -0.30553578504594092 0.60974376746288206 +1 6541.79377621 -151.43797364700001 4522.9181738500001 0.73134152220185855 -0.30553578504594092 0.60974376746288206 +1 -154.15686914899999 10.050411501399999 33.999999992500001 1.20852993746e-13 -1.09153397432e-15 -1 +2 -155.902688676 11.0261748853 49.999999992399999 1.2085299515399999e-13 -1.09153403715e-15 -1 -1 0 -1.2085299515399999e-13 1.31915157702115e-28 1 -1.09153403715e-15 2 +1 -157.64850820199999 12.0019382692 33.999999992500001 1.20852993746e-13 -1.09153397432e-15 -1 +1 -154.15686914899999 10.050411501399999 33.999999992500001 1.20852993746e-13 -1.09153397432e-15 -1 +1 -157.64850820199999 12.0019382692 33.999999992500001 1.20852993746e-13 -1.09153397432e-15 -1 +2 -155.902688676 11.0261748853 23.499999994500001 1.2085299515399999e-13 -1.09153403715e-15 -1 -1 0 -1.2085299515399999e-13 1.31915157702115e-28 1 -1.09153403715e-15 2 +2 -155.902688676 11.0261748853 49.999999992399999 1.2085299515399999e-13 -1.09153403715e-15 -1 -1 0 -1.2085299515399999e-13 1.31915157702115e-28 1 -1.09153403715e-15 2 +2 -155.902688676 11.0261748853 23.499999994500001 1.2085299515399999e-13 -1.09153403715e-15 -1 -1 0 -1.2085299515399999e-13 1.31915157702115e-28 1 -1.09153403715e-15 2 +1 -9.1784735969900009 87.068658281400005 37.249999994 -5.3613679154799999e-15 -3.6173084730900004e-15 1 +1 -1.3778692005299999 98.259185198899999 50.999999993499998 -0.57184921635528985 -0.82035874698441591 5.208869543702641e-16 +1 -1.3778692005299999 98.259185198899999 23.499999994500001 0.57184921635528985 0.82035874698441591 5.7297564980729044e-15 +2 -41.992823476399998 109.942626936 23.499999994500001 -4.0715155394300002e-15 2.0148165554899999e-15 1 1 0 4.0715155394300002e-15 8.2033569147783615e-30 1 -2.0148165554899999e-15 40 +2 -41.992823476399998 109.942626936 50.999999993499998 -4.0715155394300002e-15 2.0148165554899999e-15 1 1 0 4.0715155394300002e-15 8.2033569147783615e-30 1 -2.0148165554899999e-15 40 +1 -25.0117471993 73.726014055999997 37.249999994500001 -4.0602442043400002e-15 2.2146786569100001e-15 1 +1 -124.37373182499999 33.447782462299998 37.249999994 -5.1675835329900002e-15 -3.3589292964400002e-15 1 +1 -137.204630861 34.769037033799997 23.499999994500001 0.99473992845615244 -0.1024327815450157 4.9577563142807594e-15 +1 -137.204630861 34.769037033799997 50.999999993499998 0.99473992845615244 -0.1024327815450157 4.9577563142807594e-15 +1 -103.295344286 37.020766720899999 37.249999994 -5.1675835329900002e-15 -3.3589292964400002e-15 1 +1 -64.153545742899993 55.373390388499999 50.999999993499998 0.90541532198995012 0.42452690692797662 6.0813358714896647e-15 +1 -64.153545742899993 55.373390388499999 23.499999994500001 0.90541532198995012 0.42452690692797662 6.1224259787296629e-15 +2 -120.27642056400001 73.237379600500006 23.499999994500001 -2.2933259066499999e-14 -5.3953122334099997e-15 1 1 0 2.2933259066499999e-14 -1.2373209319344824e-28 1 5.3953122334099997e-15 40 +2 -120.27642056400001 73.237379600500006 50.999999993499998 -2.2933259066499999e-14 -5.3953122334099997e-15 1 1 0 2.2933259066499999e-14 -1.2373209319344824e-28 1 5.3953122334099997e-15 40 +1 -148.32785824300001 -17.365812886200001 50.999999993499998 0.99473992845615244 -0.1024327815450157 4.5753861894107015e-15 +1 -148.32785824300001 -17.365812886200001 23.499999994500001 0.99473992845615244 -0.1024327815450157 4.8613478262507449e-15 +1 -142.148661989 -18.0021121258 37.249999994 -5.1675835329900002e-15 -3.4881188847699999e-15 1 +2 -146.24597324999999 -57.791709263999998 23.499999994500001 9.6659368965000009e-16 -9.5482086703000007e-15 1 0 1 9.5482086703000007e-15 -1 -9.2292382481733984e-30 9.6659368965000009e-16 40 +2 -146.24597324999999 -57.791709263999998 50.999999993499998 9.6659368965000009e-16 -9.5482086703000007e-15 1 0 1 9.5482086703000007e-15 -1 -9.2292382481733984e-30 9.6659368965000009e-16 40 +1 -124.531143095 -24.199059006399999 37.249999994500001 1.4764524379399999e-15 -9.5969408466300004e-15 1 +1 -14.3225999796 -106.441786845 50.999999994500001 -0.3275596318859868 0.94483050731796181 0 +1 -77.668300933899999 -54.491954931899997 50.999999994500001 -0.83981625644186431 0.54287075387791239 -2.6740230788895681e-15 +2 -52.520288927800003 -118.377501115 50.999999994500001 5.3319979771499996e-15 3.3284093715700001e-15 -1 -1 0 -5.3319979771499996e-15 -1.7747072036338342e-29 1 3.3284093715700001e-15 40 +2 -52.520288927800003 -118.377501115 23.499999994500001 5.3555698928500002e-15 3.2349796822300001e-15 -1 -1 0 -5.3555698928500002e-15 -1.732515979013245e-29 1 3.2349796822300001e-15 40 +1 -77.668300933899999 -54.491954931899997 23.499999994500001 -0.83981625644186431 0.54287075387791239 -2.7376902950495579e-15 +1 -14.3225999796 -106.441786845 23.499999994500001 -0.3275596318859868 0.94483050731796181 0 +2 -5.5 -4.4408920985e-16 0 1 0 0 -0 0 1 0 -1 0 5.00000000059 +2 -5.5 4.4408920985e-16 0 1 0 0 -0 0 1 0 -1 0 5.00000000059 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 10.5000000008 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 10.5000000008 +2 -5.5 0 0 1 0 0 -0 0 1 0 -1 0 2.5 +2 -5.5 0 0 1 0 0 -0 0 1 0 -1 0 2.5 +1 -14.7270686351 -105.27511584 37.249999994 -5.3613679154700003e-15 -3.6173084730900004e-15 1 +1 -30.8054587727 -84.784850857500004 37.249999994 -5.42596270964e-15 -3.6173084730900004e-15 1 +1 -69 16 4.16049991609 0 0 1 +2 -65 16 0 0 0 1 1 0 -0 -0 1 0 4 +1 -61 16 4.16049991609 0 0 1 +2 -65 16 7 0 0 1 1 0 -0 -0 1 0 4 +2 -65 16 0 0 0 1 1 0 -0 -0 1 0 4 +2 -65 16 7 0 0 1 1 0 -0 -0 1 0 4 +2 -65 -18 7 0 0 1 1 0 -0 -0 1 0 4 +2 -65 -18 7 0 0 1 1 0 -0 -0 1 0 4 +1 53.499751589699997 -45.000000000900002 50 0 0 1 +2 53.499751589699997 -11.999751589700001 0 0 0 1 1 0 -0 -0 1 0 33.000248411299999 +1 86.5 -12 50 0 0 1 +1 86.5 -1.99851834808 50 0 0 1 +2 60.500078944800002 -1.9983999996099999 0 0 0 1 1 0 -0 -0 1 0 25.999921055400002 +1 72.706232063000002 20.958205170700001 50 0 0 1 +1 47.082969087899997 34.5823357644 50 0 0 1 +2 5.2998818036899999 -44.0004740595 0 0 0 1 1 0 -0 -0 1 0 89.000474059599995 +1 23 43.222173221299997 50 0 0 1 +7 0 0 5 6 2 23 43.222181183300002 0 19.507530172599999 43.930901568800003 0 15.9795434532 44.464822943599998 0 12.427648101899999 44.8215902775 0 8.8637394700400005 45 0 5.2999999999999998 45 0 + 253.667619105 6 271.48631645500001 6 +1 5.2999999999999998 45 25 0 0 1 +1 -21.928932188099999 47.928932188099999 3.5 0 0 1 +1 -24.464466094100001 50.464466094099997 0 -0.70710678118654757 0.70710678118654757 0 +1 -27 53 3.5 0 0 1 +1 -78.862687876999999 16.500914749 25 0 0 1 +7 0 0 5 6 2 -78.862687876999999 16.500914749 0 -81.842187261500001 11.3402706638 0 -84.147352448999996 5.7902787984600002 0 -85.7105434594 -0.0314708573361 0 -86.494623900099995 -5.98978312823 0 -86.499977001199994 -11.948795860200001 0 + 365.97542723800001 6 395.77050293600001 6 +1 -86.499977001199994 -11.948795860200001 25 0 0 1 +1 -86.5 -14 50 0 0 1 +2 -55.499766644799998 -13.999766644799999 0 0 0 1 1 0 -0 -0 1 0 31.000233355999999 +1 -77.4202418693 -35.9202418693 50 0 0 1 +1 -68.880362803899999 -44.460120934599999 0 0.70710678118654757 -0.70710678118654757 0 +1 -60.340483738499998 -53 3.5 0 0 1 +1 -24.340483738500001 -53 3.5 0 0 1 +1 -21.804949832599998 -50.464466094099997 0 0.70710678118654757 0.70710678118654757 0 +1 -19.269415926699999 -47.928932188099999 3.5 0 0 1 +2 -68.458904109599999 -1 1.7763568394e-15 0 -0 1 1 0 0 -0 1 0 9 +1 -60.958904109599999 -1 1.5 0.70710678118654757 -1.0467283057893303e-16 -0.70710678118654757 +2 -68.458904109599999 -1 3 0 -0 1 1 0 0 -0 1 0 6 +1 -75.958904109599999 -1 1.5 -0.70710678118654757 0 -0.70710678118654757 +2 -68.458904109599999 -1 1.7763568394e-15 -5.2590727014699996e-31 -1.3322676295499999e-15 1 0 1 1.3322676295499999e-15 -1 7.0064923216185508e-46 -5.2590727014699996e-31 9 +2 -68.458904109599999 -1 3 -5.2590727014699996e-31 -1.3322676295499999e-15 1 0 1 1.3322676295499999e-15 -1 7.0064923216185508e-46 -5.2590727014699996e-31 6 +2 -6.4589041095899997 -1 -1.7763568394e-15 2.22044604925e-16 1.2819751242600001e-16 1 1 0 -2.22044604925e-16 -2.8465565998998952e-32 1 -1.2819751242600001e-16 11 +1 3.0410958904099998 -1 1.5 0.70710678118654757 -1.1514011363692635e-15 -0.70710678118654757 +2 -6.4589041095899997 -1 3 2.22044604925e-16 1.2819751242600001e-16 1 1 0 -2.22044604925e-16 -2.8465565998998952e-32 1 -1.2819751242600001e-16 8 +1 -15.958904109600001 -1 1.5 -0.70710678118654757 2.0934566115786606e-16 -0.70710678118654757 +2 -6.4589041095899997 -1 -5.3290705181999996e-15 -1.19524379579e-31 7.4014868308300001e-16 1 0 1 -7.4014868308300001e-16 -1 -8.8465812141709465e-47 -1.19524379579e-31 11 +2 -6.4589041095899997 -1 3 -1.19524379579e-31 7.4014868308300001e-16 1 0 1 -7.4014868308300001e-16 -1 -8.8465812141709465e-47 -1.19524379579e-31 8 +1 -32.527296022500003 -17.917643211200001 2.75 0.15239061262502063 0.083251371105611274 -0.98480775301213319 +2 -40 -22 5.5 0 0 -1 -1 0 -0 0 1 0 8.0302016061000003 +1 -47.472703977499997 -26.082356788799999 2.75 -0.15239061262502063 -0.083251371105611274 -0.98480775301213319 +2 -40 -22 -1.3322676295499999e-14 0 0 -1 -1 0 -0 0 1 0 9 +2 -40 -22 5.5 0 0 -1 -1 0 -0 0 1 0 8.0302016061000003 +2 -40 -22 -1.3322676295499999e-14 0 0 -1 -1 0 -0 0 1 0 9 +1 -32.527296022500003 24.082356788799999 2.75 0.15239061262502063 0.083251371105611274 -0.98480775301213319 +2 -40 20 5.5 0 0 -1 -1 0 -0 0 1 0 8.0302016061000003 +1 -47.472703977499997 15.9176432112 2.75 -0.15239061262502063 -0.083251371105611274 -0.98480775301213319 +2 -40 20 -1.3322676295499999e-14 0 0 -1 -1 0 -0 0 1 0 9 +2 -40 20 5.5 0 0 -1 -1 0 -0 0 1 0 8.0302016061000003 +2 -40 20 -1.3322676295499999e-14 0 0 -1 -1 0 -0 0 1 0 9 +2 -40 -22 5.5 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 -22 5.5 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 20 5.5 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 20 5.5 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +1 -69 -18 4.16049991609 0 0 1 +2 -65 -18 0 0 0 1 1 0 -0 -0 1 0 4 +1 -61 -18 4.16049991609 0 0 1 +2 -65 -18 0 0 0 1 1 0 -0 -0 1 0 4 +1 1.5410958904100001 -1 25 0 0 1 +1 -14.458904109600001 -1 25 0 0 1 +1 -46.799999999999997 -22 50 0 0 1 +1 -33.200000000000003 -22 50 0 0 1 +1 -46.799999999999997 20 50 0 0 1 +1 -33.200000000000003 20 50 0 0 1 +1 23.087975191200002 -9.4149638324599998 4 -0.15239061262502063 -0.083251371105611274 -0.98480775301213319 +2 33 -4 -7.1054273576e-15 0 0 -1 -1 0 -0 0 1 0 12 +1 42.912024808799998 1.41496383246 4 0.15239061262502063 0.083251371105611274 -0.98480775301213319 +2 33 -4 -7.1054273576e-15 0 0 -1 -1 0 -0 0 1 0 12 +1 -62.458904109599999 -1 20.5 0 0 1 +1 -74.458904109599999 -1 20.5 0 0 1 +1 -12.1983481148 -45 26 0 0 1 +2 -12.1983481148 -55 -7.1054273576e-15 0 -0 1 1 0 0 -0 1 0 10 +1 -42.340483738499998 -53 0 1 0 0 +1 -86.5 -12.9743979301 0 0 1 0 +1 -57.789931182099998 53 3.5 0 0 1 +1 -68.326309529599996 34.750457374500002 0 0.50000000000018996 0.86602540378432902 0 +1 -42.394965591099997 53 0 1 0 0 +2 -14.8578643763 55 0 0 0 1 1 0 -0 -0 1 0 10 +1 -14.8578643763 45 26 0 0 1 +1 -4.7789321881299998 45 0 -1 0 0 +1 59.8946005755 27.7702704676 0 -0.8829475928588979 0.46947156278594571 0 +1 86.5 -6.9992591740399996 0 0 -1 0 +1 20.650701737399999 -45 0 1 0 0 +2 6463.2932005888006 -155.03408944092087 4495.5361906238177 -0.67084843793832338 -0.48336709773219289 0.56242210318022545 -0.39635068152362185 0.87468690109425007 0.27897842624457225 -0.62679223876135548 -0.035764142434768081 -0.77836521989644014 7.600000000001538 +2 6463.2932005888006 -155.03408944092087 4495.5361906238177 0.67084843793832338 0.48336709773219289 -0.56242210318022545 -0.39635068152362185 0.87468690109425007 0.27897842624457225 0.62679223876135548 0.035764142434768081 0.77836521989644014 7.600000000001538 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 11.300000000000001 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 11.300000000000001 +2 6461.6839724343181 -128.35237813894761 4516.5480126948569 -0.67084843793832383 -0.483367097732192 0.56242210318022579 -0.39635068152362118 0.87468690109425062 0.27897842624457175 -0.62679223876135548 -0.035764142434768047 -0.77836521989644003 7.600000000001538 +2 6461.6839724343181 -128.35237813894761 4516.5480126948569 0.67084843793832383 0.483367097732192 -0.56242210318022579 -0.39635068152362118 0.87468690109425062 0.27897842624457175 0.62679223876135548 0.035764142434768047 0.77836521989644003 7.600000000001538 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 15.300000000000001 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 15.300000000000001 +1 6458.6717072547381 -121.70475769062989 4518.668248734316 0.39635068152274683 -0.87468690109431413 -0.2789784262456142 +1 6460.2809354092205 -148.38646899260314 4497.6564266632768 0.39635068152274822 -0.87468690109431324 -0.27897842624561514 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 9.3000000000000007 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 9.3000000000000007 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 12.199999999999999 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 12.199999999999999 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 8.5999999999999996 +1 3.9328544021799998 -7.19904169447 -2.25 0.083251371105611274 -0.15239061262502063 0.98480775301213319 +2 0 0 -4.5 0 0 1 1 0 -0 -0 1 0 7.8065285868099998 +1 -3.9328544021799998 7.19904169447 -2.25 -0.083251371105611274 0.15239061262502063 0.98480775301213319 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 8.5999999999999996 +2 0 0 -4.5 0 0 1 1 0 -0 -0 1 0 7.8065285868099998 +1 3.3559787702300001 -6.1430779332299998 4.5 0 0 1 +2 0 0 4 0 0 1 1 0 -0 -0 1 0 7 +1 -3.3559787702300001 6.1430779332299998 4.5 0 0 1 +2 0 0 4.4000000000000004 0 0 1 1 0 -0 -0 1 0 7 +2 0 0 4 0 0 1 1 0 -0 -0 1 0 7 +2 0 0 4.4000000000000004 0 0 1 1 0 -0 -0 1 0 7 +1 3.6346372044800002 -6.6531587756699997 5.2000000000000002 0.28179926116401238 -0.51583008754802262 0.80901699437503549 +2 8.881784197e-16 4.4408920985e-16 6 -1.6120923388500001e-15 -4.6295474197600002e-16 1 1 0 1.6120923388500001e-15 -7.4632579277378816e-31 1 4.6295474197600002e-16 8.1624680448099998 +1 -3.6346373534400001 6.6531586942900001 5.2000000000000002 -0.28179927271297639 0.51583008123895679 0.80901699437493213 +2 6.2172489379000002e-15 4.8849813083500001e-15 6 4.1604139758599998e-15 2.2728445137899998e-15 1 1 0 -4.1604139758599998e-15 -9.4559740801286408e-30 1 -2.2728445137899998e-15 8.1624680448099998 +1 5.4175085862300003 -9.9166829493600002 0.75 0 0 1 +1 -5.4175085862300003 9.9166829493600002 0.75 0 0 1 +2 0 0 1 0 0 1 1 0 -0 -0 1 0 11.300000000000001 +2 0 0 1 0 0 1 1 0 -0 -0 1 0 11.300000000000001 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 12 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 12 +2 -1.2570549911299999e-15 -3.5527136788e-15 1.5 0 0 1 1 0 -0 -0 1 0 11.800000000000001 +2 -1.2570549911299999e-15 -3.5527136788e-15 1.5 0 0 1 1 0 -0 -0 1 0 11.800000000000001 +2 5.6572213555299999 -10.3554742303 1 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.5 +2 -5.6572213555299999 10.3554742303 1 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.5 +2 2.87655323163 -5.2654953713400001 4 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 1 +2 -2.87655323163 5.2654953713400001 4 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 1 +2 -3.5527136788e-15 0 3.1339745962199999 0 -0 1 1 0 0 -0 1 0 6.5 +2 -3.1086244689500001e-15 -1.1102230246299999e-15 3.1339745962199999 0 0 1 1 0 -0 -0 1 0 6.5 +2 3.3559787702300001 -6.1430779332299998 2.2679491924300001 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 1 +2 -3.3559787702300001 6.1430779332299998 2.2679491924300001 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 1 +1 4.1230596320000004 -7.5472100322599998 0.34999999999999998 0 0 1 +1 -4.1230596320000004 7.5472100322599998 0.34999999999999998 0 0 1 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 8.5999999999999996 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 8.5999999999999996 +2 4.26688729358 -7.8104848008200003 0.40000000000000002 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -4.26688729358 7.8104848008200003 0.40000000000000002 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.29999999999999999 +2 8.881784197e-16 2.6645352590999998e-15 0.69999999999999996 0 -0 1 1 0 0 -0 1 0 8.9000000000000004 +2 -3.5527136788e-15 -3.3723024373e-15 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 8.9000000000000004 +1 4.45865750902 -8.1615178255800007 0.34999999999999998 0 0 1 +1 -4.45865750902 8.1615178255800007 0.34999999999999998 0 0 1 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 9.3000000000000007 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 9.3000000000000007 +2 0 1.7763568394e-15 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 9 +2 0 1.7763568394e-15 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 9 +2 4.3148298474400004 -7.8982430570100002 0.40000000000000002 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -4.3148298474400004 7.8982430570100002 0.40000000000000002 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.29999999999999999 +1 5.75310646325 -10.5309907427 3.75 0 0 1 +1 -5.75310646325 10.5309907427 3.75 0 0 1 +2 0 0 4.7999999999999998 0 0 1 1 0 -0 -0 1 0 12 +2 0 0 4.7999999999999998 0 0 1 1 0 -0 -0 1 0 12 +2 -1.5006201728799999e-15 0 6 0 0 1 1 0 -0 -0 1 0 10.800000000000001 +2 -1.5006201728799999e-15 0 6 0 0 1 1 0 -0 -0 1 0 10.800000000000001 +1 -5.4654511400899999 10.004441205599999 5.4000000000000004 -0.3390050494208432 0.62054458056371298 -0.70710678118667292 +1 5.4654511400899999 -10.004441205599999 5.4000000000000004 0.3390050494208432 -0.62054458056371298 -0.70710678118667292 +1 3.9243765598999998 -29.132958608500001 80.808519711499997 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 +2 -184.816290385 78.559544809100004 71.940032604899997 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279624 -0.88621493047104349 0 -0.036162210092231355 0.018904018393623257 0.9991671194799292 8 +1 11.336765704699999 -14.953519720999999 80.808519711499997 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 +7 0 0 5 18 6 -152.85424734200001 70.878345167500001 73.242140760200002 -152.40440126199999 70.643185353999996 71.856359673200004 -152.040878357 70.104939580500002 70.493988910300004 -151.781625284 69.297437013099994 69.240231039500003 -151.562577533 67.528381907599993 67.341004711899998 -151.865448047 65.301535780099996 66.078902471299998 -152.10074760500001 64.308201345300006 65.683083109999998 -152.768831656 62.450661810100002 65.264081910300007 -153.79453181900001 60.733702467199997 65.441493260200005 -154.328630293 60.006215598700003 65.652157755999994 -155.233607581 58.974614383800002 66.168138580900006 -156.168283202 58.158990836000001 66.931621618799994 -156.516366726 57.885939048600001 67.247541076800005 -157.65654748599999 57.083378130600003 68.389127462100006 -158.707897648 56.626267867300001 69.808383110600005 -159.356675376 56.475284819800002 70.900998086000001 -159.883900297 56.498828575600001 72.063096200700002 -160.266636487 56.698906280000003 73.242140760200002 + 0 6 10.435638109699999 3 18.0089635044 3 24.445007748199998 3 28.272101324800001 3 37.1509079804 6 +2 -184.816290385 78.559544809100004 71.940032604899997 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279624 -0.88621493047104349 0 -0.036162210092231355 0.018904018393623257 0.9991671194799292 8 +7 0 0 5 15 5 -160.266636487 56.698906280000003 73.242140760200002 -160.497591693 56.819639538300002 73.953613794399999 -160.67593403399999 57.004654006000003 74.671257579499994 -160.79673472100001 57.254185100299999 75.383558205900002 -160.97592117400001 58.173401927100002 77.419091438799995 -160.655434036 59.603894500400003 79.1685426879 -160.23936195600001 60.740030249199997 80.095136300500002 -159.139916712 63.260886512500001 81.335518726299995 -157.72763310400001 65.926398371499999 81.261647793899996 -156.99914500599999 67.211650963899999 80.872476452800001 -155.60748345900001 69.406422199600001 79.485631794300005 -154.347448697 70.702402317099995 77.169258554899997 -153.78325822100001 71.051967498300002 75.886712649399996 -153.280077095 71.100950297599994 74.553937935899995 -152.85424734200001 70.878345167500001 73.242140760200002 + 0 6 5.3577546835899996 3 15.734863303399999 3 26.144752002899999 3 36.023253540500001 6 +1 -231.49745743 -11.5985734727 62.184861709400003 0.046033930337705718 1.9088129959902372e-16 -0.99893987669812412 +1 -193.050006895 65.390129463700006 101.220455595 0.46239775054192084 0.88641653013784827 0.021308575554196355 +1 -151.24192412100001 142.08841299400001 64.035593885099999 0.042154877359099972 -0.0074330422468699949 -0.99908343805599931 +1 -189.68937465600001 65.099710057899998 25 0.46327432155297421 0.88621493047095057 -4.1050043898097715e-17 +2 -161.652574308 122.87029133199999 71.940032602499997 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279624 -0.88621493047104349 0 -0.036162210092231355 0.018904018393623257 0.9991671194799292 10.800000000000001 +2 -161.652574308 122.87029133199999 71.940032602499997 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279624 -0.88621493047104349 0 -0.036162210092231355 0.018904018393623257 0.9991671194799292 10.800000000000001 +2 -207.980006463 34.248798284999999 71.940032602499997 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279624 -0.88621493047104349 0 -0.036162210092231355 0.018904018393623257 0.9991671194799292 10.800000000000001 +2 -207.980006463 34.248798284999999 71.940032602499997 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279624 -0.88621493047104349 0 -0.036162210092231355 0.018904018393623257 0.9991671194799292 10.800000000000001 +2 -223.731333396 4.1174906495999997 71.940032608199999 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279624 -0.88621493047104349 0 -0.036162210092231355 0.018904018393623257 0.9991671194799292 8 +2 -223.731333396 4.1174906495999997 71.940032608199999 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279624 -0.88621493047104349 0 -0.036162210092231355 0.018904018393623257 0.9991671194799292 8 +1 -137.408730252 139.649247686 103.784560515 -0.98379516781294174 0.17346963157598971 -0.045336019992897311 +1 -219.92888708199999 -18.541900513600002 99.981801970899994 0.88547681931885824 -0.46288846939492589 0.040805236798493467 +1 -164.28761044000001 55.717217708500002 102.545906891 0.46239775054192084 0.88641653013784827 0.021308575554196355 +1 -121.524901767 136.848500167 94.932861893699993 0.042154877359099972 -0.0074330422468699949 -0.99908343805599931 +7 0 0 5 15 5 -121.12131744600001 136.777337362 85.367790528100002 -121.004387159 136.756719398 82.596507093400007 -120.639332564 136.69235042299999 79.836018639700001 -120.027778861 136.58451700500001 77.117007058300004 -118.250365429 136.271111061 71.575201279300003 -115.49337214099999 135.78497875900001 66.458208671899996 -113.80483640200001 135.48724435 63.935702297799999 -109.916784341 134.80167586900001 59.166984744799997 -105.218607887 133.97326060099999 55.2184797934 -102.65192885 133.52068583600001 53.446719532700001 -96.813062564099994 132.491136173 50.173110037800001 -90.4504459682 131.369235199 48.111179032499997 -86.942926310299995 130.75076484799999 47.370373008199998 -83.386097855599999 130.123600025 47 -79.829269107900004 129.49643515099999 47 + 0 6 19.613910456100001 3 41.049936781 3 63.203626805399999 3 88.742192269499995 6 +1 -74.222610261 128.50782992500001 47 -0.98480775301218992 0.1736481776670335 0 +1 -68.615951414099996 127.51922469900001 36 0 0 1 +1 -109.10541261900001 134.658609144 25 -0.98480775301218992 0.1736481776670335 0 +2 -135.088269728 108.98363725 73.164189706399995 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279624 -0.88621493047104349 0 -0.036162210092231355 0.018904018393623257 0.9991671194799292 20 +2 -135.088269728 108.98363725 73.164189706399995 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279624 -0.88621493047104349 0 -0.036162210092231355 0.018904018393623257 0.9991671194799292 20 +1 -124.65709808299999 130.01360916499999 85.367790528100002 0.46327432155297421 0.88621493047095057 9.3098593386494819e-16 +1 -206.29590448600001 -25.485227554600002 92.980835525499998 0.046033930337705718 0 -0.99893987669812412 +1 -197.56976057599999 -9.4637741372700006 85.367790528100002 0.46327432155297421 0.88621493047095057 -3.930314964369781e-16 +2 -181.41570188399999 20.362144203100002 73.164189706399995 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279624 -0.88621493047104349 0 -0.036162210092231355 0.018904018393623257 0.9991671194799292 20 +2 -181.41570188399999 20.362144203100002 73.164189706399995 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279624 -0.88621493047104349 0 -0.036162210092231355 0.018904018393623257 0.9991671194799292 20 +1 -158.69366284700001 64.903780124299999 85.367790528100002 0.46327432155297421 0.88621493047095057 2.0798857928898841e-16 +1 -51.251133647400003 126 60.7489666297 0 0 1 +2 -51.251133647400003 226 47 0 0 1 1 0 -0 -0 1 0 100 +2 -51.251133647400003 226 25 0 0 1 1 0 -0 -0 1 0 100 +1 -181.68119892999999 9.68131218051 55.790377844200002 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 +2 -192.041423716 25.9168058359 72.674526864800001 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279624 -0.88621493047104349 0 -0.036162210092231355 0.018904018393623257 0.9991671194799292 20 +1 -174.066390283 27.339868470599999 90.864443463000001 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 +7 0 0 5 27 9 -173.46498632500001 5.3862363594399998 56.169003793100003 -172.78462459599999 5.7818520379300002 55.822114264 -172.10833725399999 6.2078228061000003 55.501852530699999 -171.439879214 6.6671573607700001 55.2094504644 -170.08582513900001 7.6930450235099999 54.667140027899997 -168.82332195699999 8.8877712363800008 54.266363774600002 -168.20426733900001 9.5538346034899995 54.100462737100003 -166.811988047 11.295774569600001 53.809090024299998 -165.757969307 13.2942088231 53.805592350399998 -165.286926241 14.541953535999999 53.911619532099998 -164.47127700199999 17.705078925399999 54.4162041453 -164.39229532100001 20.870945908100001 55.444270339699997 -164.52757972699999 22.691725557400002 56.2067212109 -164.91166195299999 25.359809569399999 57.573685859000001 -165.49896293699999 27.8050633579 59.233929496400002 -165.72228361200001 28.624227790100001 59.844211565499997 -166.58071191600001 31.446317616000002 62.152429379499999 -167.61347606300001 33.824104677500003 64.889271968900005 -168.404359508 35.258578528000001 67.076840479300003 -169.65045616399999 36.881744296000001 70.729146419800003 -170.91112191400001 37.462682273299997 74.633883657599995 -171.34718771799999 37.528600834899997 76.003463620800005 -172.24074701000001 37.373365925000002 78.817404044100002 -173.13054355200001 36.630801744999999 81.539073298399998 -173.587757431 36.097075468299998 82.8897727417 -174.04923699599999 35.424062323500003 84.171461367000006 -174.520310876 34.628387921600002 85.367790528100002 + 0 6 6.0816781931500001 3 12.5831470001 3 21.9141293383 3 35.8140367166 3 43.197105793399999 3 62.268627292799998 3 72.382393043199997 3 83.074006148600006 6 +2 -192.041423716 25.9168058359 72.674526864800001 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279624 -0.88621493047104349 0 -0.036162210092231355 0.018904018393623257 0.9991671194799292 20 +7 0 0 5 15 5 -173.46498632500001 5.3862363594399998 56.169003793100003 -174.60205714099999 4.72505419244 56.748751217200002 -175.75050798999999 4.1486581662499997 57.402874351999998 -176.89152800700001 3.6437103529099999 58.125074146199999 -180.05080852200001 2.4029373627399999 60.343463224300002 -182.97828042800001 1.64307765291 63.0734124831 -184.70865763899999 1.33257710374 65.037750331500007 -187.065509639 1.1611822568400001 68.432508861000002 -188.689654195 1.5473103416 72.181200416199999 -189.16865685100001 1.7646499247 73.573264402800007 -190.01429807599999 2.4699823516100001 76.894236248499993 -190.18159205699999 3.6384602039799998 80.203239934600006 -190.045671379 4.46714914934 82.049837633099997 -189.70356039800001 5.4441294419600004 83.783649624999995 -189.19444697399999 6.5576792800100003 85.367790528100002 + 0 6 10.164150172499999 3 28.611910499699999 3 39.071116265800001 3 53.228609196299999 6 +1 -135.35376677400001 98.302805227600004 55.790377844200002 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 +2 -145.71399156000001 114.538298883 72.674526864800001 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279624 -0.88621493047104349 0 -0.036162210092231355 0.018904018393623257 0.9991671194799292 20 +1 -127.73895812799999 115.961361518 90.864443463000001 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 +7 0 0 5 27 9 -127.13755417 94.007729406500005 56.169003793100003 -126.457192441 94.403345084999998 55.822114264100001 -125.78090509899999 94.829315853099999 55.501852530800001 -125.112447058 95.288650407899993 55.209450464299998 -123.75839298299999 96.314538070699996 54.667140027899997 -122.495889801 97.509264283500002 54.266363774600002 -121.876835183 98.175327650499995 54.100462737100003 -120.484555892 99.9172676166 53.809090024299998 -119.430537152 101.91570187000001 53.805592350399998 -118.95949408600001 103.163446583 53.911619532099998 -118.143844847 106.326571972 54.4162041453 -118.06486316599999 109.492438955 55.444270339699997 -118.20014757200001 111.313218604 56.206721210799998 -118.58422979700001 113.98130261599999 57.573685859000001 -119.171530782 116.426556405 59.233929496400002 -119.394851457 117.24572083699999 59.844211565400002 -120.25327976 120.067810663 62.152429379399997 -121.28604390700001 122.445597725 64.889271968800003 -122.076927353 123.880071575 67.076840479300003 -123.323024008 125.503237343 70.729146419599999 -124.58368975899999 126.08417532 74.633883657400006 -125.019755562 126.15009388199999 76.003463620800005 -125.913314855 125.994858972 78.817404044 -126.803111397 125.252294792 81.539073298199995 -127.260325276 124.718568515 82.889772741800002 -127.72180484099999 124.04555537100001 84.171461367000006 -128.192878721 123.249880969 85.367790528100002 + 0 6 6.0816781923700001 3 12.5831469996 3 21.9141293379 3 35.814036716700002 3 43.197105793600002 3 62.268627293000002 3 72.382393042800004 3 83.074006147999995 6 +2 -145.71399156000001 114.538298883 72.674526864800001 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279624 -0.88621493047104349 0 -0.036162210092231355 0.018904018393623257 0.9991671194799292 20 +7 0 0 5 15 5 -127.13755417 94.007729406500005 56.169003793100003 -128.274624985 93.346547239700001 56.748751216999999 -129.423075834 92.770151213700004 57.402874351599998 -130.56409585099999 92.265203400499999 58.125074145500001 -133.723376366 91.024430410299999 60.343463223299999 -136.650848271 90.264570700299998 63.0734124815 -138.38122548199999 89.954070150999996 65.037750329999994 -140.73807748300001 89.782675303900007 68.4325088593 -142.36222203899999 90.168803388499995 72.181200414599999 -142.84122469499999 90.386142971500007 73.573264401000003 -143.68686592099999 91.091475398300005 76.894236247099997 -143.85415990199999 92.259953250699994 80.203239933700004 -143.718239224 93.088642196099997 82.049837632500001 -143.37612824199999 94.065622488800003 83.783649624600002 -142.867014818 95.179172327100005 85.367790528100002 + 0 6 10.164150169299999 3 28.6119104964 3 39.0711162634 3 53.228609196599997 6 +1 -2.6255668236999998 126 25 1 0 0 +1 -2.6255668236999998 126 47 1 0 0 +1 46 126 36 0 0 1 +2 -192.041423716 25.9168058359 72.674526864800001 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279624 -0.88621493047104349 0 -0.036162210092231355 0.018904018393623257 0.9991671194799292 10.800000000000001 +2 -192.041423716 25.9168058359 72.674526864800001 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279624 -0.88621493047104349 0 -0.036162210092231355 0.018904018393623257 0.9991671194799292 10.800000000000001 +2 -145.71399156000001 114.538298883 72.674526864800001 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279624 -0.88621493047104349 0 -0.036162210092231355 0.018904018393623257 0.9991671194799292 10.800000000000001 +2 -145.71399156000001 114.538298883 72.674526864800001 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279624 -0.88621493047104349 0 -0.036162210092231355 0.018904018393623257 0.9991671194799292 10.800000000000001 +1 5.2493433871799997 -109 25 -1 0 0 +1 29 -109 36 0 0 1 +1 4.7424327657000003 -109 47 -1 0 0 +1 -19.008223847099998 -109 36 0.046033930337705718 0 -0.99893987669812412 +1 61 -74 25 0 -1 0 +1 61 -71 36 0 0 1 +1 61 -74 47 0 -1 0 +1 61 -77 36 0 0 1 +1 -3 -39 25 1 0 0 +1 -35 -39 36 0 0 1 +1 -3 -39 47 1 0 0 +1 29 -39 36 0 0 1 +2 -35 -1 47 0 0 1 1 0 -0 -0 1 0 38 +7 0 0 4 5 2 -49.736067752099999 -36.026394436300002 47 -50.479126741400002 -35.7137796843 41.945615638900001 -51.146856848600002 -35.408235660700001 37.061234080299997 -51.758323053300003 -35.110980183899997 32.366980801399997 -52.321504791400002 -34.822558622300001 27.872012325099998 + 0 5 49.700651350999998 5 +7 0 0 4 5 2 -53.253713960699997 -34.328695243600002 24.999999782500002 -52.880882499400002 -34.532890421399998 25.639330330100002 -52.602005686200002 -34.678399584799998 26.3362623891 -52.420312051499998 -34.771956583399998 27.083393640299999 -52.321504791400002 -34.822558622300001 27.872012325099998 + 2.2678469949000002 5 10.9476347047 5 +2 -35 -1 25 0 0 1 1 0 -0 -0 1 0 38 +7 0 0 1 2 2 -83.499905891500006 -35.711612447599997 47 -54.529075355499998 -34.137145451000002 25 + 616.271919411 2 652.72066405099997 2 +7 0 0 4 5 2 -83.499905891500006 -35.711612447599997 47 -81.852995593100005 -35.943401125400001 47 -80.198674478100003 -36.0955635734 46.999988721800001 -78.551834838299996 -36.1663993887 47 -76.904212994600002 -36.158257606900001 47 + 0 5 10.926265986200001 5 +7 0 0 1 2 2 -76.904212994600002 -36.158257606900001 47 -52.321504791400002 -34.822558622300001 27.872012325099998 + 617.19015490799995 2 648.33392138800002 2 +7 0 0 3 4 2 -54.529075355499998 -34.137145451000002 25 -54.104929958699998 -34.208933387400002 25 -53.679520316199998 -34.272817897499998 24.999999841000001 -53.253713129099999 -34.328696278800003 24.999999479500001 + 0 4 2.2696059441599998 4 +7 0 0 1 2 2 -106.392449394 -19.986649389099998 47 -75.815867327500001 -19.343724987800002 25 + 614.82290996400002 2 652.320182252 2 +7 0 0 5 6 2 -106.392449394 -19.986649389099998 47 -104.033650568 -25.006664790999999 47 -100.206913625 -29.457230042999999 46.999992449499999 -95.105282725500004 -32.799378135600001 47.000006421800002 -89.396772204200005 -34.881677990199996 47 -83.499905891500006 -35.711612447599997 47 + 0 6 50.222363377199997 6 +7 0 0 5 6 2 -75.815867327500001 -19.343724987800002 25 -73.264451793099994 -23.977373211300002 25 -69.603178662800005 -28.0436462746 24.9999954108 -65.005622592199998 -31.189945618500001 25.0000030647 -59.863497947900001 -33.234277533499998 25 -54.529075355499998 -34.137145451000002 25 + 0 6 48.967775578000001 6 +7 0 0 1 2 2 -109.721292355 0.25670752510099998 47 -79.653715138300001 -0.12722194784900001 25 + 623.27149929699999 2 660.18367645900003 2 +7 0 0 4 5 2 -109.721292355 0.25670752510099998 47 -110.30187060999999 -4.9271565304199996 47 -109.92763970599999 -10.229025220500001 46.9999983274 -108.577064611 -15.337333661000001 47 -106.392449394 -19.986649389099998 47 + 0 5 36.350659671899997 5 +7 0 0 4 5 2 -79.653715138300001 -0.12722194784900001 25 -80.195375734999999 -5.0778859281999997 25 -79.721695187600005 -10.151902611000001 24.9999995045 -78.206434712700002 -15.002195088300001 25 -75.815867327500001 -19.343724987800002 25 + 0 5 35.837456250599999 5 +7 0 0 1 2 2 -94.466982387300007 36.170422670599997 47 -65.463960986199993 34.011187028999998 25 + 655.43433912 2 691.400773082 2 +7 0 0 3 4 2 -94.466982387300007 36.170422670599997 47 -97.818429959200003 30.357185359700001 47 -101.16717900099999 24.546326621999999 47 -104.51653235400001 18.732245327699999 47 + 0 4 34.898383190099999 4 +7 0 0 1 2 2 -104.51653235400001 18.732245327699999 47 -75.060655596199993 17.485931432699999 25 + 653.67644425499998 2 690.97764348299995 2 +7 0 0 3 4 2 -65.463960986199993 34.011187028999998 25 -68.669936325600005 28.4911828947 25 -71.864213652000004 22.990697546100002 25 -75.060655596199993 17.485931432699999 25 + 0 4 34.297045389899999 4 +7 0 0 3 4 2 -40.007548396799997 51.405037581199998 26.583621928399999 -40.4818797426 51.197937843699997 25.989581684299999 -41.047932162899997 50.942931273699998 25.461214366 -41.6883620419 50.637299521300001 24.9999955951 + 0 4 6.1544842320599997 4 +7 0 0 5 15 5 -18 56 34.666900496399997 -19.487480199299998 56 35.299302083500002 -20.997091090800001 55.949713696700002 35.752344966499997 -22.444237913199999 55.845783474100003 35.977446418200003 -25.064226208499999 55.578728837699998 36.087865531299997 -27.303063967100002 55.223600977300002 35.702942418900001 -28.318933837199999 55.036681207900003 35.430507994199999 -30.2711733563 54.634222978899999 34.7422795341 -31.969080430999998 54.207386487800001 33.850069531800003 -32.790002201599997 53.9835920716 33.351671543199998 -35.005315920500003 53.336418409899998 31.8395164939 -36.8859415282 52.678227460899997 30.133048792 -38.006102347300001 52.251384611399999 28.9793707555 -39.042257999 51.826496946500001 27.792545314600002 -40.007548396799997 51.405037581199998 26.583621928399999 + 0 6 10.960430970399999 3 21.5231311617 3 32.803697821500002 3 53.792863221099999 6 +1 -18 56 32.610000000200003 0 0 1 +2 -18 1 25 0 0 1 1 0 -0 -0 1 0 55 +1 -6.5484704886299996 56 25 -1 0 0 +7 0 0 5 6 2 4.9030600048900004 56 24.9999995885 0.343719841252 56 26.910393337399999 -4.2283926160499998 56 28.833117016399999 -8.8109380260699997 56 30.7672523074 -13.4022469732 56 32.712167712599999 -18 56 34.666900496399997 + 12.1243615709 6 46.0026980309 6 +7 0 0 1 2 2 -13.298981617500001 59.831779503699998 47 9.5158183786899997 56.513204642600002 25 + 710.59217419499998 2 741.80333741499999 2 +7 0 0 5 6 2 -13.298981617500001 59.831779503699998 47 -23.418653306100001 58.675296854499997 47 -33.644096160399997 57.505701016000003 47.000003127299998 -43.964397253500003 56.321738149300003 47.000008313599999 -54.232542909000003 55.141001629400002 47 -64.528004647399996 53.9533765786 47 + 0 6 85.492700251100004 6 +7 0 0 1 2 2 -64.528004647399996 53.9533765786 47 -40.007548396799997 51.405037581199998 26.583621928399999 + 704.750695683 2 737.42116683799998 2 +7 0 0 3 4 2 9.5158183786899997 56.513204642600002 25 7.98128615233 56.342488106099999 25 6.4436146490999997 56.171412924899997 25.000000160799999 4.9030571868299999 56.0000001091 25.000000862499999 + 0 4 8.1123864679299995 4 +7 0 0 1 2 2 -4.3528798563100004 59.512434005899998 47 17.855219074499999 56.190243308200003 25 + 730.36218505099998 2 761.79506416599997 2 +7 0 0 3 4 2 -4.3528798563100004 59.512434005899998 47 -4.5447146139500001 59.545613276499999 47 -4.7450914944999996 59.579908675799999 47 -4.9401900315500002 59.612952290199999 47 + 0 4 1.00424895475 4 +7 0 0 1 2 2 -4.9401900315500002 59.612952290199999 47 17.307986786600001 56.2844833029 25 + 730.30827778499997 2 761.77706325300005 2 +7 0 0 3 4 2 17.855219074499999 56.190243308200003 25 17.6769274344 56.221066817599997 25 17.489801402299999 56.2532926811 25 17.307986786600001 56.2844833029 25 + 0 4 0.97955934883499995 4 +7 0 0 5 6 2 18.9556392583 55.999999929399998 25.000000000899998 18.376836841500001 55.999999319200001 29.255727284999999 17.786300568000001 55.999999472799999 33.591697398400001 17.181951931 56.000001921699997 38.023172516499997 16.572485057000002 56 42.486585483399999 15.955363183699999 56 47 + 2.7419015286600001 6 48.940553981900003 6 +7 0 0 5 6 2 15.9553633187 55.9999999761 47.000000022599998 12.0220553834 56.680296605800002 47.000000353700003 7.9957173504599997 57.3766702247 47.000011255499999 3.8731548847199999 58.089685017599997 46.999994377900002 -0.23472032195 58.800167214799998 47 -4.3528798563100004 59.512434005899998 47 + 1.4093186226300001 6 37.146950515100002 6 +7 0 0 3 4 2 18.9556392583 55.999999929399998 25.000000000899998 18.588860641699998 56.063409513800003 25.000000000299998 18.2220502865 56.126824605300001 25 17.855219074499999 56.190243308200003 25 + 32.8640756872 4 34.868090442899998 4 +1 32.477819423 56 25 -1 0 0 +1 46 56 36 0 0 1 +1 30.9776815918 56 47 -1 0 0 +1 78 91 25 0 -1 0 +1 78 94 36 0 0 1 +1 78 91 47 0 -1 0 +1 78 88 36 0 0 1 +2 26 -74 25 0 0 1 1 0 -0 -0 1 0 15 +1 6453.2342608899999 -126.50574131899999 4390.7068128199999 0.67084843793829319 0.48336709773221126 -0.56242210318024577 +2 6462.4569387499996 -133.49422555699999 4376.1430461 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 15 +1 11 -74 98.658673020999998 0 0 1 +2 6462.4569387499996 -133.49422555699999 4376.1430461 0.67084843793829319 0.48336709773221126 -0.56242210318024577 0.64246138354497484 2.7755575615628907e-17 0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 15 +1 41 -74 98.658673020999998 0 0 1 +2 26 -74 47 0 0 1 1 0 -0 -0 1 0 15 +2 26 -74 25 0 0 1 1 0 -0 -0 1 0 15 +1 6444.1074830999996 -134.228226858 4373.1835327199997 0.67084843793829319 0.48336709773221126 -0.56242210318024577 +2 6462.4569387499996 -133.49422555699999 4376.1430461 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 15 +2 26 -74 47 0 0 1 1 0 -0 -0 1 0 15 +7 0 0 1 2 2 6464.3002923100003 -145.799751431 4367.7659296100001 6449.5416222200001 -156.43382572100001 4380.1392121700001 + -10.9999999985 2 10.9999999985 2 +2 43 91 25 0 0 1 1 0 -0 -0 1 0 15 +7 0 0 1 2 2 6554.3990997999999 -106.53792974 4508.97751539 6539.6404382000001 -117.172007576 4521.3508050299997 + -10.9999999985 2 10.9999999985 2 +2 6556.2424521100002 -118.843455093 4500.6003978600002 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 15 +1 28 91 98.658673020999998 0 0 1 +2 6556.2424521100002 -118.843455093 4500.6003978600002 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 15 +1 58 91 98.658673020999998 0 0 1 +2 43 91 47 0 0 1 1 0 -0 -0 1 0 15 +2 43 91 25 0 0 1 1 0 -0 -0 1 0 15 +1 6537.8929964600002 -119.577456394 4497.6408844899997 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 +2 6556.2424521100002 -118.843455093 4500.6003978600002 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 15 +2 43 91 47 0 0 1 1 0 -0 -0 1 0 15 +7 0 0 1 2 2 6558.08579835 -131.14897791199999 4492.2232752800001 6543.3271408999999 -141.78305747600001 4504.5965683699997 + -10.9999999985 2 10.9999999985 2 +2 -120 18.631168425399999 25 0 0 1 1 0 -0 -0 1 0 15 +1 -135 18.631168425399999 98.658673020999998 0 0 1 +1 -105 18.631168425399999 98.658673020999998 0 0 1 +2 -120 18.631168425399999 47 0 0 1 1 0 -0 -0 1 0 15 +2 -120 18.631168425399999 25 0 0 1 1 0 -0 -0 1 0 15 +2 -120 18.631168425399999 47 0 0 1 1 0 -0 -0 1 0 15 +7 0 0 4 5 2 -105.29962272900001 15.648064659099999 46.4153639548 -105.632552451 14.0074269529 46.114341953699999 -106.23014572 12.3092139031 46.0857770442 -107.14684996299999 10.685407662199999 46.413424155800001 -108.28851457099999 9.2588096480399997 46.999999938800002 + 0 5 12.2619456766 5 +7 0 0 3 4 2 -105.29962272900001 15.648064659099999 46.4153639548 -105.14912536200001 16.389697617100001 46.551437751999998 -105.05971231300001 17.118468824200001 46.750381314400002 -105.021685957 17.824875409600001 47.000000024199998 + 0 4 4.1562676711300002 4 +2 -120 18.631168425399999 47 0 0 1 1 0 -0 -0 1 0 15 +1 -171.657004699 -27.821840951999999 29 0 0 1 +2 -156.394413507 1.4365477612899999 33 0 0 1 1 0 -0 -0 1 0 33 +1 -185.63950621199999 16.724600372499999 29 0 0 1 +2 -156.394413507 1.4365477612899999 25 0 0 1 1 0 -0 -0 1 0 33 +1 -139.99738309599999 104.035139899 29 0 0 1 +2 -110.752290391 88.747087288100005 33 0 0 1 1 0 -0 -0 1 0 33 +1 -105.021900528 121.24574313700001 29 0 0 1 +2 -110.752290391 88.747087288100005 25 0 0 1 1 0 -0 -0 1 0 33 +1 -75.875670868200004 116.10647646300001 25 -0.98480775301218992 0.1736481776670335 0 +1 -46.729441208399997 110.96720978800001 29 0 0 1 +1 -75.875670868200004 116.10647646300001 33 -0.98480775301218992 0.1736481776670335 0 +1 -7.3818363913700002 109.18971689 25 -1 0 0 +1 11.648931638600001 109.18971689 29 0 0 1 +1 -7.3818363913700002 109.18971689 33 -1 0 0 +1 -26.412604421400001 109.18971689 29 0 0 1 +1 27.0394066749 114.005662992 29 0 0 1 +2 43.0000067844 91.000000406799998 33 -2.42449485333e-16 1.54427894649e-16 1 1 0 2.42449485333e-16 3.7440963578708796e-32 1 -1.54427894649e-16 28.000022622300001 +1 27.0394070559 67.994337556999994 29 0 0 1 +2 43.0000067844 91.000000406799998 25 -2.42449485333e-16 1.54427894649e-16 1 1 0 2.42449485333e-16 3.7440963578708796e-32 1 -1.54427894649e-16 28.000022622300001 +2 11.6489385447 45.810305040400003 33 6.8809326685900004e-16 -2.15320142142e-16 -1 -1 0 -6.8809326685900004e-16 1.4816034002703301e-31 1 -2.15320142142e-16 32.999977939600001 +1 30.459534808200001 72.924139373200006 29 8.881784197e-16 0 -1 +2 11.6489385447 45.810305040400003 25 6.8809326685900004e-16 -2.15320142142e-16 -1 -1 0 -6.8809326685900004e-16 1.4816034002703301e-31 1 -2.15320142142e-16 32.999977939600001 +1 11.648931638600001 78.810282979999997 29 8.881784197e-16 0 -1 +2 11.6489417921 136.18968819400001 33 -6.8809311938399995e-16 -2.1532061342599999e-16 -1 -1 0 6.8809311938399995e-16 -1.4816063255997271e-31 1 -2.1532061342599999e-16 32.999970837799999 +1 11.648931638600001 103.18971735700001 29 -8.881784197e-16 0 -1 +2 11.6489417921 136.18968819400001 25 -6.8809311938399995e-16 -2.1532061342599999e-16 -1 -1 0 6.8809311938399995e-16 -1.4816063255997271e-31 1 -2.1532061342599999e-16 32.999970837799999 +1 30.459534983699999 109.075860374 29 -8.881784197e-16 0 -1 +2 -26.412604421400001 226.18971689 33 0 0 1 1 0 -0 -0 1 0 123 +1 -47.7713302744 105.05836327 29 0 0 1 +2 -26.412604421400001 226.18971689 25 0 0 1 1 0 -0 -0 1 0 123 +1 -26.412604421400001 103.18971689 29 0 0 1 +1 -134.68009351399999 101.25549397 29 0 0 -1 +1 -157.50115507199999 57.600224206599997 25 0.46327432155297421 0.88621493047095057 0 +1 -180.322216629 13.9449544432 29 0 0 -1 +1 -157.50115507199999 57.600224206599997 33 0.46327432155297421 0.88621493047095057 0 +2 26.000006838800001 -73.999999580199997 33 8.0560641241100002e-17 1.55078953221e-16 1 0 1 -1.55078953221e-16 -1 1.249325991448231e-32 8.0560641241100002e-17 28.000022896800001 +1 9.9010830470000002 -96.909079329700006 29 0 0 1 +2 26.000006838800001 -73.999999580199997 25 8.0560641241100002e-17 1.55078953221e-16 1 0 1 -1.55078953221e-16 -1 1.249325991448231e-32 8.0560641241100002e-17 28.000022896800001 +1 9.9010826500999993 -51.090920109599999 29 0 0 1 +2 -40.537227982799998 -58.998719344500003 33 -1.3304992167399999e-15 -3.5282762578899999e-15 1 0 1 3.5282762578899999e-15 -1 4.6943687975649828e-30 -1.3304992167399999e-15 33.001288613 +1 -55.800139934100002 -88.258394135700001 29 -1.7763568394e-15 -3.5527136788e-15 1 +2 -40.537227982799998 -58.998719344500003 25 -1.3304992167399999e-15 -3.5282762578899999e-15 1 0 1 3.5282762578899999e-15 -1 4.6943687975649828e-30 -1.3304992167399999e-15 33.001288613 +1 -40.537545913499997 -92.000007956000005 29 -1.7763568394e-15 -3.5527136788e-15 1 +1 -23.080161257499999 -86 25 -1 0 0 +1 -5.62277660168 -86 29 0 0 1 +1 -23.080161257499999 -86 33 -1 0 0 +1 -40.537545913400002 -86 29 0 0 1 +2 -5.6227721777599999 -118.999981699 33 -1.61913385718e-16 1.2643483048700001e-15 -1 0 -1 -1.2643483048700001e-15 -1 -2.0471491476831579e-31 1.61913385718e-16 32.999981984999998 +1 13.350851670100001 -91.999974123699999 29 -2.22044604925e-16 0 -1 +2 -5.6227721777599999 -118.999981699 25 -1.61913385718e-16 1.2643483048700001e-15 -1 0 -1 -1.2643483048700001e-15 -1 -2.0471491476831579e-31 1.61913385718e-16 32.999981984999998 +1 13.3508519171 -56.0000262318 29 2.22044604925e-16 -8.881784197e-16 -1 +2 -5.6227708008399997 -29.000017928999998 33 1.78531040415e-16 -1.15668762155e-15 -1 0 -1 1.15668762155e-15 -1 -2.0650464451047327e-31 -1.78531040415e-16 32.999981930200001 +1 -5.62277660168 -61.999999859200003 29 4.4408920985e-16 -8.881784197e-16 -1 +2 -5.6227708008399997 -29.000017928999998 25 1.78531040415e-16 -1.15668762155e-15 -1 0 -1 1.15668762155e-15 -1 -2.0650464451047327e-31 -1.78531040415e-16 32.999981930200001 +7 0 0 3 4 2 -76.904212994600002 -36.158257606900001 47 -67.776531719399998 -36.113153034600003 47 -58.717493943299999 -36.069213853599997 47.000003722099997 -49.736068477899998 -36.026394501699997 47.000000990300002 + 0 4 45.396247993800003 4 +2 26.000006211700001 -73.999999638099993 33 1.53802077765e-16 -9.8686635177900001e-17 1 1 0 -1.53802077765e-16 1.5178209537997559e-32 1 9.8686635177900001e-17 22.000016624600001 +2 26.000006211700001 -73.999999638099993 25 1.53802077765e-16 -9.8686635177900001e-17 1 1 0 -1.53802077765e-16 1.5178209537997559e-32 1 9.8686635177900001e-17 22.000016624600001 +2 -40.537266987000002 -58.998876986600003 33 -1.08942576052e-15 -4.44393036665e-15 1 0 1 4.44393036665e-15 -1 4.8413322193855982e-30 -1.08942576052e-15 27.0011298971 +1 -53.025122933799999 -82.938686291899998 29 -1.7763568394e-15 -5.3290705181999996e-15 1 +2 -40.537266987000002 -58.998876986600003 25 -1.08942576052e-15 -4.44393036665e-15 1 0 1 4.44393036665e-15 -1 4.8413322193855982e-30 -1.08942576052e-15 27.0011298971 +1 -23.080161257499999 -92 33 -1 0 0 +1 -5.62277660168 -92 29 0 0 -1 +1 -23.080161257499999 -92 25 -1 0 0 +2 -5.62274499818 -118.99989650800001 33 4.3640442561400002e-16 2.8274458872499999e-15 -1 0 -1 -2.8274458872499999e-15 -1 1.2339098983800029e-30 -4.3640442561400002e-16 26.9998959383 +2 -5.62274499818 -118.99989650800001 25 4.3640442561400002e-16 2.8274458872499999e-15 -1 0 -1 -2.8274458872499999e-15 -1 1.2339098983800029e-30 -4.3640442561400002e-16 26.9998959383 +2 -5.6227422168999999 -29.0001072582 33 4.3640408698799999e-16 -2.8274448170300002e-15 -1 0 -1 2.8274448170300002e-15 -1 -1.23390847388493e-30 -4.3640408698799999e-16 26.999891704900001 +1 -5.62277660167 -55.999998963099998 29 8.881784197e-16 -3.5527136788e-15 -1 +2 -5.6227422168999999 -29.0001072582 25 4.3640408698799999e-16 -2.8274448170300002e-15 -1 0 -1 2.8274448170300002e-15 -1 -1.23390847388493e-30 -4.3640408698799999e-16 26.999891704900001 +2 -156.394413507 1.4365477612899999 33 0 0 1 1 0 -0 -0 1 0 27 +2 -156.394413507 1.4365477612899999 25 0 0 1 1 0 -0 -0 1 0 27 +1 -168.881988119 -22.502133913200002 29 0 0 1 +2 -110.752290391 88.747087288100005 33 0 0 1 1 0 -0 -0 1 0 27 +1 -106.063789594 115.336896619 29 0 0 1 +2 -110.752290391 88.747087288100005 25 0 0 1 1 0 -0 -0 1 0 27 +1 -76.9175599342 110.197629944 33 -0.98480775301218992 0.1736481776670335 0 +1 -76.9175599342 110.197629944 25 -0.98480775301218992 0.1736481776670335 0 +1 -7.3818363913700002 103.18971689 33 -1 0 0 +1 -7.3818363913700002 103.18971689 25 -1 0 0 +2 43.000006176500001 91.000000347300002 33 -2.0571765251400001e-16 3.9308929949500001e-16 1 0 1 -3.9308929949500001e-16 -1 -8.0865407920484091e-32 -2.0571765251400001e-16 22.000016405 +2 43.000006176500001 91.000000347300002 25 -2.0571765251400001e-16 3.9308929949500001e-16 1 0 1 -3.9308929949500001e-16 -1 -8.0865407920484091e-32 -2.0571765251400001e-16 22.000016405 +1 11.648931638600001 72.810282470800004 29 4.4408920985e-16 1.7763568394e-15 -1 +2 11.648962903899999 45.8103853247 33 6.4080600471199998e-16 1.31015225825e-15 -1 0 -1 -1.31015225825e-15 -1 8.3955343417358699e-31 -6.4080600471199998e-16 26.999897146199999 +2 11.648962903899999 45.8103853247 25 6.4080600471199998e-16 1.31015225825e-15 -1 0 -1 -1.31015225825e-15 -1 8.3955343417358699e-31 -6.4080600471199998e-16 26.999897146199999 +2 11.648968972500001 136.189598988 33 -4.2050396986899999e-16 -1.3157726047699999e-16 -1 -1 0 4.2050396986899999e-16 -5.5328760375065969e-32 1 -1.3157726047699999e-16 26.9998810387 +2 11.648968972500001 136.189598988 25 -4.2050396986899999e-16 -1.3157726047699999e-16 -1 -1 0 4.2050396986899999e-16 -5.5328760375065969e-32 1 -1.3157726047699999e-16 26.9998810387 +2 -26.412604421400001 226.18971689 33 0 0 1 1 0 -0 -0 1 0 117 +2 -26.412604421400001 226.18971689 25 0 0 1 1 0 -0 -0 1 0 117 +1 -162.81844465399999 60.379870135899999 33 0.46327432155297421 0.88621493047095057 0 +1 -162.81844465399999 60.379870135899999 25 0.46327432155297421 0.88621493047095057 0 +2 46 88 47 0 0 1 1 0 -0 -0 1 0 32 +2 46 88 25 0 0 1 1 0 -0 -0 1 0 32 +7 0 0 4 5 2 -12.923349508899999 59.872677746999997 47 -10.9297072481 60.078958100400001 47 -8.9109491291000005 60.102456107199998 46.999998983099999 -6.9084394041500001 59.946312296999999 47 -4.9401900315500002 59.612952290199999 47 + 0 5 13.5557546445 5 +7 0 0 1 2 2 -12.923349508899999 59.872677746999997 47 9.8668642498499999 56.550128620700001 25 + 727.83823493399996 2 759.77766033499995 2 +7 0 0 4 5 2 9.8668642498499999 56.550128620700001 25 11.728598828799999 56.734664060599997 25 13.610564907900001 56.749883115499998 24.999999648100001 15.4744423462 56.599030991399999 25 17.307986786600001 56.2844833029 25 + 0 5 13.219918375100001 5 +7 0 0 3 4 2 -13.298981617500001 59.831779503699998 47 -13.173157055500001 59.846158838699999 47 -13.048284608499999 59.8597508163 47 -12.923349508899999 59.872677746999997 47 + 0 4 0.63643511700599997 4 +7 0 0 3 4 2 9.5158183786899997 56.513204642600002 25 9.6335255649999993 56.526299579000003 25 9.7501603100600001 56.5385608773 25 9.8668642498499999 56.550128620700001 25 + 0 4 0.62082720170700001 4 +7 0 0 4 5 2 -80.961520643100002 49.013407147400002 47 -77.136825790399996 50.945314981999999 47 -73.0678709771 52.4462711547 46.999999840999998 -68.825140489800006 53.457676106100003 47 -64.528004647399996 53.9533765786 47 + 0 5 28.5250040371 5 +7 0 0 1 2 2 -80.961520643100002 49.013407147400002 47 -53.067407582900003 46.339516836599998 25 + 684.16937356100004 2 719.98845051900003 2 +7 0 0 4 5 2 -53.067407582900003 46.339516836599998 25 -50.427736811000003 47.843462654200003 25 -47.622748748600003 49.078114630599998 24.999999474799999 -44.691469558100003 50.0148113921 24.9999998682 -41.688369386600002 50.637300832500003 24.9999999727 + 0 5 21.316621563199998 5 +7 0 0 4 5 2 -92.704607515800006 38.974458160300003 47 -90.557297467500007 42.117085549099997 47 -87.773027295600002 44.911251164299998 47.000005755899998 -84.506768945800005 47.222651800199998 47 -80.961520643100002 49.013407147400002 47 + 0 5 26.666536700399998 5 +7 0 0 5 6 2 -92.704607515800006 38.974458160300003 47 -86.916928362299998 38.513430566700002 42.600000000000001 -81.129249208800005 38.052402973 38.200000000000003 -75.341570055299997 37.591375379299997 33.799999999999997 -69.553890901800003 37.130347785600001 29.399999999999999 -63.766211748300002 36.669320192000001 25 + 674.00282341900004 6 710.75707599999998 6 +7 0 0 4 5 2 -63.766211748300002 36.669320192000001 25 -61.705297684800001 39.613749358699998 25 -59.178752417600002 42.261323190100001 25.0000100512 -56.256172922300003 44.522725847399997 25 -53.067407582900003 46.339516836599998 25 + 0 5 25.9870154338 5 +7 0 0 3 4 2 -94.466982387300007 36.170422670599997 47 -93.916174833599996 37.125823497500001 47 -93.328519799299997 38.061350873000002 47 -92.704607515800006 38.974458160300003 47 + 0 4 5.74085382142 4 +7 0 0 3 4 2 -65.463960986199993 34.011187028999998 25 -64.936791371400005 34.918860594800002 25 -64.370627193299995 35.805791224899998 25 -63.766211748300002 36.669320192000001 25 + 0 4 5.6447975654400002 4 +7 0 0 3 4 2 -105.02168593 17.824874953199998 47.000000049199997 -104.85782816 18.129615264800002 47.0000000211 -104.689384606 18.432194078199998 47 -104.51653235400001 18.732245327699999 47 + 4.1579419282599996 4 5.95830336654 4 +7 0 0 1 2 2 -105.29962272900001 15.648064659099999 46.4153639548 -76.5393369361 14.589601394400001 25 + 643.83538639999995 2 679.78926938899997 2 +7 0 0 3 4 2 -76.5393369361 14.589601394400001 25 -76.098789937099994 15.5812374722 25 -75.605832238999994 16.5470525327 25 -75.060655596199993 17.485931432699999 25 + 0 4 5.8476302284699999 4 +7 0 0 3 4 2 -108.77831315100001 6.8609495628500001 47 -108.64259146000001 7.6648687332599996 47 -108.47920768 8.4648605824000001 46.999999984600002 -108.288514619 9.2588097079500002 46.9999999586 + 0 4 4.2525414581999996 4 +7 0 0 1 2 2 -108.77831315100001 6.8609495628500001 47 -78.896126108199994 6.1778912540400004 25 + 637.12963065600002 2 674.42527106199998 2 +7 0 0 3 4 2 -78.896126108199994 6.1778912540400004 25 -78.521656975200003 9.0753907186700005 25 -77.725339623699995 11.9200043535 25 -76.5393369361 14.589601394400001 25 + 0 4 15.7474629637 4 +7 0 0 3 4 2 -108.98109270800001 5.6605977263499998 47 -108.913447256 6.0607648659000004 47 -108.84585377099999 6.4608870418100004 47 -108.77831315100001 6.8609495628500001 47 + 0 4 2.1153370390299999 4 +7 0 0 1 2 2 -108.98109270800001 5.6605977263499998 47 -79.044517957099998 5.0299384177100004 25 + 633.53872118899994 2 670.71657372799996 2 +7 0 0 3 4 2 -79.044517957099998 5.0299384177100004 25 -78.995039470699993 5.4126192504399997 25 -78.945574904799997 5.7952756985100002 25 -78.896126108199994 6.1778912540400004 25 + 0 4 2.0785737716499999 4 +7 0 0 3 4 2 -109.642946084 0.95625946916000004 47 -109.46687073 2.5284584593899999 47 -109.245164656 4.09844682598 47 -108.98109270800001 5.6605977263499998 47 + 0 4 8.2618236292800002 4 +7 0 0 1 2 2 -109.642946084 0.95625946916000004 47 -79.580737053700005 0.53978447022700005 25 + 631.28419866000002 2 668.63447709599996 2 +7 0 0 3 4 2 -79.580737053700005 0.53978447022700005 25 -79.416857203199996 2.03762012386 25 -79.237821527199998 3.5348831985000002 25 -79.044517957099998 5.0299384177100004 25 + 0 4 8.1247880436299997 4 +7 0 0 3 4 2 -109.721292355 0.25670752510099998 47 -109.695174026 0.48991234059799998 47 -109.66905890300001 0.72309355989400004 47 -109.642946084 0.95625946916000004 47 + 0 4 1.22469796652 4 +7 0 0 3 4 2 -79.653715138300001 -0.12722194784900001 25 -79.629387227300001 0.095129639284999998 25 -79.605061546599998 0.31746201687999998 25 -79.580737053700005 0.53978447022700005 25 + 0 4 1.20537347996 4 +2 29 -71 47 0 -0 1 1 0 0 -0 1 0 32 +2 29 -71 25 0 -0 1 1 0 0 -0 1 0 32 +2 29 -77 47 0 0 1 1 0 -0 -0 1 0 32 +2 29 -77 25 0 0 1 1 0 -0 -0 1 0 32 +7 0 0 4 5 2 -19.515134468599999 -109 47 -31.558214507300001 -109 47 -43.603122398899998 -107.069938224 46.999999922299999 -55.175495762399997 -103.211610812 47 -65.853105370799994 -97.641653013799996 47 + 0 5 68.125948493799996 5 +1 -66.520233013199999 -97.641653013799996 61.476721842700002 0.046033930337705718 -2.2296164405602772e-16 -0.99893987669812412 +7 0 0 4 5 2 -64.839284128399996 -97.641653013500004 25 -54.161674295600001 -103.211610928 25 -42.589160636300001 -107.069972591 24.9999998913 -30.544393516900001 -109 25 -18.501313225099999 -109 25 + 0 5 68.125949925900002 5 +2 46 94 47 0 -0 1 1 0 0 -0 1 0 32 +2 46 94 25 0 -0 1 1 0 0 -0 1 0 32 +1 -124.980156026 43.125599882700001 47 0.46327432155297421 0.88621493047095057 0 +1 -117.99207415799999 -70.443444200000002 47 0.8866178397970621 -0.46250276340103236 0 +1 -34.990666450699997 -103.57501276799999 80.808519714900001 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 +1 -27.5782773058 -89.395573880499995 80.808519714900001 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 +7 0 0 5 18 6 -191.76929035399999 -3.56370899149 73.242140763500004 -191.31944427299999 -3.7988688049600001 71.856359676300002 -190.95592136900001 -4.3371145785999996 70.493988913099997 -190.69666829499999 -5.1446171462499999 69.240231042000005 -190.47762054500001 -6.9136722520499996 67.341004714299999 -190.78049106 -9.1405183797500005 66.078902474100005 -191.01579061800001 -10.133852814800001 65.683083112800006 -191.68387466900001 -11.9913923499 65.264081913499993 -192.70957483199999 -13.708351692500001 65.441493263699996 -193.24367330699999 -14.435838561200001 65.652157759700003 -194.148650594 -15.467439776000001 66.168138584999994 -195.083326215 -16.283063323699999 66.931621622999998 -195.431409739 -16.556115111 67.247541081199998 -196.571590499 -17.358676028600001 68.3891274665 -197.622940661 -17.8157862917 69.808383114999998 -198.27171838800001 -17.966769339100001 70.9009980899 -198.79894330799999 -17.943225583299999 72.063096204299995 -199.18167949900001 -17.743147878999999 73.242140763500004 + 0 6 10.435638111299999 3 18.008963505200001 3 24.4450077489 3 28.272101325600001 3 37.150907978900001 6 +7 0 0 5 15 5 -199.18167949900001 -17.743147878999999 73.242140763500004 -199.412634704 -17.622414620699999 73.953613797800003 -199.59097704600001 -17.437400152999999 74.671257582999999 -199.71177773299999 -17.187869058699999 75.383558209499995 -199.890964185 -16.268652231899999 77.419091442500005 -199.570477047 -14.8381596585 79.168542691599995 -199.154404967 -13.702023909699999 80.095136304099995 -198.054959723 -11.1811676464 81.3355187298 -196.64267611400001 -8.5156557873099992 81.261647797099997 -195.91418801699999 -7.2304031950000001 80.872476456000001 -194.52252647 -5.0356319593599999 79.485631797300002 -193.262491708 -3.7396518419599998 77.169258557800006 -192.698301233 -3.3900866608200002 75.886712652699998 -192.19512010700001 -3.3411038614500002 74.553937939199997 -191.76929035399999 -3.56370899149 73.242140763500004 + 0 6 5.3577546842399997 3 15.734863304099999 3 26.144752004000001 3 36.023253541000003 6 +1 -197.95471675499999 34.850612258699996 81.777277450699998 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 +1 -202.066713424 25.314991862100001 62.8372820166 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 +1 -151.6272846 123.472105306 81.777277450699998 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 +1 -155.739281269 113.936484909 62.8372820166 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 +1 -147.311579808 -54.620113243200002 25 0.8866178397970621 -0.46250276340103236 0 +7 0 0 5 15 5 -170.13104294499999 -43.245235386099999 47 -173.062496487 -41.716047382900001 47 -175.99731728099999 -40.193315055200003 47.341619610499997 -178.89383343200001 -38.698777609300002 48.0249058108 -184.5267465 -35.809182204899997 50.0551306602 -189.68519823700001 -33.197171686300003 53.336775585300003 -192.107630505 -31.980029295000001 55.2717757152 -196.56871809699999 -29.7587380535 59.674115643299999 -200.147293695 -28.020058341199999 65.002058303499993 -201.687491284 -27.285394372599999 67.863141844500007 -203.84626665600001 -26.282663128599999 72.996067128999996 -205.17851106000001 -25.7188134007 78.450260705199995 -205.5824805 -25.563088578799999 80.738424176699993 -205.83824898200001 -25.485227554600002 83.049675417399996 -205.94507417899999 -25.485227554600002 85.367790528100002 + 0 6 23.379302620099999 3 46.762322248499999 3 70.1494792015 3 86.558423849099995 6 +2 -105.566941595 75.81028311 25 0 0 1 1 0 -0 -0 1 0 4 +1 -108.38981724999999 78.81028311 25 -1 0 0 +1 -108.566941595 78.633158765499999 25 0 1 0 +2 -105.566941595 75.81028311 25 0 0 1 1 0 -0 -0 1 0 4 +2 -105.566941595 75.81028311 25 0 0 1 1 0 -0 -0 1 0 4 +1 -108.566941595 72.9874074544 25 0 1 0 +1 -108.38981724999999 72.81028311 25 -1 0 0 +2 -105.566941595 75.81028311 25 0 0 1 1 0 -0 -0 1 0 4 +1 -45.636129322400002 72.81028311 25 -1 2.48072612245e-16 0 +1 -158.12851005600001 -34.878958321399999 25 0.8866178397970621 -0.46250276340103236 0 +2 -140.86673680999999 -40.499889463999999 25 0 0 1 1 0 -0 -0 1 0 4 +1 -139.751433185 -44.465330774800002 25 0.8866178397970621 -0.46250276340103236 0 +1 -139.51247108199999 -44.390209669900003 25 0.46250276340103236 0.8866178397970621 0 +2 -140.86673680999999 -40.499889463999999 25 0 0 1 1 0 -0 -0 1 0 4 +2 -140.86673680999999 -40.499889463999999 25 0 0 1 1 0 -0 -0 1 0 4 +1 -136.90129549900001 -39.3845858384 25 0.46250276340103236 0.8866178397970621 0 +1 -136.97641660400001 -39.145623735999997 25 0.8866178397970621 -0.46250276340103236 0 +2 -140.86673680999999 -40.499889463999999 25 0 0 1 1 0 -0 -0 1 0 4 +1 -155.35349347499999 -29.559251282599998 25 0.8866178397970621 -0.46250276340103236 0 +1 -45.636129322400002 78.81028311 25 -1 2.48072612245e-16 0 +2 -105.402023218 -59 25 0 0 1 1 0 -0 -0 1 0 4 +1 -54.189524254200002 -62 25 -1 2.92604619459e-16 0 +1 -59.614575774800002 -79.501302991800003 25 0.8866178397970621 -0.46250276340103236 0 +2 -69.937309626300006 -77.500110535999994 25 0 0 1 1 0 -0 -0 1 0 4 +1 -71.052613251799997 -73.534669225200005 25 0.8866178397970621 -0.46250276340103236 0 +1 -71.291575354200006 -73.609790330099997 25 -0.46250276340103236 -0.8866178397970621 0 +2 -69.937309626300006 -77.500110535999994 25 0 0 1 1 0 -0 -0 1 0 4 +2 -69.937309626300006 -77.500110535999994 25 0 0 1 1 0 -0 -0 1 0 4 +1 -73.902750937099995 -78.6154141616 25 -0.46250276340103236 -0.8866178397970621 0 +1 -73.827629832200003 -78.854376263999995 25 0.8866178397970621 -0.46250276340103236 0 +2 -69.937309626300006 -77.500110535999994 25 0 0 1 1 0 -0 -0 1 0 4 +1 -62.389592354999998 -84.821010030699995 25 0.8866178397970621 -0.46250276340103236 0 +1 -54.189524254399998 -56 25 -1 2.19453464593e-16 0 +2 -105.402023218 -59 25 0 0 1 1 0 -0 -0 1 0 4 +1 -108.224898874 -56 25 -1 0 0 +1 -108.402023218 -56.177124344500001 25 0 1 0 +2 -105.402023218 -59 25 0 0 1 1 0 -0 -0 1 0 4 +2 -105.402023218 -59 25 0 0 1 1 0 -0 -0 1 0 4 +1 -108.402023218 -61.822875655499999 25 0 1 0 +1 -108.224898873 -62 25 -1 0 0 +1 -108.212692906 72.81028311 29 0 0 1 +1 -108.566941595 72.81028311 29 0 0 -1 +1 -108.38981724999999 72.81028311 33 -1 0 0 +1 -102.92119028400001 72.81028311 29 0 0 1 +1 -45.636129322400002 72.81028311 33 -1 0 0 +1 -108.566941595 73.164531798900001 29 0 0 -1 +1 -108.566941595 75.81028311 33 0 1 0 +1 -108.566941595 78.456034420999998 29 0 0 -1 +1 -108.566941595 78.81028311 29 0 0 -1 +1 -108.566941595 75.81028311 33 0 1 0 +1 -155.35349347499999 -29.559251282599998 33 0.8866178397970621 -0.46250276340103236 0 +1 -141.82499883200001 -36.616368651899997 29 0 0 1 +1 -136.81937500000001 -39.2275442348 29 0 0 -1 +1 -136.97641660400001 -39.145623735999997 33 0.8866178397970621 -0.46250276340103236 0 +1 -137.13345820800001 -39.063703237200002 29 0 0 1 +1 -71.052613251799997 -73.534669225200005 33 0.8866178397970621 -0.46250276340103236 0 +1 -71.209654855400004 -73.452748726400003 29 0 0 -1 +1 -70.895571648100002 -73.616589723999994 29 0 0 1 +1 -59.614575774599999 -79.501302991900005 33 0.8866178397970621 -0.46250276340103236 0 +1 -66.204031024200006 -76.063924309200004 29 5.3459459081700002e-11 -2.7888802378600001e-11 1 +1 -54.189524254399998 -62 33 -1 0 0 +1 -102.756271907 -62 29 -4.9485748832000002e-11 0 1 +1 -108.402023218 -62 29 0 0 -1 +1 -108.224898874 -62 33 -1 0 0 +1 -108.04777452899999 -62 29 -5.3631765695200001e-11 0 1 +1 -108.402023218 -61.6457513111 29 0 0 -1 +1 -108.402023218 -59 33 0 1 0 +1 -108.402023218 -56.3542486889 29 0 0 -1 +1 -108.402023218 -56 29 0 0 -1 +1 -108.402023218 -59 33 0 1 0 +1 -54.189524254200002 -56 33 -1 0 0 +1 -102.756271907 -56 29 -4.9485748832000002e-11 0 -1 +1 -108.224898873 -56 33 -1 0 0 +1 -108.04777452899999 -56 29 -5.3631765695200001e-11 0 -1 +1 -72.597163145600007 -76.112602245800005 33 -0.46250276340103236 -0.8866178397970621 0 +1 -71.373495852999994 -73.766831933800006 29 0 0 -1 +1 -72.597163145600007 -76.112602245800005 33 -0.46250276340103236 -0.8866178397970621 0 +1 -73.984671435799996 -78.772455765199993 29 0 0 -1 +1 -73.820830438300007 -78.458372557900006 29 0 0 -1 +1 -73.827629833200007 -78.854376263500001 33 0.8866178397970621 -0.46250276340103236 0 +7 0 0 5 6 2 -73.670588230500002 -78.936296761799994 33 -73.670588230500002 -78.936296761799994 31.399999999999999 -73.670588230500002 -78.936296761799994 29.800000000000001 -73.670588228499994 -78.936296762799998 28.199999999999999 -73.670588228499994 -78.936296762799998 26.600000000000001 -73.670588228499994 -78.936296762799998 25 + 0 6 11.313708499000001 6 +1 -62.389592354999998 -84.821010030699995 33 0.8866178397970621 -0.46250276340103236 0 +1 -68.979047604399994 -81.383631348099996 29 0 0 1 +1 -139.594391581 -44.547251273599997 29 0 0 -1 +1 -138.206883291 -41.887397754200002 33 0.46250276340103236 0.8866178397970621 0 +1 -139.43055058300001 -44.233168066200001 29 0 0 -1 +1 -138.206883291 -41.887397754200002 33 0.46250276340103236 0.8866178397970621 0 +1 -136.98321599799999 -39.541627442100001 29 0 0 -1 +1 -108.212692906 78.81028311 29 0 0 -1 +1 -108.38981724999999 78.81028311 33 -1 0 0 +1 -102.92119028400001 78.81028311 29 0 0 -1 +1 -45.636129322400002 78.81028311 33 -1 0 0 +1 -158.12851005600001 -34.878958320999999 33 0.8866178397970621 -0.46250276340103236 0 +7 0 0 5 6 2 -144.60001541400001 -41.936075690000003 33 -144.60001541400001 -41.936075690000003 31.399999999999999 -144.60001541400001 -41.936075690000003 29.800000000000001 -144.600015412 -41.936075690700001 28.199999999999999 -144.600015412 -41.936075690700001 26.600000000000001 -144.600015412 -41.936075690700001 25 + 0 6 11.313708499000001 6 +1 -139.751433185 -44.465330774800002 33 0.8866178397970621 -0.46250276340103236 0 +1 -139.90847478800001 -44.383410275999999 29 0 0 1 +2 -69.937309626300006 -77.500110535999994 33 0 0 1 1 0 -0 -0 1 0 4 +2 -140.86673680999999 -40.499889463999999 33 0 0 1 1 0 -0 -0 1 0 4 +1 -109.402023218 -59 29 0 0 1 +2 -105.402023218 -59 33 0 0 1 1 0 -0 -0 1 0 4 +2 -105.402023218 -59 33 0 0 1 1 0 -0 -0 1 0 4 +1 -136.86673680999999 -40.499889463999999 29 0 0 1 +2 -140.86673680999999 -40.499889463999999 33 0 0 1 1 0 -0 -0 1 0 4 +2 -140.86673680999999 -40.499889463999999 33 0 0 1 1 0 -0 -0 1 0 4 +2 -140.86673680999999 -40.499889463999999 33 0 0 1 1 0 -0 -0 1 0 4 +2 -105.402023218 -59 33 0 0 1 1 0 -0 -0 1 0 4 +2 -105.566941595 75.81028311 33 0 0 1 1 0 -0 -0 1 0 4 +1 -73.937309626300006 -77.500110535999994 29 0 0 1 +2 -69.937309626300006 -77.500110535999994 33 0 0 1 1 0 -0 -0 1 0 4 +2 -69.937309626300006 -77.500110535999994 33 0 0 1 1 0 -0 -0 1 0 4 +1 -109.566941595 75.81028311 29 0 0 1 +2 -105.566941595 75.81028311 33 0 0 1 1 0 -0 -0 1 0 4 +2 -105.566941595 75.81028311 33 0 0 1 1 0 -0 -0 1 0 4 +2 -105.566941595 75.81028311 33 0 0 1 1 0 -0 -0 1 0 4 +2 -105.402023218 -59 33 0 0 1 1 0 -0 -0 1 0 4 +2 -69.937309626300006 -77.500110535999994 33 0 0 1 1 0 -0 -0 1 0 4 +1 -105.402023218 -63 -15.760416521 0 0 -1 +2 -105.402023218 -59 25 0 0 -1 -1 0 -0 0 1 0 4 +1 -105.402023218 -55 -15.760416521 0 0 -1 +2 -105.402023218 -59 17 0 0 -1 -1 0 -0 0 1 0 4 +2 -105.402023218 -59 25 0 0 -1 -1 0 -0 0 1 0 4 +2 -105.402023218 -59 17 0 0 -1 -1 0 -0 0 1 0 4 +1 -149.44719639799999 141.77195407400001 21.5 0.042154877359099965 -0.007433042246879993 -0.99908343805599908 +1 -68.615951414099996 127.51922469900001 21.5 0 0 1 +1 -108.957735193 134.63256962899999 18 -0.98480775301218992 0.1736481776670335 0 +1 -146.988989858 -54.620113243200002 17.999772946499998 0.8866178397970621 -0.46250276340103236 0 +1 -64.677989152999999 -97.641653013799996 21.499886473299998 0.046033930337705718 0 -0.99893987669812412 +1 -229.622580513 -11.5985734727 21.499886473299998 0.046033930337705718 0 -0.99893987669812412 +1 -20.280457959 -109 63.607579398200002 0.046033930337705718 -2.2296164405602772e-16 -0.99893987669812412 +7 0 0 5 6 2 -18.178733736600002 -109 17.999999942900001 -27.812331010600001 -109 17.9999998009 -37.448323281500002 -107.841539723 17.999974695300001 -46.891650265000003 -105.528361033 17.9999265316 -55.974507619500002 -102.097672841 17.999856668500001 -64.516694178199998 -97.641653013799996 17.999772946499998 + 408.473308997 6 476.25355409100001 6 +1 61 -77 32 0 0 1 +1 29 -109 32 0 0 1 +2 29 -77 18 0 0 1 1 0 -0 -0 1 0 32 +1 29 -39 32 0 0 1 +1 61 -71 32 0 0 1 +2 29 -71 18 0 -0 1 1 0 0 -0 1 0 32 +7 0 0 1 2 2 -79.653715138300001 -0.12722194784900001 25 -73 -0.21218247951300001 20.131575384800001 + 666.64764424199996 2 674.89599265200002 2 +7 0 0 3 4 2 -73 0.44861643747699997 20.184112550199998 -73 0.22834296721399999 20.166598531399998 -73 0.0080798092416299993 20.1490864019 -73 -0.21218247951300001 20.131575384800001 + 0 4 1.2041257620200001 4 +7 0 0 1 2 2 -79.580737053700005 0.53978447022700005 25 -73 0.44861643747699997 20.184112550199998 + 666.65540174099999 2 674.80732583999998 2 +7 0 0 3 4 2 -73 0.44861643747699997 20.184112550199998 -73 0.63240280456200004 20.198725486699999 -73 0.81619777970100005 20.213435245500001 -73 1 20.2282433709 + 0 4 1.00517081199 4 +7 0 0 3 4 2 -72.861575388099993 4.8996853637599997 20.4562358035 -72.953996189500003 3.5994905300100002 20.4090146144 -73 2.2980202738900002 20.3328190772 -73 1 20.2282433709 + 0 4 7.0985654611099998 4 +7 0 0 1 2 2 -79.044517957099998 5.0299384177100004 25 -72.861575388099993 4.8996853637599997 20.4562358035 + 668.71457742200005 2 676.37017607400003 2 +7 0 0 3 4 2 -72.768789160699995 6.03783027367 20.488904053399999 -72.803676323100007 5.6585543679199999 20.4809153926 -72.834603762900002 5.2791277319200001 20.4700163525 -72.861575388099993 4.8996853637599997 20.4562358035 + 0 4 2.0705277709500001 4 +7 0 0 1 2 2 -78.896126108199994 6.1778912540400004 25 -72.768789160699995 6.03783027367 20.488904053399999 + 670.74380399400002 2 678.349523181 2 +7 0 0 3 4 2 -71.343076868899999 14.3983637121 21.130782519099998 -72.014015850299998 11.727145760999999 20.756320615100002 -72.505245202500006 8.9029493224799996 20.549251562999999 -72.768789160699995 6.03783027367 20.488904053399999 + 0 4 15.647841313300001 4 +7 0 0 1 2 2 -76.5393369361 14.589601394400001 25 -71.343076868899999 14.3983637121 21.130782519099998 + 674.62682472400002 2 681.07345529199995 2 +7 0 0 3 4 2 -70.530911705799994 17.294272471100001 21.616825687799999 -70.823351409200001 16.351479580700001 21.4304192966 -71.094673249099998 15.3873362218 21.269420576200002 -71.343076868899999 14.3983637121 21.130782519099998 + 0 4 5.7920499210700003 4 +7 0 0 1 2 2 -75.060655596199993 17.485931432699999 25 -70.530911705799994 17.294272471100001 21.616825687799999 + 679.863289678 2 685.50722572100005 2 +7 0 0 1 2 2 -65.463960986199993 34.011187028999998 25 -62.174325333399999 33.766278112400002 22.504674310999999 + 702.65059064100001 2 706.79642065899998 2 +7 0 0 3 4 2 -60.111552167500001 36.3782019617 22.221597512700001 -60.826147519199999 35.527601372600003 22.306066958100001 -61.513711509899998 34.656894063899998 22.4007795383 -62.174325333399999 33.766278112400002 22.504674310999999 + 0 4 5.7751882134399999 4 +7 0 0 1 2 2 -63.766211748300002 36.669320192000001 25 -60.111552167500001 36.3782019617 22.221597512700001 + 702.71822230400005 2 707.30745519200002 2 +7 0 0 5 6 2 -49.611103942699998 46.008200447500002 22.2740240953 -51.794694396499999 44.474575372099999 21.9587666125 -54.022807778900003 42.711400404300001 21.848713415300001 -56.172214387799997 40.7586722064 21.868968139100001 -58.212908230799997 38.638204979299999 21.997166780200001 -60.111552167500001 36.3782019617 22.221597512700001 + 0 6 25.8856538217 6 +7 0 0 5 6 2 -53.067407582900003 46.339516836599998 25 -52.3761468549 46.2732535588 24.454804819100001 -51.684886126800002 46.206990280900001 23.909609638100001 -50.993625398799999 46.140727003099997 23.364414457199999 -50.302364670700001 46.074463725299999 22.8192192763 -49.611103942699998 46.008200447500002 22.2740240953 + 711.29269387900001 6 715.67736011299996 6 +7 0 0 5 6 2 -41.688369386600002 50.637300832500003 24.9999999727 -42.962054718099999 50.029458974500002 24.082731881600001 -44.479180564000004 49.255736410799997 23.384194168899999 -46.148763018099999 48.315267337199998 22.885577186599999 -47.873568206800002 47.228543011900001 22.524882031600001 -49.611103942699998 46.008200447500002 22.2740240953 + 6.1544842320599997 6 26.554497061199999 6 +7 0 0 1 2 2 9.5158183786899997 56.513204642600002 25 13.0440381019 56 21.597785914300001 + 757.52066139399994 2 762.44961365899997 2 +7 0 0 3 4 2 13.6403370819 56 21.357366228099998 13.4393396994 56 21.4355249935 13.246107517900001 56 21.5135600809 13.0440381019 56 21.597785914199999 + 0 4 0.90711976005399997 4 +7 0 0 1 2 2 9.8668642498499999 56.550128620700001 25 13.6403370819 56 21.357366228099998 + 757.53340308999998 2 762.80612899100004 2 +7 0 0 5 15 5 19.209532166500001 56 23.119666222599999 19.256071811599998 56 22.7627668875 19.274102662899999 56.000000025200002 22.416524883899999 19.257304792100001 56.000000042700002 22.083442445500001 19.1521461054 55.999999970200001 21.5546298501 18.884102660899998 56.000000020800002 21.1200365963 18.742506488299998 56.000000007399997 20.9611305914 18.265946796000001 55.999999987400003 20.6008568136 17.551646102100001 56.0000000215 20.450119352200002 17.018099843000002 55.999999941299997 20.4546719091 16.0341722344 56.000000043 20.585459900699998 14.987674519900001 55.999999968499999 20.8762667978 14.539843295100001 56.000000019200002 21.0209948392 14.0904601449 56 21.182334089000001 13.6403370819 56 21.357366228099998 + 0 6 3.88027937814 3 6.5910514190300002 3 11.2162442808 3 14.6053927233 6 +7 0 0 1 2 2 17.307986786600001 56.2844833029 25 19.209532166500001 56 23.119666222599999 + 760.03967282099995 2 762.72316676000003 2 +1 78 88 32 0 0 1 +1 46 56 32 0 0 1 +2 46 88 18 0 0 1 1 0 -0 -0 1 0 32 +1 46 126 32 0 0 1 +1 78 94 32 0 0 1 +2 46 94 18 0 -0 1 1 0 0 -0 1 0 32 +1 -105.566941595 79.81028311 -15.760416521 0 0 -1 +2 -105.566941595 75.81028311 25 0 0 -1 -1 0 -0 0 1 0 4 +1 -105.566941595 71.81028311 -15.760416521 0 0 -1 +2 -105.566941595 75.81028311 17 0 0 -1 -1 0 -0 0 1 0 4 +2 -105.566941595 75.81028311 25 0 0 -1 -1 0 -0 0 1 0 4 +2 -105.566941595 75.81028311 17 0 0 -1 -1 0 -0 0 1 0 4 +1 -140.86673680999999 -36.499889463999999 -15.760416521 0 0 -1 +2 -140.86673680999999 -40.499889463999999 25 0 0 -1 -1 0 -0 0 1 0 4 +1 -140.86673680999999 -44.499889463999999 -15.760416521 0 0 -1 +2 -140.86673680999999 -40.499889463999999 17 0 0 -1 -1 0 -0 0 1 0 4 +2 -140.86673680999999 -40.499889463999999 25 0 0 -1 -1 0 -0 0 1 0 4 +2 -140.86673680999999 -40.499889463999999 17 0 0 -1 -1 0 -0 0 1 0 4 +1 -69.937309626300006 -73.500110535999994 -15.760416521 0 0 -1 +2 -69.937309626300006 -77.500110535999994 25 0 0 -1 -1 0 -0 0 1 0 4 +1 -69.937309626300006 -81.500110535999994 -15.760416521 0 0 -1 +2 -69.937309626300006 -77.500110535999994 17 0 0 -1 -1 0 -0 0 1 0 4 +2 -69.937309626300006 -77.500110535999994 25 0 0 -1 -1 0 -0 0 1 0 4 +2 -69.937309626300006 -77.500110535999994 17 0 0 -1 -1 0 -0 0 1 0 4 +1 29 -108.5 17.5 0 0.70710678118654757 -0.70710678118654757 +1 -75.707606608999996 -109 18 -1 0 0 +1 -18.178733736600002 -108.5 17.5 0 0.70710678118654757 -0.70710678118654757 +1 -75.707606608999996 -108 17 -1 0 0 +1 60.5 -71 17.5 -0.70710678118654757 0 -0.70710678118654757 +1 61 16.239506887400001 18 0 -1 0 +1 60.5 -77 17.5 -0.70710678118654757 0 -0.70710678118654757 +1 60 16.239506887400001 17 0 -1 0 +1 -35 -39.5 17.5 0 -0.70710678118654757 -0.70710678118654757 +1 -75.707606608999996 -39 18 1 0 0 +1 29 -39.5 17.5 0 -0.70710678118654757 -0.70710678118654757 +1 -75.707606608999996 -40 17 1 0 0 +2 -35 -1 17 3.1884170736699999e-17 1.1899334514699999e-16 1 0 1 -1.1899334514699999e-16 -1 3.7940041331980198e-33 3.1884170736699999e-17 39 +2 -35 -1 18 3.1884170736699999e-17 1.1899334514699999e-16 1 0 1 -1.1899334514699999e-16 -1 3.7940041331980198e-33 3.1884170736699999e-17 38 +1 -73.5 -1 17.5 -0.70710678118654757 3.7682219008375896e-15 -0.70710678118654757 +1 -73.5 1 17.5 -0.70710678118654757 0 -0.70710678118654757 +1 -73 16.239506887400001 18 0 -1 0 +1 -74 16.239506887400001 17 0 -1 0 +2 -18 1 17 -1.53837014911e-15 4.1220503911300002e-16 1 1 0 1.53837014911e-15 6.3412392748415919e-31 1 -4.1220503911300002e-16 56 +2 -18 1 18 -1.53837014911e-15 4.1220503911300002e-16 1 1 0 1.53837014911e-15 6.3412392748415919e-31 1 -4.1220503911300002e-16 55 +1 -18 56.5 17.5 5.0242958677867852e-15 0.70710678118654757 -0.70710678118654757 +1 46 56.5 17.5 0 0.70710678118654757 -0.70710678118654757 +1 -75.707606608999996 56 18 -1 0 0 +1 -75.707606608999996 57 17 -1 0 0 +1 77.5 94 17.5 -0.70710678118654757 0 -0.70710678118654757 +1 78 16.239506887400001 18 0 -1 0 +1 77.5 88 17.5 -0.70710678118654757 0 -0.70710678118654757 +1 77 16.239506887400001 17 0 -1 0 +1 -51.251133647400003 125.5 17.5 0 -0.70710678118654757 -0.70710678118654757 +1 -75.707606608999996 126 18 1 0 0 +1 46 125.5 17.5 0 -0.70710678118654757 -0.70710678118654757 +1 -75.707606608999996 125 17 1 0 0 +2 -51.251133647400003 226 17 -5.0762933812100003e-15 1.08861462866e-14 1 0 1 -1.08861462866e-14 -1 -5.52612723415514e-29 -5.0762933812100003e-15 101 +2 -51.251133647400003 226 18 -5.0762933812100003e-15 1.08861462866e-14 1 0 1 -1.08861462866e-14 -1 -5.52612723415514e-29 -5.0762933812100003e-15 100 +1 -68.702775502899996 127.026820822 17.5 -0.12278780396896194 -0.69636424031978417 -0.70710678118678083 +7 0 0 1 2 2 -149.29948383000001 141.74590836300001 17.999167119500001 -148.71018475400001 140.62657242399999 17 + -0.80599647588199996 2 0.80599647588199996 2 +1 -206.39252150799999 30.283853914600002 17 0.46327432155297421 0.88621493047095057 -7.7906240650395655e-17 +7 0 0 1 2 2 -228.06532054499999 -11.1748611451 17 -229.46125762 -11.5985734727 17.999167119500001 + -0.88409662744600004 2 0.88409662744600004 2 +1 -207.31489864900001 30.766032254599999 17.999167119500001 0.46327432155297421 0.88621493047095057 -7.7906240650395655e-17 +2 46 94 17 -3.07674029821e-15 -1.14825511146e-14 1 0 1 1.14825511146e-14 -1 3.5328827740545969e-29 -3.07674029821e-15 31 +2 46 88 17 -3.07674029821e-15 8.2441007822700002e-16 1 1 0 3.07674029821e-15 2.5364957099314695e-30 1 -8.2441007822700002e-16 31 +1 -73 1 19.114121685400001 0 0 1 +7 0 0 5 6 2 -73 -1 20.076282405000001 -73 -0.84221042948900005 20.085890002500001 -73 -0.68452473876099995 20.096224322800001 -73 -0.52694061759999999 20.107285073700002 -73 -0.36949402278100002 20.119069022400002 -73 -0.21218247951300001 20.131575384800001 + 0 6 1.4354019036900001 6 +1 -73 -1 19.0381412025 0 0 1 +2 29 -71 17 -3.3147269885100002e-15 -1.23707295343e-14 1 0 1 1.23707295343e-14 -1 4.1005591054901959e-29 -3.3147269885100002e-15 31 +2 29 -77 17 3.5527136788e-15 -9.5194676117399997e-16 1 1 0 -3.5527136788e-15 3.3819942799122261e-30 1 9.5194676117399997e-16 31 +7 0 0 1 2 2 -64.516694178199998 -97.641653013799996 17.999772946499998 -64.044336139699993 -96.7361426107 17 + 0 2 1.4267998955500001 2 +7 0 0 5 9 3 -18.1787324529 -107.99998748 17 -25.876099490800001 -107.996389385 17 -33.573036743000003 -107.246273407 17 -41.173027957199999 -105.749772338 17 -50.349714562000003 -102.99411222000001 17 -59.0919832636 -99.177582976099998 17 -60.7627425899 -98.401553426999996 17 -62.413421073999999 -97.587761994100006 17 -64.044336139699993 -96.7361426107 17 + 408.473308997 6 463.17647948799998 3 476.25355409100001 6 +1 -117.35138826799999 -68.928605009699993 17 0.8866178397970621 -0.46250276340103236 0 +1 -75.707606608999996 127.754248236 17 -0.98480775301218992 0.1736481776670335 0 +1 -135 18.631168425399999 98.658673020999998 0 0 1 +2 -120 18.631168425399999 17 0 0 1 1 0 -0 -0 1 0 15 +1 -105 18.631168425399999 98.658673020999998 0 0 1 +2 -120 18.631168425399999 17 0 0 1 1 0 -0 -0 1 0 15 +1 28 91 98.658673020999998 0 0 1 +2 43 91 17 0 0 1 1 0 -0 -0 1 0 15 +1 58 91 98.658673020999998 0 0 1 +2 43 91 17 0 0 1 1 0 -0 -0 1 0 15 +1 11 -74 98.658673020999998 0 0 1 +2 26 -74 17 0 0 1 1 0 -0 -0 1 0 15 +1 41 -74 98.658673020999998 0 0 1 +2 26 -74 17 0 0 1 1 0 -0 -0 1 0 15 +1 -51.251133647400003 126 21.5 0 0 1 +7 0 0 1 2 2 17.855219074499999 56.190243308200003 25 19.126952877200001 56 23.740182860899999 + 764.76336847799996 2 766.57036749700001 2 +7 0 0 3 4 2 19.126952877200001 56 23.740182860899999 19.0699996526 56 24.159079990999999 19.0128927043 55.999999989700001 24.579035877300001 18.9556392583 55.999999929399998 25.000000000899998 + 0 4 2.7419015286600001 4 +7 0 0 3 4 2 19.209532166500001 56 23.119666222599999 19.182900061200002 56 23.323899691200001 19.1545579195 56 23.537144879500001 19.126952877200001 56 23.740182860899999 + 0 4 1.3309125799499999 4 +7 0 0 3 4 2 13.0440381019 56 21.597785914199999 10.336611682599999 56 22.7262841957 7.6225494643399996 56.000000047299999 23.860515534800001 4.9030571868299999 56.0000001091 25.000000862499999 + 0 4 12.1243615709 4 +1 -18 56 21.5 0 0 1 +7 0 0 4 5 2 -62.174325333399999 33.766278112400002 22.504674310999999 -65.106825522600005 29.8127861426 22.965868426099998 -67.455658345399996 25.657548974299999 22.918265316100001 -69.238819077299993 21.459834566800001 22.440430224100002 -70.530911705799994 17.294272471100001 21.616825687799999 + 0 5 34.1466961685 5 +7 0 0 1 2 2 -75.815867327500001 -19.343724987800002 25 -68.365114087899997 -19.1870602875 19.639146687 + 659.91367755700003 2 669.15719433599998 2 +7 0 0 4 5 2 -68.365114087899997 -19.1870602875 19.639146687 -70.609309978200002 -15.0699654556 19.560448786999999 -72.217799461699997 -10.506272279299999 19.627048368499999 -73 -5.7195872880999996 19.788912999400001 -73 -1 20.076282405000001 + 0 5 34.347033487799997 5 +7 0 0 1 2 2 -54.529075355499998 -34.137145451000002 25 -53.681055924500001 -34.091058453099997 24.3560271785 + 652.927845929 2 653.99509371199997 2 +7 0 0 5 12 4 -53.681055924500001 -34.091058453099997 24.3560271785 -54.182810700799998 -33.807800392600001 23.686858344600001 -54.800263936299999 -33.446685608300001 23.100369630399999 -55.516085839600002 -33.005054991400002 22.597481040600002 -57.320531194200001 -31.8090964865 21.601689284599999 -59.351096829299998 -30.229896091499999 20.932388637799999 -60.526680647600003 -29.2167962465 20.6314726443 -62.970671704799997 -26.869114441499999 20.127068493500001 -65.259779577299994 -24.103636230500001 19.842582859699998 -66.388619067199997 -22.549819240600002 19.738351870100001 -67.428483235499996 -20.905358613600001 19.671991713499999 -68.365114087899997 -19.1870602875 19.639146687 + 0 6 12.621295874999999 3 29.195725661899999 3 47.552579137000002 6 +7 0 0 3 4 2 -53.681055924500001 -34.091058453099997 24.3560271785 -53.526296317499998 -34.178425645600001 24.5624234814 -53.383597693900001 -34.257559827199998 24.7772748527 -53.253713129099999 -34.328696278800003 24.999999479500001 + 0 4 2.2678469949000002 4 +1 -35 -39 32.610000000200003 0 0 1 +2 6539.8446190000004 -84.330236627299882 4548.0418006099999 -0.67084843793832383 -0.483367097732192 0.56242210318022579 -0.39635068152362118 0.87468690109425062 0.27897842624457175 -0.62679223876135548 -0.035764142434768047 -0.77836521989644003 7.600000000001538 +2 6539.8446190000004 -84.330236627299882 4548.0418006099999 0.67084843793832383 0.483367097732192 -0.56242210318022579 -0.39635068152362118 0.87468690109425062 0.27897842624457175 0.62679223876135548 0.035764142434768047 0.77836521989644003 7.600000000001538 +2 6520.7319668399996 -190.81860424000021 4433.7243410299998 0.67084843793828242 0.48336709773221564 -0.56242210318025465 0.39635068152364084 -0.87468690109423652 -0.27897842624458769 -0.62679223876138723 -0.035764142434791396 -0.7783652198964135 7.6000000000014634 +2 6520.7319668399996 -190.81860424000021 4433.7243410299998 -0.67084843793828242 -0.48336709773221564 0.56242210318025465 0.39635068152364084 -0.87468690109423652 -0.27897842624458769 0.62679223876138723 0.035764142434791396 0.7783652198964135 7.6000000000014634 +2 6546.1031688200001 -190.0594621720002 4464.6391564699998 0.67084843793828242 0.48336709773221564 -0.56242210318025465 0.39635068152364084 -0.87468690109423652 -0.27897842624458769 -0.62679223876138723 -0.035764142434791396 -0.7783652198964135 7.6000000000014634 +2 6546.1031688200001 -190.0594621720002 4464.6391564699998 -0.67084843793828242 -0.48336709773221564 0.56242210318025465 0.39635068152364084 -0.87468690109423652 -0.27897842624458769 0.62679223876138723 0.035764142434791396 0.7783652198964135 7.6000000000014634 +2 6571.4743707999987 -189.30032010399992 4495.5539718999999 0.67084843793828242 0.48336709773221564 -0.56242210318025465 0.39635068152368702 -0.87468690109423397 -0.27897842624453029 -0.62679223876135803 -0.035764142434855872 -0.77836521989643404 7.6000000000020727 +2 6571.4743707999987 -189.30032010399992 4495.5539718999999 -0.67084843793828242 -0.48336709773221564 0.56242210318025465 0.39635068152368702 -0.87468690109423397 -0.27897842624453029 0.62679223876135803 0.035764142434855872 0.77836521989643404 7.6000000000020727 +1 6549.1154339995801 -196.70708262031783 4462.5189204305407 -0.39635068152274822 0.87468690109431324 0.27897842624561514 +1 6536.8323538204204 -77.682616178982158 4550.162036649459 0.39635068152274683 -0.87468690109431413 -0.2789784262456142 +1 6574.4866359795797 -195.94794055231785 4493.4337358605408 -0.39635068152274822 0.87468690109431324 0.27897842624561514 +1 6523.7442320195796 -197.46622468831785 4431.6041049905407 -0.39635068152274822 0.87468690109431324 0.27897842624561514 +2 0 0 -8.881784197e-16 0 0 1 1 0 -0 -0 1 0 11.5 +1 5.2175188920100002 -9.55060426963 -3.5 0.083251371105611274 -0.15239061262502063 0.98480775301213319 +2 0 0 -7 0 0 1 1 0 -0 -0 1 0 10.265711135 +1 -5.2175188920100002 9.55060426963 -3.5 -0.083251371105611274 0.15239061262502063 0.98480775301213319 +1 5.5133936939500003 -10.0921994617 0.34999999999999998 0 0 1 +1 -5.5133936939500003 10.0921994617 0.34999999999999998 0 0 1 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 11.5 +2 0 0 -8.881784197e-16 0 0 1 1 0 -0 -0 1 0 11.5 +2 0 0 -7 0 0 1 1 0 -0 -0 1 0 10.265711135 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 11.5 +2 -5.6572213555299999 10.3554742303 0.40000000000000002 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.29999999999999999 +2 5.6572213555299999 -10.3554742303 0.40000000000000002 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 0 1.3877787807800001e-15 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 11.800000000000001 +2 -1.7763568394e-15 2.6645352590999998e-15 0.69999999999999996 0 -0 1 1 0 0 -0 1 0 11.800000000000001 +2 -1.23601678529e-15 -1.7763568394e-15 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 11.9 +2 -1.23601678529e-15 -1.7763568394e-15 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 11.9 +2 4.3148298474400004 -7.8982430570100002 2.2679491924300001 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 1 +2 -4.3148298474400004 7.8982430570100002 2.2679491924300001 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 1 +2 -1.7763568394e-15 -4.4408920985e-16 3.1339745962199999 0 -0 1 1 0 0 -0 1 0 8.5 +2 1.7763568394e-15 2.91433543964e-16 3.1339745962199999 0 0 1 1 0 -0 -0 1 0 8.5 +2 -5.7051639093900004 10.443232486499999 0.40000000000000002 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.29999999999999999 +2 5.7051639093900004 -10.443232486499999 0.40000000000000002 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 12.199999999999999 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 12.199999999999999 +2 3.8354043088299998 -7.0206604951199996 4 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 1 +2 0 0 4 0 0 1 1 0 -0 -0 1 0 9 +2 -3.8354043088299998 7.0206604951199996 4 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 1 +2 0 0 4 0 0 1 1 0 -0 -0 1 0 9 +1 5.84899157097 -10.7065072551 0.34999999999999998 0 0 1 +1 -5.84899157097 10.7065072551 0.34999999999999998 0 0 1 +1 -4.3148298474400004 7.8982430570100002 5 0 0 1 +1 4.3148298474400004 -7.8982430570100002 5 0 0 1 +2 0 0 5 0 0 1 1 0 -0 -0 1 0 9 +2 0 0 5 0 0 1 1 0 -0 -0 1 0 9 +1 4.6631528902500001 -8.5358441100599993 6 0.28179926116401238 -0.51583008754802262 0.80901699437503549 +2 -4.4408920984999998e-15 -2.4424906541799999e-15 7 -2.23511578476e-15 -1.19377914327e-15 1 1 0 2.23511578476e-15 -2.6682346066400466e-30 1 1.19377914327e-15 10.453085056000001 +1 -4.6631528913300002 8.5358441094700002 6 -0.28179926122893828 0.51583008751288706 0.80901699437482277 +2 8.881784197e-16 1.3322676295499999e-15 7 -1.2746412216999999e-15 -6.9633967307099996e-16 1 1 0 1.2746412216999999e-15 -8.8758325160139799e-31 1 6.9633967307099996e-16 10.453085056000001 +1 7.33521074064 -13.427013196900001 0.75 0 0 1 +1 -7.33521074064 13.427013196900001 0.75 0 0 1 +2 0 0 1 0 0 1 1 0 -0 -0 1 0 15.300000000000001 +2 0 0 1 0 0 1 1 0 -0 -0 1 0 15.300000000000001 +2 0 3.5527136788e-15 7 0 0 1 1 0 -0 -0 1 0 14.800000000000001 +2 0 3.5527136788e-15 7 0 0 1 1 0 -0 -0 1 0 14.800000000000001 +7 0 0 4 266 89 6382.8553700673383 -92.974820343944558 4455.589875711783 6382.9144042480357 -92.971451916679797 4455.6631857311731 6382.9737360686922 -92.968740333800554 4455.7362862513255 6383.0333599083424 -92.966685940442588 4455.8091702756365 6383.1534323581918 -92.963885888283073 4455.954797319886 6383.2138833853815 -92.963145778193464 4456.0275384546994 6383.2746173432843 -92.963068659295246 4456.1000472648893 6383.3966393855644 -92.96424029120908 4456.2445863355988 6383.4579274701118 -92.965489042022881 4456.3166165963175 6383.5194867505897 -92.967400671352692 4456.3884006321859 6383.6410039350476 -92.972460424459896 4456.5289959159672 6383.7009438614868 -92.975563637537263 4456.5978243185236 6383.7611257090275 -92.979284348030362 4456.6664105799136 6383.8841201909381 -92.988114906712013 4456.8055271866424 6383.9469500201467 -92.993269620789945 4456.8760394822566 6384.0100275306659 -92.999085877207463 4456.9462786534959 6384.1322989236169 -93.01159352945578 4457.0813725357766 6384.1914606324026 -93.018196907936598 4457.1462645160673 6384.2508268449947 -93.025372685778194 4457.2109084834165 6384.3743706169016 -93.041441638701173 4457.3444593215463 6384.4385788324043 -93.050422655063358 4457.4133272643958 6384.5030110895341 -93.060062465935374 4457.4818962474183 6384.6300819252665 -93.080302603685269 4457.6160692370458 6384.6927057405874 -93.090858346681614 4457.681693951331 6384.7555270206476 -93.102026418608006 4457.7470279395875 6384.8838036937968 -93.126005801813136 4457.8794255827806 6384.9492730329157 -93.138861555446823 4457.9464676768657 6385.0149418570954 -93.152371851034331 4458.0131851752403 6385.1443947086518 -93.180210406982553 4458.1436690250821 6385.2081656451137 -93.194494397231836 4458.2074578093407 6385.2721109406675 -93.209386071212307 4458.2709322997634 6385.4026285148029 -93.240935501424985 4458.3994968668503 6385.4692130521598 -93.25763733734658 4458.4645636818186 6385.5359720733404 -93.274988003580745 4458.5292809887824 6385.6675184015839 -93.31036292800944 4458.6557848616967 6385.7322943192557 -93.328343328533023 4458.7175955355196 6385.7972211016749 -93.346925412937878 4458.7790690483153 6385.9250407208074 -93.38460443274171 4458.899147532079 6385.9879233832362 -93.403659278605744 4458.9577765406739 6386.0509356714774 -93.423270457148874 4459.0160820313295 6386.181885773517 -93.465095886301725 4459.1363309239632 6386.2498426939937 -93.487395351145523 4459.1982238797173 6386.3179365620626 -93.510332598810265 4459.259732049466 6386.4520325143167 -93.556665273159354 4459.3798595647095 6386.518025761553 -93.580017626959531 4459.4385053881142 6386.5841346527113 -93.603960383209795 4459.496781735329 6386.7189367955762 -93.653898406334747 4459.6146530090446 6386.7876380236175 -93.679936437977616 4459.6742206959143 6386.8564503395364 -93.706602994164129 4459.7333807086261 6386.9919074363706 -93.76024678118587 4459.8488483259325 6387.0585451374764 -93.787181590559157 4459.9051839444674 6387.1252742533861 -93.814697515825443 4459.9611291679175 6387.2612895835045 -93.871889942883286 4460.0742128001339 6387.3305820086616 -93.901608511399857 4460.1313224634696 6387.3999594144116 -93.931944945430956 4460.188002473059 6387.5388708278788 -93.993847591303961 4460.3004923665048 6387.608404835788 -94.025413803231558 4460.3563022505186 6387.6780104652698 -94.057591927536023 4460.4116716627041 6387.8173515668368 -94.123165694626366 4460.5215189793216 6387.8870870391156 -94.156561337502637 4460.5759968839056 6387.9568807326214 -94.190562586569925 4460.6300237527175 6388.0941626580197 -94.258576408956841 4460.7353178386775 6388.1616473992935 -94.292548161821514 4460.7866159749292 6388.2291741082572 -94.327078377270311 4460.8374842054664 6388.3667123133991 -94.398502505079449 4460.9401530308605 6388.4367264206221 -94.435436791617263 4460.9919220410184 6388.506772319839 -94.472963274709556 4461.0432200157793 6388.6469142247142 -94.549193302909785 4461.144864119311 6388.7170102305654 -94.587896848123506 4461.1952102482228 6388.7871245510569 -94.627185258898152 4461.2450755666878 6388.9249581841177 -94.70554932620766 4461.3421323241373 6388.9926767126408 -94.744585602359166 4461.3893566729312 6389.0603999575515 -94.784160078288622 4461.4361240978551 6389.1934251205503 -94.862945783960527 4461.5270830139807 6389.2587271338398 -94.902119510024406 4461.5713068508376 6389.3240224434558 -94.941787112138641 4461.6150982356567 6389.459424552545 -95.025078044293537 4461.7050203723347 6389.529529486168 -95.068776736690296 4461.7510841293415 6389.5996136647072 -95.113037171695211 4461.7966403468836 6389.7397270180245 -95.202672894577049 4461.8867290270728 6389.8097561930126 -95.248048182278865 4461.9312614901182 6389.8797511383218 -95.293976592083538 4461.9752777502081 6390.0196591332897 -95.386930728898378 4462.0622695100783 6390.0895721831212 -95.433956456331856 4462.1052450096977 6390.1594375483928 -95.481526366824482 4462.147695940148 6390.2990594822777 -95.577745300488374 4462.2315405992922 6390.3688160510847 -95.626394323792198 4462.2729343281035 6390.4385115079804 -95.675578276843552 4462.3137954244576 6390.5729648879169 -95.771577913810063 4462.391663583895 6390.6377318414497 -95.818322995234496 4462.4287420968994 6390.7024346133912 -95.865523764394965 4462.4653524195928 6390.8364886744521 -95.96435855563368 4462.5403076374396 6390.9058292753871 -96.016061977349679 4462.5785801391839 6390.9750829423056 -96.068281591769889 4462.6163053115897 6391.11340310576 -96.173743063715222 4462.690653847566 6391.1824696024878 -96.226984921385338 4462.7272772112383 6391.251435863036 -96.280732829600524 4462.7633460955221 6391.389154667263 -96.38923031283484 4462.8343680750677 6391.457907211131 -96.443979888004492 4462.8693211704285 6391.5265462744937 -96.499225079585202 4462.9037129562621 6391.6635842611659 -96.610695975332746 4462.9713674024924 6391.7319831846653 -96.666921679654024 4463.0046300629811 6391.8002554488048 -96.723632280301757 4463.0373249076601 6391.9365335341336 -96.838012258914063 4463.1015727780114 6392.0045393555838 -96.89568163678004 4463.1331258040791 6392.0724054119728 -96.953824910869869 4463.164104835967 6392.2031746641715 -97.067005824479381 4463.2228123772438 6392.2660973405327 -97.121981104076994 4463.2506177172436 6392.3288879637657 -97.177357734223222 4463.2779206102659 6392.4565151303796 -97.29097005610987 4463.3325095513665 6392.5213413171023 -97.349235677134487 4463.3597575238091 6392.5860140460518 -97.407922743190511 4463.3864602481763 6392.7173450886812 -97.528240010394427 4463.4397046288223 6392.783991824951 -97.589900467434603 4463.4662064726708 6392.8504613163668 -97.652001439663678 4463.4921183059578 6392.983033059968 -97.777072386341956 4463.5427570814281 6393.0491353123361 -97.840042360964304 4463.5674840236825 6393.1150475705117 -97.903440822783139 4463.5916160854767 6393.2419473141799 -98.026681000143626 4463.6370628199047 6393.3029609439673 -98.086466469391979 4463.6584570172708 6393.3637993034718 -98.146613088504694 4463.6793317689135 6393.4873619767341 -98.269859395015743 4463.7207928294392 6393.550072685638 -98.332985949453146 4463.7413398200988 6393.6125838232574 -98.396489852034662 4463.7613244577533 6393.739420994063 -98.526522165232066 4463.8008591345388 6393.8037321116817 -98.593077594380688 4463.8203681618479 6393.8678169505647 -98.660025301272768 4463.8392701488428 6393.9955217893903 -98.794692319518788 4463.8758565236622 6394.0591417895102 -98.862411631058805 4463.8935409115365 6394.1225232296019 -98.930510269502733 4463.9106147406092 6394.2422655301662 -99.060369868880827 4463.9418352021194 6394.2986743857819 -99.122057700662822 4463.9561019324183 6394.3548822288922 -99.184040399834373 4463.9698754777673 6394.4711950200444 -99.313376009694892 4463.9974556098377 6394.5312671629245 -99.380775259375056 4464.0111832415641 6394.5910957520973 -99.448504889307031 4464.0243364247317 6394.7123829999255 -99.587043219580423 4464.0499408418355 6394.7738235629322 -99.657875496671807 4464.0623502287972 6394.8349912006679 -99.729048851045093 4464.0741409398179 6394.9567689141495 -99.872063960484098 4464.0964828613251 6395.0173789900637 -99.943905715747505 4464.1070340718443 6395.0777044294236 -100.01607479462302 4464.1169644578122 6395.1957043016282 -100.15855400590537 4464.1352607997278 6395.2533984177126 -100.22884242601849 4464.1436688939193 6395.310816610192 -100.2994232113481 4464.1514966008117 6395.4271315284022 -100.44368777891381 4464.1662487519334 6395.4860078209585 -100.5173923557071 4464.1731309521474 6395.5445769430953 -100.59139668019144 4464.1793891495618 6395.6610896414204 -100.73999053416303 4464.1906564552037 6395.7190332177697 -100.81458006385562 4464.1956655634467 6395.7766584187493 -100.889455051065 4464.2000495853208 6395.8912610485486 -101.03976148543587 4464.2075667333993 6395.9482384775265 -101.11519293280583 4464.2106998596137 6396.0048865098743 -101.19089538281912 4464.21320717654 6396.1155711027977 -101.34020813823672 4464.2169049562208 6396.1696303560402 -101.41380057127527 4464.2181378466357 6396.2233726151226 -101.48763225318743 4464.2187870116468 6396.3321214527532 -101.63840600483593 4464.2189202160553 6396.3871046363256 -101.71536498649695 4464.2183618155304 6396.4417373205324 -101.79256611172185 4464.2171772372976 6396.5502912504971 -101.94743775518347 4464.2135560736542 6396.6042124964051 -102.0251082736345 4464.2111194882391 6396.6577728033863 -102.10300604174378 4464.2080570733606 6396.7604927305465 -102.25385362562645 4464.2009356317994 6396.8097011002019 -102.32677417807008 4464.1969599027698 6396.8585880360897 -102.39987914126351 4464.1924422828197 6396.9593080974555 -102.55187407427135 4464.1819493563007 6397.0110912174769 -102.63079143775047 4464.1758908608263 6397.0624938339388 -102.70990692680903 4464.1692082298414 6397.1645282470163 -102.86851890225867 4464.1545961021111 6397.2151600437719 -102.94801538886955 4464.1466666053448 6397.265401524387 -103.02769474744818 4464.1381143783101 6397.3650942658014 -103.18740384920432 4464.1197662282511 6397.4145455267399 -103.26743359260219 4464.1099703052014 6397.4635968841485 -103.3476308488485 4464.099553416414 6397.5608904351138 -103.50834493104666 4464.0774798301863 6397.6091326288042 -103.58886175722066 4464.065823132717 6397.6569655623061 -103.66953064047459 4464.0535475923098 6397.7518037755608 -103.83115695575302 4464.0277613089602 6397.7988090556655 -103.91211438792382 4464.0142505663134 6397.845395955278 -103.99320833360281 4464.000123460909 6397.9377241266284 -104.15565365127578 4463.9706393561382 6397.9834653982671 -104.23700502356371 4463.9552823564009 6398.0287794100495 -104.31847728717162 4463.9393118290436 6398.118544281142 -104.48164790478985 4463.90614690858 6398.1629951405766 -104.56334625902636 4463.8889525154273 6398.207010107526 -104.64514981256914 4463.8711477841043 6398.2941598751886 -104.80895156533566 4463.8343211867541 6398.3372946760237 -104.89094976478545 4463.815299320675 6398.3799852032353 -104.97303741083439 4463.7956706580171 6398.4644695854831 -105.13737579158719 4463.7552036312754 6398.5062634406368 -105.21962652651808 4463.7343652671361 6398.5476048973587 -105.30195090373338 4463.7129239981077 6398.6293751390695 -105.46673107361021 4463.6688398957658 6398.6698039244156 -105.54918686646511 4463.6461970627151 6398.7097724477871 -105.63170045476963 4463.6229555646341 6398.7887813828211 -105.79682736404642 4463.5752798170188 6398.8278217943434 -105.87944068527369 4463.5508455671006 6398.8663943454067 -105.96209592183365 4463.5258172367749 6398.9373410824546 -106.11606891040024 4463.4781111300354 6398.9698363735697 -106.18737793957212 4463.4555853026968 6399.0019788976861 -106.25870711435314 4463.4326213863969 6399.0693683704421 -106.40995687272566 4463.3830126778357 6399.1045249971794 -106.4898812843613 4463.3562568610268 6399.1392330713816 -106.56981740701443 4463.3289559527584 6399.2077459628736 -106.72969871843455 4463.2732689534932 6399.2415507804963 -106.80964390739189 4463.2448828627312 6399.2749009035842 -106.88958647383897 4463.2159566732043 6399.3395111422742 -107.04659731350756 4463.1580816430469 6399.3708033627445 -107.12366627359674 4463.1291705062877 6399.4016674005907 -107.20071970647012 4463.0997619845612 6399.4647883530133 -107.36048870070334 4463.0377400929619 6399.4969790941295 -107.44320089017666 4463.0050506903335 6399.5286697985721 -107.52587980207936 4462.9717934516657 6399.5899696919541 -107.6883055831085 4462.905316084506 6399.6196129751761 -107.7680552465317 4462.8721342216231 6399.6487846170348 -107.84775932617613 4462.8384289686219 6399.707204387134 -108.00990674547904 4462.7687554694194 6399.7364180379227 -108.09234625202824 4462.7327493933644 6399.7651201386943 -108.17472126706352 4462.6961885747933 6399.8214958185072 -108.33932648389877 4462.621964590784 6399.8491693976275 -108.42155668592679 4462.5843014252441 6399.8763260051173 -108.50370656646331 4462.5460906552589 6399.92868162796 -108.66500017058564 4462.4699177359089 6399.95391585572 -108.74414987320145 4462.4319924487536 6399.9786634568245 -108.82321023810863 4462.3935635010585 6400.0271810627482 -108.98113815583937 4462.3157052539327 6400.0509510673537 -109.06000570880006 4462.2762759541311 6400.0742300953789 -109.13876976559688 4462.2363499735829 6400.1206158973018 -109.29888583315147 4462.1540683636495 6400.1436868268001 -109.38022980687275 4462.1116768869533 6400.1662266228914 -109.46144736161608 4462.0687605318089 6400.2102397154895 -109.62361403745558 4461.9818864193676 6400.2317130120582 -109.70456315877632 4461.9379286619514 6400.2526509425088 -109.78537026565469 4461.8934543807145 6400.2934521418265 -109.94668491515192 4461.8034814354223 6400.3133154110383 -110.02719245807428 4461.7579827715163 6400.3326393905954 -110.10754247311327 4461.711976236701 6400.370205162716 -110.26791204606884 4461.6189563585685 6400.3884469550403 -110.3479316041189 4461.5719430148529 6400.4061458447468 -110.4277782115624 4461.5244307456151 6400.4386799310687 -110.57886888420838 4461.4333837923514 6400.4536219662696 -110.65014838479713 4461.3899460892198 6400.468125098816 -110.72127718738902 4461.3461143853783 6400.4978740564911 -110.87141158123106 4461.2525672361162 6400.5130124875823 -110.95037905072004 4461.2027564560394 6400.5276020263645 -111.02914460111282 4461.1524645026611 6400.5556806189652 -111.18625675411279 4461.0509280141314 6400.5691696728236 -111.2646033569377 4460.9996834788408 6400.5821071340715 -111.34273293129148 4460.9479675349448 6400.6068764892561 -111.49854303868466 4460.8436028667693 6400.6187083832283 -111.57622357193935 4460.7909541423451 6400.6299863025361 -111.65367209256634 4460.737844045997 6400.6514321293625 -111.80809025805429 4460.6307114124802 6400.6616000369104 -111.88505990312892 4460.5766888751605 6400.6712119073645 -111.96178268528132 4460.5222152687966 6400.6893218300065 -112.11471979516361 4460.4123764959713 6400.69781988252 -112.19093412324158 4460.3570113295973 6400.7057601566185 -112.26688688067387 4460.3012056575371 6400.7205237301378 -112.4182547173877 4460.1887241043923 6400.7273470292794 -112.49366979673437 4460.1320482229194 6400.7336111299046 -112.56880874834872 4460.0749426528018 6400.7434835623271 -112.69836016851033 4459.9753768857663 6400.7473527928832 -112.75290469585242 4459.9331143884883 6400.7509229611096 -112.80729514750522 4459.8906275928121 6400.7541938990253 -112.86152873824861 4459.847918692094 + 0 5 0.011551063350370488 3 0.023150746981667657 3 0.034750430613050068 3 0.045950125797153657 3 0.057549806319023122 3 0.068349513056279204 3 0.079949196687636379 3 0.091148888762291339 3 0.1027485723937572 3 0.11394826757798876 3 0.12554794809970993 3 0.13674764328373959 3 0.14754734691124496 3 0.15914703054234688 3 0.17034672572653867 3 0.18194640935785333 3 0.19314610143230579 3 0.20474578506353133 3 0.21634546869467799 3 0.22794515232575022 3 0.23914484440029665 3 0.25074452803147479 3 0.26234421166255345 3 0.27354390373710563 3 0.28434361047426016 3 0.29594329410558629 3 0.30754297462735675 3 0.31914265825856714 3 0.3307423418896952 3 0.34154204551729639 3 0.35314172914845604 3 0.36474141277963024 3 0.37634109641069124 3 0.3879407800419305 3 0.39954046056360137 3 0.41034016730067041 3 0.42153985937532734 3 0.43313954300654861 3 0.44473922663779292 3 0.45553893026530889 3 0.46673862544934719 3 0.47833830908053054 3 0.48993799271173993 3 0.50033772343967486 3 0.51153741551431908 3 0.52313709914565909 3 0.53473678277684555 3 0.54593647485153063 3 0.55753615848278471 3 0.56913584211408641 3 0.58073552574532028 3 0.5919352178199323 3 0.60353490145126543 3 0.6151345850826726 3 0.62593428871037504 3 0.63753397234162812 3 0.6491336559729397 3 0.66073333960423952 3 0.67233302323553779 3 0.6839327037572438 3 0.6955323873886059 3 0.70713207101999953 3 0.71873175465129358 3 0.73033143828271163 3 0.74193111880450879 3 0.75353080243584336 3 0.76353052916916075 3 0.77473022435348204 3 0.78592991642823329 3 0.79672962316539953 3 0.80832930679678805 3 0.81952899887151298 3 0.83112868250285821 3 0.84272836613422619 3 0.85392805820896212 3 0.86512775339305148 3 0.87672743702431277 3 0.88832712065555619 3 0.89992680117719959 3 0.91152648480845033 3 0.92192619998883285 3 0.93352588362014621 3 0.94512556725150154 3 0.95672525088282956 3 0.96832493451412505 3 0.97992461503582839 3 0.99152429866679626 3 1 5 +7 0 0 4 182 61 6400.7541938990253 -112.86152873824851 4459.847918692094 6400.7574464497266 -112.91545746088178 4459.8054498747206 6400.7604031248775 -112.96923108183128 4459.7627614418698 6400.7630637593265 -113.02284686275017 4459.7198555499872 6400.7678968150285 -113.1321109619728 4459.6317145925468 6400.7700425820885 -113.18774483053532 4459.5864601529411 6400.7718653976281 -113.243200607506 4459.540973560459 6400.7748649596742 -113.35374986073869 4459.4495411293938 6400.7760417061818 -113.40884333705115 4459.403595290767 6400.7768953351797 -113.46375260429544 4459.3574223588721 6400.7779562994465 -113.5731966642801 4459.2646274435901 6400.7781636347154 -113.62773145707051 4459.2180054601604 6400.7780477937658 -113.68207598447472 4459.171161518464 6400.7771698080096 -113.79037851531179 4459.077034927278 6400.7764076632047 -113.84433651879421 4459.0297522777428 6400.7753223907639 -113.8980982637414 4458.9822528786372 6400.7725543093138 -114.00337632499443 4458.8884711553692 6400.7708933954655 -114.05490614394256 4458.8422033427332 6400.7689313972242 -114.1062475751358 4458.795738308916 6400.7643246452253 -114.21037518480246 4458.700752189844 6400.7616580098875 -114.26314747491941 4458.6522169407644 6400.7586686550176 -114.31571191860762 4458.6034753879703 6400.7522732790394 -114.41680871886207 4458.5089606194124 6400.7489102116269 -114.46536914119561 4458.4632145173609 6400.7452677095598 -114.51374454764181 4458.4172941196903 6400.7371337124523 -114.61369019314624 4458.321694897063 6400.7325993153336 -114.66523165218589 4458.2719896338176 6400.7277430026943 -114.71655413970767 4458.2220885871993 6400.7173871194418 -114.8187555161369 4458.1219004713812 6400.7118875488231 -114.86963440509085 4458.0716134021359 6400.7060666357511 -114.92028866699852 4458.0211360936382 6400.6937828044493 -115.0211423557178 4457.9198066054641 6400.6873198862131 -115.0713417825755 4457.8689544257422 6400.6805363052763 -115.12131100143517 4457.8179176140493 6400.6663286042085 -115.22078351858467 4457.7154803953472 6400.658904484073 -115.2702868169205 4457.6640799882916 6400.6511604874486 -115.31955440273543 4457.6125006178454 6400.6353116828386 -115.41592206231725 4457.5107743495855 6400.6272285246996 -115.46303829577192 4457.4606393871218 6400.6188479877492 -115.5099298211928 4457.4103428384751 6400.6011831419364 -115.60492522750089 4457.3076297912139 6400.5918772449604 -115.65301259622008 4457.2552017338166 6400.582253326038 -115.7008536629485 4457.2026060260996 6400.5623705445687 -115.79603792515503 4457.0970851492939 6400.5521116820128 -115.84338112067658 4457.0441599801561 6400.5415358977698 -115.89047274698537 4456.9910729999201 6400.5201272811537 -115.98253259242446 4456.8864173738521 6400.5093158877507 -116.0275180377311 4456.8348594952586 6400.498210156883 -116.07226421524712 4456.7831561713656 6400.4750040720537 -116.16286289348587 4456.6776123359059 6400.4628823613011 -116.20869783158589 4456.6237614442771 6400.4504461977058 -116.25427109268573 4456.5697603733697 6400.4249463759288 -116.3448892462969 4456.4614638658622 6400.4118827177354 -116.38993413884961 4456.4071684292121 6400.3985060177865 -116.43471233985534 4456.3527288060995 6400.3711280494072 -116.52373043272796 4456.2435672276843 6400.3571267809648 -116.56797032463584 4456.1888452723324 6400.3428139857833 -116.61193859899174 4456.1339851712037 6400.3145754785228 -116.69631368095091 4456.0277875366592 6400.3006911461707 -116.73675698320362 4455.9764679954469 6400.2865381291213 -116.77696079325337 4455.9250338000311 6400.2566278861495 -116.85984577297593 4455.8181227957684 6400.2408294870838 -116.90248985376742 4455.7626287518369 6400.2247227790613 -116.94485306133595 4455.7070083549252 6400.1935925729695 -117.02465996877319 4455.6012876106297 6400.1786293853611 -117.06215923145351 4455.5512114478288 6400.1634197621479 -117.09942917701149 4455.5010384243433 6400.131914582068 -117.17493171506312 4455.3985697567587 6400.1155997579563 -117.2131461994082 4455.3462666938203 6400.0990206883243 -117.2511097659669 4455.2938640912462 6400.0647118772513 -117.32792814347304 4455.1869204128898 6400.0469622605315 -117.36676388727805 4455.1323720172113 6400.0289302319416 -117.40532581981577 4455.0777220888895 6399.9929572939127 -117.48053074986464 4454.970180124028 6399.9750361302413 -117.51719309465861 4454.9172950121429 6399.9568540922901 -117.55359722949206 4454.8643206489542 6399.9186039609494 -117.62856295921573 4454.7542680608412 6399.8984959240015 -117.66708461765505 4454.6971765147709 6399.8780890499711 -117.70530424763655 4454.6399880952449 6399.8366799192227 -117.78113525438083 4454.5254238489915 6399.8156776624865 -117.8187466311778 4454.4680480222105 6399.7943788601269 -117.85605178324926 4454.4105816616302 6399.7511905540996 -117.93004554330379 4454.2954742426336 6399.7293010504118 -117.96673415132113 4454.2378331841655 6399.7071173910172 -118.00311244001104 4454.1801079616089 6399.6621642484151 -118.07524438712889 4454.0644955860289 6399.6393947651859 -118.11099804558972 4454.0066084329519 6399.616333613827 -118.1464373931498 4453.9486435134431 6399.5696305592855 -118.21668357921469 4453.8325645650839 6399.545988656083 -118.25149041775168 4453.7744505361816 6399.5220576691609 -118.28597905816676 4453.7162651643202 6399.473620208295 -118.35431616114307 4453.5997581818929 6399.4491137343293 -118.38816462373542 4453.5414365712722 6399.4243208570351 -118.42169110662834 4453.4830500648541 6399.3750298262185 -118.48695151879197 4453.3681691832408 6399.3505509900215 -118.51870739526238 4453.3116789871901 6399.3258077046503 -118.55015974811924 4453.2551342200532 6399.2749017282677 -118.61356659383053 4453.1399200822034 6399.2487199044881 -118.64549890248716 4453.0812469561679 6399.2222572219889 -118.67710211137661 4453.022521667117 6399.1687730992307 -118.73964686854387 4452.9049732678213 6399.1417516589472 -118.77058841685015 4452.8461501575239 6399.1144523196026 -118.8011974043433 4452.787281388999 6399.0593008947326 -118.86174690703552 4452.669459055498 6399.0314488091826 -118.89168742226215 4452.6105054904674 6399.0033218764911 -118.92129202604133 4452.5515127871577 6398.9465214600214 -118.97982617156245 4452.433455636974 6398.9178479762168 -119.00875571333161 4452.3743911900456 6398.8889027884416 -119.03734610454177 4452.3152941377793 6398.8304722383527 -119.09384545930409 4452.1970413663939 6398.8009868760128 -119.12175442288201 4452.1378856472193 6398.7712330430813 -119.14932110939003 4452.0787038664739 6398.7122269531292 -119.20282819457243 4451.9623362710754 6398.6829927794743 -119.22879189369753 4451.9051520006833 6398.6535113751324 -119.25443375383644 4451.847949438079 6398.5940571721239 -119.30507118391012 4451.7335136318325 6398.5640843734336 -119.33006675386561 4451.6762803881447 6398.533867411089 -119.35473787262769 4451.619034755583 6398.4762118254248 -119.40082025899373 4451.5106590914847 6398.4488224013012 -119.42229758200517 4451.4595309734468 6398.4212407024534 -119.44351435940311 4451.4083974359482 6398.3612513865601 -119.48877795862261 4451.2979418313471 6398.3287777140695 -119.51273443806815 4451.2386186180229 6398.2960486363327 -119.53633782258915 4451.1792942245474 6398.2300833207246 -119.5828358286973 4451.0606496428009 6398.1968470828215 -119.6057304503052 4451.0013294544751 6398.1633590900046 -119.62826940392462 4450.9420146514467 6398.0958833284794 -119.67263352018209 4450.8234023797031 6398.0618955597392 -119.69445868284004 4450.7641049109334 6398.0276597699985 -119.71592572252861 4450.7048193911214 6397.9598849959229 -119.75741336645552 4450.5883226123033 6397.9263626922184 -119.77745832218326 4450.5311103210906 6397.8926126737597 -119.79716728704524 4450.4739151786434 6397.8234472848872 -119.83660309258998 4450.3575231243703 6397.7880154860795 -119.85630543272696 4450.2983276737195 6397.7523432441367 -119.87564517182818 4450.2391570594109 6397.684236748175 -119.91163430419061 4450.1269902392733 6397.6518492779969 -119.9283550439993 4450.073988518533 6397.6192715678108 -119.9447827224828 4450.021011750564 6397.5499578331883 -119.97891212530547 4449.9090032775102 6397.5131757301451 -119.99654214325362 4449.8499782377885 6397.4761607883829 -120.01380568001943 4449.790990439592 6397.4029536847511 -120.04701529635112 4449.6751285155815 6397.3667771641412 -120.06298627809744 4449.6182516445342 6397.3303873622954 -120.0786139042886 4449.5614154678269 6397.2571849724145 -120.10918086870282 4449.4478303625847 6397.2203723843504 -120.12412020693823 4449.3910814340061 6397.1833502913032 -120.1387146127765 4449.3343790592189 6397.1075613050298 -120.16772097307359 4449.2190499445196 6397.0687793195339 -120.18210779611056 4449.1604268016881 6397.0297767911306 -120.19612300363127 4449.1018599792724 6396.9513349892795 -120.22340867771123 4448.9848454505791 6396.9118957157962 -120.2366791442833 4448.9263977442461 6396.8722402401472 -120.24957648542794 4448.8680128335773 6396.7925012970718 -120.27462353081583 4448.7513750580165 6396.7524178296089 -120.28677323507084 4448.6931221930718 6396.7121225725023 -120.29854842786675 4448.6349385781887 6396.6311129618753 -120.32134852883536 4448.5187162800066 6396.5903986083194 -120.33237343701869 4448.4606775966549 6396.5494769479565 -120.34302257205067 4448.4027145947703 6396.4714780506274 -120.36250545610206 4448.2929343723999 6396.4344410396843 -120.37141304147498 4448.2411016751048 6396.3972408638965 -120.38001771191068 4448.1893346939905 6396.3210805187027 -120.39693976849797 4448.0839483415502 6396.2821076870559 -120.40523337645699 4448.0303343027863 6396.2429625512659 -120.41319950852444 4447.9767961876141 6396.161419179899 -120.42904188733391 4447.865916960749 6396.1189947620551 -120.4368677659952 4447.8085879075106 6396.0763760804712 -120.44431498029824 4447.7513525781196 6395.9996122884932 -120.45698892023208 4447.648897437798 6395.9655383685094 -120.46235627049599 4447.6036416834968 6395.9313449260544 -120.46748499477678 4447.5584484489409 6395.8537704881437 -120.47854048436987 4447.4564173408262 6395.810319703648 -120.48432640958887 4447.3996172673451 6395.7666831960014 -120.48973235733838 4447.3429222333416 6395.682065639754 -120.49943714221497 4447.233651049326 6395.6411090018291 -120.50378661980373 4447.1810604936427 6395.5999954332901 -120.50780625782822 4447.1285662302935 6395.5045454584833 -120.51633998475718 4447.0073807560138 6395.4500969143492 -120.52061524128412 4446.9387610498034 6395.3953857546639 -120.52432123563069 4446.8703173476115 6395.3404165353413 -120.52745772841266 4446.8020552850894 + 0 5 0.01629888635078252 3 0.033315415950536637 3 0.050331945550329701 3 0.067348475149911297 3 0.084365004749480166 3 0.10079475746637698 3 0.11781128706597646 3 0.13365426290057003 3 0.15067079249997961 3 0.16768732209962622 3 0.18470385169926098 3 0.2017203812988233 3 0.21815013401574312 3 0.23516666361508523 3 0.25218319321462396 3 0.26861294593201412 3 0.28562947553177709 3 0.30264600513158474 3 0.3196625347314363 3 0.33550551056572198 3 0.3525220401654301 3 0.36777823911728413 3 0.38362121495178819 3 0.4000509676687059 3 0.4158939435033463 3 0.43291047310310032 3 0.44992700270263047 3 0.46694353230206964 3 0.4839600619012791 3 0.50097659150080087 3 0.51799312110035001 3 0.53442287381745346 3 0.55143940341695219 3 0.56845593301689989 3 0.58547246261631081 3 0.60248899221601759 3 0.61950552181551877 3 0.63593527453285015 3 0.65236502725016554 3 0.66703444931931188 3 0.68405097891951339 3 0.70106750851941335 3 0.71808403811949995 3 0.73451379083653423 3 0.75153032043653878 3 0.76678651938838815 3 0.78380304898822362 3 0.80023280170522282 3 0.81666255442271496 3 0.83367908402285218 3 0.85069561362268786 3 0.86771214322270651 3 0.88472867282211665 3 0.89998487177358721 3 0.91582784760802638 3 0.93284437720761626 3 0.94634024551124762 3 0.96335677511072737 3 0.97919975094561906 3 1 5 +2 7.5749235099499996 -13.865804477899999 1 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.5 +2 -7.5749235099499996 13.865804477899999 1 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.5 +7 0 0 4 266 89 6395.3404165353413 -120.52745772841251 4446.8020552850894 6395.2813952834467 -120.53082541839483 4446.7287613223079 6395.2220765237407 -120.53353655038724 4446.6556767654847 6395.1624658700293 -120.53559078198228 4446.5828086095808 6395.0444814710218 -120.53834300062331 4446.4397132702316 6394.986124751129 -120.53908007742127 4446.3694727998954 6394.9275040881639 -120.53919910250507 4446.2994486796342 6394.8118482793761 -120.53821895960156 4446.1623385813691 6394.7548312796371 -120.53716314695467 4446.0952369864954 6394.6975784946026 -120.53553272277988 4446.0283479937016 6394.5783528698512 -120.53095969621177 4445.890067735676 6394.5163445412054 -120.52792884131782 4445.8187099873767 6394.4540756680872 -120.52423553394755 4445.7476108026658 6394.3290288587459 -120.51552485196044 4445.6059431847088 6394.266250922351 -120.51050747733115 4445.5353747512645 6394.2032244671518 -120.5048284879271 4445.4650785054937 6394.0766866883787 -120.49214849900429 4445.3250438565356 6394.0131753646292 -120.48514749946854 4445.2553054531536 6393.9494276911319 -120.47748610458279 4445.1858527044869 6393.8214719502439 -120.46084412457868 4445.0475318190074 6393.7572638826741 -120.45186353943696 4444.9786636820036 6393.6928317707798 -120.4422241593945 4444.9100945019436 6393.565761215179 -120.42198486759862 4444.775921119407 6393.503137534939 -120.41142953975634 4444.7102962094441 6393.4403163874176 -120.40026188254281 4444.6449620228595 6393.3120399788877 -120.3762833426054 4444.5125639705639 6393.2465707716628 -120.36342801749223 4444.4455216655115 6393.180902076625 -120.34991814987026 4444.3788039533656 6393.0491783788875 -120.32159205374771 4444.2460304838105 6392.983123376006 -120.30677582520761 4444.1799747262176 6392.9168815530938 -120.29130777826204 4444.1142563302701 6392.7863274796709 -120.25962695517511 4443.9857611514635 6392.7220274581241 -120.24345825214181 4443.9229610770053 6392.6575649829447 -120.22668474913587 4443.86048701862 6392.5260188708171 -120.1913106568951 4443.7339826882708 6392.4589238437675 -120.17266620916483 4443.6699765240437 6392.3916672026544 -120.15337639164589 4443.6063322445598 6392.2591681985004 -120.11419720406511 4443.4819615639308 6392.1939363495085 -120.09435144483614 4443.421210222964 6392.1285657187591 -120.07390756908704 4443.3608073894939 6391.9952192305764 -120.03107592602964 4443.2385649030803 6391.9272337099383 -120.00864481036606 4443.1767509792535 6391.8591121413838 -119.98557621182979 4443.1153226567585 6391.7226100542439 -119.93816861458727 4442.9932489707226 6391.6542295355393 -119.91382961615555 4442.9326036068023 6391.5857260963012 -119.88885769434938 4442.8723555837478 6391.4484865567783 -119.83765292151539 4442.7526657139915 6391.3797504562408 -119.81142007007873 4442.6932238673398 6391.3109046333411 -119.78455921925817 4442.6341908722652 6391.1777618944443 -119.73148240300105 4442.5209965091326 6391.1134787074652 -119.70534971903332 4442.466779941552 6391.0491115093682 -119.67867709381694 4442.4129272129949 6390.917832975515 -119.62324871827731 4442.303977465097 6390.8509157066992 -119.59445240310936 4442.2489082318762 6390.783919857774 -119.56508037997983 4442.1942400549842 6390.6497830067492 -119.50519027875849 4442.0857155282547 6390.5826420044477 -119.47467220027627 4442.0318591785126 6390.5154344475031 -119.44358378272376 4441.9784136146591 6390.3857031593889 -119.38253308758685 4441.8761414345026 6390.3231877655871 -119.35264898627588 4441.8272575752026 6390.2606250137524 -119.32227783245219 4441.7787358195501 6390.1281907800221 -119.25700589923095 4441.6768675011126 6390.0583089199008 -119.2219868206405 4441.6236102301955 6389.9883808785053 -119.18636808537278 4441.5708132428808 6389.8532712462111 -119.11643585273502 4441.4697589899888 6389.7880949092432 -119.08220175079119 4441.4214397557489 6389.7228898041694 -119.04745368117126 4441.3735279308621 6389.5900170497362 -118.97562958435614 4441.2767677320298 6389.5223476400233 -118.93851500187456 4441.22795039425 6389.4546592039187 -118.90085411385253 4441.179579877994 6389.3168385152394 -118.82308215879746 4441.0820296764532 6389.2467053204682 -118.78293162210004 4441.0328827890735 6389.1765649701183 -118.74220254055302 4440.9842245902364 6389.0387021110628 -118.66101950487598 4440.8895557018586 6388.9709796299785 -118.62060449337937 4440.843511576476 6388.9032628378636 -118.57965742714185 4440.7979315050316 6388.7654347190428 -118.49522534806817 4440.7060964066141 6388.6953242470763 -118.45170192265746 4440.6598754123988 6388.6252331325113 -118.40761587947044 4440.614161042663 6388.4851030945983 -118.31832714449858 4440.5237542466439 6388.4150641710557 -118.27312445259008 4440.4790618202342 6388.3450580811295 -118.22736772974554 4440.4348847126703 6388.2075376797347 -118.1363519076225 4440.3490749758184 6388.1400206866811 -118.09113005688077 4440.3074071351612 6388.0725466307485 -118.04539988535632 4440.2662273795931 6387.9376964640151 -117.95293117792195 4440.1848513228797 6387.8703203530804 -117.90619264162122 4440.1446550219116 6387.8029992687498 -117.85895407417173 4440.104954101751 6387.6660770734788 -117.761780641681 4440.0251499821707 6387.5964804014129 -117.71180973340159 4439.9850830543119 6387.5269559243015 -117.66131178482114 4439.9455551981046 6387.3952487522602 -117.56454956505753 4439.8716180660876 6387.3330505825797 -117.51838773388961 4439.8371022913598 6387.2709206246527 -117.47180974501129 4439.8030255404392 6387.1396463014535 -117.37240672837028 4439.7318743058531 6387.0705197562465 -117.31948101002628 4439.6949076150295 6387.0014906966398 -117.26604711638051 4439.6584939488494 6386.8636408057537 -117.15817335278095 4439.5867795626073 6386.7948199742832 -117.10373348267846 4439.5514788424452 6386.7261098853487 -117.04879581142282 4439.516738043656 6386.5889244041673 -116.93793554297983 4439.4483828717484 6386.5204490116685 -116.88201294590326 4439.4147684982354 6386.4520975546766 -116.82560320929456 4439.3817206194626 6386.3203605026629 -116.71574392423558 4439.3190039666415 6386.2569575287534 -116.66235852140731 4439.2892593341194 6386.1936729671861 -116.60856001149074 4439.2600109820723 6386.062672623324 -116.49613048150296 4439.2003820303471 6385.9949758420462 -116.4374366878961 4439.1700780447736 6385.9274282635524 -116.37827713180052 4439.1403523201016 6385.80891149338 -116.27342890505719 4439.089097920757 6385.7578762146013 -116.22793551421969 4439.0673225874607 6385.7069333621585 -116.18217987755726 4439.0458828829724 6385.5890593396098 -116.07550795103441 4438.9969625005551 6385.5221984191494 -116.01440010596798 4438.9697302452023 6385.4555094348216 -115.95284683999127 4438.9430858844116 6385.3270750831371 -115.83313676007339 4438.8927747921798 6385.2653059661889 -115.77503847099081 4438.8690294340868 6385.2036965942734 -115.71656405920486 4438.8457978716679 6385.0830833039627 -115.60105226586468 4438.8012074529106 6385.0240673992412 -115.54404187251939 4438.7798111047678 6384.9652089492347 -115.48669163058227 4438.7588946450805 6384.8410433576546 -115.36466432622183 4438.7156667757154 6384.7757757554482 -115.29990540075289 4438.6934728842234 6384.7107159808666 -115.23473541061989 4438.6718801710404 6384.5854966702509 -115.10810830293647 4438.6313486889685 6384.5253086262073 -115.04670508876144 4438.6123295895395 6384.465311170934 -114.98495610915036 4438.5938349855251 6384.3434925449601 -114.85847737912621 4438.5572322663684 6384.2816861292149 -114.79372193276215 4438.5391638347965 6384.2200956023717 -114.72860597358768 4438.5216627507052 6384.1017408338757 -114.6023412338869 4438.4890077560158 6384.0449460944401 -114.54124130708789 4438.473775481365 6383.98834665308 -114.47984029026827 4438.4590349235523 6383.8690393273155 -114.34932659158933 4438.4288954512904 6383.8063801765447 -114.28014158169093 4438.4136168270543 6383.7439754671495 -114.21059454117271 4438.3989528395632 6383.621829867654 -114.07320035644624 4438.3713412712787 6383.5620713265771 -114.00537729443658 4438.3583519395115 6383.5025609316344 -113.93722905737944 4438.3459380605273 6383.3819307598797 -113.79784927296292 4438.3218405715825 6383.3208294102078 -113.72659453036293 4438.3101988761091 6383.260005848635 -113.65500437542225 4438.2991767882204 6383.1410135115202 -113.51364700466418 4438.2787324967021 6383.0828255139031 -113.44390205275798 4438.2692682308189 6383.024907144867 -113.37385709422443 4438.2603834109459 6382.9075613041159 -113.2306676851647 4438.2434775588654 6382.8481538110354 -113.15750188124943 4438.2354987087856 6382.789046834655 -113.08402802945071 4438.2281430585535 6382.6714452251281 -112.93647842003999 4438.2146794525997 6382.6129505918198 -112.8624026622235 4438.208571496858 6382.5547677848826 -112.78803304627448 4438.2030880357506 6382.439036969181 -112.63872047762362 4438.1933710386056 6382.3814889600862 -112.56377752486927 4438.1891375022178 6382.3242639069467 -112.488555073425 4438.1855293946082 6382.2104706409036 -112.3375656736696 4438.1795646097862 6382.1539024280191 -112.26179872500308 4438.1772079329003 6382.0976681146858 -112.18576679805088 4438.1754772587565 6381.9858780380619 -112.03318766121816 4438.1732681284111 6381.9303222746166 -111.95664045112679 4438.1727896722077 6381.8751111615029 -111.87984293618561 4438.1729374311963 6381.7691723267617 -111.73107525854601 4438.1744318581923 6381.7183980035397 -111.65913744335255 4438.1756951398502 6381.6679312630595 -111.5869950592087 4438.1775011158625 6381.5639061171196 -111.43695461409614 4438.1823720265556 6381.5103956095127 -111.35902605038046 4438.1855203082869 6381.4572499442756 -111.28087591790953 4438.1892941930619 6381.3516984495072 -111.12414758813402 4438.1980923225819 6381.2992926198303 -111.04556939061239 4438.2031165673388 6381.2472617833428 -110.9667846967979 4438.2087655690311 6381.1439600313515 -110.80881750840183 4438.2213118796981 6381.092689115706 -110.72963501360185 4438.22820918869 6381.0418031277113 -110.65026121411088 4438.2357300480471 6380.9408107195413 -110.49114630794351 4438.2520173011326 6380.8907042992259 -110.41140520104724 4438.2607836948855 6380.8409925189362 -110.33148809143717 4438.2701720726654 6380.7423677364504 -110.17131729200393 4438.2901908683834 6380.6934547339051 -110.09106360204895 4438.3008212860177 6380.6449458558473 -110.01064931298926 4438.3120717621487 6380.5504042103385 -109.85229318496856 4438.3354012627597 6380.5043437393679 -109.77436170541066 4438.3474383396406 6380.4586684787801 -109.69629470830498 4438.3600513585116 6380.3664791442552 -109.53711100787986 4438.3868979069221 6380.3199933716915 -109.45598496136968 4438.4011732238014 6380.2739296816044 -109.37472885321813 4438.4160637741215 6380.1842289512115 -109.21477833314233 4438.4465377254592 6380.1405630058953 -109.13609220575225 4438.4620795289775 6380.0972985773997 -109.05729917164111 4438.4781921353169 6380.010049748058 -108.89669581539729 4438.5121517489424 6379.9660948185583 -108.81487823467771 4438.5300401475024 6379.9225789886295 -108.73296141972797 4438.5485375829803 6379.8364338125684 -108.56894509493551 4438.586746853166 6379.7938044663169 -108.486845584866 4438.6064586879274 6379.7516225041627 -108.40466261390961 4438.6267758850463 6379.668161374575 -108.24014557194558 4438.6686169801178 6379.626882207026 -108.15781150071066 4438.6901408781277 6379.5860584499778 -108.07540979008562 4438.712266114665 6379.5053295206499 -107.91048695080592 4438.7577148939563 6379.4654243482573 -107.82796582192346 4438.781038436774 6379.4259823500161 -107.74539291417267 4438.8049589473376 6379.3493761747786 -107.58300830227425 4438.8531438344917 6379.3121803511476 -107.50319956882488 4438.8773679103324 6379.2754231770077 -107.42335712388459 4438.9021441734849 6379.2014956570265 -107.26076664953027 4438.9537010455269 6379.1643574396103 -107.17801668951574 4438.9805216359391 6379.1276968730481 -107.09524620322757 4439.0079296020131 6379.0553380004467 -106.92968010071837 4439.0639149013441 6379.0196396943056 -106.84688448426867 4439.0924922346794 6378.9844259977272 -106.76408426392913 4439.1216515596052 6378.9149745028963 -106.59849054074363 4439.18112847271 6378.8807367045492 -106.51569703766889 4439.211446060971 6378.8469901948674 -106.43291485574505 4439.2423399209665 6378.7804861574987 -106.26738907512718 4439.3052741235733 6378.7477286294543 -106.18464547619293 4439.3373144659636 6378.71546878546 -106.10192911690383 4439.3699250274422 6378.6552359859679 -105.94511997127998 4439.432848056188 6378.6271647884105 -105.87102028048571 4439.4630492757951 6378.599498288203 -105.79695460659066 4439.4937039767519 6378.5418335612239 -105.64036132071197 4439.559504644777 6378.5119346279344 -105.55784340814908 4439.5947607115322 6378.4825447167686 -105.47538287478866 4439.6305746181624 6378.4247884853976 -105.31059239239892 4439.7033111258115 6378.3964221653869 -105.22826244317632 4439.7402337272279 6378.3685704221516 -105.14600572098179 4439.7777071737974 6378.313901346799 -104.98165453642358 4439.8537484443004 6378.2870840146052 -104.89956007383262 4439.8923162683377 6378.2607865166774 -104.81755464381681 4439.9314276246914 6378.2092361469877 -104.6537376033402 4440.0107297754794 6378.1839832751548 -104.57192599265289 4440.0509205700246 6378.1592551951544 -104.49021916871899 4440.0916472704484 6378.1108532736616 -104.32703078830566 4440.174164547303 6378.0871794321038 -104.24554923160059 4440.2159551238492 6378.0640350371577 -104.16418815536956 4440.2582736706399 6378.0188094959276 -104.0017226100675 4440.3439584528569 6377.9967283492961 -103.92061814070283 4440.3873246881221 6377.9751809983009 -103.83964977594532 4440.4312106531006 6377.9331579233394 -103.67800077987339 4440.520013514164 6377.9126821996033 -103.59732014841219 4440.5649304106473 6377.8927443131224 -103.51679116731103 4440.6103584970115 6377.8539479457459 -103.35605196423731 4440.7022282143244 6377.8350894647974 -103.27584174204226 4440.7486698453995 6377.8167725521253 -103.19579862839278 4440.7956138313048 6377.7830639356544 -103.04432422871609 4440.8855896127716 6377.7675656433739 -102.97285864966869 4440.9285237439653 6377.752505271992 -102.90153910240426 4440.9718547151688 6377.7215755542657 -102.75099137130606 4441.064348709865 6377.7058133728606 -102.67180017397581 4441.1136077704323 6377.6905989759271 -102.59280513033353 4441.1633516379043 6377.6612685717428 -102.43522250526399 4441.2637993265398 6377.6471525644502 -102.35663492361807 4441.3145031478407 6377.6335871623178 -102.27825865028035 4441.3656821160594 6377.607560071423 -102.12194375313926 4441.4689804120617 6377.5950983826233 -102.04400512912024 4441.5210997399872 6377.5831898019942 -101.96629284611106 4441.5736842807009 6377.5608725737711 -101.81400755300855 4441.6779444478079 6377.5504263642024 -101.73941869702408 4441.7295888894178 6377.540497775627 -101.66505449391697 4441.7816576661062 6377.5216775251374 -101.51678866523271 4441.8866344928119 6377.5127858634878 -101.44288703960628 4441.9395425431894 6377.5044135103744 -101.36922335916834 4441.9928655175963 6377.4884283889223 -101.2197629448211 4442.1022507153057 6377.4808534275307 -101.14398398882032 4442.1583427551377 6377.4738370677369 -101.06847465105393 4442.2148693661311 6377.4597658189168 -100.90452970550521 4442.3389859626013 6377.4529292838306 -100.81620219763536 4442.4067434920962 6377.4468713434308 -100.72827150564967 4442.475088678596 6377.4415927036544 -100.64074933410885 4442.5440123047783 + 0 5 0.011548533482787829 3 0.022748228667457054 3 0.033547932295468111 3 0.045147615927163397 3 0.056747299558701086 3 0.068346983190321939 3 0.07994666682178439 3 0.091146358896495944 3 0.10274604252801474 3 0.11434572615953249 3 0.12554541823442925 3 0.13714510186563086 3 0.14834479704975942 3 0.15994448068114825 3 0.17154416120277116 3 0.1831438448340445 3 0.1939435515713091 3 0.20514324364611133 3 0.2163429388306003 3 0.22674265401107108 3 0.23834233764221247 3 0.2491420412697509 3 0.26034173645395881 3 0.27194142008520567 3 0.28314111216001581 3 0.29474079579128204 3 0.30634047942248177 3 0.31754017149707647 3 0.32873986668120325 3 0.34033955031231117 3 0.35073926549257362 3 0.36233894912368908 3 0.37393863275470834 3 0.38553831327630411 3 0.39633802001307711 3 0.40793770364407461 3 0.41673746192573013 3 0.42833714555672125 3 0.43913684918397305 3 0.44953656436405021 3 0.46113624799513059 3 0.47193595473212169 3 0.48313564680651344 3 0.49353536198670106 3 0.5051350611653882 3 0.51633475634939829 3 0.52793443687085295 3 0.5391341320550479 3 0.55073381568635738 3 0.5623334993176492 3 0.57393317983940018 3 0.58553286347053146 3 0.59713254710165986 3 0.60793225072911627 3 0.61953193436015752 3 0.63113161799135487 3 0.64273130162256376 3 0.65433098525379763 3 0.66593066577552051 3 0.67713036095973655 3 0.6887300445909823 3 0.69992973666564051 3 0.71152942029684241 3 0.72312910392803065 3 0.73472878755931514 3 0.74632847119064916 3 0.75752816326532513 3 0.76912784689663038 3 0.78072753052780042 3 0.79232721415907092 3 0.80392689468086365 3 0.81432661297086495 3 0.82592629349268054 3 0.83752597712401355 3 0.84912566075522145 3 0.86072534438656667 3 0.87232502801793743 3 0.88392470853980132 3 0.89552439217116608 3 0.90712407580253085 3 0.91752379098303183 3 0.9291234746143967 3 0.94072315824579789 3 0.95232284187714 3 0.96352253395194432 3 0.97472222913632778 3 0.98632191276775827 3 1 5 +7 0 0 4 182 61 6377.4415927036553 -100.64074933410868 4442.5440123047792 6377.4382230577421 -100.5848791213091 4442.5880100437971 6377.4351709745106 -100.52917537887599 4442.6322434956892 6377.4324366376031 -100.47364115163754 4442.6767102626609 6377.4276689637818 -100.36441251807473 4442.7648987260563 6377.4256186932835 -100.3107089209354 4442.8086081232977 6377.4238694884662 -100.25717144330159 4442.8525338575919 6377.4209216430072 -100.14852821167382 4442.942389867434 6377.4197448965006 -100.09343473536107 4442.9883357060598 6377.4188912674999 -100.03852546811616 4443.0345086379548 6377.4178303032331 -99.929081408130997 4443.1273035532367 6377.4176229679642 -99.874546615340222 4443.1739255366665 6377.4177388089147 -99.820202087936522 4443.2207694783629 6377.4186016569838 -99.713766842112506 4443.3132731972883 6377.4193267620103 -99.661663025035608 4443.3589181075249 6377.4203530950081 -99.609742068455361 4443.4047651605406 6377.4230554904243 -99.504423520193697 4443.498503330602 6377.4247534483684 -99.45103941720788 4443.5464089715924 6377.4267743852424 -99.397857297441547 4443.594526264771 6377.4314619574516 -99.291902887605133 4443.6911788069838 6377.4341285927912 -99.239130597486621 4443.7397140560624 6377.4371179476593 -99.18656615379841 4443.7884556088566 6377.4436275267799 -99.08366405353874 4443.884658141139 6377.4471258906706 -99.033312113474182 4443.9321053217072 6377.450924765496 -98.983159241103408 4443.9797398606997 6377.4592695131887 -98.881472812988633 4444.0770865586364 6377.4638372190557 -98.829953917578806 4444.1268121599942 6377.4687268224579 -98.778654189926684 4444.1767333546204 6377.4791492475897 -98.67649872317449 4444.2769613840346 6377.4846820693228 -98.625642984027039 4444.3272682188681 6377.4905362118479 -98.575012065627547 4444.3777651006412 6377.5028864550477 -98.474205448713988 4444.4791333485928 6377.5093825557278 -98.424029750154403 4444.5300047148166 6377.5161992937738 -98.374084450688457 4444.5810605185543 6377.5299810491579 -98.278088575941453 4444.6800017161486 6377.5369034182831 -98.23200695091667 4444.7278629252132 6377.5441030628836 -98.186129646316616 4444.7758792633977 6377.5593330954453 -98.093096548555849 4444.8740016197198 6377.5673843756304 -98.045956335761431 4444.9241191674146 6377.5757330649003 -97.999040657758059 4444.9743984862926 6377.5930243696066 -97.90566318838836 4445.07527546249 6377.6019669850511 -97.859201396984588 4445.1258731198486 6377.6112061175809 -97.812968957385991 4445.1766273445046 6377.6302764330421 -97.72096752786274 4445.2784436760285 6377.6401076159818 -97.675198537901906 4445.3295057829373 6377.6502343322354 -97.629663645773846 4445.3807192047998 6377.671449960133 -97.53744892874397 4445.485277739469 6377.6825603191774 -97.490786293564312 4445.5386336609008 6377.6939865240056 -97.444379878977529 4445.5921461125372 6377.7174693257539 -97.352084598388785 4445.6994781367275 6377.7295259226839 -97.306195732344051 4445.7532977093297 6377.7418970659292 -97.26056819424771 4445.8072678726949 6377.7663922144066 -97.172969325605152 4445.9117711321878 6377.7784744234914 -97.130962858420176 4445.9622845722879 6377.7908281142791 -97.089187118789496 4446.0129235354943 6377.8170124012231 -97.003023819393505 4446.1182077901849 6377.830884613476 -96.9586720135989 4446.1728719923785 6377.8450685675962 -96.914591151232003 4446.2276751763193 6377.8740583553445 -96.826976161753308 4446.3375534272991 6377.8888641889862 -96.78344203460145 4446.3926284943873 6377.9039801602848 -96.740183699237491 4446.4478364628767 6377.9337668602848 -96.657187518242125 4446.5546956776143 6377.9483964001565 -96.61741262732059 4446.606329632601 6377.9632933463745 -96.577880780794004 4446.6580736641017 6377.9947438282607 -96.49639680349668 4446.765617766514 6378.0113383351991 -96.454482302371019 4446.8214343669688 6378.0282395911099 -96.412852694874744 4446.8773720043855 6378.0614670031973 -96.333019044515723 4446.9856172476402 6378.0777524349642 -96.294776756298518 4447.0379091475525 6378.0943021706344 -96.256785250481244 4447.0903007730976 6378.1291740614743 -96.178511949105982 4447.1991665016449 6378.1475366991135 -96.138268960615505 4447.2556555392339 6378.166202317313 -96.098319614920584 4447.3122535995108 6378.204137415597 -96.019012597779692 4447.4256614897258 6378.2234068956986 -95.979654926297812 4447.4824713197149 6378.2429772571413 -95.940595286232082 4447.5393838967275 6378.2827175435814 -95.863076358644307 4447.6534082349717 6378.3028874685961 -95.82461707108672 4447.7105199962543 6378.323356075839 -95.786460104618783 4447.7677281947836 6378.3648883564892 -95.710755003200504 4447.882331124486 6378.3859520299156 -95.673206868215047 4447.9397258557119 6378.4073120872927 -95.635965243622294 4447.9972106823898 6378.4498758407399 -95.563372656947109 4448.1103689225993 6378.4710595301922 -95.528000782126355 4448.1660364457557 6378.4925173200272 -95.492918388306961 4448.2217821205732 6378.53520275952 -95.424578692131988 4448.3314304090336 6378.5564112588554 -95.391300955865034 4448.3853277421531 6378.5778725820792 -95.358295670703953 4448.4392924848044 6378.6229071714388 -95.290408604612907 4448.5513537954794 6378.6465191202069 -95.255568922925164 4448.6094603218498 6378.6704202434094 -95.221047307069099 4448.667638413086 6378.7179640595386 -95.153823359788475 4448.7821227811701 6378.7415872439888 -95.121099342685554 4448.8384244261115 6378.7654775510355 -95.088675301886894 4448.8947868796549 6378.8137899180447 -95.024430487091394 4449.007627582846 6378.8382119780272 -94.992609713068774 4449.0641058325391 6378.8628986683407 -94.961092229513454 4449.1206390697826 6378.9119076628276 -94.899781798762049 4449.2317887774761 6378.9362114926817 -94.869967461831621 4449.2864015952027 6378.9607590374044 -94.840438079520439 4449.3410602113636 6379.0121754798556 -94.7797858795861 4449.4545157772018 6379.0390816380768 -94.748707056480512 4449.5133193600486 6379.0662661090983 -94.717960323342339 4449.5721694992844 6379.1211886374576 -94.657134402960864 4449.6899563724974 6379.1489266948201 -94.627055215689367 4449.7488931065272 6379.1769400257299 -94.597311484316734 4449.8078698789604 6379.2335141039648 -94.538498187953024 4449.9258969693037 6379.2620748513164 -94.509428622935047 4449.9849472872684 6379.2909077415688 -94.480697768374341 4450.0440311123575 6379.3491145868429 -94.423916622294868 4450.1622592343319 6379.3784885418936 -94.395866330750053 4450.2214035312718 6379.4081314188425 -94.368157891767353 4450.2805747929342 6379.4648575534375 -94.316258617085111 4450.3928410787075 6379.4918883747023 -94.292000414501928 4450.4459314551896 6379.5191328335441 -94.268019303201314 4450.4990385124311 6379.5772146847876 -94.217878414214397 4450.6114106521618 6379.6081039243845 -94.191786527074825 4450.6706792294535 6379.6392557327536 -94.166042139089754 4450.7299623406579 6379.7009978159986 -94.116126878406604 4450.8465064352413 6379.7315704127332 -94.091932358178738 4450.9037666559998 6379.762384597203 -94.068064359797646 4450.9610344135108 6379.824492937636 -94.020983835467959 4451.0755790930361 6379.8557870936229 -93.997771309500806 4451.1328560150978 6379.8873196333961 -93.974887734097635 4451.1901345649558 6379.9519928200643 -93.928975330584436 4451.3067346258667 6379.9851506793084 -93.905970503090799 4451.3660560404978 6380.0185606749892 -93.883321082868648 4451.4253727489668 6380.0858812138613 -93.838735524223907 4451.5439901895861 6380.1197917570862 -93.816799385780683 4451.6032909217893 6380.1539507114194 -93.795221121845756 4451.662580383887 6380.2227616344771 -93.752782691430639 4451.7811302076079 6380.2574136032345 -93.731922524931079 4451.8403905692858 6380.2923101753022 -93.711422581359656 4451.8996331006529 6380.3625886370237 -93.671145368915361 4452.0180759484256 6380.3979705267102 -93.651368100024357 4452.0772762648849 6380.4335931307005 -93.631953282885391 4452.136452196748 6380.5053157983339 -93.593850660619893 4452.2547487450356 6380.5414158620106 -93.575162855475952 4452.3138693615147 6380.5777526710644 -93.556839610573022 4452.3729590472094 6380.647112470584 -93.522781920885606 4452.4849608327477 6380.680089409866 -93.506975756225089 4452.5378796422592 6380.7132535611327 -93.491464141797493 4452.5907686075961 6380.7838013838691 -93.459275630065832 4452.702581005834 6380.8212303885248 -93.442670792607913 4452.7614965804723 6380.8588883964976 -93.426434181256624 4452.8203688391241 6380.9346582261542 -93.394699166903123 4452.9380202139164 6380.9727700478734 -93.379200763886274 4452.9967993301098 6381.0111066800255 -93.364072343100503 4453.0555286198314 6381.081577140947 -93.33710151685888 4453.1627644633245 6381.1136408040838 -93.325142272272132 4453.2112877406335 6381.1458557688029 -93.313437450317707 4453.2597728275869 6381.2159800213931 -93.288629192026164 4453.3647371253774 6381.2539435030176 -93.275617787226409 4453.42120188226 6381.2921093054538 -93.26295395966423 4453.4776092431066 6381.3702118130041 -93.237882886272502 4453.5923157541183 6381.4101630838068 -93.225500956905918 4453.6506105200733 6381.4503270630048 -93.213493262421579 4453.708837369546 6381.5310759697522 -93.190227630679033 4453.8251487991274 6381.571660897338 -93.17896969341011 4453.8832333792889 6381.612454064908 -93.168087278476534 4453.9412436066295 6381.6944523424363 -93.147074656065996 4454.0571089439536 6381.7356574524301 -93.136944448580124 4454.1149640539916 6381.7770662648645 -93.127190926205543 4454.1727383995521 6381.8588518544884 -93.108761610731406 4454.2861298530861 6381.8992149815458 -93.10006025207538 4454.3417526514104 6381.939763785781 -93.09171099885269 4454.397294309716 6382.0183190903654 -93.076288723705773 4454.5042483632815 6382.0563003022198 -93.069167140628281 4454.5556723301288 6382.0944381191266 -93.062349844649972 4454.6070215770833 6382.1754419471135 -93.048572938665743 4454.7154820984406 6382.2183457670953 -93.041687670621528 4454.7725745783882 6382.2614399342265 -93.035181723307161 4454.8295680987248 6382.3480041725343 -93.022929148166639 4454.9433509237124 6382.3914742437501 -93.017182520335098 4455.000140228417 6382.4351298719021 -93.011815891254955 4455.056824277096 6382.5228073902126 -93.00184318246518 4455.1699756008884 6382.5668292804103 -92.997237102750361 4455.2264428760527 6382.6110318757237 -92.993011573649326 4455.2827986337252 6382.7050707690923 -92.984864871655645 4455.4019683677052 6382.7549519767999 -92.98103963029773 4455.4647534637224 6382.8050529072289 -92.977691394892489 4455.5273906863495 6382.8553700673383 -92.974820343944756 4455.589875711783 + 0 5 0.016885663228528157 3 0.033315415946142603 3 0.05033194554617966 3 0.067348475145961539 3 0.083778227863323215 3 0.10079475746298808 3 0.11781128706285797 3 0.13424103978051699 3 0.15125756938043611 3 0.16827409898033363 3 0.18529062858025008 3 0.20113360441512082 3 0.21756335713266711 3 0.23399310984966756 3 0.25042286256732138 3 0.26743939216761792 3 0.28445592176736351 3 0.30029889760205897 3 0.31731542720195333 3 0.33433195680183331 3 0.3501749326363307 3 0.36719146223593191 3 0.38303443807062793 3 0.40005096767034393 3 0.41706749726982423 3 0.43408402686953967 3 0.45110055646958414 3 0.46753030918630489 3 0.48337328502127536 3 0.50038981462120724 3 0.51681956733858703 3 0.53324932005512993 3 0.54909229588934283 3 0.56610882548893782 3 0.58312535508829999 3 0.60014188468747232 3 0.61715841428696994 3 0.63241461323814696 3 0.64943114283736192 3 0.6658608955536609 3 0.68229064826996444 3 0.69930717786905539 3 0.71632370746814211 3 0.73334023706721796 3 0.75035676666659634 3 0.76737329626597206 3 0.78262949521752079 3 0.79964602481703828 3 0.81666255441655133 3 0.8307451996032621 3 0.84717495232036144 3 0.86419148191971829 3 0.8812080115189499 3 0.89822454111757233 3 0.91465429383441088 3 0.92991049278591253 3 0.9469270223855828 3 0.96394355198555626 3 0.98096008158505532 3 1 5 +1 -7.3831532944999996 13.5147714531 6.4000000000000004 -0.3390050494208432 0.62054458056371298 -0.70710678118667292 +2 0 0 5.7999999999999998 0 0 1 1 0 -0 -0 1 0 16 +1 7.3831532944999996 -13.5147714531 6.4000000000000004 0.3390050494208432 -0.62054458056371298 -0.70710678118667292 +2 0 0 5.7999999999999998 0 0 1 1 0 -0 -0 1 0 16 +1 -15.75 8.9232237637999998e-15 2 0 0 1 +2 0 0 4 0 0 1 1 0 -0 -0 1 0 15.75 +1 15.75 -1.78464475276e-14 2 0 0 1 +2 0 0 4 0 0 1 1 0 -0 -0 1 0 15.75 +1 -7.6708086176699997 14.041320990199999 4.25 0 0 1 +1 7.6708086176699997 -14.041320990199999 4.25 0 0 1 +2 6387.4190908715 -107.9607682344985 4452.6034303444694 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.39635068152391373 -0.87468690109422331 -0.27897842624424085 0.62679223876120316 0.035764142435171009 0.77836521989654428 16 +2 6387.4190908715 -107.9607682344985 4452.6034303444694 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.39635068152391373 -0.87468690109422331 -0.27897842624424085 0.62679223876120316 0.035764142435171009 0.77836521989654428 16 +1 6433.1377512700001 -166.87685739 4390.7143137700004 0.67084843793829319 0.48336709773221126 -0.56242210318024577 +7 0 0 5 9 3 6437.1628418999999 -163.97665480399999 4387.3397811599998 6437.4979298199996 -163.54695696799999 4388.10876766 6438.0738892899999 -163.39385054600001 4388.9273487800001 6438.8235536499997 -163.61092311100001 4389.6349764300003 6440.3134797700004 -164.682107726 4390.4915203099999 6441.277051 -166.42826012399999 4390.1401430100004 6441.4970085200002 -167.32459883799999 4389.6321571300005 6441.4027921300003 -168.03088808800001 4388.9127652300003 6441.0677041999998 -168.46058592399999 4388.1437787300001 + -4.7123889803800001 6 4.4408920985e-16 3 4.7123889803800001 6 +1 6437.04261357 -171.36078850999999 4391.5183113499997 0.67084843793829319 0.48336709773221126 -0.56242210318024577 +2 6439.1152730499998 -166.218620362 4387.74177994 0.67084843793829319 0.48336709773221126 -0.56242210318024577 0.64246138354497484 2.7755575615628907e-17 0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 3 +2 52.454570575101194 -79.431958140735446 -8.8501664469513557 -2.4073396628909723e-06 -0.00016075840701501584 -0.99999998707546967 -0.99137847130714474 -0.13102948553197727 2.3450676384120619e-05 -0.13102948760837607 0.99137845855049733 -0.00015905699131878886 2 +2 52.454570575101194 -79.431958140735446 -8.8501664469513557 -2.4073396628909723e-06 -0.00016075840701501584 -0.99999998707546967 0.99137847130714474 0.13102948553197727 -2.3450676384120619e-05 0.13102948760837607 -0.99137845855049733 0.00015905699131878886 2 +1 6444.4717309600001 -169.96206940600001 4401.5817611299999 0.12288999641600278 -0.82036829100501851 -0.55847463317001256 +1 6436.2576373800002 -176.91232171499999 4385.8108035400001 -0.73134152220185855 0.30553578504594092 -0.60974376746288206 +1 6424.7255098699998 -161.71260323199999 4385.1186793899997 0.12288999641600278 -0.82036829100501851 -0.55847463317001256 +1 -16 0.958851077208 -1.7551651237799999 1 0 0 +1 -16 -0.958851077208 1.7551651237799999 1 0 0 +2 -4 0 0 1 0 0 -0 0 1 0 -1 0 2 +2 -4 0 0 1 0 0 -0 0 1 0 -1 0 2 +1 6440.60966912 -148.734874523 4404.55047345 -0.1228899963770408 0.82036829098827235 0.55847463320318536 +1 6439.3402019200003 -155.14549127399999 4402.8608149299998 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 +1 6430.56410366 -151.479061855 4395.5438897200002 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 +2 6436.9646981100004 -151.86217527100001 4397.5150860200001 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 6.0000000001 +1 6431.8335708499999 -145.068445102 4397.2335482400003 -0.12288999593293476 0.82036829080256446 0.55847463357370342 +1 6428.39707215 -171.337487323 4375.89199637 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 +1 6440.28272801 -174.01211912700001 4382.4362709200004 -0.73134152220185855 0.30553578504594092 -0.60974376746288206 +1 6448.1432932500002 -179.58695352000001 4392.3550780899996 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 +2 -4 0 0 1 0 0 -0 0 1 0 -1 0 2.5 +2 -4 0 0 1 0 0 -0 0 1 0 -1 0 2.5 +2 6436.9646981100004 -151.862175272 4397.5150860200001 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 11.5 +2 6436.9646981100004 -151.862175272 4397.5150860200001 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 11.5 +7 0 0 5 15 5 6441.3527472400001 -153.695389979 4401.1735486199996 6441.2369261499998 -152.92221108000001 4401.6998985600003 6440.9857665899999 -152.092491231 4402.11341232 6440.6050963600001 -151.24597167499999 4402.3868860599996 6439.6257574399997 -149.61055819200001 4402.6242826400003 6438.3279459799996 -148.24461566900001 4402.2502163999998 6437.62864584 -147.667700231 4401.9119251700004 6436.2046167099998 -146.788152201 4400.9692823799996 6434.87155325 -146.515857458 4399.6132453199998 6434.2632637400002 -146.546495378 4398.8613555399997 6433.2287213500003 -146.938040108 4397.2908607500003 6432.6412964000001 -147.91889971200001 4395.7472009800003 6432.48034525 -148.53914371100001 4395.0221594799996 6432.4608278799997 -149.25578166 4394.3829733499997 6432.57664897 -150.02896055900001 4393.8566234099999 + -9.4247779607699993 6 -4.7123889803800001 3 8.881784197e-16 3 4.7123889803800001 3 9.4247779607699993 6 +2 54.245188825861504 -62.023807401022083 -8.8469692673791016 -2.4073398923740714e-06 -0.00016075840718299259 -0.99999998707546967 -0.97596996526285595 0.21790508446752485 -3.2680583287319736e-05 0.2179050869048825 0.97596995257022923 -0.00015741994867668715 5 +2 54.245188825861504 -62.023807401022083 -8.8469692673791016 -2.4073398923740714e-06 -0.00016075840718299259 -0.99999998707546967 -0.97596996526285595 0.21790508446752485 -3.2680583287319736e-05 0.2179050869048825 0.97596995257022923 -0.00015741994867668715 5 +1 -4.75 1.1985638465099999 -2.1939564047300002 1 0 0 +1 -4.75 -1.1985638465099999 2.1939564047300002 1 0 0 +1 6449.4002162300003 -152.47563421300001 4401.1526067300001 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 +1 6432.5793612199996 -145.44831115700001 4387.12850007 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 +2 54.245193641541967 -62.023485885721108 -6.8469693190769814 -2.4073398928181598e-06 -0.00016075840718388071 -0.99999998707546967 -0.99464282518449953 0.10337141822908662 -1.4223381374505255e-05 0.1033714191795877 0.99464281229496743 -0.00016014604643241529 11.5 +2 54.245193641541967 -62.023485885721108 -6.8469693190769814 -2.4073398928181598e-06 -0.00016075840718388071 -0.99999998707546967 0.99464282518449953 -0.10337141822908662 1.4223381374505255e-05 -0.1033714191795877 -0.99464281229496743 0.00016014604643241529 11.5 +2 52.454570589545234 -79.431957176185009 -8.8441664471064527 -2.4073396628909723e-06 -0.00016075840701501584 -0.99999998707546967 -0.99137847130714474 -0.13102948553197727 2.3450676384120619e-05 -0.13102948760837607 0.99137845855049733 -0.00015905699131878886 2 +2 52.454570589545234 -79.431957176185009 -8.8441664471064527 -2.4073396628909723e-06 -0.00016075840701501584 -0.99999998707546967 0.99137847130714474 0.13102948553197727 -2.3450676384120619e-05 0.13102948760837607 -0.99137845855049733 0.00015905699131878886 2 +1 5 0 34 0 0 1 +1 -5 6.1232339957399996e-16 34 0 0 1 +7 0 0 5 12 4 6438.35112751 -145.095035903 4383.64844842 6438.5918065400001 -145.80316332300001 4383.3269348200001 6438.8808345300004 -146.492695513 4383.0790724999997 6439.2057541900003 -147.152121483 4382.8998969200002 6439.9316162100004 -148.448003836 4382.6519596600001 6440.7780038700002 -149.639940556 4382.6371237599997 6441.2448615399999 -150.23019383299999 4382.6866966999996 6442.3943968399999 -151.53210780699999 4382.9389318900003 6443.7554400500003 -152.70549946 4383.5539066399997 6444.5873560700002 -153.30762178500001 4384.0287166199996 6445.4721536799998 -153.80426998199999 4384.6572494000002 6446.3565762400003 -154.15580709599999 4385.4100507900002 + 0 6 6.3403688385199999 3 13.0306959711 3 21.591258380799999 6 +7 0 0 5 21 7 6446.3565749700001 -154.15579941600001 4385.4100558600003 6446.5405480299996 -154.22892674400001 4385.5666476699998 6446.7237573100001 -154.29547777600001 4385.7279803700003 6446.90589593 -154.355282157 4385.8938343399996 6447.7375158000004 -154.598734089 4386.6765458199998 6448.5336722399998 -154.69416271 4387.54417397 6449.1214225900003 -154.67317606 4388.26327029 6450.2019467199998 -154.44021467900001 4389.7523187899997 6451.0557553099998 -153.84132277200001 4391.2854391999999 6451.4167622900004 -153.45435322899999 4392.0486192099997 6451.9963194800002 -152.51638256800001 4393.5460340299996 6452.26849838 -151.302874653 4394.9136200200001 6452.3244158199996 -150.63447557399999 4395.5547652599998 6452.2814051699997 -149.42985230900001 4396.5387621899999 6452.0271961799999 -148.16749970999999 4397.3204597900003 6451.8898960799997 -147.647191467 4397.6038631800002 6451.61596267 -146.79647148999999 4398.0082609399997 6451.2862646000003 -145.991658806 4398.3066890099999 6451.1484842600003 -145.68150061399999 4398.4089085599999 6451.0061369499999 -145.38258787199999 4398.4960159499997 6450.8605284300002 -145.095035905 4398.5694695100001 + 19.018065117900001 6 20.746417493599999 3 26.9695886435 3 33.193103160299998 3 39.485156688799997 3 43.865331243699998 3 46.755031794799997 6 +7 0 0 5 15 5 6450.8605284300002 -145.095035905 4398.5694695100001 6450.7234934199996 -144.824415311 4398.6385979699999 6450.5832819999996 -144.56328935400001 4398.6957775800001 6450.4404738900002 -144.31097434200001 4398.7422874599997 6450.0566655399998 -143.66429140100001 4398.8402708399999 6449.6581296300001 -143.069196882 4398.8763503600003 6449.4013715800002 -142.710088778 4398.8787245699996 6448.8935316999996 -142.043682305 4398.8457162100003 6448.31570328 -141.37674515099999 4398.7296826900001 6448.0266465000004 -141.06234898100001 4398.6551043099998 6447.5344981999997 -140.562390292 4398.4977610400001 6446.9898941299998 -140.07049422399999 4398.2709199999999 6446.7845242900003 -139.89316282300001 4398.1783634100002 6446.5731453099997 -139.719232197 4398.07571646 6446.3565715200002 -139.549925196 4397.9628994900004 + 0 6 2.5562203378000001 3 6.8074101031199996 3 10.5507444929 3 12.7011373278 6 +7 0 0 5 18 6 6446.3565762400003 -139.54990230799999 4397.9629247900002 6445.7932441800003 -139.109515442 4397.66947635 6445.1578466700003 -138.67160179999999 4397.2879418399998 6444.4575588799999 -138.26871864500001 4396.7989059600004 6442.8878710299996 -137.581496749 4395.5172277900001 6441.3411858899999 -137.382842036 4393.8431011599996 6440.5576592199996 -137.45140582100001 4392.8495967299996 6439.4492807799998 -137.84638091900001 4391.18808076 6438.6384041700003 -138.667125134 4389.5155001200001 6438.3758667100001 -139.041440741 4388.88046227 6437.9581468300003 -139.90098055999999 4387.6436769800002 6437.7619622399998 -140.940820226 4386.5161882299999 6437.7212651600003 -141.495741466 4385.9905301600002 6437.7455492299996 -142.54638276200001 4385.11653355 6437.9326886600002 -143.635338343 4384.40386175 6438.0475309000003 -144.12818452900001 4384.1172722499996 6438.1883135199996 -144.616003474 4383.8659452000002 6438.35112751 -145.095035903 4383.64844842 + 0 6 7.0088545606999997 3 15.107013371400001 3 20.121076277099998 3 25.135139182900001 3 29.2679994569 6 +1 -4.75 2.3971276930199998 -4.3879128094500004 1 0 0 +2 -4 -4.4408920985e-16 0 1 0 0 -0 0 1 0 -1 0 5.00000000059 +1 -4.75 -2.3971276930199998 4.3879128094500004 1 0 0 +2 -4 4.4408920985e-16 0 1 0 0 -0 0 1 0 -1 0 5.00000000059 +2 0 -1.3999760552199999e-17 0 -0.4794255386042035 -0.87758256189037243 -0 -0.87758256189037243 0.4794255386042035 0 0 0 -1 10 +7 0 0 5 6 2 -8.7758256189000008 4.7942553860399997 -1.1271091615599999e-08 -7.2696658688799998 7.5512623153999998 -1.12520476492e-08 -4.6825426379700001 9.7210762044999992 -1.12330035573e-08 -1.31209612383 10.7099921518 -1.12139598418e-08 2.03724845669 10.281985368899999 -1.1194915750000001e-08 4.7942553860399997 8.7758256189000008 -1.11758717836e-08 + 0 6 15.7079632679 6 +2 0 -1.3999760552199999e-17 0 -0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 -0.87758256189037243 0 0 0 1 10 +2 0 -1.3999760552199999e-17 0 0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 0.87758256189037243 0 -0 0 1 10 +7 0 0 5 6 2 -4.7942553860399997 -8.7758256189000008 -1.13663114476e-08 -7.5512623153999998 -7.2696658688799998 -1.1347267481199999e-08 -9.7210762044999992 -4.6825426379700001 -1.1328223389299999e-08 -10.7099921518 -1.31209612383 -1.13091796739e-08 -10.281985368899999 2.03724845669 -1.1290135582e-08 -8.7758256189000008 4.7942553860399997 -1.1271091615599999e-08 + -15.7079632679 6 0 6 +2 0 -1.3999760552199999e-17 0 0.4794255386042035 0.87758256189037243 0 0.87758256189037243 -0.4794255386042035 0 0 0 -1 10 +2 0 0 -1.11758717836e-08 0 0 -1 -1 0 -0 0 1 0 10 +2 0 0 -1.11758717836e-08 0 0 -1 -1 0 -0 0 1 0 10 +1 61.11610446112833 -54.086525616157616 -24.348261994925963 0 0 -1 +1 47.374198556296264 -69.966072694586018 -24.345676142759146 0 0 -1 +2 -4 0 0 1 0 0 -0 0 1 0 -1 0 3.50000000003 +2 -4 0 0 1 0 0 -0 0 1 0 -1 0 3.50000000003 +2 -8.881784197e-16 -4.4408920985e-16 -2 0 0 -1 -1 0 -0 0 1 0 10.0000000003 +1 -4.7942553860399997 -8.7758256189000008 4 0 0 -1 +1 4.7942553860399997 8.7758256189000008 4 0 0 -1 +2 0 0 -2 0 0 -1 -1 0 -0 0 1 0 10 +2 54.245136466219037 -62.027303896365616 -30.59696890728577 -2.4073398923740714e-06 -0.00016075840718299259 -0.99999998707546967 -0.97596996526285595 0.21790508446752485 -3.2680583287319736e-05 0.2179050869048825 0.97596995257022923 -0.00015741994867668715 5 +2 54.245136466219037 -62.027303896365616 -30.59696890728577 -2.4073398923740714e-06 -0.00016075840718299259 -0.99999998707546967 -0.97596996526285595 0.21790508446752485 -3.2680583287319736e-05 0.2179050869048825 0.97596995257022923 -0.00015741994867668715 5 +1 -16 1.6779893851100001 -3.0715389666199999 1 0 0 +2 3.5527136788e-15 0 0 1 0 0 -0 0 1 0 -1 0 3.5 +1 -16 -1.6779893851100001 3.0715389666199999 1 0 0 +2 0 0 0 1 0 0 -0 0 1 0 -1 0 3.5 +2 6447.6982731099997 -144.128301706 4388.51633236 0.67084843793829319 0.48336709773221126 -0.56242210318024577 0.64246138354497484 2.7755575615628907e-17 0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 15 +2 6447.6982731099997 -144.128301706 4388.51633236 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 15 +2 6447.6982731099997 -144.128301706 4388.51633236 0.67084843793829319 0.48336709773221126 -0.56242210318024577 0.64246138354497484 2.7755575615628907e-17 0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 15 +2 0 0 68 0 0 1 1 0 -0 -0 1 0 5 +2 0 0 68 0 0 1 1 0 -0 -0 1 0 5 +1 0 1.2990381047099999 -0.74999955482799996 0 0.50000022485201601 0.86602527396602769 +1 0 -1.86264514923e-09 -1.4999995529700001 0 0.99999999999986788 5.1404056861493211e-07 +1 0 -1.29903793335 -0.75000009778900001 0 0.49999989952916873 -0.86602546179129236 +1 0 -1.2990379324200001 0.74999990128000005 0 -0.49999980115022052 -0.86602551859038202 +1 0 9.3132257461499999e-10 1.5 0 -1 0 +1 0 1.2990381065800001 0.74999999906899995 0 -0.49999999925599453 0.86602540421399044 +1 -1 0.86602578859500001 -1.49999933126 -1 0 0 +1 -1 1.7320503811600001 2.4518116137399999e-07 -1 0 0 +1 -2 1.2990380848800001 -0.74999954304200001 0 0.49999975461907736 0.86602554545513399 +1 -1 -0.86602540523600002 -1.4999999988599999 -1 0 0 +1 -2 -1.1628166207700001e-09 -1.4999995533699999 0 0.99999999999986777 5.1440185852193203e-07 +1 -1 -1.7320506340699999 -2.98207665911e-07 -1 0 0 +1 -2 -1.29903801944 -0.75000014889699995 0 0.49999999908605924 -0.86602540431210262 +1 -1 -0.86602540325699995 1.5 -1 0 0 +1 -2 -1.2990379323500001 0.74999990097500002 0 -0.49999980083709522 -0.86602551877116485 +1 -1 0.86602540484000001 1.5 -1 0 0 +1 -2 7.6670203519299997e-10 1.5 0 -1 0 +1 -2 1.29903810605 0.74999999933600003 0 -0.49999999908605924 0.86602540431210262 +2 6462.4569387499996 -133.494225556 4376.1430461 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 5.00000000005 +2 6462.4569387499996 -133.49422555699999 4376.1430461 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 5.00000000005 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 5 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 5 +1 6458.7343135399997 -140.33894255800001 4385.3784080699998 0.67084843793829319 0.48336709773221126 -0.56242210318024577 +1 6451.4208983199997 -137.283584706 4379.2809703900002 0.67084843793829319 0.48336709773221126 -0.56242210318024577 +8 0.75062665280892582 3.892219306420964 +7 1 0 2 5 3 72.916926640926633 91.569420820974827 -8.8716682649373979 1 62.373930820597764 87.587192965012804 -8.8709891249468455 0.70710678118261516 58.391702909226879 98.130188650725231 -8.8727088072323568 1 54.40947499785689 108.67318433643767 -8.8744284895174133 0.70710678118261516 64.952470818273994 112.65541219216529 -8.8751076295070561 1 + 0.75062665280892582 3 2.3214229796149448 2 3.892219306420964 3 +1 64.952470818300739 112.65541219209665 -8.8751076297571672 0 0 -1 +7 0 0 6 62 13 64.95247081827398 112.65541219216529 -8.9350761950662694 64.289425566895019 112.40497130092108 -8.9350343384116719 63.645149072777791 112.10444232345979 -8.9349844748587941 63.02447020436955 111.75560701748164 -8.9349269024648859 62.431859975865841 111.36084274172394 -8.9348620141736159 61.871487491720607 110.9230231194573 -8.9347902819805451 60.78085045410252 109.92997623733979 -8.9346280158093663 60.256517978385723 109.36809151885042 -8.9345364258693234 59.778985553192307 108.76430866203725 -8.9344382131148627 59.352313609558003 108.12354576028881 -8.9343341779456455 58.979936294343759 107.45117707109243 -8.9342251925859593 58.348100797776624 106.05288640726538 -8.9339988845603386 58.088957641004313 105.32670511381228 -8.9338815209650964 57.889801117240715 104.58055756316601 -8.9337610920343327 57.752408606013589 103.82063171328252 -8.9336385968130685 57.677792151343596 103.05328557921521 -8.9335150598420316 57.655189399183826 101.57813300483841 -8.9332778622482447 57.697578150165072 100.87037728348206 -8.9331641866084706 57.793264015734358 100.16691023508037 -8.9330513287131872 57.941649293269897 99.472715110117704 -8.9329400882230008 58.141570726290645 98.792674509667194 -8.932831247256674 58.40475723921535 98.095613416917729 -8.9327198224036408 58.418471581162436 98.059735092095863 -8.9327140876763114 58.43233275816543 98.023912596482063 -8.9327083622774399 58.446340393376431 97.98814692580342 -8.9327026463662769 58.460494261683451 97.952438658165491 -8.9326969400351359 58.520847777909665 97.801974406602923 -8.9326728969328322 58.56841497886419 97.687763974590254 -8.9326546511558842 58.61748574808383 97.574182391452197 -8.9326365100912799 58.668049642210853 97.461254490337794 -8.9326184777060149 58.720095669510364 97.349004864831855 -8.9326005579272572 58.9044404886113 96.964767021748912 -8.9325392322434638 59.044057510675124 96.696274749564353 -8.932496405958517 59.192294311962662 96.432337665113451 -8.9324543327090442 59.348963391695612 96.173301682962006 -8.932413067652341 59.513858792416364 95.919502019529617 -8.9323726641814538 59.80204858717542 95.505730992972232 -8.9323068407802193 59.920899348932146 95.342671211416913 -8.9322809136633037 60.043241941295712 95.182179911095304 -8.9322554078573688 60.169006595487751 95.024350574073864 -8.932230338222487 60.298120217913834 94.869274101814014 -8.9322057191958688 60.513716164328684 94.62135311321299 -8.9321663828248443 60.598218814916855 94.526789825325395 -8.9321513844077121 60.683995380405612 94.433370865150962 -8.9321365730176279 60.771026418158129 94.341117700055534 -8.93212195205885 60.859292004423374 94.250051351128874 -8.9321075248627277 60.999928557912874 94.108818759593916 -8.9320851590959638 61.05148223467318 94.057839768363863 -8.9320770879016518 61.103428952846372 94.007259262968773 -8.9320690817134718 61.155764851896073 93.957081036558634 -8.9320611411319124 61.208486022520184 93.907308831959242 -8.9320532667492518 61.678831467048781 93.470089692080563 -8.9319841123771866 62.119624568483303 93.107519534655538 -8.9319268873142637 62.582030577977328 92.772046732341437 -8.9318740704086412 63.063953519446123 92.465250940376805 -8.9318259105574977 63.563156561380254 92.188505115888404 -8.931782623090383 64.586580567587532 91.699665928950949 -8.9317065018097583 65.110548612122926 91.486988184650542 -8.9316735734430885 65.646824619452474 91.306030641926554 -8.9316457739949993 66.193003939339434 91.157649225633975 -8.9316232352738343 66.746611872520845 91.042468985026403 -8.9316060518040441 67.305096242629062 90.960856413364823 -8.9315942763585596 + 0 7 0.14325161115071949 5 0.29797209848799416 5 0.45317950359161796 5 0.5960097984592162 5 0.60377290958952601 5 0.62877471527277029 5 0.68989481554852139 5 0.73065131127946115 5 0.75626832813170985 5 0.77091393795810859 5 0.88598911195100138 5 1 7 +7 0 0 4 29 10 64.090728283361074 91.936521086112592 -8.941707402483134 64.090728280723724 91.936521087368035 -8.9415103741083382 64.090728278086374 91.936521088623508 -8.9413133457334926 64.090728275449038 91.936521089878909 -8.9411163173587251 64.090728270028777 91.936521092459088 -8.9407113854201405 64.090728267245851 91.936521093783838 -8.9405034818563518 64.090728264462967 91.93652109510856 -8.9402955782925595 64.090728258691001 91.936521097856158 -8.9398643709009971 64.090728255701904 91.936521099279005 -8.9396410670732234 64.090728252712864 91.936521100701896 -8.9394177632454497 64.090728246734756 91.936521103547619 -8.9389711555899023 64.090728243745701 91.936521104970453 -8.9387478517621304 64.090728240756647 91.936521106393329 -8.9385245479343531 64.09072823488161 91.936521109189982 -8.9380856404107973 64.090728231995627 91.936521110563774 -8.937870036715017 64.090728229109629 91.936521111937608 -8.9376544330192367 64.090728223337663 91.936521114685192 -8.9372232256276725 64.090728220451695 91.936521116058941 -8.9370076219318886 64.090728217565697 91.93652111743279 -8.93679201823611 64.09072821169066 91.936521120229443 -8.9363531107125542 64.090728208701606 91.936521121652291 -8.9361298068847788 64.090728205712551 91.936521123075167 -8.9359065030570051 64.090728199734443 91.936521125920891 -8.9354598954014577 64.09072819674536 91.936521127343738 -8.935236591573684 64.090728193756334 91.936521128766614 -8.9350132877459085 64.090728180572128 91.936521135042611 -8.9340283333116695 64.090728170376821 91.936521139895689 -8.9332666827052094 64.090728160181811 91.936521144748895 -8.9325050320987422 64.09072814998666 91.936521149602029 -8.9317433814922751 + 0 5 0.079095929234617821 3 0.16255764172196074 3 0.25220170328267788 3 0.34184576484339502 3 0.42839865186778153 3 0.51495153889216805 3 0.60459560045288518 3 0.69423966201360232 3 1 5 +1 72.916926640818787 91.569420821262284 -8.8716682644940192 0 0 -1 +8 -6.0000000021579138 6.0000000023030227 +7 0 0 1 2 2 64.952499127547014 112.65730271061214 3.1248922196100466 64.952470817229383 112.65541219174325 -8.8751076297576219 + -6.0000000021579138 2 6.0000000023035378 2 +8 0.75062665258627748 3.8922193066324917 +7 1 0 2 5 3 72.916954949754 91.571311337236665 3.1283315825930913 1 62.373959128390325 87.589083478201417 3.1290107225840984 0.707106781105863 58.391731216234206 98.132079165813664 3.1272910402981324 1 54.409503304080758 108.67507485342546 3.1255713580139854 0.707106781105863 64.952499127261802 112.657302707649 3.1248922180247973 1 + 0.75062665258627748 3 2.3214229796093848 2 3.8922193066324917 3 +8 -6.0000000015784849 6.0000000029798697 +7 0 0 1 2 2 72.916954949745985 91.571311340534038 3.1283315849700557 72.91692664113431 91.569420822306 -8.871668264494474 + -6.0000000015784849 2 6.0000000029801521 2 +7 0 0 6 32 7 72.91693135766468 91.569735907087363 -6.8716683167478401 72.257473078008445 91.320649853397185 -6.8716258369335455 71.579187768298951 91.121012949916832 -6.871591422469935 70.886800279509544 90.97265144458467 -6.8715653845396973 70.185156198653246 90.876721640497749 -6.8715479247248838 69.479200460587776 90.833820424326262 -6.8715391530854077 68.086007220303927 90.853689286727544 -6.8715389900211399 67.39866854408875 90.913905599179216 -6.8715471794300829 66.716673812265824 91.024478732203804 -6.8715636424584954 66.044601663582853 91.184761499462951 -6.8715882841897065 65.386930178019668 91.393600712093814 -6.8716209264558303 64.033231393336621 91.935247413795111 -6.8717064524242399 63.341836724588333 92.279866020450626 -6.8717612849926484 62.679965369547112 92.680665717671673 -6.8718254059849198 62.053217422267991 93.134399412766783 -6.8718982965070818 61.466757663281932 93.637163353781759 -6.8719793288779094 60.371631483821133 94.743478688470674 -6.8721581178089348 59.864896789672585 95.349107367243548 -6.8722562198705308 59.409974359100886 95.996117831492938 -6.8723612374420471 59.010934962758235 96.678918597301944 -6.8724722633007307 58.671126046018848 97.391457878085134 -6.8725883129392527 58.324331985837183 98.308706421086228 -6.8727379257611974 58.259425598815632 98.491727669865483 -6.8727677889786269 58.198307691014982 98.676078273233429 -6.8727978795685951 58.141012248423515 98.861659795079774 -6.872828181467205 58.087569803378358 99.048372681126935 -6.8728586784186563 57.866220568157154 99.886849475997892 -6.8729956777379568 57.741040264446305 100.54999323086051 -6.8731041518028579 57.663615719194219 101.22130203197163 -6.8732140825659362 57.634537827489417 101.89648370443301 -6.8733247673937514 57.653923368607344 102.5712075715916 -6.8734354961725055 57.721332602737377 103.2410995688422 -6.8735455503039402 + 0 7 0.184752061003228 5 0.36499286170915513 5 0.56663732280275614 5 0.77276093345069197 5 0.82364209742598549 5 1 7 +8 -2.4999861696139654 2.4999861738130047 +7 0 0 1 2 2 69.536356688967743 114.38680603174441 -8.8754029110095871 64.952470817551145 112.65541219408024 -8.8751076343864952 + -2.4999861696139654 2 2.4999861738130713 2 +7 0 0 1 2 2 64.952470817551216 112.65541219408027 -8.9350761950665767 69.536356688967743 114.38680603174441 -8.9353655661572056 + 0 2 1 2 +8 -6.6707929858015955 6.6707929751239305 +7 0 0 1 2 2 65.299402467741686 103.75212035834127 -8.933645748120588 63.968866554981773 90.74524262844966 -8.931551580089927 + -6.6707929858015955 2 6.6707929751239305 2 +8 5.9266632421900418 7.3248579574747392 +7 1 0 2 3 2 86.485016346815769 103.56744624316543 -8.9336670650164791 1 85.520783176034499 94.141422637162322 -8.9321494312178942 0.76542337379494674 76.069214968988604 93.472447792807486 -8.9320191347492166 1 + 5.9266632421900418 3 7.3248579574747517 3 +8 -11.993769407756835 11.993769409068731 +7 0 0 1 2 2 86.4850163562012 103.56744624220505 -8.9336670644870448 88.877256832529952 126.95319553281414 -8.9374322792693874 + -11.993769407757224 2 11.993769409069305 2 +8 -15.52492236714993 15.52492235992756 +7 0 0 1 2 2 58.606377471848695 130.04974892364021 -8.9378572043866367 88.877256833584369 126.95319553278874 -8.9374322796860728 + -15.52492236715042 2 15.524922359928077 2 +8 -14.006230591175644 14.006230588715699 +7 0 0 1 2 2 55.81273766233798 102.74005286852402 -8.9334602153636471 58.606377476233909 130.04974892230638 -8.9378572038875053 + -14.006230591175644 2 14.006230588715699 2 +8 1.386875873711265 2.7850705877008566 +7 1 0 2 3 2 63.968866541870675 90.745242630517041 -8.9315515847389726 1 54.848504496239634 93.314029269427621 -8.9319425829800085 0.76542337421165119 55.812737657794109 102.74005286898795 -8.9334602167781476 1 + 1.386875873711211 3 2.7850705877008566 3 +8 1.023000500999343 4.1645931542697339 +7 1 0 2 5 3 70.538470296289574 119.89461243421874 -8.936253403226937 1 72.111446007322172 117.41079536097956 -8.9358578954323455 0.70710678124292237 74.595263112292244 118.9837710503343 -8.9361167438941163 1 77.07908021726054 120.55674673968991 -8.9363755923563346 0.70710678124292237 75.506104507019415 123.04056381343133 -8.9367711001504802 1 + 1.023000500999137 3 2.5937968276345815 2 4.1645931542700261 3 +8 -4.7123889803800001 4.7123889803800001 +7 0 0 5 9 3 75.506104504090587 123.0405638115752 -8.9367711028484607 75.011939620190219 123.82087795599324 -8.936895356414043 74.211346070647394 124.4071340076774 -8.9369876726067101 73.203998114062657 124.63330632018044 -8.9370216082515803 71.255253593726536 124.25783384932039 -8.9369565556593713 70.082741475206902 122.65664678117504 -8.9366963308068357 69.856569157118955 121.64929883211605 -8.936533843741536 70.044305400658729 120.67492658379298 -8.9363776549274636 70.538470291849094 119.89461243991865 -8.9362534078884615 + -4.7123889803800001 6 4.4408920985e-16 3 4.7123889803800001 6 +8 -3.0000000046015805 2.9999999973619302 +7 0 0 1 2 2 65.299402473069009 103.75212035847007 -8.9336457547010912 65.29938831791064 103.75117509903606 -14.813645680630989 + -3.0000000046020872 2 2.9999999973624822 2 +8 -6.6707929873592171 6.6707929811188045 +7 0 0 1 2 2 65.299388316930205 103.75117509949106 -14.813645674946246 63.968852396260857 90.7442973629677 -14.811551506922269 + -6.6707929873597873 2 6.6707929811188045 2 +8 -3.0000000043124513 2.9999999931883199 +7 0 0 1 2 2 63.968866545984049 90.745242630529518 -8.9315515848165159 63.968852390825681 90.744297371095954 -14.811551506371888 + -3.0000000043125801 2 2.9999999931884203 2 +7 0 0 1 2 2 65.299402448434037 103.75211875093869 -8.9436479927742436 64.024391210802648 91.288031871932745 -8.9416002619933259 + 0 2 1 2 +7 0 0 4 14 5 84.234598847180763 97.879702274092395 -8.9427312000423207 83.776803152858861 97.279472224891478 -8.9426316142282687 83.26537902715458 96.72010141135101 -8.9425385991936679 82.705855740792217 96.208841322945958 -8.9424533580494927 81.51619774042716 95.302046111685627 -8.9423016857363127 80.887532818554249 94.904530293438967 -8.9422349332661426 80.226353518865622 94.563890466360732 -8.9421774308170878 79.197178209839208 94.142872641254385 -8.9421058392551949 78.8475539836721 94.017450239931023 -8.9420844062245113 78.492769776051958 93.907517252442744 -8.9420655013894148 77.627058942915852 93.68036039534536 -8.9420261121697706 77.112036300868795 93.578801947847751 -8.9420081874666799 76.591743605919163 93.509430340637437 -8.9419955297211668 76.069214940863887 93.472446188828826 -8.9419881792951195 + 0 5 0.31571161465858466 3 0.62559550802750974 3 0.78081384408272403 3 1 5 +7 0 0 1 2 2 76.998351521972523 102.55537715601258 -8.9434804183579555 76.069214941927186 93.472446186990581 -8.941988179294821 + 0 2 1 2 +7 0 0 4 56 19 65.299402441586139 103.75211874545758 -8.9436479927733288 65.331980139997825 104.0705881737901 -8.9437003142675113 65.387693861868499 104.38686030288056 -8.9437523321514298 65.466332558264398 104.69835925561658 -8.9438036233618465 65.641485388785824 105.22714564275395 -8.9438907953116935 65.727913405019223 105.44772991846791 -8.9439271920860701 65.82608745114679 105.6633923956087 -8.9439628103463455 66.015047014012978 106.02563662673961 -8.9440226967711087 66.100507601846488 106.17497796459132 -8.9440474045349845 66.191738826984661 106.32088423314788 -8.9440715629882579 66.528038792054275 106.81481025166137 -8.9441534123243525 66.801559056469316 107.14355340220116 -8.944208010979656 67.105702462025064 107.44424442104386 -8.9442580832107161 67.716894068883747 107.94199667766959 -8.9443412354627068 68.016827216469153 108.14782424063841 -8.9443757360266343 68.332697076865855 108.32819595978911 -8.9444060999825314 68.795794692308121 108.54443377894638 -8.9444427090449956 68.932578407415932 108.60277488047191 -8.9444526152772159 69.0712424015111 108.65646688627302 -8.9444617634943704 69.405166982445635 108.77299428297762 -8.9444816988299909 69.601910129047013 108.83155020393306 -8.9444917875895218 69.801138662144965 108.88087822293733 -8.9445003687167386 70.277326222903639 108.97555950899087 -8.9445170698986391 70.555880127999515 109.01275168623299 -8.9445238551325019 70.836158140028047 109.03211191212316 -8.9445277194626751 71.274445479895832 109.03453022780607 -8.9445291928006281 71.432457345942268 109.02974019253423 -8.9445287951984103 71.590160315689786 109.01929164029052 -8.9445274686188299 71.904335242876584 108.98715318084065 -8.9445229684129384 72.06088744077978 108.96545506545829 -8.94451979363728 72.216596452234128 108.93815308820993 -8.9445156975373568 72.645316469543445 108.84704443358811 -8.944501805284732 72.915869560085582 108.77133705358283 -8.9444900509125738 73.181123801828363 108.67851613404828 -8.9444754762327232 73.628278495502755 108.48938174241108 -8.9444455492015038 73.813393175342924 108.40073741366861 -8.944431462785877 73.994205563779275 108.30355952709127 -8.9444159659638505 74.297620586949449 108.12183560697979 -8.9443869014483148 74.42254154317925 108.04118023302549 -8.9443739776703417 74.544679857675277 107.95635275586292 -8.9443603626684514 74.95440406177795 107.6508298086077 -8.9443112514056278 75.227211691867609 107.41023944692277 -8.9442724553003892 75.479258618461458 107.14794719605993 -8.9442300482367312 75.975805844859764 106.53823560929175 -8.9441312513930065 76.211848445693136 106.18390451039589 -8.9440737070368321 76.412558651076523 105.8084717729224 -8.9440126143919585 76.641884402019343 105.25870728877992 -8.9439229948012251 76.701905823683944 105.09739215640808 -8.9438966802378452 76.755580608116205 104.93387227594837 -8.9438699884190491 76.867812979141917 104.54090668149715 -8.9438058023553726 76.920594648260646 104.30982797232437 -8.9437680260469197 76.960872370454069 104.07629038130749 -8.9437298156699025 77.026228420985461 103.52121357009344 -8.943638921862787 77.040510928688661 103.19844618267594 -8.9435860104455163 77.031111903753825 102.87563112492894 -8.9435330330354965 76.998351519695262 102.55537715274264 -8.9434804183574101 + 0 5 0.069432500370469594 3 0.12066728999683643 3 0.15788684094784391 3 0.24999983266899856 3 0.32844582987829196 3 0.36061273557803419 3 0.40500406012653134 3 0.46575188617158519 3 0.49999999641145282 3 0.53424810663526645 3 0.59499593265598716 3 0.63938725719051892 3 0.67155416288238001 3 0.7500001600810573 3 0.84170017814769971 3 0.87892801119824771 3 0.93017843303691039 3 1 5 +8 -2.499999998772906 2.4999999987092778 +7 0 0 1 2 2 72.916926640833935 91.56942082122039 -8.8716682642680098 77.500837863843515 93.300824238006498 -8.871963542525009 + -2.4999999987735597 2 2.4999999987092778 2 +7 0 0 6 17 4 66.346804320930048 104.06761319103886 -8.9437023191381968 66.325029417624719 103.97008609042147 -8.9436862673819206 66.305593478057958 103.87203671219282 -8.9436701356972357 66.288512180032583 103.77353528774614 -8.9436539356433631 66.273798364961436 103.67465250446908 -8.94363767884734 66.261462037867375 103.57545950574361 -8.9436213770040549 66.207051026138842 103.03181462043624 -8.9435320642767309 66.21017794537994 102.58275137256599 -8.9434584079850623 66.261581467973187 102.1354041763592 -8.943385151783108 66.360654278718215 101.69614700160209 -8.9433133397599018 66.505867417278921 101.27119762480062 -8.943243988118617 66.766370887412123 100.71205250248988 -8.9431529063226787 66.844659487876001 100.56051879754823 -8.9431282411695303 66.929115400300915 100.41225249500091 -8.9431041271482474 67.01956651532609 100.26756557885479 -8.9430806150136508 67.115819838408967 100.12675758681077 -8.9430577534275812 67.21766148982509 99.990115610263658 -8.9430355889588906 + 0 7 0.13941279906852894 5 0.76224302818006229 5 1 7 +7 0 0 7 62 11 76.106503973574647 101.88856234743581 -8.9433688437986394 76.127242665497789 101.98144838534385 -8.9433841316933158 76.145918646191987 102.07479503607794 -8.9433994900795568 76.162519621043501 102.16854722473775 -8.9434149098927271 76.177035150594421 102.26264958782524 -8.9434303820253938 76.189456650542937 102.35704647324452 -8.9434458973273472 76.199777391743183 102.45168194030201 -8.9434614466055908 76.239314769788692 102.90801772557893 -8.9435364006819746 76.240031257018799 103.27223527028301 -8.9435961483941675 76.209851329827785 103.63595804082614 -8.9436557390479141 76.148928439477032 103.99605823998361 -8.9437146599388289 76.057781637600172 104.34946694901305 -8.9437724089189885 75.937294892639144 104.69317951027074 -8.9438284952782237 75.699673768058219 105.22297529375614 -8.9439148188420834 75.600454918819651 105.41715124287846 -8.9439464275800464 75.491416679738009 105.60618066147855 -8.9439771679642686 75.372881668592939 105.78946982077598 -8.9440069433924609 75.245215884897405 105.96645276376225 -8.9440356619245485 75.10882849563211 106.13659165013401 -8.9440632363387564 74.883230745717768 106.39046158596352 -8.9441043267842417 74.799700011699656 106.47924490163288 -8.9441186855370276 74.713658195217803 106.56563842255835 -8.9441326461014103 74.625187542932807 106.64955718319833 -8.9441461947417569 74.534373771873589 106.7309198781459 -8.9441593183313479 74.441306069437474 106.80964886212874 -8.9441720043524011 74.082391539211216 107.09617031767007 -8.9442181234382581 73.802107262188272 107.28593243378157 -8.9442485633529536 73.507226914670241 107.45334598789064 -8.9442753013727678 73.199897782722147 107.59709819039999 -8.9442981274234992 72.882386941830859 107.71612876099532 -8.9443168731466205 72.557078081959773 107.8096312212872 -8.9443314121035353 72.153279417698471 107.89204218425209 -8.9443439388123789 72.079808325311049 107.90570728128607 -8.9443459999443888 72.006103450076537 107.91809052839247 -8.9443478502284872 71.93219162949481 107.92918717547168 -8.9443494889513993 71.85809981327931 107.93899317670173 -8.9443509155156562 71.783855063357024 107.94750519053852 -8.9443521294395882 71.637048857154198 107.96174825433675 -8.9443541052353428 71.564493751963695 107.96754590182276 -8.9443548780473687 71.491844372245268 107.97211108449044 -8.9443554484552799 71.419125863933232 107.97544200699406 -8.9443558162263361 71.346363384947708 107.9775375163252 -8.9443559812331976 71.273582105194848 107.9783971018127 -8.9443559434539281 70.863016153122899 107.97627469888623 -8.9443545867540006 70.525329396121236 107.94790393514916 -8.9443491033196523 70.190324951642168 107.89291287535589 -8.9443392597024367 69.860506664839363 107.81162949698782 -8.9443251158541344 69.538313106432966 107.70465465350298 -8.9443067763285313 69.226114181753999 107.5728614211353 -8.9442843901659526 68.822419350951165 107.36366822293243 -8.9442490826185459 68.720109708095336 107.30706150674237 -8.9442395455779966 68.619359409928563 107.24767261844168 -8.9442295559826626 68.520259075555359 107.18555332069329 -8.9442191225462526 68.422897057029033 107.12075899436533 -8.9442082545704302 68.327359439351454 107.0533486385316 -8.9441969619448241 67.827892485615081 106.6801262263014 -8.9441345119162126 67.457697622283007 106.32873684902444 -8.9440759609139562 67.130386384338308 105.93450026050583 -8.9440104866320596 66.85166096073759 105.50379772122365 -8.9439391498545859 66.626106262667832 105.04371712518194 -8.9438631245366214 66.457202216257528 104.56207171949191 -8.943783700905291 66.346804320930048 104.06761319103886 -8.9437023191381968 + 0 8 0.042414656661629295 6 0.20413173153070058 6 0.30118378412760549 6 0.35548799954823113 6 0.50585438729915921 6 0.53915386712064628 6 0.57158703233199826 6 0.72212840373571585 6 0.77421783693834578 6 1 8 +7 0 0 7 32 6 67.21766148982509 99.990115610263643 -8.9430355889588906 67.43136716590945 99.703384537333733 -8.9429890787864679 67.669025814498553 99.434448856636067 -8.9429455465955741 67.928813728320023 99.185777362574783 -8.9429053928853648 68.2086358767462 98.959514128261631 -8.9428689642214891 68.50617546868888 98.757532130434782 -8.9428365621544099 68.818898008747198 98.581430494880777 -8.9428084427775225 69.357664800044176 98.334585964938498 -8.9427692740640818 69.576692707814672 98.248410272848716 -8.9427556759084155 69.800314151981553 98.174306573785444 -8.9427440693166211 70.027729874771182 98.112562093118598 -8.9427344994415758 70.258122697241021 98.063398693110656 -8.9427270006700077 70.490657869001865 98.026972785018316 -8.9427215966089424 70.958295171778289 97.979767198928712 -8.9427150017793657 71.193408254969185 97.9689852346295 -8.9427138106627204 71.428967851660474 97.971110778053784 -8.9427147379800633 71.664124883900087 97.986157402018691 -8.9427177838721494 71.898034427934036 98.014071044414393 -8.9427229373951462 72.12985607251855 98.054730032869173 -8.942730176525556 72.648384435879763 98.175265615483823 -8.9427512228342838 72.933360088499469 98.262691245041751 -8.9427662640979637 73.211976980768426 98.369824121909986 -8.9427845225024836 73.482610572335346 98.496094727130512 -8.9428059006337968 73.743707646774624 98.640778471885071 -8.9428302758155045 73.993787765955076 98.802996241105419 -8.9428575002016135 74.634697101367223 99.284881766021968 -8.9429381226884228 75.002449973992327 99.635692554706552 -8.9429965727807996 75.327582522123137 100.02888800329382 -8.9430618709230529 75.604476517330923 100.45815600946412 -8.9431329678820379 75.828614436785685 100.91649011874954 -8.9432087032274428 75.996567782469654 101.39617173513049 -8.9432878023850009 76.106503973574661 101.88856234743579 -8.9433688437986394 + 0 8 0.21946248234994364 6 0.36368745660993884 6 0.50790585739418814 6 0.6903881816598002 6 1 8 +8 -5.9999999957125407 5.9999999958837318 +7 0 0 1 2 2 69.536385006888196 114.38869654802674 3.1245969331503147 69.53635669657146 114.38680602915919 -8.875402903353006 + -5.9999999957125407 2 5.999999995884532 2 +1 69.536356690161199 114.38680602858652 -8.8754029033520965 0 0 1 +8 -2.4999861731716773 2.4999861736850213 +7 0 0 1 2 2 69.536384999094622 114.38869655372886 3.1245969382616749 64.952499126778704 112.65730270892713 3.1248922148852216 + -2.4999861731731805 2 2.4999861736853077 2 +8 -2.5000000042637143 2.4999999994136952 +7 0 0 1 2 2 72.916954949663094 91.571311337479102 3.1283315772789138 77.500866179508975 93.302714753343153 3.1280362990228241 + -2.5000000042637143 2 2.499999999413721 2 +8 3.8922169014523766 7.0338119600051643 +7 1 0 2 5 3 69.536385000780982 114.3886965492612 3.1245969364963457 1 80.079383921580472 118.37095454906047 3.1239177915535947 0.70710635604500927 84.061629299142183 107.82795097433832 3.1256374750896612 1 88.043874676703012 97.284947399617067 3.1273571586252729 0.70710635604500927 77.500866178752261 93.302714755351261 3.1280362994325515 1 + 3.8922169014523766 3 5.4630144307287702 2 7.0338119600051643 3 +7 0 0 8 23 4 80.78919817600638 100.84500275755741 3.1267909905851323 80.865915028582023 101.18860911789277 3.1267344372224573 80.928521987746052 101.5353699485912 3.1266774010635285 80.976867177391156 101.88460342545399 3.1266199943273163 81.010838467310847 102.23562436638778 3.126562329685985 81.030363485336466 102.58774439965384 3.1265045202372574 81.035409629474032 102.94027213211751 3.1264466794767913 81.025984080041169 103.29251331749747 3.1263889212705491 80.954751233618822 104.34160366973364 3.1262170043170139 80.850427544906893 105.03569704245704 3.1261034020681766 80.689509794418072 105.72043872259022 3.1259914728850227 80.473030100947639 106.39045269343711 3.1258820961096205 80.202593155689911 107.04056581791056 3.1257761163973297 79.880337295556004 107.66580130878005 3.1256743448835524 79.508969147456057 108.261399193057 3.1255775557416721 78.571795469712939 109.52295091743636 3.1253729139531412 77.980272188250325 110.17044107221381 3.1252681532493969 77.323824906179695 110.75632491643729 3.1251736578789453 76.610086567712855 111.27317386268123 3.1250906276711516 75.847451455327729 111.71469513669831 3.1250200742673666 75.045084436285578 112.0757842785504 3.1249628124858311 74.212876247919382 112.35249470671663 3.124919465424322 73.361706897836214 112.54253540151475 3.1248903821734477 + 0 9 0.18302163686910564 7 0.54662496964235008 7 1 9 +7 0 0 6 7 2 78.169071721840709 96.066032919050699 3.1275813652013973 78.818574736660253 96.71820382239278 3.127472788128435 79.394722360477843 97.44375673198158 3.127352353725652 79.886768369793842 98.232031169474936 3.1272218371270801 80.286752616140618 99.070775635888708 3.1270832676125928 80.58863242573689 99.946690781188309 3.1269388416404702 80.78919817600638 100.84500275755744 3.1267909905851328 + 0 7 1 7 +7 0 0 6 17 4 69.091656695526567 93.417508305738991 3.128038125433378 69.549769603106441 93.315225244550618 3.1280537785238991 70.013770136671539 93.239277330666809 3.1280650971553334 70.481749548474014 93.190089739369242 3.1280720162710516 70.951783424156929 93.167902210622515 3.1280745012715663 71.421933252453698 93.172768936711051 3.1280725480291145 72.304594488436919 93.232684562761861 3.1280605512879114 72.717514501143953 93.281886395397024 3.1280514659336425 73.12765916932004 93.35207191405452 3.1280389452499993 73.533701029042604 93.44303711574095 3.1280230259623418 73.934334694448992 93.554466163837091 3.1280037630868951 75.049092970626035 93.926479772187079 3.1279399999052533 75.747601746609391 94.234139599977354 3.1278878157699759 76.415809597274531 94.606273178625642 3.1278251298459296 77.046454207862126 95.039024876072119 3.1277525924475333 77.632849179327607 95.527607797128326 3.1276710052381547 78.169071721840709 96.066032919050699 3.1275813652013973 + 0 7 0.28541677108594898 5 0.53794232192554325 5 1 7 +7 0 0 8 23 4 61.664170821264513 105.11505291017555 3.126137515046143 61.587685240596919 104.77248450400199 3.1261938975755599 61.525224445500655 104.42678067263067 3.1262507599861431 61.476938936167024 104.07861704657694 3.1263079910783058 61.442939946759545 103.72867258850336 3.1263654792023186 61.423299433346884 103.37762942836495 3.1264231122853761 61.418050061835785 103.02617269855502 3.1264807778586716 61.427185195904059 102.67499036905039 3.1265383630844661 61.497528400162835 101.6255001893042 3.1267103478108202 61.601570898377616 100.92993110610001 3.1268241928247869 61.762442291305035 100.24371318273674 3.126936364283603 61.979107436829246 99.572255605540207 3.1270459774115036 62.249953986973843 98.920763273512733 3.127152182361737 62.57283178236284 98.294243383800392 3.1272541630395256 62.945017793160524 97.697484726484731 3.1273511405846461 63.883174495734806 96.435337283391206 3.1275558776796588 64.474619169731923 95.788241156594623 3.1276605739404757 65.130922978940774 95.202717887991369 3.1277550105148375 65.844460422516462 94.686185866971883 3.1278379892279475 66.606845921445554 94.24492918129468 3.1279084998420301 67.408924680470832 93.884045352878104 3.1279657286521867 68.240817224266806 93.607475591664411 3.1280090534141389 69.091656695526552 93.417508305739005 3.128038125433378 + 0 9 0.18246871996539238 7 0.54680090646594581 7 1 9 +7 0 0 7 20 4 73.361706897836243 112.54253540151477 3.1248903821734477 72.969873324202212 112.63002013598195 3.1248769937753318 72.573852201228291 112.69877392926155 3.12486668827228 72.174727263977474 112.7485553754146 3.1248595026021664 71.773588925126759 112.77920186492351 3.124855460760759 71.371533832842175 112.79062961649882 3.1248545737975912 70.969664428654184 112.78283370888617 3.1248568398118275 69.678940242893802 112.6960103859969 3.1248742528639548 68.7948631504361 112.54155013633161 3.124901762106886 67.929450231620692 112.29325156835641 3.1249446186638647 67.094478778060079 111.95403400415398 3.1250023147211006 66.30109639337951 111.52842446147788 3.1250740802865082 65.559783110110075 111.02254499631294 3.1251588853590855 64.190753988404509 109.85856670001951 3.1253531863975805 63.564314719649467 109.19799891060141 3.1254630842335698 63.010895214433383 108.47140342891592 3.1255836338281195 62.538536470455121 107.68858072502741 3.125713207767562 62.153711939397468 106.86026433769717 3.1258500294290275 61.861336561279167 105.99813116779376 3.1259921712697158 61.664170821264499 105.11505291017555 3.126137515046143 + 0 8 0.18261951868404011 6 0.5884313455561363 6 1 8 +7 0 0 1 2 2 72.91693135596762 91.569735909753689 -6.8716683167482735 77.500842585522065 93.301139326392445 -6.8719635950049867 + 0 2 1 2 +8 -5.9999999945314171 6.0000000026412819 +7 0 0 1 2 2 77.50086617510236 93.302714757608484 3.1280362997317752 77.500837861367472 93.300824237449433 -8.8719635423472027 + -5.999999994532228 2 6.0000000026412819 2 +8 -3.0000000053754761 2.9999999970241227 +7 0 0 1 2 2 86.485016359110418 103.56744624128969 -8.9336670644295548 86.485002203952945 103.56650098185479 -14.813666990784158 + -3.0000000053754761 2 2.9999999970241227 2 +8 5.9266632422328387 7.3248579574708819 +7 1 0 2 3 2 86.485002192829455 103.56650098391282 -14.813666991086311 1 85.520769021689901 94.140477378397691 -14.812149357289954 0.76542337380995917 76.069200815095897 93.471502534038393 -14.812019060820385 1 + 5.9266632422328289 3 7.3248579574708819 3 +8 -2.9999999990548765 3.0000000030069578 +7 0 0 1 2 2 76.069214964984866 93.472447789694158 -8.9320191358883037 76.069200809827393 93.471502530259258 -14.812019061911787 + -2.9999999990548765 2 3.0000000030069747 2 +8 -11.993769407593151 11.993769408905738 +7 0 0 1 2 2 86.485002201977821 103.56650098297695 -14.813666990938353 88.877242678273589 126.95225027326516 -14.81743220571936 + -11.993769407593151 2 11.993769408905738 2 +8 -2.9999999979425218 3.0000000046508966 +7 0 0 1 2 2 88.877256830370328 126.95319553241885 -8.9374322785674849 88.877242675211065 126.9522502729844 -14.817432205112826 + -2.9999999979425218 2 3.0000000046509361 2 +8 -15.524922359896969 15.524922367241414 +7 0 0 1 2 2 58.606363317350777 130.04880366290669 -14.817857124357269 88.877242679145283 126.95225027205031 -14.81743219965626 + -15.524922359896969 2 15.524922367241414 2 +8 -3.00000000474822 2.9999999979416097 +7 0 0 1 2 2 58.606377475731215 130.04974892279168 -8.9378571987879063 58.606363320571958 130.04880366335678 -14.817857125428171 + -3.00000000474822 2 2.9999999979420093 2 +8 -14.006230586172553 14.006230588468821 +7 0 0 1 2 2 55.812723508558456 102.7391076139365 -14.813460141862196 58.606363321932086 130.04880366260141 -14.81785713038561 + -14.006230586172553 2 14.00623058846959 2 +8 -2.9999999963474102 3.0000000106820224 +7 0 0 1 2 2 55.812737657284281 102.74005287109232 -8.9334602146006912 55.812723502126801 102.73910761165654 -14.813460145494709 + -2.9999999963474102 2 3.0000000106832441 2 +8 1.3868758736500966 2.7850705890210428 +7 1 0 2 3 2 63.968852392633245 90.744297364466874 -14.81155150837777 1 54.848490337386806 93.313084005483617 -14.811942506619697 0.76542337376719527 55.812723512385723 102.7391076135452 -14.813460140416945 1 + 1.3868758736500966 3 2.7850705890210543 3 +7 0 0 8 37 6 74.375871035920909 120.08529776127968 -8.9362932969790165 74.568518702277757 120.23498283051043 -8.9363178238810583 74.740573698331303 120.41173828756205 -8.9363466530020261 74.887126950773563 120.61196229973254 -8.9363791934992172 75.004661331601127 120.83123496451634 -8.9364147263692146 75.09044910418497 121.0647589899384 -8.9364524738403972 75.142721684174546 121.30730935634905 -8.936491591689343 75.160517005115921 121.5533273851787 -8.9365311839956956 75.144155876996237 121.80037705748023 -8.936570859921229 75.14390943828144 121.80398513364845 -8.9365714393565554 75.143655543426533 121.80759269816116 -8.9365720186916775 75.143394193657215 121.81119973325629 -8.9365725979237443 75.143125390262057 121.81480622102814 -8.9365731770498797 75.142849134592424 121.81841214342752 -8.9365737560671867 75.142565428062454 121.82201748226163 -8.9365743349727413 75.13020039089092 121.97510627115614 -8.9365989155160754 75.105313591849722 122.12358517457761 -8.9366227248374166 75.067712698015015 122.26973251268271 -8.9366461287328782 75.017665887318145 122.41228054760792 -8.9366689240485311 74.95558308293711 122.55001366339347 -8.9366909163507167 74.882005800790225 122.68176875705889 -8.9367119199644609 74.797614454217637 122.8064425777617 -8.9367317591708968 74.676467685248028 122.95609373712003 -8.9367555252117654 74.648877319672209 122.98852992239233 -8.9367606731819258 74.620500571226827 123.02029165820156 -8.9367657108355711 74.591356714090821 123.05135672670202 -8.9367706346473952 74.561465744519182 123.08170360385751 -8.9367754412053682 74.530848380842983 123.11131145944154 -8.9367801272107315 74.499526063469304 123.1401601570371 -8.936784689478003 74.443259251232618 123.18950899373951 -8.9367924872651479 74.418605145427037 123.21034034288458 -8.9367957767288857 74.393568279647781 123.23071584564346 -8.9367989919900506 74.36815849799541 123.25062730800708 -8.9368021317550834 74.342385846487758 123.27006679778574 -8.9368051947730045 74.316260573060021 123.28902664460924 -8.9368081798354044 74.289793127564721 123.30749943992664 -8.9368110857764549 74.262994161771658 123.3254780370065 -8.9368139114729033 + 0 9 0.51645338385953332 7 0.5241088630587255 7 0.84157226520106265 7 0.93168749750275959 7 1 9 +7 0 0 6 12 3 72.034538589682839 120.00373369520143 -8.9362745484864181 72.215472144819472 119.88235097054142 -8.9362554707612603 72.412346772409492 119.78457251960653 -8.936240225997178 72.621153923782074 119.71313502087726 -8.9362292444883149 72.837510355911476 119.66962285832473 -8.9362227703857506 73.056831888835433 119.65487473413495 -8.9362209274822533 73.47312491217815 119.68105185855558 -8.9362261378339518 73.670527948696304 119.71732911282072 -8.9362324449238439 73.862813477390674 119.77717160527453 -8.9362425280043851 74.046559451785413 119.85958776114171 -8.936256219433508 74.218543919053246 119.96305636160142 -8.9362732669062073 74.375871035920909 120.08529776127968 -8.9362932969790165 + 0 7 0.52234735607447424 5 1 7 +7 0 0 8 30 5 74.262994161771658 123.3254780370065 -8.936813911472905 74.12714575236194 123.41661453218242 -8.9368282353975985 73.982738685826774 123.49507832211044 -8.9368405014747534 73.831209393907912 123.5598886887888 -8.9368505555036908 73.674074909157511 123.61031302145237 -8.9368582833630779 73.512914145056556 123.64582296326961 -8.9368636039160947 73.349357278525773 123.66608082586842 -8.9368664668008844 73.185083234829889 123.67095627169022 -8.9368668551063379 72.826680269678519 123.64816227939454 -8.9368623279826274 72.63281373499963 123.61393904345442 -8.9368563596070025 72.443238102849676 123.55805572753282 -8.9368469195210452 72.260764521078428 123.48119155826055 -8.9368341236835249 72.088022834352898 123.38441629727976 -8.9368181503985493 71.927473700148823 123.26914734441885 -8.9367992334487045 71.781381952547065 123.13718662867154 -8.9367776679614614 71.52048027219864 122.84267852976475 -8.9367296952289283 71.40591454210093 122.67959966087257 -8.9367032031307172 71.310137261480818 122.5039062200952 -8.9366747283641939 71.234714375967698 122.31815994627577 -8.9366446865201574 71.180785895443606 122.1250756918255 -8.9366135167783671 71.149108868165527 121.92749828248007 -8.9365816782909686 71.140010209937529 121.72840992182395 -8.9365496512592379 71.168488304329045 121.30327765372994 -8.9364813762285404 71.213435583439747 121.0773762662873 -8.9364451688842266 71.287858852475082 120.85812681390838 -8.9364101018531272 71.390470827997405 120.64995120427184 -8.9363768828951855 71.519368745501538 120.45694107409784 -8.9363461651947844 71.67196344415288 120.28279413682812 -8.9363185369574811 71.845068665395047 120.13084320583813 -8.9362945262906379 72.034538589682839 120.00373369520143 -8.9362745484864181 + 0 9 0.20833595836150004 7 0.45736345869293205 7 0.70942248128458163 7 1 9 +8 2.7850705895153367 5.9266632418324123 +7 1 0 2 5 3 65.299388315201071 103.75117509966711 -14.813645676719498 1 65.89775912263633 109.60064955870921 -14.814587469410526 0.70710678141153438 71.747233657857365 109.00227876046286 -14.814505357946199 1 77.59670819308019 108.40390796221651 -14.814423246482319 0.70710678141153438 76.998337393089997 102.55443350241323 -14.813481453790846 1 + 2.7850705895153367 3 4.3558669156738743 2 5.9266632418324123 3 +8 -3.0000000028141396 2.9999999983775507 +7 0 0 1 2 2 76.998351546635107 102.55537876335576 -8.9334815290361345 76.998337391475843 102.55443350392086 -14.813481454207086 + -3.0000000028141396 2 2.9999999983775507 2 +8 -4.6583318043520627 4.6583317964717299 +7 0 0 1 2 2 76.998337387516671 102.55443350298366 -14.81348144946668 76.069200814005825 93.471502533175169 -14.812019055182882 + -4.6583318043520627 2 4.6583317964720026 2 +8 -4.7123889803800001 4.7123889803800001 +7 0 0 5 9 3 75.506090356376404 123.03961854844317 -14.816771022366311 75.011925459836434 123.81993269844612 -14.816895274869902 74.21133191750782 124.40618875052068 -14.816987597684074 73.203983953670544 124.63236106255579 -14.817021526754679 71.255239440549531 124.25688859208657 -14.816956480783528 70.082727327379516 122.65570151781218 -14.816696250465956 69.856555009254123 121.64835356867609 -14.816533763448341 70.04429124744162 120.67398132648252 -14.816377580099306 70.538456143982486 119.89366717647911 -14.816253327595714 + -4.7123889803800001 6 4.4408920985e-16 3 4.7123889803800001 6 +8 1.023000500999137 4.1645931518692887 +7 1 0 2 5 3 70.538456142353184 119.89366717544654 -14.816253329299888 1 72.111431851497102 117.40985010518878 -14.815857821504851 0.70710678166731677 74.595248955373549 118.98282578967431 -14.816116669966622 1 77.079066059249101 120.55580147415938 -14.816375518426611 0.70710678166731677 75.506090356859488 123.03961854869542 -14.81677102622165 1 + 1.023000500999137 3 2.5937968264342128 2 4.1645931518692887 3 +7 0 0 6 62 13 74.755415457123718 115.04606433236144 -6.8755238709006763 75.315622548609227 114.98421238011677 -6.875515100887867 75.872148319685593 114.88873644861782 -6.8755008061815799 76.422440740608181 114.75991636749693 -6.8754810264158586 76.964013286749704 114.59827906487516 -6.8754558419194955 77.494444938599969 114.40459856736247 -6.8754253737160331 78.580743514256994 113.93240422314277 -6.8753505837959166 79.133764521149843 113.64726740588816 -6.8753051686616073 79.667288468206337 113.32585172241329 -6.875253754477435 80.178376803597999 112.9698584596014 -6.8751966131026423 80.664280365567933 112.58128087428193 -6.8751340647562635 81.171168214275824 112.11792953846559 -6.8750593021314339 81.219555326265208 112.07307035467586 -6.8750520623285745 81.267626479300262 112.02787196863581 -6.8750447661071101 81.315378700082476 111.98233717295857 -6.8750374139178314 81.362809048385415 111.93646879512886 -6.8750300062173375 81.453219553429406 111.84779809510735 -6.8750156828378808 81.496250004783974 111.80504698684956 -6.8750087756835585 81.53900371248244 111.76201859657452 -6.8750018223643066 81.58147844235242 111.71871517222064 -6.8749948232433846 81.623671984685146 111.67513898582003 -6.8749877786880695 81.739487977921385 111.55397165000365 -6.8749681869944981 81.81251259965785 111.47580989609254 -6.874955544786193 81.884644033215423 111.39681966632934 -6.8749427644812897 81.955870539366956 111.31701377736238 -6.8749298481533794 82.026180625887562 111.23640526792433 -6.8749167979131016 82.210643314382196 111.01999786407231 -6.8748817517441134 82.323171530943142 110.8828167060243 -6.8748595250797431 82.433096354055905 110.74352447407195 -6.8748369457213547 82.540368433294049 110.60218325320454 -6.874814023732096 82.644940410986237 110.45885666401712 -6.8747907694319004 82.903394706229093 110.09019374270019 -6.8747309291487859 83.053526916924682 109.86223405950108 -6.8746939036214512 83.196998258610094 109.62996827818297 -6.8746561553630343 83.333655561255483 109.39364107171485 -6.8746177241332349 83.463357780494334 109.15350432096484 -6.8745786509039144 83.674392274921146 108.73410166970807 -6.8745103708311559 83.75912539410281 108.55654000528109 -6.8744814519032937 83.840127089871103 108.3772291595502 -6.8744522368750154 83.917352601257491 108.1962676990827 -6.8744227418051471 83.990760671622141 108.01375571888217 -6.8743929830118446 84.304110635453682 107.18497430090231 -6.8742578001113035 84.500622879923128 106.5221354705204 -6.8741495512906781 84.648142595340829 105.84569365488724 -6.8740389506986661 84.745572405569874 105.16017696572904 -6.8739267384274267 84.792328587350255 104.47020699672856 -6.8738136711655295 84.784679668430925 103.11527702492671 -6.8735913907568333 84.73380255900102 102.4502417648162 -6.873482173931281 84.63581088174891 101.78964861820066 -6.8733735700509619 84.491234644030811 101.13764348252204 -6.8732662605074699 84.301050187513269 100.49829036406953 -6.8731609143554993 83.807457090117609 99.186362528251721 -6.872944494275532 83.494104348088726 98.517453058123365 -6.8728339971643599 83.128714198409853 97.874227872329286 -6.8727275854541752 82.713990720225866 97.261664436382432 -6.8726260822868879 82.253204141772429 96.684388634927188 -6.8725302545221005 81.16291143608349 95.51843696507153 -6.8723363144803491 80.517957430708037 94.944030521750705 -6.8722405050011197 79.821753201236774 94.430142572856539 -6.8721544970322981 79.081469757292609 93.982254683478914 -6.8720792073807333 78.30493779523681 93.604856597176848 -6.8720153917762357 77.50084257652523 93.301139322147861 -6.8719635950042672 + 0 7 0.11235271013143204 5 0.23610031671290221 5 0.24925325665739259 5 0.26134497412333085 5 0.28266792147923886 5 0.31803495550000072 5 0.37243591656333969 5 0.41166279810071787 5 0.54916105106110169 5 0.68178373554459581 5 0.82856001765789955 5 1 7 +2 0 0 0 1 -6.1232339957400004e-17 0 6.1232339957400004e-17 1 0 -0 0 1 10 +2 0 0 0 1.2246467991500001e-16 1 -0 1 -1.2246467991500001e-16 0 0 -0 -1 10 +7 0 0 5 21 7 6540.1420908700002 -121.383501925 4518.3296490599996 6539.9581178400003 -121.31037460500001 4518.1730572699998 6539.7749085799996 -121.243823581 4518.0117245900001 6539.5927699800004 -121.184019205 4517.8458706299998 6538.7611501199999 -120.94056726700001 4517.0631591700003 6537.9649936799997 -120.84513862999999 4516.1955310399999 6537.3772433599997 -120.866125268 4515.4764347700002 6536.2967192100004 -121.09908662300001 4513.9873862699997 6535.4429105899999 -121.69797851200001 4512.4542658399996 6535.0819036100002 -122.084948044 4511.6910858299998 6534.5023463999996 -123.022918676 4510.1936710199998 6534.2301674700002 -124.236426553 4508.8260850200004 6534.1742500199998 -124.904825702 4508.1849397100004 6534.2172606599997 -126.109448966 4507.2009427700004 6534.4714696399997 -127.371801568 4506.4192451600002 6534.6087697200001 -127.892109727 4506.1358418099999 6534.8827041599998 -128.742832937 4505.7314425000004 6535.2124036799996 -129.54764850500001 4505.4330136899998 6535.35018055 -129.85779513200001 4505.3307999299996 6535.4925273700001 -130.15671073499999 4505.2436895199999 6535.6381374100001 -130.44426543599999 4505.1702354099998 + 19.018065227600001 6 20.746417417 3 26.969588666500002 3 33.193103196999999 3 39.485156584899997 3 43.865331295600001 3 46.755059254499997 6 +7 0 0 5 21 7 6540.1420943200001 -135.98937615200001 4505.7768054199996 6540.35907047 -136.15899769800001 4505.8898319800001 6540.5812607400003 -136.32397842200001 4506.0130663600003 6540.8078462399999 -136.48308864099999 4506.1465886599999 6541.6858394000001 -137.06349712900001 4506.6950201 6542.5996622599996 -137.52739185900001 4507.3863250699997 6543.2736597399999 -137.78582382799999 4507.9681525599999 6544.5738994399999 -138.115243413 4509.2359426900002 6545.7494957299996 -138.06888341300001 4510.6780194200001 6546.2892948600002 -137.95029605900001 4511.4238020399998 6547.2586290400004 -137.52616642199999 4512.9445222100003 6547.97691631 -136.749933838 4514.46840823 6548.26495436 -136.279673202 4515.2161355999997 6548.6895412900003 -135.18895738000001 4516.6599793100004 6548.7981140600004 -133.85410922200001 4517.9367028699999 6548.77099507 -133.13560306100001 4518.52186747 6548.6320370599997 -132.156409868 4519.1976766300004 6548.3698207799998 -131.15222397100001 4519.7479449100001 6548.3017991300003 -130.91597361199999 4519.8698523399999 6548.2276949400002 -130.680102783 4519.9841784299997 6548.1475383200004 -130.444265438 4520.09125649 + 12.701137518299999 6 14.8555252341 3 20.925139790700001 3 26.905251248399999 3 32.874904180000001 3 38.8892343188 3 40.722476448599998 6 +7 0 0 5 15 5 6535.6381374100001 -130.44426543599999 4505.1702354099998 6535.7751724099999 -130.71488600800001 4505.1011069599999 6535.91538382 -130.97601194699999 4505.0439273399998 6536.0581919099996 -131.22832693999999 4504.9974174700001 6536.4420002500001 -131.87500986800001 4504.89943408 6536.8405361499999 -132.47010438199999 4504.8633545499997 6537.0972941800001 -132.829212463 4504.8609803500003 6537.6051340800004 -133.49561896500001 4504.8939886899998 6538.1829625099999 -134.16255614100001 4505.01002221 6538.4720192200002 -134.47695222799999 4505.0846005699996 6538.9641675299999 -134.976910949 4505.2419438300003 6539.5087716300004 -135.46880705199999 4505.4687848800004 6539.7141414899997 -135.646138474 4505.5613414700001 6539.9255204999999 -135.82006912599999 4505.6639884400001 6540.1420943200001 -135.98937615200001 4505.7768054199996 + 0 6 2.5562201436500001 3 6.8074099178000003 3 10.550744568600001 3 12.701137518299999 6 +2 0 0 0 -1 1.83697019872e-16 0 -1.83697019872e-16 -1 0 0 0 1 10 +2 0 0 0 0 -1 0 0 -0 -1 1 0 0 10 +7 0 0 5 15 5 6548.1475383200004 -130.444265438 4520.09125649 6547.9641471100003 -129.904690563 4520.3362415800002 6547.7492530199997 -129.365816354 4520.5430483500004 6547.50602979 -128.83311912799999 4520.7107558199996 6546.9605069600002 -127.76952332 4520.9741595599999 6546.3199742300003 -126.75436845599999 4521.0826049300003 6545.9719876500003 -126.252873682 4521.0985357199997 6545.1551392600004 -125.178175745 4521.0478480900001 6544.23806393 -124.18993828399999 4520.8033038499998 6543.7073095799997 -123.67836547100001 4520.6098935 6542.6891663799997 -122.810072421 4520.1417122399998 6541.6174129499996 -122.10159416 4519.4722345800001 6541.1240836400002 -121.81802423800001 4519.1275098200003 6540.6303968800003 -121.57759835900001 4518.7452790500001 6540.1420908700002 -121.383501925 4518.3296490599996 + 0 6 4.38882424138 3 8.9264264320799995 3 14.4306279067 3 19.018065227600001 6 +8 1.0150718478574368e-09 5.9999999964860287 +7 0 0 1 2 2 75.506090355540351 123.03961854675059 -14.816771022412658 75.506104510699615 123.04056380618414 -8.9367711028480148 + 1.0150718478574368e-09 2 5.9999999964860287 2 +8 6.5910798695318923e-09 6.0000000087015959 +7 0 0 1 2 2 70.538456137837827 119.89366718099357 -14.816253327596606 70.538470292995314 119.89461244042847 -8.9362534015249899 + 6.5908958288639835e-09 2 6.0000000087015959 2 +2 6541.4837864800002 -129.47753124100001 4512.97368413 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 15 +2 6541.4837864800002 -129.47753124100001 4512.97368413 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 15 +2 6541.4837864800002 -129.47753124100001 4512.97368413 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 15 +7 0 0 8 37 6 74.37587130181997 120.08529701455272 -8.9422932968596136 74.568524473277122 120.23498641602801 -8.9423178244713526 74.740583810881631 120.41174777488796 -8.9423466545515442 74.887139782283313 120.61197893690198 -8.942379196204655 75.004674996727175 120.83125958007396 -8.9424147303592854 75.090461534036749 121.06479196967904 -8.9424524791720827 75.142730750252227 121.30735060438393 -8.9424915983421371 75.160520599056852 121.55337630408346 -8.9425311918684738 75.144199382950987 121.79971769102279 -8.9425707540272619 75.14400286362735 121.8026111227317 -8.9425712186976511 75.143801549401459 121.80550422752191 -8.9425716833039424 75.143595440904576 121.80839699618173 -8.9425721478446576 75.143384538789164 121.81128941949805 -8.9425726123183136 75.143168843728859 121.81418148825655 -8.9425730767234359 75.142948356418557 121.81707319324154 -8.9425735410585432 75.131235660170617 121.967399308079 -8.9425976790492001 75.107287205551359 122.11389094813298 -8.9426211711601518 75.070969065030511 122.25816866284201 -8.942644277585952 75.022532453901078 122.39901597450546 -8.9426668033723402 74.962362982673781 122.53526486044163 -8.9426885616781373 74.89097130473148 122.66579618844574 -8.9427093738227512 74.808999880399995 122.78954643754204 -8.9427290703828604 74.689021627444077 122.94119526373413 -8.9427531603784924 74.659870019549004 122.97613622981146 -8.9427587072547876 74.629813365455817 123.01031538405795 -8.9427641294846687 74.598874943215776 123.04370540780813 -8.9427694227324732 74.567078977225037 123.07627988193563 -8.9427745828094185 74.534450638224698 123.10801328685292 -8.9427796056736124 74.501016043300751 123.13888100251138 -8.9427844874300426 74.44262024097371 123.19004772087364 -8.9427925723317454 74.418048936157803 123.21079186302664 -8.9427958479755585 74.393097880895752 123.23108337718347 -8.9427990499414243 74.367776813480603 123.25091416371193 -8.9428021769507051 74.342095671039004 123.27027638102429 -8.9428052277667209 74.316064589531337 123.28916244557742 -8.9428082011947545 74.289693903751626 123.30756503187266 -8.9428110960820497 74.262994147327632 123.32547707245602 -8.9428139113178116 + 0 9 0.51646752819697217 7 0.52260653872074503 7 0.83564692467437518 7 0.93194051010993306 7 1 9 +7 0 0 6 12 3 72.034538575238798 120.003732730651 -8.9422745483313246 72.215695945115314 119.88219985560609 -8.9422554470070281 72.412834121194877 119.78432950899654 -8.9422401881043889 72.621929311063809 119.71286893775 -8.9422292035798403 72.838581393975502 119.66940682051111 -8.9422227382342072 73.058188767258301 119.65478292143047 -8.9422209159890578 73.47446048368738 119.68129681223313 -8.9422261804274896 73.671568892932186 119.71765233352345 -8.9422324993901992 73.86355969314495 119.77750545261945 -8.9422425834695414 74.047025196854875 119.85986705478321 -8.9422562654535209 74.218757009760594 119.96322093262944 -8.9422732938753651 74.37587130181997 120.08529701455272 -8.9422932968596136 + 0 7 0.52299350882995754 5 1 7 +7 0 0 6 47 10 74.262994147327632 123.32547707245604 -8.9428139113178098 74.081769555650766 123.44705504452719 -8.9428330197300081 73.884552214334263 123.54495297752977 -8.9428482828768061 73.675370501732147 123.6164204451276 -8.9428592683017261 73.458629616211084 123.65986747845382 -8.9428657310087001 73.238936401864152 123.67445399560143 -8.9428675470377481 72.890031902962136 123.652145852781 -8.9428631208844624 72.759566197740028 123.6334254300145 -8.9428597973437753 72.630788481574399 123.60443219493069 -8.942854826425684 72.50469932423097 123.56537020327328 -8.9428482433425831 72.382267859214977 123.51656132797319 -8.9428401021712745 72.146010919741599 123.40009053792916 -8.9428208097615745 72.032217006497049 123.33233293698693 -8.9428096432168047 71.92398435230055 123.25565563080532 -8.9427970561422363 71.822170255394695 123.17064014715694 -8.9427831440871888 71.727556343446736 123.07796648147668 -8.9427680182482607 71.6069888998029 122.93958581472037 -8.9427454821455772 71.574346697856058 122.89969672007054 -8.9427389910572987 71.54294563985782 122.85880797674952 -8.9427323422549438 71.512823700649065 122.81696799206219 -8.9427255436118145 71.484016310106924 122.7742270651836 -8.9427186032992161 71.388286312209516 122.62226616475799 -8.9426939438519444 71.328341906674623 122.50864322687301 -8.9426755337026318 71.277233033111472 122.39057965741928 -8.9426564309545835 71.235357928783685 122.2689343374294 -8.9426367746388369 71.203001662834524 122.14460997171686 -8.9426167105590384 71.165891813906782 121.93822659364628 -8.9425834433594584 71.155382025861442 121.85719615535312 -8.9425703917344634 71.1488487417664 121.77570010473978 -8.9425572748311684 71.146315489228655 121.69398185368691 -8.9425441318367209 71.147785845034591 121.61228592187611 -8.9425310020683249 71.158701417166057 121.44942410448319 -8.9425048469391228 71.168147301382632 121.36825684154623 -8.9424918213585016 71.181564533062229 121.28760182162119 -8.9424788876856365 71.198916927545838 121.20770095415541 -8.9424660847223958 71.220148670252726 121.12879238440156 -8.9424534506182649 71.300310913933714 120.88006085303688 -8.9424136579107163 71.373891437164005 120.71492471409898 -8.9423872880210418 71.465113958282615 120.55826156173549 -8.9423623227054883 71.57271085780306 120.41235762172077 -8.9423391264424996 71.695086972142278 120.27928440826176 -8.9423180284052926 71.862532285017295 120.13246606813424 -8.942294829220268 71.895582319522774 120.10496166395798 -8.9422904872186724 71.929336290481672 120.07831435432469 -8.9422862846968467 71.963766342334822 120.0525465214597 -8.9422822251858634 71.998843681273385 120.02767933073135 -8.9422783120189191 72.034538575238798 120.003732730651 -8.9422745483313246 + 0 7 0.20840114640558499 5 0.33387129222372658 5 0.45994434719129451 5 0.50914224041144374 5 0.63145642279155734 5 0.70939166684761179 5 0.78733250731583015 5 0.95895233484814402 5 1 7 +1 64.35566404635459 95.035833729074767 -24.372242466004252 0 0 -1 +1 78.097569951186657 110.91538080750317 -24.374828318171069 0 0 -1 +2 71.226601956123659 102.97460252698097 -30.623535230531292 -2.4073398923740714e-06 -0.00016075840718299259 -0.99999998707546967 -0.97596996526285595 0.21790508446752485 -3.2680583287319736e-05 0.2179050869048825 0.97596995257022923 -0.00015741994867668715 5 +2 71.226601956123659 102.97460252698097 -30.623535230531292 -2.4073398923740714e-06 -0.00016075840718299259 -0.99999998707546967 -0.97596996526285595 0.21790508446752485 -3.2680583287319736e-05 0.2179050869048825 0.97596995257022923 -0.00015741994867668715 5 +2 6556.2424521100002 -118.843455095 4500.6003978600002 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 4.9999999999 +2 6556.2424521100002 -118.843455095 4500.6003978600002 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 4.9999999999 +1 6552.5198269000002 -125.688172094 4509.8357598399998 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 +1 6545.2064116800002 -122.632814243 4503.7383221600003 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 +7 0 0 6 37 8 65.377529887276481 103.58069723932225 -2.9622273887173391 65.355400591768458 103.36555901401864 -2.9621927614786472 65.342753384565427 103.14931086982965 -2.9621579668944418 65.339665496910001 102.93249339233934 -2.9621231037625653 65.346171327574282 102.71564770330941 -2.9620882644659621 65.362262442860015 102.49931546067916 -2.9620535349726791 65.40631322368894 102.12924510264122 -2.9619941588924572 65.42966836770573 101.974996093916 -2.9619694225270785 65.457934018976388 101.82149278458151 -2.9619448179936625 65.491080137510266 101.66893408083205 -2.9619203771903564 65.529065632998339 101.51751684286431 -2.961896131659524 65.602905448403021 101.2584277044508 -2.9618546668348351 65.63649811494669 101.15012429052375 -2.9618373405203666 65.672596411862727 101.04260018245115 -2.9618201455768678 65.711177445689913 100.93592892976756 -2.961803093770603 65.7522153820873 100.8301830921871 -2.9617861967015791 65.90440407737438 100.46342360597498 -2.961727616436328 66.02832092075684 100.20764597520632 -2.9616868059794612 66.166977648674347 99.959229310318776 -2.9616472146300539 66.319814878717708 99.719241292004867 -2.9616090126397503 66.486169111807712 99.488688121833022 -2.9615723601245807 66.876374925330097 99.009004711733652 -2.9614962092920578 67.105200533451267 98.763898982224845 -2.9614573699858191 67.350491345253516 98.534748721065171 -2.9614211354437314 67.610824639663335 98.322920764079882 -2.9613877218984936 67.884637601478943 98.129619356270751 -2.9613573191068379 68.284556792748262 97.88628048852631 -2.9613191810107509 68.400793374395292 97.819834244070236 -2.961308784155301 68.518807349162486 97.756584778645973 -2.9612989054719137 68.638486636661014 97.696591266206482 -2.9612895541987836 68.75971644198205 97.639907478465886 -2.9612807386991284 69.053646476209721 97.512126103976584 -2.9612609163984036 69.227708198432666 97.444216633921542 -2.9612504253631351 69.404243862252088 97.38298531430398 -2.9612410137814149 69.582926091081902 97.328541849611895 -2.9612326984886117 69.763420691863416 97.280973709251683 -2.9612254927294317 69.945386655065349 97.240346127548307 -2.9612194061579196 + 0 7 0.15232778011244325 5 0.26185844430740934 5 0.34141376274989538 5 0.54040724935664231 5 0.77495055175609262 5 0.86886813530304174 5 1 7 +8 6.8325802563595259e-09 6.0000000077340729 +7 0 0 1 2 2 65.37753010081174 103.58071119277301 -2.8736199933546231 65.377515945654267 103.579765933339 -8.8736199167087761 + 6.8325802563595259e-09 2 6.000000007734255 2 +7 0 0 6 47 10 69.945386655065349 97.240346127548278 -2.96121940615792 70.05752779078459 97.215308350847792 -2.9612156551539974 70.170228047467603 97.192906469663058 -2.961212329197592 70.283407796419127 97.173155682111314 -2.9612094305374508 70.39698693209742 97.15606780801204 -2.961206960878128 70.510884872114232 97.141651288887331 -2.9612049213799918 70.728928845759881 97.119223086400652 -2.9612018480916613 70.83309576889171 97.110746903485435 -2.9612007396904776 70.937460681458859 97.104491350344048 -2.9611999887079627 71.041962775454593 97.100462798590527 -2.9611995960199748 71.146541080037082 97.098665280324909 -2.9611995621259393 71.438467854050117 97.09987997297246 -2.9612004692855365 71.625850409939616 97.107821916114275 -2.9612022028092895 71.812929899177547 97.122935906208042 -2.9612050884023517 71.999356036530841 97.145207875948742 -2.9612091229492949 72.184780481553688 97.174600102076738 -2.9612142995370245 72.502879085673626 97.237590511413202 -2.9612252001212398 72.636187218235207 97.267871835824977 -2.9612303925242807 72.768647830735986 97.301871535847397 -2.9612361805382439 72.900129161656693 97.339559590271463 -2.9612425590162306 73.030501093494863 97.380899599445129 -2.9612495217901 73.252579343002921 97.458200944744092 -2.9612624884965126 73.344882361275609 97.492422833885215 -2.961268214292152 73.436496359310937 97.528498519071874 -2.9612742363795466 73.527374134103553 97.566410431707553 -2.9612805518196299 73.617469127914703 97.606139368224035 -2.961287157412114 73.926382238510527 97.749840345069103 -2.9613110087052488 74.141013918486394 97.862892272790646 -2.9613297036620931 74.349942923521255 97.986507883052482 -2.9613500826762604 74.5525151033615 98.120319835919602 -2.9613720851068894 74.748110151085129 98.263906210975904 -2.9613956416225662 75.195704803701588 98.627835727496645 -2.9614552297851739 75.440868298706363 98.856609006949867 -2.9614925997855748 75.670079559100373 99.101851867109318 -2.9615325781312083 75.881971330733847 99.362141832093585 -2.9615749328425158 76.075338928309577 99.635916283517503 -2.9616194098103348 76.318774969050196 100.03579145212989 -2.9616842777838781 76.385250430828805 100.15201845486375 -2.9617031217507468 76.448529223553706 100.2700237442355 -2.9617222437544206 76.508552139037405 100.38969523867144 -2.9617416256348634 76.565265371617144 100.51091814038092 -2.9617612488086293 76.693199885731801 100.80502355450419 -2.9618088340834645 76.76121854138988 100.97927460409535 -2.9618370083451659 76.822544012945812 101.15600644137898 -2.9618655650311076 76.877066165117029 101.3348905731675 -2.9618944510718563 76.924697199521447 101.51559165583677 -2.9619236123514008 76.965371654677639 101.69776749532627 -2.9619529937071527 + 0 7 0.074770817129581418 5 0.14284161927477224 5 0.26476075139898975 5 0.35352758877760448 5 0.41741748635207526 5 0.57462364536664379 5 0.79163396657599061 5 0.87853311434506309 5 1 7 +7 0 0 4 92 31 69.945386655065349 97.240346127548307 -6.8725912195647396 69.904502836603498 97.249474266930406 -6.8725926165075135 69.863705698703143 97.258990770182521 -6.8725940773701115 69.823000775957937 97.268894398680928 -6.8725956019629457 69.611897339049364 97.322385380617902 -6.8726038580113507 69.44312351487757 97.372387042265203 -6.8726116456558657 69.27647963242525 97.429085610689341 -6.8726205370877 69.095618112460315 97.498780699759038 -6.8726315255331052 69.078904500724818 97.505299508771571 -6.8726325538168025 69.06221754246576 97.511886256151541 -6.8726335933105265 69.003504859491358 97.535338075423596 -6.8726372961021349 68.961624526980671 97.55256719480353 -6.8726400194752246 68.919923306437681 97.570225477746362 -6.8726428136879436 68.85647156071029 97.597865698136033 -6.8726471919001284 68.834587195265655 97.607540351362431 -6.872648725164165 68.812755638851527 97.617333603249477 -6.8726502780127561 68.610455240135181 97.709403697949014 -6.8726648841720834 68.433627106851134 97.799681638193874 -6.8726792589196792 68.261042360553972 97.897829083719301 -6.8726949349983197 67.925281989420213 98.109282289602632 -6.8727287968265562 67.762111467017448 98.222597184160975 -6.872746984087053 67.604210942444695 98.343147509885981 -6.8727663711874261 67.440891101033529 98.479882685658126 -6.8727883999251569 67.429769362003569 98.48925663133808 -6.8727899102994332 67.418678600426915 98.498667208669147 -6.8727914267588286 67.383547264236284 98.528676209893021 -6.8727962631121278 67.359623137757865 98.549410963010814 -6.8727996056554179 67.335848478429028 98.570316933267591 -6.8728029766521903 67.296262794927657 98.605633254437265 -6.8728086726720035 67.280369553440309 98.619951446413381 -6.8728109823754036 67.264545951637686 98.634346564666487 -6.8728133048687932 67.221695719970242 98.673710024975108 -6.8728196567587831 67.194806576239984 98.698828035328773 -6.8728237110445809 67.168127944346239 98.724169530007373 -6.872827802507679 67.128121762658125 98.762810627297171 -6.8728340428881438 67.11463676814293 98.775947219790268 -6.8728361646787013 67.101207974939257 98.789141259446438 -6.8728382960309036 67.075071126714235 98.81504140678588 -6.8728424804658097 67.062358047929123 98.827742444703787 -6.8728445327045327 67.049696830242993 98.840495182699016 -6.8728465935514933 67.019674991268673 98.870981494652909 -6.8728515207537821 67.002361697948984 98.888761676304441 -6.8728543948708589 66.985148735036006 98.906639006787444 -6.8728572851706131 66.954465262678497 98.938867796831119 -6.8728624965823206 66.940957232334256 98.953183534092744 -6.8728648117422475 66.927513230010845 98.967559418051096 -6.8728671369258745 66.89959047906018 98.997686059543454 -6.872872010284456 66.885123424121758 99.013447655448715 -6.8728745602660553 66.87073300421001 99.029279251042482 -6.8728771219185969 66.84153379304982 99.061717494482238 -6.8728823713349119 66.826731297807726 99.078329809717928 -6.872885060043826 66.812012807459737 99.095016599064252 -6.8728877611757655 66.782182049380623 99.129182555701419 -6.8728932924533837 66.767076412380817 99.146667512408385 -6.8728961235650408 66.752062595754367 99.164231375728306 -6.8728989678460293 66.724983058293617 99.196248408935389 -6.8729041533742707 66.712886272150641 99.210675304272129 -6.8729064902351551 66.700851188066082 99.225153712023186 -6.8729088356976682 66.634999655712136 99.305065762483991 -6.8729217826436813 66.582377272553117 99.371483374143921 -6.8729325484698371 66.531040807862581 99.43889986201107 -6.8729434813096644 66.404724584472575 99.611564602083149 -6.8729714948023855 66.331486838825015 99.718087298001862 -6.8729887887932009 66.26140308398908 99.826711011247284 -6.8730064351808862 66.11710491597718 100.06542967376673 -6.8730452399336546 66.044000816547296 100.19619586661479 -6.873066511136444 65.975381245313685 100.32936995650326 -6.8730881883448269 65.881363352281284 100.52812426308591 -6.8731205608888448 65.852378241251941 100.59200796951069 -6.8731309691194662 65.824413022149727 100.65634464325215 -6.8731414541598141 65.739026984679498 100.86165437485394 -6.8731749232543509 65.685427061108143 101.00421647310385 -6.8731981773593542 65.636782730210513 101.148544516744 -6.8732217333218761 65.58802834150886 101.31157783422744 -6.8732483574120726 65.582954701228644 101.32879903522486 -6.8732511699007475 65.577951210956755 101.34604074570908 -6.8732539859261035 65.508685835374123 101.58840678758645 -6.87329357330779 65.456303911242429 101.8169264468163 -6.8733309308137196 65.416144762909596 102.0479071485654 -6.8733687220519517 65.383963569422406 102.31681873132152 -6.8734127550389008 65.379904390666482 102.35331042813399 -6.8734187311361552 65.376149175284255 102.38983463864129 -6.8734247133136055 65.367964574925111 102.47652845038654 -6.8734389143913157 65.363803496800358 102.52672336638238 -6.8734471381032742 65.360215973765591 102.57696249720313 -6.8734553704771182 65.346128619942476 102.81198797678537 -6.8734938892620061 65.342808569494906 102.99720440201156 -6.8735242638593563 65.347271654612982 103.18239624054523 -6.8735546535425573 65.363022329216733 103.42055668905923 -6.8735937598814196 65.367209360059007 103.47399570741244 -6.8736025362601865 65.372045614809835 103.52737983226427 -6.8736113052290655 65.377529887276481 103.58069723932225 -6.8736200648454471 + 0 5 0.019604221342885218 3 0.10191585389936419 3 0.11031135918279593 3 0.13150324046741491 3 0.14270072140373399 3 0.23552000792507158 3 0.32839362595037047 3 0.33520045093951528 3 0.35001581648493568 3 0.36002656492913798 3 0.37724566688213956 3 0.38605570732976335 3 0.39446543901404307 3 0.40607908425743366 3 0.41529004866491592 3 0.42530207716418361 3 0.43571467140908859 3 0.4465277938670309 3 0.45533848107931163 3 0.49498637623873276 3 0.55545616496350814 3 0.62552515673250642 3 0.65835056425685878 3 0.7295839644372154 3 0.73798558018163851 3 0.84754775951249894 3 0.86473006020756771 3 0.88829960710353228 3 0.9749162067070305 3 1 5 +7 0 0 4 5 2 76.965371654677639 101.69776749532627 -2.9619529937071496 77.002928353957287 101.86597929296319 -2.961980122939444 77.033895321072322 102.03558890192907 -2.9620074560611367 77.0581965075976 102.20619816427612 -2.9620349486618696 77.07580668519627 102.37740179215702 -2.9620625044982707 + 0 5 1 5 +7 0 0 6 67 14 77.075797457474422 102.3767855792869 -6.8734513125833674 77.053950876514293 102.16439562011492 -6.8734164186403754 77.022842601142074 101.95289050705587 -6.8733816470957576 76.982515183880039 101.74278604324365 -6.8733470826659717 76.9330491622311 101.53459025209277 -6.8733128088846094 76.874563058678817 101.32880337729841 -6.873278908102388 76.757652967764628 100.97662109279401 -6.8732208492185443 76.703292618506055 100.82889448070325 -6.8731964827297602 76.644194597988076 100.6829337678425 -6.8731723942797158 76.580431568443487 100.53893036060545 -6.8731486154450563 76.512086589261514 100.39707135050126 -6.8731251771201523 76.386044888061733 100.15560503316628 -6.873085257562713 76.330441066634563 100.05491237843735 -6.8730686034317934 76.272478050890427 99.955532710360941 -6.8730521588868569 76.212194986694101 99.857535563429494 -6.8730359354304476 76.149633767590672 99.760988846234795 -6.873019944305141 75.925004425723898 99.431540103657468 -6.8729653500041392 75.751575147271978 99.20634644464586 -6.8729279833943115 75.565227517642171 98.991379868848483 -6.872892262693429 75.366724796811951 98.787562861884496 -6.8728583411002147 75.156917186544064 98.5957383905765 -6.8728263589827607 74.749236890313568 98.264172055844725 -6.8727709676545992 74.554208146853497 98.120921492598498 -6.8727469898656635 74.352233556738824 97.987387778534568 -6.872724588958568 74.143923859354558 97.86398789662239 -6.8727038348351277 73.929922576738221 97.75108624747854 -6.8726847888521121 73.622241135532462 97.607664696523031 -6.8726605062865964 73.532753959998317 97.568106180701193 -6.8726537973170787 73.442489118050119 97.530339645782178 -6.8726473803923476 73.351491862098072 97.494384087365844 -6.8726412587395904 73.259808065889516 97.460256952770635 -6.8726354353335353 73.039670778564371 97.383281703398893 -6.8726222676152453 72.910630470660664 97.342123988299704 -6.8726151991533149 72.780486798206297 97.304543212990794 -6.872608714739318 72.649364843906724 97.270575656586416 -6.8726028206317151 72.517391275764624 97.24025166006048 -6.872597522118773 72.203365870315267 97.177170526715642 -6.8725864029467871 72.020685829160058 97.147594390430356 -6.8725811025533403 71.836982110501353 97.124929531901941 -6.8725769333656883 71.652584654956669 97.109216792872317 -6.872573902893965 71.467825456873655 97.100475542314314 -6.8725720151309773 71.173298049418349 97.097651397947445 -6.8725708283630773 71.063547505999324 97.099057112510991 -6.8725707893565202 70.953856723265474 97.102920351307489 -6.8725711536270557 70.844295338973438 97.1092379403471 -6.8725719208250871 70.73493283944434 97.118004000464794 -6.8725730901568909 70.256153917607179 97.167183205799333 -6.8725799813683297 69.889129416537742 97.233217022922162 -6.8725899119179861 69.527516457291625 97.327091677407083 -6.8726044227494389 69.173959123673242 97.448216039241672 -6.8726234233892765 68.831013137309654 97.595693750190961 -6.8726467730777081 68.147878502206424 97.953053555866575 -6.8727037159926327 67.809558756342312 98.166639660899918 -6.8727379214128907 67.489187233283872 98.407482517032264 -6.8727766420978842 67.189467701554946 98.673650751072628 -6.8728195678683992 66.912847420844457 98.962896788076591 -6.872866336045707 66.409250258175931 99.583273907472545 -6.8729668651368474 66.182400208331458 99.91458240636419 -6.8730206554655 65.983068063409476 100.26385911946414 -6.8730774608824117 65.812965165977005 100.62821825462342 -6.8731368122084096 65.673436130366127 101.00458598930511 -6.8731982085191392 65.46570598041454 101.7447912376213 -6.8733191209080973 65.392790796496826 102.10737083797099 -6.8733784190592884 65.347332086052958 102.47481331572267 -6.8734385823589248 65.329671924664467 102.84450700566553 -6.8734991832319068 65.339846408010473 103.2138170731304 -6.8735597895506881 65.37752065954632 103.58008102585896 -6.8736199637396211 + 0 7 0.069462275837930798 5 0.12057728851767517 5 0.15791917678454734 5 0.25003361415882819 5 0.32847981682716776 5 0.36023734053369499 5 0.40420256653312747 5 0.46428042660867785 5 0.49995923052356572 5 0.62086296467429924 5 0.75032888974570622 5 0.88021336582464671 5 1 7 +8 -8.6938188535674487e-10 6.0000000025925049 +7 0 0 1 2 2 77.075806889393348 102.37741575508757 -2.8734513353938382 77.075792734234099 102.37647049565268 -8.8734512613104926 + -8.7006256517203169e-10 2 6.0000000025929436 2 +7 0 0 7 538 90 65.347323090662826 103.06679867246601 -7.96215511392991 65.347323102122758 103.06679944029018 -7.9544002512925038 65.347323113591443 103.06680020869597 -7.946645388654952 65.347323125068925 103.06680097768137 -7.9388905260174862 65.347323136555133 103.06680174724491 -7.9311356633802328 65.34732314805008 103.06680251738554 -7.923380800743212 65.347323159553738 103.06680328810272 -7.915625938106337 65.347323183482644 103.06680489126124 -7.8995072083678792 65.347323195909169 103.06680572378967 -7.8911433412664342 65.347323208345927 103.06680655699287 -7.8827794741650887 65.347323220793058 103.06680739088344 -7.8744156070638365 65.347323233250791 103.06680822547523 -7.8660517399626828 65.347323245719366 103.06680906078337 -7.8576878728616322 65.347323269806637 103.06681067444445 -7.8415445893458324 65.347323281424337 103.0668114527338 -7.8337651729310798 65.347323293051474 103.06681223164709 -7.825985756516415 65.347323304687691 103.06681301115923 -7.818206340101832 65.347323316332876 103.06681379126543 -7.8104269236873334 65.347323327987269 103.06681457198123 -7.80264750727292 65.347323352191921 103.06681619340534 -7.7865042237583904 65.34732336474319 103.06681703418137 -7.7781403566582723 65.347323377305415 103.06681787568343 -7.7697764895582599 65.347323389878824 103.0668187179248 -7.7614126224583515 65.347323402463587 103.06681956091903 -7.7530487553585541 65.347323415059947 103.06682040467983 -7.7446848882588641 65.34732344027627 103.06682209376267 -7.727957154059788 65.347323452896745 103.06682293911588 -7.7195932869604125 65.347323465528831 103.06682378523998 -7.7112294198611471 65.347323478172243 103.06682463211347 -7.7028655527619856 65.347323490826952 103.06682547973448 -7.694501685662928 65.347323503493243 103.06682632812054 -7.6861378185639788 65.347323528830287 103.0668280251753 -7.6694231041130392 65.347323541500316 103.06682887379341 -7.6610722567610292 65.347323554182424 103.06682972321121 -7.6527214094091276 65.347323566877037 103.06683057345569 -7.6443705620573521 65.347323579584227 103.06683142453257 -7.6360197147056974 65.347323592303752 103.0668322764265 -7.6276688673541599 65.347323616479443 103.06683389558501 -7.6118112993135316 65.347323627933847 103.06683466273149 -7.6043045786244337 65.347323639398127 103.06683543053175 -7.5967978579354272 65.347323650872283 103.06683619898611 -7.5892911372465148 65.347323662356487 103.0668369681041 -7.5817844165577011 65.347323673850994 103.06683773790444 -7.5742776958689815 65.347323698155193 103.06683936556895 -7.5584201278297467 65.34732371096645 103.06684022353635 -7.5500692804792475 65.347323723790936 103.06684108237889 -7.54171843312887 65.347323736629107 103.06684194212627 -7.5333675857786249 65.347323749480907 103.06684280277639 -7.5250167384285067 65.347323762345781 103.06684366429522 -7.5166658910785147 65.347323787679329 103.0668453607793 -7.5002368921017659 65.347323800147294 103.06684619570034 -7.4921587404750012 65.347323812627778 103.06684703144956 -7.4840805888483546 65.347323825121393 103.06684786806791 -7.4760024372218368 65.347323837628323 103.06684870556771 -7.4679242855954451 65.347323850148328 103.06684954393255 -7.4598461339691777 65.347323875656286 103.06685125198335 -7.4434041152474535 65.347323888645704 103.06685212176383 -7.4350402481520126 65.347323901649006 103.06685299246385 -7.4266763810567014 65.347323914666319 103.06685386409001 -7.418312513961526 65.347323927697701 103.06685473665063 -7.4099486468664884 65.347323940743351 103.0668556101558 -7.4015847797715839 65.347323966863556 103.06685735907874 -7.3848570455821418 65.347323979938508 103.06685823452592 -7.3764931784876167 65.347323993027743 103.06685911091726 -7.3681293113932274 65.347324006130947 103.06685998823774 -7.3597654442989713 65.347324019248376 103.06686086649894 -7.3514015772048467 65.347324032380612 103.06686174573895 -7.3430377101108615 65.347324058206922 103.06686347486459 -7.3266087111393636 65.347324070899674 103.06686432465916 -7.3185435792618403 65.347324083606381 103.06686517538222 -7.3104784473844466 65.347324096326972 103.06686602702359 -7.3024133155071853 65.347324109061489 103.06686687958702 -7.2943481836300554 65.347324121810189 103.06686773309006 -7.2862830517530588 65.34732414780963 103.06686947368829 -7.2698540527834172 65.347324161061337 103.06687036084902 -7.2614901856907768 65.347324174328691 103.06687124904306 -7.2531263185982864 65.347324187611648 103.06687213827384 -7.2447624515059461 65.347324200910393 103.06687302855143 -7.2363985844137542 65.34732421422521 103.06687391989264 -7.228034717321715 65.347324240887616 103.06687570474935 -7.2113069831380656 65.347324254235033 103.06687659825231 -7.2029431160464492 65.347324267598907 103.06687749284522 -7.19457924895499 65.347324280979336 103.06687838853806 -7.1862153818636916 65.347324294376435 103.06687928533538 -7.1778515147725495 65.347324307790203 103.06688018323646 -7.1694876476815681 65.347324333712351 103.06688191841371 -7.1533443641853358 65.347324346218429 103.06688275553606 -7.1455649477800582 65.347324358739115 103.06688359362822 -7.137785531374921 65.347324371274738 103.06688443270956 -7.1300061149699259 65.347324383825452 103.06688527279259 -7.1222266985650782 65.347324396391357 103.06688611388302 -7.1144472821603753 65.347324422498758 103.06688786134164 -7.0983039986661272 65.347324436042641 103.06688876787042 -7.0899401315766113 65.347324449604244 103.06688967557565 -7.0815762644872633 65.34732446318371 103.06689058446591 -7.0732123973980867 65.347324476781182 103.06689149454897 -7.0648485303090842 65.347324490396744 103.06689240583204 -7.0564846632202549 65.347324517664291 103.06689423081066 -7.0397569290430608 65.347324531316517 103.06689514452682 -7.0313930619547031 65.347324544987188 103.06689605946505 -7.023029194866524 65.34732455867632 103.06689697562817 -7.014665327778518 65.347324572384082 103.06689789302659 -7.0063014606906915 65.34732458611073 103.06689881167824 -6.9979375936030452 65.347324613111653 103.06690061868171 -6.9815085946440849 65.347324626383951 103.0669015069038 -6.9734434627727504 65.347324639674312 103.06690239632503 -6.9653783309015882 65.34732465298319 103.06690328697418 -6.9573131990306054 65.347324666310683 103.06690417885908 -6.9492480671597994 65.347324679656623 103.06690507196643 -6.9411829352891701 65.347324706879277 103.06690689368222 -6.9247539363325847 65.347324720758053 103.0669078224238 -6.9163900692466473 65.347324734656638 103.06690875248212 -6.9080262021609 65.347324748575218 103.06690968386536 -6.8996623350753472 65.347324762514077 103.06691061659433 -6.8912984679899889 65.347324776473712 103.06691155070234 -6.8829346009048304 65.3473248044359 103.06691342176825 -6.8662068667350571 65.34732481843848 103.06691435872565 -6.857842999650444 65.347324832462263 103.06691529709181 -6.8494791325660316 65.347324846507192 103.0669162368598 -6.8411152654818244 65.347324860573266 103.06691717803142 -6.8327513983978241 65.347324874660657 103.06691812061727 -6.8243875313140299 65.34732490287864 103.0669200086562 -6.8076597971469894 65.347324917008791 103.06692095407983 -6.7992959300637379 65.347324931160799 103.06692190095491 -6.7909320629807022 65.347324945335203 103.06692284931604 -6.7825681958978805 65.347324959532344 103.06692379918539 -6.7742043288152791 65.347324973752364 103.06692475057255 -6.7658404617328989 65.34732500223798 103.06692665637651 -6.7491127275687193 65.347325016503419 103.0669276107791 -6.7407488604869172 65.347325030792121 103.06692856672795 -6.7323849934053399 65.347325045104554 103.06692952424943 -6.7240211263239926 65.347325059440749 103.06693048335083 -6.7156572592428772 65.347325073800576 103.06693144402016 -6.7072933921619917 65.347325102052807 103.06693333406487 -6.690864393216402 65.347325115943164 103.06693426330195 -6.6827992613516694 65.34732512985623 103.0669351940486 -6.6747341294871605 65.347325143792958 103.06693612636617 -6.6666689976228843 65.347325157753531 103.06693706026614 -6.6586038657588418 65.347325171737353 103.06693799571001 -6.6505387338950266 65.347325200267605 103.06693990421208 -6.6341097349524105 65.347325214816024 103.06694087740257 -6.6257458678736327 65.347325229389824 103.06694185227596 -6.6173820007951027 65.347325243989829 103.06694282889021 -6.6090181337168277 65.347325258616365 103.06694380726637 -6.6006542666388119 65.347325273269192 103.06694478738856 -6.5922903995610529 65.347325302625876 103.06694675101959 -6.5755626654061832 65.347325317329748 103.0669477345314 -6.5671987983290716 65.34732533206035 103.06694871981777 -6.5588349312522194 65.34732534681838 103.06694970692543 -6.5504710641756372 65.347325361604064 103.06695069586961 -6.5421071970993259 65.34732537641716 103.06695168663416 -6.5337433300232837 65.347325406096743 103.06695367170869 -6.5170155958718681 65.347325420963486 103.06695466603398 -6.5086517287964938 65.347325435858025 103.06695566220684 -6.5002878617213913 65.347325450781014 103.06695666026904 -6.4919239946465721 65.347325465732808 103.0669576602444 -6.4835601275720363 65.347325480713494 103.06695866213886 -6.4751962604977846 65.34732551070897 103.0669606681795 -6.4584815460965705 65.347325525723988 103.0669616723459 -6.4501306987696179 65.34732554076821 103.0669626784498 -6.4417798514429521 65.347325555841849 103.06696368650589 -6.4334290041165758 65.347325570945159 103.06696469653336 -6.4250781567904909 65.347325586078512 103.06696570855615 -6.4167273094646999 65.347325615392165 103.066967668841 -6.4005840260047053 65.347325629568303 103.06696861682725 -6.3927915898704493 65.347325643771256 103.06696956659637 -6.3849991537364597 65.347325658001424 103.06697051817271 -6.37720671760274 65.347325672259032 103.06697147157008 -6.3694142814692913 65.347325686544096 103.06697242679176 -6.3616218453361189 65.347325716218464 103.06697441105028 -6.3454655421331632 65.347325731611676 103.06697544034647 -6.3371016750634217 65.347325747037232 103.06697647179048 -6.3287378079940018 65.347325762495885 103.0669775054315 -6.3203739409249096 65.347325777987962 103.06697854129607 -6.3120100738561487 65.347325793513576 103.06697957938843 -6.3036462067877244 65.347325824607168 103.06698165837274 -6.2869314923982582 65.34732584017604 103.06698269932859 -6.2785806450772252 65.347325855778607 103.06698374252231 -6.2702297977565289 65.347325871414782 103.06698478795043 -6.2618789504361674 65.347325887085063 103.06698583564149 -6.2535281031161469 65.347325902790288 103.06698688565605 -6.2451772557964773 65.347325934298013 103.06698899215792 -6.2284625414114361 65.347325950100497 103.06699004864515 -6.2200986743460733 65.347325965938921 103.06699110751875 -6.2117348072810676 65.347325981813199 103.06699216877418 -6.2033709402164208 65.347325997723615 103.06699323243187 -6.1950070731521327 65.347326013670866 103.06699429853732 -6.1866432060882159 65.347326045641168 103.06699643578486 -6.1699154719612954 65.347326061664347 103.06699750693399 -6.1615516048982908 65.347326077725157 103.06699858058623 -6.1531877378356636 65.347326093823725 103.06699965674696 -6.1448238707734157 65.347326109960548 103.06700073544914 -6.1364600037115506 65.347326126136551 103.06700181675339 -6.1280961366500835 65.347326158569487 103.06700398474239 -6.1113684025281101 65.347326174826662 103.06700507144203 -6.103004535467611 65.347326191123685 103.06700616078935 -6.0946406684075134 65.347326207460341 103.06700725277096 -6.0862768013478146 65.347326223837086 103.06700834741785 -6.0779129342885208 65.3473262402551 103.06700944480501 -6.0695490672296444 65.347326273177131 103.06701164529848 -6.0528213331129077 65.347326289681419 103.06701274841778 -6.0444574660550483 65.347326306227657 103.06701385432942 -6.0360935989976143 65.347326322815647 103.0670149630116 -6.0277297319406031 65.347326339445857 103.06701607450115 -6.0193658648840209 65.347326356119723 103.06701718889339 -6.0110019978278819 65.347326388962287 103.06701938387867 -5.994572998931373 65.347326405127916 103.06702046427066 -5.9865078670909728 65.347326421335126 103.06702154742551 -5.978442735250999 65.347326437583419 103.06702263331003 -5.9703776034114417 65.34732645387318 103.06702372195041 -5.9623124715723055 65.347326470205701 103.0670248134321 -5.9542473397336053 65.347326502986974 103.06702700413453 -5.9381040563107081 65.347326519435811 103.06702810335896 -5.9300259047265103 65.347326535928474 103.06702920549446 -5.9219477531427582 65.347326552464679 103.06703031052345 -5.9138696015594538 65.347326569045066 103.06703141848948 -5.9057914499766015 65.347326585671198 103.06703252949727 -5.89771329839422 65.347326619609731 103.06703479733642 -5.8812712797626174 65.347326636924606 103.06703595433284 -5.8729074127134266 65.347326654290157 103.06703711469497 -5.864543545664759 65.34732667170644 103.06703827843192 -5.8561796786166109 65.347326689173897 103.06703944556862 -5.8478158115689904 65.347326706693096 103.06704061614589 -5.8394519445219037 65.347326741809411 103.06704296246754 -5.8227372301754698 65.347326759405306 103.06704413813407 -5.8143863828761084 65.347326777054732 103.06704531735514 -5.8060355355772986 65.34732679475897 103.06704650022247 -5.7976846882790571 65.347326812518801 103.06704768678439 -5.7893338409813966 65.347326830334282 103.06704887704586 -5.7809829936843116 65.347326866103302 103.06705126675244 -5.7642682793448561 65.347326884057949 103.06705246627614 -5.7559044123025007 65.347326902069568 103.06705366958428 -5.7475405452607387 65.347326920138826 103.06705487672359 -5.7391766782195761 65.347326938266448 103.06705608774276 -5.7308128111790211 65.347326956453202 103.06705730269225 -5.7224489441390869 65.347326992946549 103.06705974055694 -5.7057212100605543 65.347327011253071 103.06706096347027 -5.6973573430219586 65.347327029620075 103.06706219040359 -5.6889934759839962 65.347327048048314 103.06706342140636 -5.680629608946675 65.347327066538682 103.06706465653818 -5.6722657419100084 65.347327085092189 103.06706589586902 -5.6639018748740053 65.347327122327997 103.06706838308935 -5.6471741408034175 65.34732714101213 103.06706963110393 -5.6388102737688568 65.347327159760312 103.0670708833751 -5.6304464067349729 65.347327178571916 103.06707213986176 -5.6220825397017569 65.347327197447925 103.06707340062978 -5.6137186726692212 65.347327216390937 103.06707466585182 -5.6053548056373952 65.347327253740218 103.06707716040343 -5.5889258067891081 65.347327272140177 103.06707838931266 -5.5808606749725786 65.347327290604639 103.067079622512 -5.5727955431567375 65.347327309133803 103.06708086000972 -5.5647304113415839 65.347327327728181 103.06708210184547 -5.5566652795271256 65.347327346388909 103.06708334809016 -5.5486001477133744 65.347327383876319 103.06708585162123 -5.5324568643408298 65.347327402701765 103.06708710882344 -5.5243787127820214 65.347327421596177 103.06708837061049 -5.5163005612239502 65.34732744056123 103.06708963709525 -5.5082224096666375 65.347327459597963 103.06709090834582 -5.5001442581100957 65.347327478706731 103.06709218438536 -5.4920661065543284 65.347327517746137 103.06709479129979 -5.4756240879773035 65.347327537681593 103.067096122496 -5.4672602209560965 65.347327557696772 103.06709745899308 -5.4588963539357485 65.347327577793706 103.06709880092683 -5.4505324869162859 65.347327597973319 103.06710014835679 -5.4421686198977195 65.347327618235383 103.06710150126609 -5.4338047528800457 65.347327658921557 103.06710421785681 -5.4170770188463795 65.347327679345398 103.06710558152018 -5.4087131518303844 65.347327699854134 103.06710695082764 -5.4003492848153112 65.347327720450593 103.06710832596647 -5.3919854178011954 65.347327741136255 103.06710970703502 -5.3836215507880549 65.347327761911259 103.06711109404276 -5.3752576837758896 65.347327803605069 103.06711387760969 -5.3585429694998226 65.347327824525664 103.06711527428638 -5.3501921222359456 65.347327845536952 103.06711667699048 -5.3418412749730626 65.347327866639986 103.06711808579554 -5.3334904277111876 65.347327887836244 103.06711950079846 -5.3251395804503385 65.347327909127557 103.06712092211963 -5.3167887331905357 65.347327951937956 103.06712377991201 -5.3000740189264155 65.347327973458292 103.06712521646497 -5.2917101519221177 65.347327995076355 103.06712665951451 -5.2833462849188999 65.347328016792559 103.06712810909063 -5.2749824179167684 65.34732803860858 103.06712956530036 -5.2666185509157417 65.347328060527175 103.06713102832769 -5.2582546839158573 65.34732810382495 103.06713391831977 -5.241812665384411 65.347328125198331 103.06713534490014 -5.2337345138527747 65.347328146669923 103.06713677800937 -5.2256563623222352 65.347328168239272 103.06713821761524 -5.2175782107927935 65.347328189907884 103.06713966381835 -5.2095000592644682 65.34732821167924 103.06714111685244 -5.2014219077372976 65.347328256212364 103.06714408896268 -5.1849798892190364 65.347328278978964 103.06714560835881 -5.1766160222279991 65.347328301860472 103.06714713539073 -5.1682521552382621 65.347328324858481 103.0671486701699 -5.1598882882498458 65.347328347974639 103.06715021280118 -5.1515244212627707 65.347328371210409 103.06715176338272 -5.1431605542770553 65.347328416291802 103.06715477171576 -5.1270172709857817 65.347328438121551 103.06715622841077 -5.1192378546800414 65.347328460057625 103.06715769217392 -5.1114584383755197 65.347328482101702 103.06715916311677 -5.1036790220722335 65.347328504255927 103.06716064137929 -5.0958996057702093 65.347328526522816 103.06716212713009 -5.0881201894694836 65.347328572969403 103.06716522620108 -5.0719769061927362 65.3473285971656 103.06716684061838 -5.0636130392168965 65.347328621496686 103.06716846400012 -5.0552491722426174 65.347328645964893 103.06717009649596 -5.0468853052699307 65.347328670571997 103.06717173822328 -5.0385214382988641 65.347328695319291 103.06717338926727 -5.03015757132943 65.347328745095851 103.06717671009412 -5.01342983739299 65.347328770125202 103.067178379884 -5.0050659704260045 65.347328795300001 103.0671800593389 -4.9967021034607244 65.347328820623858 103.06718174870151 -4.9883382364971913 65.347328846099771 103.06718344816889 -4.9799743695354435 65.347328871730014 103.06718515789227 -4.9716105025755182 65.347328923262211 103.0671885953842 -4.9548957884046754 65.347328949164364 103.06719032316876 -4.9465449411937454 65.347328975225366 103.06719206150569 -4.9381940939847029 65.347329001447818 103.06719381057368 -4.9298432467775859 65.34732902783449 103.0671955705549 -4.9214923995724318 65.347329054388197 103.06719734163524 -4.9131415523692805 65.347329107877016 103.06720090915155 -4.8964268382193366 65.347329134811929 103.06720270557207 -4.8880629712725439 65.34732916192084 103.06720451355569 -4.879699104327849 65.34732918920767 103.06720633336049 -4.871335237385308 65.347329216675803 103.06720816521262 -4.8629713704449662 65.347329244328151 103.06721000930618 -4.8546075035068688 65.347329300006223 103.06721372230052 -4.8378797696335178 65.347329328032444 103.06721559123322 -4.8295159026982697 65.347329356249688 103.06721747286053 -4.8211520357653637 65.347329384661791 103.06721936743426 -4.8127881688348557 65.347329413272462 103.06722127519859 -4.8044243019067983 65.347329442085226 103.06722319639042 -4.7960604349812455 65.347329500121887 103.06722706608771 -4.7793327011330922 65.347329529348599 103.06722901478045 -4.7709688342105263 65.347329558784082 103.06723097734421 -4.7626049672905699 65.347329588430924 103.06723295394724 -4.7542411003732594 65.347329618293756 103.06723494489925 -4.7458772334586641 65.347329648379372 103.06723695065151 -4.7375133665468825 65.347329709014076 103.06724099294213 -4.7207856327264839 65.3473297395619 103.06724302939988 -4.7124217658178384 65.347329770342029 103.06724508128859 -4.7040578989121524 65.34732980135756 103.06724714881227 -4.6956940320094782 65.347329832612814 103.06724923226042 -4.6873301651098869 65.347329864113462 103.06725133200793 -4.6789662982134592 65.347329925301764 103.06725541053579 -4.6628490545881167 65.347329954948904 103.06725738662557 -4.6550956778586867 65.347329984817975 103.06725937745775 -4.6473423011321406 65.347330014915869 103.06726138348732 -4.6395889244085806 65.347330045246153 103.06726340495126 -4.631835547688067 65.347330075809126 103.06726544186839 -4.6240821709706124 65.347330139518931 103.06726968779218 -4.6080430458527486 65.347330172701604 103.06727189918124 -4.5997572974528111 65.347330206162198 103.06727412902769 -4.5914715490565632 65.347330239909823 103.06727637793253 -4.5831858006641397 65.347330273950192 103.06727864627649 -4.5749000522756393 65.347330308285706 103.06728093422018 -4.5666143038911127 65.347330377552524 103.06728554966779 -4.5500428071252932 65.34733041249585 103.06728787797176 -4.5417570587441727 65.347330447748604 103.06729022681982 -4.5334713103672586 65.347330483316085 103.06729259656383 -4.5251855619946406 65.347330519205798 103.06729498770362 -4.5168998136264422 65.347330555427547 103.0672974008869 -4.5086140652628313 65.347330628546004 103.0673022720638 -4.4920425685388823 65.347330665447629 103.06730473038233 -4.4837568201785976 65.347330702698329 103.06730721187839 -4.4754710718231872 65.347330740302013 103.0673097168042 -4.4671853234727283 65.347330778266056 103.06731224565071 -4.4588995751273615 65.347330816601428 103.06731479914755 -4.4506138267872695 65.347330894038635 103.06731995701453 -4.4340423301102296 65.347330933135041 103.06732256102339 -4.4257565817732125 65.347330972622913 103.067325191016 -4.4174708334418167 65.347331012512058 103.06732784764256 -4.4091850851162233 65.347331052811143 103.06733053147725 -4.4008993367965887 65.347331093527728 103.06733324301806 -4.3926135884830639 65.347331175816805 103.06733872289826 -4.3760420918586638 65.347331217390732 103.06734149133217 -4.3677563435477982 65.347331259404868 103.0673442889816 -4.3594705952434571 65.347331301872472 103.06734711671915 -4.3511848469458867 65.347331344804857 103.06734997529732 -4.3428990986553027 65.347331388211586 103.06735286534824 -4.3346133503718942 65.347331474473492 103.06735860850306 -4.3183275692654197 65.347331517304752 103.0673614600225 -4.3103275364419948 65.347331560602754 103.06736434250597 -4.3023275036257296 65.347331604377672 103.06736725662913 -4.2943274708168291 65.347331648641401 103.06737020317944 -4.2863274380155341 65.347331693407554 103.06737318305645 -4.2783274052221127 65.347331785594307 103.06737931925529 -4.2620416241788837 65.347331833042816 103.06738247742992 -4.2537558759295155 65.347331881059503 103.06738567328833 -4.2454701276891846 65.347331929663397 103.06738890809308 -4.237184379458272 65.347331978870088 103.06739218287646 -4.2288986312371062 65.347332028691739 103.06739549844042 -4.2206128830259653 65.347332129594719 103.06740221309353 -4.2040413866030582 65.347332180683381 103.06740561267338 -4.1957556383914341 65.347332232422019 103.06740905535094 -4.1874698901905871 65.3473322848305 103.067412542439 -4.1791841420009375 65.347332337929515 103.06741607530866 -4.1708983938229318 65.34733239174065 103.06741965538912 -4.1626126456570525 65.347332498941924 103.06742678719732 -4.1463268647775262 65.347332552290851 103.06743033619117 -4.138326832063159 65.347332606342974 103.0674339317998 -4.1303267993609927 65.347332661113938 103.06743757505197 -4.1223267666714083 65.347332716625019 103.06744126735488 -4.1143267339949059 65.347332772903144 103.0674450104939 -4.1063267013320974 65.347332889082836 103.0674527373786 -4.0900409205472164 65.347332949029393 103.06745672410224 -4.0817551724259555 65.34733300985485 103.0674607690647 -4.0734694243207068 65.347333071588309 103.0674648741915 -4.0651836762321754 65.347333134253873 103.06746904107274 -4.0568979281609892 65.347333197870583 103.06747327096305 -4.0486121801077033 65.347333327095043 103.0674818626306 -4.0320406839898686 65.347333392696981 103.06748622402397 -4.0237549359252425 65.347333459314214 103.06749065266463 -4.0154691878801669 65.347333526994902 103.06749515173989 -4.0071834398557895 65.347333595779517 103.06749972392166 -3.9988976918531605 65.347333665700702 103.06750437136637 -3.9906119438732262 65.347333807861062 103.0675138197274 -3.9740404478937585 65.347333880125674 103.06751862233354 -3.965754699894704 65.347333953604476 103.0675235053278 -3.9574689519205171 65.347334028334174 103.06752847112901 -3.9491832039722814 65.347334104360854 103.06753352278054 -3.9408974560513266 65.347334181740081 103.06753866395024 -3.9326117081592185 65.347334339313633 103.06754913259485 -3.9160402123443068 65.347334419501053 103.06755445961004 -3.9077544644213758 65.347334501141262 103.0675598827571 -3.8994687165303117 65.347334584284241 103.06756540533577 -3.8911829686726946 65.347334668987898 103.06757103116495 -3.8828972208503458 65.347334755318016 103.06757676458231 -3.8746114730653334 65.347334931369502 103.0675884557195 -3.8580399774462562 65.347335021085954 103.06759441311301 -3.8497542296120995 65.347335112560714 103.06760048679344 -3.8414684818195952 65.347335205862521 103.06760668128838 -3.833182734071078 65.347335301065556 103.06761300148459 -3.8248969863691178 65.347335398249442 103.06761945262797 -3.8166112387165234 65.347335589911751 103.06763217420018 -3.8006111742224316 65.347335684120424 103.06763842679911 -3.7928968573742003 65.347335780187322 103.06764480220875 -3.7851825405738886 65.347335878184381 103.06765130516305 -3.7774682238241604 65.347335978193243 103.06765794104167 -3.7697539071281096 65.347336080305382 103.06766471587001 -3.7620395904892523 65.347336296639398 103.06767906763731 -3.7460395262226882 65.347336411200075 103.06768666695471 -3.737753778604366 65.34733652840363 103.06769444081634 -3.7294680310606725 65.347336648364248 103.06770239673233 -3.7211822835964261 65.347336771210777 103.06771054317817 -3.7128965362171549 65.347336897086777 103.06771888959443 -3.7046107889290951 65.347337155225389 103.06773600393117 -3.6880392941612348 65.347337287461272 103.06774477007518 -3.6797535466807707 65.347337423031121 103.06775375621282 -3.671467799305232 65.347337562111832 103.06776297397245 -3.6631820520427039 65.347337704883969 103.06777243521677 -3.654896304901933 65.347337851531776 103.06778215204302 -3.6466105578923171 65.347338152975141 103.06780212287291 -3.630039063556818 65.347338307807277 103.06781237929083 -3.6217533162324926 65.347338466934076 103.06782291879669 -3.6134675690609734 65.34733863058247 103.06783375628443 -3.6051818220545013 65.34733879901205 103.06784490878191 -3.5968960752275181 65.347338972514891 103.06785639545099 -3.5886103285966726 65.347339330273442 103.06788007688797 -3.5720388348039469 65.347339514534852 103.06789227202451 -3.5637530876429291 65.347339704481072 103.06790484142185 -3.5554673407145851 65.347339900438016 103.0679178064312 -3.5471815940395528 65.347340102776485 103.06793119133032 -3.5388958476422823 65.347340311912049 103.06794502332329 -3.530610101551038 65.347340729767197 103.0679726544456 -3.5146100393623922 65.347340937538078 103.06798639117967 -3.5068957232218176 65.347341151967143 103.06800056561178 -3.4991814074006555 65.347341373455663 103.06801520397231 -3.4914670919288922 65.34734160245641 103.06803033585311 -3.4837527768420249 65.347341839473827 103.06804599420764 -3.4760384621810578 65.347342339750398 103.06807903729342 -3.4603241159556886 65.347342603674903 103.06809646568085 -3.4523240844303458 65.347342877432212 103.0681145393462 -3.4443240534654662 65.347343161716111 103.06813330354963 -3.4363240231233076 65.347343457319454 103.0681528099783 -3.4283239934794034 65.34734376513417 103.06817311674641 -3.4203239646225572 65.347344418622143 103.06821621544103 -3.4040381884163358 65.347344765266087 103.06823907088106 -3.3957524411395306 65.347345127175501 103.06826292589231 -3.3874666949325665 65.347345505633157 103.06828786392309 -3.3791809499384846 65.347345902112309 103.06831398069271 -3.3708952063352311 65.347346318276678 103.06834138419156 -3.3626094643356503 65.3473471937168 103.06839900734624 -3.3460379736431665 65.347347653181956 103.06842923921546 -3.3377522249934728 65.34734813617915 103.06846100736018 -3.3294664784611316 65.347348644974517 103.06849445858765 -3.3211807343752602 65.347349182297066 103.0685297694409 -3.3128949931713683 65.347349751338797 103.06856714619873 -3.3046092553913575 65.347350793373863 103.0686355536869 -3.2903234940107042 65.347351249665763 103.06866549745541 -3.2843234685117197 65.347351725957395 103.06869674184391 -3.2783234454192822 65.347352223858422 103.06872939057681 -3.2723234250500064 65.347352745261205 103.06876356544045 -3.2663234078044021 65.347353292340657 103.06879940628298 -3.2603233941668761 65.34735457958385 103.06888369468111 -3.2468947645657988 65.347355335147924 103.06893313975706 -3.2394661510551472 65.347356138406454 103.0689856740629 -3.2320375449975631 65.347356994996773 103.06904165894524 -3.2246089478429303 65.34735791203363 103.06910154927654 -3.2171803616672281 65.347358898109078 103.06916589345506 -3.2097517891725347 65.347361685285549 103.06934758439714 -3.1903229094353511 65.347363609403459 103.06947287452965 -3.1783226445501342 65.347365793695545 103.06961485681295 -3.1663224354570443 65.347368290451385 103.06977687582012 -3.1543222998104303 65.347371182498819 103.06996418535104 -3.1423222887006048 65.347374619501579 103.07018616609628 -3.1303224988611471 65.347381175427827 103.07060783125414 -3.111750952876764 65.347383735461719 103.07077221630935 -3.1051789634152662 65.347386586916315 103.07095492925664 -3.0986071257745067 65.347389784389151 103.0711593615746 -3.0920354874232707 65.34739340656806 103.07139035894711 -3.0854641495072235 65.34739757828153 103.07165551477952 -3.0788932823397985 65.34740849692416 103.07234628790097 -3.0643067751892286 65.34741556013681 103.07279198479084 -3.0562954635226713 65.347424274626817 103.07333676795639 -3.048284816870094 65.347434658364875 103.07398761264173 -3.0402732880239967 65.347448751475895 103.07485420870498 -3.0322676749189448 65.347466637897341 103.07595656431921 -3.024274780902072 65.347511298718899 103.07861709535405 -3.0124472983373032 65.347528761729208 103.07964809236216 -3.0086106184954513 65.347549983270014 103.08088906407312 -3.0047796356612597 65.347576958580788 103.08244512328905 -3.0009641916313967 65.347611526919678 103.0844071596602 -2.9972043916549431 65.347659389856474 103.08706437290097 -2.9936129478529772 65.347727831110873 103.09066903565405 -2.9903258684571949 65.347766281572447 103.09272438298539 -2.9883261973874342 65.34783163085028 103.09605002209362 -2.9863267347613376 65.347899094013968 103.09941601873247 -2.984327278760817 65.347956644994653 103.10221973235323 -2.9823277304997617 65.348005016585361 103.10448581610451 -2.980328094024034 65.348057700440748 103.10686621683226 -2.9783284763114728 65.348140947077255 103.11064017507987 -2.9763290872718926 65.348189772336767 103.11293821127718 -2.9743294560388174 65.348280761967175 103.11683409137606 -2.9723300870184053 65.348392538945248 103.12147265189297 -2.9703308398778794 65.348496415344897 103.12571036440768 -2.9683315269632926 65.348556392337159 103.12811533556309 -2.9663319132995269 65.348529160190139 103.12696730706534 -2.9643317165902952 65.348364098269101 103.12025765568355 -2.9623306072181346 + 0 8 0.010681794548197362 6 0.022202451223878795 6 0.032918066927829642 6 0.044438723603284838 6 0.055959380278620144 6 0.067462103140541504 6 0.077802099078170331 6 0.089304821939833925 6 0.10043192503550971 6 0.11195258171018221 6 0.12347323838470914 6 0.13458240766668911 6 0.14610306434093442 6 0.15762372101502192 6 0.16833933671745172 6 0.1798599933912306 6 0.19138065006484678 6 0.20248981934592852 6 0.21401047601921899 6 0.2255311326923333 6 0.23705178936526533 6 0.2485724460380114 6 0.25968161531823036 6 0.2712022719906037 6 0.28272292866277887 6 0.29424358533475953 6 0.30574630819327081 6 0.31647985770679365 6 0.32800051437818317 6 0.33950323723609532 6 0.35102389390708066 6 0.36254455057786783 6 0.37406520724845432 6 0.38558586391884508 6 0.39669503319680149 6 0.40782213628785391 6 0.41934279295771859 6 0.4308455158141673 6 0.44236617248373955 6 0.4538868291531919 6 0.46540748582255492 6 0.47651665509965224 6 0.48764375818998829 6 0.49916441485931651 6 0.51068507152873888 6 0.52218779438509344 6 0.53370845105498044 6 0.54483555414627138 6 0.55635621081708586 6 0.56707182651726773 6 0.57859248318964751 6 0.59011313986319691 6 0.60161586272500667 6 0.61313651940194791 6 0.6246571760812748 6 0.63617783276359174 6 0.64769848944965103 6 0.65837823754103308 6 0.66979129135728077 6 0.68120434518023221 6 0.69261739901150965 6 0.70403045285346777 6 0.71544350670923207 6 0.7264630070003919 6 0.73787606089563706 6 0.74928911482044025 6 0.76030861519792226 6 0.77172166920979224 6 0.78313472329069178 6 0.7945477774631774 6 0.80596083176126854 6 0.81737388623558549 6 0.82799983372944586 6 0.83941288879209319 6 0.85082594439033388 6 0.86223900081547533 6 0.87365205855875416 6 0.88427801083175206 6 0.89529752034720123 6 0.90671059063940029 6 0.91812367526188332 6 0.92638834146503979 6 0.93662083621902159 6 0.95315073391117655 6 0.96220423513975339 6 0.97325062750164748 6 0.97863641090360542 7 0.98931820545180282 7 1 8 +7 0 0 6 37 8 77.075806685431857 102.37740179445132 -2.9620625044989555 77.097935980730838 102.59254001968084 -2.9620971459206893 77.110583187733326 102.80878816380293 -2.962131930556529 77.113671075195228 103.02560564123218 -2.9621667830450042 77.107165244342454 103.24245133020726 -2.9622016216462721 77.091074128870943 103.45878357279075 -2.9622363582421158 77.04702334772962 103.82885393070713 -2.9622957342484413 77.023668203590177 103.98310293935189 -2.962320470575706 76.995402552199607 104.13660624861227 -2.9623450750639582 76.962256433547438 104.28916495229454 -2.9623695158152601 76.924270937941472 104.44058219020222 -2.9623937612875202 76.850431122341888 104.69967132848893 -2.9624352260003275 76.816838455723286 104.80797474234627 -2.9624525522644305 76.780740158732968 104.91549885035356 -2.9624697471543993 76.742159124831701 105.02217010297635 -2.9624867989041079 76.701121188359878 105.12791594050043 -2.9625036959137034 76.54893249286701 105.49467542639097 -2.9625622759613623 76.425015649364738 105.75045305692424 -2.9626030862458133 76.286358921328997 105.99886972161211 -2.9626426774085348 76.133521691159913 106.23885773976072 -2.9626808792008994 75.967167457927857 106.46941090979821 -2.9627175315102181 75.576961644230508 106.94909431943124 -2.9627936818849854 75.348136036099433 107.19420004864244 -2.9628325209376971 75.10284522426781 107.42335030956336 -2.9628687552258208 74.84251192979913 107.63517826635484 -2.962902168523176 74.568698967880493 107.828479674007 -2.962932571078519 74.168779776475517 108.07181854151303 -2.9629707088670947 74.052543194839302 108.13826478587499 -2.9629811056372795 73.934529220076897 108.20151425121192 -2.9629909842384232 73.814849932576564 108.26150776356998 -2.9630003354326502 73.693620127246689 108.31819155123414 -2.9630091508570229 73.399690181539825 108.44597288705012 -2.9630289729806361 73.225628550730505 108.51388232528156 -2.9630394639188555 73.049092980701701 108.57511362005566 -2.963048875412944 72.870410847527282 108.62955706704065 -2.9630571906281795 72.689916343741132 108.67712519693976 -2.9630643963203771 72.507950478337179 108.71775277549141 -2.96307048283589 + 0 7 0.15232779066728822 5 0.26185846240868399 5 0.34141378630637109 5 0.54040728645209835 5 0.77495060460148646 5 0.86886819439191132 5 1 7 +7 0 0 6 47 10 72.50795047833715 108.71775277549138 -2.9630704828358989 72.395809250980662 108.74279058416607 -2.9630742338103935 72.283108901450859 108.76519249295961 -2.9630775597403782 72.169929058641785 108.78494330370769 -2.9630804583772079 72.056349828295723 108.80203119655475 -2.9630829280164028 71.942451793003229 108.81644772995412 -2.9630849674976432 71.72440626641324 108.83887609207592 -2.9630880407792257 71.620237878751411 108.84735236279617 -2.9630891491806159 71.515871496950012 108.85360794133372 -2.9630899001566182 71.411367931578241 108.85763645583872 -2.9630902928313572 71.306788156042202 108.85943387410653 -2.9630903267054087 71.014859828108854 108.85821873788196 -2.9630894194792057 70.82747719719174 108.85027650714908 -2.9630876859252484 70.640397644337838 108.83516222327903 -2.9630848003117483 70.45397145522405 108.8128899541624 -2.963080765754071 70.268546970699759 108.78349742368057 -2.9630755891651219 69.950448335889675 108.72050648405194 -2.9630646885952525 69.817140206039355 108.69022493661089 -2.9630594962035981 69.684679602864762 108.65622501239353 -2.9630537082059134 69.553198287965287 108.6185367328593 -2.9630473297489388 69.422826378910898 108.57719649791595 -2.9630403670006387 69.200748188837494 108.49989476663247 -2.9630274003462014 69.108445203812082 108.46567271781151 -2.96302167457493 69.016831242445292 108.42959687317428 -2.9630156525141227 68.925953507746527 108.39168480141041 -2.9630093371027466 68.835858557455012 108.35195570618178 -2.9630027315410001 68.526945639957916 108.20825419612363 -2.9629788803633623 68.312314125463288 108.09520189950996 -2.962960185501553 68.103385304905814 107.97158592775229 -2.962939806593115 67.900813328103609 107.83777362202636 -2.9629178042771098 67.705218501436136 107.69418690395229 -2.9628942478830083 67.257624478607937 107.33025664771446 -2.9628346600299058 67.012461401173113 107.10148299000994 -2.9627972902232602 66.783250581717652 106.85623978323925 -2.9627573120767194 66.571359271368124 106.59594950505475 -2.9627149575640463 66.37799215224706 106.32217477527179 -2.9626704807889634 66.134556813927745 105.92229928846677 -2.9626056130734555 66.06808156335056 105.80607221649574 -2.9625867691812005 66.004802982622778 105.6880668643477 -2.9625676472501712 65.944780279684366 105.56839531358823 -2.9625482654400979 65.888067259952635 105.4471723619875 -2.9625286423341328 65.760133836629677 105.15306817758727 -2.9624810574308706 65.692115956885274 104.97881845734061 -2.9624528834769976 65.630791155504198 104.80208799791126 -2.9624243270981263 65.576269564718345 104.62320528462682 -2.9623954413617977 65.528638980576105 104.44250565301161 -2.9623662803822053 65.48796486294242 104.2603312887863 -2.9623368993201891 + 0 7 0.074770873192650592 5 0.14284262397464381 5 0.26476179997704608 5 0.35352865886486839 5 0.41741856605864036 5 0.57462472680546017 5 0.79163499837064677 5 0.87853410998728632 5 1 7 +7 0 0 4 5 2 77.07580668519627 102.377401792157 -6.8734514136890965 77.058190036070272 102.20613524929607 -6.8734232759888334 77.03388215974384 102.03550915246583 -6.8733952269100262 77.002915703414146 101.86592263274962 -6.8733673320060129 76.965371654677639 101.69776749532627 -6.8733396557471416 + 0 5 1 5 +7 0 0 4 5 2 65.48796486294242 104.26033128878629 -2.9623368993201984 65.450408184470049 104.09211955067957 -2.9623097701490324 65.419441233432906 103.92251000254058 -2.9622824276516901 65.395140058160578 103.75190080192084 -2.9622549557850939 65.377529886954946 103.58069723619339 -2.9622273887170638 + 0 5 1 5 +7 0 0 5 102 26 72.507950478337179 108.71775277549141 -6.8744802589501175 72.539991262482971 108.71059901908852 -6.8744791641608929 72.571982135591838 108.70322164122611 -6.8744780325663779 72.60392101638638 108.69562110769111 -6.874476864237872 72.63580583043975 108.68779791258767 -6.8744756592513259 72.788150666567688 108.64928971375018 -6.8744697166278739 72.907862084885878 108.61564206982773 -6.8744644911629393 73.026656389523311 108.57883801801249 -6.8744587456705375 73.144423019651938 108.5389117820192 -6.8744524854931131 73.274517188049799 108.49093849283918 -6.8744449355657951 73.28796600271923 108.48593247328031 -6.8744441474189868 73.301399506132668 108.4808854407618 -6.8744433525068347 73.314817531574406 108.47579745790624 -6.8744425508392002 73.34098522543313 108.465783514348 -6.874440972440115 73.353736345775559 108.46086134827598 -6.8744401963346986 73.366473130015564 108.45590214512984 -6.8744394141185357 73.379195434754052 108.45090596073285 -6.8744386258004315 73.428761337168083 108.43127448223399 -6.8744355272256552 73.465496542018187 108.41636547661282 -6.8744331718033056 73.502105240012668 108.40114721767881 -6.8744307653405317 73.538583963746092 108.38562114611423 -6.8744283080651458 73.592478232628139 108.36214425351061 -6.8744245893242439 73.609996091221817 108.35442833408941 -6.8744233666431267 73.627482458144158 108.3466411710621 -6.8744221321979113 73.644936947284876 108.33878293638122 -6.8744208860158524 73.755098849576228 108.28864650991845 -6.8744129322862406 73.846924382973384 108.24443035040576 -6.8744059046697146 73.937777698641739 108.19823174686769 -6.8743985494664468 74.027601974478344 108.15007958386259 -6.8743908712750565 74.303464863388356 107.99441457179603 -6.8743660137607963 74.485766038046492 107.8802763797393 -6.8743477384411031 74.662722821998656 107.75788540019072 -6.8743280962124835 74.833843704594628 107.62758152468044 -6.8743071416230723 75.070084402525453 107.43002904738755 -6.8742753155921168 75.140318422059778 107.36889525861007 -6.8742654597824471 75.209333240127691 107.30637928366721 -6.8742553742451422 75.277092824388973 107.24251375928498 -6.8742450642453887 75.35822605477604 107.16295340236782 -6.8742322125299236 75.372826895928114 107.14851003426993 -6.874229879117995 75.387364585359549 107.13400301030003 -6.8742275351088749 75.401838753552823 107.11943269917518 -6.8742251805621439 75.427297130649578 107.09358044806304 -6.8742210023174506 75.438307673959883 107.08232444168266 -6.8742191829383099 75.449280499068706 107.071031621318 -6.8742173574275771 75.460215442033274 107.05970215568524 -6.8742155258125264 75.482009391992989 107.03697011294096 -6.8742118504027463 75.492868397915373 107.02556753479652 -6.874210006607842 75.503689194987032 107.01412864998797 -6.8742081567633635 75.514471621531655 107.00265362942098 -6.8742063008969483 75.538295204558182 106.97712909863735 -6.8742021723954139 75.551317786051641 106.96306225105823 -6.8741998968706586 75.564282971847533 106.94894241266923 -6.8741976125123427 75.577190474843576 106.93476989613491 -6.8741953193710499 75.602430750127525 106.90682803980413 -6.8741907978134451 75.614767587998557 106.89306237252501 -6.8741885700095535 75.627050268949034 106.87924829708027 -6.8741863341317924 75.639278540063998 106.86538609791498 -6.8741840902261995 75.663625816631765 106.83756596174563 -6.874179586441846 75.675744821591891 106.82360802430102 -6.8741773265630126 75.687808914859133 106.80960253556987 -6.8741750587490174 75.699817848013851 106.79554978394586 -6.8741727830465553 75.721511283538092 106.76996139818623 -6.8741686388376593 75.73121440668838 106.75844155044508 -6.8741667729665554 75.740880611189013 106.74689067362294 -6.8741649019147744 75.75050976488717 106.73530892563613 -6.8741630257079009 75.805009365789488 106.66932932592621 -6.8741523363441983 75.849101990752075 106.61428898822734 -6.8741434158837906 75.892366156243369 106.55859174603384 -6.8741343856302155 75.934788907487729 106.50225429011837 -6.8741252482895892 76.038102279085379 106.36068710366867 -6.8741022795086719 76.097962913439559 106.27470567940978 -6.8740883222310227 76.155898825418461 106.18740540965489 -6.8740741438830018 76.211871720162137 106.09884397547077 -6.8740597538324906 76.325101679233214 105.91053376368851 -6.8740291417232076 76.381948458098151 105.81053823073466 -6.8740128781790286 76.436338963069574 105.70917277936243 -6.8739963838807796 76.48822989846623 105.60651814574911 -6.8739796719659978 76.5625465120103 105.45011940034074 -6.8739541989984714 76.586861443820112 105.39727292660891 -6.8739455898344417 76.610521628415114 105.34412848303293 -6.8739369301833149 76.633522236661904 105.29069690184001 -6.8739282218101367 76.704457901892027 105.12013290528725 -6.8739004168810451 76.749913115281785 105.00196916221432 -6.873881145055309 76.792177386452678 104.88261084573931 -6.8738616694342625 76.831209959590126 104.76217309130666 -6.8738420088045178 76.922612374866361 104.45193033131625 -6.8737913413597154 76.970345204567778 104.26075881579879 -6.8737600989927872 77.010044523606581 104.06770110283064 -6.8737285274814779 77.041617822253954 103.87320737987841 -6.8736967004469305 77.069230876654927 103.64246792233489 -6.8736589179631054 77.073185126900256 103.60716839098941 -6.8736531371699616 77.076872754015412 103.57183968719009 -6.8736473509364373 77.08029347821595 103.53648449699904 -6.8736415597024685 77.099866847109695 103.31689734310035 -6.8736055868842953 77.109044449899073 103.13204371707882 -6.8735752861891299 77.110945965077732 102.9469253394174 -6.8735449241908357 77.105567587639143 102.76192323246673 -6.8735145633826589 77.090193063169949 102.53736068970527 -6.8734776885572844 77.087108597654677 102.49732608246525 -6.8734711137357198 77.08368248125069 102.45731880803923 -6.873464542558553 77.079915045364885 102.41734275292677 -6.8734579756641363 77.075806685431857 102.37740179445132 -6.8734514136894749 + 0 6 0.019204870208588846 4 0.091922216977111115 4 0.10031681188111653 4 0.10831237834258386 4 0.13150325972636132 4 0.14270074180721354 4 0.20230568657177309 4 0.32799321316729824 4 0.38245156723210949 4 0.39446542761467929 4 0.40367623282236864 4 0.41288716815571486 4 0.42410062013763622 4 0.43491369291145615 4 0.44572681486732196 4 0.45453750487822969 4 0.49578733439959866 4 0.55705791644065517 4 0.62432413897105365 4 0.65835057841741318 4 0.73238458378236959 4 0.84754777609842324 4 0.86832590712115476 4 0.97651163639678074 4 1 6 +7 0 0 6 42 9 65.377520659224018 103.58008102273007 -6.873619963739106 65.415220399229852 103.94659288249349 -6.8736801786571142 65.480501481846332 104.31048551057543 -6.8737400316711925 65.573149332575085 104.66907844625906 -6.8737990825536333 65.692590836606811 105.01979430343917 -6.8738569071042566 65.837957261471203 105.36014075258392 -6.8739130943493265 66.192313843615537 106.04270074174161 -6.8740259314052929 66.405630891214756 106.38273845307609 -6.8740822349238755 66.646433868910776 106.7047870446719 -6.8741356550401296 66.91277970825999 107.00611107448925 -6.874185738261227 67.202404606167761 107.28423395785241 -6.8742320727692903 67.82400577183779 107.79067200087565 -6.8743166754014355 68.156175571115 108.01884273476672 -6.8743549203094334 68.506483541245885 108.21932141790046 -6.8743886671916457 68.872014745979499 108.39037454206337 -6.8744176245242992 69.249663275959392 108.53064008935189 -6.8744415612535317 69.99183787749331 108.73917679204703 -6.8744775925751167 70.355069232091992 108.81229128876448 -6.8744904784848382 70.72318523924055 108.8578493076535 -6.8744988560511802 71.093560026402869 108.87550674293391 -6.8745026623769085 71.46354423917353 108.86522759918367 -6.874501885049332 72.198827013881939 108.78932207934203 -6.8744912397686733 72.564537081891388 108.72343221148516 -6.8744813296034684 72.924869010852831 108.62989893639499 -6.874466871624823 73.277206529448748 108.50930715934155 -6.8744479553533111 73.619020469378228 108.3625429992434 -6.8744247199343604 74.301257416277622 108.00637010217152 -6.8743679695138269 74.63972537244122 107.79308451978821 -6.8743338137551309 74.960271159635198 107.55253185298793 -6.8742951411006459 75.260190043406254 107.28664066726081 -6.8742522612666095 75.537033446786182 106.99765585203879 -6.8742055364880095 76.041164781884476 106.37771219024894 -6.8741050798130825 76.268317402467375 106.04656879692405 -6.8740513173114683 76.467962759229266 105.69743047582075 -6.8739945353656626 76.638386578538359 105.33318228071425 -6.8739352030265151 76.778241267924926 104.95689766971451 -6.8738738211512826 76.98681131765909 104.21605078928192 -6.8737528055726917 77.060127736691555 103.85271894831507 -6.8736933850101849 77.105869430848671 103.48448559169591 -6.8736330926705378 77.123690697310423 103.11397948284481 -6.8735723589247826 77.113554324278098 102.74385270718952 -6.8735116187274441 77.075797457710408 102.37678558158174 -6.8734513125837449 + 0 7 0.11986843911563963 5 0.24975714770374671 5 0.38011042853895527 5 0.50011610227304726 5 0.62059588068326688 5 0.75005225653602259 5 0.87994933437546152 5 1 7 +7 0 0 7 539 90 77.10653874498108 102.9400194188904 -2.9636917516798036 77.106563301588565 102.94311103881721 -2.9654065517330506 77.106508212357355 102.93554331946176 -2.9671196030423443 77.106437403935715 102.92632365082864 -2.968832383328909 77.106387699029483 102.92053410417864 -2.9705457263415971 77.106368816402181 102.91933143202866 -2.9722598218568939 77.106363370875016 102.91994706815159 -2.9739742156789104 77.106326873326779 102.9156871275766 -2.9756878096393895 77.10634282816001 102.91707676665142 -2.9793455028088829 77.106212703182024 102.9053570535948 -2.9792987885478994 77.106254991669658 102.90936278873322 -2.9838481320239305 77.106257032043487 102.90973427322979 -2.9874608187408382 77.10617708813281 102.90265475482121 -2.9888942331031858 77.106205188382859 102.90536943192059 -2.9929252716619987 77.106182724004853 102.90348601608665 -2.9956858910419393 77.106170261407399 102.90251643569809 -2.9988284552714961 77.106159856319337 102.90172097809372 -3.0019714702383209 77.106150933586932 102.9010468758119 -3.0051142173532028 77.106143131276141 102.90046220716717 -3.0082567826018916 77.106136230063839 102.89994869956415 -3.0113995301268797 77.106130082628837 102.89949453281193 -3.0145425758091933 77.10612454304308 102.89908714243792 -3.0176852608501825 77.106106962314115 102.89779456167443 -3.0276649172865131 77.106095546482777 102.89697903795883 -3.0376616533416918 77.106086545182222 102.89633569685033 -3.0476638000404126 77.106079592176755 102.89584617046154 -3.0576685144050675 77.106073769992122 102.89543582438128 -3.0676730422363825 77.106068935932981 102.89509760294956 -3.0776779214146117 77.106061252766651 102.89456133501766 -3.096255657570484 77.106058228311468 102.8943510867616 -3.1048268238241188 77.106055591600096 102.89416832087068 -3.11339822142727 77.106053256663998 102.89400682413383 -3.1219697655570728 77.106051168418688 102.89386266109412 -3.1305414061964023 77.106049288402303 102.89373310528683 -3.1391131203099389 77.106046612952653 102.89354898602296 -3.1525420137565385 77.106045701062428 102.8934862926623 -3.1573991424261982 77.106044839267938 102.89342709502674 -3.1622562869761768 77.106044022672805 102.89337104644331 -3.1671134448538099 77.106043247060001 102.89331784893564 -3.1719706140068129 77.106042508891662 102.89326725322373 -3.1768277928832878 77.106040605280683 102.89313685869686 -3.1899706665808116 77.106039504897382 102.89306157391515 -3.198256377092886 77.106038490214047 102.89299222536135 -3.2065421066479574 77.106037549450917 102.89292798728646 -3.2148278509985846 77.106036672993667 102.89286818720971 -3.2231136069698727 77.106035853393465 102.89281230591895 -3.2313993724594732 77.106034317185774 102.89270763800543 -3.2479708698943175 77.106033599843798 102.89265879898221 -3.256256601384564 77.106032927524851 102.89261305611832 -3.2645423394625586 77.106032295190147 102.89257005956019 -3.2728280829388017 77.106031698578377 102.89252951388315 -3.2811138308800549 77.106031134205708 102.89249117809142 -3.2893995826093416 77.106030064568714 102.8924185559711 -3.3059710736378496 77.106029559030929 102.89238425046945 -3.3142568128342584 77.106029079975769 102.89235175734154 -3.3225425548049272 77.106028624935135 102.8923209062805 -3.3308282991348999 77.106028191749218 102.89229154844396 -3.3391140454845107 77.106027778566599 102.89226355645395 -3.3473997935893824 77.106027002775633 102.89221101699663 -3.3636855692841654 77.10602663884606 102.89218637922149 -3.3716855967456638 77.106026290698466 102.89216281779171 -3.3796856254653203 77.106025957104904 102.89214024835802 -3.3876856552875312 77.106025636966351 102.89211859550144 -3.3956856860806979 77.106025329312686 102.89209779273362 -3.4036857177372264 77.106024726725806 102.89205705791885 -3.4199714938291019 77.106024432640453 102.89203718351425 -3.4282572383154775 77.106024150108396 102.89201809504193 -3.4365429835367918 77.106023878290088 102.89199973504898 -3.4448287294099131 77.106023616444844 102.89198205287026 -3.453114475864449 77.106023363930817 102.89196500462845 -3.4614002228427374 77.106022876430771 102.89193209857 -3.4779717154133776 77.106022641417553 102.89191623888794 -3.4862574610020904 77.106022414569267 102.89190093350138 -3.4945432070168718 77.106022195350064 102.89188614583885 -3.5028289534147876 77.106021983284137 102.89187184344442 -3.5111147001591019 77.106021777955888 102.8918579979774 -3.5194004472192666 77.106021380031493 102.8918311702658 -3.5359719405725749 77.106021187438955 102.89181818825054 -3.5442576868646158 77.106021000822992 102.89180561130263 -3.5525434334196104 77.106020819821126 102.89179341474603 -3.5608291802136294 77.106020644117734 102.8917815770928 -3.5691149272262508 77.106020473444005 102.89177008004306 -3.5774006744405598 77.106020141652721 102.89174773292702 -3.5939721684254629 77.10601998053194 102.89173688263462 -3.6022579151953815 77.106019823921784 102.89172633764598 -3.6105436621364198 77.106019671564937 102.89171608047643 -3.6188294092342512 77.10601952324059 102.89170609611854 -3.6271151564767132 77.106019378764401 102.89169637204192 -3.635400903853808 77.10601909718568 102.89167742252519 -3.651972398343017 77.106018960040032 102.89166819417603 -3.6602581454534833 77.106018826381742 102.89165920160498 -3.668543892680141 77.106018696044586 102.8916504335261 -3.6768296400146636 77.10601856886602 102.89164187890869 -3.6851153874493576 77.106018444687024 102.8916335269772 -3.693401134977162 77.106018202095839 102.89161721271228 -3.7099726298691675 77.106018083657361 102.89160924860791 -3.7182583772323823 77.106017967955253 102.89160146933467 -3.7265441246769271 77.106017854892201 102.89159386828422 -3.7348298721982252 77.106017744355285 102.89158643780313 -3.7431156197914897 77.106017636216038 102.89157916919314 -3.7514013674517246 77.106017428149968 102.89156518527186 -3.7676871472404918 77.106017328090985 102.89155846103219 -3.7756871793654128 77.106017230078905 102.89155187494433 -3.7836872115453835 77.106017134040485 102.89154542204331 -3.7916872437774578 77.106017039903662 102.89153909744671 -3.7996872760588416 77.106016947597524 102.89153289635456 -3.8076873083868961 77.106016763221092 102.89152051099805 -3.8239730884152041 77.106016671317803 102.89151433798722 -3.8322588361196459 77.106016581227578 102.89150828726007 -3.840544583868776 77.106016492858416 102.89150235260082 -3.8488303316595802 77.106016406141208 102.89149652933497 -3.8571160794897139 77.106016321029756 102.89149081432927 -3.865401827357505 77.106016156816821 102.89147978868387 -3.881687607612764 77.106016077595015 102.8914744699355 -3.8896876399973785 77.106015999767052 102.89146924513811 -3.8976876724137162 77.106015923274711 102.89146411036022 -3.9056877048599938 77.106015848069845 102.89145906234752 -3.9136877373347212 77.10601577411434 102.89145409852287 -3.9216877698366912 77.106015626041795 102.89144416066732 -3.937973550259986 77.106015551996279 102.89143919145798 -3.9462592981828175 77.106015479201275 102.89143430649631 -3.9545450461321905 77.106015407615573 102.89142950299741 -3.9628307941068721 77.106015337199082 102.89142477825338 -3.9711165421057002 77.106015267912881 102.89142012963326 -3.9794022901275823 77.10601513151434 102.89141097879313 -3.9959737861550613 77.106015064408084 102.89140647698041 -4.004259534160747 77.106014998354098 102.89140204602668 -4.0125452821873759 77.106014933314029 102.891397683343 -4.0208310302339347 77.106014869257393 102.89139338686979 -4.0291167782995929 77.106014806161539 102.89138915507705 -4.0374025263836995 77.106014681829294 102.89138081666033 -4.0539740225426897 77.106014620591722 102.8913767099579 -4.0622597706175423 77.106014560254621 102.89137266386521 -4.0705455187093031 77.106014500782067 102.89136867596115 -4.0788312668171169 77.10601444214663 102.89136474439499 -4.0871170149403087 77.106014384329356 102.89136086788642 -4.0954027630783738 77.106014270285499 102.89135322190342 -4.111974259349763 77.106014214057524 102.89134945233663 -4.1202600074830595 77.106014158602576 102.891345734783 -4.1285457556301299 77.10601410389215 102.89134206731974 -4.1368315037903329 77.106014049902441 102.89133844834352 -4.1451172519631223 77.106013996614436 102.89133487657047 -4.1534030001480575 77.106013891414847 102.89132782561344 -4.169974496516252 77.106013839495276 102.89132434588964 -4.1782602446993504 77.106013788241896 102.89132091097666 -4.1865459928937696 77.106013737638705 102.89131751979269 -4.194831741099148 77.106013687666774 102.89131417106228 -4.2031174893150682 77.106013638304276 102.89131086331618 -4.2114032375410781 77.106013542440095 102.89130443979924 -4.2276890185376148 77.10601349590776 102.8913013219664 -4.2356890513076566 77.106013449912666 102.89129824025778 -4.2436890840864505 77.106013404440347 102.89129519370054 -4.2516891168736883 77.106013359478794 102.8912921814843 -4.2596891496691116 77.106013315018387 102.89128920296091 -4.2676891824725107 77.106013225512385 102.89128320694257 -4.2839749635376956 77.106013180493406 102.89128019123768 -4.2922607117998899 77.106013135981826 102.89127720964413 -4.3005464600700423 77.106013091965067 102.89127426131016 -4.3088322083478934 77.106013048430924 102.89127134541833 -4.3171179566332034 77.106013005367814 102.89126846118533 -4.3254037049257397 77.106012920165639 102.89126275482182 -4.3419752015132156 77.106012878025282 102.89125993260654 -4.3502609498081304 77.106012836330038 102.89125714030567 -4.3585466981097776 77.106012795068779 102.89125437717061 -4.366832446417952 77.106012754232779 102.89125164261434 -4.3751181947324804 77.106012713815758 102.89124893621177 -4.3834039430532243 77.106012633787842 102.89124357757284 -4.3999754396974771 77.106012594183852 102.89124092579968 -4.4082611880211191 77.106012554980381 102.89123830093925 -4.4165469363506284 77.106012516161016 102.89123570188409 -4.4248326846857209 77.106012477714174 102.8912331278601 -4.4331184330261904 77.106012439633346 102.89123057842642 -4.4414041813719232 77.106012364203437 102.89122552871608 -4.4579756780667479 77.106012326851996 102.89122302828154 -4.4662614264157812 77.1060122898499 102.89122055131654 -4.4745471747697811 77.106012253188013 102.89121809720503 -4.4828329231285924 77.106012216860748 102.89121566557048 -4.4911186714921092 77.10601218086606 102.89121325627589 -4.4994044198602774 77.106012109521416 102.89120848099041 -4.5159759165999747 77.106012074175396 102.89120611526467 -4.5242616649715632 77.106012039145412 102.89120377076561 -4.5325474133475261 77.106012004417011 102.89120144652256 -4.5408331617276385 77.106011969983314 102.89119914207477 -4.549118910111785 77.106011935845146 102.89119685747164 -4.5574046584999595 77.106011868163662 102.89119232820983 -4.573976155279956 77.10601183460723 102.89119008267531 -4.5822619036715988 77.106011801332642 102.89118785606652 -4.5905476520670447 77.106011768332863 102.89118564791212 -4.5988334004661828 77.106011735602834 102.8911834578718 -4.6071191488689278 77.106011703139458 102.89118128573632 -4.6154048972752202 77.106011639582647 102.89117703324771 -4.6317557786133028 77.106011608484877 102.89117495260398 -4.6398209115450459 77.10601157763098 102.89117288833313 -4.6478860444800052 77.106011547008961 102.89117083963053 -4.6559511774180082 77.106011516612156 102.89116880605022 -4.6640163103589511 77.106011486439257 102.8911667875047 -4.6720814433028099 77.106011425440244 102.89116270682494 -4.6885104446532688 77.106011394625668 102.89116064546212 -4.6968743130600235 77.106011364045983 102.89115859986829 -4.7052381814698139 77.106011333696387 102.89115656972392 -4.7136020498825557 77.106011303572018 102.89115455469803 -4.7219659182981797 77.106011273667747 102.89115255444851 -4.7303297867166139 77.106011215303155 102.89114865063246 -4.7467718080931673 77.106011186829051 102.89114674614233 -4.7548499610511064 77.106011158552562 102.89114485491856 -4.7629281140115483 77.106011130470307 102.89114297673154 -4.7710062669744406 77.106011102578904 102.89114111135511 -4.7790844199397311 77.106011074875028 102.89113925856633 -4.7871625729073717 77.106011018862503 102.89113551263088 -4.8036045943091574 77.106010990567498 102.89113362040477 -4.8119684627434713 77.106010962465547 102.8911317411347 -4.8203323311801887 77.106010934552373 102.89112987453616 -4.8286961996192455 77.106010906824494 102.89112802037299 -4.8370600680605946 77.106010879279111 102.89112617845707 -4.84542393650419 77.106010824591706 102.89112252168802 -4.8621386533971966 77.106010797449244 102.89112070680328 -4.8704895018466088 77.106010770481745 102.89111890366333 -4.8788403502981623 77.106010743685331 102.89111711200283 -4.8871911987517986 77.106010717056961 102.89111533162239 -4.895542047207476 77.106010690594687 102.89111356238818 -4.903892895665166 77.106010637959315 102.89111004333481 -4.9206076125803282 77.106010611788321 102.89110829365559 -4.9289714810378058 77.106010585777781 102.89110655474342 -4.9373353494972161 77.106010559922851 102.89110482627488 -4.9456992179584987 77.106010534220601 102.8911031080542 -4.9540630864216144 77.106010508670039 102.89110140001318 -4.962426954886543 77.106010458741792 102.89109806240731 -4.9788689763540903 77.106010434350409 102.89109643192862 -4.9869471293565608 77.106010410097369 102.89109481073027 -4.9950252823606744 77.106010385981008 102.89109319870464 -5.0031034353664046 77.106010361998798 102.89109159568112 -5.0111815883737165 77.106010338147286 102.89109000142629 -5.0192597413825677 77.10601028985765 102.89108677377406 -5.0357017628677534 77.106010265427955 102.89108514094309 -5.0440656313441892 77.106010241134115 102.89108351722651 -5.0524294998222166 77.106010216975662 102.89108190259574 -5.0607933683018249 77.106010192950663 102.89108029691829 -5.0691572367829867 77.106010169055594 102.89107869995735 -5.0775211052656593 77.106010121552131 102.89107552525977 -5.094235822236203 77.106010097943525 102.89107394750856 -5.102586670724067 77.106010074460087 102.8910723781582 -5.1109375192133788 77.106010051101109 102.89107081715609 -5.1192883677041277 77.1060100278644 102.89106926435731 -5.127639216196286 77.106010004746409 102.89106771952471 -5.1359900646898078 77.106009959489327 102.89106469532946 -5.1524190662102791 77.106009937345121 102.89106321562745 -5.1604972192371692 77.106009915307482 102.89106174307533 -5.1685753722652761 77.106009893374775 102.8910602775624 -5.1766535252945829 77.106009871545879 102.8910588190143 -5.1847316783250745 77.106009849820239 102.89105736739316 -5.1928098313567395 77.106009805810672 102.89105442690466 -5.2092518528881389 77.106009783535839 102.89105293864843 -5.2176157213879799 77.106009761367218 102.89105145751658 -5.2259795898890227 77.106009739300845 102.8910499832447 -5.2343434583912209 77.10600971733497 102.89104851571615 -5.2427073268945525 77.106009695470092 102.891047054962 -5.2510711953990183 77.106009651947616 102.89104414736055 -5.2677989324100158 77.106009630287517 102.89104270034547 -5.2761628009165262 77.106009608726509 102.8910412599766 -5.2845266694241451 77.106009587262719 102.89103982612876 -5.2928905379328484 77.106009565894439 102.89103839869121 -5.3012544064426157 77.106009544620306 102.89103697756764 -5.3096182749534302 77.106009502290831 102.89103414998692 -5.3263329919798155 77.106009481233983 102.89103274343164 -5.3346838404953685 77.106009460268709 102.89103134301952 -5.3430346890119385 77.106009439394484 102.8910299487134 -5.3513855375295138 77.106009418610014 102.89102856042943 -5.3597363860480787 77.106009397913368 102.89102717803721 -5.3680872345676107 77.106009356658348 102.89102442253564 -5.3848019516055929 77.106009336101621 102.89102304953862 -5.3931658201240538 77.106009315629905 102.89102168224453 -5.401529688643449 77.106009295241719 102.89102032055419 -5.4098935571637625 77.106009274935971 102.89101896439323 -5.4182574256849794 77.106009254711907 102.89101761371192 -5.4266212942070906 77.106009214426393 102.89101492325912 -5.4433490312530273 77.106009194366393 102.89101358358445 -5.451712899776874 77.106009174385449 102.89101224921048 -5.4600767683015832 77.106009154481043 102.89101091997392 -5.4684406368271228 77.106009134652098 102.89100959579912 -5.4768045053534804 77.106009114898811 102.8910082766982 -5.4851683738806596 77.106009075546467 102.89100564884363 -5.5018961109366762 77.10600905594525 102.89100433994462 -5.5102599794654896 77.106009036418328 102.89100303603098 -5.5186238479951077 77.10600901696489 102.89100173704375 -5.5269877165255172 77.106008997583757 102.89100044290805 -5.5353515850567048 77.106008978273593 102.89099915353293 -5.5437154535886561 77.10600894113648 102.8909966738638 -5.5598587397224382 77.106008923301573 102.89099548303345 -5.5676381573241827 77.106008905525968 102.8909942961825 -5.5754175749265622 77.106008887808386 102.89099311322478 -5.5831969925295653 77.106008870148358 102.89099193412578 -5.590976410133182 77.106008852546097 102.8909907589027 -5.5987558277374152 77.106008816141198 102.89098832835084 -5.6148991138791038 77.106008797347613 102.89098707362984 -5.6232629824166569 77.106008778618929 102.89098582326359 -5.6316268509549037 77.106008759953212 102.89098457712007 -5.6399907194938166 77.106008741349456 102.89098333513301 -5.648354588033385 77.10600872280763 102.89098209730221 -5.6567184565736115 77.106008686481118 102.89097967222551 -5.6731604781879685 77.106008668691246 102.89097848463167 -5.6812386312620431 77.106008650958216 102.89097730085145 -5.6893167843367198 77.106008633281249 102.8909761208307 -5.6973949374119863 77.10600861565959 102.8909749445216 -5.7054730904878346 77.106008598092629 102.89097377188254 -5.713551243564261 77.106008562475921 102.89097139441201 -5.7299802451887922 77.106008544430566 102.89097018987847 -5.7383310937369369 77.106008526441812 102.89096898913976 -5.746681942285675 77.106008508508339 102.89096779210921 -5.7550327908349956 77.106008490629591 102.89096659875152 -5.7633836393848927 77.106008472805826 102.89096540908295 -5.7717344879353663 77.106008437242622 102.89096303541041 -5.78844920503479 77.10600841950307 102.89096185139941 -5.7968130735837402 77.106008401817462 102.89096067100809 -5.8051769421332535 77.106008384184406 102.89095949414207 -5.8135408106833184 77.106008366603007 102.89095832074263 -5.8219046792339242 77.106008349072937 102.89095715078676 -5.8302685477850629 77.106008314115826 102.89095481778729 -5.8469962848885331 77.106008296687577 102.89095365466225 -5.8553601534408539 77.106008279310046 102.89095249493963 -5.8637240219937024 77.106008261983135 102.89095133861419 -5.8720878905470766 77.106008244706317 102.89095018564782 -5.8804517591009695 77.106008227478497 102.89094903596938 -5.8888156276553705 77.106008193117731 102.89094674298039 -5.9055433647652817 77.106008175986275 102.8909455997681 -5.9139072333208063 77.106008158902085 102.89094445972553 -5.922271101876821 77.106008141864052 102.89094332278226 -5.9306349704333119 77.106008124871778 102.89094218890979 -5.9389988389902753 77.106008107925504 102.89094105812153 -5.9473627075477129 77.106008074126521 102.89093880282439 -5.9640904446636904 77.106008057272646 102.89093767823725 -5.972454313222217 77.10600804046426 102.89093655670023 -5.9808181817812107 77.106008023700824 102.89093543818079 -5.9891820503406681 77.106008006981554 102.89093432262499 -5.9975459189005802 77.106007990305315 102.89093320995754 -6.0059097874609355 77.106007957062005 102.89093099193394 -6.0226245045854103 77.106007940493583 102.89092988649197 -6.0309753531495165 77.106007923967383 102.89092878388315 -6.0393262017140561 77.106007907484283 102.89092768416401 -6.0476770502790389 77.10600789104403 102.89092658732054 -6.0560278988444605 77.106007874645371 102.89092549326809 -6.0643787474103084 77.106007841901075 102.89092330873306 -6.0810934645401726 77.106007825558464 102.89092221845169 -6.0894573331042228 77.106007809255544 102.89092113083457 -6.0978212016686779 77.106007792990823 102.89092004578065 -6.1061850702335221 77.10600777676386 102.89091896326052 -6.1145489387987508 77.106007760575267 102.89091788331632 -6.1229128073643713 77.106007728278243 102.89091572880723 -6.1396405444965731 77.106007712169031 102.890914654189 -6.1480044130631439 77.106007696097649 102.89091358210833 -6.156368281630102 77.106007680063072 102.89091251250014 -6.1647321501974313 77.10600766406489 102.89091144533302 -6.1730960187651318 77.106007648103088 102.89091038060921 -6.1814598873332018 77.106007616253393 102.89090825612013 -6.1981876244702345 77.106007600365885 102.89090719638206 -6.2065514930392016 77.106007584513947 102.89090613903136 -6.2149153616085302 77.10600756869654 102.89090508399704 -6.2232792301782078 77.106007552913297 102.89090403125651 -6.231643098748231 77.106007537164601 102.89090298083543 -6.240006967318604 77.106007505738532 102.89090088478005 -6.2567347044602126 77.106007490059696 102.89089983904714 -6.2650985730314357 77.106007474415122 102.89089879561425 -6.2734624416030034 77.106007458804612 102.89089775446828 -6.2818263101749148 77.106007443227696 102.89089671557744 -6.2901901787471628 77.106007427683636 102.89089567889148 -6.2985540473197448 77.106007396683339 102.89089361140236 -6.3152687644684509 77.106007381226604 102.8908925805684 -6.3236196130445697 77.106007365802199 102.89089155190628 -6.3319704616210135 77.106007350410536 102.89089052543868 -6.340321310197786 77.106007335051231 102.89088950114413 -6.3486721587748844 77.106007319723304 102.89088847895729 -6.3570230073522982 77.106007289103133 102.8908864369896 -6.3737377245051094 77.106007273813049 102.89088541735187 -6.3821015930805292 77.106007258553078 102.89088439973798 -6.3904654616562508 77.10600724332231 102.89088338408372 -6.3988293302322656 77.106007228120546 102.89088237037787 -6.40719319880857 77.106007212948427 102.89088135866243 -6.415557067385171 77.106007182666374 102.89087933940262 -6.4322848045391421 77.106007167555092 102.89087833177288 -6.4406486731164971 77.106007152473083 102.89087732610585 -6.4490125416941444 77.106007137419837 102.89087632236962 -6.4573764102720812 77.106007122394914 102.89087532053762 -6.4657402788502969 77.106007107398071 102.89087432058884 -6.4741041474287941 77.106007077459978 102.89087232442623 -6.4908318845864841 77.106007062519524 102.89087132826376 -6.4991957531656839 77.10600704760634 102.89087033393356 -6.5075596217451572 77.106007032719717 102.89086934138784 -6.5159234903248935 77.106007017859525 102.89086835061731 -6.5242873589048935 77.106007003026235 102.89086736165142 -6.5326512274851583 77.106006973415433 102.89086538746521 -6.5493789646463849 77.106006958637593 102.89086440222357 -6.5577428332273398 77.106006943886243 102.8908634187629 -6.5661067018085593 77.106006929160699 102.89086243703312 -6.5744705703900355 77.106006914460494 102.8908614570049 -6.5828344389717603 77.106006899785484 102.89086047866934 -6.5911983075537375 77.106006870508992 102.89085852692752 -6.607913024721074 77.106006855906529 102.89085755345192 -6.6162638733064218 77.106006841329219 102.8908565816693 -6.6246147218920202 77.106006826777474 102.89085561160053 -6.6329655704778707 77.10600681225101 102.89085464322956 -6.6413164190639709 77.106006797749018 102.8908536765034 -6.6496672676503126 77.106006769264127 102.89085177767841 -6.6660962693518702 77.106006755279807 102.89085084548378 -6.6741744224670692 77.106006741317756 102.89084991478617 -6.6822525755824893 77.106006727378229 102.8908489856011 -6.6903307286981306 77.106006713461127 102.89084805792194 -6.6984088818139957 77.106006699565995 102.89084713171987 -6.7064870349300758 77.106006671327478 102.89084524945942 -6.7229290566318074 77.106006656986594 102.89084429356782 -6.7312929252174882 77.106006642668419 102.89084333920245 -6.7396567938033929 77.106006628372398 102.89084238632338 -6.7480206623895134 77.106006614098291 102.89084143491716 -6.7563845309758497 77.106006599846268 102.8908404849968 -6.7647483995624018 77.106006571895861 102.89083862208118 -6.7811774012697361 77.106006558194764 102.89083770890161 -6.7892425343904952 77.106006544514415 102.89083679711734 -6.7973076675114568 77.106006530855055 102.8908358867434 -6.8053728006326226 77.106006517216329 102.89083497775586 -6.8134379337539865 77.106006503597314 102.89083407009176 -6.8215030668755476 77.106006475891803 102.89083222363146 -6.8379320685855447 77.106006461806274 102.89083128489847 -6.8462959371739851 77.106006447741919 102.89083034758866 -6.8546598057626351 77.106006433699704 102.89082941176673 -6.863023674351501 77.106006419679517 102.89082847742358 -6.8713875429405817 77.106006405680091 102.89082754447622 -6.8797514115298668 77.106006377718103 102.89082568105952 -6.8964791487089254 77.106006363756478 102.89082475065415 -6.9048430172987025 77.106006349814805 102.89082382158884 -6.9132068858886742 77.106006335893298 102.89082289387936 -6.9215707544788456 77.106006321991885 102.89082196752008 -6.9299346230692134 77.106006308110153 102.89082104248389 -6.9382984916597765 77.106006280384591 102.89081919496068 -6.9550262288413887 77.106006266540362 102.89081827244559 -6.9633900974324403 77.106006252715517 102.89081735123412 -6.9717539660236794 77.106006238910382 102.89081643134674 -6.9801178346151129 77.106006225124702 102.8908155127675 -6.9884817032067357 77.106006211357709 102.89081459544374 -6.9968455717985378 77.106006183858398 102.89081276312891 -7.0135733089826067 77.106006170126619 102.89081184817461 -7.0219371775748716 77.106006156413059 102.89081093444513 -7.030301046167315 77.10600614271786 102.89081002194909 -7.0386649147599387 77.106006129040935 102.89080911068193 -7.0470287833527419 77.106006115382016 102.8908082006259 -7.0553926519457173 77.106006088120509 102.89080638428955 -7.0721073691348453 77.106006074518433 102.89080547804245 -7.080458217731004 77.106006060933595 102.89080457295356 -7.0888090663273298 77.106006047365511 102.89080366899263 -7.0971599149238198 77.106006033814111 102.89080276615482 -7.1055107635204688 77.106006020279693 102.89080186446047 -7.113861612117284 77.106005993225224 102.89080006204597 -7.1305763293086528 77.106005979706055 102.8907991613866 -7.1389401979032154 77.106005966203412 102.89079826184089 -7.1473040664979397 77.106005952716245 102.89079736333426 -7.1556679350928132 77.106005939244298 102.89079646585388 -7.1640318036878314 77.106005925788367 102.89079556944843 -7.1723956722830069 77.106005899370743 102.89079380958962 -7.1888376940044401 77.106005886405896 102.89079294591916 -7.196915847130664 77.106005873456553 102.89079208329531 -7.2049940002570407 77.10600586052324 102.8907912217467 -7.2130721533835711 77.106005847605587 102.89079036125223 -7.2211503065102525 77.106005834702529 102.89078950174101 -7.2292284596370759 77.106005808942868 102.89078778582784 -7.2453717458937836 77.106005796086563 102.89078692944766 -7.253436879023675 77.106005783244441 102.89078607402367 -7.2615020121537031 77.106005770417127 102.89078521959557 -7.2695671452838742 77.106005757604748 102.89078436617066 -7.27763227841419 77.106005744806907 102.89078351372406 -7.2856974115446462 77.106005718765047 102.8907817791323 -7.3021264132726458 77.106005705522989 102.89078089711681 -7.3104902818702096 77.106005692295795 102.8907800161019 -7.3188541504679163 77.106005679082983 102.89077913605634 -7.3272180190657616 77.106005665884396 102.89077825696792 -7.3355818876637437 77.106005652700119 102.89077737884354 -7.3439457562618644 77.106005626361039 102.89077562457429 -7.3606734934585019 77.106005613206577 102.89077474845634 -7.3690373620570044 77.106005600066027 102.89077387327339 -7.3774012306556429 77.10600558693875 102.89077299898511 -7.3857650992544155 77.10600557382476 102.89077212559222 -7.3941289678533249 77.106005560724711 102.89077125313661 -7.4024928364523648 77.10600553455491 102.8907695102661 -7.4192205736508212 77.106005521484661 102.89076863981533 -7.4275844422502439 77.10600550842824 102.89076777029723 -7.4359483108497999 77.106005495385176 102.89076690167735 -7.4443121794494846 77.106005482355201 102.89076603393885 -7.4526760480492964 77.106005469338328 102.89076516708228 -7.4610399166492334 77.106005443795695 102.89076346609882 -7.477468918382641 77.106005431268485 102.8907626318702 -7.4855340515160913 77.106005418753597 102.89076179847167 -7.4935991846496588 77.106005406251228 102.89076096591683 -7.5016643177833497 77.106005393761322 102.89076013420117 -7.5097294509171633 77.106005381283566 102.89075930330213 -7.5177945840510949 77.106005355889309 102.89075761230741 -7.534223585786104 77.106005342973859 102.89075675228386 -7.5425874543872045 77.106005330071156 102.8907558931177 -7.5509513229884266 77.106005317181214 102.89075503481095 -7.5593151915897705 77.106005304303935 102.89075417735789 -7.5676790601912343 77.106005291439146 102.89075332074528 -7.5760429287928188 77.106005265733884 102.89075160915901 -7.5927706659963121 77.106005252893155 102.8907507541668 -7.6011345345982253 77.106005240064846 102.89074990001272 -7.6094984032002548 77.10600522724917 102.89074904671021 -7.6178622718024043 77.106005214446014 102.890748194249 -7.6262261404046727 77.106005201654838 102.89074734259518 -7.6345900090070558 77.106005176531283 102.89074566985434 -7.6510320307425124 77.106005164197882 102.89074484869755 -7.6591101838755762 77.106005151875578 102.89074402829051 -7.6671883370087448 77.106005139564914 102.89074320866652 -7.6752664901420244 77.106005127265831 102.89074238982234 -7.6833446432754142 77.106005114977734 102.89074157171815 -7.6914227964089079 77.106005090006732 102.89073990924214 -7.7078517981485133 77.106005077325918 102.89073906501241 -7.7162026467546454 77.106005064656088 102.89073822152109 -7.7245534953608823 77.106005051996718 102.8907373787362 -7.7329043439672178 77.106005039347878 102.89073653666109 -7.7412551925736519 77.106005026710122 102.89073569533421 -7.7496060411801935 77.106005001439371 102.89073401301367 -7.7663207583908971 77.106004988805822 102.8907331719856 -7.7746846269950476 77.1060049761833 102.890732331701 -7.7830484955993011 77.106004963571394 102.89073149213172 -7.7914123642036586 77.106004950969918 102.89073065326534 -7.7997762328081226 77.106004938378888 102.89072981510522 -7.8081401014126843 77.106004913218371 102.89072814023577 -7.8248678386220911 77.106004900648173 102.89072730348235 -7.8332317072269309 77.106004888088847 102.89072646745898 -7.8415955758318736 77.10600487554062 102.89072563218474 -7.8499594444369238 77.106004863003349 102.89072479764899 -7.8583233130420806 77.106004850476438 102.8907239638114 -7.8666871816473378 77.106004825441232 102.89072229739266 -7.8834149188581035 77.106004812933293 102.89072146483645 -7.8917787874636192 77.106004800435272 102.8907206329494 -7.9001426560692272 77.106004787947342 102.89071980174337 -7.9085065246749338 77.106004775469628 102.89071897122628 -7.9168703932807398 77.106004763002161 102.89071814140195 -7.9252342618866418 77.106004744468791 102.89071690784689 -7.9376777527660538 77.106004738396535 102.89071650368636 -7.9417573750393817 77.106004732326369 102.89071609967043 -7.9458369973127949 77.106004726257453 102.8907156957379 -7.949916619586368 77.106004720189659 102.89071529188469 -7.9539962418600823 77.106004714123841 102.89071488816376 -7.958075864133817 77.106004708061633 102.89071448468518 -7.9621554864073625 + 0 8 0.013591237713536762 7 0.027182475427073523 7 0.040773713140610283 7 0.054364950854147047 6 0.066005665054375703 6 0.072601751205641343 6 0.083853756251872219 6 0.095105692787787813 6 0.10635760328198175 6 0.1172215057942492 6 0.12847339908647665 6 0.13972528920498234 6 0.15097717749500111 6 0.16222906467842749 6 0.17348095116046314 6 0.18473283717785458 6 0.19559672682737031 6 0.20684861232483265 6 0.2177125016252959 6 0.22896438686290821 6 0.240216272019116 6 0.25146815711547982 6 0.26272004216693129 6 0.2739719271839785 6 0.28483581614081843 6 0.29608770111184385 6 0.30733958606697032 6 0.31859147100996416 6 0.32984335594322245 6 0.34109524086904741 6 0.35234712578894645 6 0.36329941918332276 6 0.37465738950725469 6 0.38562736379655138 6 0.39698533411449011 6 0.40832562352810814 6 0.41968359384217646 6 0.43065356812389582 6 0.44201153843559504 6 0.45335182784430539 6 0.464321802123625 6 0.47567977243343101 6 0.48703774274289691 6 0.49837803214995224 6 0.50973600245902806 6 0.52109397276803149 6 0.53245194307701438 6 0.54301624042206142 6 0.55437421073113158 6 0.56534418500939787 6 0.57668447441650217 6 0.58804244472593259 6 0.59940041503553065 6 0.61075838534529636 6 0.62211635565524903 6 0.63345664506320865 6 0.64481461537355156 6 0.65617258568408987 6 0.66753055599483435 6 0.67888852630578267 6 0.69022881571474759 6 0.7015867860260947 6 0.71294475633764687 6 0.72430272664939566 6 0.73566069696133862 6 0.74700098637128731 6 0.7579709606526035 6 0.76932893096510324 6 0.78028122434456815 6 0.79163919465741128 6 0.80299716497043294 6 0.81435513528362702 6 0.82571310559699118 6 0.83705339500832043 6 0.84841136532199735 6 0.85938133960476515 6 0.87033363298547151 6 0.88169160329958296 6 0.8930495736138464 6 0.90440754392826184 6 0.91535983730953341 6 0.92671780762421452 6 0.93807577793901742 6 0.94904575222284115 6 0.9603860416356752 6 0.97174401195082782 6 0.98310198226610224 6 0.99445995258148878 6 1 8 +2 71.226668546492832 102.97904932808113 -2.9621449455271698 -2.4073398923740714e-06 -0.00016075840718299259 -0.99999998707546967 -0.97596996526285595 0.21790508446752485 -3.2680583287319736e-05 0.2179050869048825 0.97596995257022923 -0.00015741994867668715 5 +7 0 0 7 32 6 67.217734245910663 99.990357450737619 -6.8730356288089283 67.438711025743785 99.693884698545361 -6.8729875384805448 67.685299549870791 99.416434196581335 -6.8729426314612052 67.955481058425832 99.160741067812452 -6.8729013514592507 68.246927016923919 98.929164123480518 -6.872864079692202 68.557059006564629 98.723751667505212 -6.872831145828374 68.883053765119044 98.546238135952265 -6.8728028274480035 69.428091059699042 98.307674932944082 -6.8727650326000527 69.639137439084948 98.228216844467923 -6.8727525167882799 69.854242046511686 98.159899005251646 -6.8727418383829235 70.072698827665491 98.102966300113877 -6.8727330358202874 70.293786630217468 98.057606671135346 -6.8727261381587477 70.516769690077609 98.023950989216516 -6.8727211650588833 70.964070146572155 97.9802882199142 -6.872715101433279 71.188386189193679 97.97018000698597 -6.8727139943156592 71.413105867230115 97.971820101777126 -6.8727148153724755 71.637491528701204 97.98522246006236 -6.8727175650810066 71.860808735012412 98.010343212363026 -6.8727222344408077 72.082326748037858 98.047080697845416 -6.8727288049804836 72.599555204221247 98.160909931582381 -6.8727487479919693 72.893134285733694 98.247799136186444 -6.8727637223949927 73.180203160127078 98.355540377471428 -6.8727821013571582 73.458996827507931 98.483531868347072 -6.87280378182614 73.727828308597353 98.630999251615648 -6.8728286326329897 73.985090367133566 98.79699623113892 -6.8728564945999278 74.632990104104891 99.283582042526533 -6.8729379052896444 75.001193446210962 99.634500389964685 -6.8729963741324314 75.326727825293702 100.02788857031722 -6.8730617048773368 75.603959577789013 100.45742174202161 -6.8731328461635597 75.828358792078788 100.9160784546884 -6.8732086350704122 75.996487517803374 101.39612269040117 -6.8732877941425761 76.106508956768167 101.88889511733419 -6.8733688983981871 + 0 8 0.22692526494317439 6 0.36512627288818755 6 0.50273755083569294 6 0.69014445328972962 6 1 8 +7 0 0 6 17 4 66.346809304123553 104.06794596093725 -6.8737023737377418 66.324673087567433 103.96880058292631 -6.8736860556329908 66.304954101831484 103.8691154621139 -6.8736696549271228 66.287668816089891 103.76896437043176 -6.8736531837620758 66.272830671409295 103.66842157691055 -6.873636654353902 66.260450080748782 103.56756184767995 -6.8736200789927571 66.227990334082392 103.23659763503584 -6.8735657081539827 66.218187844490714 103.00548194009669 -6.8735277720423476 66.221213844340454 102.77400315353829 -6.873489807882244 66.237073168214508 102.54304847256988 -6.8734519612206668 66.265688647165902 102.31350172952011 -6.8734143768511933 66.375466593379684 101.7081505989172 -6.873315345206314 66.478907823187399 101.33634164080979 -6.8732546080650261 66.616492898722882 100.97492791900363 -6.8731956600232271 66.786846599135572 100.62775422437829 -6.8731391283991092 66.988096673670938 100.29844992588401 -6.8730856039523189 67.217734245910663 99.990357450737619 -6.8730356288089283 + 0 7 0.14172007033903283 5 0.46393294951118735 5 1 7 +2 71.226668546492832 102.97904932808113 -2.9621449455271698 -2.4073398923740714e-06 -0.00016075840718299259 -0.99999998707546967 -0.97596996526285595 0.21790508446752485 -3.2680583287319736e-05 0.2179050869048825 0.97596995257022923 -0.00015741994867668715 5 +7 0 0 6 52 11 76.106508956768167 101.88889511733419 -6.8733688983981862 76.129018502176095 101.98971258913049 -6.8733854917089232 76.149028600197724 102.09108818691948 -6.8734021704343817 76.166521929132443 102.19294431819294 -6.8734189218037978 76.181484407851073 102.29520287436583 -6.8734357329697167 76.193905195795836 102.39778523077597 -6.8734525910079789 76.242115251433006 102.89996803701446 -6.8735350870968519 76.242006228015541 103.30306629528985 -6.8736012107420894 76.202976770816619 103.70516648906181 -6.8736670750587781 76.125382617503917 104.10163494880661 -6.8737319208173693 76.010207738714428 104.48792949789359 -6.873795005339967 75.789784362872908 105.03073323880535 -6.8738835049644083 75.712724002528489 105.19874665966172 -6.8739108764539951 75.628252235019247 105.36325972061651 -6.8739376555414715 75.536570118554963 105.52386615102641 -6.8739637760764261 75.437908188273454 105.68017563879344 -6.8739891745986776 75.273607138871455 105.91659530588363 -6.8740275530896291 75.212587012570694 105.999916895632 -6.8740410712019147 75.149511372976193 106.08171342676343 -6.8740543340955105 75.084428082967293 106.16192175686682 -6.8740673315301599 75.017387572664475 106.24048077396674 -6.8740800536049838 74.785187108588318 106.49930765435174 -6.8741219409642946 74.611251075366411 106.67170799550864 -6.8741497941086296 74.427343813410147 106.83374286900518 -6.8741759224159944 74.23424103328361 106.98470133864147 -6.8742002111704998 74.03278421701701 107.12395177944985 -6.8742225588279693 73.503593458888631 107.44564119437777 -6.8742740285591823 73.165760875404402 107.61154705026304 -6.8743004137465453 72.813685977034368 107.74663761043625 -6.8743217090318574 72.450879361477703 107.84948417982673 -6.8743376886767997 72.081007491254908 107.91912688475351 -6.8743482042310262 71.339690119156685 107.99081412317886 -6.8743581427244012 70.96825778234151 107.99373141174139 -6.8743577088619263 70.597333332226825 107.96358740198735 -6.8743518528983589 70.230554342035248 107.90060402365211 -6.8743406201744595 69.871499585756808 107.80547015726459 -6.8743241324847872 69.29384904745767 107.59621127541631 -6.8742883868458291 69.068912699394915 107.49947474442679 -6.8742719657141 68.84985335724204 107.38961638286293 -6.8742534065245593 68.637620107276504 107.26708907821605 -6.8742327858999017 68.433113245801252 107.13243638622968 -6.8742101952161221 68.128728567825803 106.90539551941744 -6.8741722039038988 68.022900587257112 106.82097708477998 -6.8741580960088067 67.919842700447148 106.73314366445766 -6.8741434347268688 67.819691871431417 106.6420094525551 -6.8741282391268426 67.722578680537467 106.54769588843304 -6.8741125294503078 67.311606731170585 106.12179497812049 -6.8740416554686377 67.030515343052016 105.75844951509757 -6.8739813620796824 66.790293959170583 105.36535987079331 -6.8739162898751358 66.594623883957297 104.94830099626897 -6.8738473952163313 66.446294276833925 104.51352685777991 -6.8737757108503237 66.346809304123553 104.06794596093725 -6.8737023737377418 + 0 7 0.039458558097596984 5 0.19270625779177178 5 0.2632430533740347 5 0.30268043749101903 5 0.39606507565524723 5 0.53923970690914458 5 0.68055522031377191 5 0.77392339104852115 5 0.8256062468689962 5 1 7 +7 0 0 5 24 8 -159.39770967199999 -75.948486682799995 -19.800000000000001 -158.91080579800001 -76.203018686600004 -19.800000000000001 -158.40102205100001 -76.469511284600003 -19.872563416399998 -157.87986915299999 -76.741947177200004 -20.031312315699999 -156.91322260000001 -77.247267625500001 -20.5139911602 -156.059961671 -77.693315039500007 -21.340288965300001 -155.70089604 -77.881018813099999 -21.803289800999998 -155.12574187999999 -78.181684197699994 -22.822275344099999 -154.823276983 -78.3397995885 -24.029460453999999 -154.752044506 -78.377036805100005 -24.638808640000001 -154.76959116800001 -78.367864179500003 -25.705627980900001 -155.029925413 -78.231772847299993 -26.7482376482 -155.18128320599999 -78.152649627000002 -27.171806371100001 -155.56200060099999 -77.953627260700003 -27.970281721399999 -156.09173439599999 -77.676705651399999 -28.6648394678 -156.38686816200001 -77.522422654899998 -28.9759688328 -157.030636808 -77.185888623899999 -29.518736252 -157.766688055 -76.801113294100006 -29.894861070899999 -158.149619333 -76.600933606500007 -30.03635323 -158.63338973200001 -76.348039646399997 -30.1511542364 -159.12395205499999 -76.091595165699999 -30.192349521899999 -159.21515221499999 -76.043919719499996 -30.1974496765 -159.30643074100001 -75.9962033069 -30.1999995852 -159.39770946799999 -75.948486789399993 -30.199999289200001 + 0 6 5.1153601208400001 3 9.6375519433200001 3 13.802367843800001 3 16.786785143399999 3 19.700015364599999 3 22.573574316999999 3 23.228410862099999 6 +7 0 0 5 21 7 -159.39770946799999 -75.948486789399993 -30.199999289200001 -159.70507512899999 -75.787809494200005 -30.1999982924 -160.012443064 -75.627131010100001 -30.171080738400001 -160.31682875499999 -75.468011512399997 -30.113248201499999 -161.00367384200001 -75.108959006700005 -29.915064023799999 -161.64430265799999 -74.774066341400001 -29.573687575600001 -161.98574503099999 -74.595575234500004 -29.337548896400001 -162.72867016699999 -74.207206536800001 -28.6898467165 -163.30286642999999 -73.907041898299994 -27.858164093799999 -163.56726275899999 -73.768827086800002 -27.3320559233 -163.98452965000001 -73.5506982454 -26.127169455600001 -164.06273480300001 -73.509816019499993 -24.861059568600002 -164.00583841700001 -73.539558955900006 -24.188176220500001 -163.702676306 -73.698038819399997 -22.867628481400001 -163.07721499799999 -74.025002576600002 -21.764170070999999 -162.68587300799999 -74.229579016000002 -21.2730470399 -161.81213132400001 -74.686332870800001 -20.466040368800002 -160.83619615200001 -75.196509002300004 -20.0077814337 -160.342657495 -75.454509379499996 -19.865377581499999 -159.859876525 -75.706886109300001 -19.800000000000001 -159.39770967199999 -75.948486682799995 -19.800000000000001 + 23.228410862099999 6 25.433462075800001 3 28.303717745299998 3 32.199539424599998 3 36.747675513399997 3 41.601373813000002 3 46.456849432200002 6 +7 0 0 5 24 8 -159.39770967199999 -75.948486682799995 -21 -159.17894248900001 -76.0628485772 -21 -158.95336943800001 -76.180768281400006 -21.019043175299998 -158.72263387999999 -76.301386717599996 -21.059496723500001 -158.175137237 -76.587593964500002 -21.209921262400002 -157.629866986 -76.872637351999998 -21.499567963099999 -157.325524355 -77.031734339500005 -21.715428411000001 -156.784918745 -77.314339257 -22.221263752999999 -156.35081590799999 -77.541269193000005 -22.898693812600001 -156.17752819 -77.6318564165 -23.253964055800001 -155.91996293599999 -77.766500241900005 -23.9955741978 -155.83039441599999 -77.813322737899995 -24.814968789400002 -155.83078334000001 -77.813119425899998 -25.2194897137 -155.92197246500001 -77.765449748199998 -26.0110734296 -156.18951383800001 -77.625590845100007 -26.7699705554 -156.36168524600001 -77.535587179199993 -27.123196527499999 -156.77851073900001 -77.317689081799998 -27.768657854499999 -157.330147471 -77.029317577399993 -28.285529303000001 -157.63000400300001 -76.872565725699999 -28.501728935700001 -158.15640564 -76.597386022699993 -28.783462710599999 -158.72216976199999 -76.301629337799994 -28.939106500600001 -158.94599382600001 -76.184623927700002 -28.979702514700001 -159.17185183300001 -76.0665552615 -29 -159.39770967199999 -75.948486682799995 -29 + 0 6 2.8064319633300001 3 6.5805609279499997 3 9.9503610182000006 3 13.0664469783 3 16.025128458899999 3 18.892408437899999 3 20.7135541454 6 +7 0 0 5 24 8 -159.39770967199999 -75.948486682799995 -29 -159.74727768 -75.765747850400004 -29 -160.09684528700001 -75.583009227600002 -28.951377727200001 -160.43886116600001 -75.404218317000002 -28.854120777999999 -161.04114568700001 -75.089370368499999 -28.590093526699999 -161.57140214200001 -74.812175535500003 -28.185352502699999 -161.795033101 -74.695271072500006 -27.973683716 -162.24479059999999 -74.460157565299994 -27.450999742 -162.57645771700001 -74.286776534400005 -26.835321731299999 -162.71959980299999 -74.211948125800006 -26.475525569999999 -162.927377893 -74.103330847500004 -25.7188645335 -162.96754979100001 -74.082330739900002 -24.946983916200001 -162.94534423900001 -74.093938828999995 -24.5592016425 -162.81860582600001 -74.160192116299996 -23.788497529299999 -162.54436856500001 -74.303551336500007 -23.098692291599999 -162.369872472 -74.394770245199993 -22.772695290800002 -161.95079446899999 -74.613845856300003 -22.1620840169 -161.44444740399999 -74.878541908200006 -21.701663087 -161.16602423699999 -75.024089336299994 -21.505189782799999 -160.63763863400001 -75.300306169300001 -21.218933957299999 -160.104848976 -75.578825249499999 -21.065249358199999 -159.86293840600001 -75.705285492300007 -21.020846147499999 -159.62659892100001 -75.828833415800005 -21 -159.39770967199999 -75.948486682799995 -21 + 20.7135541454 6 23.532204491000002 3 25.905413687100001 3 28.819581842000002 3 31.840213099900001 3 35.033308115899999 3 38.490769738700003 3 41.427051571900002 6 +7 1 0 5 6 2 -150.13222324099999 -58.224188073400001 -19.800000000000001 1 -131.698952687 -67.860293961699995 -19.800000000000001 0.20000000000000001 -140.915587964 -63.042241017499997 -40.600000000000001 0.20000000000000001 -159.34885851799999 -53.406135129200003 -40.600000000000001 0.20000000000000001 -168.56549379500001 -48.588082185099999 -19.800000000000001 0.20000000000000001 -150.13222324099999 -58.224188073400001 -19.800000000000001 1 + 0 6 32.672563597299998 6 +7 0 0 5 6 2 -159.39770967199999 -75.948486682799995 -30.199999999999999 -157.544612382 -72.403626960799997 -30.199999999999999 -155.69151509100001 -68.858767238799999 -30.199999999999999 -153.83841782799999 -65.313907516200004 -30.199999999999999 -151.985320535 -61.769047794800002 -30.199999999999999 -150.13222324099999 -58.224188073400001 -30.199999999999999 + 0 6 20 6 +7 0 0 5 6 2 -159.39770967199999 -75.948486682799995 -19.800000000000001 -157.544612379 -72.403626960799997 -19.800000000000001 -155.69151508600001 -68.858767238900001 -19.800000000000001 -153.838417827 -65.313907517299995 -19.800000000000001 -151.98532053400001 -61.769047795299997 -19.800000000000001 -150.13222324099999 -58.224188073400001 -19.800000000000001 + 0 6 20 6 +7 1 0 5 6 2 -150.13222324099999 -58.224188073400001 -19.800000000000001 1 -131.698952687 -67.860293961699995 -19.800000000000001 0.20000000000000001 -140.915587964 -63.042241017499997 -40.600000000000001 0.20000000000000001 -159.34885851799999 -53.406135129200003 -40.600000000000001 0.20000000000000001 -168.56549379500001 -48.588082185099999 -19.800000000000001 0.20000000000000001 -150.13222324099999 -58.224188073400001 -19.800000000000001 1 + 0 6 32.672563597299998 6 +7 0 0 3 4 2 -159.39770967199999 -75.948486682799995 -29 -156.309214188 -70.040387146100002 -29 -153.22071873100001 -64.132287609100004 -29 -150.13222324099999 -58.224188073400001 -29 + 0 4 20 4 +7 0 0 3 4 2 -159.39770967199999 -75.948486682799995 -21 -156.30921418400001 -70.040387146200004 -21 -153.220718729 -64.132287610000006 -21 -150.13222324099999 -58.224188073400001 -21 + 3.2354327524899999e-14 4 20 4 +7 0 0 5 15 5 -150.13222324099999 -58.224188073299999 -21 -149.777737269 -58.409497801800001 -21 -149.40109592300001 -58.6063893882 -21.050000000000001 -149.007770596 -58.812002628899997 -21.162287616 -148.21043329599999 -59.228815620600002 -21.541609984000001 -147.47738942800001 -59.6120188238 -22.263292415999999 -147.14773494299999 -59.784347739200001 -22.717759999999998 -146.62820030200001 -60.055937677499998 -23.81344 -146.51249608099999 -60.116422772999996 -25.175360000000001 -146.586251519 -60.077866663099996 -25.897508411099999 -147.04707776500001 -59.836966900500002 -27.308679254299999 -148.07317334199999 -59.300569108799998 -28.39862789 -148.71427935200001 -58.965426987500003 -28.800000000000001 -149.42325129700001 -58.594807530499999 -29 -150.13222324099999 -58.224188073400001 -29 + 0 6 4.0840704496700004 3 8.16814089933 3 12.252211349 3 16.3362817987 6 +7 0 0 5 15 5 -150.13222324099999 -58.224188073400001 -29 -150.84119518599999 -57.853568616399997 -29 -151.55016713000001 -57.482949159299999 -28.800000000000001 -152.19127313999999 -57.147807038000003 -28.39862789 -153.217368717 -56.611409246299999 -27.308679254299999 -153.67819496300001 -56.370509483699998 -25.897508411099999 -153.75195040099999 -56.331953373799998 -25.175360000000001 -153.63624618 -56.392438469399998 -23.81344 -153.11671153899999 -56.664028407499998 -22.717759999999998 -152.787057054 -56.836357323000001 -22.263292415999999 -152.05401318599999 -57.219560526199999 -21.541609984000001 -151.25667588600001 -57.636373517800003 -21.162287616 -150.863350559 -57.841986758499999 -21.050000000000001 -150.48670921300001 -58.038878344899999 -21 -150.13222324099999 -58.224188073299999 -21 + 16.3362817987 6 20.420352248299999 3 24.504422697999999 3 28.588493147699999 3 32.672563597299998 6 +7 0 0 5 6 2 -150.13222324099999 -58.224188073400001 -19.800000000000001 -147.975347951 -54.0982199655 -19.799999999800001 -145.81847494100001 -49.972250860199999 -17.9692792387 -144.12388079799999 -46.7306202165 -14.311436718 -143.27576329499999 -45.108207104900004 -9.6557194721900004 -143.27576328200001 -45.108207102400002 -5 + 0 6 31.4575637262 6 +7 1 0 5 6 2 -143.27576328200001 -45.108207102400002 -5 1 -124.842492728 -54.744312990700003 -5 0.20000000000000001 -124.423022117 -31.4929894928 -5 0.20000000000000001 -142.85629267100001 -21.856883604499998 -5 0.20000000000000001 -161.709033836 -35.4721012141 -5 0.20000000000000001 -143.27576328200001 -45.108207102400002 -5 1 + 0 6 32.672563597299998 6 +7 0 0 5 6 2 -150.13222324099999 -58.224188073400001 -30.199999999999999 -146.459705864 -51.198891023800002 -30.199999999799999 -142.787193973 -44.173593079200003 -27.082828370400001 -139.90181367599999 -38.654058023499999 -20.854608707899999 -138.45771034800001 -35.891571828399996 -12.9273061281 -138.457710338 -35.891571825500002 -5 + 0 6 31.4575637262 6 +7 1 0 5 6 2 -143.27576328200001 -45.108207102400002 -5 1 -124.842492728 -54.744312990700003 -5 0.20000000000000001 -124.423022117 -31.4929894928 -5 0.20000000000000001 -142.85629267100001 -21.856883604499998 -5 0.20000000000000001 -161.709033836 -35.4721012141 -5 0.20000000000000001 -143.27576328200001 -45.108207102400002 -5 1 + 0 6 32.672563597299998 6 +7 0 0 5 6 2 -139.01363952400001 -36.955029742100002 -4.9999999989099999 -139.013639533 -36.955029744699999 -12.5498152687 -140.38896555299999 -39.585949358400001 -20.0996106152 -143.136965323 -44.842683839099998 -26.031287373400001 -146.63458763700001 -51.533428965500001 -28.9999999998 -150.13222324099999 -58.224188073400001 -29 + -15.7287818631 6 15.7287818631 6 +7 0 0 5 6 2 -142.719834096 -44.044749185800001 -5.0000000020600002 -142.719834109 -44.044749188899999 -10.033209801 -143.636729073 -45.798728462500002 -15.0664351678 -145.46870375899999 -49.303160544999997 -19.020820218099999 -147.800466091 -53.763681856600002 -20.9999999998 -150.13222324099999 -58.224188073299999 -21 + -15.7287818631 6 15.7287818631 6 +7 0 0 5 15 5 -142.719834096 -44.044749185800001 -5 -142.36534812400001 -44.230058914499999 -5 -141.96554306300001 -44.3826397546 -5 -141.520197766 -44.488742033699999 -5 -140.547130154 -44.569393879700002 -5 -139.47974934699999 -44.313031336900004 -5 -138.939551701 -44.082604294100001 -5 -137.912416651 -43.383186257299997 -5 -137.16576986600001 -42.236717514600002 -5 -136.904972488 -41.558182700800003 -5 -136.71203951999999 -40.066682267099999 -5 -137.23318988099999 -38.5643557207 -5 -137.68835049899999 -37.873511642700002 -5 -138.30466757900001 -37.325649199300003 -5 -139.01363952400001 -36.955029742100002 -5 + 0 6 4.0840704496700004 3 8.16814089933 3 12.252211349 3 16.3362817987 6 +7 0 0 5 15 5 -139.01363952400001 -36.955029742100002 -5 -139.722611468 -36.584410284800001 -5 -140.52423827699999 -36.391033813699998 -5 -141.35128967899999 -36.4115936488 -5 -142.88233047 -36.8411246111 -5 -143.99691593099999 -37.850825518999997 -5 -144.40522418399999 -38.452248112900001 -5 -144.92046252700001 -39.719687046399997 -5 -144.908528295 -40.9622849597 -5 -144.78941697100001 -41.537369833600003 -5 -144.39071004300001 -42.560138783299998 -5 -143.76910305600001 -43.313112921299997 -5 -143.42779769800001 -43.618237123999997 -5 -143.07432006799999 -43.859439457199997 -5 -142.719834096 -44.044749185800001 -5 + 16.3362817987 6 20.420352248299999 3 24.504422697999999 3 28.588493147699999 3 32.672563597299998 6 +7 0 0 5 24 8 -143.27576328200001 -45.108207102400002 5 -142.78885940800001 -45.362739106100001 5 -142.24545889500001 -45.564924920999999 5 -141.65076170699999 -45.696675168900001 5 -140.46050244 -45.774238418700001 5 -139.22443895699999 -45.488008381299998 5 -138.65087692700001 -45.265393901300001 5 -137.60365293199999 -44.663019083899997 5 -136.74193017100001 -43.751309006600003 5 -136.38840232699999 -43.248532763599997 5 -135.911718982 -42.293928909900004 5 -135.68903893999999 -41.233861323699998 5 -135.644168221 -40.779365177300001 5 -135.65497248899999 -39.872722033800002 5 -135.86293551599999 -38.9802729795 5 -136.013931036 -38.550262494400002 5 -136.40624947399999 -37.732719872799997 5 -136.96805175 -37.014617112499998 5 -137.28543334400001 -36.689044960899999 5 -137.71601938500001 -36.334412634700001 5 -138.18749699099999 -36.041460276700001 5 -138.27633438000001 -35.989264997200003 5 -138.36643159900001 -35.939288817300003 5 -138.45771046300001 -35.891572562 5 + 0 6 5.1153601181199999 3 9.6375519396900007 3 13.802367841400001 3 16.786785141199999 3 19.7000153625 3 22.5735743149 3 23.2284108616 6 +7 0 0 5 6 2 -138.457710338 -35.891571825500002 -5 -138.457710338 -35.891571825500002 -2.99999999979 -138.457710338 -35.891571825500002 -0.99999999957399999 -138.457710338 -35.891571825500002 0.99999999564800002 -138.457710338 -35.891571825500002 2.9999999978199998 -138.457710338 -35.891571825500002 5 + 0 6 10 6 +7 0 0 5 6 2 -143.27576328200001 -45.108207102400002 -5 -143.27576328200001 -45.108207102400002 -2.99999999997 -143.27576328200001 -45.108207102400002 -0.99999999993800004 -143.27576328200001 -45.108207102400002 0.99999999542600004 -143.27576328200001 -45.108207102400002 2.9999999977099998 -143.27576328200001 -45.108207102400002 5 + 0 6 10 6 +7 0 0 5 21 7 -138.45771046300001 -35.891572562 5 -138.76507658599999 -35.730896150299998 5 -139.085841281 -35.595844834399998 5 -139.41701930100001 -35.487977394399998 5 -140.195678028 -35.304558665800002 5 -140.994457786 -35.2721989056 5 -141.445297146 -35.302977421900003 5 -142.48828606999999 -35.488612066199998 5 -143.447779535 -35.925496985000002 5 -143.95590827000001 -36.253527089599999 5 -144.931368123 -37.103186625500001 5 -145.596129475 -38.184349885400003 5 -145.850962665 -38.810412089000003 5 -146.159576413 -40.139181075899998 5 -146.04531905100001 -41.444046152200002 5 -145.88150175000001 -42.083863154500001 5 -145.38162553500001 -43.255798370599997 5 -144.617989959 -44.172090412700001 5 -144.19042335099999 -44.556291209999998 5 -143.73793013599999 -44.866606528799998 5 -143.27576328200001 -45.108207102400002 5 + 23.2284108616 6 25.433462073800001 3 28.303717743499998 3 32.199539421499999 3 36.747675514800001 3 41.601373814200002 3 46.456849435499997 6 +7 0 0 3 4 2 -139.01363952400001 -36.955029742100002 -5 -139.01363952400001 -36.955029742100002 -1.66666666631 -139.01363952400001 -36.955029742100002 1.66666666304 -139.01363952400001 -36.955029742100002 5 + 0 4 10 4 +7 0 0 3 4 2 -142.719834096 -44.044749185800001 -5 -142.719834096 -44.044749185800001 -1.6666666666200001 -142.719834096 -44.044749185800001 1.66666666286 -142.719834096 -44.044749185800001 5 + 0 4 10 4 +7 0 0 5 24 8 -139.01363952400001 -36.955029742100002 5 -138.66407151600001 -37.137768574399999 5 -138.33702936 -37.363596981199997 5 -138.04007012700001 -37.628578452600003 5 -137.56010265200001 -38.177411293299997 5 -137.21735232 -38.813293664699998 5 -137.091782075 -39.1177821665 5 -136.88417063899999 -39.816106015599999 5 -136.83773133599999 -40.5351100922 5 -136.86127357199999 -40.928795230200002 5 -137.00403711000001 -41.7079768165 5 -137.321457681 -42.413029051800002 5 -137.52331280300001 -42.745079403600002 5 -138.007098641 -43.361835608299998 5 -138.60090495599999 -43.829792088799998 5 -138.926427088 -44.027476589599999 5 -139.62838561500001 -44.349533806099998 5 -140.34803387400001 -44.492869656700002 5 -140.717478078 -44.521439804099998 5 -141.378478653 -44.498907157600001 5 -141.98246644 -44.356585663799997 5 -142.244947878 -44.269476209099999 5 -142.49094484700001 -44.164402452799997 5 -142.719834096 -44.044749185800001 5 + 20.713544667000001 6 23.532195011900001 3 25.9054042084 3 28.819572364300001 3 31.840203621699999 3 35.0332986377 3 38.4907602603 3 41.427042092999997 6 +7 0 0 5 24 8 -142.719834096 -44.044749185800001 5 -142.94872349600001 -43.925095840300003 5 -143.175405643 -43.7830736417 5 -143.39674428999999 -43.617263052399998 5 -143.85833745100001 -43.202545900399997 5 -144.25410727299999 -42.672644137399999 5 -144.44150811899999 -42.352981824499999 5 -144.73455592100001 -41.680251914899998 5 -144.87075226900001 -40.920043176199997 5 -144.894222536 -40.539923292799998 5 -144.84889133999999 -39.7852458236 5 -144.61858147699999 -39.035983740799999 5 -144.46113860200001 -38.6807186956 5 -144.063373431 -38.017664380900001 5 -143.50505373600001 -37.455718556900003 5 -143.195228609 -37.211690610600002 5 -142.46848788200001 -36.773165989100001 5 -141.63765165199999 -36.534692165800003 5 -141.17688725299999 -36.471713426500003 5 -140.44752184199999 -36.478850679600001 5 -139.73981999099999 -36.648422392699999 5 -139.489253362 -36.7307351965 5 -139.246450751 -36.833326237199998 5 -139.01363952400001 -36.955029742100002 5 + 0 6 2.9362837615799999 3 6.3937513017100001 3 9.5868506117399992 3 12.607484850800001 3 15.5216549243 3 18.836332135599999 3 20.713544667000001 6 +1 6565.4852130886484 -199.64909716244674 4500.852349321699 0.73555177838036601 0.30244022079968025 -0.6062124167023647 +1 6573.0597735260972 -192.79906770837698 4494.4380581950254 -0.67084843793828242 -0.48336709773221564 0.56242210318025465 +7 0 0 5 24 8 -88.468282488400007 -112.948707755 -19.800000000000001 -87.981378614099995 -113.203239759 -19.800000000000001 -87.471594867899995 -113.469732357 -19.872563416399998 -86.9504419692 -113.742168249 -20.031312315600001 -85.983795416500001 -114.24748869699999 -20.51399116 -85.130534487600002 -114.693536111 -21.340288964700001 -84.771468855999998 -114.881239885 -21.803289800999998 -84.1963146967 -115.18190527 -22.822275343899999 -83.893849799500003 -115.340020661 -24.0294604537 -83.822617322799999 -115.37725787700001 -24.638808639400001 -83.840163984200004 -115.368085252 -25.705627980399999 -84.100498228800006 -115.231993919 -26.748237647900002 -84.251856022200002 -115.152870699 -27.171806370500001 -84.632573416499994 -114.953848333 -27.970281720999999 -85.162307212100004 -114.676926724 -28.664839467499998 -85.457440977600001 -114.522643727 -28.975968832500001 -86.101209623800003 -114.186109696 -29.518736251699998 -86.837260870999998 -113.80133436600001 -29.894861070800001 -87.220192148699994 -113.601154679 -30.036353229900001 -87.703962547700002 -113.348260719 -30.151154236299998 -88.194524871300004 -113.09181623800001 -30.192349521800001 -88.285725031200002 -113.04414079199999 -30.1974496765 -88.377003557600005 -112.996424379 -30.1999995852 -88.468282284500006 -112.948707861 -30.199999289200001 + 0 6 5.1153601199500001 3 9.6375519410500008 3 13.802367842000001 3 16.786785141999999 3 19.7000153635 3 22.5735743159 3 23.2284108616 6 +7 0 0 5 21 7 -88.468282284500006 -112.948707861 -30.199999289200001 -88.775647945200006 -112.788030566 -30.1999982924 -89.083015880199994 -112.627352082 -30.171080738400001 -89.387401571400005 -112.468232585 -30.113248201600001 -90.074246657800003 -112.109180079 -29.915064023900001 -90.714875473700005 -111.774287414 -29.573687575800001 -91.056317846900001 -111.595796307 -29.3375488967 -91.799242983100001 -111.20742760900001 -28.689846717000002 -92.373439246199993 -110.90726297099999 -27.858164094500001 -92.637835574700006 -110.76904815899999 -27.332055923399999 -93.055102466199997 -110.55091931699999 -26.127169455800001 -93.133307618900005 -110.510037092 -24.861059568799998 -93.076411233599998 -110.539780028 -24.188176221199999 -92.773249122799996 -110.69825989100001 -22.867628482000001 -92.147787814400004 -111.025223649 -21.764170071399999 -91.756445824099998 -111.229800088 -21.2730470401 -90.882704140599998 -111.68655394300001 -20.4660403689 -89.906768967900007 -112.196730074 -20.007781433800002 -89.4132303114 -112.454730451 -19.865377581499999 -88.930449341799999 -112.707107181 -19.800000000000001 -88.468282488400007 -112.948707755 -19.800000000000001 + 23.2284108616 6 25.4334620747 3 28.303717744499998 3 32.199539422699999 3 36.747675512599997 3 41.601373811599998 3 46.4568494317 6 +7 0 0 5 21 7 -88.468282488400007 -112.948707755 -21 -88.041457017100001 -113.17183340299999 -21 -87.588724382799995 -113.40850218 -21.072489595 -87.121898306899993 -113.65253839099999 -21.235003823900001 -86.284851204199995 -114.090109927 -21.728998207499998 -85.591504721000007 -114.452561078 -22.574936804699998 -85.324432924700005 -114.592174507 -23.0312001233 -84.992969151699995 -114.76544923900001 -23.8989976101 -84.899092404599998 -114.814523888 -24.8717875607 -84.904516564100007 -114.811688375 -25.2755418299 -85.005206309100004 -114.75905219000001 -26.064207645300002 -85.2810958715 -114.614829219 -26.817396631499999 -85.456976109799996 -114.52288674 -27.167305685399999 -85.880417019199996 -114.301530392 -27.805681189200001 -86.436674815299995 -114.010743198 -28.3138828258 -86.738482136599998 -113.852971559 -28.525660762299999 -87.259792673600003 -113.58045326 -28.796016616799999 -87.817893216000002 -113.288702759 -28.943581700199999 -88.033481541300006 -113.17600263200001 -28.9811915298 -88.250881552099997 -113.062355435 -28.999997497900001 -88.468282488400007 -112.948707755 -28.999998195 + 0 6 5.4754859871999999 3 10.0428908758 3 13.148298815 3 16.097999099700001 3 18.960532956400002 3 20.713511896100002 6 +7 0 0 5 24 8 -88.468282488400007 -112.948707755 -28.999998195 -88.601477299999999 -112.87907934499999 -28.999998622100001 -88.734672459099997 -112.809450754 -28.992940240799999 -88.867451538699996 -112.74003967100001 -28.978822727000001 -89.347858947000006 -112.48890373499999 -28.901907048599998 -89.811840314199998 -112.246354614 -28.733473461999999 -90.1322531462 -112.078856829 -28.565043215300001 -90.732925242099995 -111.76485178599999 -28.140385770799998 -91.218878188999994 -111.510816885 -27.569820463300001 -91.429502956999997 -111.400711489 -27.2510045131 -91.780958359799996 -111.216986009 -26.554851304300001 -91.968541462000005 -111.118925785 -25.7983394932 -92.020169213299994 -111.091937059 -25.406467601300001 -92.0420167483 -111.08051612600001 -24.458113468899999 -91.8293587844 -111.191684388 -23.5694198152 -91.631839125900001 -111.294939008 -23.088676588799999 -91.089177250000006 -111.578618851 -22.1798210553 -90.366925450300002 -111.95618043499999 -21.5587662943 -89.954755766199995 -112.17164468 -21.3170924816 -89.399567214000001 -112.46187292 -21.105123024699999 -88.861573311399994 -112.743112551 -21.020307016699999 -88.728181566200007 -112.81284390899999 -21.0065979329 -88.597053004800003 -112.88139217299999 -21 -88.468282488400007 -112.948707755 -21 + 20.713511896100002 6 21.7875077295 3 24.623855365299999 3 27.515748815999999 3 30.5187041921 3 34.831179132800003 3 39.774715524199998 3 41.426634647699998 6 +7 1 0 5 6 2 -79.202796057300006 -95.224409145500005 -19.800000000000001 1 -60.769525503499999 -104.860515034 -19.800000000000001 0.20000000000000001 -69.986160780399999 -100.04246209 -40.600000000000001 0.20000000000000001 -88.419431334199999 -90.406356201299999 -40.600000000000001 0.20000000000000001 -97.636066611100006 -85.588303257199996 -19.800000000000001 0.20000000000000001 -79.202796057300006 -95.224409145500005 -19.800000000000001 1 + 0 6 32.672563597299998 6 +7 0 0 5 6 2 -88.468282488400007 -112.948707755 -30.199999999999999 -86.615185204400007 -109.403848037 -30.199999999999999 -84.762087920499994 -105.85898831900001 -30.199999999999999 -82.908990621100003 -102.31412858900001 -30.199999999999999 -81.055893339199997 -98.769268867400001 -30.199999999999999 -79.202796057300006 -95.224409145500005 -30.199999999999999 + 0 6 20 6 +7 0 0 5 6 2 -88.468282488400007 -112.948707755 -19.800000000000001 -86.615185202299998 -109.403848036 -19.800000000000001 -84.762087916200002 -105.858988318 -19.800000000000001 -82.908990622900006 -102.31412858900001 -19.800000000000001 -81.055893340099999 -98.769268867400001 -19.800000000000001 -79.202796057300006 -95.224409145500005 -19.800000000000001 + 0 6 20 6 +7 1 0 5 6 2 -79.202796057300006 -95.224409145500005 -19.800000000000001 1 -60.769525503499999 -104.860515034 -19.800000000000001 0.20000000000000001 -69.986160780399999 -100.04246209 -40.600000000000001 0.20000000000000001 -88.419431334199999 -90.406356201299999 -40.600000000000001 0.20000000000000001 -97.636066611100006 -85.588303257199996 -19.800000000000001 0.20000000000000001 -79.202796057300006 -95.224409145500005 -19.800000000000001 1 + 0 6 32.672563597299998 6 +7 0 0 3 4 2 -88.468282488400007 -112.948707755 -29 -85.379787015100007 -107.040608225 -29 -82.2912915271 -101.13250868199999 -29 -79.202796057300006 -95.224409145500005 -29 + 0 4 20 4 +7 0 0 3 4 2 -88.468282488400007 -112.948707755 -21 -85.379787011600001 -107.040608224 -21 -82.2912915287 -101.13250868199999 -21 -79.202796057300006 -95.224409145500005 -21 + 0 4 20 4 +7 0 0 5 15 5 -79.202796057300006 -95.224409145400003 -21 -78.848310085099996 -95.409718874000006 -21 -78.471668739699993 -95.606610460699997 -21.050000000000001 -78.078343412699994 -95.812223701700006 -21.162287616 -77.281006112699998 -96.229036693699996 -21.541609984000001 -76.547962245400001 -96.612239897199998 -22.263292415999999 -76.218307760299993 -96.784568812800003 -22.717759999999998 -75.698773119500004 -97.0561587511 -23.81344 -75.583068898199997 -97.116643846599999 -25.175360000000001 -75.656824335899998 -97.078087736599997 -25.897508411099999 -76.117650582099998 -96.837187973699997 -27.308679254299999 -77.143746158499994 -96.300790181599993 -28.39862789 -77.784852168599997 -95.965648060099994 -28.800000000000001 -78.493824113000002 -95.595028602799999 -29 -79.202796057399993 -95.224409145600006 -29 + 0 6 4.0840704496700004 3 8.16814089933 3 12.252211349 3 16.3362817987 6 +7 0 0 5 15 5 -79.202796057399993 -95.224409145600006 -29 -79.911768001699997 -94.853789688299997 -29 -80.620739946100002 -94.483170231100004 -28.800000000000001 -81.261845956200006 -94.148028109600006 -28.39862789 -82.287941532700003 -93.611630317600003 -27.308679254299999 -82.748767778900003 -93.370730554700003 -25.897508411099999 -82.822523216600004 -93.332174444700001 -25.175360000000001 -82.706818995299997 -93.392659540099999 -23.81344 -82.187284354400006 -93.664249478299993 -22.717759999999998 -81.857629869299998 -93.836578393799996 -22.263292415999999 -81.124586002000001 -94.219781597199997 -21.541609984000001 -80.327248701900004 -94.636594589200001 -21.162287616 -79.933923374900004 -94.842207830099994 -21.050000000000001 -79.557282029500001 -95.039099416799999 -21 -79.202796057300006 -95.224409145400003 -21 + 16.3362817987 6 20.420352248299999 3 24.504422697999999 3 28.588493147699999 3 32.672563597299998 6 +7 0 0 5 6 2 -79.202796057300006 -95.224409145500005 -19.800000000000001 -77.045920346299994 -91.098440211600007 -19.799999999800001 -74.889046915099996 -86.972472702499999 -17.969279505199999 -73.194460763400002 -83.730842644299997 -14.311438576800001 -72.346336096599998 -82.108428174699995 -9.6557204015700009 -72.3463360983 -82.108428174500006 -5 + 0 6 31.457570005800001 6 +7 1 0 5 6 2 -72.3463360983 -82.108428174500006 -5 1 -53.9130655445 -91.7445340628 -5 0.20000000000000001 -53.493594933099999 -68.493210564799995 -5 0.20000000000000001 -71.926865486899999 -58.857104676500001 -5 0.20000000000000001 -90.7796066521 -72.472322286199997 -5 0.20000000000000001 -72.3463360983 -82.108428174500006 -5 1 + 0 6 32.672563597299998 6 +7 0 0 5 6 2 -79.202796057300006 -95.224409145500005 -30.199999999999999 -75.530277955700001 -88.199110692700003 -30.199999999199999 -71.8577595557 -81.173810414399995 -27.082825681999999 -68.972388187299998 -75.654280117200003 -20.854611897800002 -67.528283153299995 -72.891792898800006 -12.927307710499999 -67.528283154199997 -72.891792897599998 -5 + 0 6 31.457570005800001 6 +7 1 0 5 6 2 -72.3463360983 -82.108428174500006 -5 1 -53.9130655445 -91.7445340628 -5 0.20000000000000001 -53.493594933099999 -68.493210564799995 -5 0.20000000000000001 -71.926865486899999 -58.857104676500001 -5 0.20000000000000001 -90.7796066521 -72.472322286199997 -5 0.20000000000000001 -72.3463360983 -82.108428174500006 -5 1 + 0 6 32.672563597299998 6 +7 0 0 5 6 2 -68.084212339999993 -73.955250814099998 -4.99999999989 -68.084212339199993 -73.955250815400007 -12.549816721199999 -69.459540548700005 -76.586171745100003 -20.099614438 -72.207530549099999 -81.8429006458 -26.0312842837 -75.705159844299999 -88.533648856300005 -28.9999999992 -79.202796057399993 -95.224409145600006 -29 + -15.7287850029 6 15.7287850029 6 +7 0 0 5 6 2 -71.790406912500004 -81.044970257900005 -4.99999999984 -71.7904069107 -81.044970258099994 -10.033211587 -72.707308521800002 -82.798951487300002 -15.066436334800001 -74.539275677000006 -86.303381979700006 -19.020820644800001 -76.871038546600005 -90.763902217899997 -20.9999999998 -79.202796057300006 -95.224409145400003 -21 + -15.7287850029 6 15.7287850029 6 +7 0 0 5 15 5 -71.790406912500004 -81.044970257900005 -5 -71.435920940299994 -81.230279986499994 -5 -71.036115878800004 -81.382860826699996 -5 -70.590770582600001 -81.488963105799996 -5 -69.617702969899995 -81.569614951800006 -5 -68.550322163499999 -81.313252409 -5 -68.010124516800005 -81.082825366199998 -5 -66.982989467300001 -80.383407329400001 -5 -66.236342682 -79.236938586700006 -5 -65.975545304500002 -78.558403772800006 -5 -65.782612335799996 -77.066903339199996 -5 -66.303762697400003 -75.564576792799997 -5 -66.758923315600001 -74.873732714699997 -5 -67.375240395700004 -74.325870271400007 -5 -68.084212339999993 -73.955250814099998 -5 + 0 6 4.0840704496700004 3 8.16814089933 3 12.252211349 3 16.3362817987 6 +7 0 0 5 15 5 -68.084212339999993 -73.955250814099998 -5 -68.793184284399999 -73.584631356900005 -5 -69.594811093100006 -73.391254885799995 -5 -70.421862495200003 -73.411814720799995 -5 -71.9529032863 -73.841345683200004 -5 -73.067488747599995 -74.851046590999999 -5 -73.475797000399993 -75.452469184899996 -5 -73.991035343099995 -76.719908118500001 -5 -73.979101110900004 -77.962506031700002 -5 -73.859989787499998 -78.5375909057 -5 -73.461282859199997 -79.560359855399994 -5 -72.839675871899999 -80.313333993399993 -5 -72.498370514000001 -80.618458196099994 -5 -72.144892884699999 -80.859660529300001 -5 -71.790406912500004 -81.044970257900005 -5 + 16.3362817987 6 20.420352248299999 3 24.504422697999999 3 28.588493147699999 3 32.672563597299998 6 +7 0 0 5 24 8 -72.3463360983 -82.108428174500006 5 -71.859432223699997 -82.362960178400002 5 -71.316031709499995 -82.565145993499996 5 -70.721334521900005 -82.696896241299996 5 -69.531075254300006 -82.774459490799998 5 -68.2950117699 -82.488229452300004 5 -67.721449740599994 -82.265614972199998 5 -66.674225745399994 -81.663240154199997 5 -65.812502985699993 -80.751530076400002 5 -65.458975141899998 -80.248753832800006 5 -64.982291797399995 -79.294149978899995 5 -64.7596117561 -78.234082392700003 5 -64.714741037099998 -77.779586246299999 5 -64.725545305599994 -76.872943102799994 5 -64.933508332800002 -75.980494048599994 5 -65.084503853000001 -75.550483563599997 5 -65.476822291700003 -74.732940942200003 5 -66.038624568800003 -74.014838182299997 5 -66.356006162699998 -73.689266030900001 5 -66.786592202999998 -73.334633705300007 5 -67.258069808399995 -73.041681347899996 5 -67.346907197299998 -72.989486068700003 5 -67.437004415999994 -72.939509889099995 5 -67.528283279600004 -72.891793634099997 5 + 0 6 5.1153601240000004 3 9.6375519456400003 3 13.802367846299999 3 16.7867851462 3 19.700015367399999 3 22.573574319799999 3 23.228410862400001 6 +7 0 0 5 6 2 -67.528283154199997 -72.891792897599998 -5 -67.528283154199997 -72.891792897599998 -2.99999999979 -67.528283154199997 -72.891792897599998 -0.99999999957399999 -67.528283154199997 -72.891792897599998 0.99999999564800002 -67.528283154199997 -72.891792897599998 2.9999999978199998 -67.528283154199997 -72.891792897599998 5 + 0 6 10 6 +7 0 0 5 6 2 -72.3463360983 -82.108428174500006 -5 -72.3463360983 -82.108428174500006 -2.99999999997 -72.3463360983 -82.108428174500006 -0.99999999993800004 -72.3463360983 -82.108428174500006 0.99999999542600004 -72.3463360983 -82.108428174500006 2.9999999977099998 -72.3463360983 -82.108428174500006 5 + 0 6 10 6 +7 0 0 5 21 7 -67.528283279600004 -72.891793634099997 5 -67.835649402499996 -72.731117222099996 5 -68.156414098200003 -72.596065906000007 5 -68.487592119200002 -72.488198465899998 5 -69.266250846399998 -72.304779737499999 5 -70.065030605199993 -72.272419977799998 5 -70.515869964800004 -72.303198494300005 5 -71.558858888900005 -72.488833139199997 5 -72.518352354399994 -72.925718058699999 5 -73.026481088699995 -73.253748163500006 5 -74.001940940599994 -74.103407699499996 5 -74.666702291700005 -75.1845709591 5 -74.921535482699994 -75.8106331651 5 -75.230149229099993 -77.139402151599995 5 -75.115891866699997 -78.444267227099999 5 -74.952074565299995 -79.084084229499993 5 -74.452198349499994 -80.2560194446 5 -73.688562774199994 -81.172311485899996 5 -73.260996165999998 -81.556512282599996 5 -72.808502951400001 -81.866827601099999 5 -72.3463360983 -82.108428174500006 5 + 23.228410862400001 6 25.433462078400002 3 28.303717748099999 3 32.199539426500003 3 36.747675515600001 3 41.601373815099997 3 46.4568494321 6 +7 0 0 3 4 2 -68.084212339999993 -73.955250814099998 -5 -68.084212339999993 -73.955250814099998 -1.66666666631 -68.084212339999993 -73.955250814099998 1.66666666304 -68.084212339999993 -73.955250814099998 5 + 0 4 10 4 +7 0 0 3 4 2 -71.790406912500004 -81.044970257900005 -5 -71.790406912500004 -81.044970257900005 -1.6666666666200001 -71.790406912500004 -81.044970257900005 1.66666666286 -71.790406912500004 -81.044970257900005 5 + 0 4 10 4 +7 0 0 5 24 8 -68.084212339999993 -73.955250814099998 5 -67.734644332299993 -74.137989646500003 5 -67.407602175899996 -74.363818053399996 5 -67.110642943800002 -74.628799524499996 5 -66.630675468500002 -75.177632365299999 5 -66.287925136300004 -75.813514736800002 5 -66.162354891600003 -76.118003238599997 5 -65.954743455400006 -76.816327087600001 5 -65.908304151899998 -77.535331164200002 5 -65.931846388300002 -77.929016302400001 5 -66.074609926299999 -78.708197888699999 5 -66.3920304974 -79.413250123899999 5 -66.593885619000005 -79.745300475600004 5 -67.077671457400001 -80.3620566803 5 -67.671477772499998 -80.830013160899995 5 -67.996999904399999 -81.027697661700003 5 -68.698958430900007 -81.349754878200002 5 -69.418606690199994 -81.493090728699997 5 -69.788050893999994 -81.521660876200002 5 -70.449051469699995 -81.499128229700005 5 -71.053039256000005 -81.356806735800006 5 -71.315520693699995 -81.269697281199996 5 -71.561517663100005 -81.164623524899994 5 -71.790406912500004 -81.044970257900005 5 + 20.713544667899999 6 23.532195013599999 3 25.905404210299999 3 28.819572365700001 3 31.840203623499999 3 35.0332986393 3 38.490760262400002 3 41.427042095499999 6 +7 0 0 5 24 8 -71.790406912500004 -81.044970257900005 5 -72.019296312099996 -80.925316912300005 5 -72.245978459400007 -80.783294713800004 5 -72.467317105800007 -80.617484124499995 5 -72.928910267700005 -80.202766972399999 5 -73.324680089599994 -79.672865209400001 5 -73.512080935100002 -79.353202896599996 5 -73.805128736900002 -78.680472987000002 5 -73.941325085700001 -77.920264248199999 5 -73.964795352199999 -77.540144365000003 5 -73.919464156199993 -76.785466895699997 5 -73.6891542929 -76.036204812799994 5 -73.531711418300006 -75.680939767699996 5 -73.133946246799994 -75.017885452900003 5 -72.575626551900001 -74.455939628899998 5 -72.265801425099994 -74.211911682700006 5 -71.539060698499995 -73.773387061199998 5 -70.708224468300003 -73.5349132379 5 -70.247460069200002 -73.471934498500005 5 -69.518094657800006 -73.479071751700005 5 -68.810392807499994 -73.648643464700001 5 -68.559826178500003 -73.730956268599996 5 -68.317023566800003 -73.833547309300002 5 -68.084212339999993 -73.955250814099998 5 + 0 6 2.9362837617099999 3 6.3937513023000001 3 9.5868506127799993 3 12.607484852000001 3 15.5216549257 3 18.836332136399999 3 20.713544667899999 6 +1 6514.7428091286574 -201.16738129846746 4439.0227184516925 0.73555177837988028 0.3024402208014792 -0.60621241670205661 +1 6522.3173695660971 -194.31735184437699 4432.6084273250253 -0.67084843793828242 -0.48336709773221564 0.56242210318025465 +1 -14.2881200525 75.031350698300002 -26.5 0 0 -1 +2 -9.2384933181199997 76.272829591999994 3 0 0 -1 -1 0 -0 0 1 0 5.2000000000000002 +1 -4.1888665837400003 77.514308485599997 -26.5 0 0 -1 +2 -9.2384933181199997 76.272829591999994 -56 0 0 -1 -1 0 -0 0 1 0 5.2000000000000002 +2 -9.2384933181199997 76.272829591999994 3 0 0 -1 -1 0 -0 0 1 0 5.2000000000000002 +2 -9.2384933181199997 76.272829591999994 -56 0 0 -1 -1 0 -0 0 1 0 5.2000000000000002 +2 -7.7955479379600003 64.359899279499999 15 -0.12024544834603497 0.99274419270628877 -1.7353289525505046e-15 0.99274419270628877 0.12024544834603497 0 2.0866540792729066e-16 -1.7227377400796003e-15 -1 5.2000000000000002 +2 -2.6707345707700001 64.9806387263 3 0.99274419270628877 0.12024544834603497 -1.5771219445204588e-16 -0.12024544834603497 0.99274419270628877 0 1.5656786516123352e-16 1.8964173531523306e-17 1 12.6252763314 +2 -12.9203613052 63.739159832699997 3 0.99274419270628877 0.12024544834603497 -1.5771219445204588e-16 -0.12024544834603497 0.99274419270628877 0 1.5656786516123352e-16 1.8964173531523306e-17 1 11.3747236686 +1 6529.7334142008203 -85.582269914401081 4556.2415536646349 0.58009025073959064 0.64552064979998747 -0.49678807521787471 +2 -7.7955479379600003 64.359899279499999 15 -0.12024544834603497 0.99274419270628877 -1.7353289525505046e-15 0.99274419270628877 0.12024544834603497 0 2.0866540792729066e-16 -1.7227377400796003e-15 -1 5.2000000000000002 +1 -9.7440600262500006 37.5156753491 14.3747236686 -0.12024544834603497 0.99274419270628877 0 +2 -1.4429453801500001 11.9129303125 15 -0.12024544834603497 0.99274419270628877 -1.7347234759805045e-18 0.99274419270628877 0.12024544834603497 0 2.0859260212566799e-19 -1.7221366567309131e-18 -1 5.2000000000000002 +1 0.505566708132 38.757154242799999 15.6252763314 -0.12024544834603497 0.99274419270628877 0 +2 -1.4429453801500001 11.9129303125 15 -0.12024544834603497 0.99274419270628877 -1.7347234759805045e-18 0.99274419270628877 0.12024544834603497 0 2.0859260212566799e-19 -1.7221366567309131e-18 -1 5.2000000000000002 +2 0 0 3 -2.3190965835700002e-16 1.9193784493599998e-15 1 0 1 -1.9193784493599998e-15 -1 -4.4512240044886604e-31 -2.3190965835700002e-16 5.2000000000000002 +2 3.68186798704 12.5336697593 3 0.99274419270628877 0.12024544834603497 -5.6955562371916562e-19 -0.12024544834603497 0.99274419270628877 0 5.6542303787040986e-19 6.8486471332116662e-20 1 12.6252763314 +2 -6.5677587473400001 11.2921908656 3 0.99274419270628877 0.12024544834603497 -5.6955562371916562e-19 -0.12024544834603497 0.99274419270628877 0 5.6542303787040986e-19 6.8486471332116662e-20 1 11.3747236686 +2 -9.2384933181199997 76.272829591999994 -56 0 0 -1 -1 0 -0 0 1 0 4 +2 -9.2384933181199997 76.272829591999994 -56 0 0 -1 -1 0 -0 0 1 0 4 +1 6538.2592162739029 -80.831489022923037 4549.1577143149743 -0.67084843793832383 -0.483367097732192 0.56242210318022579 +2 0 0 3 -2.3190965835700002e-16 1.9193784493599998e-15 1 0 1 -1.9193784493599998e-15 -1 -4.4512240044886604e-31 -2.3190965835700002e-16 5.2000000000000002 +1 -5.2000000000000002 6.3681633555700002e-16 1.5 0 0 1 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 5.2000000000000002 +1 5.2000000000000002 -1.2736326711099999e-15 1.5 0 0 1 +1 -13.1228215753 75.317845827599996 -26.5 0 0 -1 +2 -9.2384933181199997 76.272829591999994 3 0 0 -1 -1 0 -0 0 1 0 4 +1 -5.3541650608999998 77.227813356300004 -26.5 0 0 -1 +2 -9.2384933181199997 76.272829591999994 3 0 0 -1 -1 0 -0 0 1 0 4 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 5.2000000000000002 +1 6451.5727676351362 -129.60441142604404 4524.7477657494928 0.58009025073981391 0.64552064979968038 -0.49678807521801299 +2 -7.7955479379600003 64.359899279499999 15 -0.12024544834603497 0.99274419270628877 -1.7353289525505046e-15 0.99274419270628877 0.12024544834603497 0 2.0866540792729066e-16 -1.7227377400796003e-15 -1 4 +2 -3.8533838093499999 64.837391161699998 3 0.99274419270628877 0.12024544834603497 -1.5771219445204588e-16 -0.12024544834603497 0.99274419270628877 0 1.5656786516123352e-16 1.8964173531523306e-17 1 12.4809817934 +2 -11.7377120666 63.8824073973 3 0.99274419270628877 0.12024544834603497 -1.5771219445204588e-16 -0.12024544834603497 0.99274419270628877 0 1.5656786516123352e-16 1.8964173531523306e-17 1 11.5190182066 +2 -7.7955479379600003 64.359899279499999 15 -0.12024544834603497 0.99274419270628877 -1.7353289525505046e-15 0.99274419270628877 0.12024544834603497 0 2.0866540792729066e-16 -1.7227377400796003e-15 -1 4 +1 -8.5614107876700007 37.658922913799998 14.5190182066 -0.12024544834603497 0.99274419270628877 0 +2 -1.4429453801500001 11.9129303125 15 -0.12024544834603497 0.99274419270628877 -1.7347234759805045e-18 0.99274419270628877 0.12024544834603497 0 2.0859260212566799e-19 -1.7221366567309131e-18 -1 4 +1 -0.67708253045 38.613906678200003 15.4809817934 -0.12024544834603497 0.99274419270628877 0 +2 -1.4429453801500001 11.9129303125 15 -0.12024544834603497 0.99274419270628877 -1.7347234759805045e-18 0.99274419270628877 0.12024544834603497 0 2.0859260212566799e-19 -1.7221366567309131e-18 -1 4 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 4 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 4 +1 6460.0985697082206 -124.85363053457077 4517.6639263998313 -0.67084843793832383 -0.483367097732192 0.56242210318022579 +2 0 0 3 -2.3190965835700002e-16 1.9193784493599998e-15 1 0 1 -1.9193784493599998e-15 -1 -4.4512240044886604e-31 -2.3190965835700002e-16 4 +2 2.4992187484500001 12.390422194699999 3 0.99274419270628877 0.12024544834603497 -5.6955562371916562e-19 -0.12024544834603497 0.99274419270628877 0 5.6542303787040986e-19 6.8486471332116662e-20 1 12.4809817934 +2 -5.3851095087600003 11.4354384303 3 0.99274419270628877 0.12024544834603497 -5.6955562371916562e-19 -0.12024544834603497 0.99274419270628877 0 5.6542303787040986e-19 6.8486471332116662e-20 1 11.5190182066 +2 0 0 3 -2.3190965835700002e-16 1.9193784493599998e-15 1 0 1 -1.9193784493599998e-15 -1 -4.4512240044886604e-31 -2.3190965835700002e-16 4 +1 4 -9.7971743931799991e-16 1.5 0 0 1 +1 -4 4.8985871965899995e-16 1.5 0 0 1 +1 6540.1140111086606 -200.40823923047185 4469.9375338916916 0.73555177837973096 0.30244022080186944 -0.60621241670204307 +1 6547.6885715460976 -193.55820977637697 4463.5232427650253 -0.67084843793828242 -0.48336709773221564 0.56242210318025465 +1 6453.1819957896187 -156.2861227280172 4503.7359436784536 0.58009025073981657 0.64552064979967638 -0.49678807521801521 +1 6461.707797862703 -151.53534183654401 4496.6521043287921 -0.67084843793832338 -0.48336709773219289 0.56242210318022545 +1 6538.3025078500004 -143.52205385600001 4536.2252313199997 0.67084843793829319 0.48336709773221126 -0.56242210318024577 +2 6544.2800296300002 -142.86381683100001 4533.2526974800003 0.67084843793829319 0.48336709773221126 -0.56242210318024577 0.64246138354497484 2.7755575615628907e-17 0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 3 +1 6542.2073701500003 -148.005984977 4537.02922889 0.67084843793829319 0.48336709773221126 -0.56242210318024577 +7 0 0 5 9 3 6546.2324607800001 -145.10578239200001 4533.6546962700004 6545.8973728499996 -145.53548022699999 4532.8857097600003 6545.3214133900001 -145.68858664800001 4532.0671286400002 6544.5717490200004 -145.47151408400001 4531.35950099 6543.0818229099996 -144.40032946700001 4530.5029571100004 6542.11825168 -142.654177068 4530.8543344099999 6541.8982941599998 -141.757838354 4531.3623202899998 6541.9925105499997 -141.05154910300001 4532.08171219 6542.3275984800002 -140.62185126700001 4532.8506986900002 + -4.7123889803800001 6 4.4408920985e-16 3 4.7123889803800001 6 +2 -110.16811692729415 32.483897451218915 -8.8677663721101929 -2.4073397714707841e-06 -0.0001607584071840473 -0.99999998707546955 -0.87296456129461986 0.48778362918398166 -7.631379795690178e-05 0.48778363514769191 0.87296454982824956 -0.00014151065333225065 2 +2 -110.16811692729415 32.483897451218915 -8.8677663721101929 -2.4073397714707841e-06 -0.0001607584071840473 -0.99999998707546955 0.87296456129461986 -0.48778362918398166 7.631379795690178e-05 -0.48778363514769191 -0.87296454982824956 0.00014151065333225065 2 +1 6534.69643567 -133.82896896400001 4540.2545722900004 0.73134152220185855 -0.30553578504594092 0.60974376746288206 +1 6545.7400004199999 -148.055537805 4541.2003083600002 0.12288999641698768 -0.8203682910049177 -0.55847463316994406 +1 6537.7686855800002 -154.338176234 4526.2927064699998 0.73134152220185855 -0.30553578504594092 0.60974376746288206 +1 6527.4776585 -140.458383825 4515.2784087800001 -0.7313415221585865 0.30553578475682724 -0.60974376765965532 +3 -91.765126416608837 30.596907218775868 37488.611788102404 0.10176374196603427 0.99480858217398682 -0.00016016882536556976 -1.6299379224577214e-05 -0.00015933732411421941 -0.99999998717297378 -0.99480859493442286 0.10176374327136049 0 62434.122103202208 10.000000000000453 +1 -92.376152207909854 24.622143704331791 -8.8617550892037258 -0.99480859493442286 0.10176374327136048 0 +1 6529.4750061300001 -143.58371584700001 4520.3088562900002 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 +7 0 0 5 15 5 6535.1382605999997 -139.04461951499999 4525.6309003899996 6535.0224395100004 -138.27144061600001 4526.1572503300004 6534.7712799499996 -137.44172076699999 4526.57076409 6534.3906097199997 -136.59520121 4526.8442378299997 6533.4112708000002 -134.959787726 4527.0816344100003 6532.1134593400002 -133.59384520399999 4526.7075681699998 6531.4141591999996 -133.01692976499999 4526.3692769400004 6529.9901300700003 -132.13738173499999 4525.4266341499997 6528.6570666199996 -131.865086991 4524.0705970899999 6528.0487770999998 -131.89572491000001 4523.3187072999999 6527.0142347199999 -132.28726964000001 4521.7482125099996 6526.4268097599997 -133.268129243 4520.2045527399996 6526.2658586199996 -133.888373242 4519.4795112399997 6526.2463412500001 -134.60501119099999 4518.8403251199998 6526.3621623400004 -135.37819009 4518.3139751799999 + -9.4247779607699993 6 -4.7123889803800001 3 8.881784197e-16 3 4.7123889803800001 3 9.4247779607699993 6 +3 -91.765215483958613 30.590959111330935 -8.8617550892037258 0 0 -1 -0.014973213887728463 -0.99988789514918741 -0 -0.99988789514918741 0.014973213887728463 0 6.0000000775471829 6 +1 6528.0003261700003 -133.73929635299999 4527.01055189 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 +1 6526.0029785400002 -130.613964337 4521.9801043799998 -0.73134152221295778 0.30553578512298235 -0.60974376741096481 +1 6546.2164207799997 -136.350832876 4546.4939749599998 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 +1 6549.2886706899999 -156.86004014700001 4532.5321091400001 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 +1 6549.7650910499997 -145.155335218 4537.8257757399997 0.12288999641698768 -0.8203682910049177 -0.55847463316994406 +2 6530.7502114700001 -137.211404808 4521.9724377800003 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 12.5000000007 +2 6530.7502114700001 -137.21140481 4521.9724377800003 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.64246138354497484 -2.7755575615628907e-17 -0.7663180610252357 0.37041293709754375 -0.87541775674813627 -0.31054469436915549 12.5000000007 +1 -22.024150236098798 31.093734719314526 -8.8617550892175174 0.99988789514893628 -0.014973213904488929 0 +3 -91.765126416608837 30.596907218775868 -8.861507329784132 -2.407339892207538e-06 -0.00016075840718510201 -0.99999998707546967 0.014973213710967173 0.99988788222585501 -0.00016077643100295415 0.9998878951489365 -0.014973213904488931 -4.2351647362715008e-22 10.000000129245757 10.000000000000453 +2 -91.765126416608837 30.596907218775868 -8.8617550892037258 0 0 -1 -1 0 -0 0 1 0 10.000000000000453 +3 -91.765215487851975 30.590959116252566 -8.8617550892037258 0 0 -1 -0.014973213904488931 -0.99988789514893639 -0 -0.99988789514893639 0.014973213904488931 0 6.0000000775471829 6 +3 -91.765215488783596 30.590959117727227 -8.8617550892037258 0 0 -1 -0.014973213905720937 -0.99988789514891796 -0 -0.99988789514891796 0.014973213905720937 0 5.0000000646226521 5 +3 -91.765215488783596 30.590959117727227 -8.8617550892037258 0 0 -1 -0.014973213905720937 -0.99988789514891796 -0 -0.99988789514891796 0.014973213905720937 0 5.0000000646226521 5 +1 6543.9170711200004 -138.13039953399999 4526.2197022600003 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 +2 -110.16811691285011 32.483898415769346 -8.8617663722652864 -2.4073397714707841e-06 -0.0001607584071840473 -0.99999998707546955 -0.87296456129461986 0.48778362918398166 -7.631379795690178e-05 0.48778363514769191 0.87296454982824956 -0.00014151065333225065 2 +2 -110.16811691285011 32.483898415769346 -8.8617663722652864 -2.4073397714707841e-06 -0.0001607584071840473 -0.99999998707546955 0.87296456129461986 -0.48778362918398166 7.631379795690178e-05 -0.48778363514769191 -0.87296454982824956 0.00014151065333225065 2 +3 -91.765126416608837 30.596907218775868 3.1384928228217852 -2.407339892207538e-06 -0.00016075840718510201 -0.99999998707546967 0.014973213710967173 0.99988788222585501 -0.00016077643100295415 0.9998878951489365 -0.014973213904488931 -4.2351647362715008e-22 10.000000129245757 10.000000000000453 +1 -101.76512641660929 30.596907218775865 28.138493146598876 0 0 -1 +3 -91.765126416608837 30.596907218775868 7.1384928781962529 -2.4073398923740714e-06 -0.0001607584071830481 -0.99999998707546967 0.014973213712194008 0.99988788222583658 -0.00016077643100090294 0.99988789514891807 -0.014973213905715765 -4.2351647362715008e-22 10.000000129245757 10.000000000000453 +1 -98.636205675781852 22.64869374425551 -24.360212750675533 0 0 -1 +1 -84.894299770953481 38.528240822687181 -24.362798602433553 0 0 -1 +2 -91.765267847826124 30.587462662446956 -30.611505515017907 -2.4073398923740714e-06 -0.00016075840718299259 -0.99999998707546967 -0.97596996526285595 0.21790508446752485 -3.2680583287319736e-05 0.2179050869048825 0.97596995257022923 -0.00015741994867668715 5 +2 -91.765267847826124 30.587462662446956 -30.611505515017907 -2.4073398923740714e-06 -0.00016075840718299259 -0.99999998707546967 -0.97596996526285595 0.21790508446752485 -3.2680583287319736e-05 0.2179050869048825 0.97596995257022923 -0.00015741994867668715 5 +3 -91.765126416133143 30.596907215632406 28.138493146598876 0 0 -1 -0.014973213905715767 -0.99988789514891807 -0 -0.99988789514891807 0.014973213905715767 0 5.0000000646226521 5 +3 -91.765126416133143 30.596907215632406 28.138493146598876 0 0 -1 -0.014973213905715767 -0.99988789514891807 -0 -0.99988789514891807 0.014973213905715767 0 5.0000000646226521 5 +1 -91.765126416608837 30.596907218775868 28.138493146598876 -0.99988789514891785 0.014973213905720935 0 +Polygon3D 0 +PolygonOnTriangulations 0 +Surfaces 1048 +2 50.5 5.5 -5 0 0 1 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 8 +1 50.5 5.5 9.5 0 0 1 1 0 -0 -0 1 0 +2 50.5 5.5 -5 0 0 1 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 8 +1 0 0 13 0 0 1 1 0 -0 -0 1 0 +1 -38 -32.5 2.22044604925e-16 0 -1 0 1 0 0 -0 0 1 +1 -38 -32.5 1.7347234759799999e-18 2.4651903288199999e-32 -1 0 1 2.4651903288199999e-32 0 -0 0 1 +6 0 0 1 +7 0 0 5 9 3 71 -32.5 0 75.712388980399993 -32.5 0 80.4247779608 -31.574724587399999 0 84.8946105096 -29.723259324099999 0 92.867471954300001 -24.367471954300001 0 98.223259324099999 -16.3946105096 0 100.07472458700001 -11.9247779608 0 101 -7.2123889803800001 0 101 -2.5 0 + 207.10225695400001 6 230.77710716199999 3 254.45195737099999 6 +6 0 0 1 +7 0 0 5 9 3 71 -32.5 0 75.712388980399993 -32.5 0 80.4247779608 -31.574724587399999 0 84.8946105096 -29.723259324099999 0 92.867471954300001 -24.367471954300001 0 98.223259324099999 -16.3946105096 0 100.07472458700001 -11.9247779608 0 101 -7.2123889803800001 0 101 -2.5 0 + 207.10225695400001 6 230.77710716199999 3 254.45195737099999 6 +1 101 -2.5 -1.3322676295499999e-15 1 -3.3599508870400002e-15 -8.3557604617999994e-17 3.3599508870400002e-15 1 -1.6267009302e-31 8.3557604617999994e-17 -1.1807935473518668e-31 1 +1 101 -2.5 1.38777878078e-17 1 -3.8229538743799999e-15 -2.4664133657399999e-14 3.8229538743799999e-15 1 -5.9435746756900001e-29 2.4664133657399999e-14 -3.4854098566883487e-29 1 +6 0 0 1 +7 0 0 5 6 2 101 7.5 0 101 12.4776888283 0 99.654424864299997 17.455903910100002 0 96.956647293900005 21.945748933499999 0 93.192846020999994 25.470943655100001 0 88.797802672700001 27.807817643500002 0 + 107.808170647 6 132.87983823900001 6 +6 0 0 1 +7 0 0 5 6 2 101 7.5 0 101 12.4776888283 0 99.654424864299997 17.455903910100002 0 96.956647293900005 21.945748933499999 0 93.192846020999994 25.470943655100001 0 88.797802672700001 27.807817643500002 0 + 107.808170647 6 132.87983823900001 6 +1 88.797802672700001 27.807817643500002 4.4408920985e-16 0.46947156278713975 0.88294759285826285 6.8484107274020401e-13 -0.88294759285826285 0.46947156278713975 -2.6794007744629963e-24 -3.2151340868253059e-13 -6.0467877666517567e-13 1 +1 88.797802672700001 27.807817643500002 -1.1587952819499999e-15 0.46947156278672519 0.88294759285848323 1.2464142782092703e-11 -0.88294759285848323 0.46947156278672519 -5.0297266445912371e-23 -5.8515605907503522e-12 -1.1005184866469576e-11 1 +6 0 0 1 +7 0 0 5 6 2 63.171634448200003 41.433492985900003 0 55.7500134434 45.379638872299999 0 47.845323711900001 48.4193390577 0 39.609065293299999 50.472868920099998 0 31.202585726199999 51.5 0 22.797080048600002 51.5 0 + 95.599764641600004 6 137.70278531899999 6 +6 0 0 1 +7 0 0 5 6 2 63.171634448200003 41.433492985900003 0 55.7500134434 45.379638872299999 0 47.845323711900001 48.4193390577 0 39.609065293299999 50.472868920099998 0 31.202585726199999 51.5 0 22.797080048600002 51.5 0 + 95.599764641600004 6 137.70278531899999 6 +1 22.797080048600002 51.5 -1.3322676295499999e-15 0 1 -0 -1 0 0 0 0 1 +1 22.797080048600002 51.5 -2.0816681711700001e-17 0 1 -0 -1 0 0 0 0 1 +6 0 0 1 +7 0 0 5 9 3 -12 51.5 0 -20.4823001647 51.5 0 -28.9646003294 49.834504257299997 0 -37.0102989174 46.501866783399997 0 -51.361449517799997 36.861449517799997 0 -61.001866783399997 22.5102989174 0 -64.334504257299997 14.4646003294 0 -66 5.9823001646899998 0 -66 -2.5 0 + 166.58674222600001 6 209.301291515 3 252.01584080399999 6 +6 0 0 1 +7 0 0 5 9 3 -12 51.5 0 -20.4823001647 51.5 0 -28.9646003294 49.834504257299997 0 -37.0102989174 46.501866783399997 0 -51.361449517799997 36.861449517799997 0 -61.001866783399997 22.5102989174 0 -64.334504257299997 14.4646003294 0 -66 5.9823001646899998 0 -66 -2.5 0 + 166.58674222600001 6 209.301291515 3 252.01584080399999 6 +1 -66 -2.5 -6.4184768611100004e-16 -1 0 0 0 -1 0 0 0 1 +1 -66 -2.5 0 -1 -7.8886090522099998e-31 0 7.8886090522099998e-31 -1 0 0 0 1 +6 0 0 1 +7 0 0 5 6 2 -66 -4.5 0 -66 -13.296459430100001 0 -62.555579886700002 -22.101126014199998 0 -55.601126014199998 -29.055579886699999 0 -46.796459430100001 -32.5 0 -38 -32.5 0 + 98.517206313800003 6 143.29775463799999 6 +6 0 0 1 +7 0 0 5 6 2 -66 -4.5 0 -66 -13.296459430100001 0 -62.555579886700002 -22.101126014199998 0 -55.601126014199998 -29.055579886699999 0 -46.796459430100001 -32.5 0 -38 -32.5 0 + 98.517206313800003 6 143.29775463799999 6 +2 -22.5 -12.5 1.75 0 0 1 1 0 -0 -0 1 0 6 +1 0 0 8.5 0 0 1 1 0 -0 -0 1 0 +2 -22.5 -12.5 1.75 0 0 1 1 0 -0 -0 1 0 6 +2 -22.5 29.5 1.75 0 0 1 1 0 -0 -0 1 0 6 +1 0 0 8.5 0 0 1 1 0 -0 -0 1 0 +2 -22.5 29.5 1.75 0 0 1 1 0 -0 -0 1 0 6 +2 11.041095890399999 8.5 -2.25 0 0 1 1 0 -0 -0 1 0 9 +1 0 0 5 0 0 1 1 0 -0 -0 1 0 +2 11.041095890399999 8.5 -2.25 0 0 1 1 0 -0 -0 1 0 9 +2 0 0 25 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 3.5 +1 0 3.5 0 0 0 1 1 0 -0 -0 1 0 +2 0 0 25 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 3.5 +2 -49.958904109599999 8.5 -2.25 0 0 1 -1.07187543957e-15 -1 0 1 -1.07187543957e-15 0 6.4000000000000004 +1 0 0 6 0 0 1 1 0 -0 -0 1 0 +1 -49.958904109599999 2.1000000000000001 0 2.22044604925e-16 -1 0 -1 -2.22044604925e-16 0 0 -0 -1 +2 -51.958904109599999 8.5 -2.25 0 0 1 -3.0514748616210506e-06 0.99999999999534428 0 -0.99999999999534428 -3.0514748616210506e-06 0 6.4000000000000004 +1 -51.958923638999998 14.9 0 -0 1 0 1 0 0 0 0 -1 +2 28.235903341899999 -16.5 -2.5 0 0 -1 0 1 0 1 -0 0 8 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +2 50.5 5.5 -2.5 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +1 0 0 -4.5 0 0 1 1 0 -0 -0 1 0 +1 31.875016778500001 -8.5 0 -0 -1 -0 -1 0 0 0 0 -1 +2 2.4817933703700001 -16.5 -2.5 0 0 1 2.7755575615600002e-16 1 -0 -1 2.7755575615600002e-16 0 8 +2 -22.5 -12.5 -2.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -47.7802294293 -13.5 -2.5 0 0 -1 0 1 0 1 -0 0 8 +1 -38.320556248099997 -5.5 0 -0 -1 -0 -1 0 0 0 0 -1 +2 -47.7802294293 30.5 -2.5 0 0 1 9.2981178312399991e-16 -1 0 1 9.2981178312399991e-16 -0 8 +1 -38.320556248099997 22.5 0 -0 -1 -0 -1 0 0 0 0 -1 +2 -22.5 29.5 -2.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 2.4817933703700001 33.5 -2.5 0 0 1 -0.98742266286065905 -0.15810276679794541 0 0.15810276679794541 -0.98742266286065905 0 8 +1 38.5463394728 25.5 0 -0 -1 -0 -1 0 0 0 0 -1 +2 36.511075809799998 33.5 -2.5 0 0 1 -2.9976021664900001e-15 -1 0 1 -2.9976021664900001e-15 0 8 +2 50.5 5.5 -2.5 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +3 50.5 5.5 3.3999999999999999 0 -4.4408920984999998e-15 -1 0.87758256189037243 0.4794255386042035 -2.1290770862065139e-15 0.4794255386042035 -0.87758256189037243 3.8972494648803417e-15 0 +0.78539816339699997 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +3 4.1448326252699997e-15 -5.9458610874400002e-15 -6.2000000000000002 -7.4014868308300001e-16 7.7098821154500002e-16 1 -0.4794255386042035 0.87758256189037243 -1.0314519909091968e-15 -0.87758256189037243 -0.4794255386042035 -2.7991013890231131e-16 0 +0.78539816339699997 +3 -8.1909787594599993e-15 8.5363814782300003e-15 -6.2000000000000002 1.3569392523199999e-15 -1.2335811384699999e-15 1 -0.52029602321325741 -0.85398597659942255 -3.4745089652686364e-16 0.85398597659942255 -0.52029602321325741 -1.8006344532354091e-15 0 +0.78539816339699997 +3 50.5 5.5 3.3999999999999999 0 -6.6613381477499997e-15 -1 -0.85398597659942255 0.52029602321325741 -3.4658677475530908e-15 0.52029602321325741 0.85398597659942255 -5.6886893635652717e-15 0 +0.78539816339699997 +1 0 0 -5 0 0 1 1 0 -0 -0 1 0 +1 0 8 13 0 0 1 1 0 -0 -0 1 0 +3 -22.5 29.5 1.3999999999999999 0 0 -1 1 0 0 0 -1 0 0 +0.78539816339699997 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 +3 3.5527136788e-15 -4.0430621813399996e-15 -4.2000000000000002 -7.4014868308300001e-16 7.7098821154500002e-16 1 -0.4794255386042035 0.87758256189037243 -1.0314519909091968e-15 -0.87758256189037243 -0.4794255386042035 -2.7991013890231131e-16 0 +0.78539816339699997 +3 1.7763568394e-15 -8.881784197e-16 -4.2000000000000002 -3.7007434154199999e-16 3.7007434154199999e-16 1 -0.52029602321325741 -0.85398597659942255 1.2349008977856575e-16 0.85398597659942255 -0.52029602321325741 5.0858650617370047e-16 0 +0.78539816339699997 +3 -22.5 29.5 1.3999999999999999 -8.8817841969999996e-15 0 -1 -0.50000000000018996 0.86602540378432902 4.4408920985016872e-15 0.86602540378432902 0.50000000000018996 -7.6918507455321975e-15 0 +0.78539816339699997 +1 0 0 -5 0 0 1 1 0 -0 -0 1 0 +1 0 6 12 0 0 1 1 0 -0 -0 1 0 +3 -22.5 -12.5 1.3999999999999999 8.8817841969999996e-15 1.7763568393999999e-14 -1 1 -8.3266725922100102e-16 8.8817841969999854e-15 -8.3266725922084325e-16 -1 -1.7763568394000006e-14 0 +0.78539816339699997 +3 -22.5 -12.5 1.3999999999999999 -8.8817841969999996e-15 -4.4408920984999998e-15 -1 -0.50000000000018996 0.86602540378432902 5.9496672573558842e-16 0.86602540378432902 0.50000000000018996 -9.9122967947830407e-15 0 +0.78539816339699997 +1 0 0 -5 0 0 1 1 0 -0 -0 1 0 +2 -22.5 -12.5 -2.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +3 -22.5 -12.5 -22.100000000000001 0 2.6645352590999999e-14 1 1 0 -0 -0 1 -2.6645352590999999e-14 0 +0.78539816339699997 +3 -22.5 -12.5 -22.100000000000001 1.7763568393999999e-14 3.5527136787999998e-14 1 -0.50000000000018996 0.86602540378432902 -2.1885618785125417e-14 -0.86602540378432902 -0.50000000000018996 3.3147269885071147e-14 0 +0.78539816339699997 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 17 +1 0 0 12 0 0 1 1 0 -0 -0 1 0 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 17 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 8 +3 -1.5720758028699999e-13 1.0524914273400001e-13 4.2000000000000002 1.9984014443300001e-14 -1.3322676295499999e-14 1 -0.52029602321325741 -0.85398597659942255 -9.797754844452552e-16 0.85398597659942255 -0.52029602321325741 -2.3997803585844695e-14 0 +0.78539816339699997 +3 1.22568621919e-13 1.3733458814599999e-13 4.2000000000000002 -1.55431223448e-14 -1.71390679427e-14 1 -0.4794255386042035 0.87758256189037243 7.5891773518210512e-15 -0.87758256189037243 -0.4794255386042035 -2.1857280006728061e-14 0 +0.78539816339699997 +2 -22.5 29.5 -2.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +3 -22.5 29.5 -22.100000000000001 1.7763568393999999e-14 3.5527136787999998e-14 1 -0.50000000000018996 0.86602540378432902 -2.1885618785125417e-14 -0.86602540378432902 -0.50000000000018996 3.3147269885071147e-14 0 +0.78539816339699997 +3 -22.5 29.5 -22.100000000000001 0 1.7763568393999999e-14 1 1 2.05359049863e-16 -3.647909527568257e-30 -2.05359049863e-16 1 -1.7763568393999999e-14 0 +0.78539816339699997 +3 50.5 5.5 -28.100000000000001 7.1054273575999997e-14 -8.8817841969999996e-15 1 -0.50000000000018996 0.86602540378432902 4.3218987533545698e-14 -0.86602540378432902 -0.50000000000018996 5.7093913865755894e-14 0 +0.78539816339699997 +3 50.5 5.5 -28.100000000000001 3.5527136787999998e-14 -7.9936057773e-14 1 1 3.8119244823699724e-16 -3.5527136787999967e-14 -3.8119244823415734e-16 1 7.9936057773000012e-14 0 +0.78539816339699997 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 23 +1 0 0 12 0 0 1 1 0 -0 -0 1 0 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 23 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 10 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 10 +3 -3.0686564400600002e-13 -8.7041485130600004e-14 3.2000000000000002 3.1086244689499997e-14 8.8817841969999996e-15 1 -0.52029602321325741 -0.85398597659942255 2.3758968640001452e-14 0.85398597659942255 -0.52029602321325741 -2.1926060033233814e-14 0 +0.78539816339699997 +3 -2.63788990651e-13 1.07969189145e-14 3.2000000000000002 2.6645352590999999e-14 -1.04083408559e-15 1 -0.4794255386042035 0.87758256189037243 1.3687880360573978e-14 -0.87758256189037243 -0.4794255386042035 2.2884494347200452e-14 0 +0.78539816339699997 +1 60.603823630699999 1.7 -4.5 -1.5742343614589928e-16 0.70710678118654757 -0.70710678118654757 -1 -2.2263035843295277e-16 -4.7134439086955444e-29 -1.5742343614596591e-16 0.70710678118654757 0.70710678118654757 +3 -51.958904109599999 8.5 2.2999999999999998 -0 8.8817841969999996e-15 -1 0.99999999999883615 1.5257374305097498e-06 1.3551270599072881e-20 1.5257374305097498e-06 -0.99999999999883615 -8.8817841969896624e-15 0 +0.78539816339699997 +1 -83.017303938500007 15.300000000000001 -4.5 0 -0.70710678118654757 -0.70710678118654757 1 0 0 0 -0.70710678118654757 0.70710678118654757 +3 -49.958904109599999 8.5 2.2999999999999998 1.7763568393999999e-14 -4.4408920984999998e-15 -1 -0.9999999999988346 -1.5266930903797474e-06 -1.7763561614100015e-14 -1.5266930903797474e-06 0.9999999999988346 -4.4409192180119519e-15 0 +0.78539816339699997 +3 11.041095890399999 8.5 4.9000000000000004 4.4408920984999998e-15 -0 -1 -0.50000000000018996 0.86602540378432902 -2.2204460492508436e-15 0.86602540378432902 0.50000000000018996 3.8459253727660988e-15 0 +0.78539816339699997 +3 11.041095890399999 8.5 4.9000000000000004 -0 -1.7763568393999999e-14 -1 1 3.7794838600300001e-16 -6.7137120041662023e-30 3.7794838600300001e-16 -1 1.7763568393999999e-14 0 +0.78539816339699997 +2 -56.388543820000002 -2.5 -2.25 0 0 1 -0.85183541999972945 -0.5238095238098337 0 0.5238095238098337 -0.85183541999972945 0 3 +2 -38.5 8.5 -2.25 0 0 1 -0.81223286206743084 0.58333333333330939 0 -0.58333333333330939 -0.81223286206743084 0 24 +2 -56.388543820000002 19.5 -2.25 0 0 -1 -0.85183541999972945 0.5238095238098337 0 0.5238095238098337 0.85183541999972945 0 3 +1 -101.601209582 -31.699999999999999 0 0 -0.70710678118654757 -0.70710678118654757 1 0 0 0 -0.70710678118654757 0.70710678118654757 +9 0 0 0 0 5 1 15 2 5 2 71 -31.699999999999999 0 71 -32.5 0.80000000000000004 +73.999932498999996 -31.699999999999999 0 74.082122430499993 -32.5 0.80000000000000004 +76.999844077000006 -31.3147433629 0 77.164264776300001 -32.104188388499999 0.80000000000000004 +79.934138087199997 -30.543852039600001 0 80.178925382000003 -31.312172124 0.80000000000000004 +85.538504313100006 -28.266498915 0 85.936790907800003 -28.972448936599999 0.80000000000000004 +90.385589047600007 -24.647042713800001 0 90.916691440899996 -25.253821061099998 0.80000000000000004 +92.562629609400005 -22.5336263714 0 93.153392034399999 -23.082489565700001 0.80000000000000004 +96.364010810600007 -17.7458581679 0 97.058936088099998 -18.163522475699999 0.80000000000000004 +98.8181968098 -12.1443684266 0 99.580337487400001 -12.4086062898 0.80000000000000004 +99.678127191599998 -9.1664285505599992 0 100.46382781 -9.3491130076500006 0.80000000000000004 +100.153771088 -6.00175461166 0 100.952504486 -6.0976976074499998 0.80000000000000004 +100.19845569100001 -2.8289666115399998 0 100.99841338100001 -2.8379795540699999 0.80000000000000004 +100.19948233300001 -2.71933652926 0 100.99946796099999 -2.7253074917300002 0.80000000000000004 +100.199990855 -2.60969449139 0 100.999990064 -2.61263924451 0.80000000000000004 +100.199991877 -2.50002261243 0 100.999991178 -2.5000008830899998 0.80000000000000004 + +243.59478752199999 6 +265.100062267 3 +286.60708227999999 3 +308.56748184100002 3 +309.35350848100001 6 + +0 2 +1.1313708498999999 2 + +1 100.2 -51.533201642400002 0 0.70710678118654757 -2.4048235389284615e-15 -0.70710678118654757 3.4009340638683458e-15 1 1.6536496725695456e-27 0.70710678118654757 -2.4048235389308001e-15 0.70710678118654757 +9 0 0 0 0 5 1 12 2 4 2 100.2 7.5 0 101 7.5 0.80000000000000004 +100.2 9.6809699653300001 0 101 9.7595016852600001 0.80000000000000004 +99.932382303899999 11.8619313793 0 100.72274600999999 12.019119654800001 0.80000000000000004 +99.396510492800004 13.9991336012 0 100.167540292 14.2333760225 0.80000000000000004 +97.692003087800003 18.4059546282 0 98.401615176799993 18.798978831199999 0.80000000000000004 +94.895791927999994 22.228794922799999 0 95.504677215300006 22.759522033700001 0.80000000000000004 +93.118707907000001 24.048197016300001 0 93.663560797499997 24.644515729199998 0.80000000000000004 +91.017193152399997 25.661658038100001 0 91.486228092999994 26.316161688499999 0.80000000000000004 +88.725037743800002 26.937935644900001 0 89.111517903700005 27.638405945900001 0.80000000000000004 +88.624460949500005 26.993092693200001 0 89.007271296200003 27.695574940699998 0.80000000000000004 +88.523529253199996 27.047590689700002 0 88.902676135500002 27.752050292 0.80000000000000004 +88.422255048899999 27.101440138200001 0 88.7978013237 27.8078143111 0.80000000000000004 + +62.094959105999997 6 +77.796852188800003 3 +95.859399766099997 3 +96.6845153915 6 + +0 2 +1.1313708498999999 2 + +1 135.551787093 2.0422271188800001 0 0.3319665256210112 0.62433823034302105 -0.70710678118602388 -0.88294759285836333 0.46947156278695085 2.140232435721145e-13 0.33196652562078671 0.62433823034195413 0.70710678118707126 +9 0 0 0 0 5 1 9 2 3 2 62.796057198 40.727134911599997 0 63.171634448200003 41.433492985900003 0.80000000000000004 +55.583984463199997 44.5618620065 0 55.8918290863 45.304234157400003 0.80000000000000004 +47.911829203899998 47.532368133200002 0 48.147679109199998 48.302606713000003 0.800000000002 +39.920285127100001 49.564612909099999 0 40.081031967500003 50.353951053199999 0.80000000000000004 +31.602084407900001 50.640506765600001 0 31.684773302899998 51.439948055099997 0.80000000000000004 +23.274783774399999 50.698883892399998 0 23.279270083299998 51.498873410500003 0.80000000000000004 +23.115519849199998 50.699624028199999 0 23.118516362800001 51.499620425700002 0.80000000000000004 +22.956266601100001 50.699990847400002 0 22.957786219399999 51.499990606600001 0.80000000000000004 +22.797018728600001 50.699991800799999 0 22.797080812699999 51.499991602800002 0.80000000000000004 + +120.58639119999999 6 +178.61598027900001 3 +179.74754108900001 6 + +0 2 +1.1313708498999999 2 + +1 135.551787093 50.700000000000003 0 0 0.70710678118654757 -0.70710678118654757 -1 0 0 0 0.70710678118654757 0.70710678118654757 +9 0 0 0 0 5 1 15 2 5 2 -12 50.700000000000003 0 -12 51.5 0.80000000000000004 +-17.395146434200001 50.700000000000003 0 -17.476276455800001 51.5 0.80000000000000004 +-22.790272716 50.016080707500002 0 -22.952572320800002 50.805796207900002 0.80000000000100002 +-28.0703760954 48.647586647799997 0 -28.312053104499999 49.416718485200001 0.80000000000000004 +-38.167235070799997 44.603325626500002 0 -38.560700314800002 45.311663715900004 0.80000000000000004 +-46.935695196499999 38.167852959100003 0 -47.4610327408 38.7794106335 0.80000000000000004 +-50.887142559099999 34.407592682999997 0 -51.471914774799998 34.962593621099998 0.80000000000000004 +-58.071200711000003 25.572774405099999 0 -58.764022512399997 25.9948903837 0.80000000000000004 +-62.709492242700001 15.153781134600001 0 -63.472039624099999 15.419258406499999 0.80000000000000004 +-64.358373071900004 9.4059114346899992 0 -65.145716843200006 9.5849943279899996 0.80000000000000004 +-65.191238028499995 3.4851502435200001 0 -65.991106268799996 3.5751530049900002 0.80000000000000004 +-65.199969163700004 -2.4372544982000002 0 -65.999968699999997 -2.4363109550600002 0.80000000000000004 +-65.199989732399999 -2.4581681825900001 0 -65.999989579200005 -2.4575390067599998 0.80000000000000004 +-65.200000056600004 -2.4790835333599999 0 -66.000000061999998 -2.47876850875 0.80000000000000004 +-65.2000001567 -2.5000012219399999 0 -66.0000001704 -2.5000000367799999 0.80000000000000004 + +206.34732287700001 6 +244.784677386 3 +283.22234807799998 3 +325.26716929499997 3 +325.41616118000002 6 + +0 2 +1.1313708498999999 2 + +1 -65.200000000000003 69.643739457099997 0 -0.70710678118654757 -0 -0.70710678118654757 0 -1 0 -0.70710678118654757 0 0.70710678118654757 +9 0 0 0 0 5 1 15 2 5 2 -65.200000000000003 -4.5 0 -66 -4.5 0.80000000000000004 +-65.200000000000003 -7.3961324085399998 0 -66 -7.4810604412200004 0.80000000000000004 +-64.815683064799998 -10.292565314899999 0 -65.604413127200004 -10.462771049000001 0.79999999999899996 +-64.044701936199999 -13.1202251169 0 -64.810688052800003 -13.373814243 0.80000000000000004 +-61.767762986000001 -18.502156188099999 0 -62.466683949100002 -18.914202451400001 0.80000000000000004 +-58.162061913499997 -23.101311403499999 0 -58.755023319300001 -23.648471878900001 0.80000000000000004 +-56.061385811000001 -25.147230317799998 0 -56.592692647299998 -25.754441267499999 0.80000000000000004 +-51.7602007208 -28.339419764199999 0 -52.165120637400001 -29.040458938499999 0.80000000000000004 +-46.831052239900004 -30.3981516644 0 -47.090835347599999 -31.159826493400001 0.80000000000000004 +-44.496038364599997 -31.080147596500002 0 -44.686998731400003 -31.861929247500001 0.80000000000000004 +-41.768787502400002 -31.555521804400001 0 -41.8794257355 -32.351280338999999 0.80000000000000004 +-39.019917637299997 -31.684083704100001 0 -39.049840129400003 -32.483616768300003 0.80000000000000004 +-38.678137464199999 -31.6947756669 0 -38.698328009699999 -32.494625999199997 0.80000000000000004 +-38.338923938100002 -31.700003949900001 0 -38.348825505599997 -32.500004460200003 0.80000000000000004 +-38.000003569900002 -31.7000003729 0 -37.999999836699999 -32.500000422600003 0.80000000000000004 + +103.76581805399999 6 +124.547002021 3 +145.33505857899999 3 +162.64698145599999 3 +165.07828899200001 6 + +0 2 +1.1313708498999999 2 + +1 0 0 1 0 0 1 1 0 -0 -0 1 0 +3 -9.9475983006400003e-14 -2.00728322852e-13 -11.199999999999999 8.8817841969999996e-15 1.7763568393999999e-14 1 1 -1.55820775386001e-16 -8.8817841969999965e-15 1.5582077538584323e-16 1 -1.7763568393999999e-14 0 +0.78539816339699997 +3 1.4921397451e-13 9.7168427782799995e-14 -11.199999999999999 -1.3322676295499999e-14 -8.8817841969999996e-15 1 -0.50000000000018996 0.86602540378432902 1.0305125977796671e-15 -0.86602540378432902 -0.50000000000018996 -1.5978668216799984e-14 0 +0.78539816339699997 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +1 0 8.8000000000000007 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 11.4 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 11.4 +3 -9.9475983006400003e-14 -2.00728322852e-13 14.199999999999999 8.8817841969999996e-15 1.7763568393999999e-14 -1 1 -1.55820775386001e-16 8.8817841969999965e-15 -1.5582077538584323e-16 -1 -1.7763568393999999e-14 0 +0.78539816339699997 +3 1.4921397451e-13 9.7168427782799995e-14 14.199999999999999 -1.3322676295499999e-14 -8.8817841969999996e-15 -1 -0.50000000000018996 0.86602540378432902 -1.0305125977796671e-15 0.86602540378432902 0.50000000000018996 -1.5978668216799984e-14 0 +0.78539816339699997 +1 0 0 3 0 0 1 1 0 -0 -0 1 0 +1 0 0 4.5999999999999996 0 0 1 1 0 -0 -0 1 0 +3 -3.0686564400600002e-13 -8.7041485130600004e-14 30.199999999999999 3.1086244689499997e-14 8.8817841969999996e-15 -1 -0.52029602321325741 -0.85398597659942255 -2.3758968640001452e-14 -0.85398597659942255 0.52029602321325741 -2.1926060033233814e-14 0 +0.78539816339699997 +1 0 10 20.399999999999999 0 0 1 1 0 -0 -0 1 0 +3 -2.63788990651e-13 1.07969189145e-14 30.199999999999999 2.6645352590999999e-14 -1.04083408559e-15 -1 -0.4794255386042035 0.87758256189037243 -1.3687880360573978e-14 0.87758256189037243 0.4794255386042035 2.2884494347200452e-14 0 +0.78539816339699997 +3 -8.881784197e-16 -6.5019172940700005e-16 -5.2000000000000002 -0 -0 1 -0.50000000000018996 0.86602540378432902 0 -0.86602540378432902 -0.50000000000018996 -0 0 +0.78539816339699997 +3 4.4408920985e-16 1.7763568393999999e-14 -5.2000000000000002 -0 -2.2204460492499999e-15 1 1 5.4157220713400002e-17 1.2025318677142929e-31 -5.4157220713400002e-17 1 2.2204460492499999e-15 0 +0.78539816339699997 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 8 +5 0 3.6082248300300001e-16 2.7999999999999998 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 9.0999999999999996 0.29999999999999999 +5 8.881784197e-16 0 2.7999999999999998 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9.0999999999999996 0.29999999999999999 +3 -8.881784197e-16 -6.5019172940700005e-16 8.1999999999999993 -0 -0 -1 -0.50000000000018996 0.86602540378432902 0 0.86602540378432902 0.50000000000018996 -0 0 +0.78539816339699997 +3 4.4408920985e-16 1.7763568393999999e-14 8.1999999999999993 -0 -2.2204460492499999e-15 -1 1 5.4157220713400002e-17 -1.2025318677142929e-31 5.4157220713400002e-17 -1 2.2204460492499999e-15 0 +0.78539816339699997 +5 6.9388939039100005e-17 1.3322676295499999e-15 22.875500200200001 0 0 -1 0.90369349581649183 -0.42817994537223303 0 -0.42817994537223303 -0.90369349581649183 -0 7.5 0.5 +5 -1.2212453270899999e-15 0 22.875500200200001 -0 0 -1 -0.4794255386042035 0.87758256189037243 0 0.87758256189037243 0.4794255386042035 0 7.5 0.5 +3 2.1760371282699999e-14 2.2692958623300001e-13 -9.1999999999999993 -2.2204460492499999e-15 -2.4424906541799999e-14 1 1 2.8346119777700043e-16 2.220446049250007e-15 -2.8346119777705466e-16 1 2.4424906541799999e-14 0 +0.78539816339699997 +3 4.3520742565300002e-14 8.1694006277899997e-14 -9.1999999999999993 -4.4408920984999998e-15 -8.8817841969999996e-15 1 -0.50000000000018996 0.86602540378432902 5.4714046962813543e-15 -0.86602540378432902 -0.50000000000018996 -8.2868174712677867e-15 0 +0.78539816339699997 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +1 0 6.5999999999999996 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 9.4000000000000004 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 9.4000000000000004 +3 2.1760371282699999e-14 2.2692958623300001e-13 12.199999999999999 -2.2204460492499999e-15 -2.4424906541799999e-14 -1 1 2.8346119777700043e-16 -2.220446049250007e-15 2.8346119777705466e-16 -1 2.4424906541799999e-14 0 +0.78539816339699997 +3 4.3520742565300002e-14 8.1694006277899997e-14 12.199999999999999 -4.4408920984999998e-15 -8.8817841969999996e-15 -1 -0.50000000000018996 0.86602540378432902 -5.4714046962813543e-15 0.86602540378432902 0.50000000000018996 -8.2868174712677867e-15 0 +0.78539816339699997 +1 0 0 3 0 0 1 1 0 -0 -0 1 0 +1 0 0 4.5999999999999996 0 0 -1 1 0 0 0 -1 0 +3 -1.5720758028699999e-13 1.0524914273400001e-13 27.199999999999999 1.9984014443300001e-14 -1.3322676295499999e-14 -1 -0.52029602321325741 -0.85398597659942255 9.797754844452552e-16 -0.85398597659942255 0.52029602321325741 -2.3997803585844695e-14 0 +0.78539816339699997 +1 0 8 19.399999999999999 0 0 1 1 0 -0 -0 1 0 +3 1.22568621919e-13 1.3733458814599999e-13 27.199999999999999 -1.55431223448e-14 -1.71390679427e-14 -1 -0.4794255386042035 0.87758256189037243 -7.5891773518210512e-15 0.87758256189037243 0.4794255386042035 -2.1857280006728061e-14 0 +0.78539816339699997 +3 8.1268325402600006e-14 -2.6559919212999999e-16 -3.2000000000000002 -1.3322676295499999e-14 5.9164567891600002e-30 1 -0.50000000000018996 0.86602540378432902 -6.6613381477525351e-15 -0.86602540378432902 -0.50000000000018996 -1.1537776118298293e-14 0 +0.78539816339699997 +3 6.4392935428299998e-15 3.99680288865e-14 -3.2000000000000002 -1.1102230246299999e-15 -6.6613381477499997e-15 1 1 2.1488187573399963e-16 1.1102230246300013e-15 -2.1488187573400703e-16 1 6.6613381477499997e-15 0 +0.78539816339699997 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 6 +5 -8.881784197e-16 -9.7144514654699994e-16 2.7999999999999998 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6.9000000000000004 0.29999999999999999 +5 -1.7763568394e-15 -4.4408920985e-16 2.7999999999999998 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 6.9000000000000004 0.29999999999999999 +3 6.4392935428299998e-15 3.99680288865e-14 6.2000000000000002 -1.1102230246299999e-15 -6.6613381477499997e-15 -1 1 2.1488187573399963e-16 -1.1102230246300013e-15 2.1488187573400703e-16 -1 6.6613381477499997e-15 0 +0.78539816339699997 +3 8.1268325402600006e-14 -2.6559919212999999e-16 6.2000000000000002 -1.3322676295499999e-14 5.9164567891600002e-30 -1 -0.50000000000018996 0.86602540378432902 6.6613381477525351e-15 0.86602540378432902 0.50000000000018996 -1.1537776118298293e-14 0 +0.78539816339699997 +5 -2.7755575615600002e-16 0 21.9255437353 0 0 -1 0.90369349581649183 -0.42817994537223303 0 -0.42817994537223303 -0.90369349581649183 -0 5.5999999999999996 0.40000000000000002 +5 -3.9968028886500003e-15 0 21.9255437353 -0 0 -1 -0.4794255386042035 0.87758256189037243 0 0.87758256189037243 0.4794255386042035 0 5.5999999999999996 0.40000000000000002 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +3 -8.1909787594599993e-15 8.5363814782300003e-15 64.200000000000003 1.3569392523199999e-15 -1.2335811384699999e-15 -1 -0.52029602321325741 -0.85398597659942255 3.4745089652686364e-16 -0.85398597659942255 0.52029602321325741 -1.8006344532354091e-15 0 +0.78539816339699997 +1 0 8 58 0 0 1 1 0 -0 -0 1 0 +3 4.1448326252699997e-15 -5.9458610874400002e-15 64.200000000000003 -7.4014868308300001e-16 7.7098821154500002e-16 -1 -0.4794255386042035 0.87758256189037243 1.0314519909091968e-15 0.87758256189037243 0.4794255386042035 -2.7991013890231131e-16 0 +0.78539816339699997 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 10 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 10 +2 0 0 24.900000000399999 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 7.7000000000000002 +2 0 0 24.900000000399999 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 7.7000000000000002 +5 -8.881784197e-16 1.09634523682e-15 23.5 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 0.29999999999999999 +5 -8.881784197e-16 -1.56819002228e-15 26.300000000000001 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 0.29999999999999999 +5 -8.881784197e-16 -4.4408920985e-16 23.5 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8 0.29999999999999999 +5 -2.6645352590999998e-15 1.3322676295499999e-15 26.300000000000001 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8 0.29999999999999999 +5 7.7715611723799997e-16 8.881784197e-16 26.9244997998 -0 0 -1 -0.4794255386042035 0.87758256189037243 0 0.87758256189037243 0.4794255386042035 0 7.5 0.5 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8 +1 0 -8 -7 0 0 1 1 0 -0 -0 1 0 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8 +5 -4.4408920985e-16 2.2204460492499999e-15 2.2679491924300001 0 -0 1 0.12796667928004415 0.99177846770034206 0 -0.99177846770034206 0.12796667928004415 0 9 1 +5 6.9388939039100002e-16 0 26.9244997998 0 0 -1 0.90369349581649183 -0.42817994537223303 0 -0.42817994537223303 -0.90369349581649183 -0 7.5 0.5 +5 0 8.881784197e-16 2.2679491924300001 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9 1 +2 0 0 23.900000000399999 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 5.7000000000000002 +2 0 0 23.900000000399999 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 5.7000000000000002 +5 8.881784197e-16 1.4294121442000001e-15 25.300000000000001 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 0.29999999999999999 +5 -4.4408920985e-16 -3.1918911957999998e-16 22.5 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 0.29999999999999999 +5 0 8.881784197e-16 25.300000000000001 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 6 0.29999999999999999 +5 0 1.7763568394e-15 22.5 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 6 0.29999999999999999 +5 1.1102230246299999e-16 -8.881784197e-16 25.874456264700001 -0 0 -1 -0.4794255386042035 0.87758256189037243 0 0.87758256189037243 0.4794255386042035 0 5.5999999999999996 0.40000000000000002 +5 4.7184478546599997e-16 1.3322676295499999e-15 25.874456264700001 0 0 -1 0.90369349581649183 -0.42817994537223303 0 -0.42817994537223303 -0.90369349581649183 -0 5.5999999999999996 0.40000000000000002 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +3 3.5527136788e-15 -4.0430621813399996e-15 60.200000000000003 -7.4014868308300001e-16 7.7098821154500002e-16 -1 -0.4794255386042035 0.87758256189037243 1.0314519909091968e-15 0.87758256189037243 0.4794255386042035 -2.7991013890231131e-16 0 +0.78539816339699997 +1 0 6 56 0 0 1 1 0 -0 -0 1 0 +3 1.7763568394e-15 -8.881784197e-16 60.200000000000003 -3.7007434154199999e-16 3.7007434154199999e-16 -1 -0.52029602321325741 -0.85398597659942255 -1.2349008977856575e-16 -0.85398597659942255 0.52029602321325741 5.0858650617370047e-16 0 +0.78539816339699997 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 6 +1 0 -6 -4.5 0 0 1 1 0 -0 -0 1 0 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 6 +5 0 8.881784197e-16 2.2679491924300001 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 7 1 +5 0 -8.881784197e-16 2.2679491924300001 0 -0 1 0.12796667928004415 0.99177846770034206 0 -0.99177846770034206 0.12796667928004415 0 7 1 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +2 0 0 1.4100000000099999 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 21.399999999999999 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 21.399999999999999 +2 0 0 1.4100000000099999 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +1 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 +2 0 0 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 11.5 +2 0 0 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 11.5 +1 0 21.399999999999999 0 0 0 1 1 0 -0 -0 1 0 +1 33 4.7999999999999998 20.5 0 0 1 1 0 -0 -0 1 0 +5 -4.4408920984999998e-15 2.6645352590999998e-15 0.59999999999999998 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9.4000000000000004 0.59999999999999998 +5 33 -4 19.899999999999999 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9.4000000000000004 0.59999999999999998 +5 -4.4408920984999998e-15 4.8572257327400001e-16 0.59999999999999998 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 9.4000000000000004 0.59999999999999998 +5 33 -4 19.899999999999999 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 9.4000000000000004 0.59999999999999998 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8.8000000000000007 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8.8000000000000007 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +2 0 0 1.4100000000099999 0 0 1 1 0 -0 -0 1 0 15.4 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 15.4 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 15.4 +2 0 0 1.4100000000099999 0 0 1 1 0 -0 -0 1 0 15.4 +1 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 +2 0 0 3.1000000000000001 0 0 -1 1 0 0 0 -1 0 9.5 +2 0 0 3.1000000000000001 0 0 -1 1 0 0 0 -1 0 9.5 +1 0 15.4 0 0 0 1 1 0 -0 -0 1 0 +1 33 4.7999999999999998 20.5 0 0 1 1 0 -0 -0 1 0 +5 -40 -22 19.899999999999999 0 -0 1 -1 -4.80096443081e-16 0 4.80096443081e-16 -1 -0 7.4000000000000004 0.59999999999999998 +5 -40 -22 19.899999999999999 -0 0 1 1 0 0 0 1 -0 7.4000000000000004 0.59999999999999998 +5 -8.881784197e-16 8.881784197e-16 0.59999999999999998 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 7.2000000000000002 0.59999999999999998 +5 -5.3290705181999996e-15 -8.3266726846900003e-16 0.59999999999999998 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 7.2000000000000002 0.59999999999999998 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6.5999999999999996 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6.5999999999999996 +5 -40 20 19.899999999999999 -0 0 1 1 0 0 0 1 -0 7.4000000000000004 0.59999999999999998 +5 -40 20 19.899999999999999 0 -0 1 -1 9.60192886162e-16 0 -9.60192886162e-16 -1 0 7.4000000000000004 0.59999999999999998 +3 33 -4 8 -0 -0 -1 0.87758256189037243 0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 10.589384154299999 +0.17453292519899999 +1 33 -4 8 0 0 1 1 0 -0 -0 1 0 +3 33 -4 8 -0 -0 -1 0.87758256189037243 0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 10.589384154299999 +0.17453292519899999 +2 33 -4 17.5 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8.8000000000000007 +2 33 -4 17.5 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8.8000000000000007 +2 -55.499766644799998 -13.999766644799999 50 0 0 1 -0.99999999997166822 -7.5275290616575032e-06 0 7.5275290616575032e-06 -0.99999999997166822 0 31.000233355999999 +1 0 0 52 0 0 1 1 0 -0 -0 1 0 +6 0 0 -1 +7 0 0 5 6 2 -55.5 -45 52 -60.369468613099997 -45 52 -65.238937226100006 -44.043882073600003 52 -69.8577641933 -42.130701301599998 52 -73.977075939700001 -39.363544493900001 52 -77.420310216800004 -35.920310216799997 52 + 0 6 24.756193660499999 6 +1 53.5 -45 52 -1.97215226305e-31 -1 -0 -1 1.97215226305e-31 0 0 0 -1 +2 53.499751589699997 -11.999751589700001 50 0 0 1 -1.83697019872e-16 -1 0 1 -1.83697019872e-16 0 33.000248411299999 +1 86.5 53 0 -1 0 0 0 -1 0 0 0 1 +2 60.500078944800002 -1.9983999996099999 50 0 0 1 0.99999999998964029 -4.5518777647183625e-06 0 4.5518777647183625e-06 0.99999999998964029 -0 25.999921055400002 +1 47.082969087899997 34.5823357644 52 0.46947156278594571 0.8829475928588979 -6.1645133442292872e-14 0.8829475928588979 -0.46947156278594571 1.5755129999074048e-26 -2.8940637135287487e-14 -5.4429422184345419e-14 -1 +2 5.2998818036899999 -44.0004740595 50 0 0 1 0.46947039019481945 0.88294821633566034 -0 -0.88294821633566034 0.46947039019481945 0 89.000474059599995 +6 0 0 -1 +7 0 0 5 6 2 5.2999999999999998 45 52 8.8637397867699992 45 52 12.4276487354 44.821590245800003 52 15.9795444002 44.464822848399997 52 19.5075314268 43.930901378999998 52 23.000001552000001 43.222180868300001 52 + 0 6 17.9076813235 6 +1 -29.5 45 52 -0 1 0 1 0 0 0 0 -1 +6 0 0 -1 +7 0 0 5 9 3 -86.5 -12 52 -86.5 -3.04646093727 52 -84.741976716099998 5.90707812546 52 -81.224192715800001 14.3997599683 52 -71.048196713199999 29.548196713199999 52 -55.899759968300003 39.724192715800001 52 -47.4070781255 43.241976716099998 52 -38.453539062700003 45 52 -29.5 45 52 + 0 6 45.519452859700003 3 91.038905719400006 6 +1 -86.5 -53 0 1 0 0 -0 1 0 0 -0 1 +1 -84.5 -12 52 1 0 0 0 -1 0 0 0 -1 +2 -29.5 -12 45 0 0 1 -3.8285686989299999e-16 1 0 -1 -3.8285686989299999e-16 0 55 +1 -29.5 43 52 -0 1 0 1 0 0 0 0 -1 +2 5.2999999999999998 -44 45 0 0 1 0.46947156278594571 0.8829475928588979 -0 -0.8829475928588979 0.46947156278594571 0 87 +1 46.144025962400001 32.816440578700004 52 0.46947156278594571 0.8829475928588979 0 0.8829475928588979 -0.46947156278594571 0 0 0 -1 +2 60.5 -1.9984474343 45 0 0 1 0.99999999999628053 -2.7274528211707652e-06 0 2.7274528211707652e-06 0.99999999999628053 -0 24 +1 84.5 -1.99851289317 52 1 0 0 0 -1 0 0 0 -1 +2 53.5 -12 45 0 0 1 -1.07187543957e-15 -1 0 1 -1.07187543957e-15 0 31 +1 -55.5 -43 52 -0 1 0 1 0 0 0 0 -1 +2 -55.5 -14 45 0 0 1 -1 -7.6571373978499999e-16 0 7.6571373978499999e-16 -1 0 29 +2 33 -4 17.5 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 23 +2 33 -4 17.5 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 23 +2 -40 20 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 20 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 -22 20.149999999999999 0 0 1 -1 1.2246467991500001e-16 0 -1.2246467991500001e-16 -1 0 17 +1 -57 20 20.5 1 0 0 0 -1 0 0 0 -1 +1 -23 -22 20.5 -1 0 0 0 1 0 0 0 -1 +2 -40 20 20.149999999999999 0 0 1 1 0 -0 -0 1 0 17 +2 -40 -22 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 -22 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +5 33 -4 20.300000000000001 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 23.5 0.5 +5 33 -4 20.300000000000001 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 23.5 0.5 +2 33 -4 17.5 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 24 +5 33 -4 20.300000000000001 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 23.5 0.5 +2 33 -4 17.5 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 24 +5 33 -4 20.300000000000001 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 23.5 0.5 +2 -22.5 -1 20.300000000000001 -0 1 0 1 0 0 0 0 -1 0.5 +5 -40 20 20.300000000000001 -0 0 1 1 -4.0602442043399999e-16 0 4.0602442043399999e-16 1 0 17.5 0.5 +1 -22 20 20.5 -1 1.69176841848e-16 0 -1.69176841848e-16 -1 0 0 0 1 +5 -40 -22 20.300000000000001 0 -0 1 -1 -4.0602442043399999e-16 0 4.0602442043399999e-16 -1 -0 17.5 0.5 +2 -22.5 -1 20.300000000000001 0 1 0 0 0 -1 -1 0 0 0.5 +2 -40 -22 45.5 0 0 1 -1 1.2246467991500001e-16 0 -1.2246467991500001e-16 -1 0 18 +2 -57.5 -1 20.300000000000001 0 -1 0 -1 0 0 -0 -0 -1 0.5 +5 -40 -22 20.300000000000001 0 -0 1 -1 -2.0898315757699999e-16 0 2.0898315757699999e-16 -1 -0 17.5 0.5 +1 -58 -22 20.5 1 0 0 -0 1 0 0 -0 1 +2 -57.5 -1 20.300000000000001 0 -1 0 0 0 -1 1 0 0 0.5 +2 -40 20 45.5 0 0 1 1 0 -0 -0 1 0 18 +5 -40 20 20.300000000000001 -0 0 1 1 -1.2538989454600001e-15 0 1.2538989454600001e-15 1 0 17.5 0.5 +1 7248.0524318899998 -2368.6446572300001 50.999999994600003 5.3319979771499996e-15 3.3284093715700001e-15 -1 -0.74740830984202555 -0.66436497377502279 -6.1964582010384234e-15 -0.66436497377502279 0.74740830984202555 -1.0547118733902419e-15 +2 -6.4589041095899997 -1 32.899999999999999 0 0 1 1 0 -0 -0 1 0 9.5 +1 0 0 32.299999999999997 0 0 1 1 0 -0 -0 1 0 +2 -6.4589041095899997 -1 32.899999999999999 0 0 1 1 0 -0 -0 1 0 9.5 +1 0 0 33.5 0 0 1 1 0 -0 -0 1 0 +2 -6.4589041095899997 -1 25 0 0 1 1 0 -0 -0 1 0 8 +2 -6.4589041095899997 -1 25 0 0 1 1 0 -0 -0 1 0 8 +2 11.159670332199999 -26 29.149999999999999 0 0 -1 5.5511151231300001e-16 1 0 1 -5.5511151231300001e-16 0 7 +2 19.6958653043 24 29.149999999999999 0 0 -1 0.42916563534376717 -0.90322580645151007 0 -0.90322580645151007 -0.42916563534376717 -0 7 +1 -41.458904109599999 17 33.5 0 -1 0 1 0 0 -0 0 1 +2 -15.3220746415 24 29.149999999999999 -0 0 -1 -4.9960036108099997e-16 -1 0 -1 4.9960036108099997e-16 0 7 +2 -15.3220746415 -26 29.149999999999999 0 0 -1 -0.98711701434023902 0.16000000000003875 0 0.16000000000003875 0.98711701434023902 0 7 +1 28.541095890400001 -19 33.5 0 1 -0 -1 0 0 0 0 1 +1 0 0 33.5 0 0 1 1 0 -0 -0 1 0 +2 0 -42.200000000000003 38.799999999999997 1 0 0 0 -1 0 0 0 -1 0.80000000000000004 +5 -55.5 -14 38.799999999999997 0 0 1 -1 -1.07085341382e-15 0 1.07085341382e-15 -1 0 28.199999999999999 0.80000000000000004 +5 53.5 -12 38.799999999999997 -0 0 1 -4.7055810315199999e-16 -1 0 1 -4.7055810315199999e-16 0 30.199999999999999 0.80000000000000004 +2 -83.700000000000003 1.42108547152e-14 38.799999999999997 0 -1 0 -1 0 0 -0 -0 -1 0.80000000000000004 +2 83.700000000000003 1.42108547152e-14 38.799999999999997 0 -1 0 -1.83697019872e-16 -0 -1 1 0 -1.83697019872e-16 0.80000000000000004 +5 60.5 -1.9984474343 38.799999999999997 0 -0 1 0.99999999999628053 -2.7274528217707653e-06 -0 2.7274528217707653e-06 0.99999999999628053 0 23.199999999999999 0.80000000000000004 +2 55.619498734399997 26.872186295799999 38.799999999999997 0.8829475928588979 -0.46947156278594571 0 -8.6240526998305395e-17 -1.6219484151110351e-16 -1 0.46947156278594571 0.8829475928588979 -1.8369701987173728e-16 0.80000000000000004 +5 5.2999999999999998 -44 38.799999999999997 0 0 1 0.46947156278594571 0.8829475928588979 -0 -0.8829475928588979 0.46947156278594571 0 86.200000000000003 0.80000000000000004 +2 0 42.200000000000003 38.799999999999997 1 0 0 0 -1.83697019872e-16 -1 0 1 -1.83697019872e-16 0.80000000000000004 +5 -29.5 -12 38.799999999999997 -0 0 1 -3.2774111428000002e-16 1 -0 -1 -3.2774111428000002e-16 0 54.200000000000003 0.80000000000000004 +1 0 0 38 0 0 1 1 0 -0 -0 1 0 +3 -15.3220746415 24 44.600000000000001 1.3322676295499999e-14 -0 -1 -0.98358233283401919 0.18045995272300352 -1.3103949030320378e-14 0.18045995272300352 0.98358233283401919 2.4042095344298095e-15 0 +0.78539816339699997 +3 -15.3220746415 -26 44.600000000000001 -4.4408920984999998e-15 -8.8817841969999996e-15 -1 0.33550826299311909 0.94203726330933435 -9.8569276723535754e-15 0.94203726330933435 -0.33550826299311909 -1.2035738509077817e-15 0 +0.78539816339699997 +3 33 -4 13.6 -1.7763568393999999e-14 -4.4408920984999998e-15 1 -0.52029602321325741 -0.85398597659942255 -1.303477356918509e-14 0.85398597659942255 -0.52029602321325741 1.2859259804471999e-14 0 +0.78539816339699997 +1 -117.18000000000001 17 37.600000000000001 0 -0.70710678118654757 0.70710678118654757 1 0 0 -0 0.70710678118654757 0.70710678118654757 +3 19.6958653043 24 44.600000000000001 -0 -0 -1 -0.73482806172198967 -0.67825343324299059 0 -0.67825343324299059 0.73482806172198967 0 0 +0.78539816339699997 +1 117.18000000000001 -19 37.600000000000001 0 0.70710678118654757 0.70710678118654757 -1 0 0 0 -0.70710678118654757 0.70710678118654757 +3 11.159670332199999 -26 44.600000000000001 1.3322676295499999e-14 -0 -1 0.99120552472633061 0.13233143145904414 1.3205510348240124e-14 0.13233143145904414 -0.99120552472633061 1.7630088250489903e-15 0 +0.78539816339699997 +2 -64.979991993599995 -23 29.149999999999999 0 0 -1 -4.5796699765800004e-16 1 0 1 4.5796699765800004e-16 0 7 +3 -40 -22 19.600000000000001 -1.7763568393999999e-14 -8.8817841969999996e-15 1 7.7232873164099901e-16 1 8.8817841970000138e-15 -1 7.7232873164115678e-16 -1.7763568393999993e-14 0 +0.78539816339699997 +1 -50 -16 33.5 0 1 -0 -1 0 0 0 0 1 +3 -64.979991993599995 -23 44.600000000000001 3.5527136787999998e-14 -0 -1 0.97090996135354468 -0.23944487245388771 3.4493651005839173e-14 -0.23944487245388771 -0.97090996135354468 -8.506790736854482e-15 0 +0.78539816339699997 +2 -64.979991993599995 21 29.149999999999999 0 0 -1 0.99919967974374424 -0.039999999999989759 0 -0.039999999999989759 -0.99919967974374424 -0 7 +3 -40 20 19.600000000000001 0 0 1 0 -1 0 1 0 -0 0 +0.78539816339699997 +1 -76 14 33.5 0 -1 0 1 0 0 -0 0 1 +3 -64.979991993599995 21 44.600000000000001 -0 -0 -1 -0.2780896383261115 -0.96055512754638528 0 -0.96055512754638528 0.2780896383261115 0 0 +0.78539816339699997 +2 -73.888543819999995 -12 35.75 -0 0 -1 3.8857805861899998e-16 -1 -0 -1 -3.8857805861899998e-16 0 4 +1 117.18000000000001 -16 37.600000000000001 0 0.70710678118654757 0.70710678118654757 -1 0 0 0 -0.70710678118654757 0.70710678118654757 +2 -56 -0.99999999994099997 45 0 0 1 -0.80000000000131999 0.59999999999824005 0 -0.59999999999824005 -0.80000000000131999 0 25 +3 -73.888543819999995 -12 33.600000000000001 0 4.4408920984999998e-15 1 -0.9999039642555646 -0.013858653109393965 6.1544783089360114e-17 0.013858653109393965 -0.9999039642555646 4.4404656141213629e-15 0 +0.78539816339699997 +2 -73.888543819999995 10 35.75 0 0 -1 -0.85183542000161672 0.52380952380676438 0 0.52380952380676438 0.85183542000161672 0 4 +1 -117.18000000000001 14 37.600000000000001 0 -0.70710678118654757 0.70710678118654757 1 0 0 -0 0.70710678118654757 0.70710678118654757 +3 -56 -0.99999999994099997 12.6 0 -8.8817841969999996e-15 1 -0.50000000000168998 0.86602540378346304 7.6918507455245061e-15 -0.86602540378346304 -0.50000000000168998 -4.4408920985150095e-15 0 +0.78539816339699997 +3 -73.888543819999995 10 33.600000000000001 0 0 1 0.51195392778001336 0.85901290783702244 -0 -0.85901290783702244 0.51195392778001336 0 0 +0.78539816339699997 +2 -68.458904109599999 -1 32.899999999999999 0 0 1 1 0 -0 -0 1 0 7.5 +2 -68.458904109599999 -1 32.899999999999999 0 0 1 1 0 -0 -0 1 0 7.5 +1 0 0 32.299999999999997 0 0 1 1 0 -0 -0 1 0 +2 -68.458904109599999 -1 20.5 0 0 1 1 0 -0 -0 1 0 6 +2 -68.458904109599999 -1 20.5 0 0 1 1 0 -0 -0 1 0 6 +2 -12.1983481148 -55 26 0 -0 1 0 1 0 -1 0 0 10 +1 53.5 -45 52 -1.97215226305e-31 -1 -0 -1 1.97215226305e-31 0 0 0 -1 +1 0 0 7 0 0 1 1 0 -0 -0 1 0 +2 -12.1983481148 -55 26 0 -0 1 0 1 0 -1 0 0 10 +1 0 0 7 0 0 1 1 0 -0 -0 1 0 +1 -24.340483738500001 -53 0 0.70710678118654757 -0.70710678118654757 0 0.70710678118654757 0.70710678118654757 0 -0 0 1 +1 16.732109310799999 -5.2094209951600003 23.499999994500001 5.3555698928500002e-15 3.2349796822300001e-15 -1 -0.99796128102408377 -0.063822265525205368 -5.5511151231305293e-15 -0.063822265525205368 0.99796128102408377 2.8865798640248658e-15 +2 53.499751589699997 -11.999751589700001 50 0 0 1 -1.83697019872e-16 -1 0 1 -1.83697019872e-16 0 33.000248411299999 +1 86.5 -53 0 0 1 -0 -1 0 0 0 0 1 +2 -14.8578643763 55 26 0 0 1 -0.70710678118654757 -0.70710678118654757 0 0.70710678118654757 -0.70710678118654757 0 10 +1 -19 45 0 0.70710678118654757 0.70710678118654757 -0 -0.70710678118654757 0.70710678118654757 0 0 0 1 +2 -14.8578643763 55 26 0 0 1 -0.70710678118654757 -0.70710678118654757 0 0.70710678118654757 -0.70710678118654757 0 10 +1 -29.5 45 52 -0 1 0 1 0 0 0 0 -1 +6 0 0 1 +7 0 0 5 6 2 23 43.222181183300002 0 19.507530172599999 43.930901568800003 0 15.9795434532 44.464822943599998 0 12.427648101899999 44.8215902775 0 8.8637394700400005 45 0 5.2999999999999998 45 0 + 0 6 17.8336924567 6 +1 -86.5 53 0 0 -1 0 1 0 0 -0 0 1 +1 -78.862687876999999 16.500914749 0 0.86602540378432902 -0.50000000000018996 0 0.50000000000018996 0.86602540378432902 0 -0 0 1 +6 0 0 1 +7 0 0 5 6 2 -78.862687876999999 16.500914749 0 -81.842187261500001 11.3402706638 0 -84.147352448999996 5.7902787984600002 0 -85.7105434594 -0.0314708573361 0 -86.494623900099995 -5.98978312823 0 -86.499977001199994 -11.948795860200001 0 + 0 6 29.965332826400001 6 +6 0 0 1 +7 0 0 5 6 2 -78.862687876999999 16.500914749 0 -81.842187261500001 11.3402706638 0 -84.147352448999996 5.7902787984600002 0 -85.7105434594 -0.0314708573361 0 -86.494623900099995 -5.98978312823 0 -86.499977001199994 -11.948795860200001 0 + 0 6 29.965332826400001 6 +1 -86.5 -53 0 1 0 0 -0 1 0 0 -0 1 +2 -55.499766644799998 -13.999766644799999 50 0 0 1 -0.99999999997166822 -7.5275290616575032e-06 0 7.5275290616575032e-06 -0.99999999997166822 0 31.000233355999999 +2 5.2998818036899999 -44.0004740595 50 0 0 1 0.46947039019481945 0.88294821633566034 -0 -0.88294821633566034 0.46947039019481945 0 89.000474059599995 +6 0 0 1 +7 0 0 5 6 2 23 43.222181183300002 0 19.507530172599999 43.930901568800003 0 15.9795434532 44.464822943599998 0 12.427648101899999 44.8215902775 0 8.8637394700400005 45 0 5.2999999999999998 45 0 + 0 6 17.8336924567 6 +2 -68.458904109599999 -1 20.5 0 0 1 1 0 -0 -0 1 0 6 +2 -68.458904109599999 -1 20.5 0 0 1 1 0 -0 -0 1 0 6 +2 -6.4589041095899997 -1 25 0 0 1 1 0 -0 -0 1 0 8 +2 -6.4589041095899997 -1 25 0 0 1 1 0 -0 -0 1 0 8 +2 60.500078944800002 -1.9983999996099999 50 0 0 1 0.99999999998964029 -4.5518777647183625e-06 0 4.5518777647183625e-06 0.99999999998964029 -0 25.999921055400002 +1 47.082969087899997 34.5823357644 52 0.46947156278594571 0.8829475928588979 -6.1645133442292872e-14 0.8829475928588979 -0.46947156278594571 1.5755129999074048e-26 -2.8940637135287487e-14 -5.4429422184345419e-14 -1 +2 5.2998818036899999 -44.0004740595 50 0 0 1 0.46947039019481945 0.88294821633566034 -0 -0.88294821633566034 0.46947039019481945 0 89.000474059599995 +1 86.5 53 0 -1 0 0 0 -1 0 0 0 1 +2 60.500078944800002 -1.9983999996099999 50 0 0 1 0.99999999998964029 -4.5518777647183625e-06 0 4.5518777647183625e-06 0.99999999998964029 -0 25.999921055400002 +2 53.499751589699997 -11.999751589700001 50 0 0 1 -1.83697019872e-16 -1 0 1 -1.83697019872e-16 0 33.000248411299999 +2 -55.499766644799998 -13.999766644799999 50 0 0 1 -0.99999999997166822 -7.5275290616575032e-06 0 7.5275290616575032e-06 -0.99999999997166822 0 31.000233355999999 +1 -77.4202418693 -35.9202418693 0 -0.70710678118654757 -0.70710678118654757 0 0.70710678118654757 -0.70710678118654757 0 0 0 1 +2 -40 -22 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 -22 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 20 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 20 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +3 33 -4 8 -0 -0 -1 0.87758256189037243 0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 10.589384154299999 +0.17453292519899999 +3 33 -4 8 -0 -0 -1 0.87758256189037243 0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 10.589384154299999 +0.17453292519899999 +2 -40.000000188800001 -22.000011602899999 10 5.76090795865e-17 2.3455816874200001e-17 1 -0.97417192851032441 -0.22580755900207519 6.1417648913248256e-17 0.22580755900207519 -0.97417192851032441 9.8414327213405798e-18 24.000006407600001 +1 -40.156212697500003 29.396980008700002 13 0 0 1 -0.25806358351695385 0.96612793503882721 0 -0.96612793503882721 -0.25806358351695385 0 +2 -70.199384206299996 -29.000057785500001 10 2.03942557704e-16 5.8439850052099999e-16 -1 6.6378342173397984e-06 0.99999999997796962 5.8439985424501339e-16 0.99999999997796962 -6.6378342173397984e-06 2.0393867855914374e-16 7.0000631979800003 +2 -10.050091973400001 -29.999935313400002 10 2.69383714935e-16 -1.7976870128500001e-16 -1 -0.96612865813894044 0.25806087638898412 -3.0665059563555102e-16 0.25806087638898412 0.96612865813894044 -1.041622965868107e-16 6.9999338036700003 +1 -4.0512084233500003 -23 10 0 -1 0 1 0 0 -0 0 1 +2 -40.000005889900002 20.000007856700002 10 1.2518649094500001e-16 3.3689686731300001e-16 1 0.96612835190482449 0.25806202286595314 -2.078865052534365e-16 -0.25806202286595314 0.96612835190482449 -2.9317973609025001e-16 14.0000039535 +2 -70.199302031900004 26.9999554113 10 0 0 -1 0.97417325212704642 -0.22580184862001074 0 -0.22580184862001074 -0.97417325212704642 -0 16.999958414799998 +2 -10.050077960799999 27.999952680300002 10 -1.3606594428900001e-16 1.04491966795e-16 -1 2.1308617872394242e-06 -0.99999999999772982 -1.0449225673248402e-16 -0.99999999999772982 -2.1308617872394242e-06 1.3606572163075202e-16 16.9999549184 +1 -0.937212455434 11 10 -0 -1 -0 -1 0 0 0 0 -1 +2 8.1756210378799992 27.9999879308 10 1.61279430607e-16 -9.6888452206000006e-16 -1 0.61295013385195052 -0.79012159406693605 8.6439283161495576e-16 -0.79012159406693605 -0.61295013385195052 4.6644753668234948e-16 16.999987833900001 +2 33.000154312699998 -3.9999358403 10 5.9907681504699996e-17 1.03890016243e-17 1 0.87102823584473155 -0.49123295121684862 -4.7077862206485369e-17 0.49123295121684862 0.87102823584473155 -3.8477740943114876e-17 23.4999954223 +2 32.999998499500002 -4.0000094690600001 10 -1.07608474141e-16 1.6621763078200001e-16 1 -0.76672449638603024 -0.64197628199302537 2.4201723468490427e-17 0.64197628199302537 -0.76672449638603024 1.9652521739178986e-16 23.499997080899998 +2 1.9476373989 -29.999971756400001 10 4.70738733509e-16 1.0081044974899999e-15 -1 -7.358452492328008e-07 0.99999999999972933 1.0081041510988663e-15 0.99999999999972933 7.358452492328008e-07 4.7073947531777785e-16 16.999971543899999 +1 -4.0512084233500003 -13 10 -0 1 0 1 0 0 0 0 -1 +2 -10.0500782264 -29.9999528508 10 2.2184535635e-16 -1.48044541144e-16 -1 -0.96612782444105971 0.25806399756801596 -2.5253593759852034e-16 0.25806399756801596 0.96612782444105971 -8.5779650954245655e-17 16.999954907700001 +2 -40.000005894799997 -22.000007838799998 10 5.5640088590099997e-18 3.34722974126e-16 1 -0.97417156187334042 -0.22580914073007888 8.1003806370467358e-17 0.22580914073007888 -0.97417156187334042 3.2482119843974757e-16 14.000003959200001 +2 -70.199302332399995 -28.999955369599999 10 -0 0 -1 -2.0828689786796477e-06 0.99999999999783085 0 0.99999999999783085 2.0828689786796477e-06 0 16.999958491400001 +2 1.94758182896 -30.000090517899999 10 -4.2166878908399999e-16 -5.48623878844e-16 -1 6.151433136810492e-06 0.99999999998107991 -5.4862647270098189e-16 0.99999999998107991 -6.151433136810492e-06 -4.2166541425291401e-16 7.0000925632 +2 33.000000815600004 -4.0000089966100001 10 -5.2933418242299998e-17 -1.2842066634500001e-16 1 -0.76672491026097311 -0.64197578769397745 -1.2302832878465087e-16 0.64197578769397745 -0.76672491026097311 -6.44813510075892e-17 33.499997306399997 +2 33.000231648499998 -3.99990394745 10 2.1012375303300001e-17 3.6438932552000002e-18 1 0.87102809313900131 -0.49123320425500078 -1.6512367833039363e-17 0.49123320425500078 0.87102809313900131 -1.3495909842927628e-17 33.499988350499997 +2 8.1755617599299999 28.000161024899999 10 -1.95855484681e-16 1.17654303265e-15 -1 0.61294571866033543 -0.7901250192064323 -1.0496648670811392e-15 -0.7901250192064323 -0.61294571866033543 -5.6640669608720442e-16 7.0001627314999997 +1 -0.937212455434 21 10 0 1 -0 -1 0 0 0 0 1 +2 -10.0500892177 27.999937760200002 10 -2.6938377685800001e-16 -1.79768782062e-16 -1 6.783127851679964e-06 -0.99999999997699462 1.7976695479326474e-16 -0.99999999997699462 -6.783127851679964e-06 2.6938499624643518e-16 6.9999367231200003 +2 -40.000000158600002 20.0000116416 10 3.6512598978999999e-17 9.8261528521100004e-17 1 0.96612805641133093 0.2580631291270884 -6.0633523809073324e-17 -0.2580631291270884 0.96612805641133093 -8.5510664025013637e-17 24.000006379399998 +2 -70.199389163800006 27.000064425600002 10 3.6359605203699998e-16 -4.57512413114e-16 -1 0.97417177852014902 -0.22580820608403457 4.57515069942239e-16 -0.22580820608403457 -0.97417177852014902 3.6359270892859827e-16 7.0000700167899996 +2 -65.199337741099995 16.091298859399998 10 0 0 1 -0.41666852074605776 0.90905849306812603 0 -0.90905849306812603 -0.41666852074605776 0 5 +2 -65.199337741099995 16.091272674700001 10 0 0 1 -1 2.1316282072799999e-15 0 -2.1316282072799999e-15 -1 0 5 +2 -65.199337741099995 -18.091297447999999 10 9.8355079826499999e-17 -6.3129980462000004e-16 1 -1 5.5511151231300001e-16 9.8355079826500344e-17 -5.5511151231300011e-16 -1 -6.3129980461999994e-16 5 +2 -65.199337741099995 -18.0912726864 10 0 -0 1 0.41666515720801467 0.90906003474403196 0 -0.90906003474403196 0.41666515720801467 0 5 +1 -13.918131324000001 -107.60845784999999 23.499999994500001 -0.1024327815450157 -0.99473992845615244 -3.9751455113206091e-15 0.99473992845615244 -0.1024327815450157 4.9960036108107669e-15 -5.3769094861553343e-15 -3.4424814150695685e-15 1 +1 26.946339062700002 -111.816453577 23.499999994500001 0.81025365742885125 -0.58607935522689247 2.3457727286495693e-15 0.58607935522689247 0.81025365742885125 5.8009153036689349e-15 -5.3004676337852713e-15 -3.3254038729169813e-15 1 +1 -13.918131324000001 -107.60845784999999 23.499999994500001 0.94483050731796181 0.3275596318859868 6.2148761907197492e-15 -0.3275596318859868 0.94483050731796181 1.4988010832399395e-15 -5.3810578930996683e-15 -3.4518555450954471e-15 1 +1 21.929764967699999 -84.875286455999998 52.999999998600003 0.99479715769590016 -0.10187548792598977 -1.9578655817198035e-14 -0.10187548792598977 -0.99479715769590016 2.6068036618197383e-13 -4.6033730655969162e-14 -2.573295022306419e-13 -1 +1 6436.4834616600001 -140.97027589300001 4381.4096540299997 -0.73134152220185855 0.30553578504594092 -0.60974376746288206 0.12288999641664211 -0.82036829100477338 -0.55847463317023205 -0.67084843793824711 -0.48336709773242542 0.56242210318011654 +1 15.631284151699999 -13.8641989612 32.999999994200003 1.10785473343e-16 -6.8905455708200003e-15 -1 -0.99792536962780554 -0.064381337771187458 3.3306690738751748e-16 -0.064381337771187458 0.99792536962780554 -6.8833827526772241e-15 +1 6424.3373077300002 -97.336597487000006 4439.9828429600002 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.74159448037033837 -0.43725522647176845 0.50876860517073041 1.6542323066914832e-13 0.75839575140757587 0.6517943573297782 +1 -4.9297582863200002 -82.124648221399994 52.999999993000003 0.99479715769590016 -0.10187548792598977 -1.9578655817198035e-14 -0.10187548792598977 -0.99479715769590016 2.6068036618197383e-13 -4.6033730655969162e-14 -2.573295022306419e-13 -1 +1 6456.2296827500004 -149.219742043 4397.8727357899998 -0.73134152220185855 0.30553578504594092 -0.60974376746288206 0.12288999641664211 -0.82036829100477338 -0.55847463317023205 -0.67084843793824711 -0.48336709773242542 0.56242210318011654 +1 15.631284150500001 -13.8641989618 41.999999996299998 1.10785473343e-16 -6.8905455708200003e-15 -1 -0.99792536962780554 -0.064381337771187458 3.3306690738751748e-16 -0.064381337771187458 0.99792536962780554 -6.8833827526772241e-15 +1 87.499999999799996 12.5163758555 23.499999994500001 -1 -1.5831780331199999e-13 -5.38458166943e-15 1.5831780331200002e-13 -1 -3.33066907388e-15 -5.384581669429473e-15 -3.3306690738808524e-15 1 +1 86.499999999799996 12.5163758555 23.499999994500001 0.93896990122733826 0.34399930899512393 6.2398995735322481e-15 -0.34399930899512393 0.93896990122733826 1.2767564783204604e-15 -5.419874539930799e-15 -3.3453570458339886e-15 1 +1 -164.72578242700001 -10.123963334500001 23.499999994500001 -0.54287075387791228 -0.8398162564418642 -5.8135202777090594e-15 0.83981625644186431 -0.54287075387791239 2.6645352590995699e-15 -5.3937101622988012e-15 -3.4357905715328274e-15 1 +1 -160.47072977600001 31.197483829599999 23.499999994500001 -0.99473992845615244 0.1024327815450157 -5.0037163637207664e-15 -0.1024327815450157 -0.99473992845615244 -3.8857805861905959e-15 -5.3754277715795972e-15 -3.3527965171053094e-15 1 +1 -154.507054498 -16.729513646600001 23.499999994500001 -0.1024327815450157 -0.99473992845615244 -3.9751455113206091e-15 0.99473992845615244 -0.1024327815450157 4.9960036108107669e-15 -5.3769094861553343e-15 -3.4424814150695685e-15 1 +1 6.4227351959299996 109.449712116 23.499999994500001 -0.42452690692797662 0.90541532198995012 8.3026030447495425e-16 -0.90541532198995012 -0.42452690692797662 -6.3282712403596507e-15 -5.3772459037261422e-15 -3.4382518167828176e-15 1 +1 -136.22655639600001 21.566132892999999 52.9999999964 -0.10187548792598977 -0.99479715769590016 2.573010962839742e-13 -0.99479715769590016 0.10187548792598977 1.6986412276798295e-14 -4.3110709380231623e-14 -2.5423190021652579e-13 -1 +1 6538.6059646399999 -120.189661801 4521.0794612500003 0.12288999641698768 -0.8203682910049177 -0.55847463316994406 0.7313415222018006 -0.3055357850455534 0.60974376746314596 -0.67084843793824722 -0.48336709773242559 0.56242210318011654 +1 1.77160207601 -5.1313998851599996 41.999999996299998 2.9895922470999999e-15 -4.0903707038399999e-15 -1 -0.99792536962780554 -0.064381337771187458 -2.7200464103303966e-15 -0.064381337771187458 0.99792536962780554 -4.274358644802947e-15 +1 -138.77344359899999 -3.3037960436099998 52.999999990900001 -0.10187548792598977 -0.99479715769590016 2.573010962839742e-13 -0.99479715769590016 0.10187548792598977 1.6986412276798295e-14 -4.3110709380231623e-14 -2.5423190021652579e-13 -1 +1 6541.6782145500001 -140.69886907599999 4507.1175954299997 0.12288999641698768 -0.8203682910049177 -0.55847463316994406 0.7313415222018006 -0.3055357850455534 0.60974376746314596 -0.67084843793824722 -0.48336709773242559 0.56242210318011654 +1 1.7716020772600001 -5.1313998844900004 32.999999994200003 2.9860183649199999e-15 -4.03497471773e-15 -1 -0.99792536962780554 -0.064381337771187458 -2.7200464103278296e-15 -0.064381337771187458 0.99792536962780554 -4.2188474935724441e-15 +1 6424.3373077300002 -97.336597487000006 4439.9828429600002 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.74159448037033837 -0.43725522647176845 0.50876860517073041 1.6542323066914832e-13 0.75839575140757587 0.6517943573297782 +1 -150.035529897 36.090291605399997 23.499999994500001 -0.1024327815450157 -0.99473992845615244 -3.9751455113206091e-15 0.99473992845615244 -0.1024327815450157 4.9960036108107669e-15 -5.3769094861553343e-15 -3.4424814150695685e-15 1 +1 52.734826902000002 104.68075066500001 23.499999994500001 0.1024327815450157 0.99473992845615244 3.9751455113206091e-15 -0.99473992845615244 0.1024327815450157 -4.9960036108107669e-15 -5.3769094861553343e-15 -3.4424814150695685e-15 1 +1 -15.3075350256 78.276079731099998 23.499999994500001 0.82035874698441591 -0.57184921635528985 2.4491601548712418e-15 0.57184921635528985 0.82035874698441591 5.7731597280529266e-15 -5.3105668221953143e-15 -3.3355117653546696e-15 1 +1 18.329705288 11.8682050077 32.9999999988 5.9591354081500002e-16 -3.96769201162e-15 -1 0.10243278158104553 0.99473992845244219 -3.8857805861927156e-15 0.99473992845244219 -0.10243278158104553 9.9920072216128523e-16 +1 41.149169101799998 81.920381622400001 52.999999991999999 -0.99479715769590016 0.10187548792598977 1.902776238319809e-14 0.10187548792598977 0.99479715769590016 -2.6006974351797389e-13 -4.542349595179902e-14 -2.5677817907745405e-13 -1 +1 18.368715843899999 11.8641989607 41.999999996299998 6.8797638096599997e-16 -6.3526689918699996e-15 -1 -0.99792536962780554 -0.064381337771187458 -2.775557561565641e-16 -0.064381337771187458 0.99792536962780554 -6.3837823915965386e-15 +1 9.8508308956100006 81.079618379899998 52.999999995099998 -0.99479715769590016 0.10187548792598977 1.902776238319809e-14 0.10187548792598977 0.99479715769590016 -2.6006974351797389e-13 -4.542349595179902e-14 -2.5677817907745405e-13 -1 +2 21.2909982183 79.908050263700005 35.9999999988 5.9293703800799996e-16 -4.0777774832000003e-15 -1 0.43439084691396884 -0.90072448180193543 3.9305204325658755e-15 -0.90072448180193543 -0.43439084691396884 1.2372763081530302e-15 11.4999999998 +2 21.2909982079 79.9080502698 35.999999994299998 6.0304357727700005e-16 -6.45625595758e-15 -1 -0.27121406416397958 -0.96251905508392754 6.0507154842085996e-15 -0.96251905508392754 0.27121406416397958 -2.3314683517132669e-15 11.5 +2 23.161170569300001 80.6168936097 45.0000000012 6.3285417819799996e-16 -4.0332696041599998e-15 -1 0.35324255489412487 -0.93553177252933062 3.9968028886505596e-15 -0.93553177252933062 -0.35324255489412487 8.3266726846812627e-16 11.5 +1 27.223459950500001 69.858278228900005 52.999999995899998 -0.35324255489412487 0.93553177252933062 -2.7768325948409812e-13 0.93553177252933062 0.35324255489412487 -5.3124171728318789e-14 4.8390193490344427e-14 -2.7854723009482594e-13 -1 +1 23.776514175599999 93.141711997300007 52.999999996699998 0.35324255489412487 -0.93553177252933062 2.7768325948409812e-13 -0.93553177252933062 -0.35324255489412487 5.3124171728318789e-14 4.8390193490344427e-14 -2.7854723009482594e-13 -1 +2 27.8388294288 82.3831063855 45.0000000016 5.4171342637599998e-16 -3.9490123110599997e-15 -1 -0.3532448044399884 0.93553092313196928 -3.8857805861881788e-15 0.93553092313196928 0.3532448044399884 -8.8817841970097503e-16 11.5 +2 29.7090017885 83.091949733700005 35.999999991700001 5.5888520866500001e-16 -6.53020587755e-15 -1 0.99479715769590016 -0.10187548792598977 1.2212453270907945e-15 -0.10187548792598977 -0.99479715769590016 6.4392935428284362e-15 11.5 +9 0 0 0 0 1 1 2 2 2 2 56.570691987083556 92.054726186609955 -8.8717077201267784 83.352079537617072 89.299968185533032 -8.8713216195033056 +59.101229144372994 116.65626824409014 -8.8757495534227928 85.882616694907398 113.90151024301366 -8.8753634527997747 + +57.381966009279971 2 +82.618033988073961 2 + +-13.736067974419093 2 +13.736067977646652 2 + +9 0 1 0 0 2 1 5 2 3 2 69.536384999623166 114.38869655169357 3.1245969367955695 1 69.53635668930643 114.38680603282556 -8.8754029057777188 1 +80.07938392204305 118.37095454692401 3.1239177918528185 0.70710635604500927 80.079355611726314 118.36906402805556 -8.8760820507191056 0.70710635604500927 +84.061629295036838 107.82795097058103 3.1256374753897944 1 84.061600984718311 107.82606045171347 -8.8743623671821297 1 +88.043874668028835 97.284947394239381 3.1273571589258609 0.70710635604500927 88.043846357710322 97.283056875370931 -8.872642683646518 0.70710635604500927 +77.5008661684559 93.302714754541952 3.1280362997317752 1 77.500837858139164 93.300824235673943 -8.8719635428401489 1 + +0 3 +1.5707975292763938 2 +3.1415950585527876 3 + +-5.9999999953133738 2 +6.0000000023533175 2 + +6 -0 -0 -1 +8 3.8922169017261097 7.0338119599827928 +7 1 0 2 5 3 69.536356688621012 114.3868060326629 -8.8754029057758999 1 80.079355609041698 118.36906402902218 -8.8760820507181961 0.70710635609732231 84.061600984721878 107.82606045526799 -8.8743623671825844 1 88.043846360403847 97.283056881514256 -8.872642683646518 0.70710635609732231 77.500837864008403 93.30082423756842 -8.8719635428392394 1 + 3.8922169017260813 3 5.4630144308545114 2 7.0338119599829421 3 +6 -0 -0 1 +8 3.8922169017261097 7.0338119599827928 +7 1 0 2 5 3 69.536356688621012 114.3868060326629 -8.8754029057758999 1 80.079355609041698 118.36906402902218 -8.8760820507181961 0.70710635609732231 84.061600984721878 107.82606045526799 -8.8743623671825844 1 88.043846360403847 97.283056881514256 -8.872642683646518 0.70710635609732231 77.500837864008403 93.30082423756842 -8.8719635428392394 1 + 3.8922169017260813 3 5.4630144308545114 2 7.0338119599829421 3 +9 0 0 0 0 1 1 2 2 2 2 72.916954947898304 91.571311342151319 3.1283315849700557 72.916926637581568 91.569420823279302 -8.871668264494474 +77.500866177452735 93.302714758790799 3.1280363067135113 77.500837867135999 93.300824239917901 -8.8719635427510184 + +-1.6696439786301198e-09 2 +5.0000000020077913 2 + +1.9999999920137803 2 +13.999999996572416 2 + +2 27.424211249199999 100.186300702 33.999999996299998 7.8154559352599992e-15 8.4870486415000004e-14 -1 0.55720717218914495 0.83037351069321608 7.4829031859719546e-14 0.83037351069321608 -0.55720717218914495 -4.0800696154989415e-14 2 +2 -16 0 0 1 0 0 0 0.4794255386042035 -0.87758256189037243 -0 0.87758256189037243 0.4794255386042035 2 +2 27.424211249199999 100.186300702 33.999999996299998 7.8154559352599992e-15 8.4870486415000004e-14 -1 -0.55720717218914495 -0.83037351069321608 -7.4829031859719546e-14 -0.83037351069321608 0.55720717218914495 4.0800696154989415e-14 2 +2 -16 0 0 1 0 0 0 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 2 +2 27.424211249199999 100.186300702 33.999999996299998 7.8154559352599992e-15 8.4870486415000004e-14 -1 0.55720717218914495 0.83037351069321608 7.4829031859719546e-14 0.83037351069321608 -0.55720717218914495 -4.0800696154989415e-14 2 +2 27.424211249199999 100.186300702 33.999999996299998 7.8154559352599992e-15 8.4870486415000004e-14 -1 -0.55720717218914495 -0.83037351069321608 -7.4829031859719546e-14 -0.83037351069321608 0.55720717218914495 4.0800696154989415e-14 2 +2 25.500000001899998 81.5 41.999999994200003 1.32556210217e-16 8.4147218736300005e-17 -1 -0.97594548188412822 0.21801471599402863 -1.11022302462482e-16 0.21801471599402863 0.97594548188412822 1.1102230246251146e-16 5 +2 0 0 34 0 0 1 1 0 -0 -0 1 0 5 +2 25.500000001899998 81.5 41.999999994200003 1.32556210217e-16 8.4147218736300005e-17 -1 -0.97594548188412822 0.21801471599402863 -1.11022302462482e-16 0.21801471599402863 0.97594548188412822 1.1102230246251146e-16 5 +2 0 0 34 0 0 1 1 0 -0 -0 1 0 5 +1 27.242425188999999 98.194579379000004 49.999999996299998 7.7550514461299993e-15 8.4967468433100002e-14 -1 0.99586066148098695 -0.090893030066398803 6.5570118441970501e-27 -0.090893030066398803 -0.99586066148098695 -8.532063944241141e-14 +2 8.4999999956199996 -83.499999997499998 41.999999994200003 1.32556210217e-16 8.4147218736300005e-17 -1 -0.97594548188412822 0.21801471599402863 -1.11022302462482e-16 0.21801471599402863 0.97594548188412822 1.1102230246251146e-16 5 +2 8.4999999956199996 -83.499999997499998 41.999999994200003 1.32556210217e-16 8.4147218736300005e-17 -1 -0.97594548188412822 0.21801471599402863 -1.11022302462482e-16 0.21801471599402863 0.97594548188412822 1.1102230246251146e-16 5 +2 8.5 -83.5 44.999999988399999 -3.7372158294600001e-16 -9.0990075420400002e-16 -1 -0.99463120722637144 0.10348314650903866 2.7755575615615316e-16 0.10348314650903866 0.99463120722637144 -9.4368957093170117e-16 11.5 +2 8.5 -83.5 44.999999988399999 -3.7372158294600001e-16 -9.0990075420400002e-16 -1 0.99463120722637144 -0.10348314650903866 -2.7755575615615316e-16 -0.10348314650903866 -0.99463120722637144 9.4368957093170117e-16 11.5 +2 6440.9897887300003 -148.96197268500001 4394.1405533999996 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.7313415222018449 -0.30553578504595075 0.60974376746289349 -0.12288999641647205 0.82036829100489594 0.5584746331700895 11.5 +2 6440.9897887300003 -148.96197268500001 4394.1405533999996 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.7313415222018449 0.30553578504595075 -0.60974376746289349 0.12288999641647205 -0.82036829100489594 -0.5584746331700895 11.5 +2 6.7074263208199998 -100.90794875 33.9999999968 2.29643590168e-13 1.6778850952899999e-13 -1 0.99139318356517259 0.1309181254850228 2.4963364708745188e-13 0.1309181254850228 -0.99139318356517259 -1.3627987627316524e-13 2 +2 6.7074263208199998 -100.90794875 33.9999999968 2.29643590168e-13 1.6778850952899999e-13 -1 -0.99139318356517259 -0.1309181254850228 -2.4963364708745188e-13 -0.1309181254850228 0.99139318356517259 1.3627987627316524e-13 2 +1 8.3219540749200007 -99.727567399799995 49.9999999968 2.2961184054199999e-13 1.6786923210699999e-13 -1 -0.59019067496078803 0.80726387704971014 -4.1730110797467348e-25 0.80726387704971014 0.59019067496078803 2.8443220001483421e-13 +2 6.7074263208199998 -100.90794875 33.9999999968 2.29643590168e-13 1.6778850952899999e-13 -1 0.99139318356517259 0.1309181254850228 2.4963364708745188e-13 0.1309181254850228 -0.99139318356517259 -1.3627987627316524e-13 2 +2 6.7074263208199998 -100.90794875 33.9999999968 2.29643590168e-13 1.6778850952899999e-13 -1 -0.99139318356517259 -0.1309181254850228 -2.4963364708745188e-13 -0.1309181254850228 0.99139318356517259 1.3627987627316524e-13 2 +2 8.4999999983999999 -83.499999998700005 35.999999991499998 -1.1078518587799999e-16 -7.0754438162300004e-15 -1 -0.99479690971357726 0.1018779094029567 -6.1062266354211155e-16 0.1018779094029567 0.99479690971357726 -7.0499162063677127e-15 13.5 +2 8.4999999983999999 -83.499999998700005 35.999999991499998 -1.1078518587799999e-16 -7.0754438162300004e-15 -1 -0.99479690971357726 0.1018779094029567 -6.1062266354211155e-16 0.1018779094029567 0.99479690971357726 -7.0499162063677127e-15 13.5 +2 6434.9521527899997 -153.312276564 4399.2023523300004 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.73134122306793947 -0.30553378815188442 0.6097451268678169 -0.12289177660544509 0.82036903472004497 0.55847314896533662 13.5 +1 6441.9685271099997 -143.26182119200001 4385.9827139700001 0.73134152220185855 -0.30553578504594092 0.60974376746288206 -0.12288999641664211 0.82036829100477338 0.55847463317023205 -0.67084843793824711 -0.48336709773242542 0.56242210318011654 +2 6434.9521527899997 -153.312276564 4399.2023523300004 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.7313415222018449 0.30553578504595075 -0.60974376746289349 0.12288999641647205 -0.82036829100489594 -0.5584746331700895 6 +1 6450.74462537 -146.92825061299999 4393.2996391799998 0.73134152220185855 -0.30553578504594092 0.60974376746288206 -0.12288999641664211 0.82036829100477338 0.55847463317023205 -0.67084843793824711 -0.48336709773242542 0.56242210318011654 +2 6434.9521527899997 -153.312276564 4399.2023523300004 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.73134122306793947 -0.30553378815188442 0.6097451268678169 -0.12289177660544509 0.82036903472004497 0.55847314896533662 13.5 +2 6435.09018242 -169.11882295000001 4391.1163125599996 0.67084843793829319 0.48336709773221126 -0.56242210318024577 0.65081038396700108 -0.74732185344086954 0.13399959511292645 -0.3555393331777465 -0.45592356398813438 -0.81592002449007262 3 +2 6435.09018242 -169.11882295000001 4391.1163125599996 0.67084843793829319 0.48336709773221126 -0.56242210318024577 -0.65081038396700108 0.74732185344086954 -0.13399959511292645 0.3555393331777465 0.45592356398813438 0.81592002449007262 3 +1 6428.36239836 -94.436394900600007 4436.6083103399997 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.74159448037033837 -0.43725522647176845 0.50876860517073041 1.6542323066914832e-13 0.75839575140757587 0.6517943573297782 +2 -137.5 9.1311684270499995 41.999999994200003 3.5275243950799999e-16 -2.2402162931099999e-15 -1 -0.97594548188412822 0.21801471599402863 -8.326672684690092e-16 0.21801471599402863 0.97594548188412822 -2.1094237467883772e-15 5 +2 -137.5 9.1311684270499995 41.999999994200003 3.5275243950799999e-16 -2.2402162931099999e-15 -1 -0.97594548188412822 0.21801471599402863 -8.326672684690092e-16 0.21801471599402863 0.97594548188412822 -2.1094237467883772e-15 5 +2 -137.5 9.1311684270499995 44.999999987000002 5.7837690158399994e-17 -2.12681934891e-15 -1 -0.99463421765463633 0.10345420760196217 -2.7755575615565657e-16 0.10345420760196217 0.99463421765463633 -2.1094237467909757e-15 12.5 +2 -137.49999999600001 9.1311684221299991 35.999999995899998 2.7557041483599998e-15 -4.2209968411500002e-15 -1 0.82380396417274382 -0.56687479094882376 4.6629367034287948e-15 -0.56687479094882376 -0.82380396417274382 1.9151347174816183e-15 12.5 +2 6534.77530209 -134.311202221 4518.5979051699996 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.7313415222018449 -0.30553578504595075 0.60974376746289349 -0.12288999641647205 0.82036829100489594 0.5584746331700895 12.5 +2 -137.49999999600001 9.1311684221299991 35.999999995899998 2.8070296638e-15 -4.1935665683500002e-15 -1 0.10187548792500015 0.99479715769600141 -3.8857805861839805e-15 0.99479715769600141 -0.10187548792500015 3.2196467714132273e-15 12.5 +2 6528.7376661500002 -138.6615061 4523.6597040899997 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.12288999641628279 0.8203682910048169 0.55847463317024726 -0.73134152220187665 0.30553578504616308 -0.60974376746274905 12.5 +2 -137.5 9.1311684270499995 44.999999987000002 5.7837690158399994e-17 -2.12681934891e-15 -1 0.99463421765463633 -0.10345420760196217 2.7755575615565657e-16 -0.10345420760196217 -0.99463421765463633 2.1094237467909757e-15 12.5 +2 6534.77530209 -134.311202221 4518.5979051699996 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.7313415222018449 0.30553578504595075 -0.60974376746289349 0.12288999641647205 -0.82036829100489594 -0.5584746331700895 12.5 +2 -137.49999999600001 9.1311684221299991 35.999999995899998 2.8070296638e-15 -4.1935665683500002e-15 -1 0.10187548792500015 0.99479715769600141 -3.8857805861839805e-15 0.99479715769600141 -0.10187548792500015 3.2196467714132273e-15 12.5 +2 -137.49999999600001 9.1311684221299991 35.999999995899998 2.7557041483599998e-15 -4.2209968411500002e-15 -1 0.82380396417274382 -0.56687479094882376 4.6629367034287948e-15 -0.56687479094882376 -0.82380396417274382 1.9151347174816183e-15 12.5 +2 6528.7376661500002 -138.6615061 4523.6597040899997 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.58259567309789428 -0.12573986351191418 -0.80297681685813127 0.45885145200093208 -0.86634042705736891 -0.19725518863313146 12.5 +2 -155.902688676 11.0261748853 33.999999992399999 1.2085299515399999e-13 -1.09153403715e-15 -1 -0.87290976317547397 0.48788169196326486 -1.0602629885180508e-13 0.48788169196326486 0.87290976317547397 5.8009153036695189e-14 2 +2 -155.902688676 11.0261748853 33.999999992399999 1.2085299515399999e-13 -1.09153403715e-15 -1 0.87290976317547397 -0.48788169196326486 1.0602629885180508e-13 -0.48788169196326486 -0.87290976317547397 -5.8009153036695189e-14 2 +1 6540.8794295799999 -135.36647518500001 4510.7476805400001 -0.12288999641698768 0.8203682910049177 0.55847463316994406 -0.7313415222018006 0.3055357850455534 -0.60974376746314596 -0.67084843793824722 -0.48336709773242559 0.56242210318011654 +2 6528.7376661500002 -138.6615061 4523.6597040899997 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.12288999641628279 -0.8203682910048169 -0.55847463317024726 0.73134152220187665 -0.30553578504616308 0.60974376746274905 6 +1 6539.4047496200001 -125.522055693 4517.4493761399999 -0.12288999641698768 0.8203682910049177 0.55847463316994406 -0.7313415222018006 0.3055357850455534 -0.60974376746314596 -0.67084843793824722 -0.48336709773242559 0.56242210318011654 +2 6540.2549390000004 -145.76401941699999 4536.6272300999999 0.67084843793829319 0.48336709773221126 -0.56242210318024577 0.65081038396700108 -0.74732185344086954 0.13399959511292645 -0.3555393331777465 -0.45592356398813438 -0.81592002449007262 3 +2 6540.2549390000004 -145.76401941699999 4536.6272300999999 0.67084843793829319 0.48336709773221126 -0.56242210318024577 -0.65081038396700108 0.74732185344086954 -0.13399959511292645 0.3555393331777465 0.45592356398813438 0.81592002449007262 3 +2 -155.902688676 11.0261748853 33.999999992399999 1.2085299515399999e-13 -1.09153403715e-15 -1 -0.87290976317547397 0.48788169196326486 -1.0602629885180508e-13 0.48788169196326486 0.87290976317547397 5.8009153036695189e-14 2 +2 -155.902688676 11.0261748853 33.999999992399999 1.2085299515399999e-13 -1.09153403715e-15 -1 0.87290976317547397 -0.48788169196326486 1.0602629885180508e-13 -0.48788169196326486 -0.87290976317547397 -5.8009153036695189e-14 2 +1 6428.36239836 -94.436394900600007 4436.6083103399997 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.74159448037033837 -0.43725522647176845 0.50876860517073041 1.6542323066914832e-13 0.75839575140757587 0.6517943573297782 +1 -153.90278201699999 11.0068524218 49.999999992399999 1.20953689596e-13 -1.1131024267e-15 -1 0.0096612317695025773 0.99995332921126678 5.5511151231623464e-17 0.99995332921126678 -0.0096612317695025773 1.2095879853243393e-13 +2 -41.992823476399998 109.942626936 37.249999994500001 -4.0715155394300002e-15 2.0148165554899999e-15 1 0.42452690692797662 -0.90541532198995012 3.552713678803071e-15 0.90541532198995012 0.42452690692797662 2.8310687127906494e-15 40 +1 -113.339099941 32.311497484699998 23.499999994500001 0.42452690692797662 -0.90541532198995012 -8.3026030447495425e-16 0.90541532198995012 0.42452690692797662 6.1339822110496622e-15 -5.2013336396943241e-15 -3.3557708961198089e-15 1 +2 -120.27642056400001 73.237379600500006 37.249999994500001 -2.2933259066499999e-14 -5.3953122334099997e-15 1 -0.1024327815450157 -0.99473992845615244 -7.7160500211349125e-15 0.99473992845615244 -0.1024327815450157 2.2259971643704582e-14 40 +2 -146.24597324999999 -57.791709263999998 37.249999994500001 9.6659368965000009e-16 -9.5482086703000007e-15 1 0.54287075387791239 0.83981625644186431 7.4940054162231688e-15 -0.83981625644186431 0.54287075387791239 5.9952043329715728e-15 40 +1 -19.2385816854 -92.2618664978 23.499999994500001 0.54287075387791228 0.8398162564418642 5.8135202777090594e-15 -0.83981625644186431 0.54287075387791239 -2.7200464103295604e-15 -5.4403293295155502e-15 -3.4056551910159719e-15 1 +2 -52.520288927800003 -118.377501115 37.249999994500001 -1.0404959675399999e-14 -1.21851197137e-14 1 0.94483050731796181 0.3275596318859868 1.3822276656637368e-14 -0.3275596318859868 0.94483050731796181 8.1046280797627087e-15 40 +2 -4.75 0 0 1 0 0 0 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 5 +1 -5.5 0 2.5 1 0 0 -0 1 0 0 -0 1 +2 -4.75 0 0 1 0 0 0 0.4794255386042035 -0.87758256189037243 -0 0.87758256189037243 0.4794255386042035 5 +2 0 0 2 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 10.5 +1 0 10.5 0 0 0 1 1 0 -0 -0 1 0 +6 -0 -0 1 +2 54.245151508712297 -62.026299155371817 -24.346969068842554 -2.4073398923310693e-06 -0.00016075840718300001 -0.99999998707546955 -0.97732544911029595 0.21174268704565441 -3.16866629702095e-05 0.21174268940287716 0.97732543640254277 -0.00015762301911581567 10.5000000008 +1 54.24515150871229 -62.026299155371802 -24.346969068842551 2.4073398922619484e-06 0.00016075840718310599 0.99999998707546955 0 0.99999998707836724 -0.00016075840718357182 -0.99999999999710232 3.8700012662950212e-10 2.4073398611551861e-06 +6 -0 -0 1 +2 71.226616998770623 102.97560726828897 -24.373535392087661 -2.4073398923310693e-06 -0.00016075840718300001 -0.99999998707546955 -0.97732544911029595 0.21174268704565441 -3.16866629702095e-05 0.21174268940287716 0.97732543640254277 -0.00015762301911581567 10.5000000008 +6 -0 -0 1 +2 -91.765252723367666 30.588467283471346 -24.361505676554543 -2.4073855550955121e-06 -0.00016075834192351315 -0.99999998707547988 -0.97732544911034525 0.21174268704543578 -3.1686604524572282e-05 0.21174268940264923 0.97732543640260083 -0.0001576229650048222 10.5000000008 +2 0 0 2 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 10.5 +6 -0 -0 1 +2 54.245151508712297 -62.026299155371817 -24.346969068842554 -2.4073398923310693e-06 -0.00016075840718300001 -0.99999998707546955 -0.97732544911029595 0.21174268704565441 -3.16866629702095e-05 0.21174268940287716 0.97732543640254277 -0.00015762301911581567 10.5000000008 +6 -0 -0 1 +2 71.226616998770623 102.97560726828897 -24.373535392087661 -2.4073398923310693e-06 -0.00016075840718300001 -0.99999998707546955 -0.97732544911029595 0.21174268704565441 -3.16866629702095e-05 0.21174268940287716 0.97732543640254277 -0.00015762301911581567 10.5000000008 +6 -0 -0 1 +2 -91.765252723367666 30.588467283471346 -24.361505676554543 -2.4073855550955121e-06 -0.00016075834192351315 -0.99999998707547988 -0.97732544911034525 0.21174268704543578 -3.1686604524572282e-05 0.21174268940264923 0.97732543640260083 -0.0001576229650048222 10.5000000008 +2 -4.75 0 0 1 0 0 0 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 2.5 +2 -4.75 0 0 1 0 0 0 0.4794255386042035 -0.87758256189037243 -0 0.87758256189037243 0.4794255386042035 2.5 +2 -65 16 4.16049991609 0 0 1 1 0 -0 -0 1 0 4 +2 -65 16 4.16049991609 0 0 1 1 0 -0 -0 1 0 4 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +2 6461.6839724343181 -128.35237813894767 4516.5480126948569 -0.67084843793832383 -0.483367097732192 0.56242210318022579 -0.39635068152438896 0.87468690109420677 0.27897842624361807 0.62679223876086998 0.035764142435839641 0.77836521989678198 4.0000000000000471 +2 6461.6839724343181 -128.35237813894767 4516.5480126948569 -0.67084843793832383 -0.483367097732192 0.56242210318022579 -0.39635068152438896 0.87468690109420677 0.27897842624361807 -0.62679223876086998 -0.035764142435839641 -0.77836521989678198 4.0000000000000471 +2 -65 -18 4.16049991609 0 0 1 1 0 -0 -0 1 0 4 +2 -65 -18 4.16049991609 0 0 1 1 0 -0 -0 1 0 4 +1 53.5 -45 52 -1.97215226305e-31 -1 -0 -1 1.97215226305e-31 0 0 0 -1 +1 86.5 53 0 -1 0 0 0 -1 0 0 0 1 +1 47.082969087899997 34.5823357644 52 0.46947156278594571 0.8829475928588979 -6.1645133442292872e-14 0.8829475928588979 -0.46947156278594571 1.5755129999074048e-26 -2.8940637135287487e-14 -5.4429422184345419e-14 -1 +1 -29.5 45 52 -0 1 0 1 0 0 0 0 -1 +1 -19 45 0 0.70710678118654757 0.70710678118654757 -0 -0.70710678118654757 0.70710678118654757 0 0 0 1 +1 -86.5 53 0 0 -1 0 1 0 0 -0 0 1 +1 -78.862687876999999 16.500914749 0 0.86602540378432902 -0.50000000000018996 0 0.50000000000018996 0.86602540378432902 0 -0 0 1 +1 -86.5 -53 0 1 0 0 -0 1 0 0 -0 1 +1 -77.4202418693 -35.9202418693 0 -0.70710678118654757 -0.70710678118654757 0 0.70710678118654757 -0.70710678118654757 0 0 0 1 +1 86.5 -53 0 0 1 -0 -1 0 0 0 0 1 +1 -24.340483738500001 -53 0 0.70710678118654757 -0.70710678118654757 0 0.70710678118654757 0.70710678118654757 0 -0 0 1 +3 -68.458904109599999 -1 9 0 0 -1 -0.50000000000018996 0.86602540378432902 0 0.86602540378432902 0.50000000000018996 0 0 +0.78539816339699997 +3 -68.458904109599999 -1 9 0 1.3322676295499999e-15 -1 1 -3.94745957368e-16 -5.2590726089711068e-31 -3.94745957368e-16 -1 -1.3322676295499999e-15 0 +0.78539816339699997 +3 -6.4589041095899997 -1 11 -2.9605947323300001e-16 0 -1 -0.50000000000018996 0.86602540378432902 1.4802973661655623e-16 0.86602540378432902 0.50000000000018996 -2.5639502485078459e-16 0 +0.78539816339699997 +3 -6.4589041095899997 -1 11 5.9211894646699999e-16 -7.4014868308300001e-16 -1 1 1.6148699255100004e-16 5.921189464669999e-16 1.614869925509996e-16 -1 7.4014868308300011e-16 0 +0.78539816339699997 +3 -40 -22 5.5 -0 -0 -1 -0.87758256189037243 -0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 8.0302016061000003 +0.17453292519899999 +3 -40 -22 5.5 -0 -0 -1 -0.87758256189037243 -0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 8.0302016061000003 +0.17453292519899999 +1 -40 20 5.5 0 0 1 1 0 -0 -0 1 0 +3 -40 20 5.5 -0 -0 -1 -0.87758256189037243 -0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 8.0302016061000003 +0.17453292519899999 +3 -40 20 5.5 -0 -0 -1 -0.87758256189037243 -0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 8.0302016061000003 +0.17453292519899999 +1 -40 20 5.5 0 0 1 1 0 -0 -0 1 0 +2 6463.2932005888006 -155.03408944092089 4495.5361906238177 -0.67084843793832338 -0.48336709773219289 0.56242210318022545 -0.39635068152438979 0.87468690109420622 0.27897842624361857 0.62679223876086987 0.035764142435839752 0.77836521989678187 4.0000000000000355 +2 6463.2932005888006 -155.03408944092089 4495.5361906238177 -0.67084843793832338 -0.48336709773219289 0.56242210318022545 -0.39635068152438979 0.87468690109420622 0.27897842624361857 -0.62679223876086987 -0.035764142435839752 -0.77836521989678187 4.0000000000000355 +3 6455.2430193335404 -160.83449461370742 4502.2852558619807 0.67084843793832338 0.48336709773219289 -0.56242210318022545 -0.39635068152342362 0.87468690109426139 0.27897842624481844 -0.62679223876148082 -0.035764142434491442 -0.77836521989635199 5.1999999999999806 +0.19739555984999749 +1 6463.2932005888006 -155.03408944092087 4495.5361906238177 -0.67084843793832338 -0.48336709773219289 0.56242210318022545 -0.39635068152362185 0.87468690109425007 0.27897842624457225 -0.62679223876135548 -0.035764142434768081 -0.77836521989644014 +3 6455.2430193335404 -160.83449461370742 4502.2852558619807 0.67084843793832338 0.48336709773219289 -0.56242210318022545 -0.39635068152342362 0.87468690109426139 0.27897842624481844 0.62679223876148082 0.035764142434491442 0.77836521989635199 5.1999999999999806 +0.19739555984999749 +1 6463.2932005888006 -155.03408944092087 4495.5361906238177 -0.67084843793832338 -0.48336709773219289 0.56242210318022545 -0.39635068152362185 0.87468690109425007 0.27897842624457225 0.62679223876135548 0.035764142434768081 0.77836521989644014 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 11.300000000000001 +1 0 -9.3000000000000007 0 0 0 1 1 0 -0 -0 1 0 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 11.300000000000001 +3 6453.6337911790579 -134.15278331173417 4523.2970779330199 0.67084843793832383 0.483367097732192 -0.56242210318022579 -0.39635068152342323 0.87468690109426173 0.27897842624481728 -0.62679223876148071 -0.035764142434492004 -0.7783652198963521 5.199999999999906 +0.19739555985000387 +1 6461.6839724343181 -128.35237813894761 4516.5480126948569 -0.67084843793832383 -0.483367097732192 0.56242210318022579 -0.39635068152362118 0.87468690109425062 0.27897842624457175 -0.62679223876135548 -0.035764142434768047 -0.77836521989644003 +3 6453.6337911790579 -134.15278331173417 4523.2970779330199 0.67084843793832383 0.483367097732192 -0.56242210318022579 -0.39635068152342323 0.87468690109426173 0.27897842624481728 0.62679223876148071 0.035764142434492004 0.7783652198963521 5.199999999999906 +0.19739555985000387 +1 6461.6839724343181 -128.35237813894761 4516.5480126948569 -0.67084843793832383 -0.483367097732192 0.56242210318022579 -0.39635068152362118 0.87468690109425062 0.27897842624457175 0.62679223876135548 0.035764142434768047 0.77836521989644003 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 15.300000000000001 +1 0 -12.199999999999999 0 0 0 1 1 0 -0 -0 1 0 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 15.300000000000001 +1 6455.9069894673612 -126.41253660878264 4521.1108981213547 -0.62679223876219603 -0.035764142433387693 -0.77836521989582674 -0.7788634912537088 0 0.62719348050827495 -0.022431036970190114 0.99936025842335974 -0.027855384837363252 +1 6457.5162176218437 -153.09424791075594 4500.0990760503155 -0.62679223876219736 -0.035764142433385361 -0.77836521989582574 -0.77886349125370791 -3.4694469519536142e-18 0.62719348050827628 -0.022431036970188702 0.99936025842335996 -0.027855384837361399 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9.3000000000000007 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9.3000000000000007 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 12.199999999999999 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 12.199999999999999 +3 0 0 -4.5 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 7.8065285868099998 +0.17453292519899999 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8.5999999999999996 +3 0 0 -4.5 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 7.8065285868099998 +0.17453292519899999 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8.5999999999999996 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 7 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 7 +5 -3.1086244689500001e-15 -1.1102230246299999e-15 4 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 6 1 +3 -3.7438227020200001e-14 -2.62975015189e-14 -5.2346734433000002 3.8857805861900003e-15 2.7755575615600002e-15 1 0.4794255386042035 -0.87758256189037243 5.7283846511612145e-16 0.87758256189037243 0.4794255386042035 -4.7407664606503667e-15 0 +0.62831853071800003 +5 -3.5527136788e-15 0 4 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 1 +3 1.9597668115999999e-14 3.5623374925699998e-15 -5.2346734433000002 -1.66533453694e-15 -2.7755575615600002e-16 1 -0.27602005662689311 0.96115187579262773 -1.9289249752251903e-16 -0.96115187579262773 -0.27602005662689311 -1.6772503695334274e-15 0 +0.62831853071800003 +1 0 -12 6 0 0 1 1 0 -0 -0 1 0 +5 8.881784197e-16 3.1363800445700001e-15 1 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 11.800000000000001 0.5 +5 -1.7763568394e-15 -8.881784197e-16 1 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 11.800000000000001 0.5 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 12 +1 0 -11.300000000000001 1.5 0 0 1 1 0 -0 -0 1 0 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 12 +5 -3.5527136788e-15 -3.3723024373e-15 0.40000000000000002 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8.9000000000000004 0.29999999999999999 +5 8.881784197e-16 2.6645352590999998e-15 0.40000000000000002 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8.9000000000000004 0.29999999999999999 +1 0 -8.5999999999999996 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 +5 8.881784197e-16 -6.6613381477499995e-16 0.40000000000000002 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9 0.29999999999999999 +5 -6.2172489379000002e-15 -1.7763568394e-15 0.40000000000000002 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 9 0.29999999999999999 +3 1.5099033134899999e-14 -3.2723823650800002e-14 16.800000000000001 -1.4802973661699999e-15 2.6830389761799999e-15 -1 0.4794255386042035 -0.87758256189037243 -3.064280580438202e-15 -0.87758256189037243 -0.4794255386042035 1.2765748711872168e-17 0 +0.78539816339699997 +3 8.4376949871500001e-15 -4.2632564145599997e-14 16.800000000000001 -7.4014868308300001e-16 3.7007434154200002e-15 -1 0.52029602321325741 0.85398597659942255 2.7752865633667171e-15 0.85398597659942255 -0.52029602321325741 -2.5575586779270865e-15 0 +0.78539816339699997 +2 7.6305711323200001 -22.043239164799999 80.808519711499997 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279652 -0.88621493047104327 7.7715611723760942e-15 -0.036162210092227753 0.018904018393630147 0.9991671194799292 8 +2 7.6305711323200001 -22.043239164799999 80.808519711499997 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279652 -0.88621493047104327 7.7715611723760942e-15 -0.036162210092227753 0.018904018393630147 0.9991671194799292 8 +1 -150.43016332600001 147.75249073500001 110.672767404 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 0.25576721919783391 0.41217950955101668 -0.8744662266148937 -0.38796125068460835 -0.78475621488937952 -0.48336709772152292 +2 -140.33855280700001 13.7459431604 87 0.46327432155297421 0.88621493047095057 0 0 0 -1 -0.88621493047095057 0.46327432155297421 0 40 +1 -202.73385071300001 -25.485227554600002 15.683991003499999 0.46239775054192084 0.88641653013784827 0.021308575554196355 0.046033930337688593 -3.2834845953288998e-14 -0.99893987669812478 -0.88547681931908107 0.46288846939449396 -0.040805236798556528 +1 -206.64673479199999 -25.485227554600002 100.593880523 0.046033930337705718 -3.469446951950431e-18 -0.99893987669812412 0.46239775054191901 0.88641653013784827 0.02130857555423335 0.88547681931908095 -0.46288846939449374 0.040805236798556521 +1 -60 126 17 0.1736481776670335 0.98480775301218992 -0 -0.98480775301218992 0.1736481776670335 0 0 0 1 +1 0 0 25 0 0 1 1 0 -0 -0 1 0 +1 0 0 25 0 0 1 1 0 -0 -0 1 0 +2 -139.50238441799999 111.291142933 72.960775013599999 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.1903702161556042 -0.44146390725209467 -0.87685164046980169 -0.42389855301690627 -0.76866369986811323 0.47902623441230907 10.800000000000001 +2 -139.50238441799999 111.291142933 72.960775013599999 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.1903702161556042 -0.44146390725209467 -0.87685164046980169 -0.42389855301690627 -0.76866369986811323 0.47902623441230907 10.800000000000001 +2 -185.82981657400001 22.6696498859 72.960775013599999 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.1903702161556042 -0.44146390725209467 -0.87685164046980169 -0.42389855301690627 -0.76866369986811323 0.47902623441230907 10.800000000000001 +2 -185.82981657400001 22.6696498859 72.960775013599999 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.1903702161556042 -0.44146390725209467 -0.87685164046980169 -0.42389855301690627 -0.76866369986811323 0.47902623441230907 10.800000000000001 +2 -31.284471878200002 -96.485293324300002 80.808519714900001 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279652 -0.88621493047104327 6.8903216465798762e-15 -0.036162210092228156 0.01890401839362937 0.9991671194799292 8 +2 -31.284471878200002 -96.485293324300002 80.808519714900001 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.46327432155279652 -0.88621493047104327 6.8903216465798762e-15 -0.036162210092228156 0.01890401839362937 0.9991671194799292 8 +1 -123.865858746 133.86583665399999 111.896924508 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 0.25576721919783391 0.41217950955101668 -0.8744662266148937 -0.38796125068460835 -0.78475621488937952 -0.48336709772152292 +1 0 0 47 0 0 1 1 0 -0 -0 1 0 +2 -51.251133647400003 226 60.7489666297 0 0 1 -0.1736481776670335 -0.98480775301218992 0 0.98480775301218992 -0.1736481776670335 0 100 +2 -139.50238441799999 111.291142933 72.960775013599999 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.1903702161556042 -0.44146390725209467 -0.87685164046980169 -0.42389855301690627 -0.76866369986811323 0.47902623441230907 20 +2 -139.50238441799999 111.291142933 72.960775013599999 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.1903702161556042 -0.44146390725209467 -0.87685164046980169 -0.42389855301690627 -0.76866369986811323 0.47902623441230907 20 +2 -185.82981657400001 22.6696498859 72.960775013599999 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.1903702161556042 -0.44146390725209467 -0.87685164046980169 -0.42389855301690627 -0.76866369986811323 0.47902623441230907 20 +2 -185.82981657400001 22.6696498859 72.960775013599999 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 -0.1903702161556042 -0.44146390725209467 -0.87685164046980169 -0.42389855301690627 -0.76866369986811323 0.47902623441230907 20 +1 -60 126 17 0 -1 0 1 0 0 -0 0 1 +2 -51.251133647400003 226 60.7489666297 0 0 1 -0.1736481776670335 -0.98480775301218992 0 0.98480775301218992 -0.1736481776670335 0 100 +1 -145.323439691 114.334135484 61.883521974499999 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 0.46468355086979179 0.88205620537241736 -0.077756338102136821 -5.039024753017428e-14 -0.087812957274168491 -0.99613698080874657 +1 -145.323439691 114.334135484 61.883521974499999 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 0.46468355086979179 0.88205620537241736 -0.077756338102136821 -5.039024753017428e-14 -0.087812957274168491 -0.99613698080874657 +2 46 94 32 0 -0 1 1 -1.83697019872e-16 -0 1.83697019872e-16 1 0 32 +1 61 -109 17 0 1 -0 -1 0 0 0 0 1 +2 29 -77 32 0 0 1 -1.83697019872e-16 -1 0 1 -1.83697019872e-16 0 32 +2 -20.280457959 -9 63.607579398200002 0.046033930337705718 -1.0408340855901293e-16 -0.99893987669812412 -1.66345171270774e-16 -1 9.6528218346277826e-17 -0.99893987669812412 1.6172525159957992e-16 -0.046033930337705718 100 +1 61 -39 17 -1 0 0 0 -1 0 0 0 1 +2 29 -71 32 0 -0 1 1 -1.83697019872e-16 -0 1.83697019872e-16 1 0 32 +1 -35 -39 17 0 -1 0 1 0 0 -0 0 1 +2 -35 -1 32.610000000200003 0 0 1 -1 -4.6746232615799997e-16 0 4.6746232615799997e-16 -1 0 38 +9 0 0 0 0 5 1 6 2 2 2 -564.07089831099995 -62.628410590999998 426.06801298400001 -34.815653666300001 -33.8713799573 14.250579658199999 +-544.25509272900001 -63.261184661599998 441.240630372 -23.015847706300001 -33.831149176499999 14.219010341200001 +-524.31079515700003 -63.898065361900002 456.51166834499998 -11.2838922579 -33.791142099200002 14.1876159079 +-504.47378797200003 -64.531512527299995 471.70051825100001 0.42243111867900002 -33.7512285691 14.156311111200001 +-484.65004022800002 -65.164540752700006 486.87918199199999 11.9630161076 -33.711890672700001 14.125427634699999 +-464.71566652799999 -65.801100986799995 502.14258484800001 23.4414525316 -33.672755541800001 14.0947180767 + +0 6 +91.716502212400002 6 + +0 2 +680.53378255099994 2 + +9 0 0 0 0 5 1 6 2 2 2 -573.335962451 -62.332551183299998 418.973914622 -40.387824409099998 -33.368616123599999 14.261353055300001 +-571.47652940900002 -62.391928082900002 420.39764968999998 -39.2773430473 -33.574569706399998 14.260044244199999 +-569.61711956900001 -62.451306968399997 421.82138009800002 -38.157178373800001 -33.728262359799999 14.2583100653 +-567.802275732 -62.509264004999999 423.21094492600002 -37.039083193300002 -33.827502748199997 14.2561119113 +-565.93718309899998 -62.568815156399999 424.63903094099999 -35.9269783047 -33.875168930400001 14.253552407300001 +-564.07089831099995 -62.628410590999998 426.06801298400001 -34.815653666300001 -33.8713799573 14.250579658199999 + +0 6 +8.6399379142899999 6 + +0 2 +670.51203679100001 2 + +2 -35 -1 32.610000000200003 0 0 1 -1 -4.6746232615799997e-16 0 4.6746232615799997e-16 -1 0 38 +9 0 0 0 0 5 1 6 2 2 2 -607.74046795000004 -30.528340214899998 407.72234575499999 -60.808047159799997 -19.028160161900001 14.201800156399999 +-605.16557597899998 -40.442118542499998 404.86182412199997 -58.200235784199997 -23.482880809800001 14.2301927219 +-599.43132877300002 -50.261973705800003 404.51609746700001 -54.634737898799997 -27.375750922400002 14.2515971087 +-591.05211321100001 -58.017923148400001 407.25145521799999 -50.282591152800002 -30.4165928856 14.2641846204 +-581.78785014100004 -62.062653637700002 412.50245384800002 -45.435419926800002 -32.432472460299998 14.2673031511 +-573.335962451 -62.332551183299998 418.973914622 -40.387824409099998 -33.368616123599999 14.261353055300001 + +0 6 +40.9626739785 6 + +0 2 +670.72486587699996 2 + +9 0 0 0 0 5 1 6 2 2 2 -573.335962451 -62.332551183299998 418.973914622 -40.387824409099998 -33.368616123599999 14.261353055300001 +-571.47652940900002 -62.391928082900002 420.39764968999998 -39.2773430473 -33.574569706399998 14.260044244199999 +-569.61711956900001 -62.451306968399997 421.82138009800002 -38.157178373800001 -33.728262359799999 14.2583100653 +-567.802275732 -62.509264004999999 423.21094492600002 -37.039083193300002 -33.827502748199997 14.2561119113 +-565.93718309899998 -62.568815156399999 424.63903094099999 -35.9269783047 -33.875168930400001 14.253552407300001 +-564.07089831099995 -62.628410590999998 426.06801298400001 -34.815653666300001 -33.8713799573 14.250579658199999 + +0 6 +8.6399379142899999 6 + +0 2 +670.51203679100001 2 + +9 0 0 0 0 5 1 6 2 2 2 -617.41998077999995 6.7394543210300002 418.47559528199997 -64.707215566399995 -0.31807210054599999 14.0638680925 +-615.48260642900004 -0.719770783114 416.32331061100001 -65.168364400900003 -4.1832879008799999 14.095717478799999 +-613.54693218099999 -8.1725043451800001 414.17292098799999 -65.002934194700003 -8.1263112420799999 14.1265277808 +-611.61660340699996 -15.6045969085 412.02845732499998 -64.191338139099997 -12.003505961 14.1551245752 +-609.67868331199998 -23.0658770621 409.87556507900001 -62.771042061899998 -15.674928985199999 14.1804277714 +-607.74046795000004 -30.528340214899998 407.72234575499999 -60.808047159799997 -19.028160161900001 14.201800156399999 + +0 6 +29.800315283900002 6 + +0 2 +678.53260547900004 2 + +9 0 0 0 0 5 1 6 2 2 2 -607.74046795000004 -30.528340214899998 407.72234575499999 -60.808047159799997 -19.028160161900001 14.201800156399999 +-605.16557597899998 -40.442118542499998 404.86182412199997 -58.200235784199997 -23.482880809800001 14.2301927219 +-599.43132877300002 -50.261973705800003 404.51609746700001 -54.634737898799997 -27.375750922400002 14.2515971087 +-591.05211321100001 -58.017923148400001 407.25145521799999 -50.282591152800002 -30.4165928856 14.2641846204 +-581.78785014100004 -62.062653637700002 412.50245384800002 -45.435419926800002 -32.432472460299998 14.2673031511 +-573.335962451 -62.332551183299998 418.973914622 -40.387824409099998 -33.368616123599999 14.261353055300001 + +0 6 +40.9626739785 6 + +0 2 +670.72486587699996 2 + +9 0 0 0 0 5 1 6 2 2 2 -617.74618740300002 7.9954060825699997 418.83798761499997 -64.629579058700003 0.33265453164699998 14.058506127799999 +-617.68094483699997 7.7442109854599996 418.76550780399998 -64.645105124699995 0.202519585398 14.059578442799999 +-617.61570296000002 7.4930175504900003 418.69302848299998 -64.660631390399999 0.072383803136299996 14.060651030000001 +-617.550462251 7.2418303286799999 418.62055099600002 -64.676158624500005 -0.057758455882299997 14.0617232249 +-617.48522052600003 6.9906386614100002 418.54807200499999 -64.691686724199997 -0.18791359261400001 14.0627956281 +-617.41998077999995 6.7394543210300002 418.47559528199997 -64.707215566399995 -0.31807210054599999 14.0638680925 + +0 6 +1.0013199712400001 6 + +0 2 +685.17623066600004 2 + +9 0 0 0 0 5 1 6 2 2 2 -617.41998077999995 6.7394543210300002 418.47559528199997 -64.707215566399995 -0.31807210054599999 14.0638680925 +-615.48260642900004 -0.719770783114 416.32331061100001 -65.168364400900003 -4.1832879008799999 14.095717478799999 +-613.54693218099999 -8.1725043451800001 414.17292098799999 -65.002934194700003 -8.1263112420799999 14.1265277808 +-611.61660340699996 -15.6045969085 412.02845732499998 -64.191338139099997 -12.003505961 14.1551245752 +-609.67868331199998 -23.0658770621 409.87556507900001 -62.771042061899998 -15.674928985199999 14.1804277714 +-607.74046795000004 -30.528340214899998 407.72234575499999 -60.808047159799997 -19.028160161900001 14.201800156399999 + +0 6 +29.800315283900002 6 + +0 2 +678.53260547900004 2 + +9 0 0 0 0 5 1 6 2 2 2 -623.00356693200001 75.519255174600005 447.91701823599999 -50.650475962199998 32.908343142600003 13.7633544789 +-622.54513327699999 68.536114222799995 444.84311136100001 -52.571395213800002 29.686542218100001 13.793971511400001 +-622.08546671500005 61.534128810600002 441.76088585700001 -54.487632212800001 26.4726169184 13.824516856700001 +-621.62741396499996 54.556556725500002 438.68946502099999 -56.399548664500003 23.265944980499999 13.854994444700001 +-621.168449463 47.565605655100001 435.61210952200003 -58.310028712099999 20.0615998864 13.885437640099999 +-620.70939424200003 40.572991795699998 432.53403298000001 -60.220090383100001 16.858009107099999 13.9158812902 + +0 6 +28.469145972100002 6 + +0 2 +709.77086713200003 2 + +9 0 0 0 0 5 1 6 2 2 2 -623.37953850899999 81.246287674599998 450.43799897000002 -48.952919059199999 35.489341740900002 13.7384068634 +-623.30442434300005 80.102101840299994 449.934340013 -49.316464778899999 34.9864368414 13.743354847299999 +-623.22930044899999 78.957809521300007 449.430628496 -49.668829982699997 34.4755210748 13.748343866700001 +-623.15404504399999 77.811430345800005 448.92601466899998 -50.008048393800003 33.959398084999997 13.7533190725 +-623.07882293700004 76.665598513500001 448.42162667999997 -50.335140432800003 33.437229771799998 13.758328429300001 +-623.00356693200001 75.519255174600005 447.91701823599999 -50.650475962199998 32.908343142600003 13.7633544789 + +0 6 +4.6797211180999998 6 + +0 2 +721.31958543600001 2 + +9 0 0 0 0 5 1 6 2 2 2 -620.70939424200003 40.572991795699998 432.53403298000001 -60.220090383100001 16.858009107099999 13.9158812902 +-620.63104558999999 39.379534916700003 432.00868570599999 -60.546088146599999 16.311239624399999 13.921077388100001 +-620.552696373 38.186021434700002 431.48331519200002 -60.856523025999998 15.7552298759 13.926302039899999 +-620.47420241600003 36.990302049199997 430.95697333099997 -61.149482417900003 15.193619159600001 13.931535484599999 +-620.39580910699999 35.796266332599998 430.43136776300003 -61.427362992200003 14.622048681500001 13.936796554500001 +-620.31742265699995 34.602237292700003 429.90576833599999 -61.688828947799998 14.0430589406 13.9420767312 + +0 6 +4.8565681339199998 6 + +0 2 +698.35422491199995 2 + +9 0 0 0 0 5 1 6 2 2 2 -623.00356693200001 75.519255174600005 447.91701823599999 -50.650475962199998 32.908343142600003 13.7633544789 +-622.54513327699999 68.536114222799995 444.84311136100001 -52.571395213800002 29.686542218100001 13.793971511400001 +-622.08546671500005 61.534128810600002 441.76088585700001 -54.487632212800001 26.4726169184 13.824516856700001 +-621.62741396499996 54.556556725500002 438.68946502099999 -56.399548664500003 23.265944980499999 13.854994444700001 +-621.168449463 47.565605655100001 435.61210952200003 -58.310028712099999 20.0615998864 13.885437640099999 +-620.70939424200003 40.572991795699998 432.53403298000001 -60.220090383100001 16.858009107099999 13.9158812902 + +0 6 +28.469145972100002 6 + +0 2 +709.77086713200003 2 + +2 -18 1 32.610000000200003 0 0 1 1.07187543957e-15 1 -0 -1 1.07187543957e-15 0 55 +9 0 0 0 0 5 1 6 2 2 2 -593.470746824 108.92484217800001 487.41166657500003 -24.3659997221 49.779457369399999 13.560056293900001 +-597.52384743000005 107.15913249800001 483.376845081 -27.407537742900001 49.449292142099999 13.570727634600001 +-601.58410661400001 105.390308022 479.33486075799999 -30.408392939799999 48.7874530777 13.5839030981 +-605.63860857400005 103.623981102 475.29868233799999 -33.3116969883 47.801868927900003 13.5994283515 +-609.69167468199998 101.858289677 471.26389279599999 -36.073268159900003 46.517155453100003 13.616912169600001 +-613.75855170600005 100.086578606 467.21535720000003 -38.658972477699997 44.958344582099997 13.636112156399999 + +0 6 +22.611802242900001 6 + +0 2 +738.49044930100001 2 + +9 0 0 0 0 5 1 6 2 2 2 -532.72910406599999 135.386583699 547.87937197600002 21.546507949799999 54.763255312399998 13.3989703785 +-544.91048232200001 130.079837435 535.75293003800004 12.458866674899999 53.776792812899998 13.430854695100001 +-556.879780052 124.86547161 523.83756121600004 3.2311475381100001 52.775120584600003 13.4632281457 +-569.20204144100001 119.497370334 511.570944978 -6.0644898827900002 51.766089238200003 13.4958530427 +-581.30411393199995 114.22516455500001 499.52342933900002 -15.2358818634 50.770530664900001 13.5280229268 +-593.470746824 108.92484217800001 487.41166657500003 -24.3659997221 49.779457369399999 13.560056293900001 + +0 6 +67.941313710900005 6 + +0 2 +758.26159328000006 2 + +1 78 56 17 0 1 -0 -1 0 0 0 0 1 +2 -18 1 32.610000000200003 0 0 1 1.07187543957e-15 1 -0 -1 1.07187543957e-15 0 55 +9 0 0 0 0 5 1 6 2 2 2 -532.26860220900005 135.58719863100001 548.33779701900005 21.885804318800002 54.797906406099997 13.397797216200001 +-532.36082260199998 135.547023373 548.24599254099996 21.818255315199998 54.7914409718 13.398027370699999 +-532.45304831700003 135.506845755 548.15418275599995 21.7507283333 54.784762455299997 13.398259124000001 +-532.54535980599996 135.46663074700001 548.06228746800002 21.683563361000001 54.777910022599997 13.3984913178 +-532.63724879100005 135.426599888 547.97081296600004 21.615034627899998 54.770693892600001 13.3987299521 +-532.72910406599999 135.386583699 547.87937197600002 21.546507949799999 54.763255312399998 13.3989703785 + +0 6 +0.51055604956800005 6 + +0 2 +774.32763467100006 2 + +9 0 0 0 0 5 1 6 2 2 2 -532.72910406599999 135.386583699 547.87937197600002 21.546507949799999 54.763255312399998 13.3989703785 +-544.91048232200001 130.079837435 535.75293003800004 12.458866674899999 53.776792812899998 13.430854695100001 +-556.879780052 124.86547161 523.83756121600004 3.2311475381100001 52.775120584600003 13.4632281457 +-569.20204144100001 119.497370334 511.570944978 -6.0644898827900002 51.766089238200003 13.4958530427 +-581.30411393199995 114.22516455500001 499.52342933900002 -15.2358818634 50.770530664900001 13.5280229268 +-593.470746824 108.92484217800001 487.41166657500003 -24.3659997221 49.779457369399999 13.560056293900001 + +0 6 +67.941313710900005 6 + +0 2 +758.26159328000006 2 + +9 0 0 0 0 5 1 6 2 2 2 -520.37165120899999 136.70556824799999 558.18346532700002 29.584852203099999 54.4355646124 13.3802783105 +-520.55111890000001 136.73970672799999 558.06001198800004 29.482003416800001 54.4533377148 13.3804098758 +-520.73034761199995 136.77208513299999 557.93588035899995 29.379114970500002 54.471117726000003 13.380541434 +-520.90716017600005 136.80232894700001 557.81258735300003 29.270114450000001 54.489953824300002 13.3806808409 +-521.08478922400002 136.83103705299999 557.687901764 29.1641003497 54.508273939699997 13.3808164853 +-521.26223597199998 136.858019668 557.56251051599997 29.058106480300001 54.526590540900003 13.380952049499999 + +0 6 +0.81548831978699998 6 + +0 2 +778.39694176600005 2 + +9 0 0 0 0 5 1 6 2 2 2 -486.53757958199998 130.269621503 581.45745701400006 48.410034496400002 51.182420620999999 13.3561997282 +-493.37929964699998 131.571059529 576.75113180200003 44.848921644299999 51.797809759700002 13.360754701499999 +-499.96848738800003 132.824458042 572.21852741099997 41.148014881500004 52.437364668599997 13.365474993699999 +-506.90920726500002 134.14472231900001 567.44412213400005 37.2998084253 53.102354763699999 13.370421069700001 +-513.64046366800005 135.42515585999999 562.81375649899996 33.442350579600003 53.768957736200001 13.375344242800001 +-520.37165120899999 136.70556824799999 558.18346532700002 29.584852203099999 54.4355646124 13.3802783105 + +0 6 +30.335781777800001 6 + +0 2 +781.42993463699997 2 + +9 0 0 0 0 5 1 6 2 2 2 -521.26223597199998 136.858019668 557.56251051599997 29.058106480300001 54.526590540900003 13.380952049499999 +-523.62277013000005 137.21696336100001 555.89445874800003 27.648091734400001 54.7702524213 13.3827555829 +-525.94472170699999 137.26958397000001 554.105993582 26.221856134999999 54.919902776000001 13.385337013299999 +-528.18325920500001 137.009301475 552.22895930300001 24.7756101473 54.976613770500002 13.3887219603 +-530.301759715 136.444048718 550.29577312699996 23.326465455200001 54.935798626900002 13.392889564100001 +-532.26860220900005 135.58719863100001 548.33779701900005 21.885804318800002 54.797906406099997 13.397797216200001 + +0 6 +10.9069510097 6 + +0 2 +776.62164625800006 2 + +9 0 0 0 0 5 1 6 2 2 2 -520.37165120899999 136.70556824799999 558.18346532700002 29.584852203099999 54.4355646124 13.3802783105 +-520.55111890000001 136.73970672799999 558.06001198800004 29.482003416800001 54.4533377148 13.3804098758 +-520.73034761199995 136.77208513299999 557.93588035899995 29.379114970500002 54.471117726000003 13.380541434 +-520.90716017600005 136.80232894700001 557.81258735300003 29.270114450000001 54.489953824300002 13.3806808409 +-521.08478922400002 136.83103705299999 557.687901764 29.1641003497 54.508273939699997 13.3808164853 +-521.26223597199998 136.858019668 557.56251051599997 29.058106480300001 54.526590540900003 13.380952049499999 + +0 6 +0.81548831978699998 6 + +0 2 +778.39694176600005 2 + +1 78 56 17 0 1 -0 -1 0 0 0 0 1 +9 0 0 0 0 5 1 6 2 2 2 -486.53757958199998 130.269621503 581.45745701400006 48.410034496400002 51.182420620999999 13.3561997282 +-493.37929964699998 131.571059529 576.75113180200003 44.848921644299999 51.797809759700002 13.360754701499999 +-499.96848738800003 132.824458042 572.21852741099997 41.148014881500004 52.437364668599997 13.365474993699999 +-506.90920726500002 134.14472231900001 567.44412213400005 37.2998084253 53.102354763699999 13.370421069700001 +-513.64046366800005 135.42515585999999 562.81375649899996 33.442350579600003 53.768957736200001 13.375344242800001 +-520.37165120899999 136.70556824799999 558.18346532700002 29.584852203099999 54.4355646124 13.3802783105 + +0 6 +30.335781777800001 6 + +0 2 +781.42993463699997 2 + +2 46 88 32 0 0 1 -1.83697019872e-16 -1 0 1 -1.83697019872e-16 0 32 +1 78 126 17 -1 0 0 0 -1 0 0 0 1 +2 26 -74 98.658673020999998 0 0 1 -1 0 0 0 -1 0 15 +2 26 -74 98.658673020999998 0 0 1 -1 0 0 0 -1 0 15 +2 6455.0776059299997 -138.81126363199999 4382.3296892300004 0.67084843793829319 0.48336709773221126 -0.56242210318024577 -0.013675191495540334 0.76632989483304881 0.64230170591609737 0.74146838263901205 -0.42319586613660037 0.52070135051829869 15 +2 6455.0776059299997 -138.81126363199999 4382.3296892300004 0.67084843793829319 0.48336709773221126 -0.56242210318024577 0.013675191495485513 -0.76632989483301728 -0.64230170591613589 -0.74146838263901305 0.42319586613665722 -0.52070135051825128 15 +1 6453.8546390000001 -76.068445186800005 4415.2362704200004 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.74159448037033837 -0.43725522647176845 0.50876860517073041 1.6542323066914832e-13 0.75839575140757587 0.6517943573297782 +2 26 -74 98.658673020999998 0 0 1 -1 0 0 0 -1 0 15 +2 26 -74 98.658673020999998 0 0 1 -1 0 0 0 -1 0 15 +2 6455.0776059299997 -138.81126363199999 4382.3296892300004 0.67084843793829319 0.48336709773221126 -0.56242210318024577 0.013675191495485513 -0.76632989483301728 -0.64230170591613589 -0.74146838263901305 0.42319586613665722 -0.52070135051825128 15 +2 43 91 98.658673020999998 0 0 1 -1 0 0 0 -1 0 15 +2 43 91 98.658673020999998 0 0 1 -1 0 0 0 -1 0 15 +2 6548.8631192900002 -124.160493168 4506.7870409999996 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.22941658266615073 -0.85646113081117603 -0.46243092782320155 0.70521656596646776 -0.18119210865702917 0.68544803949452082 15 +2 6548.8631192900002 -124.160493168 4506.7870409999996 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.22941658266615073 0.85646113081117603 0.46243092782320155 -0.70521656596646776 0.18119210865702917 -0.68544803949452082 15 +1 6453.8546390000001 -76.068445186800005 4415.2362704200004 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.74159448037033837 -0.43725522647176845 0.50876860517073041 1.6542323066914832e-13 0.75839575140757587 0.6517943573297782 +2 43 91 98.658673020999998 0 0 1 -1 0 0 0 -1 0 15 +2 43 91 98.658673020999998 0 0 1 -1 0 0 0 -1 0 15 +2 6548.8631192900002 -124.160493168 4506.7870409999996 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.22941658266615073 0.85646113081117603 0.46243092782320155 -0.70521656596646776 0.18119210865702917 -0.68544803949452082 15 +2 -120 18.631168425399999 98.658673020999998 0 0 1 -1 0 0 0 -1 0 15 +2 -120 18.631168425399999 98.658673020999998 0 0 1 -1 0 0 0 -1 0 15 +2 -120 18.631168425399999 98.658673020999998 0 0 1 -1 0 0 0 -1 0 15 +2 -120 18.631168425399999 98.658673020999998 0 0 1 -1 0 0 0 -1 0 15 +9 0 0 0 0 5 1 6 2 2 2 -620.31742265699995 34.602237292700003 429.90576833599999 -61.688828947799998 14.0430589406 13.9420767312 +-620.10639945900004 31.387794887799998 428.49080384600001 -62.392721836900002 12.4843621562 13.956292227600001 +-619.89537549600004 28.173354044100002 427.075840325 -62.977610554599998 10.871935628599999 13.9706211362 +-619.68437153499997 24.958874511400001 425.66088867799999 -63.437963545700001 9.2179073235400004 13.9849640262 +-619.47330687299996 21.744145670200002 424.24576881799999 -63.770264972699998 7.5351745290399998 13.999157391000001 +-619.26228892500001 18.529784935199999 422.83084032699998 -63.972897256000003 5.8367704569800001 14.0131524081 + +0 6 +13.0803692861 6 + +0 2 +693.05079456099998 2 + +2 -156.394413507 1.4365477612899999 25 0 0 1 -0.88621493047095057 0.46327432155297421 0 -0.46327432155297421 -0.88621493047095057 0 33 +1 -63.562477510999997 -84.209176384399996 29 0.46250276340103236 0.8866178397970621 0 0.8866178397970621 -0.46250276340103236 0 0 0 -1 +1 3.0015981257100002 -56.272740548100003 33 0 0 1 -0.81818281241205493 -0.57495815975903863 0 0.57495815975903863 -0.81818281241205493 0 +1 -185.63950621199999 16.724600372499999 25 -0.88621493047095057 0.46327432155297421 0 0 0 1 0.46327432155297421 0.88621493047095057 -0 +2 -110.752290391 88.747087288100005 25 0 0 1 0.1736481776670335 0.98480775301218992 -0 -0.98480775301218992 0.1736481776670335 0 33 +1 -46.729441208399997 110.96720978800001 25 -0.1736481776670335 -0.98480775301218992 0 0 0 1 -0.98480775301218992 0.1736481776670335 0 +2 -26.412604421400001 226.18971689 25 0 0 1 -0.1736481776670335 -0.98480775301218992 0 0.98480775301218992 -0.1736481776670335 0 117 +1 11.648931638600001 109.18971689 25 0 -1 0 0 0 1 -1 0 0 +2 11.648968972500001 136.189598988 29 -4.2050396986899999e-16 -1.3157726047699999e-16 -1 0.57001910863222971 -0.82163143549533102 -1.3158728467678077e-16 -0.82163143549533102 -0.57001910863222971 4.2050083312832212e-16 26.9998810387 +2 43.0000067844 91.000000406799998 29 -2.42449485333e-16 1.54427894649e-16 1 -0.57002095832987254 -0.82163015223681624 -1.1318673386032148e-17 0.82163015223681624 -0.57002095832987254 2.8723094404457813e-16 28.000022622300001 +2 11.648962903899999 45.8103853247 29 6.4080600471199998e-16 1.31015225825e-15 -1 -1.1579781775403815e-06 0.99999999999932954 1.310151516209752e-15 0.99999999999932954 1.1579781775403815e-06 6.4080752183929468e-16 26.999897146199999 +2 11.6489385447 45.810305040400003 29 6.8809326685900004e-16 -2.15320142142e-16 -1 -2.0927521865399546e-07 0.99999999999997824 -2.153202861428642e-16 0.99999999999997824 2.0927521865399546e-07 6.880932217978152e-16 32.999977939600001 +2 43.000006176500001 91.000000347300002 29 -2.0571765251400001e-16 3.9308929949500001e-16 1 -0.5700213244908644 -0.82162989820580457 2.0571047237268621e-16 0.82162989820580457 -0.5700213244908644 3.9309305703554087e-16 22.000016405 +1 11.648931638600001 78.81028311 33 0 1 0 0 0 -1 -1 0 0 +2 11.6489417921 136.18968819400001 29 -6.8809311938399995e-16 -2.1532061342599999e-16 -1 0.57001847922780369 -0.82163187215371702 -2.1531151475589209e-16 -0.82163187215371702 -0.57001847922780369 6.880959665070533e-16 32.999970837799999 +1 11.648931638600001 103.18971689 33 0 1 0 0 0 -1 -1 0 0 +2 -26.412604421400001 226.18971689 25 0 0 1 -0.1736481776670335 -0.98480775301218992 0 0.98480775301218992 -0.1736481776670335 0 123 +1 -47.7713302744 105.05836327 33 0.1736481776670335 0.98480775301218992 0 0 0 -1 -0.98480775301218992 0.1736481776670335 0 +2 -110.752290391 88.747087288100005 25 0 0 1 0.1736481776670335 0.98480775301218992 -0 -0.98480775301218992 0.1736481776670335 0 27 +1 -180.322216629 13.9449544432 33 0.88621493047095057 -0.46327432155297421 0 0 0 -1 0.46327432155297421 0.88621493047095057 0 +2 -156.394413507 1.4365477612899999 25 0 0 1 -0.88621493047095057 0.46327432155297421 0 -0.46327432155297421 -0.88621493047095057 0 27 +2 26.000006838800001 -73.999999580199997 29 8.0560641241100002e-17 1.55078953221e-16 1 -0.57496109382290284 -0.81818075056186168 1.7320184874976292e-16 0.81818075056186168 -0.57496109382290284 2.3251198656468869e-17 28.000022896800001 +1 3.0015981257100002 -56.272740548100003 33 0 0 1 -0.81818281241205493 -0.57495815975903863 0 0.57495815975903863 -0.81818281241205493 0 +2 -5.62274499818 -118.99989650800001 29 4.3640442561400002e-16 2.8274458872499999e-15 -1 -1.1705045208603686e-06 0.99999999999931499 2.8274453764347103e-15 0.99999999999931499 1.1705045208603686e-06 4.3640773515189461e-16 26.9998959383 +2 -5.6227422168999999 -29.0001072582 29 4.3640408698799999e-16 -2.8274448170300002e-15 -1 0.57495917747674374 -0.81818209723463542 2.5642792651149154e-15 -0.81818209723463542 -0.57495917747674374 1.2686073352268429e-15 26.999891704900001 +2 -40.537227982799998 -58.998719344500003 29 -1.3304992167399999e-15 -3.5282762578899999e-15 1 -0.46249442348375691 -0.88662219025153399 -3.7435964917746745e-15 0.88662219025153399 -0.46249442348375691 -4.5215796411029349e-16 33.001288613 +1 -63.562477510999997 -84.209176384399996 29 0.46250276340103236 0.8866178397970621 0 0.8866178397970621 -0.46250276340103236 0 0 0 -1 +1 -23.080161257499999 -92 29 -0 1 0 1 0 0 0 0 -1 +1 -23.080161257499999 -86 29 0 -1 0 1 0 0 -0 0 1 +2 -5.6227721777599999 -118.999981699 29 -1.61913385718e-16 1.2643483048700001e-15 -1 -1.340582289899988e-07 0.99999999999999112 1.2643483265758106e-15 0.99999999999999112 1.340582289899988e-07 -1.6191321622170399e-16 32.999981984999998 +2 -40.537266987000002 -58.998876986600003 29 -1.08942576052e-15 -4.44393036665e-15 1 -0.46249382875399192 -0.8866225004839845 -4.4439413447820574e-15 0.8866225004839845 -0.46249382875399192 -1.0893809781041809e-15 27.0011298971 +2 26.000006211700001 -73.999999638099993 29 1.53802077765e-16 -9.8686635177900001e-17 1 -0.57496145597213777 -0.81818049606819609 7.6867864381490397e-18 0.81818049606819609 -0.57496145597213777 -1.8257887172896356e-16 22.000016624600001 +2 -5.6227708008399997 -29.000017928999998 29 1.78531040415e-16 -1.15668762155e-15 -1 0.574958579009064 -0.8181825177940909 1.0490295438070556e-15 -0.8181825177940909 -0.574958579009064 5.1897649509261862e-16 32.999981930200001 +1 -55.512399909899997 -62 29 0 1 -0 -1 0 0 0 0 1 +1 -60.787460930599998 -78.889469345600006 29 -0.46250276340103236 -0.8866178397970621 0 0.8866178397970621 -0.46250276340103236 0 0 0 1 +1 -55.512399909899997 -56 29 -0 -1 -0 -1 0 0 0 0 -1 +1 -60.787460930599998 -78.889469345600006 29 -0.46250276340103236 -0.8866178397970621 0 0.8866178397970621 -0.46250276340103236 0 0 0 1 +1 11.648931638600001 72.81028311 25 0 -1 0 0 0 1 -1 0 0 +2 46 88 32 0 0 1 -1.83697019872e-16 -1 0 1 -1.83697019872e-16 0 32 +9 0 0 0 0 5 1 6 2 2 2 -521.26223597199998 136.858019668 557.56251051599997 29.058106480300001 54.526590540900003 13.380952049499999 +-523.62277013000005 137.21696336100001 555.89445874800003 27.648091734400001 54.7702524213 13.3827555829 +-525.94472170699999 137.26958397000001 554.105993582 26.221856134999999 54.919902776000001 13.385337013299999 +-528.18325920500001 137.009301475 552.22895930300001 24.7756101473 54.976613770500002 13.3887219603 +-530.301759715 136.444048718 550.29577312699996 23.326465455200001 54.935798626900002 13.392889564100001 +-532.26860220900005 135.58719863100001 548.33779701900005 21.885804318800002 54.797906406099997 13.397797216200001 + +0 6 +10.9069510097 6 + +0 2 +776.62164625800006 2 + +9 0 0 0 0 5 1 6 2 2 2 -532.26860220900005 135.58719863100001 548.33779701900005 21.885804318800002 54.797906406099997 13.397797216200001 +-532.36082260199998 135.547023373 548.24599254099996 21.818255315199998 54.7914409718 13.398027370699999 +-532.45304831700003 135.506845755 548.15418275599995 21.7507283333 54.784762455299997 13.398259124000001 +-532.54535980599996 135.46663074700001 548.06228746800002 21.683563361000001 54.777910022599997 13.3984913178 +-532.63724879100005 135.426599888 547.97081296600004 21.615034627899998 54.770693892600001 13.3987299521 +-532.72910406599999 135.386583699 547.87937197600002 21.546507949799999 54.763255312399998 13.3989703785 + +0 6 +0.51055604956800005 6 + +0 2 +774.32763467100006 2 + +9 0 0 0 0 5 1 6 2 2 2 -613.75855170600005 100.086578606 467.21535720000003 -38.658972477699997 44.958344582099997 13.636112156399999 +-617.57912059900002 98.422170001799998 463.41201884700001 -41.0880754083 43.493942211399997 13.6541494442 +-620.73387863899995 95.449719846400001 459.48602868099999 -43.361953329800002 41.787664939999999 13.6737264953 +-622.84859792400005 91.3061587694 455.79714573899997 -45.439664480499999 39.8700748722 13.694378281000001 +-623.71890611699996 86.415760773399995 452.71354887299998 -47.310407165500003 37.7614841364 13.7160525454 +-623.37953850899999 81.246287674599998 450.43799897000002 -48.952919059199999 35.489341740900002 13.7384068634 + +0 6 +21.530823719600001 6 + +0 2 +729.57123230100001 2 + +9 0 0 0 0 5 1 6 2 2 2 -593.470746824 108.92484217800001 487.41166657500003 -24.3659997221 49.779457369399999 13.560056293900001 +-597.52384743000005 107.15913249800001 483.376845081 -27.407537742900001 49.449292142099999 13.570727634600001 +-601.58410661400001 105.390308022 479.33486075799999 -30.408392939799999 48.7874530777 13.5839030981 +-605.63860857400005 103.623981102 475.29868233799999 -33.3116969883 47.801868927900003 13.5994283515 +-609.69167468199998 101.858289677 471.26389279599999 -36.073268159900003 46.517155453100003 13.616912169600001 +-613.75855170600005 100.086578606 467.21535720000003 -38.658972477699997 44.958344582099997 13.636112156399999 + +0 6 +22.611802242900001 6 + +0 2 +738.49044930100001 2 + +9 0 0 0 0 5 1 6 2 2 2 -613.75855170600005 100.086578606 467.21535720000003 -38.658972477699997 44.958344582099997 13.636112156399999 +-617.57912059900002 98.422170001799998 463.41201884700001 -41.0880754083 43.493942211399997 13.6541494442 +-620.73387863899995 95.449719846400001 459.48602868099999 -43.361953329800002 41.787664939999999 13.6737264953 +-622.84859792400005 91.3061587694 455.79714573899997 -45.439664480499999 39.8700748722 13.694378281000001 +-623.71890611699996 86.415760773399995 452.71354887299998 -47.310407165500003 37.7614841364 13.7160525454 +-623.37953850899999 81.246287674599998 450.43799897000002 -48.952919059199999 35.489341740900002 13.7384068634 + +0 6 +21.530823719600001 6 + +0 2 +729.57123230100001 2 + +9 0 0 0 0 5 1 6 2 2 2 -623.37953850899999 81.246287674599998 450.43799897000002 -48.952919059199999 35.489341740900002 13.7384068634 +-623.30442434300005 80.102101840299994 449.934340013 -49.316464778899999 34.9864368414 13.743354847299999 +-623.22930044899999 78.957809521300007 449.430628496 -49.668829982699997 34.4755210748 13.748343866700001 +-623.15404504399999 77.811430345800005 448.92601466899998 -50.008048393800003 33.959398084999997 13.7533190725 +-623.07882293700004 76.665598513500001 448.42162667999997 -50.335140432800003 33.437229771799998 13.758328429300001 +-623.00356693200001 75.519255174600005 447.91701823599999 -50.650475962199998 32.908343142600003 13.7633544789 + +0 6 +4.6797211180999998 6 + +0 2 +721.31958543600001 2 + +9 0 0 0 0 5 1 6 2 2 2 -620.70939424200003 40.572991795699998 432.53403298000001 -60.220090383100001 16.858009107099999 13.9158812902 +-620.63104558999999 39.379534916700003 432.00868570599999 -60.546088146599999 16.311239624399999 13.921077388100001 +-620.552696373 38.186021434700002 431.48331519200002 -60.856523025999998 15.7552298759 13.926302039899999 +-620.47420241600003 36.990302049199997 430.95697333099997 -61.149482417900003 15.193619159600001 13.931535484599999 +-620.39580910699999 35.796266332599998 430.43136776300003 -61.427362992200003 14.622048681500001 13.936796554500001 +-620.31742265699995 34.602237292700003 429.90576833599999 -61.688828947799998 14.0430589406 13.9420767312 + +0 6 +4.8565681339199998 6 + +0 2 +698.35422491199995 2 + +9 0 0 0 0 5 1 6 2 2 2 -619.26228892500001 18.529784935199999 422.83084032699998 -63.972897256000003 5.8367704569800001 14.0131524081 +-619.234423343 18.105318824699999 422.64399470900003 -63.999655398199998 5.61249103883 14.0150004209 +-619.206558019 17.680859468400001 422.45715178699999 -64.026413761800001 5.38820811143 14.0168487767 +-619.17869337800005 17.2564068193 422.27031249100003 -64.053176297299999 5.1638950923999998 14.0186971596 +-619.15082878299995 16.831955705399999 422.08347322100002 -64.079939456399998 4.9395742033500003 14.0205452383 +-619.12296453299996 16.407509250699999 421.89663641999999 -64.106702869000003 4.7152507083000001 14.022393688299999 + +0 6 +1.7262420402500001 6 + +0 2 +689.26765684999998 2 + +9 0 0 0 0 5 1 6 2 2 2 -620.31742265699995 34.602237292700003 429.90576833599999 -61.688828947799998 14.0430589406 13.9420767312 +-620.10639945900004 31.387794887799998 428.49080384600001 -62.392721836900002 12.4843621562 13.956292227600001 +-619.89537549600004 28.173354044100002 427.075840325 -62.977610554599998 10.871935628599999 13.9706211362 +-619.68437153499997 24.958874511400001 425.66088867799999 -63.437963545700001 9.2179073235400004 13.9849640262 +-619.47330687299996 21.744145670200002 424.24576881799999 -63.770264972699998 7.5351745290399998 13.999157391000001 +-619.26228892500001 18.529784935199999 422.83084032699998 -63.972897256000003 5.8367704569800001 14.0131524081 + +0 6 +13.0803692861 6 + +0 2 +693.05079456099998 2 + +9 0 0 0 0 5 1 6 2 2 2 -619.12296453299996 16.407509250699999 421.89663641999999 -64.106702869000003 4.7152507083000001 14.022393688299999 +-619.01409783600002 14.749184069 421.16665898299999 -64.211268238900004 3.8388122436600001 14.0296150046 +-618.82080608000001 13.071629012500001 420.49318748600001 -64.315841942999995 2.9623396779100002 14.0368374657 +-618.54427538100003 11.3819837549 419.87881647500001 -64.420419544599994 2.0857926491700001 14.044062582 +-618.18565597899999 9.6874479719700002 419.326211785 -64.524995801499998 1.20923927753 14.0512829356 +-617.74618740300002 7.9954060825699997 418.83798761499997 -64.629579058700003 0.33265453164699998 14.058506127799999 + +0 6 +6.7495741569399996 6 + +0 2 +687.21028812400004 2 + +9 0 0 0 0 5 1 6 2 2 2 -619.26228892500001 18.529784935199999 422.83084032699998 -63.972897256000003 5.8367704569800001 14.0131524081 +-619.234423343 18.105318824699999 422.64399470900003 -63.999655398199998 5.61249103883 14.0150004209 +-619.206558019 17.680859468400001 422.45715178699999 -64.026413761800001 5.38820811143 14.0168487767 +-619.17869337800005 17.2564068193 422.27031249100003 -64.053176297299999 5.1638950923999998 14.0186971596 +-619.15082878299995 16.831955705399999 422.08347322100002 -64.079939456399998 4.9395742033500003 14.0205452383 +-619.12296453299996 16.407509250699999 421.89663641999999 -64.106702869000003 4.7152507083000001 14.022393688299999 + +0 6 +1.7262420402500001 6 + +0 2 +689.26765684999998 2 + +9 0 0 0 0 5 1 6 2 2 2 -619.12296453299996 16.407509250699999 421.89663641999999 -64.106702869000003 4.7152507083000001 14.022393688299999 +-619.01409783600002 14.749184069 421.16665898299999 -64.211268238900004 3.8388122436600001 14.0296150046 +-618.82080608000001 13.071629012500001 420.49318748600001 -64.315841942999995 2.9623396779100002 14.0368374657 +-618.54427538100003 11.3819837549 419.87881647500001 -64.420419544599994 2.0857926491700001 14.044062582 +-618.18565597899999 9.6874479719700002 419.326211785 -64.524995801499998 1.20923927753 14.0512829356 +-617.74618740300002 7.9954060825699997 418.83798761499997 -64.629579058700003 0.33265453164699998 14.058506127799999 + +0 6 +6.7495741569399996 6 + +0 2 +687.21028812400004 2 + +9 0 0 0 0 5 1 6 2 2 2 -617.74618740300002 7.9954060825699997 418.83798761499997 -64.629579058700003 0.33265453164699998 14.058506127799999 +-617.68094483699997 7.7442109854599996 418.76550780399998 -64.645105124699995 0.202519585398 14.059578442799999 +-617.61570296000002 7.4930175504900003 418.69302848299998 -64.660631390399999 0.072383803136299996 14.060651030000001 +-617.550462251 7.2418303286799999 418.62055099600002 -64.676158624500005 -0.057758455882299997 14.0617232249 +-617.48522052600003 6.9906386614100002 418.54807200499999 -64.691686724199997 -0.18791359261400001 14.0627956281 +-617.41998077999995 6.7394543210300002 418.47559528199997 -64.707215566399995 -0.31807210054599999 14.0638680925 + +0 6 +1.0013199712400001 6 + +0 2 +685.17623066600004 2 + +2 29 -71 32 0 -0 1 1 -1.83697019872e-16 -0 1.83697019872e-16 1 0 32 +2 29 -77 32 0 0 1 -1.83697019872e-16 -1 0 1 -1.83697019872e-16 0 32 +2 -20.280457959 -9 63.607579398200002 0.046033930337705718 -1.0408340855901293e-16 -0.99893987669812412 -1.66345171270774e-16 -1 9.6528218346277826e-17 -0.99893987669812412 1.6172525159957992e-16 -0.046033930337705718 100 +2 46 94 32 0 -0 1 1 -1.83697019872e-16 -0 1.83697019872e-16 1 0 32 +2 -105.566941595 75.81028311 29 0 0 1 1 0 -0 -0 1 0 4 +2 -105.566941595 75.81028311 -15.760416521 0 0 -1 0 1 0 1 -0 0 4 +2 -105.566941595 75.81028311 -15.760416521 0 0 -1 0 1 0 1 -0 0 4 +1 11.648931638600001 78.81028311 33 0 1 0 0 0 -1 -1 0 0 +1 -108.566941595 75.81028311 25 -1 0 0 0 1 0 0 0 -1 +2 -105.566941595 75.81028311 29 0 0 1 1 0 -0 -0 1 0 4 +2 -105.566941595 75.81028311 29 0 0 1 1 0 -0 -0 1 0 4 +1 -108.566941595 75.81028311 25 -1 0 0 0 1 0 0 0 -1 +1 11.648931638600001 72.81028311 25 0 -1 0 0 0 1 -1 0 0 +2 -105.566941595 75.81028311 29 0 0 1 1 0 -0 -0 1 0 4 +2 -140.86673680999999 -40.499889463999999 29 0 0 1 1 0 -0 -0 1 0 4 +2 -140.86673680999999 -40.499889463999999 -15.760416521 0 0 -1 0 1 0 1 -0 0 4 +2 -140.86673680999999 -40.499889463999999 -15.760416521 0 0 -1 0 1 0 1 -0 0 4 +1 -63.562477510999997 -84.209176384399996 29 0.46250276340103236 0.8866178397970621 0 0.8866178397970621 -0.46250276340103236 0 0 0 -1 +1 -138.206883291 -41.887397754200002 25 -0.8866178397970621 0.46250276340103236 0 0.46250276340103236 0.8866178397970621 0 0 0 -1 +2 -140.86673680999999 -40.499889463999999 29 0 0 1 1 0 -0 -0 1 0 4 +2 -140.86673680999999 -40.499889463999999 29 0 0 1 1 0 -0 -0 1 0 4 +1 -138.206883291 -41.887397754200002 25 -0.8866178397970621 0.46250276340103236 0 0.46250276340103236 0.8866178397970621 0 0 0 -1 +1 -60.787460930599998 -78.889469345600006 29 -0.46250276340103236 -0.8866178397970621 0 0.8866178397970621 -0.46250276340103236 0 0 0 1 +2 -140.86673680999999 -40.499889463999999 29 0 0 1 1 0 -0 -0 1 0 4 +2 -105.402023218 -59 29 0 0 1 1 0 -0 -0 1 0 4 +2 -105.402023218 -59 -15.760416521 0 0 -1 0 1 0 1 -0 0 4 +2 -105.402023218 -59 -15.760416521 0 0 -1 0 1 0 1 -0 0 4 +2 -69.937309626300006 -77.500110535999994 29 0 0 1 1 0 -0 -0 1 0 4 +2 -69.937309626300006 -77.500110535999994 -15.760416521 0 0 -1 0 1 0 1 -0 0 4 +2 -69.937309626300006 -77.500110535999994 -15.760416521 0 0 -1 0 1 0 1 -0 0 4 +1 -60.787460930599998 -78.889469345600006 29 -0.46250276340103236 -0.8866178397970621 0 0.8866178397970621 -0.46250276340103236 0 0 0 1 +1 -72.597163145600007 -76.112602245800005 25 0.8866178397970621 -0.46250276340103236 0 -0.46250276340103236 -0.8866178397970621 0 0 -0 -1 +2 -69.937309626300006 -77.500110535999994 29 0 0 1 1 0 -0 -0 1 0 4 +2 -69.937309626300006 -77.500110535999994 29 0 0 1 1 0 -0 -0 1 0 4 +1 -72.597163145600007 -76.112602245800005 25 0.8866178397970621 -0.46250276340103236 0 -0.46250276340103236 -0.8866178397970621 0 0 -0 -1 +1 -63.562477510999997 -84.209176384399996 29 0.46250276340103236 0.8866178397970621 0 0.8866178397970621 -0.46250276340103236 0 0 0 -1 +2 -69.937309626300006 -77.500110535999994 29 0 0 1 1 0 -0 -0 1 0 4 +2 -105.402023218 -59 29 0 0 1 1 0 -0 -0 1 0 4 +1 -55.512399909899997 -56 29 -0 -1 -0 -1 0 0 0 0 -1 +1 -108.402023218 -59 25 -1 0 0 0 1 0 0 0 -1 +2 -105.402023218 -59 29 0 0 1 1 0 -0 -0 1 0 4 +2 -105.402023218 -59 29 0 0 1 1 0 -0 -0 1 0 4 +1 -108.402023218 -59 25 -1 0 0 0 1 0 0 0 -1 +1 -55.512399909899997 -62 29 0 1 -0 -1 0 0 0 0 1 +1 0 0 17 0 0 1 -1 0 0 0 -1 0 +2 6546.1031688200001 -190.05946217200011 4464.6391564699998 -0.67084843793828242 -0.48336709773221564 0.56242210318025465 0.39635068152440878 -0.87468690109419267 -0.27897842624363411 -0.62679223876090173 -0.03576414243586299 -0.77836521989675533 4.0000000000000098 +2 6546.1031688200001 -190.05946217200011 4464.6391564699998 -0.67084843793828242 -0.48336709773221564 0.56242210318025465 0.39635068152440878 -0.87468690109419267 -0.27897842624363411 0.62679223876090173 0.03576414243586299 0.77836521989675533 4.0000000000000098 +1 -60 126 17 0.1736481776670335 0.98480775301218992 -0 -0.98480775301218992 0.1736481776670335 0 0 0 1 +1 -150.43016332600001 147.75249073500001 110.672767404 -0.88547681931885824 0.46288846939492589 -0.040805236798493467 0.25576721919783391 0.41217950955101668 -0.8744662266148937 -0.38796125068460835 -0.78475621488937952 -0.48336709772152292 +1 139.65669082100001 90.795138529200003 18 -0.12278780396896194 -0.69636424031978417 0.70710678118678083 -0.98480775301219525 0.17364817766700277 3.1114000265119999e-14 -0.1227878039690862 -0.69636424032023581 -0.70710678118631431 +1 -202.73385071300001 -25.485227554600002 15.683991003499999 0.46239775054192084 0.88641653013784827 0.021308575554196355 0.046033930337688593 -3.2834845953288998e-14 -0.99893987669812478 -0.88547681931908107 0.46288846939449396 -0.040805236798556528 +1 -291.37061390000002 20.696327624799999 17.999772946499998 0.32353571224514444 0.62021799000427691 0.71460078909631897 0.88661783979706787 -0.46250276340102114 1.2961853812498703e-14 0.3305048396856059 0.63357780794585428 -0.69953249547316843 +1 61 -109 17 0 1 -0 -1 0 0 0 0 1 +9 0 0 0 0 5 1 9 2 3 2 -18.178732654600001 -108.99998734 17.999999992799999 -18.1787324529 -107.99998748 17 +-25.953684776500001 -108.999964304 17.999999982599999 -25.876099490800001 -107.996389385 17 +-33.728903434899998 -108.24589901 17.999983989699999 -33.573036743000003 -107.246273407 17 +-41.406905148900002 -106.737744475 17.999952034700001 -41.173027957199999 -105.749772338 17 +-50.678624750200001 -103.95810641600001 17.999894687699999 -50.349714562000003 -102.99411222000001 17 +-59.512338757800002 -100.106137522 17.999819802000001 -59.0919832636 -99.177582976099998 17 +-61.200608826699998 -99.322840418499993 17.999804728400001 -60.7627425899 -98.401553426999996 17 +-62.8686208974 -98.501368165800002 17.999789099299999 -62.413421073999999 -97.587761994100006 17 +-64.516694178199998 -97.641653013799996 17.999772946499998 -64.044336139699993 -96.7361426107 17 + +408.473308997 6 +463.17647948799998 3 +476.25355409100001 6 + +0 2 +1.4267998955500001 2 + +1 61 -39 17 -1 0 0 0 -1 0 0 0 1 +3 29 -77 -14 -0 -1.42108547152e-14 1 -0.25881904510298503 -0.96592582628894397 -1.3726631583051695e-14 0.96592582628894397 -0.25881904510298503 -3.6780398474853167e-15 0 +0.78539816339699997 +1 -35 -39 17 0 -1 0 1 0 0 -0 0 1 +3 29 -71 -14 3.5527136788e-15 -1.42108547152e-14 1 0.96592582628894397 -0.25881904510298503 -7.1096977432482404e-15 0.25881904510298503 0.96592582628894397 1.2807121621180366e-14 0 +0.78539816339699997 +1 -73 1 17 -1 0 0 0 -1 0 0 0 1 +1 78 56 17 0 1 -0 -1 0 0 0 0 1 +1 78 126 17 -1 0 0 0 -1 0 0 0 1 +3 46 88 -14 -7.1054273576e-15 -1.42108547152e-14 1 -0.25881904510298503 -0.96592582628894397 -1.5565651506794352e-14 0.96592582628894397 -0.25881904510298503 3.1852759440405309e-15 0 +0.78539816339699997 +1 -60 126 17 0 -1 0 1 0 0 -0 0 1 +3 46 94 -14 7.1054273576e-15 -1.42108547152e-14 1 0.96592582628894397 -0.25881904510298503 -1.0541355639011163e-14 0.25881904510298503 0.96592582628894397 1.1887611659309036e-14 0 +0.78539816339699997 +2 6539.8446190000004 -84.330236627299939 4548.0418006099999 -0.67084843793832383 -0.483367097732192 0.56242210318022579 -0.39635068152438896 0.87468690109420677 0.27897842624361807 0.62679223876086998 0.035764142435839641 0.77836521989678198 4.0000000000000471 +2 6539.8446190000004 -84.330236627299939 4548.0418006099999 -0.67084843793832383 -0.483367097732192 0.56242210318022579 -0.39635068152438896 0.87468690109420677 0.27897842624361807 -0.62679223876086998 -0.035764142435839641 -0.77836521989678198 4.0000000000000471 +2 6571.4743707999987 -189.30032010399981 4495.5539718999999 -0.67084843793828242 -0.48336709773221564 0.56242210318025465 0.39635068152449632 -0.87468690109418767 -0.27897842624352542 0.62679223876084622 0.035764142435985136 0.7783652198967943 4.0000000000006439 +2 6571.4743707999987 -189.30032010399981 4495.5539718999999 -0.67084843793828242 -0.48336709773221564 0.56242210318025465 0.39635068152449632 -0.87468690109418767 -0.27897842624352542 -0.62679223876084622 -0.035764142435985136 -0.7783652198967943 4.0000000000006439 +2 6520.7319668399996 -190.81860424000013 4433.7243410299998 -0.67084843793828242 -0.48336709773221564 0.56242210318025465 0.39635068152440878 -0.87468690109419267 -0.27897842624363411 0.62679223876090173 0.03576414243586299 0.77836521989675533 4.0000000000000098 +2 6520.7319668399996 -190.81860424000013 4433.7243410299998 -0.67084843793828242 -0.48336709773221564 0.56242210318025465 0.39635068152440878 -0.87468690109419267 -0.27897842624363411 -0.62679223876090173 -0.03576414243586299 -0.77836521989675533 4.0000000000000098 +1 139.48304264399999 -109 18 -0 -0.70710678118654757 -0.70710678118654757 -1 0 0 0 0.70710678118654757 -0.70710678118654757 +1 61 191.93806182200001 18 0.70710678118654757 0 -0.70710678118654757 0 -1 0 -0.70710678118654757 -0 -0.70710678118654757 +3 -35 -1 56 -7.1054273576e-15 1.7763568394e-15 -1 -0.96592582628894397 0.25881904510298503 7.3230707724615126e-15 0.25881904510298503 0.96592582628894397 -1.2319097586119645e-16 0 +0.78539816339699997 +1 -290.89825586199998 -39 18 0 0.70710678118654757 -0.70710678118654757 1 0 0 0 -0.70710678118654757 -0.70710678118654757 +1 -73 191.93806182200001 18 0.70710678118654757 0 -0.70710678118654757 0 -1 0 -0.70710678118654757 -0 -0.70710678118654757 +3 -18 1 73 3.5527136788e-15 7.1054273576e-15 -1 0.25881904510298503 0.96592582628894397 7.7828257533971761e-15 0.96592582628894397 -0.25881904510298503 1.5926379720202654e-15 0 +0.78539816339699997 +1 139.48304264399999 56 18 -0 -0.70710678118654757 -0.70710678118654757 -1 0 0 0 0.70710678118654757 -0.70710678118654757 +1 78 191.93806182200001 18 0.70710678118654757 0 -0.70710678118654757 0 -1 0 -0.70710678118654757 -0 -0.70710678118654757 +3 -51.251133647400003 226 118 2.84217094304e-14 0 -1 -0.90630778703659742 -0.42261826174081224 -2.5758816577663016e-14 -0.42261826174081224 0.90630778703659742 -1.2011533435178099e-14 0 +0.78539816339699997 +1 -290.89825586199998 126 18 0 0.70710678118654757 -0.70710678118654757 1 0 0 0 -0.70710678118654757 -0.70710678118654757 +1 -291.82063300200002 -130.88817565299999 17.999167119500001 -0.61373015751500914 0.3208312256580047 -0.72138936670801068 0.46327432155300652 0.88621493047093369 3.7941871866564725e-14 0.63930602745962273 -0.33420116943718337 -0.69252969726981062 +3 6531.7944377447402 -90.130641800086735 4554.7908658481629 0.67084843793832383 0.483367097732192 -0.56242210318022579 -0.39635068152339037 0.87468690109426372 0.27897842624485814 -0.62679223876150136 -0.035764142434446117 -0.77836521989633745 5.1999999999950157 +0.19739555985040738 +1 6539.8446190000004 -84.330236627299882 4548.0418006099999 -0.67084843793832383 -0.483367097732192 0.56242210318022579 -0.39635068152362118 0.87468690109425062 0.27897842624457175 -0.62679223876135548 -0.035764142434768047 -0.77836521989644003 +3 6531.7944377447402 -90.130641800086735 4554.7908658481629 0.67084843793832383 0.483367097732192 -0.56242210318022579 -0.39635068152339037 0.87468690109426372 0.27897842624485814 0.62679223876150136 0.035764142434446117 0.77836521989633745 5.1999999999950157 +0.19739555985040738 +1 6539.8446190000004 -84.330236627299882 4548.0418006099999 -0.67084843793832383 -0.483367097732192 0.56242210318022579 -0.39635068152362118 0.87468690109425062 0.27897842624457175 0.62679223876135548 0.035764142434768047 0.77836521989644003 +3 6512.6817855847403 -196.61900941278674 4440.4734062681628 0.67084843793828242 0.48336709773221564 -0.56242210318025465 0.3963506815233957 -0.87468690109425051 -0.27897842624489211 -0.62679223876154233 -0.035764142434449316 -0.77836521989630447 5.1999999999891138 +0.19739555985087301 +1 6520.7319668399996 -190.81860424000021 4433.7243410299998 0.67084843793828242 0.48336709773221564 -0.56242210318025465 0.39635068152364084 -0.87468690109423652 -0.27897842624458769 -0.62679223876138723 -0.035764142434791396 -0.7783652198964135 +3 6512.6817855847403 -196.61900941278674 4440.4734062681628 0.67084843793828242 0.48336709773221564 -0.56242210318025465 0.3963506815233957 -0.87468690109425051 -0.27897842624489211 0.62679223876154233 0.035764142434449316 0.77836521989630447 5.1999999999891138 +0.19739555985087301 +1 6520.7319668399996 -190.81860424000021 4433.7243410299998 0.67084843793828242 0.48336709773221564 -0.56242210318025465 0.39635068152364084 -0.87468690109423652 -0.27897842624458769 0.62679223876138723 0.035764142434791396 0.7783652198964135 +3 6538.0529875647408 -195.85986734478661 4471.3882217081627 0.67084843793828242 0.48336709773221564 -0.56242210318025465 0.39635068152349706 -0.87468690109424474 -0.27897842624476621 -0.62679223876147816 -0.035764142434590779 -0.77836521989634944 5.199999999994402 +0.19739555985046073 +1 6546.1031688200001 -190.0594621720002 4464.6391564699998 0.67084843793828242 0.48336709773221564 -0.56242210318025465 0.39635068152364084 -0.87468690109423652 -0.27897842624458769 -0.62679223876138723 -0.035764142434791396 -0.7783652198964135 +3 6538.0529875647408 -195.85986734478661 4471.3882217081627 0.67084843793828242 0.48336709773221564 -0.56242210318025465 0.39635068152349706 -0.87468690109424474 -0.27897842624476621 0.62679223876147816 0.035764142434590779 0.77836521989634944 5.199999999994402 +0.19739555985046073 +1 6546.1031688200001 -190.0594621720002 4464.6391564699998 0.67084843793828242 0.48336709773221564 -0.56242210318025465 0.39635068152364084 -0.87468690109423652 -0.27897842624458769 0.62679223876138723 0.035764142434791396 0.7783652198964135 +3 6563.4241895447394 -195.10072527678628 4502.3030371381628 0.67084843793828242 0.48336709773221564 -0.56242210318025465 0.39635068152346192 -0.87468690109424674 -0.27897842624480979 -0.62679223876150036 -0.03576414243454179 -0.77836521989633378 5.1999999999663684 +0.19739555985276167 +1 6571.4743707999987 -189.30032010399992 4495.5539718999999 0.67084843793828242 0.48336709773221564 -0.56242210318025465 0.39635068152368702 -0.87468690109423397 -0.27897842624453029 -0.62679223876135803 -0.035764142434855872 -0.77836521989643404 +3 6563.4241895447394 -195.10072527678628 4502.3030371381628 0.67084843793828242 0.48336709773221564 -0.56242210318025465 0.39635068152346192 -0.87468690109424674 -0.27897842624480979 0.62679223876150036 0.03576414243454179 0.77836521989633378 5.1999999999663684 +0.19739555985276167 +1 6571.4743707999987 -189.30032010399992 4495.5539718999999 0.67084843793828242 0.48336709773221564 -0.56242210318025465 0.39635068152368702 -0.87468690109423397 -0.27897842624453029 0.62679223876135803 0.035764142434855872 0.77836521989643404 +1 6544.4953286829277 -197.32029769900524 4466.2675170938719 0.62679223876190604 0.035764142433215615 0.77836521989606811 0.77886349125394561 0 -0.62719348050798085 -0.022431036970071674 0.99936025842336595 -0.0278553848372377 +1 6534.0676360330444 -82.39039509713534 4552.6046860364959 -0.62679223876221257 -0.035764142433376306 -0.77836521989581386 -0.77886349125369569 0 0.62719348050829116 -0.022431036970183553 0.99936025842336018 -0.027855384837353916 +1 6569.8665306629291 -196.56115563099715 4497.1823325238711 0.62679223876190238 0.035764142433141341 0.77836521989607454 0.77886349125394994 3.4694469519536142e-18 -0.62719348050797552 -0.022431036970024902 0.99936025842336862 -0.027855384837179999 +1 6519.1241267029272 -198.07943976700383 4435.352701653871 0.62679223876190249 0.035764142433141369 0.77836521989607432 0.77886349125394982 0 -0.62719348050797574 -0.022431036970024923 0.99936025842336862 -0.02785538483718002 +3 0 0 -7 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 10.265711135 +0.17453292519899999 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 11.5 +3 0 0 -7 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 10.265711135 +0.17453292519899999 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 11.5 +5 0 1.3877787807800001e-15 0.40000000000000002 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 11.800000000000001 0.29999999999999999 +5 -1.7763568394e-15 2.6645352590999998e-15 0.40000000000000002 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 11.800000000000001 0.29999999999999999 +1 0 -11.5 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 +5 -1.7763568394e-15 -1.94289029309e-16 0.40000000000000002 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 11.9 0.29999999999999999 +5 0 8.881784197e-16 0.40000000000000002 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 11.9 0.29999999999999999 +5 -1.7763568394e-15 -4.4408920985e-16 4 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 1 +5 1.7763568394e-15 2.91433543964e-16 4 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8 1 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9 +3 2.7505636178100001e-14 1.5128099898e-14 -7.3874372842399998 -2.2204460492499999e-15 -1.2212453270899999e-15 1 -0.47111581537810726 0.88207136247620077 3.1138278588459099e-17 -0.88207136247620077 -0.47111581537810726 -2.5339398600155531e-15 0 +0.62831853071800003 +3 2.6445401040999999e-14 -1.8623851981100001e-15 -7.3874372842399998 -1.7763568394e-15 2.22044604925e-16 1 0.4794255386042035 -0.87758256189037243 1.0464933077266227e-15 0.87758256189037243 0.4794255386042035 1.4524459316418111e-15 0 +0.62831853071800003 +1 0 -16 7 0 0 1 1 0 -0 -0 1 0 +5 -3.5527136788e-15 -6.4392935428299998e-15 1 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 15.800000000000001 0.5 +5 -1.7763568394e-15 8.881784197e-16 1 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 15.800000000000001 0.5 +3 -1.68753899743e-14 1.4506914188399999e-14 21.800000000000001 1.1102230246299999e-15 -7.4014868308300001e-16 -1 0.52029602321325741 0.85398597659942255 -5.4431971356628967e-17 0.85398597659942255 -0.52029602321325741 1.3332113103264298e-15 0 +0.78539816339699997 +3 5.5659180967900002e-14 2.63585449763e-14 21.800000000000001 -3.7007434154200002e-15 -1.71159382963e-15 -1 0.4794255386042035 -0.87758256189037243 -2.7216600725124432e-16 -0.87758256189037243 -0.4794255386042035 4.0682896810452049e-15 0 +0.78539816339699997 +2 0 0 2 0 0 1 1 0 -0 -0 1 0 15.75 +2 0 0 2 0 0 1 1 0 -0 -0 1 0 15.75 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 16 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 16 +1 0 0 4 0 0 1 1 0 -0 -0 1 0 +6 -0 -0 1 +7 0 0 5 9 3 54.99883058236901 -77.827880356800506 -8.8444304424672282 54.494580700916231 -77.031641433767163 -8.8445572317234564 53.677648507774393 -76.433420972315616 -8.844651431581724 52.649742429278376 -76.202632899039145 -8.8446860602255128 50.661227612881703 -76.585768072837254 -8.8446196796905951 49.464786675499454 -78.219632428322711 -8.844354144271847 49.233998595779667 -79.247538498869744 -8.844188341193103 49.425566191343933 -80.241795894881761 -8.8440289647057853 49.92981608019727 -81.038034817438074 -8.8439021821598089 + -4.7123889803800001 6 4.4408920985e-16 3 4.7123889803800001 6 +1 52.322070086320025 -79.208331711957044 -8.8442020779425441 2.4071416458665998e-06 0.00016075889763914292 0.99999998707539117 0 0.99999998707828841 -0.00016075889763960866 -0.99999999999710298 3.8696943745190786e-10 2.4071416147622096e-06 +6 -0 -0 1 +2 52.464323334806977 -79.432957588636782 -8.844166308533886 2.4073398922267699e-06 0.00016075840719009349 0.99999998707546955 -0.89673410913656082 0.44256969253633571 -6.8988055940744086e-05 -0.44256969790674028 -0.89673409738061571 0.00014522296273375421 3 +1 6459.54771669 -171.36971285800001 4382.7939023400004 -0.12288999641698768 0.8203682910049177 0.55847463316994406 -0.7313415222018006 0.3055357850455534 -0.60974376746314596 -0.67084843793824722 -0.48336709773242559 0.56242210318011654 +1 -4 0 3.5 1 0 0 -0 1 0 0 -0 1 +2 6440.9897887300003 -148.96197268500001 4394.1405533999996 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.7313415222018449 0.30553578504595075 -0.60974376746289349 0.12288999641647205 -0.82036829100489594 -0.5584746331700895 6 +1 6428.36239836 -94.436394900600007 4436.6083103399997 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.1228899964168175 0.82036829100504027 0.5584746331698015 -0.73134152220178694 0.30553578504556328 -0.60974376746315728 +2 6440.9897887300003 -148.96197268500001 4394.1405533999996 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.7313415222018449 -0.30553578504595075 0.60974376746289349 -0.12288999641647205 0.82036829100489594 0.5584746331700895 6 +1 -4 0 5 1 0 0 -0 1 0 0 -0 1 +6 -0 -0 -1 +2 54.24518882047505 -62.023807402794773 -8.8469692683938774 -2.4073398926571571e-06 -0.000160758407183925 -0.99999998707546967 0.89601765659891019 -0.44401841659014385 6.9222675256774821e-05 -0.44401842197954156 -0.89601764485166036 0.00014511127453084582 11.5 +6 -0 -0 -1 +2 54.24518882047505 -62.023807402794773 -8.8469692683938774 -2.4073398926571571e-06 -0.000160758407183925 -0.99999998707546967 0.89601765659891019 -0.44401841659014385 6.9222675256774821e-05 -0.44401842197954156 -0.89601764485166036 0.00014511127453084582 11.5 +6 -0 -0 -1 +2 54.24518882047505 -62.023807402794773 -8.8469692683938774 -2.4073398926571571e-06 -0.000160758407183925 -0.99999998707546967 0.89601765659891019 -0.44401841659014385 6.9222675256774821e-05 -0.44401842197954156 -0.89601764485166036 0.00014511127453084582 11.5 +6 -0 -0 -1 +2 54.24518882047505 -62.023807402794773 -8.8469692683938774 -2.4073398926571571e-06 -0.000160758407183925 -0.99999998707546967 0.89601765659891019 -0.44401841659014385 6.9222675256774821e-05 -0.44401842197954156 -0.89601764485166036 0.00014511127453084582 11.5 +4 6446.3565762400003 -145.095035903 4389.6411765700004 0 0 1 -1 0 0 0 -1 0 10 +1 6436.4125796099997 -88.635989727799995 4429.8592451000004 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.74159448037033837 -0.43725522647176845 0.50876860517073041 1.6542323066914832e-13 0.75839575140757587 0.6517943573297782 +6 -0 -0 -1 +7 0 0 5 12 4 63.458757036710267 -65.355148903772715 3.1535442447448077 63.181803347536516 -66.120680400292258 3.1536679876944618 62.835877372674076 -66.82832632623149 3.1537826299422704 62.43739770422053 -67.471547304518026 3.1538863280193254 61.532510946006369 -68.675224813472596 3.1540839132012479 60.450910093236416 -69.658812577337812 3.1542435216410922 59.84874076883807 -70.112910133505011 3.1543187793213292 58.353469408294586 -71.031712358404548 3.1544690193259157 56.552559958345228 -71.635206912555986 3.1545697728356572 55.442240078971736 -71.852623194766238 3.15460721148429 54.249424157848807 -71.894693088780514 3.1546178150229025 53.04509871256414 -71.74606011351716 3.1545966975168085 + 0 6 6.3403688385199999 3 13.0306959711 3 21.591258380799999 6 +6 -0 -0 1 +7 0 0 5 12 4 63.458757036710267 -65.355148903772715 3.1535442447448077 63.181803347536516 -66.120680400292258 3.1536679876944618 62.835877372674076 -66.82832632623149 3.1537826299422704 62.43739770422053 -67.471547304518026 3.1538863280193254 61.532510946006369 -68.675224813472596 3.1540839132012479 60.450910093236416 -69.658812577337812 3.1542435216410922 59.84874076883807 -70.112910133505011 3.1543187793213292 58.353469408294586 -71.031712358404548 3.1544690193259157 56.552559958345228 -71.635206912555986 3.1545697728356572 55.442240078971736 -71.852623194766238 3.15460721148429 54.249424157848807 -71.894693088780514 3.1546178150229025 53.04509871256414 -71.74606011351716 3.1545966975168085 + 0 6 6.3403688385199999 3 13.0306959711 3 21.591258380799999 6 +1 54.252354982009919 -62.022936847790369 3.1530306261502594 -2.4644505342897211e-06 -0.00016064950270028473 -0.99999998709283178 -5.169878828456423e-26 -0.99999998709586857 0.0001606495027007726 -0.99999999999696332 3.9591275276429707e-10 2.4644505024881274e-06 +4 0 -1.3999760552199999e-17 0 0 0 -1 -0.87758256189037243 0.4794255386042035 0 0.4794255386042035 0.87758256189037243 0 10 +6 -0 -0 -1 +7 0 0 5 12 4 63.458757036710267 -65.355148903772715 3.1535442447448077 63.181803347536516 -66.120680400292258 3.1536679876944618 62.835877372674076 -66.82832632623149 3.1537826299422704 62.43739770422053 -67.471547304518026 3.1538863280193254 61.532510946006369 -68.675224813472596 3.1540839132012479 60.450910093236416 -69.658812577337812 3.1542435216410922 59.84874076883807 -70.112910133505011 3.1543187793213292 58.353469408294586 -71.031712358404548 3.1544690193259157 56.552559958345228 -71.635206912555986 3.1545697728356572 55.442240078971736 -71.852623194766238 3.15460721148429 54.249424157848807 -71.894693088780514 3.1546178150229025 53.04509871256414 -71.74606011351716 3.1545966975168085 + 0 6 6.3403688385199999 3 13.0306959711 3 21.591258380799999 6 +6 -0 -0 1 +7 0 0 5 12 4 63.458757036710267 -65.355148903772715 3.1535442447448077 63.181803347536516 -66.120680400292258 3.1536679876944618 62.835877372674076 -66.82832632623149 3.1537826299422704 62.43739770422053 -67.471547304518026 3.1538863280193254 61.532510946006369 -68.675224813472596 3.1540839132012479 60.450910093236416 -69.658812577337812 3.1542435216410922 59.84874076883807 -70.112910133505011 3.1543187793213292 58.353469408294586 -71.031712358404548 3.1544690193259157 56.552559958345228 -71.635206912555986 3.1545697728356572 55.442240078971736 -71.852623194766238 3.15460721148429 54.249424157848807 -71.894693088780514 3.1546178150229025 53.04509871256414 -71.74606011351716 3.1545966975168085 + 0 6 6.3403688385199999 3 13.0306959711 3 21.591258380799999 6 +4 0 -1.3999760552199999e-17 0 0 0 -1 -0.4794255386042035 -0.87758256189037243 -0 -0.87758256189037243 0.4794255386042035 0 10 +6 -0 -0 -1 +7 0 0 5 12 4 63.458757036710267 -65.355148903772715 3.1535442447448077 63.181803347536516 -66.120680400292258 3.1536679876944618 62.835877372674076 -66.82832632623149 3.1537826299422704 62.43739770422053 -67.471547304518026 3.1538863280193254 61.532510946006369 -68.675224813472596 3.1540839132012479 60.450910093236416 -69.658812577337812 3.1542435216410922 59.84874076883807 -70.112910133505011 3.1543187793213292 58.353469408294586 -71.031712358404548 3.1544690193259157 56.552559958345228 -71.635206912555986 3.1545697728356572 55.442240078971736 -71.852623194766238 3.15460721148429 54.249424157848807 -71.894693088780514 3.1546178150229025 53.04509871256414 -71.74606011351716 3.1545966975168085 + 0 6 6.3403688385199999 3 13.0306959711 3 21.591258380799999 6 +6 -0 -0 1 +7 0 0 5 12 4 63.458757036710267 -65.355148903772715 3.1535442447448077 63.181803347536516 -66.120680400292258 3.1536679876944618 62.835877372674076 -66.82832632623149 3.1537826299422704 62.43739770422053 -67.471547304518026 3.1538863280193254 61.532510946006369 -68.675224813472596 3.1540839132012479 60.450910093236416 -69.658812577337812 3.1542435216410922 59.84874076883807 -70.112910133505011 3.1543187793213292 58.353469408294586 -71.031712358404548 3.1544690193259157 56.552559958345228 -71.635206912555986 3.1545697728356572 55.442240078971736 -71.852623194766238 3.15460721148429 54.249424157848807 -71.894693088780514 3.1546178150229025 53.04509871256414 -71.74606011351716 3.1545966975168085 + 0 6 6.3403688385199999 3 13.0306959711 3 21.591258380799999 6 +4 6446.3565762400003 -145.095035903 4389.6411765700004 0 0 1 0 -1 0 1 0 -0 10 +6 -0 -0 -1 +7 0 0 5 21 7 53.045099855607077 -71.746050894319524 3.1545967048336934 52.794582454943338 -71.715136175968382 3.1545923386152026 52.544585016340534 -71.67609516050743 3.1545866679416577 52.29552140301621 -71.628915750635315 3.1545796830473591 51.155876463337336 -71.374539803844527 3.1545415336631777 50.053418098496877 -70.949880110888444 3.1544759196913219 49.231963881095908 -70.516055958768447 3.1544081519441534 47.705680538464549 -69.462714624507498 3.1542424950257555 46.465248926996537 -68.084509927925865 3.1540239195919639 45.929680929387359 -67.325772753498768 3.1539032427044731 45.04362395093176 -65.6908936743298 3.1536425545591555 44.563410865545848 -63.905853180571285 3.1533567504029634 44.43000616840709 -62.987618748215482 3.1532094535423312 44.390113199321604 -61.432104179535145 3.152959488732904 44.639984430324148 -59.946583481852031 3.1527200772634387 44.788331836124598 -59.356767828625834 3.1526248993936861 45.099841513615502 -58.426572559384113 3.1524746201398557 45.492930421899473 -57.595329707550263 3.1523400378173392 45.659371682132587 -57.282395741866821 3.1522893353103427 45.833114706916604 -56.9874166910231 3.1522414892201596 46.012347986980785 -56.709641908899357 3.1521964089538415 + 19.018065117900001 6 20.746417493599999 3 26.9695886435 3 33.193103160299998 3 39.485156688799997 3 43.865331243699998 3 46.755031794799997 6 +6 -0 -0 1 +7 0 0 5 21 7 53.045099855607077 -71.746050894319524 3.1545967048336934 52.794582454943338 -71.715136175968382 3.1545923386152026 52.544585016340534 -71.67609516050743 3.1545866679416577 52.29552140301621 -71.628915750635315 3.1545796830473591 51.155876463337336 -71.374539803844527 3.1545415336631777 50.053418098496877 -70.949880110888444 3.1544759196913219 49.231963881095908 -70.516055958768447 3.1544081519441534 47.705680538464549 -69.462714624507498 3.1542424950257555 46.465248926996537 -68.084509927925865 3.1540239195919639 45.929680929387359 -67.325772753498768 3.1539032427044731 45.04362395093176 -65.6908936743298 3.1536425545591555 44.563410865545848 -63.905853180571285 3.1533567504029634 44.43000616840709 -62.987618748215482 3.1532094535423312 44.390113199321604 -61.432104179535145 3.152959488732904 44.639984430324148 -59.946583481852031 3.1527200772634387 44.788331836124598 -59.356767828625834 3.1526248993936861 45.099841513615502 -58.426572559384113 3.1524746201398557 45.492930421899473 -57.595329707550263 3.1523400378173392 45.659371682132587 -57.282395741866821 3.1522893353103427 45.833114706916604 -56.9874166910231 3.1522414892201596 46.012347986980785 -56.709641908899357 3.1521964089538415 + 19.018065117900001 6 20.746417493599999 3 26.9695886435 3 33.193103160299998 3 39.485156688799997 3 43.865331243699998 3 46.755031794799997 6 +6 -0 -0 -1 +7 0 0 5 21 7 53.045099855607077 -71.746050894319524 3.1545967048336934 52.794582454943338 -71.715136175968382 3.1545923386152026 52.544585016340534 -71.67609516050743 3.1545866679416577 52.29552140301621 -71.628915750635315 3.1545796830473591 51.155876463337336 -71.374539803844527 3.1545415336631777 50.053418098496877 -70.949880110888444 3.1544759196913219 49.231963881095908 -70.516055958768447 3.1544081519441534 47.705680538464549 -69.462714624507498 3.1542424950257555 46.465248926996537 -68.084509927925865 3.1540239195919639 45.929680929387359 -67.325772753498768 3.1539032427044731 45.04362395093176 -65.6908936743298 3.1536425545591555 44.563410865545848 -63.905853180571285 3.1533567504029634 44.43000616840709 -62.987618748215482 3.1532094535423312 44.390113199321604 -61.432104179535145 3.152959488732904 44.639984430324148 -59.946583481852031 3.1527200772634387 44.788331836124598 -59.356767828625834 3.1526248993936861 45.099841513615502 -58.426572559384113 3.1524746201398557 45.492930421899473 -57.595329707550263 3.1523400378173392 45.659371682132587 -57.282395741866821 3.1522893353103427 45.833114706916604 -56.9874166910231 3.1522414892201596 46.012347986980785 -56.709641908899357 3.1521964089538415 + 19.018065117900001 6 20.746417493599999 3 26.9695886435 3 33.193103160299998 3 39.485156688799997 3 43.865331243699998 3 46.755031794799997 6 +6 -0 -0 1 +7 0 0 5 21 7 53.045099855607077 -71.746050894319524 3.1545967048336934 52.794582454943338 -71.715136175968382 3.1545923386152026 52.544585016340534 -71.67609516050743 3.1545866679416577 52.29552140301621 -71.628915750635315 3.1545796830473591 51.155876463337336 -71.374539803844527 3.1545415336631777 50.053418098496877 -70.949880110888444 3.1544759196913219 49.231963881095908 -70.516055958768447 3.1544081519441534 47.705680538464549 -69.462714624507498 3.1542424950257555 46.465248926996537 -68.084509927925865 3.1540239195919639 45.929680929387359 -67.325772753498768 3.1539032427044731 45.04362395093176 -65.6908936743298 3.1536425545591555 44.563410865545848 -63.905853180571285 3.1533567504029634 44.43000616840709 -62.987618748215482 3.1532094535423312 44.390113199321604 -61.432104179535145 3.152959488732904 44.639984430324148 -59.946583481852031 3.1527200772634387 44.788331836124598 -59.356767828625834 3.1526248993936861 45.099841513615502 -58.426572559384113 3.1524746201398557 45.492930421899473 -57.595329707550263 3.1523400378173392 45.659371682132587 -57.282395741866821 3.1522893353103427 45.833114706916604 -56.9874166910231 3.1522414892201596 46.012347986980785 -56.709641908899357 3.1521964089538415 + 19.018065117900001 6 20.746417493599999 3 26.9695886435 3 33.193103160299998 3 39.485156688799997 3 43.865331243699998 3 46.755031794799997 6 +4 0 -1.3999760552199999e-17 0 0 0 -1 0.87758256189037243 -0.4794255386042035 0 -0.4794255386042035 -0.87758256189037243 -0 10 +6 -0 -0 -1 +7 0 0 5 21 7 53.045099855607077 -71.746050894319524 3.1545967048336934 52.794582454943338 -71.715136175968382 3.1545923386152026 52.544585016340534 -71.67609516050743 3.1545866679416577 52.29552140301621 -71.628915750635315 3.1545796830473591 51.155876463337336 -71.374539803844527 3.1545415336631777 50.053418098496877 -70.949880110888444 3.1544759196913219 49.231963881095908 -70.516055958768447 3.1544081519441534 47.705680538464549 -69.462714624507498 3.1542424950257555 46.465248926996537 -68.084509927925865 3.1540239195919639 45.929680929387359 -67.325772753498768 3.1539032427044731 45.04362395093176 -65.6908936743298 3.1536425545591555 44.563410865545848 -63.905853180571285 3.1533567504029634 44.43000616840709 -62.987618748215482 3.1532094535423312 44.390113199321604 -61.432104179535145 3.152959488732904 44.639984430324148 -59.946583481852031 3.1527200772634387 44.788331836124598 -59.356767828625834 3.1526248993936861 45.099841513615502 -58.426572559384113 3.1524746201398557 45.492930421899473 -57.595329707550263 3.1523400378173392 45.659371682132587 -57.282395741866821 3.1522893353103427 45.833114706916604 -56.9874166910231 3.1522414892201596 46.012347986980785 -56.709641908899357 3.1521964089538415 + 19.018065117900001 6 20.746417493599999 3 26.9695886435 3 33.193103160299998 3 39.485156688799997 3 43.865331243699998 3 46.755031794799997 6 +6 -0 -0 1 +7 0 0 5 21 7 53.045099855607077 -71.746050894319524 3.1545967048336934 52.794582454943338 -71.715136175968382 3.1545923386152026 52.544585016340534 -71.67609516050743 3.1545866679416577 52.29552140301621 -71.628915750635315 3.1545796830473591 51.155876463337336 -71.374539803844527 3.1545415336631777 50.053418098496877 -70.949880110888444 3.1544759196913219 49.231963881095908 -70.516055958768447 3.1544081519441534 47.705680538464549 -69.462714624507498 3.1542424950257555 46.465248926996537 -68.084509927925865 3.1540239195919639 45.929680929387359 -67.325772753498768 3.1539032427044731 45.04362395093176 -65.6908936743298 3.1536425545591555 44.563410865545848 -63.905853180571285 3.1533567504029634 44.43000616840709 -62.987618748215482 3.1532094535423312 44.390113199321604 -61.432104179535145 3.152959488732904 44.639984430324148 -59.946583481852031 3.1527200772634387 44.788331836124598 -59.356767828625834 3.1526248993936861 45.099841513615502 -58.426572559384113 3.1524746201398557 45.492930421899473 -57.595329707550263 3.1523400378173392 45.659371682132587 -57.282395741866821 3.1522893353103427 45.833114706916604 -56.9874166910231 3.1522414892201596 46.012347986980785 -56.709641908899357 3.1521964089538415 + 19.018065117900001 6 20.746417493599999 3 26.9695886435 3 33.193103160299998 3 39.485156688799997 3 43.865331243699998 3 46.755031794799997 6 +4 0 -1.3999760552199999e-17 0 0 0 -1 0.4794255386042035 0.87758256189037243 0 0.87758256189037243 -0.4794255386042035 0 10 +6 -0 -0 -1 +7 0 0 5 21 7 53.045099855607077 -71.746050894319524 3.1545967048336934 52.794582454943338 -71.715136175968382 3.1545923386152026 52.544585016340534 -71.67609516050743 3.1545866679416577 52.29552140301621 -71.628915750635315 3.1545796830473591 51.155876463337336 -71.374539803844527 3.1545415336631777 50.053418098496877 -70.949880110888444 3.1544759196913219 49.231963881095908 -70.516055958768447 3.1544081519441534 47.705680538464549 -69.462714624507498 3.1542424950257555 46.465248926996537 -68.084509927925865 3.1540239195919639 45.929680929387359 -67.325772753498768 3.1539032427044731 45.04362395093176 -65.6908936743298 3.1536425545591555 44.563410865545848 -63.905853180571285 3.1533567504029634 44.43000616840709 -62.987618748215482 3.1532094535423312 44.390113199321604 -61.432104179535145 3.152959488732904 44.639984430324148 -59.946583481852031 3.1527200772634387 44.788331836124598 -59.356767828625834 3.1526248993936861 45.099841513615502 -58.426572559384113 3.1524746201398557 45.492930421899473 -57.595329707550263 3.1523400378173392 45.659371682132587 -57.282395741866821 3.1522893353103427 45.833114706916604 -56.9874166910231 3.1522414892201596 46.012347986980785 -56.709641908899357 3.1521964089538415 + 19.018065117900001 6 20.746417493599999 3 26.9695886435 3 33.193103160299998 3 39.485156688799997 3 43.865331243699998 3 46.755031794799997 6 +6 -0 -0 1 +7 0 0 5 21 7 53.045099855607077 -71.746050894319524 3.1545967048336934 52.794582454943338 -71.715136175968382 3.1545923386152026 52.544585016340534 -71.67609516050743 3.1545866679416577 52.29552140301621 -71.628915750635315 3.1545796830473591 51.155876463337336 -71.374539803844527 3.1545415336631777 50.053418098496877 -70.949880110888444 3.1544759196913219 49.231963881095908 -70.516055958768447 3.1544081519441534 47.705680538464549 -69.462714624507498 3.1542424950257555 46.465248926996537 -68.084509927925865 3.1540239195919639 45.929680929387359 -67.325772753498768 3.1539032427044731 45.04362395093176 -65.6908936743298 3.1536425545591555 44.563410865545848 -63.905853180571285 3.1533567504029634 44.43000616840709 -62.987618748215482 3.1532094535423312 44.390113199321604 -61.432104179535145 3.152959488732904 44.639984430324148 -59.946583481852031 3.1527200772634387 44.788331836124598 -59.356767828625834 3.1526248993936861 45.099841513615502 -58.426572559384113 3.1524746201398557 45.492930421899473 -57.595329707550263 3.1523400378173392 45.659371682132587 -57.282395741866821 3.1522893353103427 45.833114706916604 -56.9874166910231 3.1522414892201596 46.012347986980785 -56.709641908899357 3.1521964089538415 + 19.018065117900001 6 20.746417493599999 3 26.9695886435 3 33.193103160299998 3 39.485156688799997 3 43.865331243699998 3 46.755031794799997 6 +4 6446.3565762400003 -145.095035903 4389.6411765700004 0 0 1 1 0 -0 -0 1 0 10 +6 -0 -0 -1 +7 0 0 5 15 5 46.012347986980785 -56.709641908899357 3.1521964089538415 46.181027915036793 -56.448222850843194 3.1521539724167269 46.35492510388849 -56.201493684304751 3.1521138973726011 46.533174326147673 -55.968154009530735 3.1520759499703672 47.014839834891063 -55.38240086436781 3.1519806313149275 47.521322658640202 -54.874714709098498 3.1518977955406626 47.849639259128708 -54.579592410740588 3.1518495588306905 48.502651727269949 -54.053604585937592 3.1517634336373703 49.253230677060856 -53.575288934882337 3.1516847333782607 49.630300334956701 -53.361328236653208 3.1516494338870871 50.275228923089344 -53.043534816408737 3.1515967883929079 50.993984173662284 -52.77260478867629 3.1515515037499426 51.265703066509559 -52.681178521397669 3.1515361523738648 51.546084653118669 -52.598380587330212 3.151522163790105 51.834094615357571 -52.525257421928927 3.1515097178103133 + 0 6 2.5562203378000001 3 6.8074101031199996 3 10.5507444929 3 12.7011373278 6 +6 -0 -0 1 +7 0 0 5 15 5 46.012347986980785 -56.709641908899357 3.1521964089538415 46.181027915036793 -56.448222850843194 3.1521539724167269 46.35492510388849 -56.201493684304751 3.1521138973726011 46.533174326147673 -55.968154009530735 3.1520759499703672 47.014839834891063 -55.38240086436781 3.1519806313149275 47.521322658640202 -54.874714709098498 3.1518977955406626 47.849639259128708 -54.579592410740588 3.1518495588306905 48.502651727269949 -54.053604585937592 3.1517634336373703 49.253230677060856 -53.575288934882337 3.1516847333782607 49.630300334956701 -53.361328236653208 3.1516494338870871 50.275228923089344 -53.043534816408737 3.1515967883929079 50.993984173662284 -52.77260478867629 3.1515515037499426 51.265703066509559 -52.681178521397669 3.1515361523738648 51.546084653118669 -52.598380587330212 3.151522163790105 51.834094615357571 -52.525257421928927 3.1515097178103133 + 0 6 2.5562203378000001 3 6.8074101031199996 3 10.5507444929 3 12.7011373278 6 +6 -0 -0 -1 +7 0 0 5 15 5 46.012347986980785 -56.709641908899357 3.1521964089538415 46.181027915036793 -56.448222850843194 3.1521539724167269 46.35492510388849 -56.201493684304751 3.1521138973726011 46.533174326147673 -55.968154009530735 3.1520759499703672 47.014839834891063 -55.38240086436781 3.1519806313149275 47.521322658640202 -54.874714709098498 3.1518977955406626 47.849639259128708 -54.579592410740588 3.1518495588306905 48.502651727269949 -54.053604585937592 3.1517634336373703 49.253230677060856 -53.575288934882337 3.1516847333782607 49.630300334956701 -53.361328236653208 3.1516494338870871 50.275228923089344 -53.043534816408737 3.1515967883929079 50.993984173662284 -52.77260478867629 3.1515515037499426 51.265703066509559 -52.681178521397669 3.1515361523738648 51.546084653118669 -52.598380587330212 3.151522163790105 51.834094615357571 -52.525257421928927 3.1515097178103133 + 0 6 2.5562203378000001 3 6.8074101031199996 3 10.5507444929 3 12.7011373278 6 +6 -0 -0 1 +7 0 0 5 15 5 46.012347986980785 -56.709641908899357 3.1521964089538415 46.181027915036793 -56.448222850843194 3.1521539724167269 46.35492510388849 -56.201493684304751 3.1521138973726011 46.533174326147673 -55.968154009530735 3.1520759499703672 47.014839834891063 -55.38240086436781 3.1519806313149275 47.521322658640202 -54.874714709098498 3.1518977955406626 47.849639259128708 -54.579592410740588 3.1518495588306905 48.502651727269949 -54.053604585937592 3.1517634336373703 49.253230677060856 -53.575288934882337 3.1516847333782607 49.630300334956701 -53.361328236653208 3.1516494338870871 50.275228923089344 -53.043534816408737 3.1515967883929079 50.993984173662284 -52.77260478867629 3.1515515037499426 51.265703066509559 -52.681178521397669 3.1515361523738648 51.546084653118669 -52.598380587330212 3.151522163790105 51.834094615357571 -52.525257421928927 3.1515097178103133 + 0 6 2.5562203378000001 3 6.8074101031199996 3 10.5507444929 3 12.7011373278 6 +4 6446.3565762400003 -145.095035903 4389.6411765700004 0 0 1 0 1 0 -1 0 0 10 +6 -0 -0 -1 +7 0 0 5 18 6 51.834086135263533 -52.52522404054298 3.1515097128963134 52.583231372903356 -52.335021515899825 3.151477310399514 53.433089805382224 -52.197880784909103 3.1514542786635502 54.376349922330519 -52.151682635902489 3.1514426606631787 56.508559384500586 -52.332169812752454 3.1514684856574604 58.649191965592763 -53.139691161306473 3.151590810432026 59.747632809870083 -53.771429864836136 3.1516894540418434 61.326197881948247 -55.057227548898936 3.1518937510895739 62.525148405758046 -56.697710865999852 3.1521548512196205 62.92243744802181 -57.371856647275763 3.1523668990785154 63.576180813326573 -58.791559450533896 3.1524889417537452 63.935900964977918 -60.295416890929118 3.152620020390259 64.03877645108787 -61.053919905030398 3.1528511839610474 64.092020165499889 -62.419742727253833 3.1530711312789208 63.921310923905367 -63.723431658407662 3.1532803893715027 63.802008098592523 -64.292629754004338 3.1533725560525454 63.64611003481059 -64.837283902269519 3.1534605501842634 63.458757036710267 -65.355148903772715 3.1535442447448077 + 0 6 7.0088545606999997 3 15.107013371400001 3 20.121076277099998 3 25.135139182900001 3 29.2679994569 6 +6 -0 -0 1 +7 0 0 5 18 6 51.834086135263533 -52.52522404054298 3.1515097128963134 52.583231372903356 -52.335021515899825 3.151477310399514 53.433089805382224 -52.197880784909103 3.1514542786635502 54.376349922330519 -52.151682635902489 3.1514426606631787 56.508559384500586 -52.332169812752454 3.1514684856574604 58.649191965592763 -53.139691161306473 3.151590810432026 59.747632809870083 -53.771429864836136 3.1516894540418434 61.326197881948247 -55.057227548898936 3.1518937510895739 62.525148405758046 -56.697710865999852 3.1521548512196205 62.92243744802181 -57.371856647275763 3.1523668990785154 63.576180813326573 -58.791559450533896 3.1524889417537452 63.935900964977918 -60.295416890929118 3.152620020390259 64.03877645108787 -61.053919905030398 3.1528511839610474 64.092020165499889 -62.419742727253833 3.1530711312789208 63.921310923905367 -63.723431658407662 3.1532803893715027 63.802008098592523 -64.292629754004338 3.1533725560525454 63.64611003481059 -64.837283902269519 3.1534605501842634 63.458757036710267 -65.355148903772715 3.1535442447448077 + 0 6 7.0088545606999997 3 15.107013371400001 3 20.121076277099998 3 25.135139182900001 3 29.2679994569 6 +6 -0 -0 -1 +7 0 0 5 18 6 51.834086135263533 -52.52522404054298 3.1515097128963134 52.583231372903356 -52.335021515899825 3.151477310399514 53.433089805382224 -52.197880784909103 3.1514542786635502 54.376349922330519 -52.151682635902489 3.1514426606631787 56.508559384500586 -52.332169812752454 3.1514684856574604 58.649191965592763 -53.139691161306473 3.151590810432026 59.747632809870083 -53.771429864836136 3.1516894540418434 61.326197881948247 -55.057227548898936 3.1518937510895739 62.525148405758046 -56.697710865999852 3.1521548512196205 62.92243744802181 -57.371856647275763 3.1523668990785154 63.576180813326573 -58.791559450533896 3.1524889417537452 63.935900964977918 -60.295416890929118 3.152620020390259 64.03877645108787 -61.053919905030398 3.1528511839610474 64.092020165499889 -62.419742727253833 3.1530711312789208 63.921310923905367 -63.723431658407662 3.1532803893715027 63.802008098592523 -64.292629754004338 3.1533725560525454 63.64611003481059 -64.837283902269519 3.1534605501842634 63.458757036710267 -65.355148903772715 3.1535442447448077 + 0 6 7.0088545606999997 3 15.107013371400001 3 20.121076277099998 3 25.135139182900001 3 29.2679994569 6 +6 -0 -0 1 +7 0 0 5 18 6 51.834086135263533 -52.52522404054298 3.1515097128963134 52.583231372903356 -52.335021515899825 3.151477310399514 53.433089805382224 -52.197880784909103 3.1514542786635502 54.376349922330519 -52.151682635902489 3.1514426606631787 56.508559384500586 -52.332169812752454 3.1514684856574604 58.649191965592763 -53.139691161306473 3.151590810432026 59.747632809870083 -53.771429864836136 3.1516894540418434 61.326197881948247 -55.057227548898936 3.1518937510895739 62.525148405758046 -56.697710865999852 3.1521548512196205 62.92243744802181 -57.371856647275763 3.1523668990785154 63.576180813326573 -58.791559450533896 3.1524889417537452 63.935900964977918 -60.295416890929118 3.152620020390259 64.03877645108787 -61.053919905030398 3.1528511839610474 64.092020165499889 -62.419742727253833 3.1530711312789208 63.921310923905367 -63.723431658407662 3.1532803893715027 63.802008098592523 -64.292629754004338 3.1533725560525454 63.64611003481059 -64.837283902269519 3.1534605501842634 63.458757036710267 -65.355148903772715 3.1535442447448077 + 0 6 7.0088545606999997 3 15.107013371400001 3 20.121076277099998 3 25.135139182900001 3 29.2679994569 6 +6 -0 -0 -1 +7 0 0 5 18 6 51.834086135263533 -52.52522404054298 3.1515097128963134 52.583231372903356 -52.335021515899825 3.151477310399514 53.433089805382224 -52.197880784909103 3.1514542786635502 54.376349922330519 -52.151682635902489 3.1514426606631787 56.508559384500586 -52.332169812752454 3.1514684856574604 58.649191965592763 -53.139691161306473 3.151590810432026 59.747632809870083 -53.771429864836136 3.1516894540418434 61.326197881948247 -55.057227548898936 3.1518937510895739 62.525148405758046 -56.697710865999852 3.1521548512196205 62.92243744802181 -57.371856647275763 3.1523668990785154 63.576180813326573 -58.791559450533896 3.1524889417537452 63.935900964977918 -60.295416890929118 3.152620020390259 64.03877645108787 -61.053919905030398 3.1528511839610474 64.092020165499889 -62.419742727253833 3.1530711312789208 63.921310923905367 -63.723431658407662 3.1532803893715027 63.802008098592523 -64.292629754004338 3.1533725560525454 63.64611003481059 -64.837283902269519 3.1534605501842634 63.458757036710267 -65.355148903772715 3.1535442447448077 + 0 6 7.0088545606999997 3 15.107013371400001 3 20.121076277099998 3 25.135139182900001 3 29.2679994569 6 +6 -0 -0 1 +7 0 0 5 18 6 51.834086135263533 -52.52522404054298 3.1515097128963134 52.583231372903356 -52.335021515899825 3.151477310399514 53.433089805382224 -52.197880784909103 3.1514542786635502 54.376349922330519 -52.151682635902489 3.1514426606631787 56.508559384500586 -52.332169812752454 3.1514684856574604 58.649191965592763 -53.139691161306473 3.151590810432026 59.747632809870083 -53.771429864836136 3.1516894540418434 61.326197881948247 -55.057227548898936 3.1518937510895739 62.525148405758046 -56.697710865999852 3.1521548512196205 62.92243744802181 -57.371856647275763 3.1523668990785154 63.576180813326573 -58.791559450533896 3.1524889417537452 63.935900964977918 -60.295416890929118 3.152620020390259 64.03877645108787 -61.053919905030398 3.1528511839610474 64.092020165499889 -62.419742727253833 3.1530711312789208 63.921310923905367 -63.723431658407662 3.1532803893715027 63.802008098592523 -64.292629754004338 3.1533725560525454 63.64611003481059 -64.837283902269519 3.1534605501842634 63.458757036710267 -65.355148903772715 3.1535442447448077 + 0 6 7.0088545606999997 3 15.107013371400001 3 20.121076277099998 3 25.135139182900001 3 29.2679994569 6 +2 0 0 4 0 0 -1 -0.4794255386042035 -0.87758256189037243 -0 -0.87758256189037243 0.4794255386042035 0 10 +2 0 0 4 0 0 -1 0.4794255386042035 0.87758256189037243 0 0.87758256189037243 -0.4794255386042035 0 10 +2 -16 0 0 1 0 0 0 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 3.5 +2 -16 0 0 1 0 0 0 0.4794255386042035 -0.87758256189037243 -0 0.87758256189037243 0.4794255386042035 3.5 +1 0 0 -2 0 0 -1 1 0 0 0 -1 0 +1 6439.0959733700001 -86.702521336900006 4427.6095566900003 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.74159448037033837 -0.43725522647176845 0.50876860517073041 1.6542323066914832e-13 0.75839575140757587 0.6517943573297782 +1 0 0 0 1 0 0 -0 1 0 0 -0 1 +1 0 0 68 0 0 1 1 0 -0 -0 1 0 +1 0 0.86602540209599999 -1.5000000007000001 0 -0.86602554545513399 0.49999975461907736 0 0.49999975461907736 0.86602554545513399 -1 0 0 +1 0 -0.86602540523600002 -1.4999999988599999 0 -5.1440185850793206e-07 0.99999999999986777 0 0.99999999999986777 5.1440185850793206e-07 -1 0 0 +1 0 -1.7320508073000001 1.8285655212199999e-09 0 0.86602540431210262 0.49999999908605924 0 0.49999999908605924 -0.86602540431210262 -1 0 0 +1 0 -0.86602540325699995 1.5 0 0.86602551877116485 -0.49999980083709522 0 -0.49999980083709522 -0.86602551877116485 -1 0 -0 +1 0 0.86602540484000001 1.5 -0 -0 -1 0 -1 0 -1 0 0 +1 0 1.7320508073000001 -1.3714255287000001e-09 -0 -0.86602540431210262 -0.49999999908605924 0 -0.49999999908605924 0.86602540431210262 -1 0 0 +1 -2 0 0 1 0 0 -0 1 0 0 -0 1 +2 6455.0776059299997 -138.81126363199999 4382.3296892300004 0.67084843793829319 0.48336709773221126 -0.56242210318024577 0.7313415222018449 -0.30553578504595075 0.60974376746289349 0.12288999641647205 -0.82036829100489594 -0.5584746331700895 5 +2 6455.0776059299997 -138.81126363199999 4382.3296892300004 0.67084843793829319 0.48336709773221126 -0.56242210318024577 -0.7313415222018449 0.30553578504595075 -0.60974376746289349 -0.12288999641647205 0.82036829100489594 0.5584746331700895 5 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +9 0 1 0 0 2 1 5 2 3 2 72.91695494959535 91.571311339482307 3.1283315849700557 1 72.916926639278614 91.569420820613402 -8.8716682651879637 1 +62.373959126968693 87.589083483233281 3.1290107249601533 0.707106781105863 62.373930816651956 87.587192964363936 -8.8709891251974113 0.707106781105863 +58.391731217600572 98.132079172107609 3.1272910426746421 1 58.391702907283836 98.130188653238264 -8.8727088074833773 1 +54.409503308232452 108.6750748609815 3.1255713603895856 0.707106781105863 54.409474997915716 108.67318434211215 -8.8744284897675243 0.707106781105863 +64.952499132676479 112.65730271241881 3.124892220399488 1 64.952470822358848 112.65541219354948 -8.8751076297571672 1 + +0 3 +1.5707963270231071 2 +3.1415926540462142 3 + +-6.0000000026984708 2 +6.0000000025533318 2 + +6 -0 -0 -1 +8 0.75062665280892582 3.892219306420964 +7 1 0 2 5 3 72.916926640926633 91.569420820974827 -8.8716682649373979 1 62.373930820597764 87.587192965012804 -8.8709891249468455 0.70710678118261516 58.391702909226879 98.130188650725231 -8.8727088072323568 1 54.40947499785689 108.67318433643767 -8.8744284895174133 0.70710678118261516 64.952470818273994 112.65541219216529 -8.8751076295070561 1 + 0.75062665280892582 3 2.3214229796149448 2 3.892219306420964 3 +6 -0 -0 1 +8 0.75062665280892582 3.892219306420964 +7 1 0 2 5 3 72.916926640926633 91.569420820974827 -8.8716682649373979 1 62.373930820597764 87.587192965012804 -8.8709891249468455 0.70710678118261516 58.391702909226879 98.130188650725231 -8.8727088072323568 1 54.40947499785689 108.67318433643767 -8.8744284895174133 0.70710678118261516 64.952470818273994 112.65541219216529 -8.8751076295070561 1 + 0.75062665280892582 3 2.3214229796149448 2 3.892219306420964 3 +6 -0 -0 1 +8 -2.4999861696139654 2.4999861738130047 +7 0 0 1 2 2 69.536356688967743 114.38680603174441 -8.8754029110095871 64.952470817551145 112.65541219408024 -8.8751076343864952 + -2.4999861696139654 2 2.4999861738130713 2 +9 0 0 0 0 1 1 2 2 2 2 91.103966525671396 92.498929321667958 -8.9318988264828647 88.552056446686009 131.98507766001092 -8.938240413563534 +56.46314863018565 90.260163241898482 -8.9314555337857477 53.91123855120027 129.74631158024187 -8.9377971208655254 + +-31.218490189953783 2 +4.2030261157247182 2 + +56.869342836467865 2 +97.245389079626307 2 + +9 0 0 0 0 1 1 2 2 2 2 65.299402472512838 103.75212035888363 -8.9336457481188063 65.29938831735268 103.75117509944695 -14.813645680630097 +63.968866554842727 90.745242622053652 -8.9315515800885894 63.968852399685247 90.744297362616081 -14.811551512600326 + +-5.7334448300139229e-09 2 +13.341585962745146 2 + +13.999999994561533 2 +20.000000003243262 2 + +6 -0 -0 1 +8 -2.499999998772906 2.4999999987092778 +7 0 0 1 2 2 72.916926640833935 91.56942082122039 -8.8716682642680098 77.500837863843515 93.300824238006498 -8.871963542525009 + -2.4999999987735597 2 2.4999999987092778 2 +9 0 0 0 0 1 1 2 2 2 2 69.536385005867658 114.38869655073275 3.1245969429860452 69.536356695551802 114.38680603185939 -8.8754029110095871 +64.952499126657486 112.65730270925113 3.1248922196095918 64.952470816339869 112.65541219037821 -8.8751076343855857 + +-9.0676260944275791e-09 2 +4.9999723431764771 2 + +1.9999999935924642 2 +14.000000002682558 2 + +9 0 0 0 0 1 1 2 2 2 2 85.577853839429295 91.88745183949635 3.1282486168238393 84.045040734268028 115.81319335554828 3.1243276228005925 +58.408324569623836 90.146824107173003 3.1286008891079291 56.875511464463457 114.07256562322448 3.1246798950828634 + +-25.490158469248723 2 +2.2906876676665746 2 + +56.800174283875421 2 +81.264247464489983 2 + +6 -0 -0 -1 +8 -2.4999861696139654 2.4999861738130047 +7 0 0 1 2 2 69.536356688967743 114.38680603174441 -8.8754029110095871 64.952470817551145 112.65541219408024 -8.8751076343864952 + -2.4999861696139654 2 2.4999861738130713 2 +9 0 1 0 0 2 1 3 2 2 2 86.48501635355403 103.5674462437742 -8.933667064429109 1 86.485002198394767 103.56650098433975 -14.81366699217905 1 +85.520783181371641 94.14142262891329 -8.932149430630524 0.76542337355600465 85.520769026213273 94.140477369478845 -14.812149358380911 0.76542337355600465 +76.069214964862766 93.472447791436664 -8.9320191341618465 1 76.069200809704384 93.471502532002205 -14.812019061912679 1 + +0 3 +1.3981947160273114 3 + +-3.0000000044760782 2 +2.9999999993465547 2 + +9 0 0 0 0 1 1 2 2 2 2 86.485016353168987 103.56744624189756 -8.9336670637695441 86.485002198011514 103.56650098246132 -14.813666990937463 +88.877256829566363 126.95319553311674 -8.9374322785683766 88.877242674407114 126.95225027368095 -14.817432205734958 + +-1.8529324741236893e-09 2 +23.987538815601109 2 + +13.999999995175104 2 +19.999999998402636 2 + +9 0 0 0 0 1 1 2 2 2 2 58.606377472117863 130.04974892627936 -8.9378571987879063 58.606363316958607 130.04880366684313 -14.817857129814282 +88.877256834696723 126.95319553532806 -8.9374322740882324 88.87724267953746 126.95225027589095 -14.817432205113718 + +1.5764456406941463e-09 2 +31.049844729520338 2 + +13.999999997249173 2 +20.000000004414762 2 + +9 0 0 0 0 1 1 2 2 2 2 55.812737658237083 102.74005286894428 -8.9334602102453289 55.812723503076931 102.73910760950714 -14.813460145494263 +58.606377472185606 130.04974892315622 -8.9378571987874604 58.606363317026343 130.04880366371867 -14.817857134036839 + +-5.0816915120321937e-09 2 +28.012461175251055 2 + +13.999999993675118 2 +20.000000005149698 2 + +9 0 1 0 0 2 1 3 2 2 2 63.968866547209593 90.745242627339096 -8.9315515825615144 1 63.96885239205033 90.744297367903755 -14.811551513454642 1 +54.84850448882932 93.314029261261041 -8.9319425808034421 0.76542337373610703 54.848490333670064 93.3130840018257 -14.811942511696124 0.76542337373610703 +55.812737657209411 102.74005287109989 -8.9334602146006912 1 55.812723502051931 102.73910761166411 -14.813460145495155 1 + +0 3 +1.398194715467576 3 + +-3.0000000026780071 2 +3.0000000043526471 2 + +9 0 1 0 0 2 1 5 2 3 2 70.538456139035745 119.89366717821939 -14.816253329299442 1 70.538470294195008 119.89461243765383 -8.9362534015241 1 +72.111431846989774 117.40985010064757 -14.815857821503959 0.7071067810010595 72.111446002147247 117.41079536008202 -8.9358578937295068 0.7071067810010595 +74.595248955214004 118.98282578862079 -14.81611666996573 1 74.595263110372372 118.98377104805523 -8.9361167421908334 1 +77.079066063439129 120.55580147659398 -14.816375518427057 0.7071067810010595 77.079080218597497 120.55674673602933 -8.9363755906526059 0.7071067810010595 +75.506090352880705 123.03961855251509 -14.816771026222094 1 75.506104508039073 123.04056381194999 -8.9367710984471973 1 + +0 3 +1.570796327319536 2 +3.141592654639072 3 + +8.7038642959677142e-10 2 +6.0000000047186761 2 + +6 -0 -0 1 +8 1.023000500999343 4.1645931542697339 +7 1 0 2 5 3 70.538470296289574 119.89461243421874 -8.936253403226937 1 72.111446007322172 117.41079536097956 -8.9358578954323455 0.70710678124292237 74.595263112292244 118.9837710503343 -8.9361167438941163 1 77.07908021726054 120.55674673968991 -8.9363755923563346 0.70710678124292237 75.506104507019415 123.04056381343133 -8.9367711001504802 1 + 1.023000500999137 3 2.5937968276345815 2 4.1645931542700261 3 +9 0 1 0 0 2 1 5 2 3 2 75.50609035453229 123.03961854990848 -14.816771024518365 1 75.506104509689763 123.04056380934337 -8.9367710984467514 1 +73.933114646303736 125.52343562791614 -14.817166532314294 0.70710678093905766 73.933128801462104 125.52438088735059 -8.9371666062422346 0.70710678093905766 +71.449297537918184 123.95045993923168 -14.816907683852524 1 71.449311693076552 123.95140519866612 -8.9369077577795721 1 +68.965480429532633 122.37748425054676 -14.816648835391197 0.70710678093905766 68.965494584691882 122.37842950998166 -8.9366489093186914 0.70710678093905766 +70.538456141239052 119.89366717474196 -14.816253327595714 1 70.538470296396525 119.89461243417641 -8.9362534015236541 1 + +0 3 +1.5707963274949037 2 +3.1415926549898074 3 + +2.6079760573338717e-09 2 +6.0000000047186761 2 + +6 -0 -0 1 +8 -4.7123889803800001 4.7123889803800001 +7 0 0 5 9 3 75.506104504090587 123.0405638115752 -8.9367711028484607 75.011939620190219 123.82087795599324 -8.936895356414043 74.211346070647394 124.4071340076774 -8.9369876726067101 73.203998114062657 124.63330632018044 -8.9370216082515803 71.255253593726536 124.25783384932039 -8.9369565556593713 70.082741475206902 122.65664678117504 -8.9366963308068357 69.856569157118955 121.64929883211605 -8.936533843741536 70.044305400658729 120.67492658379298 -8.9363776549274636 70.538470291849094 119.89461243991865 -8.9362534078884615 + -4.7123889803800001 6 4.4408920985e-16 3 4.7123889803800001 6 +9 0 1 0 0 2 1 5 2 3 2 65.29940246566494 103.75212035340211 -8.9336457506465461 1 65.299388310505677 103.75117509396676 -14.813645680629651 1 +65.897773268354001 109.60159481592073 -8.9345875433384663 0.70710678122670734 65.897759113196528 109.60064955648541 -14.814587473320234 0.70710678122670734 +71.747247806741839 109.00322401936208 -8.9345054318736938 1 71.74723365158259 109.00227875992674 -14.814505361856799 1 +77.596722345127901 108.40485322280341 -8.934423320410259 0.70710678122670734 77.596708189968638 108.40390796336807 -14.814423250393364 0.70710678122670734 +76.998351543765992 102.5553787601484 -8.9334815277183406 1 76.998337388607624 102.55443350071351 -14.813481457700554 1 + +0 3 +1.5707963266813079 2 +3.1415926533626157 3 + +-2.9999999977499101 2 +3.0000000083505864 2 + +9 0 0 0 0 1 1 2 2 2 2 91.103952371520194 92.497984056481485 -14.811898752553589 88.552042292245147 131.9841323992805 -14.818240339633812 +56.463134482963461 90.259217977160773 -14.811455459856916 53.911224403690184 129.7453663199598 -14.817797046937139 + +-31.218490189312909 2 +4.203026109278527 2 + +56.869342829950796 2 +97.245389077666246 2 + +9 0 0 0 0 1 1 2 2 2 2 76.998351546043281 102.55537876341904 -8.9334815233946205 76.998337390884018 102.55443350398147 -14.813481456196923 +76.069214965926079 93.472447789599229 -8.9320191291099302 76.069200810768606 93.471502530162113 -14.812019061911341 + +-5.3741229244504193e-09 2 +9.3166636002070877 2 + +13.999999997310494 2 +20.000000006288214 2 + +6 -0 -0 -1 +8 -2.499999998772906 2.4999999987092778 +7 0 0 1 2 2 72.916926640833935 91.56942082122039 -8.8716682642680098 77.500837863843515 93.300824238006498 -8.871963542525009 + -2.4999999987735597 2 2.4999999987092778 2 +4 0 0 0 0 0 1 6.1232339957400004e-17 1 -0 -1 6.1232339957400004e-17 0 10 +4 0 0 0 0 0 1 -1 1.2246467991500001e-16 0 -1.2246467991500001e-16 -1 0 10 +4 0 0 0 0 0 1 -1.83697019872e-16 -1 0 1 -1.83697019872e-16 0 10 +4 0 0 0 0 0 1 1 0 -0 -0 1 0 10 +4 6540.1420896 -130.44426543899999 4514.0985283399996 0 0 1 0 1 0 -1 0 0 10 +1 6439.0959733700001 -86.702521336900006 4427.6095566900003 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.74159448037033837 -0.43725522647176845 0.50876860517073041 1.6542323066914832e-13 0.75839575140757587 0.6517943573297782 +4 6540.1420896 -130.44426543899999 4514.0985283399996 0 0 1 0 -1 0 1 0 -0 10 +4 6540.1420896 -130.44426543899999 4514.0985283399996 0 0 1 -1 0 0 0 -1 0 10 +4 6540.1420896 -130.44426543899999 4514.0985283399996 0 0 1 1 0 -0 -0 1 0 10 +2 6548.8631192900002 -124.160493168 4506.7870409999996 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.7313415222018449 -0.30553578504595075 0.60974376746289349 -0.12288999641647205 0.82036829100489594 0.5584746331700895 5 +2 6548.8631192900002 -124.160493168 4506.7870409999996 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 -0.7313415222018449 0.30553578504595075 -0.60974376746289349 0.12288999641647205 -0.82036829100489594 -0.5584746331700895 5 +9 0 1 0 0 2 1 5 2 3 2 77.075806894275928 102.37741575416953 -2.8734391372463506 1 77.075792739088143 102.37647049281209 -8.8734512655537401 1 +76.474159166883581 96.528277429276159 -2.8724781713863194 0.70710678109197689 76.474145011695796 96.52733216791917 -8.8724902996927995 0.70710678109197689 +70.625020766354538 97.129925152723146 -2.872562496964747 1 70.625006611168544 97.128979891366143 -8.872574625271227 1 +64.775882365827272 97.731572876170119 -2.8726468225427197 0.70710678109197689 64.775868210638592 97.73062761481313 -8.8726589508510187 0.70710678109197689 +65.377530096347201 103.58071120074128 -2.8736077884032056 1 65.377515941160311 103.57976593938429 -8.8736199167105951 1 + +0 3 +1.5707963270623828 2 +3.1415926541247656 3 + +-1.2198543703149584e-05 2 +6.0000000073108843 2 + +6 -0 -0 -1 +7 0 0 6 37 8 65.377529887276481 103.58069723932225 -2.9622273887173391 65.355400591768458 103.36555901401864 -2.9621927614786472 65.342753384565427 103.14931086982965 -2.9621579668944418 65.339665496910001 102.93249339233934 -2.9621231037625653 65.346171327574282 102.71564770330941 -2.9620882644659621 65.362262442860015 102.49931546067916 -2.9620535349726791 65.40631322368894 102.12924510264122 -2.9619941588924572 65.42966836770573 101.974996093916 -2.9619694225270785 65.457934018976388 101.82149278458151 -2.9619448179936625 65.491080137510266 101.66893408083205 -2.9619203771903564 65.529065632998339 101.51751684286431 -2.961896131659524 65.602905448403021 101.2584277044508 -2.9618546668348351 65.63649811494669 101.15012429052375 -2.9618373405203666 65.672596411862727 101.04260018245115 -2.9618201455768678 65.711177445689913 100.93592892976756 -2.961803093770603 65.7522153820873 100.8301830921871 -2.9617861967015791 65.90440407737438 100.46342360597498 -2.961727616436328 66.02832092075684 100.20764597520632 -2.9616868059794612 66.166977648674347 99.959229310318776 -2.9616472146300539 66.319814878717708 99.719241292004867 -2.9616090126397503 66.486169111807712 99.488688121833022 -2.9615723601245807 66.876374925330097 99.009004711733652 -2.9614962092920578 67.105200533451267 98.763898982224845 -2.9614573699858191 67.350491345253516 98.534748721065171 -2.9614211354437314 67.610824639663335 98.322920764079882 -2.9613877218984936 67.884637601478943 98.129619356270751 -2.9613573191068379 68.284556792748262 97.88628048852631 -2.9613191810107509 68.400793374395292 97.819834244070236 -2.961308784155301 68.518807349162486 97.756584778645973 -2.9612989054719137 68.638486636661014 97.696591266206482 -2.9612895541987836 68.75971644198205 97.639907478465886 -2.9612807386991284 69.053646476209721 97.512126103976584 -2.9612609163984036 69.227708198432666 97.444216633921542 -2.9612504253631351 69.404243862252088 97.38298531430398 -2.9612410137814149 69.582926091081902 97.328541849611895 -2.9612326984886117 69.763420691863416 97.280973709251683 -2.9612254927294317 69.945386655065349 97.240346127548307 -2.9612194061579196 + 0 7 0.15232778011244325 5 0.26185844430740934 5 0.34141376274989538 5 0.54040724935664231 5 0.77495055175609262 5 0.86886813530304174 5 1 7 +6 -0 -0 1 +7 0 0 6 37 8 65.377529887276481 103.58069723932225 -2.9622273887173391 65.355400591768458 103.36555901401864 -2.9621927614786472 65.342753384565427 103.14931086982965 -2.9621579668944418 65.339665496910001 102.93249339233934 -2.9621231037625653 65.346171327574282 102.71564770330941 -2.9620882644659621 65.362262442860015 102.49931546067916 -2.9620535349726791 65.40631322368894 102.12924510264122 -2.9619941588924572 65.42966836770573 101.974996093916 -2.9619694225270785 65.457934018976388 101.82149278458151 -2.9619448179936625 65.491080137510266 101.66893408083205 -2.9619203771903564 65.529065632998339 101.51751684286431 -2.961896131659524 65.602905448403021 101.2584277044508 -2.9618546668348351 65.63649811494669 101.15012429052375 -2.9618373405203666 65.672596411862727 101.04260018245115 -2.9618201455768678 65.711177445689913 100.93592892976756 -2.961803093770603 65.7522153820873 100.8301830921871 -2.9617861967015791 65.90440407737438 100.46342360597498 -2.961727616436328 66.02832092075684 100.20764597520632 -2.9616868059794612 66.166977648674347 99.959229310318776 -2.9616472146300539 66.319814878717708 99.719241292004867 -2.9616090126397503 66.486169111807712 99.488688121833022 -2.9615723601245807 66.876374925330097 99.009004711733652 -2.9614962092920578 67.105200533451267 98.763898982224845 -2.9614573699858191 67.350491345253516 98.534748721065171 -2.9614211354437314 67.610824639663335 98.322920764079882 -2.9613877218984936 67.884637601478943 98.129619356270751 -2.9613573191068379 68.284556792748262 97.88628048852631 -2.9613191810107509 68.400793374395292 97.819834244070236 -2.961308784155301 68.518807349162486 97.756584778645973 -2.9612989054719137 68.638486636661014 97.696591266206482 -2.9612895541987836 68.75971644198205 97.639907478465886 -2.9612807386991284 69.053646476209721 97.512126103976584 -2.9612609163984036 69.227708198432666 97.444216633921542 -2.9612504253631351 69.404243862252088 97.38298531430398 -2.9612410137814149 69.582926091081902 97.328541849611895 -2.9612326984886117 69.763420691863416 97.280973709251683 -2.9612254927294317 69.945386655065349 97.240346127548307 -2.9612194061579196 + 0 7 0.15232778011244325 5 0.26185844430740934 5 0.34141376274989538 5 0.54040724935664231 5 0.77495055175609262 5 0.86886813530304174 5 1 7 +1 71.226668287726909 102.97904951202896 -2.9621449455561057 2.4386630254317683e-06 0.00016073556344594622 0.99999998707906568 -5.169878828456423e-26 0.9999999870820393 -0.00016073556344642419 -0.9999999999970266 3.9197987544873673e-10 2.438662993929215e-06 +9 0 1 0 0 2 1 5 2 3 2 65.377530095996917 103.5807111956907 -2.8736199865506933 1 65.377515940837654 103.57976593625536 -8.8736199167101404 1 +65.979177823109382 109.42984951787182 -2.8745809524111792 0.70710678125590287 65.979163667950132 109.42890425843648 -8.8745808825697168 0.70710678125590287 +71.828316221205171 108.82820179741562 -2.8744966268327516 1 71.828302066045907 108.82725653798028 -8.874496556991744 1 +77.677454619299169 108.22655407695986 -2.8744123012561431 0.70710678125590287 77.677440464139906 108.22560881752408 -8.8744122314146807 0.70710678125590287 +77.07580689448271 102.3774157545421 -2.8734513353947477 1 77.075792739324342 102.3764704951072 -8.8734512655541948 1 + +0 3 +1.5707963265987299 2 +3.1415926531974598 3 + +-3.9563019527122378e-10 2 +6.0000000073108843 2 + +6 -0 -0 -1 +7 0 0 6 47 10 69.945386655065349 97.240346127548278 -2.96121940615792 70.05752779078459 97.215308350847792 -2.9612156551539974 70.170228047467603 97.192906469663058 -2.961212329197592 70.283407796419127 97.173155682111314 -2.9612094305374508 70.39698693209742 97.15606780801204 -2.961206960878128 70.510884872114232 97.141651288887331 -2.9612049213799918 70.728928845759881 97.119223086400652 -2.9612018480916613 70.83309576889171 97.110746903485435 -2.9612007396904776 70.937460681458859 97.104491350344048 -2.9611999887079627 71.041962775454593 97.100462798590527 -2.9611995960199748 71.146541080037082 97.098665280324909 -2.9611995621259393 71.438467854050117 97.09987997297246 -2.9612004692855365 71.625850409939616 97.107821916114275 -2.9612022028092895 71.812929899177547 97.122935906208042 -2.9612050884023517 71.999356036530841 97.145207875948742 -2.9612091229492949 72.184780481553688 97.174600102076738 -2.9612142995370245 72.502879085673626 97.237590511413202 -2.9612252001212398 72.636187218235207 97.267871835824977 -2.9612303925242807 72.768647830735986 97.301871535847397 -2.9612361805382439 72.900129161656693 97.339559590271463 -2.9612425590162306 73.030501093494863 97.380899599445129 -2.9612495217901 73.252579343002921 97.458200944744092 -2.9612624884965126 73.344882361275609 97.492422833885215 -2.961268214292152 73.436496359310937 97.528498519071874 -2.9612742363795466 73.527374134103553 97.566410431707553 -2.9612805518196299 73.617469127914703 97.606139368224035 -2.961287157412114 73.926382238510527 97.749840345069103 -2.9613110087052488 74.141013918486394 97.862892272790646 -2.9613297036620931 74.349942923521255 97.986507883052482 -2.9613500826762604 74.5525151033615 98.120319835919602 -2.9613720851068894 74.748110151085129 98.263906210975904 -2.9613956416225662 75.195704803701588 98.627835727496645 -2.9614552297851739 75.440868298706363 98.856609006949867 -2.9614925997855748 75.670079559100373 99.101851867109318 -2.9615325781312083 75.881971330733847 99.362141832093585 -2.9615749328425158 76.075338928309577 99.635916283517503 -2.9616194098103348 76.318774969050196 100.03579145212989 -2.9616842777838781 76.385250430828805 100.15201845486375 -2.9617031217507468 76.448529223553706 100.2700237442355 -2.9617222437544206 76.508552139037405 100.38969523867144 -2.9617416256348634 76.565265371617144 100.51091814038092 -2.9617612488086293 76.693199885731801 100.80502355450419 -2.9618088340834645 76.76121854138988 100.97927460409535 -2.9618370083451659 76.822544012945812 101.15600644137898 -2.9618655650311076 76.877066165117029 101.3348905731675 -2.9618944510718563 76.924697199521447 101.51559165583677 -2.9619236123514008 76.965371654677639 101.69776749532627 -2.9619529937071527 + 0 7 0.074770817129581418 5 0.14284161927477224 5 0.26476075139898975 5 0.35352758877760448 5 0.41741748635207526 5 0.57462364536664379 5 0.79163396657599061 5 0.87853311434506309 5 1 7 +6 -0 -0 1 +7 0 0 6 47 10 69.945386655065349 97.240346127548278 -2.96121940615792 70.05752779078459 97.215308350847792 -2.9612156551539974 70.170228047467603 97.192906469663058 -2.961212329197592 70.283407796419127 97.173155682111314 -2.9612094305374508 70.39698693209742 97.15606780801204 -2.961206960878128 70.510884872114232 97.141651288887331 -2.9612049213799918 70.728928845759881 97.119223086400652 -2.9612018480916613 70.83309576889171 97.110746903485435 -2.9612007396904776 70.937460681458859 97.104491350344048 -2.9611999887079627 71.041962775454593 97.100462798590527 -2.9611995960199748 71.146541080037082 97.098665280324909 -2.9611995621259393 71.438467854050117 97.09987997297246 -2.9612004692855365 71.625850409939616 97.107821916114275 -2.9612022028092895 71.812929899177547 97.122935906208042 -2.9612050884023517 71.999356036530841 97.145207875948742 -2.9612091229492949 72.184780481553688 97.174600102076738 -2.9612142995370245 72.502879085673626 97.237590511413202 -2.9612252001212398 72.636187218235207 97.267871835824977 -2.9612303925242807 72.768647830735986 97.301871535847397 -2.9612361805382439 72.900129161656693 97.339559590271463 -2.9612425590162306 73.030501093494863 97.380899599445129 -2.9612495217901 73.252579343002921 97.458200944744092 -2.9612624884965126 73.344882361275609 97.492422833885215 -2.961268214292152 73.436496359310937 97.528498519071874 -2.9612742363795466 73.527374134103553 97.566410431707553 -2.9612805518196299 73.617469127914703 97.606139368224035 -2.961287157412114 73.926382238510527 97.749840345069103 -2.9613110087052488 74.141013918486394 97.862892272790646 -2.9613297036620931 74.349942923521255 97.986507883052482 -2.9613500826762604 74.5525151033615 98.120319835919602 -2.9613720851068894 74.748110151085129 98.263906210975904 -2.9613956416225662 75.195704803701588 98.627835727496645 -2.9614552297851739 75.440868298706363 98.856609006949867 -2.9614925997855748 75.670079559100373 99.101851867109318 -2.9615325781312083 75.881971330733847 99.362141832093585 -2.9615749328425158 76.075338928309577 99.635916283517503 -2.9616194098103348 76.318774969050196 100.03579145212989 -2.9616842777838781 76.385250430828805 100.15201845486375 -2.9617031217507468 76.448529223553706 100.2700237442355 -2.9617222437544206 76.508552139037405 100.38969523867144 -2.9617416256348634 76.565265371617144 100.51091814038092 -2.9617612488086293 76.693199885731801 100.80502355450419 -2.9618088340834645 76.76121854138988 100.97927460409535 -2.9618370083451659 76.822544012945812 101.15600644137898 -2.9618655650311076 76.877066165117029 101.3348905731675 -2.9618944510718563 76.924697199521447 101.51559165583677 -2.9619236123514008 76.965371654677639 101.69776749532627 -2.9619529937071527 + 0 7 0.074770817129581418 5 0.14284161927477224 5 0.26476075139898975 5 0.35352758877760448 5 0.41741748635207526 5 0.57462364536664379 5 0.79163396657599061 5 0.87853311434506309 5 1 7 +6 -0 -0 -1 +7 0 0 4 5 2 76.965371654677639 101.69776749532627 -2.9619529937071496 77.002928353957287 101.86597929296319 -2.961980122939444 77.033895321072322 102.03558890192907 -2.9620074560611367 77.0581965075976 102.20619816427612 -2.9620349486618696 77.07580668519627 102.37740179215702 -2.9620625044982707 + 0 5 1 5 +6 -0 -0 1 +7 0 0 4 5 2 76.965371654677639 101.69776749532627 -2.9619529937071496 77.002928353957287 101.86597929296319 -2.961980122939444 77.033895321072322 102.03558890192907 -2.9620074560611367 77.0581965075976 102.20619816427612 -2.9620349486618696 77.07580668519627 102.37740179215702 -2.9620625044982707 + 0 5 1 5 +6 -0 -0 -1 +7 0 0 6 37 8 77.075806685431857 102.37740179445132 -2.9620625044989555 77.097935980730838 102.59254001968084 -2.9620971459206893 77.110583187733326 102.80878816380293 -2.962131930556529 77.113671075195228 103.02560564123218 -2.9621667830450042 77.107165244342454 103.24245133020726 -2.9622016216462721 77.091074128870943 103.45878357279075 -2.9622363582421158 77.04702334772962 103.82885393070713 -2.9622957342484413 77.023668203590177 103.98310293935189 -2.962320470575706 76.995402552199607 104.13660624861227 -2.9623450750639582 76.962256433547438 104.28916495229454 -2.9623695158152601 76.924270937941472 104.44058219020222 -2.9623937612875202 76.850431122341888 104.69967132848893 -2.9624352260003275 76.816838455723286 104.80797474234627 -2.9624525522644305 76.780740158732968 104.91549885035356 -2.9624697471543993 76.742159124831701 105.02217010297635 -2.9624867989041079 76.701121188359878 105.12791594050043 -2.9625036959137034 76.54893249286701 105.49467542639097 -2.9625622759613623 76.425015649364738 105.75045305692424 -2.9626030862458133 76.286358921328997 105.99886972161211 -2.9626426774085348 76.133521691159913 106.23885773976072 -2.9626808792008994 75.967167457927857 106.46941090979821 -2.9627175315102181 75.576961644230508 106.94909431943124 -2.9627936818849854 75.348136036099433 107.19420004864244 -2.9628325209376971 75.10284522426781 107.42335030956336 -2.9628687552258208 74.84251192979913 107.63517826635484 -2.962902168523176 74.568698967880493 107.828479674007 -2.962932571078519 74.168779776475517 108.07181854151303 -2.9629707088670947 74.052543194839302 108.13826478587499 -2.9629811056372795 73.934529220076897 108.20151425121192 -2.9629909842384232 73.814849932576564 108.26150776356998 -2.9630003354326502 73.693620127246689 108.31819155123414 -2.9630091508570229 73.399690181539825 108.44597288705012 -2.9630289729806361 73.225628550730505 108.51388232528156 -2.9630394639188555 73.049092980701701 108.57511362005566 -2.963048875412944 72.870410847527282 108.62955706704065 -2.9630571906281795 72.689916343741132 108.67712519693976 -2.9630643963203771 72.507950478337179 108.71775277549141 -2.96307048283589 + 0 7 0.15232779066728822 5 0.26185846240868399 5 0.34141378630637109 5 0.54040728645209835 5 0.77495060460148646 5 0.86886819439191132 5 1 7 +6 -0 -0 1 +7 0 0 6 37 8 77.075806685431857 102.37740179445132 -2.9620625044989555 77.097935980730838 102.59254001968084 -2.9620971459206893 77.110583187733326 102.80878816380293 -2.962131930556529 77.113671075195228 103.02560564123218 -2.9621667830450042 77.107165244342454 103.24245133020726 -2.9622016216462721 77.091074128870943 103.45878357279075 -2.9622363582421158 77.04702334772962 103.82885393070713 -2.9622957342484413 77.023668203590177 103.98310293935189 -2.962320470575706 76.995402552199607 104.13660624861227 -2.9623450750639582 76.962256433547438 104.28916495229454 -2.9623695158152601 76.924270937941472 104.44058219020222 -2.9623937612875202 76.850431122341888 104.69967132848893 -2.9624352260003275 76.816838455723286 104.80797474234627 -2.9624525522644305 76.780740158732968 104.91549885035356 -2.9624697471543993 76.742159124831701 105.02217010297635 -2.9624867989041079 76.701121188359878 105.12791594050043 -2.9625036959137034 76.54893249286701 105.49467542639097 -2.9625622759613623 76.425015649364738 105.75045305692424 -2.9626030862458133 76.286358921328997 105.99886972161211 -2.9626426774085348 76.133521691159913 106.23885773976072 -2.9626808792008994 75.967167457927857 106.46941090979821 -2.9627175315102181 75.576961644230508 106.94909431943124 -2.9627936818849854 75.348136036099433 107.19420004864244 -2.9628325209376971 75.10284522426781 107.42335030956336 -2.9628687552258208 74.84251192979913 107.63517826635484 -2.962902168523176 74.568698967880493 107.828479674007 -2.962932571078519 74.168779776475517 108.07181854151303 -2.9629707088670947 74.052543194839302 108.13826478587499 -2.9629811056372795 73.934529220076897 108.20151425121192 -2.9629909842384232 73.814849932576564 108.26150776356998 -2.9630003354326502 73.693620127246689 108.31819155123414 -2.9630091508570229 73.399690181539825 108.44597288705012 -2.9630289729806361 73.225628550730505 108.51388232528156 -2.9630394639188555 73.049092980701701 108.57511362005566 -2.963048875412944 72.870410847527282 108.62955706704065 -2.9630571906281795 72.689916343741132 108.67712519693976 -2.9630643963203771 72.507950478337179 108.71775277549141 -2.96307048283589 + 0 7 0.15232779066728822 5 0.26185846240868399 5 0.34141378630637109 5 0.54040728645209835 5 0.77495060460148646 5 0.86886819439191132 5 1 7 +6 -0 -0 -1 +7 0 0 6 47 10 72.50795047833715 108.71775277549138 -2.9630704828358989 72.395809250980662 108.74279058416607 -2.9630742338103935 72.283108901450859 108.76519249295961 -2.9630775597403782 72.169929058641785 108.78494330370769 -2.9630804583772079 72.056349828295723 108.80203119655475 -2.9630829280164028 71.942451793003229 108.81644772995412 -2.9630849674976432 71.72440626641324 108.83887609207592 -2.9630880407792257 71.620237878751411 108.84735236279617 -2.9630891491806159 71.515871496950012 108.85360794133372 -2.9630899001566182 71.411367931578241 108.85763645583872 -2.9630902928313572 71.306788156042202 108.85943387410653 -2.9630903267054087 71.014859828108854 108.85821873788196 -2.9630894194792057 70.82747719719174 108.85027650714908 -2.9630876859252484 70.640397644337838 108.83516222327903 -2.9630848003117483 70.45397145522405 108.8128899541624 -2.963080765754071 70.268546970699759 108.78349742368057 -2.9630755891651219 69.950448335889675 108.72050648405194 -2.9630646885952525 69.817140206039355 108.69022493661089 -2.9630594962035981 69.684679602864762 108.65622501239353 -2.9630537082059134 69.553198287965287 108.6185367328593 -2.9630473297489388 69.422826378910898 108.57719649791595 -2.9630403670006387 69.200748188837494 108.49989476663247 -2.9630274003462014 69.108445203812082 108.46567271781151 -2.96302167457493 69.016831242445292 108.42959687317428 -2.9630156525141227 68.925953507746527 108.39168480141041 -2.9630093371027466 68.835858557455012 108.35195570618178 -2.9630027315410001 68.526945639957916 108.20825419612363 -2.9629788803633623 68.312314125463288 108.09520189950996 -2.962960185501553 68.103385304905814 107.97158592775229 -2.962939806593115 67.900813328103609 107.83777362202636 -2.9629178042771098 67.705218501436136 107.69418690395229 -2.9628942478830083 67.257624478607937 107.33025664771446 -2.9628346600299058 67.012461401173113 107.10148299000994 -2.9627972902232602 66.783250581717652 106.85623978323925 -2.9627573120767194 66.571359271368124 106.59594950505475 -2.9627149575640463 66.37799215224706 106.32217477527179 -2.9626704807889634 66.134556813927745 105.92229928846677 -2.9626056130734555 66.06808156335056 105.80607221649574 -2.9625867691812005 66.004802982622778 105.6880668643477 -2.9625676472501712 65.944780279684366 105.56839531358823 -2.9625482654400979 65.888067259952635 105.4471723619875 -2.9625286423341328 65.760133836629677 105.15306817758727 -2.9624810574308706 65.692115956885274 104.97881845734061 -2.9624528834769976 65.630791155504198 104.80208799791126 -2.9624243270981263 65.576269564718345 104.62320528462682 -2.9623954413617977 65.528638980576105 104.44250565301161 -2.9623662803822053 65.48796486294242 104.2603312887863 -2.9623368993201891 + 0 7 0.074770873192650592 5 0.14284262397464381 5 0.26476179997704608 5 0.35352865886486839 5 0.41741856605864036 5 0.57462472680546017 5 0.79163499837064677 5 0.87853410998728632 5 1 7 +6 -0 -0 1 +7 0 0 6 47 10 72.50795047833715 108.71775277549138 -2.9630704828358989 72.395809250980662 108.74279058416607 -2.9630742338103935 72.283108901450859 108.76519249295961 -2.9630775597403782 72.169929058641785 108.78494330370769 -2.9630804583772079 72.056349828295723 108.80203119655475 -2.9630829280164028 71.942451793003229 108.81644772995412 -2.9630849674976432 71.72440626641324 108.83887609207592 -2.9630880407792257 71.620237878751411 108.84735236279617 -2.9630891491806159 71.515871496950012 108.85360794133372 -2.9630899001566182 71.411367931578241 108.85763645583872 -2.9630902928313572 71.306788156042202 108.85943387410653 -2.9630903267054087 71.014859828108854 108.85821873788196 -2.9630894194792057 70.82747719719174 108.85027650714908 -2.9630876859252484 70.640397644337838 108.83516222327903 -2.9630848003117483 70.45397145522405 108.8128899541624 -2.963080765754071 70.268546970699759 108.78349742368057 -2.9630755891651219 69.950448335889675 108.72050648405194 -2.9630646885952525 69.817140206039355 108.69022493661089 -2.9630594962035981 69.684679602864762 108.65622501239353 -2.9630537082059134 69.553198287965287 108.6185367328593 -2.9630473297489388 69.422826378910898 108.57719649791595 -2.9630403670006387 69.200748188837494 108.49989476663247 -2.9630274003462014 69.108445203812082 108.46567271781151 -2.96302167457493 69.016831242445292 108.42959687317428 -2.9630156525141227 68.925953507746527 108.39168480141041 -2.9630093371027466 68.835858557455012 108.35195570618178 -2.9630027315410001 68.526945639957916 108.20825419612363 -2.9629788803633623 68.312314125463288 108.09520189950996 -2.962960185501553 68.103385304905814 107.97158592775229 -2.962939806593115 67.900813328103609 107.83777362202636 -2.9629178042771098 67.705218501436136 107.69418690395229 -2.9628942478830083 67.257624478607937 107.33025664771446 -2.9628346600299058 67.012461401173113 107.10148299000994 -2.9627972902232602 66.783250581717652 106.85623978323925 -2.9627573120767194 66.571359271368124 106.59594950505475 -2.9627149575640463 66.37799215224706 106.32217477527179 -2.9626704807889634 66.134556813927745 105.92229928846677 -2.9626056130734555 66.06808156335056 105.80607221649574 -2.9625867691812005 66.004802982622778 105.6880668643477 -2.9625676472501712 65.944780279684366 105.56839531358823 -2.9625482654400979 65.888067259952635 105.4471723619875 -2.9625286423341328 65.760133836629677 105.15306817758727 -2.9624810574308706 65.692115956885274 104.97881845734061 -2.9624528834769976 65.630791155504198 104.80208799791126 -2.9624243270981263 65.576269564718345 104.62320528462682 -2.9623954413617977 65.528638980576105 104.44250565301161 -2.9623662803822053 65.48796486294242 104.2603312887863 -2.9623368993201891 + 0 7 0.074770873192650592 5 0.14284262397464381 5 0.26476179997704608 5 0.35352865886486839 5 0.41741856605864036 5 0.57462472680546017 5 0.79163499837064677 5 0.87853410998728632 5 1 7 +6 -0 -0 -1 +7 0 0 4 5 2 65.48796486294242 104.26033128878629 -2.9623368993201984 65.450408184470049 104.09211955067957 -2.9623097701490324 65.419441233432906 103.92251000254058 -2.9622824276516901 65.395140058160578 103.75190080192084 -2.9622549557850939 65.377529886954946 103.58069723619339 -2.9622273887170638 + 0 5 1 5 +6 -0 -0 1 +7 0 0 4 5 2 65.48796486294242 104.26033128878629 -2.9623368993201984 65.450408184470049 104.09211955067957 -2.9623097701490324 65.419441233432906 103.92251000254058 -2.9622824276516901 65.395140058160578 103.75190080192084 -2.9622549557850939 65.377529886954946 103.58069723619339 -2.9622273887170638 + 0 5 1 5 +9 0 0 0 0 3 5 4 15 2 5 -159.39770967199999 -75.948486682799995 -19.800000000000001 -158.93687790800001 -76.189389329999997 -19.800000000000001 -158.44726455599999 -76.445337730000006 -19.865063444699999 -157.936013527 -76.712597359200004 -20.010999974800001 -156.89929045100001 -77.254550742099994 -20.504066905199998 -155.94651800899999 -77.752618413299999 -21.442306214799999 -155.51793511599999 -77.976662764500006 -22.032874620299999 -154.84241962300001 -78.329792655600002 -23.457685379699999 -154.692124595 -78.408360308300004 -25.227754620300001 -154.78764134299999 -78.358428339300005 -26.166699592400001 -155.387325645 -78.044939670900007 -28.001344372599998 -156.72063971200001 -77.347941517799995 -29.418154914999999 -157.553954463 -76.912321091799996 -29.940398172599998 -158.47604614400001 -76.4302919772 -30.199999999999999 -159.39770967199999 -75.948486682799995 -30.199999999999999 +-156.30921418400001 -70.040387146200004 -19.800000000000001 -155.84838242000001 -70.281289793400006 -19.800000000000001 -155.35876906799999 -70.5372381934 -19.865063444699999 -154.84751803899999 -70.804497822599998 -20.010999974800001 -153.810794964 -71.346451205500003 -20.504066905199998 -152.858022522 -71.844518876699993 -21.442306214799999 -152.429439629 -72.0685632279 -22.032874620299999 -151.75392413700001 -72.421693118899995 -23.457685379699999 -151.60362911000001 -72.500260771699999 -25.227754620300001 -151.69914585800001 -72.450328802599998 -26.166699592400001 -152.29883016100001 -72.136840134300002 -28.001344372599998 -153.63214422799999 -71.439841981200004 -29.418154914999999 -154.465458979 -71.004221555100003 -29.940398172599998 -155.38755065999999 -70.522192440500007 -30.199999999999999 -156.309214188 -70.040387146100002 -30.199999999999999 +-153.220718729 -64.132287610000006 -19.800000000000001 -152.75988696499999 -64.373190257299996 -19.800000000000001 -152.270273613 -64.629138657400006 -19.865063444699999 -151.75902258400001 -64.896398286600004 -20.010999974800001 -150.72229950799999 -65.438351669599996 -20.504066905199998 -149.76952706599999 -65.936419340800001 -21.442306214799999 -149.34094417200001 -66.160463691999993 -22.032874620299999 -148.665428679 -66.513593583000002 -23.457685379699999 -148.51513365100001 -66.592161235500001 -25.227754620300001 -148.61065039900001 -66.5422292664 -26.166699592400001 -149.21033470200001 -66.228740597799998 -28.001344372599998 -150.54364877 -65.531742444499997 -29.418154914999999 -151.37696352 -65.096122018299994 -29.940398172599998 -152.29905520299999 -64.614092903599996 -30.199999999999999 -153.22071873100001 -64.132287609100004 -30.199999999999999 +-150.13222324099999 -58.224188073400001 -19.800000000000001 -149.67139147699999 -58.465090720600003 -19.800000000000001 -149.18177812499999 -58.721039120599997 -19.865063444699999 -148.670527096 -58.988298749800002 -20.010999974800001 -147.63380402000001 -59.530252132699999 -20.504066905199998 -146.68103157799999 -60.028319803899997 -21.442306214799999 -146.25244868499999 -60.252364155099997 -22.032874620299999 -145.57693319200001 -60.6054940462 -23.457685379699999 -145.426638164 -60.684061698900003 -25.227754620300001 -145.52215491199999 -60.634129729800001 -26.166699592400001 -146.121839214 -60.320641061499998 -28.001344372599998 -147.45515328100001 -59.623642908400001 -29.418154914999999 -148.288468032 -59.188022482400001 -29.940398172599998 -149.21055971300001 -58.705993367799998 -30.199999999999999 -150.13222324099999 -58.224188073400001 -30.199999999999999 + +0 4 +20 4 + +0 6 +4.0840704496700004 3 +8.16814089933 3 +12.252211349 3 +16.3362817987 6 + +1 -157.30050514600001 -77.0448132856 -24.486811482299998 -0.46327432155297421 -0.88621493047095057 4.9994730577697216e-15 -0.035330492216491816 0.018469232743613093 0.99920500587297045 -0.88551039480594018 0.46290602118813573 -0.03986673097204408 +9 0 0 0 0 3 5 4 15 2 5 -159.39770967199999 -75.948486682799995 -30.199999999999999 -160.3193732 -75.466681388400005 -30.199999999999999 -161.241464882 -74.984652273799995 -29.940398172599998 -162.074779632 -74.549031847799995 -29.418154914999999 -163.40809369900001 -73.852033694699998 -28.001344372599998 -164.00777800099999 -73.5385450263 -26.166699592400001 -164.10329474900001 -73.4886130573 -25.227754620300001 -163.952999721 -73.567180710000002 -23.457685379699999 -163.27748422799999 -73.920310601099999 -22.032874620299999 -162.84890133499999 -74.144354952300006 -21.442306214799999 -161.896128893 -74.642422623499996 -20.504066905199998 -160.85940581700001 -75.184376006400001 -20.010999974800001 -160.34815478799999 -75.451635635599999 -19.865063444699999 -159.858541436 -75.707584035599993 -19.800000000000001 -159.39770967199999 -75.948486682799995 -19.800000000000001 +-156.309214188 -70.040387146100002 -30.199999999999999 -157.23087771600001 -69.558581851699998 -30.199999999999999 -158.15296939699999 -69.076552737100002 -29.940398172599998 -158.98628414699999 -68.640932311100002 -29.418154914999999 -160.319598214 -67.943934158000005 -28.001344372599998 -160.91928251499999 -67.630445489699994 -26.166699592400001 -161.01479926299999 -67.580513520599993 -25.227754620300001 -160.86450423400001 -67.659081173399997 -23.457685379699999 -160.188988741 -68.012211064499994 -22.032874620299999 -159.76040584699999 -68.236255415700001 -21.442306214799999 -158.80763340499999 -68.734323086900005 -20.504066905199998 -157.770910329 -69.276276469799996 -20.010999974800001 -157.25965930000001 -69.543536098999994 -19.865063444699999 -156.77004594799999 -69.799484499000002 -19.800000000000001 -156.30921418400001 -70.040387146200004 -19.800000000000001 +-153.22071873100001 -64.132287609100004 -30.199999999999999 -154.14238225899999 -63.650482314599998 -30.199999999999999 -155.06447394099999 -63.1684531999 -29.940398172599998 -155.89778869099999 -62.7328327739 -29.418154914999999 -157.23110275799999 -62.035834620700001 -28.001344372599998 -157.830787061 -61.7223459525 -26.166699592400001 -157.926303808 -61.6724139835 -25.227754620300001 -157.77600878000001 -61.750981636299997 -23.457685379699999 -157.10049328700001 -62.104111527599997 -22.032874620299999 -156.67191039299999 -62.328155878899999 -21.442306214799999 -155.71913795099999 -62.826223550199998 -20.504066905199998 -154.68241487500001 -63.368176933299999 -20.010999974800001 -154.171163845 -63.635436562599999 -19.865063444699999 -153.681550493 -63.891384962700002 -19.800000000000001 -153.220718729 -64.132287610000006 -19.800000000000001 +-150.13222324099999 -58.224188073400001 -30.199999999999999 -151.053886769 -57.742382779000003 -30.199999999999999 -151.975978451 -57.2603536644 -29.940398172599998 -152.809293201 -56.824733238299999 -29.418154914999999 -154.14260726800001 -56.127735085200001 -28.001344372599998 -154.74229156999999 -55.814246416899998 -26.166699592400001 -154.83780831799999 -55.764314447899999 -25.227754620300001 -154.68751329 -55.842882100600001 -23.457685379699999 -154.01199779699999 -56.196011991699997 -22.032874620299999 -153.58341490399999 -56.420056342899997 -21.442306214799999 -152.630642462 -56.918124014 -20.504066905199998 -151.59391938600001 -57.460077396999999 -20.010999974800001 -151.08266835699999 -57.727337026199997 -19.865063444699999 -150.593055005 -57.983285426199998 -19.800000000000001 -150.13222324099999 -58.224188073400001 -19.800000000000001 + +0 4 +20 4 + +16.3362817987 6 +20.420352248299999 3 +24.504422697999999 3 +28.588493147699999 3 +32.672563597299998 6 + +9 0 0 0 0 5 5 6 15 2 5 -159.39770967300001 -75.948486684100004 -21 -159.04322370099999 -76.133796412500004 -21 -158.666598045 -76.330679797000002 -21.050048803599999 -158.27332802199999 -76.536264126999995 -21.162307672899999 -157.47584873299999 -76.953151344299997 -21.541589927099999 -156.74294685500001 -77.336280321900006 -22.263312472900001 -156.413267706 -77.508622130399999 -22.7175958618 -155.89364040300001 -77.780260507999998 -23.813604138199999 -155.778028844 -77.840697164000005 -25.175195861799999 -155.85150326499999 -77.802287957100006 -25.897461225000001 -156.312798883 -77.561142827899999 -27.308726440400001 -157.33842508800001 -77.0249904028 -28.398580703899999 -157.979436435 -76.6898977675 -28.800306286600001 -158.68873772800001 -76.319106141099994 -29 -159.39770967300001 -75.948486684100004 -29 +-157.54461237999999 -72.403626961900002 -21 -157.190126408 -72.588936690300002 -21 -156.81350075200001 -72.7858200748 -21.050048803599999 -156.42023072999999 -72.991404404700006 -21.162307672899999 -155.62275144099999 -73.408291621999993 -21.541589927099999 -154.88984956300001 -73.791420599600002 -22.263312472799999 -154.560170414 -73.963762408099996 -22.7175958616 -154.04054311199999 -74.235400785699994 -23.813604137999999 -153.924931552 -74.295837441800003 -25.175195861599999 -153.99840597400001 -74.257428234900004 -25.897461224699999 -154.45970159199999 -74.016283105699998 -27.308726440299999 -155.485327797 -73.480130680499997 -28.398580703899999 -156.12633914400001 -73.145038045299998 -28.800306286600001 -156.83564043800001 -72.774246418900006 -29 -157.544612382 -72.403626961800001 -29 +-155.691515087 -68.858767239700001 -21 -155.33702911500001 -69.044076968100001 -21 -154.96040345899999 -69.240960352599998 -21.050048803599999 -154.567133437 -69.446544682500004 -21.162307672899999 -153.769654148 -69.863431899800005 -21.541589927 -153.03675226999999 -70.246560877299999 -22.263312472700001 -152.707073122 -70.418902685800006 -22.717595861500001 -152.18744581999999 -70.690541063500007 -23.813604137799999 -152.07183426099999 -70.7509777195 -25.175195861300001 -152.14530868200001 -70.712568512700003 -25.897461224499999 -152.606604301 -70.471423383499996 -27.308726440200001 -153.632230507 -69.935270958299995 -28.3985807038 -154.273241853 -69.600178322999994 -28.800306286600001 -154.982543147 -69.229386696600002 -29 -155.691515092 -68.858767239499997 -29 +-153.838417827 -65.313907517800004 -21 -153.48393185500001 -65.499217246900002 -21 -153.10730619899999 -65.696100631899995 -21.050048803599999 -152.714036177 -65.901684962499999 -21.162307672899999 -151.916556888 -66.318572180900006 -21.5415899272 -151.18365501 -66.701701159199999 -22.263312472999999 -150.85397586100001 -66.874042967999998 -22.717595861900001 -150.33434855900001 -67.145681345900002 -23.813604138199999 -150.21873699899999 -67.206118001700005 -25.175195861599999 -150.29221142 -67.167708794500001 -25.897461224600001 -150.75350703800001 -66.926563664499994 -27.308726440099999 -151.77913324400001 -66.390411237999999 -28.398580703699999 -152.42014459000001 -66.055318602 -28.800306286600001 -153.12944588400001 -65.684526974700006 -29 -153.83841782900001 -65.313907516699999 -29 +-151.98532053400001 -61.769047795600002 -21 -151.63083456199999 -61.954357524099997 -21 -151.254208906 -62.151240908600002 -21.050048803599999 -150.86093888299999 -62.356825238699997 -21.162307672899999 -150.06345959399999 -62.7737124561 -21.541589927099999 -149.33055771599999 -63.1568414336 -22.263312472900001 -149.000878567 -63.329183242100001 -22.7175958618 -148.48125126400001 -63.600821619500003 -23.813604138199999 -148.36563970399999 -63.6612582753 -25.175195861700001 -148.43911412599999 -63.622849068299999 -25.897461224800001 -148.90040974300001 -63.381703938800001 -27.308726440299999 -149.92603594900001 -62.8455515136 -28.3985807038 -150.567047296 -62.510458878400001 -28.800306286600001 -151.27634859 -62.139667252000002 -29 -151.985320535 -61.769047795100001 -29 +-150.13222324099999 -58.224188073400001 -21 -149.777737269 -58.409497801800001 -21 -149.40111161300001 -58.606381186299998 -21.050048803599999 -149.00784159099999 -58.811965516299999 -21.162307672899999 -148.210362301 -59.2288527336 -21.541589927099999 -147.477460423 -59.6119817111 -22.263312472900001 -147.14778127400001 -59.784323519700003 -22.7175958618 -146.62815397200001 -60.0559618972 -23.813604138199999 -146.51254241199999 -60.116398553099998 -25.175195861799999 -146.586016833 -60.077989346099997 -25.897461225000001 -147.04731245100001 -59.836844216700001 -27.308726440400001 -148.07293865599999 -59.300691791699997 -28.398580703899999 -148.71395000300001 -58.965599156499998 -28.800306286600001 -149.42325129700001 -58.594807530300002 -29 -150.13222324099999 -58.224188073400001 -29 + +-1.4469492271e-09 6 +20 6 + +0 6 +4.0840704496700004 3 +8.1681408993400009 3 +12.252211349 3 +16.3362817987 6 + +9 0 0 0 0 5 5 6 15 2 5 -159.39770967199999 -75.948486682799995 -29 -160.10668161699999 -75.577867225800006 -29 -160.81598291 -75.207075599299998 -28.800306286600001 -161.45699425699999 -74.871982964099999 -28.398580703899999 -162.482620462 -74.335830539100002 -27.308726440400001 -162.94391608000001 -74.094685409799993 -25.897461225000001 -163.01739050099999 -74.056276202999996 -25.175195861799999 -162.90177894199999 -74.116712859000003 -23.813604138199999 -162.382151639 -74.388351236600002 -22.7175958618 -162.05247249000001 -74.560693045099995 -22.263312472900001 -161.31957061200001 -74.943822022600003 -21.541589927099999 -160.52209132300001 -75.360709239900004 -21.162307672899999 -160.1288213 -75.566293569899997 -21.050048803599999 -159.75219564400001 -75.763176954299993 -21 -159.39770967199999 -75.948486682799995 -21 +-157.544612382 -72.403626960799997 -29 -158.25358432600001 -72.033007503799993 -29 -158.96288562000001 -71.662215877400001 -28.800306286600001 -159.60389696600001 -71.327123242200003 -28.398580703899999 -160.62952317099999 -70.790970817100003 -27.308726440600001 -161.09081878800001 -70.549825687899997 -25.897461225200001 -161.16429320899999 -70.511416480999998 -25.175195862100001 -161.048681649 -70.571853137000005 -23.813604138500001 -160.529054347 -70.843491514600004 -22.717595861900001 -160.19937519800001 -71.015833323099997 -22.263312472999999 -159.46647331899999 -71.398962300600004 -21.541589927099999 -158.66899402999999 -71.815849517999993 -21.162307672899999 -158.27572400700001 -72.021433847899999 -21.050048803599999 -157.89909835099999 -72.218317232399997 -21 -157.544612379 -72.403626960799997 -21 +-155.69151509100001 -68.858767238799999 -29 -156.400487035 -68.488147780999995 -29 -157.10978832699999 -68.117356151600006 -28.800306286600001 -157.75079967900001 -67.782263526999998 -28.398580704 -158.77642587299999 -67.246111082200002 -27.308726440800001 -159.237721499 -67.004965970499995 -25.897461225499999 -159.31119592100001 -66.9665567654 -25.175195862399999 -159.195584349 -67.026993399000006 -23.813604138700001 -158.67595705799999 -67.298631799600003 -22.717595862100001 -158.34627790600001 -67.470973603199994 -22.263312473100001 -157.61337602200001 -67.854102570199998 -21.541589927099999 -156.81589673900001 -68.270989800300001 -21.162307672899999 -156.422626713 -68.476574123299997 -21.050048803599999 -156.046001058 -68.673457510000006 -21 -155.69151508600001 -68.858767238900001 -21 +-153.83841782799999 -65.313907516300006 -29 -154.54738977299999 -64.943288058299999 -29 -155.25669106699999 -64.572496431100006 -28.800306286600001 -155.89770241299999 -64.237403795099993 -28.3985807038 -156.923328618 -63.701251368699999 -27.308726440400001 -157.38462423499999 -63.460106238800002 -25.897461225099999 -157.458098656 -63.421697031800001 -25.175195862100001 -157.34248709600001 -63.482133687800001 -23.813604138599999 -156.82285979299999 -63.7537720662 -22.717595862100001 -156.493180645 -63.926113875200002 -22.263312473199999 -155.760278766 -64.309242853900003 -21.5415899272 -154.962799477 -64.726130072499998 -21.162307672899999 -154.56952945399999 -64.931714403100003 -21.050048803599999 -154.19290379899999 -65.128597788199997 -21 -153.838417827 -65.313907517299995 -21 +-151.985320535 -61.769047794800002 -29 -152.69429248 -61.3984283379 -29 -153.403593774 -61.027636711600003 -28.800306286600001 -154.04460512 -60.692544076499999 -28.3985807038 -155.070231326 -60.156391651699998 -27.308726440400001 -155.53152694299999 -59.915246522499999 -25.897461225000001 -155.60500136499999 -59.8768373156 -25.175195861900001 -155.489389805 -59.937273971400003 -23.813604138399999 -154.96976250200001 -60.2089123489 -22.717595862 -154.64008335299999 -60.381254157400001 -22.263312472999999 -153.907181474 -60.764383134900001 -21.5415899272 -153.109702185 -61.181270352299997 -21.162307672899999 -152.71643216199999 -61.386854682299997 -21.050048803599999 -152.339806506 -61.583738066800002 -21 -151.98532053400001 -61.769047795299997 -21 +-150.13222324099999 -58.224188073400001 -29 -150.84119518599999 -57.853568616499999 -29 -151.55049647999999 -57.482776990300003 -28.800306286600001 -152.19150782599999 -57.147684355199999 -28.398580703899999 -153.21713403199999 -56.611531930399998 -27.308726440400001 -153.67842964900001 -56.370386801099997 -25.897461225000001 -153.75190406999999 -56.331977594199998 -25.175195861799999 -153.63629251099999 -56.392414250000002 -23.813604138199999 -153.116665208 -56.664052627399997 -22.7175958618 -152.78698605899999 -56.836394435899997 -22.263312472900001 -152.05408418100001 -57.219523413300003 -21.541589927099999 -151.25660489099999 -57.636410630500002 -21.162307672899999 -150.863334869 -57.841994960500003 -21.050048803599999 -150.48670921300001 -58.038878344899999 -21 -150.13222324099999 -58.224188073400001 -21 + +0 6 +20 6 + +16.3362817987 6 +20.420352248299999 3 +24.504422697999999 3 +28.588493147699999 3 +32.672563597299998 6 + +9 1 0 0 0 5 5 6 6 2 2 -150.13222324099999 -58.224188073400001 -19.800000000000001 1 -131.698952687 -67.860293961699995 -19.800000000000001 0.20000000000000001 -140.915587964 -63.042241017499997 -40.600000000000001 0.20000000000000001 -159.34885851799999 -53.406135129200003 -40.600000000000001 0.20000000000000001 -168.56549379500001 -48.588082185099999 -19.800000000000001 0.20000000000000001 -150.13222324099999 -58.224188073400001 -19.800000000000001 1 +-147.975347951 -54.0982199655 -19.799999999800001 1 -129.542077406 -63.734325852300003 -19.799999999699999 0.20000000000000001 -135.72742849599999 -53.117615027299998 -40.599999997700003 0.20000000000000001 -154.16069905000001 -43.4815091376 -40.600000002000002 0.20000000000000001 -166.40861851099999 -44.462114077099997 -19.799999999699999 0.20000000000000001 -147.975347951 -54.0982199655 -19.799999999800001 1 +-145.81848292000001 -49.972250860199999 -17.9692792387 1 -127.385203549 -59.608355961900003 -17.969279612499999 0.20000000000000001 -130.53927686500001 -43.1929876122 -36.196378334999999 0.20000000000000001 -148.97254421299999 -33.556882611699997 -36.196376028400003 0.20000000000000001 -164.251748214 -40.336146503499997 -17.969280146799999 0.20000000000000001 -145.81847494100001 -49.972250860199999 -17.9692792387 1 +-144.12388079799999 -46.7306202165 -14.311436718 1 -125.69061337700001 -56.366726634300001 -14.3114368965 0.20000000000000001 -126.463106149 -35.395549371800001 -27.397780403199999 0.20000000000000001 -144.896378134 -25.759442333399999 -27.397780714100001 0.20000000000000001 -162.557165871 -37.094513710500003 -14.311437096100001 0.20000000000000001 -144.12388079799999 -46.7306202165 -14.311436718 1 +-143.27576329499999 -45.108207104900004 -9.6557194721900004 1 -124.84249274 -54.744312990799997 -9.6557194723799995 0.20000000000000001 -124.423022125 -31.492989494100001 -16.1988927841 0.20000000000000001 -142.856292682 -21.856883609600001 -16.198892783800002 0.20000000000000001 -161.70903384100001 -35.472101219400002 -9.6557194719999995 0.20000000000000001 -143.27576329499999 -45.108207104900004 -9.6557194721900004 1 +-143.27576328200001 -45.108207102400002 -5 1 -124.842492728 -54.744312990700003 -5 0.20000000000000001 -124.423022117 -31.4929894928 -5 0.20000000000000001 -142.85629267100001 -21.856883604499998 -5 0.20000000000000001 -161.709033836 -35.4721012141 -5 0.20000000000000001 -143.27576328200001 -45.108207102400002 -5 1 + +0 6 +31.4575637262 6 + +0 6 +32.672563597299998 6 + +9 1 0 0 0 5 5 6 6 2 2 -150.13222324099999 -58.224188073400001 -19.800000000000001 1 -131.698952687 -67.860293961699995 -19.800000000000001 0.20000000000000001 -140.915587964 -63.042241017499997 -40.600000000000001 0.20000000000000001 -159.34885851799999 -53.406135129200003 -40.600000000000001 0.20000000000000001 -168.56549379500001 -48.588082185099999 -19.800000000000001 0.20000000000000001 -150.13222324099999 -58.224188073400001 -19.800000000000001 1 +-147.975347951 -54.0982199655 -19.799999999800001 1 -129.542077406 -63.734325852300003 -19.799999999699999 0.20000000000000001 -135.72742849599999 -53.117615027299998 -40.599999997700003 0.20000000000000001 -154.16069905000001 -43.4815091376 -40.600000002000002 0.20000000000000001 -166.40861851099999 -44.462114077099997 -19.799999999699999 0.20000000000000001 -147.975347951 -54.0982199655 -19.799999999800001 1 +-145.81848292000001 -49.972250860199999 -17.9692792387 1 -127.385203549 -59.608355961900003 -17.969279612499999 0.20000000000000001 -130.53927686500001 -43.1929876122 -36.196378334999999 0.20000000000000001 -148.97254421299999 -33.556882611699997 -36.196376028400003 0.20000000000000001 -164.251748214 -40.336146503499997 -17.969280146799999 0.20000000000000001 -145.81847494100001 -49.972250860199999 -17.9692792387 1 +-144.12388079799999 -46.7306202165 -14.311436718 1 -125.69061337700001 -56.366726634300001 -14.3114368965 0.20000000000000001 -126.463106149 -35.395549371800001 -27.397780403199999 0.20000000000000001 -144.896378134 -25.759442333399999 -27.397780714100001 0.20000000000000001 -162.557165871 -37.094513710500003 -14.311437096100001 0.20000000000000001 -144.12388079799999 -46.7306202165 -14.311436718 1 +-143.27576329499999 -45.108207104900004 -9.6557194721900004 1 -124.84249274 -54.744312990799997 -9.6557194723799995 0.20000000000000001 -124.423022125 -31.492989494100001 -16.1988927841 0.20000000000000001 -142.856292682 -21.856883609600001 -16.198892783800002 0.20000000000000001 -161.70903384100001 -35.472101219400002 -9.6557194719999995 0.20000000000000001 -143.27576329499999 -45.108207104900004 -9.6557194721900004 1 +-143.27576328200001 -45.108207102400002 -5 1 -124.842492728 -54.744312990700003 -5 0.20000000000000001 -124.423022117 -31.4929894928 -5 0.20000000000000001 -142.85629267100001 -21.856883604499998 -5 0.20000000000000001 -161.709033836 -35.4721012141 -5 0.20000000000000001 -143.27576328200001 -45.108207102400002 -5 1 + +0 6 +31.4575637262 6 + +0 6 +32.672563597299998 6 + +9 0 0 0 0 5 5 6 15 2 5 -150.13222324099999 -58.224188073299999 -21 -149.777737269 -58.409497801800001 -21 -149.40111161300001 -58.606381186199997 -21.050048803599999 -149.00784159099999 -58.811965516100003 -21.162307672899999 -148.210362301 -59.228852733399997 -21.541589927099999 -147.477460423 -59.611981710899997 -22.263312472900001 -147.14778127400001 -59.784323519499999 -22.7175958618 -146.62815397200001 -60.0559618972 -23.813604138199999 -146.51254241199999 -60.116398553300002 -25.175195861799999 -146.586016833 -60.077989346400003 -25.897461224899999 -147.04731245100001 -59.836844217200003 -27.308726440400001 -148.07293865599999 -59.300691792099997 -28.398580703899999 -148.71395000300001 -58.965599156899998 -28.800306286600001 -149.42325129700001 -58.594807530499999 -29 -150.13222324099999 -58.224188073400001 -29 +-147.800466091 -53.763681856600002 -20.9999999998 -147.44598021100001 -53.9489917613 -20.999999999700002 -147.062060798 -54.131922641400003 -21.050048803199999 -146.652430845 -54.306211443199999 -21.162307672400001 -145.799677102 -54.6173620705 -21.5415899264 -144.96159524000001 -54.799288287000003 -22.263312471999999 -144.56571122299999 -54.844984305700002 -22.717595860900001 -143.88635738400001 -54.811075764000002 -23.813604137199999 -143.57231444600001 -54.491925548799998 -25.175195860900001 -143.54052960800001 -54.252161934 -25.897461224099999 -143.79615462800001 -53.6175817568 -27.308726439699999 -144.662950978 -52.777597708899997 -28.3985807034 -145.24541684900001 -52.330511224699997 -28.800306286200001 -145.92561574999999 -51.904048533800001 -28.999999999700002 -146.63458763700001 -51.533428965500001 -28.9999999998 +-145.46897677800001 -49.303667326199999 -19.020842351900001 -145.11449049000001 -49.488976913400002 -19.020842515399998 -144.72327358199999 -49.657948618500001 -19.0647006023 -144.297275953 -49.800927566699997 -19.1630735556 -143.389222346 -50.006293987900001 -19.495440041399998 -142.445913222 -49.9869279674 -20.127887858699999 -141.98379475199999 -49.9059220635 -20.525977801700002 -141.14464330499999 -49.566331498899999 -21.486413113400001 -140.63208110799999 -48.867427037399999 -22.679579736299999 -140.49499046599999 -48.426220316200002 -23.312502826300001 -140.54485398099999 -47.3980319247 -24.549198224000001 -141.25275023099999 -46.254082844300001 -25.504240172300001 -141.77664468399999 -45.694953461700003 -25.8562732207 -142.42772821700001 -45.212795527399997 -26.0312652219 -143.136699913 -44.842176227499998 -26.0312651088 +-143.636718288 -45.798708908899997 -15.065862788 -143.28223245000001 -45.984018763100003 -15.065862582499999 -142.88528872200001 -46.142034755799997 -15.097357578700001 -142.446445337 -46.260439828199999 -15.168000745700001 -141.49498989 -46.3827795674 -15.406678878799999 -140.46909202500001 -46.205424495000003 -15.860851411500001 -139.95498847900001 -46.0249733586 -16.146727336800001 -138.99041703899999 -45.445460172499999 -16.836434386299999 -138.32204275399999 -44.448495034799997 -17.693270688599998 -138.10230045599999 -43.849179979299997 -18.147785237400001 -137.99066733699999 -42.512056693700004 -19.0358807428 -138.573847575 -41.129531149400002 -19.721715578200001 -139.05177130999999 -40.482461149899997 -19.9745176763 -139.68000359499999 -39.9565886619 -20.100183102799999 -140.38897581699999 -39.585969052899998 -20.100183231900001 +-142.719834109 -44.044749188799997 -10.033209801 -142.36534813700001 -44.230058917299999 -10.0332099746 -141.96553615600001 -44.382588304800002 -10.0489542994 -141.520259482 -44.488687148700002 -10.0842684063 -140.54706846299999 -44.569448769499999 -10.2035817546 -139.47981106200001 -44.312976451200001 -10.4306183794 -138.93967408399999 -44.082725537800002 -10.573524971299999 -137.91229429000001 -43.383065016700002 -10.9183025689 -137.16589224800001 -42.236838757900003 -11.3466260397 -136.90475967399999 -41.558347202299998 -11.5738330212 -136.712252355 -40.066517768200001 -12.017782413300001 -137.23297706599999 -38.564520223000002 -12.3606237253 -137.68787926499999 -37.873412378499999 -12.4869966765 -138.30466758899999 -37.325649201799997 -12.549815350199999 -139.013639533 -36.955029744699999 -12.5498152687 +-142.719834096 -44.044749185800001 -5.0000000020600002 -142.36534812400001 -44.230058914499999 -5.0000000017900001 -141.96553614300001 -44.382588302099997 -5.0000000014600001 -141.520259469 -44.4886871462 -5.0000000010800001 -140.547068451 -44.569448767300003 -5.00000000026 -139.47981105 -44.312976449300002 -4.99999999946 -138.939674072 -44.0827255361 -4.9999999990899999 -137.91229427900001 -43.383065015299998 -4.9999999984899999 -137.165892238 -42.236838756600001 -4.9999999981899999 -136.90475966299999 -41.558347201099998 -4.9999999981299998 -136.712252345 -40.066517766799997 -4.9999999981499998 -137.23297705600001 -38.564520221000002 -4.9999999983699999 -137.68787925500001 -37.873412376300003 -4.9999999985199999 -138.30466757900001 -37.325649199300003 -4.9999999986999999 -139.01363952400001 -36.955029742100002 -4.9999999989099999 + +0 6 +31.4575637262 6 + +0 6 +4.0840704496700004 3 +8.16814089933 3 +12.252211349 3 +16.3362817987 6 + +9 0 0 0 0 5 5 6 15 2 5 -150.13222324099999 -58.224188073400001 -29 -150.84119518599999 -57.853568616399997 -29 -151.550496479 -57.482776989900003 -28.800306286600001 -152.19150782599999 -57.147684354699997 -28.398580703899999 -153.217134031 -56.611531929599998 -27.308726440400001 -153.67842964900001 -56.370386800399999 -25.897461224899999 -153.75190406999999 -56.331977593600001 -25.175195861799999 -153.63629251099999 -56.392414249600002 -23.813604138199999 -153.116665208 -56.664052627300002 -22.7175958618 -152.78698605899999 -56.836394435800003 -22.263312472900001 -152.05408418100001 -57.219523413399997 -21.541589927099999 -151.25660489200001 -57.636410630599997 -21.162307672899999 -150.863334869 -57.841994960500003 -21.050048803599999 -150.48670921300001 -58.038878344899999 -21 -150.13222324099999 -58.224188073299999 -21 +-146.63458763700001 -51.533428965500001 -28.9999999998 -147.34355952300001 -51.162809397300002 -28.999999999900002 -148.08196309300001 -50.847688613000003 -28.8003062867 -148.78151980300001 -50.624589612299999 -28.398580704099999 -149.96597565600001 -50.392268413799997 -27.308726440800001 -150.63294172100001 -50.544558043899997 -25.897461225499999 -150.81167534400001 -50.707503137300002 -25.175195862399999 -150.89449510200001 -51.147526547299996 -23.813604138799999 -150.53459438300001 -51.7247119337 -22.717595862300001 -150.27112015399999 -52.023699632000003 -22.263312473399999 -149.643398413 -52.608031662899997 -21.5415899274 -148.901193796 -53.1306558884 -21.162307673000001 -148.524283822 -53.367535972399999 -21.050048803599999 -148.15495204199999 -53.578372086999998 -20.999999999900002 -147.800466091 -53.763681856600002 -20.9999999998 +-143.136699913 -44.842176227499998 -26.0312651088 -143.84567161000001 -44.471556927599998 -26.031264995800001 -144.613190167 -44.212131924099999 -25.856272768699998 -145.371317971 -44.101076317999997 -25.504239499200001 -146.71467342299999 -44.172721021400001 -24.549197135499998 -147.587400616 -44.718619476800001 -23.312501435400002 -147.87143985 -45.083007914500001 -22.679578236699999 -148.15277836300001 -45.902785888899999 -21.4864115136 -147.95267449599999 -46.7856532367 -20.525976331999999 -147.75543426799999 -47.211342716600001 -20.127886512100002 -147.23293877500001 -47.996966480499999 -19.495439022999999 -146.54603287200001 -48.625374067899997 -19.163072956899999 -146.18548998399999 -48.893563522299999 -19.064700217999999 -145.823455118 -49.118358307400001 -19.020842333000001 -145.46896901100001 -49.3036678916 -19.020842351900001 +-140.38897581699999 -39.585969052899998 -20.100183231900001 -141.09794803899999 -39.215349443800001 -20.100183360999999 -141.88831890099999 -38.9996383748 -19.9745181927 -142.69241822399999 -38.9765228089 -19.721716343699999 -144.16049067200001 -39.286742938400003 -19.035881967200002 -145.194714847 -40.141575508599999 -18.147786784400001 -145.56140588599999 -40.664071962000001 -17.693272349200001 -145.99855697300001 -41.781910173199996 -16.8364361426 -145.923873821 -42.904700189800003 -16.146728911499999 -145.77861907499999 -43.429835069900001 -15.8608528212 -145.338713095 -44.373448497600002 -15.4066798378 -144.695209689 -45.084883786799999 -15.1680011 -144.34751284199999 -45.377647695100002 -15.0973576136 -143.99120504300001 -45.6133987885 -15.0658623052 -143.636718702 -45.798708692399998 -15.065862216299999 +-139.013639533 -36.955029744699999 -12.5498152687 -139.722611478 -36.584410287700003 -12.5498151873 -140.52442574099999 -36.390590211599999 -12.4869963508 -141.35154623400001 -36.411512785699998 -12.3606232294 -142.882073934 -36.841205480900001 -12.017781552200001 -143.997172487 -37.850744656499998 -11.5738317945 -144.405253905 -38.452417798299997 -11.3466246407 -144.920432828 -39.719517369099997 -10.9183009023 -144.908558016 -40.962454645299999 -10.5735232616 -144.78933669599999 -41.537389175800001 -10.4306167232 -144.39079034100001 -42.5601194491 -10.2035803577 -143.76902278200001 -43.313132263 -10.0842675047 -143.42775941100001 -43.618202079 -10.048953688199999 -143.074320081 -43.859439460399997 -10.0332096692 -142.719834109 -44.044749188899999 -10.033209801 +-139.01363952400001 -36.955029742100002 -4.9999999989099999 -139.722611468 -36.584410284800001 -4.9999999991199999 -140.52442573100001 -36.390590208500001 -4.9999999993699999 -141.35154622499999 -36.411512782499997 -4.99999999964 -142.882073924 -36.841205477300001 -5.00000000027 -143.99717247699999 -37.850744652700001 -5.0000000009800001 -144.405253894 -38.452417794299997 -5.0000000013600001 -144.92043281700001 -39.7195173649 -5.0000000020600002 -144.908558005 -40.962454641100003 -5.0000000025600002 -144.78933668499999 -41.537389171699999 -5.0000000027400002 -144.390790329 -42.560119445200002 -5.0000000028900002 -143.769022769 -43.3131322594 -5.0000000027100002 -143.42775939800001 -43.618202075600003 -5.0000000025300002 -143.07432006799999 -43.859439457199997 -5.0000000023100002 -142.719834096 -44.044749185800001 -5.0000000020600002 + +0 6 +31.4575637262 6 + +16.3362817987 6 +20.420352248299999 3 +24.504422697999999 3 +28.588493147699999 3 +32.672563597299998 6 + +9 1 0 0 1 5 5 6 5 2 2 -143.27576328200001 -45.108207102400002 -5 1 -124.842492728 -54.744312990700003 -5 0.20000000000000001 -124.423022117 -31.4929894928 -5 0.20000000000000001 -142.85629267100001 -21.856883604499998 -5 0.20000000000000001 -161.709033836 -35.4721012141 -5 0.20000000000000001 +-143.27576328200001 -45.108207102400002 -2.99999999997 1 -124.842492728 -54.744312990700003 -2.99999999973 0.20000000000000001 -124.423022117 -31.4929894928 -2.99999999973 0.20000000000000001 -142.85629267100001 -21.856883604499998 -2.99999999973 0.20000000000000001 -161.709033836 -35.4721012141 -2.99999999973 0.20000000000000001 +-143.27576328200001 -45.108207102400002 -0.99999999993800004 1 -124.842492728 -54.744312990700003 -0.99999999945200002 0.20000000000000001 -124.423022117 -31.4929894928 -0.99999999945200002 0.20000000000000001 -142.85629267100001 -21.856883604499998 -0.99999999945200002 0.20000000000000001 -161.709033836 -35.4721012141 -0.99999999945200002 0.20000000000000001 +-143.27576328200001 -45.108207102400002 0.99999999542600004 1 -124.842492728 -54.744312990700003 0.99999999572200005 0.20000000000000001 -124.423022117 -31.4929894928 0.99999999572200005 0.20000000000000001 -142.85629267100001 -21.856883604499998 0.99999999572200005 0.20000000000000001 -161.709033836 -35.4721012141 0.99999999572200005 0.20000000000000001 +-143.27576328200001 -45.108207102400002 2.9999999977099998 1 -124.842492728 -54.744312990700003 2.9999999978599998 0.20000000000000001 -124.423022117 -31.4929894928 2.9999999978599998 0.20000000000000001 -142.85629267100001 -21.856883604499998 2.9999999978599998 0.20000000000000001 -161.709033836 -35.4721012141 2.9999999978599998 0.20000000000000001 +-143.27576328200001 -45.108207102400002 5 1 -124.842492728 -54.744312990700003 5 0.20000000000000001 -124.423022117 -31.4929894928 5 0.20000000000000001 -142.85629267100001 -21.856883604499998 5 0.20000000000000001 -161.709033836 -35.4721012141 5 0.20000000000000001 + +0 6 +10 6 + +0 5 +32.672563597299998 5 + +9 1 0 0 1 5 5 6 5 2 2 -143.27576328200001 -45.108207102400002 -5 1 -124.842492728 -54.744312990700003 -5 0.20000000000000001 -124.423022117 -31.4929894928 -5 0.20000000000000001 -142.85629267100001 -21.856883604499998 -5 0.20000000000000001 -161.709033836 -35.4721012141 -5 0.20000000000000001 +-143.27576328200001 -45.108207102400002 -2.99999999997 1 -124.842492728 -54.744312990700003 -2.99999999973 0.20000000000000001 -124.423022117 -31.4929894928 -2.99999999973 0.20000000000000001 -142.85629267100001 -21.856883604499998 -2.99999999973 0.20000000000000001 -161.709033836 -35.4721012141 -2.99999999973 0.20000000000000001 +-143.27576328200001 -45.108207102400002 -0.99999999993800004 1 -124.842492728 -54.744312990700003 -0.99999999945200002 0.20000000000000001 -124.423022117 -31.4929894928 -0.99999999945200002 0.20000000000000001 -142.85629267100001 -21.856883604499998 -0.99999999945200002 0.20000000000000001 -161.709033836 -35.4721012141 -0.99999999945200002 0.20000000000000001 +-143.27576328200001 -45.108207102400002 0.99999999542600004 1 -124.842492728 -54.744312990700003 0.99999999572200005 0.20000000000000001 -124.423022117 -31.4929894928 0.99999999572200005 0.20000000000000001 -142.85629267100001 -21.856883604499998 0.99999999572200005 0.20000000000000001 -161.709033836 -35.4721012141 0.99999999572200005 0.20000000000000001 +-143.27576328200001 -45.108207102400002 2.9999999977099998 1 -124.842492728 -54.744312990700003 2.9999999978599998 0.20000000000000001 -124.423022117 -31.4929894928 2.9999999978599998 0.20000000000000001 -142.85629267100001 -21.856883604499998 2.9999999978599998 0.20000000000000001 -161.709033836 -35.4721012141 2.9999999978599998 0.20000000000000001 +-143.27576328200001 -45.108207102400002 5 1 -124.842492728 -54.744312990700003 5 0.20000000000000001 -124.423022117 -31.4929894928 5 0.20000000000000001 -142.85629267100001 -21.856883604499998 5 0.20000000000000001 -161.709033836 -35.4721012141 5 0.20000000000000001 + +0 6 +10 6 + +0 5 +32.672563597299998 5 + +9 0 0 0 0 5 5 6 15 2 5 -142.719834096 -44.044749185800001 -5 -142.36534812400001 -44.230058914499999 -5 -141.96553614300001 -44.382588302099997 -5 -141.520259469 -44.4886871462 -5 -140.547068451 -44.569448767300003 -5 -139.47981105 -44.312976449300002 -5 -138.939674072 -44.0827255361 -5 -137.91229427900001 -43.383065015299998 -5 -137.165892238 -42.236838756600001 -5 -136.90475966299999 -41.558347201099998 -5 -136.712252345 -40.066517766799997 -5 -137.23297705600001 -38.564520221000002 -5 -137.68787925500001 -37.873412376200001 -5 -138.30466757900001 -37.325649199300003 -5 -139.01363952400001 -36.955029742100002 -5 +-142.719834096 -44.044749185800001 -2.99999999997 -142.36534812400001 -44.230058914499999 -2.99999999996 -141.96553614300001 -44.382588302099997 -2.99999999996 -141.520259469 -44.4886871462 -2.99999999995 -140.547068451 -44.569448767300003 -2.99999999993 -139.47981105 -44.312976449300002 -2.99999999991 -138.939674072 -44.0827255361 -2.9999999999 -137.91229427900001 -43.383065015299998 -2.99999999987 -137.165892238 -42.236838756600001 -2.99999999985 -136.90475966299999 -41.558347201099998 -2.99999999984 -136.712252345 -40.066517766799997 -2.99999999981 -137.23297705600001 -38.564520221000002 -2.9999999998 -137.68787925500001 -37.873412376200001 -2.99999999979 -138.30466757900001 -37.325649199300003 -2.99999999979 -139.01363952400001 -36.955029742100002 -2.99999999979 +-142.719834096 -44.044749185800001 -0.99999999993800004 -142.36534812400001 -44.230058914499999 -0.99999999992599997 -141.96553614300001 -44.382588302099997 -0.99999999991199995 -141.520259469 -44.4886871462 -0.99999999989699995 -140.547068451 -44.569448767300003 -0.99999999986300003 -139.47981105 -44.312976449300002 -0.99999999982099996 -138.939674072 -44.0827255361 -0.99999999979800003 -137.91229427900001 -43.383065015299998 -0.999999999749 -137.165892238 -42.236838756600001 -0.99999999969800002 -136.90475966299999 -41.558347201099998 -0.99999999967300002 -136.712252345 -40.066517766799997 -0.99999999962599995 -137.23297705600001 -38.564520221000002 -0.99999999959200003 -137.68787925500001 -37.873412376200001 -0.99999999957999997 -138.30466757900001 -37.325649199300003 -0.99999999957399999 -139.01363952400001 -36.955029742100002 -0.99999999957399999 +-142.719834096 -44.044749185800001 0.99999999542600004 -142.36534812400001 -44.230058914499999 0.99999999543399998 -141.96553614300001 -44.382588302099997 0.99999999544200002 -141.520259469 -44.4886871462 0.99999999545100005 -140.547068451 -44.569448767300003 0.99999999547200003 -139.47981105 -44.312976449300002 0.999999995498 -138.939674072 -44.0827255361 0.99999999551200003 -137.91229427900001 -43.383065015299998 0.99999999554100005 -137.165892238 -42.236838756600001 0.99999999557200003 -136.90475966299999 -41.558347201099998 0.99999999558700003 -136.712252345 -40.066517766799997 0.99999999561599995 -137.23297705600001 -38.564520221000002 0.99999999563700004 -137.68787925500001 -37.873412376200001 0.99999999564399999 -138.30466757900001 -37.325649199300003 0.99999999564800002 -139.01363952400001 -36.955029742100002 0.99999999564800002 +-142.719834096 -44.044749185800001 2.9999999977099998 -142.36534812400001 -44.230058914499999 2.9999999977199998 -141.96553614300001 -44.382588302099997 2.9999999977199998 -141.520259469 -44.4886871462 2.9999999977299998 -140.547068451 -44.569448767300003 2.9999999977399998 -139.47981105 -44.312976449300002 2.9999999977499998 -138.939674072 -44.0827255361 2.9999999977599998 -137.91229427900001 -43.383065015299998 2.9999999977699998 -137.165892238 -42.236838756600001 2.9999999977899998 -136.90475966299999 -41.558347201099998 2.9999999977899998 -136.712252345 -40.066517766799997 2.9999999978099998 -137.23297705600001 -38.564520221000002 2.9999999978199998 -137.68787925500001 -37.873412376200001 2.9999999978199998 -138.30466757900001 -37.325649199300003 2.9999999978199998 -139.01363952400001 -36.955029742100002 2.9999999978199998 +-142.719834096 -44.044749185800001 5 -142.36534812400001 -44.230058914499999 5 -141.96553614300001 -44.382588302099997 5 -141.520259469 -44.4886871462 5 -140.547068451 -44.569448767300003 5 -139.47981105 -44.312976449300002 5 -138.939674072 -44.0827255361 5 -137.91229427900001 -43.383065015299998 5 -137.165892238 -42.236838756600001 5 -136.90475966299999 -41.558347201099998 5 -136.712252345 -40.066517766799997 5 -137.23297705600001 -38.564520221000002 5 -137.68787925500001 -37.873412376200001 5 -138.30466757900001 -37.325649199300003 5 -139.01363952400001 -36.955029742100002 5 + +0 6 +10 6 + +0 6 +4.0840704496700004 3 +8.1681408993400009 3 +12.252211349 3 +16.3362817987 6 + +9 0 0 0 0 5 5 6 15 2 5 -139.01363952400001 -36.955029742100002 -5 -139.722611468 -36.584410284800001 -5 -140.52442573100001 -36.390590208500001 -5 -141.35154622499999 -36.411512782499997 -5 -142.882073924 -36.841205477300001 -5 -143.99717247699999 -37.850744652700001 -5 -144.405253894 -38.452417794299997 -5 -144.92043281700001 -39.7195173649 -5 -144.908558005 -40.962454641100003 -5 -144.78933668499999 -41.537389171699999 -5 -144.390790329 -42.560119445200002 -5 -143.769022769 -43.3131322594 -5 -143.42775939800001 -43.618202075600003 -5 -143.07432006799999 -43.859439457199997 -5 -142.719834096 -44.044749185800001 -5 +-139.01363952400001 -36.955029742100002 -2.99999999979 -139.722611468 -36.584410284800001 -2.99999999979 -140.52442573100001 -36.390590208500001 -2.99999999979 -141.35154622499999 -36.411512782499997 -2.9999999998 -142.882073924 -36.841205477300001 -2.99999999981 -143.99717247699999 -37.850744652700001 -2.99999999984 -144.405253894 -38.452417794299997 -2.99999999985 -144.92043281700001 -39.7195173649 -2.99999999987 -144.908558005 -40.962454641100003 -2.9999999999 -144.78933668499999 -41.537389171699999 -2.99999999991 -144.390790329 -42.560119445200002 -2.99999999993 -143.769022769 -43.3131322594 -2.99999999995 -143.42775939800001 -43.618202075600003 -2.99999999996 -143.07432006799999 -43.859439457199997 -2.99999999996 -142.719834096 -44.044749185800001 -2.99999999997 +-139.01363952400001 -36.955029742100002 -0.99999999957399999 -139.722611468 -36.584410284800001 -0.99999999957399999 -140.52442573100001 -36.390590208500001 -0.99999999957999997 -141.35154622499999 -36.411512782499997 -0.99999999959200003 -142.882073924 -36.841205477300001 -0.99999999962599995 -143.99717247699999 -37.850744652700001 -0.99999999967300002 -144.405253894 -38.452417794299997 -0.99999999969800002 -144.92043281700001 -39.7195173649 -0.999999999749 -144.908558005 -40.962454641100003 -0.99999999979800003 -144.78933668499999 -41.537389171699999 -0.99999999982099996 -144.390790329 -42.560119445200002 -0.99999999986300003 -143.769022769 -43.3131322594 -0.99999999989699995 -143.42775939800001 -43.618202075600003 -0.99999999991199995 -143.07432006799999 -43.859439457199997 -0.99999999992599997 -142.719834096 -44.044749185800001 -0.99999999993800004 +-139.01363952400001 -36.955029742100002 0.99999999564800002 -139.722611468 -36.584410284800001 0.99999999564800002 -140.52442573100001 -36.390590208500001 0.99999999564399999 -141.35154622499999 -36.411512782499997 0.99999999563700004 -142.882073924 -36.841205477300001 0.99999999561599995 -143.99717247699999 -37.850744652700001 0.99999999558700003 -144.405253894 -38.452417794299997 0.99999999557200003 -144.92043281700001 -39.7195173649 0.99999999554100005 -144.908558005 -40.962454641100003 0.99999999551200003 -144.78933668499999 -41.537389171699999 0.999999995498 -144.390790329 -42.560119445200002 0.99999999547200003 -143.769022769 -43.3131322594 0.99999999545100005 -143.42775939800001 -43.618202075600003 0.99999999544200002 -143.07432006799999 -43.859439457199997 0.99999999543399998 -142.719834096 -44.044749185800001 0.99999999542600004 +-139.01363952400001 -36.955029742100002 2.9999999978199998 -139.722611468 -36.584410284800001 2.9999999978199998 -140.52442573100001 -36.390590208500001 2.9999999978199998 -141.35154622499999 -36.411512782499997 2.9999999978199998 -142.882073924 -36.841205477300001 2.9999999978099998 -143.99717247699999 -37.850744652700001 2.9999999977899998 -144.405253894 -38.452417794299997 2.9999999977899998 -144.92043281700001 -39.7195173649 2.9999999977699998 -144.908558005 -40.962454641100003 2.9999999977599998 -144.78933668499999 -41.537389171699999 2.9999999977499998 -144.390790329 -42.560119445200002 2.9999999977399998 -143.769022769 -43.3131322594 2.9999999977299998 -143.42775939800001 -43.618202075600003 2.9999999977199998 -143.07432006799999 -43.859439457199997 2.9999999977199998 -142.719834096 -44.044749185800001 2.9999999977099998 +-139.01363952400001 -36.955029742100002 5 -139.722611468 -36.584410284800001 5 -140.52442573100001 -36.390590208500001 5 -141.35154622499999 -36.411512782499997 5 -142.882073924 -36.841205477300001 5 -143.99717247699999 -37.850744652700001 5 -144.405253894 -38.452417794299997 5 -144.92043281700001 -39.7195173649 5 -144.908558005 -40.962454641100003 5 -144.78933668499999 -41.537389171699999 5 -144.390790329 -42.560119445200002 5 -143.769022769 -43.3131322594 5 -143.42775939800001 -43.618202075600003 5 -143.07432006799999 -43.859439457199997 5 -142.719834096 -44.044749185800001 5 + +0 6 +10 6 + +16.3362817987 6 +20.420352248299999 3 +24.504422697999999 3 +28.588493147699999 3 +32.672563597299998 6 + +1 -139.00727934599999 -42.051011393300001 5 0 -0 1 0.49823651340429953 0.86704116206252124 0 -0.86704116206252124 0.49823651340429953 0 +9 1 0 0 1 5 5 6 5 2 2 -88.468282488400007 -112.948707755 -19.800000000000001 1 -70.035011934600007 -122.584813643 -19.800000000000001 0.20000000000000001 -79.2516472115 -117.766760699 -40.600000000000001 0.20000000000000001 -97.6849177653 -108.130654811 -40.600000000000001 0.20000000000000001 -106.901553042 -103.312601867 -19.800000000000001 0.20000000000000001 +-86.615185202299998 -109.403848036 -19.800000000000001 1 -68.181914656999993 -119.039953926 -19.800000000000001 0.20000000000000001 -77.398549927600001 -114.221900981 -40.600000000000001 0.20000000000000001 -95.831820483399994 -104.585795093 -40.600000000000001 0.20000000000000001 -105.048455752 -99.767742149 -19.800000000000001 0.20000000000000001 +-84.762087916200002 -105.858988318 -19.800000000000001 1 -66.328817379399993 -115.495094208 -19.800000000000001 0.20000000000000001 -75.545452643700003 -110.677041264 -40.600000000000001 0.20000000000000001 -93.978723201600005 -101.04093537599999 -40.600000000000001 0.20000000000000001 -103.195358461 -96.222882431399995 -19.800000000000001 0.20000000000000001 +-82.908990622900006 -102.31412858900001 -19.800000000000001 1 -64.475720071599994 -111.950234486 -19.800000000000001 0.20000000000000001 -73.692355340000006 -107.132181534 -40.600000000000001 0.20000000000000001 -92.125625906799996 -97.496075645399998 -40.600000000000001 0.20000000000000001 -101.342261158 -92.678022692300004 -19.800000000000001 0.20000000000000001 +-81.055893340099999 -98.769268867400001 -19.800000000000001 1 -62.622622787600001 -108.40537476 -19.800000000000001 0.20000000000000001 -71.839258060199995 -103.587321812 -40.600000000000001 0.20000000000000001 -90.272528620499997 -93.951215923299998 -40.600000000000001 0.20000000000000001 -99.4891638844 -89.133162974699999 -19.800000000000001 0.20000000000000001 +-79.202796057300006 -95.224409145500005 -19.800000000000001 1 -60.769525503499999 -104.860515034 -19.800000000000001 0.20000000000000001 -69.986160780399999 -100.04246209 -40.600000000000001 0.20000000000000001 -88.419431334199999 -90.406356201299999 -40.600000000000001 0.20000000000000001 -97.636066611100006 -85.588303257199996 -19.800000000000001 0.20000000000000001 + +0 6 +20 6 + +0 5 +32.672563597299998 5 + +1 -86.371077962200005 -114.045034358 -24.486811482299998 -0.46327432155297421 -0.88621493047095057 5.4331539267596975e-15 -0.035330492216491628 0.018469232743613478 0.99920500587297045 -0.88551039480594018 0.46290602118813573 -0.039866730972044094 +9 1 0 0 1 5 5 6 5 2 2 -88.468282488400007 -112.948707755 -19.800000000000001 1 -70.035011934600007 -122.584813643 -19.800000000000001 0.20000000000000001 -79.2516472115 -117.766760699 -40.600000000000001 0.20000000000000001 -97.6849177653 -108.130654811 -40.600000000000001 0.20000000000000001 -106.901553042 -103.312601867 -19.800000000000001 0.20000000000000001 +-86.615185202299998 -109.403848036 -19.800000000000001 1 -68.181914656999993 -119.039953926 -19.800000000000001 0.20000000000000001 -77.398549927600001 -114.221900981 -40.600000000000001 0.20000000000000001 -95.831820483399994 -104.585795093 -40.600000000000001 0.20000000000000001 -105.048455752 -99.767742149 -19.800000000000001 0.20000000000000001 +-84.762087916200002 -105.858988318 -19.800000000000001 1 -66.328817379399993 -115.495094208 -19.800000000000001 0.20000000000000001 -75.545452643700003 -110.677041264 -40.600000000000001 0.20000000000000001 -93.978723201600005 -101.04093537599999 -40.600000000000001 0.20000000000000001 -103.195358461 -96.222882431399995 -19.800000000000001 0.20000000000000001 +-82.908990622900006 -102.31412858900001 -19.800000000000001 1 -64.475720071599994 -111.950234486 -19.800000000000001 0.20000000000000001 -73.692355340000006 -107.132181534 -40.600000000000001 0.20000000000000001 -92.125625906799996 -97.496075645399998 -40.600000000000001 0.20000000000000001 -101.342261158 -92.678022692300004 -19.800000000000001 0.20000000000000001 +-81.055893340099999 -98.769268867400001 -19.800000000000001 1 -62.622622787600001 -108.40537476 -19.800000000000001 0.20000000000000001 -71.839258060199995 -103.587321812 -40.600000000000001 0.20000000000000001 -90.272528620499997 -93.951215923299998 -40.600000000000001 0.20000000000000001 -99.4891638844 -89.133162974699999 -19.800000000000001 0.20000000000000001 +-79.202796057300006 -95.224409145500005 -19.800000000000001 1 -60.769525503499999 -104.860515034 -19.800000000000001 0.20000000000000001 -69.986160780399999 -100.04246209 -40.600000000000001 0.20000000000000001 -88.419431334199999 -90.406356201299999 -40.600000000000001 0.20000000000000001 -97.636066611100006 -85.588303257199996 -19.800000000000001 0.20000000000000001 + +0 6 +20 6 + +0 5 +32.672563597299998 5 + +9 0 0 0 0 5 5 6 15 2 5 -88.468282488400007 -112.948707755 -21 -88.113796516199997 -113.13401748299999 -21 -87.737170860700004 -113.330900868 -21.050048803599999 -87.3439008382 -113.53648519799999 -21.162307672899999 -86.546421549100003 -113.95337241599999 -21.541589927099999 -85.813519670900007 -114.336501394 -22.263312472900001 -85.483840522199998 -114.50884320199999 -22.7175958618 -84.9642132197 -114.78048158 -23.813604138199999 -84.848601660100002 -114.84091823599999 -25.175195861799999 -84.922076081399993 -114.80250902900001 -25.897461225000001 -85.383371698700003 -114.5613639 -27.308726440400001 -86.408997904000003 -114.025211474 -28.398580703899999 -87.050009250299993 -113.69011883899999 -28.800306286600001 -87.759310544000002 -113.319327212 -29 -88.468282488400007 -112.948707755 -29 +-86.615185202299998 -109.403848036 -21 -86.260699230300006 -109.589157765 -21 -85.884073575100004 -109.78604115 -21.050048803599999 -85.490803552900005 -109.99162548 -21.162307672899999 -84.693324264300003 -110.40851269700001 -21.541589927 -83.960422386499999 -110.79164167499999 -22.263312472700001 -83.630743237999994 -110.963983484 -22.7175958616 -83.111115935800001 -111.235621862 -23.813604137999999 -82.995504376499994 -111.296058518 -25.175195861700001 -83.068978797900002 -111.25764931099999 -25.897461224899999 -83.530274415400001 -111.01650418200001 -27.308726440499999 -84.555900620599999 -110.480351756 -28.398580703899999 -85.196911966900004 -110.145259121 -28.800306286600001 -85.906213260300007 -109.77446749400001 -29 -86.615185204400007 -109.403848037 -29 +-84.762087916200002 -105.858988318 -21 -84.407601944500001 -106.044298047 -21 -84.030976289500003 -106.241181431 -21.050048803599999 -83.637706267499993 -106.44676576099999 -21.162307672800001 -82.840226979299999 -106.86365297899999 -21.541589926899999 -82.107325101800001 -107.24678195600001 -22.263312472599999 -81.777645953399997 -107.41912376499999 -22.7175958614 -81.258018651399993 -107.690762143 -23.813604137799999 -81.142407092200003 -107.75119879899999 -25.175195861500001 -81.215881513599996 -107.71278959199999 -25.897461224800001 -81.677177131400001 -107.471644463 -27.308726440499999 -82.702803336800002 -106.93549203800001 -28.398580704 -83.343814683100007 -106.600399403 -28.8003062867 -84.053115976499996 -106.22960777599999 -29 -84.762087920499994 -105.85898831900001 -29 +-82.908990622900006 -102.31412858900001 -21 -82.554504650799998 -102.499438318 -21 -82.177878995300006 -102.696321703 -21.050048803599999 -81.784608972800001 -102.901906033 -21.162307672899999 -80.987129683700005 -103.318793251 -21.541589927099999 -80.254227805200003 -103.701922229 -22.263312472999999 -79.924548656400006 -103.87426403800001 -22.717595861900001 -79.404921353600002 -104.14590241499999 -23.813604138399999 -79.289309793699999 -104.206339071 -25.175195861900001 -79.362784214900003 -104.167929864 -25.897461225099999 -79.824079831999995 -103.926784735 -27.308726440499999 -80.849706037100006 -103.390632309 -28.398580703899999 -81.490717383399996 -103.055539673 -28.800306286600001 -82.200018676900001 -102.684748047 -29 -82.908990621100003 -102.31412858900001 -29 +-81.055893340099999 -98.769268867400001 -21 -80.701407368000005 -98.954578596199994 -21 -80.3247817126 -99.151461980999997 -21.050048803599999 -79.931511690199997 -99.357046311399998 -21.162307672899999 -79.134032401200002 -99.773933529399997 -21.541589927099999 -78.401130523000006 -100.157062508 -22.263312472900001 -78.071451374299997 -100.32940431599999 -22.717595861900001 -77.551824071799999 -100.601042694 -23.813604138300001 -77.436212512099999 -100.66147934999999 -25.175195861900001 -77.509686933300003 -100.62307014300001 -25.897461225000001 -77.970982550499997 -100.381925014 -27.308726440499999 -78.996608755500006 -99.845772587699997 -28.398580703899999 -79.637620101600007 -99.510679952000004 -28.800306286600001 -80.346921395099997 -99.139888325000001 -29 -81.055893339199997 -98.769268867400001 -29 +-79.202796057300006 -95.224409145500005 -21 -78.848310085199998 -95.409718874199996 -21 -78.471684429700005 -95.606602258899997 -21.050048803599999 -78.078414407300002 -95.812186589099994 -21.162307672899999 -77.280935118399995 -96.229073806900004 -21.541589927099999 -76.548033240199999 -96.612202784900006 -22.263312472900001 -76.218354091500004 -96.784544593700005 -22.7175958618 -75.698726789099993 -97.056182971599995 -23.813604138199999 -75.583115229499995 -97.116619627600002 -25.175195861799999 -75.656589650699999 -97.078210420600001 -25.897461225000001 -76.117885267999995 -96.837065291000002 -27.308726440400001 -77.143511473199993 -96.300912865300006 -28.398580703899999 -77.784522819499998 -95.9658202297 -28.800306286600001 -78.493824113100004 -95.595028602900001 -29 -79.202796057300006 -95.224409145400003 -29 + +0 6 +20 6 + +0 6 +4.0840704496700004 3 +8.1681408993400009 3 +12.252211349 3 +16.3362817987 6 + +9 0 0 0 0 5 5 6 15 2 5 -88.468282488400007 -112.948707755 -29 -89.177254432699996 -112.578088298 -29 -89.886555726400005 -112.20729667099999 -28.800306286600001 -90.527567072799997 -111.872204036 -28.398580703899999 -91.553193278199998 -111.33605161 -27.308726440400001 -92.014488895599996 -111.094906481 -25.897461225000001 -92.087963317000003 -111.05649727399999 -25.175195861799999 -91.972351757400006 -111.11693393 -23.813604138199999 -91.452724454800006 -111.38857230799999 -22.7175958618 -91.123045305999995 -111.56091411600001 -22.263312472900001 -90.390143427699996 -111.94404309399999 -21.541589927099999 -89.592664138499998 -112.36093031199999 -21.162307672899999 -89.199394116099995 -112.566514642 -21.050048803599999 -88.822768460600003 -112.763398026 -21 -88.468282488400007 -112.948707755 -21 +-86.615185204400007 -109.403848037 -29 -87.324157148500007 -109.03322858 -29 -88.033458441899995 -108.662436953 -28.800306286600001 -88.674469787999996 -108.327344318 -28.398580704 -89.700095992800001 -107.791191893 -27.308726440600001 -90.161391609899994 -107.550046763 -25.897461225200001 -90.234866030999996 -107.511637556 -25.175195861999999 -90.119254471100007 -107.572074212 -23.813604138300001 -89.599627168400005 -107.84371259 -22.7175958618 -89.269948019599994 -108.01605439799999 -22.263312472900001 -88.537046141199994 -108.399183376 -21.541589927099999 -87.739566852199999 -108.81607059300001 -21.162307672899999 -87.346296829799996 -109.021654923 -21.050048803599999 -86.969671174400005 -109.21853830800001 -21 -86.615185202299998 -109.403848036 -21 +-84.762087920499994 -105.85898831900001 -29 -85.471059864500006 -105.488368862 -29 -86.180361157600004 -105.117577236 -28.8003062867 -86.821372503500001 -104.78248460099999 -28.398580704099999 -87.846998707899999 -104.24633217500001 -27.308726440800001 -88.308294324399995 -104.005187046 -25.897461225400001 -88.381768745399995 -103.966777839 -25.175195862199999 -88.266157185200001 -104.02721449400001 -23.813604138399999 -87.746529882199994 -104.298852872 -22.717595861900001 -87.416850733299995 -104.47119468 -22.263312472900001 -86.683948854799993 -104.854323658 -21.541589927 -85.886469565799999 -105.27121087499999 -21.162307672899999 -85.493199543499998 -105.476795205 -21.050048803599999 -85.116573888199994 -105.67367858999999 -21 -84.762087916200002 -105.858988318 -21 +-82.908990621100003 -102.31412858900001 -29 -83.617962565300004 -101.943509132 -29 -84.327263858799995 -101.572717505 -28.800306286600001 -84.968275204899996 -101.23762487 -28.398580703899999 -85.993901409900005 -100.701472444 -27.308726440499999 -86.455197026999997 -100.460327314 -25.897461225000001 -86.528671448200001 -100.421918107 -25.175195861799999 -86.413059888600003 -100.482354763 -23.813604138100001 -85.893432586200007 -100.753993141 -22.717595861700001 -85.563753437700001 -100.92633494899999 -22.263312472799999 -84.830851559899997 -101.309463927 -21.541589927 -84.033372271600001 -101.726351145 -21.162307672800001 -83.640102249600005 -101.93193547600001 -21.050048803599999 -83.263476594599993 -102.128818861 -21 -82.908990622900006 -102.31412858900001 -21 +-81.055893339199997 -98.769268867400001 -29 -81.764865283299997 -98.398649409800001 -29 -82.474166576800002 -98.027857782799998 -28.800306286600001 -83.115177922900003 -97.692765147100005 -28.398580703899999 -84.140804127899997 -97.156612721100004 -27.308726440499999 -84.602099745000004 -96.915467591300001 -25.897461225000001 -84.675574166299995 -96.8770583843 -25.175195861799999 -84.559962606699997 -96.937495040300007 -23.813604138199999 -84.040335304400003 -97.209133418299999 -22.717595861700001 -83.710656155799995 -97.381475227099997 -22.263312472799999 -82.977754277900004 -97.764604205400005 -21.541589927 -82.180274989300003 -98.181491423400004 -21.162307672899999 -81.787004967200005 -98.387075753800005 -21.050048803599999 -81.410379312000003 -98.583959138599994 -21 -81.055893340099999 -98.769268867400001 -21 +-79.202796057300006 -95.224409145500005 -29 -79.911768001599995 -94.853789688000006 -29 -80.6210692951 -94.482998061200007 -28.800306286600001 -81.262080641400004 -94.147905425600001 -28.398580703899999 -82.287706846600003 -93.611752999800004 -27.308726440400001 -82.749002463799997 -93.370607870200004 -25.897461225000001 -82.822476885100002 -93.332198663200003 -25.175195861799999 -82.706865325500004 -93.392635319199997 -23.813604138199999 -82.187238023000006 -93.664273697100001 -22.7175958618 -81.857558874399999 -93.836615505799998 -22.263312472900001 -81.124656996200002 -94.219744483900001 -21.541589927099999 -80.327177707299995 -94.636631701799999 -21.162307672899999 -79.933907684900007 -94.842216031999996 -21.050048803599999 -79.557282029500001 -95.039099416699997 -21 -79.202796057300006 -95.224409145500005 -21 + +0 6 +20 6 + +16.3362817987 6 +20.420352248299999 3 +24.504422697999999 3 +28.588493147699999 3 +32.672563597299998 6 + +9 1 0 0 0 5 5 6 6 2 2 -79.202796057300006 -95.224409145500005 -19.800000000000001 1 -60.769525503499999 -104.860515034 -19.800000000000001 0.20000000000000001 -69.986160780399999 -100.04246209 -40.600000000000001 0.20000000000000001 -88.419431334199999 -90.406356201299999 -40.600000000000001 0.20000000000000001 -97.636066611100006 -85.588303257199996 -19.800000000000001 0.20000000000000001 -79.202796057300006 -95.224409145500005 -19.800000000000001 1 +-77.045920346299994 -91.098440211600007 -19.799999999800001 1 -58.612649796299998 -100.734546099 -19.799999999400001 0.20000000000000001 -64.798000290399997 -90.117834118399998 -40.5999999991 0.20000000000000001 -83.231270839499999 -80.481728227000005 -40.5999999991 0.20000000000000001 -95.479190896700004 -81.462334328699995 -19.799999998299999 0.20000000000000001 -77.045920346299994 -91.098440211600007 -19.799999999800001 1 +-74.889046915099996 -86.972472702499999 -17.969279505199999 1 -56.455773198599999 -96.608578233599999 -17.969279504199999 0.20000000000000001 -59.609839444199999 -80.1932018726 -36.196371770799999 0.20000000000000001 -78.043106782600006 -70.557094553200002 -36.196371770799999 0.20000000000000001 -93.322316963399999 -77.336366825200002 -17.9692798582 0.20000000000000001 -74.889046915099996 -86.972472702499999 -17.969279505199999 1 +-73.194461903299995 -83.730842644299997 -14.311438576800001 1 -54.761191138599997 -93.366949245000001 -14.311438644000001 0.20000000000000001 -55.533681898700003 -72.395773608300004 -27.3977851852 0.20000000000000001 -73.966951743300001 -62.759662907900001 -27.3977851852 0.20000000000000001 -91.627724408800006 -74.094733371999993 -14.311438644000001 0.20000000000000001 -73.194460763400002 -83.730842644299997 -14.311438576800001 1 +-72.346336096599998 -82.108428174699995 -9.6557204015700009 1 -53.913065544200002 -91.744534063000003 -9.6557204017499991 0.20000000000000001 -53.493594931799997 -68.493210567899993 -16.1988950193 0.20000000000000001 -71.926865487200004 -58.857104677999999 -16.1988950193 0.20000000000000001 -90.779606651400002 -72.472322286400001 -9.6557204017499991 0.20000000000000001 -72.346336096599998 -82.108428174699995 -9.6557204015700009 1 +-72.3463360983 -82.108428174500006 -5 1 -53.9130655445 -91.7445340628 -5 0.20000000000000001 -53.493594933099999 -68.493210564799995 -5 0.20000000000000001 -71.926865486899999 -58.857104676500001 -5 0.20000000000000001 -90.7796066521 -72.472322286199997 -5 0.20000000000000001 -72.3463360983 -82.108428174500006 -5 1 + +0 6 +31.457570005800001 6 + +0 6 +32.672563597299998 6 + +9 1 0 0 0 5 5 6 6 2 2 -79.202796057300006 -95.224409145500005 -19.800000000000001 1 -60.769525503499999 -104.860515034 -19.800000000000001 0.20000000000000001 -69.986160780399999 -100.04246209 -40.600000000000001 0.20000000000000001 -88.419431334199999 -90.406356201299999 -40.600000000000001 0.20000000000000001 -97.636066611100006 -85.588303257199996 -19.800000000000001 0.20000000000000001 -79.202796057300006 -95.224409145500005 -19.800000000000001 1 +-77.045920346299994 -91.098440211600007 -19.799999999800001 1 -58.612649796299998 -100.734546099 -19.799999999400001 0.20000000000000001 -64.798000290399997 -90.117834118399998 -40.5999999991 0.20000000000000001 -83.231270839499999 -80.481728227000005 -40.5999999991 0.20000000000000001 -95.479190896700004 -81.462334328699995 -19.799999998299999 0.20000000000000001 -77.045920346299994 -91.098440211600007 -19.799999999800001 1 +-74.889046915099996 -86.972472702499999 -17.969279505199999 1 -56.455773198599999 -96.608578233599999 -17.969279504199999 0.20000000000000001 -59.609839444199999 -80.1932018726 -36.196371770799999 0.20000000000000001 -78.043106782600006 -70.557094553200002 -36.196371770799999 0.20000000000000001 -93.322316963399999 -77.336366825200002 -17.9692798582 0.20000000000000001 -74.889046915099996 -86.972472702499999 -17.969279505199999 1 +-73.194461903299995 -83.730842644299997 -14.311438576800001 1 -54.761191138599997 -93.366949245000001 -14.311438644000001 0.20000000000000001 -55.533681898700003 -72.395773608300004 -27.3977851852 0.20000000000000001 -73.966951743300001 -62.759662907900001 -27.3977851852 0.20000000000000001 -91.627724408800006 -74.094733371999993 -14.311438644000001 0.20000000000000001 -73.194460763400002 -83.730842644299997 -14.311438576800001 1 +-72.346336096599998 -82.108428174699995 -9.6557204015700009 1 -53.913065544200002 -91.744534063000003 -9.6557204017499991 0.20000000000000001 -53.493594931799997 -68.493210567899993 -16.1988950193 0.20000000000000001 -71.926865487200004 -58.857104677999999 -16.1988950193 0.20000000000000001 -90.779606651400002 -72.472322286400001 -9.6557204017499991 0.20000000000000001 -72.346336096599998 -82.108428174699995 -9.6557204015700009 1 +-72.3463360983 -82.108428174500006 -5 1 -53.9130655445 -91.7445340628 -5 0.20000000000000001 -53.493594933099999 -68.493210564799995 -5 0.20000000000000001 -71.926865486899999 -58.857104676500001 -5 0.20000000000000001 -90.7796066521 -72.472322286199997 -5 0.20000000000000001 -72.3463360983 -82.108428174500006 -5 1 + +0 6 +31.457570005800001 6 + +0 6 +32.672563597299998 6 + +9 0 0 0 0 5 5 6 15 2 5 -79.202796057300006 -95.224409145400003 -21 -78.848310085099996 -95.409718874000006 -21 -78.471684429600003 -95.606602258699994 -21.050048803599999 -78.0784144072 -95.812186588800003 -21.162307672899999 -77.280935118100004 -96.229073806499997 -21.541589927099999 -76.548033239899993 -96.612202784399997 -22.263312472900001 -76.218354091199998 -96.784544593099994 -22.7175958618 -75.6987267887 -97.056182970899997 -23.813604138199999 -75.583115229100002 -97.116619626800002 -25.175195861799999 -75.656589650300006 -97.078210419900003 -25.897461224899999 -76.117885267700004 -96.837065290400005 -27.308726440400001 -77.143511473000004 -96.300912864899999 -28.398580703899999 -77.784522819299994 -95.965820229399995 -28.800306286600001 -78.493824113000002 -95.595028602799999 -29 -79.202796057399993 -95.224409145600006 -29 +-76.871038546500003 -90.763902217999998 -20.9999999998 -76.5165525874 -90.949211971500006 -20.9999999998 -76.1326330885 -91.132142687499993 -21.050048803399999 -75.723003045499993 -91.306431316599998 -21.162307672699999 -74.870249125300006 -91.617581606200005 -21.5415899268 -74.032167122000004 -91.799507553799998 -22.263312472599999 -73.636283051199996 -91.845203468600005 -22.7175958614 -72.956929147500006 -91.811294803899997 -23.813604137799999 -72.642886230900004 -91.492144629600006 -25.175195861399999 -72.611101425399994 -91.252381076000006 -25.897461224499999 -72.866726537700004 -90.617801077099998 -27.308726439899999 -73.733523012999996 -89.777817268299998 -28.398580703299999 -74.315988947500003 -89.330730905799996 -28.8003062859 -74.996187907000007 -88.904268326700006 -28.9999999992 -75.705159844299999 -88.533648856300005 -28.9999999992 +-74.539541066400005 -86.303889776899993 -19.020842720800001 -74.185054977600004 -86.489199495600005 -19.020842742799999 -73.793838265000005 -86.658171306599996 -19.064700659900002 -73.367840823600005 -86.8011503213 -19.1630734154 -72.459787557699997 -87.006516747099994 -19.495439456100002 -71.516478659100002 -86.987150403800001 -20.127886747400002 -71.054360261499994 -86.906144238500005 -20.525976412399999 -70.215208832299993 -86.566552939999994 -21.4864111511 -69.702646414300006 -85.867647417399994 -22.679577272500001 -69.565555599700005 -85.426440106800001 -23.312500152599998 -69.615418750200007 -84.398250506599993 -24.5491953115 -70.323314864400004 -83.254300345800004 -25.504237342500002 -70.847209374599998 -82.695170499699998 -25.8562705081 -71.498293120200003 -82.213012242900007 -26.031262623899998 -72.207265125999996 -81.842392791199998 -26.031262617300001 +-72.707299816599999 -82.798931972899993 -15.0658637112 -72.352813836199999 -82.984241741899993 -15.065863677699999 -71.955869934199995 -83.142257641 -15.097358870900001 -71.517026338999997 -83.260662610699995 -15.168002256299999 -70.565570392500007 -83.3830021319 -15.406680848600001 -69.53967188 -83.205646817100003 -15.8608538515 -69.025567973799994 -83.025195555500005 -16.1467300057 -68.060995773100004 -82.445682098800006 -16.8364374943 -67.392620715999996 -81.448716700999995 -17.6932741858 -67.1728780503 -80.849401524599998 -18.147788913900001 -67.061244238499995 -79.512278116600001 -19.035884729900001 -67.644423731000003 -78.129752697200004 -19.721719717199999 -68.1223470427 -77.482682832999998 -19.974521836800001 -68.7505788271 -76.956810458199996 -20.1001872139 -69.459550572699996 -76.586190903299993 -20.1001872304 +-71.7904069107 -81.044970258099994 -10.0332116959 -71.435920938500004 -81.230279986699998 -10.033211723599999 -71.036108957500005 -81.382809374399997 -10.0489558848 -70.590832283599994 -81.488908218500001 -10.084269814300001 -69.6176412656 -81.569669839699998 -10.2035828059 -68.550383864699995 -81.313197521899994 -10.430619137000001 -68.010246887299999 -81.082946608699999 -10.573525613899999 -66.982867094200003 -80.383286088099993 -10.918303079899999 -66.236465052699998 -79.2370598296 -11.3466266153 -65.975332477999999 -78.558568274199999 -11.5738336794 -65.782825160200005 -77.066738840100001 -12.0177833036 -66.303549871100003 -75.564741294399994 -12.360624893600001 -66.758452070700002 -74.873633449600007 -12.486997973799999 -67.375240394800002 -74.3258702726 -12.549816742899999 -68.084212339199993 -73.955250815400007 -12.549816721199999 +-71.790406912500004 -81.044970257900005 -4.99999999984 -71.435920940299994 -81.230279986499994 -4.99999999989 -71.036108959299995 -81.382809374199994 -4.99999999994 -70.590832285299996 -81.488908218199995 -5 -69.6176412672 -81.569669839400007 -5.00000000012 -68.550383866199994 -81.313197521399999 -5.00000000022 -68.010246888699996 -81.082946608100002 -5.00000000026 -66.982867095499998 -80.383286087399995 -5.00000000031 -66.236465053900005 -79.237059828699998 -5.00000000028 -65.975332479100004 -78.558568273199995 -5.00000000025 -65.782825161199995 -77.066738838899994 -5.00000000016 -66.303549872000005 -75.564741293099999 -5.00000000004 -66.758452071600004 -74.873633448299998 -4.99999999998 -67.375240395700004 -74.325870271400007 -4.99999999993 -68.084212339999993 -73.955250814099998 -4.99999999989 + +0 6 +31.457570005800001 6 + +0 6 +4.0840704496700004 3 +8.16814089933 3 +12.252211349 3 +16.3362817987 6 + +9 0 0 0 0 5 5 6 15 2 5 -79.202796057399993 -95.224409145600006 -29 -79.911768001699997 -94.853789688299997 -29 -80.621069295400005 -94.482998061700002 -28.800306286600001 -81.262080641799997 -94.147905426299999 -28.398580703899999 -82.287706847099997 -93.611753000899995 -27.308726440400001 -82.749002464499995 -93.370607871399997 -25.897461224899999 -82.8224768858 -93.332198664399996 -25.175195861799999 -82.706865326100001 -93.392635320400004 -23.813604138199999 -82.187238023500001 -93.664273698000002 -22.7175958618 -81.857558874800006 -93.836615506599998 -22.263312472900001 -81.124656996499994 -94.219744484399996 -21.541589927099999 -80.327177707399997 -94.636631702000003 -21.162307672899999 -79.933907684900007 -94.842216032099998 -21.050048803599999 -79.557282029500001 -95.039099416799999 -21 -79.202796057300006 -95.224409145400003 -21 +-75.705159844299999 -88.533648856300005 -28.9999999992 -76.414131781500004 -88.163029386000005 -28.9999999992 -77.152535395000001 -87.847908685700006 -28.800306285800001 -77.852092138700002 -87.624809750300003 -28.398580703099999 -79.036548044100002 -87.392488651899995 -27.308726439800001 -79.703514137799999 -87.544778337300002 -25.897461224299999 -79.882247772499994 -87.707723451700005 -25.175195861199999 -79.965067549300002 -88.147746898299999 -23.813604137599999 -79.605166844699994 -88.724932312099995 -22.7175958612 -79.341692622300002 -89.023920022300004 -22.263312472399999 -78.713970889600006 -89.608252068799999 -21.541589926699999 -77.971766271600004 -90.1308762898 -21.162307672600001 -77.594856293399999 -90.3677563655 -21.050048803300001 -77.225524506499994 -90.578592466200007 -20.9999999998 -76.871038546600005 -90.763902217899997 -20.9999999998 +-72.207265125999996 -81.842392791199998 -26.031262617300001 -72.916237131800003 -81.471773339600006 -26.031262610599999 -73.683756098299995 -81.212348353199999 -25.856270481900001 -74.441884357299998 -81.101292968099997 -25.504237292599999 -75.785240717700006 -81.172938415399997 -24.549195187799999 -76.657968815999993 -81.718837910999994 -23.312499940399999 -76.942008497700002 -82.083226866299995 -22.6795770208 -77.223347884899994 -82.903005750099993 -21.486410851599999 -77.023244782099994 -83.785873750799993 -20.5259761252 -76.826004894799993 -84.211563486499998 -20.127886482099999 -76.303509984499996 -84.997187679500001 -19.495439253699999 -75.616604492099995 -85.625595578599999 -19.1630732972 -75.256061770900004 -85.893785174200005 -19.064700584200001 -74.894027041800001 -86.118580087799998 -19.020842706900002 -74.5395410486 -86.303889786300005 -19.020842720800001 +-69.459550572699996 -76.586190903299993 -20.1001872304 -70.168522318300006 -76.215571348300003 -20.100187247000001 -70.958892724699993 -75.999860277799996 -19.974521902799999 -71.7629917127 -75.976744609799994 -19.721719820099999 -73.231063925200004 -76.286964573299997 -19.035884919800001 -74.265288527600006 -77.141797261299999 -18.1477892029 -74.631979904399998 -77.664293901999997 -17.693274524500001 -75.069131721000005 -78.782132622800006 -16.836437914299999 -74.994449392999996 -79.904923181000001 -16.1467304486 -74.849195068499995 -80.430058280699996 -15.8608542852 -74.409290002600002 -81.373671997100004 -15.4066812222 -73.765787640200003 -82.085107321500004 -15.168002506600001 -73.418091347499995 -82.377871192800001 -15.0973590484 -73.061784117100004 -82.613622222100005 -15.065863779500001 -72.707298347299997 -82.798932048400005 -15.065863738399999 +-68.084212339199993 -73.955250815400007 -12.549816721199999 -68.793184283599999 -73.584631358099998 -12.549816699400001 -69.594998546900001 -73.390811281699996 -12.486997886799999 -70.422119039999998 -73.411733855600005 -12.360624749099999 -71.952646739800002 -73.841426550400001 -12.017782997699999 -73.067745292200001 -74.850965725500004 -11.5738331628 -73.475826709499998 -75.452638867000005 -11.3466259901 -73.991005631700006 -76.719738437299995 -10.918302282799999 -73.979130819700003 -77.962675713400003 -10.573524777699999 -73.859909499699995 -78.537610243900005 -10.430618326799999 -73.461363144100005 -79.560340517399993 -10.203582125000001 -72.839595583900007 -80.313353331599998 -10.0842693596 -72.498332212899996 -80.618423147800002 -10.048955553400001 -72.144892882999997 -80.859660529400003 -10.033211509299999 -71.7904069107 -81.044970258099994 -10.033211587 +-68.084212339999993 -73.955250814099998 -4.99999999989 -68.793184284399999 -73.584631356900005 -4.99999999985 -69.594998547700001 -73.390811280600005 -4.99999999983 -70.422119040799998 -73.411733854600001 -4.99999999981 -71.952646740700004 -73.841426549399998 -4.99999999979 -73.067745293200005 -74.850965724800005 -4.99999999977 -73.475826710600003 -75.452638866399994 -4.99999999976 -73.991005633 -76.719738437000004 -4.99999999973 -73.9791308211 -77.962675713199999 -4.9999999997 -73.859909501100006 -78.537610243800003 -4.9999999997 -73.461363145600004 -79.560340517300006 -4.9999999997 -72.839595585500007 -80.313353331499997 -4.99999999974 -72.498332214599998 -80.6184231477 -4.99999999977 -72.144892884699999 -80.859660529300001 -4.9999999998 -71.790406912500004 -81.044970257900005 -4.99999999984 + +0 6 +31.457570005800001 6 + +16.3362817987 6 +20.420352248299999 3 +24.504422697999999 3 +28.588493147699999 3 +32.672563597299998 6 + +9 1 0 0 1 5 5 6 5 2 2 -72.3463360983 -82.108428174500006 -5 1 -53.9130655445 -91.7445340628 -5 0.20000000000000001 -53.493594933099999 -68.493210564799995 -5 0.20000000000000001 -71.926865486899999 -58.857104676500001 -5 0.20000000000000001 -90.7796066521 -72.472322286199997 -5 0.20000000000000001 +-72.3463360983 -82.108428174500006 -2.99999999997 1 -53.9130655445 -91.7445340628 -2.99999999973 0.20000000000000001 -53.493594933099999 -68.493210564799995 -2.99999999973 0.20000000000000001 -71.926865486899999 -58.857104676500001 -2.99999999973 0.20000000000000001 -90.7796066521 -72.472322286199997 -2.99999999973 0.20000000000000001 +-72.3463360983 -82.108428174500006 -0.99999999993800004 1 -53.9130655445 -91.7445340628 -0.99999999945200002 0.20000000000000001 -53.493594933099999 -68.493210564799995 -0.99999999945200002 0.20000000000000001 -71.926865486899999 -58.857104676500001 -0.99999999945200002 0.20000000000000001 -90.7796066521 -72.472322286199997 -0.99999999945200002 0.20000000000000001 +-72.3463360983 -82.108428174500006 0.99999999542600004 1 -53.9130655445 -91.7445340628 0.99999999572200005 0.20000000000000001 -53.493594933099999 -68.493210564799995 0.99999999572200005 0.20000000000000001 -71.926865486899999 -58.857104676500001 0.99999999572200005 0.20000000000000001 -90.7796066521 -72.472322286199997 0.99999999572200005 0.20000000000000001 +-72.3463360983 -82.108428174500006 2.9999999977099998 1 -53.9130655445 -91.7445340628 2.9999999978599998 0.20000000000000001 -53.493594933099999 -68.493210564799995 2.9999999978599998 0.20000000000000001 -71.926865486899999 -58.857104676500001 2.9999999978599998 0.20000000000000001 -90.7796066521 -72.472322286199997 2.9999999978599998 0.20000000000000001 +-72.3463360983 -82.108428174500006 5 1 -53.9130655445 -91.7445340628 5 0.20000000000000001 -53.493594933099999 -68.493210564799995 5 0.20000000000000001 -71.926865486899999 -58.857104676500001 5 0.20000000000000001 -90.7796066521 -72.472322286199997 5 0.20000000000000001 + +0 6 +10 6 + +0 5 +32.672563597299998 5 + +9 1 0 0 1 5 5 6 5 2 2 -72.3463360983 -82.108428174500006 -5 1 -53.9130655445 -91.7445340628 -5 0.20000000000000001 -53.493594933099999 -68.493210564799995 -5 0.20000000000000001 -71.926865486899999 -58.857104676500001 -5 0.20000000000000001 -90.7796066521 -72.472322286199997 -5 0.20000000000000001 +-72.3463360983 -82.108428174500006 -2.99999999997 1 -53.9130655445 -91.7445340628 -2.99999999973 0.20000000000000001 -53.493594933099999 -68.493210564799995 -2.99999999973 0.20000000000000001 -71.926865486899999 -58.857104676500001 -2.99999999973 0.20000000000000001 -90.7796066521 -72.472322286199997 -2.99999999973 0.20000000000000001 +-72.3463360983 -82.108428174500006 -0.99999999993800004 1 -53.9130655445 -91.7445340628 -0.99999999945200002 0.20000000000000001 -53.493594933099999 -68.493210564799995 -0.99999999945200002 0.20000000000000001 -71.926865486899999 -58.857104676500001 -0.99999999945200002 0.20000000000000001 -90.7796066521 -72.472322286199997 -0.99999999945200002 0.20000000000000001 +-72.3463360983 -82.108428174500006 0.99999999542600004 1 -53.9130655445 -91.7445340628 0.99999999572200005 0.20000000000000001 -53.493594933099999 -68.493210564799995 0.99999999572200005 0.20000000000000001 -71.926865486899999 -58.857104676500001 0.99999999572200005 0.20000000000000001 -90.7796066521 -72.472322286199997 0.99999999572200005 0.20000000000000001 +-72.3463360983 -82.108428174500006 2.9999999977099998 1 -53.9130655445 -91.7445340628 2.9999999978599998 0.20000000000000001 -53.493594933099999 -68.493210564799995 2.9999999978599998 0.20000000000000001 -71.926865486899999 -58.857104676500001 2.9999999978599998 0.20000000000000001 -90.7796066521 -72.472322286199997 2.9999999978599998 0.20000000000000001 +-72.3463360983 -82.108428174500006 5 1 -53.9130655445 -91.7445340628 5 0.20000000000000001 -53.493594933099999 -68.493210564799995 5 0.20000000000000001 -71.926865486899999 -58.857104676500001 5 0.20000000000000001 -90.7796066521 -72.472322286199997 5 0.20000000000000001 + +0 6 +10 6 + +0 5 +32.672563597299998 5 + +9 0 0 0 0 5 5 6 15 2 5 -71.790406912500004 -81.044970257900005 -5 -71.435920940299994 -81.230279986499994 -5 -71.036108959299995 -81.382809374199994 -5 -70.590832285299996 -81.488908218199995 -5 -69.6176412672 -81.569669839400007 -5 -68.550383866199994 -81.313197521399999 -5 -68.010246888699996 -81.082946608100002 -5 -66.982867095499998 -80.383286087399995 -5 -66.236465053900005 -79.237059828699998 -5 -65.975332479100004 -78.558568273199995 -5 -65.782825161199995 -77.066738838899994 -5 -66.303549872000005 -75.564741293099999 -5 -66.758452071600004 -74.873633448299998 -5 -67.375240395700004 -74.325870271400007 -5 -68.084212340099995 -73.955250814099998 -5 +-71.790406912500004 -81.044970257900005 -2.99999999997 -71.435920940299994 -81.230279986499994 -2.99999999996 -71.036108959299995 -81.382809374199994 -2.99999999996 -70.590832285299996 -81.488908218199995 -2.99999999995 -69.6176412672 -81.569669839400007 -2.99999999993 -68.550383866199994 -81.313197521399999 -2.99999999991 -68.010246888699996 -81.082946608100002 -2.9999999999 -66.982867095499998 -80.383286087399995 -2.99999999987 -66.236465053900005 -79.237059828699998 -2.99999999985 -65.975332479100004 -78.558568273199995 -2.99999999984 -65.782825161199995 -77.066738838899994 -2.99999999981 -66.303549872000005 -75.564741293099999 -2.9999999998 -66.758452071600004 -74.873633448299998 -2.99999999979 -67.375240395700004 -74.325870271400007 -2.99999999979 -68.084212340099995 -73.955250814099998 -2.99999999979 +-71.790406912500004 -81.044970257900005 -0.99999999993800004 -71.435920940299994 -81.230279986499994 -0.99999999992599997 -71.036108959299995 -81.382809374199994 -0.99999999991199995 -70.590832285299996 -81.488908218199995 -0.99999999989699995 -69.6176412672 -81.569669839400007 -0.99999999986300003 -68.550383866199994 -81.313197521399999 -0.99999999982099996 -68.010246888699996 -81.082946608100002 -0.99999999979800003 -66.982867095499998 -80.383286087399995 -0.999999999749 -66.236465053900005 -79.237059828699998 -0.99999999969800002 -65.975332479100004 -78.558568273199995 -0.99999999967300002 -65.782825161199995 -77.066738838899994 -0.99999999962599995 -66.303549872000005 -75.564741293099999 -0.99999999959200003 -66.758452071600004 -74.873633448299998 -0.99999999957999997 -67.375240395700004 -74.325870271400007 -0.99999999957399999 -68.084212340099995 -73.955250814099998 -0.99999999957399999 +-71.790406912500004 -81.044970257900005 0.99999999542600004 -71.435920940299994 -81.230279986499994 0.99999999543399998 -71.036108959299995 -81.382809374199994 0.99999999544200002 -70.590832285299996 -81.488908218199995 0.99999999545100005 -69.6176412672 -81.569669839400007 0.99999999547200003 -68.550383866199994 -81.313197521399999 0.999999995498 -68.010246888699996 -81.082946608100002 0.99999999551200003 -66.982867095499998 -80.383286087399995 0.99999999554100005 -66.236465053900005 -79.237059828699998 0.99999999557200003 -65.975332479100004 -78.558568273199995 0.99999999558700003 -65.782825161199995 -77.066738838899994 0.99999999561599995 -66.303549872000005 -75.564741293099999 0.99999999563700004 -66.758452071600004 -74.873633448299998 0.99999999564399999 -67.375240395700004 -74.325870271400007 0.99999999564800002 -68.084212340099995 -73.955250814099998 0.99999999564800002 +-71.790406912500004 -81.044970257900005 2.9999999977099998 -71.435920940299994 -81.230279986499994 2.9999999977199998 -71.036108959299995 -81.382809374199994 2.9999999977199998 -70.590832285299996 -81.488908218199995 2.9999999977299998 -69.6176412672 -81.569669839400007 2.9999999977399998 -68.550383866199994 -81.313197521399999 2.9999999977499998 -68.010246888699996 -81.082946608100002 2.9999999977599998 -66.982867095499998 -80.383286087399995 2.9999999977699998 -66.236465053900005 -79.237059828699998 2.9999999977899998 -65.975332479100004 -78.558568273199995 2.9999999977899998 -65.782825161199995 -77.066738838899994 2.9999999978099998 -66.303549872000005 -75.564741293099999 2.9999999978199998 -66.758452071600004 -74.873633448299998 2.9999999978199998 -67.375240395700004 -74.325870271400007 2.9999999978199998 -68.084212340099995 -73.955250814099998 2.9999999978199998 +-71.790406912500004 -81.044970257900005 5 -71.435920940299994 -81.230279986499994 5 -71.036108959299995 -81.382809374199994 5 -70.590832285299996 -81.488908218199995 5 -69.6176412672 -81.569669839400007 5 -68.550383866199994 -81.313197521399999 5 -68.010246888699996 -81.082946608100002 5 -66.982867095499998 -80.383286087399995 5 -66.236465053900005 -79.237059828699998 5 -65.975332479100004 -78.558568273199995 5 -65.782825161199995 -77.066738838899994 5 -66.303549872000005 -75.564741293099999 5 -66.758452071600004 -74.873633448299998 5 -67.375240395700004 -74.325870271400007 5 -68.084212340099995 -73.955250814099998 5 + +0 6 +10 6 + +0 6 +4.0840704496700004 3 +8.1681408993400009 3 +12.252211349 3 +16.3362817987 6 + +9 0 0 0 0 5 5 6 15 2 5 -68.084212339999993 -73.955250814199999 -5 -68.793184284399999 -73.584631356900005 -5 -69.594998547700001 -73.390811280600005 -5 -70.422119040799998 -73.411733854600001 -5 -71.952646740600002 -73.841426549399998 -5 -73.067745293200005 -74.850965724800005 -5 -73.475826710600003 -75.452638866399994 -5 -73.991005633 -76.719738437000004 -5 -73.9791308211 -77.962675713199999 -5 -73.859909501100006 -78.537610243700001 -5 -73.461363145600004 -79.560340517300006 -5 -72.839595585500007 -80.313353331499997 -5 -72.498332214599998 -80.6184231477 -5 -72.144892884699999 -80.859660529300001 -5 -71.790406912500004 -81.044970257900005 -5 +-68.084212339999993 -73.955250814199999 -2.99999999979 -68.793184284399999 -73.584631356900005 -2.99999999979 -69.594998547700001 -73.390811280600005 -2.99999999979 -70.422119040799998 -73.411733854600001 -2.9999999998 -71.952646740600002 -73.841426549399998 -2.99999999981 -73.067745293200005 -74.850965724800005 -2.99999999984 -73.475826710600003 -75.452638866399994 -2.99999999985 -73.991005633 -76.719738437000004 -2.99999999987 -73.9791308211 -77.962675713199999 -2.9999999999 -73.859909501100006 -78.537610243700001 -2.99999999991 -73.461363145600004 -79.560340517300006 -2.99999999993 -72.839595585500007 -80.313353331499997 -2.99999999995 -72.498332214599998 -80.6184231477 -2.99999999996 -72.144892884699999 -80.859660529300001 -2.99999999996 -71.790406912500004 -81.044970257900005 -2.99999999997 +-68.084212339999993 -73.955250814199999 -0.99999999957399999 -68.793184284399999 -73.584631356900005 -0.99999999957399999 -69.594998547700001 -73.390811280600005 -0.99999999957999997 -70.422119040799998 -73.411733854600001 -0.99999999959200003 -71.952646740600002 -73.841426549399998 -0.99999999962599995 -73.067745293200005 -74.850965724800005 -0.99999999967300002 -73.475826710600003 -75.452638866399994 -0.99999999969800002 -73.991005633 -76.719738437000004 -0.999999999749 -73.9791308211 -77.962675713199999 -0.99999999979800003 -73.859909501100006 -78.537610243700001 -0.99999999982099996 -73.461363145600004 -79.560340517300006 -0.99999999986300003 -72.839595585500007 -80.313353331499997 -0.99999999989699995 -72.498332214599998 -80.6184231477 -0.99999999991199995 -72.144892884699999 -80.859660529300001 -0.99999999992599997 -71.790406912500004 -81.044970257900005 -0.99999999993800004 +-68.084212339999993 -73.955250814199999 0.99999999564800002 -68.793184284399999 -73.584631356900005 0.99999999564800002 -69.594998547700001 -73.390811280600005 0.99999999564399999 -70.422119040799998 -73.411733854600001 0.99999999563700004 -71.952646740600002 -73.841426549399998 0.99999999561599995 -73.067745293200005 -74.850965724800005 0.99999999558700003 -73.475826710600003 -75.452638866399994 0.99999999557200003 -73.991005633 -76.719738437000004 0.99999999554100005 -73.9791308211 -77.962675713199999 0.99999999551200003 -73.859909501100006 -78.537610243700001 0.999999995498 -73.461363145600004 -79.560340517300006 0.99999999547200003 -72.839595585500007 -80.313353331499997 0.99999999545100005 -72.498332214599998 -80.6184231477 0.99999999544200002 -72.144892884699999 -80.859660529300001 0.99999999543399998 -71.790406912500004 -81.044970257900005 0.99999999542600004 +-68.084212339999993 -73.955250814199999 2.9999999978199998 -68.793184284399999 -73.584631356900005 2.9999999978199998 -69.594998547700001 -73.390811280600005 2.9999999978199998 -70.422119040799998 -73.411733854600001 2.9999999978199998 -71.952646740600002 -73.841426549399998 2.9999999978099998 -73.067745293200005 -74.850965724800005 2.9999999977899998 -73.475826710600003 -75.452638866399994 2.9999999977899998 -73.991005633 -76.719738437000004 2.9999999977699998 -73.9791308211 -77.962675713199999 2.9999999977599998 -73.859909501100006 -78.537610243700001 2.9999999977499998 -73.461363145600004 -79.560340517300006 2.9999999977399998 -72.839595585500007 -80.313353331499997 2.9999999977299998 -72.498332214599998 -80.6184231477 2.9999999977199998 -72.144892884699999 -80.859660529300001 2.9999999977199998 -71.790406912500004 -81.044970257900005 2.9999999977099998 +-68.084212339999993 -73.955250814199999 5 -68.793184284399999 -73.584631356900005 5 -69.594998547700001 -73.390811280600005 5 -70.422119040799998 -73.411733854600001 5 -71.952646740600002 -73.841426549399998 5 -73.067745293200005 -74.850965724800005 5 -73.475826710600003 -75.452638866399994 5 -73.991005633 -76.719738437000004 5 -73.9791308211 -77.962675713199999 5 -73.859909501100006 -78.537610243700001 5 -73.461363145600004 -79.560340517300006 5 -72.839595585500007 -80.313353331499997 5 -72.498332214599998 -80.6184231477 5 -72.144892884699999 -80.859660529300001 5 -71.790406912500004 -81.044970257900005 5 + +0 6 +10 6 + +16.3362817987 6 +20.420352248299999 3 +24.504422697999999 3 +28.588493147699999 3 +32.672563597299998 6 + +1 -68.077852162400006 -79.051232465300004 5 0 -0 1 0.49823651340429953 0.86704116206252124 0 -0.86704116206252124 0.49823651340429953 0 +2 -9.2384933181199997 76.272829591999994 -26.5 0 0 -1 -0.9710820643040643 -0.23874594109001579 -0 -0.23874594109001579 0.9710820643040643 0 5.2000000000000002 +2 -9.2384933181199997 76.272829591999994 -26.5 0 0 -1 -0.9710820643040643 -0.23874594109001579 -0 -0.23874594109001579 0.9710820643040643 0 5.2000000000000002 +5 -7.7955479379600003 64.359899279499999 3 0.99274419270628877 0.12024544834603497 -1.5771219445204588e-16 -0.12024544834603497 0.99274419270628877 7.8083516187022719e-17 1.6595705257357694e-16 -5.8552783709231004e-17 1 12 5.2000000000000002 +1 -9.2384933181199997 76.272829591999994 -56 0 0 -1 0.9710820643040643 0.23874594109001579 0 0.23874594109001579 -0.9710820643040643 0 +5 -7.7955479379600003 64.359899279499999 3 0.99274419270628877 0.12024544834603497 -1.5771219445204588e-16 -0.12024544834603497 0.99274419270628877 1.0552383920803069e-16 1.6925662651799807e-16 -8.5794005034321345e-17 1 12 5.2000000000000002 +2 -4.6192466590599999 38.136414795999997 15 -0.12024544834603497 0.99274419270628877 -1.7347234759805045e-18 -0.98554103215206468 -0.11937297054489067 -0.1202454483460062 -0.11937297054486165 -0.014458967847935499 0.99274419270629233 5.2000000000000002 +2 -4.6192466590599999 38.136414795999997 15 -0.12024544834603497 0.99274419270628877 -1.7347234759805045e-18 -0.98554103215206468 -0.11937297054489067 -0.1202454483460062 -0.11937297054486165 -0.014458967847935499 0.99274419270629233 5.2000000000000002 +5 -1.4429453801500001 11.9129303125 3 0.99274419270628877 0.12024544834603497 -5.6955562371916562e-19 -2.2652706878034693e-16 1.8749398895947551e-15 1 0.12024544834603497 -0.99274419270628877 1.8885745360165694e-15 12 5.2000000000000002 +5 -1.4429453801500001 11.9129303125 3 0.99274419270628877 0.12024544834603497 -5.6955562371916562e-19 -2.0403321495193253e-16 1.689231049327631e-15 1 0.12024544834603497 -0.99274419270628877 1.7015083797685342e-15 12 5.2000000000000002 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 5.2000000000000002 +2 -9.2384933181199997 76.272829591999994 -26.5 0 0 -1 0.9710820643040643 0.23874594109001579 0 0.23874594109001579 -0.9710820643040643 0 4 +2 -9.2384933181199997 76.272829591999994 -26.5 0 0 -1 0.9710820643040643 0.23874594109001579 0 0.23874594109001579 -0.9710820643040643 0 4 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 5.2000000000000002 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +5 -7.7955479379600003 64.359899279499999 3 0.99274419270628877 0.12024544834603497 -1.5771219445204588e-16 -0.12024544834603497 0.99274419270628877 1.0674381644003103e-16 1.6940332322723191e-16 -8.7005130346623581e-17 1 12 4 +5 -7.7955479379600003 64.359899279499999 3 0.99274419270628877 0.12024544834603497 -1.5771219445204588e-16 -0.12024544834603497 0.99274419270628877 1.0674381644003103e-16 1.6940332322723191e-16 -8.7005130346623581e-17 1 12 4 +2 -4.6192466590599999 38.136414795999997 15 -0.12024544834603497 0.99274419270628877 -1.7347234759805045e-18 0.98554103215206468 0.11937297054489067 0.1202454483460062 0.11937297054486165 0.014458967847935499 -0.99274419270629233 4 +2 -4.6192466590599999 38.136414795999997 15 -0.12024544834603497 0.99274419270628877 -1.7347234759805045e-18 0.98554103215206468 0.11937297054489067 0.1202454483460062 0.11937297054486165 0.014458967847935499 -0.99274419270629233 4 +5 -1.4429453801500001 11.9129303125 3 0.99274419270628877 0.12024544834603497 -5.6955562371916562e-19 -2.2493178509286807e-16 1.861769257040696e-15 1 0.12024544834603497 -0.99274419270628877 1.8753076414320185e-15 12 4 +5 -1.4429453801500001 11.9129303125 3 0.99274419270628877 0.12024544834603497 -5.6955562371916562e-19 -2.2493178509286807e-16 1.861769257040696e-15 1 0.12024544834603497 -0.99274419270628877 1.8753076414320185e-15 12 4 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 4 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 4 +6 -0 -0 1 +2 -110.1691744972386 32.473588360466692 -8.8617647125267922 2.4073398894128582e-06 0.00016075840718714947 0.99999998707546967 -0.89673410913655827 0.44256969253634104 -6.8988055941965332e-05 -0.44256969790674583 -0.89673409738061316 0.00014522296272986845 3 +1 -110.02692124859327 32.248962483940964 -8.8617289441941445 2.4067344406716101e-06 0.00016075825792377879 0.99999998707549498 -5.169878828456423e-26 0.99999998707839122 -0.00016075825792424438 -0.99999999999710387 3.8690243596864868e-10 2.4067344095727293e-06 +6 -0 -0 1 +7 0 0 5 9 3 -112.70368175145904 30.868511132450294 -8.861500585668864 -112.19943185672037 30.072272204503406 -8.861373797013357 -111.38249967059255 29.474051743360178 -8.8612795899628054 -110.35459358508524 29.243263669776297 -8.8612449685103911 -108.36607877531333 29.62639884466671 -8.8613113413709925 -107.16963783754454 31.260263200937061 -8.8615768763058895 -106.93884975782294 32.288169271484549 -8.8617426793859977 -107.13041735299885 33.282426668281914 -8.8619020553881001 -107.634667241854 34.078665590838227 -8.8620288379358954 + -4.7123889803800001 6 4.4408920985e-16 3 4.7123889803800001 6 +1 6557.6208442200004 -128.13359221299999 4536.9327992099998 -0.73134152220185855 0.30553578504594092 -0.60974376746288206 0.12288999641664211 -0.82036829100477338 -0.55847463317023205 -0.67084843793824711 -0.48336709773242542 0.56242210318011654 +1 6428.36239836 -94.436394900600007 4436.6083103399997 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.74159448037033837 -0.43725522647176845 0.50876860517073041 1.6542323066914832e-13 0.75839575140757587 0.6517943573297782 +2 -91.765126416608837 30.596907218775868 28.138493146598876 0 0 -1 -1 0 -0 0 1 0 10.000000000000453 +1 -91.765126416608837 30.596907218775868 -8.8617550892037258 0 0 -1 -1 0 -0 0 1 0 +2 6534.77530209 -134.311202221 4518.5979051699996 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.7313415222018449 -0.30553578504595075 0.60974376746289349 -0.12288999641647205 0.82036829100489594 0.5584746331700895 6 +1 6436.4125796099997 -88.635989727799995 4429.8592451000004 -0.67084843793829319 -0.48336709773221126 0.56242210318024577 0.74159448037033837 -0.43725522647176845 0.50876860517073041 1.6542323066914832e-13 0.75839575140757587 0.6517943573297782 +1 -91.765126416608837 30.596907218775868 28.138493146598876 0 0 -1 -1 0 -0 0 1 0 +Triangulations 0 + +TShapes 6697 +Ve +1.56700153678202e-07 +-65.2000001567 -2.50000122194 0 +0 0 + +0101101 +* +Ve +1e-07 +-12 50.7 0 +0 0 + +0101101 +* +Ve +8.19920820258925e-06 +22.7970187286 50.6999918008 0 +0 0 + +0101101 +* +Ve +1e-07 +62.796057198 40.7271349116 0 +0 0 + +0101101 +* +Ve +3.2478074647072e-06 +88.4222550489 27.1014401382 0 +0 0 + +0101101 +* +Ve +1e-07 +100.2 7.5 0 +0 0 + +0101101 +* +Ve +8.12300812363715e-06 +100.199991877 -2.50002261243 0 +0 0 + +0101101 +* +Ve +1e-07 +71 -31.7 0 +0 0 + +0101101 +* +Ve +1e-07 +-38 -32.5 1 +0 0 + +0101101 +* +Ve +1e-07 +71 -32.5 1 +0 0 + +0101101 +* +Ve +1e-07 +101 -2.5 1 +0 0 + +0101101 +* +Ve +1e-07 +101 7.5 1 +0 0 + +0101101 +* +Ve +1e-07 +88.7978026727 27.8078176435 1 +0 0 + +0101101 +* +Ve +1e-07 +63.1716344482 41.4334929859 1 +0 0 + +0101101 +* +Ve +1e-07 +22.7970800486 51.5 1 +0 0 + +0101101 +* +Ve +1e-07 +-12 51.5 1 +0 0 + +0101101 +* +Ve +1e-07 +-66 -2.5 1 +0 0 + +0101101 +* +Ve +1e-07 +-66 -4.5 1 +0 0 + +0101101 +* +Ve +1.00000184741111e-07 +11.2 -1.26637722812e-14 0 +0 0 + +0101101 +* +Ve +1e-07 +11.4 -2.79219470206e-15 0.2 +0 0 + +0101101 +* +Ve +1.00000184741111e-07 +-11.2 6.37243841492e-15 0 +0 0 + +0101101 +* +Ve +1e-07 +-11.4 1.39609735103e-15 0.2 +0 0 + +0101101 +* +Ve +1e-07 +11.4 -2.79219470206e-15 2.8 +0 0 + +0101101 +* +Ve +1e-07 +-11.4 1.39609735103e-15 2.8 +0 0 + +0101101 +* +Ve +1.00000198951966e-07 +11.2 -1.26637722812e-14 3 +0 0 + +0101101 +* +Ve +1.00000198951966e-07 +-11.2 6.37243841492e-15 3 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +10 0 4.6 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +-10 1.22464679915e-15 4.6 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +4.69837027832 -8.60030910653 20.4 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +-4.69837027832 8.60030910653 20.4 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +-8.2 -1.02756156045e-14 3 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +8.2 -2.36365216814e-15 3 +0 0 + +0101101 +* +Ve +1.00000016280579e-07 +8 -1.61702895938e-14 2.8 +0 0 + +0101101 +* +Ve +1.00004359388151e-07 +82.5708437801152 24.4980087707198 -21.4609467229615 +0 0 + +0101101 +* +Ve +1.00000016280579e-07 +-8 9.79717439318e-16 2.8 +0 0 + +0101101 +* +Ve +1.00004356270236e-07 +74.9016124689609 10.4558263934564 -21.4586708616133 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +-4.3627724013 7.9860013132 3.1 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +4.3627724013 -7.9860013132 3.1 +0 0 + +0101101 +* +Ve +1e-07 +-8.2 -6.63408408378e-15 0 +0 0 + +0101101 +* +Ve +1e-07 +8.2 -2.36365216814e-15 0 +0 0 + +0101101 +* +Ve +1e-07 +-8 9.79717439318e-16 0.2 +0 0 + +0101101 +* +Ve +1e-07 +8 -1.61702895938e-14 0.2 +0 0 + +0101101 +* +Ve +1.00000131450406e-07 +70.7362226971307 17.4756531414003 -23.7352895598952 +0 0 + +0101101 +* +Ve +1.15122922527669e-06 +-3.83540430883 7.02066049512 22.8755002002 +0 0 + +0101101 +* +Ve +1.00000127897692e-07 +86.7362225961405 17.4774504112005 -23.73532836626 +0 0 + +0101101 +* +Ve +1.10167863391101e-06 +3.83540430883 -7.02066049512 22.8755002002 +0 0 + +0101101 +* +Ve +1.00000206057393e-07 +9.2 -2.61904017896e-15 0 +0 0 + +0101101 +* +Ve +1e-07 +9.4 -1.06512131276e-14 0.2 +0 0 + +0101101 +* +Ve +1.00000206057393e-07 +-9.2 -7.41025647455e-15 0 +0 0 + +0101101 +* +Ve +1e-07 +-9.4 1.1511679912e-15 0.2 +0 0 + +0101101 +* +Ve +1e-07 +9.4 -1.06512131276e-14 2.8 +0 0 + +0101101 +* +Ve +1e-07 +-9.4 1.1511679912e-15 2.8 +0 0 + +0101101 +* +Ve +1.00000230926389e-07 +9.2 -2.61904017896e-15 3 +0 0 + +0101101 +* +Ve +1.00000230926389e-07 +-9.2 -7.41025647455e-15 3 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +8 0 4.6 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +-8 9.79717439318e-16 4.6 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +3.73951920111 -6.84514398274 19.4 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +-3.73951920111 6.84514398274 19.4 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +-6.2 4.51549178933e-16 3 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +6.2 -1.82629386748e-15 3 +0 0 + +0101101 +* +Ve +1.00000008379058e-07 +6 -1.46957615898e-15 2.8 +0 0 + +0101101 +* +Ve +1.00000330675637e-07 +8.61421226251281 4.73453627624617 -21.4575915398101 +0 0 + +0101101 +* +Ve +1.00000005043884e-07 +-6 7.34788079488e-16 2.8 +0 0 + +0101101 +* +Ve +1.00000330822617e-07 +2.86228877913352 -5.79710050669805 -21.455884643799 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +-3.30803621637 6.05531967704 3.1 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +3.30803621637 -6.05531967704 3.1 +0 0 + +0101101 +* +Ve +1e-07 +6.2 -1.82629386748e-15 0 +0 0 + +0101101 +* +Ve +1e-07 +-6.2 4.51549178933e-16 0 +0 0 + +0101101 +* +Ve +1e-07 +-6 7.34788079488e-16 0.2 +0 0 + +0101101 +* +Ve +1e-07 +6 -1.46957615898e-15 0.2 +0 0 + +0101101 +* +Ve +1.00000076605892e-07 +-0.261755039679739 -0.532329942107744 -23.7822672446612 +0 0 + +0101101 +* +Ve +1.18053816859045e-06 +-2.87655323163 5.26549537134 21.9255437353 +0 0 + +0101101 +* +Ve +1.00000075661699e-07 +11.7382448845777 -0.530981989757579 -23.7822963494348 +0 0 + +0101101 +* +Ve +1.17928358314076e-06 +2.87655323163 -5.26549537134 21.9255437353 +0 0 + +0101101 +* +Ve +1.00000331456001e-07 +8.60949441297175 46.734535468562 -21.4643433815118 +0 0 + +0101101 +* +Ve +1.00000333165185e-07 +2.85757092959245 36.2028986856178 -21.4626364855007 +0 0 + +0101101 +* +Ve +1.00000074607504e-07 +-0.266472889220802 41.4676692502081 -23.7890190863629 +0 0 + +0101101 +* +Ve +1.00000074606987e-07 +11.7335270350366 41.4690172025582 -23.7890481911364 +0 0 + +0101101 +* +Ve +1e-07 +-3.83540430883 7.02066049512 13 +0 0 + +0101101 +* +Ve +1e-07 +3.83540430883 -7.02066049512 13 +0 0 + +0101101 +* +Ve +1e-07 +-2.97243833935 5.44101188372 0 +0 0 + +0101101 +* +Ve +1e-07 +2.97243833935 -5.44101188372 0 +0 0 + +0101101 +* +Ve +1e-07 +2.97243833935 -5.44101188372 58 +0 0 + +0101101 +* +Ve +1e-07 +-2.97243833935 5.44101188372 58 +0 0 + +0101101 +* +Ve +1e-07 +3.83540430883 -7.02066049512 56.2 +0 0 + +0101101 +* +Ve +1e-07 +-3.83540430883 7.02066049512 56.2 +0 0 + +0101101 +* +Ve +1e-07 +-3.83540430883 7.02066049512 20.4 +0 0 + +0101101 +* +Ve +1e-07 +3.83540430883 -7.02066049512 20.4 +0 0 + +0101101 +* +Ve +1.00004241719942e-07 +4.79425538604 -8.7758256189 20.2 +0 0 + +0101101 +* +Ve +1.00000138555833e-07 +88.7362290243552 17.4781051790764 -21.0598330514354 +0 0 + +0101101 +* +Ve +1.00004254774755e-07 +-4.79425538604 8.7758256189 20.2 +0 0 + +0101101 +* +Ve +1.00000142108547e-07 +68.7362291505928 17.4758585918256 -21.059784543479 +0 0 + +0101101 +* +Ve +1.00000142828369e-07 +68.7362460019721 17.4769839006759 -14.0597846339509 +0 0 + +0101101 +* +Ve +1.00004241719942e-07 +4.79425538604 -8.7758256189 13.2 +0 0 + +0101101 +* +Ve +1.0000424795859e-07 +-4.79425538604 8.7758256189 13.2 +0 0 + +0101101 +* +Ve +1.00000142119649e-07 +88.7362458757344 17.4792304879267 -14.0598331419069 +0 0 + +0101101 +* +Ve +1e-07 +-3.69157664725 6.75738572656 23.5 +0 0 + +0101101 +* +Ve +1e-07 +-3.69157664725 6.75738572656 26.3 +0 0 + +0101101 +* +Ve +1e-07 +3.69157664725 -6.75738572656 23.5 +0 0 + +0101101 +* +Ve +1e-07 +3.69157664725 -6.75738572656 26.3 +0 0 + +0101101 +* +Ve +1e-07 +3.83540430883 -7.02066049512 26.9244997998 +0 0 + +0101101 +* +Ve +1e-07 +-3.83540430883 7.02066049512 26.9244997998 +0 0 + +0101101 +* +Ve +1.00001301515697e-07 +-3.83540430883 7.02066049512 -7 +0 0 + +0101101 +* +Ve +1.00001338237026e-07 +3.83540430883 -7.02066049512 -7 +0 0 + +0101101 +* +Ve +4.31521155753223e-05 +-3.83540430883 7.02066049512 2.26794919243 +0 0 + +0101101 +* +Ve +4.31544218264034e-05 +3.83540430883 -7.02066049512 2.26794919243 +0 0 + +0101101 +* +Ve +1e-07 +-3.74551202035 6.85611376477 26.5341874249 +0 0 + +0101101 +* +Ve +1e-07 +3.74551202035 -6.85611376477 26.5341874249 +0 0 + +0101101 +* +Ve +1e-07 +3.74551202035 -6.85611376477 23.2658125751 +0 0 + +0101101 +* +Ve +1e-07 +-3.74551202035 6.85611376477 23.2658125751 +0 0 + +0101101 +* +Ve +1e-07 +2.73272557004 -5.00222060278 22.5 +0 0 + +0101101 +* +Ve +1e-07 +2.73272557004 -5.00222060278 25.3 +0 0 + +0101101 +* +Ve +1e-07 +-2.73272557004 5.00222060278 25.3 +0 0 + +0101101 +* +Ve +1e-07 +-2.73272557004 5.00222060278 22.5 +0 0 + +0101101 +* +Ve +1e-07 +2.87655323163 -5.26549537134 19.4 +0 0 + +0101101 +* +Ve +1e-07 +-2.87655323163 5.26549537134 19.4 +0 0 + +0101101 +* +Ve +1e-07 +2.79436599644 -5.11505264645 22.253804458 +0 0 + +0101101 +* +Ve +1e-07 +-2.79436599644 5.11505264645 22.253804458 +0 0 + +0101101 +* +Ve +1e-07 +-2.79436599644 5.11505264645 25.546195542 +0 0 + +0101101 +* +Ve +1e-07 +2.79436599644 -5.11505264645 25.546195542 +0 0 + +0101101 +* +Ve +1e-07 +2.87655323163 -5.26549537134 25.8744562647 +0 0 + +0101101 +* +Ve +1e-07 +-2.87655323163 5.26549537134 25.8744562647 +0 0 + +0101101 +* +Ve +1e-07 +-2.87655323163 5.26549537134 12 +0 0 + +0101101 +* +Ve +1e-07 +2.87655323163 -5.26549537134 12 +0 0 + +0101101 +* +Ve +1e-07 +-2.01358726214 3.68584675994 0 +0 0 + +0101101 +* +Ve +1e-07 +2.01358726214 -3.68584675994 0 +0 0 + +0101101 +* +Ve +1e-07 +-2.01358726214 3.68584675994 56 +0 0 + +0101101 +* +Ve +1e-07 +2.01358726214 -3.68584675994 56 +0 0 + +0101101 +* +Ve +1.00001350629417e-07 +2.87655323163 -5.26549537134 -4.5 +0 0 + +0101101 +* +Ve +1.00001350629417e-07 +-2.87655323163 5.26549537134 -4.5 +0 0 + +0101101 +* +Ve +2.00600107986911e-06 +2.87655323163 -5.26549537134 2.26794919243 +0 0 + +0101101 +* +Ve +2.00872958532498e-06 +-2.87655323163 5.26549537134 2.26794919243 +0 0 + +0101101 +* +Ve +1e-07 +2.87655323163 -5.26549537134 54.2 +0 0 + +0101101 +* +Ve +1e-07 +-2.87655323163 5.26549537134 54.2 +0 0 + +0101101 +* +Ve +1.0000436420907e-07 +3.83540430883 -7.02066049512 19.2 +0 0 + +0101101 +* +Ve +1.00000129788111e-07 +13.7382514332641 -0.530319176962984 -21.0567575001569 +0 0 + +0101101 +* +Ve +1.00004352940258e-07 +-3.83540430883 7.02066049512 19.2 +0 0 + +0101101 +* +Ve +1.00000128899953e-07 +-2.26174846574581 -0.53211644676315 -21.0567186937922 +0 0 + +0101101 +* +Ve +1.00000128909133e-07 +-2.26173161436656 -0.530991137912869 -14.0567187842637 +0 0 + +0101101 +* +Ve +1.00004364209431e-07 +3.83540430883 -7.02066049512 12.2 +0 0 + +0101101 +* +Ve +1.00004352940258e-07 +-3.83540430883 7.02066049512 12.2 +0 0 + +0101101 +* +Ve +1.00000130475392e-07 +13.7382682846433 -0.529193868112704 -14.0567575906285 +0 0 + +0101101 +* +Ve +1.00000124348151e-07 +13.733533583723 41.4696800153528 -21.0635093418586 +0 0 + +0101101 +* +Ve +1.00000135006041e-07 +-2.26646631528687 41.4678827455527 -21.0634705354938 +0 0 + +0101101 +* +Ve +1.00000135014806e-07 +-2.26644946390762 41.469008054403 -14.0634706259654 +0 0 + +0101101 +* +Ve +1.00000127922362e-07 +13.7335504351022 41.4708053242031 -14.0635094323301 +0 0 + +0101101 +* +Ve +1e-07 +23 0 0 +0 0 + +0101101 +* +Ve +1e-07 +-23 2.81668763804e-15 0 +0 0 + +0101101 +* +Ve +1.00001050546506e-07 +-21.4 2.62074415018e-15 0 +0 0 + +0101101 +* +Ve +1.00027010614585e-07 +6398.15699473935 -106.150786220916 4420.73838075035 +0 0 + +0101101 +* +Ve +1.00001301515697e-07 +21.4 0 0 +0 0 + +0101101 +* +Ve +1.00026033556668e-07 +6411.56530577644 -84.6356611660076 4455.22253057322 +0 0 + +0101101 +* +Ve +1.00001369044566e-07 +-21.4 2.62074415018e-15 1.6 +0 0 + +0101101 +* +Ve +1.00027010614585e-07 +10.2597065261 -18.7802668245 3.1 +0 0 + +0101101 +* +Ve +1.00001355033128e-07 +21.4 0 1.6 +0 0 + +0101101 +* +Ve +1.00026033556668e-07 +-10.2597065261 18.7802668245 3.1 +0 0 + +0101101 +* +Ve +1.0000024158453e-07 +-11.5 1.40834381902e-15 1.6 +0 0 + +0101101 +* +Ve +1.00000284217094e-07 +11.5 0 1.6 +0 0 + +0101101 +* +Ve +1e-07 +11.5 0 4.6 +0 0 + +0101101 +* +Ve +1e-07 +-11.5 1.40834381902e-15 4.6 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +-10.2597065261 18.7802668245 0 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +10.2597065261 -18.7802668245 0 +0 0 + +0101101 +* +Ve +1.00018024432355e-07 +83.2437405948056 9.22719940785131 -27.3584935080863 +0 0 + +0101101 +* +Ve +1.00009997337081e-07 +74.2286872476598 25.7247388071052 -27.361123923979 +0 0 + +0101101 +* +Ve +1e-07 +4.21894473972 -7.72272654464 0.6 +0 0 + +0101101 +* +Ve +1e-07 +-4.21894473972 7.72272654464 0.6 +0 0 + +0101101 +* +Ve +1e-07 +-4.21894473972 7.72272654464 2.8 +0 0 + +0101101 +* +Ve +1e-07 +4.21894473972 -7.72272654464 2.8 +0 0 + +0101101 +* +Ve +1e-07 +17 0 0 +0 0 + +0101101 +* +Ve +1e-07 +-17 2.08189955855e-15 0 +0 0 + +0101101 +* +Ve +1.00001323670747e-07 +-15.4 1.88595607069e-15 0 +0 0 + +0101101 +* +Ve +1.00012492238535e-07 +6454.91463699501 -145.581430377773 4454.54981794837 +0 0 + +0101101 +* +Ve +1.00001330670319e-07 +15.4 0 0 +0 0 + +0101101 +* +Ve +1.00013415076959e-07 +6464.56360848904 -130.09858337571 4479.36551454987 +0 0 + +0101101 +* +Ve +1.00002072252543e-07 +-15.4 1.88595607069e-15 1.6 +0 0 + +0101101 +* +Ve +1.00013635816802e-07 +7.3831532945 -13.5147714531 3.1 +0 0 + +0101101 +* +Ve +1.0000140054444e-07 +15.4 0 1.6 +0 0 + +0101101 +* +Ve +1.00013415076959e-07 +-7.3831532945 13.5147714531 3.1 +0 0 + +0101101 +* +Ve +1.00001423995717e-07 +9.5 0 1.6 +0 0 + +0101101 +* +Ve +1.00001423995717e-07 +-9.5 -5.38226195277e-15 1.6 +0 0 + +0101101 +* +Ve +1e-07 +9.5 0 4.6 +0 0 + +0101101 +* +Ve +1e-07 +-9.5 -1.16341445919e-15 4.6 +0 0 + +0101101 +* +Ve +1.00013635816802e-07 +6452.92676692183 -112.621669357688 4480.50559815377 +0 0 + +0101101 +* +Ve +1.000125741253e-07 +6462.57573841585 -97.1388223556252 4505.32129475527 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +-7.3831532945 13.5147714531 0 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +7.3831532945 -13.5147714531 0 +0 0 + +0101101 +* +Ve +1.00000010658141e-07 +-47.4 -22 20.5 +0 0 + +0101101 +* +Ve +1.00000010658141e-07 +-32.6 -22 20.5 +0 0 + +0101101 +* +Ve +1e-07 +3.45186387795 -6.31859444561 0 +0 0 + +0101101 +* +Ve +1e-07 +-3.45186387795 6.31859444561 0 +0 0 + +0101101 +* +Ve +1e-07 +3.16420855479 -5.79204490848 0.6 +0 0 + +0101101 +* +Ve +1e-07 +-3.16420855479 5.79204490848 0.6 +0 0 + +0101101 +* +Ve +1e-07 +-3.16420855479 5.79204490848 2.8 +0 0 + +0101101 +* +Ve +1e-07 +3.16420855479 -5.79204490848 2.8 +0 0 + +0101101 +* +Ve +1.00000010658141e-07 +-32.6 20 20.5 +0 0 + +0101101 +* +Ve +1.00000010658141e-07 +-47.4 20 20.5 +0 0 + +0101101 +* +Ve +1e-07 +23.706941125 -9.07682120168 8 +0 0 + +0101101 +* +Ve +1e-07 +42.293058875 1.07682120168 8 +0 0 + +0101101 +* +Ve +1e-07 +37.2189447397 -11.7227265446 8 +0 0 + +0101101 +* +Ve +1e-07 +28.7810552603 3.72272654464 8 +0 0 + +0101101 +* +Ve +9.66590793534902e-05 +-77.4202418693 -35.9202418693 52 +0 0 + +0101101 +* +Ve +9.66590793534902e-05 +-86.5 -14 52 +0 0 + +0101101 +* +Ve +1e-07 +-77.365502635 -35.9749811036 52 +0 0 + +0101101 +* +Ve +1e-07 +-55.5 -45 52 +0 0 + +0101101 +* +Ve +0.000248410548413188 +53.4997515897 -45 52 +0 0 + +0101101 +* +Ve +0.000102894900285201 +86.5 -12 52 +0 0 + +0101101 +* +Ve +9.45558587697886e-05 +86.5 -1.99851834808 52 +0 0 + +0101101 +* +Ve +9.45558587697886e-05 +72.706232063 20.9582051707 52 +0 0 + +0101101 +* +Ve +0.000236848210102444 +47.0829690879 34.5823357644 52 +0 0 + +0101101 +* +Ve +0.000236848210102444 +23 43.2221732213 52 +0 0 + +0101101 +* +Ve +1e-07 +5.3 45 52 +0 0 + +0101101 +* +Ve +1e-07 +-29.5 45 52 +0 0 + +0101101 +* +Ve +1e-07 +-86.5 -12 52 +0 0 + +0101101 +* +Ve +1e-07 +-84.5 -12 52 +0 0 + +0101101 +* +Ve +1e-07 +-84.5 -14 52 +0 0 + +0101101 +* +Ve +1e-07 +-29.5 43 52 +0 0 + +0101101 +* +Ve +1e-07 +5.3 43 52 +0 0 + +0101101 +* +Ve +1e-07 +46.1440259624 32.8164405787 52 +0 0 + +0101101 +* +Ve +1e-07 +71.7672889374 19.192309985 52 +0 0 + +0101101 +* +Ve +1e-07 +84.4999999999 -1.99851289317 52 +0 0 + +0101101 +* +Ve +1e-07 +84.5 -12 52 +0 0 + +0101101 +* +Ve +1e-07 +53.5 -43 52 +0 0 + +0101101 +* +Ve +1e-07 +-55.5 -43 52 +0 0 + +0101101 +* +Ve +1e-07 +44.0267873879 -24.1843989235 20.5 +0 0 + +0101101 +* +Ve +1e-07 +21.9732126121 16.1843989235 20.5 +0 0 + +0101101 +* +Ve +1e-07 +28.7810552603 3.72272654464 19.9 +0 0 + +0101101 +* +Ve +1e-07 +37.2189447397 -11.7227265446 19.9 +0 0 + +0101101 +* +Ve +1e-07 +-33.2 20 19.9 +0 0 + +0101101 +* +Ve +1e-07 +-46.8 20 19.9 +0 0 + +0101101 +* +Ve +1e-07 +-57 -22 20.5 +0 0 + +0101101 +* +Ve +1e-07 +-23 -22 20.5 +0 0 + +0101101 +* +Ve +1e-07 +-57 20 20.5 +0 0 + +0101101 +* +Ve +1e-07 +-23 20 20.5 +0 0 + +0101101 +* +Ve +1e-07 +-33.2 -22 19.9 +0 0 + +0101101 +* +Ve +1e-07 +-46.8 -22 19.9 +0 0 + +0101101 +* +Ve +1e-07 +44.2665001572 -24.6231902044 19.8 +0 0 + +0101101 +* +Ve +1e-07 +44.5062129265 -25.0619814854 20.3 +0 0 + +0101101 +* +Ve +1e-07 +21.4937870735 17.0619814854 20.3 +0 0 + +0101101 +* +Ve +1e-07 +21.7334998428 16.6231902044 19.8 +0 0 + +0101101 +* +Ve +1e-07 +44.0267873879 -24.1843989235 20.3 +0 0 + +0101101 +* +Ve +1e-07 +21.9732126121 16.1843989235 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-22 20 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-22.5 20 19.8 +0 0 + +0101101 +* +Ve +1e-07 +-22 -22 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-22.5 -22 19.8 +0 0 + +0101101 +* +Ve +1e-07 +-58 -22 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-57.5 -22 19.8 +0 0 + +0101101 +* +Ve +1e-07 +-58 20 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-57.5 20 19.8 +0 0 + +0101101 +* +Ve +1e-07 +-57 20 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-23 20 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-23 -22 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-57 -22 20.3 +0 0 + +0101101 +* +Ve +0.000713251616780183 +-55.5 -45 50.9999999935 +0 0 + +0101101 +* +Ve +0.000713251616780183 +-77.4202418693 -35.9202418693 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +3.04109589041 -1 32.3 +0 0 + +0101101 +* +Ve +1e-07 +-15.9589041096 -1 32.3 +0 0 + +0101101 +* +Ve +1e-07 +-15.9589041096 -1 33.5 +0 0 + +0101101 +* +Ve +1e-07 +3.04109589041 -1 33.5 +0 0 + +0101101 +* +Ve +1e-07 +1.54109589041 -1 32.3 +0 0 + +0101101 +* +Ve +1e-07 +-14.4589041096 -1 32.3 +0 0 + +0101101 +* +Ve +1e-07 +-22 19.9999999999 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-22 -22 33.5 +0 0 + +0101101 +* +Ve +3.78071428479266e-05 +16.0913576765 -21.0322580645 33.5 +0 0 + +0101101 +* +Ve +1e-07 +11.1596703322 -19 33.5 +0 0 + +0101101 +* +Ve +1e-07 +21.4937870735 17.0619814854 33.5 +0 0 + +0101101 +* +Ve +2.9474554248075e-05 +22.7000247518 17.6774193548 33.5 +0 0 + +0101101 +* +Ve +1e-07 +19.6958653043 17 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-15.3220746415 17 33.5 +0 0 + +0101101 +* +Ve +3.30224831783718e-05 +-22.2318937419 22.88 33.5 +0 0 + +0101101 +* +Ve +3.30224831719921e-05 +-22.2318937419 -24.88 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-15.3220746415 -19 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-58 -22 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-58 19.9999999995 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-55.5 -43 38.8 +0 0 + +0101101 +* +Ve +1e-07 +53.5 -43 38.8 +0 0 + +0101101 +* +Ve +1e-07 +-84.5 -14 38.8 +0 0 + +0101101 +* +Ve +1e-07 +84.5 -12 38.8 +0 0 + +0101101 +* +Ve +1e-07 +-84.5 -12 38.8 +0 0 + +0101101 +* +Ve +4.58860415643713e-07 +84.5 -1.99851289317 38.8 +0 0 + +0101101 +* +Ve +2.3959515903456e-07 +71.7672889374 19.1923099849 38.8 +0 0 + +0101101 +* +Ve +1e-07 +46.1440259624 32.8164405787 38.8 +0 0 + +0101101 +* +Ve +1e-07 +5.3 43 38.8 +0 0 + +0101101 +* +Ve +1e-07 +-29.5 43 38.8 +0 0 + +0101101 +* +Ve +1e-07 +5.3 42.2 38 +0 0 + +0101101 +* +Ve +1e-07 +45.7684487121 32.1100825044 38 +0 0 + +0101101 +* +Ve +2.3959515903456e-07 +71.3917116872 18.4859519107 38 +0 0 + +0101101 +* +Ve +4.58860415643713e-07 +83.6999999999 -1.99851071121 38 +0 0 + +0101101 +* +Ve +1e-07 +83.7 -12 38 +0 0 + +0101101 +* +Ve +1e-07 +53.5 -42.2 38 +0 0 + +0101101 +* +Ve +1e-07 +-55.5 -42.2 38 +0 0 + +0101101 +* +Ve +1e-07 +-83.7 -14 38 +0 0 + +0101101 +* +Ve +1e-07 +-83.7 -12 38 +0 0 + +0101101 +* +Ve +1e-07 +-29.5 42.2 38 +0 0 + +0101101 +* +Ve +1e-07 +-22.2318937419 22.88 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-15.3220746415 17 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-15.3220746415 -19 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-22.2318937419 -24.88 37.6 +0 0 + +0101101 +* +Ve +1e-07 +44.5062129265 -25.0619814854 37.6 +0 0 + +0101101 +* +Ve +1e-07 +22.7000247518 17.6774193548 37.6 +0 0 + +0101101 +* +Ve +1e-07 +19.6958653043 17 37.6 +0 0 + +0101101 +* +Ve +1e-07 +11.1596703322 -19 37.6 +0 0 + +0101101 +* +Ve +1e-07 +16.0913576765 -21.0322580645 37.6 +0 0 + +0101101 +* +Ve +3.10235133904724e-05 +-57.9855942354 -22.72 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-57.9855942354 -22.72 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-64.9799919936 -16 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-64.9799919936 -16 37.6 +0 0 + +0101101 +* +Ve +3.10233965806768e-05 +-57.9855942354 20.72 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-57.9855942354 20.72 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-64.9799919936 14 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-64.9799919936 14 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-73.88854382 -16 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-73.88854382 -16 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-77.2958855 -14.0952380952 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-77.2958855 -14.0952380952 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-73.88854382 14 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-73.88854382 14 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-77.2958855 12.0952380952 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-77.2958855 12.0952380952 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-58.3852741073 -22.736 38 +0 0 + +0101101 +* +Ve +1e-07 +-64.9799919936 -16.4 38 +0 0 + +0101101 +* +Ve +1e-07 +-73.88854382 -16.4 38 +0 0 + +0101101 +* +Ve +1e-07 +-77.636619668 -14.3047619048 38 +0 0 + +0101101 +* +Ve +1e-07 +-77.636619668 12.3047619047 38 +0 0 + +0101101 +* +Ve +1e-07 +-73.88854382 14.4 38 +0 0 + +0101101 +* +Ve +1e-07 +-64.9799919936 14.4 38 +0 0 + +0101101 +* +Ve +1e-07 +-58.3852741073 20.736 38 +0 0 + +0101101 +* +Ve +1e-07 +-21.8370469361 22.944 38 +0 0 + +0101101 +* +Ve +1e-07 +-15.3220746415 17.4 38 +0 0 + +0101101 +* +Ve +1e-07 +19.6958653043 17.4 38 +0 0 + +0101101 +* +Ve +1e-07 +22.5283584976 18.0387096774 38 +0 0 + +0101101 +* +Ve +1e-07 +44.6979831419 -25.4130145101 38 +0 0 + +0101101 +* +Ve +1e-07 +15.8095469711 -21.3161290323 38 +0 0 + +0101101 +* +Ve +1e-07 +11.1596703322 -19.4 38 +0 0 + +0101101 +* +Ve +1e-07 +-15.3220746415 -19.4 38 +0 0 + +0101101 +* +Ve +1e-07 +-21.8370469361 -24.944 38 +0 0 + +0101101 +* +Ve +1e-07 +-60.9589041096 -1 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-75.9589041096 -1 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-60.9589041096 -1 32.3 +0 0 + +0101101 +* +Ve +1e-07 +-75.9589041096 -1 32.3 +0 0 + +0101101 +* +Ve +1e-07 +-74.4589041096 -1 32.3 +0 0 + +0101101 +* +Ve +1e-07 +-62.4589041096 -1 32.3 +0 0 + +0101101 +* +Ve +0.000371546529634028 +5.3 45 50.9999999935 +0 0 + +0101101 +* +Ve +0.000371546529634028 +23 43.2221732213 50.9999999935 +0 0 + +0101101 +* +Ve +0.0029973161977681 +-86.5 -12 50.9999999935 +0 0 + +0101101 +* +Ve +0.0029973161977681 +-29.5 45 50.9999999935 +0 0 + +0101101 +* +Ve +1.00000005024296e-07 +33.5424391124209 -23.5312774441886 -40.8531078340116 +0 0 + +0101101 +* +Ve +1e-07 +-12.1983481148 -45 23.4999999945 +0 0 + +0101101 +* +Ve +1.00000005024296e-07 +26.471700351376 -26.4610038645032 -40.852619834181 +0 0 + +0101101 +* +Ve +1e-07 +-19.2694159267 -47.9289321881 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +99.2405384022422 -23.5238976185296 -40.853267178038 +0 0 + +0101101 +* +Ve +1e-07 +53.4997515897 -45 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +53.4997515897 -45 50.9999999935 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +21.4012022033685 -31.5326412086983 -40.8517923194166 +0 0 + +0101101 +* +Ve +1e-07 +-24.3404837385 -53 23.4999999945 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +23.8014164167279 69.3965599265286 -40.8680233153706 +0 0 + +0101101 +* +Ve +1e-07 +-21.9289321881 47.9289321881 23.4999999945 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +30.8728131901195 66.4684220832933 -40.8675696158445 +0 0 + +0101101 +* +Ve +1e-07 +-14.8578643763 45 23.4999999945 +0 0 + +0101101 +* +Ve +0.000550097116052948 +51.0306774391854 66.4706864033486 -40.8676185066844 +0 0 + +0101101 +* +Ve +0.000371546416342552 +5.3 45 23.4999999945 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +18.7297790050514 74.4670580110944 -40.8688262314216 +0 0 + +0101101 +* +Ve +1e-07 +-27 53 23.4999999945 +0 0 + +0101101 +* +Ve +0.000144415167202496 +-78.862687877 16.500914749 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-57.7899311821 53 23.4999999945 +0 0 + +0101101 +* +Ve +1.00000007944109e-07 +-12.0601519827061 74.4635993977525 -40.8687515535903 +0 0 + +0101101 +* +Ve +0.000147176562521838 +-33.1288086114401 37.9621477593247 -40.862832918871 +0 0 + +0101101 +* +Ve +0.000147176562521838 +-40.7629249373262 9.51157980282678 -40.8582408729107 +0 0 + +0101101 +* +Ve +0.000144415167202496 +-86.5 -11.9487958602 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-86.5 -14 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-86.5 -14 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-40.762694526076 7.46037570247262 -40.8579111251571 +0 0 + +0101101 +* +Ve +0.000550097116052948 +68.73087702941 64.6948558505538 -40.8673756373868 +0 0 + +0101101 +* +Ve +0.000371546416342552 +23 43.2221811833 23.4999999945 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +-16.7230590741833 20.4630759734509 -40.8600592901429 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +-28.7230589984407 20.4617280211006 -40.8600301853694 +0 0 + +0101101 +* +Ve +1.00000010658141e-07 +31.2769406228463 20.4684677828522 -40.8601757092372 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +47.2769405218662 20.4702650526526 -40.860214515602 +0 0 + +0101101 +* +Ve +1e-07 +47.0829690879 34.5823357644 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +72.706232063 20.9582051707 50.9999999935 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +118.439609685551 42.4364637354641 -40.8639170794943 +0 0 + +0101101 +* +Ve +1e-07 +72.706232063 20.9582051707 23.4999999945 +0 0 + +0101101 +* +Ve +1.00000035985402e-07 +92.8148164769855 56.0577158223684 -40.8660451227242 +0 0 + +0101101 +* +Ve +1e-07 +47.0829690879 34.5823357644 23.4999999945 +0 0 + +0101101 +* +Ve +1.00000001776357e-07 +132.235956258523 19.4812901033143 -40.8602600547928 +0 0 + +0101101 +* +Ve +1e-07 +86.5 -1.99851834808 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +86.5 -1.99851834808 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +86.5 -12 23.4999999945 +0 0 + +0101101 +* +Ve +1.00000001776357e-07 +132.237079722466 9.47980864372856 -40.8586522352477 +0 0 + +0101101 +* +Ve +1e-07 +86.5 -12 50.9999999935 +0 0 + +0101101 +* +Ve +1.00000005329071e-07 +-31.6804741573758 -14.4588458218458 -40.8544092899643 +0 0 + +0101101 +* +Ve +1e-07 +-77.4202418693 -35.9202418693 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-60.3404837385 -53 23.4999999945 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +-14.5987975694037 -31.5366850657493 -40.8517050050959 +0 0 + +0101101 +* +Ve +1.00000003202373e-07 +12.5382037755084 -0.53363698866011 -40.8567543337737 +0 0 + +0101101 +* +Ve +1.00000003202373e-07 +-1.06179613864993 -0.535164667990468 -40.8567213483637 +0 0 + +0101101 +* +Ve +1.00000003108624e-07 +12.5334859259674 41.4663622036557 -40.8635061754754 +0 0 + +0101101 +* +Ve +1.00000003108624e-07 +-1.066513988191 41.4648345243254 -40.8634731900653 +0 0 + +0101101 +* +Ve +1.00000014210855e-07 +88.18340194708 22.6362168944945 -40.8606611863324 +0 0 + +0101101 +* +Ve +1.00000014210855e-07 +69.2889608972083 12.3113808434831 -40.8589558967706 +0 0 + +0101101 +* +Ve +1.40961161397861e-05 +-63.3801189832 -27.4193912828 13 +0 0 + +0101101 +* +Ve +8.25197284423225e-06 +-16.8129206538 -28.1935283908 13 +0 0 + +0101101 +* +Ve +1.40961161397861e-05 +-63.3801189832 -27.4193912828 7 +0 0 + +0101101 +* +Ve +8.25197284423225e-06 +-16.8129206538 -28.1935283908 7 +0 0 + +0101101 +* +Ve +1.50991509780834e-06 +-10.0500417363 -23.0000015099 13 +0 0 + +0101101 +* +Ve +1.50991509780834e-06 +-10.0500417363 -23.0000015099 7 +0 0 + +0101101 +* +Ve +1.47353993359151e-05 +-53.6384116116 23.1613367021 7 +0 0 + +0101101 +* +Ve +1.47353993359151e-05 +-53.6384116116 23.1613367021 13 +0 0 + +0101101 +* +Ve +2.41813512096272e-06 +-26.4742074798 23.612876573 13 +0 0 + +0101101 +* +Ve +2.41813512096272e-06 +-26.4742074798 23.612876573 7 +0 0 + +0101101 +* +Ve +2.23812238144012e-06 +-10.0500417363 11 13 +0 0 + +0101101 +* +Ve +2.23812238144012e-06 +-10.0500417363 11 7 +0 0 + +0101101 +* +Ve +1e-07 +8.17561682539 11.0000000969 13 +0 0 + +0101101 +* +Ve +1.00000014210855e-07 +8.17561682539 11.0000000969 7 +0 0 + +0101101 +* +Ve +4.85179791956173e-05 +18.595795595 14.5678921097 13 +0 0 + +0101101 +* +Ve +4.85179791956173e-05 +18.595795595 14.5678921097 7 +0 0 + +0101101 +* +Ve +9.78915945777831e-05 +53.4692286022 -15.5438598581 13 +0 0 + +0101101 +* +Ve +9.78915945777831e-05 +53.4692286022 -15.5438598581 7 +0 0 + +0101101 +* +Ve +3.57702388541758e-06 +14.9819778151 -19.0864479255 13 +0 0 + +0101101 +* +Ve +3.57702388541758e-06 +14.9819778151 -19.0864479255 7 +0 0 + +0101101 +* +Ve +2.12504818416707e-07 +1.94762488955 -13 13 +0 0 + +0101101 +* +Ve +2.12504818416707e-07 +1.94762488955 -13 7 +0 0 + +0101101 +* +Ve +2.05690205655841e-06 +-10.0500417363 -12.9999979431 7 +0 0 + +0101101 +* +Ve +2.05690205655841e-06 +-10.0500417363 -12.9999979431 13 +0 0 + +0101101 +* +Ve +2.61637537467713e-06 +-26.4742051493 -25.612877204 13 +0 0 + +0101101 +* +Ve +2.61637537467713e-06 +-26.4742051493 -25.612877204 7 +0 0 + +0101101 +* +Ve +1.4535112141792e-05 +-53.6383974584 -25.1613334209 13 +0 0 + +0101101 +* +Ve +0.00112587558913171 +-53.6383974584 -25.1613334209 7 +0 0 + +0101101 +* +Ve +2.04518801056886e-06 +1.94762488955 -23 13 +0 0 + +0101101 +* +Ve +2.04518801056886e-06 +1.94762488955 -23 7 +0 0 + +0101101 +* +Ve +3.89399877296503e-06 +7.3147213727 -25.5061936553 13 +0 0 + +0101101 +* +Ve +3.89399877296503e-06 +7.3147213727 -25.5061936553 7 +0 0 + +0101101 +* +Ve +0.000140504468508401 +62.1795402395 -20.4561415476 13 +0 0 + +0101101 +* +Ve +0.000140504468508401 +62.1795402395 -20.4561415476 7 +0 0 + +0101101 +* +Ve +7.59962679524456e-05 +12.4663281178 22.4690972667 13 +0 0 + +0101101 +* +Ve +7.59962679524456e-05 +12.4663281178 22.4690972667 7 +0 0 + +0101101 +* +Ve +1.70641706663236e-06 +8.1756168254 20.9999982936 13 +0 0 + +0101101 +* +Ve +1.70641706663236e-06 +8.1756168254 20.9999982936 7 +0 0 + +0101101 +* +Ve +1.03725141244299e-06 +-10.0500417363 21 7 +0 0 + +0101101 +* +Ve +1.03725141244299e-06 +-10.0500417363 21 13 +0 0 + +0101101 +* +Ve +7.88856919964979e-06 +-16.8129282627 26.1935263512 13 +0 0 + +0101101 +* +Ve +7.88856919964979e-06 +-16.8129282627 26.1935263512 7 +0 0 + +0101101 +* +Ve +1.45373227877628e-05 +-63.3801326675 25.4193944552 13 +0 0 + +0101101 +* +Ve +1.45373227877628e-05 +-63.3801326675 25.4193944552 7 +0 0 + +0101101 +* +Ve +1.09681772921185e-05 +-67.2826849149 20.6366012954 7 +0 0 + +0101101 +* +Ve +1e-07 +-67.2826803448 20.6365913247 13 +0 0 + +0101101 +* +Ve +2.61847261823001e-05 +-70.1993377411 16.0912726747 13 +0 0 + +0101101 +* +Ve +2.61847261823001e-05 +-70.1993377411 16.0912726747 7 +0 0 + +0101101 +* +Ve +4.54417690769802e-06 +-63.1160101735 11.5459683188 7 +0 0 + +0101101 +* +Ve +1e-07 +-63.1160120669 11.5459724497 13 +0 0 + +0101101 +* +Ve +1e-07 +-67.282679463 -22.6365903175 13 +0 0 + +0101101 +* +Ve +2.65464597541343e-06 +-67.2826783569 -22.6365879043 7 +0 0 + +0101101 +* +Ve +2.47616247640209e-05 +-70.1993377411 -18.0912726864 13 +0 0 + +0101101 +* +Ve +2.47616247569155e-05 +-70.1993377411 -18.0912726864 7 +0 0 + +0101101 +* +Ve +0.00112587558913171 +-63.1160099201 -13.545968073 7 +0 0 + +0101101 +* +Ve +1e-07 +-63.116011955 -13.5459725127 13 +0 0 + +0101101 +* +Ve +1e-07 +-13.918131324 -107.60845785 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +26.9463390627 -111.816453577 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +26.9463390627 -111.816453577 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +-13.918131324 -107.60845785 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +19.2519069336 -111.02412378 41.9999999963 +0 0 + +0101101 +* +Ve +1.0291214322041e-07 +65.0001874719971 -89.546722898523 -8.84257061858928 +0 0 + +0101101 +* +Ve +1.0655606251693e-07 +19.2519069357 -111.02412378 32.9999999942 +0 0 + +0101101 +* +Ve +1.0472468314241e-07 +-7.6060753471 -108.258438244 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-7.60607535185 -108.258438244 41.9999999963 +0 0 + +0101101 +* +Ve +1.00142171473284e-07 +38.1418946859354 -86.7840543555976 -8.84295008351898 +0 0 + +0101101 +* +Ve +1e-07 +87.4999999998 -28.1011259381 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +87.4999999998 -28.1011259381 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +87.4999999998 9.78680670616 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +87.4999999998 9.78680670616 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +-164.725782427 -10.1239633345 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +-154.507054498 -16.7295136466 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +-164.725782427 -10.1239633345 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-154.507054498 -16.7295136466 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-160.470729776 31.1974838296 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-160.470729776 31.1974838296 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +-161.199165614 24.1235354038 41.9999999963 +0 0 + +0101101 +* +Ve +1.0220968380819e-07 +-115.466065041056 45.5806637314289 -8.86385903363551 +0 0 + +0101101 +* +Ve +1.05693566996048e-07 +-161.199165614 24.1235354054 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-163.759985554 -0.744966704868 41.9999999963 +0 0 + +0101101 +* +Ve +1.01135462166146e-07 +-118.024091492073 20.7118744473836 -8.859855012078 +0 0 + +0101101 +* +Ve +1.06029014692561e-07 +-163.759985554 -0.744966709209 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-150.035529897 36.0902916054 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-150.035529897 36.0902916054 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +52.734826902 104.680750665 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +6.42273519593 109.449712116 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +6.42273519593 109.449712116 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +52.734826902 104.680750665 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +43.5765973829 105.62381417 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +12.6900722254 108.804336629 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +43.5765973847 105.62381417 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +12.6900722199 108.804336631 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +18.1720364778 68.8390811313 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +18.1720364714 68.8390811331 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +26.2864929577 69.5497187232 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +26.2864929577 69.5497187232 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +18.310383011 70.1900120019 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +27.2234599515 69.858278226 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +27.2234599506 69.8582782256 51.000000003 +0 0 + +0101101 +* +Ve +1e-07 +19.0988811881 91.3755089938 51.000000003 +0 0 + +0101101 +* +Ve +1e-07 +19.0988811885 91.375508994 41.9999999963 +0 0 + +0101101 +* +Ve +5.66660184374918e-05 +23.7765141778 93.1417120015 50.9999999941 +0 0 + +0101101 +* +Ve +1e-07 +23.7765141778 93.1417120015 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +32.8343241681 72.0247748446 41.9999999963 +0 0 + +0101101 +* +Ve +0.411725740399454 +78.510634155835 93.6090966620858 -8.87201693539752 +0 0 + +0101101 +* +Ve +0.35309100850225 +77.500837863881 93.3008242379102 -8.90696354234766 +0 0 + +0101101 +* +Ve +0.35309100850225 +77.500837863881 93.3008242379102 -6.87196354234766 +0 0 + +0101101 +* +Ve +5.66660184374918e-05 +31.9011446799 71.6245007695 50.9999999979 +0 0 + +0101101 +* +Ve +1e-07 +32.8343241719 72.0247748465 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +31.9011446799 71.6245007695 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +41.1491691016 81.9203816206 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +41.1491691053 81.9203816209 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +9.85083089407 81.0796183773 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +9.85083090528 81.0796183766 32.9999999988 +0 0 + +0101101 +* +Ve +0.000630831724787482 +28.5386255935 101.847047723 41.9999999963 +0 0 + +0101101 +* +Ve +0.000630831724787482 +26.3097969048 98.5255536806 41.9999999963 +0 0 + +0101101 +* +Ve +0.000630831725266824 +28.5386255935 101.847047723 32.9999999988 +0 0 + +0101101 +* +Ve +0.000630831725266824 +26.3097969048 98.5255536806 32.9999999988 +0 0 + +0101101 +* +Ve +2.52731547348927e-05 +30.3797274113 80.40992642 32.9999999988 +0 0 + +0101101 +* +Ve +2.52731547348927e-05 +20.6202725925 82.59007358 32.9999999988 +0 0 + +0101101 +* +Ve +1.03812668906257e-07 +66.3467671740864 104.065132689996 -24.3736987941752 +0 0 + +0101101 +* +Ve +1.0381267245897e-07 +76.1064668266942 101.88608184529 -24.3733719883424 +0 0 + +0101101 +* +Ve +1.00080408534864e-07 +72.034565214868 120.005511683204 2.12372530854735 +0 0 + +0101101 +* +Ve +1.00338144404156e-07 +74.2630207869285 123.327256024821 2.1231859455611 +0 0 + +0101101 +* +Ve +1.00058021757414e-07 +26.3097969048 98.5255536806 23.4999999945 +0 0 + +0101101 +* +Ve +1.00339028987881e-07 +28.5386255935 101.847047723 23.4999999945 +0 0 + +0101101 +* +Ve +1.03499155125036e-07 +3.6202725862 -82.4099264176 32.9999999942 +0 0 + +0101101 +* +Ve +1.04305313143407e-07 +49.3653016840907 -60.9367737335366 -24.3471324704717 +0 0 + +0101101 +* +Ve +1.03549611723693e-07 +13.379727405 -84.5900735775 32.9999999942 +0 0 + +0101101 +* +Ve +1.04305308752012e-07 +59.1250013366985 -63.1158245781923 -24.3468056646389 +0 0 + +0101101 +* +Ve +8.49983570181858e-05 +65.6836102045612 -63.2106496112328 3.15319414849342 +0 0 + +0101101 +* +Ve +1.06238546284113e-07 +19.9382588831 -84.6900561848 41.9999999963 +0 0 + +0101101 +* +Ve +1.0334106270306e-07 +-2.9382588831 -82.3099438152 41.9999999963 +0 0 + +0101101 +* +Ve +8.49983570181858e-05 +42.8068252253253 -60.8331069920618 3.15286700702181 +0 0 + +0101101 +* +Ve +1.00242880193034e-07 +54.4373540128975 -79.1681298627492 2.15578650929474 +0 0 + +0101101 +* +Ve +1.00239542493619e-07 +8.69021268795 -100.646112499 41.9999999963 +0 0 + +0101101 +* +Ve +1.00272166413056e-07 +50.47184012767 -79.6922478049064 2.15588031200078 +0 0 + +0101101 +* +Ve +1.00272152202201e-07 +4.72463995369 -101.169785001 41.9999999963 +0 0 + +0101101 +* +Ve +1.00240775504328e-07 +8.69021268795 -100.646112499 32.9999999942 +0 0 + +0101101 +* +Ve +1.00242519797009e-07 +8.69021268796 -100.646112499 23.4999999945 +0 0 + +0101101 +* +Ve +1.00272308403991e-07 +4.72463995369 -101.169785001 32.9999999942 +0 0 + +0101101 +* +Ve +1.00273922690009e-07 +4.72463995369 -101.169785001 23.4999999945 +0 0 + +0101101 +* +Ve +0.000476662432846974 +-4.92975828651 -82.1246482233 41.9999999963 +0 0 + +0101101 +* +Ve +0.000476662432846974 +9.87535177534 -70.0702417176 41.9999999963 +0 0 + +0101101 +* +Ve +0.000476662362377475 +21.9297582795 -84.8753517757 41.9999999963 +0 0 + +0101101 +* +Ve +6.56648971537116e-05 +67.675093748944 -63.398549821695 -14.846780673077 +0 0 + +0101101 +* +Ve +2.46303273752313e-05 +6427.06540211 -143.008132232 4403.98500569 +0 0 + +0101101 +* +Ve +1.03681419660844e-07 +6428.55155835 -152.929163149 4397.23115603 +0 0 + +0101101 +* +Ve +1.01176774249251e-07 +6437.32765661 -156.595592568 4404.54808124 +0 0 + +0101101 +* +Ve +1.05651187799457e-07 +6435.84150037 -146.674561648 4411.3019309 +0 0 + +0101101 +* +Ve +1.05651187799457e-07 +40.8152616908427 -60.6509287591077 -14.8471577159283 +0 0 + +0101101 +* +Ve +0.000922809706642635 +6437.04261357 -171.360788509 4391.51831134 +0 0 + +0101101 +* +Ve +0.000922809706642635 +6433.13775127 -166.876857388 4390.71431377 +0 0 + +0101101 +* +Ve +1e-07 +9.87535177307 -70.0702417174 32.9999999942 +0 0 + +0101101 +* +Ve +1.04116629323642e-07 +6439.866591 -143.774359063 4407.92739828 +0 0 + +0101101 +* +Ve +1.04116629323642e-07 +6446.83780462 -155.986881408 4405.74664523 +0 0 + +0101101 +* +Ve +1.06938984841991e-07 +6431.09049274 -140.107929646 4400.61047307 +0 0 + +0101101 +* +Ve +6.57668382679951e-05 +6427.09158353 -147.737415258 4389.28356348 +0 0 + +0101101 +* +Ve +1.01755327140418e-07 +-142.379727409 10.221242007 32.9999999942 +0 0 + +0101101 +* +Ve +7.43350139570617e-07 +-96.6451026278059 31.6779928240311 -24.3616693268333 +0 0 + +0101101 +* +Ve +7.43350139570617e-07 +-86.8854029750982 29.4989419793654 -24.3613425212822 +0 0 + +0101101 +* +Ve +1.01828102148833e-07 +-132.62027259 8.04109484708 32.9999999942 +0 0 + +0101101 +* +Ve +0.000449715267136639 +-125.003015794 8.85660354182 38.9999999959 +0 0 + +0101101 +* +Ve +2.00830912297046e-06 +-125.065035524 7.85772482306 38.9999999963 +0 0 + +0101101 +* +Ve +0.000475107180760849 +-90.4931687128146 43.0260664308635 -8.86350848356392 +0 0 + +0101101 +* +Ve +0.00050148857944976 +6521.99308559 -128.938733608 4518.63692317 +0 0 + +0101101 +* +Ve +0.0003509258637774 +-136.226556396 21.5661328978 41.9999999958 +0 0 + +0101101 +* +Ve +1.02125477551435e-07 +-149.93292772 10.4243460221 41.9999999963 +0 0 + +0101101 +* +Ve +9.23892607352538e-05 +-104.198259503446 31.8846692444593 3.13831573651325 +0 0 + +0101101 +* +Ve +9.23892607352538e-05 +-79.3321136947619 29.3011072698064 3.13867120276097 +0 0 + +0101101 +* +Ve +1.10170434366582e-07 +-79.3321425830394 29.2991781671336 -8.86132863287371 +0 0 + +0101101 +* +Ve +0.000119908460899761 +-138.773443598 -3.30379604423 41.9999999963 +0 0 + +0101101 +* +Ve +0.000474821301431159 +-93.0372622611912 18.1558518761672 -8.85950426273189 +0 0 + +0101101 +* +Ve +1.04525740792747e-07 +-125.20676677 6.86700922781 38.9999999962 +0 0 + +0101101 +* +Ve +1.10314884536492e-07 +6523.46776555 -138.783153101 4511.93522757 +0 0 + +0101101 +* +Ve +0.000630831686940994 +-157.648508202 12.0019382692 41.9999999963 +0 0 + +0101101 +* +Ve +0.000630831686940994 +-154.156869149 10.0504115014 41.9999999963 +0 0 + +0101101 +* +Ve +1.06000249313408e-07 +-93.0372767042187 18.154887324938 -14.8595041862458 +0 0 + +0101101 +* +Ve +1.06656333714116e-07 +6519.44267493 -141.68335569 4515.30976019 +0 0 + +0101101 +* +Ve +1.04717936324596e-07 +6527.46246082 -145.033817141 4521.9961226 +0 0 + +0101101 +* +Ve +1.04361185247513e-07 +6525.98778086 -135.189397648 4528.6978182 +0 0 + +0101101 +* +Ve +1.04767255912481e-07 +6517.96799497 -131.838936195 4522.01145579 +0 0 + +0101101 +* +Ve +1.07025283566245e-07 +-90.4931831551439 43.0251018815574 -14.863508406492 +0 0 + +0101101 +* +Ve +1.01732939147688e-07 +6542.20737015 -148.005984977 4537.02922889 +0 0 + +0101101 +* +Ve +1.01732939147688e-07 +6538.30250785 -143.522053858 4536.22523132 +0 0 + +0101101 +* +Ve +1e-07 +-125.20676677 6.86700922781 32.9999999941 +0 0 + +0101101 +* +Ve +1e-07 +-125.065035524 7.85772482306 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-125.003015794 8.85660354182 32.9999999939 +0 0 + +0101101 +* +Ve +1.00281232242597e-07 +-157.648508202 12.0019382692 32.9999999942 +0 0 + +0101101 +* +Ve +1.00369366674668e-07 +-154.156869149 10.0504115014 32.9999999942 +0 0 + +0101101 +* +Ve +1.00369381322904e-07 +-108.422161309339 31.5100994998874 2.13838610699716 +0 0 + +0101101 +* +Ve +1.00279366724459e-07 +-111.914019554666 33.461234016596 2.13808085180555 +0 0 + +0101101 +* +Ve +1.00369366674668e-07 +-154.156869149 10.0504115014 23.4999999945 +0 0 + +0101101 +* +Ve +1.00282383307975e-07 +-157.648508202 12.0019382692 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-9.17847359699 87.0686582814 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-9.17847359699 87.0686582814 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-25.0117471993 73.726014056 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-25.0117471993 73.726014056 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-124.373731825 33.4477824623 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-124.373731825 33.4477824623 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-103.295344286 37.0207667209 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-103.295344286 37.0207667209 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-142.148661989 -18.0021121258 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-142.148661989 -18.0021121258 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-124.531143095 -24.1990590064 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-124.531143095 -24.1990590064 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-14.7270686351 -105.27511584 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-30.8054587727 -84.7848508575 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-30.8054587727 -84.7848508575 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-14.7270686351 -105.27511584 23.4999999945 +0 0 + +0101101 +* +Ve +1.02347842840421e-07 +-5.5 -2.39712769302 4.38791280945 +0 0 + +0101101 +* +Ve +1.02347842840421e-07 +-5.5 2.39712769302 -4.38791280945 +0 0 + +0101101 +* +Ve +5.96402054771349e-07 +-5.03396815534 9.21461689985 -4.4408920985e-16 +0 0 + +0101101 +* +Ve +5.96402054771349e-07 +5.03396815534 -9.21461689985 -4.4408920985e-16 +0 0 + +0101101 +* +Ve +1.02347150061263e-07 +-5.5 -1.19856384651 2.19395640473 +0 0 + +0101101 +* +Ve +1.02347150061263e-07 +-5.5 1.19856384651 -2.19395640473 +0 0 + +0101101 +* +Ve +1.00001266566094e-07 +-69 16 0 +0 0 + +0101101 +* +Ve +1e-07 +-69 16 7 +0 0 + +0101101 +* +Ve +1.00001542305318e-07 +-21.183389233483 33.9511193036855 -47.8622169594738 +0 0 + +0101101 +* +Ve +1.00001166004743e-07 +-61 16 0 +0 0 + +0101101 +* +Ve +1e-07 +-61 16 7 +0 0 + +0101101 +* +Ve +1.0639400762228e-07 +1.91770215442 -3.51033024756 0 +0 0 + +0101101 +* +Ve +1e-07 +-61 -18 7 +0 0 + +0101101 +* +Ve +1e-07 +-69 -18 7 +0 0 + +0101101 +* +Ve +1e-07 +53.4997515897 -45 0 +0 0 + +0101101 +* +Ve +1e-07 +86.5 -12 0 +0 0 + +0101101 +* +Ve +1e-07 +86.5 -1.99851834808 0 +0 0 + +0101101 +* +Ve +1e-07 +72.706232063 20.9582051707 0 +0 0 + +0101101 +* +Ve +1e-07 +47.0829690879 34.5823357644 0 +0 0 + +0101101 +* +Ve +7.96200796707952e-06 +23 43.2221811833 0 +0 0 + +0101101 +* +Ve +1e-07 +5.3 45 0 +0 0 + +0101101 +* +Ve +1e-07 +-21.9289321881 47.9289321881 0 +0 0 + +0101101 +* +Ve +1e-07 +-27 53 0 +0 0 + +0101101 +* +Ve +1e-07 +-78.862687877 16.500914749 0 +0 0 + +0101101 +* +Ve +2.29990299937802e-05 +-86.5 -11.9487958602 0 +0 0 + +0101101 +* +Ve +1e-07 +-86.5 -14 0 +0 0 + +0101101 +* +Ve +1e-07 +-77.4202418693 -35.9202418693 0 +0 0 + +0101101 +* +Ve +1e-07 +-60.3404837385 -53 0 +0 0 + +0101101 +* +Ve +1e-07 +-24.3404837385 -53 0 +0 0 + +0101101 +* +Ve +1e-07 +-19.2694159267 -47.9289321881 0 +0 0 + +0101101 +* +Ve +1e-07 +-77.4589041096 -1 0 +0 0 + +0101101 +* +Ve +1e-07 +-59.4589041096 -1 0 +0 0 + +0101101 +* +Ve +1e-07 +-62.4589041096 -1 3 +0 0 + +0101101 +* +Ve +1e-07 +-74.4589041096 -1 3 +0 0 + +0101101 +* +Ve +1e-07 +-17.4589041096 -1 0 +0 0 + +0101101 +* +Ve +1e-07 +4.54109589041 -1 0 +0 0 + +0101101 +* +Ve +1e-07 +1.54109589041 -1 3 +0 0 + +0101101 +* +Ve +1e-07 +-14.4589041096 -1 3 +0 0 + +0101101 +* +Ve +1e-07 +-32.952835102 -18.1501162699 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-32.101756943 -17.6851701526 -1.33226762955e-14 +0 0 + +0101101 +* +Ve +1e-07 +-47.047164898 -25.8498837301 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-47.898243057 -26.3148298474 -1.33226762955e-14 +0 0 + +0101101 +* +Ve +1e-07 +-32.952835102 23.8498837301 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-32.101756943 24.3148298474 -1.33226762955e-14 +0 0 + +0101101 +* +Ve +1e-07 +-47.047164898 16.1501162699 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-47.898243057 15.6851701526 -1.33226762955e-14 +0 0 + +0101101 +* +Ve +1e-07 +-46.8 -22 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-33.2 -22 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-46.8 20 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-33.2 20 5.5 +0 0 + +0101101 +* +Ve +1.00001682254241e-07 +-69 -18 0 +0 0 + +0101101 +* +Ve +1.00003034017523e-07 +-21.1795700219475 -0.0488800424765521 -47.8567511828606 +0 0 + +0101101 +* +Ve +1.00001596076205e-07 +-61 -18 0 +0 0 + +0101101 +* +Ve +1e-07 +22.4690092573 -9.75310646325 -7.1054273576e-15 +0 0 + +0101101 +* +Ve +1e-07 +43.5309907427 1.75310646325 -7.1054273576e-15 +0 0 + +0101101 +* +Ve +1e-07 +-12.1983481148 -45 0 +0 0 + +0101101 +* +Ve +1e-07 +-57.7899311821 53 0 +0 0 + +0101101 +* +Ve +1e-07 +-14.8578643763 45 0 +0 0 + +0101101 +* +Ve +1.02651331632989e-07 +3.64363409339 -6.66962747037 -1.7763568394e-15 +0 0 + +0101101 +* +Ve +1.00003806194021e-07 +-22.9051470669533 -3.20837107736592 -47.8562391140574 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +-5.41750858623 9.91668294936 0 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +5.41750858623 -9.91668294936 0 +0 0 + +0101101 +* +Ve +1.00001543902227e-07 +-22.9089662784888 30.7916282687961 -47.8617048906707 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +-7.33521074064 13.4270131969 -2.77555756156e-17 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +7.33521074064 -13.4270131969 -2.77555756156e-17 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +-4.45865750902 8.16151782558 0 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +4.45865750902 -8.16151782558 0 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +5.84899157097 -10.7065072551 0 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +-5.84899157097 10.7065072551 0 +0 0 + +0101101 +* +Ve +1e-07 +4.123059632 -7.54721003226 0 +0 0 + +0101101 +* +Ve +1e-07 +-4.123059632 7.54721003226 0 +0 0 + +0101101 +* +Ve +1e-07 +3.74264917236 -6.85087335668 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-3.74264917236 6.85087335668 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +3.35597877023 -6.14307793323 4 +0 0 + +0101101 +* +Ve +1e-07 +3.35597877023 -6.14307793323 4.4 +0 0 + +0101101 +* +Ve +1e-07 +-3.35597877023 6.14307793323 4 +0 0 + +0101101 +* +Ve +1.58298023783649e-07 +-3.35597877023 6.14307793323 4.4 +0 0 + +0101101 +* +Ve +1e-07 +3.91329563872 -7.16323961811 6 +0 0 + +0101101 +* +Ve +5.66655918190863e-07 +-3.91329530182 7.16323980216 6 +0 0 + +0101101 +* +Ve +1e-07 +5.41750858623 -9.91668294936 1 +0 0 + +0101101 +* +Ve +1e-07 +-5.41750858623 9.91668294936 1 +0 0 + +0101101 +* +Ve +1e-07 +5.75310646325 -10.5309907427 1.5 +0 0 + +0101101 +* +Ve +1e-07 +-5.75310646325 10.5309907427 1.5 +0 0 + +0101101 +* +Ve +1e-07 +-5.65722135553 10.3554742303 1.5 +0 0 + +0101101 +* +Ve +1e-07 +5.65722135553 -10.3554742303 1.5 +0 0 + +0101101 +* +Ve +1e-07 +3.11626600093 -5.70428665229 3.13397459622 +0 0 + +0101101 +* +Ve +1e-07 +-3.11626600093 5.70428665229 3.13397459622 +0 0 + +0101101 +* +Ve +1e-07 +4.123059632 -7.54721003226 0.4 +0 0 + +0101101 +* +Ve +1e-07 +-4.123059632 7.54721003226 0.4 +0 0 + +0101101 +* +Ve +1e-07 +4.26688729358 -7.81048480082 0.7 +0 0 + +0101101 +* +Ve +1e-07 +-4.26688729358 7.81048480082 0.7 +0 0 + +0101101 +* +Ve +1e-07 +4.45865750902 -8.16151782558 0.4 +0 0 + +0101101 +* +Ve +1e-07 +-4.45865750902 8.16151782558 0.4 +0 0 + +0101101 +* +Ve +1e-07 +4.31482984744 -7.89824305701 0.7 +0 0 + +0101101 +* +Ve +1e-07 +-4.31482984744 7.89824305701 0.7 +0 0 + +0101101 +* +Ve +1e-07 +5.75310646325 -10.5309907427 4.8 +0 0 + +0101101 +* +Ve +1e-07 +-5.75310646325 10.5309907427 4.8 +0 0 + +0101101 +* +Ve +1e-07 +-5.17779581693 9.47789166842 6 +0 0 + +0101101 +* +Ve +1e-07 +5.17779581693 -9.47789166842 6 +0 0 + +0101101 +* +Ve +0.000487983936926011 +-160.266636487 56.69890628 73.2421407602 +0 0 + +0101101 +* +Ve +1e-07 +-188.522484958 71.4698253653 71.9400326049 +0 0 + +0101101 +* +Ve +1e-07 +-181.110095813 85.6492642529 71.9400326049 +0 0 + +0101101 +* +Ve +0.000487983936926011 +-152.854247342 70.8783451675 73.2421407602 +0 0 + +0101101 +* +Ve +1e-07 +-233.211039372 -11.5985734727 99.3697234189 +0 0 + +0101101 +* +Ve +1.00000014210855e-07 +-201.545634400267 0.352904847656218 16.1436192527176 +0 0 + +0101101 +* +Ve +1e-07 +-152.888974418 142.3788324 103.07118777 +0 0 + +0101101 +* +Ve +1.00000014210855e-07 +-121.373864241589 153.75847653789 16.118765016338 +0 0 + +0101101 +* +Ve +1e-07 +-163.708572643 118.102481134 62.4700348854 +0 0 + +0101101 +* +Ve +1e-07 +-159.596575974 127.63810153 81.4100303195 +0 0 + +0101101 +* +Ve +1e-07 +-210.036004798 29.4809880867 62.4700348854 +0 0 + +0101101 +* +Ve +1e-07 +-205.924008129 39.0166084833 81.4100303195 +0 0 + +0101101 +* +Ve +1e-07 +-227.437527968 -2.97222879417 71.9400326082 +0 0 + +0101101 +* +Ve +1e-07 +-220.025138824 11.2072100934 71.9400326082 +0 0 + +0101101 +* +Ve +1e-07 +-121.928486087 136.919662972 104.497933259 +0 0 + +0101101 +* +Ve +1e-07 +-206.646734792 -25.4852275546 100.593880523 +0 0 + +0101101 +* +Ve +8.5350593839157e-06 +-121.121317446 136.777337362 85.3677905281 +0 0 + +0101101 +* +Ve +8.5350593839157e-06 +-79.8292691079 129.496435151 47 +0 0 + +0101101 +* +Ve +1e-07 +-68.6159514141 127.519224699 47 +0 0 + +0101101 +* +Ve +1.00000096644261e-07 +-40.3933384112652 139.488804234212 16.1208640385053 +0 0 + +0101101 +* +Ve +0.000304551676750397 +-142.867014818 95.1791723271 85.3677905281 +0 0 + +0101101 +* +Ve +1e-07 +-131.280865405 117.812915395 90.7012225158 +0 0 + +0101101 +* +Ve +0.000424487417004458 +-128.192878721 123.249880969 85.3677905281 +0 0 + +0101101 +* +Ve +7.86574424828166e-06 +-205.945074179 -25.4852275546 85.3677905281 +0 0 + +0101101 +* +Ve +0.000304551794150692 +-189.194446974 6.55767928001 85.3677905281 +0 0 + +0101101 +* +Ve +1e-07 +-177.608297561 29.1914223482 90.7012225158 +0 0 + +0101101 +* +Ve +0.000424487753343201 +-174.520310876 34.6283879216 85.3677905281 +0 0 + +0101101 +* +Ve +1.00000096644261e-07 +-23.0283501000378 137.971530143338 16.121066149645 +0 0 + +0101101 +* +Ve +1e-07 +-51.2511336474 126 47 +0 0 + +0101101 +* +Ve +0.000424487753343201 +-173.464986325 5.38623635944 56.1690037931 +0 0 + +0101101 +* +Ve +1e-07 +-195.848828039 17.0875276908 55.1374940554 +0 0 + +0101101 +* +Ve +1e-07 +-188.234019392 34.7460839809 90.2115596742 +0 0 + +0101101 +* +Ve +0.000424487417004458 +-127.13755417 94.0077294065 56.1690037931 +0 0 + +0101101 +* +Ve +1e-07 +-149.521395883 105.709020738 55.1374940554 +0 0 + +0101101 +* +Ve +1e-07 +-141.906587237 123.367577028 90.2115596742 +0 0 + +0101101 +* +Ve +1.00000014210855e-07 +74.2227829335243 137.982454301185 16.1208302769596 +0 0 + +0101101 +* +Ve +1e-07 +46 126 47 +0 0 + +0101101 +* +Ve +1e-07 +-189.985425381 30.6846160342 82.1445245819 +0 0 + +0101101 +* +Ve +1e-07 +-194.09742205 21.1489956375 63.2045291478 +0 0 + +0101101 +* +Ve +1e-07 +-143.657993226 119.306109081 82.1445245819 +0 0 + +0101101 +* +Ve +1e-07 +-147.769989895 109.770488685 63.2045291478 +0 0 + +0101101 +* +Ve +1e-07 +57.2491805323061 -97.0194507787926 16.1586496706242 +0 0 + +0101101 +* +Ve +3.74068363052505e-05 +9.74786760652891 -97.0247865710264 16.1587648802047 +0 0 + +0101101 +* +Ve +1e-07 +29 -109 47 +0 0 + +0101101 +* +Ve +2.14393506236538e-05 +-19.5151344686 -109 47 +0 0 + +0101101 +* +Ve +1.00000021316282e-07 +89.2449117997887 -59.0158569699536 16.152463248736 +0 0 + +0101101 +* +Ve +1e-07 +89.2455857782946 -65.0158568545702 16.1534277975505 +0 0 + +0101101 +* +Ve +1e-07 +61 -71 47 +0 0 + +0101101 +* +Ve +1e-07 +61 -77 47 +0 0 + +0101101 +* +Ve +1.00000036230713e-07 +-6.75868214630173 -27.0266412041346 16.1475518265805 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +57.2413174497377 -27.0194521249329 16.1473966011214 +0 0 + +0101101 +* +Ve +1e-07 +-35 -39 47 +0 0 + +0101101 +* +Ve +1e-07 +29 -39 47 +0 0 + +0101101 +* +Ve +1.11284593881212e-05 +-49.7360677521 -36.0263944363 47 +0 0 + +0101101 +* +Ve +2.42737479747708e-05 +-52.3215047914 -34.8225586223 27.8720123251 +0 0 + +0101101 +* +Ve +0.000168383778734264 +-25.012920718287 -22.3573869656544 16.146844931354 +0 0 + +0101101 +* +Ve +0.00363471729978297 +-83.4999058915 -35.7116124476 47 +0 0 + +0101101 +* +Ve +0.000168383778734264 +-26.288303621777 -22.1659804372355 16.1468174489251 +0 0 + +0101101 +* +Ve +0.00363471729978297 +-76.9042129946 -36.1582576069 47 +0 0 + +0101101 +* +Ve +0.000148280086894941 +-106.392449394 -19.9866493891 47 +0 0 + +0101101 +* +Ve +0.000173605720433982 +-47.576757200654 -7.37495139029392 16.1444909151684 +0 0 + +0101101 +* +Ve +0.000107216261837828 +-109.721292355 0.256707525101 47 +0 0 + +0101101 +* +Ve +0.000173605720433982 +-51.4167635722311 11.8411201771146 16.1414110142716 +0 0 + +0101101 +* +Ve +0.00137214571031583 +-94.4669823873 36.1704226706 47 +0 0 + +0101101 +* +Ve +0.00139873365151549 +-37.2308442686743 45.9811224235007 16.1358885714885 +0 0 + +0101101 +* +Ve +4.58383599786546e-05 +-104.516532354 18.7322453277 47 +0 0 + +0101101 +* +Ve +0.000384112278017549 +-46.8256825402551 29.4547891544029 16.1385684165729 +0 0 + +0101101 +* +Ve +9.40560289752676e-05 +-40.0075483968 51.4050375812 26.5836219284 +0 0 + +0101101 +* +Ve +9.40560289752676e-05 +-13.4571130815297 62.6099052932359 16.1331537184541 +0 0 + +0101101 +* +Ve +4.30691726805637e-05 +-18 56 34.6669004964 +0 0 + +0101101 +* +Ve +1.00000018882932e-07 +10.2306464200534 67.9752665681237 16.1322385719214 +0 0 + +0101101 +* +Ve +0.00081033001288944 +33.1337062803809 67.9778392541878 16.1321826113901 +0 0 + +0101101 +* +Ve +0.000397449244097015 +-13.2989816175 59.8317795037 47 +0 0 + +0101101 +* +Ve +0.00081033001288944 +37.746406976917 68.4915620351923 16.1320893332945 +0 0 + +0101101 +* +Ve +8.47779177044377e-05 +-64.5280046474 53.9533765786 47 +0 0 + +0101101 +* +Ve +0.00101016764597514 +-4.35287985631 59.5124340059 47 +0 0 + +0101101 +* +Ve +0.00106812368343978 +46.0858438982559 68.1695374665671 16.1321210255924 +0 0 + +0101101 +* +Ve +0.00101016764597514 +-4.94019003155 59.6129522902 47 +0 0 + +0101101 +* +Ve +0.0042493701492345 +45.5386010278549 68.2637159892007 16.1321072030025 +0 0 + +0101101 +* +Ve +0.000563560659444542 +47.1862850251938 67.9794177714852 16.1321489958963 +0 0 + +0101101 +* +Ve +2.89484206978784e-06 +15.9553631837 56 47 +0 0 + +0101101 +* +Ve +1e-07 +74.2306460160928 67.9824556473254 16.1320833464623 +0 0 + +0101101 +* +Ve +1e-07 +46 56 47 +0 0 + +0101101 +* +Ve +1.00000014210855e-07 +106.226377283575 105.986049456164 16.1258969245741 +0 0 + +0101101 +* +Ve +1e-07 +106.227051262081 99.9860495715478 16.1268614733887 +0 0 + +0101101 +* +Ve +1e-07 +78 94 47 +0 0 + +0101101 +* +Ve +1e-07 +78 88 47 +0 0 + +0101101 +* +Ve +1.04930248423991e-07 +55.7800579653778 -47.0985165228243 16.1506279973218 +0 0 + +0101101 +* +Ve +1.0406777064981e-07 +39.2452491046358 -62.0214733803882 16.1530667930332 +0 0 + +0101101 +* +Ve +1.05066148567867e-07 +6460.61359371 -121.188703244 4384.52016969 +0 0 + +0101101 +* +Ve +1.05066148567709e-07 +39.2452803975894 -62.0193835210957 29.1530666199746 +0 0 + +0101101 +* +Ve +1.05066148567867e-07 +69.2452802082329 -62.0160136402187 29.1529938580407 +0 0 + +0101101 +* +Ve +1e-07 +41 -74 47 +0 0 + +0101101 +* +Ve +1e-07 +11 -74 47 +0 0 + +0101101 +* +Ve +1.04017147629037e-07 +69.2452489152793 -62.0181034995124 16.1529940310992 +0 0 + +0101101 +* +Ve +1.04070521752456e-07 +69.1665204339766 -63.5546040611286 16.1532412260116 +0 0 + +0101101 +* +Ve +1.04919916234049e-07 +6451.48681592 -128.91118878 4366.99688958 +0 0 + +0101101 +* +Ve +1.05066148567709e-07 +6464.30029231 -145.799751431 4367.76592961 +0 0 + +0101101 +* +Ve +1.04070521752456e-07 +52.7104320415757 -76.9410595368769 16.1554328266981 +0 0 + +0101101 +* +Ve +1.03247671951262e-07 +72.7615300944196 117.903389221478 16.1240616732549 +0 0 + +0101101 +* +Ve +1.02435722959822e-07 +56.2267145884225 102.98043304573 16.1265004688713 +0 0 + +0101101 +* +Ve +1.05802907169732e-07 +6554.3990998 -106.537929741 4508.97751539 +0 0 + +0101101 +* +Ve +1.05787066491005e-07 +56.2267458844202 102.982522905025 29.1265003113001 +0 0 + +0101101 +* +Ve +1.05270561336088e-07 +86.2267456950637 102.985892785901 29.1264275493661 +0 0 + +0101101 +* +Ve +1e-07 +58 91 47 +0 0 + +0101101 +* +Ve +1e-07 +28 91 47 +0 0 + +0101101 +* +Ve +1.02250756308209e-07 +86.226714399066 102.983802926606 16.1264277069374 +0 0 + +0101101 +* +Ve +1.03265799859873e-07 +86.1479859181377 101.447302366574 16.1266749018494 +0 0 + +0101101 +* +Ve +1.05800096022451e-07 +6545.27232928 -114.260418316 4491.45424135 +0 0 + +0101101 +* +Ve +1.05800096022451e-07 +6558.08579835 -131.148977912 4492.22327528 +0 0 + +0101101 +* +Ve +1.03067069504827e-07 +69.6918973244286 88.0608469105514 16.1288665025329 +0 0 + +0101101 +* +Ve +1.03271120919129e-07 +-90.230339703964 45.5162493524733 16.136090891545 +0 0 + +0101101 +* +Ve +1.02451860636637e-07 +-106.765155209911 30.5932931767322 16.1385296871629 +0 0 + +0101101 +* +Ve +1.05802907169732e-07 +-106.765123913927 30.595383036025 29.1385295185375 +0 0 + +0101101 +* +Ve +1.05297188497881e-07 +-76.7651241032837 30.5987529169013 29.1384567566036 +0 0 + +0101101 +* +Ve +1e-07 +-105 18.6311684254 47 +0 0 + +0101101 +* +Ve +1e-07 +-135 18.6311684254 47 +0 0 + +0101101 +* +Ve +1.02278017407533e-07 +-76.7651553992676 30.596663057608 16.138456925229 +0 0 + +0101101 +* +Ve +1.0329164246205e-07 +-76.8438838802089 29.0601624975761 16.1387041201411 +0 0 + +0101101 +* +Ve +0.000398948942604742 +-108.288514523 9.25880970875 47 +0 0 + +0101101 +* +Ve +0.00022571270339482 +-105.299622729 15.6480646591 46.4153639548 +0 0 + +0101101 +* +Ve +4.58383599786546e-05 +-105.021685988 17.824874833 47 +0 0 + +0101101 +* +Ve +1.03091259060794e-07 +-93.299972473909 15.6737070415421 16.1408957208254 +0 0 + +0101101 +* +Ve +1.00000021316282e-07 +-171.657004699 -27.821840952 25 +0 0 + +0101101 +* +Ve +1e-07 +-171.657004699 -27.821840952 33 +0 0 + +0101101 +* +Ve +1e-07 +-185.639506212 16.7246003725 33 +0 0 + +0101101 +* +Ve +1.00000021316282e-07 +-185.639506212 16.7246003725 25 +0 0 + +0101101 +* +Ve +1.00000017763568e-07 +-139.997383096 104.035139899 25 +0 0 + +0101101 +* +Ve +1e-07 +-139.997383096 104.035139899 33 +0 0 + +0101101 +* +Ve +1e-07 +-105.021900528 121.245743137 33 +0 0 + +0101101 +* +Ve +1.00000014210855e-07 +-105.021900528 121.245743137 25 +0 0 + +0101101 +* +Ve +1.00000010658141e-07 +-46.7294412084 110.967209788 25 +0 0 + +0101101 +* +Ve +1e-07 +-46.7294412084 110.967209788 33 +0 0 + +0101101 +* +Ve +1.06000106243967e-06 +11.6489316386 109.18971795 25 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +-26.4126044214 109.18971689 25 +0 0 + +0101101 +* +Ve +1.06000106243967e-06 +11.6489316386 109.18971795 33 +0 0 + +0101101 +* +Ve +1e-07 +-26.4126044214 109.18971689 33 +0 0 + +0101101 +* +Ve +1.828097087007e-05 +27.0394066749 114.005662992 25 +0 0 + +0101101 +* +Ve +1.828097087007e-05 +27.0394066749 114.005662992 33 +0 0 + +0101101 +* +Ve +1.73718117710028e-05 +27.0394169581 67.99435183 33 +0 0 + +0101101 +* +Ve +1.73718117710028e-05 +27.0394169581 67.99435183 25 +0 0 + +0101101 +* +Ve +1.30001303650857e-07 +11.6489316386 78.81028311 33 +0 0 + +0101101 +* +Ve +1.24938947585403e-05 +30.4595348082 72.9241393732 33 +0 0 + +0101101 +* +Ve +1.24938947585403e-05 +30.4595348082 72.9241393732 25 +0 0 + +0101101 +* +Ve +1.30001303650857e-07 +11.6489316386 78.81028311 25 +0 0 + +0101101 +* +Ve +1.33726567565293e-05 +30.4595273611 109.075871361 33 +0 0 + +0101101 +* +Ve +4.67004676665397e-07 +11.6489316386 103.189717357 33 +0 0 + +0101101 +* +Ve +4.67004676665397e-07 +11.6489316386 103.189717357 25 +0 0 + +0101101 +* +Ve +1.33726567565293e-05 +30.4595273611 109.075871361 25 +0 0 + +0101101 +* +Ve +1e-07 +-47.7713302744 105.05836327 33 +0 0 + +0101101 +* +Ve +1e-07 +-26.4126044214 103.18971689 33 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +-47.7713302744 105.05836327 25 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +-26.4126044214 103.18971689 25 +0 0 + +0101101 +* +Ve +1e-07 +-134.680093514 101.25549397 33 +0 0 + +0101101 +* +Ve +1.00000017763568e-07 +-134.680093514 101.25549397 25 +0 0 + +0101101 +* +Ve +1.00000021316282e-07 +-180.322216629 13.9449544432 25 +0 0 + +0101101 +* +Ve +1e-07 +-180.322216629 13.9449544432 33 +0 0 + +0101101 +* +Ve +1.74057585701176e-05 +9.90109305452 -96.9090650888 33 +0 0 + +0101101 +* +Ve +1.85398857847484e-05 +9.9010826501 -51.0909201096 33 +0 0 + +0101101 +* +Ve +1.74057585701176e-05 +9.90109305452 -96.9090650888 25 +0 0 + +0101101 +* +Ve +1.85398857847484e-05 +9.9010826501 -51.0909201096 25 +0 0 + +0101101 +* +Ve +6.11581877807633e-06 +-55.8001371056 -88.2583887133 33 +0 0 + +0101101 +* +Ve +7.95607957879412e-06 +-40.5375459135 -92.000007956 33 +0 0 + +0101101 +* +Ve +6.11581877807633e-06 +-55.8001371056 -88.2583887133 25 +0 0 + +0101101 +* +Ve +7.95607957879412e-06 +-40.5375459135 -92.000007956 25 +0 0 + +0101101 +* +Ve +2.86002563917847e-07 +-5.62277660168 -86 25 +0 0 + +0101101 +* +Ve +6.88232816493883e-06 +-40.5375459135 -86.0000068823 25 +0 0 + +0101101 +* +Ve +2.86002563917847e-07 +-5.62277660168 -86 33 +0 0 + +0101101 +* +Ve +6.88232816493883e-06 +-40.5375459135 -86.0000068823 33 +0 0 + +0101101 +* +Ve +1.22588245864091e-05 +13.3508516701 -91.9999741237 33 +0 0 + +0101101 +* +Ve +1.22588245864091e-05 +13.3508516701 -91.9999741237 25 +0 0 + +0101101 +* +Ve +1.32839125384472e-05 +13.3508442794 -56.0000153633 33 +0 0 + +0101101 +* +Ve +1.32839125384472e-05 +13.3508442794 -56.0000153633 25 +0 0 + +0101101 +* +Ve +1.40801405438964e-07 +-5.62277660168 -61.9999998592 33 +0 0 + +0101101 +* +Ve +1.40801405438964e-07 +-5.62277660168 -61.9999998592 25 +0 0 + +0101101 +* +Ve +5.207877419544e-06 +-53.0251205252 -82.9386816745 33 +0 0 + +0101101 +* +Ve +5.207877419544e-06 +-53.0251205252 -82.9386816745 25 +0 0 + +0101101 +* +Ve +5.69724220209966e-07 +-5.62277660168 -92 33 +0 0 + +0101101 +* +Ve +5.69724220209966e-07 +-5.62277660168 -92 25 +0 0 + +0101101 +* +Ve +1.03691038551574e-06 +-5.62277660167 -55.9999989631 33 +0 0 + +0101101 +* +Ve +1.03691038551574e-06 +-5.62277660167 -55.9999989631 25 +0 0 + +0101101 +* +Ve +1e-07 +-168.881988119 -22.5021339132 33 +0 0 + +0101101 +* +Ve +1.00000021316282e-07 +-168.881988119 -22.5021339132 25 +0 0 + +0101101 +* +Ve +1e-07 +-106.063789594 115.336896619 33 +0 0 + +0101101 +* +Ve +1.00000014210855e-07 +-106.063789594 115.336896619 25 +0 0 + +0101101 +* +Ve +6.39206388044187e-07 +11.6489316386 72.81028311 33 +0 0 + +0101101 +* +Ve +6.39206388044187e-07 +11.6489316386 72.81028311 25 +0 0 + +0101101 +* +Ve +0.000397449244097015 +-12.9233495089 59.872677747 47 +0 0 + +0101101 +* +Ve +0.0042493701492345 +38.0974486982 68.5285254453412 16.1320825460387 +0 0 + +0101101 +* +Ve +0.000232084738891746 +-80.9615206431 49.0134071474 47 +0 0 + +0101101 +* +Ve +3.68408062876559e-05 +-24.8356757818372 58.3108444909611 16.1338766255983 +0 0 + +0101101 +* +Ve +0.00137214571031583 +-92.7046075158 38.9744581603 47 +0 0 + +0101101 +* +Ve +0.00139873365151549 +-35.5333936289266 48.6394462424729 16.1354571372393 +0 0 + +0101101 +* +Ve +0.00238040630840407 +-48.3040385267899 26.5582930724687 16.1390376115809 +0 0 + +0101101 +* +Ve +0.000398948942604742 +-108.778313151 6.86094956285 47 +0 0 + +0101101 +* +Ve +0.00238040630840407 +-50.6598827987087 18.1463183572455 16.1403955785728 +0 0 + +0101101 +* +Ve +6.77442107043747e-05 +-108.981092708 5.66059772635 47 +0 0 + +0101101 +* +Ve +2.25685573442198e-05 +-50.8081456974159 16.9983488742295 16.14058048124 +0 0 + +0101101 +* +Ve +1.29292736175792e-05 +-109.642946084 0.95625946916 47 +0 0 + +0101101 +* +Ve +1.10537365055118e-05 +-51.3438604127566 12.5081347799454 16.1413036105624 +0 0 + +0101101 +* +Ve +2.14393506236538e-05 +-65.8531053708 -97.6416530138 47 +0 0 + +0101101 +* +Ve +3.74068363052505e-05 +-36.5913788834797 -85.6716449179861 16.1570513215305 +0 0 + +0101101 +* +Ve +7.86574424828166e-06 +-170.131042945 -43.2452353861 47 +0 0 + +0101101 +* +Ve +0.000487984011394659 +-199.181679499 -17.743147879 73.2421407635 +0 0 + +0101101 +* +Ve +0.000487984011394659 +-191.769290354 -3.56370899149 73.2421407635 +0 0 + +0101101 +* +Ve +1.00042740565437e-07 +-102.921190284 78.81028311 25 +0 0 + +0101101 +* +Ve +1.00000014210855e-07 +-105.566941595 79.81028311 25 +0 0 + +0101101 +* +Ve +1.0004273930813e-07 +-108.212692906 78.81028311 25 +0 0 + +0101101 +* +Ve +1.00000010658141e-07 +-108.566941595 78.81028311 25 +0 0 + +0101101 +* +Ve +1.00042720507464e-07 +-108.566941595 78.456034421 25 +0 0 + +0101101 +* +Ve +1.00000014210855e-07 +-109.566941595 75.81028311 25 +0 0 + +0101101 +* +Ve +1.00023419023189e-07 +-108.566941595 73.1645317989 25 +0 0 + +0101101 +* +Ve +1.00000014210855e-07 +-108.566941595 72.81028311 25 +0 0 + +0101101 +* +Ve +1.00042709849105e-07 +-108.212692906 72.81028311 25 +0 0 + +0101101 +* +Ve +1e-07 +-105.566941595 71.81028311 25 +0 0 + +0101101 +* +Ve +1.00042729906468e-07 +-102.921190284 72.81028311 25 +0 0 + +0101101 +* +Ve +1.00260744779321e-07 +-144.600015412 -41.9360756907 25 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +-140.86673681 -44.499889464 25 +0 0 + +0101101 +* +Ve +1.0000557668777e-07 +-139.908474788 -44.383410276 25 +0 0 + +0101101 +* +Ve +1.00000017763568e-07 +-139.594391581 -44.5472512736 25 +0 0 + +0101101 +* +Ve +1.00033603939875e-07 +-139.430550583 -44.2331680662 25 +0 0 + +0101101 +* +Ve +1.00000014648214e-07 +-136.86673681 -40.499889464 25 +0 0 + +0101101 +* +Ve +1.00018370656116e-07 +-136.983215998 -39.5416274421 25 +0 0 + +0101101 +* +Ve +1.00000017763568e-07 +-136.819375 -39.2275442348 25 +0 0 + +0101101 +* +Ve +1.00224885766093e-07 +-137.133458208 -39.0637032372 25 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +-140.86673681 -36.499889464 25 +0 0 + +0101101 +* +Ve +1.0010267924478e-07 +-141.824998832 -36.6163686519 25 +0 0 + +0101101 +* +Ve +1.00042740565437e-07 +-108.047774529 -62 25 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +-105.402023218 -63 25 +0 0 + +0101101 +* +Ve +1.00042719250011e-07 +-102.756271907 -62 25 +0 0 + +0101101 +* +Ve +1.00282299724082e-07 +-66.2040310244 -76.0639243091 25 +0 0 + +0101101 +* +Ve +1e-07 +-69.9373096263 -73.500110536 25 +0 0 + +0101101 +* +Ve +1.00042338695207e-07 +-70.8955716481 -73.616589724 25 +0 0 + +0101101 +* +Ve +1.00000010658141e-07 +-71.2096548554 -73.4527487264 25 +0 0 + +0101101 +* +Ve +1.00074115684939e-07 +-71.373495853 -73.7668319338 25 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +-73.9373096263 -77.500110536 25 +0 0 + +0101101 +* +Ve +1.00018370656116e-07 +-73.8208304383 -78.4583725579 25 +0 0 + +0101101 +* +Ve +1.00000010658141e-07 +-73.9846714358 -78.7724557652 25 +0 0 + +0101101 +* +Ve +1.00038199793348e-07 +-73.6705882285 -78.9362967628 25 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +-69.9373096263 -81.500110536 25 +0 0 + +0101101 +* +Ve +1.000787198509e-07 +-68.9790476044 -81.3836313481 25 +0 0 + +0101101 +* +Ve +1.00042715177805e-07 +-102.756271907 -56 25 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +-105.402023218 -55 25 +0 0 + +0101101 +* +Ve +1.0004272990632e-07 +-108.047774529 -56 25 +0 0 + +0101101 +* +Ve +1.00000014210855e-07 +-108.402023218 -56 25 +0 0 + +0101101 +* +Ve +1.00023419023189e-07 +-108.402023218 -56.3542486889 25 +0 0 + +0101101 +* +Ve +1.00000014648214e-07 +-109.402023218 -59 25 +0 0 + +0101101 +* +Ve +1.00023419022919e-07 +-108.402023218 -61.6457513111 25 +0 0 + +0101101 +* +Ve +1.00000014210855e-07 +-108.402023218 -62 25 +0 0 + +0101101 +* +Ve +1e-07 +-108.212692906 72.81028311 33 +0 0 + +0101101 +* +Ve +1e-07 +-108.566941595 72.81028311 33 +0 0 + +0101101 +* +Ve +1e-07 +-102.921190284 72.81028311 33 +0 0 + +0101101 +* +Ve +1e-07 +-108.566941595 73.1645317989 33 +0 0 + +0101101 +* +Ve +1e-07 +-108.566941595 78.456034421 33 +0 0 + +0101101 +* +Ve +1e-07 +-108.566941595 78.81028311 33 +0 0 + +0101101 +* +Ve +1e-07 +-141.824998832 -36.6163686519 33 +0 0 + +0101101 +* +Ve +1e-07 +-136.819375 -39.2275442348 33 +0 0 + +0101101 +* +Ve +1e-07 +-137.133458208 -39.0637032372 33 +0 0 + +0101101 +* +Ve +1e-07 +-71.2096548554 -73.4527487264 33 +0 0 + +0101101 +* +Ve +1e-07 +-70.8955716481 -73.616589724 33 +0 0 + +0101101 +* +Ve +1e-07 +-66.204031024 -76.0639243093 33 +0 0 + +0101101 +* +Ve +1e-07 +-102.756271907 -62 33 +0 0 + +0101101 +* +Ve +1e-07 +-108.402023218 -62 33 +0 0 + +0101101 +* +Ve +1e-07 +-108.047774529 -62 33 +0 0 + +0101101 +* +Ve +1e-07 +-108.402023218 -61.6457513111 33 +0 0 + +0101101 +* +Ve +1e-07 +-108.402023218 -56.3542486889 33 +0 0 + +0101101 +* +Ve +1e-07 +-108.402023218 -56 33 +0 0 + +0101101 +* +Ve +1e-07 +-102.756271907 -56 33 +0 0 + +0101101 +* +Ve +1e-07 +-108.047774529 -56 33 +0 0 + +0101101 +* +Ve +1e-07 +-71.373495853 -73.7668319338 33 +0 0 + +0101101 +* +Ve +1e-07 +-73.8208304383 -78.4583725579 33 +0 0 + +0101101 +* +Ve +1e-07 +-73.9846714358 -78.7724557652 33 +0 0 + +0101101 +* +Ve +1e-07 +-73.6705882305 -78.9362967618 33 +0 0 + +0101101 +* +Ve +1e-07 +-68.9790476044 -81.3836313481 33 +0 0 + +0101101 +* +Ve +1e-07 +-139.594391581 -44.5472512736 33 +0 0 + +0101101 +* +Ve +1e-07 +-139.430550583 -44.2331680662 33 +0 0 + +0101101 +* +Ve +1e-07 +-136.983215998 -39.5416274421 33 +0 0 + +0101101 +* +Ve +1e-07 +-108.212692906 78.81028311 33 +0 0 + +0101101 +* +Ve +1e-07 +-102.921190284 78.81028311 33 +0 0 + +0101101 +* +Ve +1e-07 +-144.600015414 -41.93607569 33 +0 0 + +0101101 +* +Ve +1e-07 +-139.908474788 -44.383410276 33 +0 0 + +0101101 +* +Ve +1e-07 +-109.402023218 -59 33 +0 0 + +0101101 +* +Ve +1e-07 +-136.86673681 -40.499889464 33 +0 0 + +0101101 +* +Ve +1e-07 +-73.9373096263 -77.500110536 33 +0 0 + +0101101 +* +Ve +1e-07 +-109.566941595 75.81028311 33 +0 0 + +0101101 +* +Ve +1.04630038424588e-07 +-105.402023218 -63 17 +0 0 + +0101101 +* +Ve +1.04630111791109e-07 +-105.402023218 -55 17 +0 0 + +0101101 +* +Ve +1.09629518554601e-07 +-1.91770215442 3.51033024756 0 +0 0 + +0101101 +* +Ve +1.04630038424588e-07 +-75.2411697573121 -43.5252895082847 8.1503688844196 +0 0 + +0101101 +* +Ve +0.000833645408902318 +-149.299518972 141.745914559 18 +0 0 + +0101101 +* +Ve +1e-07 +-68.6159514141 127.519224699 18 +0 0 + +0101101 +* +Ve +0.000606470576449104 +-229.461285539 -11.5985734727 17.9997729465 +0 0 + +0101101 +* +Ve +0.000750843761988429 +-64.5166941782 -97.6416530138 17.9997729465 +0 0 + +0101101 +* +Ve +0.000750843761988429 +-18.1787337366 -109 17.9999999429 +0 0 + +0101101 +* +Ve +1e-07 +61 -77 18 +0 0 + +0101101 +* +Ve +1e-07 +29 -109 18 +0 0 + +0101101 +* +Ve +1e-07 +29 -39 18 +0 0 + +0101101 +* +Ve +1e-07 +61 -71 18 +0 0 + +0101101 +* +Ve +0.00305706856132506 +-73 -0.212182479513 20.1315753848 +0 0 + +0101101 +* +Ve +4.75835293272267e-05 +-73 0.448616437477 20.1841125502 +0 0 + +0101101 +* +Ve +4.75835293272267e-05 +-73 1 20.2282433709 +0 0 + +0101101 +* +Ve +0.00369457076804729 +-72.8615753881 4.89968536376 20.4562358035 +0 0 + +0101101 +* +Ve +0.00369457076804729 +-72.7687891607 6.03783027367 20.4889040534 +0 0 + +0101101 +* +Ve +0.000882097926501699 +-71.3430768689 14.3983637121 21.1307825191 +0 0 + +0101101 +* +Ve +0.000181585757868666 +-70.5309117058 17.2942724711 21.6168256878 +0 0 + +0101101 +* +Ve +0.000181585757868666 +-62.1743253334 33.7662781124 22.504674311 +0 0 + +0101101 +* +Ve +3.91785013798833e-05 +-60.1115521675 36.3782019617 22.2215975127 +0 0 + +0101101 +* +Ve +3.91785013798833e-05 +-49.6111039427 46.0082004475 22.2740240953 +0 0 + +0101101 +* +Ve +0.00246023619783453 +13.0440381019 56 21.5977859142 +0 0 + +0101101 +* +Ve +0.00246023619783453 +13.6403370819 56 21.3573662281 +0 0 + +0101101 +* +Ve +0.00264734805142356 +19.2095321665 56 23.1196662226 +0 0 + +0101101 +* +Ve +1e-07 +78 88 18 +0 0 + +0101101 +* +Ve +1e-07 +46 56 18 +0 0 + +0101101 +* +Ve +1e-07 +46 126 18 +0 0 + +0101101 +* +Ve +1e-07 +78 94 18 +0 0 + +0101101 +* +Ve +1.06393829064643e-07 +-105.566941595 79.81028311 17 +0 0 + +0101101 +* +Ve +1.0639400762228e-07 +-105.566941595 71.81028311 17 +0 0 + +0101101 +* +Ve +1.06393829064643e-07 +-79.2558469883665 84.263881293233 8.12983536379142 +0 0 + +0101101 +* +Ve +1.07307639014591e-07 +-140.86673681 -36.499889464 17 +0 0 + +0101101 +* +Ve +1.0730840516161e-07 +-140.86673681 -44.499889464 17 +0 0 + +0101101 +* +Ve +1.0730840516161e-07 +-110.707961234821 -25.0291630594743 8.14748085868205 +0 0 + +0101101 +* +Ve +1.09629518554601e-07 +-69.9373096263 -73.500110536 17 +0 0 + +0101101 +* +Ve +1.09629501509908e-07 +-69.9373096263 -81.500110536 17 +0 0 + +0101101 +* +Ve +1.09629501509908e-07 +-39.7743782743064 -62.0214159632744 8.15325691578214 +0 0 + +0101101 +* +Ve +1e-07 +29 -108 17 +0 0 + +0101101 +* +Ve +1.2520012518517e-05 +-18.1787324529 -107.99998748 17 +0 0 + +0101101 +* +Ve +1e-07 +60 -71 17 +0 0 + +0101101 +* +Ve +1e-07 +60 -77 17 +0 0 + +0101101 +* +Ve +1e-07 +-35 -39 18 +0 0 + +0101101 +* +Ve +1e-07 +-35 -40 17 +0 0 + +0101101 +* +Ve +1e-07 +29 -40 17 +0 0 + +0101101 +* +Ve +1e-07 +-74 -1 17 +0 0 + +0101101 +* +Ve +1e-07 +-73 -1 18 +0 0 + +0101101 +* +Ve +1e-07 +-73 1 18 +0 0 + +0101101 +* +Ve +1e-07 +-74 1 17 +0 0 + +0101101 +* +Ve +1e-07 +-18 57 17 +0 0 + +0101101 +* +Ve +1e-07 +-18 56 18 +0 0 + +0101101 +* +Ve +1e-07 +46 57 17 +0 0 + +0101101 +* +Ve +1e-07 +77 94 17 +0 0 + +0101101 +* +Ve +1e-07 +77 88 17 +0 0 + +0101101 +* +Ve +1e-07 +-51.2511336474 126 18 +0 0 + +0101101 +* +Ve +1e-07 +-51.2511336474 125 17 +0 0 + +0101101 +* +Ve +1e-07 +46 125 17 +0 0 + +0101101 +* +Ve +1e-07 +-68.7895995918 126.534416946 17 +0 0 + +0101101 +* +Ve +0.000588941693030239 +-148.710184754 140.626572424 17 +0 0 + +0101101 +* +Ve +0.000423896081328326 +-228.065320545 -11.1748611451 17 +0 0 + +0101101 +* +Ve +0.00305706856132506 +-73 -1 20.076282405 +0 0 + +0101101 +* +Ve +1e-07 +-64.0443361397 -96.7361426107 17 +0 0 + +0101101 +* +Ve +1.02451853420113e-07 +-135 18.6311684254 17 +0 0 + +0101101 +* +Ve +1.02452401449442e-07 +-93.2999957793441 15.6724213909649 8.14089582416393 +0 0 + +0101101 +* +Ve +1.0329164246205e-07 +-76.8439031389281 29.0588764303186 8.1387042235373 +0 0 + +0101101 +* +Ve +1.02278027501771e-07 +-105 18.6311684254 17 +0 0 + +0101101 +* +Ve +1.02451853420113e-07 +-90.2303609595995 45.5149634912069 8.13609099491332 +0 0 + +0101101 +* +Ve +1.02435722959822e-07 +28 91 17 +0 0 + +0101101 +* +Ve +1.02435727336974e-07 +69.6918740189932 88.0595612599742 8.12886660587287 +0 0 + +0101101 +* +Ve +1.03265798405772e-07 +86.1479666594186 101.446016299316 8.12667500524568 +0 0 + +0101101 +* +Ve +1.02250742096796e-07 +58 91 17 +0 0 + +0101101 +* +Ve +1.02435722959822e-07 +72.7615088387841 117.902103360211 8.12406177662134 +0 0 + +0101101 +* +Ve +1.04067756443236e-07 +11 -74 17 +0 0 + +0101101 +* +Ve +1.04070521752171e-07 +52.7104149853909 -76.9423458304018 8.15543293012412 +0 0 + +0101101 +* +Ve +1.04070521752171e-07 +69.1665011752575 -63.5558901283861 8.15324132940779 +0 0 + +0101101 +* +Ve +1.04017133596762e-07 +41 -74 17 +0 0 + +0101101 +* +Ve +1.04930241357924e-07 +55.7800387066586 -47.0998025900818 8.15062810071802 +0 0 + +0101101 +* +Ve +0.00264734805142356 +19.1269528772 56 23.7401828609 +0 0 + +0101101 +* +Ve +0.000131962247717784 +-68.3651140879 -19.1870602875 19.639146687 +0 0 + +0101101 +* +Ve +8.72489124820711e-05 +-53.6810559245 -34.0910584531 24.3560271785 +0 0 + +0101101 +* +Ve +1.02651331632989e-07 +-80.9814240333724 81.1043902583436 8.13034743259461 +0 0 + +0101101 +* +Ve +1.08270726433935e-07 +-3.64363409339 6.66962747037 -1.7763568394e-15 +0 0 + +0101101 +* +Ve +1.08271955671707e-07 +-38.0488012293006 -58.8619249283851 8.15274484697875 +0 0 + +0101101 +* +Ve +1.04153159647742e-07 +-73.5155927123062 -40.3657984733953 8.14985681561621 +0 0 + +0101101 +* +Ve +1.05657698382967e-07 +-108.982384189815 -21.8696720245849 8.14696878987866 +0 0 + +0101101 +* +Ve +1e-07 +5.51339369395 -10.0921994617 -9.71445146547e-17 +0 0 + +0101101 +* +Ve +1e-07 +-5.51339369395 10.0921994617 -9.71445146547e-17 +0 0 + +0101101 +* +Ve +1e-07 +4.92164409007 -9.00900907752 -7 +0 0 + +0101101 +* +Ve +1e-07 +-4.92164409007 9.00900907752 -7 +0 0 + +0101101 +* +Ve +1e-07 +5.51339369395 -10.0921994617 0.4 +0 0 + +0101101 +* +Ve +1e-07 +-5.51339369395 10.0921994617 0.4 +0 0 + +0101101 +* +Ve +1e-07 +-5.65722135553 10.3554742303 0.7 +0 0 + +0101101 +* +Ve +1e-07 +5.65722135553 -10.3554742303 0.7 +0 0 + +0101101 +* +Ve +1e-07 +5.70516390939 -10.4432324865 0.7 +0 0 + +0101101 +* +Ve +1e-07 +-5.70516390939 10.4432324865 0.7 +0 0 + +0101101 +* +Ve +1e-07 +4.07511707814 -7.45945177607 3.13397459622 +0 0 + +0101101 +* +Ve +1e-07 +-4.07511707814 7.45945177607 3.13397459622 +0 0 + +0101101 +* +Ve +1e-07 +-5.84899157097 10.7065072551 0.4 +0 0 + +0101101 +* +Ve +1e-07 +5.84899157097 -10.7065072551 0.4 +0 0 + +0101101 +* +Ve +1e-07 +4.31482984744 -7.89824305701 4 +0 0 + +0101101 +* +Ve +1e-07 +-4.31482984744 7.89824305701 4 +0 0 + +0101101 +* +Ve +1e-07 +-4.31482984744 7.89824305701 5 +0 0 + +0101101 +* +Ve +1e-07 +4.31482984744 -7.89824305701 5 +0 0 + +0101101 +* +Ve +1e-07 +5.01147593305 -9.17344516311 7 +0 0 + +0101101 +* +Ve +2.63462588419505e-07 +-5.0114757053 9.17344528754 7 +0 0 + +0101101 +* +Ve +1e-07 +7.33521074064 -13.4270131969 1 +0 0 + +0101101 +* +Ve +1e-07 +-7.33521074064 13.4270131969 1 +0 0 + +0101101 +* +Ve +1e-07 +-7.09549797134 12.988221916 7 +0 0 + +0101101 +* +Ve +1e-07 +7.09549797134 -12.988221916 7 +0 0 + +0101101 +* +Ve +1.00017156192299e-07 +6382.85537006734 -92.9748203439336 4455.58987571179 +0 0 + +0101101 +* +Ve +1.00000944781399e-07 +6400.75419389902 -112.861528738249 4459.84791869209 +0 0 + +0101101 +* +Ve +1.00464504942287e-07 +6395.34041653518 -120.527457727985 4446.80205528518 +0 0 + +0101101 +* +Ve +1.0000128692609e-07 +6377.44159270366 -100.640749334109 4442.54401230478 +0 0 + +0101101 +* +Ve +1e-07 +-7.67080861767 14.0413209902 5.8 +0 0 + +0101101 +* +Ve +1e-07 +7.67080861767 -14.0413209902 5.8 +0 0 + +0101101 +* +Ve +1e-07 +-15.75 1.92881870866e-15 4 +0 0 + +0101101 +* +Ve +1e-07 +15.75 0 4 +0 0 + +0101101 +* +Ve +1.00038980175024e-07 +6381.07747996712 -93.9657778170259 4457.06708516435 +0 0 + +0101101 +* +Ve +1.00046421031058e-07 +6393.76070177588 -121.955758651971 4448.13977552459 +0 0 + +0101101 +* +Ve +0.00138508701192453 +6437.1628419 -163.976654804 4387.33978116 +0 0 + +0101101 +* +Ve +0.00138507639376552 +6441.0677042 -168.460585922 4388.14377872 +0 0 + +0101101 +* +Ve +0.000922807912947816 +50.4718136324877 -79.6940171117993 -8.85011954586263 +0 0 + +0101101 +* +Ve +0.000922807912949593 +54.4373275177146 -79.1698991696716 -8.85021334804008 +0 0 + +0101101 +* +Ve +1e-07 +6446.13074793 -181.037054813 4394.0423444 +0 0 + +0101101 +* +Ve +1e-07 +6426.38452683 -172.787588616 4377.57926268 +0 0 + +0101101 +* +Ve +1e-07 +-4 0.958851077208 -1.75516512378 +0 0 + +0101101 +* +Ve +1e-07 +-4 -0.958851077208 1.75516512378 +0 0 + +0101101 +* +Ve +1.17552871367817e-05 +6441.35274724 -153.695389983 4401.17354862 +0 0 + +0101101 +* +Ve +2.96064302713097e-05 +6441.35274724 -153.695389983 4401.17354862 +0 0 + +0101101 +* +Ve +1.75342753170327e-05 +49.2747116573294 -51.6534480054008 -8.84862442388598 +0 0 + +0101101 +* +Ve +0.00033935878913347 +6432.57664898 -150.028960564 4393.85662342 +0 0 + +0101101 +* +Ve +2.95758770073378e-05 +6432.57664897 -150.028960559 4393.85662341 +0 0 + +0101101 +* +Ve +1.03864288494243e-07 +61.212414798145 -52.8746129047429 -8.84845685043593 +0 0 + +0101101 +* +Ve +1e-07 +6430.40961746 -169.887386029 4374.20473006 +0 0 + +0101101 +* +Ve +1e-07 +6450.15583856 -178.136852226 4390.66781178 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +-4 1.19856384651 -2.19395640473 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +-4 -1.19856384651 2.19395640473 +0 0 + +0101101 +* +Ve +0.000518471648010888 +6428.55427061 -148.348513743 4390.50303269 +0 0 + +0101101 +* +Ve +0.000456552009607591 +6445.37512562 -155.375836801 4404.52713934 +0 0 + +0101101 +* +Ve +1.03635037425547e-07 +49.3653389995472 -60.9342819786845 -8.84713267029554 +0 0 + +0101101 +* +Ve +1.03635031877797e-07 +59.1250386521758 -63.1133328233597 -8.84680586446267 +0 0 + +0101101 +* +Ve +1.1198744282935e-07 +65.6835861369065 -63.2122571977428 -6.8468057501908 +0 0 + +0101101 +* +Ve +1.04650104363962e-07 +65.7438986039361 -62.1960668458962 -6.84696925754296 +0 0 + +0101101 +* +Ve +1.04650107026906e-07 +42.7464838580126 -61.8512264471802 -6.84696933094224 +0 0 + +0101101 +* +Ve +0.000922807912942487 +50.4718136469318 -79.6940161472489 -8.84411954601773 +0 0 + +0101101 +* +Ve +0.000922807912953142 +54.4373275321587 -79.1698982051211 -8.84421334819517 +0 0 + +0101101 +* +Ve +0.00112359870343969 +6438.35112751 -145.095035903 4383.64844842 +0 0 + +0101101 +* +Ve +0.00109666204904441 +63.1117103118226 -66.191469396775 3.15368125027624 +0 0 + +0101101 +* +Ve +0.00109666204904441 +6446.35657497 -154.155799416 4385.41005586 +0 0 + +0101101 +* +Ve +0.00109666204904441 +50.075631405288 -70.8883605045887 3.15446557756328 +0 0 + +0101101 +* +Ve +0.00109666204904441 +45.3787312289921 -57.8522900879295 3.15238209362681 +0 0 + +0101101 +* +Ve +0.00109666204904441 +6450.86052843 -145.095035905 4398.56946951 +0 0 + +0101101 +* +Ve +0.00109666204904441 +6446.35657152 -139.549925196 4397.96289949 +0 0 + +0101101 +* +Ve +0.00292097792544027 +58.414670583079 -53.1556796151335 3.15153502967854 +0 0 + +0101101 +* +Ve +1e-07 +-4 2.39712769302 -4.38791280945 +0 0 + +0101101 +* +Ve +1e-07 +-4 -2.39712769302 4.38791280945 +0 0 + +0101101 +* +Ve +0.00035308323949654 +-8.7758256189 4.79425538604 -1.13663114476e-08 +0 0 + +0101101 +* +Ve +0.00035308323949654 +4.79425538604 8.7758256189 -1.11758717836e-08 +0 0 + +0101101 +* +Ve +0.000353083239495131 +-4.79425538604 -8.7758256189 -1.11758717836e-08 +0 0 + +0101101 +* +Ve +1e-07 +8.7758256189 -4.79425538604 -1.11758717836e-08 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +-4 -1.67798938511 3.07153896662 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +-4 1.67798938511 -3.07153896662 +0 0 + +0101101 +* +Ve +1.00165815807966e-07 +-4.79425538604 -8.7758256189 -2 +0 0 + +0101101 +* +Ve +1.00165815807966e-07 +4.79425538604 8.7758256189 -2 +0 0 + +0101101 +* +Ve +1.00000017763568e-07 +59.1249862925333 -63.1168293187032 -30.5968055043693 +0 0 + +0101101 +* +Ve +1.00000015888219e-07 +49.3652866399048 -60.937778474028 -30.5971323102022 +0 0 + +0101101 +* +Ve +1e-07 +3.5527136788e-15 1.67798938511 -3.07153896662 +0 0 + +0101101 +* +Ve +1e-07 +3.5527136788e-15 -1.67798938511 3.07153896662 +0 0 + +0101101 +* +Ve +1e-07 +6449.54162222 -156.433825721 4380.13921217 +0 0 + +0101101 +* +Ve +1e-07 +6436.72815028 -139.545264932 4379.37017585 +0 0 + +0101101 +* +Ve +1e-07 +6445.85492806 -131.822779386 4396.89345594 +0 0 + +0101101 +* +Ve +1e-07 +-5 6.12323399574e-16 68 +0 0 + +0101101 +* +Ve +1e-07 +5 0 68 +0 0 + +0101101 +* +Ve +4.93307750979435e-07 +0 0.866025401279 -1.49999910779 +0 0 + +0101101 +* +Ve +4.93308881188874e-07 +0 1.73205080815 -1.86264514923e-09 +0 0 + +0101101 +* +Ve +1.99670431140771e-07 +0 -0.866025405005 -1.49999999814 +0 0 + +0101101 +* +Ve +1.99675489103025e-07 +0 -1.73205046169 -1.97440385818e-07 +0 0 + +0101101 +* +Ve +1e-07 +0 -0.866025403142 1.5 +0 0 + +0101101 +* +Ve +1e-07 +0 0.866025405005 1.5 +0 0 + +0101101 +* +Ve +4.45704090762103e-07 +-2 0.86602540291 -1.49999910789 +0 0 + +0101101 +* +Ve +4.9232714985565e-07 +-2 1.7320508073 -1.3714255287e-09 +0 0 + +0101101 +* +Ve +1e-07 +-2 -0.86602540481 -1.49999999959 +0 0 + +0101101 +* +Ve +1.99584697596906e-07 +-2 -1.73205046144 -1.98050073008e-07 +0 0 + +0101101 +* +Ve +1e-07 +-2 -0.866025403307 1.5 +0 0 + +0101101 +* +Ve +1e-07 +-2 0.86602540481 1.50000000004 +0 0 + +0101101 +* +Ve +1e-07 +6458.80023114 -131.966546633 4373.09432726 +0 0 + +0101101 +* +Ve +1e-07 +6466.11364636 -135.021904484 4379.19176494 +0 0 + +0101101 +* +Ve +1.03209763869335e-07 +59.2190350400577 -62.5294645496967 28.1531005249749 +0 0 + +0101101 +* +Ve +1.05265213369533e-07 +-5 6.12323399574e-16 0 +0 0 + +0101101 +* +Ve +1.03209756793276e-07 +49.2715207549067 -61.5062541365126 28.1529599823448 +0 0 + +0101101 +* +Ve +1.0526519950029e-07 +5 0 0 +0 0 + +0101101 +* +Ve +4.2803196365071e-07 +72.9169266408188 91.5694208212623 -8.87166826449402 +0 0 + +0101101 +* +Ve +1.94703562564889e-05 +64.9524708183007 112.655412192097 -8.87510762975717 +0 0 + +0101101 +* +Ve +5.000001e-06 +64.9524708183007 112.655412192097 -8.93507619506626 +0 0 + +0101101 +* +Ve +5.000001e-06 +64.0907281491285 91.9365211500105 -8.93174338149279 +0 0 + +0101101 +* +Ve +5.000001e-06 +64.090728283353 91.9365210861164 -8.94170680248313 +0 0 + +0101101 +* +Ve +1e-07 +64.9524991263634 112.657302710028 3.1248922196105 +0 0 + +0101101 +* +Ve +1e-07 +72.9169549489572 91.5713113393473 3.12833158497051 +0 0 + +0101101 +* +Ve +4.07311236763961e-05 +72.9169313592362 91.5697359086731 -6.8716683167481 +0 0 + +0101101 +* +Ve +4.07311236763961e-05 +57.6659640457433 102.28129111059 -6.8733879679753 +0 0 + +0101101 +* +Ve +0.294457914476126 +69.5363566901612 114.386806028587 -8.8754029033521 +0 0 + +0101101 +* +Ve +1e-07 +63.968866541671 90.7452426298102 -8.93155158481652 +0 0 + +0101101 +* +Ve +0.367781803525486 +79.3851827054145 94.2211268598354 -8.93879524903807 +0 0 + +0101101 +* +Ve +1e-07 +86.4850163556343 103.567446242263 -8.93366706442955 +0 0 + +0101101 +* +Ve +1e-07 +88.8772568335755 126.953195532707 -8.93743227856748 +0 0 + +0101101 +* +Ve +1e-07 +58.6063774717596 130.049748922765 -8.93785719878746 +0 0 + +0101101 +* +Ve +1e-07 +55.8127376592371 102.740052868841 -8.93346021459891 +0 0 + +0101101 +* +Ve +0.00159483401184357 +70.5384702979207 119.894612435251 -8.93625340152365 +0 0 + +0101101 +* +Ve +0.00159484441708448 +75.5061045040906 123.040563811575 -8.93677110284846 +0 0 + +0101101 +* +Ve +5.000001e-06 +65.2994024489902 103.752118750526 -8.94364799277418 +0 0 + +0101101 +* +Ve +1e-07 +65.2993883151601 103.751175099671 -14.8136456806305 +0 0 + +0101101 +* +Ve +1e-07 +63.9688523923249 90.7442973633701 -14.8115515063706 +0 0 + +0101101 +* +Ve +5.000001e-06 +76.069214940986 93.4724461870866 -8.94198817929484 +0 0 + +0101101 +* +Ve +5.000001e-06 +76.9983515225644 102.55537715595 -8.94348041835795 +0 0 + +0101101 +* +Ve +5.000001e-06 +66.34680432093 104.067613191039 -8.9437023191382 +0 0 + +0101101 +* +Ve +5.00000100710543e-06 +67.2176614898251 99.9901156102636 -8.94303558895889 +0 0 + +0101101 +* +Ve +5.000001e-06 +76.1065039735747 101.888562347436 -8.94336884379864 +0 0 + +0101101 +* +Ve +1e-07 +69.536384999674 114.38869655219 3.12459693315031 +0 0 + +0101101 +* +Ve +0.294457914476126 +69.5363566901612 114.386806028587 -8.8754029033521 +0 0 + +0101101 +* +Ve +1e-07 +77.5008661787389 93.302714755382 3.12803629973132 +0 0 + +0101101 +* +Ve +5.000001e-06 +80.7891981760064 100.845002757557 3.12679099058513 +0 0 + +0101101 +* +Ve +5.000001e-06 +73.3617068978362 112.542535401515 3.12489038217345 +0 0 + +0101101 +* +Ve +5.000001e-06 +78.1690717218407 96.0660329190507 3.1275813652014 +0 0 + +0101101 +* +Ve +5.000001e-06 +69.0916566955266 93.417508305739 3.12803812543338 +0 0 + +0101101 +* +Ve +5.000001e-06 +61.6641708212645 105.115052910176 3.12613751504614 +0 0 + +0101101 +* +Ve +0.000317048756063435 +84.7873495438926 103.675273116713 -6.87368325815565 +0 0 + +0101101 +* +Ve +1e-07 +86.485002201468 103.566500983029 -14.8136669907855 +0 0 + +0101101 +* +Ve +1e-07 +76.0692008151654 93.4715025330557 -14.8120190619122 +0 0 + +0101101 +* +Ve +1e-07 +88.8772426792594 126.952250273165 -14.8174322051128 +0 0 + +0101101 +* +Ve +1e-07 +58.6063633173668 130.048803663068 -14.8178571254277 +0 0 + +0101101 +* +Ve +1e-07 +55.812723513958 102.739107613383 -14.8134601454938 +0 0 + +0101101 +* +Ve +0.00106324543301387 +74.3758710359209 120.08529776128 -8.93629329697902 +0 0 + +0101101 +* +Ve +0.00106324543388908 +74.2629941617712 123.325478037006 -8.9368139114729 +0 0 + +0101101 +* +Ve +0.00106324543385748 +72.0345385896833 120.003733695202 -8.93627454848642 +0 0 + +0101101 +* +Ve +1e-07 +76.9983373879293 102.554433502941 -14.8134814542071 +0 0 + +0101101 +* +Ve +0.00106324653161837 +75.5060903563381 123.039618548367 -14.8167710224135 +0 0 + +0101101 +* +Ve +0.00106324653161837 +70.5384561439825 119.893667176479 -14.8162533275957 +0 0 + +0101101 +* +Ve +1.56278429854517e-05 +73.3617176984337 112.543183686145 7.12492202026005 +0 0 + +0101101 +* +Ve +2.17803139270986e-05 +80.789199105454 100.845647732818 7.12678584459433 +0 0 + +0101101 +* +Ve +4.31536983574335e-05 +6540.14209432 -135.989376152 4505.77680542 +0 0 + +0101101 +* +Ve +4.34554996425837e-05 +69.0916699722431 93.4181676726219 7.1280085500311 +0 0 + +0101101 +* +Ve +4.31536983574335e-05 +6535.63813741 -130.444265436 4505.17023541 +0 0 + +0101101 +* +Ve +3.41059013515852e-05 +61.6641795300155 105.115696150406 7.12614408340427 +0 0 + +0101101 +* +Ve +2.01866289544114e-05 +6540.14209087 -121.383501925 4518.32964906 +0 0 + +0101101 +* +Ve +3.37415590111113e-05 +6548.14753832 -130.444265438 4520.09125649 +0 0 + +0101101 +* +Ve +1e-07 +6530.51366364 -124.894494468 4503.82752762 +0 0 + +0101101 +* +Ve +1e-07 +6543.3271409 -141.783057476 4504.59656837 +0 0 + +0101101 +* +Ve +4.77922724784505e-06 +6539.64043471 -117.172006115 4521.35080211 +0 0 + +0101101 +* +Ve +0.00106324543301387 +74.37587130182 120.085297014553 -8.94229329685961 +0 0 + +0101101 +* +Ve +0.00106324543387312 +74.2629941473271 123.325477072455 -8.94281391131781 +0 0 + +0101101 +* +Ve +0.00106324543385747 +72.0345385752393 120.003732730652 -8.94227454833133 +0 0 + +0101101 +* +Ve +1.00000017763568e-07 +76.1064517824379 101.885077104643 -30.6233718276149 +0 0 + +0101101 +* +Ve +1.00000015888219e-07 +66.3467521298094 104.064127949319 -30.6236986334477 +0 0 + +0101101 +* +Ve +1e-07 +6559.89915972 -120.371134019 4503.6491167 +0 0 + +0101101 +* +Ve +1e-07 +6552.5857445 -117.315776167 4497.55167903 +0 0 + +0101101 +* +Ve +1.06349939558589e-07 +66.252986242251 103.495652291013 28.1263936589058 +0 0 + +0101101 +* +Ve +1.05263814567846e-07 +76.200500527158 102.472441876953 28.126534201536 +0 0 + +0101101 +* +Ve +5.000001e-06 +65.3775298917698 103.580697233276 -2.96222739241534 +0 0 + +0101101 +* +Ve +5.000001e-06 +69.9453866550653 97.2403461275483 -2.96121940615791 +0 0 + +0101101 +* +Ve +0.000109711040122395 +65.37752066404 103.580081019814 -6.87361996373864 +0 0 + +0101101 +* +Ve +5.000001e-06 +76.9653716546776 101.697767495326 -2.96195299370716 +0 0 + +0101101 +* +Ve +5.9287169298288e-05 +65.3473247214792 103.066907915347 -6.87353570906114 +0 0 + +0101101 +* +Ve +5.000001e-06 +77.0758066803425 102.377401794996 -2.96206250821989 +0 0 + +0101101 +* +Ve +0.000109711051982417 +77.0757974526204 102.376785582127 -6.87345131258382 +0 0 + +0101101 +* +Ve +5e-06 +65.3483640982691 103.120257655684 -2.96233060721813 +0 0 + +0101101 +* +Ve +5.000001e-06 +72.5079504783372 108.717752775491 -2.9630704828359 +0 0 + +0101101 +* +Ve +5.000001e-06 +65.4879648629424 104.260331288786 -2.96233689932019 +0 0 + +0101101 +* +Ve +0.000109711051982417 +77.0758066803425 102.377401794996 -6.87345141368955 +0 0 + +0101101 +* +Ve +0.000105180662035592 +77.1060064160456 102.890828238575 -6.8735357099337 +0 0 + +0101101 +* +Ve +0.000109711296693047 +65.3775298917698 103.580697233276 -6.87362006484447 +0 0 + +0101101 +* +Ve +5e-06 +77.1065387449811 102.94001941889 -2.9636917516798 +0 0 + +0101101 +* +Ve +5.100001e-06 +76.1065183728067 101.889523905715 -2.96198172035175 +0 0 + +0101101 +* +Ve +5.000001e-06 +76.1065089567682 101.888895117334 -6.87336889839819 +0 0 + +0101101 +* +Ve +5.100001e-06 +66.346818720179 104.068574750447 -2.96230817070259 +0 0 + +0101101 +* +Ve +5.000001e-06 +67.2177342459107 99.9903574507376 -6.87303562880893 +0 0 + +0101101 +* +Ve +5.000001e-06 +66.3468093041236 104.067945960937 -6.87370237373774 +0 0 + +0101101 +* +Ve +0.000147465507805619 +-159.397709672 -75.9484866828 -19.8 +0 0 + +0101101 +* +Ve +0.000147465507805619 +-159.397709672 -75.9484866828 -30.2 +0 0 + +0101101 +* +Ve +0.000117158242767242 +-159.397709672 -75.9484866828 -21 +0 0 + +0101101 +* +Ve +0.000117158242767242 +-159.397709672 -75.9484866828 -29 +0 0 + +0101101 +* +Ve +0.000178406034850481 +-150.132223241 -58.2241880734 -19.8 +0 0 + +0101101 +* +Ve +0.000178406034850481 +-150.132223241 -58.2241880734 -30.2 +0 0 + +0101101 +* +Ve +0.000243281226490678 +-150.132223241 -58.2241880734 -29 +0 0 + +0101101 +* +Ve +0.000243858188189171 +-150.132223241 -58.2241880734 -21 +0 0 + +0101101 +* +Ve +2.75520856670084e-06 +-143.275763282 -45.1082071024 -5 +0 0 + +0101101 +* +Ve +1e-07 +-138.457710338 -35.8915718255 -5 +0 0 + +0101101 +* +Ve +0.000243281226490678 +-139.013639524 -36.9550297421 -5 +0 0 + +0101101 +* +Ve +0.000243858188189171 +-142.719834096 -44.0447491858 -5 +0 0 + +0101101 +* +Ve +1.26326246481729e-05 +-143.275763282 -45.1082071024 5 +0 0 + +0101101 +* +Ve +1.30485423288894e-05 +-110.132797774587 -23.977928482092 -3.85268967582442 +0 0 + +0101101 +* +Ve +1.30485406273806e-05 +-138.457710338 -35.8915718255 5 +0 0 + +0101101 +* +Ve +1.30485406273806e-05 +6565.48521308865 -199.649097162447 4500.8523493217 +0 0 + +0101101 +* +Ve +0.000117158371443087 +-139.013639524 -36.9550297421 5 +0 0 + +0101101 +* +Ve +0.000119973430398339 +-142.719834096 -44.0447491858 5 +0 0 + +0101101 +* +Ve +0.000119973430398339 +-110.7079901229 -25.0310921603605 -3.85251898622359 +0 0 + +0101101 +* +Ve +0.000114671308045781 +-1.91770215442 3.51033024756 12 +0 0 + +0101101 +* +Ve +1.2632738525863e-05 +-88.4682824884 -112.948707755 -19.8 +0 0 + +0101101 +* +Ve +1.2632738525863e-05 +-88.4682824884 -112.948707755 -30.2 +0 0 + +0101101 +* +Ve +0.000115467346954254 +-88.4682824884 -112.948707755 -21 +0 0 + +0101101 +* +Ve +0.000115467346954254 +-88.4682824884 -112.948707755 -28.999998195 +0 0 + +0101101 +* +Ve +3.93616019492242e-07 +-79.2027960573 -95.2244091455 -19.8 +0 0 + +0101101 +* +Ve +1e-07 +-79.2027960573 -95.2244091455 -30.2 +0 0 + +0101101 +* +Ve +0.000243630759207995 +-79.2027960574 -95.2244091456 -29 +0 0 + +0101101 +* +Ve +0.000243541928351953 +-79.2027960573 -95.2244091455 -21 +0 0 + +0101101 +* +Ve +3.93616019492242e-07 +-72.3463360983 -82.1084281745 -5 +0 0 + +0101101 +* +Ve +1e-07 +-67.5282831542 -72.8917928976 -5 +0 0 + +0101101 +* +Ve +0.000243630759207995 +-68.08421234 -73.9552508141 -5 +0 0 + +0101101 +* +Ve +0.000243541928351953 +-71.7904069125 -81.0449702579 -5 +0 0 + +0101101 +* +Ve +1.26327415965872e-05 +-72.3463360983 -82.1084281745 5 +0 0 + +0101101 +* +Ve +1.30496326522929e-05 +-39.1992148140603 -60.9701813858715 -3.84691361872456 +0 0 + +0101101 +* +Ve +1.30496315383939e-05 +-67.5282831542 -72.8917928976 5 +0 0 + +0101101 +* +Ve +1.30496315383939e-05 +6514.74280912866 -201.167381298467 4439.02271845169 +0 0 + +0101101 +* +Ve +0.000117158272928246 +-68.08421234 -73.9552508141 5 +0 0 + +0101101 +* +Ve +0.000119973330099934 +-71.7904069125 -81.0449702579 5 +0 0 + +0101101 +* +Ve +0.000119973330099934 +-39.7744071623855 -62.0233450641606 -3.8467429291235 +0 0 + +0101101 +* +Ve +1e-07 +-14.2881200525 75.0313506983 3 +0 0 + +0101101 +* +Ve +1.040489537433e-07 +-14.2881200525 75.0313506983 -56 +0 0 + +0101101 +* +Ve +1e-07 +-4.18886658374 77.5143084856 3 +0 0 + +0101101 +* +Ve +1.04058672467866e-07 +-4.18886658374 77.5143084856 -56 +0 0 + +0101101 +* +Ve +1.04058672467866e-07 +6529.73341420082 -85.5822699144011 4556.24155366463 +0 0 + +0101101 +* +Ve +1.04060667663771e-07 +-79.831068224772 83.2087885140529 -3.86999379151302 +0 0 + +0101101 +* +Ve +1e-07 +-12.9203613052 63.7391598327 14.3747236686 +0 0 + +0101101 +* +Ve +1e-07 +-2.67073457077 64.9806387263 15.6252763314 +0 0 + +0101101 +* +Ve +1e-07 +-6.56775874734 11.2921908656 14.3747236686 +0 0 + +0101101 +* +Ve +1e-07 +3.68186798704 12.5336697593 15.6252763314 +0 0 + +0101101 +* +Ve +1e-07 +-5.2 6.2172489379e-15 3 +0 0 + +0101101 +* +Ve +1e-07 +5.2 -6.2172489379e-15 3 +0 0 + +0101101 +* +Ve +1.04053631253624e-07 +-13.1228215753 75.3178458276 -56 +0 0 + +0101101 +* +Ve +1.04053614626149e-07 +1.91770215442 -3.51033024756 12 +0 0 + +0101101 +* +Ve +1.04055609822054e-07 +-79.2558758764443 84.2619521923469 -3.87016448111422 +0 0 + +0101101 +* +Ve +1.04053614626149e-07 +-5.3541650609 77.2278133563 -56 +0 0 + +0101101 +* +Ve +1.0000217786148e-07 +-5.2 6.36816335557e-16 0 +0 0 + +0101101 +* +Ve +1.000028016332e-07 +-21.7586104698903 32.8960265245007 -59.8620461147798 +0 0 + +0101101 +* +Ve +1.00001872860621e-07 +5.2 -1.27363267111e-15 0 +0 0 + +0101101 +* +Ve +1e-07 +-13.1228215753 75.3178458276 3 +0 0 + +0101101 +* +Ve +1e-07 +-5.3541650609 77.2278133563 3 +0 0 + +0101101 +* +Ve +1.00001676880856e-07 +6451.57276763514 -129.604411426044 4524.74776574949 +0 0 + +0101101 +* +Ve +1e-07 +-11.7377120666 63.8824073973 14.5190182066 +0 0 + +0101101 +* +Ve +1e-07 +-3.85338380935 64.8373911617 15.4809817934 +0 0 + +0101101 +* +Ve +1e-07 +-5.38510950876 11.4354384303 14.5190182066 +0 0 + +0101101 +* +Ve +1e-07 +2.49921874845 12.3904221947 15.4809817934 +0 0 + +0101101 +* +Ve +1.00002114548202e-07 +-4 4.89858719659e-16 0 +0 0 + +0101101 +* +Ve +1.0405444636339e-07 +-21.1834181215607 33.9491902027994 -59.8622168043795 +0 0 + +0101101 +* +Ve +1.00001920335458e-07 +4 0 0 +0 0 + +0101101 +* +Ve +1e-07 +-4 -9.43689570931e-16 3 +0 0 + +0101101 +* +Ve +1e-07 +4 -8.32667268469e-16 3 +0 0 + +0101101 +* +Ve +1.01986282538939e-07 +6540.11401110866 -200.408239230472 4469.93753389169 +0 0 + +0101101 +* +Ve +1.01997185149124e-07 +-74.6660062970627 -42.4740549308779 -3.84980165008665 +0 0 + +0101101 +* +Ve +0.000114671309087738 +-75.2411986453911 -43.5272186091709 -3.84963096048604 +0 0 + +0101101 +* +Ve +1.00002108935847e-07 +6453.18199578962 -156.286122728017 4503.73594367845 +0 0 + +0101101 +* +Ve +1.00005266720967e-07 +-21.7547912583568 -1.10397282166082 -59.8565803381657 +0 0 + +0101101 +* +Ve +1.04054895862232e-07 +-21.1795989100253 -0.0508091433626676 -59.8567510277663 +0 0 + +0101101 +* +Ve +0.00257302987113288 +6542.32759848 -140.621851268 4532.8506987 +0 0 + +0101101 +* +Ve +0.00257302987113288 +6546.23246078 -145.105782392 4533.65469627 +0 0 + +0101101 +* +Ve +0.000922807676452058 +-111.914046049883 33.4594647095863 -8.86791900061736 +0 0 + +0101101 +* +Ve +0.00092280767645738 +-108.422187804706 31.5083301928515 -8.86761374360302 +0 0 + +0101101 +* +Ve +1e-07 +6544.20387546 -137.80093417 4548.18124127 +0 0 + +0101101 +* +Ve +1e-07 +6547.27612537 -158.310141441 4534.21937545 +0 0 + +0101101 +* +Ve +1.55976495781432e-07 +-84.4222681406275 23.808502963072 -8.86043371023553 +0 0 + +0101101 +* +Ve +1.50000003552714e-07 +-84.4222683220117 23.8085027668728 -8.86175508920373 +0 0 + +0101101 +* +Ve +1.54520442591722e-07 +-92.3757979390143 24.6221074623575 -8.86175508920373 +0 0 + +0101101 +* +Ve +0.00226097414461103 +-97.5384256762902 32.2249684763117 -8.86175515263277 +0 0 + +0101101 +* +Ve +0.000207753241467462 +6530.01287148 -132.289195065 4525.32328558 +0 0 + +0101101 +* +Ve +1e-07 +6548.22896609 -134.900731583 4544.80670865 +0 0 + +0101101 +* +Ve +1e-07 +6551.301216 -155.409938853 4530.84484283 +0 0 + +0101101 +* +Ve +1.06675165395631e-07 +6539.89198049 -141.030602118 4529.59423488 +0 0 + +0101101 +* +Ve +0.00186594513461944 +-85.9458010508475 32.0518031373176 -8.86175521673036 +0 0 + +0101101 +* +Ve +0.00186594513461944 +-81.862610363878 31.9898091627109 -8.86175508920373 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +-96.6450653147045 31.6804845663332 -8.86175508920373 +0 0 + +0101101 +* +Ve +1.00000015888219e-07 +-86.8853656628627 29.5014336691212 -8.86175508920373 +0 0 + +0101101 +* +Ve +0.000922807676452058 +-111.914046035439 33.4594656741368 -8.86191900077245 +0 0 + +0101101 +* +Ve +0.000922807676455596 +-108.422187790262 31.5083311574019 -8.86161374375812 +0 0 + +0101101 +* +Ve +1.00000040856207e-07 +-101.765126416609 30.5969072187759 3.13851689622098 +0 0 + +0101101 +* +Ve +1.00000007944109e-07 +-101.765126416609 30.5969072187759 7.13851695159548 +0 0 + +0101101 +* +Ve +1.00293926664997e-07 +-86.8854180215118 29.4979372401093 -30.6113421123954 +0 0 + +0101101 +* +Ve +1.0029392666534e-07 +-96.6451176741404 31.6769880847846 -30.6116689176404 +0 0 + +0101101 +* +Ve +2.00001e-07 +-96.7388835591009 31.1085124336096 28.1384931465989 +0 0 + +0101101 +* +Ve +1.50772376142545e-07 +-86.7656869408642 30.5220411492505 28.1384931465989 +0 0 + +0101101 +* +Ve +1.03173675652194e-07 +-86.7913692741915 30.0853020082507 28.1385634179146 +0 0 + +0101101 +* +Ve +1.53178431320996e-07 +-96.7645658923535 30.6717732883012 28.1384931465989 +0 0 + +0101101 +* +Ve +1e-07 +43.4793395049 1.66459569117 9.5 +0 0 + +0101101 +* +Ve +1e-07 +57.5206604951 9.33540430883 9.5 +0 0 + +0101101 +* +Ve +5.99999859423481e-07 +6492.28246063021 -145.047517629392 4446.23972842109 +0 0 + +0101101 +* +Ve +6.00001598079206e-07 +6411.61345966845 -102.759741278559 4386.36271901736 +0 0 + +0101101 +* +Ve +6.00000812420411e-07 +6387.99107514439 -67.5782173078896 4388.42265117616 +0 0 + +0101101 +* +Ve +6.00001086559442e-07 +6387.51777274601 -59.7306551602504 4394.60259884411 +0 0 + +0101101 +* +Ve +6.00000659634612e-07 +6395.58723251711 -48.5279487953552 4413.85576134175 +0 0 + +0101101 +* +Ve +6.0000047986014e-07 +6413.9078066696 -47.7770756708447 4436.35358965208 +0 0 + +0101101 +* +Ve +6.00000901251962e-07 +6443.31186076904 -55.5410843609762 4464.75360687052 +0 0 + +0101101 +* +Ve +6.00000476425613e-07 +6469.06457346544 -69.0410030651709 4483.86869943284 +0 0 + +0101101 +* +Ve +6.00000334605329e-07 +6511.58486560874 -132.367746212376 4480.16082154701 +0 0 + +0101101 +* +Ve +6.00000469556559e-07 +6511.67952608841 -133.937258641904 4478.92483201341 +0 0 + +0101101 +* +Ve +1e-07 +-28.5 -12.5 8.5 +0 0 + +0101101 +* +Ve +1e-07 +-16.5 -12.5 8.5 +0 0 + +0101101 +* +Ve +1e-07 +-28.5 29.5 8.5 +0 0 + +0101101 +* +Ve +1e-07 +-16.5 29.5 8.5 +0 0 + +0101101 +* +Ve +4.43472682381836e-05 +2.04109589041 8.5 5 +0 0 + +0101101 +* +Ve +4.43472682381836e-05 +20.0410958904 8.5 5 +0 0 + +0101101 +* +Ve +1.00001423995717e-07 +1.67798938511 -3.07153896662 0 +0 0 + +0101101 +* +Ve +1.00001423995717e-07 +-1.67798938511 3.07153896662 0 +0 0 + +0101101 +* +Ve +3.15359982666418e-05 +-49.9589041096 2.1 6 +0 0 + +0101101 +* +Ve +3.15359982666418e-05 +-49.9589236513 14.9 6 +0 0 + +0101101 +* +Ve +3.15356724842967e-05 +-51.9589041096 2.1 6 +0 0 + +0101101 +* +Ve +3.15356724842967e-05 +-51.958923639 14.9 6 +0 0 + +0101101 +* +Ve +1e-07 +28.2359033419 -8.5 0 +0 0 + +0101101 +* +Ve +1e-07 +33.9264072801 -10.8769968051 0 +0 0 + +0101101 +* +Ve +3.12784270740007e-05 +33.9264072801 -10.8769968051 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +28.2359033419 -8.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +2.48179337037 -8.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +2.48179337037 -8.5 0 +0 0 + +0101101 +* +Ve +1e-07 +-5.41758793251 -15.2351778656 0 +0 0 + +0101101 +* +Ve +3.38586879989101e-05 +-5.41758793251 -15.2351778656 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-47.7802294293 -5.5 0 +0 0 + +0101101 +* +Ve +1e-07 +-39.7864809932 -13.1837944664 0 +0 0 + +0101101 +* +Ve +3.9333488715623e-05 +-39.7864809932 -13.1837944664 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-47.7802294293 -5.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-47.7802294293 22.5 0 +0 0 + +0101101 +* +Ve +1e-07 +-39.7864809932 30.1837944664 0 +0 0 + +0101101 +* +Ve +1e-07 +-47.7802294293 22.5 -4.5 +0 0 + +0101101 +* +Ve +3.93331202162804e-05 +-39.7864809932 30.1837944664 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-5.41758793251 32.2351778656 0 +0 0 + +0101101 +* +Ve +1e-07 +2.48179337037 25.5 0 +0 0 + +0101101 +* +Ve +3.38582597806791e-05 +-5.41758793251 32.2351778656 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +2.48179337037 25.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +36.5110758098 25.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +36.5110758098 25.5 0 +0 0 + +0101101 +* +Ve +1e-07 +40.0865196923 26.3434504792 0 +0 0 + +0101101 +* +Ve +3.71144990280355e-05 +40.0865196923 26.3434504792 -4.5 +0 0 + +0101101 +* +Ve +1.00004607671047e-07 +6410.00886543614 -82.4019764728293 4433.2382489923 +0 0 + +0101101 +* +Ve +1.00022070811617e-07 +43.4793395049 1.66459569117 -4.6 +0 0 + +0101101 +* +Ve +1.00004631278089e-07 +3.83540430883 -7.02066049512 1.8 +0 0 + +0101101 +* +Ve +1.0002186618355e-07 +6425.80223313977 -89.9127086215669 4426.41866504436 +0 0 + +0101101 +* +Ve +1.00021896764488e-07 +6415.04743489636 -78.4455054305792 4423.44586069164 +0 0 + +0101101 +* +Ve +1.00021896764488e-07 +57.5206604951 9.33540430883 -4.6 +0 0 + +0101101 +* +Ve +1.00004432420032e-07 +6416.35047634052 -96.3969668903333 4428.77459417239 +0 0 + +0101101 +* +Ve +1.00004432420032e-07 +-3.83540430883 7.02066049512 1.8 +0 0 + +0101101 +* +Ve +1.00000213162821e-07 +57.8716935199 9.52717452428 -5 +0 0 + +0101101 +* +Ve +1.00000213162821e-07 +43.1283064801 1.47282547572 -5 +0 0 + +0101101 +* +Ve +1.00000383693077e-07 +6463.69166921013 -93.6383724382121 4487.61328293255 +0 0 + +0101101 +* +Ve +1.00000326849658e-07 +-28.5 29.5 -4.6 +0 0 + +0101101 +* +Ve +1.00001417955637e-07 +2.87655323163 -5.26549537134 1.8 +0 0 + +0101101 +* +Ve +1.0000135957112e-07 +6477.08458345686 -96.477263792552 4483.72365793293 +0 0 + +0101101 +* +Ve +1.00001417955637e-07 +6468.20359252529 -91.8217287814514 4477.13169359491 +0 0 + +0101101 +* +Ve +1.00000341060513e-07 +-16.5 29.5 -4.6 +0 0 + +0101101 +* +Ve +1.00000478602093e-07 +6468.44787738842 -104.134615251343 4484.26554181762 +0 0 + +0101101 +* +Ve +1.00001355033128e-07 +-2.87655323163 5.26549537134 1.8 +0 0 + +0101101 +* +Ve +1.00000255795385e-07 +-28.9 29.5 -5 +0 0 + +0101101 +* +Ve +1.00000255795385e-07 +-16.1 29.5 -5 +0 0 + +0101101 +* +Ve +1.00000355271368e-07 +6465.67953928331 -126.598133458297 4461.65750272715 +0 0 + +0101101 +* +Ve +1.00000341060513e-07 +-28.5 -12.5 -4.6 +0 0 + +0101101 +* +Ve +1.00000952869335e-07 +6479.07245353004 -129.437024812637 4457.76787772753 +0 0 + +0101101 +* +Ve +1.00000934140782e-07 +6470.19146259847 -124.781489801536 4451.17591338951 +0 0 + +0101101 +* +Ve +1.00000355271368e-07 +-16.5 -12.5 -4.6 +0 0 + +0101101 +* +Ve +1.00000540012479e-07 +6470.43574746161 -137.094376271427 4458.30976161222 +0 0 + +0101101 +* +Ve +1.00000255795385e-07 +-28.9 -12.5 -5 +0 0 + +0101101 +* +Ve +1.00000255795385e-07 +-16.1 -12.5 -5 +0 0 + +0101101 +* +Ve +1e-07 +-39.8 -12.5 -4.8 +0 0 + +0101101 +* +Ve +1e-07 +-39.8 -12.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-5.2 -12.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-5.2 -12.5 -4.8 +0 0 + +0101101 +* +Ve +1e-07 +-5.4 -12.5 -5 +0 0 + +0101101 +* +Ve +1e-07 +-39.6 -12.5 -5 +0 0 + +0101101 +* +Ve +1.00000005329071e-07 +17 0 12 +0 0 + +0101101 +* +Ve +1.00000005329071e-07 +-17 2.08189955855e-15 12 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +-8 9.79717439318e-16 12 +0 0 + +0101101 +* +Ve +1.00000003552714e-07 +8 0 12 +0 0 + +0101101 +* +Ve +1.0000135957112e-07 +3.73951920111 -6.84514398274 12 +0 0 + +0101101 +* +Ve +1.0000135957112e-07 +-3.73951920111 6.84514398274 12 +0 0 + +0101101 +* +Ve +1e-07 +-5.2 29.5 -4.8 +0 0 + +0101101 +* +Ve +1e-07 +-5.2 29.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-39.8 29.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-39.8 29.5 -4.8 +0 0 + +0101101 +* +Ve +1e-07 +-39.6 29.5 -5 +0 0 + +0101101 +* +Ve +1e-07 +-5.4 29.5 -5 +0 0 + +0101101 +* +Ve +1e-07 +73.8 5.5 -4.8 +0 0 + +0101101 +* +Ve +1e-07 +73.8 5.5 0 +0 0 + +0101101 +* +Ve +1e-07 +27.2 5.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +27.2 5.5 -4.8 +0 0 + +0101101 +* +Ve +1e-07 +27.4 5.5 -5 +0 0 + +0101101 +* +Ve +1e-07 +73.6 5.5 -5 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +23 0 12 +0 0 + +0101101 +* +Ve +1.00000007105427e-07 +-23 2.81668763804e-15 12 +0 0 + +0101101 +* +Ve +1.00000005329071e-07 +-10 1.22464679915e-15 12 +0 0 + +0101101 +* +Ve +1.00000005329071e-07 +10 0 12 +0 0 + +0101101 +* +Ve +1.00001350629417e-07 +4.69837027832 -8.60030910653 13 +0 0 + +0101101 +* +Ve +1.00001350629417e-07 +-4.69837027832 8.60030910653 13 +0 0 + +0101101 +* +Ve +1e-07 +-49.9589041096 2.1 -4.1 +0 0 + +0101101 +* +Ve +1e-07 +-51.9589041096 2.1 -4.1 +0 0 + +0101101 +* +Ve +1e-07 +-51.958923639 14.9 -4.1 +0 0 + +0101101 +* +Ve +1e-07 +-49.9589236513 14.9 -4.1 +0 0 + +0101101 +* +Ve +1.22060122566963e-06 +-51.9589248596 15.3 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-49.9589236513 15.3 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-49.9589041096 1.7 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-51.9589041096 1.7 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +20.0410958904 8.5 -4.1 +0 0 + +0101101 +* +Ve +1e-07 +2.04109589041 8.5 -4.1 +0 0 + +0101101 +* +Ve +1e-07 +20.4410958904 8.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +1.64109589041 8.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-56.38854382 -5.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-56.38854382 -5.5 0 +0 0 + +0101101 +* +Ve +1e-07 +-58.94405008 -4.07142857143 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-58.94405008 -4.07142857143 0 +0 0 + +0101101 +* +Ve +1e-07 +-56.38854382 22.5 0 +0 0 + +0101101 +* +Ve +1e-07 +-56.38854382 22.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-58.94405008 21.0714285714 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-58.94405008 21.0714285714 0 +0 0 + +0101101 +* +Ve +9.51703163673272e-05 +71 -32.5 0.8 +0 0 + +0101101 +* +Ve +0.00331634368160302 +-38 -32.5 0.8 +0 0 + +0101101 +* +Ve +9.51703163673272e-05 +101 -2.5 0.8 +0 0 + +0101101 +* +Ve +0.000329339234167311 +101 7.5 0.8 +0 0 + +0101101 +* +Ve +0.000329339234167311 +88.7978026727 27.8078176435 0.8 +0 0 + +0101101 +* +Ve +0.000102671200703963 +63.1716344482 41.4334929859 0.800000000001 +0 0 + +0101101 +* +Ve +0.000102671200703963 +22.7970800486 51.5 0.8 +0 0 + +0101101 +* +Ve +0.000332604549846037 +-12 51.5 0.8 +0 0 + +0101101 +* +Ve +0.000332604549846037 +-66 -2.5 0.8 +0 0 + +0101101 +* +Ve +0.00331634368160302 +-66 -4.5 0.8 +0 0 + +0101101 +* +Ve +1.78496884545777e-06 +-65.2 -4.5 0 +0 0 + +0101101 +* +Ve +3.57962831280521e-06 +-38.0000035699 -31.7000003729 0 +0 0 + +0101101 +* +Ed + 1e-07 1 1 0 +1 1 0 3.64159265359077 6.78318530718057 +2 1 1 0 3.64159265359077 6.78318530718057 +4 C0 2 0 1 0 +2 2 2 0 3.64159265359077 6.78318530718057 +0 + +0101000 ++5322 0 -5321 0 * +Ed + 1e-07 1 1 0 +1 2 0 0.50000000000098 3.64159265359077 +2 3 3 0 0.50000000000098 3.64159265359077 +4 C0 2 0 3 0 +2 4 2 0 0.50000000000098 3.64159265359077 +0 + +0101000 ++5321 0 -5322 0 * +Ed + 1.00002062092466e-07 1 1 0 +1 3 0 0 109 +4 C0 4 0 5 0 +2 5 4 0 0 109 +2 6 5 0 0 109 +2 7 6 126 0 109 +0 + +0101000 ++5320 127 -5319 127 * +Ed + 1.00029163724341e-07 1 1 0 +1 4 0 31.7056915638 79.3172025741 +2 8 7 0 31.7056915638 79.3172025741 +4 C0 4 0 7 0 +2 9 4 0 31.7056915638 79.3172025741 +2 10 8 126 31.7056915638 79.3172025741 +0 + +0101000 ++5319 127 -5318 127 * +Ed + 1.00002739158374e-07 1 1 0 +1 5 0 0 10 +4 C0 4 0 9 0 +2 11 4 0 0 10 +2 12 9 0 0 10 +2 13 10 126 0 10 +0 + +0101000 ++5318 127 -5317 127 * +Ed + 1.00003279352948e-07 1 1 0 +1 6 0 0 25.5071027635 +2 14 11 0 0 25.5071027635 +4 C0 4 0 11 0 +2 15 4 0 0 25.5071027635 +2 16 12 126 0 25.5071027635 +0 + +0101000 ++5317 127 -5316 127 * +Ed + 1.00038354368293e-07 1 1 0 +1 7 0 0 29.023430645 +4 C0 4 0 13 0 +2 17 4 0 0 29.023430645 +2 18 13 0 0 29.023430645 +2 19 14 126 0 29.023430645 +0 + +0101000 ++5316 127 -5315 127 * +Ed + 1.00002670667292e-07 1 1 0 +1 8 0 31.5197412696 73.7105003877 +2 20 15 0 31.5197412696 73.7105003877 +4 C0 4 0 15 0 +2 21 4 0 31.5197412696 73.7105003877 +2 22 16 126 31.5197412696 73.7105003877 +0 + +0101000 ++5315 127 -5314 127 * +Ed + 1.00001469432613e-07 1 1 0 +1 9 0 0 34.7970800486 +4 C0 4 0 17 0 +2 23 4 0 0 34.7970800486 +2 24 17 0 0 34.7970800486 +2 25 18 126 0 34.7970800486 +0 + +0101000 ++5314 127 -5313 127 * +Ed + 1.00199787322968e-07 1 1 0 +1 10 0 0 86.2473843658 +2 26 19 0 0 86.2473843658 +4 C0 4 0 19 0 +2 27 4 0 0 86.2473843658 +2 28 20 126 0 86.2473843658 +0 + +0101000 ++5313 127 -5312 127 * +Ed + 1.00002066983352e-07 1 1 0 +1 11 0 0 2 +4 C0 4 0 21 0 +2 29 4 0 0 2 +2 30 21 0 0 2 +2 31 22 126 0 2 +0 + +0101000 ++5312 127 -5311 127 * +Ed + 1.00001384227706e-07 1 1 0 +1 12 0 0 46.3368551767 +2 32 23 0 0 46.3368551767 +4 C0 4 0 23 0 +2 33 4 0 0 46.3368551767 +2 34 24 126 0 46.3368551767 +0 + +0101000 ++5311 127 -5320 127 * +Ed + 1e-07 1 1 0 +1 13 0 3.14159265358979 6.28318530717959 +2 35 25 0 3.14159265358979 6.28318530717959 +4 C0 26 0 25 0 +2 36 26 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++5310 0 -5309 0 * +Ed + 1e-07 1 1 0 +1 14 0 0 3.14159265358979 +2 37 27 0 0 3.14159265358979 +4 C0 26 0 27 0 +2 38 26 0 0 3.14159265358979 +0 + +0101000 ++5309 0 -5310 0 * +Ed + 1e-07 1 1 0 +1 15 0 3.14159265358979 6.28318530717959 +2 39 28 0 3.14159265358979 6.28318530717959 +4 C0 29 0 28 0 +2 40 29 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++5308 0 -5307 0 * +Ed + 1e-07 1 1 0 +1 16 0 0 3.14159265358979 +2 41 30 0 0 3.14159265358979 +4 C0 29 0 30 0 +2 42 29 0 0 3.14159265358979 +0 + +0101000 ++5307 0 -5308 0 * +Ed + 4.43472648967862e-05 1 1 0 +1 17 0 28.2743338823 56.5486677646 +2 43 31 0 28.2743338823 56.5486677646 +4 C0 32 0 31 0 +2 44 32 0 28.2743338823 56.5486677646 +0 + +0101000 ++5306 0 -5305 0 * +Ed + 4.43472682381836e-05 1 1 0 +1 18 0 0 28.2743338823 +2 45 33 0 0 28.2743338823 +4 C0 32 0 33 0 +2 46 32 0 0 28.2743338823 +0 + +0101000 ++5305 0 -5306 0 * +Ed + 1.00001423995717e-07 1 1 0 +1 19 0 5.212388980383 8.3539816339728 +2 47 34 0 5.212388980383 8.3539816339728 +4 C0 34 0 35 0 +2 48 35 0 5.212388980383 8.3539816339728 +2 49 32 128 5.212388980383 8.3539816339728 +0 + +0101000 ++5304 0 -5303 0 * +Ed + 1.00001379038797e-07 1 1 0 +1 20 0 2.07079632679321 5.212388980383 +2 50 36 0 2.07079632679321 5.212388980383 +4 C0 36 0 35 0 +2 51 35 0 2.07079632679321 5.212388980383 +2 52 32 128 2.07079632679321 5.212388980383 +0 + +0101000 ++5303 0 -5304 0 * +Ed + 3.15359982666418e-05 1 1 0 +1 21 0 30.1592894745 50.2655019991 +2 53 37 0 30.1592894745 50.2655019991 +4 C0 38 0 37 0 +2 54 38 0 30.1592894745 50.2655019991 +0 + +0101000 ++5302 0 -5301 0 * +Ed + 1e-07 1 1 0 +1 22 0 -1 1 +4 C0 38 0 39 0 +2 55 38 0 -1 1 +2 56 39 0 -1 1 +0 + +0101000 ++5300 0 -5302 0 * +Ed + 3.15356724842967e-05 1 1 0 +1 23 0 10.0531160209 30.1592894745 +2 57 40 0 10.0531160209 30.1592894745 +4 C0 38 0 40 0 +2 58 38 0 10.0531160209 30.1592894745 +0 + +0101000 ++5299 0 -5300 0 * +Ed + 1e-07 1 1 0 +1 24 0 -1.0000195294 0.999980458300001 +4 C0 38 0 41 0 +2 59 38 0 -1.0000195294 0.999980458300001 +2 60 41 0 -1.0000195294 0.999980458300001 +0 + +0101000 ++5299 0 -5301 0 * +Ed + 1e-07 1 1 0 +1 25 0 1.5707963267949 2.36216080475464 +2 61 42 0 1.5707963267949 2.36216080475464 +4 C0 42 0 43 0 +2 62 43 0 1.5707963267949 2.36216080475464 +0 + +0101000 ++5298 0 -5297 0 * +Ed + 1e-07 1 1 0 +1 26 0 -2.5 2 +2 63 42 0 -2.5 2 +2 64 44 0 -2.5 2 +4 G1 42 0 44 0 +0 + +0101000 ++5297 0 -5296 0 * +Ed + 1e-07 1 1 0 +1 27 0 1.5707963267949 2.36216080475464 +2 65 42 0 1.5707963267949 2.36216080475464 +4 C0 42 0 45 0 +2 66 45 0 1.5707963267949 2.36216080475464 +0 + +0101000 ++5295 0 -5296 0 * +Ed + 1e-07 1 1 0 +1 28 0 -2.5 2 +2 67 42 0 -2.5 2 +4 G1 42 0 46 0 +2 68 46 0 -2.5 2 +0 + +0101000 ++5298 0 -5295 0 * +Ed + 1e-07 1 1 0 +1 29 0 -12.8770549857 12.87705498583 +4 C0 46 0 45 0 +2 69 45 0 -12.8770549857 12.87705498583 +2 70 46 0 -12.8770549857 12.87705498583 +0 + +0101000 ++5295 0 -5294 0 * +Ed + 1e-07 1 1 0 +1 30 0 -12.8770549857 12.87705498583 +4 C0 46 0 43 0 +2 71 43 0 -12.8770549857 12.87705498583 +2 72 46 0 -12.8770549857 12.87705498583 +0 + +0101000 ++5298 0 -5293 0 * +Ed + 1e-07 1 1 0 +1 31 0 -2.25 2.25 +2 73 47 0 -2.25 2.25 +4 G1 46 0 47 0 +2 74 46 0 -2.25 2.25 +0 + +0101000 ++5294 0 -5293 0 * +Ed + 1e-07 1 1 0 +1 32 0 1.5707963267949 2.98282369675571 +2 75 47 0 1.5707963267949 2.98282369675571 +4 C0 47 0 43 0 +2 76 43 0 1.5707963267949 2.98282369675571 +0 + +0101000 ++5293 0 -5292 0 * +Ed + 1e-07 1 1 0 +1 33 0 1.5707963267949 2.98282369675571 +2 77 47 0 1.5707963267949 2.98282369675571 +4 C0 47 0 45 0 +2 78 45 0 1.5707963267949 2.98282369675571 +0 + +0101000 ++5294 0 -5291 0 * +Ed + 1e-07 1 1 0 +1 34 0 -2 2.5 +2 79 47 0 -2 2.5 +2 80 48 0 -2 2.5 +4 G1 47 0 48 0 +0 + +0101000 ++5291 0 -5292 0 * +Ed + 1e-07 1 1 0 +1 35 0 1.5707963267949 3.10205666294584 +2 81 49 0 1.5707963267949 3.10205666294584 +4 C0 49 0 43 0 +2 82 43 0 1.5707963267949 3.10205666294584 +0 + +0101000 ++5290 0 -5289 0 * +Ed + 1e-07 1 1 0 +1 36 0 -2.5 2 +2 83 49 0 -2.5 2 +2 84 48 0 -2.5 2 +4 G1 49 0 48 0 +0 + +0101000 ++5289 0 -5288 0 * +Ed + 1e-07 1 1 0 +1 37 0 1.5707963267949 3.10205666294584 +2 85 49 0 1.5707963267949 3.10205666294584 +4 C0 49 0 45 0 +2 86 45 0 1.5707963267949 3.10205666294584 +0 + +0101000 ++5287 0 -5288 0 * +Ed + 1e-07 1 1 0 +1 38 0 -2.5 2 +2 87 49 0 -2.5 2 +4 G1 49 0 50 0 +2 88 50 0 -2.5 2 +0 + +0101000 ++5290 0 -5287 0 * +Ed + 1e-07 1 1 0 +1 39 0 4.71238898038469 6.24364931653564 +2 89 51 0 4.71238898038469 6.24364931653564 +4 C0 51 0 43 0 +2 90 43 0 4.71238898038469 6.24364931653564 +0 + +0101000 ++5286 0 -5285 0 * +Ed + 1e-07 1 1 0 +1 40 0 -2 2.5 +2 91 51 0 -2 2.5 +4 G1 51 0 52 0 +2 92 52 0 -2 2.5 +0 + +0101000 ++5284 0 -5286 0 * +Ed + 1e-07 1 1 0 +1 41 0 4.71238898038469 6.24364931653564 +2 93 51 0 4.71238898038469 6.24364931653564 +4 C0 51 0 45 0 +2 94 45 0 4.71238898038469 6.24364931653564 +0 + +0101000 ++5284 0 -5283 0 * +Ed + 1e-07 1 1 0 +1 42 0 -2 2.5 +2 95 51 0 -2 2.5 +2 96 53 0 -2 2.5 +4 G1 51 0 53 0 +0 + +0101000 ++5283 0 -5285 0 * +Ed + 1e-07 1 1 0 +1 43 0 3.30036161042387 4.71238898038469 +2 97 54 0 3.30036161042387 4.71238898038469 +4 C0 54 0 43 0 +2 98 43 0 3.30036161042387 4.71238898038469 +0 + +0101000 ++5282 0 -5281 0 * +Ed + 1e-07 1 1 0 +1 44 0 -2 2.5 +2 99 54 0 -2 2.5 +2 100 53 0 -2 2.5 +4 G1 54 0 53 0 +0 + +0101000 ++5280 0 -5282 0 * +Ed + 1e-07 1 1 0 +1 45 0 3.30036161042387 4.71238898038469 +2 101 54 0 3.30036161042387 4.71238898038469 +4 C0 54 0 45 0 +2 102 45 0 3.30036161042387 4.71238898038469 +0 + +0101000 ++5280 0 -5279 0 * +Ed + 1e-07 1 1 0 +1 46 0 -2 2.5 +2 103 54 0 -2 2.5 +4 G1 54 0 55 0 +0 + +0101000 ++5279 0 -5281 0 * +Ed + 1e-07 1 1 0 +1 47 0 -2.25 2.25 +2 104 56 0 -2.25 2.25 +4 G1 55 0 56 0 +0 + +0101000 ++5278 0 -5277 0 * +Ed + 1e-07 1 1 0 +1 48 0 -17.0146412197 17.01464121973 +4 C0 55 0 45 0 +2 105 45 0 -17.0146412197 17.01464121973 +0 + +0101000 ++5278 0 -5279 0 * +Ed + 1e-07 1 1 0 +1 49 0 -17.0146412197 17.01464121973 +4 C0 55 0 43 0 +2 106 43 0 -17.0146412197 17.01464121973 +0 + +0101000 ++5277 0 -5281 0 * +Ed + 1e-07 1 1 0 +1 50 0 4.71238898038469 5.17572008760919 +2 107 56 0 4.71238898038469 5.17572008760919 +4 C0 56 0 43 0 +2 108 43 0 4.71238898038469 5.17572008760919 +0 + +0101000 ++5277 0 -5276 0 * +Ed + 1e-07 1 1 0 +1 51 0 4.71238898038469 5.17572008760919 +2 109 56 0 4.71238898038469 5.17572008760919 +4 C0 56 0 45 0 +2 110 45 0 4.71238898038469 5.17572008760919 +0 + +0101000 ++5278 0 -5275 0 * +Ed + 1e-07 1 1 0 +1 52 0 -2 2.5 +2 111 56 0 -2 2.5 +2 112 57 0 -2 2.5 +4 G1 56 0 57 0 +0 + +0101000 ++5275 0 -5276 0 * +Ed + 1.0000051159077e-07 1 1 0 +1 53 0 1.07079632679522 3.64159265359077 +2 113 3 0 1.07079632679522 3.64159265359077 +2 114 58 0 1.07079632679522 3.64159265359077 +4 C0 3 0 58 0 +2 115 59 129 1.07079632679522 3.64159265359077 +0 + +0101000 ++5274 127 -5273 0 * +Ed + 1.00004607671047e-07 1 1 0 +1 54 0 -27.2 -16.3999999999996 +2 116 59 0 -27.2 -16.3999999999996 +2 117 60 0 -27.2 -16.3999999999996 +4 CN 59 0 60 0 +2 118 3 130 -27.2 -16.3999999999996 +0 + +0101000 ++5272 0 -5274 131 * +Ed + 1.00001292562975e-07 1 1 0 +1 55 0 2.64159265358882 5.21238898038447 +2 119 59 0 2.64159265358882 5.21238898038447 +2 120 61 0 2.64159265358882 5.21238898038447 +4 C0 59 0 61 0 +2 121 3 130 2.64159265358882 5.21238898038447 +0 + +0101000 ++5271 131 -5272 0 * +Ed + 1.0002186618355e-07 1 1 0 +1 56 0 -6.69499999997 4.10500000002983 +2 122 3 0 -6.69499999997 4.10500000002983 +2 123 1 0 -6.69499999997 4.10500000002983 +4 CN 3 0 1 0 +2 124 59 129 -6.69499999997 4.10500000002983 +0 + +0101000 ++5273 0 -5271 127 * +Ed + 1.00000582645043e-07 1 1 0 +1 57 0 5.21238898038447 5.78318530717861 +2 125 60 0 5.21238898038447 5.78318530717861 +2 126 62 0 5.21238898038447 5.78318530717861 +4 C0 60 0 62 0 +2 127 3 130 5.21238898038447 5.78318530717861 +0 + +0101000 ++5272 0 -5270 131 * +Ed + 1e-07 1 1 0 +1 58 0 4.10500000003036 7.40500000003 +2 128 3 0 4.10500000003036 7.40500000003 +2 129 1 0 4.10500000003036 7.40500000003 +4 CN 3 0 1 0 +0 + +0101000 ++5270 127 -5321 0 * +Ed + 1e-07 1 1 0 +1 56 0 4.10500000002983 7.40500000003 +2 122 3 0 4.10500000002983 7.40500000003 +2 123 1 0 4.10500000002983 7.40500000003 +4 CN 3 0 1 0 +0 + +0101000 ++5271 127 -5322 0 * +Ed + 1.0000048316906e-07 1 1 0 +1 53 0 0.50000000000098 1.07079632679522 +2 113 3 0 0.50000000000098 1.07079632679522 +2 114 58 0 0.50000000000098 1.07079632679522 +4 C0 3 0 58 0 +2 130 60 129 0.50000000000098 1.07079632679522 +0 + +0101000 ++5269 0 -5274 127 * +Ed + 1.00021896764488e-07 1 1 0 +1 58 0 -6.69499999997 4.10500000003036 +2 128 3 0 -6.69499999997 4.10500000003036 +2 129 1 0 -6.69499999997 4.10500000003036 +4 CN 3 0 1 0 +2 131 60 129 -6.69499999997 4.10500000003036 +0 + +0101000 ++5269 0 -5270 127 * +Ed + 1.00000355271368e-07 1 1 0 +1 59 0 4.21238898038486 6.78318530718057 +2 132 1 0 4.21238898038486 6.78318530718057 +2 133 63 0 4.21238898038486 6.78318530718057 +4 C0 1 0 63 0 +2 134 60 129 4.21238898038486 6.78318530718057 +0 + +0101000 ++5268 127 -5269 0 * +Ed + 1.00004432420032e-07 1 1 0 +1 60 0 -27.2 -16.3999999999994 +2 135 59 0 -27.2 -16.3999999999994 +2 136 60 0 -27.2 -16.3999999999994 +4 CN 59 0 60 0 +2 137 1 130 -27.2 -16.3999999999994 +0 + +0101000 ++5267 0 -5268 131 * +Ed + 1.00000369482223e-07 1 1 0 +1 57 0 5.78318530717861 8.35398163397426 +2 125 60 0 5.78318530717861 8.35398163397426 +2 126 62 0 5.78318530717861 8.35398163397426 +4 C0 60 0 62 0 +2 138 1 130 5.78318530717861 8.35398163397426 +0 + +0101000 ++5270 131 -5267 0 * +Ed + 1.0000027000624e-07 1 1 0 +1 55 0 2.07079632679468 2.64159265358882 +2 119 59 0 2.07079632679468 2.64159265358882 +2 120 61 0 2.07079632679468 2.64159265358882 +4 C0 59 0 61 0 +2 139 1 130 2.07079632679468 2.64159265358882 +0 + +0101000 ++5267 0 -5271 131 * +Ed + 1.00000582645043e-07 1 1 0 +1 59 0 3.64159265359077 4.21238898038486 +2 132 1 0 3.64159265359077 4.21238898038486 +2 133 63 0 3.64159265359077 4.21238898038486 +4 C0 1 0 63 0 +2 140 59 129 3.64159265359077 4.21238898038486 +0 + +0101000 ++5273 0 -5268 127 * +Ed + 1.00000184741111e-07 1 1 0 +1 61 0 5.21238898038399 8.35398163397378 +2 141 58 0 5.21238898038399 8.35398163397378 +4 C0 58 0 64 0 +2 142 64 0 5.21238898038399 8.35398163397378 +2 143 65 129 5.21238898038399 8.35398163397378 +0 + +0101000 ++5266 0 -5265 0 * +Ed + 1e-07 1 1 0 +1 62 0 -0.282842712487936 0.282842712491331 +2 144 58 0 -0.282842712487936 0.282842712491331 +2 145 63 0 -0.282842712487936 0.282842712491331 +4 G2 58 0 63 0 +0 + +0101000 ++5273 0 -5265 0 * +Ed + 1e-07 1 1 0 +1 63 0 -0.282842712487936 0.282842712491331 +2 146 58 0 -0.282842712487936 0.282842712491331 +2 147 63 0 -0.282842712487936 0.282842712491331 +4 G2 58 0 63 0 +0 + +0101000 ++5269 0 -5266 0 * +Ed + 1.00000213162821e-07 1 1 0 +1 64 0 2.0707963267942 5.21238898038399 +2 148 63 0 2.0707963267942 5.21238898038399 +4 C0 63 0 64 0 +2 149 64 0 2.0707963267942 5.21238898038399 +2 150 65 129 2.0707963267942 5.21238898038399 +0 + +0101000 ++5265 0 -5266 0 * +Ed + 1.00000227373675e-07 1 1 0 +1 65 0 1.07079632679402 3.14159265358979 +2 151 30 0 1.07079632679402 3.14159265358979 +2 152 66 0 1.07079632679402 3.14159265358979 +4 C0 30 0 66 0 +2 153 67 132 1.07079632679402 3.14159265358979 +0 + +0101000 ++5264 127 -5263 0 * +Ed + 1.00000383693077e-07 1 1 0 +1 66 0 -26.2 -16.3999999999991 +2 154 67 0 -26.2 -16.3999999999991 +2 155 68 0 -26.2 -16.3999999999991 +4 CN 67 0 68 0 +2 156 30 133 -26.2 -16.3999999999991 +0 + +0101000 ++5262 0 -5264 134 * +Ed + 1.0000135957112e-07 1 1 0 +1 67 0 3.14159265358979 5.21238898038557 +2 157 67 0 3.14159265358979 5.21238898038557 +2 158 69 0 3.14159265358979 5.21238898038557 +4 C0 67 0 69 0 +2 159 30 133 3.14159265358979 5.21238898038557 +0 + +0101000 ++5261 134 -5262 0 * +Ed + 1.00000127897692e-07 1 1 0 +1 68 0 -6.35 3.4500000000004 +2 160 30 0 -6.35 3.4500000000004 +2 161 28 0 -6.35 3.4500000000004 +4 CN 30 0 28 0 +2 162 67 132 -6.35 3.4500000000004 +0 + +0101000 ++5263 0 -5261 127 * +Ed + 1.00001417955637e-07 1 1 0 +1 69 0 5.21238898038557 6.28318530717967 +2 163 68 0 5.21238898038557 6.28318530717967 +2 164 70 0 5.21238898038557 6.28318530717967 +4 C0 68 0 70 0 +2 165 30 133 5.21238898038557 6.28318530717967 +0 + +0101000 ++5262 0 -5260 134 * +Ed + 1e-07 1 1 0 +1 70 0 3.45000000000027 6.75 +2 166 30 0 3.45000000000027 6.75 +2 167 28 0 3.45000000000027 6.75 +4 CN 30 0 28 0 +0 + +0101000 ++5260 127 -5307 0 * +Ed + 1e-07 1 1 0 +1 68 0 3.4500000000004 6.75 +2 160 30 0 3.4500000000004 6.75 +2 161 28 0 3.4500000000004 6.75 +4 CN 30 0 28 0 +0 + +0101000 ++5261 127 -5308 0 * +Ed + 1.00000298427949e-07 1 1 0 +1 65 0 0 1.07079632679402 +2 151 30 0 0 1.07079632679402 +2 152 66 0 0 1.07079632679402 +4 C0 30 0 66 0 +2 168 68 132 0 1.07079632679402 +0 + +0101000 ++5259 0 -5264 127 * +Ed + 1.00000085265128e-07 1 1 0 +1 70 0 -6.35 3.45000000000027 +2 166 30 0 -6.35 3.45000000000027 +2 167 28 0 -6.35 3.45000000000027 +4 CN 30 0 28 0 +2 169 68 132 -6.35 3.45000000000027 +0 + +0101000 ++5259 0 -5260 127 * +Ed + 1.00000341060513e-07 1 1 0 +1 71 0 4.21238898038381 6.28318530717959 +2 170 28 0 4.21238898038381 6.28318530717959 +2 171 71 0 4.21238898038381 6.28318530717959 +4 C0 28 0 71 0 +2 172 68 132 4.21238898038381 6.28318530717959 +0 + +0101000 ++5258 127 -5259 0 * +Ed + 1.00000312638804e-07 1 1 0 +1 72 0 -26.2 -16.4000000000005 +2 173 67 0 -26.2 -16.4000000000005 +2 174 68 0 -26.2 -16.4000000000005 +4 CN 67 0 68 0 +2 175 28 133 -26.2 -16.4000000000005 +0 + +0101000 ++5257 0 -5258 134 * +Ed + 1.00001355033128e-07 1 1 0 +1 69 0 6.28318530717967 8.35398163397536 +2 163 68 0 6.28318530717967 8.35398163397536 +2 164 70 0 6.28318530717967 8.35398163397536 +4 C0 68 0 70 0 +2 176 28 133 6.28318530717967 8.35398163397536 +0 + +0101000 ++5260 134 -5257 0 * +Ed + 1.00001128399136e-07 1 1 0 +1 67 0 2.07079632679577 3.14159265358979 +2 157 67 0 2.07079632679577 3.14159265358979 +2 158 69 0 2.07079632679577 3.14159265358979 +4 C0 67 0 69 0 +2 177 28 133 2.07079632679577 3.14159265358979 +0 + +0101000 ++5257 0 -5261 134 * +Ed + 1.00000326849658e-07 1 1 0 +1 71 0 3.14159265358979 4.21238898038381 +2 170 28 0 3.14159265358979 4.21238898038381 +2 171 71 0 3.14159265358979 4.21238898038381 +4 C0 28 0 71 0 +2 178 67 132 3.14159265358979 4.21238898038381 +0 + +0101000 ++5263 0 -5258 127 * +Ed + 1.00000213162821e-07 1 1 0 +1 73 0 3.14159265358979 6.28318530717959 +2 179 71 0 3.14159265358979 6.28318530717959 +4 C0 71 0 72 0 +2 180 72 0 3.14159265358979 6.28318530717959 +2 181 73 132 3.14159265358979 6.28318530717959 +0 + +0101000 ++5256 0 -5255 0 * +Ed + 1e-07 1 1 0 +1 74 0 -0.282842712474619 0.282842712474619 +2 182 71 0 -0.282842712474619 0.282842712474619 +2 183 66 0 -0.282842712474619 0.282842712474619 +4 CN 71 0 66 0 +0 + +0101000 ++5259 0 -5255 0 * +Ed + 1e-07 1 1 0 +1 75 0 -0.282842712474619 0.282842712474619 +2 184 71 0 -0.282842712474619 0.282842712474619 +2 185 66 0 -0.282842712474619 0.282842712474619 +4 CN 71 0 66 0 +0 + +0101000 ++5263 0 -5256 0 * +Ed + 1.00000255795385e-07 1 1 0 +1 76 0 0 3.14159265358979 +2 186 66 0 0 3.14159265358979 +4 C0 66 0 72 0 +2 187 72 0 0 3.14159265358979 +2 188 73 132 0 3.14159265358979 +0 + +0101000 ++5255 0 -5256 0 * +Ed + 1.00000255795385e-07 1 1 0 +1 77 0 1.07079632679411 3.14159265358979 +2 189 27 0 1.07079632679411 3.14159265358979 +2 190 74 0 1.07079632679411 3.14159265358979 +4 C0 27 0 74 0 +2 191 67 135 1.07079632679411 3.14159265358979 +0 + +0101000 ++5254 127 -5253 0 * +Ed + 1.00000056843419e-07 1 1 0 +1 66 0 -26.2 -16.3999999999998 +2 154 67 0 -26.2 -16.3999999999998 +2 155 68 0 -26.2 -16.3999999999998 +4 CN 67 0 68 0 +2 192 27 136 -26.2 -16.3999999999998 +0 + +0101000 ++5262 0 -5254 137 * +Ed + 1.00000913482761e-07 1 1 0 +1 67 0 3.14159265358979 5.21238898038557 +2 157 67 0 3.14159265358979 5.21238898038557 +2 158 69 0 3.14159265358979 5.21238898038557 +4 C0 67 0 69 0 +2 193 27 136 3.14159265358979 5.21238898038557 +0 + +0101000 ++5252 137 -5262 0 * +Ed + 1.00000142108547e-07 1 1 0 +1 78 0 -6.35 3.45000000000036 +2 194 27 0 -6.35 3.45000000000036 +2 195 25 0 -6.35 3.45000000000036 +4 CN 27 0 25 0 +2 196 67 135 -6.35 3.45000000000036 +0 + +0101000 ++5253 0 -5252 127 * +Ed + 1.00000934140782e-07 1 1 0 +1 69 0 5.21238898038557 6.28318530717965 +2 163 68 0 5.21238898038557 6.28318530717965 +2 164 70 0 5.21238898038557 6.28318530717965 +4 C0 68 0 70 0 +2 197 27 136 5.21238898038557 6.28318530717965 +0 + +0101000 ++5262 0 -5251 137 * +Ed + 1e-07 1 1 0 +1 79 0 3.45000000000044 6.75 +2 198 27 0 3.45000000000044 6.75 +2 199 25 0 3.45000000000044 6.75 +4 CN 27 0 25 0 +0 + +0101000 ++5251 127 -5309 0 * +Ed + 1e-07 1 1 0 +1 78 0 3.45000000000036 6.75 +2 194 27 0 3.45000000000036 6.75 +2 195 25 0 3.45000000000036 6.75 +4 CN 27 0 25 0 +0 + +0101000 ++5252 127 -5310 0 * +Ed + 1.00000355271368e-07 1 1 0 +1 77 0 0 1.07079632679411 +2 189 27 0 0 1.07079632679411 +2 190 74 0 0 1.07079632679411 +4 C0 27 0 74 0 +2 200 68 135 0 1.07079632679411 +0 + +0101000 ++5250 0 -5254 127 * +Ed + 1.00000099475983e-07 1 1 0 +1 79 0 -6.35 3.45000000000044 +2 198 27 0 -6.35 3.45000000000044 +2 199 25 0 -6.35 3.45000000000044 +4 CN 27 0 25 0 +2 201 68 135 -6.35 3.45000000000044 +0 + +0101000 ++5250 0 -5251 127 * +Ed + 1.00000341060513e-07 1 1 0 +1 80 0 4.21238898038381 6.28318530717959 +2 202 25 0 4.21238898038381 6.28318530717959 +2 203 75 0 4.21238898038381 6.28318530717959 +4 C0 25 0 75 0 +2 204 68 135 4.21238898038381 6.28318530717959 +0 + +0101000 ++5249 127 -5250 0 * +Ed + 1.00000540012479e-07 1 1 0 +1 72 0 -26.2 -16.4000000000005 +2 173 67 0 -26.2 -16.4000000000005 +2 174 68 0 -26.2 -16.4000000000005 +4 CN 67 0 68 0 +2 205 25 136 -26.2 -16.4000000000005 +0 + +0101000 ++5257 0 -5249 137 * +Ed + 1.00000369482223e-07 1 1 0 +1 69 0 6.28318530717965 8.35398163397536 +2 163 68 0 6.28318530717965 8.35398163397536 +2 164 70 0 6.28318530717965 8.35398163397536 +4 C0 68 0 70 0 +2 206 25 136 6.28318530717965 8.35398163397536 +0 + +0101000 ++5251 137 -5257 0 * +Ed + 1.00000952869335e-07 1 1 0 +1 67 0 2.07079632679577 3.14159265358979 +2 157 67 0 2.07079632679577 3.14159265358979 +2 158 69 0 2.07079632679577 3.14159265358979 +4 C0 67 0 69 0 +2 207 25 136 2.07079632679577 3.14159265358979 +0 + +0101000 ++5257 0 -5252 137 * +Ed + 1.00000341060513e-07 1 1 0 +1 80 0 3.14159265358979 4.21238898038381 +2 202 25 0 3.14159265358979 4.21238898038381 +2 203 75 0 3.14159265358979 4.21238898038381 +4 C0 25 0 75 0 +2 208 67 135 3.14159265358979 4.21238898038381 +0 + +0101000 ++5253 0 -5249 127 * +Ed + 1.00000227373675e-07 1 1 0 +1 81 0 3.14159265358979 6.28318530717959 +2 209 75 0 3.14159265358979 6.28318530717959 +4 C0 75 0 76 0 +2 210 76 0 3.14159265358979 6.28318530717959 +2 211 73 135 3.14159265358979 6.28318530717959 +0 + +0101000 ++5248 0 -5247 0 * +Ed + 1e-07 1 1 0 +1 82 0 -0.282842712474619 0.282842712474619 +2 212 75 0 -0.282842712474619 0.282842712474619 +2 213 74 0 -0.282842712474619 0.282842712474619 +4 CN 75 0 74 0 +0 + +0101000 ++5250 0 -5247 0 * +Ed + 1e-07 1 1 0 +1 83 0 -0.282842712474619 0.282842712474619 +2 214 75 0 -0.282842712474619 0.282842712474619 +2 215 74 0 -0.282842712474619 0.282842712474619 +4 CN 75 0 74 0 +0 + +0101000 ++5253 0 -5248 0 * +Ed + 1.00000255795385e-07 1 1 0 +1 84 0 4.71238898038469 7.85398163397448 +2 216 74 0 4.71238898038469 7.85398163397448 +4 C0 74 0 76 0 +2 217 76 0 4.71238898038469 7.85398163397448 +2 218 73 135 4.71238898038469 7.85398163397448 +0 + +0101000 ++5247 0 -5248 0 * +Ed + 1e-07 1 1 0 +1 85 0 -2.3 -2 +2 219 77 0 -2.3 -2 +2 220 48 0 -2.3 -2 +4 CN 77 0 48 0 +0 + +0101000 ++5246 0 -5245 0 * +Ed + 1e-07 1 1 0 +1 86 0 0 3.14159265358979 +2 221 77 0 0 3.14159265358979 +4 C0 77 0 45 0 +2 222 45 0 0 3.14159265358979 +0 + +0101000 ++5244 0 -5245 0 * +Ed + 1e-07 1 1 0 +1 87 0 -2.3 -2 +2 223 77 0 -2.3 -2 +2 224 48 0 -2.3 -2 +4 CN 77 0 48 0 +0 + +0101000 ++5243 0 -5244 0 * +Ed + 1e-07 1 1 0 +1 88 0 0 3.14159265358979 +2 225 77 0 0 3.14159265358979 +2 226 78 0 0 3.14159265358979 +4 C0 77 0 78 0 +0 + +0101000 ++5243 0 -5246 0 * +Ed + 1e-07 1 1 0 +1 89 0 6.1244163503479 6.28318530717959 +2 227 48 0 6.1244163503479 6.28318530717959 +4 C0 48 0 45 0 +2 228 45 0 6.1244163503479 6.28318530717959 +0 + +0101000 ++5291 0 -5244 0 * +Ed + 1e-07 1 1 0 +1 90 0 3.18112864423286 6.1244163503479 +2 229 48 0 3.18112864423286 6.1244163503479 +4 C0 48 0 43 0 +2 230 43 0 3.18112864423286 6.1244163503479 +0 + +0101000 ++5289 0 -5292 0 * +Ed + 1e-07 1 1 0 +1 91 0 3.14159265358979 3.18112864423286 +2 231 48 0 3.14159265358979 3.18112864423286 +4 C0 48 0 45 0 +2 232 45 0 3.14159265358979 3.18112864423286 +0 + +0101000 ++5245 0 -5288 0 * +Ed + 1e-07 1 1 0 +1 92 0 3.14159265358979 6.28318530717959 +2 233 48 0 3.14159265358979 6.28318530717959 +2 234 79 0 3.14159265358979 6.28318530717959 +4 C0 48 0 79 0 +0 + +0101000 ++5246 0 -5243 0 * +Ed + 1e-07 1 1 0 +1 93 0 0 3.14159265358979 +2 235 78 0 0 3.14159265358979 +4 C0 76 0 78 0 +2 236 76 0 0 3.14159265358979 +0 + +0101000 ++5242 0 -5241 0 * +Ed + 1e-07 1 1 0 +1 94 0 3.14159265358979 6.28318530717959 +2 237 79 0 3.14159265358979 6.28318530717959 +4 C0 76 0 79 0 +2 238 76 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++5241 0 -5242 0 * +Ed + 1.00000005329071e-07 1 1 0 +1 95 0 0 3.14159265358979 +2 239 80 0 0 3.14159265358979 +4 C0 80 0 81 0 +2 240 81 0 0 3.14159265358979 +2 241 76 138 0 3.14159265358979 +2 242 72 139 0 3.14159265358979 +0 + +0101000 ++5240 0 -5239 0 * +Ed + 1.00000005329071e-07 1 1 0 +1 96 0 3.14159265358979 6.28318530717959 +2 243 82 0 3.14159265358979 6.28318530717959 +4 C0 82 0 81 0 +2 244 81 0 3.14159265358979 6.28318530717959 +2 245 76 138 3.14159265358979 6.28318530717959 +2 246 72 139 3.14159265358979 6.28318530717959 +0 + +0101000 ++5239 0 -5240 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 97 0 3.14159265358979 6.28318530717959 +2 247 83 0 3.14159265358979 6.28318530717959 +4 C0 81 0 83 0 +2 248 81 0 3.14159265358979 6.28318530717959 +2 249 76 138 3.14159265358979 6.28318530717959 +2 250 72 139 3.14159265358979 6.28318530717959 +0 + +0101000 ++5238 0 -5237 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 98 0 0 3.14159265358979 +2 251 84 0 0 3.14159265358979 +4 C0 81 0 84 0 +2 252 81 0 0 3.14159265358979 +2 253 76 138 0 3.14159265358979 +2 254 72 139 0 3.14159265358979 +0 + +0101000 ++5237 0 -5238 0 * +Ed + 1.0000135957112e-07 1 1 0 +1 99 0 5.21238898038468 8.35398163397447 +2 255 85 0 5.21238898038468 8.35398163397447 +4 C0 73 0 85 0 +2 256 73 0 5.21238898038468 8.35398163397447 +2 257 76 136 5.21238898038468 8.35398163397447 +2 258 72 133 5.21238898038468 8.35398163397447 +0 + +0101000 ++5236 0 -5235 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 100 0 2.07079632679489 5.21238898038468 +2 259 86 0 2.07079632679489 5.21238898038468 +4 C0 73 0 86 0 +2 260 73 0 2.07079632679489 5.21238898038468 +2 261 76 136 2.07079632679489 5.21238898038468 +2 262 72 133 2.07079632679489 5.21238898038468 +0 + +0101000 ++5235 0 -5236 0 * +Ed + 1e-07 1 1 0 +1 101 0 -0.14142135623731 0.141421356237306 +2 263 79 0 -0.14142135623731 0.141421356237306 +2 264 78 0 -0.14142135623731 0.141421356237306 +4 CN 79 0 78 0 +0 + +0101000 ++5241 0 -5246 0 * +Ed + 1e-07 1 1 0 +1 102 0 -0.14142135623731 0.14142135623731 +2 265 79 0 -0.14142135623731 0.14142135623731 +2 266 78 0 -0.14142135623731 0.14142135623731 +4 CN 79 0 78 0 +0 + +0101000 ++5242 0 -5243 0 * +Ed + 1e-07 1 1 0 +1 103 0 -2.3 -2 +2 267 87 0 -2.3 -2 +2 268 53 0 -2.3 -2 +4 CN 87 0 53 0 +0 + +0101000 ++5234 0 -5233 0 * +Ed + 1e-07 1 1 0 +1 104 0 3.14159265358979 6.28318530717959 +2 269 87 0 3.14159265358979 6.28318530717959 +4 C0 87 0 45 0 +2 270 45 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++5232 0 -5233 0 * +Ed + 1e-07 1 1 0 +1 105 0 -2.3 -2 +2 271 87 0 -2.3 -2 +2 272 53 0 -2.3 -2 +4 CN 87 0 53 0 +0 + +0101000 ++5231 0 -5232 0 * +Ed + 1e-07 1 1 0 +1 106 0 3.14159265358979 6.28318530717959 +2 273 87 0 3.14159265358979 6.28318530717959 +2 274 88 0 3.14159265358979 6.28318530717959 +4 C0 87 0 88 0 +0 + +0101000 ++5231 0 -5234 0 * +Ed + 1e-07 1 1 0 +1 107 0 3.10205666294673 3.14159265358979 +2 275 53 0 3.10205666294673 3.14159265358979 +4 C0 53 0 45 0 +2 276 45 0 3.10205666294673 3.14159265358979 +0 + +0101000 ++5283 0 -5232 0 * +Ed + 1e-07 1 1 0 +1 108 0 0.158768956831688 3.10205666294673 +2 277 53 0 0.158768956831688 3.10205666294673 +4 C0 53 0 43 0 +2 278 43 0 0.158768956831688 3.10205666294673 +0 + +0101000 ++5282 0 -5285 0 * +Ed + 1e-07 1 1 0 +1 109 0 0 0.158768956831688 +2 279 53 0 0 0.158768956831688 +4 C0 53 0 45 0 +2 280 45 0 0 0.158768956831688 +0 + +0101000 ++5233 0 -5280 0 * +Ed + 1e-07 1 1 0 +1 110 0 0 3.14159265358979 +2 281 53 0 0 3.14159265358979 +2 282 89 0 0 3.14159265358979 +4 C0 53 0 89 0 +0 + +0101000 ++5234 0 -5231 0 * +Ed + 1e-07 1 1 0 +1 111 0 3.14159265358979 6.28318530717959 +2 283 88 0 3.14159265358979 6.28318530717959 +4 C0 72 0 88 0 +2 284 72 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++5230 0 -5229 0 * +Ed + 1e-07 1 1 0 +1 112 0 0 3.14159265358979 +2 285 89 0 0 3.14159265358979 +4 C0 72 0 89 0 +2 286 72 0 0 3.14159265358979 +0 + +0101000 ++5229 0 -5230 0 * +Ed + 1e-07 1 1 0 +1 113 0 -0.14142135623731 0.14142135623731 +2 287 89 0 -0.14142135623731 0.14142135623731 +2 288 88 0 -0.14142135623731 0.14142135623731 +4 CN 89 0 88 0 +0 + +0101000 ++5229 0 -5234 0 * +Ed + 1e-07 1 1 0 +1 114 0 -0.14142135623731 0.141421356237306 +2 289 89 0 -0.14142135623731 0.141421356237306 +2 290 88 0 -0.14142135623731 0.141421356237306 +4 CN 89 0 88 0 +0 + +0101000 ++5230 0 -5231 0 * +Ed + 1e-07 1 1 0 +1 115 0 -2.3 2.5 +2 291 44 0 -2.3 2.5 +2 292 57 0 -2.3 2.5 +4 CN 44 0 57 0 +0 + +0101000 ++5228 0 -5227 0 * +Ed + 1e-07 1 1 0 +1 116 0 3.92102450242678 6.28318530717959 +2 293 44 0 3.92102450242678 6.28318530717959 +4 C0 44 0 43 0 +2 294 43 0 3.92102450242678 6.28318530717959 +0 + +0101000 ++5297 0 -5227 0 * +Ed + 1e-07 1 1 0 +1 117 0 3.14159265358979 3.92102450242678 +2 295 44 0 3.14159265358979 3.92102450242678 +4 C0 44 0 45 0 +2 296 45 0 3.14159265358979 3.92102450242678 +0 + +0101000 ++5226 0 -5296 0 * +Ed + 1e-07 1 1 0 +1 118 0 -2.3 -2 +2 297 44 0 -2.3 -2 +2 298 57 0 -2.3 -2 +4 CN 44 0 57 0 +0 + +0101000 ++5225 0 -5226 0 * +Ed + 1e-07 1 1 0 +1 119 0 3.14159265358979 6.28318530717959 +2 299 44 0 3.14159265358979 6.28318530717959 +2 300 90 0 3.14159265358979 6.28318530717959 +4 C0 44 0 90 0 +0 + +0101000 ++5225 0 -5228 0 * +Ed + 1e-07 1 1 0 +1 120 0 2.03412743401877 3.14159265358979 +2 301 57 0 2.03412743401877 3.14159265358979 +4 C0 57 0 45 0 +2 302 45 0 2.03412743401877 3.14159265358979 +0 + +0101000 ++5275 0 -5226 0 * +Ed + 1e-07 1 1 0 +1 121 0 0 2.03412743401877 +2 303 57 0 0 2.03412743401877 +4 C0 57 0 43 0 +2 304 43 0 0 2.03412743401877 +0 + +0101000 ++5227 0 -5276 0 * +Ed + 1e-07 1 1 0 +1 122 0 0 3.14159265358979 +2 305 57 0 0 3.14159265358979 +2 306 91 0 0 3.14159265358979 +4 C0 57 0 91 0 +0 + +0101000 ++5228 0 -5225 0 * +Ed + 1e-07 1 1 0 +1 123 0 3.14159265358979 6.28318530717959 +2 307 90 0 3.14159265358979 6.28318530717959 +4 C0 64 0 90 0 +2 308 64 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++5224 0 -5223 0 * +Ed + 1e-07 1 1 0 +1 124 0 0 3.14159265358979 +2 309 91 0 0 3.14159265358979 +4 C0 64 0 91 0 +2 310 64 0 0 3.14159265358979 +0 + +0101000 ++5223 0 -5224 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 125 0 0 3.14159265358979 +2 311 92 0 0 3.14159265358979 +4 C0 92 0 93 0 +2 312 93 0 0 3.14159265358979 +2 313 64 140 0 3.14159265358979 +0 + +0101000 ++5222 0 -5221 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 126 0 3.14159265358979 6.28318530717959 +2 314 94 0 3.14159265358979 6.28318530717959 +4 C0 94 0 93 0 +2 315 93 0 3.14159265358979 6.28318530717959 +2 316 64 140 3.14159265358979 6.28318530717959 +0 + +0101000 ++5221 0 -5222 0 * +Ed + 1.00000005329071e-07 1 1 0 +1 127 0 3.14159265358979 6.28318530717959 +2 317 95 0 3.14159265358979 6.28318530717959 +4 C0 93 0 95 0 +2 318 93 0 3.14159265358979 6.28318530717959 +2 319 64 140 3.14159265358979 6.28318530717959 +0 + +0101000 ++5220 0 -5219 0 * +Ed + 1.00000005329071e-07 1 1 0 +1 128 0 0 3.14159265358979 +2 320 96 0 0 3.14159265358979 +4 C0 93 0 96 0 +2 321 93 0 0 3.14159265358979 +2 322 64 140 0 3.14159265358979 +0 + +0101000 ++5219 0 -5220 0 * +Ed + 1.00001350629417e-07 1 1 0 +1 129 0 5.21238898038437 8.35398163397416 +2 323 97 0 5.21238898038437 8.35398163397416 +4 C0 65 0 97 0 +2 324 65 0 5.21238898038437 8.35398163397416 +2 325 64 130 5.21238898038437 8.35398163397416 +0 + +0101000 ++5218 0 -5217 0 * +Ed + 1.00000971340767e-07 1 1 0 +1 130 0 2.07079632679458 5.21238898038437 +2 326 98 0 2.07079632679458 5.21238898038437 +4 C0 65 0 98 0 +2 327 65 0 2.07079632679458 5.21238898038437 +2 328 64 130 2.07079632679458 5.21238898038437 +0 + +0101000 ++5217 0 -5218 0 * +Ed + 1e-07 1 1 0 +1 131 0 -0.141421356237315 0.141421356237306 +2 329 91 0 -0.141421356237315 0.141421356237306 +2 330 90 0 -0.141421356237315 0.141421356237306 +4 CN 91 0 90 0 +0 + +0101000 ++5223 0 -5228 0 * +Ed + 1e-07 1 1 0 +1 132 0 -0.141421356237308 0.141421356237311 +2 331 91 0 -0.141421356237308 0.141421356237311 +2 332 90 0 -0.141421356237308 0.141421356237311 +4 CN 91 0 90 0 +0 + +0101000 ++5224 0 -5225 0 * +Ed + 1e-07 1 1 0 +1 133 0 -1 1 +4 C0 39 0 99 0 +2 333 39 0 -1 1 +2 334 99 0 -1 1 +0 + +0101000 ++5216 0 -5215 0 * +Ed + 1e-07 1 1 0 +1 134 0 -5.05 5.05 +2 335 40 0 -5.05 5.05 +4 G1 39 0 40 0 +2 336 39 0 -5.05 5.05 +0 + +0101000 ++5300 0 -5215 0 * +Ed + 1e-07 1 1 0 +1 135 0 -5.05 5.05 +2 337 37 0 -5.05 5.05 +4 G1 39 0 37 0 +2 338 39 0 -5.05 5.05 +0 + +0101000 ++5302 0 -5216 0 * +Ed + 1e-07 1 1 0 +1 136 0 -1.85 8.25 +2 339 40 0 -1.85 8.25 +4 G1 40 0 41 0 +2 340 41 0 -1.85 8.25 +0 + +0101000 ++5214 0 -5299 0 * +Ed + 1e-07 1 1 0 +1 137 0 1.57079937826365 4.71238898038469 +2 341 40 0 1.57079937826365 4.71238898038469 +2 342 100 0 1.57079937826365 4.71238898038469 +4 C0 40 0 100 0 +0 + +0101000 ++5214 0 -5215 0 * +Ed + 1e-07 1 1 0 +1 138 0 -0.999999993899998 0.999999993800003 +4 C0 41 0 101 0 +2 343 41 0 -0.999999993899998 0.999999993800003 +2 344 101 0 -0.999999993899998 0.999999993800003 +0 + +0101000 ++5214 0 -5213 0 * +Ed + 1e-07 1 1 0 +1 139 0 -5.05 5.05 +2 345 37 0 -5.05 5.05 +4 G1 41 0 37 0 +2 346 41 0 -5.05 5.05 +0 + +0101000 ++5301 0 -5213 0 * +Ed + 1e-07 1 1 0 +1 140 0 4.71238898038469 7.85398468736511 +2 347 37 0 4.71238898038469 7.85398468736511 +2 348 102 0 4.71238898038469 7.85398468736511 +4 C0 37 0 102 0 +0 + +0101000 ++5216 0 -5213 0 * +Ed + 1e-07 1 1 0 +1 141 0 -0.28284271247462 0.282842712474619 +2 349 100 0 -0.28284271247462 0.282842712474619 +4 G1 101 0 100 0 +2 350 101 0 -0.28284271247462 0.282842712474619 +0 + +0101000 ++5212 0 -5214 0 * +Ed + 1e-07 1 1 0 +1 142 0 -40.7521847057 -38.7521834974 +4 C0 101 0 45 0 +2 351 45 0 -40.7521847057 -38.7521834974 +2 352 101 0 -40.7521847057 -38.7521834974 +0 + +0101000 ++5212 0 -5211 0 * +Ed + 1e-07 1 1 0 +1 143 0 -0.28284271247462 0.282842712474619 +2 353 102 0 -0.28284271247462 0.282842712474619 +4 G1 101 0 102 0 +2 354 101 0 -0.28284271247462 0.282842712474619 +0 + +0101000 ++5211 0 -5213 0 * +Ed + 1e-07 1 1 0 +1 144 0 -0.282842712474619 0.282842712474619 +2 355 102 0 -0.282842712474619 0.282842712474619 +4 G1 102 0 99 0 +2 356 99 0 -0.282842712474619 0.282842712474619 +0 + +0101000 ++5216 0 -5210 0 * +Ed + 1e-07 1 1 0 +1 145 0 3.14159265358979 6.283188180959 +2 357 102 0 3.14159265358979 6.283188180959 +4 C0 102 0 45 0 +2 358 45 0 3.14159265358979 6.283188180959 +0 + +0101000 ++5210 0 -5211 0 * +Ed + 1e-07 1 1 0 +1 146 0 38.7521639557 40.7521639557 +4 C0 99 0 45 0 +2 359 45 0 38.7521639557 40.7521639557 +2 360 99 0 38.7521639557 40.7521639557 +0 + +0101000 ++5210 0 -5209 0 * +Ed + 1e-07 1 1 0 +1 147 0 -0.282842712474619 0.282842712474619 +2 361 100 0 -0.282842712474619 0.282842712474619 +4 G1 99 0 100 0 +2 362 99 0 -0.282842712474619 0.282842712474619 +0 + +0101000 ++5209 0 -5215 0 * +Ed + 1e-07 1 1 0 +1 148 0 3.05147058888093e-06 3.14159265358979 +2 363 100 0 3.05147058888093e-06 3.14159265358979 +4 C0 100 0 45 0 +2 364 45 0 3.05147058888093e-06 3.14159265358979 +0 + +0101000 ++5212 0 -5209 0 * +Ed + 1e-07 1 1 0 +1 149 0 -1.85 7.25 +2 365 31 0 -1.85 7.25 +2 366 33 0 -1.85 7.25 +4 CN 31 0 33 0 +0 + +0101000 ++5208 0 -5305 0 * +Ed + 1e-07 1 1 0 +1 150 0 -1.85 7.25 +2 367 31 0 -1.85 7.25 +2 368 33 0 -1.85 7.25 +4 CN 31 0 33 0 +0 + +0101000 ++5207 0 -5306 0 * +Ed + 1e-07 1 1 0 +1 151 0 3.14159265358979 6.28318530717959 +2 369 31 0 3.14159265358979 6.28318530717959 +2 370 103 0 3.14159265358979 6.28318530717959 +4 C0 31 0 103 0 +0 + +0101000 ++5207 0 -5208 0 * +Ed + 1e-07 1 1 0 +1 152 0 0 3.14159265358979 +2 371 33 0 0 3.14159265358979 +2 372 104 0 0 3.14159265358979 +4 C0 33 0 104 0 +0 + +0101000 ++5208 0 -5207 0 * +Ed + 1e-07 1 1 0 +1 153 0 4.71238898038469 7.85398163397448 +2 373 104 0 4.71238898038469 7.85398163397448 +4 C0 104 0 45 0 +2 374 45 0 4.71238898038469 7.85398163397448 +0 + +0101000 ++5206 0 -5205 0 * +Ed + 1e-07 1 1 0 +1 154 0 -0.282842712474619 0.282842712474619 +2 375 104 0 -0.282842712474619 0.282842712474619 +2 376 103 0 -0.282842712474619 0.282842712474619 +4 CN 104 0 103 0 +0 + +0101000 ++5207 0 -5205 0 * +Ed + 1e-07 1 1 0 +1 155 0 -0.282842712474619 0.282842712474619 +2 377 104 0 -0.282842712474619 0.282842712474619 +2 378 103 0 -0.282842712474619 0.282842712474619 +4 CN 104 0 103 0 +0 + +0101000 ++5208 0 -5206 0 * +Ed + 1e-07 1 1 0 +1 156 0 3.14159265358979 6.28318530717959 +2 379 103 0 3.14159265358979 6.28318530717959 +4 C0 103 0 45 0 +2 380 45 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++5205 0 -5206 0 * +Ed + 1e-07 1 1 0 +1 157 0 -4.3041571954 4.3041571953 +4 C0 50 0 45 0 +2 381 45 0 -4.3041571954 4.3041571953 +2 382 50 0 -4.3041571954 4.3041571953 +0 + +0101000 ++5287 0 -5204 0 * +Ed + 1e-07 1 1 0 +1 158 0 -4.3041571954 4.3041571953 +4 C0 50 0 43 0 +2 383 43 0 -4.3041571954 4.3041571953 +2 384 50 0 -4.3041571954 4.3041571953 +0 + +0101000 ++5290 0 -5203 0 * +Ed + 1e-07 1 1 0 +1 159 0 -2.25 2.25 +2 385 105 0 -2.25 2.25 +4 G1 50 0 105 0 +2 386 50 0 -2.25 2.25 +0 + +0101000 ++5204 0 -5203 0 * +Ed + 1e-07 1 1 0 +1 160 0 3.69290962272204 4.71238898038469 +2 387 105 0 3.69290962272204 4.71238898038469 +4 C0 105 0 45 0 +2 388 45 0 3.69290962272204 4.71238898038469 +0 + +0101000 ++5202 0 -5204 0 * +Ed + 1e-07 1 1 0 +1 161 0 3.69290962272204 4.71238898038469 +2 389 105 0 3.69290962272204 4.71238898038469 +4 C0 105 0 43 0 +2 390 43 0 3.69290962272204 4.71238898038469 +0 + +0101000 ++5201 0 -5203 0 * +Ed + 1e-07 1 1 0 +1 162 0 -2.25 2.25 +2 391 105 0 -2.25 2.25 +2 392 106 0 -2.25 2.25 +4 G1 105 0 106 0 +0 + +0101000 ++5202 0 -5201 0 * +Ed + 1e-07 1 1 0 +1 163 0 -2.25 2.25 +2 393 107 0 -2.25 2.25 +4 G1 52 0 107 0 +2 394 52 0 -2.25 2.25 +0 + +0101000 ++5200 0 -5199 0 * +Ed + 1e-07 1 1 0 +1 164 0 -4.3041571954 4.3041571953 +4 C0 52 0 43 0 +2 395 43 0 -4.3041571954 4.3041571953 +2 396 52 0 -4.3041571954 4.3041571953 +0 + +0101000 ++5286 0 -5200 0 * +Ed + 1e-07 1 1 0 +1 165 0 -4.3041571954 4.3041571953 +4 C0 52 0 45 0 +2 397 45 0 -4.3041571954 4.3041571953 +2 398 52 0 -4.3041571954 4.3041571953 +0 + +0101000 ++5284 0 -5199 0 * +Ed + 1e-07 1 1 0 +1 166 0 2.59027568445897 3.69290962272168 +2 399 106 0 2.59027568445897 3.69290962272168 +4 C0 106 0 45 0 +2 400 45 0 2.59027568445897 3.69290962272168 +0 + +0101000 ++5198 0 -5202 0 * +Ed + 1e-07 1 1 0 +1 167 0 2.59027568445897 3.69290962272168 +2 401 106 0 2.59027568445897 3.69290962272168 +4 C0 106 0 43 0 +2 402 43 0 2.59027568445897 3.69290962272168 +0 + +0101000 ++5197 0 -5201 0 * +Ed + 1e-07 1 1 0 +1 168 0 -2.25 2.25 +2 403 106 0 -2.25 2.25 +2 404 107 0 -2.25 2.25 +4 G1 106 0 107 0 +0 + +0101000 ++5198 0 -5197 0 * +Ed + 1e-07 1 1 0 +1 169 0 1.5707963267949 2.59027568446606 +2 405 107 0 1.5707963267949 2.59027568446606 +4 C0 45 0 107 0 +2 406 45 0 1.5707963267949 2.59027568446606 +0 + +0101000 ++5199 0 -5198 0 * +Ed + 1e-07 1 1 0 +1 170 0 0.551316969123729 1.5707963267949 +2 407 107 0 0.551316969123729 1.5707963267949 +4 C0 107 0 43 0 +2 408 43 0 0.551316969123729 1.5707963267949 +0 + +0101000 ++5197 0 -5200 0 * +Ed + 1e-07 1 1 0 +1 171 0 -6.1 6.1 +2 409 7 0 -6.1 6.1 +4 G1 5 0 7 0 +2 410 5 0 -6.1 6.1 +0 + +0101000 ++5196 0 -5319 127 * +Ed + 1e-07 1 1 0 +1 172 0 -6.1 6.1 +2 411 23 0 -6.1 6.1 +4 G1 5 0 23 0 +2 412 5 0 -6.1 6.1 +0 + +0101000 ++5195 0 -5320 127 * +Ed + 1e-07 1 1 0 +1 173 0 -54.5 54.5 +4 C0 5 0 108 0 +2 413 5 0 -54.5 54.5 +2 414 108 0 -54.5 54.5 +0 + +0101000 ++5195 0 -5196 0 * +Ed + 1e-07 1 1 0 +1 174 0 -5.7 6.5 +2 415 7 0 -5.7 6.5 +4 G1 7 0 9 0 +2 416 9 0 -5.7 6.5 +0 + +0101000 ++5194 0 -5318 127 * +Ed + 9.51703163673272e-05 1 1 0 +1 175 0 109 156.123889804 +2 417 7 0 109 156.123889804 +2 418 109 0 109 156.123889804 +4 C0 7 0 109 0 +0 + +0101000 ++5196 0 -5194 0 * +Ed + 1e-07 1 1 0 +1 176 0 -6.1 6.1 +2 419 11 0 -6.1 6.1 +4 G1 9 0 11 0 +2 420 9 0 -6.1 6.1 +0 + +0101000 ++5193 0 -5317 127 * +Ed + 1e-07 1 1 0 +1 177 0 -5 5 +4 C0 9 0 110 0 +2 421 9 0 -5 5 +0 + +0101000 ++5194 0 -5193 0 * +Ed + 1e-07 1 1 0 +1 178 0 -5.7 6.5 +2 422 11 0 -5.7 6.5 +4 G1 11 0 13 0 +2 423 13 0 -5.7 6.5 +0 + +0101000 ++5192 0 -5316 127 * +Ed + 0.000329339234167311 1 1 0 +1 179 0 166.123889804 191.012333945 +2 424 11 0 166.123889804 191.012333945 +2 425 111 0 166.123889804 191.012333945 +4 C0 11 0 111 0 +0 + +0101000 ++5193 0 -5192 0 * +Ed + 1e-07 1 1 0 +1 180 0 -6.099999999999 6.1 +2 426 15 0 -6.099999999999 6.1 +4 G1 13 0 15 0 +2 427 13 0 -6.099999999999 6.1 +0 + +0101000 ++5191 0 -5315 127 * +Ed + 1e-07 1 1 0 +1 181 0 -14.5117153224708 14.5117153225591 +4 C0 13 0 112 0 +2 428 13 0 -14.5117153224708 14.5117153225591 +0 + +0101000 ++5192 0 -5191 0 * +Ed + 1e-07 1 1 0 +1 182 0 -5.7 6.5 +2 429 15 0 -5.7 6.5 +4 G1 15 0 17 0 +2 430 17 0 -5.7 6.5 +0 + +0101000 ++5190 0 -5314 127 * +Ed + 0.000102671200703963 1 1 0 +1 183 0 220.03576459 262.063292978 +2 431 15 0 220.03576459 262.063292978 +2 432 113 0 220.03576459 262.063292978 +4 C0 15 0 113 0 +0 + +0101000 ++5191 0 -5190 0 * +Ed + 1e-07 1 1 0 +1 184 0 -6.1 6.1 +2 433 19 0 -6.1 6.1 +4 G1 17 0 19 0 +2 434 17 0 -6.1 6.1 +0 + +0101000 ++5189 0 -5313 127 * +Ed + 1e-07 1 1 0 +1 185 0 -17.3985400243 17.3985400243 +4 C0 17 0 114 0 +2 435 17 0 -17.3985400243 17.3985400243 +2 436 114 0 -17.3985400243 17.3985400243 +0 + +0101000 ++5190 0 -5189 0 * +Ed + 1e-07 1 1 0 +1 186 0 -5.7 6.5 +2 437 19 0 -5.7 6.5 +4 G1 19 0 21 0 +2 438 21 0 -5.7 6.5 +0 + +0101000 ++5188 0 -5312 127 * +Ed + 0.000332604549846037 1 1 0 +1 187 0 296.860373027 381.683374674 +2 439 19 0 296.860373027 381.683374674 +2 440 115 0 296.860373027 381.683374674 +4 C0 19 0 115 0 +0 + +0101000 ++5189 0 -5188 0 * +Ed + 1e-07 1 1 0 +1 188 0 -6.1 6.1 +2 441 23 0 -6.1 6.1 +4 G1 21 0 23 0 +2 442 21 0 -6.1 6.1 +0 + +0101000 ++5187 0 -5311 127 * +Ed + 1e-07 1 1 0 +1 189 0 -1 1 +4 C0 21 0 116 0 +2 443 21 0 -1 1 +0 + +0101000 ++5188 0 -5187 0 * +Ed + 0.00331634368160302 1 1 0 +1 190 0 383.683374674 427.665671824 +2 444 23 0 383.683374674 427.665671824 +2 445 117 0 383.683374674 427.665671824 +4 C0 23 0 117 0 +0 + +0101000 ++5187 0 -5195 0 * +Ed + 1.78496884545777e-06 1 1 0 +1 191 0 103.765818054 165.078288992 +2 446 117 0 103.765818054 165.078288992 +4 C0 43 0 117 0 +2 447 43 0 103.765818054 165.078288992 +0 + +0101000 ++5186 0 -5185 0 * +Ed + 1e-07 1 1 0 +1 192 0 -0.99999877806 1 +4 C0 43 0 116 0 +2 448 43 0 -0.99999877806 1 +0 + +0101000 ++6697 0 -5186 0 * +Ed + 1e-07 1 1 0 +1 193 0 206.347322877 325.41616118 +2 449 115 0 206.347322877 325.41616118 +4 C0 43 0 115 0 +2 450 43 0 206.347322877 325.41616118 +0 + +0101000 ++6696 0 -6697 0 * +Ed + 1e-07 1 1 0 +1 194 0 -17.3984787043 17.3985400243 +4 C0 43 0 114 0 +2 451 43 0 -17.3984787043 17.3985400243 +2 452 114 0 -17.3984787043 17.3985400243 +0 + +0101000 ++6695 0 -6696 0 * +Ed + 1e-07 1 1 0 +1 195 0 120.5863912 179.747541089 +2 453 113 0 120.5863912 179.747541089 +4 C0 43 0 113 0 +2 454 43 0 120.5863912 179.747541089 +0 + +0101000 ++6694 0 -6695 0 * +Ed + 1e-07 1 1 0 +1 196 0 -14.5117506034196 14.5117153224708 +4 C0 43 0 112 0 +2 455 43 0 -14.5117506034196 14.5117153224708 +0 + +0101000 ++6693 0 -6694 0 * +Ed + 1e-07 1 1 0 +1 197 0 62.094959106 96.6845153915 +2 456 111 0 62.094959106 96.6845153915 +4 C0 43 0 111 0 +2 457 43 0 62.094959106 96.6845153915 +0 + +0101000 ++6692 0 -6693 0 * +Ed + 1e-07 1 1 0 +1 198 0 -5.00002261243 5 +4 C0 43 0 110 0 +2 458 43 0 -5.00002261243 5 +0 + +0101000 ++6691 0 -6692 0 * +Ed + 1e-07 1 1 0 +1 199 0 243.594787522 309.353508481 +2 459 109 0 243.594787522 309.353508481 +4 C0 43 0 109 0 +2 460 43 0 243.594787522 309.353508481 +0 + +0101000 ++6690 0 -6691 0 * +Ed + 1e-07 1 1 0 +1 200 0 -54.5000035699 54.5 +4 C0 43 0 108 0 +2 461 43 0 -54.5000035699 54.5 +2 462 108 0 -54.5000035699 54.5 +0 + +0101000 ++5185 0 -6690 0 * +Ed + 1.80433595155811e-06 1 1 0 +1 201 0 -0.56568516126912 0.565685424949237 +2 463 117 0 -0.56568516126912 0.565685424949237 +4 G1 108 0 117 0 +2 464 108 0 -0.56568516126912 0.565685424949237 +0 + +0101000 ++5185 0 -5195 0 * +Ed + 1e-07 1 1 0 +1 202 0 -0.56568542494924 0.565685424949237 +2 465 109 0 -0.56568542494924 0.565685424949237 +4 G1 108 0 109 0 +2 466 108 0 -0.56568542494924 0.565685424949237 +0 + +0101000 ++6690 0 -5196 0 * +Ed + 6.23815851957287e-06 1 1 0 +1 203 0 0 1.1313708499 +2 467 109 0 0 1.1313708499 +4 G1 109 0 110 0 +0 + +0101000 ++6691 0 -5194 0 * +Ed + 1e-07 1 1 0 +1 204 0 -0.565685424949232 0.565685424949242 +2 468 111 0 -0.565685424949232 0.565685424949242 +4 G1 110 0 111 0 +0 + +0101000 ++6692 0 -5193 0 * +Ed + 2.52840338211553e-06 1 1 0 +1 205 0 0 1.1313708499 +2 469 111 0 0 1.1313708499 +4 G1 111 0 112 0 +0 + +0101000 ++6693 0 -5192 0 * +Ed + 1e-07 1 1 0 +1 206 0 -0.565685424917272 0.565685424980412 +2 470 113 0 -0.565685424917272 0.565685424980412 +4 G1 112 0 113 0 +0 + +0101000 ++6694 0 -5191 0 * +Ed + 5.937776443219e-06 1 1 0 +1 207 0 0 1.1313708499 +2 471 113 0 0 1.1313708499 +4 G1 113 0 114 0 +2 472 114 0 0 1.1313708499 +0 + +0101000 ++6695 0 -5190 0 * +Ed + 1e-07 1 1 0 +1 208 0 -0.565685424949237 0.565685424949237 +2 473 115 0 -0.565685424949237 0.565685424949237 +4 G1 114 0 115 0 +2 474 114 0 -0.565685424949237 0.565685424949237 +0 + +0101000 ++6696 0 -5189 0 * +Ed + 1.2049220497684e-07 1 1 0 +1 209 0 0 1.13137072940904 +2 475 115 0 0 1.13137072940904 +4 G1 115 0 116 0 +0 + +0101000 ++6697 0 -5188 0 * +Ed + 1e-07 1 1 0 +1 210 0 -0.565685424949232 0.565685424949242 +2 476 117 0 -0.565685424949232 0.565685424949242 +4 G1 116 0 117 0 +0 + +0101000 ++5186 0 -5187 0 * +Ed + 1e-07 1 1 0 +1 211 0 -0.5 0.5 +2 477 24 0 -0.5 0.5 +4 G1 6 0 24 0 +2 478 6 0 -0.5 0.5 +0 + +0101000 ++5320 141 -6689 0 * +Ed + 1e-07 1 1 0 +1 212 0 -0.5 0.5 +2 479 8 0 -0.5 0.5 +4 G1 6 0 8 0 +2 480 6 0 -0.5 0.5 +0 + +0101000 ++5319 141 -6688 0 * +Ed + 1e-07 1 1 0 +1 213 0 -54.5 54.5 +4 C0 6 0 118 0 +2 481 118 0 -54.5 54.5 +2 482 6 0 -54.5 54.5 +0 + +0101000 ++6689 0 -6688 0 * +Ed + 1e-07 1 1 0 +1 214 0 -0.5 0.5 +2 483 8 0 -0.5 0.5 +4 G1 8 0 10 0 +2 484 10 0 -0.5 0.5 +0 + +0101000 ++5318 141 -6687 0 * +Ed + 1e-07 1 1 0 +1 215 0 109 156.123889804 +2 485 8 0 109 156.123889804 +4 C0 8 0 118 0 +2 486 118 0 109 156.123889804 +0 + +0101000 ++6688 0 -6687 0 * +Ed + 1e-07 1 1 0 +1 216 0 -0.5 0.5 +2 487 12 0 -0.5 0.5 +4 G1 10 0 12 0 +2 488 10 0 -0.5 0.5 +0 + +0101000 ++5317 141 -6686 0 * +Ed + 1e-07 1 1 0 +1 217 0 -5 5 +4 C0 10 0 118 0 +2 489 118 0 -5 5 +2 490 10 0 -5 5 +0 + +0101000 ++6687 0 -6686 0 * +Ed + 1e-07 1 1 0 +1 218 0 -0.5 0.5 +2 491 12 0 -0.5 0.5 +4 G1 12 0 14 0 +2 492 14 0 -0.5 0.5 +0 + +0101000 ++5316 141 -6685 0 * +Ed + 1e-07 1 1 0 +1 219 0 166.123889804 191.012333945 +2 493 12 0 166.123889804 191.012333945 +4 C0 12 0 118 0 +2 494 118 0 166.123889804 191.012333945 +0 + +0101000 ++6686 0 -6685 0 * +Ed + 1e-07 1 1 0 +1 220 0 -0.5 0.5 +2 495 16 0 -0.5 0.5 +4 G1 14 0 16 0 +2 496 14 0 -0.5 0.5 +0 + +0101000 ++5315 141 -6684 0 * +Ed + 1e-07 1 1 0 +1 221 0 -14.5117153225591 14.5117153224708 +4 C0 14 0 118 0 +2 497 118 0 -14.5117153225591 14.5117153224708 +2 498 14 0 -14.5117153225591 14.5117153224708 +0 + +0101000 ++6685 0 -6684 0 * +Ed + 1e-07 1 1 0 +1 222 0 -0.5 0.5 +2 499 16 0 -0.5 0.5 +4 G1 16 0 18 0 +2 500 18 0 -0.5 0.5 +0 + +0101000 ++5314 141 -6683 0 * +Ed + 1e-07 1 1 0 +1 223 0 220.03576459 262.063292978 +2 501 16 0 220.03576459 262.063292978 +4 C0 16 0 118 0 +2 502 118 0 220.03576459 262.063292978 +0 + +0101000 ++6684 0 -6683 0 * +Ed + 1e-07 1 1 0 +1 224 0 -0.5 0.5 +2 503 20 0 -0.5 0.5 +4 G1 18 0 20 0 +2 504 18 0 -0.5 0.5 +0 + +0101000 ++5313 141 -6682 0 * +Ed + 1e-07 1 1 0 +1 225 0 -17.3985400243 17.3985400243 +4 C0 18 0 118 0 +2 505 118 0 -17.3985400243 17.3985400243 +2 506 18 0 -17.3985400243 17.3985400243 +0 + +0101000 ++6683 0 -6682 0 * +Ed + 1e-07 1 1 0 +1 226 0 -0.5 0.5 +2 507 20 0 -0.5 0.5 +4 G1 20 0 22 0 +2 508 22 0 -0.5 0.5 +0 + +0101000 ++5312 141 -6681 0 * +Ed + 1e-07 1 1 0 +1 227 0 296.860373027 381.683374674 +2 509 20 0 296.860373027 381.683374674 +4 C0 20 0 118 0 +2 510 118 0 296.860373027 381.683374674 +0 + +0101000 ++6682 0 -6681 0 * +Ed + 1e-07 1 1 0 +1 228 0 -0.5 0.5 +2 511 24 0 -0.5 0.5 +4 G1 22 0 24 0 +2 512 22 0 -0.5 0.5 +0 + +0101000 ++5311 141 -6680 0 * +Ed + 1e-07 1 1 0 +1 229 0 -1 1 +4 C0 22 0 118 0 +2 513 118 0 -1 1 +2 514 22 0 -1 1 +0 + +0101000 ++6681 0 -6680 0 * +Ed + 1e-07 1 1 0 +1 230 0 383.683374674 427.665671824 +2 515 24 0 383.683374674 427.665671824 +4 C0 24 0 118 0 +2 516 118 0 383.683374674 427.665671824 +0 + +0101000 ++6680 0 -6689 0 * +Ed + 1e-07 1 1 0 +1 231 0 -0.141421356237311 0.141421356237309 +2 517 119 0 -0.141421356237311 0.141421356237309 +2 518 120 0 -0.141421356237311 0.141421356237309 +4 CN 119 0 120 0 +0 + +0101000 ++6679 0 -6678 0 * +Ed + 1.00000099475983e-07 1 1 0 +1 232 0 4.71238898038469 7.85398163397448 +2 519 119 0 4.71238898038469 7.85398163397448 +4 C0 119 0 121 0 +2 520 121 0 4.71238898038469 7.85398163397448 +2 521 122 142 4.71238898038469 7.85398163397448 +0 + +0101000 ++6679 0 -6677 0 * +Ed + 1e-07 1 1 0 +1 233 0 -0.141421356237311 0.141421356237309 +2 522 119 0 -0.141421356237311 0.141421356237309 +2 523 120 0 -0.141421356237311 0.141421356237309 +4 CN 119 0 120 0 +0 + +0101000 ++6677 0 -6676 0 * +Ed + 1e-07 1 1 0 +1 234 0 4.71238898038469 7.85398163397448 +2 524 119 0 4.71238898038469 7.85398163397448 +2 525 123 0 4.71238898038469 7.85398163397448 +4 C0 119 0 123 0 +0 + +0101000 ++6678 0 -6676 0 * +Ed + 1.00000184741111e-07 1 1 0 +1 235 0 3.14159265358979 6.28318530717959 +2 526 120 0 3.14159265358979 6.28318530717959 +4 C0 120 0 121 0 +2 527 121 0 3.14159265358979 6.28318530717959 +2 528 122 142 3.14159265358979 6.28318530717959 +0 + +0101000 ++6677 0 -6679 0 * +Ed + 1e-07 1 1 0 +1 236 0 3.14159265358979 6.28318530717959 +2 529 120 0 3.14159265358979 6.28318530717959 +2 530 124 0 3.14159265358979 6.28318530717959 +4 C0 120 0 124 0 +0 + +0101000 ++6676 0 -6678 0 * +Ed + 1e-07 1 1 0 +1 237 0 -1.3 1.3 +2 531 123 0 -1.3 1.3 +2 532 124 0 -1.3 1.3 +4 CN 123 0 124 0 +0 + +0101000 ++6678 0 -6675 0 * +Ed + 1e-07 1 1 0 +1 238 0 -1.3 1.3 +2 533 123 0 -1.3 1.3 +2 534 124 0 -1.3 1.3 +4 CN 123 0 124 0 +0 + +0101000 ++6676 0 -6674 0 * +Ed + 1e-07 1 1 0 +1 239 0 0 3.14159265358979 +2 535 123 0 0 3.14159265358979 +2 536 125 0 0 3.14159265358979 +4 C0 123 0 125 0 +0 + +0101000 ++6675 0 -6674 0 * +Ed + 1e-07 1 1 0 +1 240 0 3.14159265358979 6.28318530717959 +2 537 124 0 3.14159265358979 6.28318530717959 +2 538 126 0 3.14159265358979 6.28318530717959 +4 C0 124 0 126 0 +0 + +0101000 ++6674 0 -6675 0 * +Ed + 1e-07 1 1 0 +1 241 0 -0.141421356237311 0.141421356237309 +2 539 125 0 -0.141421356237311 0.141421356237309 +2 540 126 0 -0.141421356237311 0.141421356237309 +4 CN 125 0 126 0 +0 + +0101000 ++6673 0 -6675 0 * +Ed + 1e-07 1 1 0 +1 242 0 -0.141421356237311 0.141421356237309 +2 541 125 0 -0.141421356237311 0.141421356237309 +2 542 126 0 -0.141421356237311 0.141421356237309 +4 CN 125 0 126 0 +0 + +0101000 ++6672 0 -6674 0 * +Ed + 1.00000198951966e-07 1 1 0 +1 243 0 4.71238898038469 7.85398163397448 +2 543 125 0 4.71238898038469 7.85398163397448 +4 C0 125 0 127 0 +2 544 127 0 4.71238898038469 7.85398163397448 +2 545 128 143 4.71238898038469 7.85398163397448 +0 + +0101000 ++6673 0 -6672 0 * +Ed + 1.00000177635684e-07 1 1 0 +1 244 0 3.14159265358979 6.28318530717959 +2 546 126 0 3.14159265358979 6.28318530717959 +4 C0 126 0 127 0 +2 547 127 0 3.14159265358979 6.28318530717959 +2 548 128 143 3.14159265358979 6.28318530717959 +0 + +0101000 ++6672 0 -6673 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 245 0 0 3.14159265358979 +2 549 96 0 0 3.14159265358979 +4 C0 96 0 128 0 +2 550 128 0 0 3.14159265358979 +2 551 127 144 0 3.14159265358979 +0 + +0101000 ++6671 0 -6670 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 246 0 3.14159265358979 6.28318530717959 +2 552 95 0 3.14159265358979 6.28318530717959 +4 C0 95 0 128 0 +2 553 128 0 3.14159265358979 6.28318530717959 +2 554 127 144 3.14159265358979 6.28318530717959 +0 + +0101000 ++6670 0 -6671 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 247 0 5.21238898038437 8.35398163397416 +2 555 129 0 5.21238898038437 8.35398163397416 +4 C0 130 0 129 0 +2 556 130 0 5.21238898038437 8.35398163397416 +2 557 127 145 5.21238898038437 8.35398163397416 +0 + +0101000 ++6669 0 -6668 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 248 0 2.07079632679458 5.21238898038437 +2 558 131 0 2.07079632679458 5.21238898038437 +4 C0 130 0 131 0 +2 559 130 0 2.07079632679458 5.21238898038437 +2 560 127 145 2.07079632679458 5.21238898038437 +0 + +0101000 ++6668 0 -6669 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 249 0 3.14159265358979 6.28318530717959 +2 561 132 0 3.14159265358979 6.28318530717959 +4 C0 127 0 132 0 +2 562 127 0 3.14159265358979 6.28318530717959 +2 563 130 146 3.14159265358979 6.28318530717959 +0 + +0101000 ++6667 0 -6666 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 250 0 0 3.14159265358979 +2 564 133 0 0 3.14159265358979 +4 C0 127 0 133 0 +2 565 127 0 0 3.14159265358979 +2 566 130 146 0 3.14159265358979 +0 + +0101000 ++6666 0 -6667 0 * +Ed + 1.00000016280579e-07 1 1 0 +1 251 0 4.71238898038469 5.78318530717983 +2 567 133 0 4.71238898038469 5.78318530717983 +2 568 134 0 4.71238898038469 5.78318530717983 +4 C0 133 0 134 0 +2 569 135 146 4.71238898038469 5.78318530717983 +0 + +0101000 ++6665 0 -6664 147 * +Ed + 1.00000014648214e-07 1 1 0 +1 251 0 5.78318530717983 7.85398163397448 +2 567 133 0 5.78318530717983 7.85398163397448 +2 568 134 0 5.78318530717983 7.85398163397448 +4 C0 133 0 134 0 +2 570 136 146 5.78318530717983 7.85398163397448 +0 + +0101000 ++6664 147 -6663 0 * +Ed + 1e-07 1 1 0 +1 252 0 -0.141421356237309 0.141421356237309 +2 571 133 0 -0.141421356237309 0.141421356237309 +2 572 132 0 -0.141421356237309 0.141421356237309 +4 CN 133 0 132 0 +0 + +0101000 ++6663 0 -6667 0 * +Ed + 1e-07 1 1 0 +1 253 0 -0.141421356237309 0.141421356237309 +2 573 133 0 -0.141421356237309 0.141421356237309 +2 574 132 0 -0.141421356237309 0.141421356237309 +4 CN 133 0 132 0 +0 + +0101000 ++6665 0 -6666 0 * +Ed + 1.00000016280579e-07 1 1 0 +1 254 0 3.14159265358979 4.21238898038493 +2 575 132 0 3.14159265358979 4.21238898038493 +2 576 137 0 3.14159265358979 4.21238898038493 +4 C0 132 0 137 0 +2 577 136 146 3.14159265358979 4.21238898038493 +0 + +0101000 ++6663 0 -6662 147 * +Ed + 1.00000015888219e-07 1 1 0 +1 254 0 4.21238898038493 6.28318530717959 +2 575 132 0 4.21238898038493 6.28318530717959 +2 576 137 0 4.21238898038493 6.28318530717959 +4 C0 132 0 137 0 +2 578 135 146 4.21238898038493 6.28318530717959 +0 + +0101000 ++6662 147 -6665 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 255 0 2.07079632679519 5.21238898038498 +2 579 138 0 2.07079632679519 5.21238898038498 +4 G1 122 0 138 0 +2 580 122 0 2.07079632679519 5.21238898038498 +2 581 121 148 2.07079632679519 5.21238898038498 +0 + +0101000 ++6661 0 -6660 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 256 0 5.21238898038498 8.35398163397478 +2 582 139 0 5.21238898038498 8.35398163397478 +4 G1 122 0 139 0 +2 583 122 0 5.21238898038498 8.35398163397478 +2 584 121 148 5.21238898038498 8.35398163397478 +0 + +0101000 ++6660 0 -6661 0 * +Ed + 1e-07 1 1 0 +1 257 0 3.14159265358979 6.28318530717959 +2 585 140 0 3.14159265358979 6.28318530717959 +4 C0 121 0 140 0 +2 586 121 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++6659 0 -6658 0 * +Ed + 1e-07 1 1 0 +1 258 0 0 3.14159265358979 +2 587 141 0 0 3.14159265358979 +4 C0 121 0 141 0 +2 588 121 0 0 3.14159265358979 +0 + +0101000 ++6658 0 -6659 0 * +Ed + 1e-07 1 1 0 +1 259 0 3.14159265358979 6.28318530717959 +2 589 137 0 3.14159265358979 6.28318530717959 +2 590 140 0 3.14159265358979 6.28318530717959 +4 C0 137 0 140 0 +0 + +0101000 ++6657 0 -6656 0 * +Ed + 1e-07 1 1 0 +1 260 0 -1.3 -0.975500200200004 +2 591 137 0 -1.3 -0.975500200200004 +2 592 134 0 -1.3 -0.975500200200004 +4 CN 137 0 134 0 +0 + +0101000 ++6657 0 -6655 147 * +Ed + 1.00000014648214e-07 1 1 0 +1 261 0 2.07079632679468 3.14159265358979 +2 593 136 0 2.07079632679468 3.14159265358979 +2 594 142 0 2.07079632679468 3.14159265358979 +4 G1 136 0 142 0 +2 595 137 145 2.07079632679468 3.14159265358979 +0 + +0101000 ++6654 0 -6655 149 * +Ed + 1.00000014648214e-07 1 1 0 +1 262 0 6.2831853071796 8.35398163397426 +2 596 135 0 6.2831853071796 8.35398163397426 +2 597 143 0 6.2831853071796 8.35398163397426 +4 G1 135 0 143 0 +2 598 137 145 6.2831853071796 8.35398163397426 +0 + +0101000 ++6653 149 -6654 0 * +Ed + 1e-07 1 1 0 +1 263 0 -1.3 -0.9755002002 +2 599 137 0 -1.3 -0.9755002002 +2 600 134 0 -1.3 -0.9755002002 +4 CN 137 0 134 0 +0 + +0101000 ++6656 0 -6653 147 * +Ed + 1.00004356270236e-07 1 1 0 +1 264 0 -8.40000000000001 -6.1244997998 +2 601 135 0 -8.40000000000001 -6.1244997998 +2 602 136 0 -8.40000000000001 -6.1244997998 +4 CN 135 0 136 0 +2 603 137 145 -8.40000000000001 -6.1244997998 +0 + +0101000 ++6662 149 -6654 0 * +Ed + 1.00000005024296e-07 1 1 0 +1 263 0 -0.9755002002 1.3 +2 599 137 0 -0.9755002002 1.3 +2 600 134 0 -0.9755002002 1.3 +4 CN 137 0 134 0 +2 604 135 146 -0.9755002002 1.3 +0 + +0101000 ++6653 147 -6665 0 * +Ed + 1.00000015072888e-07 1 1 0 +1 260 0 -0.975500200200004 1.3 +2 591 137 0 -0.975500200200004 1.3 +2 592 134 0 -0.975500200200004 1.3 +4 CN 137 0 134 0 +2 605 136 146 -0.975500200200004 1.3 +0 + +0101000 ++6655 147 -6663 0 * +Ed + 1e-07 1 1 0 +1 265 0 0 3.14159265358979 +2 606 134 0 0 3.14159265358979 +2 607 141 0 0 3.14159265358979 +4 C0 134 0 141 0 +0 + +0101000 ++6656 0 -6657 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 262 0 5.21238898038447 6.2831853071796 +2 596 135 0 5.21238898038447 6.2831853071796 +2 597 143 0 5.21238898038447 6.2831853071796 +4 G1 135 0 143 0 +2 608 134 145 5.21238898038447 6.2831853071796 +0 + +0101000 ++6652 0 -6653 149 * +Ed + 1.00000014648214e-07 1 1 0 +1 261 0 3.14159265358979 5.21238898038447 +2 593 136 0 3.14159265358979 5.21238898038447 +2 594 142 0 3.14159265358979 5.21238898038447 +4 G1 136 0 142 0 +2 609 134 145 3.14159265358979 5.21238898038447 +0 + +0101000 ++6655 149 -6652 0 * +Ed + 1.00004359388151e-07 1 1 0 +1 266 0 -8.40000000000002 -6.1244997998 +2 610 135 0 -8.40000000000002 -6.1244997998 +2 611 136 0 -8.40000000000002 -6.1244997998 +4 CN 135 0 136 0 +2 612 134 145 -8.40000000000002 -6.1244997998 +0 + +0101000 ++6664 149 -6652 0 * +Ed + 1e-07 1 1 0 +1 267 0 -0.141421356237309 0.141421356237309 +2 613 140 0 -0.141421356237309 0.141421356237309 +2 614 141 0 -0.141421356237309 0.141421356237309 +4 CN 140 0 141 0 +0 + +0101000 ++6656 0 -6658 0 * +Ed + 1e-07 1 1 0 +1 268 0 -0.141421356237309 0.141421356237309 +2 615 140 0 -0.141421356237309 0.141421356237309 +2 616 141 0 -0.141421356237309 0.141421356237309 +4 CN 140 0 141 0 +0 + +0101000 ++6657 0 -6659 0 * +Ed + 1e-07 1 1 0 +1 269 0 -0.141421356237311 0.141421356237309 +2 617 144 0 -0.141421356237311 0.141421356237309 +2 618 145 0 -0.141421356237311 0.141421356237309 +4 CN 144 0 145 0 +0 + +0101000 ++6651 0 -6650 0 * +Ed + 1.00000206057393e-07 1 1 0 +1 270 0 4.71238898038469 7.85398163397448 +2 619 144 0 4.71238898038469 7.85398163397448 +4 C0 144 0 146 0 +2 620 146 0 4.71238898038469 7.85398163397448 +2 621 147 150 4.71238898038469 7.85398163397448 +2 622 147 151 4.71238898038469 7.85398163397448 +0 + +0101000 ++6651 0 -6649 0 * +Ed + 1e-07 1 1 0 +1 271 0 -0.141421356237311 0.141421356237309 +2 623 144 0 -0.141421356237311 0.141421356237309 +2 624 145 0 -0.141421356237311 0.141421356237309 +4 CN 144 0 145 0 +0 + +0101000 ++6649 0 -6648 0 * +Ed + 1e-07 1 1 0 +1 272 0 4.71238898038469 7.85398163397448 +2 625 144 0 4.71238898038469 7.85398163397448 +2 626 148 0 4.71238898038469 7.85398163397448 +4 C0 144 0 148 0 +0 + +0101000 ++6650 0 -6648 0 * +Ed + 1.00000131450406e-07 1 1 0 +1 273 0 3.14159265358979 6.28318530717959 +2 627 145 0 3.14159265358979 6.28318530717959 +4 C0 145 0 146 0 +2 628 146 0 3.14159265358979 6.28318530717959 +2 629 147 150 3.14159265358979 6.28318530717959 +2 630 147 151 3.14159265358979 6.28318530717959 +0 + +0101000 ++6649 0 -6651 0 * +Ed + 1e-07 1 1 0 +1 274 0 3.14159265358979 6.28318530717959 +2 631 145 0 3.14159265358979 6.28318530717959 +2 632 149 0 3.14159265358979 6.28318530717959 +4 C0 145 0 149 0 +0 + +0101000 ++6648 0 -6650 0 * +Ed + 1e-07 1 1 0 +1 275 0 -1.3 1.3 +2 633 148 0 -1.3 1.3 +2 634 149 0 -1.3 1.3 +4 CN 148 0 149 0 +0 + +0101000 ++6650 0 -6647 0 * +Ed + 1e-07 1 1 0 +1 276 0 -1.3 1.3 +2 635 148 0 -1.3 1.3 +2 636 149 0 -1.3 1.3 +4 CN 148 0 149 0 +0 + +0101000 ++6648 0 -6646 0 * +Ed + 1e-07 1 1 0 +1 277 0 0 3.14159265358979 +2 637 148 0 0 3.14159265358979 +2 638 150 0 0 3.14159265358979 +4 C0 148 0 150 0 +0 + +0101000 ++6647 0 -6646 0 * +Ed + 1e-07 1 1 0 +1 278 0 3.14159265358979 6.28318530717959 +2 639 149 0 3.14159265358979 6.28318530717959 +2 640 151 0 3.14159265358979 6.28318530717959 +4 C0 149 0 151 0 +0 + +0101000 ++6646 0 -6647 0 * +Ed + 1e-07 1 1 0 +1 279 0 -0.141421356237311 0.141421356237309 +2 641 150 0 -0.141421356237311 0.141421356237309 +2 642 151 0 -0.141421356237311 0.141421356237309 +4 CN 150 0 151 0 +0 + +0101000 ++6645 0 -6647 0 * +Ed + 1e-07 1 1 0 +1 280 0 -0.141421356237311 0.141421356237309 +2 643 150 0 -0.141421356237311 0.141421356237309 +2 644 151 0 -0.141421356237311 0.141421356237309 +4 CN 150 0 151 0 +0 + +0101000 ++6644 0 -6646 0 * +Ed + 1.00000230926389e-07 1 1 0 +1 281 0 4.71238898038469 7.85398163397448 +2 645 150 0 4.71238898038469 7.85398163397448 +4 C0 150 0 152 0 +2 646 152 0 4.71238898038469 7.85398163397448 +2 647 153 152 4.71238898038469 7.85398163397448 +2 648 153 153 4.71238898038469 7.85398163397448 +0 + +0101000 ++6645 0 -6644 0 * +Ed + 1.00000074606987e-07 1 1 0 +1 282 0 3.14159265358979 6.28318530717959 +2 649 151 0 3.14159265358979 6.28318530717959 +4 C0 151 0 152 0 +2 650 152 0 3.14159265358979 6.28318530717959 +2 651 153 152 3.14159265358979 6.28318530717959 +2 652 153 153 3.14159265358979 6.28318530717959 +0 + +0101000 ++6644 0 -6645 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 283 0 0 3.14159265358979 +2 653 84 0 0 3.14159265358979 +4 C0 84 0 153 0 +2 654 153 0 0 3.14159265358979 +2 655 152 154 0 3.14159265358979 +2 656 152 155 0 3.14159265358979 +0 + +0101000 ++6643 0 -6642 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 284 0 3.14159265358979 6.28318530717959 +2 657 83 0 3.14159265358979 6.28318530717959 +4 C0 83 0 153 0 +2 658 153 0 3.14159265358979 6.28318530717959 +2 659 152 154 3.14159265358979 6.28318530717959 +2 660 152 155 3.14159265358979 6.28318530717959 +0 + +0101000 ++6642 0 -6643 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 285 0 5.21238898038468 8.35398163397447 +2 661 154 0 5.21238898038468 8.35398163397447 +4 C0 155 0 154 0 +2 662 155 0 5.21238898038468 8.35398163397447 +2 663 152 156 5.21238898038468 8.35398163397447 +2 664 152 157 5.21238898038468 8.35398163397447 +0 + +0101000 ++6641 0 -6640 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 286 0 2.07079632679489 5.21238898038468 +2 665 156 0 2.07079632679489 5.21238898038468 +4 C0 155 0 156 0 +2 666 155 0 2.07079632679489 5.21238898038468 +2 667 152 156 2.07079632679489 5.21238898038468 +2 668 152 157 2.07079632679489 5.21238898038468 +0 + +0101000 ++6640 0 -6641 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 287 0 3.14159265358979 6.28318530717959 +2 669 157 0 3.14159265358979 6.28318530717959 +4 C0 152 0 157 0 +2 670 152 0 3.14159265358979 6.28318530717959 +2 671 155 158 3.14159265358979 6.28318530717959 +2 672 155 159 3.14159265358979 6.28318530717959 +0 + +0101000 ++6639 0 -6638 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 288 0 0 3.14159265358979 +2 673 158 0 0 3.14159265358979 +4 C0 152 0 158 0 +2 674 152 0 0 3.14159265358979 +2 675 155 158 0 3.14159265358979 +2 676 155 159 0 3.14159265358979 +0 + +0101000 ++6638 0 -6639 0 * +Ed + 1.00000005958082e-07 1 1 0 +1 289 0 4.71238898038469 5.7831853071787 +2 677 158 0 4.71238898038469 5.7831853071787 +2 678 159 0 4.71238898038469 5.7831853071787 +4 C0 158 0 159 0 +2 679 160 158 4.71238898038469 5.7831853071787 +0 + +0101000 ++6637 0 -6636 160 * +Ed + 1.00000004189529e-07 1 1 0 +1 289 0 5.7831853071787 7.85398163397448 +2 677 158 0 5.7831853071787 7.85398163397448 +2 678 159 0 5.7831853071787 7.85398163397448 +4 C0 158 0 159 0 +2 680 161 158 5.7831853071787 7.85398163397448 +0 + +0101000 ++6636 160 -6635 0 * +Ed + 1e-07 1 1 0 +1 290 0 -0.141421356237309 0.14142135623731 +2 681 158 0 -0.141421356237309 0.14142135623731 +2 682 157 0 -0.141421356237309 0.14142135623731 +4 CN 158 0 157 0 +0 + +0101000 ++6635 0 -6639 0 * +Ed + 1e-07 1 1 0 +1 291 0 -0.141421356237309 0.14142135623731 +2 683 158 0 -0.141421356237309 0.14142135623731 +2 684 157 0 -0.141421356237309 0.14142135623731 +4 CN 158 0 157 0 +0 + +0101000 ++6637 0 -6638 0 * +Ed + 1.00000005043884e-07 1 1 0 +1 292 0 3.14159265358979 4.21238898038381 +2 685 157 0 3.14159265358979 4.21238898038381 +2 686 162 0 3.14159265358979 4.21238898038381 +4 C0 157 0 162 0 +2 687 161 158 3.14159265358979 4.21238898038381 +0 + +0101000 ++6635 0 -6634 160 * +Ed + 1.00000006968805e-07 1 1 0 +1 292 0 4.21238898038381 6.28318530717959 +2 685 157 0 4.21238898038381 6.28318530717959 +2 686 162 0 4.21238898038381 6.28318530717959 +4 C0 157 0 162 0 +2 688 160 158 4.21238898038381 6.28318530717959 +0 + +0101000 ++6634 160 -6637 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 293 0 2.07079632679527 5.21238898038506 +2 689 163 0 2.07079632679527 5.21238898038506 +4 G1 147 0 163 0 +2 690 147 0 2.07079632679527 5.21238898038506 +2 691 146 161 2.07079632679527 5.21238898038506 +2 692 146 162 2.07079632679527 5.21238898038506 +0 + +0101000 ++6633 0 -6632 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 294 0 5.21238898038506 8.35398163397486 +2 693 164 0 5.21238898038506 8.35398163397486 +4 G1 147 0 164 0 +2 694 147 0 5.21238898038506 8.35398163397486 +2 695 146 161 5.21238898038506 8.35398163397486 +2 696 146 162 5.21238898038506 8.35398163397486 +0 + +0101000 ++6632 0 -6633 0 * +Ed + 1e-07 1 1 0 +1 295 0 0 3.14159265358979 +2 697 165 0 0 3.14159265358979 +4 C0 146 0 165 0 +2 698 146 0 0 3.14159265358979 +0 + +0101000 ++6631 0 -6630 0 * +Ed + 1e-07 1 1 0 +1 296 0 3.14159265358979 6.28318530717959 +2 699 166 0 3.14159265358979 6.28318530717959 +4 C0 146 0 166 0 +2 700 146 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++6630 0 -6631 0 * +Ed + 1e-07 1 1 0 +1 297 0 3.14159265358979 6.28318530717959 +2 701 162 0 3.14159265358979 6.28318530717959 +2 702 166 0 3.14159265358979 6.28318530717959 +4 C0 162 0 166 0 +0 + +0101000 ++6629 0 -6628 0 * +Ed + 1e-07 1 1 0 +1 298 0 -1.3 -1.0255437353 +2 703 162 0 -1.3 -1.0255437353 +2 704 159 0 -1.3 -1.0255437353 +4 CN 162 0 159 0 +0 + +0101000 ++6629 0 -6627 160 * +Ed + 1.000000040943e-07 1 1 0 +1 299 0 2.07079632679577 3.14159265358979 +2 705 161 0 2.07079632679577 3.14159265358979 +2 706 167 0 2.07079632679577 3.14159265358979 +4 G1 161 0 167 0 +2 707 162 156 2.07079632679577 3.14159265358979 +0 + +0101000 ++6626 0 -6627 163 * +Ed + 1.00000003972055e-07 1 1 0 +1 300 0 6.2831853071796 8.35398163397536 +2 708 160 0 6.2831853071796 8.35398163397536 +2 709 168 0 6.2831853071796 8.35398163397536 +4 G1 160 0 168 0 +2 710 162 156 6.2831853071796 8.35398163397536 +0 + +0101000 ++6625 163 -6626 0 * +Ed + 1e-07 1 1 0 +1 301 0 -1.3 -1.0255437353 +2 711 162 0 -1.3 -1.0255437353 +2 712 159 0 -1.3 -1.0255437353 +4 CN 162 0 159 0 +0 + +0101000 ++6628 0 -6625 160 * +Ed + 1.00000330822617e-07 1 1 0 +1 302 0 -8.39999999999995 -6.0744562647 +2 713 160 0 -8.39999999999995 -6.0744562647 +2 714 161 0 -8.39999999999995 -6.0744562647 +4 CN 160 0 161 0 +2 715 162 156 -8.39999999999995 -6.0744562647 +0 + +0101000 ++6634 163 -6626 0 * +Ed + 1.00000003972055e-07 1 1 0 +1 301 0 -1.0255437353 1.3 +2 711 162 0 -1.0255437353 1.3 +2 712 159 0 -1.0255437353 1.3 +4 CN 162 0 159 0 +2 716 160 158 -1.0255437353 1.3 +0 + +0101000 ++6625 160 -6637 0 * +Ed + 1.00000004202748e-07 1 1 0 +1 298 0 -1.0255437353 1.3 +2 703 162 0 -1.0255437353 1.3 +2 704 159 0 -1.0255437353 1.3 +4 CN 162 0 159 0 +2 717 161 158 -1.0255437353 1.3 +0 + +0101000 ++6627 160 -6635 0 * +Ed + 1e-07 1 1 0 +1 303 0 0 3.14159265358979 +2 718 159 0 0 3.14159265358979 +2 719 165 0 0 3.14159265358979 +4 C0 159 0 165 0 +0 + +0101000 ++6628 0 -6629 0 * +Ed + 1.00000001332268e-07 1 1 0 +1 300 0 5.21238898038557 6.2831853071796 +2 708 160 0 5.21238898038557 6.2831853071796 +2 709 168 0 5.21238898038557 6.2831853071796 +4 G1 160 0 168 0 +2 720 159 156 5.21238898038557 6.2831853071796 +0 + +0101000 ++6624 0 -6625 163 * +Ed + 1.00000002512148e-07 1 1 0 +1 299 0 3.14159265358979 5.21238898038557 +2 705 161 0 3.14159265358979 5.21238898038557 +2 706 167 0 3.14159265358979 5.21238898038557 +4 G1 161 0 167 0 +2 721 159 156 3.14159265358979 5.21238898038557 +0 + +0101000 ++6627 163 -6624 0 * +Ed + 1.00000330675637e-07 1 1 0 +1 304 0 -8.40000000000004 -6.0744562647 +2 722 160 0 -8.40000000000004 -6.0744562647 +2 723 161 0 -8.40000000000004 -6.0744562647 +4 CN 160 0 161 0 +2 724 159 156 -8.40000000000004 -6.0744562647 +0 + +0101000 ++6636 163 -6624 0 * +Ed + 1e-07 1 1 0 +1 305 0 -0.141421356237309 0.14142135623731 +2 725 165 0 -0.141421356237309 0.14142135623731 +2 726 166 0 -0.141421356237309 0.14142135623731 +4 CN 165 0 166 0 +0 + +0101000 ++6629 0 -6630 0 * +Ed + 1e-07 1 1 0 +1 306 0 -0.141421356237309 0.14142135623731 +2 727 165 0 -0.141421356237309 0.14142135623731 +2 728 166 0 -0.141421356237309 0.14142135623731 +4 CN 165 0 166 0 +0 + +0101000 ++6628 0 -6631 0 * +Ed + 1.00000007944109e-07 1 1 0 +1 289 0 4.71238898038469 5.7831853071787 +2 677 158 0 4.71238898038469 5.7831853071787 +2 678 159 0 4.71238898038469 5.7831853071787 +4 C0 158 0 159 0 +2 729 160 159 4.71238898038469 5.7831853071787 +0 + +0101000 ++6637 0 -6623 164 * +Ed + 1.00000003972055e-07 1 1 0 +1 289 0 5.7831853071787 7.85398163397448 +2 677 158 0 5.7831853071787 7.85398163397448 +2 678 159 0 5.7831853071787 7.85398163397448 +4 C0 158 0 159 0 +2 730 161 159 5.7831853071787 7.85398163397448 +0 + +0101000 ++6623 164 -6635 0 * +Ed + 1.00000004440892e-07 1 1 0 +1 292 0 3.14159265358979 4.21238898038381 +2 685 157 0 3.14159265358979 4.21238898038381 +2 686 162 0 3.14159265358979 4.21238898038381 +4 C0 157 0 162 0 +2 731 161 159 3.14159265358979 4.21238898038381 +0 + +0101000 ++6635 0 -6622 164 * +Ed + 1.00000008379058e-07 1 1 0 +1 292 0 4.21238898038381 6.28318530717959 +2 685 157 0 4.21238898038381 6.28318530717959 +2 686 162 0 4.21238898038381 6.28318530717959 +4 C0 157 0 162 0 +2 732 160 159 4.21238898038381 6.28318530717959 +0 + +0101000 ++6622 164 -6637 0 * +Ed + 1e-07 1 1 0 +1 298 0 -1.3 -1.0255437353 +2 703 162 0 -1.3 -1.0255437353 +2 704 159 0 -1.3 -1.0255437353 +4 CN 162 0 159 0 +0 + +0101000 ++6629 0 -6621 164 * +Ed + 1.00000003108624e-07 1 1 0 +1 299 0 2.07079632679577 3.14159265358979 +2 705 161 0 2.07079632679577 3.14159265358979 +2 706 167 0 2.07079632679577 3.14159265358979 +4 G1 161 0 167 0 +2 733 162 157 2.07079632679577 3.14159265358979 +0 + +0101000 ++6626 0 -6621 165 * +Ed + 1.00000007105427e-07 1 1 0 +1 300 0 6.2831853071796 8.35398163397536 +2 708 160 0 6.2831853071796 8.35398163397536 +2 709 168 0 6.2831853071796 8.35398163397536 +4 G1 160 0 168 0 +2 734 162 157 6.2831853071796 8.35398163397536 +0 + +0101000 ++6620 165 -6626 0 * +Ed + 1e-07 1 1 0 +1 301 0 -1.3 -1.0255437353 +2 711 162 0 -1.3 -1.0255437353 +2 712 159 0 -1.3 -1.0255437353 +4 CN 162 0 159 0 +0 + +0101000 ++6628 0 -6620 164 * +Ed + 1.00000333165185e-07 1 1 0 +1 302 0 -8.39999999999994 -6.0744562647 +2 713 160 0 -8.39999999999994 -6.0744562647 +2 714 161 0 -8.39999999999994 -6.0744562647 +4 CN 160 0 161 0 +2 735 162 157 -8.39999999999994 -6.0744562647 +0 + +0101000 ++6622 165 -6626 0 * +Ed + 1.0000000814029e-07 1 1 0 +1 301 0 -1.0255437353 1.3 +2 711 162 0 -1.0255437353 1.3 +2 712 159 0 -1.0255437353 1.3 +4 CN 162 0 159 0 +2 736 160 159 -1.0255437353 1.3 +0 + +0101000 ++6620 164 -6637 0 * +Ed + 1.00000003568292e-07 1 1 0 +1 298 0 -1.0255437353 1.3 +2 703 162 0 -1.0255437353 1.3 +2 704 159 0 -1.0255437353 1.3 +4 CN 162 0 159 0 +2 737 161 159 -1.0255437353 1.3 +0 + +0101000 ++6621 164 -6635 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 300 0 5.21238898038557 6.2831853071796 +2 708 160 0 5.21238898038557 6.2831853071796 +2 709 168 0 5.21238898038557 6.2831853071796 +4 G1 160 0 168 0 +2 738 159 157 5.21238898038557 6.2831853071796 +0 + +0101000 ++6624 0 -6620 165 * +Ed + 1.00000007324107e-07 1 1 0 +1 299 0 3.14159265358979 5.21238898038557 +2 705 161 0 3.14159265358979 5.21238898038557 +2 706 167 0 3.14159265358979 5.21238898038557 +4 G1 161 0 167 0 +2 739 159 157 3.14159265358979 5.21238898038557 +0 + +0101000 ++6621 165 -6624 0 * +Ed + 1.00000331456001e-07 1 1 0 +1 304 0 -8.40000000000004 -6.0744562647 +2 722 160 0 -8.40000000000004 -6.0744562647 +2 723 161 0 -8.40000000000004 -6.0744562647 +4 CN 160 0 161 0 +2 740 159 157 -8.40000000000004 -6.0744562647 +0 + +0101000 ++6623 165 -6624 0 * +Ed + 1e-07 1 1 0 +1 60 0 -16.3999999999994 -16 +2 135 59 0 -16.3999999999994 -16 +2 136 60 0 -16.3999999999994 -16 +4 CN 59 0 60 0 +0 + +0101000 ++5268 131 -6619 0 * +Ed + 1e-07 1 1 0 +1 307 0 2.07079632679468 5.21238898038447 +2 741 59 0 2.07079632679468 5.21238898038447 +4 C0 59 0 65 0 +2 742 65 0 2.07079632679468 5.21238898038447 +0 + +0101000 ++6619 0 -6618 0 * +Ed + 1e-07 1 1 0 +1 54 0 -16.3999999999996 -16 +2 116 59 0 -16.3999999999996 -16 +2 117 60 0 -16.3999999999996 -16 +4 CN 59 0 60 0 +0 + +0101000 ++5274 131 -6618 0 * +Ed + 1e-07 1 1 0 +1 308 0 5.21238898038447 8.35398163397426 +2 743 60 0 5.21238898038447 8.35398163397426 +4 C0 60 0 65 0 +2 744 65 0 5.21238898038447 8.35398163397426 +0 + +0101000 ++6618 0 -6619 0 * +Ed + 1e-07 1 1 0 +1 309 0 2.07079632679548 5.21238898038527 +2 745 61 0 2.07079632679548 5.21238898038527 +4 C0 169 0 61 0 +2 746 169 0 2.07079632679548 5.21238898038527 +0 + +0101000 ++6617 0 -6616 0 * +Ed + 1e-07 1 1 0 +1 310 0 5.21238898038527 8.35398163397506 +2 747 62 0 5.21238898038527 8.35398163397506 +4 C0 169 0 62 0 +2 748 169 0 5.21238898038527 8.35398163397506 +0 + +0101000 ++6616 0 -6617 0 * +Ed + 1e-07 1 1 0 +1 311 0 -1.27279220613367 1.27279220613367 +2 749 62 0 -1.27279220613367 1.27279220613367 +2 750 61 0 -1.27279220613367 1.27279220613367 +4 G2 62 0 61 0 +0 + +0101000 ++6616 0 -5272 0 * +Ed + 1e-07 1 1 0 +1 312 0 -1.27279220613367 1.27279220613367 +2 751 62 0 -1.27279220613367 1.27279220613367 +2 752 61 0 -1.27279220613367 1.27279220613367 +4 G2 62 0 61 0 +0 + +0101000 ++6617 0 -5267 0 * +Ed + 1e-07 1 1 0 +1 313 0 5.21238898038527 8.35398163397506 +2 753 170 0 5.21238898038527 8.35398163397506 +4 C0 171 0 170 0 +2 754 171 0 5.21238898038527 8.35398163397506 +0 + +0101000 ++6615 0 -6614 0 * +Ed + 1e-07 1 1 0 +1 314 0 2.07079632679548 5.21238898038527 +2 755 172 0 2.07079632679548 5.21238898038527 +4 C0 171 0 172 0 +2 756 171 0 2.07079632679548 5.21238898038527 +0 + +0101000 ++6614 0 -6615 0 * +Ed + 1e-07 1 1 0 +1 315 0 -1.27279220613367 1.27279220613367 +2 757 170 0 -1.27279220613367 1.27279220613367 +2 758 172 0 -1.27279220613367 1.27279220613367 +4 G2 170 0 172 0 +0 + +0101000 ++6615 0 -6613 0 * +Ed + 1e-07 1 1 0 +1 316 0 5.21238898038447 8.35398163397426 +2 759 170 0 5.21238898038447 8.35398163397426 +2 760 173 0 5.21238898038447 8.35398163397426 +4 C0 170 0 173 0 +0 + +0101000 ++6613 0 -6612 0 * +Ed + 1e-07 1 1 0 +1 317 0 -1.27279220613367 1.27279220613367 +2 761 170 0 -1.27279220613367 1.27279220613367 +2 762 172 0 -1.27279220613367 1.27279220613367 +4 G2 170 0 172 0 +0 + +0101000 ++6614 0 -6612 0 * +Ed + 1e-07 1 1 0 +1 318 0 2.07079632679468 5.21238898038447 +2 763 172 0 2.07079632679468 5.21238898038447 +2 764 174 0 2.07079632679468 5.21238898038447 +4 C0 172 0 174 0 +0 + +0101000 ++6612 0 -6613 0 * +Ed + 1e-07 1 1 0 +1 319 0 2.07079632679468 5.21238898038447 +2 765 136 0 2.07079632679468 5.21238898038447 +4 C0 130 0 136 0 +2 766 130 0 2.07079632679468 5.21238898038447 +0 + +0101000 ++6611 0 -6610 0 * +Ed + 1e-07 1 1 0 +1 320 0 5.21238898038447 8.35398163397426 +2 767 135 0 5.21238898038447 8.35398163397426 +4 C0 130 0 135 0 +2 768 130 0 5.21238898038447 8.35398163397426 +0 + +0101000 ++6610 0 -6611 0 * +Ed + 1e-07 1 1 0 +1 321 0 -0.141421356231557 0.141421356237766 +2 769 129 0 -0.141421356231557 0.141421356237766 +2 770 131 0 -0.141421356231557 0.141421356237766 +4 G2 129 0 131 0 +0 + +0101000 ++6669 0 -6609 0 * +Ed + 1.00000015888219e-07 1 1 0 +1 322 0 5.21238898038469 6.28318530717957 +2 771 129 0 5.21238898038469 6.28318530717957 +2 772 175 0 5.21238898038469 6.28318530717957 +4 C0 129 0 175 0 +2 773 96 166 5.21238898038469 6.28318530717957 +0 + +0101000 ++6609 0 -6608 149 * +Ed + 1.00000015177199e-07 1 1 0 +1 322 0 6.28318530717957 8.35398163397448 +2 771 129 0 6.28318530717957 8.35398163397448 +2 772 175 0 6.28318530717957 8.35398163397448 +4 C0 129 0 175 0 +2 774 95 166 6.28318530717957 8.35398163397448 +0 + +0101000 ++6608 149 -6607 0 * +Ed + 1e-07 1 1 0 +1 323 0 -0.141421356231557 0.141421356237766 +2 775 129 0 -0.141421356231557 0.141421356237766 +2 776 131 0 -0.141421356231557 0.141421356237766 +4 G2 129 0 131 0 +0 + +0101000 ++6668 0 -6607 0 * +Ed + 1.00000014648214e-07 1 1 0 +1 324 0 2.0707963267949 3.14159265358979 +2 777 131 0 2.0707963267949 3.14159265358979 +2 778 176 0 2.0707963267949 3.14159265358979 +4 C0 131 0 176 0 +2 779 95 166 2.0707963267949 3.14159265358979 +0 + +0101000 ++6607 0 -6606 149 * +Ed + 1.00000007105427e-07 1 1 0 +1 324 0 3.14159265358979 5.21238898038469 +2 777 131 0 3.14159265358979 5.21238898038469 +2 778 176 0 3.14159265358979 5.21238898038469 +4 C0 131 0 176 0 +2 780 96 166 3.14159265358979 5.21238898038469 +0 + +0101000 ++6606 149 -6609 0 * +Ed + 1.00000014648214e-07 1 1 0 +1 325 0 3.14159265358979 5.21238898038469 +2 781 176 0 3.14159265358979 5.21238898038469 +2 782 98 0 3.14159265358979 5.21238898038469 +4 C0 176 0 98 0 +2 783 96 166 3.14159265358979 5.21238898038469 +0 + +0101000 ++6605 149 -6604 0 * +Ed + 1.00000015072888e-07 1 1 0 +1 326 0 -1.19999999999979 5.80000000000001 +2 784 96 0 -1.19999999999979 5.80000000000001 +2 785 95 0 -1.19999999999979 5.80000000000001 +4 CN 96 0 95 0 +2 786 176 167 -1.19999999999979 5.80000000000001 +0 + +0101000 ++6606 168 -6605 168 * +Ed + 1.00004241719942e-07 1 1 0 +1 327 0 -3.5 3.5 +2 787 176 0 -3.5 3.5 +2 788 175 0 -3.5 3.5 +4 CN 176 0 175 0 +2 789 96 166 -3.5 3.5 +0 + +0101000 ++6604 0 -6609 0 * +Ed + 1.00000016758117e-07 1 1 0 +1 325 0 2.0707963267949 3.14159265358979 +2 781 176 0 2.0707963267949 3.14159265358979 +2 782 98 0 2.0707963267949 3.14159265358979 +4 C0 176 0 98 0 +2 790 95 166 2.0707963267949 3.14159265358979 +0 + +0101000 ++6603 0 -6605 149 * +Ed + 1.0000424795859e-07 1 1 0 +1 328 0 -3.5 3.5 +2 791 176 0 -3.5 3.5 +2 792 175 0 -3.5 3.5 +4 CN 176 0 175 0 +2 793 95 166 -3.5 3.5 +0 + +0101000 ++6603 0 -6607 0 * +Ed + 1.00000015888219e-07 1 1 0 +1 329 0 6.28318530717957 8.35398163397448 +2 794 175 0 6.28318530717957 8.35398163397448 +2 795 97 0 6.28318530717957 8.35398163397448 +4 C0 175 0 97 0 +2 796 95 166 6.28318530717957 8.35398163397448 +0 + +0101000 ++6602 149 -6603 0 * +Ed + 1.00000016280579e-07 1 1 0 +1 330 0 -1.20000000000019 5.80000000000001 +2 797 96 0 -1.20000000000019 5.80000000000001 +2 798 95 0 -1.20000000000019 5.80000000000001 +4 CN 96 0 95 0 +2 799 175 167 -1.20000000000019 5.80000000000001 +0 + +0101000 ++6608 168 -6602 168 * +Ed + 1.00000015987212e-07 1 1 0 +1 329 0 5.21238898038469 6.28318530717957 +2 794 175 0 5.21238898038469 6.28318530717957 +2 795 97 0 5.21238898038469 6.28318530717957 +4 C0 175 0 97 0 +2 800 96 166 5.21238898038469 6.28318530717957 +0 + +0101000 ++6604 0 -6602 149 * +Ed + 1e-07 1 1 0 +1 331 0 -0.141421356231558 0.141421356237765 +2 801 97 0 -0.141421356231558 0.141421356237765 +2 802 98 0 -0.141421356231558 0.141421356237765 +4 G2 97 0 98 0 +0 + +0101000 ++5218 0 -6604 0 * +Ed + 1e-07 1 1 0 +1 332 0 -0.141421356231558 0.141421356237765 +2 803 97 0 -0.141421356231558 0.141421356237765 +2 804 98 0 -0.141421356231558 0.141421356237765 +4 G2 97 0 98 0 +0 + +0101000 ++5217 0 -6603 0 * +Ed + 1e-07 1 1 0 +1 333 0 -1.4 1.4 +2 805 177 0 -1.4 1.4 +2 806 178 0 -1.4 1.4 +4 CN 177 0 178 0 +0 + +0101000 ++6601 0 -6600 0 * +Ed + 1e-07 1 1 0 +1 334 0 2.07079632679437 5.21238898038416 +2 807 177 0 2.07079632679437 5.21238898038416 +2 808 179 0 2.07079632679437 5.21238898038416 +4 G1 177 0 179 0 +0 + +0101000 ++6601 0 -6599 0 * +Ed + 1e-07 1 1 0 +1 335 0 -1.4 1.4 +2 809 177 0 -1.4 1.4 +2 810 178 0 -1.4 1.4 +4 CN 177 0 178 0 +0 + +0101000 ++6599 0 -6598 0 * +Ed + 1e-07 1 1 0 +1 336 0 2.07079632679437 5.21238898038416 +2 811 177 0 2.07079632679437 5.21238898038416 +2 812 180 0 2.07079632679437 5.21238898038416 +4 G1 177 0 180 0 +0 + +0101000 ++6600 0 -6598 0 * +Ed + 1e-07 1 1 0 +1 337 0 5.21238898038416 8.35398163397396 +2 813 178 0 5.21238898038416 8.35398163397396 +2 814 181 0 5.21238898038416 8.35398163397396 +4 G1 178 0 181 0 +0 + +0101000 ++6599 0 -6601 0 * +Ed + 1e-07 1 1 0 +1 338 0 5.21238898038416 8.35398163397396 +2 815 178 0 5.21238898038416 8.35398163397396 +2 816 182 0 5.21238898038416 8.35398163397396 +4 G1 178 0 182 0 +0 + +0101000 ++6598 0 -6600 0 * +Ed + 1e-07 1 1 0 +1 339 0 5.21238898038447 8.35398163397426 +2 817 173 0 5.21238898038447 8.35398163397426 +2 818 183 0 5.21238898038447 8.35398163397426 +4 G1 173 0 183 0 +0 + +0101000 ++6597 0 -6596 0 * +Ed + 1e-07 1 1 0 +1 340 0 -2.0755002002 11.0000000000001 +2 819 173 0 -2.0755002002 11.0000000000001 +2 820 174 0 -2.0755002002 11.0000000000001 +4 CN 173 0 174 0 +0 + +0101000 ++6597 0 -6595 169 * +Ed + 1.00001301515697e-07 1 1 0 +1 341 0 2.07079632679468 5.21238898038447 +2 821 184 0 2.07079632679468 5.21238898038447 +4 C0 185 0 184 0 +2 822 185 0 2.07079632679468 5.21238898038447 +2 823 173 170 2.07079632679468 5.21238898038447 +0 + +0101000 ++6595 0 -6594 0 * +Ed + 1e-07 1 1 0 +1 342 0 -2.0755002002 11.0000000000008 +2 824 173 0 -2.0755002002 11.0000000000008 +2 825 174 0 -2.0755002002 11.0000000000008 +4 CN 173 0 174 0 +0 + +0101000 ++6596 0 -6594 169 * +Ed + 1.00000540012479e-07 1 1 0 +1 343 0 -5 4.26794919243 +2 826 186 0 -5 4.26794919243 +2 827 184 0 -5 4.26794919243 +4 CN 186 0 184 0 +2 828 173 170 -5 4.26794919243 +2 829 174 170 -5 4.26794919243 +0 + +0101000 ++6595 0 -6593 0 * +Ed + 1.00001323670747e-07 1 1 0 +1 344 0 -5 4.26794919243 +2 830 186 0 -5 4.26794919243 +2 831 184 0 -5 4.26794919243 +4 CN 186 0 184 0 +2 832 173 170 -5 4.26794919243 +2 833 174 170 -5 4.26794919243 +0 + +0101000 ++6594 0 -6592 0 * +Ed + 1.00000454747351e-07 1 1 0 +1 345 0 2.07079632679468 5.21238898038447 +2 834 184 0 2.07079632679468 5.21238898038447 +2 835 187 0 2.07079632679468 5.21238898038447 +4 C1 184 0 187 0 +2 836 173 170 2.07079632679468 5.21238898038447 +0 + +0101000 ++6593 0 -6592 0 * +Ed + 1e-07 1 1 0 +1 340 0 20.2679491924308 27.2 +2 819 173 0 20.2679491924308 27.2 +2 820 174 0 20.2679491924308 27.2 +4 CN 173 0 174 0 +0 + +0101000 ++6593 169 -6613 0 * +Ed + 1e-07 1 1 0 +1 342 0 20.2679491924303 27.2 +2 824 173 0 20.2679491924303 27.2 +2 825 174 0 20.2679491924303 27.2 +4 CN 173 0 174 0 +0 + +0101000 ++6592 169 -6612 0 * +Ed + 1e-07 1 1 0 +1 346 0 2.07079632679468 5.21238898038447 +2 837 174 0 2.07079632679468 5.21238898038447 +2 838 188 0 2.07079632679468 5.21238898038447 +4 G1 174 0 188 0 +0 + +0101000 ++6596 0 -6597 0 * +Ed + 1.00000992727632e-07 1 1 0 +1 347 0 5.21238898038447 8.35398163397426 +2 839 186 0 5.21238898038447 8.35398163397426 +4 C0 185 0 186 0 +2 840 185 0 5.21238898038447 8.35398163397426 +2 841 174 170 5.21238898038447 8.35398163397426 +0 + +0101000 ++6594 0 -6595 0 * +Ed + 1.0000051159077e-07 1 1 0 +1 348 0 5.21238898038447 8.35398163397426 +2 842 186 0 5.21238898038447 8.35398163397426 +2 843 189 0 5.21238898038447 8.35398163397426 +4 C1 186 0 189 0 +2 844 174 170 5.21238898038447 8.35398163397426 +0 + +0101000 ++6592 0 -6593 0 * +Ed + 1e-07 1 1 0 +1 349 0 2.24592785979465 3.14159265358979 +2 845 182 0 2.24592785979465 3.14159265358979 +2 846 180 0 2.24592785979465 3.14159265358979 +4 CN 182 0 180 0 +0 + +0101000 ++6591 0 -6600 0 * +Ed + 1e-07 1 1 0 +1 350 0 2.24592785979465 3.14159265358979 +2 847 182 0 2.24592785979465 3.14159265358979 +2 848 180 0 2.24592785979465 3.14159265358979 +4 CN 182 0 180 0 +0 + +0101000 ++6590 0 -6598 0 * +Ed + 1e-07 1 1 0 +1 351 0 5.21238898038512 8.35398163397492 +2 849 182 0 5.21238898038512 8.35398163397492 +2 850 183 0 5.21238898038512 8.35398163397492 +4 G1 182 0 183 0 +0 + +0101000 ++6590 0 -6591 0 * +Ed + 1e-07 1 1 0 +1 352 0 2.07079632679533 5.21238898038512 +2 851 180 0 2.07079632679533 5.21238898038512 +2 852 188 0 2.07079632679533 5.21238898038512 +4 G1 180 0 188 0 +0 + +0101000 ++6591 0 -6590 0 * +Ed + 1e-07 1 1 0 +1 353 0 3.14159265358979 4.03725744744417 +2 853 188 0 3.14159265358979 4.03725744744417 +2 854 183 0 3.14159265358979 4.03725744744417 +4 G2 188 0 183 0 +0 + +0101000 ++6597 0 -6590 0 * +Ed + 1e-07 1 1 0 +1 354 0 3.14159265358979 4.03725744744417 +2 855 188 0 3.14159265358979 4.03725744744417 +2 856 183 0 3.14159265358979 4.03725744744417 +4 CN 188 0 183 0 +0 + +0101000 ++6596 0 -6591 0 * +Ed + 1e-07 1 1 0 +1 266 0 -8.6 -8.40000000000002 +2 610 135 0 -8.6 -8.40000000000002 +2 611 136 0 -8.6 -8.40000000000002 +4 CN 135 0 136 0 +0 + +0101000 ++6610 0 -6664 149 * +Ed + 1e-07 1 1 0 +1 264 0 -8.6 -8.40000000000001 +2 601 135 0 -8.6 -8.40000000000001 +2 602 136 0 -8.6 -8.40000000000001 +4 CN 135 0 136 0 +0 + +0101000 ++6611 0 -6662 149 * +Ed + 1e-07 1 1 0 +1 355 0 3.14159265358979 4.03725744738494 +2 857 181 0 3.14159265358979 4.03725744738494 +2 858 179 0 3.14159265358979 4.03725744738494 +4 G2 181 0 179 0 +0 + +0101000 ++6599 0 -6589 0 * +Ed + 1e-07 1 1 0 +1 356 0 3.14159265358979 4.03725744738494 +2 859 181 0 3.14159265358979 4.03725744738494 +2 860 179 0 3.14159265358979 4.03725744738494 +4 G2 181 0 179 0 +0 + +0101000 ++6601 0 -6588 0 * +Ed + 1e-07 1 1 0 +1 357 0 5.21238898038512 8.35398163397492 +2 861 181 0 5.21238898038512 8.35398163397492 +2 862 143 0 5.21238898038512 8.35398163397492 +4 G1 181 0 143 0 +0 + +0101000 ++6589 0 -6588 0 * +Ed + 1e-07 1 1 0 +1 358 0 2.07079632679533 5.21238898038512 +2 863 179 0 2.07079632679533 5.21238898038512 +2 864 142 0 2.07079632679533 5.21238898038512 +4 G1 179 0 142 0 +0 + +0101000 ++6588 0 -6589 0 * +Ed + 1e-07 1 1 0 +1 359 0 2.24592785973542 3.14159265358979 +2 865 142 0 2.24592785973542 3.14159265358979 +2 866 143 0 2.24592785973542 3.14159265358979 +4 CN 142 0 143 0 +0 + +0101000 ++6589 0 -6652 0 * +Ed + 1e-07 1 1 0 +1 360 0 2.24592785973542 3.14159265358979 +2 867 142 0 2.24592785973542 3.14159265358979 +2 868 143 0 2.24592785973542 3.14159265358979 +4 CN 142 0 143 0 +0 + +0101000 ++6588 0 -6654 0 * +Ed + 1e-07 1 1 0 +1 361 0 -1.4 1.4 +2 869 190 0 -1.4 1.4 +2 870 191 0 -1.4 1.4 +4 CN 190 0 191 0 +0 + +0101000 ++6587 0 -6586 0 * +Ed + 1e-07 1 1 0 +1 362 0 2.07079632679388 5.21238898038367 +2 871 190 0 2.07079632679388 5.21238898038367 +2 872 192 0 2.07079632679388 5.21238898038367 +4 G1 190 0 192 0 +0 + +0101000 ++6585 0 -6586 0 * +Ed + 1e-07 1 1 0 +1 363 0 -1.4 1.4 +2 873 190 0 -1.4 1.4 +2 874 191 0 -1.4 1.4 +4 CN 190 0 191 0 +0 + +0101000 ++6584 0 -6585 0 * +Ed + 1e-07 1 1 0 +1 364 0 2.07079632679388 5.21238898038367 +2 875 190 0 2.07079632679388 5.21238898038367 +2 876 193 0 2.07079632679388 5.21238898038367 +4 G1 190 0 193 0 +0 + +0101000 ++6584 0 -6587 0 * +Ed + 1e-07 1 1 0 +1 365 0 5.21238898038367 8.35398163397346 +2 877 191 0 5.21238898038367 8.35398163397346 +2 878 194 0 5.21238898038367 8.35398163397346 +4 G1 191 0 194 0 +0 + +0101000 ++6586 0 -6585 0 * +Ed + 1e-07 1 1 0 +1 366 0 5.21238898038367 8.35398163397346 +2 879 191 0 5.21238898038367 8.35398163397346 +2 880 195 0 5.21238898038367 8.35398163397346 +4 G1 191 0 195 0 +0 + +0101000 ++6587 0 -6584 0 * +Ed + 1e-07 1 1 0 +1 304 0 -8.6 -8.40000000000004 +2 722 160 0 -8.6 -8.40000000000004 +2 723 161 0 -8.6 -8.40000000000004 +4 CN 160 0 161 0 +0 + +0101000 ++6583 0 -6636 163 * +Ed + 1e-07 1 1 0 +1 302 0 -8.6 -8.39999999999995 +2 713 160 0 -8.6 -8.39999999999995 +2 714 161 0 -8.6 -8.39999999999995 +4 CN 160 0 161 0 +0 + +0101000 ++6582 0 -6634 163 * +Ed + 1e-07 1 1 0 +1 367 0 5.21238898038557 8.35398163397536 +2 881 160 0 5.21238898038557 8.35398163397536 +4 C0 160 0 155 0 +2 882 155 0 5.21238898038557 8.35398163397536 +0 + +0101000 ++6583 0 -6582 0 * +Ed + 1e-07 1 1 0 +1 368 0 2.07079632679577 5.21238898038557 +2 883 161 0 2.07079632679577 5.21238898038557 +4 C0 161 0 155 0 +2 884 155 0 2.07079632679577 5.21238898038557 +0 + +0101000 ++6582 0 -6583 0 * +Ed + 1e-07 1 1 0 +1 369 0 3.14159265358979 4.10414340149723 +2 885 195 0 3.14159265358979 4.10414340149723 +2 886 193 0 3.14159265358979 4.10414340149723 +4 CN 195 0 193 0 +0 + +0101000 ++6587 0 -6581 0 * +Ed + 1e-07 1 1 0 +1 370 0 3.14159265358979 4.10414340149723 +2 887 195 0 3.14159265358979 4.10414340149723 +2 888 193 0 3.14159265358979 4.10414340149723 +4 CN 195 0 193 0 +0 + +0101000 ++6584 0 -6580 0 * +Ed + 1e-07 1 1 0 +1 371 0 5.21238898038504 8.35398163397483 +2 889 195 0 5.21238898038504 8.35398163397483 +2 890 168 0 5.21238898038504 8.35398163397483 +4 G1 195 0 168 0 +0 + +0101000 ++6581 0 -6580 0 * +Ed + 1e-07 1 1 0 +1 372 0 2.07079632679524 5.21238898038504 +2 891 193 0 2.07079632679524 5.21238898038504 +2 892 167 0 2.07079632679524 5.21238898038504 +4 G1 193 0 167 0 +0 + +0101000 ++6580 0 -6581 0 * +Ed + 1e-07 1 1 0 +1 373 0 2.17904190565329 3.14159265358979 +2 893 167 0 2.17904190565329 3.14159265358979 +2 894 168 0 2.17904190565329 3.14159265358979 +4 CN 167 0 168 0 +0 + +0101000 ++6581 0 -6624 0 * +Ed + 1e-07 1 1 0 +1 374 0 2.17904190565329 3.14159265358979 +2 895 167 0 2.17904190565329 3.14159265358979 +2 896 168 0 2.17904190565329 3.14159265358979 +4 CN 167 0 168 0 +0 + +0101000 ++6580 0 -6626 0 * +Ed + 1e-07 1 1 0 +1 375 0 2.17904190568235 3.14159265358979 +2 897 194 0 2.17904190568235 3.14159265358979 +2 898 192 0 2.17904190568235 3.14159265358979 +4 G2 194 0 192 0 +0 + +0101000 ++6579 0 -6585 0 * +Ed + 1e-07 1 1 0 +1 376 0 2.17904190568235 3.14159265358979 +2 899 194 0 2.17904190568235 3.14159265358979 +2 900 192 0 2.17904190568235 3.14159265358979 +4 G2 194 0 192 0 +0 + +0101000 ++6578 0 -6586 0 * +Ed + 1e-07 1 1 0 +1 377 0 5.21238898038504 8.35398163397483 +2 901 194 0 5.21238898038504 8.35398163397483 +2 902 196 0 5.21238898038504 8.35398163397483 +4 G1 194 0 196 0 +0 + +0101000 ++6578 0 -6579 0 * +Ed + 1e-07 1 1 0 +1 378 0 2.07079632679524 5.21238898038504 +2 903 192 0 2.07079632679524 5.21238898038504 +2 904 197 0 2.07079632679524 5.21238898038504 +4 G1 192 0 197 0 +0 + +0101000 ++6579 0 -6578 0 * +Ed + 1e-07 1 1 0 +1 379 0 3.14159265358979 4.1041434015263 +2 905 197 0 3.14159265358979 4.1041434015263 +2 906 196 0 3.14159265358979 4.1041434015263 +4 G2 197 0 196 0 +0 + +0101000 ++6577 0 -6578 0 * +Ed + 1e-07 1 1 0 +1 380 0 4.21238898038381 7.3539816339736 +2 907 197 0 4.21238898038381 7.3539816339736 +2 908 198 0 4.21238898038381 7.3539816339736 +4 G1 197 0 198 0 +0 + +0101000 ++6577 0 -6576 0 * +Ed + 1e-07 1 1 0 +1 381 0 3.14159265358979 4.1041434015263 +2 909 197 0 3.14159265358979 4.1041434015263 +2 910 196 0 3.14159265358979 4.1041434015263 +4 CN 197 0 196 0 +0 + +0101000 ++6576 0 -6579 0 * +Ed + 1e-07 1 1 0 +1 382 0 1.07079632679402 4.21238898038381 +2 911 196 0 1.07079632679402 4.21238898038381 +2 912 199 0 1.07079632679402 4.21238898038381 +4 G1 196 0 199 0 +0 + +0101000 ++6576 0 -6577 0 * +Ed + 1e-07 1 1 0 +1 72 0 -16.4000000000005 -16 +2 173 67 0 -16.4000000000005 -16 +2 174 68 0 -16.4000000000005 -16 +4 CN 67 0 68 0 +0 + +0101000 ++5249 137 -6575 0 * +Ed + 1e-07 1 1 0 +1 383 0 2.07079632679577 5.21238898038557 +2 913 67 0 2.07079632679577 5.21238898038557 +4 C0 67 0 73 0 +2 914 73 0 2.07079632679577 5.21238898038557 +0 + +0101000 ++6575 0 -6574 0 * +Ed + 1e-07 1 1 0 +1 66 0 -16.3999999999998 -16 +2 154 67 0 -16.3999999999998 -16 +2 155 68 0 -16.3999999999998 -16 +4 CN 67 0 68 0 +0 + +0101000 ++5254 137 -6574 0 * +Ed + 1e-07 1 1 0 +1 384 0 5.21238898038557 8.35398163397536 +2 915 68 0 5.21238898038557 8.35398163397536 +4 C0 68 0 73 0 +2 916 73 0 5.21238898038557 8.35398163397536 +0 + +0101000 ++6574 0 -6575 0 * +Ed + 1e-07 1 1 0 +1 385 0 2.07079632679534 5.21238898038513 +2 917 69 0 2.07079632679534 5.21238898038513 +4 C0 200 0 69 0 +2 918 200 0 2.07079632679534 5.21238898038513 +0 + +0101000 ++6573 0 -6572 0 * +Ed + 1e-07 1 1 0 +1 386 0 5.21238898038513 8.35398163397492 +2 919 70 0 5.21238898038513 8.35398163397492 +4 C0 200 0 70 0 +2 920 200 0 5.21238898038513 8.35398163397492 +0 + +0101000 ++6572 0 -6573 0 * +Ed + 1e-07 1 1 0 +1 387 0 -1.27279220613367 1.27279220613706 +2 921 70 0 -1.27279220613367 1.27279220613706 +2 922 69 0 -1.27279220613367 1.27279220613706 +4 G2 70 0 69 0 +0 + +0101000 ++6572 0 -5262 0 * +Ed + 1e-07 1 1 0 +1 388 0 -1.27279220613367 1.27279220613706 +2 923 70 0 -1.27279220613367 1.27279220613706 +2 924 69 0 -1.27279220613367 1.27279220613706 +4 G2 70 0 69 0 +0 + +0101000 ++6573 0 -5257 0 * +Ed + 1e-07 1 1 0 +1 389 0 2.07079632679534 5.21238898038513 +2 925 201 0 2.07079632679534 5.21238898038513 +4 C0 202 0 201 0 +2 926 202 0 2.07079632679534 5.21238898038513 +0 + +0101000 ++6571 0 -6570 0 * +Ed + 1e-07 1 1 0 +1 390 0 5.21238898038513 8.35398163397492 +2 927 203 0 5.21238898038513 8.35398163397492 +4 C0 202 0 203 0 +2 928 202 0 5.21238898038513 8.35398163397492 +0 + +0101000 ++6570 0 -6571 0 * +Ed + 1e-07 1 1 0 +1 391 0 -2.1255437353 13.5000000000003 +2 929 199 0 -2.1255437353 13.5000000000003 +2 930 198 0 -2.1255437353 13.5000000000003 +4 CN 199 0 198 0 +0 + +0101000 ++6577 0 -6569 171 * +Ed + 1.00001314254387e-07 1 1 0 +1 392 0 5.21238898038557 8.35398163397536 +2 931 204 0 5.21238898038557 8.35398163397536 +4 C0 205 0 204 0 +2 932 205 0 5.21238898038557 8.35398163397536 +2 933 199 172 5.21238898038557 8.35398163397536 +2 934 198 173 5.21238898038557 8.35398163397536 +0 + +0101000 ++6569 0 -6568 0 * +Ed + 1e-07 1 1 0 +1 393 0 -2.1255437353 13.4999999999998 +2 935 199 0 -2.1255437353 13.4999999999998 +2 936 198 0 -2.1255437353 13.4999999999998 +4 CN 199 0 198 0 +0 + +0101000 ++6576 0 -6568 171 * +Ed + 1.00001350629417e-07 1 1 0 +1 394 0 -3.75 3.01794919243 +2 937 204 0 -3.75 3.01794919243 +2 938 206 0 -3.75 3.01794919243 +4 CN 204 0 206 0 +2 939 199 172 -3.75 3.01794919243 +2 940 198 172 -3.75 3.01794919243 +2 941 199 173 -3.75 3.01794919243 +2 942 198 173 -3.75 3.01794919243 +0 + +0101000 ++6569 0 -6567 0 * +Ed + 1.00001350629417e-07 1 1 0 +1 395 0 -3.75 3.01794919243 +2 943 204 0 -3.75 3.01794919243 +2 944 206 0 -3.75 3.01794919243 +4 CN 204 0 206 0 +2 945 199 172 -3.75 3.01794919243 +2 946 198 172 -3.75 3.01794919243 +2 947 199 173 -3.75 3.01794919243 +2 948 198 173 -3.75 3.01794919243 +0 + +0101000 ++6568 0 -6566 0 * +Ed + 1.00001311408595e-07 1 1 0 +1 396 0 5.21238898038557 8.35398163397536 +2 949 204 0 5.21238898038557 8.35398163397536 +2 950 207 0 5.21238898038557 8.35398163397536 +4 C1 204 0 207 0 +2 951 199 172 5.21238898038557 8.35398163397536 +2 952 198 173 5.21238898038557 8.35398163397536 +0 + +0101000 ++6567 0 -6566 0 * +Ed + 1e-07 1 1 0 +1 391 0 20.2679491924308 26.2 +2 929 199 0 20.2679491924308 26.2 +2 930 198 0 20.2679491924308 26.2 +4 CN 199 0 198 0 +0 + +0101000 ++6567 171 -6565 0 * +Ed + 1e-07 1 1 0 +1 397 0 5.21238898038557 8.35398163397536 +2 953 199 0 5.21238898038557 8.35398163397536 +2 954 203 0 5.21238898038557 8.35398163397536 +4 C0 199 0 203 0 +0 + +0101000 ++6565 0 -6564 0 * +Ed + 1e-07 1 1 0 +1 393 0 20.2679491924297 26.2 +2 935 199 0 20.2679491924297 26.2 +2 936 198 0 20.2679491924297 26.2 +4 CN 199 0 198 0 +0 + +0101000 ++6566 171 -6564 0 * +Ed + 1.00001286533722e-07 1 1 0 +1 398 0 2.07079632679577 5.21238898038557 +2 955 206 0 2.07079632679577 5.21238898038557 +4 C0 205 0 206 0 +2 956 205 0 2.07079632679577 5.21238898038557 +2 957 198 172 2.07079632679577 5.21238898038557 +2 958 199 173 2.07079632679577 5.21238898038557 +0 + +0101000 ++6568 0 -6569 0 * +Ed + 1.0000128692609e-07 1 1 0 +1 399 0 2.07079632679577 5.21238898038557 +2 959 206 0 2.07079632679577 5.21238898038557 +2 960 208 0 2.07079632679577 5.21238898038557 +4 C1 206 0 208 0 +2 961 198 172 2.07079632679577 5.21238898038557 +2 962 199 173 2.07079632679577 5.21238898038557 +0 + +0101000 ++6566 0 -6567 0 * +Ed + 1e-07 1 1 0 +1 400 0 2.07079632679577 5.21238898038557 +2 963 198 0 2.07079632679577 5.21238898038557 +2 964 201 0 2.07079632679577 5.21238898038557 +4 C0 198 0 201 0 +0 + +0101000 ++6564 0 -6565 0 * +Ed + 1e-07 1 1 0 +1 401 0 -1.27279220613367 1.27279220613706 +2 965 201 0 -1.27279220613367 1.27279220613706 +2 966 203 0 -1.27279220613367 1.27279220613706 +4 G2 201 0 203 0 +0 + +0101000 ++6571 0 -6564 0 * +Ed + 1e-07 1 1 0 +1 402 0 -1.27279220613367 1.27279220613706 +2 967 201 0 -1.27279220613367 1.27279220613706 +2 968 203 0 -1.27279220613367 1.27279220613706 +4 G2 201 0 203 0 +0 + +0101000 ++6570 0 -6565 0 * +Ed + 1e-07 1 1 0 +1 403 0 -0.141421356237763 0.141421356237765 +2 969 154 0 -0.141421356237763 0.141421356237765 +2 970 156 0 -0.141421356237763 0.141421356237765 +4 G2 154 0 156 0 +0 + +0101000 ++6641 0 -6563 0 * +Ed + 1.00000003580362e-07 1 1 0 +1 404 0 5.21238898038447 6.2831853071796 +2 971 154 0 5.21238898038447 6.2831853071796 +2 972 209 0 5.21238898038447 6.2831853071796 +4 C0 154 0 209 0 +2 973 84 174 5.21238898038447 6.2831853071796 +0 + +0101000 ++6563 0 -6562 163 * +Ed + 1.00000005617334e-07 1 1 0 +1 404 0 6.2831853071796 8.35398163397426 +2 971 154 0 6.2831853071796 8.35398163397426 +2 972 209 0 6.2831853071796 8.35398163397426 +4 C0 154 0 209 0 +2 974 83 174 6.2831853071796 8.35398163397426 +0 + +0101000 ++6562 163 -6561 0 * +Ed + 1e-07 1 1 0 +1 405 0 -0.141421356237763 0.141421356237765 +2 975 154 0 -0.141421356237763 0.141421356237765 +2 976 156 0 -0.141421356237763 0.141421356237765 +4 G2 154 0 156 0 +0 + +0101000 ++6640 0 -6561 0 * +Ed + 1.00000004440892e-07 1 1 0 +1 406 0 2.07079632679468 3.14159265358979 +2 977 156 0 2.07079632679468 3.14159265358979 +2 978 210 0 2.07079632679468 3.14159265358979 +4 C0 156 0 210 0 +2 979 83 174 2.07079632679468 3.14159265358979 +0 + +0101000 ++6561 0 -6560 163 * +Ed + 1.00000003972055e-07 1 1 0 +1 406 0 3.14159265358979 5.21238898038447 +2 977 156 0 3.14159265358979 5.21238898038447 +2 978 210 0 3.14159265358979 5.21238898038447 +4 C0 156 0 210 0 +2 980 84 174 3.14159265358979 5.21238898038447 +0 + +0101000 ++6560 163 -6563 0 * +Ed + 1.00000002664535e-07 1 1 0 +1 407 0 3.14159265358979 5.21238898038447 +2 981 210 0 3.14159265358979 5.21238898038447 +2 982 86 0 3.14159265358979 5.21238898038447 +4 C0 210 0 86 0 +2 983 84 174 3.14159265358979 5.21238898038447 +0 + +0101000 ++6559 163 -6558 0 * +Ed + 1.00000006482219e-07 1 1 0 +1 408 0 -1.20000000000015 5.8 +2 984 84 0 -1.20000000000015 5.8 +2 985 83 0 -1.20000000000015 5.8 +4 CN 84 0 83 0 +2 986 210 175 -1.20000000000015 5.8 +0 + +0101000 ++6560 176 -6559 176 * +Ed + 1.0000436420907e-07 1 1 0 +1 409 0 -3.5 3.5 +2 987 210 0 -3.5 3.5 +2 988 209 0 -3.5 3.5 +4 CN 210 0 209 0 +2 989 84 177 -3.5 3.5 +2 990 84 174 -3.5 3.5 +0 + +0101000 ++6558 0 -6563 0 * +Ed + 1.00000005329071e-07 1 1 0 +1 407 0 2.07079632679468 3.14159265358979 +2 981 210 0 2.07079632679468 3.14159265358979 +2 982 86 0 2.07079632679468 3.14159265358979 +4 C0 210 0 86 0 +2 991 83 174 2.07079632679468 3.14159265358979 +0 + +0101000 ++6557 0 -6559 163 * +Ed + 1.00004352940258e-07 1 1 0 +1 410 0 -3.5 3.5 +2 992 210 0 -3.5 3.5 +2 993 209 0 -3.5 3.5 +4 CN 210 0 209 0 +2 994 83 177 -3.5 3.5 +2 995 83 174 -3.5 3.5 +0 + +0101000 ++6557 0 -6561 0 * +Ed + 1.00000004351168e-07 1 1 0 +1 411 0 6.2831853071796 8.35398163397426 +2 996 209 0 6.2831853071796 8.35398163397426 +2 997 85 0 6.2831853071796 8.35398163397426 +4 C0 209 0 85 0 +2 998 83 174 6.2831853071796 8.35398163397426 +0 + +0101000 ++6556 163 -6557 0 * +Ed + 1.00000007324107e-07 1 1 0 +1 412 0 -1.20000000000016 5.8 +2 999 84 0 -1.20000000000016 5.8 +2 1000 83 0 -1.20000000000016 5.8 +4 CN 84 0 83 0 +2 1001 209 175 -1.20000000000016 5.8 +0 + +0101000 ++6562 176 -6556 176 * +Ed + 1.00000003662053e-07 1 1 0 +1 411 0 5.21238898038447 6.2831853071796 +2 996 209 0 5.21238898038447 6.2831853071796 +2 997 85 0 5.21238898038447 6.2831853071796 +4 C0 209 0 85 0 +2 1002 84 174 5.21238898038447 6.2831853071796 +0 + +0101000 ++6558 0 -6556 163 * +Ed + 1e-07 1 1 0 +1 413 0 -0.141421356237764 0.141421356237764 +2 1003 85 0 -0.141421356237764 0.141421356237764 +2 1004 86 0 -0.141421356237764 0.141421356237764 +4 G2 85 0 86 0 +0 + +0101000 ++5236 0 -6558 0 * +Ed + 1e-07 1 1 0 +1 414 0 -0.141421356237764 0.141421356237764 +2 1005 85 0 -0.141421356237764 0.141421356237764 +2 1006 86 0 -0.141421356237764 0.141421356237764 +4 G2 85 0 86 0 +0 + +0101000 ++5235 0 -6557 0 * +Ed + 1e-07 1 1 0 +1 304 0 -8.6 -8.40000000000004 +2 722 160 0 -8.6 -8.40000000000004 +2 723 161 0 -8.6 -8.40000000000004 +4 CN 160 0 161 0 +0 + +0101000 ++6583 0 -6623 165 * +Ed + 1e-07 1 1 0 +1 302 0 -8.6 -8.39999999999994 +2 713 160 0 -8.6 -8.39999999999994 +2 714 161 0 -8.6 -8.39999999999994 +4 CN 160 0 161 0 +0 + +0101000 ++6582 0 -6622 165 * +Ed + 1e-07 1 1 0 +1 72 0 -16.4000000000005 -16 +2 173 67 0 -16.4000000000005 -16 +2 174 68 0 -16.4000000000005 -16 +4 CN 67 0 68 0 +0 + +0101000 ++5258 134 -6575 0 * +Ed + 1e-07 1 1 0 +1 66 0 -16.3999999999991 -16 +2 154 67 0 -16.3999999999991 -16 +2 155 68 0 -16.3999999999991 -16 +4 CN 67 0 68 0 +0 + +0101000 ++5264 134 -6574 0 * +Ed + 1e-07 1 1 0 +1 391 0 -2.1255437353 13.5000000000009 +2 929 199 0 -2.1255437353 13.5000000000009 +2 930 198 0 -2.1255437353 13.5000000000009 +4 CN 199 0 198 0 +0 + +0101000 ++6577 0 -6568 178 * +Ed + 1e-07 1 1 0 +1 393 0 -2.1255437353 13.5000000000004 +2 935 199 0 -2.1255437353 13.5000000000004 +2 936 198 0 -2.1255437353 13.5000000000004 +4 CN 199 0 198 0 +0 + +0101000 ++6576 0 -6569 178 * +Ed + 1e-07 1 1 0 +1 391 0 20.2679491924314 26.2 +2 929 199 0 20.2679491924314 26.2 +2 930 198 0 20.2679491924314 26.2 +4 CN 199 0 198 0 +0 + +0101000 ++6566 178 -6565 0 * +Ed + 1e-07 1 1 0 +1 393 0 20.2679491924303 26.2 +2 935 199 0 20.2679491924303 26.2 +2 936 198 0 20.2679491924303 26.2 +4 CN 199 0 198 0 +0 + +0101000 ++6567 178 -6564 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 404 0 5.21238898038447 6.2831853071796 +2 971 154 0 5.21238898038447 6.2831853071796 +2 972 209 0 5.21238898038447 6.2831853071796 +4 C0 154 0 209 0 +2 1007 84 177 5.21238898038447 6.2831853071796 +0 + +0101000 ++6563 0 -6555 165 * +Ed + 1.00000008881784e-07 1 1 0 +1 404 0 6.2831853071796 8.35398163397426 +2 971 154 0 6.2831853071796 8.35398163397426 +2 972 209 0 6.2831853071796 8.35398163397426 +4 C0 154 0 209 0 +2 1008 83 177 6.2831853071796 8.35398163397426 +0 + +0101000 ++6555 165 -6561 0 * +Ed + 1.00000009441466e-07 1 1 0 +1 406 0 2.07079632679468 3.14159265358979 +2 977 156 0 2.07079632679468 3.14159265358979 +2 978 210 0 2.07079632679468 3.14159265358979 +4 C0 156 0 210 0 +2 1009 83 177 2.07079632679468 3.14159265358979 +0 + +0101000 ++6561 0 -6554 165 * +Ed + 1.00000007944109e-07 1 1 0 +1 406 0 3.14159265358979 5.21238898038447 +2 977 156 0 3.14159265358979 5.21238898038447 +2 978 210 0 3.14159265358979 5.21238898038447 +4 C0 156 0 210 0 +2 1010 84 177 3.14159265358979 5.21238898038447 +0 + +0101000 ++6554 165 -6563 0 * +Ed + 1.00000007793734e-07 1 1 0 +1 407 0 3.14159265358979 5.21238898038447 +2 981 210 0 3.14159265358979 5.21238898038447 +2 982 86 0 3.14159265358979 5.21238898038447 +4 C0 210 0 86 0 +2 1011 84 177 3.14159265358979 5.21238898038447 +0 + +0101000 ++6553 165 -6558 0 * +Ed + 1.00000007956512e-07 1 1 0 +1 408 0 -1.20000000000015 5.8 +2 984 84 0 -1.20000000000015 5.8 +2 985 83 0 -1.20000000000015 5.8 +4 CN 84 0 83 0 +2 1012 210 179 -1.20000000000015 5.8 +0 + +0101000 ++6554 180 -6553 180 * +Ed + 1.00000008881784e-07 1 1 0 +1 407 0 2.07079632679468 3.14159265358979 +2 981 210 0 2.07079632679468 3.14159265358979 +2 982 86 0 2.07079632679468 3.14159265358979 +4 C0 210 0 86 0 +2 1013 83 177 2.07079632679468 3.14159265358979 +0 + +0101000 ++6557 0 -6553 165 * +Ed + 1.00000011512108e-07 1 1 0 +1 411 0 6.2831853071796 8.35398163397426 +2 996 209 0 6.2831853071796 8.35398163397426 +2 997 85 0 6.2831853071796 8.35398163397426 +4 C0 209 0 85 0 +2 1014 83 177 6.2831853071796 8.35398163397426 +0 + +0101000 ++6552 165 -6557 0 * +Ed + 1.00000010658141e-07 1 1 0 +1 412 0 -1.20000000000016 5.8 +2 999 84 0 -1.20000000000016 5.8 +2 1000 83 0 -1.20000000000016 5.8 +4 CN 84 0 83 0 +2 1015 209 179 -1.20000000000016 5.8 +0 + +0101000 ++6555 180 -6552 180 * +Ed + 1.00000009057678e-07 1 1 0 +1 411 0 5.21238898038447 6.2831853071796 +2 996 209 0 5.21238898038447 6.2831853071796 +2 997 85 0 5.21238898038447 6.2831853071796 +4 C0 209 0 85 0 +2 1016 84 177 5.21238898038447 6.2831853071796 +0 + +0101000 ++6558 0 -6552 165 * +Ed + 1e-07 1 1 0 +1 415 0 -6 6 +2 1017 92 0 -6 6 +2 1018 94 0 -6 6 +4 CN 92 0 94 0 +0 + +0101000 ++6551 0 -5222 0 * +Ed + 1e-07 1 1 0 +1 416 0 0 3.14159265358979 +2 1019 92 0 0 3.14159265358979 +4 C0 92 0 211 0 +2 1020 211 0 0 3.14159265358979 +0 + +0101000 ++6551 0 -6550 0 * +Ed + 1e-07 1 1 0 +1 417 0 -6 6 +2 1021 92 0 -6 6 +2 1022 94 0 -6 6 +4 CN 92 0 94 0 +0 + +0101000 ++6550 0 -5221 0 * +Ed + 1e-07 1 1 0 +1 418 0 3.14159265358979 6.28318530717959 +2 1023 94 0 3.14159265358979 6.28318530717959 +4 C0 94 0 211 0 +2 1024 211 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++6550 0 -6551 0 * +Ed + 1.00000611066753e-07 1 1 0 +1 419 0 3.14159265358979 5.2123889803824 +2 1025 212 0 3.14159265358979 5.2123889803824 +4 C0 211 0 212 0 +2 1026 211 0 3.14159265358979 5.2123889803824 +2 1027 213 181 3.14159265358979 5.2123889803824 +0 + +0101000 ++6549 0 -6548 182 * +Ed + 1.00000971340767e-07 1 1 0 +1 419 0 5.2123889803824 6.28318530717959 +2 1025 212 0 5.2123889803824 6.28318530717959 +4 C0 211 0 212 0 +2 1026 211 0 5.2123889803824 6.28318530717959 +2 1028 214 181 5.2123889803824 6.28318530717959 +0 + +0101000 ++6548 182 -6547 0 * +Ed + 1.00000941033314e-07 1 1 0 +1 420 0 0 2.07079632679269 +2 1029 215 0 0 2.07079632679269 +4 C0 211 0 215 0 +2 1030 211 0 0 2.07079632679269 +2 1031 214 181 0 2.07079632679269 +0 + +0101000 ++6547 0 -6546 182 * +Ed + 1.00000911269327e-07 1 1 0 +1 420 0 2.07079632679269 3.14159265358979 +2 1029 215 0 2.07079632679269 3.14159265358979 +4 C0 211 0 215 0 +2 1030 211 0 2.07079632679269 3.14159265358979 +2 1032 213 181 2.07079632679269 3.14159265358979 +0 + +0101000 ++6546 182 -6549 0 * +Ed + 1.00001050546506e-07 1 1 0 +1 421 0 -1.41000000001 0.18999999999 +2 1033 212 0 -1.41000000001 0.18999999999 +2 1034 215 0 -1.41000000001 0.18999999999 +4 CN 212 0 215 0 +2 1035 213 181 -1.41000000001 0.18999999999 +0 + +0101000 ++6549 0 -6545 0 * +Ed + 1.00001314254387e-07 1 1 0 +1 422 0 3.14159265358979 5.21238898038246 +2 1036 212 0 3.14159265358979 5.21238898038246 +4 C0 212 0 216 0 +2 1037 216 0 3.14159265358979 5.21238898038246 +2 1038 213 181 3.14159265358979 5.21238898038246 +2 1039 122 181 3.14159265358979 5.21238898038246 +0 + +0101000 ++6545 0 -6544 181 * +Ed + 1.00027010614585e-07 1 1 0 +1 423 0 -0.0500000000011249 1.55 +2 1040 213 0 -0.0500000000011249 1.55 +2 1041 214 0 -0.0500000000011249 1.55 +4 CN 213 0 214 0 +2 1042 212 183 -0.0500000000011249 1.55 +0 + +0101000 ++6548 184 -6544 0 * +Ed + 1.00001217912533e-07 1 1 0 +1 422 0 5.21238898038246 6.28318530717959 +2 1036 212 0 5.21238898038246 6.28318530717959 +4 C0 212 0 216 0 +2 1037 216 0 5.21238898038246 6.28318530717959 +2 1043 214 181 5.21238898038246 6.28318530717959 +2 1044 122 181 5.21238898038246 6.28318530717959 +0 + +0101000 ++6544 181 -6543 0 * +Ed + 1.00001301515697e-07 1 1 0 +1 424 0 -1.41000000001 0.18999999999 +2 1045 212 0 -1.41000000001 0.18999999999 +2 1046 215 0 -1.41000000001 0.18999999999 +4 CN 212 0 215 0 +2 1047 214 181 -1.41000000001 0.18999999999 +0 + +0101000 ++6547 0 -6543 0 * +Ed + 1.00001355033128e-07 1 1 0 +1 425 0 0 2.07079632679263 +2 1048 215 0 0 2.07079632679263 +4 C0 215 0 216 0 +2 1049 216 0 0 2.07079632679263 +2 1050 214 181 0 2.07079632679263 +2 1051 122 181 0 2.07079632679263 +0 + +0101000 ++6543 0 -6542 181 * +Ed + 1.00026033556668e-07 1 1 0 +1 426 0 -0.0500000000003649 1.55 +2 1052 213 0 -0.0500000000003649 1.55 +2 1053 214 0 -0.0500000000003649 1.55 +4 CN 213 0 214 0 +2 1054 215 183 -0.0500000000003649 1.55 +0 + +0101000 ++6546 184 -6542 0 * +Ed + 1.00001369044566e-07 1 1 0 +1 425 0 2.07079632679263 3.14159265358979 +2 1048 215 0 2.07079632679263 3.14159265358979 +4 C0 215 0 216 0 +2 1049 216 0 2.07079632679263 3.14159265358979 +2 1055 213 181 2.07079632679263 3.14159265358979 +2 1056 122 181 2.07079632679263 3.14159265358979 +0 + +0101000 ++6542 181 -6545 0 * +Ed + 1.00000227373675e-07 1 1 0 +1 427 0 3.14159265358979 6.28318530717959 +2 1057 217 0 3.14159265358979 6.28318530717959 +4 C0 216 0 217 0 +2 1058 216 0 3.14159265358979 6.28318530717959 +2 1059 122 181 3.14159265358979 6.28318530717959 +0 + +0101000 ++6541 0 -6540 0 * +Ed + 1.0000024158453e-07 1 1 0 +1 428 0 0 3.14159265358979 +2 1060 218 0 0 3.14159265358979 +4 C0 216 0 218 0 +2 1061 216 0 0 3.14159265358979 +2 1062 122 181 0 3.14159265358979 +0 + +0101000 ++6540 0 -6541 0 * +Ed + 1e-07 1 1 0 +1 330 0 -1.4 -1.20000000000019 +2 797 96 0 -1.4 -1.20000000000019 +2 798 95 0 -1.4 -1.20000000000019 +4 CN 96 0 95 0 +0 + +0101000 ++6671 0 -6608 168 * +Ed + 1e-07 1 1 0 +1 326 0 -1.4 -1.19999999999979 +2 784 96 0 -1.4 -1.19999999999979 +2 785 95 0 -1.4 -1.19999999999979 +4 CN 96 0 95 0 +0 + +0101000 ++6670 0 -6606 168 * +Ed + 1e-07 1 1 0 +1 330 0 5.80000000000001 6 +2 797 96 0 5.80000000000001 6 +2 798 95 0 5.80000000000001 6 +4 CN 96 0 95 0 +0 + +0101000 ++6602 168 -5219 0 * +Ed + 1e-07 1 1 0 +1 326 0 5.80000000000001 6 +2 784 96 0 5.80000000000001 6 +2 785 95 0 5.80000000000001 6 +4 CN 96 0 95 0 +0 + +0101000 ++6605 168 -5220 0 * +Ed + 1e-07 1 1 0 +1 429 0 -1.5 1.5 +2 1063 218 0 -1.5 1.5 +2 1064 217 0 -1.5 1.5 +4 CN 218 0 217 0 +0 + +0101000 ++6540 0 -6539 0 * +Ed + 1e-07 1 1 0 +1 430 0 -1.5 1.5 +2 1065 218 0 -1.5 1.5 +2 1066 217 0 -1.5 1.5 +4 CN 218 0 217 0 +0 + +0101000 ++6541 0 -6538 0 * +Ed + 1e-07 1 1 0 +1 431 0 0 3.14159265358979 +2 1067 218 0 0 3.14159265358979 +4 C0 218 0 128 0 +2 1068 128 0 0 3.14159265358979 +0 + +0101000 ++6539 0 -6538 0 * +Ed + 1e-07 1 1 0 +1 432 0 3.14159265358979 6.28318530717959 +2 1069 217 0 3.14159265358979 6.28318530717959 +4 C0 217 0 128 0 +2 1070 128 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++6538 0 -6539 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 433 0 2.07079632679264 5.21238898038243 +2 1071 213 0 2.07079632679264 5.21238898038243 +4 C0 213 0 219 0 +2 1072 219 0 2.07079632679264 5.21238898038243 +2 1073 220 185 2.07079632679264 5.21238898038243 +0 + +0101000 ++6537 0 -6536 0 * +Ed + 1e-07 1 1 0 +1 426 0 -1.55 -0.0500000000003649 +2 1052 213 0 -1.55 -0.0500000000003649 +2 1053 214 0 -1.55 -0.0500000000003649 +4 CN 213 0 214 0 +0 + +0101000 ++6537 0 -6546 184 * +Ed + 1e-07 1 1 0 +1 423 0 -1.55 -0.0500000000011249 +2 1040 213 0 -1.55 -0.0500000000011249 +2 1041 214 0 -1.55 -0.0500000000011249 +4 CN 213 0 214 0 +0 + +0101000 ++6536 0 -6548 184 * +Ed + 1.00000007105427e-07 1 1 0 +1 434 0 5.21238898038243 8.35398163397222 +2 1074 214 0 5.21238898038243 8.35398163397222 +4 C0 214 0 219 0 +2 1075 219 0 5.21238898038243 8.35398163397222 +2 1076 220 185 5.21238898038243 8.35398163397222 +0 + +0101000 ++6536 0 -6537 0 * +Ed + 1.00000011374234e-07 1 1 0 +1 435 0 5.21238898038471 8.3539816339745 +2 1077 221 0 5.21238898038471 8.3539816339745 +4 G1 219 0 221 0 +2 1078 219 0 5.21238898038471 8.3539816339745 +2 1079 222 185 5.21238898038471 8.3539816339745 +2 1080 220 185 5.21238898038471 8.3539816339745 +0 + +0101000 ++6535 186 -6534 186 * +Ed + 1.00000008881784e-07 1 1 0 +1 436 0 2.07079632679492 5.21238898038471 +2 1081 223 0 2.07079632679492 5.21238898038471 +4 G1 219 0 223 0 +2 1082 219 0 2.07079632679492 5.21238898038471 +2 1083 224 185 2.07079632679492 5.21238898038471 +2 1084 220 185 2.07079632679492 5.21238898038471 +0 + +0101000 ++6534 186 -6535 186 * +Ed + 1e-07 1 1 0 +1 437 0 3.14159265358979 4.71238898038469 +2 1085 221 0 3.14159265358979 4.71238898038469 +2 1086 223 0 3.14159265358979 4.71238898038469 +4 CN 221 0 223 0 +0 + +0101000 ++6533 0 -6535 186 * +Ed + 1e-07 1 1 0 +1 438 0 5.21238898038473 8.35398163397453 +2 1087 221 0 5.21238898038473 8.35398163397453 +2 1088 225 0 5.21238898038473 8.35398163397453 +4 G1 221 0 225 0 +0 + +0101000 ++6533 0 -6532 0 * +Ed + 1e-07 1 1 0 +1 439 0 3.14159265358979 4.71238898038469 +2 1089 221 0 3.14159265358979 4.71238898038469 +2 1090 223 0 3.14159265358979 4.71238898038469 +4 CN 221 0 223 0 +0 + +0101000 ++6532 0 -6534 186 * +Ed + 1e-07 1 1 0 +1 440 0 2.07079632679494 5.21238898038473 +2 1091 223 0 2.07079632679494 5.21238898038473 +2 1092 226 0 2.07079632679494 5.21238898038473 +4 G1 223 0 226 0 +0 + +0101000 ++6532 0 -6533 0 * +Ed + 1e-07 1 1 0 +1 441 0 -0.95 1.25 +2 1093 226 0 -0.95 1.25 +2 1094 225 0 -0.95 1.25 +4 CN 226 0 225 0 +0 + +0101000 ++6532 0 -6531 0 * +Ed + 1e-07 1 1 0 +1 442 0 -0.95 1.25 +2 1095 226 0 -0.95 1.25 +2 1096 225 0 -0.95 1.25 +4 CN 226 0 225 0 +0 + +0101000 ++6533 0 -6530 0 * +Ed + 1e-07 1 1 0 +1 443 0 2.07079632679494 5.21238898038473 +2 1097 226 0 2.07079632679494 5.21238898038473 +2 1098 138 0 2.07079632679494 5.21238898038473 +4 G1 226 0 138 0 +0 + +0101000 ++6531 0 -6530 0 * +Ed + 1e-07 1 1 0 +1 444 0 5.21238898038473 8.35398163397453 +2 1099 225 0 5.21238898038473 8.35398163397453 +2 1100 139 0 5.21238898038473 8.35398163397453 +4 G1 225 0 139 0 +0 + +0101000 ++6530 0 -6531 0 * +Ed + 1e-07 1 1 0 +1 445 0 1.5707963267949 3.14159265358979 +2 1101 139 0 1.5707963267949 3.14159265358979 +2 1102 138 0 1.5707963267949 3.14159265358979 +4 G2 139 0 138 0 +0 + +0101000 ++6660 0 -6530 0 * +Ed + 1e-07 1 1 0 +1 446 0 1.5707963267949 3.14159265358979 +2 1103 139 0 1.5707963267949 3.14159265358979 +2 1104 138 0 1.5707963267949 3.14159265358979 +4 G2 139 0 138 0 +0 + +0101000 ++6661 0 -6531 0 * +Ed + 1e-07 1 1 0 +1 447 0 -6 6 +2 1105 80 0 -6 6 +2 1106 82 0 -6 6 +4 CN 80 0 82 0 +0 + +0101000 ++6529 0 -5240 0 * +Ed + 1e-07 1 1 0 +1 448 0 0 3.14159265358979 +2 1107 80 0 0 3.14159265358979 +4 C0 80 0 227 0 +2 1108 227 0 0 3.14159265358979 +0 + +0101000 ++6529 0 -6528 0 * +Ed + 1e-07 1 1 0 +1 449 0 -6 6 +2 1109 80 0 -6 6 +2 1110 82 0 -6 6 +4 CN 80 0 82 0 +0 + +0101000 ++6528 0 -5239 0 * +Ed + 1e-07 1 1 0 +1 450 0 3.14159265358979 6.28318530717959 +2 1111 82 0 3.14159265358979 6.28318530717959 +4 C0 82 0 227 0 +2 1112 227 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++6528 0 -6529 0 * +Ed + 1.00000952869335e-07 1 1 0 +1 451 0 3.14159265358979 5.21238898038482 +2 1113 228 0 3.14159265358979 5.21238898038482 +4 C0 227 0 228 0 +2 1114 227 0 3.14159265358979 5.21238898038482 +2 1115 229 187 3.14159265358979 5.21238898038482 +0 + +0101000 ++6527 0 -6526 188 * +Ed + 1.00000312638804e-07 1 1 0 +1 451 0 5.21238898038482 6.28318530717959 +2 1113 228 0 5.21238898038482 6.28318530717959 +4 C0 227 0 228 0 +2 1114 227 0 5.21238898038482 6.28318530717959 +2 1116 230 187 5.21238898038482 6.28318530717959 +0 + +0101000 ++6526 188 -6525 0 * +Ed + 1.00000987117516e-07 1 1 0 +1 452 0 0 2.07079632679502 +2 1117 231 0 0 2.07079632679502 +4 C0 227 0 231 0 +2 1118 227 0 0 2.07079632679502 +2 1119 230 187 0 2.07079632679502 +0 + +0101000 ++6525 0 -6524 188 * +Ed + 1.00001297475161e-07 1 1 0 +1 452 0 2.07079632679502 3.14159265358979 +2 1117 231 0 2.07079632679502 3.14159265358979 +4 C0 227 0 231 0 +2 1118 227 0 2.07079632679502 3.14159265358979 +2 1120 229 187 2.07079632679502 3.14159265358979 +0 + +0101000 ++6524 188 -6527 0 * +Ed + 1.00001323670747e-07 1 1 0 +1 453 0 -1.41000000001 0.18999999999 +2 1121 228 0 -1.41000000001 0.18999999999 +2 1122 231 0 -1.41000000001 0.18999999999 +4 CN 228 0 231 0 +2 1123 229 189 -1.41000000001 0.18999999999 +2 1124 229 187 -1.41000000001 0.18999999999 +0 + +0101000 ++6527 0 -6523 0 * +Ed + 1.00001311408595e-07 1 1 0 +1 454 0 3.14159265358979 5.2123889803848 +2 1125 228 0 3.14159265358979 5.2123889803848 +4 C0 228 0 232 0 +2 1126 232 0 3.14159265358979 5.2123889803848 +2 1127 229 187 3.14159265358979 5.2123889803848 +2 1128 147 187 3.14159265358979 5.2123889803848 +0 + +0101000 ++6523 0 -6522 187 * +Ed + 1.00012492238535e-07 1 1 0 +1 455 0 -0.050000000001459 1.55 +2 1129 229 0 -0.050000000001459 1.55 +2 1130 230 0 -0.050000000001459 1.55 +4 CN 229 0 230 0 +2 1131 228 190 -0.050000000001459 1.55 +0 + +0101000 ++6526 191 -6522 0 * +Ed + 1.00001355033128e-07 1 1 0 +1 454 0 5.2123889803848 6.28318530717959 +2 1125 228 0 5.2123889803848 6.28318530717959 +4 C0 228 0 232 0 +2 1126 232 0 5.2123889803848 6.28318530717959 +2 1132 230 187 5.2123889803848 6.28318530717959 +2 1133 147 187 5.2123889803848 6.28318530717959 +0 + +0101000 ++6522 187 -6521 0 * +Ed + 1.00001330670319e-07 1 1 0 +1 456 0 -1.41000000001 0.18999999999 +2 1134 228 0 -1.41000000001 0.18999999999 +2 1135 231 0 -1.41000000001 0.18999999999 +4 CN 228 0 231 0 +2 1136 230 189 -1.41000000001 0.18999999999 +2 1137 230 187 -1.41000000001 0.18999999999 +0 + +0101000 ++6525 0 -6521 0 * +Ed + 1.00001292562975e-07 1 1 0 +1 457 0 0 2.07079632679496 +2 1138 231 0 0 2.07079632679496 +4 C0 231 0 232 0 +2 1139 232 0 0 2.07079632679496 +2 1140 230 187 0 2.07079632679496 +2 1141 147 187 0 2.07079632679496 +0 + +0101000 ++6521 0 -6520 187 * +Ed + 1.00013415076959e-07 1 1 0 +1 458 0 -0.0500000000001795 1.55 +2 1142 229 0 -0.0500000000001795 1.55 +2 1143 230 0 -0.0500000000001795 1.55 +4 CN 229 0 230 0 +2 1144 231 190 -0.0500000000001795 1.55 +0 + +0101000 ++6524 191 -6520 0 * +Ed + 1.00001330670319e-07 1 1 0 +1 457 0 2.07079632679496 3.14159265358979 +2 1138 231 0 2.07079632679496 3.14159265358979 +4 C0 231 0 232 0 +2 1139 232 0 2.07079632679496 3.14159265358979 +2 1145 229 187 2.07079632679496 3.14159265358979 +2 1146 147 187 2.07079632679496 3.14159265358979 +0 + +0101000 ++6520 187 -6523 0 * +Ed + 1.00001423995717e-07 1 1 0 +1 459 0 0 3.14159265358979 +2 1147 233 0 0 3.14159265358979 +4 C0 232 0 233 0 +2 1148 232 0 0 3.14159265358979 +2 1149 147 189 0 3.14159265358979 +2 1150 147 187 0 3.14159265358979 +0 + +0101000 ++6519 0 -6518 0 * +Ed + 1.00001412032745e-07 1 1 0 +1 460 0 3.14159265358979 6.28318530717959 +2 1151 234 0 3.14159265358979 6.28318530717959 +4 C0 232 0 234 0 +2 1152 232 0 3.14159265358979 6.28318530717959 +2 1153 147 189 3.14159265358979 6.28318530717959 +2 1154 147 187 3.14159265358979 6.28318530717959 +0 + +0101000 ++6518 0 -6519 0 * +Ed + 1e-07 1 1 0 +1 412 0 -1.4 -1.20000000000016 +2 999 84 0 -1.4 -1.20000000000016 +2 1000 83 0 -1.4 -1.20000000000016 +4 CN 84 0 83 0 +0 + +0101000 ++6643 0 -6562 176 * +Ed + 1e-07 1 1 0 +1 408 0 -1.4 -1.20000000000015 +2 984 84 0 -1.4 -1.20000000000015 +2 985 83 0 -1.4 -1.20000000000015 +4 CN 84 0 83 0 +0 + +0101000 ++6642 0 -6560 176 * +Ed + 1e-07 1 1 0 +1 412 0 5.8 6 +2 999 84 0 5.8 6 +2 1000 83 0 5.8 6 +4 CN 84 0 83 0 +0 + +0101000 ++6556 176 -5237 0 * +Ed + 1e-07 1 1 0 +1 408 0 5.8 6 +2 984 84 0 5.8 6 +2 985 83 0 5.8 6 +4 CN 84 0 83 0 +0 + +0101000 ++6559 176 -5238 0 * +Ed + 1e-07 1 1 0 +1 461 0 3.14159265358979 6.28318530717959 +2 1155 234 0 3.14159265358979 6.28318530717959 +4 C0 234 0 153 0 +2 1156 153 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++6517 0 -6516 0 * +Ed + 1e-07 1 1 0 +1 462 0 -1.5 1.5 +2 1157 234 0 -1.5 1.5 +2 1158 233 0 -1.5 1.5 +4 CN 234 0 233 0 +0 + +0101000 ++6516 0 -6518 0 * +Ed + 1e-07 1 1 0 +1 463 0 -1.5 1.5 +2 1159 234 0 -1.5 1.5 +2 1160 233 0 -1.5 1.5 +4 CN 234 0 233 0 +0 + +0101000 ++6517 0 -6519 0 * +Ed + 1e-07 1 1 0 +1 464 0 0 3.14159265358979 +2 1161 233 0 0 3.14159265358979 +4 C0 233 0 153 0 +2 1162 153 0 0 3.14159265358979 +0 + +0101000 ++6516 0 -6517 0 * +Ed + 1.00001036613425e-07 1 1 0 +1 451 0 3.14159265358979 5.21238898038481 +2 1113 228 0 3.14159265358979 5.21238898038481 +4 C0 227 0 228 0 +2 1114 227 0 3.14159265358979 5.21238898038481 +2 1163 229 189 3.14159265358979 5.21238898038481 +0 + +0101000 ++6527 0 -6515 192 * +Ed + 1.00001297475161e-07 1 1 0 +1 451 0 5.21238898038481 6.28318530717959 +2 1113 228 0 5.21238898038481 6.28318530717959 +4 C0 227 0 228 0 +2 1114 227 0 5.21238898038481 6.28318530717959 +2 1164 230 189 5.21238898038481 6.28318530717959 +0 + +0101000 ++6515 192 -6525 0 * +Ed + 1.00001050546506e-07 1 1 0 +1 452 0 0 2.07079632679501 +2 1117 231 0 0 2.07079632679501 +4 C0 227 0 231 0 +2 1118 227 0 0 2.07079632679501 +2 1165 230 189 0 2.07079632679501 +0 + +0101000 ++6525 0 -6514 192 * +Ed + 1.00000971340767e-07 1 1 0 +1 452 0 2.07079632679501 3.14159265358979 +2 1117 231 0 2.07079632679501 3.14159265358979 +4 C0 227 0 231 0 +2 1118 227 0 2.07079632679501 3.14159265358979 +2 1166 229 189 2.07079632679501 3.14159265358979 +0 + +0101000 ++6514 192 -6527 0 * +Ed + 1.00002072252543e-07 1 1 0 +1 454 0 3.14159265358979 5.21238898038476 +2 1125 228 0 3.14159265358979 5.21238898038476 +4 C0 228 0 232 0 +2 1126 232 0 3.14159265358979 5.21238898038476 +2 1167 229 189 3.14159265358979 5.21238898038476 +2 1168 147 189 3.14159265358979 5.21238898038476 +0 + +0101000 ++6523 0 -6522 189 * +Ed + 1.00013635816802e-07 1 1 0 +1 455 0 -0.0499999999996953 1.55 +2 1129 229 0 -0.0499999999996953 1.55 +2 1130 230 0 -0.0499999999996953 1.55 +4 CN 229 0 230 0 +2 1169 228 193 -0.0499999999996953 1.55 +0 + +0101000 ++6515 194 -6522 0 * +Ed + 1.0000140054444e-07 1 1 0 +1 454 0 5.21238898038476 6.28318530717959 +2 1125 228 0 5.21238898038476 6.28318530717959 +4 C0 228 0 232 0 +2 1126 232 0 5.21238898038476 6.28318530717959 +2 1170 230 189 5.21238898038476 6.28318530717959 +2 1171 147 189 5.21238898038476 6.28318530717959 +0 + +0101000 ++6522 189 -6521 0 * +Ed + 1.00001379038797e-07 1 1 0 +1 457 0 0 2.07079632679499 +2 1138 231 0 0 2.07079632679499 +4 C0 231 0 232 0 +2 1139 232 0 0 2.07079632679499 +2 1172 230 189 0 2.07079632679499 +2 1173 147 189 0 2.07079632679499 +0 + +0101000 ++6521 0 -6520 189 * +Ed + 1.000125741253e-07 1 1 0 +1 458 0 -0.0500000000000078 1.55 +2 1142 229 0 -0.0500000000000078 1.55 +2 1143 230 0 -0.0500000000000078 1.55 +4 CN 229 0 230 0 +2 1174 231 193 -0.0500000000000078 1.55 +0 + +0101000 ++6514 194 -6520 0 * +Ed + 1.00002062092466e-07 1 1 0 +1 457 0 2.07079632679499 3.14159265358979 +2 1138 231 0 2.07079632679499 3.14159265358979 +4 C0 231 0 232 0 +2 1139 232 0 2.07079632679499 3.14159265358979 +2 1175 229 189 2.07079632679499 3.14159265358979 +2 1176 147 189 2.07079632679499 3.14159265358979 +0 + +0101000 ++6520 189 -6523 0 * +Ed + 1e-07 1 1 0 +1 412 0 -1.4 -1.20000000000016 +2 999 84 0 -1.4 -1.20000000000016 +2 1000 83 0 -1.4 -1.20000000000016 +4 CN 84 0 83 0 +0 + +0101000 ++6643 0 -6555 180 * +Ed + 1e-07 1 1 0 +1 408 0 -1.4 -1.20000000000015 +2 984 84 0 -1.4 -1.20000000000015 +2 985 83 0 -1.4 -1.20000000000015 +4 CN 84 0 83 0 +0 + +0101000 ++6642 0 -6554 180 * +Ed + 1e-07 1 1 0 +1 412 0 5.8 6 +2 999 84 0 5.8 6 +2 1000 83 0 5.8 6 +4 CN 84 0 83 0 +0 + +0101000 ++6552 180 -5237 0 * +Ed + 1e-07 1 1 0 +1 408 0 5.8 6 +2 984 84 0 5.8 6 +2 985 83 0 5.8 6 +4 CN 84 0 83 0 +0 + +0101000 ++6553 180 -5238 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 465 0 2.07079632679499 5.21238898038479 +2 1177 229 0 2.07079632679499 5.21238898038479 +4 C0 229 0 235 0 +2 1178 235 0 2.07079632679499 5.21238898038479 +2 1179 236 195 2.07079632679499 5.21238898038479 +2 1180 236 196 2.07079632679499 5.21238898038479 +0 + +0101000 ++6513 0 -6512 0 * +Ed + 1e-07 1 1 0 +1 458 0 -1.55 -0.0500000000001795 +2 1142 229 0 -1.55 -0.0500000000001795 +2 1143 230 0 -1.55 -0.0500000000001795 +4 CN 229 0 230 0 +0 + +0101000 ++6513 0 -6524 191 * +Ed + 1e-07 1 1 0 +1 455 0 -1.55 -0.050000000001459 +2 1129 229 0 -1.55 -0.050000000001459 +2 1130 230 0 -1.55 -0.050000000001459 +4 CN 229 0 230 0 +0 + +0101000 ++6512 0 -6526 191 * +Ed + 1.00000003552714e-07 1 1 0 +1 466 0 5.21238898038479 8.35398163397458 +2 1181 230 0 5.21238898038479 8.35398163397458 +4 C0 230 0 235 0 +2 1182 235 0 5.21238898038479 8.35398163397458 +2 1183 236 195 5.21238898038479 8.35398163397458 +2 1184 236 196 5.21238898038479 8.35398163397458 +0 + +0101000 ++6512 0 -6513 0 * +Ed + 1.00000010658141e-07 1 1 0 +1 467 0 3.14159265358979 6.28318530717959 +2 1185 237 0 3.14159265358979 6.28318530717959 +4 G1 236 0 237 0 +2 1186 236 0 3.14159265358979 6.28318530717959 +2 1187 235 197 3.14159265358979 6.28318530717959 +0 + +0101000 ++6511 0 -6510 0 * +Ed + 1.00000010658141e-07 1 1 0 +1 468 0 0 3.14159265358979 +2 1188 238 0 0 3.14159265358979 +4 G1 236 0 238 0 +2 1189 236 0 0 3.14159265358979 +2 1190 235 197 0 3.14159265358979 +0 + +0101000 ++6510 0 -6511 0 * +Ed + 1e-07 1 1 0 +1 469 0 5.2123889803847 8.3539816339745 +2 1191 239 0 5.2123889803847 8.3539816339745 +4 G1 235 0 239 0 +2 1192 235 0 5.2123889803847 8.3539816339745 +0 + +0101000 ++6509 0 -6508 0 * +Ed + 1e-07 1 1 0 +1 470 0 2.07079632679491 5.2123889803847 +2 1193 240 0 2.07079632679491 5.2123889803847 +4 G1 235 0 240 0 +2 1194 235 0 2.07079632679491 5.2123889803847 +0 + +0101000 ++6508 0 -6509 0 * +Ed + 1e-07 1 1 0 +1 471 0 3.14159265358979 4.71238898038469 +2 1195 239 0 3.14159265358979 4.71238898038469 +2 1196 240 0 3.14159265358979 4.71238898038469 +4 CN 239 0 240 0 +0 + +0101000 ++6507 0 -6509 0 * +Ed + 1e-07 1 1 0 +1 472 0 5.21238898038473 8.35398163397453 +2 1197 239 0 5.21238898038473 8.35398163397453 +2 1198 241 0 5.21238898038473 8.35398163397453 +4 G1 239 0 241 0 +0 + +0101000 ++6507 0 -6506 0 * +Ed + 1e-07 1 1 0 +1 473 0 3.14159265358979 4.71238898038469 +2 1199 239 0 3.14159265358979 4.71238898038469 +2 1200 240 0 3.14159265358979 4.71238898038469 +4 CN 239 0 240 0 +0 + +0101000 ++6506 0 -6508 0 * +Ed + 1e-07 1 1 0 +1 474 0 2.07079632679494 5.21238898038473 +2 1201 240 0 2.07079632679494 5.21238898038473 +2 1202 242 0 2.07079632679494 5.21238898038473 +4 G1 240 0 242 0 +0 + +0101000 ++6506 0 -6507 0 * +Ed + 1e-07 1 1 0 +1 475 0 -0.95 1.25 +2 1203 242 0 -0.95 1.25 +2 1204 241 0 -0.95 1.25 +4 CN 242 0 241 0 +0 + +0101000 ++6506 0 -6505 0 * +Ed + 1e-07 1 1 0 +1 476 0 -0.95 1.25 +2 1205 242 0 -0.95 1.25 +2 1206 241 0 -0.95 1.25 +4 CN 242 0 241 0 +0 + +0101000 ++6507 0 -6504 0 * +Ed + 1e-07 1 1 0 +1 477 0 2.07079632679494 5.21238898038473 +2 1207 242 0 2.07079632679494 5.21238898038473 +2 1208 163 0 2.07079632679494 5.21238898038473 +4 G1 242 0 163 0 +0 + +0101000 ++6505 0 -6504 0 * +Ed + 1e-07 1 1 0 +1 478 0 5.21238898038473 8.35398163397453 +2 1209 241 0 5.21238898038473 8.35398163397453 +2 1210 164 0 5.21238898038473 8.35398163397453 +4 G1 241 0 164 0 +0 + +0101000 ++6504 0 -6505 0 * +Ed + 1e-07 1 1 0 +1 479 0 1.5707963267949 3.14159265358979 +2 1211 164 0 1.5707963267949 3.14159265358979 +2 1212 163 0 1.5707963267949 3.14159265358979 +4 G2 164 0 163 0 +0 + +0101000 ++6632 0 -6504 0 * +Ed + 1e-07 1 1 0 +1 480 0 1.5707963267949 3.14159265358979 +2 1213 164 0 1.5707963267949 3.14159265358979 +2 1214 163 0 1.5707963267949 3.14159265358979 +4 G2 164 0 163 0 +0 + +0101000 ++6633 0 -6505 0 * +Ed + 1e-07 1 1 0 +1 458 0 -1.55 -0.0500000000000078 +2 1142 229 0 -1.55 -0.0500000000000078 +2 1143 230 0 -1.55 -0.0500000000000078 +4 CN 229 0 230 0 +0 + +0101000 ++6513 0 -6514 194 * +Ed + 1e-07 1 1 0 +1 455 0 -1.55 -0.0499999999996953 +2 1129 229 0 -1.55 -0.0499999999996953 +2 1130 230 0 -1.55 -0.0499999999996953 +4 CN 229 0 230 0 +0 + +0101000 ++6512 0 -6515 194 * +Ed + 1.00000010658141e-07 1 1 0 +1 481 0 0 3.14159265358979 +2 1215 243 0 0 3.14159265358979 +4 G1 243 0 236 0 +2 1216 236 0 0 3.14159265358979 +2 1217 235 198 0 3.14159265358979 +0 + +0101000 ++6503 0 -6502 0 * +Ed + 1.00000010658141e-07 1 1 0 +1 482 0 3.14159265358979 6.28318530717959 +2 1218 244 0 3.14159265358979 6.28318530717959 +4 G1 244 0 236 0 +2 1219 236 0 3.14159265358979 6.28318530717959 +2 1220 235 198 3.14159265358979 6.28318530717959 +0 + +0101000 ++6502 0 -6503 0 * +Ed + 1e-07 1 1 0 +1 483 0 3.64159265359001 6.7831853071798 +2 1221 245 0 3.64159265359001 6.7831853071798 +4 C0 246 0 245 0 +2 1222 246 0 3.64159265359001 6.7831853071798 +0 + +0101000 ++6501 0 -6500 0 * +Ed + 1e-07 1 1 0 +1 484 0 0.500000000000212 3.64159265359001 +2 1223 247 0 0.500000000000212 3.64159265359001 +4 C0 246 0 247 0 +2 1224 246 0 0.500000000000212 3.64159265359001 +0 + +0101000 ++6500 0 -6501 0 * +Ed + 1e-07 1 1 0 +1 485 0 5.21238898038492 8.35398163397253 +2 1225 248 0 5.21238898038492 8.35398163397253 +4 C0 246 0 248 0 +2 1226 246 0 5.21238898038492 8.35398163397253 +0 + +0101000 ++6499 0 -6498 0 * +Ed + 1e-07 1 1 0 +1 486 0 2.07079632679295 5.21238898038492 +2 1227 249 0 2.07079632679295 5.21238898038492 +4 C0 246 0 249 0 +2 1228 246 0 2.07079632679295 5.21238898038492 +0 + +0101000 ++6498 0 -6499 0 * +Ed + 9.66590793534902e-05 1 1 0 +1 487 0 24.7561936605 49.5123873211 +2 1229 250 0 24.7561936605 49.5123873211 +4 C0 251 0 250 0 +2 1230 251 0 24.7561936605 49.5123873211 +0 + +0101000 ++6497 0 -6496 0 * +Ed + 1e-07 1 1 0 +1 488 0 24.6774806607 24.7561936604995 +2 1231 252 0 24.6774806607 24.7561936604995 +4 C0 251 0 252 0 +2 1232 251 0 24.6774806607 24.7561936604995 +0 + +0101000 ++6495 0 -6497 0 * +Ed + 1e-07 1 1 0 +1 489 0 0 24.6774806607 +2 1233 252 0 0 24.6774806607 +4 C0 251 0 252 0 +2 1234 251 0 0 24.6774806607 +0 + +0101000 ++6494 0 -6495 0 * +Ed + 1e-07 1 1 0 +1 490 0 0.000248410300005524 109 +4 C0 251 0 253 0 +2 1235 251 0 0.000248410300005524 109 +0 + +0101000 ++6493 0 -6494 0 * +Ed + 0.000102894900285201 1 1 0 +1 491 0 0 52.7067348902 +2 1236 254 0 0 52.7067348902 +4 C0 251 0 254 0 +2 1237 251 0 0 52.7067348902 +0 + +0101000 ++6492 0 -6493 0 * +Ed + 1e-07 1 1 0 +1 492 0 -5.00074082596 5.00074082596 +4 C0 251 0 255 0 +2 1238 251 0 -5.00074082596 5.00074082596 +0 + +0101000 ++6491 0 -6492 0 * +Ed + 9.45558587697886e-05 1 1 0 +1 493 0 0 28.8341676536 +2 1239 256 0 0 28.8341676536 +4 C0 251 0 256 0 +2 1240 251 0 0 28.8341676536 +0 + +0101000 ++6490 0 -6491 0 * +Ed + 1e-07 1 1 0 +1 494 0 0 29.0201402464 +4 C0 251 0 257 0 +2 1241 251 0 0 29.0201402464 +2 1242 257 0 0 29.0201402464 +0 + +0101000 ++6489 0 -6490 0 * +Ed + 0.000236848210102444 1 1 0 +1 495 0 17.9076813233117 43.7108017886 +2 1243 258 0 17.9076813233117 43.7108017886 +4 C0 251 0 258 0 +2 1244 251 0 17.9076813233117 43.7108017886 +0 + +0101000 ++6488 0 -6489 0 * +Ed + 1e-07 1 1 0 +1 496 0 0 17.9076813233 +2 1245 259 0 0 17.9076813233 +4 C0 251 0 259 0 +2 1246 251 0 0 17.9076813233 +0 + +0101000 ++6487 0 -6488 0 * +Ed + 1e-07 1 1 0 +1 497 0 0 34.8 +4 C0 251 0 260 0 +2 1247 251 0 0 34.8 +0 + +0101000 ++6486 0 -6487 0 * +Ed + 1e-07 1 1 0 +1 498 0 0 91.0389057194 +2 1248 261 0 0 91.0389057194 +4 C0 251 0 261 0 +2 1249 251 0 0 91.0389057194 +0 + +0101000 ++6485 0 -6486 0 * +Ed + 1e-07 1 1 0 +1 499 0 -1 1 +4 C0 251 0 262 0 +2 1250 251 0 -1 1 +0 + +0101000 ++6496 0 -6485 0 * +Ed + 1e-07 1 1 0 +1 500 0 -1 1 +4 C0 251 0 263 0 +2 1251 251 0 -1 1 +0 + +0101000 ++6484 0 -6483 0 * +Ed + 1e-07 1 1 0 +1 501 0 1.5707963267949 3.14159265358979 +2 1252 264 0 1.5707963267949 3.14159265358979 +4 C0 251 0 264 0 +2 1253 251 0 1.5707963267949 3.14159265358979 +0 + +0101000 ++6482 0 -6484 0 * +Ed + 1e-07 1 1 0 +1 502 0 -17.4 17.4 +4 C0 251 0 265 0 +2 1254 251 0 -17.4 17.4 +0 + +0101000 ++6482 0 -6481 0 * +Ed + 1e-07 1 1 0 +1 503 0 1.08210413623606 1.5707963267949 +2 1255 266 0 1.08210413623606 1.5707963267949 +4 C0 251 0 266 0 +2 1256 251 0 1.08210413623606 1.5707963267949 +0 + +0101000 ++6480 0 -6481 0 * +Ed + 1e-07 1 1 0 +1 504 0 -14.5100701232189 14.510070123172 +4 C0 251 0 267 0 +2 1257 251 0 -14.5100701232189 14.510070123172 +2 1258 267 0 -14.5100701232189 14.510070123172 +0 + +0101000 ++6480 0 -6479 0 * +Ed + 1e-07 1 1 0 +1 505 0 6.28318257972667 7.36529079162158 +2 1259 268 0 6.28318257972667 7.36529079162158 +4 C0 251 0 268 0 +2 1260 251 0 6.28318257972667 7.36529079162158 +0 + +0101000 ++6478 0 -6479 0 * +Ed + 1e-07 1 1 0 +1 506 0 -5.00074355342 5.00074355341 +4 C0 251 0 269 0 +2 1261 251 0 -5.00074355342 5.00074355341 +0 + +0101000 ++6478 0 -6477 0 * +Ed + 1e-07 1 1 0 +1 507 0 4.71238898038469 6.28318530717959 +2 1262 270 0 4.71238898038469 6.28318530717959 +4 C0 251 0 270 0 +2 1263 251 0 4.71238898038469 6.28318530717959 +0 + +0101000 ++6476 0 -6477 0 * +Ed + 1e-07 1 1 0 +1 508 0 -54.5 54.5 +4 C0 251 0 271 0 +2 1264 251 0 -54.5 54.5 +0 + +0101000 ++6475 0 -6476 0 * +Ed + 1e-07 1 1 0 +1 509 0 3.14159265358979 4.71238898038469 +2 1265 272 0 3.14159265358979 4.71238898038469 +4 C0 251 0 272 0 +2 1266 251 0 3.14159265358979 4.71238898038469 +0 + +0101000 ++6483 0 -6475 0 * +Ed + 1e-07 1 1 0 +1 510 0 5.21238898038437 8.35398163397416 +2 1267 273 0 5.21238898038437 8.35398163397416 +4 C0 220 0 273 0 +2 1268 220 0 5.21238898038437 8.35398163397416 +0 + +0101000 ++6474 0 -6473 0 * +Ed + 1e-07 1 1 0 +1 511 0 2.07079632679458 5.21238898038437 +2 1269 274 0 2.07079632679458 5.21238898038437 +4 C0 220 0 274 0 +2 1270 220 0 2.07079632679458 5.21238898038437 +0 + +0101000 ++6473 0 -6474 0 * +Ed + 1e-07 1 1 0 +1 512 0 0.25 12.15 +2 1271 249 0 0.25 12.15 +2 1272 248 0 0.25 12.15 +4 CN 249 0 248 0 +0 + +0101000 ++6498 0 -6472 0 * +Ed + 1e-07 1 1 0 +1 513 0 0.25 12.15 +2 1273 249 0 0.25 12.15 +2 1274 248 0 0.25 12.15 +4 CN 249 0 248 0 +0 + +0101000 ++6499 0 -6471 0 * +Ed + 1e-07 1 1 0 +1 514 0 2.07079632679295 5.21238898038492 +2 1275 249 0 2.07079632679295 5.21238898038492 +2 1276 224 0 2.07079632679295 5.21238898038492 +4 G1 249 0 224 0 +0 + +0101000 ++6472 0 -6471 0 * +Ed + 1e-07 1 1 0 +1 515 0 5.21238898038492 8.35398163397253 +2 1277 248 0 5.21238898038492 8.35398163397253 +2 1278 222 0 5.21238898038492 8.35398163397253 +4 G1 248 0 222 0 +0 + +0101000 ++6471 0 -6472 0 * +Ed + 1e-07 1 1 0 +1 516 0 1.5707963267949 3.14159265358979 +2 1279 224 0 1.5707963267949 3.14159265358979 +2 1280 222 0 1.5707963267949 3.14159265358979 +4 G2 224 0 222 0 +0 + +0101000 ++6534 199 -6472 0 * +Ed + 1e-07 1 1 0 +1 517 0 1.5707963267949 3.14159265358979 +2 1281 224 0 1.5707963267949 3.14159265358979 +2 1282 222 0 1.5707963267949 3.14159265358979 +4 G2 224 0 222 0 +0 + +0101000 ++6535 199 -6471 0 * +Ed + 1e-07 1 1 0 +1 518 0 3.14159265358979 4.71238898038469 +2 1283 243 0 3.14159265358979 4.71238898038469 +2 1284 244 0 3.14159265358979 4.71238898038469 +4 CN 243 0 244 0 +0 + +0101000 ++6503 0 -6470 0 * +Ed + 1e-07 1 1 0 +1 519 0 4.71238898038469 6.28318530717959 +2 1285 243 0 4.71238898038469 6.28318530717959 +2 1286 244 0 4.71238898038469 6.28318530717959 +4 CN 243 0 244 0 +0 + +0101000 ++6502 0 -6469 0 * +Ed + 1e-07 1 1 0 +1 520 0 0 3.14159265358979 +2 1287 243 0 0 3.14159265358979 +2 1288 275 0 0 3.14159265358979 +4 G1 243 0 275 0 +0 + +0101000 ++6470 0 -6469 0 * +Ed + 1e-07 1 1 0 +1 521 0 3.14159265358979 6.28318530717959 +2 1289 244 0 3.14159265358979 6.28318530717959 +2 1290 276 0 3.14159265358979 6.28318530717959 +4 G1 244 0 276 0 +0 + +0101000 ++6469 0 -6470 0 * +Ed + 1e-07 1 1 0 +1 522 0 3.14159265358979 6.28318530717959 +2 1291 277 0 3.14159265358979 6.28318530717959 +4 C0 236 0 277 0 +2 1292 236 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++6468 0 -6467 0 * +Ed + 1e-07 1 1 0 +1 523 0 -21 21 +4 C0 236 0 278 0 +2 1293 236 0 -21 21 +0 + +0101000 ++6466 0 -6468 0 * +Ed + 1e-07 1 1 0 +1 524 0 -21 21 +4 C0 236 0 279 0 +2 1294 236 0 -21 21 +0 + +0101000 ++6467 0 -6465 0 * +Ed + 1e-07 1 1 0 +1 525 0 0 3.14159265358979 +2 1295 280 0 0 3.14159265358979 +4 C0 236 0 280 0 +2 1296 236 0 0 3.14159265358979 +0 + +0101000 ++6465 0 -6466 0 * +Ed + 1e-07 1 1 0 +1 526 0 3.14159265358979 4.71238898038469 +2 1297 238 0 3.14159265358979 4.71238898038469 +2 1298 237 0 3.14159265358979 4.71238898038469 +4 CN 238 0 237 0 +0 + +0101000 ++6510 0 -6464 0 * +Ed + 1e-07 1 1 0 +1 527 0 4.71238898038469 6.28318530717959 +2 1299 238 0 4.71238898038469 6.28318530717959 +2 1300 237 0 4.71238898038469 6.28318530717959 +4 CN 238 0 237 0 +0 + +0101000 ++6511 0 -6463 0 * +Ed + 1e-07 1 1 0 +1 528 0 0 3.14159265358979 +2 1301 238 0 0 3.14159265358979 +2 1302 281 0 0 3.14159265358979 +4 G1 238 0 281 0 +0 + +0101000 ++6464 0 -6463 0 * +Ed + 1e-07 1 1 0 +1 529 0 3.14159265358979 6.28318530717959 +2 1303 237 0 3.14159265358979 6.28318530717959 +2 1304 282 0 3.14159265358979 6.28318530717959 +4 G1 237 0 282 0 +0 + +0101000 ++6463 0 -6464 0 * +Ed + 1e-07 1 1 0 +1 530 0 4.71238898038469 6.28318530717959 +2 1305 283 0 4.71238898038469 6.28318530717959 +2 1306 284 0 4.71238898038469 6.28318530717959 +4 CN 283 0 284 0 +0 + +0101000 ++6462 0 -6461 0 * +Ed + 1e-07 1 1 0 +1 531 0 2.07079632679424 5.21238898038404 +2 1307 283 0 2.07079632679424 5.21238898038404 +2 1308 285 0 2.07079632679424 5.21238898038404 +4 G1 283 0 285 0 +0 + +0101000 ++6460 0 -6461 0 * +Ed + 1e-07 1 1 0 +1 532 0 4.71238898038469 6.28318530717959 +2 1309 283 0 4.71238898038469 6.28318530717959 +2 1310 284 0 4.71238898038469 6.28318530717959 +4 CN 283 0 284 0 +0 + +0101000 ++6459 0 -6460 0 * +Ed + 1e-07 1 1 0 +1 533 0 2.07079632679543 5.21238898038522 +2 1311 283 0 2.07079632679543 5.21238898038522 +2 1312 286 0 2.07079632679543 5.21238898038522 +4 CN 283 0 286 0 +0 + +0101000 ++6459 0 -6462 0 * +Ed + 1e-07 1 1 0 +1 534 0 5.21238898038404 8.35398163397383 +2 1313 284 0 5.21238898038404 8.35398163397383 +2 1314 287 0 5.21238898038404 8.35398163397383 +4 G1 284 0 287 0 +0 + +0101000 ++6461 0 -6460 0 * +Ed + 1e-07 1 1 0 +1 535 0 5.21238898038522 8.35398163397501 +2 1315 284 0 5.21238898038522 8.35398163397501 +2 1316 288 0 5.21238898038522 8.35398163397501 +4 CN 284 0 288 0 +0 + +0101000 ++6462 0 -6459 0 * +Ed + 1e-07 1 1 0 +1 536 0 0.150000000000002 0.350000000000001 +2 1317 274 0 0.150000000000002 0.350000000000001 +2 1318 273 0 0.150000000000002 0.350000000000001 +4 CN 274 0 273 0 +0 + +0101000 ++6458 0 -6474 0 * +Ed + 1e-07 1 1 0 +1 537 0 0.150000000000002 0.350000000000001 +2 1319 274 0 0.150000000000002 0.350000000000001 +2 1320 273 0 0.150000000000002 0.350000000000001 +4 CN 274 0 273 0 +0 + +0101000 ++6457 0 -6473 0 * +Ed + 1e-07 1 1 0 +1 538 0 2.07079632679458 5.21238898038437 +2 1321 274 0 2.07079632679458 5.21238898038437 +2 1322 286 0 2.07079632679458 5.21238898038437 +4 G1 274 0 286 0 +0 + +0101000 ++6457 0 -6458 0 * +Ed + 1e-07 1 1 0 +1 539 0 5.21238898038437 8.35398163397416 +2 1323 273 0 5.21238898038437 8.35398163397416 +2 1324 288 0 5.21238898038437 8.35398163397416 +4 G1 273 0 288 0 +0 + +0101000 ++6458 0 -6457 0 * +Ed + 1e-07 1 1 0 +1 540 0 3.14159265358979 4.71238898038469 +2 1325 288 0 3.14159265358979 4.71238898038469 +2 1326 286 0 3.14159265358979 4.71238898038469 +4 CN 288 0 286 0 +0 + +0101000 ++6457 0 -6459 0 * +Ed + 1e-07 1 1 0 +1 541 0 3.14159265358979 4.71238898038469 +2 1327 288 0 3.14159265358979 4.71238898038469 +2 1328 286 0 3.14159265358979 4.71238898038469 +4 CN 288 0 286 0 +0 + +0101000 ++6458 0 -6462 0 * +Ed + 1e-07 1 1 0 +1 542 0 1.5707963267949 3.14159265358979 +2 1329 289 0 1.5707963267949 3.14159265358979 +2 1330 290 0 1.5707963267949 3.14159265358979 +4 G1 289 0 290 0 +0 + +0101000 ++6456 0 -6455 0 * +Ed + 1e-07 1 1 0 +1 543 0 -21 21 +2 1331 289 0 -21 21 +4 G1 289 0 291 0 +0 + +0101000 ++6454 0 -6456 0 * +Ed + 1e-07 1 1 0 +1 544 0 1.5707963267949 3.14159265358979 +2 1332 289 0 1.5707963267949 3.14159265358979 +2 1333 292 0 1.5707963267949 3.14159265358979 +4 G1 289 0 292 0 +0 + +0101000 ++6454 0 -6453 0 * +Ed + 1e-07 1 1 0 +1 545 0 -21 21 +2 1334 289 0 -21 21 +2 1335 293 0 -21 21 +4 CN 289 0 293 0 +0 + +0101000 ++6453 0 -6455 0 * +Ed + 1e-07 1 1 0 +1 546 0 3.14159265358979 6.28318530717959 +2 1336 292 0 3.14159265358979 6.28318530717959 +2 1337 294 0 3.14159265358979 6.28318530717959 +4 G1 292 0 294 0 +0 + +0101000 ++6452 0 -6454 0 * +Ed + 1e-07 1 1 0 +1 547 0 1.5707963267949 3.14159265358979 +2 1338 292 0 1.5707963267949 3.14159265358979 +2 1339 295 0 1.5707963267949 3.14159265358979 +4 G1 292 0 295 0 +0 + +0101000 ++6451 0 -6452 0 * +Ed + 1e-07 1 1 0 +1 548 0 3.14159265358979 6.28318530717959 +2 1340 292 0 3.14159265358979 6.28318530717959 +2 1341 296 0 3.14159265358979 6.28318530717959 +4 CN 292 0 296 0 +0 + +0101000 ++6451 0 -6453 0 * +Ed + 1e-07 1 1 0 +1 549 0 -21 21 +2 1342 295 0 -21 21 +4 G1 295 0 297 0 +0 + +0101000 ++6450 0 -6452 0 * +Ed + 1e-07 1 1 0 +1 550 0 4.71238898038469 6.28318530717959 +2 1343 295 0 4.71238898038469 6.28318530717959 +2 1344 290 0 4.71238898038469 6.28318530717959 +4 G1 295 0 290 0 +0 + +0101000 ++6450 0 -6449 0 * +Ed + 1e-07 1 1 0 +1 551 0 -21 21 +2 1345 295 0 -21 21 +2 1346 298 0 -21 21 +4 CN 295 0 298 0 +0 + +0101000 ++6449 0 -6451 0 * +Ed + 1e-07 1 1 0 +1 552 0 0 3.14159265358979 +2 1347 290 0 0 3.14159265358979 +2 1348 299 0 0 3.14159265358979 +4 G1 290 0 299 0 +0 + +0101000 ++6456 0 -6450 0 * +Ed + 1e-07 1 1 0 +1 553 0 0 3.14159265358979 +2 1349 290 0 0 3.14159265358979 +2 1350 300 0 0 3.14159265358979 +4 CN 290 0 300 0 +0 + +0101000 ++6455 0 -6449 0 * +Ed + 1e-07 1 1 0 +1 554 0 0.150000000000002 0.350000000000001 +2 1351 280 0 0.150000000000002 0.350000000000001 +4 G1 280 0 278 0 +0 + +0101000 ++6448 0 -6466 0 * +Ed + 1e-07 1 1 0 +1 555 0 0.150000000000002 0.350000000000001 +2 1352 280 0 0.150000000000002 0.350000000000001 +4 G1 280 0 279 0 +0 + +0101000 ++6447 0 -6465 0 * +Ed + 1e-07 1 1 0 +1 556 0 0 3.14159265358979 +2 1353 280 0 0 3.14159265358979 +2 1354 300 0 0 3.14159265358979 +4 G1 280 0 300 0 +0 + +0101000 ++6447 0 -6448 0 * +Ed + 1e-07 1 1 0 +1 557 0 -21 21 +2 1355 293 0 -21 21 +4 G1 279 0 293 0 +0 + +0101000 ++6446 0 -6447 0 * +Ed + 1e-07 1 1 0 +1 558 0 -0.100000000000001 0.0999999999999979 +2 1356 277 0 -0.100000000000001 0.0999999999999979 +4 G1 279 0 277 0 +0 + +0101000 ++6467 0 -6446 0 * +Ed + 1e-07 1 1 0 +1 559 0 0.150000000000002 0.350000000000001 +2 1357 277 0 0.150000000000002 0.350000000000001 +4 G1 277 0 278 0 +0 + +0101000 ++6445 0 -6468 0 * +Ed + 1e-07 1 1 0 +1 560 0 3.14159265358979 6.28318530717959 +2 1358 277 0 3.14159265358979 6.28318530717959 +2 1359 296 0 3.14159265358979 6.28318530717959 +4 G1 277 0 296 0 +0 + +0101000 ++6445 0 -6446 0 * +Ed + 1e-07 1 1 0 +1 561 0 -21 21 +2 1360 298 0 -21 21 +4 G1 278 0 298 0 +0 + +0101000 ++6448 0 -6445 0 * +Ed + 1e-07 1 1 0 +1 562 0 0 1.5707963267949 +2 1361 296 0 0 1.5707963267949 +2 1362 293 0 0 1.5707963267949 +4 G1 296 0 293 0 +0 + +0101000 ++6446 0 -6453 0 * +Ed + 1e-07 1 1 0 +1 563 0 0 1.5707963267949 +2 1363 296 0 0 1.5707963267949 +2 1364 298 0 0 1.5707963267949 +4 G1 296 0 298 0 +0 + +0101000 ++6445 0 -6451 0 * +Ed + 1e-07 1 1 0 +1 564 0 0 1.5707963267949 +2 1365 298 0 0 1.5707963267949 +2 1366 300 0 0 1.5707963267949 +4 G1 298 0 300 0 +0 + +0101000 ++6449 0 -6448 0 * +Ed + 1e-07 1 1 0 +1 565 0 0 1.5707963267949 +2 1367 300 0 0 1.5707963267949 +2 1368 293 0 0 1.5707963267949 +4 G1 300 0 293 0 +0 + +0101000 ++6447 0 -6455 0 * +Ed + 1e-07 1 1 0 +1 566 0 -10.5 -9.4999999935 +2 1369 252 0 -10.5 -9.4999999935 +4 G1 252 0 253 0 +0 + +0101000 ++6494 0 -6444 0 * +Ed + 9.66590793534902e-05 1 1 0 +1 567 0 -10.5 -9.4999999935 +2 1370 252 0 -10.5 -9.4999999935 +2 1371 250 0 -10.5 -9.4999999935 +4 G1 252 0 250 0 +0 + +0101000 ++6497 0 -6443 0 * +Ed + 0.000713251616780183 1 1 0 +1 568 0 0 34.4318543551 +2 1372 252 0 0 34.4318543551 +4 C0 252 0 301 0 +2 1373 301 0 0 34.4318543551 +0 + +0101000 ++6444 0 -6443 0 * +Ed + 1e-07 1 1 0 +1 569 0 0 3.14159265358979 +2 1374 302 0 0 3.14159265358979 +4 C0 302 0 303 0 +0 + +0101000 ++6442 0 -6441 0 * +Ed + 1e-07 1 1 0 +1 570 0 -0.600000000000001 0.600000000000001 +2 1375 302 0 -0.600000000000001 0.600000000000001 +2 1376 304 0 -0.600000000000001 0.600000000000001 +4 CN 302 0 304 0 +0 + +0101000 ++6441 0 -6440 0 * +Ed + 1e-07 1 1 0 +1 571 0 0 3.14159265358979 +2 1377 302 0 0 3.14159265358979 +4 C0 302 0 305 0 +2 1378 305 0 0 3.14159265358979 +0 + +0101000 ++6439 0 -6440 0 * +Ed + 1e-07 1 1 0 +1 572 0 -0.600000000000001 0.600000000000001 +2 1379 302 0 -0.600000000000001 0.600000000000001 +2 1380 304 0 -0.600000000000001 0.600000000000001 +4 CN 302 0 304 0 +0 + +0101000 ++6442 0 -6439 0 * +Ed + 1e-07 1 1 0 +1 573 0 3.14159265358979 6.28318530717959 +2 1381 304 0 3.14159265358979 6.28318530717959 +4 C0 304 0 303 0 +0 + +0101000 ++6441 0 -6442 0 * +Ed + 1e-07 1 1 0 +1 574 0 3.14159265358979 6.28318530717959 +2 1382 304 0 3.14159265358979 6.28318530717959 +4 C0 304 0 305 0 +2 1383 305 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++6440 0 -6439 0 * +Ed + 1e-07 1 1 0 +1 575 0 0 3.14159265358979 +2 1384 306 0 0 3.14159265358979 +4 C0 303 0 306 0 +0 + +0101000 ++6438 0 -6437 0 * +Ed + 1e-07 1 1 0 +1 576 0 3.14159265358979 6.28318530717959 +2 1385 307 0 3.14159265358979 6.28318530717959 +4 C0 303 0 307 0 +0 + +0101000 ++6437 0 -6438 0 * +Ed + 1e-07 1 1 0 +1 577 0 -6.6 6.6 +2 1386 299 0 -6.6 6.6 +4 G1 291 0 299 0 +0 + +0101000 ++6436 0 -6456 0 * +Ed + 1e-07 1 1 0 +1 578 0 -6.6 6.6 +2 1387 294 0 -6.6 6.6 +4 G1 291 0 294 0 +0 + +0101000 ++6435 0 -6454 0 * +Ed + 1e-07 1 1 0 +1 579 0 -20.99999999996 20.99999999994 +4 C0 291 0 305 0 +2 1388 305 0 -20.99999999996 20.99999999994 +0 + +0101000 ++6436 0 -6435 0 * +Ed + 1e-07 1 1 0 +1 580 0 0.789040235153626 1.5707963267949 +2 1389 308 0 0.789040235153626 1.5707963267949 +4 C0 305 0 308 0 +2 1390 305 0 0.789040235153626 1.5707963267949 +0 + +0101000 ++6434 0 -6433 0 * +Ed + 1e-07 1 1 0 +1 581 0 2.07079632679424 3.93063288873583 +2 1391 285 0 2.07079632679424 3.93063288873583 +4 C0 305 0 285 0 +2 1392 305 0 2.07079632679424 3.93063288873583 +0 + +0101000 ++6432 0 -6434 0 * +Ed + 1e-07 1 1 0 +1 582 0 2.01436513990966 2.07079632679424 +2 1393 287 0 2.01436513990966 2.07079632679424 +4 C0 305 0 287 0 +2 1394 305 0 2.01436513990966 2.07079632679424 +0 + +0101000 ++6431 0 -6432 0 * +Ed + 1e-07 1 1 0 +1 583 0 4.71238898038469 5.15595779351037 +2 1395 309 0 4.71238898038469 5.15595779351037 +4 C0 305 0 309 0 +2 1396 305 0 4.71238898038469 5.15595779351037 +0 + +0101000 ++6430 0 -6431 0 * +Ed + 1e-07 1 1 0 +1 584 0 -17.50896997293 17.50896997287 +4 C0 305 0 310 0 +2 1397 310 0 -17.50896997293 17.50896997287 +2 1398 305 0 -17.50896997293 17.50896997287 +0 + +0101000 ++6429 0 -6430 0 * +Ed + 1e-07 1 1 0 +1 585 0 3.30228330654129 4.71238898038469 +2 1399 311 0 3.30228330654129 4.71238898038469 +4 C0 305 0 311 0 +2 1400 305 0 3.30228330654129 4.71238898038469 +0 + +0101000 ++6428 0 -6429 0 * +Ed + 1e-07 1 1 0 +1 586 0 0 0.160690652952128 +2 1401 299 0 0 0.160690652952128 +4 C0 305 0 299 0 +2 1402 305 0 0 0.160690652952128 +0 + +0101000 ++6436 0 -6428 0 * +Ed + 1e-07 1 1 0 +1 587 0 6.12249465422746 6.28318530717959 +2 1403 294 0 6.12249465422746 6.28318530717959 +4 C0 305 0 294 0 +2 1404 305 0 6.12249465422746 6.28318530717959 +0 + +0101000 ++6427 0 -6435 0 * +Ed + 1e-07 1 1 0 +1 588 0 1.5707963267949 2.9809020006383 +2 1405 312 0 1.5707963267949 2.9809020006383 +4 C0 305 0 312 0 +2 1406 305 0 1.5707963267949 2.9809020006383 +0 + +0101000 ++6426 0 -6427 0 * +Ed + 1e-07 1 1 0 +1 589 0 -13.24087248687 13.24087248683 +4 C0 305 0 313 0 +2 1407 313 0 -13.24087248687 13.24087248683 +2 1408 305 0 -13.24087248687 13.24087248683 +0 + +0101000 ++6433 0 -6426 0 * +Ed + 1e-07 1 1 0 +1 590 0 -6.6 6.6 +2 1409 294 0 -6.6 6.6 +4 G1 297 0 294 0 +0 + +0101000 ++6425 0 -6452 0 * +Ed + 1e-07 1 1 0 +1 591 0 -6.6 6.6 +2 1410 299 0 -6.6 6.6 +4 G1 297 0 299 0 +0 + +0101000 ++6424 0 -6450 0 * +Ed + 1e-07 1 1 0 +1 592 0 -20.99999999975 20.99999999975 +4 C0 297 0 314 0 +0 + +0101000 ++6424 0 -6425 0 * +Ed + 1e-07 1 1 0 +1 593 0 -6.6 6.6 +2 1411 272 0 -6.6 6.6 +4 G1 271 0 272 0 +0 + +0101000 ++6475 0 -6423 0 * +Ed + 1e-07 1 1 0 +1 594 0 -6.6 6.6 +2 1412 270 0 -6.6 6.6 +4 G1 271 0 270 0 +0 + +0101000 ++6476 0 -6422 0 * +Ed + 1e-07 1 1 0 +1 595 0 -54.5 54.5 +2 1413 315 0 -54.5 54.5 +4 G1 271 0 315 0 +0 + +0101000 ++6423 0 -6422 0 * +Ed + 1e-07 1 1 0 +1 596 0 5.3 18.5 +2 1414 272 0 5.3 18.5 +4 G1 272 0 263 0 +0 + +0101000 ++6421 0 -6483 0 * +Ed + 1e-07 1 1 0 +1 597 0 3.14159265358979 4.71238898038469 +2 1415 272 0 3.14159265358979 4.71238898038469 +2 1416 316 0 3.14159265358979 4.71238898038469 +4 G1 272 0 316 0 +0 + +0101000 ++6421 0 -6423 0 * +Ed + 1e-07 1 1 0 +1 598 0 -6.2 7 +2 1417 270 0 -6.2 7 +4 G1 270 0 269 0 +0 + +0101000 ++6420 0 -6477 0 * +Ed + 1e-07 1 1 0 +1 599 0 4.71238898038469 6.28318530717959 +2 1418 270 0 4.71238898038469 6.28318530717959 +2 1419 317 0 4.71238898038469 6.28318530717959 +4 G1 270 0 317 0 +0 + +0101000 ++6422 0 -6420 0 * +Ed + 1e-07 1 1 0 +1 600 0 -6.6 6.6 +2 1420 264 0 -6.6 6.6 +4 G1 263 0 264 0 +0 + +0101000 ++6484 0 -6419 0 * +Ed + 1e-07 1 1 0 +1 601 0 -1 1 +2 1421 318 0 -1 1 +4 G1 263 0 318 0 +0 + +0101000 ++6419 0 -6421 0 * +Ed + 1e-07 1 1 0 +1 602 0 -5.00074355342 5.00074355341 +2 1422 319 0 -5.00074355342 5.00074355341 +4 G1 269 0 319 0 +0 + +0101000 ++6418 0 -6420 0 * +Ed + 1e-07 1 1 0 +1 603 0 -6.6 6.6 +2 1423 268 0 -6.6 6.6 +4 G1 269 0 268 0 +0 + +0101000 ++6478 0 -6418 0 * +Ed + 1e-07 1 1 0 +1 604 0 -6.2 7 +2 1424 268 0 -6.2 7 +4 G1 268 0 267 0 +2 1425 267 0 -6.2 7 +0 + +0101000 ++6417 0 -6479 0 * +Ed + 1e-07 1 1 0 +1 605 0 6.28318257972667 7.36529079161962 +2 1426 268 0 6.28318257972667 7.36529079161962 +2 1427 320 0 6.28318257972667 7.36529079161962 +4 G1 268 0 320 0 +0 + +0101000 ++6418 0 -6417 0 * +Ed + 1e-07 1 1 0 +1 606 0 -14.5100701232189 14.5100701232189 +2 1428 321 0 -14.5100701232189 14.5100701232189 +4 G1 267 0 321 0 +2 1429 267 0 -14.5100701232189 14.5100701232189 +0 + +0101000 ++6416 0 -6417 0 * +Ed + 1e-07 1 1 0 +1 607 0 -6.6 6.6 +2 1430 266 0 -6.6 6.6 +4 G1 267 0 266 0 +2 1431 267 0 -6.6 6.6 +0 + +0101000 ++6480 0 -6416 0 * +Ed + 1e-07 1 1 0 +1 608 0 -6.2 7 +2 1432 266 0 -6.2 7 +4 G1 266 0 265 0 +0 + +0101000 ++6415 0 -6481 0 * +Ed + 1e-07 1 1 0 +1 609 0 1.08210413623606 1.5707963267949 +2 1433 266 0 1.08210413623606 1.5707963267949 +2 1434 322 0 1.08210413623606 1.5707963267949 +4 G1 266 0 322 0 +0 + +0101000 ++6416 0 -6415 0 * +Ed + 1e-07 1 1 0 +1 610 0 -17.4 17.4 +2 1435 323 0 -17.4 17.4 +4 G1 265 0 323 0 +0 + +0101000 ++6414 0 -6415 0 * +Ed + 1e-07 1 1 0 +1 611 0 -6.6 6.6 +2 1436 264 0 -6.6 6.6 +4 G1 265 0 264 0 +0 + +0101000 ++6482 0 -6414 0 * +Ed + 1e-07 1 1 0 +1 612 0 1.5707963267949 3.14159265358979 +2 1437 264 0 1.5707963267949 3.14159265358979 +2 1438 324 0 1.5707963267949 3.14159265358979 +4 G1 264 0 324 0 +0 + +0101000 ++6414 0 -6419 0 * +Ed + 1e-07 1 1 0 +1 613 0 4.71238898038469 6.28318530717959 +2 1439 322 0 4.71238898038469 6.28318530717959 +2 1440 323 0 4.71238898038469 6.28318530717959 +4 G1 322 0 323 0 +0 + +0101000 ++6413 0 -6415 0 * +Ed + 1e-07 1 1 0 +1 614 0 4.71238898038469 6.28318530717959 +2 1441 322 0 4.71238898038469 6.28318530717959 +2 1442 321 0 4.71238898038469 6.28318530717959 +4 G1 322 0 321 0 +0 + +0101000 ++6412 0 -6416 0 * +Ed + 1e-07 1 1 0 +1 615 0 1.08210413623672 1.5707963267949 +2 1443 322 0 1.08210413623672 1.5707963267949 +4 G1 322 0 325 0 +2 1444 325 0 1.08210413623672 1.5707963267949 +0 + +0101000 ++6412 0 -6413 0 * +Ed + 2.3959515903456e-07 1 1 0 +1 616 0 4.71238898038469 6.28318530717959 +2 1445 321 0 4.71238898038469 6.28318530717959 +2 1446 320 0 4.71238898038469 6.28318530717959 +4 G1 321 0 320 0 +0 + +0101000 ++6411 0 -6417 0 * +Ed + 1e-07 1 1 0 +1 617 0 -11.1570042230844 17.8631360233948 +2 1447 321 0 -11.1570042230844 17.8631360233948 +4 G1 321 0 325 0 +2 1448 325 0 -11.1570042230844 17.8631360233948 +0 + +0101000 ++6412 0 -6411 0 * +Ed + 4.58860415643713e-07 1 1 0 +1 618 0 1.5707963267949 3.14159265358979 +2 1449 320 0 1.5707963267949 3.14159265358979 +2 1450 319 0 1.5707963267949 3.14159265358979 +4 G1 320 0 319 0 +0 + +0101000 ++6410 0 -6418 0 * +Ed + 1e-07 1 1 0 +1 619 0 6.28318257972657 7.36529083811007 +2 1451 320 0 6.28318257972657 7.36529083811007 +4 G1 320 0 325 0 +2 1452 325 0 6.28318257972657 7.36529083811007 +0 + +0101000 ++6410 0 -6411 0 * +Ed + 1e-07 1 1 0 +1 620 0 0 1.5707963267949 +2 1453 319 0 0 1.5707963267949 +2 1454 317 0 0 1.5707963267949 +4 G1 319 0 317 0 +0 + +0101000 ++6409 0 -6420 0 * +Ed + 1e-07 1 1 0 +1 621 0 1.99851071121001 12 +2 1455 319 0 1.99851071121001 12 +4 G1 319 0 325 0 +2 1456 325 0 1.99851071121001 12 +0 + +0101000 ++6410 0 -6409 0 * +Ed + 1e-07 1 1 0 +1 622 0 4.71238898038469 6.28318530717959 +2 1457 317 0 4.71238898038469 6.28318530717959 +2 1458 315 0 4.71238898038469 6.28318530717959 +4 G1 317 0 315 0 +0 + +0101000 ++6408 0 -6422 0 * +Ed + 1e-07 1 1 0 +1 623 0 4.71238898038469 6.28318530717959 +2 1459 317 0 4.71238898038469 6.28318530717959 +4 G1 317 0 325 0 +2 1460 325 0 4.71238898038469 6.28318530717959 +0 + +0101000 ++6408 0 -6409 0 * +Ed + 1e-07 1 1 0 +1 624 0 1.5707963267949 3.14159265358979 +2 1461 315 0 1.5707963267949 3.14159265358979 +2 1462 316 0 1.5707963267949 3.14159265358979 +4 G1 315 0 316 0 +0 + +0101000 ++6423 0 -6407 0 * +Ed + 1e-07 1 1 0 +1 625 0 -55.5 53.5 +2 1463 315 0 -55.5 53.5 +4 G1 315 0 325 0 +2 1464 325 0 -55.5 53.5 +0 + +0101000 ++6407 0 -6408 0 * +Ed + 1e-07 1 1 0 +1 626 0 1.5707963267949 3.14159265358979 +2 1465 316 0 1.5707963267949 3.14159265358979 +2 1466 318 0 1.5707963267949 3.14159265358979 +4 G1 316 0 318 0 +0 + +0101000 ++6406 0 -6421 0 * +Ed + 1e-07 1 1 0 +1 627 0 3.14159265358979 4.71238898038469 +2 1467 316 0 3.14159265358979 4.71238898038469 +4 G1 316 0 325 0 +2 1468 325 0 3.14159265358979 4.71238898038469 +0 + +0101000 ++6406 0 -6407 0 * +Ed + 1e-07 1 1 0 +1 628 0 4.71238898038469 6.28318530717959 +2 1469 318 0 4.71238898038469 6.28318530717959 +2 1470 324 0 4.71238898038469 6.28318530717959 +4 G1 318 0 324 0 +0 + +0101000 ++6419 0 -6405 0 * +Ed + 1e-07 1 1 0 +1 629 0 12 14 +2 1471 318 0 12 14 +4 G1 318 0 325 0 +2 1472 325 0 12 14 +0 + +0101000 ++6405 0 -6406 0 * +Ed + 1e-07 1 1 0 +1 630 0 4.71238898038469 6.28318530717959 +2 1473 324 0 4.71238898038469 6.28318530717959 +2 1474 323 0 4.71238898038469 6.28318530717959 +4 G1 324 0 323 0 +0 + +0101000 ++6404 0 -6414 0 * +Ed + 1e-07 1 1 0 +1 631 0 1.5707963267949 3.14159265358979 +2 1475 324 0 1.5707963267949 3.14159265358979 +4 G1 324 0 325 0 +2 1476 325 0 1.5707963267949 3.14159265358979 +0 + +0101000 ++6404 0 -6405 0 * +Ed + 1e-07 1 1 0 +1 632 0 -29.5 5.3 +2 1477 323 0 -29.5 5.3 +4 G1 323 0 325 0 +2 1478 325 0 -29.5 5.3 +0 + +0101000 ++6404 0 -6413 0 * +Ed + 1e-07 1 1 0 +1 633 0 -8.45 -4.35 +2 1479 311 0 -8.45 -4.35 +2 1480 299 0 -8.45 -4.35 +4 G1 311 0 299 0 +0 + +0101000 ++6403 0 -6428 0 * +Ed + 1e-07 1 1 0 +1 634 0 -8.45 -4.35 +2 1481 311 0 -8.45 -4.35 +4 G1 311 0 310 0 +2 1482 310 0 -8.45 -4.35 +0 + +0101000 ++6402 0 -6429 0 * +Ed + 1e-07 1 1 0 +1 635 0 4.71238898038469 6.12249465422809 +2 1483 311 0 4.71238898038469 6.12249465422809 +2 1484 326 0 4.71238898038469 6.12249465422809 +4 C0 311 0 326 0 +0 + +0101000 ++6402 0 -6403 0 * +Ed + 1e-07 1 1 0 +1 636 0 -8.45 -4.35 +2 1485 312 0 -8.45 -4.35 +4 G1 312 0 313 0 +2 1486 313 0 -8.45 -4.35 +0 + +0101000 ++6401 0 -6426 0 * +Ed + 1e-07 1 1 0 +1 637 0 -8.45 -4.35 +2 1487 312 0 -8.45 -4.35 +2 1488 294 0 -8.45 -4.35 +4 G1 312 0 294 0 +0 + +0101000 ++6400 0 -6427 0 * +Ed + 1e-07 1 1 0 +1 638 0 0.160690652951493 1.5707963267949 +2 1489 312 0 0.160690652951493 1.5707963267949 +2 1490 327 0 0.160690652951493 1.5707963267949 +4 C0 312 0 327 0 +0 + +0101000 ++6400 0 -6401 0 * +Ed + 1e-07 1 1 0 +1 639 0 -9.6 7.7 +2 1491 287 0 -9.6 7.7 +2 1492 285 0 -9.6 7.7 +4 CN 287 0 285 0 +0 + +0101000 ++6461 0 -6399 0 * +Ed + 1e-07 1 1 0 +1 640 0 -9.6 3.6 +2 1493 287 0 -9.6 3.6 +2 1494 285 0 -9.6 3.6 +4 CN 287 0 285 0 +0 + +0101000 ++6460 0 -6432 0 * +Ed + 1e-07 1 1 0 +1 641 0 3.6 7.7 +2 1495 287 0 3.6 7.7 +2 1496 309 0 3.6 7.7 +4 G1 287 0 309 0 +0 + +0101000 ++6431 0 -6398 0 * +Ed + 1e-07 1 1 0 +1 642 0 5.21238898038404 8.29755044708925 +2 1497 287 0 5.21238898038404 8.29755044708925 +2 1498 328 0 5.21238898038404 8.29755044708925 +4 C0 287 0 328 0 +0 + +0101000 ++6399 0 -6398 0 * +Ed + 1e-07 1 1 0 +1 643 0 -2.05 2.05 +2 1499 309 0 -2.05 2.05 +4 G1 310 0 309 0 +2 1500 310 0 -2.05 2.05 +0 + +0101000 ++6397 0 -6430 0 * +Ed + 1e-07 1 1 0 +1 644 0 -17.50896997293 17.50896997287 +4 C0 310 0 329 0 +2 1501 310 0 -17.50896997293 17.50896997287 +2 1502 329 0 -17.50896997293 17.50896997287 +0 + +0101000 ++6402 0 -6397 0 * +Ed + 1e-07 1 1 0 +1 645 0 4.26882016725901 4.71238898038469 +2 1503 309 0 4.26882016725901 4.71238898038469 +2 1504 330 0 4.26882016725901 4.71238898038469 +4 C0 309 0 330 0 +0 + +0101000 ++6398 0 -6397 0 * +Ed + 1e-07 1 1 0 +1 646 0 -2.05 2.05 +2 1505 308 0 -2.05 2.05 +4 G1 313 0 308 0 +2 1506 313 0 -2.05 2.05 +0 + +0101000 ++6396 0 -6433 0 * +Ed + 1e-07 1 1 0 +1 647 0 -13.24087248687 13.24087248683 +4 C0 313 0 331 0 +2 1507 313 0 -13.24087248687 13.24087248683 +2 1508 331 0 -13.24087248687 13.24087248683 +0 + +0101000 ++6396 0 -6401 0 * +Ed + 1e-07 1 1 0 +1 648 0 3.6 7.7 +2 1509 285 0 3.6 7.7 +2 1510 308 0 3.6 7.7 +4 G1 285 0 308 0 +0 + +0101000 ++6434 0 -6395 0 * +Ed + 1e-07 1 1 0 +1 649 0 3.93063288873583 5.21238898038404 +2 1511 285 0 3.93063288873583 5.21238898038404 +2 1512 328 0 3.93063288873583 5.21238898038404 +4 C0 285 0 328 0 +0 + +0101000 ++6395 0 -6399 0 * +Ed + 1e-07 1 1 0 +1 650 0 1.5707963267949 2.35255241843617 +2 1513 308 0 1.5707963267949 2.35255241843617 +2 1514 332 0 1.5707963267949 2.35255241843617 +4 C0 308 0 332 0 +0 + +0101000 ++6396 0 -6395 0 * +Ed + 1e-07 1 1 0 +1 651 0 -11.65 -7.55 +2 1515 294 0 -11.65 -7.55 +2 1516 333 0 -11.65 -7.55 +4 G1 294 0 333 0 +0 + +0101000 ++6394 0 -6393 0 * +Ed + 1e-07 1 1 0 +1 652 0 3.14159265358979 3.18160332794375 +2 1517 294 0 3.14159265358979 3.18160332794375 +4 C0 294 0 314 0 +0 + +0101000 ++6425 0 -6394 0 * +Ed + 1e-07 1 1 0 +1 653 0 3.18160332794375 6.12249465422746 +2 1518 294 0 3.18160332794375 6.12249465422746 +2 1519 334 0 3.18160332794375 6.12249465422746 +4 C0 294 0 334 0 +0 + +0101000 ++6393 0 -6400 0 * +Ed + 1e-07 1 1 0 +1 654 0 1.5707963267949 3.10158197923577 +2 1520 333 0 1.5707963267949 3.10158197923577 +4 C0 333 0 314 0 +0 + +0101000 ++6392 0 -6394 0 * +Ed + 1e-07 1 1 0 +1 655 0 -8.45 -4.35 +2 1521 333 0 -8.45 -4.35 +4 G1 333 0 335 0 +2 1522 335 0 -8.45 -4.35 +0 + +0101000 ++6391 0 -6392 0 * +Ed + 1e-07 1 1 0 +1 656 0 1.5707963267949 3.10158197923577 +2 1523 333 0 1.5707963267949 3.10158197923577 +2 1524 336 0 1.5707963267949 3.10158197923577 +4 C0 333 0 336 0 +0 + +0101000 ++6391 0 -6393 0 * +Ed + 1e-07 1 1 0 +1 657 0 3.10158197923583 3.14159265361757 +2 1525 299 0 3.10158197923583 3.14159265361757 +4 C0 299 0 314 0 +0 + +0101000 ++6390 0 -6424 0 * +Ed + 1e-07 1 1 0 +1 658 0 -11.65 -7.55 +2 1526 299 0 -11.65 -7.55 +2 1527 337 0 -11.65 -7.55 +4 G1 299 0 337 0 +0 + +0101000 ++6390 0 -6389 0 * +Ed + 1e-07 1 1 0 +1 659 0 0.160690652952128 3.10158197923583 +2 1528 299 0 0.160690652952128 3.10158197923583 +2 1529 338 0 0.160690652952128 3.10158197923583 +4 C0 299 0 338 0 +0 + +0101000 ++6403 0 -6389 0 * +Ed + 1e-07 1 1 0 +1 660 0 -8.45 -4.35 +2 1530 337 0 -8.45 -4.35 +4 G1 337 0 339 0 +2 1531 339 0 -8.45 -4.35 +0 + +0101000 ++6388 0 -6387 0 * +Ed + 1e-07 1 1 0 +1 661 0 3.18160332794382 4.71238898038469 +2 1532 337 0 3.18160332794382 4.71238898038469 +4 C0 337 0 314 0 +0 + +0101000 ++6390 0 -6387 0 * +Ed + 1e-07 1 1 0 +1 662 0 3.18160332794382 4.71238898038469 +2 1533 337 0 3.18160332794382 4.71238898038469 +2 1534 340 0 3.18160332794382 4.71238898038469 +4 C0 337 0 340 0 +0 + +0101000 ++6389 0 -6388 0 * +Ed + 1e-07 1 1 0 +1 663 0 -4.45427591320001 4.45427591319999 +4 C0 335 0 314 0 +2 1535 335 0 -4.45427591320001 4.45427591319999 +0 + +0101000 ++6392 0 -6386 0 * +Ed + 1e-07 1 1 0 +1 664 0 -2.05 2.05 +2 1536 341 0 -2.05 2.05 +4 G1 335 0 341 0 +2 1537 335 0 -2.05 2.05 +0 + +0101000 ++6385 0 -6386 0 * +Ed + 1e-07 1 1 0 +1 665 0 -4.45427591320001 4.45427591319999 +4 C0 335 0 342 0 +2 1538 335 0 -4.45427591320001 4.45427591319999 +2 1539 342 0 -4.45427591320001 4.45427591319999 +0 + +0101000 ++6391 0 -6385 0 * +Ed + 1e-07 1 1 0 +1 666 0 -1.85 2.25 +2 1540 341 0 -1.85 2.25 +2 1541 343 0 -1.85 2.25 +4 G1 341 0 343 0 +0 + +0101000 ++6384 0 -6383 0 * +Ed + 1e-07 1 1 0 +1 667 0 4.71238898038469 5.73186833805586 +2 1542 341 0 4.71238898038469 5.73186833805586 +4 C0 341 0 314 0 +0 + +0101000 ++6386 0 -6383 0 * +Ed + 1e-07 1 1 0 +1 668 0 4.71238898038469 5.73186833805586 +2 1543 341 0 4.71238898038469 5.73186833805586 +2 1544 344 0 4.71238898038469 5.73186833805586 +4 C0 341 0 344 0 +0 + +0101000 ++6385 0 -6384 0 * +Ed + 1e-07 1 1 0 +1 669 0 -2.05 2.05 +2 1545 345 0 -2.05 2.05 +4 G1 339 0 345 0 +2 1546 339 0 -2.05 2.05 +0 + +0101000 ++6382 0 -6381 0 * +Ed + 1e-07 1 1 0 +1 670 0 -4.45427591319999 4.45427591320001 +4 C0 339 0 314 0 +2 1547 339 0 -4.45427591319999 4.45427591320001 +0 + +0101000 ++6381 0 -6387 0 * +Ed + 1e-07 1 1 0 +1 671 0 -4.45427591319999 4.45427591320001 +4 C0 339 0 346 0 +2 1548 339 0 -4.45427591319999 4.45427591320001 +2 1549 346 0 -4.45427591319999 4.45427591320001 +0 + +0101000 ++6382 0 -6388 0 * +Ed + 1e-07 1 1 0 +1 672 0 -11.5 -7.4 +2 1550 343 0 -11.5 -7.4 +2 1551 345 0 -11.5 -7.4 +4 G1 343 0 345 0 +0 + +0101000 ++6380 0 -6379 0 * +Ed + 1e-07 1 1 0 +1 673 0 2.59027568446126 3.69290962272235 +2 1552 343 0 2.59027568446126 3.69290962272235 +4 C0 343 0 314 0 +0 + +0101000 ++6380 0 -6383 0 * +Ed + 1e-07 1 1 0 +1 674 0 2.59027568446126 3.69290962272235 +2 1553 343 0 2.59027568446126 3.69290962272235 +2 1554 347 0 2.59027568446126 3.69290962272235 +4 C0 343 0 347 0 +0 + +0101000 ++6379 0 -6384 0 * +Ed + 1e-07 1 1 0 +1 675 0 0.551316969123728 1.5707963267949 +2 1555 345 0 0.551316969123728 1.5707963267949 +4 C0 345 0 314 0 +0 + +0101000 ++6380 0 -6381 0 * +Ed + 1e-07 1 1 0 +1 676 0 0.551316969123728 1.5707963267949 +2 1556 345 0 0.551316969123728 1.5707963267949 +2 1557 348 0 0.551316969123728 1.5707963267949 +4 C0 345 0 348 0 +0 + +0101000 ++6379 0 -6382 0 * +Ed + 1e-07 1 1 0 +1 677 0 0.0400106743540416 1.5707963267949 +2 1558 336 0 0.0400106743540416 1.5707963267949 +4 C0 325 0 336 0 +2 1559 325 0 0.0400106743540416 1.5707963267949 +0 + +0101000 ++6378 0 -6377 0 * +Ed + 1e-07 1 1 0 +1 678 0 -4.45427591320001 4.45427591319999 +4 C0 325 0 342 0 +2 1560 325 0 -4.45427591320001 4.45427591319999 +2 1561 342 0 -4.45427591320001 4.45427591319999 +0 + +0101000 ++6377 0 -6376 0 * +Ed + 1e-07 1 1 0 +1 679 0 3.69290962272901 4.71238898038469 +2 1562 344 0 3.69290962272901 4.71238898038469 +4 C0 325 0 344 0 +2 1563 325 0 3.69290962272901 4.71238898038469 +0 + +0101000 ++6375 0 -6376 0 * +Ed + 1e-07 1 1 0 +1 680 0 2.59027568446201 3.69290962272489 +2 1564 347 0 2.59027568446201 3.69290962272489 +4 C0 325 0 347 0 +2 1565 325 0 2.59027568446201 3.69290962272489 +0 + +0101000 ++6374 0 -6375 0 * +Ed + 1e-07 1 1 0 +1 681 0 1.5707963267949 2.59027568446994 +2 1566 348 0 1.5707963267949 2.59027568446994 +4 C0 325 0 348 0 +2 1567 325 0 1.5707963267949 2.59027568446994 +0 + +0101000 ++6373 0 -6374 0 * +Ed + 1e-07 1 1 0 +1 682 0 -4.45427591319999 4.45427591320001 +4 C0 325 0 346 0 +2 1568 325 0 -4.45427591319999 4.45427591320001 +2 1569 346 0 -4.45427591319999 4.45427591320001 +0 + +0101000 ++6373 0 -6372 0 * +Ed + 1e-07 1 1 0 +1 683 0 4.71238898038469 6.24317463282554 +2 1570 340 0 4.71238898038469 6.24317463282554 +4 C0 325 0 340 0 +2 1571 325 0 4.71238898038469 6.24317463282554 +0 + +0101000 ++6372 0 -6371 0 * +Ed + 1e-07 1 1 0 +1 684 0 0.160690652951567 3.10158197923584 +2 1572 338 0 0.160690652951567 3.10158197923584 +4 C0 325 0 338 0 +2 1573 325 0 0.160690652951567 3.10158197923584 +0 + +0101000 ++6370 0 -6371 0 * +Ed + 1e-07 1 1 0 +1 685 0 3.30228330654281 4.71238898038469 +2 1574 326 0 3.30228330654281 4.71238898038469 +4 C0 325 0 326 0 +2 1575 325 0 3.30228330654281 4.71238898038469 +0 + +0101000 ++6370 0 -6369 0 * +Ed + 1e-07 1 1 0 +1 686 0 -17.50896997293 17.50896997287 +4 C0 325 0 329 0 +2 1576 325 0 -17.50896997293 17.50896997287 +2 1577 329 0 -17.50896997293 17.50896997287 +0 + +0101000 ++6369 0 -6368 0 * +Ed + 1e-07 1 1 0 +1 687 0 4.71238898038469 5.15595779350366 +2 1578 330 0 4.71238898038469 5.15595779350366 +4 C0 325 0 330 0 +2 1579 325 0 4.71238898038469 5.15595779350366 +0 + +0101000 ++6368 0 -6367 0 * +Ed + 1e-07 1 1 0 +1 688 0 5.21238898038365 8.29755044709124 +2 1580 328 0 5.21238898038365 8.29755044709124 +4 C0 325 0 328 0 +2 1581 325 0 5.21238898038365 8.29755044709124 +0 + +0101000 ++6366 0 -6367 0 * +Ed + 1e-07 1 1 0 +1 689 0 3.93063288873727 5.21238898038365 +2 1582 328 0 3.93063288873727 5.21238898038365 +4 C0 325 0 328 0 +2 1583 325 0 3.93063288873727 5.21238898038365 +0 + +0101000 ++6365 0 -6366 0 * +Ed + 1e-07 1 1 0 +1 690 0 0.789040235148755 1.5707963267949 +2 1584 332 0 0.789040235148755 1.5707963267949 +4 C0 325 0 332 0 +2 1585 325 0 0.789040235148755 1.5707963267949 +0 + +0101000 ++6365 0 -6364 0 * +Ed + 1e-07 1 1 0 +1 691 0 -13.24087248687 13.24087248683 +4 C0 325 0 331 0 +2 1586 325 0 -13.24087248687 13.24087248683 +2 1587 331 0 -13.24087248687 13.24087248683 +0 + +0101000 ++6364 0 -6363 0 * +Ed + 1e-07 1 1 0 +1 692 0 1.5707963267949 2.98090200063678 +2 1588 327 0 1.5707963267949 2.98090200063678 +4 C0 325 0 327 0 +2 1589 325 0 1.5707963267949 2.98090200063678 +0 + +0101000 ++6363 0 -6362 0 * +Ed + 1e-07 1 1 0 +1 693 0 3.18160332794375 6.12249465422802 +2 1590 334 0 3.18160332794375 6.12249465422802 +4 C0 325 0 334 0 +2 1591 325 0 3.18160332794375 6.12249465422802 +0 + +0101000 ++6378 0 -6362 0 * +Ed + 1e-07 1 1 0 +1 694 0 -0.282842712496918 0.282842712496923 +2 1592 334 0 -0.282842712496918 0.282842712496923 +2 1593 327 0 -0.282842712496918 0.282842712496923 +4 G1 334 0 327 0 +0 + +0101000 ++6400 0 -6362 0 * +Ed + 1e-07 1 1 0 +1 695 0 -0.282842712440174 0.28284271251083 +2 1594 334 0 -0.282842712440174 0.28284271251083 +2 1595 336 0 -0.282842712440174 0.28284271251083 +4 G1 334 0 336 0 +0 + +0101000 ++6393 0 -6378 0 * +Ed + 1e-07 1 1 0 +1 696 0 -0.282842712474621 0.282842712474616 +2 1596 327 0 -0.282842712474621 0.282842712474616 +4 G1 327 0 331 0 +2 1597 331 0 -0.282842712474621 0.282842712474616 +0 + +0101000 ++6363 0 -6401 0 * +Ed + 1e-07 1 1 0 +1 697 0 -0.282842712474616 0.282842712474621 +2 1598 332 0 -0.282842712474616 0.282842712474621 +4 G1 331 0 332 0 +2 1599 331 0 -0.282842712474616 0.282842712474621 +0 + +0101000 ++6396 0 -6364 0 * +Ed + 1e-07 1 1 0 +1 698 0 -0.282842712491306 0.282842712491302 +2 1600 332 0 -0.282842712491306 0.282842712491302 +2 1601 328 0 -0.282842712491306 0.282842712491302 +4 G1 332 0 328 0 +0 + +0101000 ++6365 0 -6395 0 * +Ed + 1e-07 1 1 0 +1 699 0 -0.282842712490296 0.282842712490292 +2 1602 330 0 -0.282842712490296 0.282842712490292 +2 1603 328 0 -0.282842712490296 0.282842712490292 +4 G1 330 0 328 0 +0 + +0101000 ++6367 0 -6398 0 * +Ed + 1e-07 1 1 0 +1 700 0 -0.282842712474621 0.282842712474616 +2 1604 330 0 -0.282842712474621 0.282842712474616 +4 G1 330 0 329 0 +2 1605 329 0 -0.282842712474621 0.282842712474616 +0 + +0101000 ++6368 0 -6397 0 * +Ed + 1e-07 1 1 0 +1 701 0 -0.282842712474616 0.282842712474621 +2 1606 326 0 -0.282842712474616 0.282842712474621 +4 G1 329 0 326 0 +2 1607 329 0 -0.282842712474616 0.282842712474621 +0 + +0101000 ++6402 0 -6369 0 * +Ed + 1e-07 1 1 0 +1 702 0 -0.282842712496923 0.282842712496918 +2 1608 326 0 -0.282842712496923 0.282842712496918 +2 1609 338 0 -0.282842712496923 0.282842712496918 +4 G1 326 0 338 0 +0 + +0101000 ++6370 0 -6403 0 * +Ed + 1e-07 1 1 0 +1 703 0 -0.282842712440174 0.28284271251083 +2 1610 338 0 -0.282842712440174 0.28284271251083 +2 1611 340 0 -0.282842712440174 0.28284271251083 +4 G1 338 0 340 0 +0 + +0101000 ++6389 0 -6371 0 * +Ed + 1e-07 1 1 0 +1 704 0 -0.282842712474622 0.282842712474616 +2 1612 340 0 -0.282842712474622 0.282842712474616 +4 G1 340 0 346 0 +2 1613 346 0 -0.282842712474622 0.282842712474616 +0 + +0101000 ++6372 0 -6388 0 * +Ed + 1e-07 1 1 0 +1 705 0 -0.282842712474616 0.282842712474622 +2 1614 348 0 -0.282842712474616 0.282842712474622 +4 G1 346 0 348 0 +2 1615 346 0 -0.282842712474616 0.282842712474622 +0 + +0101000 ++6382 0 -6373 0 * +Ed + 1e-07 1 1 0 +1 706 0 -0.282842712488739 0.282842712451697 +2 1616 348 0 -0.282842712488739 0.282842712451697 +2 1617 347 0 -0.282842712488739 0.282842712451697 +4 G1 348 0 347 0 +0 + +0101000 ++6379 0 -6374 0 * +Ed + 1e-07 1 1 0 +1 707 0 -0.282842712488739 0.282842712488736 +2 1618 347 0 -0.282842712488739 0.282842712488736 +2 1619 344 0 -0.282842712488739 0.282842712488736 +4 G1 347 0 344 0 +0 + +0101000 ++6384 0 -6375 0 * +Ed + 1e-07 1 1 0 +1 708 0 -0.282842712474616 0.282842712474621 +2 1620 344 0 -0.282842712474616 0.282842712474621 +4 G1 344 0 342 0 +2 1621 342 0 -0.282842712474616 0.282842712474621 +0 + +0101000 ++6385 0 -6376 0 * +Ed + 1e-07 1 1 0 +1 709 0 -0.282842712474616 0.282842712474621 +2 1622 336 0 -0.282842712474616 0.282842712474621 +4 G1 342 0 336 0 +2 1623 342 0 -0.282842712474616 0.282842712474621 +0 + +0101000 ++6391 0 -6377 0 * +Ed + 1e-07 1 1 0 +1 710 0 0 3.14159265358979 +2 1624 349 0 0 3.14159265358979 +4 C0 314 0 349 0 +0 + +0101000 ++6361 0 -6360 0 * +Ed + 1e-07 1 1 0 +1 711 0 3.14159265358979 6.28318530717959 +2 1625 350 0 3.14159265358979 6.28318530717959 +4 C0 314 0 350 0 +0 + +0101000 ++6360 0 -6361 0 * +Ed + 1e-07 1 1 0 +1 712 0 0 3.14159265358979 +2 1626 349 0 0 3.14159265358979 +4 C0 349 0 351 0 +0 + +0101000 ++6359 0 -6358 0 * +Ed + 1e-07 1 1 0 +1 713 0 -0.600000000000001 0.600000000000001 +2 1627 349 0 -0.600000000000001 0.600000000000001 +2 1628 350 0 -0.600000000000001 0.600000000000001 +4 CN 349 0 350 0 +0 + +0101000 ++6358 0 -6360 0 * +Ed + 1e-07 1 1 0 +1 714 0 -0.600000000000001 0.600000000000001 +2 1629 349 0 -0.600000000000001 0.600000000000001 +2 1630 350 0 -0.600000000000001 0.600000000000001 +4 CN 349 0 350 0 +0 + +0101000 ++6359 0 -6361 0 * +Ed + 1e-07 1 1 0 +1 715 0 3.14159265358979 6.28318530717959 +2 1631 350 0 3.14159265358979 6.28318530717959 +4 C0 350 0 351 0 +0 + +0101000 ++6358 0 -6359 0 * +Ed + 1e-07 1 1 0 +1 716 0 3.14159265358979 6.28318530717959 +2 1632 352 0 3.14159265358979 6.28318530717959 +4 C0 351 0 352 0 +0 + +0101000 ++6357 0 -6356 0 * +Ed + 1e-07 1 1 0 +1 717 0 0 3.14159265358979 +2 1633 353 0 0 3.14159265358979 +4 C0 351 0 353 0 +0 + +0101000 ++6356 0 -6357 0 * +Ed + 1e-07 1 1 0 +1 718 0 -10.5 -9.4999999935 +2 1634 259 0 -10.5 -9.4999999935 +4 G1 259 0 260 0 +0 + +0101000 ++6487 0 -6355 0 * +Ed + 7.80304409749528e-06 1 1 0 +1 719 0 -10.5 -9.4999999935 +2 1635 259 0 -10.5 -9.4999999935 +2 1636 258 0 -10.5 -9.4999999935 +4 G1 259 0 258 0 +0 + +0101000 ++6488 0 -6354 0 * +Ed + 0.000371546529634028 1 1 0 +1 720 0 0 25.1995289729 +2 1637 259 0 0 25.1995289729 +4 C0 259 0 301 0 +2 1638 301 0 0 25.1995289729 +0 + +0101000 ++6355 0 -6354 0 * +Ed + 1e-07 1 1 0 +1 721 0 -10.5 -9.4999999935 +2 1639 261 0 -10.5 -9.4999999935 +4 G1 261 0 262 0 +0 + +0101000 ++6485 0 -6353 0 * +Ed + 1e-07 1 1 0 +1 722 0 -10.5 -9.4999999935 +2 1640 261 0 -10.5 -9.4999999935 +4 G1 261 0 260 0 +0 + +0101000 ++6486 0 -6352 0 * +Ed + 0.0029973161977681 1 1 0 +1 723 0 2.36494886716e-12 126.615135948 +2 1641 261 0 2.36494886716e-12 126.615135948 +4 C0 261 0 301 0 +2 1642 301 0 2.36494886716e-12 126.615135948 +0 + +0101000 ++6353 0 -6352 0 * +Ed + 1e-07 1 1 0 +1 724 0 -19 -2.5000000055 +2 1643 354 0 -19 -2.5000000055 +4 G1 354 0 355 0 +2 1644 355 0 -19 -2.5000000055 +0 + +0101000 ++6351 199 -6350 0 * +Ed + 1.00000005024296e-07 1 1 0 +1 725 0 1.5707963267949 2.35619449019234 +2 1645 354 0 1.5707963267949 2.35619449019234 +4 C0 354 0 356 0 +2 1646 356 0 1.5707963267949 2.35619449019234 +2 1647 357 200 1.5707963267949 2.35619449019234 +2 1648 358 200 1.5707963267949 2.35619449019234 +0 + +0101000 ++6351 199 -6349 199 * +Ed + 1e-07 1 1 0 +1 726 0 -19 -2.5000000055 +2 1649 354 0 -19 -2.5000000055 +4 G1 354 0 359 0 +2 1650 359 0 -19 -2.5000000055 +0 + +0101000 ++6349 199 -6348 0 * +Ed + 1e-07 1 1 0 +1 727 0 1.5707963267949 2.35619449019234 +2 1651 354 0 1.5707963267949 2.35619449019234 +4 C0 354 0 360 0 +2 1652 360 0 1.5707963267949 2.35619449019234 +0 + +0101000 ++6350 0 -6348 0 * +Ed + 1e-07 1 1 0 +1 728 0 -32.8489256471 32.8491740574 +4 C0 355 0 356 0 +2 1653 356 0 -32.8489256471 32.8491740574 +2 1654 355 0 -32.8489256471 32.8491740574 +2 1655 358 200 -32.8489256471 32.8491740574 +0 + +0101000 ++6347 199 -6351 199 * +Ed + 1e-07 1 1 0 +1 729 0 -8.2499999973 8.2499999972 +2 1656 361 0 -8.2499999973 8.2499999972 +4 G1 355 0 361 0 +2 1657 355 0 -8.2499999973 8.2499999972 +0 + +0101000 ++6347 199 -6346 0 * +Ed + 1e-07 1 1 0 +1 730 0 -32.8489256471 32.8491740574 +4 C0 355 0 360 0 +2 1658 360 0 -32.8489256471 32.8491740574 +2 1659 355 0 -32.8489256471 32.8491740574 +0 + +0101000 ++6346 0 -6350 0 * +Ed + 1e-07 1 1 0 +1 731 0 -0.500000003300002 0.5000000032 +2 1660 254 0 -0.500000003300002 0.5000000032 +4 G1 253 0 254 0 +0 + +0101000 ++6345 0 -6493 0 * +Ed + 1e-07 1 1 0 +1 732 0 -54.499751589699 54.500000000001 +4 C0 253 0 301 0 +2 1661 301 0 -54.499751589699 54.500000000001 +0 + +0101000 ++6345 0 -6444 0 * +Ed + 1e-07 1 1 0 +1 733 0 -8.2499999973 8.2499999972 +4 C0 359 0 362 0 +2 1662 359 0 -8.2499999973 8.2499999972 +2 1663 362 0 -8.2499999973 8.2499999972 +0 + +0101000 ++6344 199 -6343 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 734 0 -3.58578643758061 3.58578643765132 +4 C0 359 0 356 0 +2 1664 356 0 -3.58578643758061 3.58578643765132 +2 1665 359 0 -3.58578643758061 3.58578643765132 +2 1666 358 200 -3.58578643758061 3.58578643765132 +0 + +0101000 ++6344 199 -6349 199 * +Ed + 1e-07 1 1 0 +1 735 0 -3.58578643758061 3.58578643765132 +4 C0 359 0 360 0 +2 1667 360 0 -3.58578643758061 3.58578643765132 +2 1668 359 0 -3.58578643758061 3.58578643765132 +0 + +0101000 ++6343 0 -6348 0 * +Ed + 1e-07 1 1 0 +1 736 0 -19 -2.5000000055 +2 1669 363 0 -19 -2.5000000055 +4 G1 363 0 364 0 +2 1670 364 0 -19 -2.5000000055 +0 + +0101000 ++6342 199 -6341 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 737 0 3.92699081699431 4.71238898038469 +2 1671 363 0 3.92699081699431 4.71238898038469 +4 C0 363 0 356 0 +2 1672 356 0 3.92699081699431 4.71238898038469 +2 1673 365 200 3.92699081699431 4.71238898038469 +2 1674 358 200 3.92699081699431 4.71238898038469 +0 + +0101000 ++6342 199 -6340 199 * +Ed + 1e-07 1 1 0 +1 738 0 -19 -2.5000000055 +2 1675 363 0 -19 -2.5000000055 +4 G1 363 0 366 0 +2 1676 366 0 -19 -2.5000000055 +0 + +0101000 ++6340 199 -6339 0 * +Ed + 1e-07 1 1 0 +1 739 0 3.92699081699431 4.71238898038469 +2 1677 363 0 3.92699081699431 4.71238898038469 +4 C0 363 0 360 0 +2 1678 360 0 3.92699081699431 4.71238898038469 +0 + +0101000 ++6341 0 -6339 0 * +Ed + 1e-07 1 1 0 +1 740 0 -17.4 17.4 +4 C0 260 0 301 0 +2 1679 301 0 -17.4 17.4 +0 + +0101000 ++6352 0 -6355 0 * +Ed + 1e-07 1 1 0 +1 741 0 -8.2499999973 8.2499999972 +2 1680 367 0 -8.2499999973 8.2499999972 +4 G1 366 0 367 0 +2 1681 366 0 -8.2499999973 8.2499999972 +0 + +0101000 ++6338 199 -6337 0 * +Ed + 1e-07 1 1 0 +1 742 0 -10.07893218817 10.07893218813 +4 C0 366 0 356 0 +2 1682 356 0 -10.07893218817 10.07893218813 +2 1683 366 0 -10.07893218817 10.07893218813 +2 1684 358 200 -10.07893218817 10.07893218813 +0 + +0101000 ++6340 199 -6338 199 * +Ed + 1e-07 1 1 0 +1 743 0 -10.07893218817 10.07893218813 +4 C0 366 0 360 0 +2 1685 360 0 -10.07893218817 10.07893218813 +2 1686 366 0 -10.07893218817 10.07893218813 +0 + +0101000 ++6339 0 -6337 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 744 0 -3.58578643772203 3.58578643758061 +4 C0 364 0 356 0 +2 1687 356 0 -3.58578643772203 3.58578643758061 +2 1688 364 0 -3.58578643772203 3.58578643758061 +2 1689 358 200 -3.58578643772203 3.58578643758061 +0 + +0101000 ++6342 199 -6336 199 * +Ed + 1e-07 1 1 0 +1 745 0 -8.2499999973 8.2499999972 +4 C0 364 0 368 0 +2 1690 364 0 -8.2499999973 8.2499999972 +2 1691 368 0 -8.2499999973 8.2499999972 +0 + +0101000 ++6336 199 -6335 0 * +Ed + 1e-07 1 1 0 +1 746 0 -3.58578643772203 3.58578643758061 +4 C0 364 0 360 0 +2 1692 360 0 -3.58578643772203 3.58578643758061 +2 1693 364 0 -3.58578643772203 3.58578643758061 +0 + +0101000 ++6341 0 -6335 0 * +Ed + 1e-07 1 1 0 +1 747 0 -21.07275669483 21.07275669488 +4 C0 369 0 360 0 +2 1694 360 0 -21.07275669483 21.07275669488 +2 1695 369 0 -21.07275669483 21.07275669488 +0 + +0101000 ++6334 0 -6333 0 * +Ed + 1e-07 1 1 0 +1 748 0 -8.2499999973 8.2499999972 +4 C0 369 0 368 0 +2 1696 369 0 -8.2499999973 8.2499999972 +2 1697 368 0 -8.2499999973 8.2499999972 +0 + +0101000 ++6332 199 -6333 0 * +Ed + 1.00000007944109e-07 1 1 0 +1 749 0 -21.07275669483 21.07275669488 +4 C0 369 0 356 0 +2 1698 356 0 -21.07275669483 21.07275669488 +2 1699 369 0 -21.07275669483 21.07275669488 +2 1700 358 200 -21.07275669483 21.07275669488 +0 + +0101000 ++6331 199 -6332 199 * +Ed + 1e-07 1 1 0 +1 750 0 -8.2499999973 8.2499999972 +2 1701 370 0 -8.2499999973 8.2499999972 +4 G1 369 0 370 0 +2 1702 369 0 -8.2499999973 8.2499999972 +0 + +0101000 ++6331 199 -6334 0 * +Ed + 0.000147176562521838 1 1 0 +1 751 0 0 42.1355454582 +2 1703 370 0 0 42.1355454582 +4 C0 370 0 356 0 +2 1704 356 0 0 42.1355454582 +2 1705 371 200 0 42.1355454582 +2 1706 358 200 0 42.1355454582 +0 + +0101000 ++6331 199 -6330 199 * +Ed + 2.29990299937802e-05 1 1 0 +1 752 0 -18 -1.5000000055 +2 1707 370 0 -18 -1.5000000055 +4 G1 370 0 372 0 +2 1708 372 0 -18 -1.5000000055 +0 + +0101000 ++6330 199 -6329 0 * +Ed + 0.000144415167202496 1 1 0 +1 753 0 0 42.1355454676 +2 1709 370 0 0 42.1355454676 +4 C0 370 0 360 0 +2 1710 360 0 0 42.1355454676 +0 + +0101000 ++6334 0 -6329 0 * +Ed + 1e-07 1 1 0 +1 754 0 -1 1 +4 C0 262 0 301 0 +2 1711 301 0 -1 1 +0 + +0101000 ++6328 0 -6353 0 * +Ed + 1e-07 1 1 0 +1 755 0 -0.500000003300002 0.5000000032 +2 1712 250 0 -0.500000003300002 0.5000000032 +4 G1 262 0 250 0 +0 + +0101000 ++6328 0 -6496 0 * +Ed + 1e-07 1 1 0 +1 756 0 -1.0256020647 1.0256020751 +4 C0 372 0 360 0 +2 1713 360 0 -1.0256020647 1.0256020751 +2 1714 372 0 -1.0256020647 1.0256020751 +0 + +0101000 ++6327 0 -6329 0 * +Ed + 1e-07 1 1 0 +1 757 0 -1.0256020699 1.0256020699 +4 C0 372 0 356 0 +2 1715 356 0 -1.0256020699 1.0256020699 +2 1716 372 0 -1.0256020699 1.0256020699 +2 1717 358 200 -1.0256020699 1.0256020699 +0 + +0101000 ++6326 199 -6330 199 * +Ed + 1e-07 1 1 0 +1 758 0 -8.2499999973 8.2499999972 +2 1718 373 0 -8.2499999973 8.2499999972 +4 G1 372 0 373 0 +2 1719 372 0 -8.2499999973 8.2499999972 +0 + +0101000 ++6326 199 -6327 0 * +Ed + 1e-07 1 1 0 +1 759 0 -15.394965591 15.3949655911 +4 C0 368 0 360 0 +2 1720 360 0 -15.394965591 15.3949655911 +2 1721 368 0 -15.394965591 15.3949655911 +0 + +0101000 ++6333 0 -6335 0 * +Ed + 1.00000001776357e-07 1 1 0 +1 760 0 -15.394965591 15.3949655911 +4 C0 368 0 356 0 +2 1722 356 0 -15.394965591 15.3949655911 +2 1723 368 0 -15.394965591 15.3949655911 +2 1724 358 200 -15.394965591 15.3949655911 +0 + +0101000 ++6332 199 -6336 199 * +Ed + 7.80303701318251e-06 1 1 0 +1 761 0 -18 -1.5000000055 +2 1725 367 0 -18 -1.5000000055 +2 1726 374 0 -18 -1.5000000055 +4 G1 367 0 374 0 +0 + +0101000 ++6325 199 -6324 0 * +Ed + 0.000550097116052948 1 1 0 +1 762 0 0 25.1995267341 +2 1727 367 0 0 25.1995267341 +4 C0 367 0 356 0 +2 1728 356 0 0 25.1995267341 +2 1729 375 200 0 25.1995267341 +2 1730 358 200 0 25.1995267341 +0 + +0101000 ++6325 199 -6338 199 * +Ed + 0.000371546416342552 1 1 0 +1 763 0 0 25.1995267348 +2 1731 367 0 0 25.1995267348 +4 C0 367 0 360 0 +2 1732 360 0 0 25.1995267348 +0 + +0101000 ++6324 0 -6337 0 * +Ed + 1e-07 1 1 0 +1 764 0 -13.5 11.8 +2 1733 352 0 -13.5 11.8 +2 1734 353 0 -13.5 11.8 +4 CN 352 0 353 0 +0 + +0101000 ++6323 199 -6356 0 * +Ed + 1e-07 1 1 0 +1 765 0 -13.5 11.8 +2 1735 352 0 -13.5 11.8 +2 1736 353 0 -13.5 11.8 +4 CN 352 0 353 0 +0 + +0101000 ++6322 199 -6357 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 766 0 3.14159265358979 6.28318530717959 +2 1737 352 0 3.14159265358979 6.28318530717959 +4 C0 352 0 356 0 +2 1738 356 0 3.14159265358979 6.28318530717959 +2 1739 376 200 3.14159265358979 6.28318530717959 +2 1740 358 200 3.14159265358979 6.28318530717959 +0 + +0101000 ++6322 199 -6323 199 * +Ed + 1.00000003552714e-07 1 1 0 +1 767 0 0 3.14159265358979 +2 1741 353 0 0 3.14159265358979 +4 C0 353 0 356 0 +2 1742 356 0 0 3.14159265358979 +2 1743 377 200 0 3.14159265358979 +2 1744 358 200 0 3.14159265358979 +0 + +0101000 ++6323 199 -6322 199 * +Ed + 1e-07 1 1 0 +1 768 0 -18 7.3 +2 1745 306 0 -18 7.3 +2 1746 307 0 -18 7.3 +4 CN 306 0 307 0 +0 + +0101000 ++6321 199 -6437 0 * +Ed + 1e-07 1 1 0 +1 769 0 -18 7.3 +2 1747 306 0 -18 7.3 +2 1748 307 0 -18 7.3 +4 CN 306 0 307 0 +0 + +0101000 ++6320 199 -6438 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 770 0 0 3.14159265358979 +2 1749 306 0 0 3.14159265358979 +4 C0 306 0 356 0 +2 1750 356 0 0 3.14159265358979 +2 1751 378 200 0 3.14159265358979 +2 1752 358 200 0 3.14159265358979 +0 + +0101000 ++6320 199 -6321 199 * +Ed + 1.00000007105427e-07 1 1 0 +1 771 0 3.14159265358979 6.28318530717959 +2 1753 307 0 3.14159265358979 6.28318530717959 +4 C0 307 0 356 0 +2 1754 356 0 3.14159265358979 6.28318530717959 +2 1755 379 200 3.14159265358979 6.28318530717959 +2 1756 358 200 3.14159265358979 6.28318530717959 +0 + +0101000 ++6321 199 -6320 199 * +Ed + 1e-07 1 1 0 +1 772 0 -0.500000003300002 0.5000000032 +2 1757 258 0 -0.500000003300002 0.5000000032 +4 G1 257 0 258 0 +2 1758 257 0 -0.500000003300002 0.5000000032 +0 + +0101000 ++6319 0 -6489 0 * +Ed + 1e-07 1 1 0 +1 773 0 -0.500000003300002 0.5000000032 +2 1759 256 0 -0.500000003300002 0.5000000032 +4 G1 257 0 256 0 +2 1760 257 0 -0.500000003300002 0.5000000032 +0 + +0101000 ++6318 0 -6490 0 * +Ed + 1e-07 1 1 0 +1 774 0 -14.5100701232603 14.5100701232189 +4 C0 257 0 301 0 +2 1761 301 0 -14.5100701232603 14.5100701232189 +2 1762 257 0 -14.5100701232603 14.5100701232189 +0 + +0101000 ++6319 0 -6318 0 * +Ed + 1e-07 1 1 0 +1 775 0 -8.2499999973 8.2499999972 +2 1763 380 0 -8.2499999973 8.2499999972 +4 G1 381 0 380 0 +2 1764 381 0 -8.2499999973 8.2499999972 +0 + +0101000 ++6317 199 -6316 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 776 0 -14.5100701232603 14.5100701232189 +4 C0 381 0 356 0 +2 1765 356 0 -14.5100701232603 14.5100701232189 +2 1766 381 0 -14.5100701232603 14.5100701232189 +2 1767 358 200 -14.5100701232603 14.5100701232189 +0 + +0101000 ++6315 199 -6317 199 * +Ed + 1e-07 1 1 0 +1 777 0 -8.2499999973 8.2499999972 +2 1768 374 0 -8.2499999973 8.2499999972 +4 G1 381 0 374 0 +2 1769 381 0 -8.2499999973 8.2499999972 +0 + +0101000 ++6315 199 -6314 0 * +Ed + 1e-07 1 1 0 +1 778 0 -14.5100701232603 14.5100701232189 +4 C0 381 0 360 0 +2 1770 360 0 -14.5100701232603 14.5100701232189 +2 1771 381 0 -14.5100701232603 14.5100701232189 +0 + +0101000 ++6314 0 -6316 0 * +Ed + 1.00000020097183e-07 1 1 0 +1 779 0 1.08210546427801 1.37058478051409 +2 1772 374 0 1.08210546427801 1.37058478051409 +4 C0 374 0 356 0 +2 1773 356 0 1.08210546427801 1.37058478051409 +2 1774 382 200 1.08210546427801 1.37058478051409 +2 1775 358 200 1.08210546427801 1.37058478051409 +0 + +0101000 ++6315 199 -6325 199 * +Ed + 1e-07 1 1 0 +1 780 0 1.08210546427801 1.37058478051409 +2 1776 374 0 1.08210546427801 1.37058478051409 +4 C0 374 0 360 0 +2 1777 360 0 1.08210546427801 1.37058478051409 +0 + +0101000 ++6314 0 -6324 0 * +Ed + 1e-07 1 1 0 +1 781 0 1.08210546427801 1.37058476272254 +2 1778 258 0 1.08210546427801 1.37058476272254 +4 C0 258 0 301 0 +2 1779 301 0 1.08210546427801 1.37058476272254 +0 + +0101000 ++6319 0 -6354 0 * +Ed + 1e-07 1 1 0 +1 782 0 -43 -26.5000000055 +2 1780 380 0 -43 -26.5000000055 +4 G1 380 0 383 0 +2 1781 383 0 -43 -26.5000000055 +0 + +0101000 ++6313 199 -6312 0 * +Ed + 1e-07 1 1 0 +1 783 0 6.28318075530153 7.36529251234008 +2 1782 380 0 6.28318075530153 7.36529251234008 +4 C0 380 0 356 0 +2 1783 356 0 6.28318075530153 7.36529251234008 +2 1784 384 200 6.28318075530153 7.36529251234008 +2 1785 358 200 6.28318075530153 7.36529251234008 +0 + +0101000 ++6313 199 -6317 199 * +Ed + 1e-07 1 1 0 +1 784 0 6.28318075530153 7.36529251234008 +2 1786 380 0 6.28318075530153 7.36529251234008 +4 C0 380 0 360 0 +2 1787 360 0 6.28318075530153 7.36529251234008 +0 + +0101000 ++6312 0 -6316 0 * +Ed + 1e-07 1 1 0 +1 785 0 0.999999993499998 2 +2 1788 256 0 0.999999993499998 2 +4 G1 256 0 255 0 +0 + +0101000 ++6311 0 -6491 0 * +Ed + 1e-07 1 1 0 +1 786 0 6.28318075530153 7.36529251234008 +2 1789 256 0 6.28318075530153 7.36529251234008 +4 C0 256 0 301 0 +2 1790 301 0 6.28318075530153 7.36529251234008 +0 + +0101000 ++6311 0 -6318 0 * +Ed + 1e-07 1 1 0 +1 787 0 -5.00074082596 5.00074082596 +4 C0 383 0 360 0 +2 1791 360 0 -5.00074082596 5.00074082596 +2 1792 383 0 -5.00074082596 5.00074082596 +0 + +0101000 ++6312 0 -6310 0 * +Ed + 1e-07 1 1 0 +1 788 0 -8.2499999973 8.2499999972 +2 1793 361 0 -8.2499999973 8.2499999972 +4 G1 383 0 361 0 +2 1794 383 0 -8.2499999973 8.2499999972 +0 + +0101000 ++6309 199 -6310 0 * +Ed + 1.00000001776357e-07 1 1 0 +1 789 0 -5.00074082596 5.00074082596 +4 C0 383 0 356 0 +2 1795 356 0 -5.00074082596 5.00074082596 +2 1796 383 0 -5.00074082596 5.00074082596 +2 1797 358 200 -5.00074082596 5.00074082596 +0 + +0101000 ++6313 199 -6309 199 * +Ed + 1e-07 1 1 0 +1 790 0 -5.00074082596 5.00074082596 +4 C0 255 0 301 0 +2 1798 301 0 -5.00074082596 5.00074082596 +0 + +0101000 ++6311 0 -6308 0 * +Ed + 1e-07 1 1 0 +1 791 0 -0.500000003300002 0.5000000032 +2 1799 254 0 -0.500000003300002 0.5000000032 +4 G1 255 0 254 0 +0 + +0101000 ++6308 0 -6492 0 * +Ed + 1e-07 1 1 0 +1 792 0 4.71238898038469 6.2831777796514 +2 1800 361 0 4.71238898038469 6.2831777796514 +4 C0 361 0 356 0 +2 1801 356 0 4.71238898038469 6.2831777796514 +2 1802 385 200 4.71238898038469 6.2831777796514 +2 1803 358 200 4.71238898038469 6.2831777796514 +0 + +0101000 ++6347 199 -6309 199 * +Ed + 1e-07 1 1 0 +1 793 0 4.71238898038469 6.2831777796514 +2 1804 361 0 4.71238898038469 6.2831777796514 +4 C0 361 0 360 0 +2 1805 360 0 4.71238898038469 6.2831777796514 +0 + +0101000 ++6346 0 -6310 0 * +Ed + 1e-07 1 1 0 +1 794 0 4.71238898038469 6.2831777796514 +2 1806 254 0 4.71238898038469 6.2831777796514 +4 C0 254 0 301 0 +2 1807 301 0 4.71238898038469 6.2831777796514 +0 + +0101000 ++6345 0 -6308 0 * +Ed + 1e-07 1 1 0 +1 795 0 3.14160018112023 3.92699081698724 +2 1808 373 0 3.14160018112023 3.92699081698724 +4 C0 373 0 356 0 +2 1809 356 0 3.14160018112023 3.92699081698724 +2 1810 386 200 3.14160018112023 3.92699081698724 +2 1811 358 200 3.14160018112023 3.92699081698724 +0 + +0101000 ++6326 199 -6307 199 * +Ed + 1e-07 1 1 0 +1 796 0 -43 -26.5000000055 +2 1812 373 0 -43 -26.5000000055 +4 G1 373 0 387 0 +2 1813 387 0 -43 -26.5000000055 +0 + +0101000 ++6307 199 -6306 0 * +Ed + 1e-07 1 1 0 +1 797 0 3.14160018112023 3.92699081698724 +2 1814 373 0 3.14160018112023 3.92699081698724 +4 C0 373 0 360 0 +2 1815 360 0 3.14160018112023 3.92699081698724 +0 + +0101000 ++6327 0 -6306 0 * +Ed + 1e-07 1 1 0 +1 798 0 3.14160018112023 3.92699081698724 +2 1816 250 0 3.14160018112023 3.92699081698724 +4 C0 250 0 301 0 +2 1817 301 0 3.14160018112023 3.92699081698724 +0 + +0101000 ++6328 0 -6443 0 * +Ed + 1e-07 1 1 0 +1 799 0 -18 18 +4 C0 362 0 360 0 +2 1818 360 0 -18 18 +2 1819 362 0 -18 18 +0 + +0101000 ++6343 0 -6305 0 * +Ed + 1e-07 1 1 0 +1 800 0 -8.2499999973 8.2499999972 +4 C0 362 0 387 0 +2 1820 362 0 -8.2499999973 8.2499999972 +2 1821 387 0 -8.2499999973 8.2499999972 +0 + +0101000 ++6304 199 -6305 0 * +Ed + 1.00000001776357e-07 1 1 0 +1 801 0 -18 18 +4 C0 362 0 356 0 +2 1822 356 0 -18 18 +2 1823 362 0 -18 18 +2 1824 358 200 -18 18 +0 + +0101000 ++6344 199 -6304 199 * +Ed + 1.00000003552714e-07 1 1 0 +1 802 0 -12.077212795244 12.0772127953148 +4 C0 387 0 356 0 +2 1825 356 0 -12.077212795244 12.0772127953148 +2 1826 387 0 -12.077212795244 12.0772127953148 +2 1827 358 200 -12.077212795244 12.0772127953148 +0 + +0101000 ++6307 199 -6304 199 * +Ed + 1e-07 1 1 0 +1 803 0 -12.077212795244 12.0772127953148 +4 C0 387 0 360 0 +2 1828 360 0 -12.077212795244 12.0772127953148 +2 1829 387 0 -12.077212795244 12.0772127953148 +0 + +0101000 ++6306 0 -6305 0 * +Ed + 1e-07 1 1 0 +1 804 0 -43 -30.1 +2 1830 282 0 -43 -30.1 +2 1831 281 0 -43 -30.1 +4 CN 282 0 281 0 +0 + +0101000 ++6303 199 -6464 0 * +Ed + 1e-07 1 1 0 +1 805 0 -43 -30.1 +2 1832 282 0 -43 -30.1 +2 1833 281 0 -43 -30.1 +4 CN 282 0 281 0 +0 + +0101000 ++6302 199 -6463 0 * +Ed + 1.00000003202373e-07 1 1 0 +1 806 0 3.14159265358979 6.28318530717959 +2 1834 282 0 3.14159265358979 6.28318530717959 +4 C0 282 0 356 0 +2 1835 356 0 3.14159265358979 6.28318530717959 +2 1836 388 200 3.14159265358979 6.28318530717959 +2 1837 358 200 3.14159265358979 6.28318530717959 +0 + +0101000 ++6302 199 -6303 199 * +Ed + 1.00000001986027e-07 1 1 0 +1 807 0 0 3.14159265358979 +2 1838 281 0 0 3.14159265358979 +4 C0 281 0 356 0 +2 1839 356 0 0 3.14159265358979 +2 1840 389 200 0 3.14159265358979 +2 1841 358 200 0 3.14159265358979 +0 + +0101000 ++6303 199 -6302 199 * +Ed + 1e-07 1 1 0 +1 808 0 -43 -30.1 +2 1842 276 0 -43 -30.1 +2 1843 275 0 -43 -30.1 +4 CN 276 0 275 0 +0 + +0101000 ++6301 199 -6470 0 * +Ed + 1e-07 1 1 0 +1 809 0 -43 -30.1 +2 1844 276 0 -43 -30.1 +2 1845 275 0 -43 -30.1 +4 CN 276 0 275 0 +0 + +0101000 ++6300 199 -6469 0 * +Ed + 1.00000000888178e-07 1 1 0 +1 810 0 3.14159265358979 6.28318530717959 +2 1846 276 0 3.14159265358979 6.28318530717959 +4 C0 276 0 356 0 +2 1847 356 0 3.14159265358979 6.28318530717959 +2 1848 390 200 3.14159265358979 6.28318530717959 +2 1849 358 200 3.14159265358979 6.28318530717959 +0 + +0101000 ++6300 199 -6301 199 * +Ed + 1.00000003108624e-07 1 1 0 +1 811 0 0 3.14159265358979 +2 1850 275 0 0 3.14159265358979 +4 C0 275 0 356 0 +2 1851 356 0 0 3.14159265358979 +2 1852 391 200 0 3.14159265358979 +2 1853 358 200 0 3.14159265358979 +0 + +0101000 ++6301 199 -6300 199 * +Ed + 1e-07 1 1 0 +1 812 0 -4.06170644753603 -3.04627983564482 +2 1854 245 0 -4.06170644753603 -3.04627983564482 +2 1855 247 0 -4.06170644753603 -3.04627983564482 +4 CN 245 0 247 0 +0 + +0101000 ++6500 0 -6299 199 * +Ed + 1e-07 1 1 0 +1 813 0 -4.06170644753603 -3.04627983564482 +2 1856 245 0 -4.06170644753603 -3.04627983564482 +2 1857 247 0 -4.06170644753603 -3.04627983564482 +4 CN 245 0 247 0 +0 + +0101000 ++6501 0 -6298 199 * +Ed + 1.00000014210855e-07 1 1 0 +1 814 0 2.64159265359188 5.78318530718167 +2 1858 245 0 2.64159265359188 5.78318530718167 +4 C0 245 0 356 0 +2 1859 356 0 2.64159265359188 5.78318530718167 +2 1860 392 200 2.64159265359188 5.78318530718167 +2 1861 358 200 2.64159265359188 5.78318530718167 +0 + +0101000 ++6299 199 -6298 199 * +Ed + 1.00000003552714e-07 1 1 0 +1 815 0 5.78318530718167 8.92477796077147 +2 1862 247 0 5.78318530718167 8.92477796077147 +4 C0 247 0 356 0 +2 1863 356 0 5.78318530718167 8.92477796077147 +2 1864 393 200 5.78318530718167 8.92477796077147 +2 1865 358 200 5.78318530718167 8.92477796077147 +0 + +0101000 ++6298 199 -6299 199 * +Ed + 1e-07 1 1 0 +1 816 0 3.36936457992371 6.02216841770877 +2 1866 394 0 3.36936457992371 6.02216841770877 +4 C0 394 0 395 0 +2 1867 395 0 3.36936457992371 6.02216841770877 +0 + +0101000 ++6297 0 -6296 0 * +Ed + 1.40961161397861e-05 1 1 0 +1 817 0 -3 3 +2 1868 394 0 -3 3 +2 1869 396 0 -3 3 +4 G1 394 0 396 0 +0 + +0101000 ++6295 0 -6297 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 818 0 3.36936457992371 6.02216841770877 +2 1870 394 0 3.36936457992371 6.02216841770877 +4 C0 394 0 356 0 +2 1871 356 0 3.36936457992371 6.02216841770877 +2 1872 358 200 3.36936457992371 6.02216841770877 +0 + +0101000 ++6295 0 -6294 0 * +Ed + 8.25197284423225e-06 1 1 0 +1 819 0 -3 3 +2 1873 394 0 -3 3 +2 1874 397 0 -3 3 +4 G1 394 0 397 0 +0 + +0101000 ++6294 0 -6296 0 * +Ed + 1e-07 1 1 0 +1 820 0 0.261014556239196 1.57080350359134 +2 1875 397 0 0.261014556239196 1.57080350359134 +4 C0 397 0 395 0 +2 1876 395 0 0.261014556239196 1.57080350359134 +0 + +0101000 ++6296 0 -6293 0 * +Ed + 1.50991509780834e-06 1 1 0 +1 821 0 -3 3 +2 1877 397 0 -3 3 +4 G1 397 0 398 0 +0 + +0101000 ++6293 0 -6292 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 822 0 0.261014556239196 1.57080350359134 +2 1878 397 0 0.261014556239196 1.57080350359134 +4 C0 397 0 356 0 +2 1879 356 0 0.261014556239196 1.57080350359134 +2 1880 358 200 0.261014556239196 1.57080350359134 +0 + +0101000 ++6294 0 -6292 0 * +Ed + 1.47353993359151e-05 1 1 0 +1 823 0 -3 3 +2 1881 399 0 -3 3 +2 1882 400 0 -3 3 +4 G1 399 0 400 0 +0 + +0101000 ++6291 0 -6290 0 * +Ed + 1e-07 1 1 0 +1 824 0 4.97340472328349 7.62620808526193 +2 1883 399 0 4.97340472328349 7.62620808526193 +4 C0 399 0 395 0 +2 1884 395 0 4.97340472328349 7.62620808526193 +0 + +0101000 ++6289 0 -6290 0 * +Ed + 2.41813512096272e-06 1 1 0 +1 825 0 -3 3 +2 1885 399 0 -3 3 +2 1886 401 0 -3 3 +4 G1 399 0 401 0 +0 + +0101000 ++6288 0 -6289 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 826 0 4.97340472328349 7.62620808526193 +2 1887 399 0 4.97340472328349 7.62620808526193 +4 C0 399 0 356 0 +2 1888 356 0 4.97340472328349 7.62620808526193 +2 1889 358 200 4.97340472328349 7.62620808526193 +0 + +0101000 ++6288 0 -6291 0 * +Ed + 2.23812238144012e-06 1 1 0 +1 827 0 -3 3 +2 1890 401 0 -3 3 +4 G1 401 0 402 0 +0 + +0101000 ++6287 0 -6286 0 * +Ed + 1e-07 1 1 0 +1 828 0 4.71238684952582 6.02216753358045 +2 1891 401 0 4.71238684952582 6.02216753358045 +4 C0 401 0 395 0 +2 1892 395 0 4.71238684952582 6.02216753358045 +0 + +0101000 ++6287 0 -6289 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 829 0 4.71238684952582 6.02216753358045 +2 1893 401 0 4.71238684952582 6.02216753358045 +4 C0 401 0 356 0 +2 1894 356 0 4.71238684952582 6.02216753358045 +2 1895 358 200 4.71238684952582 6.02216753358045 +0 + +0101000 ++6286 0 -6288 0 * +Ed + 1e-07 1 1 0 +1 830 0 -9.112829280824 9.112829280866 +4 C0 402 0 395 0 +2 1896 395 0 -9.112829280824 9.112829280866 +0 + +0101000 ++6285 0 -6287 0 * +Ed + 1e-07 1 1 0 +1 831 0 -3 3 +2 1897 403 0 -3 3 +4 G1 402 0 403 0 +0 + +0101000 ++6285 0 -6284 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 832 0 -9.112829280824 9.112829280866 +4 C0 402 0 356 0 +2 1898 356 0 -9.112829280824 9.112829280866 +2 1899 358 200 -9.112829280824 9.112829280866 +0 + +0101000 ++6284 0 -6286 0 * +Ed + 4.85179791956173e-05 1 1 0 +1 833 0 -3 3 +2 1900 403 0 -3 3 +2 1901 404 0 -3 3 +4 G1 403 0 404 0 +0 + +0101000 ++6283 0 -6282 0 * +Ed + 1e-07 1 1 0 +1 834 0 5.62339632756916 6.28318555497329 +2 1902 403 0 5.62339632756916 6.28318555497329 +4 C0 403 0 395 0 +2 1903 395 0 5.62339632756916 6.28318555497329 +0 + +0101000 ++6283 0 -6285 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 835 0 5.62339632756916 6.28318555497329 +2 1904 403 0 5.62339632756916 6.28318555497329 +4 C0 403 0 356 0 +2 1905 356 0 5.62339632756916 6.28318555497329 +2 1906 358 200 5.62339632756916 6.28318555497329 +0 + +0101000 ++6282 0 -6284 0 * +Ed + 1e-07 1 1 0 +1 836 0 5.76968060598598 8.51377241120863 +2 1907 404 0 5.76968060598598 8.51377241120863 +4 C0 404 0 395 0 +2 1908 395 0 5.76968060598598 8.51377241120863 +0 + +0101000 ++6281 0 -6283 0 * +Ed + 9.78915945777831e-05 1 1 0 +1 837 0 -3 3 +2 1909 404 0 -3 3 +2 1910 405 0 -3 3 +4 G1 404 0 405 0 +0 + +0101000 ++6280 0 -6281 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 838 0 5.76968060598598 8.51377241120863 +2 1911 404 0 5.76968060598598 8.51377241120863 +4 C0 404 0 356 0 +2 1912 356 0 5.76968060598598 8.51377241120863 +2 1913 358 200 5.76968060598598 8.51377241120863 +0 + +0101000 ++6280 0 -6282 0 * +Ed + 1e-07 1 1 0 +1 839 0 2.26786938450668 4.19889026528999 +2 1914 405 0 2.26786938450668 4.19889026528999 +4 C0 405 0 395 0 +2 1915 395 0 2.26786938450668 4.19889026528999 +0 + +0101000 ++6279 0 -6281 0 * +Ed + 3.57702388541758e-06 1 1 0 +1 840 0 -3 3 +2 1916 405 0 -3 3 +2 1917 406 0 -3 3 +4 G1 405 0 406 0 +0 + +0101000 ++6278 0 -6279 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 841 0 2.26786938450668 4.19889026528999 +2 1918 405 0 2.26786938450668 4.19889026528999 +4 C0 405 0 356 0 +2 1919 356 0 2.26786938450668 4.19889026528999 +2 1920 358 200 2.26786938450668 4.19889026528999 +0 + +0101000 ++6278 0 -6280 0 * +Ed + 2.12502128371508e-07 1 1 0 +1 842 0 -3 3 +2 1921 406 0 -3 3 +4 G1 406 0 407 0 +0 + +0101000 ++6277 0 -6276 0 * +Ed + 1e-07 1 1 0 +1 843 0 3.14159191774445 4.01532011888745 +2 1922 406 0 3.14159191774445 4.01532011888745 +4 C0 406 0 395 0 +2 1923 395 0 3.14159191774445 4.01532011888745 +0 + +0101000 ++6277 0 -6279 0 * +Ed + 1.00000021316282e-07 1 1 0 +1 844 0 3.14159191774445 4.01532011888745 +2 1924 406 0 3.14159191774445 4.01532011888745 +4 C0 406 0 356 0 +2 1925 356 0 3.14159191774445 4.01532011888745 +2 1926 358 200 3.14159191774445 4.01532011888745 +0 + +0101000 ++6276 0 -6278 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 845 0 -5.9988333129 5.99883331295 +4 C0 407 0 356 0 +2 1927 356 0 -5.9988333129 5.99883331295 +2 1928 358 200 -5.9988333129 5.99883331295 +0 + +0101000 ++6276 0 -6275 0 * +Ed + 1e-07 1 1 0 +1 846 0 -5.9988333129 5.99883331295 +4 C0 407 0 395 0 +2 1929 395 0 -5.9988333129 5.99883331295 +0 + +0101000 ++6277 0 -6274 0 * +Ed + 2.05688140848502e-06 1 1 0 +1 847 0 -3 3 +2 1930 408 0 -3 3 +4 G1 407 0 408 0 +0 + +0101000 ++6274 0 -6275 0 * +Ed + 2.61637537467713e-06 1 1 0 +1 848 0 -3 3 +2 1931 408 0 -3 3 +2 1932 409 0 -3 3 +4 G1 408 0 409 0 +0 + +0101000 ++6273 0 -6272 0 * +Ed + 1e-07 1 1 0 +1 849 0 0.26101778683788 1.57079847327706 +2 1933 408 0 0.26101778683788 1.57079847327706 +4 C0 408 0 395 0 +2 1934 395 0 0.26101778683788 1.57079847327706 +0 + +0101000 ++6273 0 -6274 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 850 0 0.26101778683788 1.57079847327706 +2 1935 408 0 0.26101778683788 1.57079847327706 +4 C0 408 0 356 0 +2 1936 356 0 0.26101778683788 1.57079847327706 +2 1937 358 200 0.26101778683788 1.57079847327706 +0 + +0101000 ++6272 0 -6275 0 * +Ed + 1e-07 1 1 0 +1 851 0 1.79856987679419 4.45137323575428 +2 1938 409 0 1.79856987679419 4.45137323575428 +4 C0 409 0 395 0 +2 1939 395 0 1.79856987679419 4.45137323575428 +0 + +0101000 ++6271 0 -6273 0 * +Ed + 1.4535112141792e-05 1 1 0 +1 852 0 -3 3 +2 1940 409 0 -3 3 +2 1941 410 0 -3 3 +4 G1 409 0 410 0 +0 + +0101000 ++6270 0 -6271 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 853 0 1.79856987679419 4.45137323575428 +2 1942 409 0 1.79856987679419 4.45137323575428 +4 C0 409 0 356 0 +2 1943 356 0 1.79856987679419 4.45137323575428 +2 1944 358 200 1.79856987679419 4.45137323575428 +0 + +0101000 ++6270 0 -6272 0 * +Ed + 1e-07 1 1 0 +1 854 0 -5.9988333129 5.99883331295 +4 C0 398 0 395 0 +2 1945 395 0 -5.9988333129 5.99883331295 +0 + +0101000 ++6269 0 -6293 0 * +Ed + 2.04518801056886e-06 1 1 0 +1 855 0 -3 3 +2 1946 411 0 -3 3 +4 G1 398 0 411 0 +0 + +0101000 ++6268 0 -6269 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 856 0 -5.9988333129 5.99883331295 +4 C0 398 0 356 0 +2 1947 356 0 -5.9988333129 5.99883331295 +2 1948 358 200 -5.9988333129 5.99883331295 +0 + +0101000 ++6268 0 -6292 0 * +Ed + 1e-07 1 1 0 +1 857 0 3.14159880502311 4.01531527702699 +2 1949 411 0 3.14159880502311 4.01531527702699 +4 C0 411 0 395 0 +2 1950 395 0 3.14159880502311 4.01531527702699 +0 + +0101000 ++6269 0 -6267 0 * +Ed + 3.89399877296503e-06 1 1 0 +1 858 0 -3 3 +2 1951 411 0 -3 3 +2 1952 412 0 -3 3 +4 G1 411 0 412 0 +0 + +0101000 ++6267 0 -6266 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 859 0 3.14159880502311 4.01531527702699 +2 1953 411 0 3.14159880502311 4.01531527702699 +4 C0 411 0 356 0 +2 1954 356 0 3.14159880502311 4.01531527702699 +2 1955 358 200 3.14159880502311 4.01531527702699 +0 + +0101000 ++6268 0 -6266 0 * +Ed + 1e-07 1 1 0 +1 860 0 2.26786873982048 4.19889010491378 +2 1956 412 0 2.26786873982048 4.19889010491378 +4 C0 412 0 395 0 +2 1957 395 0 2.26786873982048 4.19889010491378 +0 + +0101000 ++6267 0 -6265 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 861 0 2.26786873982048 4.19889010491378 +2 1958 412 0 2.26786873982048 4.19889010491378 +4 C0 412 0 356 0 +2 1959 356 0 2.26786873982048 4.19889010491378 +2 1960 358 200 2.26786873982048 4.19889010491378 +0 + +0101000 ++6266 0 -6264 0 * +Ed + 0.000140504468508401 1 1 0 +1 862 0 -3 3 +2 1961 412 0 -3 3 +2 1962 413 0 -3 3 +4 G1 412 0 413 0 +0 + +0101000 ++6264 0 -6265 0 * +Ed + 1e-07 1 1 0 +1 863 0 5.76968031548267 8.51377368083406 +2 1963 413 0 5.76968031548267 8.51377368083406 +4 C0 413 0 395 0 +2 1964 395 0 5.76968031548267 8.51377368083406 +0 + +0101000 ++6265 0 -6263 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 864 0 5.76968031548267 8.51377368083406 +2 1965 413 0 5.76968031548267 8.51377368083406 +4 C0 413 0 356 0 +2 1966 356 0 5.76968031548267 8.51377368083406 +2 1967 358 200 5.76968031548267 8.51377368083406 +0 + +0101000 ++6264 0 -6262 0 * +Ed + 7.59962679524456e-05 1 1 0 +1 865 0 -3 3 +2 1968 413 0 -3 3 +2 1969 414 0 -3 3 +4 G1 413 0 414 0 +0 + +0101000 ++6262 0 -6263 0 * +Ed + 1e-07 1 1 0 +1 866 0 5.62340191545187 6.28317744086674 +2 1970 414 0 5.62340191545187 6.28317744086674 +4 C0 414 0 395 0 +2 1971 395 0 5.62340191545187 6.28317744086674 +0 + +0101000 ++6263 0 -6261 0 * +Ed + 1.70641706663236e-06 1 1 0 +1 867 0 -3 3 +2 1972 414 0 -3 3 +4 G1 414 0 415 0 +0 + +0101000 ++6261 0 -6260 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 868 0 5.62340191545187 6.28317744086674 +2 1973 414 0 5.62340191545187 6.28317744086674 +4 C0 414 0 356 0 +2 1974 356 0 5.62340191545187 6.28317744086674 +2 1975 358 200 5.62340191545187 6.28317744086674 +0 + +0101000 ++6262 0 -6260 0 * +Ed + 1.03725141244299e-06 1 1 0 +1 869 0 -3 3 +2 1976 416 0 -3 3 +4 G1 415 0 416 0 +0 + +0101000 ++6259 0 -6258 0 * +Ed + 1e-07 1 1 0 +1 870 0 -9.112829280834 9.112829280866 +4 C0 415 0 356 0 +2 1977 356 0 -9.112829280834 9.112829280866 +2 1978 358 200 -9.112829280834 9.112829280866 +0 + +0101000 ++6260 0 -6259 0 * +Ed + 1e-07 1 1 0 +1 871 0 -9.112829280834 9.112829280866 +4 C0 415 0 395 0 +2 1979 395 0 -9.112829280834 9.112829280866 +0 + +0101000 ++6261 0 -6258 0 * +Ed + 1e-07 1 1 0 +1 872 0 4.71238219726724 6.02217051383227 +2 1980 416 0 4.71238219726724 6.02217051383227 +4 C0 416 0 395 0 +2 1981 395 0 4.71238219726724 6.02217051383227 +0 + +0101000 ++6258 0 -6257 0 * +Ed + 7.88856919964979e-06 1 1 0 +1 873 0 -3 3 +2 1982 416 0 -3 3 +2 1983 417 0 -3 3 +4 G1 416 0 417 0 +0 + +0101000 ++6257 0 -6256 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 874 0 4.71238219726724 6.02217051383227 +2 1984 416 0 4.71238219726724 6.02217051383227 +4 C0 416 0 356 0 +2 1985 356 0 4.71238219726724 6.02217051383227 +2 1986 358 200 4.71238219726724 6.02217051383227 +0 + +0101000 ++6259 0 -6256 0 * +Ed + 1e-07 1 1 0 +1 875 0 4.97340586833326 7.62620970947703 +2 1987 417 0 4.97340586833326 7.62620970947703 +4 C0 417 0 395 0 +2 1988 395 0 4.97340586833326 7.62620970947703 +0 + +0101000 ++6257 0 -6255 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 876 0 4.97340586833326 7.62620970947703 +2 1989 417 0 4.97340586833326 7.62620970947703 +4 C0 417 0 356 0 +2 1990 356 0 4.97340586833326 7.62620970947703 +2 1991 358 200 4.97340586833326 7.62620970947703 +0 + +0101000 ++6256 0 -6254 0 * +Ed + 1.45373227877628e-05 1 1 0 +1 877 0 -3 3 +2 1992 417 0 -3 3 +2 1993 418 0 -3 3 +4 G1 417 0 418 0 +0 + +0101000 ++6254 0 -6255 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 878 0 4.94016157096724 5.8534078363234 +2 1994 418 0 4.94016157096724 5.8534078363234 +4 C0 418 0 356 0 +2 1995 356 0 4.94016157096724 5.8534078363234 +2 1996 358 200 4.94016157096724 5.8534078363234 +0 + +0101000 ++6254 0 -6253 0 * +Ed + 1e-07 1 1 0 +1 879 0 4.94016157096724 5.85340783632177 +2 1997 418 0 4.94016157096724 5.85340783632177 +4 C0 418 0 395 0 +2 1998 395 0 4.94016157096724 5.85340783632177 +0 + +0101000 ++6255 0 -6252 0 * +Ed + 1e-07 1 1 0 +1 880 0 -3 3 +2 1999 418 0 -3 3 +2 2000 419 0 -3 3 +4 G1 418 0 419 0 +0 + +0101000 ++6252 0 -6253 0 * +Ed + 1e-07 1 1 0 +1 881 0 2.00057379765641 3.14159789052979 +2 2001 419 0 2.00057379765641 3.14159789052979 +4 C0 419 0 395 0 +2 2002 395 0 2.00057379765641 3.14159789052979 +0 + +0101000 ++6252 0 -6251 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 882 0 2.00057379765869 3.14159789052979 +2 2003 419 0 2.00057379765869 3.14159789052979 +4 C0 419 0 356 0 +2 2004 356 0 2.00057379765869 3.14159789052979 +2 2005 358 200 2.00057379765869 3.14159789052979 +0 + +0101000 ++6253 0 -6250 0 * +Ed + 1e-07 1 1 0 +1 883 0 -3 3 +2 2006 419 0 -3 3 +2 2007 420 0 -3 3 +4 C1 419 0 420 0 +0 + +0101000 ++6250 0 -6251 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 884 0 3.36935871814427 4.28261523415869 +2 2008 400 0 3.36935871814427 4.28261523415869 +4 C0 400 0 356 0 +2 2009 356 0 3.36935871814427 4.28261523415869 +2 2010 358 200 3.36935871814427 4.28261523415869 +0 + +0101000 ++6291 0 -6249 0 * +Ed + 1e-07 1 1 0 +1 885 0 3.36935871814427 4.28261523415942 +2 2011 400 0 3.36935871814427 4.28261523415942 +4 C0 400 0 395 0 +2 2012 395 0 3.36935871814427 4.28261523415942 +0 + +0101000 ++6290 0 -6248 0 * +Ed + 1e-07 1 1 0 +1 886 0 -3 3 +2 2013 400 0 -3 3 +2 2014 420 0 -3 3 +4 G1 400 0 420 0 +0 + +0101000 ++6248 0 -6249 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 887 0 3.14159265358979 5.14216272662296 +2 2015 420 0 3.14159265358979 5.14216272662296 +4 C0 420 0 356 0 +2 2016 356 0 3.14159265358979 5.14216272662296 +2 2017 358 200 3.14159265358979 5.14216272662296 +0 + +0101000 ++6250 0 -6249 0 * +Ed + 1e-07 1 1 0 +1 888 0 3.14159265358979 5.1421627266205 +2 2018 420 0 3.14159265358979 5.1421627266205 +4 C0 420 0 395 0 +2 2019 395 0 3.14159265358979 5.1421627266205 +0 + +0101000 ++6251 0 -6248 0 * +Ed + 1e-07 1 1 0 +1 889 0 3.57136993044971 4.48461715389789 +2 2020 396 0 3.57136993044971 4.48461715389789 +4 C0 396 0 395 0 +2 2021 395 0 3.57136993044971 4.48461715389789 +0 + +0101000 ++6247 0 -6297 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 890 0 3.57136993045051 4.48461715389789 +2 2022 396 0 3.57136993045051 4.48461715389789 +4 C0 396 0 356 0 +2 2023 356 0 3.57136993045051 4.48461715389789 +2 2024 358 200 3.57136993045051 4.48461715389789 +0 + +0101000 ++6246 0 -6295 0 * +Ed + 1e-07 1 1 0 +1 891 0 -3 3 +2 2025 396 0 -3 3 +2 2026 421 0 -3 3 +4 G1 396 0 421 0 +0 + +0101000 ++6247 0 -6246 0 * +Ed + 1e-07 1 1 0 +1 892 0 1.5707913744749 2.71181537673332 +2 2027 421 0 1.5707913744749 2.71181537673332 +4 C0 421 0 395 0 +2 2028 395 0 1.5707913744749 2.71181537673332 +0 + +0101000 ++6245 0 -6247 0 * +Ed + 1e-07 1 1 0 +1 893 0 -3 3 +2 2029 421 0 -3 3 +2 2030 422 0 -3 3 +4 C1 421 0 422 0 +0 + +0101000 ++6244 0 -6245 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 894 0 1.5707913744749 2.71181537673445 +2 2031 421 0 1.5707913744749 2.71181537673445 +4 C0 421 0 356 0 +2 2032 356 0 1.5707913744749 2.71181537673445 +2 2033 358 200 1.5707913744749 2.71181537673445 +0 + +0101000 ++6244 0 -6246 0 * +Ed + 0.00112587558913171 1 1 0 +1 895 0 0 19.550105515 +2 2034 410 0 0 19.550105515 +4 C0 356 0 410 0 +2 2035 356 0 0 19.550105515 +2 2036 358 200 0 19.550105515 +0 + +0101000 ++6270 0 -6243 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 896 0 1.14102255594374 3.14159265358979 +2 2037 422 0 1.14102255594374 3.14159265358979 +4 C0 356 0 422 0 +2 2038 356 0 1.14102255594374 3.14159265358979 +2 2039 358 200 1.14102255594374 3.14159265358979 +0 + +0101000 ++6243 0 -6244 0 * +Ed + 1e-07 1 1 0 +1 897 0 2.00057009763912 2.91382659537874 +2 2040 410 0 2.00057009763912 2.91382659537874 +4 C0 410 0 395 0 +2 2041 395 0 2.00057009763912 2.91382659537874 +0 + +0101000 ++6242 0 -6271 0 * +Ed + 1e-07 1 1 0 +1 898 0 -3 3 +2 2042 410 0 -3 3 +2 2043 422 0 -3 3 +4 G1 410 0 422 0 +0 + +0101000 ++6242 0 -6243 0 * +Ed + 1e-07 1 1 0 +1 899 0 1.14102255593934 3.14159265358979 +2 2044 422 0 1.14102255593934 3.14159265358979 +4 C0 395 0 422 0 +2 2045 395 0 1.14102255593934 3.14159265358979 +0 + +0101000 ++6242 0 -6245 0 * +Ed + 1e-07 1 1 0 +1 900 0 -20.5402785278643 20.5402785280463 +4 C0 423 0 360 0 +2 2046 360 0 -20.5402785278643 20.5402785280463 +2 2047 423 0 -20.5402785278643 20.5402785280463 +0 + +0101000 ++6241 0 -6240 0 * +Ed + 1e-07 1 1 0 +1 901 0 -13.75 13.75 +4 C0 423 0 424 0 +2 2048 424 0 -13.75 13.75 +2 2049 423 0 -13.75 13.75 +0 + +0101000 ++6240 0 -6239 0 * +Ed + 1e-07 1 1 0 +1 902 0 -20.5402785278643 20.5402785280463 +4 C0 423 0 301 0 +2 2050 423 0 -20.5402785278643 20.5402785280463 +2 2051 301 0 -20.5402785278643 20.5402785280463 +0 + +0101000 ++6238 0 -6239 0 * +Ed + 1e-07 1 1 0 +1 903 0 -13.75 13.75 +4 C0 423 0 425 0 +2 2052 423 0 -13.75 13.75 +0 + +0101000 ++6241 0 -6238 0 * +Ed + 1e-07 1 1 0 +1 904 0 -4.5000000008 -1.499999997833 +4 C0 423 0 426 0 +2 2053 423 0 -4.5000000008 -1.499999997833 +2 2054 426 0 -4.5000000008 -1.499999997833 +0 + +0101000 ++6237 0 -6236 199 * +Ed + 1.00017114099942e-07 1 1 0 +1 904 0 -1.499999997833 4.50000000129999 +4 C0 423 0 426 0 +2 2053 423 0 -1.499999997833 4.50000000129999 +2 2054 426 0 -1.499999997833 4.50000000129999 +2 2055 427 201 -1.499999997833 4.50000000129999 +0 + +0101000 ++6236 199 -6235 0 * +Ed + 1.00028869351354e-07 1 1 0 +1 905 0 -13.5000021184201 13.5000021183803 +4 C0 423 0 428 0 +2 2056 423 0 -13.5000021184201 13.5000021183803 +2 2057 428 0 -13.5000021184201 13.5000021183803 +2 2058 429 201 -13.5000021184201 13.5000021183803 +0 + +0101000 ++6235 0 -6234 0 * +Ed + 1e-07 1 1 0 +1 906 0 -4.5000000008 -1.49999999806308 +4 C0 423 0 430 0 +2 2059 423 0 -4.5000000008 -1.49999999806308 +2 2060 430 0 -4.5000000008 -1.49999999806308 +0 + +0101000 ++6233 0 -6232 199 * +Ed + 1.00012063134535e-07 1 1 0 +1 906 0 -1.49999999806308 4.50000000129999 +4 C0 423 0 430 0 +2 2059 423 0 -1.49999999806308 4.50000000129999 +2 2060 430 0 -1.49999999806308 4.50000000129999 +2 2061 431 201 -1.49999999806308 4.50000000129999 +0 + +0101000 ++6232 199 -6234 0 * +Ed + 1e-07 1 1 0 +1 907 0 -13.5000021197232 13.5000021197132 +4 C0 423 0 432 0 +2 2062 423 0 -13.5000021197232 13.5000021197132 +2 2063 432 0 -13.5000021197232 13.5000021197132 +0 + +0101000 ++6237 0 -6233 0 * +Ed + 1e-07 1 1 0 +1 908 0 -13.7499999995 13.7500000005 +4 C0 433 0 424 0 +2 2064 424 0 -13.7499999995 13.7500000005 +0 + +0101000 ++6231 0 -6230 0 * +Ed + 1e-07 1 1 0 +1 909 0 -18.94396632212 18.94396632214 +4 C0 433 0 360 0 +2 2065 360 0 -18.94396632212 18.94396632214 +0 + +0101000 ++6229 0 -6231 0 * +Ed + 1e-07 1 1 0 +1 910 0 -13.7499999995 13.7500000005 +4 C0 433 0 434 0 +2 2066 434 0 -13.7499999995 13.7500000005 +0 + +0101000 ++6229 0 -6228 0 * +Ed + 1e-07 1 1 0 +1 911 0 -18.94396632212 18.94396632214 +4 C0 433 0 301 0 +2 2067 301 0 -18.94396632212 18.94396632214 +0 + +0101000 ++6228 0 -6230 0 * +Ed + 1e-07 1 1 0 +1 912 0 -6.0839069559267 6.08390695671222 +4 C0 435 0 301 0 +2 2068 301 0 -6.0839069559267 6.08390695671222 +0 + +0101000 ++6227 0 -6226 0 * +Ed + 1e-07 1 1 0 +1 913 0 -13.75 13.75 +4 C0 435 0 436 0 +2 2069 436 0 -13.75 13.75 +0 + +0101000 ++6225 0 -6227 0 * +Ed + 1e-07 1 1 0 +1 914 0 -6.0839069559267 6.08390695671222 +4 C0 435 0 360 0 +2 2070 360 0 -6.0839069559267 6.08390695671222 +0 + +0101000 ++6225 0 -6224 0 * +Ed + 1e-07 1 1 0 +1 915 0 -13.75 13.75 +4 C0 435 0 437 0 +0 + +0101000 ++6224 0 -6226 0 * +Ed + 1e-07 1 1 0 +1 916 0 -20.7699751372929 20.769975137091 +4 C0 436 0 360 0 +2 2071 360 0 -20.7699751372929 20.769975137091 +2 2072 436 0 -20.7699751372929 20.769975137091 +0 + +0101000 ++6223 0 -6225 0 * +Ed + 1e-07 1 1 0 +1 917 0 -20.7699751372929 20.769975137091 +4 C0 436 0 301 0 +2 2073 436 0 -20.7699751372929 20.769975137091 +2 2074 301 0 -20.7699751372929 20.769975137091 +0 + +0101000 ++6222 0 -6227 0 * +Ed + 1e-07 1 1 0 +1 918 0 -13.75 13.75 +4 C0 436 0 438 0 +2 2075 436 0 -13.75 13.75 +0 + +0101000 ++6223 0 -6222 0 * +Ed + 1e-07 1 1 0 +1 919 0 -4.50000000129999 -1.50000000339446 +4 C0 436 0 439 0 +2 2076 436 0 -4.50000000129999 -1.50000000339446 +2 2077 439 0 -4.50000000129999 -1.50000000339446 +0 + +0101000 ++6221 0 -6220 199 * +Ed + 1.00051996941413e-07 1 1 0 +1 919 0 -1.50000000339446 4.5000000008 +4 C0 436 0 439 0 +2 2076 436 0 -1.50000000339446 4.5000000008 +2 2077 439 0 -1.50000000339446 4.5000000008 +2 2078 440 202 -1.50000000339446 4.5000000008 +0 + +0101000 ++6220 199 -6219 0 * +Ed + 1e-07 1 1 0 +1 920 0 -12.5000019588735 12.5000019590048 +4 C0 436 0 441 0 +2 2079 436 0 -12.5000019588735 12.5000019590048 +2 2080 441 0 -12.5000019588735 12.5000019590048 +0 + +0101000 ++6218 0 -6221 0 * +Ed + 1e-07 1 1 0 +1 921 0 -4.5000000012 -1.49999999980723 +4 C0 436 0 442 0 +2 2081 436 0 -4.5000000012 -1.49999999980723 +2 2082 442 0 -4.5000000012 -1.49999999980723 +0 + +0101000 ++6218 0 -6217 199 * +Ed + 1.00002321866233e-07 1 1 0 +1 921 0 -1.49999999980723 4.50000000089999 +4 C0 436 0 442 0 +2 2081 436 0 -1.49999999980723 4.50000000089999 +2 2082 442 0 -1.49999999980723 4.50000000089999 +2 2083 443 202 -1.49999999980723 4.50000000089999 +0 + +0101000 ++6217 199 -6216 0 * +Ed + 1.00031979752377e-07 1 1 0 +1 922 0 -12.5000019618895 12.5000019618985 +4 C0 436 0 444 0 +2 2084 436 0 -12.5000019618895 12.5000019618985 +2 2085 444 0 -12.5000019618895 12.5000019618985 +2 2086 445 202 -12.5000019618895 12.5000019618985 +0 + +0101000 ++6219 0 -6216 0 * +Ed + 1e-07 1 1 0 +1 923 0 -5.76265920441119 5.76265920531662 +4 C0 438 0 360 0 +2 2087 360 0 -5.76265920441119 5.76265920531662 +0 + +0101000 ++6215 0 -6223 0 * +Ed + 1e-07 1 1 0 +1 924 0 -5.76265920441119 5.76265920531662 +4 C0 438 0 301 0 +2 2088 301 0 -5.76265920441119 5.76265920531662 +0 + +0101000 ++6214 0 -6222 0 * +Ed + 1e-07 1 1 0 +1 925 0 -13.75 13.75 +4 C0 438 0 446 0 +0 + +0101000 ++6215 0 -6214 0 * +Ed + 1e-07 1 1 0 +1 926 0 -23.2784923884453 23.2784923884125 +4 C0 447 0 360 0 +2 2089 360 0 -23.2784923884453 23.2784923884125 +2 2090 447 0 -23.2784923884453 23.2784923884125 +0 + +0101000 ++6213 0 -6212 0 * +Ed + 1e-07 1 1 0 +1 927 0 -13.75 13.75 +4 C0 447 0 448 0 +2 2091 447 0 -13.75 13.75 +0 + +0101000 ++6212 0 -6211 0 * +Ed + 1e-07 1 1 0 +1 928 0 -23.2784923884453 23.2784923884125 +4 C0 447 0 301 0 +2 2092 447 0 -23.2784923884453 23.2784923884125 +2 2093 301 0 -23.2784923884453 23.2784923884125 +0 + +0101000 ++6210 0 -6211 0 * +Ed + 1e-07 1 1 0 +1 929 0 -13.75 13.75 +4 C0 447 0 434 0 +2 2094 434 0 -13.75 13.75 +2 2095 447 0 -13.75 13.75 +0 + +0101000 ++6213 0 -6210 0 * +Ed + 1e-07 1 1 0 +1 930 0 -15.5249247938377 15.5249247938348 +4 C0 447 0 449 0 +2 2096 447 0 -15.5249247938377 15.5249247938348 +2 2097 449 0 -15.5249247938377 15.5249247938348 +0 + +0101000 ++6209 0 -6208 0 * +Ed + 1e-07 1 1 0 +1 931 0 -4.5000000006 4.4999999969 +4 C0 447 0 450 0 +2 2098 447 0 -4.5000000006 4.4999999969 +2 2099 450 0 -4.5000000006 4.4999999969 +0 + +0101000 ++6207 0 -6209 0 * +Ed + 1e-07 1 1 0 +1 932 0 -15.5249247976207 15.5249247975182 +4 C0 447 0 451 0 +2 2100 447 0 -15.5249247976207 15.5249247975182 +2 2101 451 0 -15.5249247976207 15.5249247975182 +0 + +0101000 ++6207 0 -6206 0 * +Ed + 1e-07 1 1 0 +1 933 0 -4.4999999992 4.4999999983 +4 C0 447 0 452 0 +2 2102 447 0 -4.4999999992 4.4999999983 +2 2103 452 0 -4.4999999992 4.4999999983 +0 + +0101000 ++6206 0 -6208 0 * +Ed + 1e-07 1 1 0 +1 934 0 -50.5308763546284 50.5308763542153 +4 C0 434 0 360 0 +2 2104 434 0 -50.5308763546284 50.5308763542153 +2 2105 360 0 -50.5308763546284 50.5308763542153 +0 + +0101000 ++6229 0 -6213 0 * +Ed + 1e-07 1 1 0 +1 935 0 -50.5308763546284 50.5308763542153 +4 C0 434 0 301 0 +2 2106 434 0 -50.5308763546284 50.5308763542153 +2 2107 301 0 -50.5308763546284 50.5308763542153 +0 + +0101000 ++6228 0 -6210 0 * +Ed + 1e-07 1 1 0 +1 936 0 -51.6599504805506 51.6599504803661 +4 C0 424 0 301 0 +2 2108 424 0 -51.6599504805506 51.6599504803661 +2 2109 301 0 -51.6599504805506 51.6599504803661 +0 + +0101000 ++6239 0 -6230 0 * +Ed + 1e-07 1 1 0 +1 937 0 -51.6599504805506 51.6599504803661 +4 C0 424 0 360 0 +2 2110 424 0 -51.6599504805506 51.6599504803661 +2 2111 360 0 -51.6599504805506 51.6599504803661 +0 + +0101000 ++6240 0 -6231 0 * +Ed + 1e-07 1 1 0 +1 938 0 -5.9999999975 3 +2 2112 453 0 -5.9999999975 3 +2 2113 454 0 -5.9999999975 3 +4 CN 453 0 454 0 +0 + +0101000 ++6205 0 -6204 0 * +Ed + 1e-07 1 1 0 +1 939 0 5.833823433145 6.55783945612737 +2 2114 453 0 5.833823433145 6.55783945612737 +4 C0 453 0 449 0 +2 2115 449 0 5.833823433145 6.55783945612737 +0 + +0101000 ++6203 0 -6204 0 * +Ed + 1e-07 1 1 0 +1 940 0 -5.9999999975 3 +2 2116 453 0 -5.9999999975 3 +2 2117 455 0 -5.9999999975 3 +4 C0 453 0 455 0 +0 + +0101000 ++6202 0 -6203 0 * +Ed + 1e-07 1 1 0 +1 941 0 5.833823433145 6.55783945554926 +2 2118 453 0 5.833823433145 6.55783945554926 +4 C0 453 0 451 0 +2 2119 451 0 5.833823433145 6.55783945554926 +0 + +0101000 ++6202 0 -6205 0 * +Ed + 1e-07 1 1 0 +1 942 0 6.0079564744714 6.71862335544013 +2 2120 455 0 6.0079564744714 6.71862335544013 +4 C0 455 0 451 0 +2 2121 451 0 6.0079564744714 6.71862335544013 +0 + +0101000 ++6202 0 -6201 0 * +Ed + 1e-07 1 1 0 +1 943 0 5.92215045966731 6.0079564744714 +2 2122 455 0 5.92215045966731 6.0079564744714 +4 C0 455 0 449 0 +2 2123 449 0 5.92215045966731 6.0079564744714 +0 + +0101000 ++6200 0 -6203 0 * +Ed + 1e-07 1 1 0 +1 944 0 -6.0000000011 12.0000000031 +2 2124 455 0 -6.0000000011 12.0000000031 +4 G1 455 0 456 0 +2 2125 456 0 -6.0000000011 12.0000000031 +0 + +0101000 ++6199 0 -6200 0 * +Ed + 1e-07 1 1 0 +1 945 0 5.92215045975281 9.06374311335074 +2 2126 455 0 5.92215045975281 9.06374311335074 +4 C0 455 0 301 0 +2 2127 301 0 5.92215045975281 9.06374311335074 +0 + +0101000 ++6199 0 -6198 0 * +Ed + 1e-07 1 1 0 +1 946 0 -6.0000000011 3.0000000056 +2 2128 455 0 -6.0000000011 3.0000000056 +4 G1 455 0 457 0 +2 2129 457 0 -6.0000000011 3.0000000056 +0 + +0101000 ++6198 0 -6197 0 * +Ed + 1e-07 1 1 0 +1 947 0 0.435438048260542 2.78055780620983 +2 2130 455 0 0.435438048260542 2.78055780620983 +4 C0 455 0 451 0 +2 2131 451 0 0.435438048260542 2.78055780620983 +0 + +0101000 ++6201 0 -6197 0 * +Ed + 1e-07 1 1 0 +1 948 0 -4.4999999985 4.4999999993 +2 2132 458 0 -4.4999999985 4.4999999993 +4 G1 457 0 458 0 +2 2133 457 0 -4.4999999985 4.4999999993 +0 + +0101000 ++6196 0 -6195 0 * +Ed + 1e-07 1 1 0 +1 949 0 -2.49998617245052 2.49998617254683 +4 C0 457 0 301 0 +2 2134 301 0 -2.49998617245052 2.49998617254683 +2 2135 457 0 -2.49998617245052 2.49998617254683 +0 + +0101000 ++6196 0 -6198 0 * +Ed + 1e-07 1 1 0 +1 950 0 -2.49998617159612 2.49998617295637 +4 C0 457 0 451 0 +2 2136 457 0 -2.49998617159612 2.49998617295637 +2 2137 451 0 -2.49998617159612 2.49998617295637 +0 + +0101000 ++6195 0 -6197 0 * +Ed + 1e-07 1 1 0 +1 951 0 2.78055540160346 5.83382343316794 +2 2138 458 0 2.78055540160346 5.83382343316794 +4 C0 458 0 451 0 +2 2139 451 0 2.78055540160346 5.83382343316794 +0 + +0101000 ++6195 0 -6194 0 * +Ed + 1e-07 1 1 0 +1 952 0 3.0000000056 5.99996996293853 +2 2140 458 0 3.0000000056 5.99996996293853 +2 2141 459 0 3.0000000056 5.99996996293853 +4 C0 458 0 459 0 +0 + +0101000 ++6194 0 -6193 199 * +Ed + 0.294457914476126 1 1 0 +1 953 205 6.93276433842993 7.03381195998279 +2 2142 460 205 6.93276433842993 7.03381195998279 +2 2143 461 205 6.93276433842993 7.03381195998279 +2 2144 462 205 6.93276433842993 7.03381195998279 +2 2145 462 206 6.93276433842993 7.03381195998279 +2 2146 463 205 6.93276433842993 7.03381195998279 +2 2147 463 207 6.93276433842993 7.03381195998279 +2 2148 458 208 6.93276433842993 7.03381195998279 +0 + +0101000 ++6193 205 -6192 205 * +Ed + 0.35309100850225 1 1 0 +1 954 0 3.9999685840452 5.99996855819614 +2 2149 458 0 3.9999685840452 5.99996855819614 +4 G1 458 0 456 0 +2 2150 456 0 3.9999685840452 5.99996855819614 +2 2151 464 199 3.9999685840452 5.99996855819614 +2 2152 462 199 3.9999685840452 5.99996855819614 +0 + +0101000 ++6191 199 -6192 199 * +Ed + 1e-07 1 1 0 +1 954 0 -5.999999996 3.9999685840452 +2 2149 458 0 -5.999999996 3.9999685840452 +4 G1 458 0 456 0 +2 2150 456 0 -5.999999996 3.9999685840452 +0 + +0101000 ++6190 0 -6191 199 * +Ed + 5.66660184374918e-05 1 1 0 +1 955 0 -18.0641577569 18.0641577569 +2 2153 458 0 -18.0641577569 18.0641577569 +4 C0 458 0 301 0 +2 2154 301 0 -18.0641577569 18.0641577569 +0 + +0101000 ++6196 0 -6190 0 * +Ed + 1e-07 1 1 0 +1 952 0 5.99996996293853 12.0000000031 +2 2140 458 0 5.99996996293853 12.0000000031 +2 2141 459 0 5.99996996293853 12.0000000031 +4 C0 458 0 459 0 +0 + +0101000 ++6193 199 -6189 0 * +Ed + 1e-07 1 1 0 +1 956 0 5.83382343279854 5.92214805518512 +2 2155 458 0 5.83382343279854 5.92214805518512 +4 C0 458 0 449 0 +2 2156 449 0 5.83382343279854 5.92214805518512 +0 + +0101000 ++6189 0 -6188 0 * +Ed + 1e-07 1 1 0 +1 954 0 6.06996855729142 12.0000000031 +2 2149 458 0 6.06996855729142 12.0000000031 +4 G1 458 0 456 0 +2 2150 456 0 6.06996855729142 12.0000000031 +0 + +0101000 ++6192 199 -6188 0 * +Ed + 1e-07 1 1 0 +1 957 0 -2.50000691186715 2.50002073720383 +4 C0 456 0 449 0 +2 2157 456 0 -2.50000691186715 2.50002073720383 +2 2158 449 0 -2.50000691186715 2.50002073720383 +0 + +0101000 ++6200 0 -6188 0 * +Ed + 1e-07 1 1 0 +1 958 0 -2.50000000107317 2.50002764898108 +4 C0 456 0 301 0 +2 2159 456 0 -2.50000000107317 2.50002764898108 +2 2160 301 0 -2.50000000107317 2.50002764898108 +0 + +0101000 ++6199 0 -6190 0 * +Ed + 1e-07 1 1 0 +1 959 0 -6.0000000038 2.9999999937 +2 2161 459 0 -6.0000000038 2.9999999937 +4 G1 459 0 450 0 +2 2162 450 0 -6.0000000038 2.9999999937 +0 + +0101000 ++6187 0 -6186 0 * +Ed + 1e-07 1 1 0 +1 960 0 4.81444151770099 6.00795647526926 +2 2163 459 0 4.81444151770099 6.00795647526926 +4 C0 459 0 451 0 +2 2164 451 0 4.81444151770099 6.00795647526926 +0 + +0101000 ++6187 0 -6194 0 * +Ed + 1e-07 1 1 0 +1 961 0 4.81444151764226 6.00795647490636 +2 2165 459 0 4.81444151764226 6.00795647490636 +4 C0 459 0 449 0 +2 2166 449 0 4.81444151764226 6.00795647490636 +0 + +0101000 ++6186 0 -6189 0 * +Ed + 1e-07 1 1 0 +1 962 0 -6.0000000019 2.9999999956 +2 2167 454 0 -6.0000000019 2.9999999956 +4 G1 454 0 452 0 +2 2168 452 0 -6.0000000019 2.9999999956 +0 + +0101000 ++6185 0 -6184 0 * +Ed + 1e-07 1 1 0 +1 963 0 0.274654147941844 1.67284886365817 +2 2169 454 0 0.274654147941844 1.67284886365817 +4 C0 454 0 449 0 +2 2170 449 0 0.274654147941844 1.67284886365817 +0 + +0101000 ++6204 0 -6184 0 * +Ed + 1e-07 1 1 0 +1 964 0 0.27465414735536 1.6728488636203 +2 2171 454 0 0.27465414735536 1.6728488636203 +4 C0 454 0 451 0 +2 2172 451 0 0.27465414735536 1.6728488636203 +0 + +0101000 ++6205 0 -6185 0 * +Ed + 1e-07 1 1 0 +1 965 0 -13.9348600060298 13.9348600042042 +4 C0 452 0 449 0 +2 2173 452 0 -13.9348600060298 13.9348600042042 +2 2174 449 0 -13.9348600060298 13.9348600042042 +0 + +0101000 ++6184 0 -6208 0 * +Ed + 1e-07 1 1 0 +1 966 0 -13.9348600062664 13.9348600058426 +4 C0 452 0 451 0 +2 2175 452 0 -13.9348600062664 13.9348600058426 +2 2176 451 0 -13.9348600062664 13.9348600058426 +0 + +0101000 ++6185 0 -6206 0 * +Ed + 1e-07 1 1 0 +1 967 0 -11.9137013844669 11.9137013840588 +4 C0 450 0 451 0 +2 2177 450 0 -11.9137013844669 11.9137013840588 +2 2178 451 0 -11.9137013844669 11.9137013840588 +0 + +0101000 ++6187 0 -6207 0 * +Ed + 1e-07 1 1 0 +1 968 0 -11.9137013837916 11.9137013838755 +4 C0 450 0 449 0 +2 2179 450 0 -11.9137013837916 11.9137013838755 +2 2180 449 0 -11.9137013837916 11.9137013838755 +0 + +0101000 ++6186 0 -6209 0 * +Ed + 0.000630831706414056 1 1 0 +1 969 0 4.45248174893 10.7356670561 +2 2181 465 0 4.45248174893 10.7356670561 +4 C0 451 0 465 0 +2 2182 451 0 4.45248174893 10.7356670561 +2 2183 466 209 4.45248174893 10.7356670561 +0 + +0101000 ++6183 0 -6182 0 * +Ed + 0.000630831724787482 1 1 0 +1 970 0 10.7356670561 17.0188523633 +2 2184 467 0 10.7356670561 17.0188523633 +4 C0 451 0 467 0 +2 2185 451 0 10.7356670561 17.0188523633 +2 2186 468 209 10.7356670561 17.0188523633 +0 + +0101000 ++6182 0 -6183 0 * +Ed + 0.000630831706472574 1 1 0 +1 971 0 0.976811777701 7.25999708488 +2 2187 469 0 0.976811777701 7.25999708488 +4 C0 449 0 469 0 +2 2188 449 0 0.976811777701 7.25999708488 +2 2189 466 209 0.976811777701 7.25999708488 +0 + +0101000 ++6181 0 -6180 0 * +Ed + 0.000630831725266824 1 1 0 +1 972 0 7.25999708488 13.5431823921 +2 2190 470 0 7.25999708488 13.5431823921 +4 C0 449 0 470 0 +2 2191 449 0 7.25999708488 13.5431823921 +2 2192 468 209 7.25999708488 13.5431823921 +0 + +0101000 ++6180 0 -6181 0 * +Ed + 2.52731547348927e-05 1 1 0 +1 973 0 8.43981677907 24.147780047 +2 2193 471 0 8.43981677907 24.147780047 +4 C0 449 0 471 0 +2 2194 449 0 8.43981677907 24.147780047 +2 2195 472 210 8.43981677907 24.147780047 +0 + +0101000 ++6179 0 -6178 0 * +Ed + 2.52727898884944e-05 1 1 0 +1 974 0 24.147780047 39.855743315 +2 2196 473 0 24.147780047 39.855743315 +4 C0 449 0 473 0 +2 2197 449 0 24.147780047 39.855743315 +2 2198 474 210 24.147780047 39.855743315 +0 + +0101000 ++6178 0 -6179 0 * +Ed + 1.03445088930799e-07 1 1 0 +1 975 0 8.9999999954 18.4999999997 +2 2199 473 0 8.9999999954 18.4999999997 +2 2200 471 0 8.9999999954 18.4999999997 +4 CN 473 0 471 0 +2 2201 472 210 8.9999999954 18.4999999997 +2 2202 474 210 8.9999999954 18.4999999997 +0 + +0101000 ++6178 0 -6177 199 * +Ed + 1.03461557023666e-07 1 1 0 +1 976 0 8.9999999954 18.4999999997 +2 2203 473 0 8.9999999954 18.4999999997 +2 2204 471 0 8.9999999954 18.4999999997 +4 CN 473 0 471 0 +2 2205 472 210 8.9999999954 18.4999999997 +2 2206 474 210 8.9999999954 18.4999999997 +0 + +0101000 ++6179 0 -6176 199 * +Ed + 1.03812665353543e-07 1 1 0 +1 977 0 0.219779790601005 3.3613724441908 +2 2207 473 0 0.219779790601005 3.3613724441908 +4 C0 473 0 360 0 +2 2208 360 0 0.219779790601005 3.3613724441908 +2 2209 474 210 0.219779790601005 3.3613724441908 +0 + +0101000 ++6177 199 -6176 199 * +Ed + 1.03812654012252e-07 1 1 0 +1 978 0 3.3613724441908 6.50296509778059 +2 2210 471 0 3.3613724441908 6.50296509778059 +4 C0 471 0 360 0 +2 2211 360 0 3.3613724441908 6.50296509778059 +2 2212 472 210 3.3613724441908 6.50296509778059 +0 + +0101000 ++6176 199 -6177 199 * +Ed + 1.00038366953822e-07 1 1 0 +1 979 0 -16 -8 +2 2213 467 0 -16 -8 +2 2214 465 0 -16 -8 +4 CN 467 0 465 0 +2 2215 466 209 -16 -8 +2 2216 468 209 -16 -8 +0 + +0101000 ++6175 199 -6182 0 * +Ed + 1.00080394324009e-07 1 1 0 +1 980 0 0.591018650430774 3.73261130409049 +2 2217 467 0 0.591018650430774 3.73261130409049 +4 C0 467 0 475 0 +2 2218 475 0 0.591018650430774 3.73261130409049 +2 2219 468 209 0.591018650430774 3.73261130409049 +0 + +0101000 ++6175 199 -6174 199 * +Ed + 1.00338130193301e-07 1 1 0 +1 981 0 -16 -8 +2 2220 467 0 -16 -8 +2 2221 465 0 -16 -8 +4 CN 467 0 465 0 +2 2222 466 209 -16 -8 +2 2223 468 209 -16 -8 +0 + +0101000 ++6174 199 -6183 0 * +Ed + 1.00038366952999e-07 1 1 0 +1 982 0 0.999999997499998 10.5000000018 +2 2224 470 0 0.999999997499998 10.5000000018 +2 2225 469 0 0.999999997499998 10.5000000018 +4 CN 470 0 469 0 +2 2226 466 209 0.999999997499998 10.5000000018 +2 2227 468 209 0.999999997499998 10.5000000018 +0 + +0101000 ++6180 0 -6173 0 * +Ed + 1.0033813019388e-07 1 1 0 +1 983 0 0.999999997499998 10.5000000018 +2 2228 470 0 0.999999997499998 10.5000000018 +2 2229 469 0 0.999999997499998 10.5000000018 +4 CN 470 0 469 0 +2 2230 466 209 0.999999997499998 10.5000000018 +2 2231 468 209 0.999999997499998 10.5000000018 +0 + +0101000 ++6181 0 -6172 0 * +Ed + 1.00058021757414e-07 1 1 0 +1 984 0 0.591018650430774 3.73261130409049 +2 2232 470 0 0.591018650430774 3.73261130409049 +4 C0 470 0 360 0 +2 2233 360 0 0.591018650430774 3.73261130409049 +2 2234 468 209 0.591018650430774 3.73261130409049 +0 + +0101000 ++6173 0 -6172 0 * +Ed + 1.00080394029712e-07 1 1 0 +1 985 0 3.73261130409049 6.87420395761036 +2 2235 465 0 3.73261130409049 6.87420395761036 +4 C0 465 0 475 0 +2 2236 475 0 3.73261130409049 6.87420395761036 +2 2237 466 209 3.73261130409049 6.87420395761036 +0 + +0101000 ++6174 199 -6175 199 * +Ed + 1.00058021757414e-07 1 1 0 +1 986 0 3.73261130409049 6.87420395761036 +2 2238 469 0 3.73261130409049 6.87420395761036 +4 C0 469 0 360 0 +2 2239 360 0 3.73261130409049 6.87420395761036 +2 2240 466 209 3.73261130409049 6.87420395761036 +0 + +0101000 ++6172 0 -6173 0 * +Ed + 1.03499148268638e-07 1 1 0 +1 987 0 9 18.4999999997 +2 2241 476 0 9 18.4999999997 +2 2242 477 0 9 18.4999999997 +4 CN 476 0 477 0 +2 2243 474 211 9 18.4999999997 +2 2244 472 211 9 18.4999999997 +0 + +0101000 ++6171 0 -6170 199 * +Ed + 1.03450849280386e-07 1 1 0 +1 988 0 0.219779790580614 3.36137244419167 +2 2245 476 0 0.219779790580614 3.36137244419167 +4 C0 476 0 428 0 +2 2246 428 0 0.219779790580614 3.36137244419167 +2 2247 474 211 0.219779790580614 3.36137244419167 +0 + +0101000 ++6171 0 -6169 0 * +Ed + 1.03549611723622e-07 1 1 0 +1 989 0 9 18.4999999997 +2 2248 476 0 9 18.4999999997 +2 2249 477 0 9 18.4999999997 +4 CN 476 0 477 0 +2 2250 474 211 9 18.4999999997 +2 2251 472 211 9 18.4999999997 +0 + +0101000 ++6169 0 -6168 199 * +Ed + 1.04305297513483e-07 1 1 0 +1 990 0 0.219779790580614 3.36137244419167 +2 2252 476 0 0.219779790580614 3.36137244419167 +4 C0 476 0 360 0 +2 2253 360 0 0.219779790580614 3.36137244419167 +2 2254 474 211 0.219779790580614 3.36137244419167 +0 + +0101000 ++6170 199 -6168 199 * +Ed + 1.0345085257077e-07 1 1 0 +1 991 0 3.36137244419167 6.5029650977602 +2 2255 477 0 3.36137244419167 6.5029650977602 +4 C0 477 0 428 0 +2 2256 428 0 3.36137244419167 6.5029650977602 +2 2257 472 211 3.36137244419167 6.5029650977602 +0 + +0101000 ++6169 0 -6171 0 * +Ed + 1.04305305199298e-07 1 1 0 +1 992 0 3.36137244419167 6.5029650977602 +2 2258 477 0 3.36137244419167 6.5029650977602 +4 C0 477 0 360 0 +2 2259 360 0 3.36137244419167 6.5029650977602 +2 2260 472 211 3.36137244419167 6.5029650977602 +0 + +0101000 ++6168 199 -6170 199 * +Ed + 1.06238546284113e-07 1 1 0 +1 993 0 -6.000000007 2.9999999925 +2 2261 478 0 -6.000000007 2.9999999925 +2 2262 479 0 -6.000000007 2.9999999925 +4 CN 478 0 479 0 +2 2263 480 212 -6.000000007 2.9999999925 +2 2264 481 212 -6.000000007 2.9999999925 +0 + +0101000 ++6167 199 -6166 0 * +Ed + 1.00003159489217e-07 1 1 0 +1 994 0 1.67446506511184 4.81605771870163 +2 2265 478 0 1.67446506511184 4.81605771870163 +4 C0 478 0 432 0 +2 2266 432 0 1.67446506511184 4.81605771870163 +2 2267 480 212 1.67446506511184 4.81605771870163 +0 + +0101000 ++6165 0 -6166 0 * +Ed + 1.0334106270306e-07 1 1 0 +1 995 0 -6.0000000033 2.9999999925 +2 2268 478 0 -6.0000000033 2.9999999925 +2 2269 479 0 -6.0000000033 2.9999999925 +4 CN 478 0 479 0 +2 2270 480 212 -6.0000000033 2.9999999925 +2 2271 481 212 -6.0000000033 2.9999999925 +0 + +0101000 ++6164 199 -6165 0 * +Ed + 8.49983363263433e-05 1 1 0 +1 996 0 -18.0641577574 18.0641577574 +2 2272 478 0 -18.0641577574 18.0641577574 +4 C0 478 0 301 0 +2 2273 301 0 -18.0641577574 18.0641577574 +2 2274 480 212 -18.0641577574 18.0641577574 +0 + +0101000 ++6164 199 -6167 199 * +Ed + 8.49983570181858e-05 1 1 0 +1 997 0 -18.0641577565 18.0641577565 +2 2275 479 0 -18.0641577565 18.0641577565 +4 C0 479 0 301 0 +2 2276 301 0 -18.0641577565 18.0641577565 +2 2277 481 212 -18.0641577565 18.0641577565 +0 + +0101000 ++6167 199 -6164 199 * +Ed + 1.00003169411022e-07 1 1 0 +1 998 0 4.81605771870163 7.95765037229143 +2 2278 479 0 4.81605771870163 7.95765037229143 +4 C0 479 0 432 0 +2 2279 432 0 4.81605771870163 7.95765037229143 +2 2280 481 212 4.81605771870163 7.95765037229143 +0 + +0101000 ++6166 0 -6165 0 * +Ed + 1.00213082063092e-07 1 1 0 +1 999 0 -16.0000000005 -8 +2 2281 482 0 -16.0000000005 -8 +2 2282 483 0 -16.0000000005 -8 +4 CN 482 0 483 0 +2 2283 466 213 -16.0000000005 -8 +2 2284 468 213 -16.0000000005 -8 +0 + +0101000 ++6163 199 -6162 0 * +Ed + 1.00242873003404e-07 1 1 0 +1 1000 0 3.01029763413591 6.15189028772571 +2 2285 482 0 3.01029763413591 6.15189028772571 +4 C0 482 0 484 0 +2 2286 484 0 3.01029763413591 6.15189028772571 +2 2287 468 213 3.01029763413591 6.15189028772571 +0 + +0101000 ++6163 199 -6161 199 * +Ed + 1.00272152202201e-07 1 1 0 +1 1001 0 -16.0000000005 -8 +2 2288 482 0 -16.0000000005 -8 +2 2289 483 0 -16.0000000005 -8 +4 CN 482 0 483 0 +2 2290 466 213 -16.0000000005 -8 +2 2291 468 213 -16.0000000005 -8 +0 + +0101000 ++6161 199 -6160 0 * +Ed + 1.00239542493619e-07 1 1 0 +1 1002 0 3.01029763413591 6.15189028772571 +2 2292 482 0 3.01029763413591 6.15189028772571 +4 C0 482 0 432 0 +2 2293 432 0 3.01029763413591 6.15189028772571 +2 2294 468 213 3.01029763413591 6.15189028772571 +0 + +0101000 ++6162 0 -6160 0 * +Ed + 1.00213082109702e-07 1 1 0 +1 1003 0 1.00000000209999 10.5000000018 +2 2295 485 0 1.00000000209999 10.5000000018 +2 2296 486 0 1.00000000209999 10.5000000018 +4 CN 485 0 486 0 +2 2297 466 213 1.00000000209999 10.5000000018 +2 2298 468 213 1.00000000209999 10.5000000018 +0 + +0101000 ++6159 0 -6158 0 * +Ed + 1.00240760485041e-07 1 1 0 +1 1004 0 3.01029763413591 6.15189028772571 +2 2299 485 0 3.01029763413591 6.15189028772571 +4 C0 485 0 428 0 +2 2300 428 0 3.01029763413591 6.15189028772571 +2 2301 468 213 3.01029763413591 6.15189028772571 +0 + +0101000 ++6159 0 -6157 0 * +Ed + 1.00272152208972e-07 1 1 0 +1 1005 0 1.00000000209999 10.5000000018 +2 2302 485 0 1.00000000209999 10.5000000018 +2 2303 486 0 1.00000000209999 10.5000000018 +4 CN 485 0 486 0 +2 2304 466 213 1.00000000209999 10.5000000018 +2 2305 468 213 1.00000000209999 10.5000000018 +0 + +0101000 ++6157 0 -6156 0 * +Ed + 1.00242519797009e-07 1 1 0 +1 1006 0 3.01029763413656 6.15189028772571 +2 2306 485 0 3.01029763413656 6.15189028772571 +4 C0 485 0 360 0 +2 2307 360 0 3.01029763413656 6.15189028772571 +2 2308 468 213 3.01029763413656 6.15189028772571 +0 + +0101000 ++6158 0 -6156 0 * +Ed + 1.00239542493619e-07 1 1 0 +1 1007 0 6.15189028772571 9.29348294131549 +2 2309 483 0 6.15189028772571 9.29348294131549 +4 C0 483 0 432 0 +2 2310 432 0 6.15189028772571 9.29348294131549 +2 2311 466 213 6.15189028772571 9.29348294131549 +0 + +0101000 ++6160 0 -6162 0 * +Ed + 1.00242873087607e-07 1 1 0 +1 1008 0 6.15189028772571 9.29348294131549 +2 2312 483 0 6.15189028772571 9.29348294131549 +4 C0 483 0 484 0 +2 2313 484 0 6.15189028772571 9.29348294131549 +2 2314 466 213 6.15189028772571 9.29348294131549 +0 + +0101000 ++6161 199 -6163 199 * +Ed + 1.00240775504328e-07 1 1 0 +1 1009 0 6.15189028772571 9.29348294131549 +2 2315 486 0 6.15189028772571 9.29348294131549 +4 C0 486 0 428 0 +2 2316 428 0 6.15189028772571 9.29348294131549 +2 2317 466 213 6.15189028772571 9.29348294131549 +0 + +0101000 ++6157 0 -6159 0 * +Ed + 1.00242519797009e-07 1 1 0 +1 1010 0 6.15189028772571 9.29348294131615 +2 2318 486 0 6.15189028772571 9.29348294131615 +4 C0 486 0 360 0 +2 2319 360 0 6.15189028772571 9.29348294131615 +2 2320 466 213 6.15189028772571 9.29348294131615 +0 + +0101000 ++6156 0 -6158 0 * +Ed + 0.000476662432846974 1 1 0 +1 1011 0 2.24749172421 23.4532421369 +2 2321 487 0 2.24749172421 23.4532421369 +4 C0 432 0 487 0 +2 2322 432 0 2.24749172421 23.4532421369 +0 + +0101000 ++6155 0 -6154 0 * +Ed + 0.000476662362377475 1 1 0 +1 1012 0 23.4532421369 44.6589925486 +2 2323 488 0 23.4532421369 44.6589925486 +4 C0 432 0 488 0 +2 2324 432 0 23.4532421369 44.6589925486 +0 + +0101000 ++6154 0 -6153 0 * +Ed + 1e-07 1 1 0 +1 1013 0 -13.1427493234829 13.142782156 +4 C0 432 0 426 0 +2 2325 426 0 -13.1427493234829 13.142782156 +2 2326 432 0 -13.1427493234829 13.142782156 +0 + +0101000 ++6153 0 -6237 0 * +Ed + 1e-07 1 1 0 +1 1014 0 -13.1352355696 13.1352355696 +4 C0 432 0 430 0 +2 2327 430 0 -13.1352355696 13.1352355696 +2 2328 432 0 -13.1352355696 13.1352355696 +0 + +0101000 ++6155 0 -6233 0 * +Ed + 1.06098259302904e-07 1 1 0 +1 1015 0 -13.142782156283 13.1427985718153 +4 C0 428 0 426 0 +2 2329 428 0 -13.142782156283 13.1427985718153 +2 2330 426 0 -13.142782156283 13.1427985718153 +2 2331 429 201 -13.142782156283 13.1427985718153 +2 2332 427 201 -13.142782156283 13.1427985718153 +0 + +0101000 ++6152 199 -6235 0 * +Ed + 2.46303273752313e-05 1 1 0 +1 1016 0 3.70419918231607 4.81444030362025 +2 2333 488 0 3.70419918231607 4.81444030362025 +4 C0 428 0 488 0 +2 2334 428 0 3.70419918231607 4.81444030362025 +2 2335 489 201 3.70419918231607 4.81444030362025 +2 2336 429 201 3.70419918231607 4.81444030362025 +0 + +0101000 ++6151 201 -6152 199 * +Ed + 1.03116827725671e-07 1 1 0 +1 1017 0 -6.04669331278413 6.04669331196427 +4 C0 429 0 490 0 +2 2337 429 0 -6.04669331278413 6.04669331196427 +2 2338 490 0 -6.04669331278413 6.04669331196427 +2 2339 428 214 -6.04669331278413 6.04669331196427 +0 + +0101000 ++6150 0 -6151 0 * +Ed + 1.00792987019704e-07 1 1 0 +1 1018 0 5.92666324296833 9.06825589549067 +2 2340 491 0 5.92666324296833 9.06825589549067 +4 C0 429 0 491 0 +2 2341 429 0 5.92666324296833 9.06825589549067 +2 2342 428 214 5.92666324296833 9.06825589549067 +0 + +0101000 ++6150 0 -6149 0 * +Ed + 1.01176774249251e-07 1 1 0 +1 1019 0 -6.04669331196377 6.04669331524573 +4 C0 429 0 492 0 +2 2343 492 0 -6.04669331196377 6.04669331524573 +2 2344 429 0 -6.04669331196377 6.04669331524573 +2 2345 428 214 -6.04669331196377 6.04669331524573 +0 + +0101000 ++6149 0 -6148 0 * +Ed + 1.05651187799457e-07 1 1 0 +1 1020 0 1.67285129797159 2.78309119930138 +2 2346 487 0 1.67285129797159 2.78309119930138 +4 C0 428 0 487 0 +2 2347 428 0 1.67285129797159 2.78309119930138 +2 2348 493 201 1.67285129797159 2.78309119930138 +2 2349 429 201 1.67285129797159 2.78309119930138 +0 + +0101000 ++6147 199 -6148 201 * +Ed + 1.04605198007011e-07 1 1 0 +1 1021 0 -13.135235569875 13.1352355693766 +4 C0 428 0 430 0 +2 2350 428 0 -13.135235569875 13.1352355693766 +2 2351 430 0 -13.135235569875 13.1352355693766 +2 2352 429 201 -13.135235569875 13.1352355693766 +2 2353 431 201 -13.135235569875 13.1352355693766 +0 + +0101000 ++6147 199 -6234 0 * +Ed + 1.02007363191202e-07 1 1 0 +1 1022 0 1.02300050110542 4.16459315182391 +2 2354 494 0 1.02300050110542 4.16459315182391 +4 C0 494 0 429 0 +2 2355 429 0 1.02300050110542 4.16459315182391 +2 2356 428 214 1.02300050110542 4.16459315182391 +0 + +0101000 ++6146 0 -6145 0 * +Ed + 0.000922809706642635 1 1 0 +1 1023 0 -4.71238898038 4.71238898038 +2 2357 495 0 -4.71238898038 4.71238898038 +4 C0 495 0 429 0 +2 2358 429 0 -4.71238898038 4.71238898038 +2 2359 428 214 -4.71238898038 4.71238898038 +0 + +0101000 ++6145 0 -6146 0 * +Ed + 1e-07 1 1 0 +1 1016 0 3.24364762470694 3.70419918231607 +2 2333 488 0 3.24364762470694 3.70419918231607 +4 C0 428 0 488 0 +2 2334 428 0 3.24364762470694 3.70419918231607 +0 + +0101000 ++6144 0 -6151 201 * +Ed + 1e-07 1 1 0 +1 1020 0 2.78309119930138 3.24364762470694 +2 2346 487 0 2.78309119930138 3.24364762470694 +4 C0 428 0 487 0 +2 2347 428 0 2.78309119930138 3.24364762470694 +0 + +0101000 ++6148 201 -6144 0 * +Ed + 1.01189957335493e-07 1 1 0 +1 1024 0 -2.99999999905427 3.00000000237911 +2 2360 493 0 -2.99999999905427 3.00000000237911 +4 C0 492 0 493 0 +2 2361 492 0 -2.99999999905427 3.00000000237911 +2 2362 487 214 -2.99999999905427 3.00000000237911 +0 + +0101000 ++6143 0 -6148 0 * +Ed + 1.04116629323642e-07 1 1 0 +1 1025 0 2.78507302335494 3.89531292399718 +2 2363 493 0 2.78507302335494 3.89531292399718 +4 C0 496 0 493 0 +2 2364 496 0 2.78507302335494 3.89531292399718 +2 2365 487 214 2.78507302335494 3.89531292399718 +0 + +0101000 ++6142 0 -6143 0 * +Ed + 1.03051450832884e-07 1 1 0 +1 1026 0 -3.00000000715875 2.99999999649999 +2 2366 487 0 -3.00000000715875 2.99999999649999 +4 G1 487 0 430 0 +2 2367 430 0 -3.00000000715875 2.99999999649999 +2 2368 493 201 -3.00000000715875 2.99999999649999 +2 2369 431 201 -3.00000000715875 2.99999999649999 +0 + +0101000 ++6142 201 -6147 199 * +Ed + 1e-07 1 1 0 +1 1027 0 -6.0000000056 2.99999999649999 +2 2370 487 0 -6.0000000056 2.99999999649999 +2 2371 488 0 -6.0000000056 2.99999999649999 +4 CN 487 0 488 0 +0 + +0101000 ++6154 0 -6144 0 * +Ed + 1e-07 1 1 0 +1 1026 0 -6.0000000056 -3.00000000715875 +2 2366 487 0 -6.0000000056 -3.00000000715875 +4 G1 487 0 430 0 +2 2367 430 0 -6.0000000056 -3.00000000715875 +0 + +0101000 ++6155 0 -6142 201 * +Ed + 1.00842294978767e-07 1 1 0 +1 1028 0 -3.00000000334585 2.9999999985709 +2 2372 489 0 -3.00000000334585 2.9999999985709 +4 C0 489 0 490 0 +2 2373 490 0 -3.00000000334585 2.9999999985709 +2 2374 488 214 -3.00000000334585 2.9999999985709 +0 + +0101000 ++6141 0 -6151 0 * +Ed + 1.06938984841991e-07 1 1 0 +1 1029 0 4.81642090724049 5.9266608122104 +2 2375 489 0 4.81642090724049 5.9266608122104 +4 C0 496 0 489 0 +2 2376 496 0 4.81642090724049 5.9266608122104 +2 2377 488 214 4.81642090724049 5.9266608122104 +0 + +0101000 ++6141 0 -6140 0 * +Ed + 1e-07 1 1 0 +1 1030 0 -6.0000000056 -3.00000000717545 +2 2378 488 0 -6.0000000056 -3.00000000717545 +4 G1 488 0 426 0 +2 2379 426 0 -6.0000000056 -3.00000000717545 +0 + +0101000 ++6153 0 -6140 201 * +Ed + 1.02992780726118e-07 1 1 0 +1 1030 0 -3.00000000717545 2.99999999649999 +2 2378 488 0 -3.00000000717545 2.99999999649999 +4 G1 488 0 426 0 +2 2379 426 0 -3.00000000717545 2.99999999649999 +2 2380 489 201 -3.00000000717545 2.99999999649999 +2 2381 427 201 -3.00000000717545 2.99999999649999 +0 + +0101000 ++6140 201 -6152 199 * +Ed + 1.00142171473284e-07 1 1 0 +1 1031 0 -13.5000164310425 12.7704547101144 +4 C0 496 0 431 0 +2 2382 496 0 -13.5000164310425 12.7704547101144 +2 2383 431 0 -13.5000164310425 12.7704547101144 +2 2384 430 214 -13.5000164310425 12.7704547101144 +0 + +0101000 ++6142 0 -6232 215 * +Ed + 1.0291214322041e-07 1 1 0 +1 1032 0 -13.5000164037201 12.7855807426904 +4 C0 496 0 427 0 +2 2385 496 0 -13.5000164037201 12.7855807426904 +2 2386 427 0 -13.5000164037201 12.7855807426904 +2 2387 426 214 -13.5000164037201 12.7855807426904 +0 + +0101000 ++6140 0 -6236 215 * +Ed + 1.01755327140418e-07 1 1 0 +1 1033 0 9 18.499999503842 +2 2388 497 0 9 18.499999503842 +2 2389 498 0 9 18.499999503842 +4 CN 497 0 498 0 +2 2390 474 216 9 18.499999503842 +2 2391 472 216 9 18.499999503842 +0 + +0101000 ++6139 0 -6138 199 * +Ed + 7.43350139570617e-07 1 1 0 +1 1034 0 1.79057611740358 4.93216877095368 +2 2392 497 0 1.79057611740358 4.93216877095368 +4 C0 497 0 360 0 +2 2393 360 0 1.79057611740358 4.93216877095368 +2 2394 474 216 1.79057611740358 4.93216877095368 +0 + +0101000 ++6138 199 -6137 199 * +Ed + 1.01828102148833e-07 1 1 0 +1 1035 0 9 18.4999995044299 +2 2395 497 0 9 18.4999995044299 +2 2396 498 0 9 18.4999995044299 +4 CN 497 0 498 0 +2 2397 474 216 9 18.4999995044299 +2 2398 472 216 9 18.4999995044299 +0 + +0101000 ++6136 0 -6137 199 * +Ed + 1.01556268773418e-07 1 1 0 +1 1036 0 1.79057611740358 4.93216877095368 +2 2399 497 0 1.79057611740358 4.93216877095368 +4 C0 497 0 444 0 +2 2400 444 0 1.79057611740358 4.93216877095368 +2 2401 474 216 1.79057611740358 4.93216877095368 +0 + +0101000 ++6139 0 -6136 0 * +Ed + 5.95566512288932e-07 1 1 0 +1 1037 0 4.93216877095368 8.07376142458317 +2 2402 498 0 4.93216877095368 8.07376142458317 +4 C0 498 0 360 0 +2 2403 360 0 4.93216877095368 8.07376142458317 +2 2404 472 216 4.93216877095368 8.07376142458317 +0 + +0101000 ++6137 199 -6138 199 * +Ed + 1.01556268773418e-07 1 1 0 +1 1038 0 4.93216877095368 8.07376142458317 +2 2405 498 0 4.93216877095368 8.07376142458317 +4 C0 498 0 444 0 +2 2406 444 0 4.93216877095368 8.07376142458317 +2 2407 472 216 4.93216877095368 8.07376142458317 +0 + +0101000 ++6136 0 -6139 0 * +Ed + 2.00830912297046e-06 1 1 0 +1 1039 0 18.6140455124 19.6151152677 +2 2408 499 0 18.6140455124 19.6151152677 +2 2409 500 0 18.6140455124 19.6151152677 +4 CN 499 0 500 0 +2 2410 501 217 18.6140455124 19.6151152677 +0 + +0101000 ++6135 0 -6134 0 * +Ed + 0.000475107180760849 1 1 0 +1 1040 0 -0.019838823691 13.3569951654014 +2 2411 499 0 -0.019838823691 13.3569951654014 +2 2412 502 0 -0.019838823691 13.3569951654014 +4 CN 499 0 502 0 +2 2413 501 217 -0.019838823691 13.3569951654014 +2 2414 503 202 -0.019838823691 13.3569951654014 +0 + +0101000 ++6133 199 -6132 202 * +Ed + 0.000449715267136639 1 1 0 +1 1040 0 13.3569951654014 18.6140455124 +2 2411 499 0 13.3569951654014 18.6140455124 +2 2412 502 0 13.3569951654014 18.6140455124 +4 CN 499 0 502 0 +2 2415 501 217 13.3569951654014 18.6140455124 +0 + +0101000 ++6132 202 -6135 0 * +Ed + 1.00012799870874e-07 1 1 0 +1 1041 0 2.9999999912 5.999999993 +2 2416 499 0 2.9999999912 5.999999993 +4 G1 499 0 439 0 +2 2417 439 0 2.9999999912 5.999999993 +2 2418 501 217 2.9999999912 5.999999993 +0 + +0101000 ++6131 0 -6133 199 * +Ed + 1.00417889196381e-07 1 1 0 +1 1042 0 1.67443597005548 3.24364519112936 +2 2419 499 0 1.67443597005548 3.24364519112936 +4 C0 499 0 441 0 +2 2420 441 0 1.67443597005548 3.24364519112936 +2 2421 501 217 1.67443597005548 3.24364519112936 +0 + +0101000 ++6130 0 -6131 0 * +Ed + 1.021254757265e-07 1 1 0 +1 1043 0 -6.0000000056 2.9999999907 +2 2422 499 0 -6.0000000056 2.9999999907 +2 2423 504 0 -6.0000000056 2.9999999907 +4 CN 499 0 504 0 +2 2424 501 217 -6.0000000056 2.9999999907 +2 2425 505 217 -6.0000000056 2.9999999907 +0 + +0101000 ++6129 199 -6130 0 * +Ed + 9.23892607352538e-05 1 1 0 +1 1044 0 -19.6349540849 19.6349540849 +2 2426 499 0 -19.6349540849 19.6349540849 +4 C0 499 0 301 0 +2 2427 301 0 -19.6349540849 19.6349540849 +2 2428 501 217 -19.6349540849 19.6349540849 +0 + +0101000 ++6129 199 -6128 199 * +Ed + 1.02091612838215e-07 1 1 0 +1 1045 0 -6.0000000038 5.99999998080001 +2 2429 499 0 -6.0000000038 5.99999998080001 +2 2430 504 0 -6.0000000038 5.99999998080001 +4 CN 499 0 504 0 +2 2431 501 217 -6.0000000038 5.99999998080001 +2 2432 505 217 -6.0000000038 5.99999998080001 +0 + +0101000 ++6128 199 -6127 199 * +Ed + 1.10170430813869e-07 1 1 0 +1 1046 0 19.6151152631 19.6349540849 +2 2433 499 0 19.6151152631 19.6349540849 +2 2434 506 0 19.6151152631 19.6349540849 +4 CN 499 0 506 0 +2 2435 501 217 19.6151152631 19.6349540849 +0 + +0101000 ++6134 0 -6127 199 * +Ed + 1.01735913788361e-07 1 1 0 +1 1047 0 4.81602862363541 7.95762127723507 +2 2436 504 0 4.81602862363541 7.95762127723507 +4 C0 504 0 301 0 +2 2437 301 0 4.81602862363541 7.95762127723507 +2 2438 505 217 4.81602862363541 7.95762127723507 +0 + +0101000 ++6128 199 -6129 199 * +Ed + 1.00429159595068e-07 1 1 0 +1 1048 0 0.102052537057743 1.67443597005548 +2 2439 504 0 0.102052537057743 1.67443597005548 +4 C0 504 0 441 0 +2 2440 441 0 0.102052537057743 1.67443597005548 +2 2441 505 217 0.102052537057743 1.67443597005548 +0 + +0101000 ++6126 0 -6130 0 * +Ed + 1.00023803203388e-07 1 1 0 +1 1049 0 2.9999999907 5.9999999925 +2 2442 504 0 2.9999999907 5.9999999925 +4 G1 504 0 442 0 +2 2443 442 0 2.9999999907 5.9999999925 +2 2444 505 217 2.9999999907 5.9999999925 +0 + +0101000 ++6126 0 -6125 199 * +Ed + 1.04525740792747e-07 1 1 0 +1 1050 0 4.89452709772886 5.31509623007441 +2 2445 504 0 4.89452709772886 5.31509623007441 +2 2446 507 0 4.89452709772886 5.31509623007441 +4 CN 504 0 507 0 +2 2447 505 217 4.89452709772886 5.31509623007441 +0 + +0101000 ++6124 0 -6123 202 * +Ed + 1.10314884536492e-07 1 1 0 +1 1050 0 5.31509623007441 6.38523784423725 +2 2445 504 0 5.31509623007441 6.38523784423725 +2 2446 507 0 5.31509623007441 6.38523784423725 +4 CN 504 0 507 0 +2 2448 505 217 5.31509623007441 6.38523784423725 +2 2449 508 202 5.31509623007441 6.38523784423725 +0 + +0101000 ++6123 202 -6125 199 * +Ed + 1.02850561320255e-07 1 1 0 +1 1051 0 4.81602862363541 4.89452709772886 +2 2450 504 0 4.81602862363541 4.89452709772886 +2 2451 506 0 4.81602862363541 4.89452709772886 +4 CN 504 0 506 0 +2 2452 505 217 4.81602862363541 4.89452709772886 +0 + +0101000 ++6127 199 -6124 0 * +Ed + 1e-07 1 1 0 +1 1052 0 -12.5516086474 12.5516086474 +4 C0 441 0 439 0 +2 2453 439 0 -12.5516086474 12.5516086474 +2 2454 441 0 -12.5516086474 12.5516086474 +0 + +0101000 ++6131 0 -6221 0 * +Ed + 1e-07 1 1 0 +1 1053 0 -12.5586114529 12.5586114529 +4 C0 441 0 442 0 +2 2455 442 0 -12.5586114529 12.5586114529 +2 2456 441 0 -12.5586114529 12.5586114529 +0 + +0101000 ++6126 0 -6218 0 * +Ed + 0.000630831671657716 1 1 0 +1 1054 0 1.14817455863 7.43135986582 +2 2457 509 0 1.14817455863 7.43135986582 +4 C0 441 0 509 0 +2 2458 441 0 1.14817455863 7.43135986582 +2 2459 466 218 1.14817455863 7.43135986582 +0 + +0101000 ++6122 0 -6121 0 * +Ed + 0.000630831686940994 1 1 0 +1 1055 0 7.43135986581 13.714545173 +2 2460 510 0 7.43135986581 13.714545173 +4 C0 441 0 510 0 +2 2461 441 0 7.43135986581 13.714545173 +2 2462 468 218 7.43135986581 13.714545173 +0 + +0101000 ++6121 0 -6122 0 * +Ed + 1.06000249313408e-07 1 1 0 +1 1056 0 -12.5586114540772 12.5586114528879 +4 C0 444 0 442 0 +2 2463 444 0 -12.5586114540772 12.5586114528879 +2 2464 442 0 -12.5586114540772 12.5586114528879 +2 2465 445 202 -12.5586114540772 12.5586114528879 +2 2466 443 202 -12.5586114540772 12.5586114528879 +0 + +0101000 ++6120 199 -6216 0 * +Ed + 1.03595027061273e-07 1 1 0 +1 1057 0 5.3150962303779 6.38523784447877 +2 2467 507 0 5.3150962303779 6.38523784447877 +4 C0 444 0 507 0 +2 2468 444 0 5.3150962303779 6.38523784447877 +2 2469 508 202 5.3150962303779 6.38523784447877 +2 2470 445 202 5.3150962303779 6.38523784447877 +0 + +0101000 ++6119 202 -6120 199 * +Ed + 1.01699651996733e-07 1 1 0 +1 1058 0 -5.48292804881446 5.48292804790403 +4 C0 445 0 511 0 +2 2471 445 0 -5.48292804881446 5.48292804790403 +2 2472 511 0 -5.48292804881446 5.48292804790403 +2 2473 444 219 -5.48292804881446 5.48292804790403 +0 + +0101000 ++6118 0 -6119 0 * +Ed + 1.02662645249554e-07 1 1 0 +1 1059 0 1.21427426188836 4.35586691563083 +2 2474 512 0 1.21427426188836 4.35586691563083 +4 C0 445 0 512 0 +2 2475 445 0 1.21427426188836 4.35586691563083 +2 2476 444 219 1.21427426188836 4.35586691563083 +0 + +0101000 ++6118 0 -6117 0 * +Ed + 1.04361185247513e-07 1 1 0 +1 1060 0 -5.48292804881447 5.48292804851566 +4 C0 445 0 513 0 +2 2477 445 0 -5.48292804881447 5.48292804851566 +2 2478 513 0 -5.48292804881447 5.48292804851566 +2 2479 444 219 -5.48292804881447 5.48292804851566 +0 + +0101000 ++6117 0 -6116 0 * +Ed + 1.03254587243422e-07 1 1 0 +1 1061 0 3.24364519054521 4.31378680484712 +2 2480 502 0 3.24364519054521 4.31378680484712 +4 C0 444 0 502 0 +2 2481 444 0 3.24364519054521 4.31378680484712 +2 2482 503 202 3.24364519054521 4.31378680484712 +2 2483 445 202 3.24364519054521 4.31378680484712 +0 + +0101000 ++6115 199 -6116 202 * +Ed + 1.05693566996048e-07 1 1 0 +1 1062 0 -12.5516086473928 12.5516086483876 +4 C0 444 0 439 0 +2 2484 444 0 -12.5516086473928 12.5516086483876 +2 2485 439 0 -12.5516086473928 12.5516086483876 +2 2486 445 202 -12.5516086473928 12.5516086483876 +2 2487 440 202 -12.5516086473928 12.5516086483876 +0 + +0101000 ++6115 199 -6219 0 * +Ed + 1.01732939147688e-07 1 1 0 +1 1063 0 1.02300049808177 4.16459315454326 +2 2488 514 0 1.02300049808177 4.16459315454326 +4 C0 514 0 445 0 +2 2489 445 0 1.02300049808177 4.16459315454326 +2 2490 444 219 1.02300049808177 4.16459315454326 +0 + +0101000 ++6114 0 -6113 0 * +Ed + 1.01732937371331e-07 1 1 0 +1 1064 0 4.16459315454326 7.30618580526136 +2 2491 515 0 4.16459315454326 7.30618580526136 +4 C0 515 0 445 0 +2 2492 445 0 4.16459315454326 7.30618580526136 +2 2493 444 219 4.16459315454326 7.30618580526136 +0 + +0101000 ++6113 0 -6114 0 * +Ed + 1e-07 1 1 0 +1 1057 0 4.89452709739973 5.3150962303779 +2 2467 507 0 4.89452709739973 5.3150962303779 +4 C0 444 0 507 0 +2 2468 444 0 4.89452709739973 5.3150962303779 +0 + +0101000 ++6112 0 -6119 202 * +Ed + 1e-07 1 1 0 +1 1065 0 4.81444151752172 4.89452709739973 +2 2494 506 0 4.81444151752172 4.89452709739973 +4 C0 444 0 506 0 +2 2495 444 0 4.81444151752172 4.89452709739973 +0 + +0101000 ++6111 0 -6112 0 * +Ed + 1e-07 1 1 0 +1 1066 0 4.73435593744784 4.81444151752172 +2 2496 500 0 4.73435593744784 4.81444151752172 +4 C0 444 0 500 0 +2 2497 444 0 4.73435593744784 4.81444151752172 +0 + +0101000 ++6110 0 -6111 0 * +Ed + 1e-07 1 1 0 +1 1061 0 4.31378680484712 4.73435593744784 +2 2480 502 0 4.31378680484712 4.73435593744784 +4 C0 444 0 502 0 +2 2481 444 0 4.31378680484712 4.73435593744784 +0 + +0101000 ++6116 202 -6110 0 * +Ed + 1.00281232242597e-07 1 1 0 +1 1067 0 2.0804577089401 5.22205036228595 +2 2498 516 0 2.0804577089401 5.22205036228595 +4 C0 444 0 516 0 +2 2499 444 0 2.0804577089401 5.22205036228595 +2 2500 466 218 2.0804577089401 5.22205036228595 +0 + +0101000 ++6109 0 -6108 0 * +Ed + 1.00281218033149e-07 1 1 0 +1 1068 0 5.22205036228595 8.36364301611969 +2 2501 517 0 5.22205036228595 8.36364301611969 +4 C0 444 0 517 0 +2 2502 444 0 5.22205036228595 8.36364301611969 +2 2503 468 218 5.22205036228595 8.36364301611969 +0 + +0101000 ++6108 0 -6109 0 * +Ed + 1e-07 1 1 0 +1 1069 0 -3 3.00000000209999 +2 2504 500 0 -3 3.00000000209999 +2 2505 506 0 -3 3.00000000209999 +4 CN 500 0 506 0 +0 + +0101000 ++6134 0 -6111 0 * +Ed + 1e-07 1 1 0 +1 1070 0 -2.9999999996 3.0000000024 +2 2506 500 0 -2.9999999996 3.0000000024 +2 2507 502 0 -2.9999999996 3.0000000024 +4 CN 500 0 502 0 +0 + +0101000 ++6135 0 -6110 0 * +Ed + 1e-07 1 1 0 +1 1071 0 -2.99999999990001 3.0000000022 +2 2508 507 0 -2.99999999990001 3.0000000022 +2 2509 506 0 -2.99999999990001 3.0000000022 +4 CN 507 0 506 0 +0 + +0101000 ++6124 0 -6112 0 * +Ed + 1.02473431258226e-07 1 1 0 +1 1072 0 -2.99999999760365 2.99999999905427 +2 2510 508 0 -2.99999999760365 2.99999999905427 +4 C0 508 0 511 0 +2 2511 511 0 -2.99999999760365 2.99999999905427 +2 2512 507 219 -2.99999999760365 2.99999999905427 +0 + +0101000 ++6123 0 -6119 0 * +Ed + 1.03575015189201e-07 1 1 0 +1 1073 0 -2.9999999982 3.00000000209999 +2 2513 507 0 -2.9999999982 3.00000000209999 +4 G1 507 0 442 0 +2 2514 442 0 -2.9999999982 3.00000000209999 +2 2515 508 202 -2.9999999982 3.00000000209999 +2 2516 443 202 -2.9999999982 3.00000000209999 +0 + +0101000 ++6125 199 -6120 199 * +Ed + 1.00371680682516e-07 1 1 0 +1 1074 0 -2.99999999760416 2.99999999808702 +2 2517 503 0 -2.99999999760416 2.99999999808702 +4 C0 513 0 503 0 +2 2518 513 0 -2.99999999760416 2.99999999808702 +2 2519 502 219 -2.99999999760416 2.99999999808702 +0 + +0101000 ++6132 0 -6116 0 * +Ed + 1.07025276460818e-07 1 1 0 +1 1075 0 -2.9999999977 3.00000000209999 +2 2520 502 0 -2.9999999977 3.00000000209999 +4 G1 502 0 439 0 +2 2521 439 0 -2.9999999977 3.00000000209999 +2 2522 503 202 -2.9999999977 3.00000000209999 +2 2523 440 202 -2.9999999977 3.00000000209999 +0 + +0101000 ++6133 199 -6115 199 * +Ed + 1.0220968380819e-07 1 1 0 +1 1076 0 -12.9999999968502 12.1032172971941 +4 C0 518 0 440 0 +2 2524 518 0 -12.9999999968502 12.1032172971941 +2 2525 440 0 -12.9999999968502 12.1032172971941 +2 2526 439 219 -12.9999999968502 12.1032172971941 +0 + +0101000 ++6133 220 -6220 220 * +Ed + 1.01135462166146e-07 1 1 0 +1 1077 0 -13.0000000017254 12.117222904497 +4 C0 518 0 443 0 +2 2527 518 0 -13.0000000017254 12.117222904497 +2 2528 443 0 -13.0000000017254 12.117222904497 +2 2529 442 219 -13.0000000017254 12.117222904497 +0 + +0101000 ++6125 220 -6217 220 * +Ed + 1.0036936667469e-07 1 1 0 +1 1078 0 -15.9999999999 -8.0000000038 +2 2530 510 0 -15.9999999999 -8.0000000038 +2 2531 509 0 -15.9999999999 -8.0000000038 +4 CN 510 0 509 0 +2 2532 466 218 -15.9999999999 -8.0000000038 +2 2533 468 218 -15.9999999999 -8.0000000038 +0 + +0101000 ++6107 199 -6121 0 * +Ed + 1.0027935083624e-07 1 1 0 +1 1079 0 3.65125403549105 6.79284668932479 +2 2534 510 0 3.65125403549105 6.79284668932479 +4 C0 510 0 519 0 +2 2535 519 0 3.65125403549105 6.79284668932479 +2 2536 468 218 3.65125403549105 6.79284668932479 +0 + +0101000 ++6107 199 -6106 199 * +Ed + 1.00078760294721e-07 1 1 0 +1 1080 0 -15.9999999999 -8.0000000038 +2 2537 510 0 -15.9999999999 -8.0000000038 +2 2538 509 0 -15.9999999999 -8.0000000038 +4 CN 510 0 509 0 +2 2539 466 218 -15.9999999999 -8.0000000038 +2 2540 468 218 -15.9999999999 -8.0000000038 +0 + +0101000 ++6106 199 -6122 0 * +Ed + 1.00369366674668e-07 1 1 0 +1 1081 0 0.999999998299998 10.499999998 +2 2541 517 0 0.999999998299998 10.499999998 +2 2542 516 0 0.999999998299998 10.499999998 +4 CN 517 0 516 0 +2 2543 466 218 0.999999998299998 10.499999998 +2 2544 468 218 0.999999998299998 10.499999998 +0 + +0101000 ++6108 0 -6105 0 * +Ed + 1.00078763717385e-07 1 1 0 +1 1082 0 0.999999998299998 10.499999998 +2 2545 517 0 0.999999998299998 10.499999998 +2 2546 516 0 0.999999998299998 10.499999998 +4 CN 517 0 516 0 +2 2547 466 218 0.999999998299998 10.499999998 +2 2548 468 218 0.999999998299998 10.499999998 +0 + +0101000 ++6109 0 -6104 0 * +Ed + 1.00282369098544e-07 1 1 0 +1 1083 0 3.65125403549105 6.79284668932479 +2 2549 517 0 3.65125403549105 6.79284668932479 +4 C0 517 0 360 0 +2 2550 360 0 3.65125403549105 6.79284668932479 +2 2551 468 218 3.65125403549105 6.79284668932479 +0 + +0101000 ++6105 0 -6104 0 * +Ed + 1.0027935083624e-07 1 1 0 +1 1084 0 0.509661382145205 3.65125403549105 +2 2552 509 0 0.509661382145205 3.65125403549105 +4 C0 509 0 519 0 +2 2553 519 0 0.509661382145205 3.65125403549105 +2 2554 466 218 0.509661382145205 3.65125403549105 +0 + +0101000 ++6106 199 -6107 199 * +Ed + 1.00282383307975e-07 1 1 0 +1 1085 0 0.509661382145205 3.65125403549105 +2 2555 516 0 0.509661382145205 3.65125403549105 +4 C0 516 0 360 0 +2 2556 360 0 0.509661382145205 3.65125403549105 +2 2557 466 218 0.509661382145205 3.65125403549105 +0 + +0101000 ++6104 0 -6105 0 * +Ed + 1e-07 1 1 0 +1 1086 0 -13.7499999995 13.7499999995 +2 2558 520 0 -13.7499999995 13.7499999995 +4 G1 448 0 520 0 +0 + +0101000 ++6103 0 -6102 0 * +Ed + 1e-07 1 1 0 +1 1087 0 -13.6410161510208 13.641016151349 +4 C0 448 0 301 0 +2 2559 301 0 -13.6410161510208 13.641016151349 +0 + +0101000 ++6211 0 -6102 0 * +Ed + 1e-07 1 1 0 +1 1088 0 -13.641016151349 13.6410161510208 +4 C0 448 0 360 0 +2 2560 360 0 -13.641016151349 13.6410161510208 +0 + +0101000 ++6103 0 -6212 0 * +Ed + 1e-07 1 1 0 +1 1089 0 5.15082828696017 5.67442706255529 +2 2561 520 0 5.15082828696017 5.67442706255529 +4 C0 520 0 360 0 +2 2562 360 0 5.15082828696017 5.67442706255529 +0 + +0101000 ++6101 0 -6103 0 * +Ed + 1e-07 1 1 0 +1 1090 0 5.15082828696017 5.67442706255529 +2 2563 520 0 5.15082828696017 5.67442706255529 +4 C0 520 0 301 0 +2 2564 301 0 5.15082828696017 5.67442706255529 +0 + +0101000 ++6100 0 -6102 0 * +Ed + 1e-07 1 1 0 +1 1091 0 -13.75 13.749999999 +2 2565 520 0 -13.75 13.749999999 +4 G1 520 0 521 0 +2 2566 521 0 -13.75 13.749999999 +0 + +0101000 ++6101 0 -6100 0 * +Ed + 1e-07 1 1 0 +1 1092 0 -13.7499999995 13.7499999995 +2 2567 522 0 -13.7499999995 13.7499999995 +4 G1 446 0 522 0 +0 + +0101000 ++6099 0 -6098 0 * +Ed + 1e-07 1 1 0 +1 1093 0 -12.8987473699968 12.8987473699866 +4 C0 446 0 360 0 +2 2568 360 0 -12.8987473699968 12.8987473699866 +0 + +0101000 ++6215 0 -6099 0 * +Ed + 1e-07 1 1 0 +1 1094 0 -12.8987473699968 12.8987473699866 +4 C0 446 0 301 0 +2 2569 301 0 -12.8987473699968 12.8987473699866 +0 + +0101000 ++6214 0 -6098 0 * +Ed + 1e-07 1 1 0 +1 1095 0 -13.7499999995 13.7499999995 +2 2570 522 0 -13.7499999995 13.7499999995 +4 G1 521 0 522 0 +2 2571 521 0 -13.7499999995 13.7499999995 +0 + +0101000 ++6097 0 -6096 0 * +Ed + 1e-07 1 1 0 +1 1096 0 -43.2307666907861 43.2307666911963 +4 C0 521 0 301 0 +2 2572 521 0 -43.2307666907861 43.2307666911963 +2 2573 301 0 -43.2307666907861 43.2307666911963 +0 + +0101000 ++6096 0 -6100 0 * +Ed + 1e-07 1 1 0 +1 1097 0 -43.2307666907861 43.2307666911963 +4 C0 521 0 360 0 +2 2574 521 0 -43.2307666907861 43.2307666911963 +2 2575 360 0 -43.2307666907861 43.2307666911963 +0 + +0101000 ++6097 0 -6101 0 * +Ed + 1e-07 1 1 0 +1 1098 0 4.6097762188663 5.15082828698478 +2 2576 522 0 4.6097762188663 5.15082828698478 +4 C0 522 0 360 0 +2 2577 360 0 4.6097762188663 5.15082828698478 +0 + +0101000 ++6099 0 -6097 0 * +Ed + 1e-07 1 1 0 +1 1099 0 4.6097762188663 5.15082828698478 +2 2578 522 0 4.6097762188663 5.15082828698478 +4 C0 522 0 301 0 +2 2579 301 0 4.6097762188663 5.15082828698478 +0 + +0101000 ++6098 0 -6096 0 * +Ed + 1e-07 1 1 0 +1 1100 0 -6.21187114162243 6.2118711406277 +4 C0 437 0 301 0 +2 2580 301 0 -6.21187114162243 6.2118711406277 +0 + +0101000 ++6226 0 -6095 0 * +Ed + 1e-07 1 1 0 +1 1101 0 -6.21187114162243 6.2118711406277 +4 C0 437 0 360 0 +2 2581 360 0 -6.21187114162243 6.2118711406277 +0 + +0101000 ++6224 0 -6094 0 * +Ed + 1e-07 1 1 0 +1 1102 0 -13.7499999995 13.7499999995 +2 2582 523 0 -13.7499999995 13.7499999995 +4 G1 437 0 523 0 +0 + +0101000 ++6094 0 -6095 0 * +Ed + 1e-07 1 1 0 +1 1103 0 5.70933364760454 6.1805725456612 +2 2583 523 0 5.70933364760454 6.1805725456612 +4 C0 523 0 360 0 +2 2584 360 0 5.70933364760454 6.1805725456612 +0 + +0101000 ++6093 0 -6094 0 * +Ed + 1e-07 1 1 0 +1 1104 0 5.70933364760454 6.1805725456612 +2 2585 523 0 5.70933364760454 6.1805725456612 +4 C0 523 0 301 0 +2 2586 301 0 5.70933364760454 6.1805725456612 +0 + +0101000 ++6092 0 -6095 0 * +Ed + 1e-07 1 1 0 +1 1105 0 -13.75 13.749999999 +2 2587 523 0 -13.75 13.749999999 +4 G1 523 0 524 0 +2 2588 524 0 -13.75 13.749999999 +0 + +0101000 ++6093 0 -6092 0 * +Ed + 1e-07 1 1 0 +1 1106 0 -1.23479396146506 1.2347939614323 +4 C0 301 0 425 0 +2 2589 301 0 -1.23479396146506 1.2347939614323 +0 + +0101000 ++6238 0 -6091 0 * +Ed + 1e-07 1 1 0 +1 1107 0 -55.8013039183206 55.8013039181823 +4 C0 301 0 524 0 +2 2590 524 0 -55.8013039183206 55.8013039181823 +2 2591 301 0 -55.8013039183206 55.8013039181823 +0 + +0101000 ++6090 0 -6092 0 * +Ed + 1e-07 1 1 0 +1 1108 0 2.1446479863734 2.80787310213978 +2 2592 525 0 2.1446479863734 2.80787310213978 +4 C0 301 0 525 0 +2 2593 301 0 2.1446479863734 2.80787310213978 +0 + +0101000 ++6090 0 -6091 0 * +Ed + 1e-07 1 1 0 +1 1109 0 2.1446479863734 2.80787310213978 +2 2594 525 0 2.1446479863734 2.80787310213978 +4 C0 360 0 525 0 +2 2595 360 0 2.1446479863734 2.80787310213978 +0 + +0101000 ++6089 0 -6088 0 * +Ed + 1e-07 1 1 0 +1 1110 0 -55.8013039183206 55.8013039181823 +4 C0 360 0 524 0 +2 2596 524 0 -55.8013039183206 55.8013039181823 +2 2597 360 0 -55.8013039183206 55.8013039181823 +0 + +0101000 ++6089 0 -6093 0 * +Ed + 1e-07 1 1 0 +1 1111 0 -1.23479396146506 1.2347939614323 +4 C0 360 0 425 0 +2 2598 360 0 -1.23479396146506 1.2347939614323 +0 + +0101000 ++6241 0 -6088 0 * +Ed + 1.02347459147349e-07 1 1 0 +1 1112 0 0.5 3.64159265358979 +2 2599 526 0 0.5 3.64159265358979 +4 C0 527 0 526 0 +2 2600 527 0 0.5 3.64159265358979 +2 2601 360 221 0.5 3.64159265358979 +2 2602 360 222 0.5 3.64159265358979 +2 2603 360 223 0.5 3.64159265358979 +0 + +0101000 ++6087 0 -6086 0 * +Ed + 1.02347842840421e-07 1 1 0 +1 1113 0 3.64159265358979 6.78318530717959 +2 2604 528 0 3.64159265358979 6.78318530717959 +4 C0 527 0 528 0 +2 2605 527 0 3.64159265358979 6.78318530717959 +2 2606 360 221 3.64159265358979 6.78318530717959 +2 2607 360 222 3.64159265358979 6.78318530717959 +2 2608 360 223 3.64159265358979 6.78318530717959 +0 + +0101000 ++6086 0 -6087 0 * +Ed + 5.95553318568178e-07 1 1 0 +1 1114 0 2.0707963267945 5.21238898038429 +2 2609 529 0 2.0707963267945 5.21238898038429 +4 C0 530 0 529 0 +2 2610 531 224 2.0707963267945 5.21238898038429 +2 2611 531 225 2.0707963267945 5.21238898038429 +2 2612 532 224 2.0707963267945 5.21238898038429 +2 2613 533 226 2.0707963267945 5.21238898038429 +2 2614 533 227 2.0707963267945 5.21238898038429 +2 2615 534 228 2.0707963267945 5.21238898038429 +2 2616 534 229 2.0707963267945 5.21238898038429 +2 2617 360 230 2.0707963267945 5.21238898038429 +2 2618 360 231 2.0707963267945 5.21238898038429 +2 2619 360 232 2.0707963267945 5.21238898038429 +0 + +0101000 ++6085 0 -6084 0 * +Ed + 5.96402054771349e-07 1 1 0 +1 1115 0 5.21238898038429 8.35398163397409 +2 2620 535 0 5.21238898038429 8.35398163397409 +4 C0 530 0 535 0 +2 2621 536 224 5.21238898038429 8.35398163397409 +2 2622 536 225 5.21238898038429 8.35398163397409 +2 2623 532 224 5.21238898038429 8.35398163397409 +2 2624 537 226 5.21238898038429 8.35398163397409 +2 2625 537 227 5.21238898038429 8.35398163397409 +2 2626 538 228 5.21238898038429 8.35398163397409 +2 2627 538 229 5.21238898038429 8.35398163397409 +2 2628 360 230 5.21238898038429 8.35398163397409 +2 2629 360 231 5.21238898038429 8.35398163397409 +2 2630 360 232 5.21238898038429 8.35398163397409 +0 + +0101000 ++6084 0 -6085 0 * +Ed + 1.02346958214727e-07 1 1 0 +1 1116 0 0.499999999999042 3.64159265358883 +2 2631 539 0 0.499999999999042 3.64159265358883 +4 C0 539 0 527 0 +2 2632 527 0 0.499999999999042 3.64159265358883 +2 2633 360 221 0.499999999999042 3.64159265358883 +2 2634 360 222 0.499999999999042 3.64159265358883 +2 2635 360 223 0.499999999999042 3.64159265358883 +0 + +0101000 ++6083 0 -6082 0 * +Ed + 1.02347150061263e-07 1 1 0 +1 1117 0 3.64159265358883 6.78318530717863 +2 2636 540 0 3.64159265358883 6.78318530717863 +4 C0 540 0 527 0 +2 2637 527 0 3.64159265358883 6.78318530717863 +2 2638 360 221 3.64159265358883 6.78318530717863 +2 2639 360 222 3.64159265358883 6.78318530717863 +2 2640 360 223 3.64159265358883 6.78318530717863 +0 + +0101000 ++6082 0 -6083 0 * +Ed + 1e-07 1 1 0 +1 1118 0 -13.7499999995 13.7499999995 +2 2641 525 0 -13.7499999995 13.7499999995 +4 G1 425 0 525 0 +0 + +0101000 ++6088 0 -6091 0 * +Ed + 1e-07 1 1 0 +1 1119 0 -13.7499999995 13.7499999995 +2 2642 525 0 -13.7499999995 13.7499999995 +4 G1 524 0 525 0 +2 2643 524 0 -13.7499999995 13.7499999995 +0 + +0101000 ++6089 0 -6090 0 * +Ed + 1e-07 1 1 0 +1 1120 0 -4.16049991609 2.83950008391 +2 2644 541 0 -4.16049991609 2.83950008391 +2 2645 542 0 -4.16049991609 2.83950008391 +4 CN 541 0 542 0 +0 + +0101000 ++6081 0 -6080 0 * +Ed + 1.00001266566094e-07 1 1 0 +1 1121 0 3.14159265358979 4.21238898038373 +2 2646 541 0 3.14159265358979 4.21238898038373 +4 C0 541 0 543 0 +2 2647 543 0 3.14159265358979 4.21238898038373 +2 2648 544 233 3.14159265358979 4.21238898038373 +0 + +0101000 ++6081 0 -6079 234 * +Ed + 1.00001166004743e-07 1 1 0 +1 1121 0 4.21238898038373 6.28318530717959 +2 2646 541 0 4.21238898038373 6.28318530717959 +4 C0 541 0 543 0 +2 2647 543 0 4.21238898038373 6.28318530717959 +2 2649 545 233 4.21238898038373 6.28318530717959 +0 + +0101000 ++6079 234 -6078 0 * +Ed + 1e-07 1 1 0 +1 1122 0 -4.16049991609 2.83950008391 +2 2650 541 0 -4.16049991609 2.83950008391 +2 2651 542 0 -4.16049991609 2.83950008391 +4 CN 541 0 542 0 +0 + +0101000 ++6078 0 -6077 0 * +Ed + 1e-07 1 1 0 +1 1123 0 3.14159265358979 6.28318530717959 +2 2652 541 0 3.14159265358979 6.28318530717959 +4 C0 541 0 358 0 +2 2653 358 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++6080 0 -6077 0 * +Ed + 1.00001020340358e-07 1 1 0 +1 1124 0 0 1.07079632679402 +2 2654 542 0 0 1.07079632679402 +4 C0 542 0 543 0 +2 2655 543 0 0 1.07079632679402 +2 2656 545 233 0 1.07079632679402 +0 + +0101000 ++6078 0 -6076 235 * +Ed + 1.00001254309199e-07 1 1 0 +1 1124 0 1.07079632679402 3.14159265358979 +2 2654 542 0 1.07079632679402 3.14159265358979 +4 C0 542 0 543 0 +2 2655 543 0 1.07079632679402 3.14159265358979 +2 2657 544 233 1.07079632679402 3.14159265358979 +0 + +0101000 ++6076 235 -6081 0 * +Ed + 1e-07 1 1 0 +1 1125 0 0 3.14159265358979 +2 2658 542 0 0 3.14159265358979 +4 C0 542 0 358 0 +2 2659 358 0 0 3.14159265358979 +0 + +0101000 ++6077 0 -6080 0 * +Ed + 1e-07 1 1 0 +1 1126 0 0 3.14159265358979 +2 2660 546 0 0 3.14159265358979 +4 C0 358 0 546 0 +2 2661 358 0 0 3.14159265358979 +0 + +0101000 ++6075 0 -6074 0 * +Ed + 1e-07 1 1 0 +1 1127 0 3.14159265358979 6.28318530717959 +2 2662 547 0 3.14159265358979 6.28318530717959 +4 C0 358 0 547 0 +2 2663 358 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++6074 0 -6075 0 * +Ed + 1e-07 1 1 0 +1 1128 0 -50 -43 +2 2664 385 0 -50 -43 +4 G1 385 0 548 0 +2 2665 548 0 -50 -43 +0 + +0101000 ++6073 0 -6347 234 * +Ed + 1e-07 1 1 0 +1 1129 0 4.71238898038469 6.2831777796514 +2 2666 385 0 4.71238898038469 6.2831777796514 +4 C0 385 0 543 0 +2 2667 543 0 4.71238898038469 6.2831777796514 +0 + +0101000 ++6073 0 -6072 0 * +Ed + 1e-07 1 1 0 +1 1130 0 -50 -43 +2 2668 385 0 -50 -43 +4 G1 385 0 549 0 +2 2669 549 0 -50 -43 +0 + +0101000 ++6072 0 -6309 234 * +Ed + 1e-07 1 1 0 +1 1131 0 -50 -43 +2 2670 384 0 -50 -43 +4 G1 384 0 549 0 +2 2671 549 0 -50 -43 +0 + +0101000 ++6071 0 -6313 234 * +Ed + 1e-07 1 1 0 +1 1132 0 6.28318075530153 7.36529251234008 +2 2672 384 0 6.28318075530153 7.36529251234008 +4 C0 384 0 543 0 +2 2673 543 0 6.28318075530153 7.36529251234008 +0 + +0101000 ++6071 0 -6070 0 * +Ed + 1e-07 1 1 0 +1 1133 0 -50 -43 +2 2674 384 0 -50 -43 +4 G1 384 0 550 0 +2 2675 550 0 -50 -43 +0 + +0101000 ++6070 0 -6317 234 * +Ed + 1e-07 1 1 0 +1 1134 0 -50 -43 +2 2676 382 0 -50 -43 +4 G1 382 0 550 0 +2 2677 550 0 -50 -43 +0 + +0101000 ++6069 0 -6315 234 * +Ed + 1e-07 1 1 0 +1 1135 0 1.08210546427801 1.37058478051409 +2 2678 382 0 1.08210546427801 1.37058478051409 +4 C0 382 0 543 0 +2 2679 543 0 1.08210546427801 1.37058478051409 +0 + +0101000 ++6069 0 -6068 0 * +Ed + 7.80303658359224e-06 1 1 0 +1 1136 0 -50 -43 +2 2680 382 0 -50 -43 +2 2681 375 0 -50 -43 +4 G1 382 0 375 0 +0 + +0101000 ++6068 0 -6325 234 * +Ed + 1e-07 1 1 0 +1 1137 0 253.667619105 271.486316455 +2 2682 375 0 253.667619105 271.486316455 +4 C0 375 0 543 0 +2 2683 543 0 253.667619105 271.486316455 +0 + +0101000 ++6068 0 -6067 0 * +Ed + 1e-07 1 1 0 +1 1138 0 -25 -18 +2 2684 375 0 -25 -18 +4 G1 375 0 551 0 +2 2685 551 0 -25 -18 +0 + +0101000 ++6067 0 -6338 234 * +Ed + 1e-07 1 1 0 +1 1139 0 -3.5 3.5 +2 2686 365 0 -3.5 3.5 +4 G1 552 0 365 0 +2 2687 552 0 -3.5 3.5 +0 + +0101000 ++6066 0 -6342 234 * +Ed + 1e-07 1 1 0 +1 1140 0 -3.58578643772203 3.58578643758061 +4 C0 552 0 543 0 +2 2688 552 0 -3.58578643772203 3.58578643758061 +2 2689 543 0 -3.58578643772203 3.58578643758061 +0 + +0101000 ++6066 0 -6065 0 * +Ed + 1e-07 1 1 0 +1 1141 0 -3.5 3.5 +4 C0 552 0 553 0 +2 2690 552 0 -3.5 3.5 +2 2691 553 0 -3.5 3.5 +0 + +0101000 ++6065 0 -6336 234 * +Ed + 1e-07 1 1 0 +1 1142 0 -25 -18 +2 2692 371 0 -25 -18 +4 G1 371 0 554 0 +2 2693 554 0 -25 -18 +0 + +0101000 ++6064 0 -6331 234 * +Ed + 1e-07 1 1 0 +1 1143 0 365.975427238 395.770502936 +2 2694 371 0 365.975427238 395.770502936 +4 C0 371 0 543 0 +2 2695 543 0 365.975427238 395.770502936 +0 + +0101000 ++6064 0 -6063 0 * +Ed + 2.29990299937802e-05 1 1 0 +1 1144 0 -25 -18 +2 2696 371 0 -25 -18 +4 G1 371 0 555 0 +2 2697 555 0 -25 -18 +0 + +0101000 ++6063 0 -6330 234 * +Ed + 1e-07 1 1 0 +1 1145 0 -50 -43 +2 2698 386 0 -50 -43 +4 G1 386 0 555 0 +2 2699 555 0 -50 -43 +0 + +0101000 ++6062 0 -6326 234 * +Ed + 1e-07 1 1 0 +1 1146 0 3.14160018112023 3.92699081698724 +2 2700 386 0 3.14160018112023 3.92699081698724 +4 C0 386 0 543 0 +2 2701 543 0 3.14160018112023 3.92699081698724 +0 + +0101000 ++6062 0 -6061 0 * +Ed + 1e-07 1 1 0 +1 1147 0 -50 -43 +2 2702 386 0 -50 -43 +4 G1 386 0 556 0 +2 2703 556 0 -50 -43 +0 + +0101000 ++6061 0 -6307 234 * +Ed + 1e-07 1 1 0 +1 1148 0 -12.077212795244 12.0772127953148 +4 C0 556 0 543 0 +2 2704 556 0 -12.077212795244 12.0772127953148 +2 2705 543 0 -12.077212795244 12.0772127953148 +0 + +0101000 ++6061 0 -6060 0 * +Ed + 1e-07 1 1 0 +1 1149 0 -3.5 3.5 +4 C0 556 0 557 0 +2 2706 557 0 -3.5 3.5 +2 2707 556 0 -3.5 3.5 +0 + +0101000 ++6060 0 -6304 234 * +Ed + 1e-07 1 1 0 +1 1150 0 -3.5 3.5 +4 C0 558 0 557 0 +2 2708 558 0 -3.5 3.5 +2 2709 557 0 -3.5 3.5 +0 + +0101000 ++6059 0 -6344 234 * +Ed + 1e-07 1 1 0 +1 1151 0 -3.58578643758061 3.58578643765132 +4 C0 558 0 543 0 +2 2710 558 0 -3.58578643758061 3.58578643765132 +2 2711 543 0 -3.58578643758061 3.58578643765132 +0 + +0101000 ++6059 0 -6058 0 * +Ed + 1e-07 1 1 0 +1 1152 0 -3.5 3.5 +2 2712 357 0 -3.5 3.5 +4 G1 558 0 357 0 +2 2713 558 0 -3.5 3.5 +0 + +0101000 ++6058 0 -6349 234 * +Ed + 1e-07 1 1 0 +1 1153 0 3.14159265358979 6.28318530717959 +2 2714 559 0 3.14159265358979 6.28318530717959 +4 C0 559 0 543 0 +2 2715 543 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++6057 0 -6056 0 * +Ed + 1e-07 1 1 0 +1 1154 0 -2.12132034355964 2.12132034355964 +2 2716 559 0 -2.12132034355964 2.12132034355964 +2 2717 560 0 -2.12132034355964 2.12132034355964 +4 CN 559 0 560 0 +0 + +0101000 ++6055 0 -6056 0 * +Ed + 1e-07 1 1 0 +1 1155 0 3.14159265358979 6.28318530717959 +2 2718 559 0 3.14159265358979 6.28318530717959 +2 2719 376 0 3.14159265358979 6.28318530717959 +4 C0 559 0 376 0 +0 + +0101000 ++6054 0 -6055 0 * +Ed + 1e-07 1 1 0 +1 1156 0 -2.12132034355964 2.12132034355964 +2 2720 559 0 -2.12132034355964 2.12132034355964 +2 2721 560 0 -2.12132034355964 2.12132034355964 +4 CN 559 0 560 0 +0 + +0101000 ++6054 0 -6057 0 * +Ed + 1e-07 1 1 0 +1 1157 0 4.71238898038469 7.85398163397448 +2 2722 560 0 4.71238898038469 7.85398163397448 +4 C0 560 0 543 0 +2 2723 543 0 4.71238898038469 7.85398163397448 +0 + +0101000 ++6056 0 -6057 0 * +Ed + 1e-07 1 1 0 +1 1158 0 4.71238898038469 7.85398163397448 +2 2724 560 0 4.71238898038469 7.85398163397448 +2 2725 377 0 4.71238898038469 7.85398163397448 +4 C0 560 0 377 0 +0 + +0101000 ++6055 0 -6054 0 * +Ed + 1e-07 1 1 0 +1 1159 0 3.14159265358979 6.28318530717959 +2 2726 561 0 3.14159265358979 6.28318530717959 +4 C0 561 0 543 0 +2 2727 543 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++6053 0 -6052 0 * +Ed + 1e-07 1 1 0 +1 1160 0 -2.12132034355964 2.12132034355964 +2 2728 561 0 -2.12132034355964 2.12132034355964 +2 2729 562 0 -2.12132034355964 2.12132034355964 +4 CN 561 0 562 0 +0 + +0101000 ++6051 0 -6052 0 * +Ed + 1e-07 1 1 0 +1 1161 0 3.14159265358979 6.28318530717959 +2 2730 561 0 3.14159265358979 6.28318530717959 +2 2731 379 0 3.14159265358979 6.28318530717959 +4 C0 561 0 379 0 +0 + +0101000 ++6050 0 -6051 0 * +Ed + 1e-07 1 1 0 +1 1162 0 -2.12132034355964 2.12132034355964 +2 2732 561 0 -2.12132034355964 2.12132034355964 +2 2733 562 0 -2.12132034355964 2.12132034355964 +4 CN 561 0 562 0 +0 + +0101000 ++6050 0 -6053 0 * +Ed + 1e-07 1 1 0 +1 1163 0 4.71238898038469 7.85398163397448 +2 2734 562 0 4.71238898038469 7.85398163397448 +4 C0 562 0 543 0 +2 2735 543 0 4.71238898038469 7.85398163397448 +0 + +0101000 ++6052 0 -6053 0 * +Ed + 1e-07 1 1 0 +1 1164 0 4.71238898038469 7.85398163397448 +2 2736 562 0 4.71238898038469 7.85398163397448 +2 2737 378 0 4.71238898038469 7.85398163397448 +4 C0 562 0 378 0 +0 + +0101000 ++6051 0 -6050 0 * +Ed + 1e-07 1 1 0 +1 1165 0 -2.79242318268615 2.79242318267784 +2 2738 563 0 -2.79242318268615 2.79242318267784 +2 2739 564 0 -2.79242318268615 2.79242318267784 +4 CN 563 0 564 0 +0 + +0101000 ++6049 0 -6048 0 * +Ed + 1e-07 1 1 0 +1 1166 0 2.64159265359167 5.78318530718146 +2 2740 563 0 2.64159265359167 5.78318530718146 +4 C0 563 0 565 0 +2 2741 565 0 2.64159265359167 5.78318530718146 +0 + +0101000 ++6049 0 -6047 0 * +Ed + 1e-07 1 1 0 +1 1167 0 -2.79242318268615 2.79242318267784 +2 2742 563 0 -2.79242318268615 2.79242318267784 +2 2743 564 0 -2.79242318268615 2.79242318267784 +4 CN 563 0 564 0 +0 + +0101000 ++6047 0 -6046 0 * +Ed + 1e-07 1 1 0 +1 1168 0 2.64159265359277 5.78318530718256 +2 2744 563 0 2.64159265359277 5.78318530718256 +4 C0 563 0 543 0 +2 2745 543 0 2.64159265359277 5.78318530718256 +0 + +0101000 ++6048 0 -6046 0 * +Ed + 1e-07 1 1 0 +1 1169 0 5.78318530718146 8.92477796077126 +2 2746 564 0 5.78318530718146 8.92477796077126 +4 C0 564 0 565 0 +2 2747 565 0 5.78318530718146 8.92477796077126 +0 + +0101000 ++6047 0 -6049 0 * +Ed + 1e-07 1 1 0 +1 1170 0 5.78318530718256 8.92477796077236 +2 2748 564 0 5.78318530718256 8.92477796077236 +4 C0 564 0 543 0 +2 2749 543 0 5.78318530718256 8.92477796077236 +0 + +0101000 ++6046 0 -6048 0 * +Ed + 1e-07 1 1 0 +1 1171 0 -2.79242318268615 2.79242318267784 +2 2750 566 0 -2.79242318268615 2.79242318267784 +2 2751 567 0 -2.79242318268615 2.79242318267784 +4 G2 566 0 567 0 +0 + +0101000 ++6045 0 -6044 0 * +Ed + 1e-07 1 1 0 +1 1172 0 2.64159265359167 5.78318530718146 +2 2752 566 0 2.64159265359167 5.78318530718146 +4 C0 566 0 568 0 +2 2753 568 0 2.64159265359167 5.78318530718146 +0 + +0101000 ++6045 0 -6043 0 * +Ed + 1e-07 1 1 0 +1 1173 0 -2.79242318268615 2.79242318267784 +2 2754 566 0 -2.79242318268615 2.79242318267784 +2 2755 567 0 -2.79242318268615 2.79242318267784 +4 CN 566 0 567 0 +0 + +0101000 ++6043 0 -6042 0 * +Ed + 1e-07 1 1 0 +1 1174 0 2.64159265359277 5.78318530718256 +2 2756 566 0 2.64159265359277 5.78318530718256 +4 C0 566 0 543 0 +2 2757 543 0 2.64159265359277 5.78318530718256 +0 + +0101000 ++6044 0 -6042 0 * +Ed + 1e-07 1 1 0 +1 1175 0 5.78318530718146 8.92477796077126 +2 2758 567 0 5.78318530718146 8.92477796077126 +4 C0 567 0 568 0 +2 2759 568 0 5.78318530718146 8.92477796077126 +0 + +0101000 ++6043 0 -6045 0 * +Ed + 1e-07 1 1 0 +1 1176 0 5.78318530718256 8.92477796077236 +2 2760 567 0 5.78318530718256 8.92477796077236 +4 C0 567 0 543 0 +2 2761 543 0 5.78318530718256 8.92477796077236 +0 + +0101000 ++6042 0 -6044 0 * +Ed + 1e-07 1 1 0 +1 1177 0 3.14159265358979 6.28318530717959 +2 2762 388 0 3.14159265358979 6.28318530717959 +4 C0 565 0 388 0 +2 2763 565 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++6041 0 -6040 0 * +Ed + 1e-07 1 1 0 +1 1178 0 0 3.14159265358979 +2 2764 389 0 0 3.14159265358979 +4 C0 565 0 389 0 +2 2765 565 0 0 3.14159265358979 +0 + +0101000 ++6040 0 -6041 0 * +Ed + 1e-07 1 1 0 +1 1179 0 3.14159265358979 6.28318530717959 +2 2766 390 0 3.14159265358979 6.28318530717959 +4 C0 568 0 390 0 +2 2767 568 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++6039 0 -6038 0 * +Ed + 1e-07 1 1 0 +1 1180 0 0 3.14159265358979 +2 2768 391 0 0 3.14159265358979 +4 C0 568 0 391 0 +2 2769 568 0 0 3.14159265358979 +0 + +0101000 ++6038 0 -6039 0 * +Ed + 1e-07 1 1 0 +1 1181 0 -4.16049991609 2.83950008391 +2 2770 547 0 -4.16049991609 2.83950008391 +2 2771 546 0 -4.16049991609 2.83950008391 +4 CN 547 0 546 0 +0 + +0101000 ++6037 0 -6074 0 * +Ed + 1.00001574673022e-07 1 1 0 +1 1182 0 3.14159265358979 4.21238898038442 +2 2772 547 0 3.14159265358979 4.21238898038442 +4 C0 547 0 543 0 +2 2773 543 0 3.14159265358979 4.21238898038442 +2 2774 569 233 3.14159265358979 4.21238898038442 +0 + +0101000 ++6037 0 -6036 234 * +Ed + 1.00001596076205e-07 1 1 0 +1 1182 0 4.21238898038442 6.28318530717959 +2 2772 547 0 4.21238898038442 6.28318530717959 +4 C0 547 0 543 0 +2 2773 543 0 4.21238898038442 6.28318530717959 +2 2775 570 233 4.21238898038442 6.28318530717959 +0 + +0101000 ++6036 234 -6035 0 * +Ed + 1e-07 1 1 0 +1 1183 0 -4.16049991609 2.83950008391 +2 2776 547 0 -4.16049991609 2.83950008391 +2 2777 546 0 -4.16049991609 2.83950008391 +4 CN 547 0 546 0 +0 + +0101000 ++6035 0 -6075 0 * +Ed + 1.00001456947329e-07 1 1 0 +1 1184 0 0 1.07079632679402 +2 2778 546 0 0 1.07079632679402 +4 C0 546 0 543 0 +2 2779 543 0 0 1.07079632679402 +2 2780 570 233 0 1.07079632679402 +0 + +0101000 ++6035 0 -6076 236 * +Ed + 1.00001682254241e-07 1 1 0 +1 1184 0 1.07079632679402 3.14159265358979 +2 2778 546 0 1.07079632679402 3.14159265358979 +4 C0 546 0 543 0 +2 2779 543 0 1.07079632679402 3.14159265358979 +2 2781 569 233 1.07079632679402 3.14159265358979 +0 + +0101000 ++6076 236 -6037 0 * +Ed + 1e-07 1 1 0 +1 1185 0 -22 -18 +2 2782 378 0 -22 -18 +2 2783 379 0 -22 -18 +4 CN 378 0 379 0 +0 + +0101000 ++6051 0 -6320 234 * +Ed + 1e-07 1 1 0 +1 1186 0 -22 -18 +2 2784 378 0 -22 -18 +2 2785 379 0 -22 -18 +4 CN 378 0 379 0 +0 + +0101000 ++6050 0 -6321 234 * +Ed + 1e-07 1 1 0 +1 1187 0 -44.5 -43 +2 2786 388 0 -44.5 -43 +2 2787 389 0 -44.5 -43 +4 CN 388 0 389 0 +0 + +0101000 ++6041 0 -6302 234 * +Ed + 1e-07 1 1 0 +1 1188 0 -44.5 -43 +2 2788 388 0 -44.5 -43 +2 2789 389 0 -44.5 -43 +4 CN 388 0 389 0 +0 + +0101000 ++6040 0 -6303 234 * +Ed + 1e-07 1 1 0 +1 1189 0 -44.5 -43 +2 2790 390 0 -44.5 -43 +2 2791 391 0 -44.5 -43 +4 CN 390 0 391 0 +0 + +0101000 ++6039 0 -6300 234 * +Ed + 1e-07 1 1 0 +1 1190 0 -44.5 -43 +2 2792 390 0 -44.5 -43 +2 2793 391 0 -44.5 -43 +4 CN 390 0 391 0 +0 + +0101000 ++6038 0 -6301 234 * +Ed + 1e-07 1 1 0 +1 1191 0 -3.04627983564482 4.0617064475521 +2 2794 392 0 -3.04627983564482 4.0617064475521 +2 2795 393 0 -3.04627983564482 4.0617064475521 +4 CN 392 0 393 0 +0 + +0101000 ++6298 234 -6034 0 * +Ed + 1e-07 1 1 0 +1 1192 0 2.64159265359045 5.78318530718024 +2 2796 392 0 2.64159265359045 5.78318530718024 +4 C0 392 0 543 0 +2 2797 543 0 2.64159265359045 5.78318530718024 +0 + +0101000 ++6033 0 -6034 0 * +Ed + 1e-07 1 1 0 +1 1193 0 -3.04627983564482 4.0617064475521 +2 2798 392 0 -3.04627983564482 4.0617064475521 +2 2799 393 0 -3.04627983564482 4.0617064475521 +4 G2 392 0 393 0 +0 + +0101000 ++6299 234 -6033 0 * +Ed + 1e-07 1 1 0 +1 1194 0 5.78318530718024 8.92477796077003 +2 2800 393 0 5.78318530718024 8.92477796077003 +4 C0 393 0 543 0 +2 2801 543 0 5.78318530718024 8.92477796077003 +0 + +0101000 ++6034 0 -6033 0 * +Ed + 1e-07 1 1 0 +1 1195 0 -17.5 -13.5 +2 2802 377 0 -17.5 -13.5 +2 2803 376 0 -17.5 -13.5 +4 CN 377 0 376 0 +0 + +0101000 ++6055 0 -6323 234 * +Ed + 1e-07 1 1 0 +1 1196 0 -17.5 -13.5 +2 2804 377 0 -17.5 -13.5 +2 2805 376 0 -17.5 -13.5 +4 CN 377 0 376 0 +0 + +0101000 ++6054 0 -6322 234 * +Ed + 1e-07 1 1 0 +1 1197 0 -26 -19 +2 2806 357 0 -26 -19 +4 G1 357 0 548 0 +2 2807 548 0 -26 -19 +0 + +0101000 ++6032 0 -6351 234 * +Ed + 1e-07 1 1 0 +1 1198 0 1.5707963267949 2.35619449019234 +2 2808 357 0 1.5707963267949 2.35619449019234 +4 C0 357 0 543 0 +2 2809 543 0 1.5707963267949 2.35619449019234 +0 + +0101000 ++6032 0 -6058 0 * +Ed + 1e-07 1 1 0 +1 1199 0 -18 18 +4 C0 557 0 543 0 +2 2810 557 0 -18 18 +2 2811 543 0 -18 18 +0 + +0101000 ++6060 0 -6059 0 * +Ed + 1e-07 1 1 0 +1 1200 0 -1.0256020699 1.0256020699 +4 C0 555 0 543 0 +2 2812 555 0 -1.0256020699 1.0256020699 +2 2813 543 0 -1.0256020699 1.0256020699 +0 + +0101000 ++6062 0 -6063 0 * +Ed + 1e-07 1 1 0 +1 1201 0 -3.5 3.5 +4 C0 554 0 553 0 +2 2814 553 0 -3.5 3.5 +2 2815 554 0 -3.5 3.5 +0 + +0101000 ++6031 0 -6332 234 * +Ed + 1e-07 1 1 0 +1 1202 0 -21.07275669483 21.07275669488 +4 C0 554 0 543 0 +2 2816 554 0 -21.07275669483 21.07275669488 +2 2817 543 0 -21.07275669483 21.07275669488 +0 + +0101000 ++6064 0 -6031 0 * +Ed + 1e-07 1 1 0 +1 1203 0 -15.394965591 15.3949655911 +4 C0 553 0 543 0 +2 2818 553 0 -15.394965591 15.3949655911 +2 2819 543 0 -15.394965591 15.3949655911 +0 + +0101000 ++6031 0 -6065 0 * +Ed + 1e-07 1 1 0 +1 1204 0 3.92699081699431 4.71238898038469 +2 2820 365 0 3.92699081699431 4.71238898038469 +4 C0 365 0 543 0 +2 2821 543 0 3.92699081699431 4.71238898038469 +0 + +0101000 ++6066 0 -6030 0 * +Ed + 1e-07 1 1 0 +1 1205 0 -26 -19 +2 2822 365 0 -26 -19 +4 G1 365 0 551 0 +2 2823 551 0 -26 -19 +0 + +0101000 ++6030 0 -6340 234 * +Ed + 1e-07 1 1 0 +1 1206 0 -10.07893218813 10.07893218817 +4 C0 551 0 543 0 +2 2824 551 0 -10.07893218813 10.07893218817 +2 2825 543 0 -10.07893218813 10.07893218817 +0 + +0101000 ++6067 0 -6030 0 * +Ed + 1e-07 1 1 0 +1 1207 0 -14.5100701232189 14.5100701232603 +4 C0 550 0 543 0 +2 2826 550 0 -14.5100701232189 14.5100701232603 +2 2827 543 0 -14.5100701232189 14.5100701232603 +0 + +0101000 ++6070 0 -6069 0 * +Ed + 1e-07 1 1 0 +1 1208 0 -5.00074082596 5.00074082596 +4 C0 549 0 543 0 +2 2828 549 0 -5.00074082596 5.00074082596 +2 2829 543 0 -5.00074082596 5.00074082596 +0 + +0101000 ++6071 0 -6072 0 * +Ed + 1e-07 1 1 0 +1 1209 0 -32.8490498522 32.8490498523 +4 C0 548 0 543 0 +2 2830 548 0 -32.8490498522 32.8490498523 +2 2831 543 0 -32.8490498522 32.8490498523 +0 + +0101000 ++6032 0 -6073 0 * +Ed + 1.00000916600129e-07 1 1 0 +1 1210 0 0 3.14159265358979 +2 2832 571 0 0 3.14159265358979 +2 2833 572 0 0 3.14159265358979 +2 2834 543 237 0 3.14159265358979 +0 + +0101000 ++6029 238 -6028 239 * +Ed + 1.0000112976295e-07 1 1 0 +1 1211 0 0 3.14159265358979 +2 2835 573 0 0 3.14159265358979 +2 2836 574 0 0 3.14159265358979 +2 2837 543 237 0 3.14159265358979 +0 + +0101000 ++6029 238 -6028 239 * +Ed + 1.00000007105427e-07 1 1 0 +1 1212 0 2.07079632679514 5.21238898038494 +2 2838 575 0 2.07079632679514 5.21238898038494 +4 C0 576 0 575 0 +2 2839 576 0 2.07079632679514 5.21238898038494 +2 2840 543 240 2.07079632679514 5.21238898038494 +2 2841 543 241 2.07079632679514 5.21238898038494 +0 + +0101000 ++6027 0 -6026 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1213 0 5.21238898038494 8.35398163397473 +2 2842 577 0 5.21238898038494 8.35398163397473 +4 C0 576 0 577 0 +2 2843 576 0 5.21238898038494 8.35398163397473 +2 2844 543 240 5.21238898038494 8.35398163397473 +2 2845 543 241 5.21238898038494 8.35398163397473 +0 + +0101000 ++6026 0 -6027 0 * +Ed + 1.00001207922651e-07 1 1 0 +1 1214 0 0 3.14159265358979 +2 2846 578 0 0 3.14159265358979 +2 2847 579 0 0 3.14159265358979 +2 2848 543 237 0 3.14159265358979 +0 + +0101000 ++6029 242 -6025 239 * +Ed + 1.00001413980044e-07 1 1 0 +1 1215 0 0 3.14159265358979 +2 2849 580 0 0 3.14159265358979 +2 2850 581 0 0 3.14159265358979 +2 2851 543 237 0 3.14159265358979 +0 + +0101000 ++6029 242 -6025 239 * +Ed + 1.00000007105427e-07 1 1 0 +1 1216 0 2.07079632679536 5.21238898038515 +2 2852 582 0 2.07079632679536 5.21238898038515 +4 C0 583 0 582 0 +2 2853 583 0 2.07079632679536 5.21238898038515 +2 2854 543 243 2.07079632679536 5.21238898038515 +0 + +0101000 ++6024 0 -6023 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1217 0 5.21238898038515 8.35398163397495 +2 2855 584 0 5.21238898038515 8.35398163397495 +4 C0 583 0 584 0 +2 2856 583 0 5.21238898038515 8.35398163397495 +2 2857 543 243 5.21238898038515 8.35398163397495 +0 + +0101000 ++6023 0 -6024 0 * +Ed + 1.00001535199891e-07 1 1 0 +1 1218 0 0 3.60000000000154 +2 2858 579 0 0 3.60000000000154 +2 2859 579 247 0 3.60000000000154 +2 2860 581 0 0 3.60000000000154 +2 2861 581 248 0 3.60000000000154 +2 2862 585 0 0 3.60000000000154 +2 2863 579 248 0 3.60000000000154 +2 2864 543 249 0 3.60000000000154 +0 + +0101000 ++6025 250 -6079 250 * +Ed + 1.00001364242053e-07 1 1 0 +1 1218 0 0 3.60000000000154 +2 2858 579 0 0 3.60000000000154 +2 2859 579 247 0 3.60000000000154 +2 2860 581 0 0 3.60000000000154 +2 2861 581 248 0 3.60000000000154 +2 2862 585 0 0 3.60000000000154 +2 2865 543 237 0 3.60000000000154 +0 + +0101000 ++6029 242 -6076 242 * +Ed + 1.00003034017523e-07 1 1 0 +1 1219 0 0 3.60000000000153 +2 2866 572 0 0 3.60000000000153 +2 2867 572 254 0 3.60000000000153 +2 2868 574 0 0 3.60000000000153 +2 2869 574 255 0 3.60000000000153 +2 2870 586 0 0 3.60000000000153 +2 2871 572 255 0 3.60000000000153 +2 2872 543 256 0 3.60000000000153 +0 + +0101000 ++6028 257 -6036 257 * +Ed + 1.00001080024958e-07 1 1 0 +1 1219 0 0 3.60000000000153 +2 2866 572 0 0 3.60000000000153 +2 2867 572 254 0 3.60000000000153 +2 2868 574 0 0 3.60000000000153 +2 2869 574 255 0 3.60000000000153 +2 2870 586 0 0 3.60000000000153 +2 2873 543 237 0 3.60000000000153 +0 + +0101000 ++6029 238 -6076 238 * +Ed + 1.00000007105427e-07 1 1 0 +1 1220 0 2.07079632679501 5.2123889803848 +2 2874 587 0 2.07079632679501 5.2123889803848 +4 C0 576 0 587 0 +2 2875 576 0 2.07079632679501 5.2123889803848 +2 2876 543 240 2.07079632679501 5.2123889803848 +2 2877 543 241 2.07079632679501 5.2123889803848 +0 + +0101000 ++6022 0 -6021 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1221 0 5.2123889803848 8.35398163397459 +2 2878 588 0 5.2123889803848 8.35398163397459 +4 C0 576 0 588 0 +2 2879 576 0 5.2123889803848 8.35398163397459 +2 2880 543 240 5.2123889803848 8.35398163397459 +2 2881 543 241 5.2123889803848 8.35398163397459 +0 + +0101000 ++6021 0 -6022 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1222 0 5.21238898038313 8.35398163397292 +2 2882 589 0 5.21238898038313 8.35398163397292 +4 C0 583 0 589 0 +2 2883 583 0 5.21238898038313 8.35398163397292 +2 2884 543 243 5.21238898038313 8.35398163397292 +0 + +0101000 ++6020 0 -6019 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1223 0 2.07079632679333 5.21238898038313 +2 2885 590 0 2.07079632679333 5.21238898038313 +4 C0 583 0 590 0 +2 2886 583 0 2.07079632679333 5.21238898038313 +2 2887 543 243 2.07079632679333 5.21238898038313 +0 + +0101000 ++6019 0 -6020 0 * +Ed + 1e-07 1 1 0 +1 1224 0 5.21238898038493 8.35398163397472 +2 2888 591 0 5.21238898038493 8.35398163397472 +2 2889 592 0 5.21238898038493 8.35398163397472 +4 C0 591 0 592 0 +0 + +0101000 ++6018 0 -6017 0 * +Ed + 1e-07 1 1 0 +1 1225 0 -2.28470987674373 2.28470987674373 +2 2890 591 0 -2.28470987674373 2.28470987674373 +2 2891 593 0 -2.28470987674373 2.28470987674373 +4 G2 591 0 593 0 +0 + +0101000 ++6016 0 -6018 0 * +Ed + 1e-07 1 1 0 +1 1226 0 5.21238898038483 8.35398163397462 +2 2892 591 0 5.21238898038483 8.35398163397462 +4 C0 591 0 205 0 +2 2893 205 0 5.21238898038483 8.35398163397462 +0 + +0101000 ++6016 0 -6015 0 * +Ed + 1e-07 1 1 0 +1 1227 0 -2.28470987674373 2.28470987674373 +2 2894 591 0 -2.28470987674373 2.28470987674373 +2 2895 593 0 -2.28470987674373 2.28470987674373 +4 CN 591 0 593 0 +0 + +0101000 ++6015 0 -6017 0 * +Ed + 1e-07 1 1 0 +1 1228 0 2.07079632679513 5.21238898038493 +2 2896 593 0 2.07079632679513 5.21238898038493 +2 2897 594 0 2.07079632679513 5.21238898038493 +4 C0 593 0 594 0 +0 + +0101000 ++6017 0 -6018 0 * +Ed + 1e-07 1 1 0 +1 1229 0 2.07079632679503 5.21238898038483 +2 2898 593 0 2.07079632679503 5.21238898038483 +4 C0 593 0 205 0 +2 2899 205 0 2.07079632679503 5.21238898038483 +0 + +0101000 ++6015 0 -6016 0 * +Ed + 1e-07 1 1 0 +1 1230 0 -0.5 -0.0999999999999996 +2 2900 595 0 -0.5 -0.0999999999999996 +2 2901 596 0 -0.5 -0.0999999999999996 +4 CN 595 0 596 0 +0 + +0101000 ++6014 0 -6013 0 * +Ed + 1e-07 1 1 0 +1 1231 0 5.21238898038494 8.35398163397473 +2 2902 595 0 5.21238898038494 8.35398163397473 +2 2903 597 0 5.21238898038494 8.35398163397473 +4 C1 595 0 597 0 +0 + +0101000 ++6014 0 -6012 0 * +Ed + 1e-07 1 1 0 +1 1232 0 -0.5 -0.0999999999999996 +2 2904 595 0 -0.5 -0.0999999999999996 +2 2905 596 0 -0.5 -0.0999999999999996 +4 CN 595 0 596 0 +0 + +0101000 ++6012 0 -6011 0 * +Ed + 1e-07 1 1 0 +1 1233 0 5.21238898038494 8.35398163397473 +2 2906 595 0 5.21238898038494 8.35398163397473 +2 2907 598 0 5.21238898038494 8.35398163397473 +4 C0 595 0 598 0 +0 + +0101000 ++6013 0 -6011 0 * +Ed + 1e-07 1 1 0 +1 1234 0 2.07079632679515 5.21238898038494 +2 2908 596 0 2.07079632679515 5.21238898038494 +2 2909 599 0 2.07079632679515 5.21238898038494 +4 C1 596 0 599 0 +0 + +0101000 ++6012 0 -6014 0 * +Ed + 1e-07 1 1 0 +1 1235 0 2.07079632679515 5.21238898038494 +2 2910 596 0 2.07079632679515 5.21238898038494 +2 2911 600 0 2.07079632679515 5.21238898038494 +4 C0 596 0 600 0 +0 + +0101000 ++6011 0 -6013 0 * +Ed + 1e-07 1 1 0 +1 1236 0 -0.988854382001193 0.988854381998375 +2 2912 600 0 -0.988854382001193 0.988854381998375 +2 2913 598 0 -0.988854382001193 0.988854381998375 +4 G2 600 0 598 0 +0 + +0101000 ++6013 0 -6010 0 * +Ed + 1e-07 1 1 0 +1 1237 0 2.07079627976294 5.21238898038456 +2 2914 600 0 2.07079627976294 5.21238898038456 +4 C0 600 0 601 0 +2 2915 601 0 2.07079627976294 5.21238898038456 +0 + +0101000 ++6009 0 -6010 0 * +Ed + 1e-07 1 1 0 +1 1238 0 -0.988854381999761 0.988854382000159 +2 2916 600 0 -0.988854381999761 0.988854382000159 +2 2917 598 0 -0.988854381999761 0.988854382000159 +4 G2 600 0 598 0 +0 + +0101000 ++6011 0 -6009 0 * +Ed + 1e-07 1 1 0 +1 1239 0 5.21238898038456 8.35398158694252 +2 2918 598 0 5.21238898038456 8.35398158694252 +4 C0 598 0 601 0 +2 2919 601 0 5.21238898038456 8.35398158694252 +0 + +0101000 ++6010 0 -6009 0 * +Ed + 1e-07 1 1 0 +1 1240 0 -0.75 0.25 +2 2920 577 0 -0.75 0.25 +2 2921 575 0 -0.75 0.25 +4 CN 577 0 575 0 +0 + +0101000 ++6026 0 -6008 0 * +Ed + 1e-07 1 1 0 +1 1241 0 -0.75 0.25 +2 2922 577 0 -0.75 0.25 +2 2923 575 0 -0.75 0.25 +4 CN 577 0 575 0 +0 + +0101000 ++6027 0 -6007 0 * +Ed + 1e-07 1 1 0 +1 1242 0 5.21238898038494 8.35398163397473 +2 2924 577 0 5.21238898038494 8.35398163397473 +2 2925 602 0 5.21238898038494 8.35398163397473 +4 G1 577 0 602 0 +0 + +0101000 ++6008 0 -6007 0 * +Ed + 1e-07 1 1 0 +1 1243 0 2.07079632679514 5.21238898038494 +2 2926 575 0 2.07079632679514 5.21238898038494 +2 2927 603 0 2.07079632679514 5.21238898038494 +4 G1 575 0 603 0 +0 + +0101000 ++6007 0 -6008 0 * +Ed + 1e-07 1 1 0 +1 1244 0 5.21238898038404 8.35398163397383 +2 2928 604 0 5.21238898038404 8.35398163397383 +4 C0 605 0 604 0 +2 2929 605 0 5.21238898038404 8.35398163397383 +0 + +0101000 ++6006 0 -6005 0 * +Ed + 1e-07 1 1 0 +1 1245 0 2.07079632679424 5.21238898038404 +2 2930 606 0 2.07079632679424 5.21238898038404 +4 C0 605 0 606 0 +2 2931 605 0 2.07079632679424 5.21238898038404 +0 + +0101000 ++6005 0 -6006 0 * +Ed + 1e-07 1 1 0 +1 1246 0 2.07079632679519 5.21238898038498 +2 2932 603 0 2.07079632679519 5.21238898038498 +4 G1 605 0 603 0 +2 2933 605 0 2.07079632679519 5.21238898038498 +0 + +0101000 ++6004 0 -6003 0 * +Ed + 1e-07 1 1 0 +1 1247 0 5.21238898038498 8.35398163397477 +2 2934 602 0 5.21238898038498 8.35398163397477 +4 G1 605 0 602 0 +2 2935 605 0 5.21238898038498 8.35398163397477 +0 + +0101000 ++6003 0 -6004 0 * +Ed + 1e-07 1 1 0 +1 1248 0 1.5707963267949 3.14159265358979 +2 2936 603 0 1.5707963267949 3.14159265358979 +2 2937 602 0 1.5707963267949 3.14159265358979 +4 G2 603 0 602 0 +0 + +0101000 ++6003 0 -6008 0 * +Ed + 1e-07 1 1 0 +1 1249 0 1.5707963267949 3.14159265358979 +2 2938 603 0 1.5707963267949 3.14159265358979 +2 2939 602 0 1.5707963267949 3.14159265358979 +4 G2 603 0 602 0 +0 + +0101000 ++6004 0 -6007 0 * +Ed + 1e-07 1 1 0 +1 1250 0 5.23598775598799 6.28318530717959 +2 2940 599 0 5.23598775598799 6.28318530717959 +2 2941 597 0 5.23598775598799 6.28318530717959 +4 CN 599 0 597 0 +0 + +0101000 ++6002 0 -6014 0 * +Ed + 1e-07 1 1 0 +1 1251 0 5.23598775598799 6.28318530717959 +2 2942 599 0 5.23598775598799 6.28318530717959 +2 2943 597 0 5.23598775598799 6.28318530717959 +4 CN 599 0 597 0 +0 + +0101000 ++6001 0 -6012 0 * +Ed + 1e-07 1 1 0 +1 1252 0 2.07079632679507 5.21238898038486 +2 2944 599 0 2.07079632679507 5.21238898038486 +2 2945 208 0 2.07079632679507 5.21238898038486 +4 C1 599 0 208 0 +0 + +0101000 ++6001 0 -6002 0 * +Ed + 1e-07 1 1 0 +1 1253 0 5.21238898038486 8.35398163397466 +2 2946 597 0 5.21238898038486 8.35398163397466 +2 2947 207 0 5.21238898038486 8.35398163397466 +4 C1 597 0 207 0 +0 + +0101000 ++6002 0 -6001 0 * +Ed + 1e-07 1 1 0 +1 1254 0 2.0943951023856 3.14159265358979 +2 2948 208 0 2.0943951023856 3.14159265358979 +2 2949 207 0 2.0943951023856 3.14159265358979 +4 CN 208 0 207 0 +0 + +0101000 ++6002 0 -6567 0 * +Ed + 1e-07 1 1 0 +1 1255 0 2.0943951023856 3.14159265358979 +2 2950 208 0 2.0943951023856 3.14159265358979 +2 2951 207 0 2.0943951023856 3.14159265358979 +4 G2 208 0 207 0 +0 + +0101000 ++6001 0 -6566 0 * +Ed + 1e-07 1 1 0 +1 1256 0 -0.35 0.05 +2 2952 592 0 -0.35 0.05 +2 2953 594 0 -0.35 0.05 +4 CN 592 0 594 0 +0 + +0101000 ++6018 0 -6000 0 * +Ed + 1e-07 1 1 0 +1 1257 0 -0.35 0.05 +2 2954 592 0 -0.35 0.05 +2 2955 594 0 -0.35 0.05 +4 CN 592 0 594 0 +0 + +0101000 ++6017 0 -5999 0 * +Ed + 1e-07 1 1 0 +1 1258 0 5.21238898038493 8.35398163397472 +2 2956 592 0 5.21238898038493 8.35398163397472 +2 2957 607 0 5.21238898038493 8.35398163397472 +4 G1 592 0 607 0 +0 + +0101000 ++6000 0 -5999 0 * +Ed + 1e-07 1 1 0 +1 1259 0 2.07079632679513 5.21238898038493 +2 2958 594 0 2.07079632679513 5.21238898038493 +2 2959 608 0 2.07079632679513 5.21238898038493 +4 G1 594 0 608 0 +0 + +0101000 ++5999 0 -6000 0 * +Ed + 1e-07 1 1 0 +1 1260 0 1.5707963267949 3.14159265358979 +2 2960 608 0 1.5707963267949 3.14159265358979 +2 2961 607 0 1.5707963267949 3.14159265358979 +4 G2 608 0 607 0 +0 + +0101000 ++5998 0 -6000 0 * +Ed + 1e-07 1 1 0 +1 1261 0 1.5707963267949 3.14159265358979 +2 2962 608 0 1.5707963267949 3.14159265358979 +2 2963 607 0 1.5707963267949 3.14159265358979 +4 G2 608 0 607 0 +0 + +0101000 ++5997 0 -5999 0 * +Ed + 1e-07 1 1 0 +1 1262 0 2.07079632679539 5.21238898038518 +2 2964 608 0 2.07079632679539 5.21238898038518 +4 G1 608 0 609 0 +2 2965 609 0 2.07079632679539 5.21238898038518 +0 + +0101000 ++5997 0 -5998 0 * +Ed + 1e-07 1 1 0 +1 1263 0 5.21238898038518 8.35398163397497 +2 2966 607 0 5.21238898038518 8.35398163397497 +4 G1 607 0 609 0 +2 2967 609 0 5.21238898038518 8.35398163397497 +0 + +0101000 ++5998 0 -5997 0 * +Ed + 1e-07 1 1 0 +1 1264 0 -0.35 0.05 +2 2968 588 0 -0.35 0.05 +2 2969 587 0 -0.35 0.05 +4 CN 588 0 587 0 +0 + +0101000 ++6021 0 -5996 0 * +Ed + 1e-07 1 1 0 +1 1265 0 -0.35 0.05 +2 2970 588 0 -0.35 0.05 +2 2971 587 0 -0.35 0.05 +4 CN 588 0 587 0 +0 + +0101000 ++6022 0 -5995 0 * +Ed + 1e-07 1 1 0 +1 1266 0 5.2123889803848 8.35398163397459 +2 2972 588 0 5.2123889803848 8.35398163397459 +2 2973 610 0 5.2123889803848 8.35398163397459 +4 G1 588 0 610 0 +0 + +0101000 ++5996 0 -5995 0 * +Ed + 1e-07 1 1 0 +1 1267 0 2.07079632679501 5.2123889803848 +2 2974 587 0 2.07079632679501 5.2123889803848 +2 2975 611 0 2.07079632679501 5.2123889803848 +4 G1 587 0 611 0 +0 + +0101000 ++5995 0 -5996 0 * +Ed + 1e-07 1 1 0 +1 1268 0 5.21238898038508 8.35398163397487 +2 2976 610 0 5.21238898038508 8.35398163397487 +4 G1 609 0 610 0 +2 2977 609 0 5.21238898038508 8.35398163397487 +0 + +0101000 ++5994 0 -5993 0 * +Ed + 1e-07 1 1 0 +1 1269 0 2.07079632679529 5.21238898038508 +2 2978 611 0 2.07079632679529 5.21238898038508 +4 G1 609 0 611 0 +2 2979 609 0 2.07079632679529 5.21238898038508 +0 + +0101000 ++5993 0 -5994 0 * +Ed + 1e-07 1 1 0 +1 1270 0 0 1.5707963267949 +2 2980 611 0 0 1.5707963267949 +2 2981 610 0 0 1.5707963267949 +4 G2 611 0 610 0 +0 + +0101000 ++5996 0 -5994 0 * +Ed + 1e-07 1 1 0 +1 1271 0 0 1.5707963267949 +2 2982 611 0 0 1.5707963267949 +2 2983 610 0 0 1.5707963267949 +4 G2 611 0 610 0 +0 + +0101000 ++5995 0 -5993 0 * +Ed + 1e-07 1 1 0 +1 1272 0 -2.25 1.05 +2 2984 604 0 -2.25 1.05 +2 2985 606 0 -2.25 1.05 +4 CN 604 0 606 0 +0 + +0101000 ++6006 0 -5992 0 * +Ed + 1e-07 1 1 0 +1 1273 0 -2.25 1.05 +2 2986 604 0 -2.25 1.05 +2 2987 606 0 -2.25 1.05 +4 CN 604 0 606 0 +0 + +0101000 ++6005 0 -5991 0 * +Ed + 1e-07 1 1 0 +1 1274 0 5.21238898038404 8.35398163397383 +2 2988 604 0 5.21238898038404 8.35398163397383 +2 2989 612 0 5.21238898038404 8.35398163397383 +4 C0 604 0 612 0 +0 + +0101000 ++5992 0 -5991 0 * +Ed + 1e-07 1 1 0 +1 1275 0 2.07079632679424 5.21238898038404 +2 2990 606 0 2.07079632679424 5.21238898038404 +2 2991 613 0 2.07079632679424 5.21238898038404 +4 C0 606 0 613 0 +0 + +0101000 ++5991 0 -5992 0 * +Ed + 1e-07 1 1 0 +1 1276 0 2.07079632679509 5.21238898038489 +2 2992 613 0 2.07079632679509 5.21238898038489 +4 C0 601 0 613 0 +2 2993 601 0 2.07079632679509 5.21238898038489 +0 + +0101000 ++5990 0 -5989 0 * +Ed + 1e-07 1 1 0 +1 1277 0 5.21238898038489 8.35398163397468 +2 2994 612 0 5.21238898038489 8.35398163397468 +4 C0 601 0 612 0 +2 2995 601 0 5.21238898038489 8.35398163397468 +0 + +0101000 ++5989 0 -5990 0 * +Ed + 1e-07 1 1 0 +1 1278 0 -0.848528137451408 0.848528137401766 +2 2996 613 0 -0.848528137451408 0.848528137401766 +2 2997 612 0 -0.848528137451408 0.848528137401766 +4 G2 613 0 612 0 +0 + +0101000 ++5990 0 -5991 0 * +Ed + 1e-07 1 1 0 +1 1279 0 -0.848528137451408 0.848528137401766 +2 2998 613 0 -0.848528137451408 0.848528137401766 +2 2999 612 0 -0.848528137451408 0.848528137401766 +4 G2 613 0 612 0 +0 + +0101000 ++5989 0 -5992 0 * +Ed + 1e-07 1 1 0 +1 1280 0 185.426664441875 217.336984231697 +2 3000 614 0 185.426664441875 217.336984231697 +2 3001 615 0 185.426664441875 217.336984231697 +4 CN 614 0 615 0 +0 + +0101000 ++5988 0 -5987 0 * +Ed + 1e-07 1 1 0 +1 1281 0 3.14159265358781 6.28318530717959 +2 3002 614 0 3.14159265358781 6.28318530717959 +4 C0 614 0 616 0 +2 3003 616 0 3.14159265358781 6.28318530717959 +0 + +0101000 ++5986 0 -5987 0 * +Ed + 1e-07 1 1 0 +1 1282 0 185.426664441698 217.336984231566 +2 3004 614 0 185.426664441698 217.336984231566 +2 3005 615 0 185.426664441698 217.336984231566 +4 CN 614 0 615 0 +0 + +0101000 ++5985 0 -5986 0 * +Ed + 0.000487983936926011 1 1 0 +1 1283 0 0 37.1509079804 +2 3006 614 0 0 37.1509079804 +2 3007 617 0 0 37.1509079804 +4 C0 614 0 617 0 +0 + +0101000 ++5985 0 -5988 0 * +Ed + 1e-07 1 1 0 +1 1284 0 0 3.14159265358781 +2 3008 615 0 0 3.14159265358781 +4 C0 615 0 616 0 +2 3009 616 0 0 3.14159265358781 +0 + +0101000 ++5987 0 -5986 0 * +Ed + 0.00037768978008086 1 1 0 +1 1285 0 0 36.0232535405 +2 3010 615 0 0 36.0232535405 +2 3011 617 0 0 36.0232535405 +4 C0 615 0 617 0 +0 + +0101000 ++5988 0 -5985 0 * +Ed + 1e-07 1 1 0 +1 1286 0 -37.2243240828707 37.2243240827708 +4 C0 616 0 618 0 +2 3012 616 0 -37.2243240828707 37.2243240827708 +2 3013 618 0 -37.2243240828707 37.2243240827708 +0 + +0101000 ++5984 0 -5983 258 * +Ed + 1e-07 1 1 0 +1 1287 0 -86.8538664599081 86.853866459796 +4 C0 616 0 619 0 +2 3014 616 0 -86.8538664599081 86.853866459796 +0 + +0101000 ++5984 0 -5982 0 * +Ed + 1e-07 1 1 0 +1 1288 0 -39.071405248072 39.0714052482297 +4 C0 616 0 620 0 +2 3015 616 0 -39.071405248072 39.0714052482297 +2 3016 620 0 -39.071405248072 39.0714052482297 +0 + +0101000 ++5982 0 -5981 258 * +Ed + 1.00000007105427e-07 1 1 0 +1 1289 0 -86.5459166772619 86.5459166763555 +4 C0 616 0 621 0 +2 3017 616 0 -86.5459166772619 86.5459166763555 +2 3018 621 0 -86.5459166772619 86.5459166763555 +2 3019 622 259 -86.5459166772619 86.5459166763555 +0 + +0101000 ++5983 258 -5981 258 * +Ed + 1e-07 1 1 0 +1 1290 0 5.21238898038099 8.35398163393597 +2 3020 623 0 5.21238898038099 8.35398163393597 +4 C0 616 0 623 0 +2 3021 616 0 5.21238898038099 8.35398163393597 +0 + +0101000 ++5980 0 -5979 0 * +Ed + 1e-07 1 1 0 +1 1291 0 2.07079632675639 5.21238898038099 +2 3022 624 0 2.07079632675639 5.21238898038099 +4 C0 616 0 624 0 +2 3023 616 0 2.07079632675639 5.21238898038099 +0 + +0101000 ++5979 0 -5980 0 * +Ed + 1e-07 1 1 0 +1 1292 0 5.21238898040235 8.35398163395733 +2 3024 625 0 5.21238898040235 8.35398163395733 +4 C0 616 0 625 0 +2 3025 616 0 5.21238898040235 8.35398163395733 +0 + +0101000 ++5978 0 -5977 0 * +Ed + 1e-07 1 1 0 +1 1293 0 2.07079632677774 5.21238898040235 +2 3026 626 0 2.07079632677774 5.21238898040235 +4 C0 616 0 626 0 +2 3027 616 0 2.07079632677774 5.21238898040235 +0 + +0101000 ++5977 0 -5978 0 * +Ed + 1e-07 1 1 0 +1 1294 0 0 3.14159265358781 +2 3028 627 0 0 3.14159265358781 +4 C0 616 0 627 0 +2 3029 616 0 0 3.14159265358781 +0 + +0101000 ++5976 0 -5975 0 * +Ed + 1e-07 1 1 0 +1 1295 0 3.14159265358781 6.28318530717959 +2 3030 628 0 3.14159265358781 6.28318530717959 +4 C0 616 0 628 0 +2 3031 616 0 3.14159265358781 6.28318530717959 +0 + +0101000 ++5975 0 -5976 0 * +Ed + 1e-07 1 1 0 +1 1296 0 -15.7352309417689 15.735230942798 +4 C0 619 0 620 0 +2 3032 620 0 -15.7352309417689 15.735230942798 +0 + +0101000 ++5974 0 -5982 0 * +Ed + 1e-07 1 1 0 +1 1297 0 -15.0000000001821 15.0000000002325 +4 C0 619 0 618 0 +2 3033 618 0 -15.0000000001821 15.0000000002325 +0 + +0101000 ++5984 0 -5973 0 * +Ed + 1e-07 1 1 0 +1 1298 0 -91.6075484854623 91.6075484862792 +4 C0 619 0 629 0 +0 + +0101000 ++5973 0 -5974 0 * +Ed + 1e-07 1 1 0 +1 1299 0 -9.57384638854456 9.57384638888641 +4 C0 620 0 629 0 +2 3034 620 0 -9.57384638854456 9.57384638888641 +0 + +0101000 ++5974 0 -5972 0 * +Ed + 8.5350593839157e-06 1 1 0 +1 1300 0 0 88.7421922695 +2 3035 617 0 0 88.7421922695 +4 C0 620 0 617 0 +2 3036 620 0 0 88.7421922695 +0 + +0101000 ++5972 0 -5971 0 * +Ed + 1e-07 1 1 0 +1 1301 0 -5.69315059684851 5.69315059684851 +4 C0 620 0 630 0 +2 3037 620 0 -5.69315059684851 5.69315059684851 +0 + +0101000 ++5970 0 -5971 0 * +Ed + 1e-07 1 1 0 +1 1302 0 -11 11 +2 3038 631 0 -11 11 +4 G1 620 0 631 0 +2 3039 620 0 -11 11 +0 + +0101000 ++5969 258 -5970 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 1303 0 -41.1140764084104 41.1140764093201 +4 C0 620 0 621 0 +2 3040 620 0 -41.1140764084104 41.1140764093201 +2 3041 621 0 -41.1140764084104 41.1140764093201 +2 3042 622 259 -41.1140764084104 41.1140764093201 +0 + +0101000 ++5969 258 -5981 258 * +Ed + 1e-07 1 1 0 +1 1304 0 0.656929976553464 2.07079632679086 +2 3043 632 0 0.656929976553464 2.07079632679086 +4 C0 629 0 632 0 +0 + +0101000 ++5968 0 -5967 0 * +Ed + 1e-07 1 1 0 +1 1305 0 2.07079632679086 2.48466267704095 +2 3044 633 0 2.07079632679086 2.48466267704095 +4 C0 629 0 633 0 +0 + +0101000 ++5967 0 -5966 0 * +Ed + 1e-07 1 1 0 +1 1306 0 -7.63215328917213 7.63215328959508 +2 3045 617 0 -7.63215328917213 7.63215328959508 +4 G1 629 0 617 0 +0 + +0101000 ++5966 0 -5972 0 * +Ed + 1e-07 1 1 0 +1 1307 0 -7.62112432896668 7.62112432891282 +4 C0 629 0 618 0 +2 3046 618 0 -7.62112432896668 7.62112432891282 +0 + +0101000 ++5973 0 -5965 0 * +Ed + 1e-07 1 1 0 +1 1308 0 -18.0785189535059 18.0785189529983 +2 3047 617 0 -18.0785189535059 18.0785189529983 +4 G1 629 0 617 0 +0 + +0101000 ++5965 0 -5964 0 * +Ed + 1e-07 1 1 0 +1 1309 0 0.65692997654818 2.0707963267947 +2 3048 634 0 0.65692997654818 2.0707963267947 +4 C0 629 0 634 0 +0 + +0101000 ++5964 0 -5963 0 * +Ed + 1e-07 1 1 0 +1 1310 0 2.0707963267947 2.48466267704337 +2 3049 635 0 2.0707963267947 2.48466267704337 +4 C0 629 0 635 0 +0 + +0101000 ++5963 0 -5962 0 * +Ed + 1e-07 1 1 0 +1 1311 0 -34.1625842239892 34.1625842240779 +2 3050 617 0 -34.1625842239892 34.1625842240779 +4 G1 629 0 617 0 +0 + +0101000 ++5962 0 -5968 0 * +Ed + 1e-07 1 1 0 +1 1312 0 -35.7489666297 -13.7489666297 +2 3051 631 0 -35.7489666297 -13.7489666297 +4 G1 631 0 636 0 +2 3052 636 0 -35.7489666297 -13.7489666297 +0 + +0101000 ++5961 258 -5960 0 * +Ed + 1e-07 1 1 0 +1 1313 0 4.5378560551848 4.71238898038469 +2 3053 631 0 4.5378560551848 4.71238898038469 +4 C0 631 0 630 0 +0 + +0101000 ++5970 0 -5960 0 * +Ed + 1.00000096644261e-07 1 1 0 +1 1314 0 4.5378560551848 4.71238898038469 +2 3054 631 0 4.5378560551848 4.71238898038469 +4 C0 631 0 621 0 +2 3055 621 0 4.5378560551848 4.71238898038469 +2 3056 637 259 4.5378560551848 4.71238898038469 +2 3057 622 259 4.5378560551848 4.71238898038469 +0 + +0101000 ++5969 258 -5961 258 * +Ed + 1e-07 1 1 0 +1 1315 0 -9.27885679857606 15.9999999998976 +2 3058 635 0 -9.27885679857606 15.9999999998976 +2 3059 634 0 -9.27885679857606 15.9999999998976 +4 G2 635 0 634 0 +0 + +0101000 ++5959 0 -5958 0 * +Ed + 1e-07 1 1 0 +1 1316 0 2.07079632681205 5.21238898038449 +2 3060 635 0 2.07079632681205 5.21238898038449 +4 C0 635 0 638 0 +0 + +0101000 ++5957 0 -5958 0 * +Ed + 1e-07 1 1 0 +1 1317 0 4.00000000065123 15.9999999999022 +2 3061 635 0 4.00000000065123 15.9999999999022 +2 3062 634 0 4.00000000065123 15.9999999999022 +4 CN 635 0 634 0 +0 + +0101000 ++5963 0 -5957 0 * +Ed + 0.000424487753343201 1 1 0 +1 1318 0 0 83.0740061486 +2 3063 635 0 0 83.0740061486 +2 3064 617 0 0 83.0740061486 +4 C0 635 0 617 0 +0 + +0101000 ++5959 0 -5962 0 * +Ed + 1e-07 1 1 0 +1 1319 0 5.21238898038449 8.35398163399164 +2 3065 634 0 5.21238898038449 8.35398163399164 +4 C0 634 0 638 0 +0 + +0101000 ++5958 0 -5957 0 * +Ed + 0.000304551794150692 1 1 0 +1 1320 0 0 53.2286091963 +2 3066 634 0 0 53.2286091963 +2 3067 617 0 0 53.2286091963 +4 C0 634 0 617 0 +0 + +0101000 ++5959 0 -5964 0 * +Ed + 1e-07 1 1 0 +1 1321 0 -9.27885679770449 15.9999999999485 +2 3068 633 0 -9.27885679770449 15.9999999999485 +2 3069 632 0 -9.27885679770449 15.9999999999485 +4 G2 633 0 632 0 +0 + +0101000 ++5956 0 -5955 0 * +Ed + 1e-07 1 1 0 +1 1322 0 2.07079632679086 5.21238898038065 +2 3070 633 0 2.07079632679086 5.21238898038065 +4 C0 633 0 639 0 +0 + +0101000 ++5954 0 -5955 0 * +Ed + 1e-07 1 1 0 +1 1323 0 3.99999999948801 15.9999999997633 +2 3071 633 0 3.99999999948801 15.9999999997633 +2 3072 632 0 3.99999999948801 15.9999999997633 +4 CN 633 0 632 0 +0 + +0101000 ++5967 0 -5954 0 * +Ed + 0.000424487417004458 1 1 0 +1 1324 0 0 83.074006148 +2 3073 633 0 0 83.074006148 +2 3074 617 0 0 83.074006148 +4 C0 633 0 617 0 +0 + +0101000 ++5956 0 -5966 0 * +Ed + 1e-07 1 1 0 +1 1325 0 5.21238898038065 8.35398163397044 +2 3075 632 0 5.21238898038065 8.35398163397044 +4 C0 632 0 639 0 +0 + +0101000 ++5955 0 -5954 0 * +Ed + 0.000304551676750397 1 1 0 +1 1326 0 0 53.2286091966 +2 3076 632 0 0 53.2286091966 +2 3077 617 0 0 53.2286091966 +4 C0 632 0 617 0 +0 + +0101000 ++5956 0 -5968 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1327 0 -48.6255668237 48.6255668237 +4 C0 636 0 621 0 +2 3078 636 0 -48.6255668237 48.6255668237 +2 3079 621 0 -48.6255668237 48.6255668237 +2 3080 622 259 -48.6255668237 48.6255668237 +0 + +0101000 ++5961 258 -5953 258 * +Ed + 1e-07 1 1 0 +1 1328 0 -48.6255668237 48.6255668237 +4 C0 636 0 630 0 +2 3081 636 0 -48.6255668237 48.6255668237 +0 + +0101000 ++5960 0 -5952 0 * +Ed + 1e-07 1 1 0 +1 1329 0 -11 11 +2 3082 640 0 -11 11 +4 G1 636 0 640 0 +2 3083 636 0 -11 11 +0 + +0101000 ++5953 258 -5952 0 * +Ed + 1e-07 1 1 0 +1 1330 0 2.07079632681256 5.21238898037465 +2 3084 626 0 2.07079632681256 5.21238898037465 +4 C0 638 0 626 0 +0 + +0101000 ++5951 0 -5950 0 * +Ed + 1e-07 1 1 0 +1 1331 0 5.21238898037465 8.35398163399214 +2 3085 625 0 5.21238898037465 8.35398163399214 +4 C0 638 0 625 0 +0 + +0101000 ++5950 0 -5951 0 * +Ed + 1e-07 1 1 0 +1 1332 0 2.07079632675195 5.21238898038543 +2 3086 624 0 2.07079632675195 5.21238898038543 +4 C0 639 0 624 0 +0 + +0101000 ++5949 0 -5948 0 * +Ed + 1e-07 1 1 0 +1 1333 0 5.21238898038543 8.35398163393154 +2 3087 623 0 5.21238898038543 8.35398163393154 +4 C0 639 0 623 0 +0 + +0101000 ++5948 0 -5949 0 * +Ed + 1e-07 1 1 0 +1 1334 0 -23.75065661282 23.75065661278 +4 C0 641 0 621 0 +2 3088 641 0 -23.75065661282 23.75065661278 +2 3089 621 0 -23.75065661282 23.75065661278 +2 3090 622 259 -23.75065661282 23.75065661278 +0 + +0101000 ++5947 258 -5946 258 * +Ed + 1e-07 1 1 0 +1 1335 0 -11 11 +2 3091 642 0 -11 11 +4 G1 641 0 642 0 +2 3092 641 0 -11 11 +0 + +0101000 ++5947 258 -5945 0 * +Ed + 1e-07 1 1 0 +1 1336 0 -24.2575672343 24.2575672343 +4 C0 641 0 630 0 +2 3093 641 0 -24.2575672343 24.2575672343 +0 + +0101000 ++5945 0 -5944 0 * +Ed + 1e-07 1 1 0 +1 1337 0 -11.0116737319169 11.0116737319169 +2 3094 643 0 -11.0116737319169 11.0116737319169 +4 G1 641 0 643 0 +2 3095 641 0 -11.0116737319169 11.0116737319169 +0 + +0101000 ++5944 0 -5946 258 * +Ed + 1e-07 1 1 0 +1 1338 0 -3 3 +4 C0 644 0 621 0 +2 3096 644 0 -3 3 +2 3097 621 0 -3 3 +2 3098 622 259 -3 3 +0 + +0101000 ++5943 258 -5942 258 * +Ed + 1e-07 1 1 0 +1 1339 0 -11 11 +2 3099 645 0 -11 11 +4 G1 644 0 645 0 +2 3100 644 0 -11 11 +0 + +0101000 ++5943 258 -5941 0 * +Ed + 1e-07 1 1 0 +1 1340 0 -3 3 +4 C0 644 0 630 0 +2 3101 644 0 -3 3 +0 + +0101000 ++5941 0 -5940 0 * +Ed + 1e-07 1 1 0 +1 1341 0 -11 11 +2 3102 642 0 -11 11 +4 G1 644 0 642 0 +2 3103 644 0 -11 11 +0 + +0101000 ++5942 258 -5940 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1342 0 -32 32 +4 C0 646 0 621 0 +2 3104 646 0 -32 32 +2 3105 621 0 -32 32 +2 3106 622 259 -32 32 +0 + +0101000 ++5939 258 -5938 258 * +Ed + 1e-07 1 1 0 +1 1343 0 -11 11 +2 3107 647 0 -11 11 +4 G1 646 0 647 0 +2 3108 646 0 -11 11 +0 + +0101000 ++5939 258 -5937 0 * +Ed + 1e-07 1 1 0 +1 1344 0 -32 32 +4 C0 646 0 630 0 +2 3109 646 0 -32 32 +0 + +0101000 ++5937 0 -5936 0 * +Ed + 1e-07 1 1 0 +1 1345 0 -11 11 +2 3110 645 0 -11 11 +4 G1 646 0 645 0 +2 3111 646 0 -11 11 +0 + +0101000 ++5938 258 -5936 0 * +Ed + 1e-07 1 1 0 +1 1346 0 4.31415485622323 4.71238898038469 +2 3112 647 0 4.31415485622323 4.71238898038469 +4 C0 647 0 630 0 +0 + +0101000 ++5935 0 -5937 0 * +Ed + 1.11284593881212e-05 1 1 0 +1 1347 0 0 49.700651351 +2 3113 647 0 0 49.700651351 +2 3114 648 0 0 49.700651351 +4 C0 647 0 648 0 +0 + +0101000 ++5935 0 -5934 0 * +Ed + 2.42737479747708e-05 1 1 0 +1 1348 0 2.2678469949 10.9476347047 +2 3115 647 0 2.2678469949 10.9476347047 +2 3116 649 0 2.2678469949 10.9476347047 +4 C0 647 0 649 0 +0 + +0101000 ++5933 258 -5934 0 * +Ed + 1.00000036230713e-07 1 1 0 +1 1349 0 4.21132283824832 4.71238898038469 +2 3117 647 0 4.21132283824832 4.71238898038469 +4 C0 647 0 621 0 +2 3118 621 0 4.21132283824832 4.71238898038469 +2 3119 650 259 4.21132283824832 4.71238898038469 +2 3120 622 259 4.21132283824832 4.71238898038469 +0 + +0101000 ++5933 258 -5939 258 * +Ed + 1e-07 1 1 0 +1 1350 0 616.271919411 652.720664051 +2 3121 649 0 616.271919411 652.720664051 +2 3122 651 0 616.271919411 652.720664051 +4 G1 649 0 651 0 +0 + +0101000 ++5932 0 -5931 258 * +Ed + 0.00363471729978297 1 1 0 +1 1351 0 0 10.9262659862 +2 3123 649 0 0 10.9262659862 +4 C0 649 0 630 0 +0 + +0101000 ++5932 0 -5930 0 * +Ed + 1e-07 1 1 0 +1 1352 0 617.190154908 648.333921388 +2 3124 649 0 617.190154908 648.333921388 +2 3125 648 0 617.190154908 648.333921388 +4 G1 649 0 648 0 +0 + +0101000 ++5930 0 -5934 0 * +Ed + 0.000168383778734264 1 1 0 +1 1353 0 0 2.26960425438507 +2 3126 649 0 0 2.26960425438507 +4 C0 649 0 621 0 +2 3127 621 0 0 2.26960425438507 +2 3128 652 259 0 2.26960425438507 +2 3129 622 259 0 2.26960425438507 +0 + +0101000 ++5931 258 -5933 258 * +Ed + 1e-07 1 1 0 +1 1354 0 614.822909964 652.320182252 +2 3130 651 0 614.822909964 652.320182252 +2 3131 653 0 614.822909964 652.320182252 +4 G1 651 0 653 0 +0 + +0101000 ++5929 0 -5928 258 * +Ed + 0.000148280086894941 1 1 0 +1 1355 0 0 50.2223633772 +2 3132 651 0 0 50.2223633772 +4 C0 651 0 630 0 +0 + +0101000 ++5929 0 -5932 0 * +Ed + 6.21896345166495e-05 1 1 0 +1 1356 0 0 48.967775578 +2 3133 651 0 0 48.967775578 +4 C0 651 0 621 0 +2 3134 621 0 0 48.967775578 +2 3135 654 259 0 48.967775578 +2 3136 622 259 0 48.967775578 +0 + +0101000 ++5928 258 -5931 258 * +Ed + 1e-07 1 1 0 +1 1357 0 623.271499297 660.183676459 +2 3137 653 0 623.271499297 660.183676459 +2 3138 655 0 623.271499297 660.183676459 +4 G1 653 0 655 0 +0 + +0101000 ++5927 0 -5926 258 * +Ed + 0.000107216261837828 1 1 0 +1 1358 0 0 36.3506596719 +2 3139 653 0 0 36.3506596719 +4 C0 653 0 630 0 +0 + +0101000 ++5927 0 -5929 0 * +Ed + 0.000173605720433982 1 1 0 +1 1359 0 0 35.8374562506 +2 3140 653 0 0 35.8374562506 +4 C0 653 0 621 0 +2 3141 621 0 0 35.8374562506 +2 3142 656 259 0 35.8374562506 +2 3143 622 259 0 35.8374562506 +0 + +0101000 ++5926 258 -5928 258 * +Ed + 1e-07 1 1 0 +1 1360 0 655.43433912 691.400773082 +2 3144 657 0 655.43433912 691.400773082 +2 3145 658 0 655.43433912 691.400773082 +4 G1 657 0 658 0 +0 + +0101000 ++5925 0 -5924 258 * +Ed + 3.32879669757728e-06 1 1 0 +1 1361 0 0 34.8983831901 +2 3146 657 0 0 34.8983831901 +4 C0 657 0 630 0 +0 + +0101000 ++5925 0 -5923 0 * +Ed + 1e-07 1 1 0 +1 1362 0 653.676444255 690.977643483 +2 3147 657 0 653.676444255 690.977643483 +2 3148 659 0 653.676444255 690.977643483 +4 G1 657 0 659 0 +0 + +0101000 ++5923 0 -5922 258 * +Ed + 4.54103813831686e-06 1 1 0 +1 1363 0 0 34.2970453899 +2 3149 657 0 0 34.2970453899 +4 C0 657 0 621 0 +2 3150 621 0 0 34.2970453899 +2 3151 660 259 0 34.2970453899 +2 3152 622 259 0 34.2970453899 +0 + +0101000 ++5924 258 -5922 258 * +Ed + 9.40560289752676e-05 1 1 0 +1 1364 0 0 6.15448423206 +2 3153 661 0 0 6.15448423206 +2 3154 662 0 0 6.15448423206 +4 C0 661 0 662 0 +0 + +0101000 ++5921 0 -5920 258 * +Ed + 4.30691726805637e-05 1 1 0 +1 1365 0 0 53.7928632211 +2 3155 661 0 0 53.7928632211 +2 3156 663 0 0 53.7928632211 +4 C0 661 0 663 0 +0 + +0101000 ++5919 0 -5921 0 * +Ed + 1e-07 1 1 0 +1 1366 0 -7.6100000002 2.05690049619999 +2 3157 661 0 -7.6100000002 2.05690049619999 +4 G1 661 0 664 0 +2 3158 664 0 -7.6100000002 2.05690049619999 +0 + +0101000 ++5918 258 -5919 0 * +Ed + 1.00000018882932e-07 1 1 0 +1 1367 0 1.5707963267949 2.0160618084159 +2 3159 661 0 1.5707963267949 2.0160618084159 +4 C0 661 0 621 0 +2 3160 621 0 1.5707963267949 2.0160618084159 +2 3161 665 259 1.5707963267949 2.0160618084159 +2 3162 622 259 1.5707963267949 2.0160618084159 +0 + +0101000 ++5918 258 -5920 258 * +Ed + 1e-07 1 1 0 +1 1368 0 -11.45153049352 11.45152951137 +4 C0 664 0 621 0 +2 3163 664 0 -11.45153049352 11.45152951137 +2 3164 621 0 -11.45153049352 11.45152951137 +2 3165 622 259 -11.45153049352 11.45152951137 +0 + +0101000 ++5917 258 -5918 258 * +Ed + 1.62626301971576e-07 1 1 0 +1 1369 0 12.1243615709 46.0026980309 +2 3166 663 0 12.1243615709 46.0026980309 +4 C0 664 0 663 0 +2 3167 664 0 12.1243615709 46.0026980309 +0 + +0101000 ++5917 258 -5919 0 * +Ed + 1e-07 1 1 0 +1 1370 0 710.592174195 741.803337415 +2 3168 663 0 710.592174195 741.803337415 +2 3169 666 0 710.592174195 741.803337415 +4 G1 663 0 666 0 +0 + +0101000 ++5916 0 -5915 258 * +Ed + 3.66137929490925e-06 1 1 0 +1 1371 0 0 85.4927002511 +2 3170 663 0 0 85.4927002511 +4 C0 663 0 630 0 +0 + +0101000 ++5916 0 -5914 0 * +Ed + 1e-07 1 1 0 +1 1372 0 704.750695683 737.421166838 +2 3171 663 0 704.750695683 737.421166838 +2 3172 662 0 704.750695683 737.421166838 +4 G1 663 0 662 0 +0 + +0101000 ++5914 0 -5921 0 * +Ed + 0.00081033001288944 1 1 0 +1 1373 0 0 8.11238160294738 +2 3173 663 0 0 8.11238160294738 +4 C0 663 0 621 0 +2 3174 621 0 0 8.11238160294738 +2 3175 667 259 0 8.11238160294738 +2 3176 622 259 0 8.11238160294738 +0 + +0101000 ++5915 258 -5917 258 * +Ed + 1e-07 1 1 0 +1 1374 0 730.362185051 761.795064166 +2 3177 668 0 730.362185051 761.795064166 +2 3178 669 0 730.362185051 761.795064166 +4 G1 668 0 669 0 +0 + +0101000 ++5913 0 -5912 258 * +Ed + 0.00101016764597514 1 1 0 +1 1375 0 0 1.00424895475 +2 3179 668 0 0 1.00424895475 +4 C0 668 0 630 0 +0 + +0101000 ++5913 0 -5911 0 * +Ed + 1e-07 1 1 0 +1 1376 0 730.308277785 761.777063253 +2 3180 668 0 730.308277785 761.777063253 +2 3181 670 0 730.308277785 761.777063253 +4 G1 668 0 670 0 +0 + +0101000 ++5911 0 -5910 258 * +Ed + 0.00106812368343978 1 1 0 +1 1377 0 0 0.979559348835 +2 3182 668 0 0 0.979559348835 +4 C0 668 0 621 0 +2 3183 621 0 0 0.979559348835 +2 3184 671 259 0 0.979559348835 +2 3185 622 259 0 0.979559348835 +0 + +0101000 ++5912 258 -5910 258 * +Ed + 5.13864983939811e-07 1 1 0 +1 1378 0 2.74190176806818 48.9405539819 +2 3186 669 0 2.74190176806818 48.9405539819 +4 C0 669 0 672 0 +2 3187 672 0 2.74190176806818 48.9405539819 +0 + +0101000 ++5909 258 -5908 0 * +Ed + 2.89484206978784e-06 1 1 0 +1 1379 0 1.40931886811727 37.1469505151 +2 3188 669 0 1.40931886811727 37.1469505151 +4 C0 669 0 630 0 +0 + +0101000 ++5908 0 -5913 0 * +Ed + 1.9856914226458e-05 1 1 0 +1 1380 0 32.8640764513442 34.8680904429 +2 3189 669 0 32.8640764513442 34.8680904429 +4 C0 669 0 621 0 +2 3190 621 0 32.8640764513442 34.8680904429 +2 3191 673 259 32.8640764513442 34.8680904429 +2 3192 622 259 32.8640764513442 34.8680904429 +0 + +0101000 ++5909 258 -5912 258 * +Ed + 1e-07 1 1 0 +1 1381 0 -13.522180577 13.5221805846 +4 C0 672 0 621 0 +2 3193 672 0 -13.522180577 13.5221805846 +2 3194 621 0 -13.522180577 13.5221805846 +2 3195 622 259 -13.522180577 13.5221805846 +0 + +0101000 ++5907 258 -5909 258 * +Ed + 1e-07 1 1 0 +1 1382 0 -11 11 +2 3196 674 0 -11 11 +4 G1 672 0 674 0 +2 3197 672 0 -11 11 +0 + +0101000 ++5907 258 -5906 0 * +Ed + 1e-07 1 1 0 +1 1383 0 -15.0223184082 15.0223184081 +4 C0 672 0 630 0 +2 3198 672 0 -15.0223184082 15.0223184081 +0 + +0101000 ++5906 0 -5908 0 * +Ed + 1e-07 1 1 0 +1 1384 0 -3 3 +4 C0 675 0 621 0 +2 3199 675 0 -3 3 +2 3200 621 0 -3 3 +2 3201 622 259 -3 3 +0 + +0101000 ++5905 258 -5904 258 * +Ed + 1e-07 1 1 0 +1 1385 0 -11 11 +2 3202 640 0 -11 11 +4 G1 675 0 640 0 +2 3203 675 0 -11 11 +0 + +0101000 ++5905 258 -5903 0 * +Ed + 1e-07 1 1 0 +1 1386 0 -3 3 +4 C0 675 0 630 0 +2 3204 675 0 -3 3 +0 + +0101000 ++5903 0 -5902 0 * +Ed + 1e-07 1 1 0 +1 1387 0 -11 11 +2 3205 674 0 -11 11 +4 G1 675 0 674 0 +2 3206 675 0 -11 11 +0 + +0101000 ++5904 258 -5902 0 * +Ed + 1.04067763544382e-07 1 1 0 +1 1388 0 1.46818401256965 3.14159265358979 +2 3207 676 0 1.46818401256965 3.14159265358979 +4 C0 676 0 621 0 +2 3208 621 0 1.46818401256965 3.14159265358979 +2 3209 677 259 1.46818401256965 3.14159265358979 +2 3210 678 260 1.46818401256965 3.14159265358979 +2 3211 622 259 1.46818401256965 3.14159265358979 +0 + +0101000 ++5901 258 -5900 258 * +Ed + 1.04930248423991e-07 1 1 0 +1 1389 0 -1.99999999375177 10.9999999989681 +2 3212 679 0 -1.99999999375177 10.9999999989681 +2 3213 678 0 -1.99999999375177 10.9999999989681 +4 G2 679 0 678 0 +2 3214 676 261 -1.99999999375177 10.9999999989681 +0 + +0101000 ++5901 262 -5899 0 * +Ed + 1.04719885237638e-07 1 1 0 +1 1390 0 2.68245782715539 4.35586646808255 +2 3215 678 0 2.68245782715539 4.35586646808255 +4 C0 680 0 678 0 +2 3216 680 0 2.68245782715539 4.35586646808255 +2 3217 676 261 2.68245782715539 4.35586646808255 +0 + +0101000 ++5898 262 -5899 0 * +Ed + 1.00189899652756e-07 1 1 0 +1 1391 0 -73.658673021 -60.6586730260397 +2 3218 676 0 -73.658673021 -60.6586730260397 +2 3219 681 0 -73.658673021 -60.6586730260397 +4 CN 676 0 681 0 +2 3220 678 260 -73.658673021 -60.6586730260397 +0 + +0101000 ++5900 258 -5898 258 * +Ed + 1.05066148567867e-07 1 1 0 +1 1392 0 3.60072748018003 5.06891149268683 +2 3221 679 0 3.60072748018003 5.06891149268683 +4 C0 679 0 680 0 +2 3222 680 0 3.60072748018003 5.06891149268683 +2 3223 676 261 3.60072748018003 5.06891149268683 +0 + +0101000 ++5897 262 -5899 0 * +Ed + 1e-07 1 1 0 +1 1393 0 -60.6586730260397 -51.658673021 +2 3224 676 0 -60.6586730260397 -51.658673021 +2 3225 681 0 -60.6586730260397 -51.658673021 +4 CN 676 0 681 0 +0 + +0101000 ++5897 258 -5896 0 * +Ed + 1e-07 1 1 0 +1 1394 0 0 3.14159265358979 +2 3226 676 0 0 3.14159265358979 +4 C0 676 0 630 0 +0 + +0101000 ++5896 0 -5895 0 * +Ed + 1e-07 1 1 0 +1 1391 0 -60.6586730260397 -51.658673021 +2 3218 676 0 -60.6586730260397 -51.658673021 +2 3219 681 0 -60.6586730260397 -51.658673021 +4 CN 676 0 681 0 +0 + +0101000 ++5898 258 -5895 0 * +Ed + 1.04017140523609e-07 1 1 0 +1 1388 0 0 1.46818401256965 +2 3207 676 0 0 1.46818401256965 +4 C0 676 0 621 0 +2 3208 621 0 0 1.46818401256965 +2 3227 677 259 0 1.46818401256965 +2 3228 679 260 0 1.46818401256965 +2 3229 622 259 0 1.46818401256965 +0 + +0101000 ++5894 258 -5901 258 * +Ed + 1.00189913863743e-07 1 1 0 +1 1393 0 -73.658673021 -60.6586730260397 +2 3224 676 0 -73.658673021 -60.6586730260397 +2 3225 681 0 -73.658673021 -60.6586730260397 +4 CN 676 0 681 0 +2 3230 679 260 -73.658673021 -60.6586730260397 +0 + +0101000 ++5894 258 -5897 258 * +Ed + 1.00193909507987e-07 1 1 0 +1 1395 0 6.18057254528822 6.28318530717959 +2 3231 681 0 6.18057254528822 6.28318530717959 +4 C0 681 0 621 0 +2 3232 621 0 6.18057254528822 6.28318530717959 +2 3233 682 259 6.18057254528822 6.28318530717959 +2 3234 679 260 6.18057254528822 6.28318530717959 +2 3235 622 259 6.18057254528822 6.28318530717959 +0 + +0101000 ++5893 258 -5894 258 * +Ed + 1.03686460057387e-07 1 1 0 +1 1396 0 -1.9999999961142 11.0000000060424 +2 3236 679 0 -1.9999999961142 11.0000000060424 +2 3237 683 0 -1.9999999961142 11.0000000060424 +4 CN 679 0 683 0 +2 3238 681 261 -1.9999999961142 11.0000000060424 +0 + +0101000 ++5893 262 -5892 0 * +Ed + 1.04919916234049e-07 1 1 0 +1 1392 0 3.49811471827425 3.60072748018003 +2 3221 679 0 3.49811471827425 3.60072748018003 +4 C0 679 0 680 0 +2 3222 680 0 3.49811471827425 3.60072748018003 +2 3239 681 261 3.49811471827425 3.60072748018003 +0 + +0101000 ++5892 0 -5897 262 * +Ed + 1.04526039621071e-07 1 1 0 +1 1397 0 5.92666324249513 7.49745989822065 +2 3240 683 0 5.92666324249513 7.49745989822065 +4 C0 680 0 683 0 +2 3241 680 0 5.92666324249513 7.49745989822065 +2 3242 681 261 5.92666324249513 7.49745989822065 +0 + +0101000 ++5892 0 -5891 0 * +Ed + 1.05066148567709e-07 1 1 0 +1 1390 0 1.21427459104106 2.68245782715539 +2 3215 678 0 1.21427459104106 2.68245782715539 +4 C0 680 0 678 0 +2 3216 680 0 1.21427459104106 2.68245782715539 +2 3243 681 261 1.21427459104106 2.68245782715539 +0 + +0101000 ++5891 0 -5898 262 * +Ed + 1e-07 1 1 0 +1 1398 0 3.14159265358979 6.28318530717959 +2 3244 681 0 3.14159265358979 6.28318530717959 +4 C0 681 0 630 0 +0 + +0101000 ++5895 0 -5896 0 * +Ed + 1.04070521752456e-07 1 1 0 +1 1395 0 4.60977612917086 6.18057254528822 +2 3231 681 0 4.60977612917086 6.18057254528822 +4 C0 681 0 621 0 +2 3232 621 0 4.60977612917086 6.18057254528822 +2 3245 682 259 4.60977612917086 6.18057254528822 +2 3246 683 260 4.60977612917086 6.18057254528822 +2 3247 622 259 4.60977612917086 6.18057254528822 +0 + +0101000 ++5890 258 -5893 258 * +Ed + 1.03918889850123e-07 1 1 0 +1 1399 0 -10.9999999985 1.99999999620576 +2 3248 683 0 -10.9999999985 1.99999999620576 +2 3249 678 0 -10.9999999985 1.99999999620576 +4 G2 683 0 678 0 +2 3250 681 261 -10.9999999985 1.99999999620576 +0 + +0101000 ++5891 0 -5890 262 * +Ed + 1.04017149034952e-07 1 1 0 +1 1395 0 3.14159265358979 4.60977612917086 +2 3231 681 0 3.14159265358979 4.60977612917086 +4 C0 681 0 621 0 +2 3232 621 0 3.14159265358979 4.60977612917086 +2 3251 682 259 3.14159265358979 4.60977612917086 +2 3252 678 260 3.14159265358979 4.60977612917086 +2 3253 622 259 3.14159265358979 4.60977612917086 +0 + +0101000 ++5900 258 -5890 258 * +Ed + 1.02435722959822e-07 1 1 0 +1 1400 0 1.4681835672269 3.14159265358979 +2 3254 684 0 1.4681835672269 3.14159265358979 +4 C0 684 0 621 0 +2 3255 621 0 1.4681835672269 3.14159265358979 +2 3256 685 259 1.4681835672269 3.14159265358979 +2 3257 686 263 1.4681835672269 3.14159265358979 +2 3258 622 259 1.4681835672269 3.14159265358979 +0 + +0101000 ++5889 258 -5888 258 * +Ed + 1.03247671951262e-07 1 1 0 +1 1401 0 -10.9999999985 2.00000000642119 +2 3259 687 0 -10.9999999985 2.00000000642119 +2 3260 686 0 -10.9999999985 2.00000000642119 +4 G2 687 0 686 0 +2 3261 684 264 -10.9999999985 2.00000000642119 +0 + +0101000 ++5887 0 -5889 265 * +Ed + 1.05787066491005e-07 1 1 0 +1 1402 0 2.68245782744808 4.35586713077746 +2 3262 686 0 2.68245782744808 4.35586713077746 +4 C0 688 0 686 0 +2 3263 688 0 2.68245782744808 4.35586713077746 +2 3264 684 264 2.68245782744808 4.35586713077746 +0 + +0101000 ++5886 265 -5887 0 * +Ed + 1.0040578385322e-07 1 1 0 +1 1403 0 -73.658673021 -60.6586730105524 +2 3265 684 0 -73.658673021 -60.6586730105524 +2 3266 689 0 -73.658673021 -60.6586730105524 +4 CN 684 0 689 0 +2 3267 686 263 -73.658673021 -60.6586730105524 +0 + +0101000 ++5888 258 -5886 258 * +Ed + 1.05270561336088e-07 1 1 0 +1 1404 0 4.35586713077746 5.8240504802816 +2 3268 687 0 4.35586713077746 5.8240504802816 +4 C0 687 0 688 0 +2 3269 688 0 4.35586713077746 5.8240504802816 +2 3270 684 264 4.35586713077746 5.8240504802816 +0 + +0101000 ++5887 0 -5885 265 * +Ed + 1e-07 1 1 0 +1 1405 0 -60.6586730105524 -51.658673021 +2 3271 684 0 -60.6586730105524 -51.658673021 +2 3272 689 0 -60.6586730105524 -51.658673021 +4 CN 684 0 689 0 +0 + +0101000 ++5885 258 -5884 0 * +Ed + 1e-07 1 1 0 +1 1406 0 0 3.14159265358979 +2 3273 684 0 0 3.14159265358979 +4 C0 684 0 630 0 +0 + +0101000 ++5884 0 -5883 0 * +Ed + 1e-07 1 1 0 +1 1403 0 -60.6586730105524 -51.658673021 +2 3265 684 0 -60.6586730105524 -51.658673021 +2 3266 689 0 -60.6586730105524 -51.658673021 +4 CN 684 0 689 0 +0 + +0101000 ++5886 258 -5883 0 * +Ed + 1.02250742097354e-07 1 1 0 +1 1400 0 0 1.4681835672269 +2 3254 684 0 0 1.4681835672269 +4 C0 684 0 621 0 +2 3255 621 0 0 1.4681835672269 +2 3274 685 259 0 1.4681835672269 +2 3275 687 263 0 1.4681835672269 +2 3276 622 259 0 1.4681835672269 +0 + +0101000 ++5882 258 -5889 258 * +Ed + 1.00405762538665e-07 1 1 0 +1 1405 0 -73.658673021 -60.6586730105524 +2 3271 684 0 -73.658673021 -60.6586730105524 +2 3272 689 0 -73.658673021 -60.6586730105524 +4 CN 684 0 689 0 +2 3277 687 263 -73.658673021 -60.6586730105524 +0 + +0101000 ++5882 258 -5885 258 * +Ed + 1.00629574511203e-07 1 1 0 +1 1407 0 6.18057254539586 6.28318530717959 +2 3278 689 0 6.18057254539586 6.28318530717959 +4 C0 689 0 621 0 +2 3279 621 0 6.18057254539586 6.28318530717959 +2 3280 690 259 6.18057254539586 6.28318530717959 +2 3281 687 263 6.18057254539586 6.28318530717959 +2 3282 622 259 6.18057254539586 6.28318530717959 +0 + +0101000 ++5881 258 -5882 258 * +Ed + 1.03265799859873e-07 1 1 0 +1 1408 0 -11.0000000060424 2.00000000597631 +2 3283 691 0 -11.0000000060424 2.00000000597631 +2 3284 687 0 -11.0000000060424 2.00000000597631 +4 CN 691 0 687 0 +2 3285 689 264 -11.0000000060424 2.00000000597631 +0 + +0101000 ++5880 0 -5881 265 * +Ed + 1.0168583616227e-07 1 1 0 +1 1404 0 5.8240504802816 5.92666324212282 +2 3268 687 0 5.8240504802816 5.92666324212282 +4 C0 687 0 688 0 +2 3269 688 0 5.8240504802816 5.92666324212282 +2 3286 689 264 5.8240504802816 5.92666324212282 +0 + +0101000 ++5885 265 -5880 0 * +Ed + 1.05800096022451e-07 1 1 0 +1 1409 0 5.92666324212282 7.49745923154247 +2 3287 691 0 5.92666324212282 7.49745923154247 +4 C0 691 0 688 0 +2 3288 688 0 5.92666324212282 7.49745923154247 +2 3289 689 264 5.92666324212282 7.49745923154247 +2 3290 692 266 5.92666324212282 7.49745923154247 +0 + +0101000 ++5880 0 -5879 0 * +Ed + 1.05270561336088e-07 1 1 0 +1 1402 0 1.21427392436288 2.68245782744808 +2 3262 686 0 1.21427392436288 2.68245782744808 +4 C0 688 0 686 0 +2 3263 688 0 1.21427392436288 2.68245782744808 +2 3291 689 264 1.21427392436288 2.68245782744808 +0 + +0101000 ++5879 0 -5886 265 * +Ed + 1e-07 1 1 0 +1 1410 0 3.14159265358979 6.28318530717959 +2 3292 689 0 3.14159265358979 6.28318530717959 +4 C0 689 0 630 0 +0 + +0101000 ++5883 0 -5884 0 * +Ed + 1.02435729591478e-07 1 1 0 +1 1407 0 4.60977611570022 6.18057254539586 +2 3278 689 0 4.60977611570022 6.18057254539586 +4 C0 689 0 621 0 +2 3279 621 0 4.60977611570022 6.18057254539586 +2 3293 690 259 4.60977611570022 6.18057254539586 +2 3294 691 263 4.60977611570022 6.18057254539586 +2 3295 622 259 4.60977611570022 6.18057254539586 +0 + +0101000 ++5878 258 -5881 258 * +Ed + 1.03067069504827e-07 1 1 0 +1 1411 0 -10.9999999985 2.00000000761234 +2 3296 691 0 -10.9999999985 2.00000000761234 +2 3297 686 0 -10.9999999985 2.00000000761234 +4 G2 691 0 686 0 +2 3298 689 264 -10.9999999985 2.00000000761234 +0 + +0101000 ++5879 0 -5878 265 * +Ed + 1.02250742097354e-07 1 1 0 +1 1407 0 3.14159265358979 4.60977611570022 +2 3278 689 0 3.14159265358979 4.60977611570022 +4 C0 689 0 621 0 +2 3279 621 0 3.14159265358979 4.60977611570022 +2 3299 690 259 3.14159265358979 4.60977611570022 +2 3300 686 263 3.14159265358979 4.60977611570022 +2 3301 622 259 3.14159265358979 4.60977611570022 +0 + +0101000 ++5888 258 -5878 258 * +Ed + 1.02451846425782e-07 1 1 0 +1 1412 0 1.46818356723017 3.14159265358979 +2 3302 693 0 1.46818356723017 3.14159265358979 +4 C0 693 0 621 0 +2 3303 621 0 1.46818356723017 3.14159265358979 +2 3304 694 259 1.46818356723017 3.14159265358979 +2 3305 686 267 1.46818356723017 3.14159265358979 +2 3306 622 259 1.46818356723017 3.14159265358979 +0 + +0101000 ++5877 258 -5876 258 * +Ed + 1.03271120919129e-07 1 1 0 +1 1401 0 -10.9999999985 1.99999999536847 +2 3259 687 0 -10.9999999985 1.99999999536847 +2 3260 686 0 -10.9999999985 1.99999999536847 +4 G2 687 0 686 0 +2 3307 693 266 -10.9999999985 1.99999999536847 +0 + +0101000 ++5887 0 -5877 268 * +Ed + 1.05802907169732e-07 1 1 0 +1 1402 0 2.68245782745098 4.35586713077746 +2 3262 686 0 2.68245782745098 4.35586713077746 +4 C0 688 0 686 0 +2 3263 688 0 2.68245782745098 4.35586713077746 +2 3308 693 266 2.68245782745098 4.35586713077746 +0 + +0101000 ++5875 268 -5887 0 * +Ed + 1.00377269773388e-07 1 1 0 +1 1413 0 -73.658673021 -60.6586730216066 +2 3309 693 0 -73.658673021 -60.6586730216066 +2 3310 692 0 -73.658673021 -60.6586730216066 +4 CN 693 0 692 0 +2 3311 686 267 -73.658673021 -60.6586730216066 +0 + +0101000 ++5876 258 -5875 258 * +Ed + 1.05297188497881e-07 1 1 0 +1 1404 0 4.35586713077746 5.82405048028177 +2 3268 687 0 4.35586713077746 5.82405048028177 +4 C0 687 0 688 0 +2 3269 688 0 4.35586713077746 5.82405048028177 +2 3312 693 266 4.35586713077746 5.82405048028177 +0 + +0101000 ++5887 0 -5874 268 * +Ed + 1e-07 1 1 0 +1 1414 0 -60.6586730216066 -51.658673021 +2 3313 693 0 -60.6586730216066 -51.658673021 +2 3314 692 0 -60.6586730216066 -51.658673021 +4 CN 693 0 692 0 +0 + +0101000 ++5874 258 -5873 0 * +Ed + 1e-07 1 1 0 +1 1415 0 0 3.14159265358979 +2 3315 693 0 0 3.14159265358979 +4 C0 693 0 630 0 +0 + +0101000 ++5873 0 -5872 0 * +Ed + 1e-07 1 1 0 +1 1413 0 -60.6586730216066 -51.658673021 +2 3309 693 0 -60.6586730216066 -51.658673021 +2 3310 692 0 -60.6586730216066 -51.658673021 +4 CN 693 0 692 0 +0 + +0101000 ++5875 258 -5872 0 * +Ed + 1.02278017407533e-07 1 1 0 +1 1412 0 0 1.46818356723017 +2 3302 693 0 0 1.46818356723017 +4 C0 693 0 621 0 +2 3303 621 0 0 1.46818356723017 +2 3316 694 259 0 1.46818356723017 +2 3317 687 267 0 1.46818356723017 +2 3318 622 259 0 1.46818356723017 +0 + +0101000 ++5871 258 -5877 258 * +Ed + 1.00377283984728e-07 1 1 0 +1 1414 0 -73.658673021 -60.6586730216066 +2 3313 693 0 -73.658673021 -60.6586730216066 +2 3314 692 0 -73.658673021 -60.6586730216066 +4 CN 693 0 692 0 +2 3319 687 267 -73.658673021 -60.6586730216066 +0 + +0101000 ++5871 258 -5874 258 * +Ed + 1.00603210514487e-07 1 1 0 +1 1416 0 6.18057254539575 6.28318530717959 +2 3320 692 0 6.18057254539575 6.28318530717959 +4 C0 692 0 621 0 +2 3321 621 0 6.18057254539575 6.28318530717959 +2 3322 695 259 6.18057254539575 6.28318530717959 +2 3323 687 267 6.18057254539575 6.28318530717959 +2 3324 622 259 6.18057254539575 6.28318530717959 +0 + +0101000 ++5870 258 -5871 258 * +Ed + 1.03291641734907e-07 1 1 0 +1 1408 0 -11.0000000060424 1.99999999492305 +2 3283 691 0 -11.0000000060424 1.99999999492305 +2 3284 687 0 -11.0000000060424 1.99999999492305 +4 CN 691 0 687 0 +2 3325 692 266 -11.0000000060424 1.99999999492305 +0 + +0101000 ++5880 0 -5870 268 * +Ed + 1.01660343203721e-07 1 1 0 +1 1404 0 5.82405048028177 5.92666324212282 +2 3268 687 0 5.82405048028177 5.92666324212282 +4 C0 687 0 688 0 +2 3269 688 0 5.82405048028177 5.92666324212282 +2 3326 692 266 5.82405048028177 5.92666324212282 +0 + +0101000 ++5874 268 -5880 0 * +Ed + 1.05297190230096e-07 1 1 0 +1 1402 0 1.21427392436288 2.68245782745098 +2 3262 686 0 1.21427392436288 2.68245782745098 +4 C0 688 0 686 0 +2 3263 688 0 1.21427392436288 2.68245782745098 +2 3327 692 266 1.21427392436288 2.68245782745098 +0 + +0101000 ++5879 0 -5875 268 * +Ed + 1e-07 1 1 0 +1 1417 0 3.14159265358979 5.60827932390488 +2 3328 692 0 3.14159265358979 5.60827932390488 +4 C0 692 0 630 0 +0 + +0101000 ++5872 0 -5869 0 * +Ed + 0.00022571270339482 1 1 0 +1 1418 0 0 12.2619456766 +2 3329 692 0 0 12.2619456766 +2 3330 696 0 0 12.2619456766 +4 C0 692 0 696 0 +0 + +0101000 ++5868 0 -5869 0 * +Ed + 3.0410054349366e-05 1 1 0 +1 1419 0 0 4.15626665062684 +2 3331 692 0 0 4.15626665062684 +2 3332 659 0 0 4.15626665062684 +4 C0 692 0 659 0 +0 + +0101000 ++5868 0 -5867 0 * +Ed + 1e-07 1 1 0 +1 1420 0 6.22940648192167 6.28318530717959 +2 3333 692 0 6.22940648192167 6.28318530717959 +4 C0 692 0 630 0 +0 + +0101000 ++5867 0 -5873 0 * +Ed + 1.02452407211665e-07 1 1 0 +1 1416 0 4.60977611570004 6.18057254539575 +2 3320 692 0 4.60977611570004 6.18057254539575 +4 C0 692 0 621 0 +2 3321 621 0 4.60977611570004 6.18057254539575 +2 3334 695 259 4.60977611570004 6.18057254539575 +2 3335 691 267 4.60977611570004 6.18057254539575 +2 3336 622 259 4.60977611570004 6.18057254539575 +0 + +0101000 ++5866 258 -5870 258 * +Ed + 1.03091259060794e-07 1 1 0 +1 1411 0 -10.9999999985 1.99999999655767 +2 3296 691 0 -10.9999999985 1.99999999655767 +2 3297 686 0 -10.9999999985 1.99999999655767 +4 G2 691 0 686 0 +2 3337 692 266 -10.9999999985 1.99999999655767 +0 + +0101000 ++5879 0 -5866 268 * +Ed + 1.02278020870816e-07 1 1 0 +1 1416 0 3.14159265358979 4.60977611570004 +2 3320 692 0 3.14159265358979 4.60977611570004 +4 C0 692 0 621 0 +2 3321 621 0 3.14159265358979 4.60977611570004 +2 3338 695 259 3.14159265358979 4.60977611570004 +2 3339 686 267 3.14159265358979 4.60977611570004 +2 3340 622 259 3.14159265358979 4.60977611570004 +0 + +0101000 ++5876 258 -5866 258 * +Ed + 1e-07 1 1 0 +1 1421 0 -4 4 +2 3341 697 0 -4 4 +4 G1 697 0 698 0 +2 3342 698 0 -4 4 +0 + +0101000 ++5865 0 -5864 0 * +Ed + 1e-07 1 1 0 +1 1422 0 2.65990628165784 4.23157303247401 +2 3343 697 0 2.65990628165784 4.23157303247401 +4 C0 697 0 699 0 +2 3344 699 0 2.65990628165784 4.23157303247401 +0 + +0101000 ++5863 0 -5864 0 * +Ed + 1e-07 1 1 0 +1 1423 0 -4 4 +2 3345 697 0 -4 4 +4 G1 697 0 700 0 +2 3346 700 0 -4 4 +0 + +0101000 ++5862 0 -5863 0 * +Ed + 1.00000021316282e-07 1 1 0 +1 1424 0 2.65990628165784 4.23157303247401 +2 3347 697 0 2.65990628165784 4.23157303247401 +4 C0 697 0 621 0 +2 3348 621 0 2.65990628165784 4.23157303247401 +2 3349 622 259 2.65990628165784 4.23157303247401 +0 + +0101000 ++5862 0 -5865 0 * +Ed + 1e-07 1 1 0 +1 1425 0 -4 4 +2 3350 701 0 -4 4 +4 G1 701 0 700 0 +2 3351 700 0 -4 4 +0 + +0101000 ++5861 0 -5860 0 * +Ed + 1e-07 1 1 0 +1 1426 0 1.39626340159308 2.65990628166617 +2 3352 701 0 1.39626340159308 2.65990628166617 +4 C0 701 0 699 0 +2 3353 699 0 1.39626340159308 2.65990628166617 +0 + +0101000 ++5859 0 -5860 0 * +Ed + 1e-07 1 1 0 +1 1427 0 -4 4 +2 3354 701 0 -4 4 +4 G1 701 0 702 0 +0 + +0101000 ++5858 0 -5859 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 1428 0 1.39626340159308 2.65990628166617 +2 3355 701 0 1.39626340159308 2.65990628166617 +4 C0 701 0 621 0 +2 3356 621 0 1.39626340159308 2.65990628166617 +2 3357 622 259 1.39626340159308 2.65990628166617 +0 + +0101000 ++5858 0 -5861 0 * +Ed + 1.00000010658141e-07 1 1 0 +1 1429 0 -29.5958572327036 29.5958572325299 +4 C0 702 0 621 0 +2 3358 621 0 -29.5958572327036 29.5958572325299 +2 3359 622 259 -29.5958572327036 29.5958572325299 +0 + +0101000 ++5857 0 -5858 0 * +Ed + 1e-07 1 1 0 +1 1430 0 -4 4 +2 3360 703 0 -4 4 +4 G1 702 0 703 0 +0 + +0101000 ++5857 0 -5856 0 * +Ed + 1e-07 1 1 0 +1 1431 0 -29.5958572327036 29.5958572325299 +4 C0 702 0 699 0 +2 3361 699 0 -29.5958572327036 29.5958572325299 +0 + +0101000 ++5856 0 -5859 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 1432 0 -19.03076802997 19.03076803003 +4 C0 704 0 621 0 +2 3362 621 0 -19.03076802997 19.03076803003 +2 3363 622 259 -19.03076802997 19.03076803003 +0 + +0101000 ++5855 0 -5854 0 * +Ed + 1.05933640432939e-06 1 1 0 +1 1433 0 -4 4 +2 3364 705 0 -4 4 +4 G1 704 0 705 0 +0 + +0101000 ++5855 0 -5853 0 * +Ed + 1e-07 1 1 0 +1 1434 0 -19.03076802997 19.03076803003 +4 C0 704 0 699 0 +2 3365 699 0 -19.03076802997 19.03076803003 +0 + +0101000 ++5853 0 -5852 0 * +Ed + 1e-07 1 1 0 +1 1435 0 -4 4 +2 3366 703 0 -4 4 +4 G1 704 0 703 0 +0 + +0101000 ++5854 0 -5852 0 * +Ed + 1.828097087007e-05 1 1 0 +1 1436 0 -4 4 +2 3367 706 0 -4 4 +2 3368 705 0 -4 4 +4 G1 706 0 705 0 +0 + +0101000 ++5851 0 -5850 0 * +Ed + 1e-07 1 1 0 +1 1437 0 4.10585761716768 8.46051301375954 +2 3369 706 0 4.10585761716768 8.46051301375954 +4 C0 706 0 699 0 +2 3370 699 0 4.10585761716768 8.46051301375954 +0 + +0101000 ++5849 0 -5850 0 * +Ed + 1.73718117710028e-05 1 1 0 +1 1438 0 -4 4 +2 3371 706 0 -4 4 +2 3372 707 0 -4 4 +4 G1 706 0 707 0 +0 + +0101000 ++5848 0 -5849 0 * +Ed + 1.00000017763568e-07 1 1 0 +1 1439 0 4.10585761716768 8.46051301375954 +2 3373 706 0 4.10585761716768 8.46051301375954 +4 C0 706 0 621 0 +2 3374 621 0 4.10585761716768 8.46051301375954 +2 3375 622 259 4.10585761716768 8.46051301375954 +0 + +0101000 ++5848 0 -5851 0 * +Ed + 1e-07 1 1 0 +1 1440 0 1.570796117519 2.17732463671399 +2 3376 708 0 1.570796117519 2.17732463671399 +4 C0 708 0 699 0 +2 3377 699 0 1.570796117519 2.17732463671399 +0 + +0101000 ++5847 0 -5846 0 * +Ed + 1.24938947585403e-05 1 1 0 +1 1441 0 -4 4 +2 3378 708 0 -4 4 +2 3379 709 0 -4 4 +4 G1 708 0 709 0 +0 + +0101000 ++5846 0 -5845 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1442 0 1.570796117519 2.17732463671399 +2 3380 708 0 1.570796117519 2.17732463671399 +4 C0 708 0 621 0 +2 3381 621 0 1.570796117519 2.17732463671399 +2 3382 622 259 1.570796117519 2.17732463671399 +0 + +0101000 ++5844 0 -5845 0 * +Ed + 1.30001303650857e-07 1 1 0 +1 1443 0 -4 4 +2 3383 708 0 -4 4 +4 G1 708 0 710 0 +2 3384 710 0 -4 4 +0 + +0101000 ++5847 0 -5844 0 * +Ed + 1e-07 1 1 0 +1 1444 0 4.10586063445748 4.71238928806678 +2 3385 711 0 4.10586063445748 4.71238928806678 +4 C0 711 0 699 0 +2 3386 699 0 4.10586063445748 4.71238928806678 +0 + +0101000 ++5843 0 -5842 0 * +Ed + 4.67004676665397e-07 1 1 0 +1 1445 0 -4 4 +2 3387 711 0 -4 4 +4 G1 711 0 712 0 +0 + +0101000 ++5842 0 -5841 0 * +Ed + 1.00000010658141e-07 1 1 0 +1 1446 0 4.10586063445748 4.71238928806678 +2 3388 711 0 4.10586063445748 4.71238928806678 +4 C0 711 0 621 0 +2 3389 621 0 4.10586063445748 4.71238928806678 +2 3390 622 259 4.10586063445748 4.71238928806678 +0 + +0101000 ++5840 0 -5841 0 * +Ed + 1.33723544415567e-05 1 1 0 +1 1447 0 -4 4 +2 3391 711 0 -4 4 +2 3392 709 0 -4 4 +4 G1 711 0 709 0 +0 + +0101000 ++5843 0 -5840 0 * +Ed + 1e-07 1 1 0 +1 1448 0 4.53785605518481 4.71238898038469 +2 3393 713 0 4.53785605518481 4.71238898038469 +4 C0 713 0 699 0 +2 3394 699 0 4.53785605518481 4.71238898038469 +0 + +0101000 ++5839 0 -5838 0 * +Ed + 1e-07 1 1 0 +1 1449 0 -4 4 +2 3395 713 0 -4 4 +4 G1 713 0 714 0 +0 + +0101000 ++5837 0 -5839 0 * +Ed + 1e-07 1 1 0 +1 1450 0 4.53785605518481 4.71238898038469 +2 3396 713 0 4.53785605518481 4.71238898038469 +4 C0 713 0 621 0 +2 3397 621 0 4.53785605518481 4.71238898038469 +2 3398 622 259 4.53785605518481 4.71238898038469 +0 + +0101000 ++5837 0 -5836 0 * +Ed + 1e-07 1 1 0 +1 1451 0 -4 4 +2 3399 713 0 -4 4 +4 G1 713 0 712 0 +0 + +0101000 ++5836 0 -5838 0 * +Ed + 1e-07 1 1 0 +1 1452 0 -4 4 +2 3400 715 0 -4 4 +4 G1 716 0 715 0 +2 3401 716 0 -4 4 +0 + +0101000 ++5835 0 -5834 0 * +Ed + 1.00000017763568e-07 1 1 0 +1 1453 0 -49.260363668 49.2603636684632 +4 C0 716 0 621 0 +2 3402 716 0 -49.260363668 49.2603636684632 +2 3403 621 0 -49.260363668 49.2603636684632 +2 3404 622 259 -49.260363668 49.2603636684632 +0 + +0101000 ++5833 0 -5834 0 * +Ed + 1e-07 1 1 0 +1 1454 0 -4 4 +2 3405 717 0 -4 4 +4 G1 716 0 717 0 +2 3406 716 0 -4 4 +0 + +0101000 ++5832 0 -5833 0 * +Ed + 1e-07 1 1 0 +1 1455 0 -49.260363668 49.2603636684632 +4 C0 716 0 699 0 +2 3407 716 0 -49.260363668 49.2603636684632 +2 3408 699 0 -49.260363668 49.2603636684632 +0 + +0101000 ++5832 0 -5835 0 * +Ed + 1e-07 1 1 0 +1 1456 0 2.52903605839315 6.89574191970083 +2 3409 718 0 2.52903605839315 6.89574191970083 +4 C0 718 0 719 0 +2 3410 719 0 2.52903605839315 6.89574191970083 +0 + +0101000 ++5831 0 -5830 0 * +Ed + 1.74057585701176e-05 1 1 0 +1 1457 0 -4 4 +2 3411 718 0 -4 4 +2 3412 720 0 -4 4 +4 G1 718 0 720 0 +0 + +0101000 ++5829 0 -5831 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1458 0 2.52903605839315 6.89574191970083 +2 3413 718 0 2.52903605839315 6.89574191970083 +4 C0 718 0 621 0 +2 3414 621 0 2.52903605839315 6.89574191970083 +2 3415 622 259 2.52903605839315 6.89574191970083 +0 + +0101000 ++5829 0 -5828 0 * +Ed + 1.85398857847484e-05 1 1 0 +1 1459 0 -4 4 +2 3416 718 0 -4 4 +2 3417 721 0 -4 4 +4 G1 718 0 721 0 +0 + +0101000 ++5828 0 -5830 0 * +Ed + 1e-07 1 1 0 +1 1460 0 2.6607861120891 3.14158301970235 +2 3418 722 0 2.6607861120891 3.14158301970235 +4 C0 722 0 719 0 +2 3419 719 0 2.6607861120891 3.14158301970235 +0 + +0101000 ++5827 0 -5826 0 * +Ed + 6.11581877807633e-06 1 1 0 +1 1461 0 -4 4 +2 3420 722 0 -4 4 +4 G1 722 0 723 0 +2 3421 723 0 -4 4 +0 + +0101000 ++5825 0 -5827 0 * +Ed + 1.00000131450406e-07 1 1 0 +1 1462 0 2.6607861120891 3.14158301970235 +2 3422 722 0 2.6607861120891 3.14158301970235 +4 C0 722 0 621 0 +2 3423 621 0 2.6607861120891 3.14158301970235 +2 3424 622 259 2.6607861120891 3.14158301970235 +0 + +0101000 ++5825 0 -5824 0 * +Ed + 7.95607957879412e-06 1 1 0 +1 1463 0 -4 4 +2 3425 722 0 -4 4 +4 G1 722 0 724 0 +0 + +0101000 ++5824 0 -5826 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 1464 0 -17.45738465582 17.457384656 +4 C0 725 0 621 0 +2 3426 621 0 -17.45738465582 17.457384656 +2 3427 622 259 -17.45738465582 17.457384656 +0 + +0101000 ++5823 0 -5822 0 * +Ed + 2.86002563917847e-07 1 1 0 +1 1465 0 -4 4 +2 3428 726 0 -4 4 +4 G1 725 0 726 0 +0 + +0101000 ++5823 0 -5821 0 * +Ed + 1e-07 1 1 0 +1 1466 0 -17.45738465582 17.457384656 +4 C0 725 0 719 0 +2 3429 719 0 -17.45738465582 17.457384656 +0 + +0101000 ++5821 0 -5820 0 * +Ed + 6.88232816493883e-06 1 1 0 +1 1467 0 -4 4 +2 3430 727 0 -4 4 +4 G1 725 0 727 0 +0 + +0101000 ++5822 0 -5820 0 * +Ed + 1e-07 1 1 0 +1 1468 0 3.14159251953154 3.75414621581621 +2 3431 726 0 3.14159251953154 3.75414621581621 +4 C0 726 0 719 0 +2 3432 719 0 3.14159251953154 3.75414621581621 +0 + +0101000 ++5821 0 -5819 0 * +Ed + 1.22588245864091e-05 1 1 0 +1 1469 0 -4 4 +2 3433 726 0 -4 4 +2 3434 728 0 -4 4 +4 G1 726 0 728 0 +0 + +0101000 ++5819 0 -5818 0 * +Ed + 1.00000042632564e-07 1 1 0 +1 1470 0 3.14159251953154 3.75414621581621 +2 3435 726 0 3.14159251953154 3.75414621581621 +4 C0 726 0 621 0 +2 3436 621 0 3.14159251953154 3.75414621581621 +2 3437 622 259 3.14159251953154 3.75414621581621 +0 + +0101000 ++5823 0 -5818 0 * +Ed + 1.32839125384472e-05 1 1 0 +1 1471 0 -4 4 +2 3438 729 0 -4 4 +2 3439 728 0 -4 4 +4 G1 729 0 728 0 +0 + +0101000 ++5817 0 -5816 0 * +Ed + 1e-07 1 1 0 +1 1472 0 5.67063178564587 6.28318548296271 +2 3440 729 0 5.67063178564587 6.28318548296271 +4 C0 729 0 719 0 +2 3441 719 0 5.67063178564587 6.28318548296271 +0 + +0101000 ++5817 0 -5815 0 * +Ed + 1.40801405438964e-07 1 1 0 +1 1473 0 -4 4 +2 3442 729 0 -4 4 +4 G1 729 0 730 0 +2 3443 730 0 -4 4 +0 + +0101000 ++5815 0 -5814 0 * +Ed + 1.00000042632564e-07 1 1 0 +1 1474 0 5.67063178564587 6.28318548296271 +2 3444 729 0 5.67063178564587 6.28318548296271 +4 C0 729 0 621 0 +2 3445 621 0 5.67063178564587 6.28318548296271 +2 3446 622 259 5.67063178564587 6.28318548296271 +0 + +0101000 ++5816 0 -5814 0 * +Ed + 2.98542265239651e-06 1 1 0 +1 1475 0 0 45.3962479938 +2 3447 648 0 0 45.3962479938 +4 C0 648 0 630 0 +0 + +0101000 ++5930 0 -5935 0 * +Ed + 1e-07 1 1 0 +1 1476 0 4.09983194255997 8.46653869082255 +2 3448 728 0 4.09983194255997 8.46653869082255 +4 C0 728 0 719 0 +2 3449 719 0 4.09983194255997 8.46653869082255 +0 + +0101000 ++5819 0 -5817 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 1477 0 4.09983194255997 8.46653869082255 +2 3450 728 0 4.09983194255997 8.46653869082255 +4 C0 728 0 621 0 +2 3451 621 0 4.09983194255997 8.46653869082255 +2 3452 622 259 4.09983194255997 8.46653869082255 +0 + +0101000 ++5818 0 -5816 0 * +Ed + 1e-07 1 1 0 +1 1478 0 2.66078678287153 3.14158232341098 +2 3453 727 0 2.66078678287153 3.14158232341098 +4 C0 727 0 719 0 +2 3454 719 0 2.66078678287153 3.14158232341098 +0 + +0101000 ++5813 0 -5820 0 * +Ed + 5.207877419544e-06 1 1 0 +1 1479 0 -4 4 +2 3455 727 0 -4 4 +4 G1 727 0 731 0 +2 3456 731 0 -4 4 +0 + +0101000 ++5812 0 -5813 0 * +Ed + 1.00000127897692e-07 1 1 0 +1 1480 0 2.66078678287153 3.14158232341098 +2 3457 727 0 2.66078678287153 3.14158232341098 +4 C0 727 0 621 0 +2 3458 621 0 2.66078678287153 3.14158232341098 +2 3459 622 259 2.66078678287153 3.14158232341098 +0 + +0101000 ++5812 0 -5822 0 * +Ed + 1e-07 1 1 0 +1 1481 0 -17.45738465582 17.457384656 +4 C0 724 0 719 0 +2 3460 719 0 -17.45738465582 17.457384656 +0 + +0101000 ++5811 0 -5826 0 * +Ed + 5.69724220209966e-07 1 1 0 +1 1482 0 -4 4 +2 3461 720 0 -4 4 +4 G1 724 0 720 0 +0 + +0101000 ++5811 0 -5810 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1483 0 -17.45738465582 17.457384656 +4 C0 724 0 621 0 +2 3462 621 0 -17.45738465582 17.457384656 +2 3463 622 259 -17.45738465582 17.457384656 +0 + +0101000 ++5810 0 -5824 0 * +Ed + 1e-07 1 1 0 +1 1484 0 3.14159148308531 3.75414691075333 +2 3464 720 0 3.14159148308531 3.75414691075333 +4 C0 720 0 719 0 +2 3465 719 0 3.14159148308531 3.75414691075333 +0 + +0101000 ++5811 0 -5831 0 * +Ed + 1.00000078159701e-07 1 1 0 +1 1485 0 3.14159148308531 3.75414691075333 +2 3466 720 0 3.14159148308531 3.75414691075333 +4 C0 720 0 621 0 +2 3467 621 0 3.14159148308531 3.75414691075333 +2 3468 622 259 3.14159148308531 3.75414691075333 +0 + +0101000 ++5810 0 -5829 0 * +Ed + 1e-07 1 1 0 +1 1486 0 5.67063105418558 6.28318658069469 +2 3469 721 0 5.67063105418558 6.28318658069469 +4 C0 721 0 719 0 +2 3470 719 0 5.67063105418558 6.28318658069469 +0 + +0101000 ++5830 0 -5809 0 * +Ed + 1.03691038551574e-06 1 1 0 +1 1487 0 -4 4 +2 3471 721 0 -4 4 +4 G1 721 0 732 0 +2 3472 732 0 -4 4 +0 + +0101000 ++5809 0 -5808 0 * +Ed + 1.00000078159701e-07 1 1 0 +1 1488 0 5.67063105418558 6.28318658069469 +2 3473 721 0 5.67063105418558 6.28318658069469 +4 C0 721 0 621 0 +2 3474 621 0 5.67063105418558 6.28318658069469 +2 3475 622 259 5.67063105418558 6.28318658069469 +0 + +0101000 ++5828 0 -5808 0 * +Ed + 1e-07 1 1 0 +1 1489 0 2.6599062816528 4.23157303246173 +2 3476 717 0 2.6599062816528 4.23157303246173 +4 C0 717 0 699 0 +2 3477 699 0 2.6599062816528 4.23157303246173 +0 + +0101000 ++5832 0 -5807 0 * +Ed + 1.00000021316282e-07 1 1 0 +1 1490 0 2.6599062816528 4.23157303246173 +2 3478 717 0 2.6599062816528 4.23157303246173 +4 C0 717 0 621 0 +2 3479 621 0 2.6599062816528 4.23157303246173 +2 3480 622 259 2.6599062816528 4.23157303246173 +0 + +0101000 ++5833 0 -5806 0 * +Ed + 1e-07 1 1 0 +1 1491 0 -4 4 +2 3481 717 0 -4 4 +4 G1 717 0 733 0 +2 3482 733 0 -4 4 +0 + +0101000 ++5806 0 -5807 0 * +Ed + 1e-07 1 1 0 +1 1492 0 1.39626340159296 2.65990628167029 +2 3483 715 0 1.39626340159296 2.65990628167029 +4 C0 715 0 699 0 +2 3484 699 0 1.39626340159296 2.65990628167029 +0 + +0101000 ++5805 0 -5835 0 * +Ed + 1e-07 1 1 0 +1 1493 0 -4 4 +2 3485 715 0 -4 4 +4 G1 715 0 714 0 +0 + +0101000 ++5804 0 -5805 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 1494 0 1.39626340159296 2.65990628167029 +2 3486 715 0 1.39626340159296 2.65990628167029 +4 C0 715 0 621 0 +2 3487 621 0 1.39626340159296 2.65990628167029 +2 3488 622 259 1.39626340159296 2.65990628167029 +0 + +0101000 ++5804 0 -5834 0 * +Ed + 1e-07 1 1 0 +1 1495 0 -29.5958572325299 29.5958572327035 +4 C0 714 0 699 0 +2 3489 699 0 -29.5958572325299 29.5958572327035 +0 + +0101000 ++5839 0 -5805 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1496 0 -29.5958572325299 29.5958572327035 +4 C0 714 0 621 0 +2 3490 621 0 -29.5958572325299 29.5958572327035 +2 3491 622 259 -29.5958572325299 29.5958572327035 +0 + +0101000 ++5837 0 -5804 0 * +Ed + 1e-07 1 1 0 +1 1497 0 -19.03076802997 19.03076803003 +4 C0 712 0 699 0 +2 3492 699 0 -19.03076802997 19.03076803003 +0 + +0101000 ++5842 0 -5838 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 1498 0 -19.03076802997 19.03076803003 +4 C0 712 0 621 0 +2 3493 621 0 -19.03076802997 19.03076803003 +2 3494 622 259 -19.03076802997 19.03076803003 +0 + +0101000 ++5841 0 -5836 0 * +Ed + 1e-07 1 1 0 +1 1499 0 2.53506084472084 6.88971713404734 +2 3495 709 0 2.53506084472084 6.88971713404734 +4 C0 709 0 699 0 +2 3496 699 0 2.53506084472084 6.88971713404734 +0 + +0101000 ++5846 0 -5843 0 * +Ed + 1.00000017763568e-07 1 1 0 +1 1500 0 2.53506084472084 6.88971713404734 +2 3497 709 0 2.53506084472084 6.88971713404734 +4 C0 709 0 621 0 +2 3498 621 0 2.53506084472084 6.88971713404734 +2 3499 622 259 2.53506084472084 6.88971713404734 +0 + +0101000 ++5845 0 -5840 0 * +Ed + 6.39206388044187e-07 1 1 0 +1 1501 0 -4 4 +2 3500 707 0 -4 4 +4 G1 707 0 734 0 +2 3501 734 0 -4 4 +0 + +0101000 ++5803 0 -5802 0 * +Ed + 1e-07 1 1 0 +1 1502 0 3.14159149561134 3.74812161904262 +2 3502 707 0 3.14159149561134 3.74812161904262 +4 C0 707 0 699 0 +2 3503 699 0 3.14159149561134 3.74812161904262 +0 + +0101000 ++5803 0 -5849 0 * +Ed + 1.00000046185278e-07 1 1 0 +1 1503 0 3.14159149561134 3.74812161904262 +2 3504 707 0 3.14159149561134 3.74812161904262 +4 C0 707 0 621 0 +2 3505 621 0 3.14159149561134 3.74812161904262 +2 3506 622 259 3.14159149561134 3.74812161904262 +0 + +0101000 ++5802 0 -5848 0 * +Ed + 1e-07 1 1 0 +1 1504 0 4.10585986842275 4.71239036312782 +2 3507 705 0 4.10585986842275 4.71239036312782 +4 C0 705 0 699 0 +2 3508 699 0 4.10585986842275 4.71239036312782 +0 + +0101000 ++5850 0 -5853 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 1505 0 4.10585986842275 4.71239036312782 +2 3509 705 0 4.10585986842275 4.71239036312782 +4 C0 705 0 621 0 +2 3510 621 0 4.10585986842275 4.71239036312782 +2 3511 622 259 4.10585986842275 4.71239036312782 +0 + +0101000 ++5851 0 -5855 0 * +Ed + 1e-07 1 1 0 +1 1506 0 4.53785605518488 4.71238898038469 +2 3512 703 0 4.53785605518488 4.71238898038469 +4 C0 703 0 699 0 +2 3513 699 0 4.53785605518488 4.71238898038469 +0 + +0101000 ++5856 0 -5852 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 1507 0 4.53785605518488 4.71238898038469 +2 3514 703 0 4.53785605518488 4.71238898038469 +4 C0 703 0 621 0 +2 3515 621 0 4.53785605518488 4.71238898038469 +2 3516 622 259 4.53785605518488 4.71238898038469 +0 + +0101000 ++5857 0 -5854 0 * +Ed + 1e-07 1 1 0 +1 1508 0 -49.2603636684632 49.2603636681974 +4 C0 700 0 699 0 +2 3517 700 0 -49.2603636684632 49.2603636681974 +2 3518 699 0 -49.2603636684632 49.2603636681974 +0 + +0101000 ++5863 0 -5860 0 * +Ed + 1.00000017763568e-07 1 1 0 +1 1509 0 -49.2603636684632 49.2603636681974 +4 C0 700 0 621 0 +2 3519 621 0 -49.2603636684632 49.2603636681974 +2 3520 700 0 -49.2603636684632 49.2603636681974 +2 3521 622 259 -49.2603636684632 49.2603636681974 +0 + +0101000 ++5862 0 -5861 0 * +Ed + 1e-07 1 1 0 +1 1510 0 4.71238898038469 6.28318530717959 +2 3522 674 0 4.71238898038469 6.28318530717959 +4 C0 674 0 630 0 +0 + +0101000 ++5906 0 -5902 0 * +Ed + 1e-07 1 1 0 +1 1511 0 4.71238898038469 6.28318530717959 +2 3523 674 0 4.71238898038469 6.28318530717959 +4 C0 674 0 621 0 +2 3524 621 0 4.71238898038469 6.28318530717959 +2 3525 735 259 4.71238898038469 6.28318530717959 +2 3526 622 259 4.71238898038469 6.28318530717959 +0 + +0101000 ++5907 258 -5904 258 * +Ed + 6.49477806139219e-05 1 1 0 +1 1512 0 0 13.5557546445 +2 3527 670 0 0 13.5557546445 +4 C0 670 0 630 0 +0 + +0101000 ++5801 0 -5911 0 * +Ed + 1e-07 1 1 0 +1 1513 0 727.838234934 759.777660335 +2 3528 670 0 727.838234934 759.777660335 +2 3529 666 0 727.838234934 759.777660335 +4 G1 670 0 666 0 +0 + +0101000 ++5801 0 -5800 258 * +Ed + 0.0042493701492345 1 1 0 +1 1514 0 0 13.2199183751 +2 3530 670 0 0 13.2199183751 +4 C0 670 0 621 0 +2 3531 621 0 0 13.2199183751 +2 3532 736 259 0 13.2199183751 +2 3533 622 259 0 13.2199183751 +0 + +0101000 ++5800 258 -5910 258 * +Ed + 0.000397449244097015 1 1 0 +1 1515 0 0 0.636435117006 +2 3534 666 0 0 0.636435117006 +4 C0 666 0 630 0 +0 + +0101000 ++5916 0 -5801 0 * +Ed + 0.000397254783977291 1 1 0 +1 1516 0 0 0.620827201707 +2 3535 666 0 0 0.620827201707 +4 C0 666 0 621 0 +2 3536 621 0 0 0.620827201707 +2 3537 737 259 0 0.620827201707 +2 3538 622 259 0 0.620827201707 +0 + +0101000 ++5915 258 -5800 258 * +Ed + 8.47779177044377e-05 1 1 0 +1 1517 0 0 28.5250040371 +2 3539 662 0 0 28.5250040371 +4 C0 662 0 630 0 +0 + +0101000 ++5799 0 -5914 0 * +Ed + 1e-07 1 1 0 +1 1518 0 684.169373561 719.988450519 +2 3540 662 0 684.169373561 719.988450519 +2 3541 738 0 684.169373561 719.988450519 +4 G1 662 0 738 0 +0 + +0101000 ++5799 0 -5798 258 * +Ed + 3.68408062876559e-05 1 1 0 +1 1519 0 0 21.3166215632 +2 3542 662 0 0 21.3166215632 +4 C0 662 0 621 0 +2 3543 621 0 0 21.3166215632 +2 3544 739 259 0 21.3166215632 +2 3545 622 259 0 21.3166215632 +0 + +0101000 ++5798 258 -5920 258 * +Ed + 0.000232084738891746 1 1 0 +1 1520 0 0 26.6665367004 +2 3546 738 0 0 26.6665367004 +4 C0 738 0 630 0 +0 + +0101000 ++5797 0 -5799 0 * +Ed + 1e-07 1 1 0 +1 1521 0 674.002823419 710.757076 +2 3547 738 0 674.002823419 710.757076 +2 3548 658 0 674.002823419 710.757076 +4 G1 738 0 658 0 +0 + +0101000 ++5797 0 -5796 258 * +Ed + 3.48266629400409e-05 1 1 0 +1 1522 0 0 25.9870154338 +2 3549 738 0 0 25.9870154338 +4 C0 738 0 621 0 +2 3550 621 0 0 25.9870154338 +2 3551 740 259 0 25.9870154338 +2 3552 622 259 0 25.9870154338 +0 + +0101000 ++5796 258 -5798 258 * +Ed + 0.00137214571031583 1 1 0 +1 1523 0 0 5.74085382142 +2 3553 658 0 0 5.74085382142 +4 C0 658 0 630 0 +0 + +0101000 ++5925 0 -5797 0 * +Ed + 0.00139873365151549 1 1 0 +1 1524 0 0 5.64479756544 +2 3554 658 0 0 5.64479756544 +4 C0 658 0 621 0 +2 3555 621 0 0 5.64479756544 +2 3556 741 259 0 5.64479756544 +2 3557 622 259 0 5.64479756544 +0 + +0101000 ++5924 258 -5796 258 * +Ed + 4.58383599786546e-05 1 1 0 +1 1525 0 4.15794192826 5.95830336654 +2 3558 659 0 4.15794192826 5.95830336654 +4 C0 659 0 630 0 +0 + +0101000 ++5867 0 -5923 0 * +Ed + 1e-07 1 1 0 +1 1526 0 643.8353864 679.789269389 +2 3559 659 0 643.8353864 679.789269389 +2 3560 696 0 643.8353864 679.789269389 +4 G1 659 0 696 0 +0 + +0101000 ++5868 0 -5795 258 * +Ed + 0.000384112278017549 1 1 0 +1 1527 0 0 5.84763022847 +2 3561 659 0 0 5.84763022847 +4 C0 659 0 621 0 +2 3562 621 0 0 5.84763022847 +2 3563 742 259 0 5.84763022847 +2 3564 622 259 0 5.84763022847 +0 + +0101000 ++5795 258 -5922 258 * +Ed + 0.000398948942604742 1 1 0 +1 1528 0 0 4.2525414582 +2 3565 696 0 0 4.2525414582 +4 C0 696 0 630 0 +0 + +0101000 ++5794 0 -5869 0 * +Ed + 1e-07 1 1 0 +1 1529 0 637.129630656 674.425271062 +2 3566 696 0 637.129630656 674.425271062 +2 3567 743 0 637.129630656 674.425271062 +4 G1 696 0 743 0 +0 + +0101000 ++5794 0 -5793 258 * +Ed + 0.00238040630840407 1 1 0 +1 1530 0 0 15.7474629637 +2 3568 696 0 0 15.7474629637 +4 C0 696 0 621 0 +2 3569 621 0 0 15.7474629637 +2 3570 744 259 0 15.7474629637 +2 3571 622 259 0 15.7474629637 +0 + +0101000 ++5793 258 -5795 258 * +Ed + 6.77442107043747e-05 1 1 0 +1 1531 0 0 2.11533703903 +2 3572 743 0 0 2.11533703903 +4 C0 743 0 630 0 +0 + +0101000 ++5792 0 -5794 0 * +Ed + 1e-07 1 1 0 +1 1532 0 633.538721189 670.716573728 +2 3573 743 0 633.538721189 670.716573728 +2 3574 745 0 633.538721189 670.716573728 +4 G1 743 0 745 0 +0 + +0101000 ++5792 0 -5791 258 * +Ed + 2.25685573442198e-05 1 1 0 +1 1533 0 0 2.07857377165 +2 3575 743 0 0 2.07857377165 +4 C0 743 0 621 0 +2 3576 621 0 0 2.07857377165 +2 3577 746 259 0 2.07857377165 +2 3578 622 259 0 2.07857377165 +0 + +0101000 ++5791 258 -5793 258 * +Ed + 5.82104194749363e-06 1 1 0 +1 1534 0 0 8.26182362928 +2 3579 745 0 0 8.26182362928 +4 C0 745 0 630 0 +0 + +0101000 ++5790 0 -5792 0 * +Ed + 1e-07 1 1 0 +1 1535 0 631.28419866 668.634477096 +2 3580 745 0 631.28419866 668.634477096 +2 3581 655 0 631.28419866 668.634477096 +4 G1 745 0 655 0 +0 + +0101000 ++5790 0 -5789 258 * +Ed + 3.93600790337305e-06 1 1 0 +1 1536 0 0 8.12478804363 +2 3582 745 0 0 8.12478804363 +4 C0 745 0 621 0 +2 3583 621 0 0 8.12478804363 +2 3584 747 259 0 8.12478804363 +2 3585 622 259 0 8.12478804363 +0 + +0101000 ++5789 258 -5791 258 * +Ed + 1.29292736175792e-05 1 1 0 +1 1537 0 0 1.22469796652 +2 3586 655 0 0 1.22469796652 +4 C0 655 0 630 0 +0 + +0101000 ++5927 0 -5790 0 * +Ed + 1.10537365055118e-05 1 1 0 +1 1538 0 0 1.20537347996 +2 3587 655 0 0 1.20537347996 +4 C0 655 0 621 0 +2 3588 621 0 0 1.20537347996 +2 3589 748 259 0 1.20537347996 +2 3590 622 259 0 1.20537347996 +0 + +0101000 ++5926 258 -5789 258 * +Ed + 1e-07 1 1 0 +1 1539 0 0 1.5707963267949 +2 3591 645 0 0 1.5707963267949 +4 C0 645 0 630 0 +0 + +0101000 ++5941 0 -5936 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1540 0 0 1.5707963267949 +2 3592 645 0 0 1.5707963267949 +4 C0 645 0 621 0 +2 3593 621 0 0 1.5707963267949 +2 3594 749 259 0 1.5707963267949 +2 3595 622 259 0 1.5707963267949 +0 + +0101000 ++5943 258 -5938 258 * +Ed + 1e-07 1 1 0 +1 1541 0 4.71238898038469 6.28318530717959 +2 3596 642 0 4.71238898038469 6.28318530717959 +4 C0 642 0 630 0 +0 + +0101000 ++5945 0 -5940 0 * +Ed + 1e-07 1 1 0 +1 1542 0 4.71238898038469 6.28318530717959 +2 3597 642 0 4.71238898038469 6.28318530717959 +4 C0 642 0 621 0 +2 3598 621 0 4.71238898038469 6.28318530717959 +2 3599 750 259 4.71238898038469 6.28318530717959 +2 3600 622 259 4.71238898038469 6.28318530717959 +0 + +0101000 ++5947 258 -5942 258 * +Ed + 2.14393506236538e-05 1 1 0 +1 1543 0 0 68.1259484938 +2 3601 643 0 0 68.1259484938 +4 C0 643 0 630 0 +0 + +0101000 ++5944 0 -5788 0 * +Ed + 1e-07 1 1 0 +1 1544 0 14.4920852399564 36.5154327037903 +2 3602 643 0 14.4920852399564 36.5154327037903 +4 G1 643 0 618 0 +2 3603 618 0 14.4920852399564 36.5154327037903 +0 + +0101000 ++5788 0 -5787 258 * +Ed + 3.74068363052505e-05 1 1 0 +1 1545 0 0 68.1259499259 +2 3604 643 0 0 68.1259499259 +4 C0 643 0 621 0 +2 3605 621 0 0 68.1259499259 +2 3606 751 259 0 68.1259499259 +2 3607 622 259 0 68.1259499259 +0 + +0101000 ++5787 258 -5946 258 * +Ed + 1e-07 1 1 0 +1 1546 0 0 1.5707963267949 +2 3608 640 0 0 1.5707963267949 +4 C0 640 0 630 0 +0 + +0101000 ++5903 0 -5952 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 1547 0 0 1.5707963267949 +2 3609 640 0 0 1.5707963267949 +4 C0 640 0 621 0 +2 3610 621 0 0 1.5707963267949 +2 3611 752 259 0 1.5707963267949 +2 3612 622 259 0 1.5707963267949 +0 + +0101000 ++5905 258 -5953 258 * +Ed + 1e-07 1 1 0 +1 1548 0 -97.4603702773723 97.4603702765122 +2 3613 617 0 -97.4603702773723 97.4603702765122 +4 G1 630 0 617 0 +0 + +0101000 ++5786 0 -5971 0 * +Ed + 1e-07 1 1 0 +1 1549 0 -58.8065866111635 58.8065866112945 +4 C0 630 0 618 0 +2 3614 618 0 -58.8065866111635 58.8065866112945 +0 + +0101000 ++5786 0 -5788 0 * +Ed + 1e-07 1 1 0 +1 1550 0 185.42666444335 217.336984231183 +2 3615 628 0 185.42666444335 217.336984231183 +2 3616 627 0 185.42666444335 217.336984231183 +4 CN 628 0 627 0 +0 + +0101000 ++5785 0 -5976 0 * +Ed + 1e-07 1 1 0 +1 1551 0 185.426664443266 217.336984232013 +2 3617 628 0 185.426664443266 217.336984232013 +2 3618 627 0 185.426664443266 217.336984232013 +4 CN 628 0 627 0 +0 + +0101000 ++5784 0 -5975 0 * +Ed + 0.000487984011394659 1 1 0 +1 1552 0 0 37.1509079789 +2 3619 628 0 0 37.1509079789 +2 3620 617 0 0 37.1509079789 +4 C0 628 0 617 0 +0 + +0101000 ++5784 0 -5785 0 * +Ed + 0.000377689939319134 1 1 0 +1 1553 0 0 36.023253541 +2 3621 627 0 0 36.023253541 +2 3622 617 0 0 36.023253541 +4 C0 627 0 617 0 +0 + +0101000 ++5785 0 -5784 0 * +Ed + 1e-07 1 1 0 +1 1554 0 -9.00000000009075 9.00000000013705 +2 3623 626 0 -9.00000000009075 9.00000000013705 +2 3624 625 0 -9.00000000009075 9.00000000013705 +4 CN 626 0 625 0 +0 + +0101000 ++5951 0 -5977 0 * +Ed + 1e-07 1 1 0 +1 1555 0 -9.00000000013705 9.00000000013704 +2 3625 626 0 -9.00000000013705 9.00000000013704 +2 3626 625 0 -9.00000000013705 9.00000000013704 +4 G2 626 0 625 0 +0 + +0101000 ++5950 0 -5978 0 * +Ed + 1e-07 1 1 0 +1 1556 0 -9.0000000003222 8.99999999985931 +2 3627 624 0 -9.0000000003222 8.99999999985931 +2 3628 623 0 -9.0000000003222 8.99999999985931 +4 CN 624 0 623 0 +0 + +0101000 ++5949 0 -5979 0 * +Ed + 1e-07 1 1 0 +1 1557 0 -8.99999999985931 9.0000000003222 +2 3629 624 0 -8.99999999985931 9.0000000003222 +2 3630 623 0 -8.99999999985931 9.0000000003222 +4 G2 624 0 623 0 +0 + +0101000 ++5948 0 -5980 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 1558 0 -93.0189896685298 93.0189896687534 +4 C0 618 0 621 0 +2 3631 618 0 -93.0189896685298 93.0189896687534 +2 3632 621 0 -93.0189896685298 93.0189896687534 +2 3633 622 259 -93.0189896685298 93.0189896687534 +0 + +0101000 ++5983 258 -5787 258 * +Ed + 7.86574424828166e-06 1 1 0 +1 1559 0 0 86.5584238491 +2 3634 617 0 0 86.5584238491 +4 C0 618 0 617 0 +2 3635 618 0 0 86.5584238491 +0 + +0101000 ++5786 0 -5965 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 1560 0 0.848062078993592 1.5707963267949 +2 3636 753 0 0.848062078993592 1.5707963267949 +4 C0 621 0 753 0 +2 3637 621 0 0.848062078993592 1.5707963267949 +2 3638 754 259 0.848062078993592 1.5707963267949 +2 3639 622 259 0.848062078993592 1.5707963267949 +0 + +0101000 ++5783 0 -5782 259 * +Ed + 1e-07 1 1 0 +1 1560 0 1.5707963267949 2.2935305745962 +2 3636 753 0 1.5707963267949 2.2935305745962 +4 C0 621 0 753 0 +2 3637 621 0 1.5707963267949 2.2935305745962 +2 3640 755 259 1.5707963267949 2.2935305745962 +2 3641 622 259 1.5707963267949 2.2935305745962 +0 + +0101000 ++5782 259 -5781 0 * +Ed + 1.00000010658141e-07 1 1 0 +1 1561 0 -0.177124343999992 0.17712434500001 +4 C0 621 0 756 0 +2 3642 621 0 -0.177124343999992 0.17712434500001 +2 3643 756 0 -0.177124343999992 0.17712434500001 +2 3644 622 259 -0.177124343999992 0.17712434500001 +0 + +0101000 ++5781 0 -5780 0 * +Ed + 1.00000010658141e-07 1 1 0 +1 1562 0 -0.177124344500001 0.177124344500001 +4 C0 621 0 757 0 +2 3645 621 0 -0.177124344500001 0.177124344500001 +2 3646 757 0 -0.177124344500001 0.177124344500001 +2 3647 622 259 -0.177124344500001 0.177124344500001 +0 + +0101000 ++5779 0 -5780 0 * +Ed + 1e-07 1 1 0 +1 1563 0 2.41885840578849 3.14159265358979 +2 3648 758 0 2.41885840578849 3.14159265358979 +4 C0 621 0 758 0 +2 3649 621 0 2.41885840578849 3.14159265358979 +2 3650 755 259 2.41885840578849 3.14159265358979 +2 3651 622 259 2.41885840578849 3.14159265358979 +0 + +0101000 ++5779 0 -5778 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 1564 0 3.14159265358979 3.86432690140985 +2 3652 759 0 3.14159265358979 3.86432690140985 +4 C0 621 0 759 0 +2 3653 621 0 3.14159265358979 3.86432690140985 +2 3654 755 259 3.14159265358979 3.86432690140985 +2 3655 622 259 3.14159265358979 3.86432690140985 +0 + +0101000 ++5778 0 -5777 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 1565 0 -0.177124344399999 0.177124344500001 +4 C0 621 0 760 0 +2 3656 621 0 -0.177124344399999 0.177124344500001 +2 3657 760 0 -0.177124344399999 0.177124344500001 +2 3658 622 259 -0.177124344399999 0.177124344500001 +0 + +0101000 ++5776 0 -5777 0 * +Ed + 1.00000010658141e-07 1 1 0 +1 1566 0 -0.177124343999992 0.17712434500001 +4 C0 621 0 761 0 +2 3659 621 0 -0.177124343999992 0.17712434500001 +2 3660 761 0 -0.177124343999992 0.17712434500001 +2 3661 622 259 -0.177124343999992 0.17712434500001 +0 + +0101000 ++5775 0 -5776 0 * +Ed + 1e-07 1 1 0 +1 1567 0 3.98965473258339 4.71238898038469 +2 3662 762 0 3.98965473258339 4.71238898038469 +4 C0 621 0 762 0 +2 3663 621 0 3.98965473258339 4.71238898038469 +2 3664 755 259 3.98965473258339 4.71238898038469 +2 3665 622 259 3.98965473258339 4.71238898038469 +0 + +0101000 ++5775 0 -5774 259 * +Ed + 1e-07 1 1 0 +1 1567 0 4.71238898038469 5.43512322818599 +2 3662 762 0 4.71238898038469 5.43512322818599 +4 C0 621 0 762 0 +2 3663 621 0 4.71238898038469 5.43512322818599 +2 3666 754 259 4.71238898038469 5.43512322818599 +2 3667 622 259 4.71238898038469 5.43512322818599 +0 + +0101000 ++5774 259 -5773 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1568 0 -57.285060961 57.2850609616 +4 C0 621 0 734 0 +2 3668 621 0 -57.285060961 57.2850609616 +2 3669 734 0 -57.285060961 57.2850609616 +2 3670 622 259 -57.285060961 57.2850609616 +0 + +0101000 ++5802 0 -5773 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 1569 0 -15.2585409810757 15.2585409819161 +4 C0 621 0 698 0 +2 3671 621 0 -15.2585409810757 15.2585409819161 +2 3672 698 0 -15.2585409810757 15.2585409819161 +2 3673 622 259 -15.2585409810757 15.2585409819161 +0 + +0101000 ++5865 0 -5772 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 1570 0 3.50883878466566 4.71238898038469 +2 3674 763 0 3.50883878466566 4.71238898038469 +4 C0 621 0 763 0 +2 3675 621 0 3.50883878466566 4.71238898038469 +2 3676 764 259 3.50883878466566 4.71238898038469 +2 3677 622 259 3.50883878466566 4.71238898038469 +0 + +0101000 ++5772 0 -5771 259 * +Ed + 1.00000007105427e-07 1 1 0 +1 1570 0 4.71238898038469 4.95430728031876 +2 3674 763 0 4.71238898038469 4.95430728031876 +4 C0 621 0 763 0 +2 3675 621 0 4.71238898038469 4.95430728031876 +2 3678 765 259 4.71238898038469 4.95430728031876 +2 3679 622 259 4.71238898038469 4.95430728031876 +0 + +0101000 ++5771 259 -5770 0 * +Ed + 1.00000017763568e-07 1 1 0 +1 1571 0 -0.177124343884329 0.177124344770934 +4 C0 621 0 766 0 +2 3680 621 0 -0.177124343884329 0.177124344770934 +2 3681 766 0 -0.177124343884329 0.177124344770934 +2 3682 622 259 -0.177124343884329 0.177124344770934 +0 + +0101000 ++5770 0 -5769 0 * +Ed + 1.00000017763568e-07 1 1 0 +1 1572 0 -0.17712434459745 0.177124344597443 +4 C0 621 0 767 0 +2 3683 621 0 -0.17712434459745 0.177124344597443 +2 3684 767 0 -0.17712434459745 0.177124344597443 +2 3685 622 259 -0.17712434459745 0.177124344597443 +0 + +0101000 ++5769 0 -5768 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 1573 0 5.0796351115126 6.28318530717959 +2 3686 768 0 5.0796351115126 6.28318530717959 +4 C0 621 0 768 0 +2 3687 621 0 5.0796351115126 6.28318530717959 +2 3688 765 259 5.0796351115126 6.28318530717959 +2 3689 622 259 5.0796351115126 6.28318530717959 +0 + +0101000 ++5768 0 -5767 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 1574 0 0 0.241918299909805 +2 3690 769 0 0 0.241918299909805 +4 C0 621 0 769 0 +2 3691 621 0 0 0.241918299909805 +2 3692 765 259 0 0.241918299909805 +2 3693 622 259 0 0.241918299909805 +0 + +0101000 ++5767 0 -5766 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 1575 0 -0.177124344597443 0.177124344508793 +4 C0 621 0 770 0 +2 3694 621 0 -0.177124344597443 0.177124344508793 +2 3695 770 0 -0.177124344597443 0.177124344508793 +2 3696 622 259 -0.177124344597443 0.177124344508793 +0 + +0101000 ++5766 0 -5765 0 * +Ed + 1.00000017763568e-07 1 1 0 +1 1576 0 -0.177124344770934 0.177124344770938 +4 C0 621 0 771 0 +2 3697 621 0 -0.177124344770934 0.177124344770938 +2 3698 771 0 -0.177124344770934 0.177124344770938 +2 3699 622 259 -0.177124344770934 0.177124344770938 +0 + +0101000 ++5764 0 -5765 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 1577 0 0.367246131099204 1.5707963267949 +2 3700 772 0 0.367246131099204 1.5707963267949 +4 C0 621 0 772 0 +2 3701 621 0 0.367246131099204 1.5707963267949 +2 3702 765 259 0.367246131099204 1.5707963267949 +2 3703 622 259 0.367246131099204 1.5707963267949 +0 + +0101000 ++5764 0 -5763 259 * +Ed + 1.00000003552714e-07 1 1 0 +1 1577 0 1.5707963267949 1.81271462672299 +2 3700 772 0 1.5707963267949 1.81271462672299 +4 C0 621 0 772 0 +2 3701 621 0 1.5707963267949 1.81271462672299 +2 3704 764 259 1.5707963267949 1.81271462672299 +2 3705 622 259 1.5707963267949 1.81271462672299 +0 + +0101000 ++5763 259 -5762 0 * +Ed + 1.00000017763568e-07 1 1 0 +1 1578 0 -15.2585409819623 15.2585409810294 +4 C0 621 0 733 0 +2 3706 621 0 -15.2585409819623 15.2585409810294 +2 3707 733 0 -15.2585409819623 15.2585409810294 +2 3708 622 259 -15.2585409819623 15.2585409810294 +0 + +0101000 ++5806 0 -5762 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1579 0 -57.285060961 57.2850609616 +4 C0 621 0 710 0 +2 3709 621 0 -57.285060961 57.2850609616 +2 3710 710 0 -57.285060961 57.2850609616 +2 3711 622 259 -57.285060961 57.2850609616 +0 + +0101000 ++5844 0 -5783 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1580 0 3.98965473258339 4.71238898038469 +2 3712 773 0 3.98965473258339 4.71238898038469 +4 C0 621 0 773 0 +2 3713 621 0 3.98965473258339 4.71238898038469 +2 3714 774 259 3.98965473258339 4.71238898038469 +2 3715 622 259 3.98965473258339 4.71238898038469 +0 + +0101000 ++5761 0 -5760 259 * +Ed + 1e-07 1 1 0 +1 1580 0 4.71238898038469 5.43512322818599 +2 3712 773 0 4.71238898038469 5.43512322818599 +4 C0 621 0 773 0 +2 3713 621 0 4.71238898038469 5.43512322818599 +2 3716 775 259 4.71238898038469 5.43512322818599 +2 3717 622 259 4.71238898038469 5.43512322818599 +0 + +0101000 ++5760 259 -5759 0 * +Ed + 1.00000010658141e-07 1 1 0 +1 1581 0 -48.56674765252 48.5667476528 +4 C0 621 0 730 0 +2 3718 621 0 -48.56674765252 48.5667476528 +2 3719 730 0 -48.56674765252 48.5667476528 +2 3720 622 259 -48.56674765252 48.5667476528 +0 + +0101000 ++5814 0 -5759 0 * +Ed + 1.00000010658141e-07 1 1 0 +1 1582 0 -7.43212571844431 7.43212571844431 +4 C0 621 0 731 0 +2 3721 621 0 -7.43212571844431 7.43212571844431 +2 3722 731 0 -7.43212571844431 7.43212571844431 +2 3723 622 259 -7.43212571844431 7.43212571844431 +0 + +0101000 ++5758 0 -5812 0 * +Ed + 1e-07 1 1 0 +1 1583 0 0.36724613113151 1.5707963267949 +2 3724 776 0 0.36724613113151 1.5707963267949 +4 C0 621 0 776 0 +2 3725 621 0 0.36724613113151 1.5707963267949 +2 3726 777 259 0.36724613113151 1.5707963267949 +2 3727 622 259 0.36724613113151 1.5707963267949 +0 + +0101000 ++5758 0 -5757 259 * +Ed + 1e-07 1 1 0 +1 1583 0 1.5707963267949 1.81271462668043 +2 3724 776 0 1.5707963267949 1.81271462668043 +4 C0 621 0 776 0 +2 3725 621 0 1.5707963267949 1.81271462668043 +2 3728 778 259 1.5707963267949 1.81271462668043 +2 3729 622 259 1.5707963267949 1.81271462668043 +0 + +0101000 ++5757 259 -5756 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1584 0 -0.177124344416297 0.177124344504941 +4 C0 621 0 779 0 +2 3730 621 0 -0.177124344416297 0.177124344504941 +2 3731 779 0 -0.177124344416297 0.177124344504941 +2 3732 622 259 -0.177124344416297 0.177124344504941 +0 + +0101000 ++5755 0 -5756 0 * +Ed + 1.00000010658141e-07 1 1 0 +1 1585 0 -0.177124344504947 0.177124344504953 +4 C0 621 0 780 0 +2 3733 621 0 -0.177124344504947 0.177124344504953 +2 3734 780 0 -0.177124344504947 0.177124344504953 +2 3735 622 259 -0.177124344504947 0.177124344504953 +0 + +0101000 ++5755 0 -5754 0 * +Ed + 1e-07 1 1 0 +1 1586 0 1.93804245785281 3.14159265358979 +2 3736 781 0 1.93804245785281 3.14159265358979 +4 C0 621 0 781 0 +2 3737 621 0 1.93804245785281 3.14159265358979 +2 3738 778 259 1.93804245785281 3.14159265358979 +2 3739 622 259 1.93804245785281 3.14159265358979 +0 + +0101000 ++5754 0 -5753 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1587 0 3.14159265358979 3.3835109534996 +2 3740 782 0 3.14159265358979 3.3835109534996 +4 C0 621 0 782 0 +2 3741 621 0 3.14159265358979 3.3835109534996 +2 3742 778 259 3.14159265358979 3.3835109534996 +2 3743 622 259 3.14159265358979 3.3835109534996 +0 + +0101000 ++5753 0 -5752 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1588 0 -0.177124344504941 0.177124344370033 +4 C0 621 0 783 0 +2 3744 621 0 -0.177124344504941 0.177124344370033 +2 3745 783 0 -0.177124344504941 0.177124344370033 +2 3746 622 259 -0.177124344504941 0.177124344370033 +0 + +0101000 ++5752 0 -5751 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1589 0 -0.177124344416284 0.17712434450496 +4 C0 621 0 784 0 +2 3747 621 0 -0.177124344416284 0.17712434450496 +2 3748 784 0 -0.177124344416284 0.17712434450496 +2 3749 622 259 -0.177124344416284 0.17712434450496 +0 + +0101000 ++5751 0 -5750 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1590 0 3.50883878467105 4.71238898038469 +2 3750 785 0 3.50883878467105 4.71238898038469 +4 C0 621 0 785 0 +2 3751 621 0 3.50883878467105 4.71238898038469 +2 3752 778 259 3.50883878467105 4.71238898038469 +2 3753 622 259 3.50883878467105 4.71238898038469 +0 + +0101000 ++5750 0 -5749 259 * +Ed + 1e-07 1 1 0 +1 1590 0 4.71238898038469 4.95430728028851 +2 3750 785 0 4.71238898038469 4.95430728028851 +4 C0 621 0 785 0 +2 3751 621 0 4.71238898038469 4.95430728028851 +2 3754 777 259 4.71238898038469 4.95430728028851 +2 3755 622 259 4.71238898038469 4.95430728028851 +0 + +0101000 ++5749 259 -5748 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1591 0 -7.43212571822074 7.43212571822074 +4 C0 621 0 723 0 +2 3756 621 0 -7.43212571822074 7.43212571822074 +2 3757 723 0 -7.43212571822074 7.43212571822074 +2 3758 622 259 -7.43212571822074 7.43212571822074 +0 + +0101000 ++5748 0 -5825 0 * +Ed + 1.00000010658141e-07 1 1 0 +1 1592 0 -48.56674765273 48.5667476526 +4 C0 621 0 732 0 +2 3759 621 0 -48.56674765273 48.5667476526 +2 3760 732 0 -48.56674765273 48.5667476526 +2 3761 622 259 -48.56674765273 48.5667476526 +0 + +0101000 ++5808 0 -5747 0 * +Ed + 1.00000007105427e-07 1 1 0 +1 1593 0 0.848062078993592 1.5707963267949 +2 3762 786 0 0.848062078993592 1.5707963267949 +4 C0 621 0 786 0 +2 3763 621 0 0.848062078993592 1.5707963267949 +2 3764 775 259 0.848062078993592 1.5707963267949 +2 3765 622 259 0.848062078993592 1.5707963267949 +0 + +0101000 ++5747 0 -5746 259 * +Ed + 1.00000007105427e-07 1 1 0 +1 1593 0 1.5707963267949 2.2935305745962 +2 3762 786 0 1.5707963267949 2.2935305745962 +4 C0 621 0 786 0 +2 3763 621 0 1.5707963267949 2.2935305745962 +2 3766 774 259 1.5707963267949 2.2935305745962 +2 3767 622 259 1.5707963267949 2.2935305745962 +0 + +0101000 ++5746 259 -5745 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 1594 0 -0.17712434500001 0.177124343999992 +4 C0 621 0 787 0 +2 3768 621 0 -0.17712434500001 0.177124343999992 +2 3769 787 0 -0.17712434500001 0.177124343999992 +2 3770 622 259 -0.17712434500001 0.177124343999992 +0 + +0101000 ++5745 0 -5744 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 1595 0 -0.177124344399999 0.177124344500001 +4 C0 621 0 788 0 +2 3771 621 0 -0.177124344399999 0.177124344500001 +2 3772 788 0 -0.177124344399999 0.177124344500001 +2 3773 622 259 -0.177124344399999 0.177124344500001 +0 + +0101000 ++5743 0 -5744 0 * +Ed + 1e-07 1 1 0 +1 1596 0 2.41885840576974 3.14159265358979 +2 3774 789 0 2.41885840576974 3.14159265358979 +4 C0 621 0 789 0 +2 3775 621 0 2.41885840576974 3.14159265358979 +2 3776 774 259 2.41885840576974 3.14159265358979 +2 3777 622 259 2.41885840576974 3.14159265358979 +0 + +0101000 ++5743 0 -5742 0 * +Ed + 1e-07 1 1 0 +1 1597 0 3.14159265358979 3.86432690140985 +2 3778 790 0 3.14159265358979 3.86432690140985 +4 C0 621 0 790 0 +2 3779 621 0 3.14159265358979 3.86432690140985 +2 3780 774 259 3.14159265358979 3.86432690140985 +2 3781 622 259 3.14159265358979 3.86432690140985 +0 + +0101000 ++5742 0 -5741 0 * +Ed + 1.00000010658141e-07 1 1 0 +1 1598 0 -0.177124344500001 0.177124344399999 +4 C0 621 0 791 0 +2 3782 621 0 -0.177124344500001 0.177124344399999 +2 3783 791 0 -0.177124344500001 0.177124344399999 +2 3784 622 259 -0.177124344500001 0.177124344399999 +0 + +0101000 ++5740 0 -5741 0 * +Ed + 1.00000010658141e-07 1 1 0 +1 1599 0 -0.177124344000006 0.177124344999996 +4 C0 621 0 792 0 +2 3785 621 0 -0.177124344000006 0.177124344999996 +2 3786 792 0 -0.177124344000006 0.177124344999996 +2 3787 622 259 -0.177124344000006 0.177124344999996 +0 + +0101000 ++5761 0 -5740 0 * +Ed + 1e-07 1 1 0 +1 1600 0 -4 4 +2 3788 762 0 -4 4 +4 C0 761 0 762 0 +2 3789 761 0 -4 4 +0 + +0101000 ++5775 0 -5739 0 * +Ed + 1e-07 1 1 0 +1 1601 0 -4 4 +4 C0 761 0 760 0 +2 3790 761 0 -4 4 +2 3791 760 0 -4 4 +0 + +0101000 ++5738 0 -5776 0 * +Ed + 1e-07 1 1 0 +1 1602 0 -0.177124343999992 0.17712434500001 +4 C0 761 0 699 0 +2 3792 761 0 -0.177124343999992 0.17712434500001 +2 3793 699 0 -0.177124343999992 0.17712434500001 +0 + +0101000 ++5739 0 -5738 0 * +Ed + 1e-07 1 1 0 +1 1603 0 -4 4 +2 3794 762 0 -4 4 +4 C0 734 0 762 0 +2 3795 734 0 -4 4 +0 + +0101000 ++5773 0 -5737 0 * +Ed + 1e-07 1 1 0 +1 1604 0 -57.285060961 57.2850609616 +4 C0 734 0 699 0 +2 3796 734 0 -57.285060961 57.2850609616 +2 3797 699 0 -57.285060961 57.2850609616 +0 + +0101000 ++5803 0 -5737 0 * +Ed + 1e-07 1 1 0 +1 1605 0 -4 4 +2 3798 759 0 -4 4 +4 C0 760 0 759 0 +2 3799 760 0 -4 4 +0 + +0101000 ++5736 0 -5777 0 * +Ed + 1e-07 1 1 0 +1 1606 0 -3 -2.6457513111 +4 C0 760 0 699 0 +2 3800 760 0 -3 -2.6457513111 +2 3801 699 0 -3 -2.6457513111 +0 + +0101000 ++5738 0 -5736 0 * +Ed + 1e-07 1 1 0 +1 1607 0 -4 4 +2 3802 758 0 -4 4 +4 C0 757 0 758 0 +2 3803 757 0 -4 4 +0 + +0101000 ++5735 0 -5779 0 * +Ed + 1e-07 1 1 0 +1 1608 0 -4 4 +4 C0 757 0 756 0 +2 3804 757 0 -4 4 +2 3805 756 0 -4 4 +0 + +0101000 ++5734 0 -5780 0 * +Ed + 1e-07 1 1 0 +1 1609 0 2.645751311 3 +4 C0 757 0 699 0 +2 3806 757 0 2.645751311 3 +2 3807 699 0 2.645751311 3 +0 + +0101000 ++5735 0 -5734 0 * +Ed + 1e-07 1 1 0 +1 1610 0 -15.2585409819623 15.2585409810294 +4 C0 733 0 699 0 +2 3808 733 0 -15.2585409819623 15.2585409810294 +2 3809 699 0 -15.2585409819623 15.2585409810294 +0 + +0101000 ++5807 0 -5733 0 * +Ed + 1e-07 1 1 0 +1 1611 0 -4 4 +2 3810 772 0 -4 4 +4 C0 733 0 772 0 +2 3811 733 0 -4 4 +0 + +0101000 ++5762 0 -5733 0 * +Ed + 1e-07 1 1 0 +1 1612 0 -4 4 +4 C0 771 0 770 0 +2 3812 771 0 -4 4 +2 3813 770 0 -4 4 +0 + +0101000 ++5732 0 -5765 0 * +Ed + 1e-07 1 1 0 +1 1613 0 -0.177124344770934 0.177124344770938 +4 C0 771 0 699 0 +2 3814 771 0 -0.177124344770934 0.177124344770938 +2 3815 699 0 -0.177124344770934 0.177124344770938 +0 + +0101000 ++5731 0 -5732 0 * +Ed + 1e-07 1 1 0 +1 1614 0 -4 4 +2 3816 772 0 -4 4 +4 C0 771 0 772 0 +2 3817 771 0 -4 4 +0 + +0101000 ++5764 0 -5731 0 * +Ed + 1e-07 1 1 0 +1 1615 0 -0.177124344416297 0.177124344504941 +4 C0 779 0 719 0 +2 3818 779 0 -0.177124344416297 0.177124344504941 +2 3819 719 0 -0.177124344416297 0.177124344504941 +0 + +0101000 ++5730 0 -5729 0 * +Ed + 1e-07 1 1 0 +1 1616 0 -4 4 +4 C0 779 0 780 0 +2 3820 779 0 -4 4 +2 3821 780 0 -4 4 +0 + +0101000 ++5730 0 -5755 0 * +Ed + 1e-07 1 1 0 +1 1617 0 -4 4 +2 3822 776 0 -4 4 +4 C0 779 0 776 0 +2 3823 779 0 -4 4 +0 + +0101000 ++5756 0 -5729 0 * +Ed + 1e-07 1 1 0 +1 1618 0 -7.43212571822074 7.43212571822074 +4 C0 731 0 719 0 +2 3824 731 0 -7.43212571822074 7.43212571822074 +2 3825 719 0 -7.43212571822074 7.43212571822074 +0 + +0101000 ++5728 0 -5813 0 * +Ed + 1e-07 1 1 0 +1 1619 0 -4 4 +2 3826 776 0 -4 4 +4 C0 731 0 776 0 +2 3827 731 0 -4 4 +0 + +0101000 ++5758 0 -5728 0 * +Ed + 1e-07 1 1 0 +1 1620 0 -48.56674765272 48.5667476526 +4 C0 730 0 719 0 +2 3828 730 0 -48.56674765272 48.5667476526 +2 3829 719 0 -48.56674765272 48.5667476526 +0 + +0101000 ++5815 0 -5727 0 * +Ed + 1e-07 1 1 0 +1 1621 0 -4 4 +2 3830 773 0 -4 4 +4 C0 730 0 773 0 +2 3831 730 0 -4 4 +0 + +0101000 ++5759 0 -5727 0 * +Ed + 1e-07 1 1 0 +1 1622 0 -4 4 +4 C0 792 0 791 0 +2 3832 792 0 -4 4 +2 3833 791 0 -4 4 +0 + +0101000 ++5726 0 -5740 0 * +Ed + 1e-07 1 1 0 +1 1623 0 -0.17712434500001 0.177124343999992 +4 C0 792 0 719 0 +2 3834 792 0 -0.17712434500001 0.177124343999992 +2 3835 719 0 -0.17712434500001 0.177124343999992 +0 + +0101000 ++5725 0 -5726 0 * +Ed + 1e-07 1 1 0 +1 1624 0 -4 4 +2 3836 773 0 -4 4 +4 C0 792 0 773 0 +2 3837 792 0 -4 4 +0 + +0101000 ++5761 0 -5725 0 * +Ed + 1e-07 1 1 0 +1 1625 0 -4 4 +2 3838 790 0 -4 4 +4 C0 791 0 790 0 +2 3839 791 0 -4 4 +0 + +0101000 ++5724 0 -5741 0 * +Ed + 1e-07 1 1 0 +1 1626 0 -3 -2.6457513111 +4 C0 791 0 719 0 +2 3840 791 0 -3 -2.6457513111 +2 3841 719 0 -3 -2.6457513111 +0 + +0101000 ++5726 0 -5724 0 * +Ed + 1e-07 1 1 0 +1 1627 0 -4 4 +2 3842 789 0 -4 4 +4 C0 788 0 789 0 +2 3843 788 0 -4 4 +0 + +0101000 ++5723 0 -5743 0 * +Ed + 1e-07 1 1 0 +1 1628 0 -4 4 +4 C0 788 0 787 0 +2 3844 788 0 -4 4 +2 3845 787 0 -4 4 +0 + +0101000 ++5722 0 -5744 0 * +Ed + 1e-07 1 1 0 +1 1629 0 2.6457513111 3 +4 C0 788 0 719 0 +2 3846 788 0 2.6457513111 3 +2 3847 719 0 2.6457513111 3 +0 + +0101000 ++5723 0 -5722 0 * +Ed + 1e-07 1 1 0 +1 1630 0 -48.56674765253 48.5667476528 +4 C0 732 0 719 0 +2 3848 732 0 -48.56674765253 48.5667476528 +2 3849 719 0 -48.56674765253 48.5667476528 +0 + +0101000 ++5809 0 -5721 0 * +Ed + 1e-07 1 1 0 +1 1631 0 -4 4 +2 3850 786 0 -4 4 +4 C0 732 0 786 0 +2 3851 732 0 -4 4 +0 + +0101000 ++5721 0 -5747 0 * +Ed + 1e-07 1 1 0 +1 1632 0 -0.177124344000006 0.177124344999996 +4 C0 787 0 719 0 +2 3852 787 0 -0.177124344000006 0.177124344999996 +2 3853 719 0 -0.177124344000006 0.177124344999996 +0 + +0101000 ++5720 0 -5722 0 * +Ed + 1e-07 1 1 0 +1 1633 0 -4 4 +2 3854 786 0 -4 4 +4 C0 787 0 786 0 +2 3855 787 0 -4 4 +0 + +0101000 ++5720 0 -5745 0 * +Ed + 1e-07 1 1 0 +1 1634 0 -3.00000000000639 -2.64575131099649 +4 C0 780 0 719 0 +2 3856 780 0 -3.00000000000639 -2.64575131099649 +2 3857 719 0 -3.00000000000639 -2.64575131099649 +0 + +0101000 ++5730 0 -5719 0 * +Ed + 1e-07 1 1 0 +1 1635 0 -4 4 +2 3858 781 0 -4 4 +4 C0 780 0 781 0 +2 3859 780 0 -4 4 +0 + +0101000 ++5719 0 -5754 0 * +Ed + 1e-07 1 1 0 +1 1636 0 2.64575131113139 3.00000000000637 +4 C0 783 0 719 0 +2 3860 783 0 2.64575131113139 3.00000000000637 +2 3861 719 0 2.64575131113139 3.00000000000637 +0 + +0101000 ++5718 0 -5717 0 * +Ed + 1e-07 1 1 0 +1 1637 0 -4 4 +4 C0 783 0 784 0 +2 3862 783 0 -4 4 +2 3863 784 0 -4 4 +0 + +0101000 ++5717 0 -5751 0 * +Ed + 1e-07 1 1 0 +1 1638 0 -4 4 +2 3864 782 0 -4 4 +4 C0 783 0 782 0 +2 3865 783 0 -4 4 +0 + +0101000 ++5718 0 -5752 0 * +Ed + 1e-07 1 1 0 +1 1639 0 -0.177124343298414 0.177124343387083 +4 C0 784 0 719 0 +2 3866 784 0 -0.177124343298414 0.177124343387083 +2 3867 719 0 -0.177124343298414 0.177124343387083 +0 + +0101000 ++5717 0 -5716 0 * +Ed + 1e-07 1 1 0 +1 1640 0 0 11.313708499 +2 3868 785 0 0 11.313708499 +4 C0 784 0 785 0 +2 3869 784 0 0 11.313708499 +0 + +0101000 ++5716 0 -5750 0 * +Ed + 1e-07 1 1 0 +1 1641 0 -7.43212571822074 7.43212571822074 +4 C0 723 0 719 0 +2 3870 723 0 -7.43212571822074 7.43212571822074 +2 3871 719 0 -7.43212571822074 7.43212571822074 +0 + +0101000 ++5715 0 -5827 0 * +Ed + 1e-07 1 1 0 +1 1642 0 -4 4 +2 3872 785 0 -4 4 +4 C0 723 0 785 0 +2 3873 723 0 -4 4 +0 + +0101000 ++5748 0 -5715 0 * +Ed + 1e-07 1 1 0 +1 1643 0 -4 4 +4 C0 767 0 766 0 +2 3874 767 0 -4 4 +2 3875 766 0 -4 4 +0 + +0101000 ++5714 0 -5769 0 * +Ed + 1e-07 1 1 0 +1 1644 0 -2.99999999991388 -2.64575131071898 +4 C0 767 0 699 0 +2 3876 767 0 -2.99999999991388 -2.64575131071898 +2 3877 699 0 -2.99999999991388 -2.64575131071898 +0 + +0101000 ++5714 0 -5713 0 * +Ed + 1e-07 1 1 0 +1 1645 0 -4 4 +2 3878 768 0 -4 4 +4 C0 767 0 768 0 +2 3879 767 0 -4 4 +0 + +0101000 ++5713 0 -5768 0 * +Ed + 1e-07 1 1 0 +1 1646 0 2.64575131127015 3.00000000037638 +4 C0 770 0 699 0 +2 3880 770 0 2.64575131127015 3.00000000037638 +2 3881 699 0 2.64575131127015 3.00000000037638 +0 + +0101000 ++5712 0 -5732 0 * +Ed + 1e-07 1 1 0 +1 1647 0 -4 4 +2 3882 769 0 -4 4 +4 C0 770 0 769 0 +2 3883 770 0 -4 4 +0 + +0101000 ++5712 0 -5766 0 * +Ed + 1e-07 1 1 0 +1 1648 0 -4 4 +2 3884 753 0 -4 4 +4 C0 756 0 753 0 +2 3885 756 0 -4 4 +0 + +0101000 ++5711 0 -5781 0 * +Ed + 1e-07 1 1 0 +1 1649 0 -0.177124343999992 0.17712434500001 +4 C0 756 0 699 0 +2 3886 756 0 -0.177124343999992 0.17712434500001 +2 3887 699 0 -0.177124343999992 0.17712434500001 +0 + +0101000 ++5711 0 -5734 0 * +Ed + 1e-07 1 1 0 +1 1650 0 -4 4 +2 3888 753 0 -4 4 +4 C0 710 0 753 0 +2 3889 710 0 -4 4 +0 + +0101000 ++5710 0 -5783 0 * +Ed + 1e-07 1 1 0 +1 1651 0 -57.285060961 57.2850609616 +4 C0 710 0 699 0 +2 3890 710 0 -57.285060961 57.2850609616 +2 3891 699 0 -57.285060961 57.2850609616 +0 + +0101000 ++5847 0 -5710 0 * +Ed + 1e-07 1 1 0 +1 1652 0 -15.2585409808907 15.2585409800041 +4 C0 698 0 699 0 +2 3892 698 0 -15.2585409808907 15.2585409800041 +2 3893 699 0 -15.2585409808907 15.2585409800041 +0 + +0101000 ++5864 0 -5709 0 * +Ed + 1e-07 1 1 0 +1 1653 0 0 11.313708499 +2 3894 763 0 0 11.313708499 +4 C0 698 0 763 0 +2 3895 698 0 0 11.313708499 +0 + +0101000 ++5709 0 -5772 0 * +Ed + 1e-07 1 1 0 +1 1654 0 -0.177124343884329 0.177124344770934 +4 C0 766 0 699 0 +2 3896 766 0 -0.177124343884329 0.177124344770934 +2 3897 699 0 -0.177124343884329 0.177124344770934 +0 + +0101000 ++5708 0 -5714 0 * +Ed + 1e-07 1 1 0 +1 1655 0 -4 4 +2 3898 763 0 -4 4 +4 C0 766 0 763 0 +2 3899 766 0 -4 4 +0 + +0101000 ++5770 0 -5708 0 * +Ed + 1e-07 1 1 0 +1 1656 0 0.367246131048939 1.81271462668043 +2 3900 776 0 0.367246131048939 1.81271462668043 +4 C0 776 0 719 0 +2 3901 719 0 0.367246131048939 1.81271462668043 +0 + +0101000 ++5728 0 -5729 0 * +Ed + 1e-07 1 1 0 +1 1657 0 0.367246131099204 1.81271462672299 +2 3902 772 0 0.367246131099204 1.81271462672299 +4 C0 772 0 699 0 +2 3903 699 0 0.367246131099204 1.81271462672299 +0 + +0101000 ++5731 0 -5733 0 * +Ed + 1e-07 1 1 0 +1 1658 0 -4 4 +2 3904 789 0 -4 4 +2 3905 790 0 -4 4 +4 CN 789 0 790 0 +0 + +0101000 ++5742 0 -5707 0 * +Ed + 1e-07 1 1 0 +1 1659 0 2.41885840576974 3.14159265358979 +2 3906 789 0 2.41885840576974 3.14159265358979 +4 C0 789 0 719 0 +2 3907 719 0 2.41885840576974 3.14159265358979 +0 + +0101000 ++5723 0 -5707 0 * +Ed + 1e-07 1 1 0 +1 1660 0 3.14159265358979 3.86432690140985 +2 3908 790 0 3.14159265358979 3.86432690140985 +4 C0 790 0 719 0 +2 3909 719 0 3.14159265358979 3.86432690140985 +0 + +0101000 ++5707 0 -5724 0 * +Ed + 1e-07 1 1 0 +1 1661 0 -4 4 +2 3910 768 0 -4 4 +2 3911 769 0 -4 4 +4 CN 768 0 769 0 +0 + +0101000 ++5767 0 -5706 0 * +Ed + 1e-07 1 1 0 +1 1662 0 5.0796351115126 6.28318530717959 +2 3912 768 0 5.0796351115126 6.28318530717959 +4 C0 768 0 699 0 +2 3913 699 0 5.0796351115126 6.28318530717959 +0 + +0101000 ++5713 0 -5706 0 * +Ed + 1e-07 1 1 0 +1 1663 0 0 0.241918299909805 +2 3914 769 0 0 0.241918299909805 +4 C0 769 0 699 0 +2 3915 699 0 0 0.241918299909805 +0 + +0101000 ++5706 0 -5712 0 * +Ed + 1e-07 1 1 0 +1 1664 0 3.50883878432281 4.95430728031876 +2 3916 763 0 3.50883878432281 4.95430728031876 +4 C0 763 0 699 0 +2 3917 699 0 3.50883878432281 4.95430728031876 +0 + +0101000 ++5709 0 -5708 0 * +Ed + 1e-07 1 1 0 +1 1665 0 3.98965473258339 5.43512322818599 +2 3918 773 0 3.98965473258339 5.43512322818599 +4 C0 773 0 719 0 +2 3919 719 0 3.98965473258339 5.43512322818599 +0 + +0101000 ++5725 0 -5727 0 * +Ed + 1e-07 1 1 0 +1 1666 0 3.98965473258339 5.43512322818599 +2 3920 762 0 3.98965473258339 5.43512322818599 +4 C0 762 0 699 0 +2 3921 699 0 3.98965473258339 5.43512322818599 +0 + +0101000 ++5739 0 -5737 0 * +Ed + 1e-07 1 1 0 +1 1667 0 -4 4 +2 3922 781 0 -4 4 +2 3923 782 0 -4 4 +4 CN 781 0 782 0 +0 + +0101000 ++5753 0 -5705 0 * +Ed + 1e-07 1 1 0 +1 1668 0 1.93804245785281 3.14159265358979 +2 3924 781 0 1.93804245785281 3.14159265358979 +4 C0 781 0 719 0 +2 3925 719 0 1.93804245785281 3.14159265358979 +0 + +0101000 ++5719 0 -5705 0 * +Ed + 1e-07 1 1 0 +1 1669 0 3.14159265358979 3.3835109534996 +2 3926 782 0 3.14159265358979 3.3835109534996 +4 C0 782 0 719 0 +2 3927 719 0 3.14159265358979 3.3835109534996 +0 + +0101000 ++5705 0 -5718 0 * +Ed + 1e-07 1 1 0 +1 1670 0 -4 4 +2 3928 758 0 -4 4 +2 3929 759 0 -4 4 +4 CN 758 0 759 0 +0 + +0101000 ++5778 0 -5704 0 * +Ed + 1e-07 1 1 0 +1 1671 0 2.41885840578849 3.14159265358979 +2 3930 758 0 2.41885840578849 3.14159265358979 +4 C0 758 0 699 0 +2 3931 699 0 2.41885840578849 3.14159265358979 +0 + +0101000 ++5735 0 -5704 0 * +Ed + 1e-07 1 1 0 +1 1672 0 3.14159265358979 3.86432690140985 +2 3932 759 0 3.14159265358979 3.86432690140985 +4 C0 759 0 699 0 +2 3933 699 0 3.14159265358979 3.86432690140985 +0 + +0101000 ++5704 0 -5736 0 * +Ed + 1e-07 1 1 0 +1 1673 0 0.848062078993592 2.2935305745962 +2 3934 753 0 0.848062078993592 2.2935305745962 +4 C0 753 0 699 0 +2 3935 699 0 0.848062078993592 2.2935305745962 +0 + +0101000 ++5710 0 -5711 0 * +Ed + 1e-07 1 1 0 +1 1674 0 0.848062078993592 2.2935305745962 +2 3936 786 0 0.848062078993592 2.2935305745962 +4 C0 786 0 719 0 +2 3937 719 0 0.848062078993592 2.2935305745962 +0 + +0101000 ++5721 0 -5720 0 * +Ed + 1e-07 1 1 0 +1 1675 0 3.50883878425819 4.95430728028851 +2 3938 785 0 3.50883878425819 4.95430728028851 +4 C0 785 0 719 0 +2 3939 719 0 3.50883878425819 4.95430728028851 +0 + +0101000 ++5716 0 -5715 0 * +Ed + 1e-07 1 1 0 +1 1676 0 -40.760416521 -32.760416521 +2 3940 774 0 -40.760416521 -32.760416521 +2 3941 775 0 -40.760416521 -32.760416521 +4 CN 774 0 775 0 +0 + +0101000 ++5760 0 -5703 0 * +Ed + 1e-07 1 1 0 +1 1677 0 5.43512322818599 5.56045105935953 +2 3942 774 0 5.43512322818599 5.56045105935953 +4 C0 774 0 622 0 +2 3943 622 0 5.43512322818599 5.56045105935953 +0 + +0101000 ++5761 269 -5741 269 * +Ed + 1e-07 1 1 0 +1 1677 0 7.00591955499964 7.13124738617318 +2 3942 774 0 7.00591955499964 7.13124738617318 +4 C0 774 0 622 0 +2 3943 622 0 7.00591955499964 7.13124738617318 +0 + +0101000 ++5743 269 -5745 269 * +Ed + 1e-07 1 1 0 +1 1678 0 -40.760416521 -32.760416521 +2 3944 774 0 -40.760416521 -32.760416521 +2 3945 775 0 -40.760416521 -32.760416521 +4 CN 774 0 775 0 +0 + +0101000 ++5746 0 -5702 0 * +Ed + 1.04581621673399e-07 1 1 0 +1 1679 0 4.71238898038469 5.21238898053725 +2 3946 774 0 4.71238898038469 5.21238898053725 +4 C0 774 0 793 0 +2 3947 793 0 4.71238898038469 5.21238898053725 +2 3948 794 270 4.71238898038469 5.21238898053725 +0 + +0101000 ++5703 0 -5701 271 * +Ed + 1.04630111791109e-07 1 1 0 +1 1679 0 5.21238898053725 7.85398163397448 +2 3946 774 0 5.21238898053725 7.85398163397448 +4 C0 774 0 793 0 +2 3947 793 0 5.21238898053725 7.85398163397448 +2 3949 795 270 5.21238898053725 7.85398163397448 +0 + +0101000 ++5701 271 -5702 0 * +Ed + 1e-07 1 1 0 +1 1680 0 2.2935305745962 3.98965473258338 +2 3950 775 0 2.2935305745962 3.98965473258338 +4 C0 775 0 622 0 +2 3951 622 0 2.2935305745962 3.98965473258338 +0 + +0101000 ++5747 269 -5759 269 * +Ed + 1.04581576566369e-07 1 1 0 +1 1681 0 1.5707963267949 2.07079632664401 +2 3952 775 0 1.5707963267949 2.07079632664401 +4 C0 775 0 793 0 +2 3953 793 0 1.5707963267949 2.07079632664401 +2 3954 795 270 1.5707963267949 2.07079632664401 +0 + +0101000 ++5702 0 -5700 272 * +Ed + 1.04630038424588e-07 1 1 0 +1 1681 0 2.07079632664401 4.71238898038469 +2 3952 775 0 2.07079632664401 4.71238898038469 +4 C0 775 0 793 0 +2 3953 793 0 2.07079632664401 4.71238898038469 +2 3955 794 270 2.07079632664401 4.71238898038469 +0 + +0101000 ++5700 272 -5703 0 * +Ed + 1e-07 1 1 0 +1 1682 0 -3.50321090982754 3.50321090979282 +4 C0 796 0 797 0 +2 3956 797 0 -3.50321090982754 3.50321090979282 +2 3957 796 0 -3.50321090982754 3.50321090979282 +0 + +0101000 ++5981 272 -5699 0 * +Ed + 1e-07 1 1 0 +1 1683 0 -3.5 3.5 +2 3958 637 0 -3.5 3.5 +4 G1 796 0 637 0 +2 3959 796 0 -3.5 3.5 +0 + +0101000 ++5698 0 -5969 272 * +Ed + 1e-07 1 1 0 +1 1684 0 -40.9641208200137 40.9641208201121 +4 C0 796 0 798 0 +2 3960 796 0 -40.9641208200137 40.9641208201121 +2 3961 798 0 -40.9641208200137 40.9641208201121 +0 + +0101000 ++5698 0 -5699 0 * +Ed + 1e-07 1 1 0 +1 1685 0 -93.0189896694165 93.0189896683988 +4 C0 799 0 800 0 +2 3962 799 0 -93.0189896694165 93.0189896683988 +2 3963 800 0 -93.0189896694165 93.0189896683988 +0 + +0101000 ++5697 0 -5696 0 * +Ed + 1e-07 1 1 0 +1 1686 0 -3.5038280164249 3.50382801652479 +2 3964 751 0 -3.5038280164249 3.50382801652479 +4 G1 799 0 751 0 +2 3965 799 0 -3.5038280164249 3.50382801652479 +0 + +0101000 ++5787 272 -5696 0 * +Ed + 1e-07 1 1 0 +1 1687 0 -3.50382801643411 3.50382801648797 +4 C0 799 0 797 0 +2 3966 799 0 -3.50382801643411 3.50382801648797 +2 3967 797 0 -3.50382801643411 3.50382801648797 +0 + +0101000 ++5983 272 -5697 0 * +Ed + 1e-07 1 1 0 +1 1688 0 38.648551628369 45.6559804240203 +2 3968 751 0 38.648551628369 45.6559804240203 +4 G1 751 0 801 0 +2 3969 801 0 38.648551628369 45.6559804240203 +0 + +0101000 ++5946 272 -5695 0 * +Ed + 0.000750843761988429 1 1 0 +1 1689 0 408.473308997 476.253554091 +2 3970 751 0 408.473308997 476.253554091 +2 3971 802 0 408.473308997 476.253554091 +4 C0 751 0 802 0 +0 + +0101000 ++5695 0 -5696 0 * +Ed + 1e-07 1 1 0 +1 1690 0 -14 -7 +2 3972 750 0 -14 -7 +4 G1 750 0 803 0 +2 3973 803 0 -14 -7 +0 + +0101000 ++5694 0 -5942 272 * +Ed + 1e-07 1 1 0 +1 1691 0 -14 -7 +2 3974 750 0 -14 -7 +4 G1 750 0 801 0 +2 3975 801 0 -14 -7 +0 + +0101000 ++5693 0 -5947 272 * +Ed + 1e-07 1 1 0 +1 1692 0 4.71238898038469 6.28318530717959 +2 3976 750 0 4.71238898038469 6.28318530717959 +2 3977 804 0 4.71238898038469 6.28318530717959 +4 C0 750 0 804 0 +0 + +0101000 ++5693 0 -5694 0 * +Ed + 1e-07 1 1 0 +1 1693 0 -14 -7 +2 3978 749 0 -14 -7 +4 G1 749 0 805 0 +2 3979 805 0 -14 -7 +0 + +0101000 ++5692 0 -5938 272 * +Ed + 1e-07 1 1 0 +1 1694 0 -14 -7 +2 3980 749 0 -14 -7 +4 G1 749 0 803 0 +2 3981 803 0 -14 -7 +0 + +0101000 ++5691 0 -5943 272 * +Ed + 1e-07 1 1 0 +1 1695 0 0 1.5707963267949 +2 3982 749 0 0 1.5707963267949 +2 3983 806 0 0 1.5707963267949 +4 C0 749 0 806 0 +0 + +0101000 ++5691 0 -5692 0 * +Ed + 1e-07 1 1 0 +1 1696 0 666.647644242 674.895992652 +2 3984 748 0 666.647644242 674.895992652 +2 3985 656 0 666.647644242 674.895992652 +4 G1 748 0 656 0 +0 + +0101000 ++5926 272 -5690 0 * +Ed + 1.84833255994665e-05 1 1 0 +1 1697 0 0 1.20412576202 +2 3986 748 0 0 1.20412576202 +4 C0 748 0 807 0 +2 3987 807 0 0 1.20412576202 +0 + +0101000 ++5689 0 -5690 0 * +Ed + 1e-07 1 1 0 +1 1698 0 666.655401741 674.80732584 +2 3988 748 0 666.655401741 674.80732584 +2 3989 747 0 666.655401741 674.80732584 +4 G1 748 0 747 0 +0 + +0101000 ++5789 272 -5689 0 * +Ed + 4.75835293272267e-05 1 1 0 +1 1699 0 0 1.00517081199 +2 3990 747 0 0 1.00517081199 +4 C0 747 0 807 0 +2 3991 807 0 0 1.00517081199 +0 + +0101000 ++5689 0 -5688 0 * +Ed + 1.28876257817471e-05 1 1 0 +1 1700 0 0 7.09856546111 +2 3992 747 0 0 7.09856546111 +2 3993 665 0 0 7.09856546111 +4 C0 747 0 665 0 +0 + +0101000 ++5687 0 -5688 0 * +Ed + 1e-07 1 1 0 +1 1701 0 668.714577422 676.370176074 +2 3994 747 0 668.714577422 676.370176074 +2 3995 746 0 668.714577422 676.370176074 +4 G1 747 0 746 0 +0 + +0101000 ++5791 272 -5687 0 * +Ed + 0.00369457076804729 1 1 0 +1 1702 0 0 2.07052777095 +2 3996 746 0 0 2.07052777095 +2 3997 665 0 0 2.07052777095 +4 C0 746 0 665 0 +0 + +0101000 ++5686 0 -5687 0 * +Ed + 1e-07 1 1 0 +1 1703 0 670.743803994 678.349523181 +2 3998 746 0 670.743803994 678.349523181 +2 3999 744 0 670.743803994 678.349523181 +4 G1 746 0 744 0 +0 + +0101000 ++5793 272 -5686 0 * +Ed + 0.000882097926501699 1 1 0 +1 1704 0 0 15.6478413133 +2 4000 744 0 0 15.6478413133 +2 4001 665 0 0 15.6478413133 +4 C0 744 0 665 0 +0 + +0101000 ++5685 0 -5686 0 * +Ed + 1e-07 1 1 0 +1 1705 0 674.626824724 681.073455292 +2 4002 744 0 674.626824724 681.073455292 +2 4003 742 0 674.626824724 681.073455292 +4 G1 744 0 742 0 +0 + +0101000 ++5795 272 -5685 0 * +Ed + 1.86025271156123e-05 1 1 0 +1 1706 0 0 5.79204992107 +2 4004 742 0 0 5.79204992107 +2 4005 665 0 0 5.79204992107 +4 C0 742 0 665 0 +0 + +0101000 ++5684 0 -5685 0 * +Ed + 1e-07 1 1 0 +1 1707 0 679.863289678 685.507225721 +2 4006 742 0 679.863289678 685.507225721 +2 4007 660 0 679.863289678 685.507225721 +4 G1 742 0 660 0 +0 + +0101000 ++5922 272 -5684 0 * +Ed + 1e-07 1 1 0 +1 1708 0 702.650590641 706.796420659 +2 4008 741 0 702.650590641 706.796420659 +2 4009 660 0 702.650590641 706.796420659 +4 G1 741 0 660 0 +0 + +0101000 ++5924 272 -5683 0 * +Ed + 5.73722675241782e-06 1 1 0 +1 1709 0 0 5.77518821344 +2 4010 741 0 0 5.77518821344 +2 4011 665 0 0 5.77518821344 +4 C0 741 0 665 0 +0 + +0101000 ++5682 0 -5683 0 * +Ed + 1e-07 1 1 0 +1 1710 0 702.718222304 707.307455192 +2 4012 741 0 702.718222304 707.307455192 +2 4013 740 0 702.718222304 707.307455192 +4 G1 741 0 740 0 +0 + +0101000 ++5796 272 -5682 0 * +Ed + 3.91785013798833e-05 1 1 0 +1 1711 0 0 25.8856538217 +2 4014 740 0 0 25.8856538217 +2 4015 665 0 0 25.8856538217 +4 C0 740 0 665 0 +0 + +0101000 ++5681 0 -5682 0 * +Ed + 1e-07 1 1 0 +1 1712 0 711.292693879 715.677360113 +2 4016 740 0 711.292693879 715.677360113 +2 4017 739 0 711.292693879 715.677360113 +4 G1 740 0 739 0 +0 + +0101000 ++5798 272 -5681 0 * +Ed + 3.37489569750757e-05 1 1 0 +1 1713 0 6.15448423206 26.5544970612 +2 4018 739 0 6.15448423206 26.5544970612 +2 4019 665 0 6.15448423206 26.5544970612 +4 C0 739 0 665 0 +0 + +0101000 ++5920 272 -5681 0 * +Ed + 1e-07 1 1 0 +1 1714 0 757.520661394 762.449613659 +2 4020 737 0 757.520661394 762.449613659 +2 4021 667 0 757.520661394 762.449613659 +4 G1 737 0 667 0 +0 + +0101000 ++5915 272 -5680 0 * +Ed + 0.00246023619783453 1 1 0 +1 1715 0 0 0.907119760054 +2 4022 737 0 0 0.907119760054 +4 C0 737 0 808 0 +2 4023 808 0 0 0.907119760054 +0 + +0101000 ++5679 0 -5680 0 * +Ed + 1e-07 1 1 0 +1 1716 0 757.53340309 762.806128991 +2 4024 737 0 757.53340309 762.806128991 +2 4025 736 0 757.53340309 762.806128991 +4 G1 737 0 736 0 +0 + +0101000 ++5800 272 -5679 0 * +Ed + 1.91048730909083e-05 1 1 0 +1 1717 0 0 14.6053927233 +2 4026 736 0 0 14.6053927233 +4 C0 736 0 808 0 +2 4027 808 0 0 14.6053927233 +0 + +0101000 ++5678 0 -5679 0 * +Ed + 1e-07 1 1 0 +1 1718 0 760.039672821 762.72316676 +2 4028 736 0 760.039672821 762.72316676 +2 4029 671 0 760.039672821 762.72316676 +4 G1 736 0 671 0 +0 + +0101000 ++5910 272 -5678 0 * +Ed + 1e-07 1 1 0 +1 1719 0 -14 -7 +2 4030 735 0 -14 -7 +4 G1 735 0 809 0 +2 4031 809 0 -14 -7 +0 + +0101000 ++5677 0 -5904 272 * +Ed + 1e-07 1 1 0 +1 1720 0 -14 -7 +2 4032 735 0 -14 -7 +4 G1 735 0 808 0 +2 4033 808 0 -14 -7 +0 + +0101000 ++5676 0 -5907 272 * +Ed + 1e-07 1 1 0 +1 1721 0 4.71238898038469 6.28318530717959 +2 4034 735 0 4.71238898038469 6.28318530717959 +2 4035 810 0 4.71238898038469 6.28318530717959 +4 C0 735 0 810 0 +0 + +0101000 ++5676 0 -5677 0 * +Ed + 1e-07 1 1 0 +1 1722 0 -14 -7 +2 4036 752 0 -14 -7 +4 G1 752 0 811 0 +2 4037 811 0 -14 -7 +0 + +0101000 ++5675 0 -5953 272 * +Ed + 1e-07 1 1 0 +1 1723 0 -14 -7 +2 4038 752 0 -14 -7 +4 G1 752 0 809 0 +2 4039 809 0 -14 -7 +0 + +0101000 ++5674 0 -5905 272 * +Ed + 1e-07 1 1 0 +1 1724 0 0 1.5707963267949 +2 4040 752 0 0 1.5707963267949 +2 4041 812 0 0 1.5707963267949 +4 C0 752 0 812 0 +0 + +0101000 ++5674 0 -5675 0 * +Ed + 1e-07 1 1 0 +1 1725 0 -40.760416521 -32.760416521 +2 4042 754 0 -40.760416521 -32.760416521 +2 4043 755 0 -40.760416521 -32.760416521 +4 CN 754 0 755 0 +0 + +0101000 ++5782 0 -5673 0 * +Ed + 1e-07 1 1 0 +1 1726 0 2.2935305745962 3.98965473258339 +2 4044 754 0 2.2935305745962 3.98965473258339 +4 C0 754 0 622 0 +2 4045 622 0 2.2935305745962 3.98965473258339 +0 + +0101000 ++5783 269 -5773 269 * +Ed + 1e-07 1 1 0 +1 1727 0 -40.760416521 -32.760416521 +2 4046 754 0 -40.760416521 -32.760416521 +2 4047 755 0 -40.760416521 -32.760416521 +4 CN 754 0 755 0 +0 + +0101000 ++5774 0 -5672 0 * +Ed + 1.04340147512328e-07 1 1 0 +1 1728 0 1.5707963267949 2.07079632822878 +2 4048 754 0 1.5707963267949 2.07079632822878 +4 C0 754 0 793 0 +2 4049 793 0 1.5707963267949 2.07079632822878 +2 4050 813 270 1.5707963267949 2.07079632822878 +0 + +0101000 ++5673 0 -6076 273 * +Ed + 1.0639400762228e-07 1 1 0 +1 1728 0 2.07079632822878 4.71238898038469 +2 4048 754 0 2.07079632822878 4.71238898038469 +4 C0 754 0 793 0 +2 4049 793 0 2.07079632822878 4.71238898038469 +2 4051 814 270 2.07079632822878 4.71238898038469 +0 + +0101000 ++6076 273 -5672 0 * +Ed + 1e-07 1 1 0 +1 1729 0 5.43512322818599 5.56045105935953 +2 4052 755 0 5.43512322818599 5.56045105935953 +4 C0 755 0 622 0 +2 4053 622 0 5.43512322818599 5.56045105935953 +0 + +0101000 ++5775 269 -5777 269 * +Ed + 1e-07 1 1 0 +1 1729 0 7.00591955498089 7.13124738617318 +2 4052 755 0 7.00591955498089 7.13124738617318 +4 C0 755 0 622 0 +2 4053 622 0 7.00591955498089 7.13124738617318 +0 + +0101000 ++5779 269 -5781 269 * +Ed + 1.04340196895635e-07 1 1 0 +1 1730 0 4.71238898038469 5.21238897895284 +2 4054 755 0 4.71238898038469 5.21238897895284 +4 C0 755 0 793 0 +2 4055 793 0 4.71238898038469 5.21238897895284 +2 4056 814 270 4.71238898038469 5.21238897895284 +0 + +0101000 ++5672 0 -5671 272 * +Ed + 1.06393829064643e-07 1 1 0 +1 1730 0 5.21238897895284 7.85398163397448 +2 4054 755 0 5.21238897895284 7.85398163397448 +4 C0 755 0 793 0 +2 4055 793 0 5.21238897895284 7.85398163397448 +2 4057 813 270 5.21238897895284 7.85398163397448 +0 + +0101000 ++5671 272 -5673 0 * +Ed + 1e-07 1 1 0 +1 1731 0 -40.760416521 -32.760416521 +2 4058 765 0 -40.760416521 -32.760416521 +2 4059 764 0 -40.760416521 -32.760416521 +4 CN 765 0 764 0 +0 + +0101000 ++5763 0 -5670 0 * +Ed + 1e-07 1 1 0 +1 1732 0 2.77434652249059 2.89967435367999 +2 4060 765 0 2.77434652249059 2.89967435367999 +4 C0 765 0 622 0 +2 4061 622 0 2.77434652249059 2.89967435367999 +0 + +0101000 ++5764 269 -5766 269 * +Ed + 1e-07 1 1 0 +1 1732 0 4.34514284925678 4.47047068045062 +2 4060 765 0 4.34514284925678 4.47047068045062 +4 C0 765 0 622 0 +2 4061 622 0 4.34514284925678 4.47047068045062 +0 + +0101000 ++5768 269 -5770 269 * +Ed + 1e-07 1 1 0 +1 1733 0 -40.760416521 -32.760416521 +2 4062 765 0 -40.760416521 -32.760416521 +2 4063 764 0 -40.760416521 -32.760416521 +4 CN 765 0 764 0 +0 + +0101000 ++5771 0 -5669 0 * +Ed + 1.0698475862021e-07 1 1 0 +1 1734 0 1.5707963267949 2.07079632773104 +2 4064 765 0 1.5707963267949 2.07079632773104 +4 C0 765 0 793 0 +2 4065 793 0 1.5707963267949 2.07079632773104 +2 4066 815 270 1.5707963267949 2.07079632773104 +0 + +0101000 ++5670 0 -5668 272 * +Ed + 1.0730840516161e-07 1 1 0 +1 1734 0 2.07079632773104 4.71238898038469 +2 4064 765 0 2.07079632773104 4.71238898038469 +4 C0 765 0 793 0 +2 4065 793 0 2.07079632773104 4.71238898038469 +2 4067 816 270 2.07079632773104 4.71238898038469 +0 + +0101000 ++5668 272 -5669 0 * +Ed + 1e-07 1 1 0 +1 1735 0 5.91593917610372 7.61206333404639 +2 4068 764 0 5.91593917610372 7.61206333404639 +4 C0 764 0 622 0 +2 4069 622 0 5.91593917610372 7.61206333404639 +0 + +0101000 ++5772 269 -5762 269 * +Ed + 1.06985507194735e-07 1 1 0 +1 1736 0 4.71238898038469 5.2123889794507 +2 4070 764 0 4.71238898038469 5.2123889794507 +4 C0 764 0 793 0 +2 4071 793 0 4.71238898038469 5.2123889794507 +2 4072 816 270 4.71238898038469 5.2123889794507 +0 + +0101000 ++5669 0 -5701 274 * +Ed + 1.07307639014591e-07 1 1 0 +1 1736 0 5.2123889794507 7.85398163397448 +2 4070 764 0 5.2123889794507 7.85398163397448 +4 C0 764 0 793 0 +2 4071 793 0 5.2123889794507 7.85398163397448 +2 4073 815 270 5.2123889794507 7.85398163397448 +0 + +0101000 ++5701 274 -5670 0 * +Ed + 1e-07 1 1 0 +1 1737 0 -40.760416521 -32.760416521 +2 4074 777 0 -40.760416521 -32.760416521 +2 4075 778 0 -40.760416521 -32.760416521 +4 CN 777 0 778 0 +0 + +0101000 ++5757 0 -5667 0 * +Ed + 1e-07 1 1 0 +1 1738 0 2.77434652245829 4.47047068048087 +2 4076 777 0 2.77434652245829 4.47047068048087 +4 C0 777 0 622 0 +2 4077 622 0 2.77434652245829 4.47047068048087 +0 + +0101000 ++5758 269 -5748 269 * +Ed + 1e-07 1 1 0 +1 1739 0 -40.760416521 -32.760416521 +2 4078 777 0 -40.760416521 -32.760416521 +2 4079 778 0 -40.760416521 -32.760416521 +4 CN 777 0 778 0 +0 + +0101000 ++5749 0 -5666 0 * +Ed + 1.09572032831497e-07 1 1 0 +1 1740 0 1.5707963267949 2.07079632756937 +2 4080 777 0 1.5707963267949 2.07079632756937 +4 C0 777 0 793 0 +2 4081 793 0 1.5707963267949 2.07079632756937 +2 4082 817 270 1.5707963267949 2.07079632756937 +0 + +0101000 ++5667 0 -5665 272 * +Ed + 1.09629501509908e-07 1 1 0 +1 1740 0 2.07079632756937 4.71238898038469 +2 4080 777 0 2.07079632756937 4.71238898038469 +4 C0 777 0 793 0 +2 4081 793 0 2.07079632756937 4.71238898038469 +2 4083 818 270 2.07079632756937 4.71238898038469 +0 + +0101000 ++5665 272 -5666 0 * +Ed + 1e-07 1 1 0 +1 1741 0 5.91593917609833 6.04126700726978 +2 4084 778 0 5.91593917609833 6.04126700726978 +4 C0 778 0 622 0 +2 4085 622 0 5.91593917609833 6.04126700726978 +0 + +0101000 ++5750 269 -5752 269 * +Ed + 1e-07 1 1 0 +1 1741 0 7.48673550291657 7.61206333408895 +2 4084 778 0 7.48673550291657 7.61206333408895 +4 C0 778 0 622 0 +2 4085 622 0 7.48673550291657 7.61206333408895 +0 + +0101000 ++5754 269 -5756 269 * +Ed + 1.09572037411105e-07 1 1 0 +1 1742 0 4.71238898038469 5.21238897961225 +2 4086 778 0 4.71238898038469 5.21238897961225 +4 C0 778 0 793 0 +2 4087 793 0 4.71238898038469 5.21238897961225 +2 4088 818 270 4.71238898038469 5.21238897961225 +0 + +0101000 ++5666 0 -5701 275 * +Ed + 1.09629518554601e-07 1 1 0 +1 1742 0 5.21238897961225 7.85398163397448 +2 4086 778 0 5.21238897961225 7.85398163397448 +4 C0 778 0 793 0 +2 4087 793 0 5.21238897961225 7.85398163397448 +2 4089 817 270 5.21238897961225 7.85398163397448 +0 + +0101000 ++5701 275 -5667 0 * +Ed + 1e-07 1 1 0 +1 1743 0 -0.707106781186548 0.707106781186548 +2 4090 804 0 -0.707106781186548 0.707106781186548 +4 G1 819 0 804 0 +0 + +0101000 ++5693 0 -5664 0 * +Ed + 1e-07 1 1 0 +1 1744 0 -104.707606609 -57.5288728724 +4 C0 819 0 801 0 +2 4091 801 0 -104.707606609 -57.5288728724 +0 + +0101000 ++5693 0 -5695 0 * +Ed + 8.946973005349e-06 1 1 0 +1 1745 0 -0.707106740810751 0.707115634163447 +2 4092 802 0 -0.707106740810751 0.707115634163447 +4 G1 819 0 802 0 +0 + +0101000 ++5695 0 -5663 0 * +Ed + 1e-07 1 1 0 +1 1746 0 -104.707606609 -57.5288741561 +4 C0 819 0 793 0 +2 4093 793 0 -104.707606609 -57.5288741561 +0 + +0101000 ++5664 0 -5663 0 * +Ed + 1e-07 1 1 0 +1 1747 0 -0.707106781186548 0.707106781186548 +2 4094 806 0 -0.707106781186548 0.707106781186548 +4 G1 820 0 806 0 +0 + +0101000 ++5691 0 -5662 0 * +Ed + 1e-07 1 1 0 +1 1748 0 87.2395068874 93.2395068874 +4 C0 820 0 803 0 +2 4095 803 0 87.2395068874 93.2395068874 +0 + +0101000 ++5691 0 -5694 0 * +Ed + 1e-07 1 1 0 +1 1749 0 -0.707106781186548 0.707106781186548 +2 4096 804 0 -0.707106781186548 0.707106781186548 +4 G1 820 0 804 0 +0 + +0101000 ++5694 0 -5661 0 * +Ed + 1e-07 1 1 0 +1 1750 0 87.2395068874 93.2395068874 +4 C0 820 0 793 0 +2 4097 793 0 87.2395068874 93.2395068874 +0 + +0101000 ++5662 0 -5661 0 * +Ed + 1e-07 1 1 0 +1 1751 0 -0.707106781186548 0.707106781186548 +2 4098 821 0 -0.707106781186548 0.707106781186548 +4 G1 822 0 821 0 +2 4099 822 0 -0.707106781186548 0.707106781186548 +0 + +0101000 ++5660 0 -5659 0 * +Ed + 1e-07 1 1 0 +1 1752 0 40.707606609 104.707606609 +4 C0 822 0 805 0 +2 4100 805 0 40.707606609 104.707606609 +2 4101 822 0 40.707606609 104.707606609 +0 + +0101000 ++5660 0 -5692 0 * +Ed + 1e-07 1 1 0 +1 1753 0 -0.707106781186548 0.707106781186548 +2 4102 806 0 -0.707106781186548 0.707106781186548 +4 G1 822 0 806 0 +2 4103 822 0 -0.707106781186548 0.707106781186548 +0 + +0101000 ++5692 0 -5658 0 * +Ed + 1e-07 1 1 0 +1 1754 0 40.707606609 104.707606609 +4 C0 822 0 793 0 +2 4104 793 0 40.707606609 104.707606609 +2 4105 822 0 40.707606609 104.707606609 +0 + +0101000 ++5659 0 -5658 0 * +Ed + 1e-07 1 1 0 +1 1755 0 1.5707963267949 3.14159265358979 +2 4106 821 0 1.5707963267949 3.14159265358979 +4 C0 821 0 793 0 +2 4107 793 0 1.5707963267949 3.14159265358979 +0 + +0101000 ++5657 0 -5659 0 * +Ed + 1e-07 1 1 0 +1 1756 0 1.5707963267949 3.14159265358979 +2 4108 821 0 1.5707963267949 3.14159265358979 +2 4109 650 0 1.5707963267949 3.14159265358979 +4 C0 821 0 650 0 +0 + +0101000 ++5656 0 -5660 0 * +Ed + 1e-07 1 1 0 +1 1757 0 -0.707106781186548 0.707106781186548 +2 4110 821 0 -0.707106781186548 0.707106781186548 +4 G1 821 0 823 0 +2 4111 823 0 -0.707106781186548 0.707106781186548 +0 + +0101000 ++5656 0 -5657 0 * +Ed + 1e-07 1 1 0 +1 1758 0 -0.707106781186548 0.707106781186548 +2 4112 824 0 -0.707106781186548 0.707106781186548 +4 G1 823 0 824 0 +2 4113 823 0 -0.707106781186548 0.707106781186548 +0 + +0101000 ++5655 0 -5654 0 * +Ed + 1e-07 1 1 0 +1 1759 0 15.2395068874 17.2395068874 +4 C0 823 0 807 0 +2 4114 823 0 15.2395068874 17.2395068874 +2 4115 807 0 15.2395068874 17.2395068874 +0 + +0101000 ++5655 0 -5656 0 * +Ed + 1e-07 1 1 0 +1 1760 0 15.2395068874 17.2395068874 +4 C0 823 0 793 0 +2 4116 793 0 15.2395068874 17.2395068874 +2 4117 823 0 15.2395068874 17.2395068874 +0 + +0101000 ++5654 0 -5657 0 * +Ed + 1e-07 1 1 0 +1 1761 0 1.5707963267949 3.14159265358979 +2 4118 824 0 1.5707963267949 3.14159265358979 +4 C0 824 0 793 0 +2 4119 793 0 1.5707963267949 3.14159265358979 +0 + +0101000 ++5653 0 -5654 0 * +Ed + 1e-07 1 1 0 +1 1762 0 1.5707963267949 3.14159265358979 +2 4120 824 0 1.5707963267949 3.14159265358979 +2 4121 665 0 1.5707963267949 3.14159265358979 +4 C0 824 0 665 0 +0 + +0101000 ++5652 0 -5655 0 * +Ed + 1e-07 1 1 0 +1 1763 0 -0.707106781186548 0.707106781186548 +2 4122 824 0 -0.707106781186548 0.707106781186548 +4 G1 824 0 825 0 +2 4123 825 0 -0.707106781186548 0.707106781186548 +0 + +0101000 ++5652 0 -5653 0 * +Ed + 1e-07 1 1 0 +1 1764 0 -0.707106781186548 0.707106781186548 +2 4124 810 0 -0.707106781186548 0.707106781186548 +4 G1 825 0 810 0 +2 4125 825 0 -0.707106781186548 0.707106781186548 +0 + +0101000 ++5676 0 -5651 0 * +Ed + 1e-07 1 1 0 +1 1765 0 -121.707606609 -57.707606609 +4 C0 825 0 808 0 +2 4126 808 0 -121.707606609 -57.707606609 +2 4127 825 0 -121.707606609 -57.707606609 +0 + +0101000 ++5676 0 -5652 0 * +Ed + 1e-07 1 1 0 +1 1766 0 -121.707606609 -57.707606609 +4 C0 825 0 793 0 +2 4128 793 0 -121.707606609 -57.707606609 +2 4129 825 0 -121.707606609 -57.707606609 +0 + +0101000 ++5651 0 -5653 0 * +Ed + 1e-07 1 1 0 +1 1767 0 -0.707106781186548 0.707106781186548 +2 4130 812 0 -0.707106781186548 0.707106781186548 +4 G1 826 0 812 0 +0 + +0101000 ++5674 0 -5650 0 * +Ed + 1e-07 1 1 0 +1 1768 0 -77.7604931126 -71.7604931126 +4 C0 826 0 809 0 +2 4131 809 0 -77.7604931126 -71.7604931126 +0 + +0101000 ++5674 0 -5677 0 * +Ed + 1e-07 1 1 0 +1 1769 0 -0.707106781186548 0.707106781186548 +2 4132 810 0 -0.707106781186548 0.707106781186548 +4 G1 826 0 810 0 +0 + +0101000 ++5677 0 -5649 0 * +Ed + 1e-07 1 1 0 +1 1770 0 -77.7604931126 -71.7604931126 +4 C0 826 0 793 0 +2 4133 793 0 -77.7604931126 -71.7604931126 +0 + +0101000 ++5650 0 -5649 0 * +Ed + 1e-07 1 1 0 +1 1771 0 -0.707106781186548 0.707106781186548 +2 4134 827 0 -0.707106781186548 0.707106781186548 +4 G1 828 0 827 0 +2 4135 828 0 -0.707106781186548 0.707106781186548 +0 + +0101000 ++5648 0 -5647 0 * +Ed + 1e-07 1 1 0 +1 1772 0 24.4564729616 121.707606609 +4 C0 828 0 811 0 +2 4136 811 0 24.4564729616 121.707606609 +2 4137 828 0 24.4564729616 121.707606609 +0 + +0101000 ++5648 0 -5675 0 * +Ed + 1e-07 1 1 0 +1 1773 0 -0.707106781186548 0.707106781186548 +2 4138 812 0 -0.707106781186548 0.707106781186548 +4 G1 828 0 812 0 +2 4139 828 0 -0.707106781186548 0.707106781186548 +0 + +0101000 ++5675 0 -5646 0 * +Ed + 1e-07 1 1 0 +1 1774 0 24.4564729616 121.707606609 +4 C0 828 0 793 0 +2 4140 793 0 24.4564729616 121.707606609 +2 4141 828 0 24.4564729616 121.707606609 +0 + +0101000 ++5647 0 -5646 0 * +Ed + 1e-07 1 1 0 +1 1775 0 2.96705972838957 3.14159265358979 +2 4142 827 0 2.96705972838957 3.14159265358979 +4 C0 827 0 793 0 +2 4143 793 0 2.96705972838957 3.14159265358979 +0 + +0101000 ++5645 0 -5647 0 * +Ed + 1e-07 1 1 0 +1 1776 0 2.96705972838991 3.14159265358979 +2 4144 827 0 2.96705972838991 3.14159265358979 +2 4145 637 0 2.96705972838991 3.14159265358979 +4 C0 827 0 637 0 +0 + +0101000 ++5698 0 -5648 0 * +Ed + 1e-07 1 1 0 +1 1777 0 -0.707106781526371 0.707106780842293 +2 4146 827 0 -0.707106781526371 0.707106780842293 +4 G1 827 0 798 0 +2 4147 798 0 -0.707106781526371 0.707106780842293 +0 + +0101000 ++5698 0 -5645 0 * +Ed + 0.000588941693030239 1 1 0 +1 1778 0 -0.805996475882 0.805996475882 +4 C0 829 0 798 0 +2 4148 829 0 -0.805996475882 0.805996475882 +2 4149 798 0 -0.805996475882 0.805996475882 +0 + +0101000 ++5699 0 -5644 0 * +Ed + 1e-07 1 1 0 +1 1779 0 -46.7817835540671 124.510110037083 +4 C0 829 0 793 0 +2 4150 793 0 -46.7817835540671 124.510110037083 +2 4151 829 0 -46.7817835540671 124.510110037083 +0 + +0101000 ++5643 0 -5644 0 * +Ed + 0.000423896081328326 1 1 0 +1 1780 0 -0.884096627446 0.884096627446 +4 C0 829 0 800 0 +2 4152 800 0 -0.884096627446 0.884096627446 +2 4153 829 0 -0.884096627446 0.884096627446 +0 + +0101000 ++5643 0 -5697 0 * +Ed + 1e-07 1 1 0 +1 1781 0 -47.8039984803628 125.229064339569 +4 C0 829 0 797 0 +2 4154 797 0 -47.8039984803628 125.229064339569 +2 4155 829 0 -47.8039984803628 125.229064339569 +0 + +0101000 ++5697 0 -5699 0 * +Ed + 1e-07 1 1 0 +1 1782 0 4.71238898038469 6.28318530717959 +2 4156 812 0 4.71238898038469 6.28318530717959 +4 C0 812 0 793 0 +2 4157 793 0 4.71238898038469 6.28318530717959 +0 + +0101000 ++5650 0 -5646 0 * +Ed + 1e-07 1 1 0 +1 1783 0 4.71238898038469 6.28318530717959 +2 4158 810 0 4.71238898038469 6.28318530717959 +4 C0 810 0 793 0 +2 4159 793 0 4.71238898038469 6.28318530717959 +0 + +0101000 ++5651 0 -5649 0 * +Ed + 1e-07 1 1 0 +1 1784 0 -1.1141216854 1.1141216855 +2 4160 665 0 -1.1141216854 1.1141216855 +4 G1 807 0 665 0 +2 4161 807 0 -1.1141216854 1.1141216855 +0 + +0101000 ++5655 0 -5688 0 * +Ed + 0.00305706856132506 1 1 0 +1 1785 0 0 1.43540190369 +2 4162 656 0 0 1.43540190369 +4 C0 807 0 656 0 +2 4163 807 0 0 1.43540190369 +0 + +0101000 ++5642 0 -5690 0 * +Ed + 1e-07 1 1 0 +1 1786 0 -1.0381412025 1.0381412025 +2 4164 650 0 -1.0381412025 1.0381412025 +4 G1 807 0 650 0 +2 4165 807 0 -1.0381412025 1.0381412025 +0 + +0101000 ++5656 0 -5642 0 * +Ed + 1e-07 1 1 0 +1 1787 0 4.71238898038469 6.28318530717959 +2 4166 806 0 4.71238898038469 6.28318530717959 +4 C0 806 0 793 0 +2 4167 793 0 4.71238898038469 6.28318530717959 +0 + +0101000 ++5662 0 -5658 0 * +Ed + 1e-07 1 1 0 +1 1788 0 4.71238898038469 6.28318530717959 +2 4168 804 0 4.71238898038469 6.28318530717959 +4 C0 804 0 793 0 +2 4169 793 0 4.71238898038469 6.28318530717959 +0 + +0101000 ++5664 0 -5661 0 * +Ed + 1e-07 1 1 0 +1 1789 0 0 1.42679989555 +2 4170 802 0 0 1.42679989555 +4 G1 802 0 800 0 +2 4171 800 0 0 1.42679989555 +0 + +0101000 ++5696 0 -5641 0 * +Ed + 1e-07 1 1 0 +1 1790 0 408.473308997 476.253554091 +2 4172 802 0 408.473308997 476.253554091 +4 C0 802 0 793 0 +2 4173 793 0 408.473308997 476.253554091 +0 + +0101000 ++5663 0 -5641 0 * +Ed + 1e-07 1 1 0 +1 1791 0 -124.872213605005 60.1240463877833 +4 C0 800 0 793 0 +2 4174 800 0 -124.872213605005 60.1240463877833 +2 4175 793 0 -124.872213605005 60.1240463877833 +0 + +0101000 ++5643 0 -5641 0 * +Ed + 1e-07 1 1 0 +1 1792 0 -7.02472842650102 74.1287605846597 +4 C0 798 0 793 0 +2 4176 793 0 -7.02472842650102 74.1287605846597 +2 4177 798 0 -7.02472842650102 74.1287605846597 +0 + +0101000 ++5645 0 -5644 0 * +Ed + 1.00377269773041e-07 1 1 0 +1 1793 0 -81.658673021 -73.658673021 +2 4178 695 0 -81.658673021 -73.658673021 +2 4179 694 0 -81.658673021 -73.658673021 +4 CN 695 0 694 0 +2 4180 686 276 -81.658673021 -73.658673021 +0 + +0101000 ++5640 0 -5876 272 * +Ed + 1.01742416886198e-07 1 1 0 +1 1411 0 1.99999999655767 9.99999999719591 +2 3296 691 0 1.99999999655767 9.99999999719591 +2 3297 686 0 1.99999999655767 9.99999999719591 +4 G2 691 0 686 0 +2 4181 695 277 1.99999999655767 9.99999999719591 +0 + +0101000 ++5866 268 -5639 268 * +Ed + 1.022780226019e-07 1 1 0 +1 1794 0 3.14159265358979 4.60977584449259 +2 4182 695 0 3.14159265358979 4.60977584449259 +4 C0 695 0 793 0 +2 4183 793 0 3.14159265358979 4.60977584449259 +2 4184 686 276 3.14159265358979 4.60977584449259 +0 + +0101000 ++5640 0 -5639 272 * +Ed + 1.0329164246205e-07 1 1 0 +1 1408 0 1.99999999492305 9.99999999492305 +2 3283 691 0 1.99999999492305 9.99999999492305 +2 3284 687 0 1.99999999492305 9.99999999492305 +4 CN 691 0 687 0 +2 4185 695 277 1.99999999492305 9.99999999492305 +0 + +0101000 ++5870 268 -5638 268 * +Ed + 1.02452401449442e-07 1 1 0 +1 1794 0 4.60977584449259 6.18057254539575 +2 4182 695 0 4.60977584449259 6.18057254539575 +4 C0 695 0 793 0 +2 4183 793 0 4.60977584449259 6.18057254539575 +2 4186 691 276 4.60977584449259 6.18057254539575 +0 + +0101000 ++5639 272 -5638 272 * +Ed + 1.00377283984665e-07 1 1 0 +1 1795 0 -81.658673021 -73.658673021 +2 4187 695 0 -81.658673021 -73.658673021 +2 4188 694 0 -81.658673021 -73.658673021 +4 CN 695 0 694 0 +2 4189 687 276 -81.658673021 -73.658673021 +0 + +0101000 ++5637 0 -5871 272 * +Ed + 1.00603210514435e-07 1 1 0 +1 1794 0 6.18057254539575 6.28318530717959 +2 4182 695 0 6.18057254539575 6.28318530717959 +4 C0 695 0 793 0 +2 4183 793 0 6.18057254539575 6.28318530717959 +2 4190 687 276 6.18057254539575 6.28318530717959 +0 + +0101000 ++5638 272 -5637 0 * +Ed + 1.01435855808258e-07 1 1 0 +1 1401 0 1.99999999536847 9.99999999294922 +2 3259 687 0 1.99999999536847 9.99999999294922 +2 3260 686 0 1.99999999536847 9.99999999294922 +4 G2 687 0 686 0 +2 4191 694 277 1.99999999536847 9.99999999294922 +0 + +0101000 ++5877 268 -5636 268 * +Ed + 1.02278027501771e-07 1 1 0 +1 1796 0 0 1.46818370106435 +2 4192 694 0 0 1.46818370106435 +4 C0 694 0 793 0 +2 4193 793 0 0 1.46818370106435 +2 4194 687 276 0 1.46818370106435 +0 + +0101000 ++5637 0 -5636 272 * +Ed + 1.02451853420113e-07 1 1 0 +1 1796 0 1.46818370106435 3.14159265358979 +2 4192 694 0 1.46818370106435 3.14159265358979 +4 C0 694 0 793 0 +2 4193 793 0 1.46818370106435 3.14159265358979 +2 4195 686 276 1.46818370106435 3.14159265358979 +0 + +0101000 ++5636 272 -5640 0 * +Ed + 1.0040578385322e-07 1 1 0 +1 1797 0 -81.658673021 -73.658673021 +2 4196 690 0 -81.658673021 -73.658673021 +2 4197 685 0 -81.658673021 -73.658673021 +4 CN 690 0 685 0 +2 4198 686 278 -81.658673021 -73.658673021 +0 + +0101000 ++5635 0 -5888 272 * +Ed + 1.01718271816663e-07 1 1 0 +1 1411 0 2.00000000761234 10.0000000082495 +2 3296 691 0 2.00000000761234 10.0000000082495 +2 3297 686 0 2.00000000761234 10.0000000082495 +4 G2 691 0 686 0 +2 4199 690 279 2.00000000761234 10.0000000082495 +0 + +0101000 ++5878 265 -5634 265 * +Ed + 1.02250742097074e-07 1 1 0 +1 1798 0 3.14159265358979 4.60977584449275 +2 4200 690 0 3.14159265358979 4.60977584449275 +4 C0 690 0 793 0 +2 4201 793 0 3.14159265358979 4.60977584449275 +2 4202 686 278 3.14159265358979 4.60977584449275 +0 + +0101000 ++5635 0 -5634 272 * +Ed + 1.03265798405772e-07 1 1 0 +1 1408 0 2.00000000597631 10.0000000059763 +2 3283 691 0 2.00000000597631 10.0000000059763 +2 3284 687 0 2.00000000597631 10.0000000059763 +4 CN 691 0 687 0 +2 4203 690 279 2.00000000597631 10.0000000059763 +0 + +0101000 ++5881 265 -5633 265 * +Ed + 1.02435727336974e-07 1 1 0 +1 1798 0 4.60977584449275 6.18057254539586 +2 4200 690 0 4.60977584449275 6.18057254539586 +4 C0 690 0 793 0 +2 4201 793 0 4.60977584449275 6.18057254539586 +2 4204 691 278 4.60977584449275 6.18057254539586 +0 + +0101000 ++5634 272 -5633 272 * +Ed + 1.00405776749519e-07 1 1 0 +1 1799 0 -81.658673021 -73.658673021 +2 4205 690 0 -81.658673021 -73.658673021 +2 4206 685 0 -81.658673021 -73.658673021 +4 CN 690 0 685 0 +2 4207 687 278 -81.658673021 -73.658673021 +0 + +0101000 ++5632 0 -5882 272 * +Ed + 1.00629574511175e-07 1 1 0 +1 1798 0 6.18057254539586 6.28318530717959 +2 4200 690 0 6.18057254539586 6.28318530717959 +4 C0 690 0 793 0 +2 4201 793 0 6.18057254539586 6.28318530717959 +2 4208 687 278 6.18057254539586 6.28318530717959 +0 + +0101000 ++5633 272 -5632 0 * +Ed + 1.01412140953694e-07 1 1 0 +1 1401 0 2.00000000642119 10.0000000040038 +2 3259 687 0 2.00000000642119 10.0000000040038 +2 3260 686 0 2.00000000642119 10.0000000040038 +4 G2 687 0 686 0 +2 4209 685 279 2.00000000642119 10.0000000040038 +0 + +0101000 ++5889 265 -5631 265 * +Ed + 1.02250742096796e-07 1 1 0 +1 1800 0 0 1.46818370106108 +2 4210 685 0 0 1.46818370106108 +4 C0 685 0 793 0 +2 4211 793 0 0 1.46818370106108 +2 4212 687 278 0 1.46818370106108 +0 + +0101000 ++5632 0 -5631 272 * +Ed + 1.02435722959822e-07 1 1 0 +1 1800 0 1.46818370106108 3.14159265358979 +2 4210 685 0 1.46818370106108 3.14159265358979 +4 C0 685 0 793 0 +2 4211 793 0 1.46818370106108 3.14159265358979 +2 4213 686 278 1.46818370106108 3.14159265358979 +0 + +0101000 ++5631 272 -5635 0 * +Ed + 1.00189899652789e-07 1 1 0 +1 1801 0 -81.658673021 -73.658673021 +2 4214 682 0 -81.658673021 -73.658673021 +2 4215 677 0 -81.658673021 -73.658673021 +4 CN 682 0 677 0 +2 4216 678 280 -81.658673021 -73.658673021 +0 + +0101000 ++5630 0 -5900 272 * +Ed + 1.03019383167876e-07 1 1 0 +1 1399 0 1.99999999620576 9.99999999395692 +2 3248 683 0 1.99999999620576 9.99999999395692 +2 3249 678 0 1.99999999620576 9.99999999395692 +4 G2 683 0 678 0 +2 4217 682 281 1.99999999620576 9.99999999395692 +0 + +0101000 ++5890 262 -5629 262 * +Ed + 1.04017135180982e-07 1 1 0 +1 1802 0 3.14159265358979 4.60977627677926 +2 4218 682 0 3.14159265358979 4.60977627677926 +4 C0 682 0 793 0 +2 4219 793 0 3.14159265358979 4.60977627677926 +2 4220 678 280 3.14159265358979 4.60977627677926 +0 + +0101000 ++5630 0 -5629 272 * +Ed + 1.03686460057447e-07 1 1 0 +1 1396 0 -9.9999999961142 -1.9999999961142 +2 3236 679 0 -9.9999999961142 -1.9999999961142 +2 3237 683 0 -9.9999999961142 -1.9999999961142 +4 CN 679 0 683 0 +2 4221 682 281 -9.9999999961142 -1.9999999961142 +0 + +0101000 ++5628 262 -5893 262 * +Ed + 1.04070521752171e-07 1 1 0 +1 1802 0 4.60977627677926 6.18057254528822 +2 4218 682 0 4.60977627677926 6.18057254528822 +4 C0 682 0 793 0 +2 4219 793 0 4.60977627677926 6.18057254528822 +2 4222 683 280 4.60977627677926 6.18057254528822 +0 + +0101000 ++5629 272 -5628 272 * +Ed + 1.00189913863643e-07 1 1 0 +1 1803 0 -81.658673021 -73.658673021 +2 4223 682 0 -81.658673021 -73.658673021 +2 4224 677 0 -81.658673021 -73.658673021 +4 CN 682 0 677 0 +2 4225 679 280 -81.658673021 -73.658673021 +0 + +0101000 ++5627 0 -5894 272 * +Ed + 1.00193923656159e-07 1 1 0 +1 1802 0 6.18057254528822 6.28318530717959 +2 4218 682 0 6.18057254528822 6.28318530717959 +4 C0 682 0 793 0 +2 4219 793 0 6.18057254528822 6.28318530717959 +2 4226 679 280 6.18057254528822 6.28318530717959 +0 + +0101000 ++5628 272 -5627 0 * +Ed + 1.04930241357924e-07 1 1 0 +1 1389 0 -9.99999999375178 -1.99999999375177 +2 3212 679 0 -9.99999999375178 -1.99999999375177 +2 3213 678 0 -9.99999999375178 -1.99999999375177 +4 G2 679 0 678 0 +2 4227 677 281 -9.99999999375178 -1.99999999375177 +0 + +0101000 ++5626 262 -5901 262 * +Ed + 1.04017133596762e-07 1 1 0 +1 1804 0 0 1.46818401256965 +2 4228 677 0 0 1.46818401256965 +4 C0 677 0 793 0 +2 4229 793 0 0 1.46818401256965 +2 4230 679 280 0 1.46818401256965 +0 + +0101000 ++5627 0 -5626 272 * +Ed + 1.04067756443236e-07 1 1 0 +1 1804 0 1.46818401256965 3.14159265358979 +2 4228 677 0 1.46818401256965 3.14159265358979 +4 C0 677 0 793 0 +2 4229 793 0 1.46818401256965 3.14159265358979 +2 4231 678 280 1.46818401256965 3.14159265358979 +0 + +0101000 ++5626 272 -5630 0 * +Ed + 1e-07 1 1 0 +1 1805 0 -3.5 3.5 +2 4232 637 0 -3.5 3.5 +4 G1 811 0 637 0 +2 4233 811 0 -3.5 3.5 +0 + +0101000 ++5648 0 -5961 272 * +Ed + 1e-07 1 1 0 +1 1806 0 764.763368478 766.570367497 +2 4234 673 0 764.763368478 766.570367497 +2 4235 671 0 764.763368478 766.570367497 +4 G1 673 0 671 0 +0 + +0101000 ++5912 272 -5625 0 * +Ed + 0.000563560659444542 1 1 0 +1 1807 0 0 2.74190152866 +2 4236 673 0 0 2.74190152866 +4 C0 673 0 808 0 +2 4237 808 0 0 2.74190152866 +0 + +0101000 ++5625 0 -5909 272 * +Ed + 0.00264734805142356 1 1 0 +1 1808 0 0 1.33091257995 +2 4238 671 0 0 1.33091257995 +4 C0 671 0 808 0 +2 4239 808 0 0 1.33091257995 +0 + +0101000 ++5678 0 -5625 0 * +Ed + 1.09101027195707e-07 1 1 0 +1 1809 0 0 12.1243573335893 +2 4240 667 0 0 12.1243573335893 +4 C0 667 0 808 0 +2 4241 808 0 0 12.1243573335893 +0 + +0101000 ++5680 0 -5917 272 * +Ed + 1e-07 1 1 0 +1 1810 0 -3.5 3.5 +2 4242 665 0 -3.5 3.5 +4 G1 808 0 665 0 +2 4243 808 0 -3.5 3.5 +0 + +0101000 ++5652 0 -5918 272 * +Ed + 0.000181585757868666 1 1 0 +1 1811 0 0 34.1466961685 +2 4244 665 0 0 34.1466961685 +2 4245 660 0 0 34.1466961685 +4 C0 665 0 660 0 +0 + +0101000 ++5683 0 -5684 0 * +Ed + 1e-07 1 1 0 +1 1812 0 659.913677557 669.157194336 +2 4246 656 0 659.913677557 669.157194336 +2 4247 654 0 659.913677557 669.157194336 +4 G1 656 0 654 0 +0 + +0101000 ++5928 272 -5624 0 * +Ed + 0.000131962247717784 1 1 0 +1 1813 0 0 34.3470334878 +2 4248 656 0 0 34.3470334878 +2 4249 650 0 0 34.3470334878 +4 C0 656 0 650 0 +0 + +0101000 ++5624 0 -5642 0 * +Ed + 1e-07 1 1 0 +1 1814 0 652.927845929 653.995093712 +2 4250 654 0 652.927845929 653.995093712 +2 4251 652 0 652.927845929 653.995093712 +4 G1 654 0 652 0 +0 + +0101000 ++5931 272 -5623 0 * +Ed + 8.72489124820711e-05 1 1 0 +1 1815 0 0 47.552579137 +2 4252 654 0 0 47.552579137 +2 4253 650 0 0 47.552579137 +4 C0 654 0 650 0 +0 + +0101000 ++5623 0 -5624 0 * +Ed + 2.43374042060799e-06 1 1 0 +1 1816 0 0 2.26784578846439 +2 4254 652 0 0 2.26784578846439 +2 4255 650 0 0 2.26784578846439 +4 C0 652 0 650 0 +0 + +0101000 ++5623 0 -5933 272 * +Ed + 1e-07 1 1 0 +1 1817 0 -14.6100000002 -7.6100000002 +2 4256 650 0 -14.6100000002 -7.6100000002 +4 G1 650 0 805 0 +2 4257 805 0 -14.6100000002 -7.6100000002 +0 + +0101000 ++5660 0 -5939 272 * +Ed + 1.02651331632989e-07 1 1 0 +1 1818 0 0 3.14159265358979 +2 4258 830 0 0 3.14159265358979 +2 4259 831 0 0 3.14159265358979 +2 4260 793 282 0 3.14159265358979 +0 + +0101000 ++6029 283 -5622 239 * +Ed + 1.02651122022885e-07 1 1 0 +1 1819 0 0 3.14159265358979 +2 4261 832 0 0 3.14159265358979 +2 4262 833 0 0 3.14159265358979 +2 4263 793 282 0 3.14159265358979 +0 + +0101000 ++6029 283 -5622 239 * +Ed + 1.08270481296694e-07 1 1 0 +1 1820 0 0 3.14159265358979 +2 4264 834 0 0 3.14159265358979 +2 4265 835 0 0 3.14159265358979 +2 4266 793 282 0 3.14159265358979 +0 + +0101000 ++5621 284 -5620 239 * +Ed + 1.08270577219962e-07 1 1 0 +1 1821 0 0 3.14159265358979 +2 4267 836 0 0 3.14159265358979 +2 4268 837 0 0 3.14159265358979 +2 4269 793 282 0 3.14159265358979 +0 + +0101000 ++5621 284 -5620 239 * +Ed + 1.04152594766275e-07 1 1 0 +1 1822 0 0 3.14159265358979 +2 4270 838 0 0 3.14159265358979 +2 4271 839 0 0 3.14159265358979 +2 4272 793 282 0 3.14159265358979 +0 + +0101000 ++5621 285 -5619 239 * +Ed + 1.04152690689543e-07 1 1 0 +1 1823 0 0 3.14159265358979 +2 4273 840 0 0 3.14159265358979 +2 4274 841 0 0 3.14159265358979 +2 4275 793 282 0 3.14159265358979 +0 + +0101000 ++5621 285 -5619 239 * +Ed + 1.05657135277856e-07 1 1 0 +1 1824 0 0 3.14159265358979 +2 4276 842 0 0 3.14159265358979 +2 4277 843 0 0 3.14159265358979 +2 4278 793 282 0 3.14159265358979 +0 + +0101000 ++5621 286 -5618 239 * +Ed + 1.05657229424767e-07 1 1 0 +1 1825 0 0 3.14159265358979 +2 4279 844 0 0 3.14159265358979 +2 4280 845 0 0 3.14159265358979 +2 4281 793 282 0 3.14159265358979 +0 + +0101000 ++5621 286 -5618 239 * +Ed + 1.04153159647742e-07 1 1 0 +1 1826 0 0 3.60000000000153 +2 4282 841 0 0 3.60000000000153 +2 4283 841 290 0 3.60000000000153 +2 4284 839 0 0 3.60000000000153 +2 4285 839 291 0 3.60000000000153 +2 4286 846 0 0 3.60000000000153 +2 4287 841 291 0 3.60000000000153 +2 4288 793 292 0 3.60000000000153 +0 + +0101000 ++5619 293 -5700 293 * +Ed + 1.04152839903515e-07 1 1 0 +1 1826 0 0 3.60000000000153 +2 4282 841 0 0 3.60000000000153 +2 4283 841 290 0 3.60000000000153 +2 4284 839 0 0 3.60000000000153 +2 4285 839 291 0 3.60000000000153 +2 4286 846 0 0 3.60000000000153 +2 4289 793 282 0 3.60000000000153 +0 + +0101000 ++5621 285 -5701 285 * +Ed + 1.02650917741851e-07 1 1 0 +1 1827 0 0 3.60000000000154 +2 4290 831 0 0 3.60000000000154 +2 4291 831 295 0 3.60000000000154 +2 4292 833 0 0 3.60000000000154 +2 4293 833 297 0 3.60000000000154 +2 4294 847 0 0 3.60000000000154 +2 4295 793 282 0 3.60000000000154 +0 + +0101000 ++6029 283 -6076 283 * +Ed + 1.02649736464568e-07 1 1 0 +1 1827 0 0 3.60000000000154 +2 4290 831 0 0 3.60000000000154 +2 4291 831 295 0 3.60000000000154 +2 4292 833 0 0 3.60000000000154 +2 4293 833 297 0 3.60000000000154 +2 4294 847 0 0 3.60000000000154 +2 4296 831 297 0 3.60000000000154 +2 4297 793 299 0 3.60000000000154 +0 + +0101000 ++5622 300 -5671 300 * +Ed + 1.05657698382967e-07 1 1 0 +1 1828 0 0 3.60000000000153 +2 4298 845 0 0 3.60000000000153 +2 4299 845 304 0 3.60000000000153 +2 4300 843 0 0 3.60000000000153 +2 4301 843 305 0 3.60000000000153 +2 4302 848 0 0 3.60000000000153 +2 4303 845 305 0 3.60000000000153 +2 4304 793 306 0 3.60000000000153 +0 + +0101000 ++5618 307 -5668 307 * +Ed + 1.0565828813343e-07 1 1 0 +1 1828 0 0 3.60000000000153 +2 4298 845 0 0 3.60000000000153 +2 4299 845 304 0 3.60000000000153 +2 4300 843 0 0 3.60000000000153 +2 4301 843 305 0 3.60000000000153 +2 4302 848 0 0 3.60000000000153 +2 4305 793 282 0 3.60000000000153 +0 + +0101000 ++5621 286 -5701 286 * +Ed + 1.08271955671707e-07 1 1 0 +1 1829 0 0 3.60000000000153 +2 4306 837 0 0 3.60000000000153 +2 4307 837 311 0 3.60000000000153 +2 4308 835 0 0 3.60000000000153 +2 4309 835 312 0 3.60000000000153 +2 4310 849 0 0 3.60000000000153 +2 4311 837 312 0 3.60000000000153 +2 4312 793 313 0 3.60000000000153 +0 + +0101000 ++5620 314 -5665 314 * +Ed + 1.08270726433935e-07 1 1 0 +1 1829 0 0 3.60000000000153 +2 4306 837 0 0 3.60000000000153 +2 4307 837 311 0 3.60000000000153 +2 4308 835 0 0 3.60000000000153 +2 4309 835 312 0 3.60000000000153 +2 4310 849 0 0 3.60000000000153 +2 4313 793 282 0 3.60000000000153 +0 + +0101000 ++5621 284 -5701 284 * +Ed + 1e-07 1 1 0 +1 1830 0 5.21238898038645 8.35398163397625 +2 4314 850 0 5.21238898038645 8.35398163397625 +2 4315 851 0 5.21238898038645 8.35398163397625 +4 C0 850 0 851 0 +0 + +0101000 ++5617 0 -5616 0 * +Ed + 1e-07 1 1 0 +1 1831 0 -3.55399314159998 3.55399314159389 +2 4316 850 0 -3.55399314159998 3.55399314159389 +2 4317 852 0 -3.55399314159998 3.55399314159389 +4 CN 850 0 852 0 +0 + +0101000 ++5615 0 -5617 0 * +Ed + 1e-07 1 1 0 +1 1832 0 5.21238898038431 8.3539816339741 +2 4318 850 0 5.21238898038431 8.3539816339741 +4 C0 850 0 185 0 +2 4319 185 0 5.21238898038431 8.3539816339741 +0 + +0101000 ++5615 0 -5614 0 * +Ed + 1e-07 1 1 0 +1 1833 0 -3.55399314159998 3.55399314159389 +2 4320 850 0 -3.55399314159998 3.55399314159389 +2 4321 852 0 -3.55399314159998 3.55399314159389 +4 CN 850 0 852 0 +0 + +0101000 ++5614 0 -5616 0 * +Ed + 1e-07 1 1 0 +1 1834 0 -0.35 0.05 +2 4322 851 0 -0.35 0.05 +2 4323 853 0 -0.35 0.05 +4 CN 851 0 853 0 +0 + +0101000 ++5617 0 -5613 0 * +Ed + 1e-07 1 1 0 +1 1835 0 -0.35 0.05 +2 4324 851 0 -0.35 0.05 +2 4325 853 0 -0.35 0.05 +4 CN 851 0 853 0 +0 + +0101000 ++5616 0 -5612 0 * +Ed + 1e-07 1 1 0 +1 1836 0 5.21238898038645 8.35398163397625 +2 4326 851 0 5.21238898038645 8.35398163397625 +2 4327 854 0 5.21238898038645 8.35398163397625 +4 G1 851 0 854 0 +0 + +0101000 ++5613 0 -5612 0 * +Ed + 1e-07 1 1 0 +1 1837 0 2.07079632679666 5.21238898038645 +2 4328 852 0 2.07079632679666 5.21238898038645 +2 4329 853 0 2.07079632679666 5.21238898038645 +4 C0 852 0 853 0 +0 + +0101000 ++5616 0 -5617 0 * +Ed + 1e-07 1 1 0 +1 1838 0 2.07079632679451 5.21238898038431 +2 4330 852 0 2.07079632679451 5.21238898038431 +4 C0 852 0 185 0 +2 4331 185 0 2.07079632679451 5.21238898038431 +0 + +0101000 ++5614 0 -5615 0 * +Ed + 1e-07 1 1 0 +1 1839 0 2.07079632679666 5.21238898038645 +2 4332 853 0 2.07079632679666 5.21238898038645 +2 4333 855 0 2.07079632679666 5.21238898038645 +4 G1 853 0 855 0 +0 + +0101000 ++5612 0 -5613 0 * +Ed + 1e-07 1 1 0 +1 1840 0 1.5707963267949 3.14159265358979 +2 4334 855 0 1.5707963267949 3.14159265358979 +2 4335 854 0 1.5707963267949 3.14159265358979 +4 G2 855 0 854 0 +0 + +0101000 ++5611 0 -5612 0 * +Ed + 1e-07 1 1 0 +1 1841 0 1.5707963267949 3.14159265358979 +2 4336 855 0 1.5707963267949 3.14159265358979 +2 4337 854 0 1.5707963267949 3.14159265358979 +4 G2 855 0 854 0 +0 + +0101000 ++5610 0 -5613 0 * +Ed + 1e-07 1 1 0 +1 1842 0 5.21238898038498 8.35398163397477 +2 4338 854 0 5.21238898038498 8.35398163397477 +4 G1 854 0 856 0 +2 4339 856 0 5.21238898038498 8.35398163397477 +0 + +0101000 ++5610 0 -5611 0 * +Ed + 1e-07 1 1 0 +1 1843 0 2.07079632679519 5.21238898038498 +2 4340 855 0 2.07079632679519 5.21238898038498 +4 G1 855 0 856 0 +2 4341 856 0 2.07079632679519 5.21238898038498 +0 + +0101000 ++5611 0 -5610 0 * +Ed + 1e-07 1 1 0 +1 1844 0 5.2123889803845 8.3539816339743 +2 4342 857 0 5.2123889803845 8.3539816339743 +4 G1 856 0 857 0 +2 4343 856 0 5.2123889803845 8.3539816339743 +0 + +0101000 ++5609 0 -5608 0 * +Ed + 1e-07 1 1 0 +1 1845 0 2.07079632679471 5.2123889803845 +2 4344 858 0 2.07079632679471 5.2123889803845 +4 G1 856 0 858 0 +2 4345 856 0 2.07079632679471 5.2123889803845 +0 + +0101000 ++5608 0 -5609 0 * +Ed + 1e-07 1 1 0 +1 1846 0 2.0943951023856 3.14159265358979 +2 4346 187 0 2.0943951023856 3.14159265358979 +2 4347 189 0 2.0943951023856 3.14159265358979 +4 CN 187 0 189 0 +0 + +0101000 ++5607 0 -6592 0 * +Ed + 1e-07 1 1 0 +1 1847 0 2.0943951023856 3.14159265358979 +2 4348 187 0 2.0943951023856 3.14159265358979 +2 4349 189 0 2.0943951023856 3.14159265358979 +4 G2 187 0 189 0 +0 + +0101000 ++5606 0 -6593 0 * +Ed + 1e-07 1 1 0 +1 1848 0 2.07079632679523 5.21238898038503 +2 4350 859 0 2.07079632679523 5.21238898038503 +2 4351 187 0 2.07079632679523 5.21238898038503 +4 C1 859 0 187 0 +0 + +0101000 ++5606 0 -5607 0 * +Ed + 1e-07 1 1 0 +1 1849 0 5.21238898038503 8.35398163397482 +2 4352 860 0 5.21238898038503 8.35398163397482 +2 4353 189 0 5.21238898038503 8.35398163397482 +4 C1 860 0 189 0 +0 + +0101000 ++5607 0 -5606 0 * +Ed + 1e-07 1 1 0 +1 1850 0 0 1.5707963267949 +2 4354 858 0 0 1.5707963267949 +2 4355 857 0 0 1.5707963267949 +4 CN 858 0 857 0 +0 + +0101000 ++5605 0 -5608 0 * +Ed + 1e-07 1 1 0 +1 1851 0 0 1.5707963267949 +2 4356 858 0 0 1.5707963267949 +2 4357 857 0 0 1.5707963267949 +4 CN 858 0 857 0 +0 + +0101000 ++5604 0 -5609 0 * +Ed + 1e-07 1 1 0 +1 1852 0 5.21238898038313 8.35398163397292 +2 4358 589 0 5.21238898038313 8.35398163397292 +2 4359 857 0 5.21238898038313 8.35398163397292 +4 G1 589 0 857 0 +0 + +0101000 ++5604 0 -5605 0 * +Ed + 1e-07 1 1 0 +1 1853 0 2.07079632679333 5.21238898038313 +2 4360 590 0 2.07079632679333 5.21238898038313 +2 4361 858 0 2.07079632679333 5.21238898038313 +4 G1 590 0 858 0 +0 + +0101000 ++5605 0 -5604 0 * +Ed + 1e-07 1 1 0 +1 1854 0 5.23598775599215 6.28318530717959 +2 4362 859 0 5.23598775599215 6.28318530717959 +2 4363 860 0 5.23598775599215 6.28318530717959 +4 G2 859 0 860 0 +0 + +0101000 ++5607 0 -5603 0 * +Ed + 1e-07 1 1 0 +1 1855 0 2.07079632679529 5.21238898038508 +2 4364 861 0 2.07079632679529 5.21238898038508 +2 4365 859 0 2.07079632679529 5.21238898038508 +4 C1 861 0 859 0 +0 + +0101000 ++5602 0 -5603 0 * +Ed + 1e-07 1 1 0 +1 1856 0 5.23598775599215 6.28318530717959 +2 4366 859 0 5.23598775599215 6.28318530717959 +2 4367 860 0 5.23598775599215 6.28318530717959 +4 G2 859 0 860 0 +0 + +0101000 ++5606 0 -5602 0 * +Ed + 1e-07 1 1 0 +1 1857 0 5.21238898038508 8.35398163397487 +2 4368 862 0 5.21238898038508 8.35398163397487 +2 4369 860 0 5.21238898038508 8.35398163397487 +4 C1 862 0 860 0 +0 + +0101000 ++5603 0 -5602 0 * +Ed + 1e-07 1 1 0 +1 1858 0 -0.35 0.05 +2 4370 589 0 -0.35 0.05 +2 4371 590 0 -0.35 0.05 +4 CN 589 0 590 0 +0 + +0101000 ++6020 0 -5604 0 * +Ed + 1e-07 1 1 0 +1 1859 0 -0.35 0.05 +2 4372 589 0 -0.35 0.05 +2 4373 590 0 -0.35 0.05 +4 CN 589 0 590 0 +0 + +0101000 ++6019 0 -5605 0 * +Ed + 1e-07 1 1 0 +1 1860 0 -1 0 +2 4374 862 0 -1 0 +2 4375 861 0 -1 0 +4 CN 862 0 861 0 +0 + +0101000 ++5602 0 -5601 0 * +Ed + 1e-07 1 1 0 +1 1861 0 -1 0 +2 4376 862 0 -1 0 +2 4377 861 0 -1 0 +4 CN 862 0 861 0 +0 + +0101000 ++5603 0 -5600 0 * +Ed + 1e-07 1 1 0 +1 1862 0 2.07079632679529 5.21238898038508 +2 4378 861 0 2.07079632679529 5.21238898038508 +2 4379 863 0 2.07079632679529 5.21238898038508 +4 C0 861 0 863 0 +0 + +0101000 ++5601 0 -5600 0 * +Ed + 1e-07 1 1 0 +1 1863 0 5.21238898038508 8.35398163397487 +2 4380 862 0 5.21238898038508 8.35398163397487 +2 4381 864 0 5.21238898038508 8.35398163397487 +4 C0 862 0 864 0 +0 + +0101000 ++5600 0 -5601 0 * +Ed + 1e-07 1 1 0 +1 1864 0 -1.23606797750079 1.23606797749797 +2 4382 863 0 -1.23606797750079 1.23606797749797 +2 4383 864 0 -1.23606797750079 1.23606797749797 +4 G2 863 0 864 0 +0 + +0101000 ++5600 0 -5599 0 * +Ed + 1e-07 1 1 0 +1 1865 0 2.07079630196715 5.21238898038448 +2 4384 863 0 2.07079630196715 5.21238898038448 +4 C0 863 0 865 0 +2 4385 865 0 2.07079630196715 5.21238898038448 +0 + +0101000 ++5598 0 -5599 0 * +Ed + 1e-07 1 1 0 +1 1866 0 -1.23606797750079 1.23606797750292 +2 4386 863 0 -1.23606797750079 1.23606797750292 +2 4387 864 0 -1.23606797750079 1.23606797750292 +4 G2 863 0 864 0 +0 + +0101000 ++5601 0 -5598 0 * +Ed + 1e-07 1 1 0 +1 1867 0 5.21238898038448 8.35398160914674 +2 4388 864 0 5.21238898038448 8.35398160914674 +4 C0 864 0 865 0 +2 4389 865 0 5.21238898038448 8.35398160914674 +0 + +0101000 ++5599 0 -5598 0 * +Ed + 1e-07 1 1 0 +1 1868 0 -0.75 0.25 +2 4390 584 0 -0.75 0.25 +2 4391 582 0 -0.75 0.25 +4 CN 584 0 582 0 +0 + +0101000 ++6023 0 -5597 0 * +Ed + 1e-07 1 1 0 +1 1869 0 -0.75 0.25 +2 4392 584 0 -0.75 0.25 +2 4393 582 0 -0.75 0.25 +4 CN 584 0 582 0 +0 + +0101000 ++6024 0 -5596 0 * +Ed + 1e-07 1 1 0 +1 1870 0 5.21238898038515 8.35398163397495 +2 4394 584 0 5.21238898038515 8.35398163397495 +2 4395 866 0 5.21238898038515 8.35398163397495 +4 G1 584 0 866 0 +0 + +0101000 ++5597 0 -5596 0 * +Ed + 1e-07 1 1 0 +1 1871 0 2.07079632679536 5.21238898038515 +2 4396 582 0 2.07079632679536 5.21238898038515 +2 4397 867 0 2.07079632679536 5.21238898038515 +4 G1 582 0 867 0 +0 + +0101000 ++5596 0 -5597 0 * +Ed + 1e-07 1 1 0 +1 1872 0 2.07079632679404 5.21238898038383 +2 4398 868 0 2.07079632679404 5.21238898038383 +4 C0 865 0 868 0 +2 4399 865 0 2.07079632679404 5.21238898038383 +0 + +0101000 ++5595 0 -5594 0 * +Ed + 1e-07 1 1 0 +1 1873 0 5.21238898038383 8.35398163397362 +2 4400 869 0 5.21238898038383 8.35398163397362 +4 C0 865 0 869 0 +2 4401 865 0 5.21238898038383 8.35398163397362 +0 + +0101000 ++5594 0 -5595 0 * +Ed + 1e-07 1 1 0 +1 1874 0 0 1 +2 4402 866 315 0 1 +2 4403 870 316 0 1 +0 + +0101000 ++5593 0 -5592 0 * +Ed + 1e-07 1 1 0 +1 1875 0 0 1 +2 4404 866 315 0 1 +2 4405 871 316 0 1 +0 + +0101000 ++5592 0 -5591 0 * +Ed + 1e-07 1 1 0 +1 1876 0 1.67096374894461 3.14159265358979 +2 4406 867 0 1.67096374894461 3.14159265358979 +2 4407 866 0 1.67096374894461 3.14159265358979 +4 CN 867 0 866 0 +0 + +0101000 ++5591 317 -5597 0 * +Ed + 1e-07 1 1 0 +1 1877 0 1.67096374799475 3.14159265358979 +2 4408 867 0 1.67096374799475 3.14159265358979 +2 4409 866 0 1.67096374799475 3.14159265358979 +4 CN 867 0 866 0 +0 + +0101000 ++5593 317 -5596 0 * +Ed + 1e-07 1 1 0 +1 1878 0 0 1 +2 4410 867 315 0 1 +2 4411 871 316 0 1 +0 + +0101000 ++5591 0 -5590 0 * +Ed + 1e-07 1 1 0 +1 1879 0 0 1 +2 4412 867 315 0 1 +2 4413 870 316 0 1 +0 + +0101000 ++5590 0 -5593 0 * +Ed + 1e-07 1 1 0 +1 1880 0 -0.848528137401764 0.848528137405155 +2 4414 868 0 -0.848528137401764 0.848528137405155 +2 4415 869 0 -0.848528137401764 0.848528137405155 +4 G2 868 0 869 0 +0 + +0101000 ++5595 0 -5589 0 * +Ed + 1e-07 1 1 0 +1 1881 0 2.07079632679642 5.21238898038622 +2 4416 872 0 2.07079632679642 5.21238898038622 +2 4417 868 0 2.07079632679642 5.21238898038622 +4 C0 872 0 868 0 +0 + +0101000 ++5589 0 -5588 0 * +Ed + 1e-07 1 1 0 +1 1882 0 -0.848528137401764 0.848528137405155 +2 4418 868 0 -0.848528137401764 0.848528137405155 +2 4419 869 0 -0.848528137401764 0.848528137405155 +4 G2 868 0 869 0 +0 + +0101000 ++5594 0 -5588 0 * +Ed + 1e-07 1 1 0 +1 1883 0 5.21238898038622 8.35398163397601 +2 4420 873 0 5.21238898038622 8.35398163397601 +2 4421 869 0 5.21238898038622 8.35398163397601 +4 C0 873 0 869 0 +0 + +0101000 ++5588 0 -5589 0 * +Ed + 1e-07 1 1 0 +1 1884 0 -0.502506281445775 2 +2 4422 870 0 -0.502506281445775 2 +2 4423 871 0 -0.502506281445775 2 +4 CN 870 0 871 0 +0 + +0101000 ++5592 318 -5587 0 * +Ed + 1e-07 1 1 0 +1 1885 0 3.14159265358979 6.28318530717959 +2 4424 870 0 3.14159265358979 6.28318530717959 +4 C0 870 0 874 0 +2 4425 874 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++5587 0 -5586 0 * +Ed + 1e-07 1 1 0 +1 1886 0 -0.502506281446502 2 +2 4426 870 0 -0.502506281446502 2 +2 4427 871 0 -0.502506281446502 2 +4 CN 870 0 871 0 +0 + +0101000 ++5590 318 -5586 0 * +Ed + 1e-07 1 1 0 +1 1887 0 0 3.14159265358979 +2 4428 871 0 0 3.14159265358979 +4 C0 871 0 874 0 +2 4429 874 0 0 3.14159265358979 +0 + +0101000 ++5586 0 -5587 0 * +Ed + 1e-07 1 1 0 +1 1888 0 -0.249999999999622 1.55 +2 4430 873 0 -0.249999999999622 1.55 +2 4431 872 0 -0.249999999999622 1.55 +4 CN 873 0 872 0 +0 + +0101000 ++5585 317 -5589 0 * +Ed + 1e-07 1 1 0 +1 1889 0 -0.249999999999801 1.55 +2 4432 873 0 -0.249999999999801 1.55 +2 4433 872 0 -0.249999999999801 1.55 +4 CN 873 0 872 0 +0 + +0101000 ++5584 317 -5588 0 * +Ed + 1e-07 1 1 0 +1 1890 0 3.14159265359131 6.28318530718114 +2 4434 872 315 3.14159265359131 6.28318530718114 +2 4435 874 316 3.14159265359131 6.28318530718114 +0 + +0101000 ++5585 0 -5584 0 * +Ed + 1e-07 1 1 0 +1 1891 0 1.17401819735469e-14 3.14159265359131 +2 4436 873 315 1.17401819735469e-14 3.14159265359131 +2 4437 874 316 1.17401819735469e-14 3.14159265359131 +0 + +0101000 ++5584 0 -5585 0 * +Ed + 1e-07 1 1 0 +1 1892 0 9.66737709982169e-10 5.99399999636939 +2 4438 495 0 9.66737709982169e-10 5.99399999636939 +2 4439 494 0 9.66737709982169e-10 5.99399999636939 +4 CN 495 0 494 0 +0 + +0101000 ++6145 0 -5583 319 * +Ed + 0.00138419763137356 1 1 0 +1 1893 0 -4.71238898038 4.71238898038 +2 4440 495 0 -4.71238898038 4.71238898038 +4 C0 495 0 496 0 +2 4441 875 215 -4.71238898038 4.71238898038 +2 4442 875 320 -4.71238898038 4.71238898038 +2 4443 496 0 -4.71238898038 4.71238898038 +2 4444 876 215 -4.71238898038 4.71238898038 +2 4445 495 321 -4.71238898038 4.71238898038 +0 + +0101000 ++5583 0 -5582 0 * +Ed + 1e-07 1 1 0 +1 1894 0 6.1075235393431e-09 5.99400000858356 +2 4446 495 0 6.1075235393431e-09 5.99400000858356 +2 4447 494 0 6.1075235393431e-09 5.99400000858356 +4 CN 495 0 494 0 +0 + +0101000 ++6146 0 -5582 319 * +Ed + 0.000922807648899913 1 1 0 +1 1895 0 1.02300050095347 4.16459315423951 +2 4448 494 0 1.02300050095347 4.16459315423951 +4 C0 494 0 496 0 +2 4449 877 215 1.02300050095347 4.16459315423951 +2 4450 877 320 1.02300050095347 4.16459315423951 +2 4451 496 0 1.02300050095347 4.16459315423951 +2 4452 876 215 1.02300050095347 4.16459315423951 +2 4453 494 321 1.02300050095347 4.16459315423951 +0 + +0101000 ++5582 0 -5583 0 * +Ed + 0.000922807648899913 1 1 0 +1 1896 0 1.60982340685045e-15 3.14159265358979 +2 4454 466 322 1.60982340685045e-15 3.14159265358979 +2 4455 876 92 1.60982340685045e-15 3.14159265358979 +0 + +0101000 ++5581 0 -5580 0 * +Ed + 0.000922807648899913 1 1 0 +1 1897 0 -5.32907051820075e-15 3.14159265358979 +2 4456 468 322 -5.32907051820075e-15 3.14159265358979 +2 4457 876 92 -5.32907051820075e-15 3.14159265358979 +0 + +0101000 ++5580 0 -5581 0 * +Ed + 1e-07 1 1 0 +1 1898 0 12.7704547099364 13.5000164333462 +4 C0 429 0 431 0 +2 4458 429 0 12.7704547099364 13.5000164333462 +2 4459 431 0 12.7704547099364 13.5000164333462 +0 + +0101000 ++6234 214 -5579 0 * +Ed + 1e-07 1 1 0 +1 1899 0 -13.4999999997076 13.5000000000131 +4 C0 429 0 878 0 +2 4460 429 0 -13.4999999997076 13.5000000000131 +2 4461 878 0 -13.4999999997076 13.5000000000131 +0 + +0101000 ++5579 0 -5578 0 * +Ed + 1e-07 1 1 0 +1 1900 0 12.7855807407336 13.5000164020789 +4 C0 429 0 427 0 +2 4462 429 0 12.7855807407336 13.5000164020789 +2 4463 427 0 12.7855807407336 13.5000164020789 +0 + +0101000 ++6235 214 -5578 0 * +Ed + 1e-07 1 1 0 +1 1901 0 -4.99399999986643 1.00000000264559 +2 4464 468 0 -4.99399999986643 1.00000000264559 +2 4465 466 0 -4.99399999986643 1.00000000264559 +4 CN 468 0 466 0 +0 + +0101000 ++5581 323 -6157 221 * +Ed + 1e-07 1 1 0 +1 1902 0 -4.99400000039453 1.00000000264659 +2 4466 468 0 -4.99400000039453 1.00000000264659 +2 4467 466 0 -4.99400000039453 1.00000000264659 +4 CN 468 0 466 0 +0 + +0101000 ++5580 323 -6159 221 * +Ed + 1e-07 1 1 0 +1 1901 0 10.5000000023456 12 +2 4464 468 0 10.5000000023456 12 +2 4465 466 0 10.5000000023456 12 +4 CN 468 0 466 0 +0 + +0101000 ++6156 221 -5577 0 * +Ed + 1e-07 1 1 0 +1 1903 0 3.64159265358979 6.78318530717959 +2 4468 466 0 3.64159265358979 6.78318530717959 +4 C0 466 0 879 0 +2 4469 879 0 3.64159265358979 6.78318530717959 +0 + +0101000 ++5577 0 -5576 0 * +Ed + 1e-07 1 1 0 +1 1902 0 10.5000000023466 12 +2 4466 468 0 10.5000000023466 12 +2 4467 466 0 10.5000000023466 12 +4 CN 468 0 466 0 +0 + +0101000 ++6158 221 -5576 0 * +Ed + 1e-07 1 1 0 +1 1904 0 0.500000000000001 3.64159265358979 +2 4470 468 0 0.500000000000001 3.64159265358979 +4 C0 468 0 879 0 +2 4471 879 0 0.500000000000001 3.64159265358979 +0 + +0101000 ++5576 0 -5577 0 * +Ed + 1.17552871367817e-05 1 1 0 +1 1905 0 -6.04669331360502 -6.0369961107773 +4 C0 496 0 492 0 +2 4472 496 0 -6.04669331360502 -6.0369961107773 +2 4473 492 0 -6.04669331360502 -6.0369961107773 +2 4474 880 324 -6.04669331360502 -6.0369961107773 +2 4475 881 324 -6.04669331360502 -6.0369961107773 +0 + +0101000 ++5575 0 -5574 324 * +Ed + 1.05341730682609e-07 1 1 0 +1 1905 0 -6.0369961107773 3.76401512763963 +4 C0 496 0 492 0 +2 4472 496 0 -6.0369961107773 3.76401512763963 +2 4473 492 0 -6.0369961107773 3.76401512763963 +2 4476 881 324 -6.0369961107773 3.76401512763963 +0 + +0101000 ++5574 324 -5573 215 * +Ed + 1e-07 1 1 0 +1 1905 0 3.76401512763963 6.04669331360451 +4 C0 496 0 492 0 +2 4472 496 0 3.76401512763963 6.04669331360451 +2 4473 492 0 3.76401512763963 6.04669331360451 +0 + +0101000 ++5573 215 -6143 0 * +Ed + 1e-07 1 1 0 +1 1906 0 -3.00000000334584 2.99999999808754 +2 4477 491 0 -3.00000000334584 2.99999999808754 +4 G1 491 0 492 0 +2 4478 492 0 -3.00000000334584 2.99999999808754 +0 + +0101000 ++5575 0 -6149 0 * +Ed + 1e-07 1 1 0 +1 1907 0 -2.99999999772169 2.99999999808754 +2 4479 491 0 -2.99999999772169 2.99999999808754 +4 G1 490 0 491 0 +2 4480 490 0 -2.99999999772169 2.99999999808754 +0 + +0101000 ++5572 0 -6150 0 * +Ed + 2.95758770073378e-05 1 1 0 +1 1908 0 5.92666324231109 5.92827944353238 +2 4481 491 0 5.92666324231109 5.92827944353238 +4 C0 496 0 491 0 +2 4482 496 0 5.92666324231109 5.92827944353238 +2 4483 882 324 5.92666324231109 5.92827944353238 +2 4484 881 324 5.92666324231109 5.92827944353238 +0 + +0101000 ++5572 0 -5571 324 * +Ed + 1.11923138637373e-07 1 1 0 +1 1908 0 5.92827944353238 9.06825589521714 +2 4481 491 0 5.92827944353238 9.06825589521714 +4 C0 496 0 491 0 +2 4482 496 0 5.92827944353238 9.06825589521714 +2 4485 880 324 5.92827944353238 9.06825589521714 +2 4486 881 324 5.92827944353238 9.06825589521714 +0 + +0101000 ++5571 324 -5575 0 * +Ed + 1.03864288494243e-07 1 1 0 +1 1909 0 -6.04669331088993 3.76401512020898 +4 C0 496 0 490 0 +2 4487 496 0 -6.04669331088993 3.76401512020898 +2 4488 490 0 -6.04669331088993 3.76401512020898 +2 4489 881 324 -6.04669331088993 3.76401512020898 +0 + +0101000 ++5572 0 -5570 215 * +Ed + 1e-07 1 1 0 +1 1909 0 3.76401512020898 6.04669330909413 +4 C0 496 0 490 0 +2 4487 496 0 3.76401512020898 6.04669330909413 +2 4488 490 0 3.76401512020898 6.04669330909413 +0 + +0101000 ++5570 215 -6141 0 * +Ed + 1e-07 1 1 0 +1 1032 0 12.7855807426904 13.5000164041287 +4 C0 496 0 427 0 +2 2385 496 0 12.7855807426904 13.5000164041287 +2 2386 427 0 12.7855807426904 13.5000164041287 +0 + +0101000 ++6236 215 -5569 0 * +Ed + 1e-07 1 1 0 +1 1910 0 -2.99999999808754 3.00000000431257 +4 C0 878 0 427 0 +2 4490 427 0 -2.99999999808754 3.00000000431257 +2 4491 878 0 -2.99999999808754 3.00000000431257 +0 + +0101000 ++5569 0 -5578 0 * +Ed + 1e-07 1 1 0 +1 1911 0 -13.5000000000131 13.4999999997082 +4 C0 496 0 878 0 +2 4492 496 0 -13.5000000000131 13.4999999997082 +2 4493 878 0 -13.5000000000131 13.4999999997082 +0 + +0101000 ++5568 0 -5569 0 * +Ed + 1e-07 1 1 0 +1 1912 0 -2.99999999808702 3.00000000431257 +4 C0 431 0 878 0 +2 4494 431 0 -2.99999999808702 3.00000000431257 +2 4495 878 0 -2.99999999808702 3.00000000431257 +0 + +0101000 ++5568 0 -5579 0 * +Ed + 1e-07 1 1 0 +1 1031 0 12.7704547101144 13.5000164333462 +4 C0 496 0 431 0 +2 2382 496 0 12.7704547101144 13.5000164333462 +2 2383 431 0 12.7704547101144 13.5000164333462 +0 + +0101000 ++6232 215 -5568 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 1913 0 3.64159265358883 6.78318530717863 +2 4496 540 0 3.64159265358883 6.78318530717863 +4 C0 540 0 883 0 +2 4497 883 0 3.64159265358883 6.78318530717863 +2 4498 879 0 3.64159265358883 6.78318530717863 +0 + +0101000 ++5567 0 -5566 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 1914 0 0.499999999999042 3.64159265358883 +2 4499 539 0 0.499999999999042 3.64159265358883 +4 C0 539 0 883 0 +2 4500 883 0 0.499999999999042 3.64159265358883 +2 4501 879 0 0.499999999999042 3.64159265358883 +0 + +0101000 ++5566 0 -5567 0 * +Ed + 1.0363503010144e-07 1 1 0 +1 1915 0 4.9031389865229 5.92666324243249 +2 4502 480 0 4.9031389865229 5.92666324243249 +4 C0 881 0 480 0 +2 4503 881 0 4.9031389865229 5.92666324243249 +2 4504 496 325 4.9031389865229 5.92666324243249 +2 4505 884 326 4.9031389865229 5.92666324243249 +2 4506 884 328 4.9031389865229 5.92666324243249 +0 + +0101000 ++5570 326 -5565 0 * +Ed + 1.0363503010144e-07 1 1 0 +1 1916 0 5.92666324243249 9.06825589542976 +2 4507 481 0 5.92666324243249 9.06825589542976 +4 C0 881 0 481 0 +2 4508 881 0 5.92666324243249 9.06825589542976 +2 4509 496 325 5.92666324243249 9.06825589542976 +2 4510 885 326 5.92666324243249 9.06825589542976 +2 4511 885 328 5.92666324243249 9.06825589542976 +0 + +0101000 ++5565 0 -5564 0 * +Ed + 1.0363503010144e-07 1 1 0 +1 1915 0 2.78507058825017 3.80536244316154 +2 4502 480 0 2.78507058825017 3.80536244316154 +4 C0 881 0 480 0 +2 4503 881 0 2.78507058825017 3.80536244316154 +2 4512 496 325 2.78507058825017 3.80536244316154 +2 4513 886 326 2.78507058825017 3.80536244316154 +2 4514 886 328 2.78507058825017 3.80536244316154 +0 + +0101000 ++5564 0 -5573 326 * +Ed + 2.96064302713097e-05 1 1 0 +1 1917 0 -9.42477796077 9.41508075341203 +2 4515 882 0 -9.42477796077 9.41508075341203 +4 C0 882 0 881 0 +2 4516 881 0 -9.42477796077 9.41508075341203 +0 + +0101000 ++5574 0 -5572 325 * +Ed + 1.0363503010144e-07 1 1 0 +1 1918 0 0 3.14159265358979 +2 4517 474 329 0 3.14159265358979 +2 4518 881 330 0 3.14159265358979 +0 + +0101000 ++5563 0 -5562 0 * +Ed + 1.0363503010144e-07 1 1 0 +1 1919 0 3.14159265358979 6.28318530717959 +2 4519 472 329 3.14159265358979 6.28318530717959 +2 4520 881 330 3.14159265358979 6.28318530717959 +0 + +0101000 ++5562 0 -5563 0 * +Ed + 1.0363503010144e-07 1 1 0 +1 1915 0 3.80536244316154 4.9031389865229 +2 4502 480 0 3.80536244316154 4.9031389865229 +4 C0 881 0 480 0 +2 4503 881 0 3.80536244316154 4.9031389865229 +2 4521 887 326 3.80536244316154 4.9031389865229 +2 4522 887 328 3.80536244316154 4.9031389865229 +0 + +0101000 ++5573 326 -5570 326 * +Ed + 1e-07 1 1 0 +1 1920 0 -0.75 0.75 +2 4523 539 0 -0.75 0.75 +2 4524 540 0 -0.75 0.75 +4 CN 539 0 540 0 +0 + +0101000 ++6082 0 -5567 0 * +Ed + 1e-07 1 1 0 +1 1921 0 -0.75 0.75 +2 4525 539 0 -0.75 0.75 +2 4526 540 0 -0.75 0.75 +4 CN 539 0 540 0 +0 + +0101000 ++6083 0 -5566 0 * +Ed + 1e-07 1 1 0 +1 1922 0 2.99999998618955 5.99999998384197 +2 4527 480 0 2.99999998618955 5.99999998384197 +2 4528 481 0 2.99999998618955 5.99999998384197 +4 G2 480 0 481 0 +0 + +0101000 ++6165 331 -5564 0 * +Ed + 1e-07 1 1 0 +1 1923 0 4.00000001972062 5.99999998849941 +2 4529 480 0 4.00000001972062 5.99999998849941 +2 4530 481 0 4.00000001972062 5.99999998849941 +4 CN 480 0 481 0 +0 + +0101000 ++5561 326 -5565 0 * +Ed + 1e-07 1 1 0 +1 1923 0 2.99999999129073 4.00000001972062 +2 4529 480 0 2.99999999129073 4.00000001972062 +2 4530 481 0 2.99999999129073 4.00000001972062 +4 CN 480 0 481 0 +0 + +0101000 ++6166 331 -5561 326 * +Ed + 1.0363503010144e-07 1 1 0 +1 1924 0 3.0530438481915 3.14159265425359 +2 4531 480 330 3.0530438481915 3.14159265425359 +2 4532 881 332 3.0530438481915 3.14159265425359 +0 + +0101000 ++5560 0 -5561 0 * +Ed + 1.0363503010144e-07 1 1 0 +1 1925 0 5.55111518778966e-17 3.05301588664525 +2 4533 481 330 5.55111518778966e-17 3.05301588664525 +2 4534 881 332 5.55111518778966e-17 3.05301588664525 +0 + +0101000 ++5561 0 -5559 0 * +Ed + 0.000922807648899913 1 1 0 +1 1926 0 2.08166819820236e-15 3.14159265358979 +2 4535 466 322 2.08166819820236e-15 3.14159265358979 +2 4536 876 0 2.08166819820236e-15 3.14159265358979 +0 + +0101000 ++5558 0 -5557 0 * +Ed + 0.000922807648899913 1 1 0 +1 1927 0 1.60982340685045e-15 3.1415926535898 +2 4537 468 322 1.60982340685045e-15 3.1415926535898 +2 4538 876 0 1.60982340685045e-15 3.1415926535898 +0 + +0101000 ++5557 0 -5558 0 * +Ed + 1e-07 1 1 0 +1 1928 0 2.9999999992461 8.99999999876527 +2 4539 474 0 2.9999999992461 8.99999999876527 +2 4540 472 0 2.9999999992461 8.99999999876527 +4 CN 474 0 472 0 +0 + +0101000 ++5563 333 -6171 334 * +Ed + 1e-07 1 1 0 +1 1929 0 2.9999999992461 8.99999999876526 +2 4541 474 0 2.9999999992461 8.99999999876526 +2 4542 472 0 2.9999999992461 8.99999999876526 +4 CN 474 0 472 0 +0 + +0101000 ++5562 333 -6169 334 * +Ed + 0.00109666204904441 1 1 0 +1 1930 0 0 1.43546714868436 +2 4543 888 0 0 1.43546714868436 +4 C0 888 0 889 0 +2 4544 890 326 0 1.43546714868436 +2 4545 890 336 0 1.43546714868436 +2 4546 891 326 0 1.43546714868436 +2 4547 891 338 0 1.43546714868436 +2 4548 889 0 0 1.43546714868436 +2 4549 892 326 0 1.43546714868436 +2 4550 893 339 0 1.43546714868436 +2 4551 894 326 0 1.43546714868436 +2 4552 894 341 0 1.43546714868436 +2 4553 895 326 0 1.43546714868436 +2 4554 895 343 0 1.43546714868436 +0 + +0101000 ++5556 0 -5555 326 * +Ed + 0.00109666204904441 1 1 0 +1 1930 0 1.43546714868436 21.5912583734532 +2 4543 888 0 1.43546714868436 21.5912583734532 +4 C0 888 0 889 0 +2 4544 890 326 1.43546714868436 21.5912583734532 +2 4545 890 336 1.43546714868436 21.5912583734532 +2 4546 891 326 1.43546714868436 21.5912583734532 +2 4547 891 338 1.43546714868436 21.5912583734532 +2 4548 889 0 1.43546714868436 21.5912583734532 +2 4549 892 326 1.43546714868436 21.5912583734532 +2 4555 896 339 1.43546714868436 21.5912583734532 +2 4556 897 326 1.43546714868436 21.5912583734532 +2 4557 897 341 1.43546714868436 21.5912583734532 +2 4558 898 326 1.43546714868436 21.5912583734532 +2 4559 898 343 1.43546714868436 21.5912583734532 +0 + +0101000 ++5555 326 -5554 0 * +Ed + 0.00109666204904441 1 1 0 +1 1931 0 19.0180651179 23.2403571596412 +2 4560 899 0 19.0180651179 23.2403571596412 +4 C0 889 0 899 0 +2 4561 900 326 19.0180651179 23.2403571596412 +2 4562 900 336 19.0180651179 23.2403571596412 +2 4563 901 326 19.0180651179 23.2403571596412 +2 4564 901 338 19.0180651179 23.2403571596412 +2 4565 889 0 19.0180651179 23.2403571596412 +2 4566 892 326 19.0180651179 23.2403571596412 +2 4567 896 339 19.0180651179 23.2403571596412 +2 4568 902 326 19.0180651179 23.2403571596412 +2 4569 902 341 19.0180651179 23.2403571596412 +2 4570 903 326 19.0180651179 23.2403571596412 +2 4571 903 343 19.0180651179 23.2403571596412 +0 + +0101000 ++5554 0 -5553 326 * +Ed + 0.00109666204904441 1 1 0 +1 1931 0 23.2403571596412 44.5824523453253 +2 4560 899 0 23.2403571596412 44.5824523453253 +4 C0 889 0 899 0 +2 4561 900 326 23.2403571596412 44.5824523453253 +2 4562 900 336 23.2403571596412 44.5824523453253 +2 4563 901 326 23.2403571596412 44.5824523453253 +2 4564 901 338 23.2403571596412 44.5824523453253 +2 4565 889 0 23.2403571596412 44.5824523453253 +2 4566 892 326 23.2403571596412 44.5824523453253 +2 4572 904 339 23.2403571596412 44.5824523453253 +2 4573 905 326 23.2403571596412 44.5824523453253 +2 4574 905 341 23.2403571596412 44.5824523453253 +2 4575 906 326 23.2403571596412 44.5824523453253 +2 4576 906 343 23.2403571596412 44.5824523453253 +0 + +0101000 ++5553 326 -5552 326 * +Ed + 0.00109666204904441 1 1 0 +1 1931 0 44.5824523453253 46.7550317948 +2 4560 899 0 44.5824523453253 46.7550317948 +4 C0 889 0 899 0 +2 4561 900 326 44.5824523453253 46.7550317948 +2 4562 900 336 44.5824523453253 46.7550317948 +2 4563 901 326 44.5824523453253 46.7550317948 +2 4564 901 338 44.5824523453253 46.7550317948 +2 4565 889 0 44.5824523453253 46.7550317948 +2 4566 892 326 44.5824523453253 46.7550317948 +2 4577 907 339 44.5824523453253 46.7550317948 +2 4578 908 326 44.5824523453253 46.7550317948 +2 4579 908 341 44.5824523453253 46.7550317948 +2 4580 909 326 44.5824523453253 46.7550317948 +2 4581 909 343 44.5824523453253 46.7550317948 +0 + +0101000 ++5552 326 -5551 0 * +Ed + 0.00109666204904441 1 1 0 +1 1932 0 0 12.7011373278 +2 4582 910 0 0 12.7011373278 +4 C0 889 0 910 0 +2 4583 911 326 0 12.7011373278 +2 4584 911 336 0 12.7011373278 +2 4585 912 326 0 12.7011373278 +2 4586 912 338 0 12.7011373278 +2 4587 889 0 0 12.7011373278 +2 4588 892 326 0 12.7011373278 +2 4589 907 339 0 12.7011373278 +2 4590 913 326 0 12.7011373278 +2 4591 913 341 0 12.7011373278 +2 4592 914 326 0 12.7011373278 +2 4593 914 343 0 12.7011373278 +0 + +0101000 ++5551 0 -5550 0 * +Ed + 0.00109666204904441 1 1 0 +1 1933 0 8.44311496108057e-09 9.95223923432889 +2 4594 915 0 8.44311496108057e-09 9.95223923432889 +4 C0 915 0 889 0 +2 4595 916 326 8.44311496108057e-09 9.95223923432889 +2 4596 916 336 8.44311496108057e-09 9.95223923432889 +2 4597 917 326 8.44311496108057e-09 9.95223923432889 +2 4598 917 338 8.44311496108057e-09 9.95223923432889 +2 4599 889 0 8.44311496108057e-09 9.95223923432889 +2 4600 892 326 8.44311496108057e-09 9.95223923432889 +2 4601 907 339 8.44311496108057e-09 9.95223923432889 +2 4602 918 326 8.44311496108057e-09 9.95223923432889 +2 4603 918 341 8.44311496108057e-09 9.95223923432889 +2 4604 919 326 8.44311496108057e-09 9.95223923432889 +2 4605 919 343 8.44311496108057e-09 9.95223923432889 +0 + +0101000 ++5550 0 -5549 326 * +Ed + 0.00112359870343968 1 1 0 +1 1933 0 9.95223923432889 29.2679994569 +2 4594 915 0 9.95223923432889 29.2679994569 +4 C0 915 0 889 0 +2 4595 916 326 9.95223923432889 29.2679994569 +2 4596 916 336 9.95223923432889 29.2679994569 +2 4597 917 326 9.95223923432889 29.2679994569 +2 4598 917 338 9.95223923432889 29.2679994569 +2 4599 889 0 9.95223923432889 29.2679994569 +2 4600 892 326 9.95223923432889 29.2679994569 +2 4606 893 339 9.95223923432889 29.2679994569 +2 4607 920 326 9.95223923432889 29.2679994569 +2 4608 920 341 9.95223923432889 29.2679994569 +2 4609 921 326 9.95223923432889 29.2679994569 +2 4610 921 343 9.95223923432889 29.2679994569 +0 + +0101000 ++5549 326 -5556 0 * +Ed + 1e-07 1 1 0 +1 1901 0 -7.99999999945441 -4.99999999978889 +2 4464 468 0 -7.99999999945441 -4.99999999978889 +2 4465 466 0 -7.99999999945441 -4.99999999978889 +4 CN 468 0 466 0 +0 + +0101000 ++6160 221 -5558 323 * +Ed + 1e-07 1 1 0 +1 1902 0 -7.99999999945341 -5.00000000031698 +2 4466 468 0 -7.99999999945341 -5.00000000031698 +2 4467 466 0 -7.99999999945341 -5.00000000031698 +4 CN 468 0 466 0 +0 + +0101000 ++6162 221 -5557 323 * +Ed + 1e-07 1 1 0 +1 1934 0 -0.75 0.75 +2 4611 526 0 -0.75 0.75 +2 4612 528 0 -0.75 0.75 +4 CN 526 0 528 0 +0 + +0101000 ++6086 0 -5548 0 * +Ed + 1e-07 1 1 0 +1 1935 0 0.5 3.64159265358979 +2 4613 526 0 0.5 3.64159265358979 +4 C0 883 0 526 0 +2 4614 883 0 0.5 3.64159265358979 +0 + +0101000 ++5547 0 -5548 0 * +Ed + 1e-07 1 1 0 +1 1936 0 -0.75 0.75 +2 4615 526 0 -0.75 0.75 +2 4616 528 0 -0.75 0.75 +4 CN 526 0 528 0 +0 + +0101000 ++6087 0 -5547 0 * +Ed + 1e-07 1 1 0 +1 1937 0 3.64159265358979 6.78318530717959 +2 4617 528 0 3.64159265358979 6.78318530717959 +4 C0 883 0 528 0 +2 4618 883 0 3.64159265358979 6.78318530717959 +0 + +0101000 ++5548 0 -5547 0 * +Ed + 1e-07 1 1 0 +1 1938 0 6.08182773990171 6.28318530717959 +2 4619 896 0 6.08182773990171 6.28318530717959 +2 4620 893 0 6.08182773990171 6.28318530717959 +4 C1 896 0 893 0 +0 + +0101000 ++5555 344 -5546 0 * +Ed + 0.00035308323949654 1 1 0 +1 1939 0 0 15.7079632679 +2 4621 922 0 0 15.7079632679 +2 4622 893 0 0 15.7079632679 +4 G1 922 0 893 0 +0 + +0101000 ++5546 0 -5545 0 * +Ed + 1e-07 1 1 0 +1 1940 0 2.94022252558941 3.14159265470738 +2 4623 907 0 2.94022252558941 3.14159265470738 +2 4624 893 0 2.94022252558941 3.14159265470738 +4 C1 907 0 893 0 +0 + +0101000 ++5549 344 -5545 0 * +Ed + 1e-07 1 1 0 +1 1941 0 2.9402346513525 3.14159265470738 +2 4625 904 0 2.9402346513525 3.14159265470738 +2 4626 896 0 2.9402346513525 3.14159265470738 +4 C1 904 0 896 0 +0 + +0101000 ++5553 344 -5544 0 * +Ed + 0.000353083239495131 1 1 0 +1 1942 0 -15.7079632679 0 +2 4627 922 0 -15.7079632679 0 +2 4628 896 0 -15.7079632679 0 +4 G1 922 0 896 0 +0 + +0101000 ++5544 0 -5546 0 * +Ed + 1e-07 1 1 0 +1 1943 0 6.08182748199529 6.28318530717959 +2 4629 907 0 6.08182748199529 6.28318530717959 +2 4630 904 0 6.08182748199529 6.28318530717959 +4 C1 907 0 904 0 +0 + +0101000 ++5552 344 -5543 0 * +Ed + 1e-07 1 1 0 +1 1944 0 3.64159265358979 5.21238898038469 +2 4631 923 0 3.64159265358979 5.21238898038469 +2 4632 904 0 3.64159265358979 5.21238898038469 +4 G1 923 0 904 0 +0 + +0101000 ++5543 0 -5544 0 * +Ed + 1e-07 1 1 0 +1 1945 0 2.0707963267949 3.64159265358979 +2 4633 923 0 2.0707963267949 3.64159265358979 +2 4634 907 0 2.0707963267949 3.64159265358979 +4 G1 923 0 907 0 +0 + +0101000 ++5545 0 -5543 0 * +Ed + 1e-07 1 1 0 +1 1946 0 0 6.25 +2 4635 531 0 0 6.25 +2 4636 536 0 0 6.25 +4 C2 531 0 536 0 +0 + +0101000 ++6085 345 -6085 346 * +Ed + 1e-07 1 1 0 +1 1947 0 0 6.25 +2 4637 531 0 0 6.25 +2 4638 536 0 0 6.25 +4 C2 531 0 536 0 +0 + +0101000 ++6084 345 -6084 346 * +Ed + 1.00000003552714e-07 1 1 0 +1 1948 0 0.499999999998313 3.64159265358811 +2 4639 924 0 0.499999999998313 3.64159265358811 +4 C0 879 0 924 0 +2 4640 879 0 0.499999999998313 3.64159265358811 +2 4641 883 0 0.499999999998313 3.64159265358811 +0 + +0101000 ++5542 0 -5541 0 * +Ed + 1.00000003552714e-07 1 1 0 +1 1949 0 3.64159265358811 6.7831853071779 +2 4642 925 0 3.64159265358811 6.7831853071779 +4 C0 879 0 925 0 +2 4643 879 0 3.64159265358811 6.7831853071779 +2 4644 883 0 3.64159265358811 6.7831853071779 +0 + +0101000 ++5541 0 -5542 0 * +Ed + 1.00165815807966e-07 1 1 0 +1 1950 0 5.21238898038469 8.35398163397448 +2 4645 922 0 5.21238898038469 8.35398163397448 +4 C0 926 0 922 0 +2 4646 926 0 5.21238898038469 8.35398163397448 +2 4647 927 347 5.21238898038469 8.35398163397448 +0 + +0101000 ++5540 0 -5539 0 * +Ed + 1e-07 1 1 0 +1 1951 0 4.00000001117587 6 +2 4648 923 0 4.00000001117587 6 +2 4649 922 0 4.00000001117587 6 +4 CN 923 0 922 0 +0 + +0101000 ++5544 0 -5540 0 * +Ed + 1e-07 1 1 0 +1 1952 0 4.00000001117587 6 +2 4650 923 0 4.00000001117587 6 +2 4651 922 0 4.00000001117587 6 +4 CN 923 0 922 0 +0 + +0101000 ++5545 0 -5539 0 * +Ed + 1.0016581403161e-07 1 1 0 +1 1953 0 2.0707963267949 5.21238898038469 +2 4652 923 0 2.0707963267949 5.21238898038469 +4 C0 923 0 926 0 +2 4653 926 0 2.0707963267949 5.21238898038469 +2 4654 927 347 2.0707963267949 5.21238898038469 +0 + +0101000 ++5539 0 -5540 0 * +Ed + 1e-07 1 1 0 +1 1954 0 3.14159265358979 6.28318530717959 +2 4655 472 329 3.14159265358979 6.28318530717959 +2 4656 532 98 3.14159265358979 6.28318530717959 +0 + +0101000 ++5538 0 -5537 0 * +Ed + 1e-07 1 1 0 +1 1955 0 8.88178432217694e-16 3.14159265358979 +2 4657 474 329 8.88178432217694e-16 3.14159265358979 +2 4658 532 98 8.88178432217694e-16 3.14159265358979 +0 + +0101000 ++5537 0 -5538 0 * +Ed + 1e-07 1 1 0 +1 1956 0 12 16 +2 4659 924 0 12 16 +2 4660 925 0 12 16 +4 CN 924 0 925 0 +0 + +0101000 ++5541 0 -5536 0 * +Ed + 1e-07 1 1 0 +1 1957 0 0.499999999998313 3.64159265358811 +2 4661 924 0 0.499999999998313 3.64159265358811 +4 C0 924 0 928 0 +0 + +0101000 ++5535 0 -5536 0 * +Ed + 1e-07 1 1 0 +1 1958 0 12 16 +2 4662 924 0 12 16 +2 4663 925 0 12 16 +4 CN 924 0 925 0 +0 + +0101000 ++5542 0 -5535 0 * +Ed + 1e-07 1 1 0 +1 1959 0 3.64159265358811 6.7831853071779 +2 4664 925 0 3.64159265358811 6.7831853071779 +4 C0 925 0 928 0 +0 + +0101000 ++5536 0 -5535 0 * +Ed + 1e-07 1 1 0 +1 1960 0 1.92731846778296 3.49811471848248 +2 4665 683 0 1.92731846778296 3.49811471848248 +4 C0 683 0 927 0 +2 4666 927 0 1.92731846778296 3.49811471848248 +0 + +0101000 ++5534 0 -5533 0 * +Ed + 1e-07 1 1 0 +1 1961 0 1.21427418580684 4.35586646911917 +2 4667 678 0 1.21427418580684 4.35586646911917 +4 C0 927 0 678 0 +2 4668 927 0 1.21427418580684 4.35586646911917 +0 + +0101000 ++5534 0 -5532 0 * +Ed + 1e-07 1 1 0 +1 1962 0 3.49811471848248 5.06891149165021 +2 4669 679 0 3.49811471848248 5.06891149165021 +4 C0 679 0 927 0 +2 4670 927 0 3.49811471848248 5.06891149165021 +0 + +0101000 ++5533 0 -5532 0 * +Ed + 1e-07 1 1 0 +1 1929 0 24.7499999202613 34 +2 4541 474 0 24.7499999202613 34 +2 4542 472 0 24.7499999202613 34 +4 CN 474 0 472 0 +0 + +0101000 ++5538 333 -5531 0 * +Ed + 1e-07 1 1 0 +1 1963 0 3.14159265358979 6.28318530717959 +2 4671 472 0 3.14159265358979 6.28318530717959 +4 C0 472 0 929 0 +0 + +0101000 ++5531 0 -5530 0 * +Ed + 1e-07 1 1 0 +1 1928 0 24.7499999202613 34 +2 4539 474 0 24.7499999202613 34 +2 4540 472 0 24.7499999202613 34 +4 CN 474 0 472 0 +0 + +0101000 ++5537 333 -5530 0 * +Ed + 1e-07 1 1 0 +1 1964 0 0 3.14159265358979 +2 4672 474 0 0 3.14159265358979 +4 C0 474 0 929 0 +0 + +0101000 ++5530 0 -5531 0 * +Ed + 4.93307750979435e-07 1 1 0 +1 1965 0 -0.866025017407594 0.866025017414999 +4 C0 928 0 930 0 +0 + +0101000 ++5529 0 -5528 0 * +Ed + 1e-07 1 1 0 +1 1966 0 -0.866025403142469 0.86602540314176 +4 C0 928 0 931 0 +0 + +0101000 ++5527 0 -5529 0 * +Ed + 1.99670431140771e-07 1 1 0 +1 1967 0 -0.866025230707703 0.866025230712269 +4 C0 928 0 932 0 +0 + +0101000 ++5526 0 -5527 0 * +Ed + 1e-07 1 1 0 +1 1968 0 -0.86602540297138 0.866025402967714 +4 C0 928 0 933 0 +0 + +0101000 ++5525 0 -5526 0 * +Ed + 1e-07 1 1 0 +1 1969 0 -0.866025404073677 0.866025404073323 +4 C0 928 0 934 0 +0 + +0101000 ++5524 0 -5525 0 * +Ed + 1e-07 1 1 0 +1 1970 0 -0.866025404430157 0.866025404432099 +4 C0 928 0 935 0 +0 + +0101000 ++5528 0 -5524 0 * +Ed + 1e-07 1 1 0 +1 1399 0 9.99999999395692 10.9999999985 +2 3248 683 0 9.99999999395692 10.9999999985 +2 3249 678 0 9.99999999395692 10.9999999985 +4 G2 683 0 678 0 +0 + +0101000 ++5629 262 -5534 0 * +Ed + 1e-07 1 1 0 +1 1396 0 -10.9999999984853 -9.9999999961142 +2 3236 679 0 -10.9999999984853 -9.9999999961142 +2 3237 683 0 -10.9999999984853 -9.9999999961142 +4 CN 679 0 683 0 +0 + +0101000 ++5533 0 -5628 262 * +Ed + 1e-07 1 1 0 +1 1389 0 -10.9999999961859 -9.99999999375178 +2 3212 679 0 -10.9999999961859 -9.99999999375178 +2 3213 678 0 -10.9999999961859 -9.99999999375178 +4 G2 679 0 678 0 +0 + +0101000 ++5532 0 -5626 262 * +Ed + 2.23372586806497e-07 1 1 0 +1 1971 0 -1 1 +4 C0 930 0 931 0 +0 + +0101000 ++5529 0 -5523 0 * +Ed + 2.45774230207e-07 1 1 0 +1 1972 0 -1 1 +4 C0 930 0 935 0 +0 + +0101000 ++5528 0 -5522 0 * +Ed + 1e-07 1 1 0 +1 1973 0 -0.866025016970551 0.866025017123298 +4 C0 930 0 936 0 +0 + +0101000 ++5523 0 -5522 0 * +Ed + 1e-07 1 1 0 +1 1974 0 -1 1 +4 C0 931 0 932 0 +0 + +0101000 ++5527 0 -5521 0 * +Ed + 1e-07 1 1 0 +1 1975 0 -0.866025403647298 0.866025404072931 +4 C0 931 0 936 0 +0 + +0101000 ++5521 0 -5523 0 * +Ed + 1e-07 1 1 0 +1 1976 0 -1 1 +4 C0 932 0 933 0 +0 + +0101000 ++5526 0 -5520 0 * +Ed + 1e-07 1 1 0 +1 1977 0 -0.866025231270519 0.866025230849674 +4 C0 932 0 936 0 +0 + +0101000 ++5520 0 -5521 0 * +Ed + 1e-07 1 1 0 +1 1978 0 -1 1 +4 C0 933 0 934 0 +0 + +0101000 ++5525 0 -5519 0 * +Ed + 1e-07 1 1 0 +1 1979 0 -0.866025403118018 0.866025403141581 +4 C0 933 0 936 0 +0 + +0101000 ++5519 0 -5520 0 * +Ed + 1e-07 1 1 0 +1 1980 0 -1 1 +4 C0 934 0 935 0 +0 + +0101000 ++5524 0 -5518 0 * +Ed + 1e-07 1 1 0 +1 1981 0 -0.866025404043298 0.866025404073702 +4 C0 934 0 936 0 +0 + +0101000 ++5518 0 -5519 0 * +Ed + 1e-07 1 1 0 +1 1982 0 -0.866025404075978 0.866025404068011 +4 C0 935 0 936 0 +0 + +0101000 ++5522 0 -5518 0 * +Ed + 1e-07 1 1 0 +1 1983 0 5.92666324293272 9.06825589570212 +2 4673 937 0 5.92666324293272 9.06825589570212 +4 C0 680 0 937 0 +2 4674 680 0 5.92666324293272 9.06825589570212 +0 + +0101000 ++5517 0 -5516 0 * +Ed + 1e-07 1 1 0 +1 1984 0 2.7850705886866 5.92666324276865 +2 4675 938 0 2.7850705886866 5.92666324276865 +4 C0 680 0 938 0 +2 4676 680 0 2.7850705886866 5.92666324276865 +0 + +0101000 ++5516 0 -5517 0 * +Ed + 1.01064123510959e-07 1 1 0 +1 1985 0 3.02442562539415 3.14159265358979 +2 4677 474 0 3.02442562539415 3.14159265358979 +4 C0 474 0 939 0 +2 4678 939 0 3.02442562539415 3.14159265358979 +2 4679 937 348 3.02442562539415 3.14159265358979 +0 + +0101000 ++5515 333 -5514 0 * +Ed + 1.03209756793276e-07 1 1 0 +1 1986 0 3.14159265358979 6.16601827773309 +2 4680 472 0 3.14159265358979 6.16601827773309 +4 C0 472 0 939 0 +2 4681 939 0 3.14159265358979 6.16601827773309 +2 4682 937 348 3.14159265358979 6.16601827773309 +0 + +0101000 ++5514 0 -5513 333 * +Ed + 1e-07 1 1 0 +1 1987 0 10.0000000032544 10.9999999984848 +2 4683 938 0 10.0000000032544 10.9999999984848 +2 4684 937 0 10.0000000032544 10.9999999984848 +4 CN 938 0 937 0 +0 + +0101000 ++5513 262 -5516 0 * +Ed + 1e-07 1 1 0 +1 1988 0 9.99999999813533 10.9999999980019 +2 4685 938 0 9.99999999813533 10.9999999980019 +2 4686 937 0 9.99999999813533 10.9999999980019 +4 CN 938 0 937 0 +0 + +0101000 ++5515 262 -5517 0 * +Ed + 1.01064130460309e-07 1 1 0 +1 1986 0 6.16601827773309 6.28318530717959 +2 4680 472 0 6.16601827773309 6.28318530717959 +4 C0 472 0 939 0 +2 4681 939 0 6.16601827773309 6.28318530717959 +2 4687 938 348 6.16601827773309 6.28318530717959 +0 + +0101000 ++5513 333 -5512 0 * +Ed + 1.03209763869335e-07 1 1 0 +1 1985 0 0 3.02442562539415 +2 4677 474 0 0 3.02442562539415 +4 C0 474 0 939 0 +2 4678 939 0 0 3.02442562539415 +2 4688 938 348 0 3.02442562539415 +0 + +0101000 ++5512 0 -5515 333 * +Ed + 1e-07 1 1 0 +1 1989 205 0.750626652808926 3.89221930642096 +2 4689 460 205 0.750626652808926 3.89221930642096 +2 4690 940 205 0.750626652808926 3.89221930642096 +2 4691 941 205 0.750626652808926 3.89221930642096 +2 4692 941 206 0.750626652808926 3.89221930642096 +2 4693 942 205 0.750626652808926 3.89221930642096 +2 4694 942 207 0.750626652808926 3.89221930642096 +0 + +0101000 ++5511 205 -5510 205 * +Ed + 1e-07 1 1 0 +1 1990 0 0 0.0599685653090916 +2 4695 942 0 0 0.0599685653090916 +2 4696 943 0 0 0.0599685653090916 +0 + +0101000 ++5510 0 -5509 0 * +Ed + 5e-06 1 1 0 +1 1991 0 0 0.886491937875029 +2 4697 944 0 0 0.886491937875029 +2 4698 942 0 0 0.886491937875029 +0 + +0101000 ++5509 0 -5508 0 * +Ed + 5e-06 1 1 0 +1 1992 0 6.02166537218932e-05 1 +2 4699 945 0 6.02166537218932e-05 1 +2 4700 942 0 6.02166537218932e-05 1 +0 + +0101000 ++5507 0 -5508 0 * +Ed + 1e-07 1 1 0 +1 1989 205 0.750626652808926 1.55501745794509 +2 4689 460 205 0.750626652808926 1.55501745794509 +2 4690 940 205 0.750626652808926 1.55501745794509 +2 4691 941 205 0.750626652808926 1.55501745794509 +2 4692 941 206 0.750626652808926 1.55501745794509 +2 4693 942 205 0.750626652808926 1.55501745794509 +2 4694 942 207 0.750626652808926 1.55501745794509 +0 + +0101000 ++5511 205 -5507 207 * +Ed + 1e-07 1 1 0 +1 1993 0 0 0.07 +2 4701 946 0 0 0.07 +2 4702 942 0 0 0.07 +0 + +0101000 ++5511 0 -5511 102 * +Ed + 1e-07 1 1 0 +1 1994 205 -6.00000000215791 6.00000000230302 +2 4703 940 205 -6.00000000215791 6.00000000230302 +2 4704 947 205 -6.00000000215791 6.00000000230302 +4 G1 940 205 947 205 +0 + +0101000 ++5506 205 -5510 205 * +Ed + 1e-07 1 1 0 +1 1995 205 0.750626652586277 3.89221930663249 +2 4705 948 205 0.750626652586277 3.89221930663249 +2 4706 940 205 0.750626652586277 3.89221930663249 +0 + +0101000 ++5505 205 -5506 205 * +Ed + 1e-07 1 1 0 +1 1996 205 -6.00000000157848 4.00000002938476 +2 4707 464 205 -6.00000000157848 4.00000002938476 +2 4708 940 205 -6.00000000157848 4.00000002938476 +4 G1 464 205 940 205 +0 + +0101000 ++5505 205 -5504 205 * +Ed + 1e-07 1 1 0 +1 1996 205 4.00000002938476 6.00000000297987 +2 4707 464 205 4.00000002938476 6.00000000297987 +2 4708 940 205 4.00000002938476 6.00000000297987 +4 G1 464 205 940 205 +0 + +0101000 ++5504 205 -5511 205 * +Ed + 4.07311226763961e-05 1 1 0 +1 1997 0 0 0.958014832216889 +2 4709 940 0 0 0.958014832216889 +2 4710 460 104 0 0.958014832216889 +0 + +0101000 ++5504 0 -5503 0 * +Ed + 1.83044889231885e-05 1 1 0 +1 1998 205 -2.49998616961397 2.499986173813 +2 4711 460 205 -2.49998616961397 2.499986173813 +2 4712 947 205 -2.49998616961397 2.499986173813 +2 4713 949 205 -2.49998616961397 2.499986173813 +2 4714 949 206 -2.49998616961397 2.499986173813 +2 4715 943 205 -2.49998616961397 2.499986173813 +2 4716 943 207 -2.49998616961397 2.499986173813 +0 + +0101000 ++5502 205 -5510 205 * +Ed + 5e-06 1 1 0 +1 1999 0 0 1 +2 4717 944 0 0 1 +2 4718 943 0 0 1 +0 + +0101000 ++5509 0 -5502 0 * +Ed + 9.8e-08 1 1 0 +1 2000 352 5.44885907762267 6.67079297512393 +2 4719 944 352 5.44885907762267 6.67079297512393 +2 4720 945 352 5.44885907762267 6.67079297512393 +0 + +0101000 ++5508 352 -5501 352 * +Ed + 0.294457914476126 1 1 0 +1 953 205 3.89221690172611 6.83396752657233 +2 2142 460 205 3.89221690172611 6.83396752657233 +2 2143 461 205 3.89221690172611 6.83396752657233 +2 2144 462 205 3.89221690172611 6.83396752657233 +2 2145 462 206 3.89221690172611 6.83396752657233 +2 2146 463 205 3.89221690172611 6.83396752657233 +2 2147 463 207 3.89221690172611 6.83396752657233 +2 4721 944 205 3.89221690172611 6.83396752657233 +0 + +0101000 ++5502 205 -5500 205 * +Ed + 9.8e-08 1 1 0 +1 2001 352 5.92666324219004 7.01084579782241 +2 4722 944 352 5.92666324219004 7.01084579782241 +2 4723 950 352 5.92666324219004 7.01084579782241 +0 + +0101000 ++5499 352 -5500 352 * +Ed + 9.8e-08 1 1 0 +1 2002 352 -11.9937694077568 11.9937694090687 +2 4724 944 352 -11.9937694077568 11.9937694090687 +2 4725 951 352 -11.9937694077568 11.9937694090687 +0 + +0101000 ++5499 352 -5498 352 * +Ed + 9.8e-08 1 1 0 +1 2003 352 -15.5249223671499 15.5249223599276 +2 4726 944 352 -15.5249223671499 15.5249223599276 +2 4727 952 352 -15.5249223671499 15.5249223599276 +0 + +0101000 ++5497 352 -5498 352 * +Ed + 9.8e-08 1 1 0 +1 2004 352 -14.0062305911756 14.0062305887157 +2 4728 944 352 -14.0062305911756 14.0062305887157 +2 4729 953 352 -14.0062305911756 14.0062305887157 +0 + +0101000 ++5496 352 -5497 352 * +Ed + 9.8e-08 1 1 0 +1 2005 352 1.38687587371126 2.78507058770086 +2 4730 944 352 1.38687587371126 2.78507058770086 +2 4731 954 352 1.38687587371126 2.78507058770086 +0 + +0101000 ++5501 352 -5496 352 * +Ed + 0.00106324543301387 1 1 0 +1 2006 352 1.02300050099934 4.16459315426973 +2 4732 955 352 1.02300050099934 4.16459315426973 +2 4733 944 352 1.02300050099934 4.16459315426973 +2 4734 956 352 1.02300050099934 4.16459315426973 +2 4735 956 353 1.02300050099934 4.16459315426973 +2 4736 955 353 1.02300050099934 4.16459315426973 +0 + +0101000 ++5495 352 -5494 352 * +Ed + 0.00159395483008086 1 1 0 +1 2007 352 -4.71238898038 4.71238898038 +2 4737 957 352 -4.71238898038 4.71238898038 +2 4738 944 352 -4.71238898038 4.71238898038 +2 4739 958 352 -4.71238898038 4.71238898038 +2 4740 958 353 -4.71238898038 4.71238898038 +2 4741 957 353 -4.71238898038 4.71238898038 +0 + +0101000 ++5494 352 -5495 352 * +Ed + 9.8e-08 1 1 0 +1 2008 352 -2.98979363908947 2.99999999736193 +2 4742 945 352 -2.98979363908947 2.99999999736193 +2 4743 959 352 -2.98979363908947 2.99999999736193 +4 G1 945 352 959 352 +0 + +0101000 ++5493 352 -5492 352 * +Ed + 9.8e-08 1 1 0 +1 2009 352 -6.67079298735922 6.6707929811188 +2 4744 960 352 -6.67079298735922 6.6707929811188 +2 4745 945 352 -6.67079298735922 6.6707929811188 +0 + +0101000 ++5492 352 -5491 352 * +Ed + 9.8e-08 1 1 0 +1 2010 352 -3.00000000431245 2.99999999318832 +2 4746 954 352 -3.00000000431245 2.99999999318832 +2 4747 945 352 -3.00000000431245 2.99999999318832 +0 + +0101000 ++5501 352 -5491 352 * +Ed + 5e-06 1 1 0 +1 2011 0 0 0.947971382061211 +2 4748 945 0 0 0.947971382061211 +2 4749 460 102 0 0.947971382061211 +0 + +0101000 ++5493 0 -5507 0 * +Ed + 5e-06 1 1 0 +1 2012 0 0.643107255719346 1 +2 4750 950 0 0.643107255719346 1 +2 4751 460 102 0.643107255719346 1 +0 + +0101000 ++5500 0 -5490 0 * +Ed + 5e-06 1 1 0 +1 2013 0 0 1 +2 4752 961 0 0 1 +2 4753 460 102 0 1 +0 + +0101000 ++5489 0 -5490 0 * +Ed + 5e-06 1 1 0 +1 2014 0 0 1 +2 4754 959 0 0 1 +2 4755 460 102 0 1 +0 + +0101000 ++5493 0 -5489 0 * +Ed + 1e-07 1 1 0 +1 2015 205 -2.49999999877291 2.49999999870928 +2 4756 460 205 -2.49999999877291 2.49999999870928 +2 4757 464 205 -2.49999999877291 2.49999999870928 +2 4758 962 205 -2.49999999877291 2.49999999870928 +2 4759 962 206 -2.49999999877291 2.49999999870928 +2 4760 946 205 -2.49999999877291 2.49999999870928 +2 4761 946 207 -2.49999999877291 2.49999999870928 +0 + +0101000 ++5511 205 -6192 207 * +Ed + 1e-07 1 1 0 +1 953 205 6.83396880140997 7.03381195998279 +2 2142 460 205 6.83396880140997 7.03381195998279 +2 2143 461 205 6.83396880140997 7.03381195998279 +2 2144 462 205 6.83396880140997 7.03381195998279 +2 2145 462 206 6.83396880140997 7.03381195998279 +2 2146 463 205 6.83396880140997 7.03381195998279 +2 2147 463 207 6.83396880140997 7.03381195998279 +0 + +0101000 ++5500 207 -6192 207 * +Ed + 5e-06 1 1 0 +1 2016 0 0 1 +2 4762 472 354 0 1 +2 4763 460 102 0 1 +0 + +0101000 ++5488 0 -5487 0 * +Ed + 5e-06 1 1 0 +1 2017 0 0 1 +2 4764 474 354 0 1 +2 4765 460 102 0 1 +0 + +0101000 ++5486 0 -5488 0 * +Ed + 5e-06 1 1 0 +1 2018 0 0 1 +2 4766 472 354 0 1 +2 4767 460 102 0 1 +0 + +0101000 ++5487 0 -5486 0 * +Ed + 1e-07 1 1 0 +1 2015 205 -2.49999999877291 2.49999999870928 +2 4756 460 205 -2.49999999877291 2.49999999870928 +2 4757 464 205 -2.49999999877291 2.49999999870928 +2 4758 962 205 -2.49999999877291 2.49999999870928 +2 4759 962 206 -2.49999999877291 2.49999999870928 +2 4760 946 205 -2.49999999877291 2.49999999870928 +2 4761 946 207 -2.49999999877291 2.49999999870928 +0 + +0101000 ++5511 205 -6192 205 * +Ed + 1e-07 1 1 0 +1 2019 205 -5.99999999571254 4.00000001968565 +2 4768 947 205 -5.99999999571254 4.00000001968565 +2 4769 461 205 -5.99999999571254 4.00000001968565 +4 G1 947 205 461 205 +0 + +0101000 ++5485 205 -5484 355 * +Ed + 0.000315129183601394 1 1 0 +1 2020 0 0 2 +2 4770 462 0 0 2 +2 4771 949 0 0 2 +2 4772 947 0 0 2 +2 4773 461 0 0 2 +0 + +0101000 ++5502 0 -5484 104 * +Ed + 1e-07 1 1 0 +1 2021 205 -2.49998617317168 2.49998617368502 +2 4774 948 205 -2.49998617317168 2.49998617368502 +2 4775 947 205 -2.49998617317168 2.49998617368502 +0 + +0101000 ++5485 205 -5506 205 * +Ed + 1e-07 1 1 0 +1 2022 205 -2.50000000426371 2.4999999994137 +2 4776 948 205 -2.50000000426371 2.4999999994137 +2 4777 464 205 -2.50000000426371 2.4999999994137 +0 + +0101000 ++5505 205 -5483 205 * +Ed + 1e-07 1 1 0 +1 2023 205 3.89221690145238 7.03381196000516 +2 4778 948 205 3.89221690145238 7.03381196000516 +2 4779 461 205 3.89221690145238 7.03381196000516 +0 + +0101000 ++5485 205 -5483 205 * +Ed + 5e-06 1 1 0 +1 2024 0 0 1 +2 4780 963 357 0 1 +2 4781 948 0 0 1 +0 + +0101000 ++5482 0 -5481 0 * +Ed + 5e-06 1 1 0 +1 2025 0 0 1 +2 4782 964 357 0 1 +2 4783 948 0 0 1 +0 + +0101000 ++5480 0 -5482 0 * +Ed + 5e-06 1 1 0 +1 2026 0 0 1 +2 4784 964 357 0 1 +2 4785 948 0 0 1 +0 + +0101000 ++5479 0 -5480 0 * +Ed + 5e-06 1 1 0 +1 2027 0 0 1 +2 4786 965 357 0 1 +2 4787 948 0 0 1 +0 + +0101000 ++5478 0 -5479 0 * +Ed + 5e-06 1 1 0 +1 2028 0 0 1 +2 4788 966 357 0 1 +2 4789 948 0 0 1 +0 + +0101000 ++5481 0 -5478 0 * +Ed + 5e-06 1 1 0 +1 2029 0 0 1 +2 4790 464 0 0 1 +2 4791 460 104 0 1 +0 + +0101000 ++5504 0 -6191 0 * +Ed + 1e-07 1 1 0 +1 2030 205 -5.99999999453142 4.00000002644352 +2 4792 464 205 -5.99999999453142 4.00000002644352 +2 4793 461 205 -5.99999999453142 4.00000002644352 +4 G1 464 205 461 205 +0 + +0101000 ++5483 205 -6191 205 * +Ed + 0.294457914476126 1 1 0 +1 953 205 6.83396823710121 6.93276433842993 +2 2142 460 205 6.83396823710121 6.93276433842993 +2 2143 461 205 6.83396823710121 6.93276433842993 +2 2144 462 205 6.83396823710121 6.93276433842993 +2 2145 462 206 6.83396823710121 6.93276433842993 +2 2146 463 205 6.83396823710121 6.93276433842993 +2 2147 463 207 6.83396823710121 6.93276433842993 +0 + +0101000 ++5500 205 -6193 205 * +Ed + 0.000315122974719172 1 1 0 +1 953 205 5.85486838146969 7.03381195998279 +2 2142 460 205 5.85486838146969 7.03381195998279 +2 2143 461 205 5.85486838146969 7.03381195998279 +2 2144 462 205 5.85486838146969 7.03381195998279 +2 2145 462 206 5.85486838146969 7.03381195998279 +2 2146 463 205 5.85486838146969 7.03381195998279 +2 2147 463 207 5.85486838146969 7.03381195998279 +2 4794 461 206 5.85486838146969 7.03381195998279 +0 + +0101000 ++5477 206 -6191 206 * +Ed + 0.000317048756063435 1 1 0 +1 953 205 3.89221690172611 5.85486838146969 +2 2142 460 205 3.89221690172611 5.85486838146969 +2 2143 461 205 3.89221690172611 5.85486838146969 +2 2144 462 205 3.89221690172611 5.85486838146969 +2 2145 462 206 3.89221690172611 5.85486838146969 +2 2146 463 205 3.89221690172611 5.85486838146969 +2 2147 463 207 3.89221690172611 5.85486838146969 +2 4795 461 206 3.89221690172611 5.85486838146969 +0 + +0101000 ++5484 205 -5477 206 * +Ed + 9.8e-08 1 1 0 +1 2031 352 -3.00000000537548 2.99999999702412 +2 4796 950 352 -3.00000000537548 2.99999999702412 +2 4797 951 352 -3.00000000537548 2.99999999702412 +4 G1 950 352 951 352 +0 + +0101000 ++5499 352 -5476 352 * +Ed + 9.8e-08 1 1 0 +1 2032 352 5.92666324223284 7.32485795747088 +2 4798 960 352 5.92666324223284 7.32485795747088 +2 4799 950 352 5.92666324223284 7.32485795747088 +0 + +0101000 ++5476 352 -5475 352 * +Ed + 9.8e-08 1 1 0 +1 2033 352 -2.98982750565143 3.00000000300696 +2 4800 961 352 -2.98982750565143 3.00000000300696 +2 4801 950 352 -2.98982750565143 3.00000000300696 +0 + +0101000 ++5490 352 -5475 352 * +Ed + 9.8e-08 1 1 0 +1 2034 352 -11.9937694075932 11.9937694089057 +2 4802 960 352 -11.9937694075932 11.9937694089057 +2 4803 951 352 -11.9937694075932 11.9937694089057 +0 + +0101000 ++5476 352 -5474 352 * +Ed + 9.8e-08 1 1 0 +1 2035 352 -2.99999999794252 3.0000000046509 +2 4804 951 352 -2.99999999794252 3.0000000046509 +2 4805 952 352 -2.99999999794252 3.0000000046509 +0 + +0101000 ++5498 352 -5474 352 * +Ed + 9.8e-08 1 1 0 +1 2036 352 -15.524922359897 15.5249223672414 +2 4806 960 352 -15.524922359897 15.5249223672414 +2 4807 952 352 -15.524922359897 15.5249223672414 +0 + +0101000 ++5473 352 -5474 352 * +Ed + 9.8e-08 1 1 0 +1 2037 352 -3.00000000474822 2.99999999794161 +2 4808 952 352 -3.00000000474822 2.99999999794161 +2 4809 953 352 -3.00000000474822 2.99999999794161 +0 + +0101000 ++5497 352 -5473 352 * +Ed + 9.8e-08 1 1 0 +1 2038 352 -14.0062305861726 14.0062305884688 +2 4810 960 352 -14.0062305861726 14.0062305884688 +2 4811 953 352 -14.0062305861726 14.0062305884688 +0 + +0101000 ++5472 352 -5473 352 * +Ed + 9.8e-08 1 1 0 +1 2039 352 -2.99999999634741 3.00000001068202 +2 4812 953 352 -2.99999999634741 3.00000001068202 +2 4813 954 352 -2.99999999634741 3.00000001068202 +4 G1 953 352 954 352 +0 + +0101000 ++5496 352 -5472 352 * +Ed + 9.8e-08 1 1 0 +1 2040 352 1.3868758736501 2.78507058902104 +2 4814 960 352 1.3868758736501 2.78507058902104 +2 4815 954 352 1.3868758736501 2.78507058902104 +0 + +0101000 ++5491 352 -5472 352 * +Ed + 0.00106324543301387 1 1 0 +1 2041 0 0 1 +2 4816 466 359 0 1 +2 4817 944 0 0 1 +0 + +0101000 ++5471 0 -5470 0 * +Ed + 0.00106324543301387 1 1 0 +1 2042 0 0 1 +2 4818 466 359 0 1 +2 4819 944 0 0 1 +0 + +0101000 ++5469 0 -5471 0 * +Ed + 0.00106324543301387 1 1 0 +1 2043 0 0 1 +2 4820 468 359 0 1 +2 4821 944 0 0 1 +0 + +0101000 ++5470 0 -5469 0 * +Ed + 9.8e-08 1 1 0 +1 2044 352 2.78507058951534 5.92666324183241 +2 4822 960 352 2.78507058951534 5.92666324183241 +2 4823 959 352 2.78507058951534 5.92666324183241 +0 + +0101000 ++5492 352 -5468 352 * +Ed + 9.8e-08 1 1 0 +1 2045 352 -2.98979705439471 2.99999999837755 +2 4824 961 352 -2.98979705439471 2.99999999837755 +2 4825 959 352 -2.98979705439471 2.99999999837755 +4 G1 961 352 959 352 +0 + +0101000 ++5489 352 -5468 352 * +Ed + 9.8e-08 1 1 0 +1 2046 352 -4.65833180435206 4.65833179647173 +2 4826 960 352 -4.65833180435206 4.65833179647173 +2 4827 961 352 -4.65833180435206 4.65833179647173 +0 + +0101000 ++5468 352 -5475 352 * +Ed + 0.00106324653161837 1 1 0 +1 2047 352 -4.71238898038 4.71238898038 +2 4828 957 352 -4.71238898038 4.71238898038 +2 4829 960 352 -4.71238898038 4.71238898038 +0 + +0101000 ++5467 352 -5466 352 * +Ed + 9.8e-08 1 1 0 +1 2048 352 1.02300050099914 4.16459315186929 +2 4830 955 352 1.02300050099914 4.16459315186929 +2 4831 960 352 1.02300050099914 4.16459315186929 +0 + +0101000 ++5466 352 -5467 352 * +Ed + 1e-07 1 1 0 +1 1929 0 3.06999665604837 8.99999999488833 +2 4541 474 0 3.06999665604837 8.99999999488833 +2 4542 472 0 3.06999665604837 8.99999999488833 +4 CN 474 0 472 0 +0 + +0101000 ++5486 360 -6179 361 * +Ed + 1e-07 1 1 0 +1 1928 0 3.07000332555514 8.99999999488833 +2 4539 474 0 3.07000332555514 8.99999999488833 +2 4540 472 0 3.07000332555514 8.99999999488833 +4 CN 474 0 472 0 +0 + +0101000 ++5488 360 -6178 361 * +Ed + 4.1016435575952e-05 1 1 0 +1 2049 0 0.552658005349888 1 +2 4832 461 0 0.552658005349888 1 +2 4833 460 104 0.552658005349888 1 +0 + +0101000 ++5477 0 -6191 0 * +Ed + 1e-07 1 1 0 +1 2050 0 6.08182734418375 6.48454644028576 +2 4834 966 0 6.08182734418375 6.48454644028576 +2 4835 963 0 6.08182734418375 6.48454644028576 +4 CN 966 0 963 0 +0 + +0101000 ++5465 363 -5481 363 * +Ed + 1e-07 1 1 0 +1 2051 0 2.94023443972223 3.34294990709437 +2 4836 963 0 2.94023443972223 3.34294990709437 +2 4837 964 0 2.94023443972223 3.34294990709437 +4 CN 963 0 964 0 +0 + +0101000 ++5464 363 -5482 363 * +Ed + 1.46427182527138e-05 1 1 0 +1 2052 0 20.3286207119827 41.3585971183337 +2 4838 967 0 20.3286207119827 41.3585971183337 +4 C0 968 0 967 0 +2 4839 968 0 20.3286207119827 41.3585971183337 +2 4840 963 364 20.3286207119827 41.3585971183337 +0 + +0101000 ++5465 265 -5464 265 * +Ed + 3.37494307091536e-05 1 1 0 +1 2053 0 12.7011375183 18.9654628814995 +2 4841 969 0 12.7011375183 18.9654628814995 +4 C0 968 0 969 0 +2 4842 968 0 12.7011375183 18.9654628814995 +2 4843 964 364 12.7011375183 18.9654628814995 +0 + +0101000 ++5463 0 -5462 265 * +Ed + 4.31536983574335e-05 1 1 0 +1 2054 0 0 12.7011375183 +2 4844 970 0 0 12.7011375183 +4 C0 968 0 970 0 +2 4845 968 0 0 12.7011375183 +2 4846 964 364 0 12.7011375183 +0 + +0101000 +-5463 0 +5461 0 * +Ed + 1.47652551736998e-05 1 1 0 +1 2052 0 41.3585971183337 46.7550592545 +2 4838 967 0 41.3585971183337 46.7550592545 +4 C0 968 0 967 0 +2 4839 968 0 41.3585971183337 46.7550592545 +2 4847 964 364 41.3585971183337 46.7550592545 +0 + +0101000 ++5464 265 -5461 0 * +Ed + 1e-07 1 1 0 +1 2055 0 6.08182698809629 6.48454001498188 +2 4848 965 0 6.08182698809629 6.48454001498188 +2 4849 964 0 6.08182698809629 6.48454001498188 +4 CN 965 0 964 0 +0 + +0101000 ++5462 363 -5479 363 * +Ed + 1e-07 1 1 0 +1 2056 0 1.36943838952319 1.77215491420083 +2 4850 966 0 1.36943838952319 1.77215491420083 +2 4851 965 0 1.36943838952319 1.77215491420083 +4 CN 966 0 965 0 +0 + +0101000 ++5460 363 -5478 363 * +Ed + 3.37415590111113e-05 1 1 0 +1 2053 0 18.9654628814995 39.0604407234565 +2 4841 969 0 18.9654628814995 39.0604407234565 +4 C0 968 0 969 0 +2 4842 968 0 18.9654628814995 39.0604407234565 +2 4852 965 364 18.9654628814995 39.0604407234565 +0 + +0101000 ++5462 265 -5460 265 * +Ed + 1.46427182527138e-05 1 1 0 +1 2052 0 19.0180652276 20.3286207119827 +2 4838 967 0 19.0180652276 20.3286207119827 +4 C0 968 0 967 0 +2 4839 968 0 19.0180652276 20.3286207119827 +2 4853 966 364 19.0180652276 20.3286207119827 +0 + +0101000 ++5459 0 -5465 265 * +Ed + 2.01866289544114e-05 1 1 0 +1 2057 0 0 19.0180652276 +2 4854 971 0 0 19.0180652276 +4 C0 968 0 971 0 +2 4855 968 0 0 19.0180652276 +2 4856 966 364 0 19.0180652276 +0 + +0101000 ++5458 0 -5459 0 * +Ed + 3.37415590111113e-05 1 1 0 +1 2053 0 39.0604407234565 40.7224764486 +2 4841 969 0 39.0604407234565 40.7224764486 +4 C0 968 0 969 0 +2 4842 968 0 39.0604407234565 40.7224764486 +2 4857 966 364 39.0604407234565 40.7224764486 +0 + +0101000 ++5460 265 -5458 0 * +Ed + 1e-07 1 1 0 +1 1901 0 -7.99999999994658 -4.93999999999401 +2 4464 468 0 -7.99999999994658 -4.93999999999401 +2 4465 466 0 -7.99999999994658 -4.93999999999401 +4 CN 468 0 466 0 +0 + +0101000 ++6183 222 -5470 365 * +Ed + 1e-07 1 1 0 +1 1902 0 -7.99999999994688 -4.93999999999436 +2 4466 468 0 -7.99999999994688 -4.93999999999436 +2 4467 466 0 -7.99999999994688 -4.93999999999436 +4 CN 468 0 466 0 +0 + +0101000 ++6182 222 -5469 365 * +Ed + 9.8e-08 1 1 0 +1 2058 352 1.01507184785744e-09 5.99387754758598 +2 4858 957 352 1.01507184785744e-09 5.99387754758598 +2 4859 955 352 1.01507184785744e-09 5.99387754758598 +4 CN 957 352 955 352 +0 + +0101000 ++5467 352 -5494 366 * +Ed + 9.8e-08 1 1 0 +1 2059 352 6.59107986953189e-09 5.99387755980166 +2 4860 957 352 6.59107986953189e-09 5.99387755980166 +2 4861 955 352 6.59107986953189e-09 5.99387755980166 +4 CN 957 352 955 352 +0 + +0101000 ++5466 352 -5495 366 * +Ed + 1e-07 1 1 0 +1 2060 0 5.92666324225966 7.49745997717827 +2 4862 691 0 5.92666324225966 7.49745997717827 +4 C0 691 0 968 0 +2 4863 968 0 5.92666324225966 7.49745997717827 +0 + +0101000 ++5457 0 -5456 0 * +Ed + 1e-07 1 1 0 +1 2061 0 1.21427466999868 4.3558670815535 +2 4864 686 0 1.21427466999868 4.3558670815535 +4 C0 968 0 686 0 +2 4865 968 0 1.21427466999868 4.3558670815535 +0 + +0101000 ++5456 0 -5455 0 * +Ed + 1e-07 1 1 0 +1 2062 0 4.3558670815535 5.92666324225966 +2 4866 687 0 4.3558670815535 5.92666324225966 +4 C0 687 0 968 0 +2 4867 968 0 4.3558670815535 5.92666324225966 +0 + +0101000 ++5455 0 -5457 0 * +Ed + 0.00106324543301387 1 1 0 +1 2063 0 0 1 +2 4868 466 359 0 1 +2 4869 944 106 0 1 +0 + +0101000 ++5454 0 -5453 0 * +Ed + 0.00106324543301387 1 1 0 +1 2064 0 0 1 +2 4870 466 359 0 1 +2 4871 944 106 0 1 +0 + +0101000 ++5452 0 -5454 0 * +Ed + 0.00106324543301387 1 1 0 +1 2065 0 0 1 +2 4872 468 359 0 1 +2 4873 944 106 0 1 +0 + +0101000 ++5453 0 -5452 0 * +Ed + 1e-07 1 1 0 +1 1408 0 10.0000000059763 10.9999999984853 +2 3283 691 0 10.0000000059763 10.9999999984853 +2 3284 687 0 10.0000000059763 10.9999999984853 +4 CN 691 0 687 0 +0 + +0101000 ++5633 265 -5457 0 * +Ed + 1e-07 1 1 0 +1 1411 0 10.0000000082495 10.9999999985 +2 3296 691 0 10.0000000082495 10.9999999985 +2 3297 686 0 10.0000000082495 10.9999999985 +4 G2 691 0 686 0 +0 + +0101000 ++5634 265 -5456 0 * +Ed + 1e-07 1 1 0 +1 1401 0 10.0000000040038 10.9999999912882 +2 3259 687 0 10.0000000040038 10.9999999912882 +2 3260 686 0 10.0000000040038 10.9999999912882 +4 G2 687 0 686 0 +0 + +0101000 ++5631 265 -5455 0 * +Ed + 1e-07 1 1 0 +1 1901 0 -4.93400000007155 0.999999997553419 +2 4464 468 0 -4.93400000007155 0.999999997553419 +2 4465 466 0 -4.93400000007155 0.999999997553419 +4 CN 468 0 466 0 +0 + +0101000 ++5453 365 -6181 222 * +Ed + 1e-07 1 1 0 +1 1902 0 -4.93400000007191 0.999999997553119 +2 4466 468 0 -4.93400000007191 0.999999997553119 +2 4467 466 0 -4.93400000007191 0.999999997553119 +4 CN 468 0 466 0 +0 + +0101000 ++5452 365 -6180 222 * +Ed + 1e-07 1 1 0 +1 2066 0 0 6.25 +2 4874 533 0 0 6.25 +2 4875 537 0 0 6.25 +4 C2 533 0 537 0 +0 + +0101000 ++6084 368 -6084 369 * +Ed + 1e-07 1 1 0 +1 2067 0 0 6.25 +2 4876 533 0 0 6.25 +2 4877 537 0 0 6.25 +4 C2 533 0 537 0 +0 + +0101000 ++6085 368 -6085 369 * +Ed + 1e-07 1 1 0 +1 2068 0 3.14159265358979 6.28318530717958 +2 4878 472 354 3.14159265358979 6.28318530717958 +2 4879 532 370 3.14159265358979 6.28318530717958 +0 + +0101000 ++5451 0 -5450 0 * +Ed + 1e-07 1 1 0 +1 2069 0 -1.77635683940025e-15 3.14159265358979 +2 4880 474 354 -1.77635683940025e-15 3.14159265358979 +2 4881 532 370 -1.77635683940025e-15 3.14159265358979 +0 + +0101000 ++5450 0 -5451 0 * +Ed + 1e-07 1 1 0 +1 1901 0 10.5000000018534 12 +2 4464 468 0 10.5000000018534 12 +2 4465 466 0 10.5000000018534 12 +4 CN 468 0 466 0 +0 + +0101000 ++6172 222 -5577 0 * +Ed + 1e-07 1 1 0 +1 1902 0 10.5000000018531 12 +2 4466 468 0 10.5000000018531 12 +2 4467 466 0 10.5000000018531 12 +4 CN 468 0 466 0 +0 + +0101000 ++6173 222 -5576 0 * +Ed + 1e-07 1 1 0 +1 1929 0 24.7499999200685 34 +2 4541 474 0 24.7499999200685 34 +2 4542 472 0 24.7499999200685 34 +4 CN 474 0 472 0 +0 + +0101000 ++5451 360 -5531 0 * +Ed + 1e-07 1 1 0 +1 1928 0 24.7499999200685 34 +2 4539 474 0 24.7499999200685 34 +2 4540 472 0 24.7499999200685 34 +4 CN 474 0 472 0 +0 + +0101000 ++5450 360 -5530 0 * +Ed + 1e-07 1 1 0 +1 2070 0 2.78507058917886 5.92666324099538 +2 4882 972 0 2.78507058917886 5.92666324099538 +4 C0 688 0 972 0 +2 4883 688 0 2.78507058917886 5.92666324099538 +0 + +0101000 ++5449 0 -5448 0 * +Ed + 1e-07 1 1 0 +1 2071 0 5.92666324099538 9.06825589635844 +2 4884 973 0 5.92666324099538 9.06825589635844 +4 C0 688 0 973 0 +2 4885 688 0 5.92666324099538 9.06825589635844 +0 + +0101000 ++5448 0 -5449 0 * +Ed + 1e-07 1 1 0 +1 2072 0 -11.0000000045923 -9.99999999411534 +2 4886 973 0 -11.0000000045923 -9.99999999411534 +2 4887 972 0 -11.0000000045923 -9.99999999411534 +4 G2 973 0 972 0 +0 + +0101000 ++5449 0 -5447 265 * +Ed + 1.05263800668904e-07 1 1 0 +1 1986 0 6.16601827851211 6.28318530717959 +2 4680 472 0 6.16601827851211 6.28318530717959 +4 C0 472 0 939 0 +2 4681 939 0 6.16601827851211 6.28318530717959 +2 4888 972 371 6.16601827851211 6.28318530717959 +0 + +0101000 ++5447 360 -5512 0 * +Ed + 1.05128057171298e-07 1 1 0 +1 1985 0 0 3.02442562479431 +2 4677 474 0 0 3.02442562479431 +4 C0 474 0 939 0 +2 4678 939 0 0 3.02442562479431 +2 4889 972 371 0 3.02442562479431 +0 + +0101000 ++5512 0 -5446 360 * +Ed + 1e-07 1 1 0 +1 2073 0 -10.999999999452 -9.99999998948024 +2 4890 973 0 -10.999999999452 -9.99999998948024 +2 4891 972 0 -10.999999999452 -9.99999998948024 +4 CN 973 0 972 0 +0 + +0101000 ++5448 0 -5446 265 * +Ed + 1.05263814567846e-07 1 1 0 +1 1985 0 3.02442562479431 3.14159265358979 +2 4677 474 0 3.02442562479431 3.14159265358979 +4 C0 474 0 939 0 +2 4678 939 0 3.02442562479431 3.14159265358979 +2 4892 973 371 3.02442562479431 3.14159265358979 +0 + +0101000 ++5446 360 -5514 0 * +Ed + 1.05128057171298e-07 1 1 0 +1 1986 0 3.14159265358979 6.16601827851211 +2 4680 472 0 3.14159265358979 6.16601827851211 +4 C0 472 0 939 0 +2 4681 939 0 3.14159265358979 6.16601827851211 +2 4893 973 371 3.14159265358979 6.16601827851211 +0 + +0101000 ++5514 0 -5447 360 * +Ed + 5e-06 1 1 0 +1 2074 0 0 1 +2 4894 965 357 0 1 +2 4895 974 0 0 1 +2 4896 975 0 0 1 +2 4897 975 373 0 1 +2 4898 976 0 0 1 +2 4899 976 375 0 1 +2 4900 977 0 0 1 +0 + +0101000 ++5445 0 -5444 0 * +Ed + 1e-07 1 1 0 +1 2075 205 0.0886074070385078 4.00000002891494 +2 4901 978 205 0.0886074070385078 4.00000002891494 +2 4902 974 205 0.0886074070385078 4.00000002891494 +4 G2 978 205 974 205 +0 + +0101000 ++5445 205 -5443 205 * +Ed + 5e-06 1 1 0 +1 2076 0 0 1 +2 4903 964 357 0 1 +2 4904 974 0 0 1 +2 4905 979 0 0 1 +2 4906 979 373 0 1 +2 4907 980 0 0 1 +2 4908 980 375 0 1 +2 4909 977 0 0 1 +0 + +0101000 ++5444 0 -5442 0 * +Ed + 5.9287169298288e-05 1 1 0 +1 2077 0 0.939764836332133 0.999928170824465 +2 4910 976 0 0.939764836332133 0.999928170824465 +2 4911 460 104 0.939764836332133 0.999928170824465 +2 4912 974 0 0.939764836332133 0.999928170824465 +0 + +0101000 ++5441 0 -5443 0 * +Ed + 5e-06 1 1 0 +1 2078 0 0 1 +2 4913 963 357 0 1 +2 4914 974 0 0 1 +2 4915 981 0 0 1 +2 4916 981 373 0 1 +2 4917 982 0 0 1 +2 4918 982 375 0 1 +2 4919 977 0 0 1 +0 + +0101000 ++5442 0 -5440 0 * +Ed + 9.92869168977291e-06 1 1 0 +1 2079 0 0 0.97212613894305 +2 4920 974 0 0 0.97212613894305 +2 4921 460 104 0 0.97212613894305 +0 + +0101000 ++5439 0 -5441 0 * +Ed + 1e-07 1 1 0 +1 2080 205 0.0886111731012357 4.00000002801749 +2 4922 978 205 0.0886111731012357 4.00000002801749 +2 4923 974 205 0.0886111731012357 4.00000002801749 +4 CN 978 205 974 205 +0 + +0101000 ++5440 205 -5439 205 * +Ed + 5e-06 1 1 0 +1 2081 0 0.214214143921552 1 +2 4924 974 0 0.214214143921552 1 +2 4925 976 0 0.214214143921552 1 +0 + +0101000 ++5441 0 -5438 0 * +Ed + 5e-06 1 1 0 +1 2082 0 0 1 +2 4926 963 357 0 1 +2 4927 978 0 0 1 +2 4928 983 0 0 1 +2 4929 983 373 0 1 +2 4930 984 0 0 1 +2 4931 984 375 0 1 +2 4932 977 0 0 1 +0 + +0101000 ++5440 0 -5437 0 * +Ed + 5e-06 1 1 0 +1 2083 0 0 1 +2 4933 966 357 0 1 +2 4934 978 0 0 1 +2 4935 985 0 0 1 +2 4936 985 373 0 1 +2 4937 986 0 0 1 +2 4938 986 375 0 1 +2 4939 977 0 0 1 +0 + +0101000 ++5437 0 -5436 0 * +Ed + 0.000109711051982417 1 1 0 +1 2084 0 0 0.000891435720265788 +2 4940 982 0 0 0.000891435720265788 +2 4941 460 104 0 0.000891435720265788 +2 4942 978 0 0 0.000891435720265788 +0 + +0101000 ++5435 0 -5439 0 * +Ed + 5e-06 1 1 0 +1 2085 0 0 1 +2 4943 965 357 0 1 +2 4944 978 0 0 1 +2 4945 987 0 0 1 +2 4946 987 373 0 1 +2 4947 988 0 0 1 +2 4948 988 375 0 1 +2 4949 977 0 0 1 +0 + +0101000 ++5436 0 -5445 0 * +Ed + 0.000105180662035592 1 1 0 +1 2086 0 0.939807297007926 1 +2 4950 984 0 0.939807297007926 1 +2 4951 460 104 0.939807297007926 1 +2 4952 978 0 0.939807297007926 1 +0 + +0101000 ++5434 0 -5435 0 * +Ed + 5.58120392271964e-05 1 1 0 +1 2087 0 3.32880592081779e-05 0.972078701692425 +2 4953 978 0 3.32880592081779e-05 0.972078701692425 +2 4954 460 104 3.32880592081779e-05 0.972078701692425 +0 + +0101000 ++5433 0 -5434 0 * +Ed + 0.000109711040122395 1 1 0 +1 2077 0 0.999928170824465 1 +2 4910 976 0 0.999928170824465 1 +2 4911 460 104 0.999928170824465 1 +2 4955 978 0 0.999928170824465 1 +0 + +0101000 ++5443 0 -5433 0 * +Ed + 5e-06 1 1 0 +1 2088 0 0 0.788810798689788 +2 4956 978 0 0 0.788810798689788 +2 4957 984 0 0 0.788810798689788 +0 + +0101000 ++5432 0 -5434 0 * +Ed + 1e-07 1 1 0 +1 1929 0 -2.91139054470514 0.999996683894142 +2 4541 474 0 -2.91139054470514 0.999996683894142 +2 4542 472 0 -2.91139054470514 0.999996683894142 +4 CN 474 0 472 0 +0 + +0101000 ++5431 360 -5430 360 * +Ed + 5e-06 1 1 0 +1 2089 0 3.14159265358979 6.28318530717959 +2 4958 472 354 3.14159265358979 6.28318530717959 +2 4959 977 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++5431 0 -5429 0 * +Ed + 5e-06 1 1 0 +1 2090 0 0 1 +2 4960 472 354 0 1 +2 4961 460 104 0 1 +0 + +0101000 ++5428 0 -5430 0 * +Ed + 1e-07 1 1 0 +1 1928 0 -2.91139090018717 1.00000335340091 +2 4539 474 0 -2.91139090018717 1.00000335340091 +2 4540 472 0 -2.91139090018717 1.00000335340091 +4 CN 474 0 472 0 +0 + +0101000 ++5429 360 -5427 360 * +Ed + 5e-06 1 1 0 +1 2091 0 0 1 +2 4962 472 354 0 1 +2 4963 460 104 0 1 +0 + +0101000 ++5427 0 -5428 0 * +Ed + 5e-06 1 1 0 +1 2092 0 -8.88178419700125e-16 3.14159265358979 +2 4964 474 354 -8.88178419700125e-16 3.14159265358979 +2 4965 977 0 -8.88178419700125e-16 3.14159265358979 +0 + +0101000 ++5429 0 -5431 0 * +Ed + 5e-06 1 1 0 +1 2093 0 0 1 +2 4966 474 354 0 1 +2 4967 460 104 0 1 +0 + +0101000 ++5430 0 -5427 0 * +Ed + 0.000147465507805619 1 1 0 +1 2094 0 0 23.2284108621 +2 4968 989 0 0 23.2284108621 +4 C0 990 0 989 0 +0 + +0101000 ++5426 0 -5425 0 * +Ed + 0.000146300237986001 1 1 0 +1 2095 0 23.228411154773 46.4568494322 +2 4969 991 0 23.228411154773 46.4568494322 +4 C0 990 0 991 0 +0 + +0101000 ++5425 0 -5426 0 * +Ed + 0.000115610210714907 1 1 0 +1 2096 0 0 20.7135541454 +2 4970 992 0 0 20.7135541454 +4 C0 990 0 992 0 +0 + +0101000 ++5424 0 -5423 0 * +Ed + 0.000117158242767242 1 1 0 +1 2097 0 20.7135541454 41.4270515719 +2 4971 993 0 20.7135541454 41.4270515719 +4 C0 990 0 993 0 +0 + +0101000 ++5423 0 -5424 0 * +Ed + 0.000178406034850481 1 1 0 +1 2098 0 0 16.33628179865 +2 4972 994 0 0 16.33628179865 +2 4973 989 0 0 16.33628179865 +4 G1 994 0 989 0 +0 + +0101000 ++5422 0 -5421 0 * +Ed + 1e-07 1 1 0 +1 2099 0 0 20 +2 4974 991 0 0 20 +2 4975 989 0 0 20 +4 C2 991 0 989 0 +0 + +0101000 ++5425 0 -5421 0 * +Ed + 1e-07 1 1 0 +1 2100 0 0 20 +2 4976 991 0 0 20 +2 4977 989 0 0 20 +4 C2 991 0 989 0 +0 + +0101000 ++5426 0 -5422 0 * +Ed + 0.000178405992835988 1 1 0 +1 2101 0 16.33628179865 32.6725635973 +2 4978 995 0 16.33628179865 32.6725635973 +2 4979 991 0 16.33628179865 32.6725635973 +4 G1 995 0 991 0 +0 + +0101000 ++5421 0 -5422 0 * +Ed + 1e-07 1 1 0 +1 2102 0 0 20 +2 4980 993 0 0 20 +2 4981 992 0 0 20 +4 G2 993 0 992 0 +0 + +0101000 ++5423 0 -5420 0 * +Ed + 1e-07 1 1 0 +1 2103 0 3.23543275249e-14 20 +2 4982 993 0 3.23543275249e-14 20 +2 4983 992 0 3.23543275249e-14 20 +4 G2 993 0 992 0 +0 + +0101000 ++5424 0 -5419 0 * +Ed + 0.000204877614737297 1 1 0 +1 2104 0 0 16.3362817987 +2 4984 996 0 0 16.3362817987 +2 4985 992 0 0 16.3362817987 +4 G1 996 0 992 0 +0 + +0101000 ++5419 0 -5420 0 * +Ed + 0.000204877753411801 1 1 0 +1 2105 0 16.3362817987 32.6725635973 +2 4986 997 0 16.3362817987 32.6725635973 +2 4987 993 0 16.3362817987 32.6725635973 +4 G1 997 0 993 0 +0 + +0101000 ++5420 0 -5419 0 * +Ed + 2.75520856670084e-06 1 1 0 +1 2106 0 0 31.4575637262 +2 4988 995 0 0 31.4575637262 +2 4989 994 0 0 31.4575637262 +4 C1 995 0 994 0 +0 + +0101000 ++5422 0 -5418 0 * +Ed + 1e-07 1 1 0 +1 2107 0 0 16.33628179865 +2 4990 998 0 0 16.33628179865 +2 4991 994 0 0 16.33628179865 +4 G1 998 0 994 0 +0 + +0101000 ++5418 0 -5417 0 * +Ed + 1e-07 1 1 0 +1 2108 0 0 31.4575637262 +2 4992 995 0 0 31.4575637262 +2 4993 994 0 0 31.4575637262 +4 C2 995 0 994 0 +0 + +0101000 ++5421 0 -5417 0 * +Ed + 1e-07 1 1 0 +1 2109 0 16.33628179865 32.6725635973 +2 4994 999 0 16.33628179865 32.6725635973 +2 4995 995 0 16.33628179865 32.6725635973 +4 G1 999 0 995 0 +0 + +0101000 ++5417 0 -5418 0 * +Ed + 0.000243281226490678 1 1 0 +1 2110 0 -15.7287818631 15.7287818631 +2 4996 997 0 -15.7287818631 15.7287818631 +2 4997 996 0 -15.7287818631 15.7287818631 +4 C2 997 0 996 0 +0 + +0101000 ++5416 0 -5420 0 * +Ed + 0.000243858188189171 1 1 0 +1 2111 0 -15.7287818631 15.7287818631 +2 4998 997 0 -15.7287818631 15.7287818631 +2 4999 996 0 -15.7287818631 15.7287818631 +4 G1 997 0 996 0 +0 + +0101000 ++5415 0 -5419 0 * +Ed + 0.000204877405218111 1 1 0 +1 2112 0 0 16.3362817987 +2 5000 1000 0 0 16.3362817987 +2 5001 996 0 0 16.3362817987 +4 G1 1000 0 996 0 +0 + +0101000 ++5415 0 -5416 0 * +Ed + 0.00020487755083004 1 1 0 +1 2113 0 16.3362817987 32.6725635973 +2 5002 1001 0 16.3362817987 32.6725635973 +2 5003 997 0 16.3362817987 32.6725635973 +4 G1 1001 0 997 0 +0 + +0101000 ++5416 0 -5415 0 * +Ed + 8.80657518771165e-06 1 1 0 +1 2114 0 0 23.1073202242693 +2 5004 998 0 0 23.1073202242693 +4 C0 1002 0 998 0 +2 5005 1002 0 0 23.1073202242693 +2 5006 842 270 0 23.1073202242693 +0 + +0101000 ++5414 0 -5413 272 * +Ed + 8.26000834172286e-06 1 1 0 +1 2114 0 23.1073202242693 23.2284108616 +2 5004 998 0 23.1073202242693 23.2284108616 +4 C0 1002 0 998 0 +2 5005 1002 0 23.1073202242693 23.2284108616 +2 5007 844 270 23.1073202242693 23.2284108616 +0 + +0101000 ++5413 272 -5412 0 * +Ed + 1e-07 1 1 0 +1 2115 0 0 10 +2 5008 999 0 0 10 +2 5009 998 0 0 10 +4 G2 999 0 998 0 +0 + +0101000 ++5417 0 -5412 0 * +Ed + 1e-07 1 1 0 +1 2116 0 0 10 +2 5010 999 0 0 10 +2 5011 998 0 0 10 +4 G2 999 0 998 0 +0 + +0101000 ++5418 0 -5414 0 * +Ed + 1.30485406273806e-05 1 1 0 +1 2117 0 23.2284111545931 46.2800942378307 +2 5012 999 0 23.2284111545931 46.2800942378307 +4 C0 1002 0 999 0 +2 5013 1002 0 23.2284111545931 46.2800942378307 +2 5014 844 270 23.2284111545931 46.2800942378307 +0 + +0101000 ++5412 0 -5411 270 * +Ed + 1.26326246481729e-05 1 1 0 +1 2117 0 46.2800942378307 46.4568494355 +2 5012 999 0 46.2800942378307 46.4568494355 +4 C0 1002 0 999 0 +2 5013 1002 0 46.2800942378307 46.4568494355 +2 5015 842 270 46.2800942378307 46.4568494355 +0 + +0101000 ++5411 270 -5414 0 * +Ed + 1e-07 1 1 0 +1 2118 0 0 10 +2 5016 1001 0 0 10 +2 5017 1000 0 0 10 +4 C2 1001 0 1000 0 +0 + +0101000 ++5416 0 -5410 0 * +Ed + 1e-07 1 1 0 +1 2119 0 0 10 +2 5018 1001 0 0 10 +2 5019 1000 0 0 10 +4 G2 1001 0 1000 0 +0 + +0101000 ++5415 0 -5409 0 * +Ed + 0.000117158371443087 1 1 0 +1 2120 0 20.713544667 20.8182369400293 +2 5020 1000 0 20.713544667 20.8182369400293 +4 C0 1002 0 1000 0 +2 5021 1002 0 20.713544667 20.8182369400293 +2 5022 815 270 20.713544667 20.8182369400293 +0 + +0101000 ++5410 0 -5408 272 * +Ed + 0.000119973430398339 1 1 0 +1 2120 0 20.8182369400293 41.427042093 +2 5020 1000 0 20.8182369400293 41.427042093 +4 C0 1002 0 1000 0 +2 5021 1002 0 20.8182369400293 41.427042093 +2 5023 816 270 20.8182369400293 41.427042093 +0 + +0101000 ++5408 272 -5409 0 * +Ed + 0.000114662224317074 1 1 0 +1 2121 0 0 0.165950884779378 +2 5024 1001 0 0 0.165950884779378 +4 C0 1002 0 1001 0 +2 5025 1002 0 0 0.165950884779378 +2 5026 816 270 0 0.165950884779378 +0 + +0101000 ++5409 0 -5407 274 * +Ed + 0.000114662224317074 1 1 0 +1 2121 0 0.165950884779378 20.713544667 +2 5024 1001 0 0.165950884779378 20.713544667 +4 C0 1002 0 1001 0 +2 5025 1002 0 0.165950884779378 20.713544667 +2 5027 815 270 0.165950884779378 20.713544667 +0 + +0101000 ++5407 274 -5410 0 * +Ed + 1e-07 1 1 0 +1 2122 0 0 12.2376468326292 +2 5028 844 0 0 12.2376468326292 +2 5029 844 304 0 12.2376468326292 +2 5030 842 0 0 12.2376468326292 +2 5031 842 305 0 12.2376468326292 +2 5032 848 0 0 12.2376468326292 +0 + +0101000 ++5411 0 -5621 286 * +Ed + 1.00002083778633e-07 1 1 0 +1 2122 0 0 12.2376468326292 +2 5028 844 0 0 12.2376468326292 +2 5029 844 304 0 12.2376468326292 +2 5030 842 0 0 12.2376468326292 +2 5031 842 305 0 12.2376468326292 +2 5032 848 0 0 12.2376468326292 +2 5033 844 305 0 12.2376468326292 +0 + +0101000 ++5413 307 -5618 307 * +Ed + 1e-07 1 1 0 +1 2123 0 0 11.9999999999999 +2 5034 815 0 0 11.9999999999999 +2 5035 815 304 0 11.9999999999999 +2 5036 816 0 0 11.9999999999999 +2 5037 816 305 0 11.9999999999999 +2 5038 848 0 0 11.9999999999999 +0 + +0101000 ++5701 286 -5407 286 * +Ed + 1.00003885364693e-07 1 1 0 +1 2123 0 0 11.9999999999999 +2 5034 815 0 0 11.9999999999999 +2 5035 815 304 0 11.9999999999999 +2 5036 816 0 0 11.9999999999999 +2 5037 816 305 0 11.9999999999999 +2 5038 848 0 0 11.9999999999999 +2 5039 815 305 0 11.9999999999999 +0 + +0101000 ++5668 307 -5408 307 * +Ed + 8.25997372949342e-06 1 1 0 +1 2124 0 0 23.2284108616 +2 5040 1003 0 0 23.2284108616 +4 C0 1004 0 1003 0 +0 + +0101000 ++5406 0 -5405 0 * +Ed + 1.2632738525863e-05 1 1 0 +1 2125 0 23.2284111538069 46.4568494317 +2 5041 1005 0 23.2284111538069 46.4568494317 +4 C0 1004 0 1005 0 +0 + +0101000 ++5405 0 -5406 0 * +Ed + 0.000115467346954254 1 1 0 +1 2126 0 0 20.7135118961 +2 5042 1006 0 0 20.7135118961 +4 C0 1004 0 1006 0 +0 + +0101000 ++5404 0 -5403 0 * +Ed + 0.000115411512919117 1 1 0 +1 2127 0 20.7135118961 41.4266346477 +2 5043 1007 0 20.7135118961 41.4266346477 +4 C0 1004 0 1007 0 +0 + +0101000 ++5403 0 -5404 0 * +Ed + 1e-07 1 1 0 +1 2128 0 0 16.33628179865 +2 5044 1008 0 0 16.33628179865 +2 5045 1003 0 0 16.33628179865 +4 G1 1008 0 1003 0 +0 + +0101000 ++5402 0 -5401 0 * +Ed + 1e-07 1 1 0 +1 2129 0 0 20 +2 5046 1005 0 0 20 +2 5047 1003 0 0 20 +4 C2 1005 0 1003 0 +0 + +0101000 ++5405 0 -5401 0 * +Ed + 1e-07 1 1 0 +1 2130 0 0 20 +2 5048 1005 0 0 20 +2 5049 1003 0 0 20 +4 G2 1005 0 1003 0 +0 + +0101000 ++5406 0 -5402 0 * +Ed + 1e-07 1 1 0 +1 2131 0 16.33628179865 32.6725635973 +2 5050 1009 0 16.33628179865 32.6725635973 +2 5051 1005 0 16.33628179865 32.6725635973 +4 G1 1009 0 1005 0 +0 + +0101000 ++5401 0 -5402 0 * +Ed + 1e-07 1 1 0 +1 2132 0 0 20 +2 5052 1007 0 0 20 +2 5053 1006 0 0 20 +4 G2 1007 0 1006 0 +0 + +0101000 ++5403 0 -5400 0 * +Ed + 1e-07 1 1 0 +1 2133 0 0 20 +2 5054 1007 0 0 20 +2 5055 1006 0 0 20 +4 G2 1007 0 1006 0 +0 + +0101000 ++5404 0 -5399 0 * +Ed + 0.000204877570815576 1 1 0 +1 2134 0 0 16.3362817987 +2 5056 1010 0 0 16.3362817987 +2 5057 1006 0 0 16.3362817987 +4 G1 1010 0 1006 0 +0 + +0101000 ++5399 0 -5400 0 * +Ed + 0.000204877589426257 1 1 0 +1 2135 0 16.3362817987 32.6725635973 +2 5058 1011 0 16.3362817987 32.6725635973 +2 5059 1007 0 16.3362817987 32.6725635973 +4 G1 1011 0 1007 0 +0 + +0101000 ++5400 0 -5399 0 * +Ed + 3.93616019492242e-07 1 1 0 +1 2136 0 0 31.4575700058 +2 5060 1009 0 0 31.4575700058 +2 5061 1008 0 0 31.4575700058 +4 C1 1009 0 1008 0 +0 + +0101000 ++5402 0 -5398 0 * +Ed + 1e-07 1 1 0 +1 2137 0 0 16.33628179865 +2 5062 1012 0 0 16.33628179865 +2 5063 1008 0 0 16.33628179865 +4 G1 1012 0 1008 0 +0 + +0101000 ++5398 0 -5397 0 * +Ed + 1e-07 1 1 0 +1 2138 0 0 31.4575700058 +2 5064 1009 0 0 31.4575700058 +2 5065 1008 0 0 31.4575700058 +4 C2 1009 0 1008 0 +0 + +0101000 ++5401 0 -5397 0 * +Ed + 1e-07 1 1 0 +1 2139 0 16.33628179865 32.6725635973 +2 5066 1013 0 16.33628179865 32.6725635973 +2 5067 1009 0 16.33628179865 32.6725635973 +4 G1 1013 0 1009 0 +0 + +0101000 ++5397 0 -5398 0 * +Ed + 0.000243630759207995 1 1 0 +1 2140 0 -15.7287850029 15.7287850029 +2 5068 1011 0 -15.7287850029 15.7287850029 +2 5069 1010 0 -15.7287850029 15.7287850029 +4 C2 1011 0 1010 0 +0 + +0101000 ++5396 0 -5400 0 * +Ed + 0.000243541928351953 1 1 0 +1 2141 0 -15.7287850029 15.7287850029 +2 5070 1011 0 -15.7287850029 15.7287850029 +2 5071 1010 0 -15.7287850029 15.7287850029 +4 C1 1011 0 1010 0 +0 + +0101000 ++5395 0 -5399 0 * +Ed + 0.000204877538259923 1 1 0 +1 2142 0 0 16.3362817987 +2 5072 1014 0 0 16.3362817987 +2 5073 1010 0 0 16.3362817987 +4 G1 1014 0 1010 0 +0 + +0101000 ++5395 0 -5396 0 * +Ed + 0.000204877558332366 1 1 0 +1 2143 0 16.3362817987 32.6725635973 +2 5074 1015 0 16.3362817987 32.6725635973 +2 5075 1011 0 16.3362817987 32.6725635973 +4 G1 1015 0 1011 0 +0 + +0101000 ++5396 0 -5395 0 * +Ed + 8.8062982555544e-06 1 1 0 +1 2144 0 0 23.1073202258341 +2 5076 1012 0 0 23.1073202258341 +4 C0 1016 0 1012 0 +2 5077 1016 0 0 23.1073202258341 +2 5078 834 270 0 23.1073202258341 +0 + +0101000 ++5394 0 -5393 272 * +Ed + 8.25998816027384e-06 1 1 0 +1 2144 0 23.1073202258341 23.2284108624 +2 5076 1012 0 23.1073202258341 23.2284108624 +4 C0 1016 0 1012 0 +2 5077 1016 0 23.1073202258341 23.2284108624 +2 5079 836 270 23.1073202258341 23.2284108624 +0 + +0101000 ++5393 272 -5392 0 * +Ed + 1e-07 1 1 0 +1 2145 0 0 10 +2 5080 1013 0 0 10 +2 5081 1012 0 0 10 +4 G2 1013 0 1012 0 +0 + +0101000 ++5397 0 -5392 0 * +Ed + 1e-07 1 1 0 +1 2146 0 0 10 +2 5082 1013 0 0 10 +2 5083 1012 0 0 10 +4 G2 1013 0 1012 0 +0 + +0101000 ++5398 0 -5394 0 * +Ed + 1.30496315383939e-05 1 1 0 +1 2147 0 23.2284111549424 46.2800942330158 +2 5084 1013 0 23.2284111549424 46.2800942330158 +4 C0 1016 0 1013 0 +2 5085 1016 0 23.2284111549424 46.2800942330158 +2 5086 836 270 23.2284111549424 46.2800942330158 +0 + +0101000 ++5392 0 -5391 270 * +Ed + 1.26327415965872e-05 1 1 0 +1 2147 0 46.2800942330158 46.4568494321 +2 5084 1013 0 46.2800942330158 46.4568494321 +4 C0 1016 0 1013 0 +2 5085 1016 0 46.2800942330158 46.4568494321 +2 5087 834 270 46.2800942330158 46.4568494321 +0 + +0101000 ++5391 270 -5394 0 * +Ed + 1e-07 1 1 0 +1 2148 0 0 10 +2 5088 1015 0 0 10 +2 5089 1014 0 0 10 +4 C2 1015 0 1014 0 +0 + +0101000 ++5396 0 -5390 0 * +Ed + 1e-07 1 1 0 +1 2149 0 0 10 +2 5090 1015 0 0 10 +2 5091 1014 0 0 10 +4 G2 1015 0 1014 0 +0 + +0101000 ++5395 0 -5389 0 * +Ed + 0.000117158272928246 1 1 0 +1 2150 0 20.7135446679 20.8182369397049 +2 5092 1014 0 20.7135446679 20.8182369397049 +4 C0 1016 0 1014 0 +2 5093 1016 0 20.7135446679 20.8182369397049 +2 5094 817 270 20.7135446679 20.8182369397049 +0 + +0101000 ++5390 0 -5388 272 * +Ed + 0.000119973330099934 1 1 0 +1 2150 0 20.8182369397049 41.4270420955 +2 5092 1014 0 20.8182369397049 41.4270420955 +4 C0 1016 0 1014 0 +2 5093 1016 0 20.8182369397049 41.4270420955 +2 5095 818 270 20.8182369397049 41.4270420955 +0 + +0101000 ++5388 272 -5389 0 * +Ed + 0.000114662278947722 1 1 0 +1 2151 0 0 0.165950886118048 +2 5096 1015 0 0 0.165950886118048 +4 C0 1016 0 1015 0 +2 5097 1016 0 0 0.165950886118048 +2 5098 818 270 0 0.165950886118048 +0 + +0101000 ++5389 0 -5407 275 * +Ed + 0.000114662278947722 1 1 0 +1 2151 0 0.165950886118048 20.7135446679 +2 5096 1015 0 0.165950886118048 20.7135446679 +4 C0 1016 0 1015 0 +2 5097 1016 0 0.165950886118048 20.7135446679 +2 5099 817 270 0.165950886118048 20.7135446679 +0 + +0101000 ++5407 275 -5390 0 * +Ed + 1e-07 1 1 0 +1 2152 0 0 12.2376468326249 +2 5100 836 0 0 12.2376468326249 +2 5101 836 311 0 12.2376468326249 +2 5102 834 0 0 12.2376468326249 +2 5103 834 312 0 12.2376468326249 +2 5104 849 0 0 12.2376468326249 +0 + +0101000 ++5391 0 -5621 284 * +Ed + 1.00000931953135e-07 1 1 0 +1 2152 0 0 12.2376468326249 +2 5100 836 0 0 12.2376468326249 +2 5101 836 311 0 12.2376468326249 +2 5102 834 0 0 12.2376468326249 +2 5103 834 312 0 12.2376468326249 +2 5104 849 0 0 12.2376468326249 +2 5105 836 312 0 12.2376468326249 +0 + +0101000 ++5393 314 -5620 314 * +Ed + 1e-07 1 1 0 +1 2153 0 0 11.9999999999999 +2 5106 817 0 0 11.9999999999999 +2 5107 817 311 0 11.9999999999999 +2 5108 818 0 0 11.9999999999999 +2 5109 818 312 0 11.9999999999999 +2 5110 849 0 0 11.9999999999999 +0 + +0101000 ++5701 284 -5407 284 * +Ed + 1.00000909501641e-07 1 1 0 +1 2153 0 0 11.9999999999999 +2 5106 817 0 0 11.9999999999999 +2 5107 817 311 0 11.9999999999999 +2 5108 818 0 0 11.9999999999999 +2 5109 818 312 0 11.9999999999999 +2 5110 849 0 0 11.9999999999999 +2 5111 817 312 0 11.9999999999999 +0 + +0101000 ++5665 314 -5388 314 * +Ed + 1e-07 1 1 0 +1 2154 0 -29.5 29.5 +2 5112 1017 0 -29.5 29.5 +2 5113 1018 0 -29.5 29.5 +4 CN 1017 0 1018 0 +0 + +0101000 ++5387 0 -5386 0 * +Ed + 1e-07 1 1 0 +1 2155 0 6.04211106520581 9.18370371881427 +2 5114 1017 0 6.04211106520581 9.18370371881427 +2 5115 1019 0 6.04211106520581 9.18370371881427 +4 G1 1017 0 1019 0 +0 + +0101000 ++5387 0 -5385 0 * +Ed + 1e-07 1 1 0 +1 2156 0 -29.5 29.5 +2 5116 1017 0 -29.5 29.5 +2 5117 1018 0 -29.5 29.5 +4 CN 1017 0 1018 0 +0 + +0101000 ++5385 0 -5384 0 * +Ed + 1.02123598565663e-07 1 1 0 +1 2157 0 6.04211106520581 6.3765972521143 +2 5118 1017 0 6.04211106520581 6.3765972521143 +4 C0 1017 0 1020 0 +2 5119 1020 0 6.04211106520581 6.3765972521143 +2 5120 830 376 6.04211106520581 6.3765972521143 +0 + +0101000 ++5386 0 -5383 376 * +Ed + 1.04058672467866e-07 1 1 0 +1 2157 0 6.3765972521143 9.18370371881427 +2 5118 1017 0 6.3765972521143 9.18370371881427 +4 C0 1017 0 1020 0 +2 5119 1020 0 6.3765972521143 9.18370371881427 +2 5121 832 376 6.3765972521143 9.18370371881427 +0 + +0101000 ++5383 376 -5384 0 * +Ed + 1e-07 1 1 0 +1 2158 0 2.90051841163468 6.04211106520581 +2 5122 1018 0 2.90051841163468 6.04211106520581 +2 5123 1021 0 2.90051841163468 6.04211106520581 +4 G1 1018 0 1021 0 +0 + +0101000 ++5385 0 -5387 0 * +Ed + 1.02132382294291e-07 1 1 0 +1 2159 0 2.90051841163468 3.2350046000134 +2 5124 1018 0 2.90051841163468 3.2350046000134 +4 C0 1018 0 1020 0 +2 5125 1020 0 2.90051841163468 3.2350046000134 +2 5126 832 376 2.90051841163468 3.2350046000134 +0 + +0101000 ++5384 0 -5382 377 * +Ed + 1.040489537433e-07 1 1 0 +1 2159 0 3.2350046000134 6.04211106520581 +2 5124 1018 0 3.2350046000134 6.04211106520581 +4 C0 1018 0 1020 0 +2 5125 1020 0 3.2350046000134 6.04211106520581 +2 5127 830 376 3.2350046000134 6.04211106520581 +0 + +0101000 ++5382 377 -5386 0 * +Ed + 1e-07 1 1 0 +1 2160 0 3.02105553260695 6.16264818619559 +2 5128 1019 0 3.02105553260695 6.16264818619559 +2 5129 1022 0 3.02105553260695 6.16264818619559 +4 G1 1019 0 1022 0 +0 + +0101000 ++5381 0 -5380 0 * +Ed + 1e-07 1 1 0 +1 2161 0 0 1.5707963267949 +2 5130 1019 0 0 1.5707963267949 +2 5131 1021 0 0 1.5707963267949 +4 CN 1019 0 1021 0 +0 + +0101000 ++5385 0 -5380 0 * +Ed + 1e-07 1 1 0 +1 2162 0 0 1.5707963267949 +2 5132 1019 0 0 1.5707963267949 +2 5133 1021 0 0 1.5707963267949 +4 CN 1019 0 1021 0 +0 + +0101000 ++5387 0 -5381 0 * +Ed + 1e-07 1 1 0 +1 2163 0 0 12.2376468326251 +2 5134 830 0 0 12.2376468326251 +2 5135 830 295 0 12.2376468326251 +2 5136 832 0 0 12.2376468326251 +2 5137 832 297 0 12.2376468326251 +2 5138 847 0 0 12.2376468326251 +0 + +0101000 ++5383 0 -6029 283 * +Ed + 1.0000275518615e-07 1 1 0 +1 2163 0 0 12.2376468326251 +2 5134 830 0 0 12.2376468326251 +2 5135 830 295 0 12.2376468326251 +2 5136 832 0 0 12.2376468326251 +2 5137 832 297 0 12.2376468326251 +2 5138 847 0 0 12.2376468326251 +2 5139 830 297 0 12.2376468326251 +0 + +0101000 ++5382 300 -5622 300 * +Ed + 1e-07 1 1 0 +1 2164 0 6.16264818619559 9.30424083978654 +2 5140 1021 0 6.16264818619559 9.30424083978654 +2 5141 1023 0 6.16264818619559 9.30424083978654 +4 G1 1021 0 1023 0 +0 + +0101000 ++5380 0 -5381 0 * +Ed + 1e-07 1 1 0 +1 2165 0 -26.4151477048827 26.4151477049868 +2 5142 1022 0 -26.4151477048827 26.4151477049868 +2 5143 1023 0 -26.4151477048827 26.4151477049868 +4 CN 1022 0 1023 0 +0 + +0101000 ++5379 0 -5381 0 * +Ed + 1e-07 1 1 0 +1 2166 0 3.02105553260608 6.16264818619559 +2 5144 1022 0 3.02105553260608 6.16264818619559 +2 5145 1024 0 3.02105553260608 6.16264818619559 +4 G1 1022 0 1024 0 +0 + +0101000 ++5379 0 -5378 0 * +Ed + 1e-07 1 1 0 +1 2167 0 -26.4151477048825 26.4151477048818 +2 5146 1022 0 -26.4151477048825 26.4151477048818 +2 5147 1023 0 -26.4151477048825 26.4151477048818 +4 CN 1022 0 1023 0 +0 + +0101000 ++5378 0 -5380 0 * +Ed + 1e-07 1 1 0 +1 2168 0 6.16264818619559 9.30424083978567 +2 5148 1023 0 6.16264818619559 9.30424083978567 +2 5149 1025 0 6.16264818619559 9.30424083978567 +4 G1 1023 0 1025 0 +0 + +0101000 ++5378 0 -5379 0 * +Ed + 1e-07 1 1 0 +1 2169 0 1.5707963267949 4.71238898038469 +2 5150 1024 0 1.5707963267949 4.71238898038469 +2 5151 1026 0 1.5707963267949 4.71238898038469 +4 G1 1024 0 1026 0 +0 + +0101000 ++5377 0 -5376 0 * +Ed + 1e-07 1 1 0 +1 2170 0 1.5707963267949 3.14159265358979 +2 5152 1024 0 1.5707963267949 3.14159265358979 +2 5153 1025 0 1.5707963267949 3.14159265358979 +4 CN 1024 0 1025 0 +0 + +0101000 ++5378 0 -5376 0 * +Ed + 1e-07 1 1 0 +1 2171 0 1.5707963267949 3.14159265358979 +2 5154 1024 0 1.5707963267949 3.14159265358979 +2 5155 1025 0 1.5707963267949 3.14159265358979 +4 CN 1024 0 1025 0 +0 + +0101000 ++5379 0 -5377 0 * +Ed + 1.02128235928114e-07 1 1 0 +1 2172 0 6.04211106519996 6.37659725188908 +2 5156 1027 0 6.04211106519996 6.37659725188908 +4 C0 1027 0 1020 0 +2 5157 1020 0 6.04211106519996 6.37659725188908 +2 5158 814 376 6.04211106519996 6.37659725188908 +0 + +0101000 ++5375 0 -5374 378 * +Ed + 1.04053631253624e-07 1 1 0 +1 2173 0 3.23500460023508 6.04211106519996 +2 5159 1028 0 3.23500460023508 6.04211106519996 +4 C0 1028 0 1020 0 +2 5160 1020 0 3.23500460023508 6.04211106519996 +2 5161 814 376 3.23500460023508 6.04211106519996 +0 + +0101000 ++5373 377 -5375 0 * +Ed + 1e-07 1 1 0 +1 2174 0 0 12.0000000000005 +2 5162 814 0 0 12.0000000000005 +2 5163 814 295 0 12.0000000000005 +2 5164 813 0 0 12.0000000000005 +2 5165 813 297 0 12.0000000000005 +2 5166 847 0 0 12.0000000000005 +0 + +0101000 ++6076 283 -5374 283 * +Ed + 1.00002911805952e-07 1 1 0 +1 2174 0 0 12.0000000000005 +2 5162 814 0 0 12.0000000000005 +2 5163 814 295 0 12.0000000000005 +2 5164 813 0 0 12.0000000000005 +2 5165 813 297 0 12.0000000000005 +2 5166 847 0 0 12.0000000000005 +2 5167 814 297 0 12.0000000000005 +0 + +0101000 ++5671 300 -5373 300 * +Ed + 1.04053614626149e-07 1 1 0 +1 2172 0 6.37659725188908 9.18370371881641 +2 5156 1027 0 6.37659725188908 9.18370371881641 +4 C0 1027 0 1020 0 +2 5157 1020 0 6.37659725188908 9.18370371881641 +2 5168 813 376 6.37659725188908 9.18370371881641 +0 + +0101000 ++5374 378 -5372 0 * +Ed + 1.02128288979022e-07 1 1 0 +1 2173 0 2.90051841163683 3.23500460023508 +2 5159 1028 0 2.90051841163683 3.23500460023508 +4 C0 1028 0 1020 0 +2 5160 1020 0 2.90051841163683 3.23500460023508 +2 5169 813 376 2.90051841163683 3.23500460023508 +0 + +0101000 ++5372 0 -5373 377 * +Ed + 1e-07 1 1 0 +1 2175 0 4.71238898038469 7.85398163397448 +2 5170 1025 0 4.71238898038469 7.85398163397448 +2 5171 1029 0 4.71238898038469 7.85398163397448 +4 G1 1025 0 1029 0 +0 + +0101000 ++5376 0 -5377 0 * +Ed + 1e-07 1 1 0 +1 2176 0 -1.5 1.5 +2 5172 1026 0 -1.5 1.5 +2 5173 1029 0 -1.5 1.5 +4 CN 1026 0 1029 0 +0 + +0101000 ++5371 0 -5377 0 * +Ed + 1.00001266541181e-07 1 1 0 +1 2177 0 3.14159265358979 6.18977336150026 +2 5174 1026 0 3.14159265358979 6.18977336150026 +4 C0 1026 0 1030 0 +2 5175 1030 0 3.14159265358979 6.18977336150026 +2 5176 578 376 3.14159265358979 6.18977336150026 +0 + +0101000 ++5371 0 -5370 377 * +Ed + 1.00001380214404e-07 1 1 0 +1 2177 0 6.18977336150026 6.28318530717959 +2 5174 1026 0 6.18977336150026 6.28318530717959 +4 C0 1026 0 1030 0 +2 5175 1030 0 6.18977336150026 6.28318530717959 +2 5177 580 376 6.18977336150026 6.28318530717959 +0 + +0101000 ++5370 377 -5369 0 * +Ed + 1e-07 1 1 0 +1 2178 0 -1.5 1.5 +2 5178 1026 0 -1.5 1.5 +2 5179 1029 0 -1.5 1.5 +4 CN 1026 0 1029 0 +0 + +0101000 ++5369 0 -5376 0 * +Ed + 1e-07 1 1 0 +1 2179 0 -29.5 29.5 +2 5180 1027 0 -29.5 29.5 +2 5181 1028 0 -29.5 29.5 +4 CN 1027 0 1028 0 +0 + +0101000 ++5368 0 -5375 0 * +Ed + 1e-07 1 1 0 +1 2180 0 6.04211106519996 9.18370371881641 +2 5182 1027 0 6.04211106519996 9.18370371881641 +2 5183 1031 0 6.04211106519996 9.18370371881641 +4 G1 1027 0 1031 0 +0 + +0101000 ++5368 0 -5367 0 * +Ed + 1e-07 1 1 0 +1 2181 0 -29.5 29.5 +2 5184 1027 0 -29.5 29.5 +2 5185 1028 0 -29.5 29.5 +4 CN 1027 0 1028 0 +0 + +0101000 ++5367 0 -5372 0 * +Ed + 1e-07 1 1 0 +1 2182 0 2.90051841163683 6.04211106519996 +2 5186 1028 0 2.90051841163683 6.04211106519996 +2 5187 1032 0 2.90051841163683 6.04211106519996 +4 G1 1028 0 1032 0 +0 + +0101000 ++5367 0 -5368 0 * +Ed + 1.00001511340434e-07 1 1 0 +1 2183 0 0 3.04818070791072 +2 5188 1029 0 0 3.04818070791072 +4 C0 1029 0 1030 0 +2 5189 1030 0 0 3.04818070791072 +2 5190 580 376 0 3.04818070791072 +0 + +0101000 ++5369 0 -5366 376 * +Ed + 1.00001067659916e-07 1 1 0 +1 2183 0 3.04818070791072 3.14159265358979 +2 5188 1029 0 3.04818070791072 3.14159265358979 +4 C0 1029 0 1030 0 +2 5189 1030 0 3.04818070791072 3.14159265358979 +2 5191 578 376 3.04818070791072 3.14159265358979 +0 + +0101000 ++5366 376 -5371 0 * +Ed + 1e-07 1 1 0 +1 2184 0 0 12.2376468326235 +2 5192 578 0 0 12.2376468326235 +2 5193 578 247 0 12.2376468326235 +2 5194 580 0 0 12.2376468326235 +2 5195 580 248 0 12.2376468326235 +2 5196 585 0 0 12.2376468326235 +0 + +0101000 ++5366 0 -6029 242 * +Ed + 1.00001503750853e-07 1 1 0 +1 2184 0 0 12.2376468326235 +2 5192 578 0 0 12.2376468326235 +2 5193 578 247 0 12.2376468326235 +2 5194 580 0 0 12.2376468326235 +2 5195 580 248 0 12.2376468326235 +2 5196 585 0 0 12.2376468326235 +2 5197 578 248 0 12.2376468326235 +0 + +0101000 ++5370 250 -6025 250 * +Ed + 1e-07 1 1 0 +1 2185 0 3.02105553260311 6.16264818619201 +2 5198 1031 0 3.02105553260311 6.16264818619201 +2 5199 1033 0 3.02105553260311 6.16264818619201 +4 G1 1031 0 1033 0 +0 + +0101000 ++5365 0 -5364 0 * +Ed + 1e-07 1 1 0 +1 2186 0 0 1.5707963267949 +2 5200 1031 0 0 1.5707963267949 +2 5201 1032 0 0 1.5707963267949 +4 CN 1031 0 1032 0 +0 + +0101000 ++5367 0 -5364 0 * +Ed + 1e-07 1 1 0 +1 2187 0 0 1.5707963267949 +2 5202 1031 0 0 1.5707963267949 +2 5203 1032 0 0 1.5707963267949 +4 CN 1031 0 1032 0 +0 + +0101000 ++5368 0 -5365 0 * +Ed + 1e-07 1 1 0 +1 2188 0 6.16264818619201 9.3042408397827 +2 5204 1032 0 6.16264818619201 9.3042408397827 +2 5205 1034 0 6.16264818619201 9.3042408397827 +4 G1 1032 0 1034 0 +0 + +0101000 ++5364 0 -5365 0 * +Ed + 1e-07 1 1 0 +1 2189 0 -26.4151477048827 26.4151477048851 +2 5206 1033 0 -26.4151477048827 26.4151477048851 +2 5207 1034 0 -26.4151477048827 26.4151477048851 +4 CN 1033 0 1034 0 +0 + +0101000 ++5363 0 -5365 0 * +Ed + 1e-07 1 1 0 +1 2190 0 3.02105553260222 6.16264818619171 +2 5208 1033 0 3.02105553260222 6.16264818619171 +2 5209 1035 0 3.02105553260222 6.16264818619171 +4 G1 1033 0 1035 0 +0 + +0101000 ++5363 0 -5362 0 * +Ed + 1e-07 1 1 0 +1 2191 0 -26.4151477048815 26.4151477048815 +2 5210 1033 0 -26.4151477048815 26.4151477048815 +2 5211 1034 0 -26.4151477048815 26.4151477048815 +4 CN 1033 0 1034 0 +0 + +0101000 ++5362 0 -5364 0 * +Ed + 1e-07 1 1 0 +1 2192 0 6.16264818619171 9.30424083978181 +2 5212 1034 0 6.16264818619171 9.30424083978181 +2 5213 1036 0 6.16264818619171 9.30424083978181 +4 G1 1034 0 1036 0 +0 + +0101000 ++5362 0 -5363 0 * +Ed + 1.00001141765018e-07 1 1 0 +1 2193 0 3.04818070791237 3.14159265358979 +2 5214 1037 0 3.04818070791237 3.14159265358979 +4 C0 1037 0 1030 0 +2 5215 1030 0 3.04818070791237 3.14159265358979 +2 5216 545 376 3.04818070791237 3.14159265358979 +0 + +0101000 ++5374 379 -5361 0 * +Ed + 1.00001219409132e-07 1 1 0 +1 2194 0 3.14159265358979 6.18977336150203 +2 5217 1038 0 3.14159265358979 6.18977336150203 +4 C0 1038 0 1030 0 +2 5218 1030 0 3.14159265358979 6.18977336150203 +2 5219 545 376 3.14159265358979 6.18977336150203 +0 + +0101000 ++5361 0 -5360 377 * +Ed + 1e-07 1 1 0 +1 2195 0 0 12.0000000000005 +2 5220 545 0 0 12.0000000000005 +2 5221 545 247 0 12.0000000000005 +2 5222 544 0 0 12.0000000000005 +2 5223 544 248 0 12.0000000000005 +2 5224 585 0 0 12.0000000000005 +0 + +0101000 ++6076 242 -5374 242 * +Ed + 1.00000909501641e-07 1 1 0 +1 2195 0 0 12.0000000000005 +2 5220 545 0 0 12.0000000000005 +2 5221 545 247 0 12.0000000000005 +2 5222 544 0 0 12.0000000000005 +2 5223 544 248 0 12.0000000000005 +2 5224 585 0 0 12.0000000000005 +2 5225 545 248 0 12.0000000000005 +0 + +0101000 ++6079 250 -5360 250 * +Ed + 1.00001412551096e-07 1 1 0 +1 2193 0 0 3.04818070791237 +2 5214 1037 0 0 3.04818070791237 +4 C0 1037 0 1030 0 +2 5215 1030 0 0 3.04818070791237 +2 5226 544 376 0 3.04818070791237 +0 + +0101000 ++5359 0 -5374 379 * +Ed + 1.00001308657889e-07 1 1 0 +1 2194 0 6.18977336150203 6.28318530717959 +2 5217 1038 0 6.18977336150203 6.28318530717959 +4 C0 1038 0 1030 0 +2 5218 1030 0 6.18977336150203 6.28318530717959 +2 5227 544 376 6.18977336150203 6.28318530717959 +0 + +0101000 ++5360 377 -5359 0 * +Ed + 1e-07 1 1 0 +1 2196 0 1.5707963267949 4.71238898038469 +2 5228 1035 0 1.5707963267949 4.71238898038469 +2 5229 1038 0 1.5707963267949 4.71238898038469 +4 G1 1035 0 1038 0 +0 + +0101000 ++5358 0 -5357 0 * +Ed + 1e-07 1 1 0 +1 2197 0 1.5707963267949 3.14159265358979 +2 5230 1035 0 1.5707963267949 3.14159265358979 +2 5231 1036 0 1.5707963267949 3.14159265358979 +4 CN 1035 0 1036 0 +0 + +0101000 ++5362 0 -5357 0 * +Ed + 1e-07 1 1 0 +1 2198 0 1.5707963267949 3.14159265358979 +2 5232 1035 0 1.5707963267949 3.14159265358979 +2 5233 1036 0 1.5707963267949 3.14159265358979 +4 CN 1035 0 1036 0 +0 + +0101000 ++5363 0 -5358 0 * +Ed + 1e-07 1 1 0 +1 2199 0 4.71238898038469 7.85398163397448 +2 5234 1036 0 4.71238898038469 7.85398163397448 +2 5235 1037 0 4.71238898038469 7.85398163397448 +4 G1 1036 0 1037 0 +0 + +0101000 ++5357 0 -5358 0 * +Ed + 1e-07 1 1 0 +1 2200 0 -1.5 1.5 +2 5236 1038 0 -1.5 1.5 +2 5237 1037 0 -1.5 1.5 +4 CN 1038 0 1037 0 +0 + +0101000 ++5359 0 -5357 0 * +Ed + 1e-07 1 1 0 +1 2201 0 -1.5 1.5 +2 5238 1038 0 -1.5 1.5 +2 5239 1037 0 -1.5 1.5 +4 CN 1038 0 1037 0 +0 + +0101000 ++5361 0 -5358 0 * +Ed + 1.01986282538939e-07 1 1 0 +1 2157 0 6.04211106520581 8.08701991943861 +2 5118 1017 0 6.04211106520581 8.08701991943861 +4 C0 1017 0 1020 0 +2 5119 1020 0 6.04211106520581 8.08701991943861 +2 5240 840 380 6.04211106520581 8.08701991943861 +0 + +0101000 ++5386 0 -5356 380 * +Ed + 1.01725572013949e-07 1 1 0 +1 2157 0 8.08701991943861 9.18370371881427 +2 5118 1017 0 8.08701991943861 9.18370371881427 +4 C0 1017 0 1020 0 +2 5119 1020 0 8.08701991943861 9.18370371881427 +2 5241 838 380 8.08701991943861 9.18370371881427 +0 + +0101000 ++5356 380 -5384 0 * +Ed + 1.01997185149124e-07 1 1 0 +1 2159 0 2.90051841163468 4.94542726659783 +2 5124 1018 0 2.90051841163468 4.94542726659783 +4 C0 1018 0 1020 0 +2 5125 1020 0 2.90051841163468 4.94542726659783 +2 5242 838 380 2.90051841163468 4.94542726659783 +0 + +0101000 ++5384 0 -5355 381 * +Ed + 1.01714755144342e-07 1 1 0 +1 2159 0 4.94542726659783 6.04211106520581 +2 5124 1018 0 4.94542726659783 6.04211106520581 +4 C0 1018 0 1020 0 +2 5125 1020 0 4.94542726659783 6.04211106520581 +2 5243 840 380 4.94542726659783 6.04211106520581 +0 + +0101000 ++5355 381 -5386 0 * +Ed + 1e-07 1 1 0 +1 2202 0 0 12.2376468326237 +2 5244 840 0 0 12.2376468326237 +2 5245 840 290 0 12.2376468326237 +2 5246 838 0 0 12.2376468326237 +2 5247 838 291 0 12.2376468326237 +2 5248 846 0 0 12.2376468326237 +0 + +0101000 ++5356 0 -5621 285 * +Ed + 1.00001007733043e-07 1 1 0 +1 2202 0 0 12.2376468326237 +2 5244 840 0 0 12.2376468326237 +2 5245 840 290 0 12.2376468326237 +2 5246 838 0 0 12.2376468326237 +2 5247 838 291 0 12.2376468326237 +2 5248 846 0 0 12.2376468326237 +2 5249 840 291 0 12.2376468326237 +0 + +0101000 ++5355 293 -5619 293 * +Ed + 1.01991754586973e-07 1 1 0 +1 2172 0 6.04211106519996 8.08701991932483 +2 5156 1027 0 6.04211106519996 8.08701991932483 +4 C0 1027 0 1020 0 +2 5157 1020 0 6.04211106519996 8.08701991932483 +2 5250 795 380 6.04211106519996 8.08701991932483 +0 + +0101000 ++5375 0 -5407 382 * +Ed + 1.01720189683346e-07 1 1 0 +1 2173 0 4.94542726670872 6.04211106519996 +2 5159 1028 0 4.94542726670872 6.04211106519996 +4 C0 1028 0 1020 0 +2 5160 1020 0 4.94542726670872 6.04211106519996 +2 5251 795 380 4.94542726670872 6.04211106519996 +0 + +0101000 ++5354 381 -5375 0 * +Ed + 1e-07 1 1 0 +1 2203 0 0 11.9999999999999 +2 5252 795 0 0 11.9999999999999 +2 5253 795 290 0 11.9999999999999 +2 5254 794 0 0 11.9999999999999 +2 5255 794 291 0 11.9999999999999 +2 5256 846 0 0 11.9999999999999 +0 + +0101000 ++5701 285 -5407 285 * +Ed + 1.00000454972809e-07 1 1 0 +1 2203 0 0 11.9999999999999 +2 5252 795 0 0 11.9999999999999 +2 5253 795 290 0 11.9999999999999 +2 5254 794 0 0 11.9999999999999 +2 5255 794 291 0 11.9999999999999 +2 5256 846 0 0 11.9999999999999 +2 5257 795 291 0 11.9999999999999 +0 + +0101000 ++5700 293 -5354 293 * +Ed + 1.01720148415589e-07 1 1 0 +1 2172 0 8.08701991932483 9.18370371881641 +2 5156 1027 0 8.08701991932483 9.18370371881641 +4 C0 1027 0 1020 0 +2 5157 1020 0 8.08701991932483 9.18370371881641 +2 5258 794 380 8.08701991932483 9.18370371881641 +0 + +0101000 ++5407 382 -5372 0 * +Ed + 1.01991712376293e-07 1 1 0 +1 2173 0 2.90051841163683 4.94542726670872 +2 5159 1028 0 2.90051841163683 4.94542726670872 +4 C0 1028 0 1020 0 +2 5160 1020 0 2.90051841163683 4.94542726670872 +2 5259 794 380 2.90051841163683 4.94542726670872 +0 + +0101000 ++5372 0 -5354 381 * +Ed + 1.00002108935847e-07 1 1 0 +1 2177 0 3.14159265358979 4.47935069454619 +2 5174 1026 0 3.14159265358979 4.47935069454619 +4 C0 1026 0 1030 0 +2 5175 1030 0 3.14159265358979 4.47935069454619 +2 5260 573 380 3.14159265358979 4.47935069454619 +0 + +0101000 ++5371 0 -5353 380 * +Ed + 1.00001852827254e-07 1 1 0 +1 2177 0 4.47935069454619 6.28318530717959 +2 5174 1026 0 4.47935069454619 6.28318530717959 +4 C0 1026 0 1030 0 +2 5175 1030 0 4.47935069454619 6.28318530717959 +2 5261 571 380 4.47935069454619 6.28318530717959 +0 + +0101000 ++5353 380 -5369 0 * +Ed + 1.00001872860621e-07 1 1 0 +1 2183 0 0 1.33775804095575 +2 5188 1029 0 0 1.33775804095575 +4 C0 1029 0 1030 0 +2 5189 1030 0 0 1.33775804095575 +2 5262 571 380 0 1.33775804095575 +0 + +0101000 ++5369 0 -5352 381 * +Ed + 1.0000217786148e-07 1 1 0 +1 2183 0 1.33775804095575 3.14159265358979 +2 5188 1029 0 1.33775804095575 3.14159265358979 +4 C0 1029 0 1030 0 +2 5189 1030 0 1.33775804095575 3.14159265358979 +2 5263 573 380 1.33775804095575 3.14159265358979 +0 + +0101000 ++5352 381 -5371 0 * +Ed + 1e-07 1 1 0 +1 2204 0 0 12.2376468326235 +2 5264 571 0 0 12.2376468326235 +2 5265 571 254 0 12.2376468326235 +2 5266 573 0 0 12.2376468326235 +2 5267 573 255 0 12.2376468326235 +2 5268 586 0 0 12.2376468326235 +0 + +0101000 ++5353 0 -6029 238 * +Ed + 1.00003802641308e-07 1 1 0 +1 2204 0 0 12.2376468326235 +2 5264 571 0 0 12.2376468326235 +2 5265 571 254 0 12.2376468326235 +2 5266 573 0 0 12.2376468326235 +2 5267 573 255 0 12.2376468326235 +2 5268 586 0 0 12.2376468326235 +2 5269 571 255 0 12.2376468326235 +0 + +0101000 ++5352 257 -6028 257 * +Ed + 1.00002053598348e-07 1 1 0 +1 2194 0 3.14159265358979 4.47935069454758 +2 5217 1038 0 3.14159265358979 4.47935069454758 +4 C0 1038 0 1030 0 +2 5218 1030 0 3.14159265358979 4.47935069454758 +2 5270 569 380 3.14159265358979 4.47935069454758 +0 + +0101000 ++5361 0 -5374 383 * +Ed + 1.00002114548202e-07 1 1 0 +1 2193 0 1.33775804095698 3.14159265358979 +2 5214 1037 0 1.33775804095698 3.14159265358979 +4 C0 1037 0 1030 0 +2 5215 1030 0 1.33775804095698 3.14159265358979 +2 5271 569 380 1.33775804095698 3.14159265358979 +0 + +0101000 ++5351 381 -5361 0 * +Ed + 1e-07 1 1 0 +1 2205 0 0 12.0000000000005 +2 5272 570 0 0 12.0000000000005 +2 5273 570 254 0 12.0000000000005 +2 5274 569 0 0 12.0000000000005 +2 5275 569 255 0 12.0000000000005 +2 5276 586 0 0 12.0000000000005 +0 + +0101000 ++6076 238 -5374 238 * +Ed + 1.00001878381246e-07 1 1 0 +1 2205 0 0 12.0000000000005 +2 5272 570 0 0 12.0000000000005 +2 5273 570 254 0 12.0000000000005 +2 5274 569 0 0 12.0000000000005 +2 5275 569 255 0 12.0000000000005 +2 5276 586 0 0 12.0000000000005 +2 5277 570 255 0 12.0000000000005 +0 + +0101000 ++6036 257 -5351 257 * +Ed + 1.0000191074702e-07 1 1 0 +1 2194 0 4.47935069454758 6.28318530717959 +2 5217 1038 0 4.47935069454758 6.28318530717959 +4 C0 1038 0 1030 0 +2 5218 1030 0 4.47935069454758 6.28318530717959 +2 5278 570 380 4.47935069454758 6.28318530717959 +0 + +0101000 ++5374 383 -5359 0 * +Ed + 1.00001920335458e-07 1 1 0 +1 2193 0 0 1.33775804095698 +2 5214 1037 0 0 1.33775804095698 +4 C0 1037 0 1030 0 +2 5215 1030 0 0 1.33775804095698 +2 5279 570 380 0 1.33775804095698 +0 + +0101000 ++5359 0 -5351 381 * +Ed + 1e-07 1 1 0 +1 2206 0 -9.66723971862969e-10 5.99400000296068 +2 5280 515 0 -9.66723971862969e-10 5.99400000296068 +2 5281 514 0 -9.66723971862969e-10 5.99400000296068 +4 CN 515 0 514 0 +0 + +0101000 ++6113 0 -5350 384 * +Ed + 0.00257302987113288 1 1 0 +1 2207 0 4.16459315499921 7.30618580556536 +2 5282 515 0 4.16459315499921 7.30618580556536 +4 C0 515 0 518 0 +2 5283 1039 220 4.16459315499921 7.30618580556536 +2 5284 1039 385 4.16459315499921 7.30618580556536 +2 5285 518 0 4.16459315499921 7.30618580556536 +2 5286 1040 220 4.16459315499921 7.30618580556536 +2 5287 515 386 4.16459315499921 7.30618580556536 +0 + +0101000 ++5350 0 -5349 0 * +Ed + 1e-07 1 1 0 +1 2208 0 0 5.99400000151056 +2 5288 515 0 0 5.99400000151056 +2 5289 514 0 0 5.99400000151056 +4 G2 515 0 514 0 +0 + +0101000 ++6114 0 -5349 384 * +Ed + 0.0013841963058397 1 1 0 +1 2209 0 -4.71238898038 4.71238898038 +2 5290 514 0 -4.71238898038 4.71238898038 +4 C0 514 0 518 0 +2 5291 1041 220 -4.71238898038 4.71238898038 +2 5292 1041 385 -4.71238898038 4.71238898038 +2 5293 518 0 -4.71238898038 4.71238898038 +2 5294 1040 220 -4.71238898038 4.71238898038 +2 5295 514 386 -4.71238898038 4.71238898038 +0 + +0101000 ++5349 0 -5350 0 * +Ed + 0.000922806765201836 1 1 0 +1 2210 0 -8.88178419700125e-16 3.14159265358979 +2 5296 466 387 -8.88178419700125e-16 3.14159265358979 +2 5297 1040 116 -8.88178419700125e-16 3.14159265358979 +0 + +0101000 ++5348 0 -5347 0 * +Ed + 0.000922806765201836 1 1 0 +1 2211 0 -8.88178419700125e-16 3.14159265358979 +2 5298 468 387 -8.88178419700125e-16 3.14159265358979 +2 5299 1040 116 -8.88178419700125e-16 3.14159265358979 +0 + +0101000 ++5347 0 -5348 0 * +Ed + 1e-07 1 1 0 +1 1901 0 -4.99400000532524 0.999999998208973 +2 4464 468 0 -4.99400000532524 0.999999998208973 +2 4465 466 0 -4.99400000532524 0.999999998208973 +4 CN 468 0 466 0 +0 + +0101000 ++5348 388 -6109 223 * +Ed + 1e-07 1 1 0 +1 1902 0 -4.99400000714774 0.9999999982094 +2 4466 468 0 -4.99400000714774 0.9999999982094 +2 4467 466 0 -4.99400000714774 0.9999999982094 +4 CN 468 0 466 0 +0 + +0101000 ++5347 388 -6108 223 * +Ed + 1e-07 1 1 0 +1 2212 0 12.1032172980388 13.0000000029475 +4 C0 445 0 440 0 +2 5300 445 0 12.1032172980388 13.0000000029475 +2 5301 440 0 12.1032172980388 13.0000000029475 +0 + +0101000 ++6219 219 -5346 0 * +Ed + 1e-07 1 1 0 +1 2213 0 -12.4999999959044 12.4999999954959 +4 C0 445 0 1042 0 +2 5302 445 0 -12.4999999959044 12.4999999954959 +2 5303 1042 0 -12.4999999959044 12.4999999954959 +0 + +0101000 ++5346 0 -5345 0 * +Ed + 1e-07 1 1 0 +1 2214 0 12.117222905043 13.0000000032536 +4 C0 445 0 443 0 +2 5304 445 0 12.117222905043 13.0000000032536 +2 5305 443 0 12.117222905043 13.0000000032536 +0 + +0101000 ++6216 219 -5345 0 * +Ed + 1.03234875520214e-07 1 1 0 +1 2215 0 2.51210721483155 5.4829280546063 +4 C0 518 0 511 0 +2 5306 518 0 2.51210721483155 5.4829280546063 +2 5307 511 0 2.51210721483155 5.4829280546063 +2 5308 1043 389 2.51210721483155 5.4829280546063 +0 + +0101000 ++5344 220 -6123 0 * +Ed + 1e-07 1 1 0 +1 2216 0 5.35663106476054 5.35663109123072 +2 5309 511 390 5.35663106476054 5.35663109123072 +2 5310 1044 0 5.35663106476054 5.35663109123072 +0 + +0101000 ++5344 0 -5343 0 * +Ed + 1.5e-07 1 1 0 +1 2217 0 -7.99539120027656 -0.000356113857428536 +2 5311 511 390 -7.99539120027656 -0.000356113857428536 +2 5312 1045 0 -7.99539120027656 -0.000356113857428536 +0 + +0101000 ++5343 0 -5342 0 * +Ed + 1e-07 1 1 0 +1 2218 0 -2.99879026779302 2.99999999808701 +2 5313 512 0 -2.99879026779302 2.99999999808701 +4 G1 511 0 512 0 +2 5314 511 0 -2.99879026779302 2.99999999808701 +0 + +0101000 ++5342 220 -6118 0 * +Ed + 3.0313602442169e-05 1 1 0 +1 2219 0 -8.39063078885219 -0.00952263043504356 +2 5315 1046 0 -8.39063078885219 -0.00952263043504356 +4 C0 1046 0 1043 0 +2 5316 1043 0 -8.39063078885219 -0.00952263043504356 +2 5317 512 391 -8.39063078885219 -0.00952263043504356 +2 5318 518 391 -8.39063078885219 -0.00952263043504356 +0 + +0101000 ++5341 392 -5340 391 * +Ed + 1e-07 1 1 0 +1 2220 0 0.0869664341494478 1.83157575786294 +2 5319 512 390 0.0869664341494478 1.83157575786294 +2 5320 1045 0 0.0869664341494478 1.83157575786294 +0 + +0101000 ++5342 0 -5341 0 * +Ed + 1e-07 1 1 0 +1 2221 0 -2.99999999518732 2.99999999857091 +2 5321 512 0 -2.99999999518732 2.99999999857091 +4 G1 512 0 513 0 +2 5322 513 0 -2.99999999518732 2.99999999857091 +0 + +0101000 ++5340 0 -6117 0 * +Ed + 1.01844314947149e-07 1 1 0 +1 2222 0 -5.48292804241773 5.48292805613398 +4 C0 518 0 513 0 +2 5323 518 0 -5.48292804241773 5.48292805613398 +2 5324 513 0 -5.48292804241773 5.48292805613398 +2 5325 1043 389 -5.48292804241773 5.48292805613398 +0 + +0101000 ++5340 0 -6132 0 * +Ed + 1e-07 1 1 0 +1 2223 0 -2.99999999760416 3.00000000479595 +4 C0 440 0 1042 0 +2 5326 440 0 -2.99999999760416 3.00000000479595 +2 5327 1042 0 -2.99999999760416 3.00000000479595 +0 + +0101000 ++5339 0 -5346 0 * +Ed + 1e-07 1 1 0 +1 1076 0 12.1032172971941 13.0000000032531 +4 C0 518 0 440 0 +2 2524 518 0 12.1032172971941 13.0000000032531 +2 2525 440 0 12.1032172971941 13.0000000032531 +0 + +0101000 ++6220 220 -5339 0 * +Ed + 1e-07 1 1 0 +1 2224 0 -2.99999999808754 3.00000000479595 +4 C0 1042 0 443 0 +2 5328 443 0 -2.99999999808754 3.00000000479595 +2 5329 1042 0 -2.99999999808754 3.00000000479595 +0 + +0101000 ++5338 0 -5345 0 * +Ed + 1e-07 1 1 0 +1 2225 0 -12.4999999959044 12.4999999946755 +4 C0 518 0 1042 0 +2 5330 518 0 -12.4999999959044 12.4999999946755 +2 5331 1042 0 -12.4999999959044 12.4999999946755 +0 + +0101000 ++5339 0 -5338 0 * +Ed + 1e-07 1 1 0 +1 1077 0 12.117222904497 13.0000000029475 +4 C0 518 0 443 0 +2 2527 518 0 12.117222904497 13.0000000029475 +2 2528 443 0 12.117222904497 13.0000000029475 +0 + +0101000 ++6217 220 -5338 0 * +Ed + 1.0066252426625e-07 1 1 0 +1 2226 0 7.49587246283417 9.06825589640754 +2 5332 505 0 7.49587246283417 9.06825589640754 +4 C0 1043 0 505 0 +2 5333 1043 0 7.49587246283417 9.06825589640754 +2 5334 518 391 7.49587246283417 9.06825589640754 +0 + +0101000 ++6125 392 -5337 0 * +Ed + 1.00304529738824e-07 1 1 0 +1 2227 0 2.78507058935922 4.35427980941585 +2 5335 501 0 2.78507058935922 4.35427980941585 +4 C0 1043 0 501 0 +2 5336 1043 0 2.78507058935922 4.35427980941585 +2 5337 518 391 2.78507058935922 4.35427980941585 +0 + +0101000 ++5337 0 -6133 392 * +Ed + 3.02945492754406e-05 1 1 0 +1 2219 0 -0.00952263043504356 7.32792945449394 +2 5315 1046 0 -0.00952263043504356 7.32792945449394 +4 C0 1046 0 1043 0 +2 5316 1043 0 -0.00952263043504356 7.32792945449394 +0 + +0101000 ++5340 391 -5336 392 * +Ed + 0.00186594513361944 1 1 0 +1 2228 0 -63.9288302509623 -59.8451690604341 +2 5338 1043 393 -63.9288302509623 -59.8451690604341 +2 5339 1045 0 -63.9288302509623 -59.8451690604341 +0 + +0101000 ++5336 0 -5335 0 * +Ed + 1.5e-07 1 1 0 +1 2229 0 1.41607796802204 2.302004846173 +2 5340 1043 393 1.41607796802204 2.302004846173 +2 5341 1044 0 1.41607796802204 2.302004846173 +0 + +0101000 ++5335 0 -5344 0 * +Ed + 1e-07 1 1 0 +1 2230 0 3.00184806826982 3.88777497314047 +2 5342 1044 0 3.00184806826982 3.88777497314047 +2 5343 1045 0 3.00184806826982 3.88777497314047 +0 + +0101000 ++5335 0 -5343 0 * +Ed + 1e-07 1 1 0 +1 2231 0 1.83170742400898 4.45146794997921 +2 5344 1046 393 1.83170742400898 4.45146794997921 +2 5345 1045 0 1.83170742400898 4.45146794997921 +0 + +0101000 ++5341 0 -5336 0 * +Ed + 1e-07 1 1 0 +1 2232 0 1.77549001437723 4.91708266796702 +2 5346 1045 0 1.77549001437723 4.91708266796702 +2 5347 474 394 1.77549001437723 4.91708266796702 +0 + +0101000 ++5334 0 -5333 0 * +Ed + 1e-07 1 1 0 +1 2233 0 4.91708266796702 8.05867532155681 +2 5348 1045 0 4.91708266796702 8.05867532155681 +2 5349 472 394 4.91708266796702 8.05867532155681 +0 + +0101000 ++5333 0 -5334 0 * +Ed + 1e-07 1 1 0 +1 1901 0 10.499999997909 12 +2 4464 468 0 10.499999997909 12 +2 4465 466 0 10.499999997909 12 +4 CN 468 0 466 0 +0 + +0101000 ++6104 223 -5577 0 * +Ed + 1e-07 1 1 0 +1 1902 0 10.4999999979094 12 +2 4466 468 0 10.4999999979094 12 +2 4467 466 0 10.4999999979094 12 +4 CN 468 0 466 0 +0 + +0101000 ++6105 223 -5576 0 * +Ed + 1e-07 1 1 0 +1 2234 0 2.9999999943172 6.00000000095011 +2 5350 501 0 2.9999999943172 6.00000000095011 +2 5351 505 0 2.9999999943172 6.00000000095011 +4 G2 501 0 505 0 +0 + +0101000 ++6130 395 -5337 0 * +Ed + 0.000922806765201836 1 1 0 +1 2235 0 -8.88178419700125e-16 3.1415926535898 +2 5352 466 387 -8.88178419700125e-16 3.1415926535898 +2 5353 1040 0 -8.88178419700125e-16 3.1415926535898 +0 + +0101000 ++5332 0 -5331 0 * +Ed + 0.000922806765201836 1 1 0 +1 2236 0 2.94209105350206e-15 3.14159265358979 +2 5354 468 387 2.94209105350206e-15 3.14159265358979 +2 5355 1040 0 2.94209105350206e-15 3.14159265358979 +0 + +0101000 ++5331 0 -5332 0 * +Ed + 1e-07 1 1 0 +1 2237 0 4.6974152069318 10.9806005141114 +2 5356 1047 393 4.6974152069318 10.9806005141114 +2 5357 1044 0 4.6974152069318 10.9806005141114 +0 + +0101000 ++5330 0 -5330 0 * +Ed + 1e-07 1 1 0 +1 1928 0 3.00008531109489 8.99999999757526 +2 4539 474 0 3.00008531109489 8.99999999757526 +2 4540 472 0 3.00008531109489 8.99999999757526 +4 CN 474 0 472 0 +0 + +0101000 ++5334 396 -6139 397 * +Ed + 1e-07 1 1 0 +1 1929 0 3.00041211693198 8.99999999757526 +2 4541 474 0 3.00041211693198 8.99999999757526 +2 4542 472 0 3.00041211693198 8.99999999757526 +4 CN 474 0 472 0 +0 + +0101000 ++5333 396 -6136 397 * +Ed + 1e-07 1 1 0 +1 1901 0 -8.00000000389103 -5.00000000524769 +2 4464 468 0 -8.00000000389103 -5.00000000524769 +2 4465 466 0 -8.00000000389103 -5.00000000524769 +4 CN 468 0 466 0 +0 + +0101000 ++6122 223 -5332 388 * +Ed + 1e-07 1 1 0 +1 1902 0 -8.0000000038906 -5.00000000707019 +2 4466 468 0 -8.0000000038906 -5.00000000707019 +2 4467 466 0 -8.0000000038906 -5.00000000707019 +4 CN 468 0 466 0 +0 + +0101000 ++6121 223 -5331 388 * +Ed + 1e-07 1 1 0 +1 2238 0 20.9999761950034 24.9999762503779 +3 5358 5359CN 1044 0 20.9999761950034 24.9999762503779 +0 + +0101000 ++5329 0 -5330 0 * +Ed + 1e-07 1 1 0 +1 2239 0 4.69741520693058 10.9806005141102 +2 5360 1044 0 4.69741520693058 10.9806005141102 +2 5361 968 398 4.69741520693058 10.9806005141102 +0 + +0101000 ++5329 0 -5329 0 * +Ed + 1e-07 1 1 0 +1 1408 0 9.99999999492305 10.9999999984853 +2 3283 691 0 9.99999999492305 10.9999999984853 +2 3284 687 0 9.99999999492305 10.9999999984853 +4 CN 691 0 687 0 +0 + +0101000 ++5638 268 -5457 0 * +Ed + 1e-07 1 1 0 +1 1411 0 9.99999999719591 10.9999999985 +2 3296 691 0 9.99999999719591 10.9999999985 +2 3297 686 0 9.99999999719591 10.9999999985 +4 G2 691 0 686 0 +0 + +0101000 ++5639 268 -5456 0 * +Ed + 1e-07 1 1 0 +1 1401 0 9.99999999294922 10.9999999912882 +2 3259 687 0 9.99999999294922 10.9999999912882 +2 3260 686 0 9.99999999294922 10.9999999912882 +4 G2 687 0 686 0 +0 + +0101000 ++5636 268 -5455 0 * +Ed + 1e-07 1 1 0 +1 2240 0 0 6.25 +2 5362 538 0 0 6.25 +2 5363 534 0 0 6.25 +4 C2 538 0 534 0 +0 + +0101000 ++6084 399 -6084 400 * +Ed + 1e-07 1 1 0 +1 2241 0 0 6.25 +2 5364 538 0 0 6.25 +2 5365 534 0 0 6.25 +4 C2 538 0 534 0 +0 + +0101000 ++6085 399 -6085 400 * +Ed + 1e-07 1 1 0 +1 2242 0 3.14159265358979 6.28318530717959 +2 5366 472 394 3.14159265358979 6.28318530717959 +2 5367 532 401 3.14159265358979 6.28318530717959 +0 + +0101000 ++5328 0 -5327 0 * +Ed + 1e-07 1 1 0 +1 2243 0 5.27355945236093e-16 3.14159265358979 +2 5368 474 394 5.27355945236093e-16 3.14159265358979 +2 5369 532 401 5.27355945236093e-16 3.14159265358979 +0 + +0101000 ++5327 0 -5328 0 * +Ed + 1e-07 1 1 0 +1 1929 0 24.7499994212269 34 +2 4541 474 0 24.7499994212269 34 +2 4542 472 0 24.7499994212269 34 +4 CN 474 0 472 0 +0 + +0101000 ++5328 396 -5531 0 * +Ed + 1e-07 1 1 0 +1 1928 0 24.749999420639 34 +2 4539 474 0 24.749999420639 34 +2 4540 472 0 24.749999420639 34 +4 CN 474 0 472 0 +0 + +0101000 ++5327 396 -5530 0 * +Ed + 1.5e-07 1 1 0 +1 2244 0 1.65832298536385 4.71238897975685 +2 5370 1048 0 1.65832298536385 4.71238897975685 +2 5371 972 398 1.65832298536385 4.71238897975685 +0 + +0101000 ++5326 0 -5325 0 * +Ed + 1.00772375804954e-07 1 1 0 +1 1985 0 2.93689896600682 3.02442562555445 +2 4677 474 0 2.93689896600682 3.02442562555445 +4 C0 474 0 939 0 +2 4678 939 0 2.93689896600682 3.02442562555445 +2 5372 972 402 2.93689896600682 3.02442562555445 +0 + +0101000 ++5325 396 -5324 396 * +Ed + 1e-07 1 1 0 +1 2073 0 -10.999999999452 -9.99999999861908 +2 4890 973 0 -10.999999999452 -9.99999999861908 +2 4891 972 0 -10.999999999452 -9.99999999861908 +4 CN 973 0 972 0 +0 + +0101000 ++5448 0 -5324 268 * +Ed + 1e-07 1 1 0 +1 2072 0 -11.0000000045923 -10.000070274571 +2 4886 973 0 -11.0000000045923 -10.000070274571 +2 4887 972 0 -11.0000000045923 -10.000070274571 +4 G2 973 0 972 0 +0 + +0101000 ++5449 0 -5326 268 * +Ed + 1.01120259015417e-07 1 1 0 +1 1985 0 3.02442562555445 3.14159265358979 +2 4677 474 0 3.02442562555445 3.14159265358979 +4 C0 474 0 939 0 +2 4678 939 0 3.02442562555445 3.14159265358979 +2 5373 973 402 3.02442562555445 3.14159265358979 +0 + +0101000 ++5324 396 -5514 0 * +Ed + 1.03178426119662e-07 1 1 0 +1 1986 0 3.14159265358979 6.07849161959661 +2 4680 472 0 3.14159265358979 6.07849161959661 +4 C0 472 0 939 0 +2 4681 939 0 3.14159265358979 6.07849161959661 +2 5374 973 402 3.14159265358979 6.07849161959661 +0 + +0101000 ++5514 0 -5323 396 * +Ed + 1.5e-07 1 1 0 +1 2245 0 7.85398163460104 7.94150829297585 +2 5375 1048 0 7.85398163460104 7.94150829297585 +2 5376 973 398 7.85398163460104 7.94150829297585 +0 + +0101000 ++5323 0 -5326 0 * +Ed + 1.5e-07 1 1 0 +1 2246 0 -5 5 +2 5377 1048 0 -5 5 +2 5378 939 394 -5 5 +0 + +0101000 ++5325 0 -5323 0 * +Wi + +0101100 ++3221 0 -3225 0 -3220 0 +3219 0 * +Wi + +0101100 ++3218 0 -3217 0 +3216 0 +3215 0 * +Wi + +0101100 +-3223 0 -3281 0 +3229 0 +3214 0 * +Wi + +0101100 +-3227 0 -3284 0 +3232 0 +3213 0 * +Wi + +0101100 +-3237 0 +3212 0 -3306 0 +3308 0 -3211 0 -3210 0 * +Wi + +0101100 +-3243 0 -3310 0 +3249 0 +3209 0 * +Wi + +0101100 +-3247 0 -3313 0 +3253 0 +3208 0 * +Wi + +0101100 +-3251 0 +3316 0 +3207 0 -3206 0 * +Wi + +0101100 +-3216 0 +3205 0 -3207 0 -3320 0 * +Wi + +0101100 +-3218 0 -3321 0 +3219 0 +3204 0 * +Wi + +0101100 +-3203 403 -3596 404 -3202 398 +3201 403 * +Wi + +0101100 ++3202 398 -3598 404 -3200 398 +3199 403 * +Wi + +0101100 ++3200 398 -3606 404 +3198 403 +3197 403 * +Wi + +0101100 +-3198 403 -3608 404 -3196 398 +3195 403 * +Wi + +0101100 ++3196 398 -3616 404 +3203 403 +3194 403 * +Wi + +0101100 +-3193 403 -3617 404 -3192 405 +3191 403 * +Wi + +0101100 ++3192 405 -3619 404 -3190 405 +3189 403 * +Wi + +0101100 ++3190 405 -3625 404 +3188 403 +3187 403 * +Wi + +0101100 +-3188 403 -3627 404 -3186 405 +3185 403 * +Wi + +0101100 ++3186 405 -3635 404 +3193 403 +3184 403 * +Wi + +0101100 +-3183 403 -3636 404 -3182 406 +3181 403 * +Wi + +0101100 ++3182 406 -3638 404 +3180 406 +3179 403 * +Wi + +0101100 +-3180 406 -3644 404 +3178 403 +3177 403 * +Wi + +0101100 +-3178 403 -3646 404 +3176 406 +3175 403 * +Wi + +0101100 +-3176 406 -3654 404 +3183 403 +3174 403 * +Wi + +0101100 +-3224 403 +3173 403 +3715 404 -3283 403 * +Wi + +0101100 +-3228 403 +3282 403 +3658 404 -3286 403 * +Wi + +0101100 ++3172 403 +3171 403 +3662 404 * +Wi + +0101100 ++3287 403 +3170 403 -3172 403 +3665 404 * +Wi + +0101100 +-3169 403 -3291 403 +3669 404 * +Wi + +0101100 +-3231 403 +3285 403 +3661 404 -3171 403 -3170 403 +3288 403 +3290 403 +3169 403 +3674 404 -3168 403 +* +Wi + +0101100 ++3212 403 -3305 403 -3303 403 -3301 403 -3299 403 -3167 403 -3296 403 -3294 403 -3292 403 -3675 404 +-3168 403 +3234 403 * +Wi + +0101100 ++3298 403 -3167 403 -3297 403 +3679 404 * +Wi + +0101100 ++3166 403 +3165 403 +3211 403 -3309 403 +3683 404 * +Wi + +0101100 ++3164 403 +3163 403 -3166 403 +3686 404 * +Wi + +0101100 +-3162 403 -3164 403 +3689 404 * +Wi + +0101100 ++3161 403 -3693 404 -3162 403 +3163 403 +3165 403 -3210 403 +3240 403 * +Wi + +0101100 +-3244 403 +3161 403 +3700 404 -3312 403 * +Wi + +0101100 +-3248 403 +3311 403 +3704 404 -3315 403 * +Wi + +0101100 +-3252 403 +3314 403 +3708 404 +3317 403 * +Wi + +0101100 +-3318 403 +3753 404 +3323 403 -3215 403 * +Wi + +0101100 ++3173 403 -3728 404 -3322 403 +3220 403 * +Wi + +0101100 +-3217 403 +3205 403 +3204 403 -3206 403 -3221 403 -3250 403 -3222 403 +3208 403 +3214 403 -3246 403 +-3226 403 +3209 403 +3213 403 -3242 403 -3230 403 -3241 403 -3235 403 -3236 403 * +Wi + +0101100 +-3185 403 -3187 403 -3184 403 -3189 403 -3191 403 * +Wi + +0101100 +-3175 403 -3177 403 -3174 403 -3179 403 -3181 403 * +Wi + +0101100 ++3160 407 -3159 407 * +Wi + +0101100 +-3195 403 -3197 403 -3194 403 -3199 403 -3201 403 * +Wi + +0101100 +-3158 407 +3157 407 * +Wi + +0101100 +-3156 407 +3155 407 * +Wi + +0101100 +-3154 407 +3153 407 * +Wi + +0101100 ++3324 403 +3152 408 +3156 407 -3151 407 +3328 403 * +Wi + +0101100 ++3151 407 -3155 407 -3152 408 +3325 403 +3327 403 * +Wi + +0101100 ++3276 403 +3150 407 -3160 407 -3149 409 +3273 403 * +Wi + +0101100 ++3149 409 +3159 407 -3150 407 +3277 403 +3272 403 * +Wi + +0101100 ++3266 403 +3148 410 +3154 407 -3147 407 +3264 403 * +Wi + +0101100 ++3147 407 -3153 407 -3148 410 +3267 403 +3263 403 * +Wi + +0101100 ++3258 403 +3146 411 +3158 407 -3145 407 +3255 403 * +Wi + +0101100 ++3145 407 -3157 407 -3146 411 +3259 403 +3254 403 * +Wi + +0101100 ++3417 404 +3528 404 +3558 404 +3531 404 -3533 404 +3554 404 +3418 404 +3261 403 -3429 404 -3536 404 ++3552 404 -3546 404 -3539 404 -3542 404 -3430 404 +3326 403 * +Wi + +0101100 ++3330 403 -3413 404 +3414 404 * +Wi + +0101100 +-3409 404 -3410 404 +3331 403 * +Wi + +0101100 ++3421 404 +3422 404 +3257 403 * +Wi + +0101100 ++3256 403 +3425 404 -3426 404 * +Wi + +0101100 ++3433 404 -3574 404 -3516 404 -3570 404 -3518 404 +3566 404 -3520 404 -3522 404 +3563 404 -3526 404 +-3434 404 +3265 403 +3445 404 +3592 404 -3507 404 +3588 404 +3587 404 -3509 404 +3584 404 +3511 404 ++3577 404 +3513 404 -3446 404 +3279 403 * +Wi + +0101100 ++3274 403 -3453 404 +3454 404 * +Wi + +0101100 +-3449 404 -3450 404 +3275 403 * +Wi + +0101100 +-3437 404 +3438 404 +3270 403 * +Wi + +0101100 ++3269 403 +3441 404 +3442 404 * +Wi + +0101100 +-3144 0 -3143 0 +3142 0 +3141 0 * +Wi + +0101100 +-3140 0 +3144 0 +3139 0 -3138 0 * +Wi + +0101100 +-3137 0 -3141 0 +3136 0 +3143 0 * +Wi + +0101100 +-3142 0 -3136 0 * +Wi + +0101100 ++4790 0 +4782 0 * +Wi + +0101100 +-3139 0 +3137 0 +3140 0 -3135 0 * +Wi + +0101100 ++3134 0 -3138 0 -3133 0 +3132 0 * +Wi + +0101100 ++3133 0 -3135 0 -3134 0 +3131 0 * +Wi + +0101100 +-3130 0 -3129 0 * +Wi + +0101100 ++3131 0 +3132 0 * +Wi + +0101100 ++3128 0 -4786 0 -3127 0 +3126 0 * +Wi + +0101100 ++3127 0 -4781 0 -3128 0 +3125 0 * +Wi + +0101100 ++3124 0 -3130 0 -3123 0 +3122 0 * +Wi + +0101100 ++3123 0 -3129 0 -3124 0 +3121 0 * +Wi + +0101100 ++3120 0 -3119 0 -3118 0 +3126 0 * +Wi + +0101100 ++3118 0 -3117 0 -3120 0 +3125 0 * +Wi + +0101100 +-3116 0 +3820 0 +3115 0 -3122 0 * +Wi + +0101100 +-3115 0 +3819 0 +3116 0 -3121 0 * +Wi + +0101100 +-3114 0 +3119 0 +3113 0 -3112 0 * +Wi + +0101100 +-3113 0 +3117 0 +3114 0 -3111 0 * +Wi + +0101100 ++3112 0 +3110 0 -3109 0 -3108 0 * +Wi + +0101100 ++3111 0 +3108 0 -3107 0 -3110 0 * +Wi + +0101100 +-3106 0 +3827 0 +3105 0 -3104 0 * +Wi + +0101100 +-3105 0 +3828 0 +3106 0 -3103 0 * +Wi + +0101100 ++3102 0 +3101 0 * +Wi + +0101100 +-3107 0 -3109 0 * +Wi + +0101100 +-3100 0 -3099 0 -3098 315 -3104 315 +3097 315 * +Wi + +0101100 +-3096 0 -3095 0 -3097 315 -3103 315 +3098 315 * +Wi + +0101100 ++3094 0 +3093 0 -3092 0 -3102 0 * +Wi + +0101100 ++3092 0 +3091 0 -3094 0 -3101 0 * +Wi + +0101100 +-3090 316 -3089 316 +3088 316 -3095 0 -3100 0 * +Wi + +0101100 +-3088 316 -3087 316 +3090 316 -3099 0 -3096 0 * +Wi + +0101100 +-3086 315 -3093 315 +3085 315 +3084 0 * +Wi + +0101100 +-3085 315 -3091 315 +3086 315 +3083 0 * +Wi + +0101100 ++3084 0 +3083 0 * +Wi + +0101100 +-3089 316 -3087 316 * +Wi + +0101100 +-3082 412 -3081 413 +3080 412 +4033 412 * +Wi + +0101100 +-3080 412 -3079 413 +3082 412 +4034 412 * +Wi + +0101100 ++3079 413 +3081 413 * +Wi + +0101100 ++3078 0 +3077 0 * +Wi + +0101100 +-3076 412 -3075 412 +3074 412 -4157 414 * +Wi + +0101100 +-3073 322 -4047 414 +3072 322 +3078 0 * +Wi + +0101100 +-3071 322 -3070 322 +3069 322 +4046 414 * +Wi + +0101100 +-3072 322 -4052 414 +3073 322 +3077 0 * +Wi + +0101100 +-3069 322 -3068 322 +3071 322 +4050 414 * +Wi + +0101100 +-3067 412 -3066 412 -3065 412 +3064 412 +4037 412 -4030 412 * +Wi + +0101100 ++3064 412 -4038 412 -3063 412 +3062 412 +3061 412 * +Wi + +0101100 ++4025 412 -4039 412 -3063 412 +3060 412 +3059 412 * +Wi + +0101100 ++3058 412 -4158 414 -3074 412 +3057 412 * +Wi + +0101100 ++3075 0 -3057 0 -3056 0 +3055 0 * +Wi + +0101100 +-3076 412 +3055 412 +3054 412 -4155 414 * +Wi + +0101100 ++3053 322 +3052 322 * +Wi + +0101100 +-3070 322 -3068 322 * +Wi + +0101100 +-3056 412 +4020 412 +3058 412 +4024 412 +3059 412 -3051 330 -3050 330 -3049 330 -3065 412 +4029 412 +-4021 412 -3054 412 * +Wi + +0101100 ++3079 412 +3081 412 * +Wi + +0101100 ++3067 412 +3061 412 +3062 412 +3048 330 * +Wi + +0101100 +-3047 0 -3046 0 * +Wi + +0101100 ++3066 412 -3048 330 -3060 412 +3045 330 * +Wi + +0101100 +-3053 0 -3044 0 +3931 0 +3043 0 * +Wi + +0101100 +-3052 0 -3043 0 +3932 0 +3044 0 * +Wi + +0101100 ++4062 414 -3042 330 -3049 330 -3045 330 -3051 330 +3041 330 +3040 330 * +Wi + +0101000 +i3039 0 * +Wi + +0101100 ++4058 414 -3040 330 -3041 330 -3050 330 +3042 330 * +Wi + +0101000 +i3038 0 * +Wi + +0101100 ++3079 412 +3081 412 * +Wi + +0101100 ++3037 0 +3036 0 * +Wi + +0101100 +-3035 329 -4068 414 +3034 329 +3047 0 * +Wi + +0101100 +-3034 329 -4065 414 +3035 329 +3046 0 * +Wi + +0101100 +-4060 414 -4059 414 * +Wi + +0101100 ++3033 330 +3032 330 +3031 330 +3030 330 +3029 330 +3028 330 +3027 330 +3026 330 * +Wi + +0101100 +-3025 322 -3037 0 +3024 322 +4049 414 * +Wi + +0101100 +-3024 322 -3036 0 +3025 322 +4054 414 * +Wi + +0101100 ++3023 0 -3022 0 -3021 0 +3936 0 * +Wi + +0101100 ++3021 0 -3020 0 -3023 0 +3935 0 * +Wi + +0101100 +-3019 415 -3018 415 +3017 415 -3026 330 -3033 330 * +Wi + +0101100 +-3032 330 -3031 330 -3016 415 -3015 415 +3019 415 * +Wi + +0101100 +-3014 415 -3013 415 +3016 415 -3030 330 * +Wi + +0101100 +-3029 330 -3028 330 -3027 330 -3017 415 -3012 415 +3014 415 * +Wi + +0101100 ++3011 0 -3010 0 -3934 345 +3934 346 * +Wi + +0101100 ++3010 0 -3011 0 -3933 345 +3933 346 * +Wi + +0101100 ++3020 322 +3022 322 * +Wi + +0101100 +-3009 322 -3008 322 * +Wi + +0101100 +-3007 0 -3006 0 +3015 0 +3018 0 +3005 0 * +Wi + +0101100 +-3004 0 -3005 0 +3012 0 +3013 0 +3006 0 * +Wi + +0101100 +-3934 346 -3933 346 * +Wi + +0101100 ++3003 0 +3002 0 * +Wi + +0101100 ++3001 0 -3000 0 -2999 0 +3009 0 * +Wi + +0101100 ++2999 0 -2998 0 -3001 0 +3008 0 * +Wi + +0101100 +-2997 406 +2996 406 -2995 406 * +Wi + +0101100 ++3007 415 +3004 415 * +Wi + +0101100 +-2994 329 -2993 329 +2992 329 +3003 0 * +Wi + +0101100 +-2992 329 -2991 329 +2994 329 +3002 0 * +Wi + +0101100 ++2998 0 +3000 0 * +Wi + +0101100 +-2990 0 -2989 0 -2988 0 -2987 0 -2986 0 -2985 0 * +Wi + +0101100 ++2997 406 +2984 406 -3179 403 +2983 406 * +Wi + +0101100 +-2996 406 -2982 406 -3174 403 -3181 403 -2984 406 * +Wi + +0101100 +-2983 406 -3177 403 -3175 403 +2982 406 +2995 406 * +Wi + +0101100 ++2991 0 +2993 0 * +Wi + +0101100 +-2981 0 +2990 0 +2980 0 -2979 0 * +Wi + +0101100 +-2978 0 +2989 0 +2981 0 -2977 0 * +Wi + +0101100 +-2976 0 +2988 0 +2978 0 -2975 0 * +Wi + +0101100 +-2974 0 +2987 0 +2976 0 -2973 0 * +Wi + +0101100 +-2972 0 +2986 0 +2974 0 -2971 0 * +Wi + +0101100 +-2980 0 +2985 0 +2972 0 -2970 0 * +Wi + +0101100 +-3641 406 +3642 406 +3650 406 -3640 406 -3652 406 * +Wi + +0101100 ++2969 406 +2968 406 * +Wi + +0101100 ++2970 0 +2971 0 +2973 0 +2975 0 +2977 0 +2979 0 * +Wi + +0101100 +-2967 329 -2966 329 -2965 406 +2969 406 +2964 406 * +Wi + +0101100 +-2963 329 -2962 329 -2964 406 +2968 406 +2965 406 * +Wi + +0101100 +-2966 329 -2963 329 -2962 329 -2967 329 * +Wi + +0101100 +-2961 416 -2960 0 -2959 0 +2958 0 +2957 417 +2956 0 * +Wi + +0101100 ++2955 416 +2954 416 -2961 416 -2953 416 -2952 416 * +Wi + +0101000 +i2951 0 * +Wi + +0101100 +-2950 416 -2960 0 -2949 0 * +Wi + +0101100 ++2948 418 +2959 0 -2949 0 -2947 416 +2946 418 -2945 418 +2944 418 +2943 418 +2942 418 * +Wi + +0101100 ++2941 418 +2940 418 * +Wi + +0101100 +-2939 418 -2938 418 +2937 418 +2948 418 +2958 0 +2936 0 * +Wi + +0101100 +-2935 0 +2934 0 +2933 0 -2936 0 +2957 417 -2932 417 +2931 417 * +Wi + +0101100 ++2930 0 +2929 0 +2928 0 * +Wi + +0101100 ++2956 0 -2927 416 +2932 417 * +Wi + +0101100 +-2926 416 +2925 0 -2950 416 +2955 416 +2924 416 * +Wi + +0101100 ++2954 416 -2923 416 -2924 416 +2922 416 * +Wi + +0101100 ++2921 0 +2920 0 +2919 0 +2918 0 +2917 0 * +Wi + +0101100 +-2953 416 -2916 0 +2915 416 +2923 416 * +Wi + +0101100 +-2952 416 -2927 416 +4105 414 +2916 0 * +Wi + +0101100 +-2947 416 -2914 416 -4106 416 +4105 414 +2913 419 +2912 419 +2925 0 * +Wi + +0101100 +-2911 418 -2910 418 +2909 418 +2935 0 +2946 418 * +Wi + +0101100 ++2908 0 -2907 0 -2945 0 +2911 0 * +Wi + +0101100 ++2907 0 -2906 0 -2905 0 +2944 0 * +Wi + +0101100 ++2905 0 -2904 0 -2903 0 +2943 0 * +Wi + +0101100 +-2937 0 +2942 0 +2903 0 -2902 0 * +Wi + +0101100 +-2941 418 -2940 418 * +Wi + +0101100 ++2901 0 +2900 0 +2899 0 * +Wi + +0101100 +-2939 418 -2898 418 +2897 418 +2933 0 * +Wi + +0101100 +-2896 0 -2898 0 +2938 0 +2902 0 +2904 0 +2906 0 -2908 0 +2910 0 * +Wi + +0101100 ++2895 0 +2894 0 * +Wi + +0101100 +-2896 418 +2909 418 +2934 0 -2897 418 * +Wi + +0101100 +-2914 416 -4106 416 +2931 417 * +Wi + +0101100 +-2893 354 -4083 414 +2892 354 -2930 0 -2928 0 * +Wi + +0101100 +-2892 354 -4082 414 +2893 354 -2929 0 * +Wi + +0101100 ++2922 416 -2926 416 -2912 419 -2891 0 +2915 416 * +Wi + +0101100 +-2890 357 +2921 0 +2889 357 +2888 405 * +Wi + +0101100 ++2887 405 +2886 405 +2885 405 -2889 357 +2920 0 +2919 0 +2884 357 * +Wi + +0101100 +-2884 357 +2918 0 +2883 357 +2882 405 * +Wi + +0101100 ++2881 405 +2880 405 +2879 405 -2883 357 +2917 0 +2890 357 * +Wi + +0101100 +-2891 0 +2913 419 * +Wi + +0101100 +-2878 359 +2901 0 +2900 0 +2877 359 +4087 414 * +Wi + +0101100 +-2877 359 +2899 0 +2878 359 +4086 414 * +Wi + +0101100 +-2876 418 -2940 420 +2875 418 +2895 418 * +Wi + +0101100 +-2875 418 -2941 420 +2876 418 +2894 418 * +Wi + +0101100 ++2874 405 +2873 405 +2872 405 * +Wi + +0101100 +-2881 405 -2888 405 -2885 405 -2880 405 -2887 405 -2882 405 -2879 405 -2886 405 * +Wi + +0101100 +-2941 420 -2940 420 * +Wi + +0101100 ++2871 0 +2870 0 +2869 0 * +Wi + +0101100 +-2868 405 -2874 405 +2867 405 -3189 403 * +Wi + +0101100 +-2867 405 -2873 405 +2866 405 -3184 403 -3191 403 * +Wi + +0101100 +-3187 403 -3185 403 -2866 405 -2872 405 +2868 405 * +Wi + +0101100 +-2870 0 -2871 0 -2865 359 -4085 414 +2864 359 * +Wi + +0101100 +-2869 0 -2864 359 -4084 414 +2865 359 * +Wi + +0101100 ++2863 0 -2862 0 -3933 368 +3933 369 * +Wi + +0101100 ++2862 0 -2863 0 -3934 368 +3934 369 * +Wi + +0101100 +-3934 369 -3933 369 * +Wi + +0101100 ++2861 0 +2860 0 * +Wi + +0101100 ++4070 414 -2859 359 -3070 359 +2858 359 * +Wi + +0101100 ++4072 414 -2858 359 -3068 359 +2859 359 * +Wi + +0101100 +-2857 354 -2993 354 +2856 354 +2861 0 * +Wi + +0101100 +-2856 354 -2991 354 +2857 354 +2860 0 * +Wi + +0101100 +-3621 405 -3633 405 -3622 405 -3631 405 -3623 405 * +Wi + +0101100 ++2855 405 +2854 405 * +Wi + +0101100 ++3053 359 +3052 359 * +Wi + +0101100 +-3070 359 -3068 359 * +Wi + +0101100 +-2853 405 -2852 354 -2851 354 +2850 405 +2855 405 * +Wi + +0101100 +-2850 405 -2849 354 -2848 354 +2853 405 +2854 405 * +Wi + +0101100 +-2848 354 -2852 354 -2851 354 -2849 354 * +Wi + +0101100 ++3020 359 +3022 359 * +Wi + +0101100 +-3009 359 -3008 359 * +Wi + +0101100 +-2847 0 +2846 416 -2845 0 -2844 0 -2843 0 -2842 0 -2841 416 * +Wi + +0101000 +i2840 0 * +Wi + +0101100 +-2839 0 +2841 416 -2838 0 -2837 0 -2836 0 -2835 0 -2846 416 -2834 0 -2833 0 * +Wi + +0101000 +i2832 0 * +Wi + +0101100 +-2831 354 +2830 0 +2829 0 +2828 354 +2827 0 * +Wi + +0101100 +-2828 354 +2826 0 +2825 0 +2831 354 * +Wi + +0101100 +-2824 0 -2823 0 * +Wi + +0101100 ++2822 0 +2821 0 * +Wi + +0101100 ++2820 0 -2819 0 -2824 0 +2818 0 * +Wi + +0101100 ++2817 0 -2818 0 -2823 0 +2819 0 * +Wi + +0101100 +-2816 0 -2822 0 +2815 0 +2814 0 * +Wi + +0101100 ++2813 0 -2815 0 -2821 0 +2816 0 * +Wi + +0101100 ++2812 0 +2811 0 -2810 0 -2820 0 * +Wi + +0101100 ++2810 0 +2809 0 -2812 0 -2817 0 * +Wi + +0101100 ++2808 0 -2814 0 -2807 0 +2806 0 * +Wi + +0101100 ++2805 0 +2807 0 -2813 0 -2808 0 * +Wi + +0101100 ++2804 403 +2803 403 -2802 403 -2811 403 +2801 403 * +Wi + +0101100 ++2800 403 +2799 403 -2801 403 -2809 403 +2802 403 * +Wi + +0101100 +-2798 403 -2806 403 +2797 403 -2796 403 -2795 403 * +Wi + +0101100 +-2794 403 -2793 403 -2797 403 -2805 403 +2798 403 * +Wi + +0101100 ++2799 403 +2804 403 -3154 407 -2792 407 +2791 410 * +Wi + +0101100 +-2800 403 -2803 403 -3153 407 -2792 407 +2791 410 * +Wi + +0101100 ++3263 403 +3267 403 -2793 403 -2796 403 -2790 407 +2789 410 * +Wi + +0101100 +-3264 403 -3266 403 +2794 403 +2795 403 -2790 407 +2789 410 * +Wi + +0101100 +-2788 0 -2787 0 * +Wi + +0101100 ++2786 0 +2785 0 * +Wi + +0101100 ++2784 0 -2783 0 -2788 0 +2782 0 * +Wi + +0101100 ++2781 0 -2782 0 -2787 0 +2783 0 * +Wi + +0101100 +-2780 0 -2786 0 +2779 0 +2778 0 * +Wi + +0101100 ++2777 0 -2779 0 -2785 0 +2780 0 * +Wi + +0101100 ++2776 0 +2775 0 -2774 0 -2784 0 * +Wi + +0101100 ++2774 0 +2773 0 -2776 0 -2781 0 * +Wi + +0101100 ++2772 0 -2778 0 -2771 0 +2770 0 * +Wi + +0101100 ++2769 0 +2771 0 -2777 0 -2772 0 * +Wi + +0101100 ++2768 403 +2767 403 -2766 403 -2775 403 +2765 403 * +Wi + +0101100 ++2764 403 +2763 403 -2765 403 -2773 403 +2766 403 * +Wi + +0101100 +-2762 403 -2770 403 +2761 403 -2760 403 -2759 403 * +Wi + +0101100 +-2758 403 -2757 403 -2761 403 -2769 403 +2762 403 * +Wi + +0101100 ++2763 403 +2768 403 -3158 407 -2756 407 +2755 411 * +Wi + +0101100 +-2764 403 -2767 403 -3157 407 -2756 407 +2755 411 * +Wi + +0101100 ++3254 403 +3259 403 -2757 403 -2760 403 -2754 407 +2753 411 * +Wi + +0101100 +-3255 403 -3258 403 +2758 403 +2759 403 -2754 407 +2753 411 * +Wi + +0101100 +-2752 421 +2751 421 +2750 421 -2749 421 -2748 421 * +Wi + +0101100 +-2750 421 +2747 421 +2752 421 -2746 421 -2745 421 * +Wi + +0101100 ++2744 0 -2743 0 -2751 0 +2742 0 * +Wi + +0101100 +-2749 421 -2745 421 -3160 407 -2741 407 +2740 409 * +Wi + +0101100 ++2748 421 +2746 421 -3159 407 -2741 407 +2740 409 * +Wi + +0101100 ++2739 0 -2742 0 -2747 0 +2743 0 * +Wi + +0101100 +-2738 0 +2737 0 +2736 0 -2744 0 * +Wi + +0101100 +-2736 0 +2735 0 +2738 0 -2739 0 * +Wi + +0101100 ++2734 0 -2733 0 -2737 0 +2732 0 * +Wi + +0101100 ++3276 403 +3273 403 +2731 421 +2730 421 -2729 407 +2728 409 * +Wi + +0101100 +-3277 403 -3272 403 -2727 421 -2726 421 -2729 407 +2728 409 * +Wi + +0101100 ++2725 0 -2732 0 -2735 0 +2733 0 * +Wi + +0101100 +-2724 421 +2723 421 +2722 421 +2721 421 -2734 421 * +Wi + +0101100 +-2720 421 +2719 421 +2718 421 -2731 421 -2727 421 * +Wi + +0101100 +-2718 421 +2717 421 +2720 421 -2726 421 -2730 421 * +Wi + +0101100 +-2721 421 +2716 421 +2715 421 +2724 421 -2725 421 * +Wi + +0101100 ++2715 421 +2723 421 -3830 407 -2714 407 +2713 422 * +Wi + +0101100 +-2716 421 -2722 421 -3829 407 -2714 407 +2713 422 * +Wi + +0101100 ++2712 0 -2711 0 -2719 0 +2710 0 * +Wi + +0101100 ++2709 0 -2710 0 -2717 0 +2711 0 * +Wi + +0101100 +-2708 0 +2707 0 +2706 0 -2712 0 * +Wi + +0101100 +-2706 0 +2705 0 +2708 0 -2709 0 * +Wi + +0101100 +-3923 423 -3926 423 -2704 421 -2703 421 -2702 407 +2701 422 * +Wi + +0101100 ++3922 423 +3927 423 +2700 421 +2699 421 -2702 407 +2701 422 * +Wi + +0101100 ++2698 0 -2697 0 -2707 0 +2696 0 * +Wi + +0101100 ++2695 0 -2696 0 -2705 0 +2697 0 * +Wi + +0101100 +-2694 421 +2700 421 +2704 421 +2693 421 -2695 421 * +Wi + +0101100 +-2693 421 +2703 421 +2699 421 +2694 421 -2698 421 * +Wi + +0101100 +-2752 424 +2751 424 +2750 424 -2692 424 -2691 424 * +Wi + +0101100 +-2750 424 +2747 424 +2752 424 -2690 424 -2689 424 * +Wi + +0101100 +-2692 424 -2689 424 -3155 407 -2688 407 +2687 408 * +Wi + +0101100 ++2691 424 +2690 424 -3156 407 -2688 407 +2687 408 * +Wi + +0101100 ++3327 403 +3325 403 +2686 424 +2685 424 -2684 407 +2683 408 * +Wi + +0101100 +-3328 403 -3324 403 -2682 424 -2681 424 -2684 407 +2683 408 * +Wi + +0101100 +-2724 424 +2680 424 +2679 424 +2721 424 -2734 424 * +Wi + +0101100 +-2720 424 +2719 424 +2718 424 -2686 424 -2682 424 * +Wi + +0101100 +-2718 424 +2717 424 +2720 424 -2681 424 -2685 424 * +Wi + +0101100 +-2721 424 +2678 424 +2677 424 +2724 424 -2725 424 * +Wi + +0101100 +-2680 424 -2677 424 -3833 407 -2676 407 +2675 425 * +Wi + +0101100 ++2679 424 +2678 424 -3834 407 -2676 407 +2675 425 * +Wi + +0101100 ++3860 423 +3864 423 +2674 424 +2673 424 -2672 407 +2671 425 * +Wi + +0101100 +-3861 423 -3863 423 -2670 424 -2669 424 -2672 407 +2671 425 * +Wi + +0101100 +-2693 424 +2674 424 +2670 424 +2694 424 -2698 424 * +Wi + +0101100 +-2694 424 +2669 424 +2673 424 +2693 424 -2695 424 * +Wi + +0101100 +-2668 390 -2667 426 +2666 390 +3986 390 * +Wi + +0101100 +-2666 390 -2665 426 +2668 390 +3987 390 * +Wi + +0101100 ++2665 426 +2667 426 * +Wi + +0101100 ++2664 0 +2663 0 * +Wi + +0101100 +-2662 387 -3981 414 +2661 387 +2664 0 * +Wi + +0101100 +-2661 387 -3980 414 +2662 387 +2663 0 * +Wi + +0101100 +-2660 390 -2659 390 +2658 390 +4137 414 * +Wi + +0101100 ++2657 390 -2656 0 -2655 0 -2654 390 -3992 390 +3976 390 * +Wi + +0101100 ++2653 393 +2652 0 -2654 390 -3991 390 +2651 390 * +Wi + +0101100 +-2650 0 +2651 0 +3990 0 -3974 0 * +Wi + +0101100 +-2660 390 +2649 390 +2648 390 -4141 414 * +Wi + +0101100 ++2659 0 -2647 0 -2646 0 +2649 0 * +Wi + +0101100 ++2645 390 -4138 414 -2658 390 +2647 390 * +Wi + +0101100 +-3972 390 -2648 390 -2646 390 +3971 390 +2645 390 -2644 393 -2643 393 * +Wi + +0101100 ++2665 390 +2667 390 * +Wi + +0101100 ++2650 390 -2642 393 -2641 0 -2640 0 -2657 390 +3999 414 +4001 414 +4011 414 +4013 414 +4005 414 +* +Wi + +0101100 ++2656 0 +2640 0 -2639 0 * +Wi + +0101100 ++2639 0 +2641 0 +2638 0 +2652 0 +2655 0 * +Wi + +0101100 +-2637 0 -2636 0 * +Wi + +0101100 ++2638 0 -2653 393 -2642 393 * +Wi + +0101100 +-2635 387 -3070 387 +2634 387 +3963 414 * +Wi + +0101100 +-2634 387 -3068 387 +2635 387 +3965 414 * +Wi + +0101100 ++4003 414 -4002 414 -2644 393 +2633 393 * +Wi + +0101100 +-2633 393 -2643 393 +4010 414 +4009 414 * +Wi + +0101100 ++2665 390 +2667 390 * +Wi + +0101100 ++2632 0 +2631 0 * +Wi + +0101100 ++4007 414 +4004 414 * +Wi + +0101100 +-2630 0 * +Wi + +0101100 +-2629 394 -4016 414 +2628 394 +2637 0 * +Wi + +0101100 +-2628 394 -4014 414 +2629 394 +2636 0 * +Wi + +0101100 ++3053 387 +3052 387 * +Wi + +0101100 +-3070 387 -3068 387 * +Wi + +0101100 +-2627 387 -2632 0 +2626 387 +3996 414 * +Wi + +0101100 +-2626 387 -2631 0 +2627 387 +3995 414 * +Wi + +0101100 +-2630 0 +2625 0 +2624 0 -2625 0 * +Wi + +0101100 ++2874 398 +2872 398 +2873 398 * +Wi + +0101100 +-2624 0 * +Wi + +0101100 +-2623 398 -2874 398 +2622 398 -3199 403 * +Wi + +0101100 +-3197 403 -3195 403 -2621 398 -2872 398 +2623 398 * +Wi + +0101100 +-2622 398 -2873 398 +2621 398 -3194 403 -3201 403 * +Wi + +0101100 ++2620 0 -2619 0 -3933 399 +3933 400 * +Wi + +0101100 ++2619 0 -2620 0 -3934 399 +3934 400 * +Wi + +0101100 +-3933 400 -3934 400 * +Wi + +0101100 ++2618 0 +2617 0 * +Wi + +0101100 ++3020 387 +3022 387 * +Wi + +0101100 +-3009 387 -3008 387 * +Wi + +0101100 +-2616 394 -2993 394 +2615 394 +2618 0 * +Wi + +0101100 +-2615 394 -2991 394 +2616 394 +2617 0 * +Wi + +0101100 +-3603 398 -3614 398 -3622 398 -3612 398 -3604 398 * +Wi + +0101100 ++2855 398 +2854 398 * +Wi + +0101100 +-2614 0 -2613 394 +2612 398 +2855 398 -2611 398 * +Wi + +0101100 +-2612 398 -2610 394 -2609 394 -2608 0 +2611 398 +2854 398 * +Wi + +0101100 ++2607 0 +2614 0 +2608 0 * +Wi + +0101100 ++2609 394 +2610 394 +2613 394 -2607 0 * +Wi + +0101100 +-5184 0 -5183 0 * +Wi + +0101100 ++5182 427 +5181 427 +5180 427 +5179 427 +5178 427 +5177 427 +5176 427 +5175 427 +5174 427 +5173 427 +* +Wi + +0101100 +-5172 0 -5171 0 * +Wi + +0101100 +-5170 0 -5169 0 * +Wi + +0101100 ++5168 427 +5167 427 * +Wi + +0101100 ++5166 428 +5165 428 * +Wi + +0101100 +-5166 0 -5165 0 * +Wi + +0101100 +-5164 0 -5163 0 -5162 0 +5161 0 * +Wi + +0101100 ++5160 0 +5159 0 -5158 0 -5157 0 * +Wi + +0101100 +-5156 0 -5157 0 +5155 0 -5154 0 * +Wi + +0101100 +-5153 0 -5154 0 +5152 0 +5151 0 * +Wi + +0101100 ++5150 0 +5149 0 -5148 0 -5147 0 * +Wi + +0101100 +-5146 0 -5145 0 +5144 0 +5143 0 * +Wi + +0101100 +-5142 0 -5141 0 +5140 0 +5139 0 * +Wi + +0101100 +-5138 0 +5137 0 +5139 0 -5136 0 * +Wi + +0101100 +-5135 0 -5138 0 +5134 0 +5133 0 * +Wi + +0101100 ++5132 427 +5131 429 +5130 429 +5129 427 * +Wi + +0101100 +-5130 429 -5128 429 -5127 427 -5183 427 +5126 427 * +Wi + +0101100 ++5125 427 -5124 427 +5128 429 -5131 429 * +Wi + +0101100 ++5123 427 +5122 429 +5121 429 +5124 427 * +Wi + +0101100 +-5121 429 -5120 429 -5126 427 -5184 427 +5127 427 * +Wi + +0101100 ++5119 427 -5129 427 +5120 429 -5122 429 * +Wi + +0101100 ++5118 427 -5117 427 -5125 427 -5132 427 +5116 427 * +Wi + +0101100 ++5115 427 -5116 427 -5119 427 -5123 427 +5117 427 * +Wi + +0101100 ++5114 427 +5113 430 +5112 430 +5111 427 * +Wi + +0101100 +-5112 430 -5110 430 -5109 427 -5169 427 +5108 427 * +Wi + +0101100 ++5107 427 -5106 427 +5110 430 -5113 430 * +Wi + +0101100 ++5105 427 +5104 430 +5103 430 +5106 427 * +Wi + +0101100 +-5103 430 -5102 430 -5108 427 -5170 427 +5109 427 * +Wi + +0101100 ++5101 427 -5111 427 +5102 430 -5104 430 * +Wi + +0101100 ++5100 427 -5099 427 -5101 427 -5105 427 +5098 427 * +Wi + +0101100 ++5097 427 -5098 427 -5107 427 -5114 427 +5099 427 * +Wi + +0101100 ++5096 427 +5095 431 +5094 431 +5093 427 * +Wi + +0101100 +-5094 431 -5092 431 -5091 427 -5171 427 +5090 427 * +Wi + +0101100 ++5089 427 -5088 427 +5092 431 -5095 431 * +Wi + +0101100 ++5087 427 +5086 431 +5085 431 +5088 427 * +Wi + +0101100 +-5085 431 -5084 431 -5090 427 -5172 427 +5091 427 * +Wi + +0101100 ++5083 427 -5093 427 +5084 431 -5086 431 * +Wi + +0101100 ++5082 427 -5081 427 -5083 427 -5087 427 +5080 427 * +Wi + +0101100 ++5079 427 -5080 427 -5089 427 -5096 427 +5081 427 * +Wi + +0101100 ++5078 0 -5077 0 -5076 0 +5075 0 * +Wi + +0101100 ++5076 0 -5074 0 +5151 0 -5073 0 +5149 0 -5072 0 -5078 0 +5071 0 * +Wi + +0101100 ++5070 432 +5069 432 * +Wi + +0101100 +-5068 433 -5067 433 * +Wi + +0101100 ++5068 0 +5067 0 * +Wi + +0101100 +-5066 0 -5065 0 * +Wi + +0101100 ++5065 433 +5066 433 * +Wi + +0101100 ++5064 434 +5063 434 * +Wi + +0101100 +-5063 431 -5064 431 * +Wi + +0101100 +-5082 427 -5079 427 * +Wi + +0101100 +-5062 0 +5069 0 +5061 0 -5071 0 * +Wi + +0101100 +-5061 0 +5070 0 +5062 0 -5075 0 * +Wi + +0101100 ++5060 0 -5059 0 -5058 0 +5057 0 * +Wi + +0101100 ++5058 0 -5056 0 +5143 0 -5055 0 -5141 0 -5054 0 -5060 0 +5053 0 * +Wi + +0101100 ++5052 432 +5051 432 * +Wi + +0101100 +-5068 435 -5067 435 * +Wi + +0101100 ++5065 435 +5066 435 * +Wi + +0101100 ++5064 436 +5063 436 * +Wi + +0101100 +-5063 430 -5064 430 * +Wi + +0101100 +-5100 427 -5097 427 * +Wi + +0101100 +-5050 0 +5051 0 +5049 0 -5053 0 * +Wi + +0101100 +-5049 0 +5052 0 +5050 0 -5057 0 * +Wi + +0101100 ++5048 0 -5047 0 +5159 0 -5046 0 -5045 0 +5044 0 * +Wi + +0101100 ++5045 0 -5043 0 +5133 0 -5042 0 -5048 0 +5041 0 * +Wi + +0101100 ++5040 432 +5039 432 * +Wi + +0101100 +-5038 437 -5037 437 * +Wi + +0101100 ++5038 0 +5037 0 * +Wi + +0101100 +-5036 0 -5035 0 * +Wi + +0101100 ++5035 437 +5036 437 * +Wi + +0101100 ++5034 438 +5033 438 * +Wi + +0101100 +-5033 429 -5034 429 * +Wi + +0101100 +-5118 427 -5115 427 * +Wi + +0101100 +-5032 0 +5039 0 +5031 0 -5041 0 * +Wi + +0101100 +-5031 0 +5040 0 +5032 0 -5044 0 * +Wi + +0101100 ++5030 0 -5029 0 +5163 0 +5028 0 * +Wi + +0101100 +-5029 0 -5162 0 -5027 0 +5026 0 * +Wi + +0101100 ++5025 0 -5024 0 -5161 0 -5027 0 * +Wi + +0101100 +-5024 0 -5164 0 +5028 0 +5023 0 * +Wi + +0101100 +-5022 0 +5021 0 +5020 0 -5025 0 * +Wi + +0101100 +-5023 0 +5019 0 +5018 0 +5020 0 * +Wi + +0101100 ++5019 0 +5017 0 +5016 0 -5030 0 * +Wi + +0101100 +-5026 0 -5022 0 +5015 0 +5016 0 * +Wi + +0101100 ++5014 0 -5168 0 -5013 0 +5012 0 * +Wi + +0101100 ++5013 0 -5167 0 -5014 0 +5011 0 * +Wi + +0101100 ++5010 0 -5009 0 -5011 0 +5008 0 * +Wi + +0101100 ++5007 0 -5008 0 -5012 0 +5009 0 * +Wi + +0101100 +-5006 0 -5147 0 +5005 0 -5004 0 * +Wi + +0101100 ++5003 0 +5004 0 -5002 0 -5001 0 * +Wi + +0101100 +-5000 0 -4999 0 -5145 0 +4998 0 * +Wi + +0101100 ++4997 0 +5001 0 -4996 0 -4995 0 * +Wi + +0101100 +-4994 0 -4998 0 +5144 0 +5056 0 +5059 0 +5054 0 +5140 0 -5137 0 +5134 0 +5043 0 ++5046 0 -5158 0 +5156 0 +5152 0 +5074 0 +5077 0 +5072 0 -5148 0 +5006 0 -5003 0 +-4997 0 * +Wi + +0101100 ++5010 0 +5007 0 * +Wi + +0101100 ++5015 0 -5017 0 +5018 0 -5021 0 * +Wi + +0101100 ++4994 0 +4995 0 +4993 0 +5000 0 * +Wi + +0101100 ++4992 427 -5182 427 -4991 427 +4990 427 * +Wi + +0101100 ++4989 427 -5181 427 -4992 427 +4988 427 * +Wi + +0101100 ++4987 427 -5180 427 -4989 427 +4986 427 * +Wi + +0101100 ++4985 427 -5179 427 -4987 427 +4984 427 * +Wi + +0101100 ++4983 427 -5178 427 -4985 427 +4982 427 * +Wi + +0101100 ++4981 427 -5177 427 -4983 427 +4980 427 * +Wi + +0101100 ++4979 427 -5176 427 -4981 427 +4978 427 * +Wi + +0101100 ++4977 427 -5175 427 -4979 427 +4976 427 * +Wi + +0101100 ++4975 427 -5174 427 -4977 427 +4974 427 * +Wi + +0101100 ++4991 427 -5173 427 -4975 427 +4973 427 * +Wi + +0101100 +-4972 0 -4971 0 -4970 0 -4969 0 -4968 0 -4967 0 -4966 0 -4965 0 -4964 0 -4963 0 +* +Wi + +0101100 ++4996 0 +5002 0 -5005 0 +5150 0 +5073 0 -5153 0 -5155 0 +5160 0 +5047 0 +5042 0 +-5135 0 +5136 0 -5142 0 +5055 0 -5146 0 +4999 0 -4993 0 * +Wi + +0101100 +-4962 0 +4963 0 +4961 0 -4990 0 * +Wi + +0101100 +-4961 0 +4964 0 +4960 0 -4988 0 * +Wi + +0101100 +-4960 0 +4965 0 +4959 0 -4986 0 * +Wi + +0101100 +-4959 0 +4966 0 +4958 0 -4984 0 * +Wi + +0101100 +-4958 0 +4967 0 +4957 0 -4982 0 * +Wi + +0101100 +-4957 0 +4968 0 +4956 0 -4980 0 * +Wi + +0101100 +-4956 0 +4969 0 +4955 0 -4978 0 * +Wi + +0101100 +-4955 0 +4970 0 +4954 0 -4976 0 * +Wi + +0101100 +-4954 0 +4971 0 +4953 0 -4974 0 * +Wi + +0101100 +-4953 0 +4972 0 +4962 0 -4973 0 * +Wi + +0101100 +-4952 439 +5182 427 +4951 439 -4950 439 * +Wi + +0101100 +-4951 439 +5181 427 +4949 439 -4948 439 * +Wi + +0101100 +-4949 439 +5180 427 +4947 439 -4946 439 * +Wi + +0101100 +-4947 439 +5179 427 +4945 439 -4944 439 * +Wi + +0101100 +-4945 439 +5178 427 +4943 439 -4942 439 * +Wi + +0101100 +-4943 439 +5177 427 +4941 439 -4940 439 * +Wi + +0101100 +-4941 439 +5176 427 +4939 439 -4938 439 * +Wi + +0101100 +-4939 439 +5175 427 +4937 439 -4936 439 * +Wi + +0101100 +-4937 439 +5174 427 +4935 439 -4934 439 * +Wi + +0101100 +-4935 439 +5173 427 +4952 439 -4933 439 * +Wi + +0101100 ++4950 0 +4948 0 +4946 0 +4944 0 +4942 0 +4940 0 +4938 0 +4936 0 +4934 0 +4933 0 +* +Wi + +0101100 +-4932 0 +4931 0 +4930 0 -4929 0 * +Wi + +0101100 +-4930 0 +4928 0 +4932 0 -4927 0 * +Wi + +0101100 +-4926 0 +4929 0 +4925 0 -4924 0 * +Wi + +0101100 +-4925 0 +4927 0 +4926 0 -4923 0 * +Wi + +0101100 ++4922 0 +4924 0 -4921 0 -4920 0 * +Wi + +0101100 ++4921 0 +4923 0 -4922 0 -4919 0 * +Wi + +0101100 ++4920 440 +4919 440 * +Wi + +0101100 +-4918 437 -4917 437 * +Wi + +0101100 +-4916 438 -4915 438 * +Wi + +0101100 +-4914 440 -4913 440 * +Wi + +0101100 ++4917 437 +4918 437 * +Wi + +0101100 ++4915 438 +4916 438 * +Wi + +0101100 ++4912 440 +4911 440 +4910 440 -4913 440 -4909 440 * +Wi + +0101100 ++4908 440 +4907 440 +4909 440 -4914 440 -4910 440 * +Wi + +0101100 ++4928 440 +4931 440 * +Wi + +0101100 +-4906 441 -4905 441 * +Wi + +0101100 ++4905 441 +4906 441 * +Wi + +0101100 +-4904 440 -4903 440 * +Wi + +0101100 ++4902 440 -4901 440 +4900 438 +4899 438 +4898 440 * +Wi + +0101100 +-4899 438 +4897 438 -4907 440 +4896 440 * +Wi + +0101100 +-4900 438 -4895 440 -4908 440 -4897 438 * +Wi + +0101100 ++4894 440 -4898 440 +4893 438 +4892 438 +4901 440 * +Wi + +0101100 +-4892 438 +4891 438 -4911 440 +4895 440 * +Wi + +0101100 +-4893 438 -4896 440 -4912 440 -4891 438 * +Wi + +0101100 ++4904 0 -4890 0 -4902 0 +4889 0 * +Wi + +0101100 ++4903 0 -4889 0 -4894 0 +4890 0 * +Wi + +0101100 +-4888 0 +4887 0 +4886 0 -4885 0 * +Wi + +0101100 +-4886 0 +4884 0 +4888 0 -4883 0 * +Wi + +0101100 +-4882 0 +4885 0 +4881 0 -4880 0 * +Wi + +0101100 +-4881 0 +4883 0 +4882 0 -4879 0 * +Wi + +0101100 ++4878 0 +4880 0 -4877 0 -4876 0 * +Wi + +0101100 ++4877 0 +4879 0 -4878 0 -4875 0 * +Wi + +0101100 ++4876 442 +4875 442 * +Wi + +0101100 +-4874 433 -4873 433 * +Wi + +0101100 +-4872 434 -4871 434 * +Wi + +0101100 +-4870 442 -4869 442 * +Wi + +0101100 ++4873 433 +4874 433 * +Wi + +0101100 ++4871 434 +4872 434 * +Wi + +0101100 ++4868 442 +4867 442 +4866 442 -4869 442 -4865 442 * +Wi + +0101100 ++4864 442 +4863 442 +4865 442 -4870 442 -4866 442 * +Wi + +0101100 ++4884 442 +4887 442 * +Wi + +0101100 +-4862 443 -4861 443 * +Wi + +0101100 ++4861 443 +4862 443 * +Wi + +0101100 +-4860 442 -4859 442 * +Wi + +0101100 ++4858 442 -4857 442 +4856 434 +4855 434 +4854 442 * +Wi + +0101100 +-4855 434 +4853 434 -4863 442 +4852 442 * +Wi + +0101100 +-4856 434 -4851 442 -4864 442 -4853 434 * +Wi + +0101100 ++4850 442 -4854 442 +4849 434 +4848 434 +4857 442 * +Wi + +0101100 +-4848 434 +4847 434 -4867 442 +4851 442 * +Wi + +0101100 +-4849 434 -4852 442 -4868 442 -4847 434 * +Wi + +0101100 ++4860 0 -4846 0 -4850 0 +4845 0 * +Wi + +0101100 ++4859 0 -4845 0 -4858 0 +4846 0 * +Wi + +0101100 ++4876 444 +4875 444 * +Wi + +0101100 +-4874 435 -4873 435 * +Wi + +0101100 +-4872 436 -4871 436 * +Wi + +0101100 +-4870 444 -4869 444 * +Wi + +0101100 ++4873 435 +4874 435 * +Wi + +0101100 ++4871 436 +4872 436 * +Wi + +0101100 ++4844 444 +4843 444 +4866 444 -4869 444 -4865 444 * +Wi + +0101100 ++4842 444 +4841 444 +4865 444 -4870 444 -4866 444 * +Wi + +0101100 ++4884 444 +4887 444 * +Wi + +0101100 +-4862 445 -4861 445 * +Wi + +0101100 ++4861 445 +4862 445 * +Wi + +0101100 +-4860 444 -4859 444 * +Wi + +0101100 ++4858 444 -4840 444 +4839 436 +4838 436 +4837 444 * +Wi + +0101100 +-4838 436 +4836 436 -4841 444 +4835 444 * +Wi + +0101100 +-4839 436 -4834 444 -4842 444 -4836 436 * +Wi + +0101100 ++4850 444 -4837 444 +4833 436 +4832 436 +4840 444 * +Wi + +0101100 +-4832 436 +4831 436 -4843 444 +4834 444 * +Wi + +0101100 +-4833 436 -4835 444 -4844 444 -4831 436 * +Wi + +0101100 +-5132 427 -5119 427 -4830 429 -4829 429 +4828 429 * +Wi + +0101100 +-5123 427 -5125 427 -4828 429 -4827 429 +4830 429 * +Wi + +0101100 +-4826 0 -4825 0 * +Wi + +0101100 +-4824 429 +4825 429 +4823 429 -5128 429 -5121 429 * +Wi + +0101100 +-4823 429 +4826 429 +4824 429 -5120 429 -5130 429 * +Wi + +0101100 ++4822 0 +4821 0 * +Wi + +0101100 ++4820 0 +4819 0 -4818 0 -4822 0 * +Wi + +0101100 ++4818 0 +4817 0 -4820 0 -4821 0 * +Wi + +0101100 +-4914 440 -4913 440 * +Wi + +0101100 +-4816 438 -4815 438 * +Wi + +0101100 ++4814 438 +4813 438 +4812 438 -4811 438 -4916 438 * +Wi + +0101100 ++4811 438 +4810 438 +4809 438 -4814 438 -4915 438 * +Wi + +0101100 +-5118 427 -5115 427 * +Wi + +0101100 +-4827 429 -4829 429 * +Wi + +0101100 ++4808 438 +4807 437 -4809 438 +4806 438 * +Wi + +0101100 ++4805 438 -4804 438 -4810 438 -4807 437 * +Wi + +0101100 ++4803 438 +4802 437 -4812 438 +4804 438 * +Wi + +0101100 ++4801 438 -4806 438 -4813 438 -4802 437 * +Wi + +0101100 +-4800 438 +5034 438 +4799 438 -4801 438 -4803 438 * +Wi + +0101100 +-4799 438 +5033 438 +4800 438 -4805 438 -4808 438 * +Wi + +0101100 +-4798 0 +4797 0 +4796 0 -4795 0 * +Wi + +0101100 +-4796 0 +4794 0 +4798 0 -4793 0 * +Wi + +0101100 ++4792 429 -4791 429 -4790 315 +4789 429 * +Wi + +0101100 +-4788 0 +4790 0 +4787 0 -4786 0 * +Wi + +0101100 ++4786 315 -4785 429 -4819 429 +4784 429 * +Wi + +0101100 ++4783 429 -4789 429 -4782 315 +4791 429 * +Wi + +0101100 +-4787 0 +4782 0 +4788 0 -4781 0 * +Wi + +0101100 ++4781 315 -4784 429 -4817 429 +4785 429 * +Wi + +0101100 ++4780 0 -4793 0 -4779 0 +4778 0 * +Wi + +0101100 ++4779 0 -4795 0 -4780 0 +4777 0 * +Wi + +0101100 +-4776 0 -4783 0 +4775 0 +4777 0 * +Wi + +0101100 +-4775 0 -4792 0 +4776 0 +4778 0 * +Wi + +0101100 +-4774 438 +4912 440 +4907 440 +4773 438 +4815 438 * +Wi + +0101100 +-4773 438 +4908 440 +4911 440 +4774 438 +4816 438 * +Wi + +0101100 +-4772 0 +4794 0 +4771 0 -4770 0 * +Wi + +0101100 +-4771 0 +4797 0 +4772 0 -4769 0 * +Wi + +0101100 +-4768 438 -4769 438 +4767 438 +4900 438 +4892 438 * +Wi + +0101100 +-4767 438 -4770 438 +4768 438 +4893 438 +4899 438 * +Wi + +0101100 ++4766 0 -4765 0 -4764 0 +4763 0 * +Wi + +0101100 ++4764 0 -4762 0 -4766 0 +4761 0 * +Wi + +0101100 +-4760 434 +4868 442 +4863 442 +4759 434 +4758 434 * +Wi + +0101100 +-4759 434 +4864 442 +4867 442 +4760 434 +4757 434 * +Wi + +0101100 +-4756 0 +4761 0 +4755 0 -4754 0 * +Wi + +0101100 +-4755 0 +4763 0 +4756 0 -4753 0 * +Wi + +0101100 +-4752 434 -4753 434 +4751 434 +4856 434 +4848 434 * +Wi + +0101100 +-4751 434 -4754 434 +4752 434 +4849 434 +4855 434 * +Wi + +0101100 ++4750 0 -4762 0 -4749 0 +4748 0 * +Wi + +0101100 ++4749 0 -4765 0 -4750 0 +4747 0 * +Wi + +0101100 +-4746 0 +4745 0 +4744 0 +4747 0 * +Wi + +0101100 +-4744 0 +4743 0 +4746 0 +4748 0 * +Wi + +0101100 +-5096 427 -5083 427 -4742 431 -4741 431 +4740 431 * +Wi + +0101100 +-5087 427 -5089 427 -4740 431 -4739 431 +4742 431 * +Wi + +0101100 +-4738 0 -4737 0 * +Wi + +0101100 +-4736 431 +4737 431 +4735 431 -5092 431 -5085 431 * +Wi + +0101100 +-4735 431 +4738 431 +4736 431 -5084 431 -5094 431 * +Wi + +0101100 ++4734 0 +4733 0 * +Wi + +0101100 +-4732 431 -4731 446 +4730 431 -4743 431 * +Wi + +0101100 +-4729 0 +4731 0 +4728 0 -4727 0 * +Wi + +0101100 +-4726 431 -4725 431 +4724 431 +4727 446 * +Wi + +0101100 +-4730 431 -4723 446 +4732 431 -4745 431 * +Wi + +0101100 +-4728 0 +4723 0 +4729 0 -4722 0 * +Wi + +0101100 +-4724 431 -4721 431 +4726 431 +4722 446 * +Wi + +0101100 ++4720 0 +4721 0 -4719 0 -4734 0 * +Wi + +0101100 ++4719 0 +4725 0 -4720 0 -4733 0 * +Wi + +0101100 +-4870 442 -4869 442 * +Wi + +0101100 +-4757 434 -4758 434 * +Wi + +0101100 ++4718 434 +4717 434 +4716 434 -4715 434 -4872 434 * +Wi + +0101100 ++4715 434 +4714 434 +4713 434 -4718 434 -4871 434 * +Wi + +0101100 +-5082 427 -5079 427 * +Wi + +0101100 +-4739 431 -4741 431 * +Wi + +0101100 ++4712 434 +4711 433 -4713 434 +4710 434 * +Wi + +0101100 ++4709 434 -4708 434 -4714 434 -4711 433 * +Wi + +0101100 ++4707 434 +4706 433 -4716 434 +4708 434 * +Wi + +0101100 ++4705 434 -4710 434 -4717 434 -4706 433 * +Wi + +0101100 +-4704 434 +5064 434 +4703 434 -4705 434 -4707 434 * +Wi + +0101100 +-4703 434 +5063 434 +4704 434 -4709 434 -4712 434 * +Wi + +0101100 +-4702 436 +4844 444 +4841 444 +4701 436 +4758 436 * +Wi + +0101100 +-4701 436 +4842 444 +4843 444 +4702 436 +4757 436 * +Wi + +0101100 +-4752 436 -4753 436 +4751 436 +4839 436 +4832 436 * +Wi + +0101100 +-4751 436 -4754 436 +4752 436 +4833 436 +4838 436 * +Wi + +0101100 +-5114 427 -5101 427 -4700 430 -4741 430 +4699 430 * +Wi + +0101100 +-5105 427 -5107 427 -4699 430 -4739 430 +4700 430 * +Wi + +0101100 +-4736 430 +4737 430 +4735 430 -5110 430 -5103 430 * +Wi + +0101100 +-4735 430 +4738 430 +4736 430 -5102 430 -5112 430 * +Wi + +0101100 +-4698 430 -4723 447 +4697 430 -4743 430 * +Wi + +0101100 +-4696 430 -4725 430 +4695 430 +4722 447 * +Wi + +0101100 +-4697 430 -4731 447 +4698 430 -4745 430 * +Wi + +0101100 +-4695 430 -4721 430 +4696 430 +4727 447 * +Wi + +0101100 +-4870 444 -4869 444 * +Wi + +0101100 +-4757 436 -4758 436 * +Wi + +0101100 ++4718 436 +4694 436 +4693 436 -4715 436 -4872 436 * +Wi + +0101100 ++4715 436 +4692 436 +4691 436 -4718 436 -4871 436 * +Wi + +0101100 +-5100 427 -5097 427 * +Wi + +0101100 +-4739 430 -4741 430 * +Wi + +0101100 ++4690 436 +4689 435 -4691 436 +4710 436 * +Wi + +0101100 ++4688 436 -4708 436 -4692 436 -4689 435 * +Wi + +0101100 ++4687 436 +4686 435 -4693 436 +4708 436 * +Wi + +0101100 ++4685 436 -4710 436 -4694 436 -4686 435 * +Wi + +0101100 +-4704 436 +5064 436 +4703 436 -4685 436 -4687 436 * +Wi + +0101100 +-4703 436 +5063 436 +4704 436 -4688 436 -4690 436 * +Wi + +0101100 +-4684 0 +4683 0 +4682 0 -5038 0 * +Wi + +0101100 +-4682 0 +4681 0 +4684 0 -5037 0 * +Wi + +0101100 +-4681 448 -4683 448 * +Wi + +0101100 ++4680 448 +4679 448 +4678 448 +4677 448 * +Wi + +0101100 +-4676 448 -4675 448 +4674 449 +4680 448 * +Wi + +0101100 +-4674 449 -4673 448 +4672 448 +4679 448 * +Wi + +0101100 +-4672 448 -4671 448 +4670 449 +4678 448 * +Wi + +0101100 +-4670 449 -4669 448 +4676 448 +4677 448 * +Wi + +0101100 +-4671 448 -4669 448 -4675 448 -4673 448 * +Wi + +0101100 ++4668 448 +4667 448 * +Wi + +0101100 ++4918 437 -4666 437 +4813 438 +4809 438 +4665 437 * +Wi + +0101100 +-4808 438 -4801 438 -4664 437 -5035 437 +4663 437 * +Wi + +0101100 ++4917 437 -4665 437 +4810 438 +4812 438 +4666 437 * +Wi + +0101100 +-4803 438 -4805 438 -4663 437 -5036 437 +4664 437 * +Wi + +0101100 +-4662 0 +4667 0 +4661 0 -4660 0 * +Wi + +0101100 +-4661 0 +4668 0 +4662 0 -4659 0 * +Wi + +0101100 ++4659 437 +4660 437 * +Wi + +0101100 +-4920 440 -4919 440 * +Wi + +0101100 ++4658 449 -4657 449 -4677 448 -4680 448 +4656 449 * +Wi + +0101100 ++4655 449 -4656 449 -4679 448 -4678 448 +4657 449 * +Wi + +0101100 +-4658 441 -4655 441 * +Wi + +0101100 ++4654 441 +4653 441 * +Wi + +0101100 +-4652 441 +4651 441 +4650 441 -4654 441 * +Wi + +0101100 +-4650 441 +4649 441 +4652 441 -4653 441 * +Wi + +0101100 ++4667 437 +4668 437 * +Wi + +0101100 +-4931 440 -4928 440 * +Wi + +0101100 +-4648 0 +4649 0 +4647 0 -4646 0 * +Wi + +0101100 +-4647 0 +4651 0 +4648 0 -4645 0 * +Wi + +0101100 +-4644 0 +4905 0 +4643 0 -4645 0 * +Wi + +0101100 +-4643 0 +4906 0 +4644 0 -4646 0 * +Wi + +0101100 +-4642 0 +4641 0 +4640 0 -5068 0 * +Wi + +0101100 +-4640 0 +4639 0 +4642 0 -5067 0 * +Wi + +0101100 +-4639 450 -4641 450 * +Wi + +0101100 ++4638 450 +4637 450 +4636 450 +4635 450 * +Wi + +0101100 +-4634 450 -4633 450 +4632 451 +4638 450 * +Wi + +0101100 +-4632 451 -4631 450 +4630 450 +4637 450 * +Wi + +0101100 +-4630 450 -4629 450 +4628 451 +4636 450 * +Wi + +0101100 +-4628 451 -4627 450 +4634 450 +4635 450 * +Wi + +0101100 +-4629 450 -4627 450 -4633 450 -4631 450 * +Wi + +0101100 ++4626 450 +4625 450 * +Wi + +0101100 ++4874 433 -4624 433 +4717 434 +4713 434 +4623 433 * +Wi + +0101100 +-4712 434 -4705 434 -4622 433 -5065 433 +4621 433 * +Wi + +0101100 ++4873 433 -4623 433 +4714 434 +4716 434 +4624 433 * +Wi + +0101100 +-4707 434 -4709 434 -4621 433 -5066 433 +4622 433 * +Wi + +0101100 ++4620 0 +4619 0 +4625 0 -4618 0 * +Wi + +0101100 ++4617 0 +4618 0 +4626 0 -4619 0 * +Wi + +0101100 ++4620 433 +4617 433 * +Wi + +0101100 ++4875 442 +4876 442 * +Wi + +0101100 +-4639 452 -4641 452 * +Wi + +0101100 ++4616 452 +4615 452 +4614 452 +4613 452 * +Wi + +0101100 +-4634 452 -4612 452 +4611 453 +4616 452 * +Wi + +0101100 +-4611 453 -4610 452 +4630 452 +4615 452 * +Wi + +0101100 +-4630 452 -4609 452 +4608 453 +4614 452 * +Wi + +0101100 +-4608 453 -4607 452 +4634 452 +4613 452 * +Wi + +0101100 +-4609 452 -4607 452 -4612 452 -4610 452 * +Wi + +0101100 ++4626 452 +4625 452 * +Wi + +0101100 ++4874 435 -4606 435 +4694 436 +4691 436 +4605 435 * +Wi + +0101100 +-4690 436 -4685 436 -4604 435 -5065 435 +4603 435 * +Wi + +0101100 ++4873 435 -4605 435 +4692 436 +4693 436 +4606 435 * +Wi + +0101100 +-4687 436 -4688 436 -4603 435 -5066 435 +4604 435 * +Wi + +0101100 ++4620 435 +4617 435 * +Wi + +0101100 ++4875 444 +4876 444 * +Wi + +0101100 ++4602 451 -4601 451 -4635 450 -4638 450 +4600 451 * +Wi + +0101100 ++4599 451 -4600 451 -4637 450 -4636 450 +4601 451 * +Wi + +0101100 ++4602 443 +4599 443 * +Wi + +0101100 +-4598 414 -4597 414 * +Wi + +0101100 ++4597 414 +4598 414 * +Wi + +0101100 +-4596 443 -4595 443 * +Wi + +0101100 +-4594 0 +4593 0 +4592 0 -4596 0 * +Wi + +0101100 +-4592 0 +4591 0 +4594 0 -4595 0 * +Wi + +0101100 ++4625 433 +4626 433 * +Wi + +0101100 +-4887 442 -4884 442 * +Wi + +0101100 +-4590 0 +4591 0 +4589 0 -4588 0 * +Wi + +0101100 +-4589 0 +4593 0 +4590 0 -4587 0 * +Wi + +0101100 +-4586 0 +4861 0 +4585 0 -4587 0 * +Wi + +0101100 +-4585 0 +4862 0 +4586 0 -4588 0 * +Wi + +0101100 ++4602 453 -4584 453 -4613 452 -4616 452 +4583 453 * +Wi + +0101100 ++4599 453 -4583 453 -4615 452 -4614 452 +4584 453 * +Wi + +0101100 ++4602 445 +4599 445 * +Wi + +0101100 +-4582 414 -4581 414 * +Wi + +0101100 ++4581 414 +4582 414 * +Wi + +0101100 +-4596 445 -4595 445 * +Wi + +0101100 ++4625 435 +4626 435 * +Wi + +0101100 +-4887 444 -4884 444 * +Wi + +0101100 +-4580 0 -4579 0 * +Wi + +0101100 ++4578 0 +4577 0 * +Wi + +0101100 +-4576 0 -4575 0 -4574 0 -4573 0 -4572 0 -4571 0 -4570 0 -4569 0 -4568 0 -4567 0 +-4566 0 -4565 0 -4564 0 * +Wi + +0101100 +-4563 0 -4562 0 +4561 0 -4560 0 +4559 0 -4558 0 +4557 0 -4556 0 -4555 0 -4554 0 +* +Wi + +0101100 ++4553 414 +4552 414 * +Wi + +0101100 +-4658 441 -4655 441 * +Wi + +0101100 +-4551 0 +4577 0 +4550 0 -4549 0 * +Wi + +0101100 +-4550 0 +4578 0 +4551 0 -4548 0 * +Wi + +0101100 +-4547 414 +4653 441 +4546 414 -4549 414 * +Wi + +0101100 +-4546 414 +4654 441 +4547 414 -4548 414 * +Wi + +0101100 +-4545 0 +4582 0 +4544 0 -4543 0 * +Wi + +0101100 +-4544 0 +4581 0 +4545 0 -4542 0 * +Wi + +0101100 ++4541 414 +4540 414 +4539 414 +4538 414 * +Wi + +0101100 +-4602 443 -4599 443 * +Wi + +0101100 +-4602 445 -4599 445 * +Wi + +0101100 +-4537 0 +4597 0 +4536 0 -4535 0 * +Wi + +0101100 +-4536 0 +4598 0 +4537 0 -4534 0 * +Wi + +0101100 ++4533 0 -4532 0 -4531 0 +4530 0 * +Wi + +0101100 ++4531 0 -4529 0 -4533 0 +4528 0 * +Wi + +0101100 ++4527 0 -4552 0 -4526 0 +4525 0 * +Wi + +0101100 ++4526 0 -4553 0 -4527 0 +4524 0 * +Wi + +0101100 ++4523 0 -4528 0 -4522 0 +4524 0 * +Wi + +0101100 ++4522 0 -4530 0 -4523 0 +4525 0 * +Wi + +0101100 +-4521 0 -4520 0 +4519 0 +4518 0 * +Wi + +0101100 +-4519 0 -4517 0 -4516 0 +4515 0 * +Wi + +0101100 ++4516 0 -4514 0 +4513 0 +4512 0 * +Wi + +0101100 +-4513 0 -4511 0 +4521 0 +4510 0 * +Wi + +0101100 ++4509 0 -4538 0 -4508 0 +4507 0 * +Wi + +0101100 ++4506 0 +4508 0 -4539 0 +4505 0 * +Wi + +0101100 +-4505 0 -4541 0 -4504 0 +4503 0 * +Wi + +0101100 ++4502 0 +4504 0 -4540 0 -4509 0 * +Wi + +0101100 ++4501 0 -4515 0 -4500 0 +4503 0 * +Wi + +0101100 ++4500 0 -4512 0 +4499 0 +4502 0 * +Wi + +0101100 +-4499 0 -4510 0 -4498 0 +4507 0 * +Wi + +0101100 ++4498 0 -4518 0 -4501 0 +4506 0 * +Wi + +0101100 +-4497 0 +4574 0 +4575 0 +4496 0 -4495 0 * +Wi + +0101100 ++4494 0 +4493 0 -4492 0 -4491 0 * +Wi + +0101100 ++4490 0 +4491 0 -4489 0 -4493 0 * +Wi + +0101100 ++4494 0 +4490 0 * +Wi + +0101100 +-4488 0 -4487 0 * +Wi + +0101100 ++4486 0 -4520 0 -4485 0 -4484 0 * +Wi + +0101100 +-4483 0 -4482 0 -4481 0 -4480 0 -4479 0 -4478 0 -4477 0 +4484 0 -4476 0 -4475 0 +-4474 0 * +Wi + +0101100 +-4492 0 -4489 0 * +Wi + +0101100 ++4473 0 -4514 0 -4472 0 +4471 0 * +Wi + +0101100 +-4470 0 +4555 0 +4469 0 -4468 0 * +Wi + +0101100 +-4470 0 -4554 0 -4467 0 +4466 0 * +Wi + +0101100 ++4465 0 -4556 0 +4469 0 +4464 0 * +Wi + +0101100 +-4463 0 +4563 0 -4467 0 -4462 0 * +Wi + +0101100 ++4461 0 +4465 0 -4557 0 +4460 0 * +Wi + +0101100 ++4459 0 -4558 0 +4460 0 +4458 0 * +Wi + +0101100 ++4457 0 +4459 0 -4559 0 +4456 0 * +Wi + +0101100 ++4455 0 -4560 0 +4456 0 +4454 0 * +Wi + +0101100 ++4453 0 +4455 0 -4561 0 +4452 0 * +Wi + +0101100 +-4463 0 -4562 0 +4452 0 +4451 0 * +Wi + +0101100 ++4450 0 -4454 0 -4449 0 +4448 0 * +Wi + +0101100 ++4449 0 +4457 0 -4447 0 -4446 0 * +Wi + +0101100 ++4447 0 -4458 0 -4445 0 +4444 0 * +Wi + +0101100 ++4445 0 +4461 0 -4443 0 -4442 0 * +Wi + +0101100 ++4443 0 -4464 0 -4441 0 +4440 0 * +Wi + +0101100 ++4441 0 -4468 0 +4439 0 +4438 0 * +Wi + +0101100 +-4439 0 -4466 0 -4437 0 +4436 0 * +Wi + +0101100 ++4437 0 -4462 0 +4435 0 +4434 0 * +Wi + +0101100 +-4435 0 -4451 0 -4433 0 +4432 0 * +Wi + +0101100 ++4433 0 +4453 0 -4450 0 -4431 0 * +Wi + +0101100 ++4430 0 +4478 0 -4429 0 +4428 0 * +Wi + +0101100 ++4427 0 +4475 0 -4426 0 +4425 0 * +Wi + +0101100 +-4424 0 +4529 0 +4423 0 -4481 0 +4422 0 -4421 0 * +Wi + +0101100 ++4429 0 +4479 0 -4420 0 -4419 0 * +Wi + +0101100 ++4420 0 +4480 0 +4422 0 +4418 0 * +Wi + +0101100 ++4417 0 +4474 0 -4427 0 -4416 0 * +Wi + +0101100 +-4415 0 -4482 0 -4423 0 +4532 0 +4424 0 -4414 0 * +Wi + +0101100 +-4415 0 +4483 0 -4417 0 +4413 0 * +Wi + +0101100 +-4412 0 -4411 0 +4473 0 +4517 0 -4485 0 -4476 0 -4426 0 -4410 0 * +Wi + +0101100 +-4412 0 -4409 0 -4408 0 +4407 0 * +Wi + +0101100 ++4430 0 -4477 0 +4486 0 +4511 0 -4472 0 -4406 0 +4405 0 -4404 0 * +Wi + +0101100 ++4403 0 -4402 0 +4405 0 +4401 0 * +Wi + +0101100 ++4408 0 +4400 0 -4399 0 -4398 0 * +Wi + +0101100 ++4397 0 -4396 0 -4399 0 +4395 0 * +Wi + +0101100 ++4394 0 +4393 0 -4403 0 -4392 0 * +Wi + +0101100 +-4391 0 +4390 0 -4397 0 -4389 0 * +Wi + +0101100 ++4394 0 -4388 0 +4391 0 +4387 0 * +Wi + +0101100 +-4431 0 +4432 0 +4434 0 +4436 0 +4438 0 +4440 0 -4442 0 +4444 0 -4446 0 +4448 0 +* +Wi + +0101100 ++4386 0 +4385 0 -4384 0 -4383 0 -4382 0 +4381 0 +4380 0 -4379 0 +4378 0 +4377 0 ++4376 0 -4375 0 -4374 0 +4373 0 +4372 0 +4371 0 -4370 0 * +Wi + +0101100 ++4410 0 +4369 0 -4370 0 -4368 0 * +Wi + +0101100 ++4369 0 -4371 0 +4367 0 -4425 0 * +Wi + +0101100 +-4367 0 -4372 0 -4366 0 +4416 0 * +Wi + +0101100 ++4366 0 -4373 0 +4365 0 -4413 0 * +Wi + +0101100 +-4364 0 -4376 0 +4363 0 -4418 0 * +Wi + +0101100 +-4363 0 -4377 0 -4362 0 +4419 0 * +Wi + +0101100 ++4362 0 -4378 0 +4361 0 -4428 0 * +Wi + +0101100 ++4404 0 +4360 0 -4379 0 +4361 0 * +Wi + +0101100 ++4360 0 -4380 0 +4359 0 -4401 0 * +Wi + +0101100 +-4359 0 -4381 0 -4358 0 +4392 0 * +Wi + +0101100 +-4387 0 +4357 0 -4382 0 -4358 0 * +Wi + +0101100 ++4389 0 +4356 0 -4383 0 -4357 0 * +Wi + +0101100 +-4395 0 +4355 0 -4384 0 -4356 0 * +Wi + +0101100 ++4355 0 -4385 0 -4354 0 +4398 0 * +Wi + +0101100 ++4354 0 -4386 0 -4368 0 -4407 0 * +Wi + +0101100 ++4414 0 +4421 0 -4364 0 -4375 0 -4374 0 +4365 0 * +Wi + +0101100 ++4390 0 -4396 0 -4400 0 +4409 0 -4411 0 -4471 0 -4406 0 +4402 0 -4393 0 -4388 0 +* +Wi + +0101100 +-4353 0 -4352 0 * +Wi + +0101100 ++4351 0 +4350 0 -4353 0 -4349 0 * +Wi + +0101100 ++4348 0 +4349 0 -4352 0 -4350 0 * +Wi + +0101100 ++4351 0 +4348 0 * +Wi + +0101100 +-4347 0 -4346 0 * +Wi + +0101100 +-4345 0 +4567 0 +4344 0 -4343 0 * +Wi + +0101100 +-4342 0 +4565 0 +4341 0 -4340 0 * +Wi + +0101100 +-4339 414 +4338 414 +4337 414 -4336 414 * +Wi + +0101100 +-4339 414 -4335 414 +4334 414 +4333 414 * +Wi + +0101100 ++4332 0 +4573 0 +4497 0 -4331 0 * +Wi + +0101100 +-4330 414 +4329 414 +4337 414 -4328 414 * +Wi + +0101100 +-4327 414 +4326 414 +4325 414 -4324 414 * +Wi + +0101100 +-4341 0 +4566 0 +4345 0 -4323 0 * +Wi + +0101100 +-4322 414 -4321 414 +4325 414 +4320 414 * +Wi + +0101100 +-4327 414 +4319 414 +4318 414 -4317 414 * +Wi + +0101100 ++4316 414 -4315 414 -4314 414 +4313 414 * +Wi + +0101100 +-4313 414 +4312 414 +4311 414 -4310 414 * +Wi + +0101100 +-4309 0 +4308 0 +4564 0 +4342 0 * +Wi + +0101100 ++4307 414 -4311 414 -4306 414 +4305 414 * +Wi + +0101100 ++4304 414 -4318 414 -4303 414 +4315 414 * +Wi + +0101100 +-4302 414 +4301 414 +4322 414 -4300 414 * +Wi + +0101100 ++4299 414 -4347 414 -4298 414 +4297 414 * +Wi + +0101100 ++4298 414 -4346 414 -4299 414 +4296 414 * +Wi + +0101100 ++4295 414 -4488 414 -4294 414 +4293 414 * +Wi + +0101100 ++4294 414 -4487 414 -4295 414 +4292 414 * +Wi + +0101100 ++4291 0 +4569 0 -4290 0 -4289 0 * +Wi + +0101100 +-4288 414 -4287 414 +4286 414 +4285 414 * +Wi + +0101100 +-4286 414 +4284 414 +4302 414 -4283 414 * +Wi + +0101100 +-4344 0 +4568 0 -4291 0 +4282 0 * +Wi + +0101100 +-4281 414 +4280 414 +4288 414 -4279 414 * +Wi + +0101100 ++4290 0 +4570 0 -4278 0 +4277 0 * +Wi + +0101100 ++4276 414 -4275 414 -4274 414 +4281 414 * +Wi + +0101100 +-4273 0 +4278 0 +4571 0 -4272 0 * +Wi + +0101100 +-4334 414 +4271 414 +4275 414 -4270 414 * +Wi + +0101100 ++4272 0 +4572 0 -4332 0 +4269 0 * +Wi + +0101100 +-4305 414 +4268 414 +4267 414 -4266 414 * +Wi + +0101100 +-4496 0 +4576 0 -4308 0 +4265 0 * +Wi + +0101100 ++4264 414 -4263 414 -4262 414 +4330 414 * +Wi + +0101100 +-4267 414 +4261 414 +4263 414 -4260 414 * +Wi + +0101100 ++4259 414 -4534 414 -4258 414 +4257 414 * +Wi + +0101100 ++4258 414 -4535 414 -4259 414 +4256 414 * +Wi + +0101100 ++4255 414 -4542 414 -4254 414 +4253 414 * +Wi + +0101100 ++4254 414 -4543 414 -4255 414 +4252 414 * +Wi + +0101100 +-4251 414 -4580 414 +4250 414 -4249 414 * +Wi + +0101100 +-4250 414 -4579 414 +4251 414 -4248 414 * +Wi + +0101100 +-4247 0 -4246 0 +4245 0 +4244 0 * +Wi + +0101100 ++4243 0 +4242 0 -4241 0 +4244 0 * +Wi + +0101100 ++4240 0 -4239 0 -4238 0 +4237 0 * +Wi + +0101100 +-4236 0 +4235 0 -4238 0 -4234 0 * +Wi + +0101100 +-4236 0 -4233 0 +4232 0 +4231 0 * +Wi + +0101100 +-4230 0 +4229 0 +4232 0 -4228 0 * +Wi + +0101100 +-4230 0 -4227 0 -4226 0 +4225 0 * +Wi + +0101100 ++4226 0 -4224 0 -4223 0 +4222 0 * +Wi + +0101100 +-4221 0 +4220 0 -4223 0 -4219 0 * +Wi + +0101100 +-4218 0 -4221 0 +4217 0 +4216 0 * +Wi + +0101100 +-4215 0 +4214 0 +4216 0 -4213 0 * +Wi + +0101100 +-4215 0 -4212 0 -4211 0 +4210 0 * +Wi + +0101100 +-4209 0 -4208 0 +4207 0 -4242 0 * +Wi + +0101100 ++4206 0 +4205 0 -4204 0 +4208 0 * +Wi + +0101100 +-4203 0 +4205 0 +4202 0 +4201 0 * +Wi + +0101100 +-4200 0 -4201 0 +4199 0 +4198 0 * +Wi + +0101100 ++4197 0 +4196 0 -4195 0 +4198 0 * +Wi + +0101100 +-4194 0 -4193 0 -4196 0 +4192 0 * +Wi + +0101100 ++4191 0 +4190 0 -4189 0 +4194 0 * +Wi + +0101100 +-4188 0 +4190 0 +4187 0 +4186 0 * +Wi + +0101100 +-4185 0 +4186 0 +4184 0 +4183 0 * +Wi + +0101100 +-4182 0 +4183 0 +4181 0 +4180 0 * +Wi + +0101100 +-4179 0 +4240 0 +4178 0 +4177 0 * +Wi + +0101100 ++4176 0 -4177 0 -4175 0 -4180 0 * +Wi + +0101100 ++4174 0 -4246 0 -4173 0 -4172 0 * +Wi + +0101100 +-4171 0 -4170 0 +4169 0 -4172 0 * +Wi + +0101100 ++4338 414 -4329 414 +4262 414 -4261 414 -4268 414 +4306 414 -4312 414 +4314 414 +4303 414 -4319 414 ++4326 414 +4321 414 -4301 414 -4284 414 +4287 414 -4280 414 +4274 414 -4271 414 +4335 414 * +Wi + +0101100 ++4169 414 +4173 414 +4245 414 +4241 414 -4207 414 +4204 414 +4202 414 +4199 414 +4195 414 +4193 414 ++4189 414 +4187 414 +4185 414 +4181 414 +4176 414 -4179 414 -4237 414 -4234 414 -4231 414 -4228 414 +-4225 414 -4222 414 -4219 414 +4218 414 -4213 414 -4210 414 +4168 414 +4167 414 * +Wi + +0101100 +-4249 414 -4248 414 * +Wi + +0101100 ++4253 414 +4252 414 * +Wi + +0101100 ++4257 414 +4256 414 * +Wi + +0101100 ++4293 414 +4292 414 * +Wi + +0101100 ++4297 414 +4296 414 * +Wi + +0101100 ++4166 0 -4211 0 +4168 0 -4165 0 * +Wi + +0101100 +-4164 0 +4166 0 +4212 0 +4214 0 -4217 0 +4220 0 +4224 0 +4227 0 +4229 0 +4233 0 ++4235 0 +4239 0 +4178 0 -4175 0 -4182 0 -4184 0 -4188 0 -4191 0 -4192 0 -4197 0 +-4200 0 -4203 0 -4206 0 +4209 0 -4243 0 -4247 0 -4174 0 -4171 0 * +Wi + +0101100 ++4167 0 +4170 0 -4164 0 +4165 0 * +Wi + +0101100 ++4163 414 +4162 414 -4161 414 -4160 414 * +Wi + +0101100 ++4159 414 +4158 414 +4157 414 -4156 414 -4155 414 -4154 414 * +Wi + +0101100 +-4153 0 -4152 0 +4151 0 +4150 0 * +Wi + +0101100 +-4149 0 -4148 0 +4147 0 +4146 0 * +Wi + +0101100 ++4145 414 +4148 414 -4144 414 -4143 414 * +Wi + +0101100 +-4142 414 -4141 414 -4140 414 +4139 414 +4138 414 -4137 414 * +Wi + +0101100 ++4136 0 +4143 0 -4135 0 -4134 0 * +Wi + +0101100 ++4133 0 +4132 0 -4131 0 -4130 0 * +Wi + +0101100 +-4129 0 -4128 0 +4127 0 +4126 0 * +Wi + +0101100 +-4151 0 +4125 0 +4130 0 -4124 0 * +Wi + +0101100 +-4123 0 -4162 0 +4122 0 +4153 0 * +Wi + +0101100 ++4121 0 -4120 0 -4119 0 +4118 0 * +Wi + +0101100 +-4117 0 +4119 0 -4116 0 -4115 0 +4114 0 +4113 0 -4112 0 * +Wi + +0101100 +-4111 0 +4110 0 +4113 0 -4109 0 * +Wi + +0101100 +-4108 414 -4107 414 -4106 416 +4105 414 +4104 414 +4103 414 -4111 414 * +Wi + +0101100 +-4102 414 -4101 414 +4100 414 +4106 416 * +Wi + +0101100 ++4104 414 +4105 414 +4100 414 -4099 414 -4115 414 +4098 414 * +Wi + +0101100 +-4097 414 +4096 414 +4107 414 +4102 414 -4095 414 * +Wi + +0101100 ++4094 0 -4093 0 -4121 0 +4092 0 * +Wi + +0101100 ++4091 0 -4126 0 -4090 0 +4094 0 * +Wi + +0101100 +-4097 0 +4089 0 +4128 0 -4088 0 * +Wi + +0101100 +-4112 0 -4117 0 +4118 0 +4092 0 +4090 0 -4127 0 -4089 0 +4096 0 -4108 0 +4109 0 +* +Wi + +0101100 +-4087 0 -4086 0 * +Wi + +0101100 ++4129 0 -4091 0 -4093 0 -4120 0 -4116 0 +4099 0 -4101 0 -4095 0 +4088 0 * +Wi + +0101100 ++4085 0 +4084 0 * +Wi + +0101100 ++4083 0 +4082 0 * +Wi + +0101100 +-4081 414 +4082 414 +4080 414 -4079 414 * +Wi + +0101100 +-4080 414 +4083 414 +4081 414 -4078 414 * +Wi + +0101100 +-4077 414 +4076 414 +4075 414 -4086 414 * +Wi + +0101100 +-4074 0 +4084 0 +4073 0 -4072 0 * +Wi + +0101100 ++4077 414 -4087 414 -4075 414 +4071 414 * +Wi + +0101100 +-4073 0 +4085 0 +4074 0 -4070 0 * +Wi + +0101100 ++4076 414 +4071 414 * +Wi + +0101100 +-4069 414 +4068 414 +4067 414 -4066 414 * +Wi + +0101100 +-4067 414 +4065 414 +4069 414 -4064 414 * +Wi + +0101100 ++4063 414 -4062 414 -4061 414 +4060 414 * +Wi + +0101100 +-4063 414 +4059 414 +4061 414 -4058 414 * +Wi + +0101100 +-4057 414 +4056 414 +4055 414 -4054 414 * +Wi + +0101100 +-4053 0 +4052 0 +4051 0 -4050 0 * +Wi + +0101100 ++4057 414 -4049 414 -4055 414 +4048 414 * +Wi + +0101100 +-4051 0 +4047 0 +4053 0 -4046 0 * +Wi + +0101100 ++4056 414 +4048 414 * +Wi + +0101100 ++4045 0 +4044 0 +4043 0 +4154 0 -4042 0 * +Wi + +0101100 +-4062 0 -4058 0 * +Wi + +0101100 +-4049 0 -4054 0 * +Wi + +0101100 ++4041 414 +4040 414 +4039 412 -4038 412 -4037 412 +4036 414 -4035 414 +4157 414 * +Wi + +0101100 ++4034 412 +4033 412 * +Wi + +0101100 ++4032 414 +4031 414 +4037 412 +4038 412 -4039 412 * +Wi + +0101100 +-4065 414 -4068 414 * +Wi + +0101100 +-4033 412 -4034 412 * +Wi + +0101100 +-4047 414 -4052 414 * +Wi + +0101100 +-4036 414 +4030 412 +4029 412 -4028 414 * +Wi + +0101100 +-4031 414 +4027 414 +4045 414 -4026 414 -4029 412 -4030 412 * +Wi + +0101100 +-4027 414 -4032 414 +4025 412 -4024 412 +4023 414 +4044 414 * +Wi + +0101100 +-4040 414 +4022 414 +4024 412 -4025 412 * +Wi + +0101100 +-4026 414 -4021 412 +4156 414 +4042 414 * +Wi + +0101100 +-4028 414 -4035 414 +4155 414 +4021 412 * +Wi + +0101100 +-4041 414 +4158 414 +4020 412 -4022 414 * +Wi + +0101100 +-4020 412 +4159 414 +4043 414 -4023 414 * +Wi + +0101100 +-4019 414 -4018 414 +4017 414 +4016 414 * +Wi + +0101100 +-4017 414 -4015 414 +4019 414 +4014 414 * +Wi + +0101100 +-4013 414 -4012 414 -4011 414 -4010 414 -4009 414 -4008 414 +4007 414 +4006 414 -4005 414 * +Wi + +0101100 ++4004 414 +4008 414 -4003 414 +4002 414 -4001 414 -4000 414 -3999 414 -4006 414 * +Wi + +0101100 ++4140 0 -3998 0 -4009 0 -4003 0 +3997 0 * +Wi + +0101100 +-3996 0 -3995 0 * +Wi + +0101100 +-4137 414 +3994 414 +3993 414 +3992 390 -3991 390 -3990 390 +3989 414 -3988 414 * +Wi + +0101100 ++3987 390 +3986 390 * +Wi + +0101100 ++3990 390 +3991 390 -3992 390 +3985 414 +3984 414 +3983 414 +3982 414 * +Wi + +0101100 +-4016 414 -4014 414 * +Wi + +0101100 +-3986 390 -3987 390 * +Wi + +0101100 +-3981 414 -3980 414 * +Wi + +0101100 ++3979 0 -3983 0 -3978 0 +4013 0 * +Wi + +0101100 +-3977 414 -3985 414 +3976 390 +4001 414 * +Wi + +0101100 +-3976 390 -3993 414 +3975 414 +4000 414 * +Wi + +0101100 ++4011 414 -3974 390 -3982 414 +3978 414 * +Wi + +0101100 ++4012 414 -3973 414 -3989 414 +3974 390 * +Wi + +0101100 ++4005 414 +3999 414 +3977 414 -3984 414 -3979 414 * +Wi + +0101100 +-3988 414 +4141 414 +3972 390 -3973 414 * +Wi + +0101100 +-3972 390 +4142 414 +3998 414 -4010 414 * +Wi + +0101100 ++3997 414 -4002 414 -3971 390 +4139 414 * +Wi + +0101100 ++3971 390 -3975 414 -3994 414 +4138 414 * +Wi + +0101100 +-3970 414 +3969 414 +3968 414 -3995 414 * +Wi + +0101100 +-3967 0 +3980 0 +3966 0 -3965 0 * +Wi + +0101100 ++3970 414 -3996 414 -3968 414 +3964 414 * +Wi + +0101100 +-3966 0 +3981 0 +3967 0 -3963 0 * +Wi + +0101100 ++3969 414 +3964 414 * +Wi + +0101100 ++3962 0 -3961 0 -4132 0 -3960 0 * +Wi + +0101100 ++3959 0 +3962 0 -3958 0 -3957 0 * +Wi + +0101100 +-3956 0 -3955 0 +4134 0 +3954 0 * +Wi + +0101100 ++3953 0 +3952 0 -3957 0 -3951 0 * +Wi + +0101100 ++3950 0 +3953 0 -3949 0 -3956 0 * +Wi + +0101100 +-3948 0 -4146 0 +3947 0 +3946 0 * +Wi + +0101100 ++3945 0 +3946 0 -3944 0 -3943 0 * +Wi + +0101100 +-3942 414 +4161 414 +4123 414 -4150 414 +4124 414 +4131 414 +3961 414 -3958 414 -3952 414 -3949 414 +-3954 414 +4135 414 +4144 414 +4149 414 +3948 414 -3944 414 -3941 414 +3940 414 * +Wi + +0101100 ++4060 414 +4059 414 * +Wi + +0101100 +-4110 414 +4103 414 -4098 414 +4114 414 * +Wi + +0101100 ++4495 414 -4265 414 +4309 414 +4340 414 +4323 414 +4343 414 -4282 414 +4289 414 -4277 414 +4273 414 +-4269 414 +4331 414 * +Wi + +0101100 ++4004 414 +4007 414 * +Wi + +0101100 +-3939 414 +3938 414 +3937 414 +3945 414 -4163 414 -3947 414 -4122 414 -4147 414 +4152 414 -4145 414 +-4125 414 -4136 414 -4133 414 +3955 414 +3960 414 +3950 414 +3959 414 +3951 414 * +Wi + +0101100 +-3936 359 -3935 359 * +Wi + +0101100 +-3934 368 -3933 368 * +Wi + +0101100 +-4304 414 -4316 414 +4317 414 +4310 414 -4324 414 -4307 414 -4320 414 +4266 414 +4300 414 +4260 414 ++4283 414 -4264 414 -4285 414 +4328 414 +4279 414 -4336 414 -4276 414 -4333 414 +4270 414 * +Wi + +0101100 +-3934 399 -3933 399 * +Wi + +0101100 +-3936 322 -3935 322 * +Wi + +0101100 +-3934 345 -3933 345 * +Wi + +0101100 +-3936 387 -3935 387 * +Wi + +0101100 ++3932 322 +3931 322 * +Wi + +0101100 +-4050 414 -4046 414 * +Wi + +0101100 +-3936 0 -3935 0 * +Wi + +0101100 ++3931 0 +3932 0 * +Wi + +0101100 ++3933 345 +3934 345 * +Wi + +0101100 +-4064 414 -4066 414 * +Wi + +0101100 ++3933 368 +3934 368 * +Wi + +0101100 +-4079 414 -4078 414 * +Wi + +0101100 ++3932 359 +3931 359 * +Wi + +0101100 +-4070 414 -4072 414 * +Wi + +0101100 ++3932 387 +3931 387 * +Wi + +0101100 +-3965 414 -3963 414 * +Wi + +0101100 ++3933 399 +3934 399 * +Wi + +0101100 +-4015 414 -4018 414 * +Wi + +0101100 +-3930 0 -3937 0 +4160 0 +3942 0 * +Wi + +0101100 ++3929 0 +3941 0 -3943 0 -3938 0 * +Wi + +0101100 +-3939 0 +3929 0 +3940 0 -3930 0 * +Wi + +0101100 +-3928 423 +3927 423 +3926 423 +3925 423 -3924 423 * +Wi + +0101100 +-3925 423 +3923 423 +3922 423 +3928 423 -3921 423 * +Wi + +0101100 ++4173 414 +4169 414 +4167 414 +4168 414 -4210 414 -4213 414 +4218 414 -4219 414 -4222 414 -4225 414 +-4228 414 -4231 414 -4234 414 -4237 414 -4179 414 +4176 414 +4181 414 +4185 414 +4187 414 +4189 414 ++4193 414 +4195 414 +4199 414 +4202 414 +4204 414 -4207 414 +4241 414 +4245 414 * +Wi + +0101100 +-3921 423 -3924 423 * +Wi + +0101100 +-3920 423 -3919 423 * +Wi + +0101100 +-3918 423 +3917 423 +3916 423 -4271 414 * +Wi + +0101100 +-3915 423 +3914 423 +3913 423 -4280 414 * +Wi + +0101100 +-3912 423 +3911 423 +3910 423 -4284 414 * +Wi + +0101100 +-3910 423 +3909 423 +3908 423 -4301 414 * +Wi + +0101100 +-3907 423 +3906 423 +3905 423 -4319 414 * +Wi + +0101100 +-3904 423 +3903 423 +3902 423 -4312 414 * +Wi + +0101100 +-3901 423 +3900 423 +3899 423 -4268 414 * +Wi + +0101100 +-3899 423 +3898 423 +3897 423 -4261 414 * +Wi + +0101100 +-3896 423 +3895 423 +3894 423 -4329 414 * +Wi + +0101100 ++3893 0 -3892 0 -3891 0 +3890 0 * +Wi + +0101100 ++3889 0 -3890 0 -3888 0 +3892 0 * +Wi + +0101100 ++3887 0 -3886 0 -3885 0 +3884 0 * +Wi + +0101100 ++3883 0 -3884 0 -3882 0 +3886 0 * +Wi + +0101100 +-3881 0 +3880 0 +3879 0 -3878 0 * +Wi + +0101100 +-3879 0 +3877 0 +3881 0 -3876 0 * +Wi + +0101100 +-3875 0 +3874 0 +3873 0 -3872 0 * +Wi + +0101100 +-3873 0 +3871 0 +3875 0 -3870 0 * +Wi + +0101100 ++3880 0 +3877 0 * +Wi + +0101100 ++3869 0 +3868 0 * +Wi + +0101100 ++3874 0 +3871 0 * +Wi + +0101100 ++3867 0 +3866 0 * +Wi + +0101100 +-3865 423 +3864 423 +3863 423 +3862 423 -3919 423 * +Wi + +0101100 +-3862 423 +3861 423 +3860 423 +3865 423 -3920 423 * +Wi + +0101100 +-3859 423 +3882 423 +3858 423 -4293 414 * +Wi + +0101100 +-3858 423 +3885 423 +3859 423 -4292 414 * +Wi + +0101100 +-3857 423 +3869 423 +3856 423 -4257 414 * +Wi + +0101100 +-3856 423 +3868 423 +3857 423 -4256 414 * +Wi + +0101100 +-3855 423 +3867 423 +3854 423 -4253 414 * +Wi + +0101100 +-3854 423 +3866 423 +3855 423 -4252 414 * +Wi + +0101100 ++3853 423 -3852 423 -3851 423 +4249 414 * +Wi + +0101100 ++3851 423 -3850 423 -3853 423 +4248 414 * +Wi + +0101100 +-3849 423 +3888 423 +3848 423 -4296 414 * +Wi + +0101100 +-3848 423 +3891 423 +3849 423 -4297 414 * +Wi + +0101100 +-3847 423 +3846 423 +3894 423 -4338 414 * +Wi + +0101100 ++4262 414 -3897 423 +3845 423 +3896 423 * +Wi + +0101100 ++4306 414 -3902 423 -3844 423 +3901 423 * +Wi + +0101100 ++4314 414 -3843 423 -3842 423 +3904 423 * +Wi + +0101100 ++4303 414 -3905 423 -3841 423 +3843 423 * +Wi + +0101100 +-3907 423 +3840 423 +3839 423 -4326 414 * +Wi + +0101100 +-3908 423 +3838 423 +3839 423 +4321 414 * +Wi + +0101100 +-3913 423 +3837 423 +3912 423 +4287 414 * +Wi + +0101100 ++4274 414 -3916 423 -3836 423 +3915 423 * +Wi + +0101100 +-3847 423 +3835 423 +3918 423 +4335 414 * +Wi + +0101100 ++3895 423 +3845 423 -3846 423 +3898 423 +3835 423 +3900 423 +3917 423 -3844 423 -3836 423 +3903 423 ++3914 423 -3842 423 +3837 423 -3841 423 +3911 423 +3906 423 +3909 423 -3840 423 +3838 423 * +Wi + +0101100 +-3889 423 -3893 423 * +Wi + +0101100 ++3834 407 -3833 407 * +Wi + +0101100 ++3832 454 +3831 454 * +Wi + +0101100 ++3830 407 -3829 407 * +Wi + +0101100 ++3832 455 +3831 455 * +Wi + +0101100 +-3883 423 -3887 423 * +Wi + +0101100 ++3828 456 +3827 456 * +Wi + +0101100 +-3927 423 +3826 422 +3829 407 -3825 407 -3922 423 * +Wi + +0101100 +-3926 423 -3923 423 +3825 407 -3830 407 -3826 422 * +Wi + +0101100 +-3864 423 +3824 425 +3833 407 -3823 407 -3860 423 * +Wi + +0101100 +-3863 423 -3861 423 +3823 407 -3834 407 -3824 425 * +Wi + +0101100 +-3831 0 -3832 0 * +Wi + +0101100 ++3822 0 +3821 0 * +Wi + +0101100 +-3822 455 -3821 455 * +Wi + +0101100 ++3870 423 +3872 423 * +Wi + +0101100 +-3822 454 -3821 454 * +Wi + +0101100 ++3876 423 +3878 423 * +Wi + +0101100 +-3820 456 -3819 456 * +Wi + +0101100 ++3850 423 +3852 423 * +Wi + +0101100 +-3827 0 -3828 0 * +Wi + +0101100 ++3819 0 +3820 0 * +Wi + +0101100 +-3818 0 -3817 0 +3816 0 +3815 0 * +Wi + +0101100 +-3814 0 -3815 0 +3813 0 +3817 0 * +Wi + +0101100 +-3816 0 -3813 0 * +Wi + +0101100 ++4723 0 +4731 0 * +Wi + +0101100 +-3812 0 +3811 0 +3810 0 -3809 0 * +Wi + +0101100 +-3810 0 +3808 0 +3812 0 -3807 0 * +Wi + +0101100 ++3807 0 +3806 0 -3805 0 -3804 0 * +Wi + +0101100 ++3809 0 +3804 0 -3803 0 -3806 0 * +Wi + +0101100 +-3802 0 +3831 0 +3801 0 -3800 0 * +Wi + +0101100 +-3801 0 +3832 0 +3802 0 -3799 0 * +Wi + +0101100 +-3798 0 -3797 0 * +Wi + +0101100 ++3796 0 +3795 0 * +Wi + +0101100 ++3794 0 -3799 0 -3793 0 +3796 0 * +Wi + +0101100 ++3793 0 -3800 0 -3794 0 +3795 0 * +Wi + +0101100 ++3792 0 -3808 0 -3791 0 +3790 0 * +Wi + +0101100 ++3791 0 -3811 0 -3792 0 +3789 0 * +Wi + +0101100 ++3788 0 -4722 0 -3787 0 +3790 0 * +Wi + +0101100 ++3787 0 -4727 0 -3788 0 +3789 0 * +Wi + +0101100 +-3786 0 +3818 0 +3785 0 -3784 0 * +Wi + +0101100 +-3785 0 +3814 0 +3786 0 -3783 0 * +Wi + +0101100 ++3782 0 -3783 0 -3781 0 +3780 0 * +Wi + +0101100 ++3781 0 -3784 0 -3782 0 +3779 0 * +Wi + +0101100 +-3778 0 +3821 0 +3777 0 -3776 0 * +Wi + +0101100 +-3777 0 +3822 0 +3778 0 -3775 0 * +Wi + +0101100 +-3774 0 -3773 0 * +Wi + +0101100 ++3780 0 +3779 0 * +Wi + +0101100 ++3772 0 -3773 0 -3771 0 +3775 0 * +Wi + +0101100 ++3771 0 -3774 0 -3772 0 +3776 0 * +Wi + +0101100 +-3770 0 +3798 0 +3769 0 -3768 0 * +Wi + +0101100 +-3769 0 +3797 0 +3770 0 -3767 0 * +Wi + +0101100 ++3766 0 +3765 0 * +Wi + +0101100 +-3803 0 -3805 0 * +Wi + +0101100 ++3764 0 +3767 0 -3763 0 -3766 0 * +Wi + +0101100 ++3763 0 +3768 0 -3764 0 -3765 0 * +Wi + +0101100 ++3762 0 -3761 0 -3760 0 +3759 0 * +Wi + +0101100 ++3760 0 -3758 0 -3762 0 +3757 0 * +Wi + +0101100 +-3756 404 +3755 404 +3754 404 -3753 404 * +Wi + +0101100 +-3752 404 -3751 404 * +Wi + +0101100 +-3750 404 -3749 404 * +Wi + +0101100 +-3758 404 -3761 404 * +Wi + +0101100 +-3748 404 -3747 404 * +Wi + +0101100 ++3746 0 -3755 0 +3745 0 +3744 0 * +Wi + +0101100 +-3754 404 -3746 404 +3743 404 +3742 404 -3741 404 -3740 404 +3739 404 * +Wi + +0101100 ++3738 0 +3737 0 +3736 0 -3743 0 -3744 0 +3735 0 +3734 0 +3733 0 +3732 0 +3731 0 +* +Wi + +0101100 ++3730 404 -3729 404 -3740 404 +3728 404 * +Wi + +0101100 ++3727 0 -3726 0 -3725 0 +3732 0 -3724 0 * +Wi + +0101100 ++3725 0 -3723 0 -3727 0 +3722 0 +3733 0 * +Wi + +0101100 ++3721 0 -3720 0 -3719 0 +3737 0 -3718 0 * +Wi + +0101100 ++3719 0 -3717 0 -3721 0 +3716 0 +3738 0 * +Wi + +0101100 +-3715 404 +3730 404 +3714 404 -3713 404 * +Wi + +0101100 +-3723 0 -3726 0 * +Wi + +0101100 ++3712 0 +3711 0 * +Wi + +0101100 +-3717 0 -3720 0 * +Wi + +0101100 ++3710 0 +3709 0 * +Wi + +0101100 +-3708 404 +3707 404 +3706 404 +3705 404 * +Wi + +0101100 +-3704 404 +3703 404 +3702 404 -3701 404 * +Wi + +0101100 +-3700 404 +3699 404 +3698 404 -3697 404 * +Wi + +0101100 ++3699 404 -3696 404 +3695 404 -3694 404 +3693 404 * +Wi + +0101100 +-3692 404 +3691 404 +3690 404 -3694 404 -3689 404 * +Wi + +0101100 +-3688 404 +3687 404 +3692 404 -3686 404 * +Wi + +0101100 +-3685 404 +3684 404 +3688 404 -3683 404 * +Wi + +0101100 +-3682 404 +3681 404 +3680 404 -3679 404 * +Wi + +0101100 +-3678 404 -3677 404 -3676 404 +3675 404 * +Wi + +0101100 +-3674 404 +3673 404 -3676 404 * +Wi + +0101100 +-3672 404 +3671 404 +3670 404 -3677 404 -3673 404 -3669 404 * +Wi + +0101100 +-3668 404 +3667 404 +3666 404 -3665 404 * +Wi + +0101100 ++3664 404 +3663 404 +3668 404 -3662 404 * +Wi + +0101100 +-3661 404 +3660 404 +3659 404 -3664 404 * +Wi + +0101100 +-3658 404 +3657 404 +3656 404 -3655 404 * +Wi + +0101100 ++3654 404 -3653 406 +3652 406 +3651 404 * +Wi + +0101100 +-3652 406 +3650 406 -3649 404 -3648 404 +3647 404 * +Wi + +0101100 ++3646 404 -3645 404 -3650 406 +3653 406 * +Wi + +0101100 ++3644 404 -3643 406 -3642 406 +3645 404 * +Wi + +0101100 ++3642 406 -3641 406 -3640 406 -3647 404 -3639 404 +3649 404 * +Wi + +0101100 ++3638 404 +3637 406 +3641 406 +3643 406 * +Wi + +0101100 ++3636 404 -3651 404 +3640 406 -3637 406 * +Wi + +0101100 ++3635 404 +3634 405 +3633 405 +3632 404 * +Wi + +0101100 +-3633 405 -3631 405 -3630 404 -3629 404 +3628 404 * +Wi + +0101100 ++3627 404 -3626 404 +3631 405 -3634 405 * +Wi + +0101100 ++3625 404 +3624 405 +3623 405 +3626 404 * +Wi + +0101100 +-3623 405 -3622 405 -3621 405 -3628 404 -3620 404 +3630 404 * +Wi + +0101100 ++3619 404 +3618 405 +3622 405 -3624 405 * +Wi + +0101100 ++3617 404 -3632 404 +3621 405 -3618 405 * +Wi + +0101100 ++3616 404 +3615 398 +3614 398 +3613 404 * +Wi + +0101100 +-3614 398 -3612 398 -3611 404 -3610 404 +3609 404 * +Wi + +0101100 ++3608 404 -3607 404 +3612 398 -3615 398 * +Wi + +0101100 ++3606 404 +3605 398 +3604 398 +3607 404 * +Wi + +0101100 +-3604 398 -3622 398 -3603 398 -3609 404 -3602 404 +3601 404 -3600 404 -3599 404 +3611 404 * +Wi + +0101100 ++3598 404 +3597 398 +3622 398 -3605 398 * +Wi + +0101100 ++3596 404 -3613 404 +3603 398 -3597 398 * +Wi + +0101100 ++3595 0 -3594 0 -3593 0 +3592 0 * +Wi + +0101100 ++3591 0 -3590 0 -3589 0 +3588 0 * +Wi + +0101100 +-3587 0 +3586 0 +3585 0 -3589 0 * +Wi + +0101100 +-3584 0 +3583 0 +3582 0 -3581 0 * +Wi + +0101100 ++3580 0 -3579 0 -3578 0 +3577 0 * +Wi + +0101100 ++3576 0 +3575 0 -3574 0 -3573 0 * +Wi + +0101100 ++3572 0 +3571 0 -3570 0 -3569 0 * +Wi + +0101100 +-3568 0 -3567 0 +3566 0 +3565 0 * +Wi + +0101100 ++3564 0 -3563 0 -3562 0 +3561 0 * +Wi + +0101100 +-3560 0 -3559 0 +3558 0 +3557 0 * +Wi + +0101100 +-3556 0 -3555 0 +3554 0 +3553 0 * +Wi + +0101100 +-3552 0 +3551 0 +3550 0 -3549 0 * +Wi + +0101100 ++3551 0 +3548 0 +3547 0 -3546 0 * +Wi + +0101100 +-3545 0 +3544 0 +3543 0 -3542 0 * +Wi + +0101100 +-3690 0 +3541 0 +3695 0 * +Wi + +0101100 +-3545 0 -3540 0 +3547 0 +3539 0 * +Wi + +0101100 ++3549 0 -3538 0 -3537 0 +3536 0 * +Wi + +0101100 +-3535 0 +3534 0 +3533 0 +3553 0 * +Wi + +0101100 ++3532 0 -3559 0 -3531 0 -3534 0 * +Wi + +0101100 ++3530 0 +3529 0 -3528 0 +3557 0 * +Wi + +0101100 +-3527 0 +3562 0 +3526 0 +3525 0 * +Wi + +0101100 +-3524 0 -3523 0 +3522 0 -3564 0 * +Wi + +0101100 +-3521 0 -3567 0 +3520 0 +3523 0 * +Wi + +0101100 +-3519 0 +3571 0 +3518 0 +3565 0 * +Wi + +0101100 +-3517 0 +3575 0 +3516 0 -3569 0 * +Wi + +0101100 +-3515 0 +3514 0 -3578 0 -3513 0 * +Wi + +0101100 ++3580 0 +3512 0 -3583 0 -3511 0 * +Wi + +0101100 ++3581 0 -3510 0 -3586 0 +3509 0 * +Wi + +0101100 ++3591 0 -3508 0 -3593 0 +3507 0 * +Wi + +0101100 ++3655 404 -3506 404 -3660 404 +3505 404 * +Wi + +0101100 +-3666 404 -3504 404 +3503 404 +3502 404 * +Wi + +0101100 +-3503 404 -3501 404 +3672 404 +3500 404 * +Wi + +0101100 +-3678 404 -3670 404 -3499 404 +3498 404 +3497 404 * +Wi + +0101100 +-3498 404 -3496 404 +3495 404 +3494 404 * +Wi + +0101100 +-3495 404 -3493 404 +3682 404 +3492 404 * +Wi + +0101100 +-3680 404 -3491 404 -3600 404 +3490 404 +3489 404 * +Wi + +0101100 +-3490 404 +3601 404 -3488 404 +3487 404 +3486 404 * +Wi + +0101100 +-3487 404 -3485 404 +3484 404 +3483 404 * +Wi + +0101100 +-3484 404 -3482 404 +3481 404 +3480 404 * +Wi + +0101100 +-3481 404 -3479 404 +3685 404 +3478 404 * +Wi + +0101100 ++3697 404 -3477 404 -3703 404 +3476 404 * +Wi + +0101100 ++3701 404 -3475 404 -3707 404 +3474 404 * +Wi + +0101100 +-3705 404 +3473 404 +3472 404 +3471 404 * +Wi + +0101100 ++3713 404 -3470 404 -3657 404 +3469 404 * +Wi + +0101100 +-3729 0 +3741 0 -3468 0 +3467 0 -3473 0 -3706 0 +3475 0 -3702 0 +3477 0 -3698 0 +-3696 0 -3541 0 -3691 0 -3687 0 -3684 0 +3479 0 +3482 0 +3485 0 +3488 0 -3602 0 +-3610 0 -3599 0 +3491 0 -3681 0 +3493 0 +3496 0 +3499 0 -3671 0 +3501 0 +3504 0 +-3667 0 -3663 0 -3659 0 +3506 0 -3656 0 +3470 0 -3714 0 * +Wi + +0101100 +-3639 0 -3648 0 * +Wi + +0101100 +-3620 0 -3629 0 * +Wi + +0101100 ++3466 0 -3747 0 -3465 0 +3464 0 * +Wi + +0101100 ++3465 0 -3748 0 -3466 0 +3463 0 * +Wi + +0101100 +-3749 0 -3462 0 +3712 0 +3461 0 * +Wi + +0101100 +-3750 0 -3461 0 +3711 0 +3462 0 * +Wi + +0101100 +-3751 0 -3460 0 +3710 0 +3459 0 * +Wi + +0101100 +-3752 0 -3459 0 +3709 0 +3460 0 * +Wi + +0101100 ++3458 404 -3472 404 -3467 404 +3457 404 -3735 404 -3745 404 +3756 404 * +Wi + +0101100 ++3731 0 -3716 0 +3718 0 +3736 0 +3742 0 -3468 0 +3457 0 +3734 0 -3722 0 +3724 0 +* +Wi + +0101100 +-3757 0 -3759 0 * +Wi + +0101100 +-3463 0 -3464 0 * +Wi + +0101100 +-3728 404 +3739 404 -3753 404 +3458 404 +3471 404 -3708 404 +3474 404 -3704 404 +3476 404 -3700 404 +-3693 404 -3689 404 -3686 404 -3683 404 +3478 404 +3480 404 +3483 404 +3486 404 +3489 404 -3679 404 ++3492 404 +3494 404 +3497 404 -3675 404 -3674 404 -3669 404 +3500 404 +3502 404 -3665 404 -3662 404 +-3661 404 +3505 404 -3658 404 +3469 404 -3715 404 * +Wi + +0101100 ++3636 404 +3638 404 +3644 404 +3646 404 +3654 404 * +Wi + +0101100 ++3617 404 +3619 404 +3625 404 +3627 404 +3635 404 * +Wi + +0101100 ++3596 404 +3598 404 +3606 404 +3608 404 +3616 404 * +Wi + +0101100 ++3456 404 +3455 404 +3454 404 -3453 404 +3452 404 +3451 404 -3450 404 -3449 404 +3448 404 +3447 404 +-3446 404 +3513 404 +3577 404 +3511 404 +3584 404 -3509 404 +3587 404 +3588 404 -3507 404 +3592 404 ++3445 404 +3444 404 +3443 404 +3442 404 +3441 404 +3440 404 +3439 404 +3438 404 -3437 404 +3436 404 ++3435 404 -3434 404 -3526 404 +3563 404 -3522 404 -3520 404 +3566 404 -3518 404 -3570 404 -3516 404 +-3574 404 +3433 404 * +Wi + +0101100 ++3432 404 +3431 404 -3430 404 -3542 404 -3539 404 -3546 404 +3552 404 -3536 404 -3429 404 +3428 404 ++3427 404 -3426 404 +3425 404 +3424 404 +3423 404 +3422 404 +3421 404 +3420 404 +3419 404 +3418 404 ++3554 404 -3533 404 +3531 404 +3558 404 +3528 404 +3417 404 +3416 404 +3415 404 +3414 404 -3413 404 ++3412 404 +3411 404 -3410 404 -3409 404 * +Wi + +0101100 +-3408 0 +3449 0 -3407 0 -3406 0 * +Wi + +0101100 ++3405 0 -3404 0 +3515 0 +3446 0 * +Wi + +0101100 +-3403 0 -3402 0 +3407 0 +3450 0 * +Wi + +0101100 ++3401 0 +3453 0 -3400 0 -3399 0 * +Wi + +0101100 +-3398 0 -3525 0 +3434 0 +3397 0 * +Wi + +0101100 ++3437 0 -3396 0 -3395 0 -3394 0 * +Wi + +0101100 +-3393 0 +3392 0 +3426 0 +3391 0 * +Wi + +0101100 ++3429 0 +3537 0 -3390 0 -3389 0 * +Wi + +0101100 +-3388 0 +3543 0 +3430 0 +3387 0 * +Wi + +0101100 ++3409 0 -3386 0 -3385 0 -3384 0 * +Wi + +0101100 +-3383 0 -3382 0 +3386 0 +3410 0 * +Wi + +0101100 ++3381 0 +3413 0 -3380 0 -3379 0 * +Wi + +0101100 +-3417 0 -3529 0 +3378 0 +3377 0 * +Wi + +0101100 ++3376 0 +3380 0 -3414 0 -3375 0 * +Wi + +0101100 +-3425 0 -3392 0 +3374 0 +3373 0 * +Wi + +0101100 ++3372 0 +3371 0 -3422 0 -3370 0 * +Wi + +0101100 +-3421 0 -3371 0 +3369 0 +3368 0 * +Wi + +0101100 ++3367 0 -3555 0 -3418 0 +3366 0 * +Wi + +0101100 +-3441 0 -3365 0 +3364 0 +3363 0 * +Wi + +0101100 ++3362 0 +3396 0 -3438 0 -3361 0 * +Wi + +0101100 +-3360 0 +3359 0 +3400 0 -3454 0 * +Wi + +0101100 ++3358 0 -3433 0 -3573 0 +3357 0 * +Wi + +0101100 +-3445 0 +3595 0 +3356 0 +3355 0 * +Wi + +0101100 ++3354 0 +3365 0 -3442 0 +3353 0 * +Wi + +0101100 ++3391 404 -3352 404 -3389 404 +3428 404 +3427 404 * +Wi + +0101100 ++3436 404 +3435 404 +3397 404 -3351 404 -3394 404 * +Wi + +0101100 ++3412 0 +3350 0 -3349 0 +3381 0 * +Wi + +0101100 +-3348 0 -3350 0 +3411 0 -3383 0 * +Wi + +0101100 ++3440 0 +3347 0 -3346 0 +3363 0 * +Wi + +0101100 +-3345 0 -3347 0 +3439 0 -3361 0 * +Wi + +0101100 ++3353 404 -3344 404 +3355 404 +3444 404 +3443 404 * +Wi + +0101100 ++3432 404 +3431 404 +3387 404 -3343 404 -3384 404 * +Wi + +0101100 ++3448 404 +3447 404 +3405 404 -3342 404 -3408 404 * +Wi + +0101100 ++3424 0 +3341 0 -3340 0 +3373 0 * +Wi + +0101100 +-3339 0 -3341 0 +3423 0 -3370 0 * +Wi + +0101100 ++3452 0 +3338 0 -3337 0 +3401 0 * +Wi + +0101100 +-3336 0 -3338 0 +3451 0 -3403 0 * +Wi + +0101100 +-3360 404 -3335 404 +3358 404 +3456 404 +3455 404 * +Wi + +0101100 +-3375 404 -3334 404 +3377 404 +3416 404 +3415 404 * +Wi + +0101100 ++3420 404 +3419 404 +3366 404 -3333 404 +3368 404 * +Wi + +0101100 +-3357 0 +3576 0 +3517 0 +3572 0 +3519 0 -3568 0 +3521 0 +3524 0 -3561 0 +3527 0 ++3398 0 -3351 0 +3395 0 -3362 0 -3345 0 -3346 0 -3364 0 -3354 0 -3344 0 -3356 0 +-3594 0 +3508 0 -3590 0 -3585 0 +3510 0 -3582 0 -3512 0 -3579 0 -3514 0 +3404 0 +-3342 0 +3406 0 +3402 0 -3336 0 -3337 0 +3399 0 -3359 0 -3335 0 * +Wi + +0101100 ++3390 0 +3538 0 -3550 0 +3548 0 +3540 0 +3544 0 +3388 0 -3343 0 +3385 0 +3382 0 +-3348 0 -3349 0 +3379 0 -3376 0 -3334 0 -3378 0 -3530 0 -3560 0 -3532 0 +3535 0 +-3556 0 -3367 0 -3333 0 -3369 0 -3372 0 -3339 0 -3340 0 -3374 0 +3393 0 -3352 0 +* +Wi + +0101100 +-3332 403 -3432 404 +3331 403 -3411 404 -3412 404 +3330 403 -3415 404 +3329 403 -3328 403 -3327 403 +* +Wi + +0101100 +-3329 403 -3416 404 +3326 403 -3431 404 +3332 403 -3325 403 -3324 403 * +Wi + +0101100 +-3323 403 -3739 404 -3322 403 +3321 403 * +Wi + +0101100 ++3320 403 -3319 403 -3458 404 +3318 403 * +Wi + +0101100 +-3317 403 -3471 404 +3319 403 -3316 403 * +Wi + +0101100 ++3315 403 -3474 404 -3314 403 +3313 403 * +Wi + +0101100 ++3312 403 -3476 404 -3311 403 +3310 403 * +Wi + +0101100 ++3309 403 -3308 403 -3307 403 -3478 404 * +Wi + +0101100 ++3307 403 +3306 403 -3305 403 -3304 403 -3480 404 * +Wi + +0101100 ++3304 403 -3303 403 -3302 403 -3483 404 * +Wi + +0101100 ++3302 403 -3301 403 -3300 403 -3486 404 * +Wi + +0101100 ++3300 403 -3299 403 -3298 403 -3489 404 * +Wi + +0101100 ++3297 403 -3296 403 -3295 403 -3492 404 * +Wi + +0101100 ++3295 403 -3294 403 -3293 403 -3494 404 * +Wi + +0101100 ++3293 403 -3292 403 -3497 404 * +Wi + +0101100 ++3291 403 -3290 403 -3289 403 -3500 404 * +Wi + +0101100 ++3289 403 -3288 403 -3287 403 -3502 404 * +Wi + +0101100 ++3286 403 -3505 404 -3285 403 +3284 403 * +Wi + +0101100 ++3283 403 -3469 404 -3282 403 +3281 403 * +Wi + +0101100 +-3280 403 -3456 404 +3279 403 -3447 404 +3278 403 -3277 403 -3276 403 * +Wi + +0101100 +-3278 403 -3448 404 +3275 403 -3451 404 -3452 404 +3274 403 -3455 404 +3280 403 -3273 403 -3272 403 +* +Wi + +0101100 +-3271 403 -3436 404 +3270 403 -3439 404 -3440 404 +3269 403 -3443 404 +3268 403 -3267 403 -3266 403 +* +Wi + +0101100 +-3268 403 -3444 404 +3265 403 -3435 404 +3271 403 -3264 403 -3263 403 * +Wi + +0101100 +-3262 403 -3428 404 +3261 403 -3419 404 +3260 403 -3259 403 -3258 403 * +Wi + +0101100 +-3260 403 -3420 404 +3257 403 -3423 404 -3424 404 +3256 403 -3427 404 +3262 403 -3255 403 -3254 403 +* +Wi + +0101100 +-3253 0 +3252 0 +3251 0 -3250 0 * +Wi + +0101100 +-3249 0 +3248 0 +3247 0 -3246 0 * +Wi + +0101100 +-3245 0 +3244 0 +3243 0 -3242 0 * +Wi + +0101100 ++3241 0 -3245 0 -3240 0 +3239 0 * +Wi + +0101100 +-3238 0 +3237 0 +3239 0 -3236 0 * +Wi + +0101100 ++3235 0 -3238 0 -3234 0 +3233 0 * +Wi + +0101100 +-3232 0 +3231 0 +3233 0 -3230 0 * +Wi + +0101100 +-3229 0 +3228 0 +3227 0 -3226 0 * +Wi + +0101100 +-3225 0 +3224 0 +3223 0 -3222 0 * +Fa +0 1e-07 827 0 + +0111000 ++2606 0 * +Fa +0 1e-07 829 0 + +0111000 ++2605 0 * +Fa +0 1e-07 812 0 + +0111000 ++2604 0 * +Fa +0 1e-07 810 0 + +0111000 ++2603 0 * +Fa +0 1e-07 807 0 + +0111000 +-2602 0 * +Fa +0 1e-07 806 0 + +0111000 ++2601 0 * +Fa +0 1e-07 804 0 + +0111000 ++2600 0 * +Fa +0 1e-07 802 0 + +0111000 ++2599 0 * +Fa +0 1e-07 800 0 + +0111000 +-2598 0 * +Fa +0 1e-07 798 0 + +0111000 +-2597 0 * +Fa +0 1e-07 695 403 + +0111000 ++2596 0 * +Fa +0 1e-07 695 403 + +0111000 ++2595 0 * +Fa +0 1e-07 695 403 + +0111000 ++2594 0 * +Fa +0 1e-07 694 403 + +0111000 ++2593 0 * +Fa +0 1e-07 694 403 + +0111000 ++2592 0 * +Fa +0 1e-07 690 403 + +0111000 ++2591 0 * +Fa +0 1e-07 690 403 + +0111000 ++2590 0 * +Fa +0 1e-07 690 403 + +0111000 ++2589 0 * +Fa +0 1e-07 685 403 + +0111000 ++2588 0 * +Fa +0 1e-07 685 403 + +0111000 ++2587 0 * +Fa +0 1e-07 682 403 + +0111000 ++2586 0 * +Fa +0 1e-07 682 403 + +0111000 ++2585 0 * +Fa +0 1e-07 682 403 + +0111000 ++2584 0 * +Fa +0 1e-07 677 403 + +0111000 ++2583 0 * +Fa +0 1e-07 677 403 + +0111000 ++2582 0 * +Fa +0 1e-07 811 403 + +0101000 +-2581 0 * +Fa +0 1e-07 809 403 + +0101000 +-2580 0 * +Fa +0 1e-07 673 403 + +0101000 ++2579 0 * +Fa +0 1e-07 671 403 + +0101000 ++2578 0 * +Fa +0 1e-07 667 403 + +0101000 ++2577 0 * +Fa +0 1e-07 808 403 + +0101000 +-2576 0 * +Fa +0 1e-07 665 403 + +0101000 ++2575 0 * +Fa +0 1e-07 660 403 + +0101000 ++2574 0 * +Fa +0 1e-07 656 403 + +0101000 ++2573 0 * +Fa +0 1e-07 654 403 + +0101000 ++2572 0 * +Fa +0 1e-07 652 403 + +0101000 ++2571 0 * +Fa +0 1e-07 650 403 + +0101000 ++2570 0 * +Fa +0 1e-07 805 403 + +0101000 +-2569 0 * +Fa +0 1e-07 803 403 + +0101000 +-2568 0 * +Fa +0 1e-07 801 403 + +0101000 +-2567 0 * +Fa +0 1e-07 797 403 + +0101000 ++2566 0 * +Fa +0 1e-07 637 403 + +0101000 ++2565 0 * +Fa +0 1e-07 793 403 + +0111000 ++2564 0 +2563 0 +2562 0 +2561 0 +2560 0 +2559 0 +2558 0 +2557 0 * +Fa +0 1e-07 793 403 + +0111000 ++2556 0 * +Fa +0 1e-07 793 403 + +0111000 ++2555 0 * +Fa +0 1e-07 793 403 + +0111000 ++2554 0 * +Fa +0 1e-07 793 403 + +0111000 ++2553 0 * +Fa +0 1e-07 793 403 + +0111000 ++2552 0 * +Fa +0 1e-07 793 403 + +0111000 ++2551 0 * +Fa +0 1e-07 793 403 + +0111000 ++2550 0 * +Fa +0 1e-07 793 403 + +0111000 ++2549 0 * +Fa +0 1e-07 622 403 + +0111000 ++2548 0 * +Fa +0 1e-07 622 403 + +0111000 ++2547 0 * +Fa +0 1e-07 622 403 + +0111000 ++2546 0 * +Fa +0 1e-07 622 403 + +0111000 ++2545 0 * +Fa +0 1e-07 622 403 + +0111000 ++2544 0 * +Fa +0 1e-07 622 403 + +0111000 ++2543 0 * +Fa +0 1e-07 622 403 + +0111000 ++2542 0 * +Fa +0 1e-07 622 403 + +0111000 ++2541 0 * +Fa +0 1e-07 622 403 + +0111000 ++2540 0 * +Fa +0 1e-07 622 403 + +0111000 ++2539 0 * +Fa +0 1e-07 850 0 + +0111000 ++2538 0 * +Fa +0 1e-07 851 0 + +0111000 ++2537 0 * +Fa +0 1e-07 852 0 + +0111000 ++2536 0 * +Fa +0 1e-07 185 0 + +0111000 +-2535 0 -2534 0 * +Fa +0 1e-07 853 0 + +0111000 ++2533 0 * +Fa +0 1e-07 854 0 + +0111000 ++2532 0 * +Fa +0 1e-07 855 0 + +0111000 ++2531 0 * +Fa +0 1e-07 856 0 + +0111000 +-2530 0 -2529 0 * +Fa +0 1e-07 187 0 + +0111000 ++2528 0 * +Fa +0 1e-07 189 0 + +0111000 ++2527 0 * +Fa +0 1e-07 857 0 + +0111000 ++2526 0 * +Fa +0 1e-07 858 0 + +0111000 ++2525 0 * +Fa +0 1e-07 859 0 + +0111000 ++2524 0 * +Fa +0 1e-07 860 0 + +0111000 ++2523 0 * +Fa +0 1e-07 589 0 + +0111000 ++2522 0 * +Fa +0 1e-07 590 0 + +0111000 ++2521 0 * +Fa +0 1e-07 861 0 + +0111000 ++2520 0 * +Fa +0 1e-07 862 0 + +0111000 ++2519 0 * +Fa +0 1e-07 863 0 + +0111000 ++2518 0 * +Fa +0 1e-07 864 0 + +0111000 ++2517 0 * +Fa +0 1e-07 584 0 + +0111000 ++2516 0 * +Fa +0 1e-07 582 0 + +0111000 ++2515 0 * +Fa +0 1e-07 865 0 + +0111000 ++2514 0 +2513 0 * +Fa +0 1e-07 866 315 + +0111000 ++2512 0 * +Fa +0 1e-07 867 315 + +0111000 ++2511 0 * +Fa +0 1e-07 868 0 + +0111000 ++2510 0 * +Fa +0 1e-07 869 0 + +0111000 ++2509 0 * +Fa +0 1e-07 870 316 + +0111000 ++2508 0 * +Fa +0 1e-07 871 316 + +0111000 ++2507 0 * +Fa +0 1e-07 872 315 + +0111000 ++2506 0 * +Fa +0 1e-07 873 315 + +0111000 ++2505 0 * +Fa +0 1e-07 874 316 + +0111000 ++2504 0 +2503 0 * +Fa +0 1e-07 495 412 + +0111000 ++2502 0 * +Fa +0 1e-07 494 412 + +0111000 ++2501 0 * +Fa +0 0.000922807648899913 876 92 + +0111000 ++2500 0 +2499 0 * +Fa +0 1e-07 429 412 + +0111000 ++2498 0 * +Fa +0 1e-07 466 322 + +0111000 ++2497 0 * +Fa +0 1e-07 466 322 + +0111000 ++2496 0 * +Fa +0 1e-07 468 322 + +0111000 ++2495 0 * +Fa +0 1e-07 468 322 + +0111000 ++2494 0 * +Fa +0 1e-07 492 412 + +0111000 +-2493 0 * +Fa +0 1e-07 491 412 + +0111000 ++2492 0 * +Fa +0 1e-07 490 412 + +0111000 ++2491 0 * +Fa +0 1e-07 427 412 + +0111000 ++2490 0 * +Fa +0 1e-07 878 0 + +0111000 +-2489 0 * +Fa +0 1e-07 431 412 + +0111000 ++2488 0 * +Fa +0 1e-07 879 322 + +0111000 ++2487 0 +2486 0 * +Fa +0 1e-07 496 412 + +0101000 ++2485 0 +2484 0 * +Fa +0 1.0363503010144e-07 881 330 + +0111000 ++2483 0 +2482 0 * +Fa +0 1e-07 881 330 + +0111000 ++2481 0 * +Fa +0 1e-07 540 0 + +0111000 ++2480 0 * +Fa +0 1e-07 539 0 + +0111000 ++2479 0 * +Fa +0 1e-07 480 330 + +0101000 ++2478 0 +2477 0 * +Fa +0 1e-07 481 330 + +0101000 ++2476 0 +2475 0 * +Fa +0 0.000922807648899913 876 0 + +0111000 ++2474 0 +2473 0 * +Fa +0 1e-07 474 329 + +0111000 ++2472 0 * +Fa +0 1e-07 472 329 + +0111000 ++2471 0 * +Fa +0 1e-07 889 330 + +0101000 +-2470 0 -2469 0 * +Fa +0 1e-07 466 322 + +0111000 ++2468 0 * +Fa +0 1e-07 468 322 + +0111000 ++2467 0 * +Fa +0 1e-07 526 0 + +0111000 ++2466 0 * +Fa +0 1e-07 528 0 + +0111000 ++2465 0 * +Fa +0 1e-07 893 415 + +0111000 ++2464 0 * +Fa +0 1e-07 896 415 + +0111000 ++2463 0 * +Fa +0 1e-07 904 415 + +0111000 ++2462 0 * +Fa +0 1e-07 907 415 + +0111000 ++2461 0 * +Fa +0 1e-07 531 0 + +0111000 ++2460 0 * +Fa +0 1e-07 536 0 + +0111000 ++2459 0 * +Fa +0 1e-07 883 322 + +0111000 ++2458 0 +2457 0 * +Fa +0 1e-07 922 0 + +0111000 ++2456 0 * +Fa +0 1e-07 923 0 + +0111000 ++2455 0 * +Fa +0 1e-07 532 98 + +0111000 ++2454 0 +2453 0 * +Fa +0 1e-07 924 0 + +0111000 ++2452 0 * +Fa +0 1e-07 925 0 + +0111000 ++2451 0 * +Fa +0 1e-07 927 406 + +0111000 ++2450 0 +2449 0 * +Fa +0 1e-07 472 329 + +0111000 ++2448 0 * +Fa +0 1e-07 474 329 + +0111000 ++2447 0 * +Fa +0 1e-07 928 0 + +0101000 ++2446 0 +2445 0 * +Fa +0 1e-07 683 406 + +0111000 ++2444 0 * +Fa +0 1e-07 678 406 + +0111000 ++2443 0 * +Fa +0 1e-07 679 406 + +0111000 ++2442 0 * +Fa +0 1e-07 929 0 + +0111000 ++2441 0 * +Fa +0 1e-07 930 0 + +0111000 ++2440 0 * +Fa +0 1e-07 931 0 + +0111000 ++2439 0 * +Fa +0 1e-07 932 0 + +0111000 ++2438 0 * +Fa +0 1e-07 933 0 + +0111000 ++2437 0 * +Fa +0 1e-07 934 0 + +0111000 ++2436 0 * +Fa +0 1e-07 935 0 + +0111000 ++2435 0 * +Fa +0 1e-07 680 406 + +0101000 +-2434 0 -2433 0 * +Fa +0 1e-07 936 0 + +0111000 ++2432 0 * +Fa +0 1e-07 937 406 + +0111000 ++2431 0 * +Fa +0 1e-07 938 406 + +0111000 ++2430 0 * +Fa +0 1e-07 939 329 + +0101000 +-2429 0 * +Fa +0 1e-07 942 0 + +0111000 ++2428 0 * +Fa +0 1e-07 940 0 + +0111000 ++2427 0 +2426 0 * +Fa +0 1e-07 943 0 + +0111000 ++2425 0 * +Fa +0 1e-07 944 0 + +0111000 ++2424 0 +2423 0 * +Fa +0 1e-07 945 0 + +0111000 ++2422 0 * +Fa +0 1e-07 460 102 + +0101000 ++2421 0 +2420 0 * +Fa +0 1e-07 946 0 + +0101000 ++2419 0 * +Fa +0 1e-07 947 0 + +0111000 ++2418 0 * +Fa +0 1e-07 948 0 + +0111000 ++2417 0 +2416 0 * +Fa +0 1e-07 464 0 + +0101000 ++2415 0 * +Fa +0 1e-07 464 0 + +0101000 ++2414 0 * +Fa +0 1e-07 462 0 + +0111000 ++2413 0 * +Fa +0 1e-07 950 0 + +0111000 ++2412 0 * +Fa +0 9.8e-08 951 352 + +0111000 +-2411 0 * +Fa +0 9.8e-08 952 352 + +0111000 ++2410 0 * +Fa +0 9.8e-08 953 352 + +0111000 ++2409 0 * +Fa +0 9.8e-08 954 352 + +0111000 ++2408 0 * +Fa +0 0.00106324543301387 944 0 + +0111000 ++2407 0 +2406 0 * +Fa +0 1e-07 959 0 + +0111000 ++2405 0 * +Fa +0 9.8e-08 960 352 + +0111000 ++2404 0 +2403 0 * +Fa +0 1e-07 961 0 + +0111000 ++2402 0 * +Fa +0 1e-07 463 0 + +0101000 ++2401 0 * +Fa +0 1e-07 472 354 + +0111000 ++2400 0 * +Fa +0 1e-07 474 354 + +0111000 ++2399 0 * +Fa +0 1e-07 461 0 + +0111000 ++2398 0 * +Fa +0 1e-07 963 357 + +0111000 ++2397 0 * +Fa +0 1e-07 964 357 + +0111000 ++2396 0 * +Fa +0 1e-07 965 357 + +0111000 ++2395 0 * +Fa +0 1e-07 966 357 + +0111000 ++2394 0 * +Fa +0 1e-07 460 104 + +0111000 ++2393 0 * +Fa +0 1e-07 466 359 + +0111000 ++2392 0 * +Fa +0 1e-07 468 359 + +0111000 ++2391 0 * +Fa +0 1e-07 957 0 + +0111000 ++2390 0 * +Fa +0 1e-07 955 0 + +0111000 ++2389 0 * +Fa +0 1e-07 968 405 + +0111000 ++2388 0 +2387 0 * +Fa +0 0.00106324543301387 944 106 + +0111000 ++2386 0 +2385 0 * +Fa +0 1e-07 691 405 + +0111000 ++2384 0 * +Fa +0 1e-07 686 405 + +0111000 ++2383 0 * +Fa +0 1e-07 687 405 + +0111000 ++2382 0 * +Fa +0 1e-07 466 359 + +0111000 ++2381 0 * +Fa +0 1e-07 468 359 + +0111000 ++2380 0 * +Fa +0 1e-07 537 0 + +0111000 ++2379 0 * +Fa +0 1e-07 533 0 + +0111000 ++2378 0 * +Fa +0 1e-07 532 370 + +0111000 ++2377 0 +2376 0 * +Fa +0 1e-07 466 359 + +0111000 ++2375 0 * +Fa +0 1e-07 468 359 + +0111000 ++2374 0 * +Fa +0 1e-07 472 354 + +0111000 ++2373 0 * +Fa +0 1e-07 474 354 + +0111000 ++2372 0 * +Fa +0 1e-07 688 405 + +0101000 +-2371 0 -2370 0 * +Fa +0 1e-07 879 359 + +0111000 ++2369 0 +2368 0 * +Fa +0 1e-07 972 405 + +0111000 ++2367 0 * +Fa +0 1e-07 973 405 + +0111000 ++2366 0 * +Fa +0 1e-07 939 354 + +0101000 +-2365 0 * +Fa +0 1e-07 883 359 + +0111000 ++2364 0 +2363 0 * +Fa +0 1e-07 974 0 + +0101000 ++2362 0 +2361 0 * +Fa +0 1e-07 978 0 + +0101000 ++2360 0 +2359 0 * +Fa +0 1e-07 472 354 + +0111000 ++2358 0 * +Fa +0 1e-07 474 354 + +0111000 ++2357 0 * +Fa +0 1e-07 990 0 + +0111000 ++2356 0 +2355 0 * +Fa +0 1e-07 989 0 + +0111000 ++2354 0 * +Fa +0 1e-07 991 0 + +0111000 ++2353 0 * +Fa +0 1e-07 992 0 + +0111000 ++2352 0 * +Fa +0 1e-07 993 0 + +0111000 ++2351 0 * +Fa +0 1e-07 994 0 + +0111000 ++2350 0 * +Fa +0 1e-07 995 0 + +0111000 ++2349 0 * +Fa +0 1e-07 996 0 + +0111000 ++2348 0 * +Fa +0 1e-07 997 0 + +0111000 ++2347 0 * +Fa +0 1e-07 998 403 + +0101000 ++2346 0 * +Fa +0 1e-07 999 403 + +0101000 ++2345 0 * +Fa +0 1e-07 1000 403 + +0101000 ++2344 0 * +Fa +0 1e-07 1001 403 + +0101000 ++2343 0 * +Fa +0 1e-07 842 407 + +0111000 ++2342 0 * +Fa +0 1e-07 844 407 + +0111000 ++2341 0 * +Fa +0 1e-07 815 407 + +0101000 ++2340 0 * +Fa +0 1e-07 816 407 + +0101000 ++2339 0 * +Fa +0 1e-07 1004 0 + +0111000 ++2338 0 +2337 0 * +Fa +0 1e-07 1003 0 + +0111000 ++2336 0 * +Fa +0 1e-07 1005 0 + +0111000 ++2335 0 * +Fa +0 1e-07 1006 0 + +0111000 ++2334 0 * +Fa +0 1e-07 1007 0 + +0111000 ++2333 0 * +Fa +0 1e-07 1008 0 + +0111000 ++2332 0 * +Fa +0 1e-07 1009 0 + +0111000 ++2331 0 * +Fa +0 1e-07 1010 0 + +0111000 ++2330 0 * +Fa +0 1e-07 1011 0 + +0111000 ++2329 0 * +Fa +0 1e-07 1012 403 + +0101000 ++2328 0 * +Fa +0 1e-07 1013 403 + +0101000 ++2327 0 * +Fa +0 1e-07 1014 403 + +0101000 ++2326 0 * +Fa +0 1e-07 1015 403 + +0101000 ++2325 0 * +Fa +0 1e-07 834 407 + +0111000 ++2324 0 * +Fa +0 1e-07 836 407 + +0111000 ++2323 0 * +Fa +0 1e-07 817 407 + +0101000 ++2322 0 * +Fa +0 1e-07 818 407 + +0101000 ++2321 0 * +Fa +0 1e-07 1017 421 + +0111000 ++2320 0 * +Fa +0 1e-07 1018 421 + +0111000 ++2319 0 * +Fa +0 1e-07 1019 0 + +0111000 ++2318 0 * +Fa +0 1e-07 830 407 + +0111000 ++2317 0 * +Fa +0 1e-07 832 407 + +0111000 ++2316 0 * +Fa +0 1e-07 1021 0 + +0111000 ++2315 0 * +Fa +0 1e-07 1022 0 + +0111000 ++2314 0 * +Fa +0 1e-07 1023 0 + +0111000 ++2313 0 * +Fa +0 1e-07 1024 0 + +0111000 ++2312 0 * +Fa +0 1e-07 814 407 + +0101000 ++2311 0 * +Fa +0 1e-07 813 407 + +0101000 ++2310 0 * +Fa +0 1e-07 1025 0 + +0111000 ++2309 0 * +Fa +0 1e-07 1026 421 + +0101000 ++2308 0 * +Fa +0 1e-07 1027 421 + +0111000 ++2307 0 * +Fa +0 1e-07 1028 421 + +0111000 ++2306 0 * +Fa +0 1e-07 1029 421 + +0101000 ++2305 0 * +Fa +0 1e-07 578 407 + +0111000 ++2304 0 * +Fa +0 1e-07 580 407 + +0111000 ++2303 0 * +Fa +0 1e-07 1031 0 + +0111000 ++2302 0 * +Fa +0 1e-07 1032 0 + +0111000 ++2301 0 * +Fa +0 1e-07 1033 0 + +0111000 ++2300 0 * +Fa +0 1e-07 1034 0 + +0111000 ++2299 0 * +Fa +0 1e-07 545 407 + +0101000 ++2298 0 * +Fa +0 1e-07 544 407 + +0101000 ++2297 0 * +Fa +0 1e-07 1035 0 + +0111000 ++2296 0 * +Fa +0 1e-07 1036 0 + +0111000 ++2295 0 * +Fa +0 1e-07 1037 421 + +0101000 ++2294 0 * +Fa +0 1e-07 1038 421 + +0101000 ++2293 0 * +Fa +0 1e-07 1017 424 + +0111000 ++2292 0 * +Fa +0 1e-07 1018 424 + +0111000 ++2291 0 * +Fa +0 1e-07 840 407 + +0111000 ++2290 0 * +Fa +0 1e-07 838 407 + +0111000 ++2289 0 * +Fa +0 1e-07 795 407 + +0101000 ++2288 0 * +Fa +0 1e-07 794 407 + +0101000 ++2287 0 * +Fa +0 1e-07 1026 424 + +0101000 ++2286 0 * +Fa +0 1e-07 1027 424 + +0111000 ++2285 0 * +Fa +0 1e-07 1028 424 + +0111000 ++2284 0 * +Fa +0 1e-07 1029 424 + +0101000 ++2283 0 * +Fa +0 1e-07 573 407 + +0111000 ++2282 0 * +Fa +0 1e-07 571 407 + +0111000 ++2281 0 * +Fa +0 1e-07 569 407 + +0101000 ++2280 0 * +Fa +0 1e-07 570 407 + +0101000 ++2279 0 * +Fa +0 1e-07 1038 424 + +0101000 ++2278 0 * +Fa +0 1e-07 1037 424 + +0101000 ++2277 0 * +Fa +0 1e-07 515 390 + +0111000 ++2276 0 * +Fa +0 1e-07 514 390 + +0111000 ++2275 0 * +Fa +0 0.000922806765201836 1040 116 + +0111000 ++2274 0 +2273 0 * +Fa +0 1e-07 466 387 + +0111000 ++2272 0 * +Fa +0 1e-07 468 387 + +0111000 ++2271 0 * +Fa +0 1e-07 445 390 + +0111000 ++2270 0 * +Fa +0 1e-07 511 390 + +0111000 ++2269 0 * +Fa +0 1e-07 512 390 + +0111000 ++2268 0 * +Fa +0 1e-07 513 0 + +0111000 +-2267 0 * +Fa +0 1e-07 440 390 + +0111000 ++2266 0 * +Fa +0 1e-07 1042 0 + +0111000 +-2265 0 * +Fa +0 1e-07 443 390 + +0111000 ++2264 0 * +Fa +0 1e-07 518 390 + +0111000 ++2263 0 +2262 0 * +Fa +0 1e-07 1043 393 + +0101000 ++2261 0 * +Fa +0 1e-07 1044 0 + +0111000 ++2260 0 * +Fa +0 1e-07 1045 0 + +0111000 ++2259 0 +2258 0 * +Fa +0 1e-07 1046 393 + +0111000 ++2257 0 * +Fa +0 1e-07 466 387 + +0111000 ++2256 0 * +Fa +0 1e-07 468 387 + +0111000 ++2255 0 * +Fa +0 1e-07 505 393 + +0111000 ++2254 0 * +Fa +0 1e-07 501 393 + +0111000 ++2253 0 * +Fa +0 0.000922806765201836 1040 0 + +0111000 ++2252 0 +2251 0 * +Fa +0 1e-07 1047 393 + +0101000 ++2250 0 +2249 0 * +Fa +0 1e-07 474 394 + +0111000 ++2248 0 * +Fa +0 1e-07 472 394 + +0111000 ++2247 0 * +Fa +0 1e-07 879 387 + +0111000 ++2246 0 +2245 0 * +Fa +0 1e-07 466 387 + +0111000 ++2244 0 * +Fa +0 1e-07 468 387 + +0111000 ++2243 0 * +Fa +0 1e-07 1044 0 + +0111000 ++2242 0 * +Fa +0 1e-07 968 398 + +0111000 ++2241 0 +2240 0 * +Fa +0 1e-07 691 398 + +0111000 ++2239 0 * +Fa +0 1e-07 687 398 + +0111000 ++2238 0 * +Fa +0 1e-07 686 398 + +0111000 ++2237 0 * +Fa +0 1e-07 538 0 + +0111000 ++2236 0 * +Fa +0 1e-07 534 0 + +0111000 ++2235 0 * +Fa +0 1e-07 532 401 + +0111000 ++2234 0 +2233 0 * +Fa +0 1e-07 883 387 + +0111000 ++2232 0 +2231 0 * +Fa +0 1e-07 472 394 + +0111000 ++2230 0 * +Fa +0 1e-07 474 394 + +0111000 ++2229 0 * +Fa +0 1e-07 688 398 + +0101000 +-2228 0 -2227 0 * +Fa +0 1e-07 972 398 + +0111000 ++2226 0 * +Fa +0 1e-07 973 398 + +0111000 ++2225 0 * +Fa +0 1e-07 1048 0 + +0111000 ++2224 0 * +Fa +0 1e-07 939 394 + +0111000 ++2223 0 * +Fa +0 1e-07 2 0 + +0111000 +-2222 0 * +Fa +0 1e-07 4 427 + +0111000 ++2221 0 * +Fa +0 1e-07 26 0 + +0111000 +-2220 0 * +Fa +0 1e-07 29 0 + +0111000 +-2219 0 * +Fa +0 1e-07 32 427 + +0111000 ++2218 0 +2217 0 * +Fa +0 1e-07 35 0 + +0111000 +-2216 0 * +Fa +0 1e-07 38 0 + +0111000 +-2215 0 * +Fa +0 1e-07 42 0 + +0111000 ++2214 0 * +Fa +0 1e-07 46 0 + +0111000 ++2213 0 * +Fa +0 1e-07 47 0 + +0111000 ++2212 0 * +Fa +0 1e-07 49 0 + +0111000 ++2211 0 * +Fa +0 1e-07 51 0 + +0111000 ++2210 0 * +Fa +0 1e-07 54 0 + +0111000 ++2209 0 * +Fa +0 1e-07 55 0 + +0111000 +-2208 0 * +Fa +0 1e-07 56 0 + +0111000 ++2207 0 * +Fa +0 1e-07 3 427 + +0111000 ++2206 0 * +Fa +0 1e-07 3 427 + +0111000 ++2205 0 * +Fa +0 1e-07 3 427 + +0111000 ++2204 0 * +Fa +0 1e-07 1 427 + +0111000 ++2203 0 * +Fa +0 1e-07 1 427 + +0111000 ++2202 0 * +Fa +0 1e-07 1 427 + +0111000 ++2201 0 * +Fa +0 1e-07 58 427 + +0111000 ++2200 0 * +Fa +0 1e-07 63 427 + +0111000 ++2199 0 * +Fa +0 1e-07 30 427 + +0111000 ++2198 0 * +Fa +0 1e-07 30 427 + +0111000 ++2197 0 * +Fa +0 1e-07 30 427 + +0111000 ++2196 0 * +Fa +0 1e-07 28 427 + +0111000 ++2195 0 * +Fa +0 1e-07 28 427 + +0111000 ++2194 0 * +Fa +0 1e-07 28 427 + +0111000 ++2193 0 * +Fa +0 1e-07 71 427 + +0111000 ++2192 0 * +Fa +0 1e-07 66 427 + +0111000 ++2191 0 * +Fa +0 1e-07 27 427 + +0111000 ++2190 0 * +Fa +0 1e-07 27 427 + +0111000 ++2189 0 * +Fa +0 1e-07 27 427 + +0111000 ++2188 0 * +Fa +0 1e-07 25 427 + +0111000 ++2187 0 * +Fa +0 1e-07 25 427 + +0111000 ++2186 0 * +Fa +0 1e-07 25 427 + +0111000 ++2185 0 * +Fa +0 1e-07 75 427 + +0111000 ++2184 0 * +Fa +0 1e-07 74 427 + +0111000 ++2183 0 * +Fa +0 1e-07 77 0 + +0111000 ++2182 0 * +Fa +0 1e-07 48 0 + +0111000 ++2181 0 * +Fa +0 1e-07 76 432 + +0111000 ++2180 0 +2179 0 * +Fa +0 1e-07 81 0 + +0111000 ++2178 0 +2177 0 * +Fa +0 1e-07 76 432 + +0111000 ++2176 0 +2175 0 * +Fa +0 1e-07 76 427 + +0111000 ++2174 0 +2173 0 * +Fa +0 1e-07 79 0 + +0111000 ++2172 0 * +Fa +0 1e-07 78 0 + +0111000 ++2171 0 * +Fa +0 1e-07 87 0 + +0111000 ++2170 0 * +Fa +0 1e-07 53 0 + +0111000 ++2169 0 * +Fa +0 1e-07 72 432 + +0111000 ++2168 0 +2167 0 * +Fa +0 1e-07 72 432 + +0111000 ++2166 0 +2165 0 * +Fa +0 1e-07 72 427 + +0111000 ++2164 0 +2163 0 * +Fa +0 1e-07 89 0 + +0111000 ++2162 0 * +Fa +0 1e-07 88 0 + +0111000 ++2161 0 * +Fa +0 1e-07 44 0 + +0111000 ++2160 0 * +Fa +0 1e-07 57 0 + +0111000 ++2159 0 * +Fa +0 1e-07 64 432 + +0111000 ++2158 0 +2157 0 * +Fa +0 1e-07 93 0 + +0111000 ++2156 0 +2155 0 * +Fa +0 1e-07 64 432 + +0111000 ++2154 0 +2153 0 * +Fa +0 1e-07 64 427 + +0111000 ++2152 0 +2151 0 * +Fa +0 1e-07 91 0 + +0111000 ++2150 0 * +Fa +0 1e-07 90 0 + +0111000 ++2149 0 * +Fa +0 1e-07 39 0 + +0111000 +-2148 0 * +Fa +0 1e-07 40 0 + +0111000 ++2147 0 * +Fa +0 1e-07 41 0 + +0111000 +-2146 0 * +Fa +0 1e-07 37 0 + +0111000 ++2145 0 * +Fa +0 1e-07 101 0 + +0111000 ++2144 0 * +Fa +0 1e-07 102 0 + +0111000 ++2143 0 * +Fa +0 1e-07 99 0 + +0111000 ++2142 0 * +Fa +0 1e-07 100 0 + +0111000 ++2141 0 * +Fa +0 1e-07 31 0 + +0111000 ++2140 0 * +Fa +0 1e-07 33 0 + +0111000 ++2139 0 * +Fa +0 1e-07 104 0 + +0111000 ++2138 0 * +Fa +0 1e-07 103 0 + +0111000 ++2137 0 * +Fa +0 1e-07 50 0 + +0111000 ++2136 0 * +Fa +0 1e-07 105 0 + +0111000 ++2135 0 * +Fa +0 1e-07 52 0 + +0111000 +-2134 0 * +Fa +0 1e-07 106 0 + +0111000 ++2133 0 * +Fa +0 1e-07 45 0 + +0111000 +-2132 0 -2131 0 -2130 0 * +Fa +0 1e-07 107 0 + +0111000 ++2129 0 * +Fa +0 1e-07 5 427 + +0101000 ++2128 0 * +Fa +0 1e-07 7 427 + +0111000 ++2127 0 * +Fa +0 1e-07 9 427 + +0101000 ++2126 0 * +Fa +0 1e-07 11 427 + +0111000 ++2125 0 * +Fa +0 1e-07 13 427 + +0101000 ++2124 0 * +Fa +0 1e-07 15 427 + +0111000 ++2123 0 * +Fa +0 1e-07 17 427 + +0101000 ++2122 0 * +Fa +0 1e-07 19 427 + +0111000 ++2121 0 * +Fa +0 1e-07 21 427 + +0101000 ++2120 0 * +Fa +0 1e-07 23 427 + +0111000 ++2119 0 * +Fa +0 1e-07 43 0 + +0111000 +-2118 0 -2117 0 * +Fa +0 1e-07 108 0 + +0101000 ++2116 0 * +Fa +0 1e-07 109 0 + +0111000 ++2115 0 * +Fa +0 1e-07 110 0 + +0111000 ++2114 0 * +Fa +0 1e-07 111 0 + +0101000 ++2113 0 * +Fa +0 1e-07 112 0 + +0111000 ++2112 0 * +Fa +0 1e-07 113 0 + +0111000 ++2111 0 * +Fa +0 1e-07 114 0 + +0111000 ++2110 0 * +Fa +0 1e-07 115 0 + +0111000 ++2109 0 * +Fa +0 1e-07 116 0 + +0101000 ++2108 0 * +Fa +0 1e-07 117 0 + +0111000 ++2107 0 * +Fa +0 1e-07 6 439 + +0111000 ++2106 0 * +Fa +0 1e-07 8 439 + +0111000 ++2105 0 * +Fa +0 1e-07 10 439 + +0101000 ++2104 0 * +Fa +0 1e-07 12 439 + +0111000 ++2103 0 * +Fa +0 1e-07 14 439 + +0111000 ++2102 0 * +Fa +0 1e-07 16 439 + +0111000 ++2101 0 * +Fa +0 1e-07 18 439 + +0111000 ++2100 0 * +Fa +0 1e-07 20 439 + +0111000 ++2099 0 * +Fa +0 1e-07 22 439 + +0111000 ++2098 0 * +Fa +0 1e-07 24 439 + +0111000 ++2097 0 * +Fa +0 1e-07 118 0 + +0111000 ++2096 0 * +Fa +0 1e-07 119 0 + +0111000 ++2095 0 * +Fa +0 1e-07 120 0 + +0111000 ++2094 0 * +Fa +0 1e-07 123 0 + +0111000 ++2093 0 * +Fa +0 1e-07 124 0 + +0111000 ++2092 0 * +Fa +0 1e-07 125 0 + +0111000 ++2091 0 * +Fa +0 1e-07 126 0 + +0111000 ++2090 0 * +Fa +0 1e-07 127 440 + +0111000 ++2089 0 +2088 0 * +Fa +0 1e-07 127 440 + +0111000 ++2087 0 +2086 0 * +Fa +0 1e-07 127 440 + +0111000 ++2085 0 +2084 0 * +Fa +0 1e-07 133 440 + +0101000 ++2083 0 * +Fa +0 1e-07 132 440 + +0101000 ++2082 0 * +Fa +0 1e-07 121 440 + +0111000 ++2081 0 +2080 0 * +Fa +0 1e-07 121 440 + +0111000 ++2079 0 +2078 0 * +Fa +0 1e-07 137 440 + +0111000 ++2077 0 * +Fa +0 1e-07 137 440 + +0111000 ++2076 0 * +Fa +0 1e-07 137 440 + +0111000 ++2075 0 * +Fa +0 1e-07 134 440 + +0111000 ++2074 0 * +Fa +0 1e-07 134 440 + +0111000 ++2073 0 * +Fa +0 1e-07 134 440 + +0111000 ++2072 0 * +Fa +0 1e-07 140 0 + +0111000 ++2071 0 * +Fa +0 1e-07 141 0 + +0111000 ++2070 0 * +Fa +0 1e-07 144 0 + +0111000 ++2069 0 * +Fa +0 1e-07 145 0 + +0111000 ++2068 0 * +Fa +0 1e-07 148 0 + +0111000 ++2067 0 * +Fa +0 1e-07 149 0 + +0111000 ++2066 0 * +Fa +0 1e-07 150 0 + +0111000 ++2065 0 * +Fa +0 1e-07 151 0 + +0111000 ++2064 0 * +Fa +0 1e-07 152 442 + +0111000 ++2063 0 +2062 0 * +Fa +0 1e-07 152 442 + +0111000 ++2061 0 +2060 0 * +Fa +0 1e-07 152 442 + +0111000 ++2059 0 +2058 0 * +Fa +0 1e-07 158 442 + +0101000 ++2057 0 * +Fa +0 1e-07 157 442 + +0101000 ++2056 0 * +Fa +0 1e-07 146 442 + +0111000 ++2055 0 +2054 0 * +Fa +0 1e-07 146 442 + +0111000 ++2053 0 +2052 0 * +Fa +0 1e-07 162 442 + +0111000 ++2051 0 * +Fa +0 1e-07 162 442 + +0111000 ++2050 0 * +Fa +0 1e-07 162 442 + +0111000 ++2049 0 * +Fa +0 1e-07 159 442 + +0111000 ++2048 0 * +Fa +0 1e-07 159 442 + +0111000 ++2047 0 * +Fa +0 1e-07 159 442 + +0111000 ++2046 0 * +Fa +0 1e-07 165 0 + +0111000 ++2045 0 * +Fa +0 1e-07 166 0 + +0111000 ++2044 0 * +Fa +0 1e-07 152 444 + +0111000 ++2043 0 +2042 0 * +Fa +0 1e-07 152 444 + +0111000 ++2041 0 +2040 0 * +Fa +0 1e-07 152 444 + +0111000 ++2039 0 +2038 0 * +Fa +0 1e-07 158 444 + +0101000 ++2037 0 * +Fa +0 1e-07 157 444 + +0101000 ++2036 0 * +Fa +0 1e-07 146 444 + +0111000 ++2035 0 +2034 0 * +Fa +0 1e-07 146 444 + +0111000 ++2033 0 +2032 0 * +Fa +0 1e-07 162 444 + +0111000 ++2031 0 * +Fa +0 1e-07 162 444 + +0111000 ++2030 0 * +Fa +0 1e-07 162 444 + +0111000 ++2029 0 * +Fa +0 1e-07 159 444 + +0111000 ++2028 0 * +Fa +0 1e-07 159 444 + +0111000 ++2027 0 * +Fa +0 1e-07 159 444 + +0111000 ++2026 0 * +Fa +0 1e-07 59 429 + +0111000 ++2025 0 * +Fa +0 1e-07 60 429 + +0111000 ++2024 0 * +Fa +0 1e-07 169 0 + +0111000 +-2023 0 * +Fa +0 1e-07 62 429 + +0111000 ++2022 0 * +Fa +0 1e-07 61 429 + +0111000 ++2021 0 * +Fa +0 1e-07 171 0 + +0111000 ++2020 0 * +Fa +0 1e-07 170 0 + +0111000 ++2019 0 * +Fa +0 1e-07 172 0 + +0111000 ++2018 0 * +Fa +0 1e-07 130 438 + +0111000 ++2017 0 +2016 0 * +Fa +0 1e-07 129 438 + +0101000 ++2015 0 * +Fa +0 1e-07 131 438 + +0101000 ++2014 0 * +Fa +0 1e-07 65 429 + +0111000 ++2013 0 +2012 0 * +Fa +0 1e-07 176 438 + +0111000 ++2011 0 * +Fa +0 1e-07 176 438 + +0111000 ++2010 0 * +Fa +0 1e-07 175 438 + +0111000 ++2009 0 * +Fa +0 1e-07 175 438 + +0111000 ++2008 0 * +Fa +0 1e-07 97 438 + +0101000 ++2007 0 * +Fa +0 1e-07 98 438 + +0101000 ++2006 0 * +Fa +0 1e-07 177 0 + +0111000 ++2005 0 * +Fa +0 1e-07 178 0 + +0111000 ++2004 0 * +Fa +0 1e-07 173 429 + +0111000 ++2003 0 * +Fa +0 1e-07 184 0 + +0111000 ++2002 0 * +Fa +0 1e-07 173 429 + +0111000 ++2001 0 * +Fa +0 1e-07 174 429 + +0111000 ++2000 0 * +Fa +0 1e-07 186 0 + +0111000 ++1999 0 * +Fa +0 1e-07 174 429 + +0111000 ++1998 0 * +Fa +0 1e-07 182 0 + +0111000 ++1997 0 * +Fa +0 1e-07 180 0 + +0111000 ++1996 0 * +Fa +0 1e-07 188 0 + +0111000 ++1995 0 * +Fa +0 1e-07 183 0 + +0111000 ++1994 0 * +Fa +0 1e-07 135 438 + +0111000 ++1993 0 * +Fa +0 1e-07 136 438 + +0111000 ++1992 0 * +Fa +0 1e-07 181 0 + +0111000 ++1991 0 * +Fa +0 1e-07 179 0 + +0111000 ++1990 0 * +Fa +0 1e-07 142 438 + +0101000 ++1989 0 * +Fa +0 1e-07 143 438 + +0101000 ++1988 0 * +Fa +0 1e-07 190 0 + +0111000 ++1987 0 * +Fa +0 1e-07 191 0 + +0111000 ++1986 0 * +Fa +0 1e-07 160 434 + +0111000 ++1985 0 * +Fa +0 1e-07 161 434 + +0111000 ++1984 0 * +Fa +0 1e-07 195 0 + +0111000 ++1983 0 * +Fa +0 1e-07 193 0 + +0111000 ++1982 0 * +Fa +0 1e-07 167 434 + +0101000 ++1981 0 * +Fa +0 1e-07 168 434 + +0101000 ++1980 0 * +Fa +0 1e-07 194 0 + +0111000 ++1979 0 * +Fa +0 1e-07 192 0 + +0111000 ++1978 0 * +Fa +0 1e-07 197 0 + +0111000 ++1977 0 * +Fa +0 1e-07 196 0 + +0111000 ++1976 0 * +Fa +0 1e-07 67 431 + +0111000 ++1975 0 * +Fa +0 1e-07 68 431 + +0111000 ++1974 0 * +Fa +0 1e-07 200 0 + +0111000 +-1973 0 * +Fa +0 1e-07 70 431 + +0111000 ++1972 0 * +Fa +0 1e-07 69 431 + +0111000 ++1971 0 * +Fa +0 1e-07 202 0 + +0111000 ++1970 0 * +Fa +0 1e-07 199 431 + +0111000 ++1969 0 * +Fa +0 1e-07 204 0 + +0111000 ++1968 0 * +Fa +0 1e-07 199 431 + +0111000 ++1967 0 * +Fa +0 1e-07 198 431 + +0111000 ++1966 0 * +Fa +0 1e-07 206 0 + +0111000 ++1965 0 * +Fa +0 1e-07 198 431 + +0111000 ++1964 0 * +Fa +0 1e-07 201 0 + +0111000 ++1963 0 * +Fa +0 1e-07 203 0 + +0111000 ++1962 0 * +Fa +0 1e-07 155 434 + +0111000 ++1961 0 +1960 0 * +Fa +0 1e-07 154 434 + +0101000 ++1959 0 * +Fa +0 1e-07 156 434 + +0101000 ++1958 0 * +Fa +0 1e-07 73 431 + +0111000 ++1957 0 +1956 0 * +Fa +0 1e-07 210 434 + +0111000 ++1955 0 * +Fa +0 1e-07 210 434 + +0111000 ++1954 0 * +Fa +0 1e-07 209 434 + +0111000 ++1953 0 * +Fa +0 1e-07 209 434 + +0111000 ++1952 0 * +Fa +0 1e-07 85 434 + +0101000 ++1951 0 * +Fa +0 1e-07 86 434 + +0101000 ++1950 0 * +Fa +0 1e-07 160 436 + +0111000 ++1949 0 * +Fa +0 1e-07 161 436 + +0111000 ++1948 0 * +Fa +0 1e-07 167 436 + +0101000 ++1947 0 * +Fa +0 1e-07 168 436 + +0101000 ++1946 0 * +Fa +0 1e-07 67 430 + +0111000 ++1945 0 * +Fa +0 1e-07 68 430 + +0111000 ++1944 0 * +Fa +0 1e-07 70 430 + +0111000 ++1943 0 * +Fa +0 1e-07 69 430 + +0111000 ++1942 0 * +Fa +0 1e-07 199 430 + +0111000 ++1941 0 * +Fa +0 1e-07 199 430 + +0111000 ++1940 0 * +Fa +0 1e-07 198 430 + +0111000 ++1939 0 * +Fa +0 1e-07 198 430 + +0111000 ++1938 0 * +Fa +0 1e-07 155 436 + +0111000 ++1937 0 +1936 0 * +Fa +0 1e-07 154 436 + +0101000 ++1935 0 * +Fa +0 1e-07 156 436 + +0101000 ++1934 0 * +Fa +0 1e-07 73 430 + +0111000 ++1933 0 +1932 0 * +Fa +0 1e-07 210 436 + +0111000 ++1931 0 * +Fa +0 1e-07 210 436 + +0111000 ++1930 0 * +Fa +0 1e-07 209 436 + +0111000 ++1929 0 * +Fa +0 1e-07 209 436 + +0111000 ++1928 0 * +Fa +0 1e-07 85 436 + +0101000 ++1927 0 * +Fa +0 1e-07 86 436 + +0101000 ++1926 0 * +Fa +0 1e-07 92 0 + +0111000 ++1925 0 * +Fa +0 1e-07 94 0 + +0111000 ++1924 0 * +Fa +0 1e-07 211 448 + +0111000 +-1923 0 -1922 0 * +Fa +0 1e-07 212 448 + +0111000 ++1921 0 * +Fa +0 1e-07 212 448 + +0111000 ++1920 0 * +Fa +0 1e-07 215 448 + +0111000 ++1919 0 * +Fa +0 1e-07 215 448 + +0111000 ++1918 0 * +Fa +0 1e-07 216 448 + +0111000 +-1917 0 -1916 0 * +Fa +0 1e-07 96 437 + +0111000 ++1915 0 * +Fa +0 1e-07 96 437 + +0111000 ++1914 0 * +Fa +0 1e-07 95 437 + +0111000 ++1913 0 * +Fa +0 1e-07 95 437 + +0111000 ++1912 0 * +Fa +0 1e-07 218 0 + +0111000 ++1911 0 * +Fa +0 1e-07 217 0 + +0111000 ++1910 0 * +Fa +0 1e-07 128 437 + +0111000 ++1909 0 +1908 0 * +Fa +0 1e-07 213 449 + +0111000 ++1907 0 * +Fa +0 1e-07 214 449 + +0111000 ++1906 0 * +Fa +0 1e-07 219 441 + +0111000 +-1905 0 -1904 0 * +Fa +0 1e-07 221 441 + +0101000 ++1903 0 * +Fa +0 1e-07 223 441 + +0101000 ++1902 0 * +Fa +0 1e-07 122 441 + +0111000 ++1901 0 +1900 0 * +Fa +0 1e-07 226 0 + +0111000 ++1899 0 * +Fa +0 1e-07 225 0 + +0111000 ++1898 0 * +Fa +0 1e-07 139 0 + +0111000 ++1897 0 * +Fa +0 1e-07 138 0 + +0111000 ++1896 0 * +Fa +0 1e-07 80 0 + +0111000 ++1895 0 * +Fa +0 1e-07 82 0 + +0111000 ++1894 0 * +Fa +0 1e-07 227 450 + +0111000 +-1893 0 -1892 0 * +Fa +0 1e-07 228 450 + +0111000 ++1891 0 * +Fa +0 1e-07 228 450 + +0111000 ++1890 0 * +Fa +0 1e-07 231 450 + +0111000 ++1889 0 * +Fa +0 1e-07 231 450 + +0111000 ++1888 0 * +Fa +0 1e-07 232 450 + +0111000 +-1887 0 -1886 0 * +Fa +0 1e-07 84 433 + +0111000 ++1885 0 * +Fa +0 1e-07 84 433 + +0111000 ++1884 0 * +Fa +0 1e-07 83 433 + +0111000 ++1883 0 * +Fa +0 1e-07 83 433 + +0111000 ++1882 0 * +Fa +0 1e-07 234 0 + +0111000 ++1881 0 * +Fa +0 1e-07 233 0 + +0111000 ++1880 0 * +Fa +0 1e-07 153 433 + +0111000 ++1879 0 +1878 0 * +Fa +0 1e-07 227 452 + +0111000 +-1877 0 -1876 0 * +Fa +0 1e-07 228 452 + +0111000 ++1875 0 * +Fa +0 1e-07 228 452 + +0111000 ++1874 0 * +Fa +0 1e-07 231 452 + +0111000 ++1873 0 * +Fa +0 1e-07 231 452 + +0111000 ++1872 0 * +Fa +0 1e-07 232 452 + +0111000 +-1871 0 -1870 0 * +Fa +0 1e-07 84 435 + +0111000 ++1869 0 * +Fa +0 1e-07 84 435 + +0111000 ++1868 0 * +Fa +0 1e-07 83 435 + +0111000 ++1867 0 * +Fa +0 1e-07 83 435 + +0111000 ++1866 0 * +Fa +0 1e-07 153 435 + +0111000 ++1865 0 +1864 0 * +Fa +0 1e-07 229 451 + +0111000 ++1863 0 * +Fa +0 1e-07 230 451 + +0111000 ++1862 0 * +Fa +0 1e-07 235 443 + +0111000 ++1861 0 +1860 0 * +Fa +0 1e-07 235 443 + +0111000 ++1859 0 +1858 0 * +Fa +0 1e-07 239 0 + +0111000 ++1857 0 * +Fa +0 1e-07 240 0 + +0111000 ++1856 0 * +Fa +0 1e-07 147 443 + +0111000 ++1855 0 +1854 0 * +Fa +0 1e-07 242 0 + +0111000 ++1853 0 * +Fa +0 1e-07 241 0 + +0111000 ++1852 0 * +Fa +0 1e-07 164 0 + +0111000 ++1851 0 * +Fa +0 1e-07 163 0 + +0111000 ++1850 0 * +Fa +0 1e-07 229 453 + +0111000 ++1849 0 * +Fa +0 1e-07 230 453 + +0111000 ++1848 0 * +Fa +0 1e-07 235 445 + +0111000 ++1847 0 +1846 0 * +Fa +0 1e-07 235 445 + +0111000 ++1845 0 +1844 0 * +Fa +0 1e-07 147 445 + +0111000 ++1843 0 +1842 0 * +Fa +0 1e-07 246 0 + +0111000 +-1841 0 -1840 0 * +Fa +0 1e-07 251 0 + +0111000 ++1839 0 +1838 0 * +Fa +0 1e-07 220 414 + +0111000 ++1837 0 +1836 0 * +Fa +0 1e-07 249 0 + +0111000 ++1835 0 * +Fa +0 1e-07 248 0 + +0111000 ++1834 0 * +Fa +0 1e-07 224 414 + +0101000 ++1833 0 * +Fa +0 1e-07 222 414 + +0101000 ++1832 0 * +Fa +0 1e-07 243 0 + +0111000 ++1831 0 * +Fa +0 1e-07 244 0 + +0111000 ++1830 0 * +Fa +0 1e-07 236 414 + +0111000 ++1829 0 +1828 0 +1827 0 * +Fa +0 1e-07 238 0 + +0111000 ++1826 0 * +Fa +0 1e-07 237 0 + +0111000 ++1825 0 * +Fa +0 1e-07 283 0 + +0111000 ++1824 0 * +Fa +0 1e-07 284 0 + +0111000 ++1823 0 * +Fa +0 1e-07 274 0 + +0111000 ++1822 0 * +Fa +0 1e-07 273 0 + +0111000 ++1821 0 * +Fa +0 1e-07 288 0 + +0111000 ++1820 0 * +Fa +0 1e-07 286 0 + +0111000 ++1819 0 * +Fa +0 1e-07 289 0 + +0111000 ++1818 0 * +Fa +0 1e-07 292 0 + +0111000 ++1817 0 * +Fa +0 1e-07 295 0 + +0111000 ++1816 0 * +Fa +0 1e-07 290 0 + +0111000 ++1815 0 * +Fa +0 1e-07 280 0 + +0111000 ++1814 0 * +Fa +0 1e-07 279 0 + +0111000 +-1813 0 * +Fa +0 1e-07 277 0 + +0111000 ++1812 0 * +Fa +0 1e-07 278 0 + +0111000 +-1811 0 * +Fa +0 1e-07 296 0 + +0111000 ++1810 0 * +Fa +0 1e-07 298 0 + +0111000 ++1809 0 * +Fa +0 1e-07 300 0 + +0111000 ++1808 0 * +Fa +0 1e-07 293 0 + +0111000 ++1807 0 * +Fa +0 1e-07 252 0 + +0111000 ++1806 0 * +Fa +0 1e-07 302 0 + +0111000 ++1805 0 * +Fa +0 1e-07 304 0 + +0111000 ++1804 0 * +Fa +0 1e-07 303 0 + +0111000 ++1803 0 +1802 0 * +Fa +0 1e-07 291 0 + +0111000 ++1801 0 * +Fa +0 1e-07 305 0 + +0111000 ++1800 0 +1799 0 * +Fa +0 1e-07 297 0 + +0111000 ++1798 0 * +Fa +0 1e-07 271 0 + +0111000 ++1797 0 * +Fa +0 1e-07 272 0 + +0111000 ++1796 0 * +Fa +0 1e-07 270 0 + +0111000 ++1795 0 * +Fa +0 1e-07 263 0 + +0111000 ++1794 0 * +Fa +0 1e-07 269 0 + +0111000 +-1793 0 * +Fa +0 1e-07 268 0 + +0111000 ++1792 0 * +Fa +0 1e-07 267 0 + +0111000 +-1791 0 * +Fa +0 1e-07 266 0 + +0111000 ++1790 0 * +Fa +0 1e-07 265 0 + +0111000 +-1789 0 * +Fa +0 1e-07 264 0 + +0111000 ++1788 0 * +Fa +0 1e-07 322 0 + +0111000 ++1787 0 * +Fa +0 1e-07 321 0 + +0111000 ++1786 0 * +Fa +0 1e-07 320 0 + +0111000 ++1785 0 * +Fa +0 1e-07 319 0 + +0111000 ++1784 0 * +Fa +0 1e-07 317 0 + +0111000 ++1783 0 * +Fa +0 1e-07 315 0 + +0111000 ++1782 0 * +Fa +0 1e-07 316 0 + +0111000 ++1781 0 * +Fa +0 1e-07 318 0 + +0111000 ++1780 0 * +Fa +0 1e-07 324 0 + +0111000 ++1779 0 * +Fa +0 1e-07 323 0 + +0111000 ++1778 0 * +Fa +0 1e-07 311 0 + +0111000 ++1777 0 * +Fa +0 1e-07 312 0 + +0111000 ++1776 0 * +Fa +0 1e-07 287 0 + +0111000 ++1775 0 * +Fa +0 1e-07 310 0 + +0111000 ++1774 0 * +Fa +0 1e-07 309 0 + +0111000 ++1773 0 * +Fa +0 1e-07 313 0 + +0111000 ++1772 0 * +Fa +0 1e-07 285 0 + +0111000 ++1771 0 * +Fa +0 1e-07 308 0 + +0111000 ++1770 0 * +Fa +0 1e-07 294 0 + +0111000 ++1769 0 * +Fa +0 1e-07 333 0 + +0111000 ++1768 0 * +Fa +0 1e-07 299 0 + +0111000 ++1767 0 * +Fa +0 1e-07 337 0 + +0111000 ++1766 0 * +Fa +0 1e-07 335 0 + +0111000 ++1765 0 * +Fa +0 1e-07 341 0 + +0111000 ++1764 0 * +Fa +0 1e-07 339 0 + +0111000 ++1763 0 * +Fa +0 1e-07 343 0 + +0111000 ++1762 0 * +Fa +0 1e-07 345 0 + +0111000 ++1761 0 * +Fa +0 1e-07 325 0 + +0111000 ++1760 0 +1759 0 * +Fa +0 1e-07 334 0 + +0111000 ++1758 0 * +Fa +0 1e-07 327 0 + +0111000 ++1757 0 * +Fa +0 1e-07 331 0 + +0111000 ++1756 0 * +Fa +0 1e-07 332 0 + +0111000 ++1755 0 * +Fa +0 1e-07 330 0 + +0111000 ++1754 0 * +Fa +0 1e-07 329 0 + +0111000 ++1753 0 * +Fa +0 1e-07 326 0 + +0111000 ++1752 0 * +Fa +0 1e-07 338 0 + +0111000 ++1751 0 * +Fa +0 1e-07 340 0 + +0111000 ++1750 0 * +Fa +0 1e-07 346 0 + +0111000 ++1749 0 * +Fa +0 1e-07 348 0 + +0111000 ++1748 0 * +Fa +0 1e-07 347 0 + +0111000 ++1747 0 * +Fa +0 1e-07 344 0 + +0111000 ++1746 0 * +Fa +0 1e-07 342 0 + +0111000 ++1745 0 * +Fa +0 1e-07 336 0 + +0111000 ++1744 0 * +Fa +0 1e-07 328 0 + +0111000 ++1743 0 * +Fa +0 1e-07 314 0 + +0111000 ++1742 0 +1741 0 * +Fa +0 1e-07 349 0 + +0111000 ++1740 0 * +Fa +0 1e-07 350 0 + +0111000 ++1739 0 * +Fa +0 1e-07 351 0 + +0111000 ++1738 0 +1737 0 * +Fa +0 1e-07 259 0 + +0111000 ++1736 0 * +Fa +0 1e-07 261 0 + +0111000 ++1735 0 * +Fa +0 1e-07 354 414 + +0101000 ++1734 0 * +Fa +0 1e-07 355 414 + +0101000 ++1733 0 * +Fa +0 1e-07 253 0 + +0111000 ++1732 0 * +Fa +0 1e-07 359 414 + +0101000 ++1731 0 * +Fa +0 1e-07 363 414 + +0101000 ++1730 0 * +Fa +0 1e-07 260 0 + +0111000 ++1729 0 * +Fa +0 1e-07 366 414 + +0101000 ++1728 0 * +Fa +0 1e-07 364 414 + +0101000 ++1727 0 * +Fa +0 1e-07 369 414 + +0101000 +-1726 0 * +Fa +0 1e-07 370 414 + +0101000 ++1725 0 * +Fa +0 1e-07 262 0 + +0111000 +-1724 0 * +Fa +0 1e-07 372 414 + +0101000 +-1723 0 * +Fa +0 1e-07 368 414 + +0101000 +-1722 0 * +Fa +0 1e-07 367 414 + +0101000 ++1721 0 * +Fa +0 1e-07 352 414 + +0101000 ++1720 0 * +Fa +0 1e-07 353 414 + +0111000 ++1719 0 * +Fa +0 1e-07 306 414 + +0101000 ++1718 0 * +Fa +0 1e-07 307 414 + +0111000 ++1717 0 * +Fa +0 1e-07 257 0 + +0111000 ++1716 0 * +Fa +0 1e-07 381 414 + +0101000 ++1715 0 * +Fa +0 1e-07 374 414 + +0101000 ++1714 0 * +Fa +0 1e-07 258 0 + +0111000 ++1713 0 * +Fa +0 1e-07 380 414 + +0101000 ++1712 0 * +Fa +0 1e-07 256 0 + +0111000 ++1711 0 * +Fa +0 1e-07 383 414 + +0101000 +-1710 0 * +Fa +0 1e-07 255 0 + +0111000 +-1709 0 * +Fa +0 1e-07 361 414 + +0111000 ++1708 0 * +Fa +0 1e-07 254 0 + +0111000 ++1707 0 * +Fa +0 1e-07 373 414 + +0101000 ++1706 0 * +Fa +0 1e-07 250 0 + +0111000 ++1705 0 * +Fa +0 1e-07 362 414 + +0101000 +-1704 0 * +Fa +0 1e-07 387 414 + +0101000 ++1703 0 * +Fa +0 1e-07 282 414 + +0101000 ++1702 0 * +Fa +0 1e-07 281 414 + +0101000 ++1701 0 * +Fa +0 1e-07 276 414 + +0101000 ++1700 0 * +Fa +0 1e-07 275 414 + +0101000 ++1699 0 * +Fa +0 1e-07 245 414 + +0101000 ++1698 0 * +Fa +0 1e-07 247 414 + +0101000 ++1697 0 * +Fa +0 1e-07 394 0 + +0111000 ++1696 0 * +Fa +0 1e-07 397 0 + +0111000 ++1695 0 * +Fa +0 1e-07 399 0 + +0111000 ++1694 0 * +Fa +0 1e-07 401 0 + +0111000 ++1693 0 * +Fa +0 1e-07 402 0 + +0111000 +-1692 0 * +Fa +0 1e-07 403 0 + +0111000 ++1691 0 * +Fa +0 1e-07 404 0 + +0111000 ++1690 0 * +Fa +0 1e-07 405 0 + +0111000 ++1689 0 * +Fa +0 1e-07 406 0 + +0111000 ++1688 0 * +Fa +0 1e-07 407 0 + +0111000 +-1687 0 * +Fa +0 1e-07 408 0 + +0111000 ++1686 0 * +Fa +0 1e-07 409 0 + +0111000 ++1685 0 * +Fa +0 1e-07 398 0 + +0111000 +-1684 0 * +Fa +0 1e-07 411 0 + +0111000 ++1683 0 * +Fa +0 1e-07 412 0 + +0111000 ++1682 0 * +Fa +0 1e-07 413 0 + +0111000 ++1681 0 * +Fa +0 1e-07 414 0 + +0111000 ++1680 0 * +Fa +0 1e-07 415 0 + +0111000 +-1679 0 * +Fa +0 1e-07 416 0 + +0111000 ++1678 0 * +Fa +0 1e-07 417 0 + +0111000 ++1677 0 * +Fa +0 1e-07 418 0 + +0111000 ++1676 0 * +Fa +0 1e-07 419 0 + +0111000 ++1675 0 * +Fa +0 1e-07 400 0 + +0111000 ++1674 0 * +Fa +0 1e-07 420 0 + +0111000 ++1673 0 * +Fa +0 1e-07 396 0 + +0111000 ++1672 0 * +Fa +0 1e-07 421 0 + +0111000 ++1671 0 * +Fa +0 1e-07 356 414 + +0111000 +-1670 0 -1669 0 -1668 0 -1667 0 -1666 0 -1665 0 -1664 0 * +Fa +0 1e-07 410 0 + +0111000 ++1663 0 * +Fa +0 1e-07 395 0 + +0111000 +-1662 0 * +Fa +0 1e-07 422 0 + +0111000 ++1661 0 * +Fa +0 1e-07 423 414 + +0101000 ++1660 0 +1659 0 * +Fa +0 1e-07 433 0 + +0111000 +-1658 0 * +Fa +0 1e-07 435 0 + +0111000 ++1657 0 * +Fa +0 1e-07 436 414 + +0111000 ++1656 0 +1655 0 * +Fa +0 1e-07 438 0 + +0111000 ++1654 0 * +Fa +0 1e-07 447 0 + +0111000 ++1653 0 +1652 0 * +Fa +0 1e-07 434 0 + +0111000 ++1651 0 * +Fa +0 1e-07 424 0 + +0111000 ++1650 0 * +Fa +0 1e-07 453 0 + +0111000 ++1649 0 * +Fa +0 1e-07 455 0 + +0111000 ++1648 0 * +Fa +0 1e-07 457 0 + +0111000 ++1647 0 * +Fa +0 1e-07 458 414 + +0111000 ++1646 0 * +Fa +0 1e-07 458 414 + +0111000 ++1645 0 * +Fa +0 1e-07 456 414 + +0111000 ++1644 0 * +Fa +0 1e-07 459 414 + +0101000 ++1643 0 * +Fa +0 1e-07 454 0 + +0111000 ++1642 0 * +Fa +0 1e-07 452 0 + +0111000 +-1641 0 * +Fa +0 1e-07 450 0 + +0111000 ++1640 0 * +Fa +0 1e-07 451 0 + +0111000 ++1639 0 +1638 0 * +Fa +0 1e-07 449 0 + +0111000 +-1637 0 -1636 0 -1635 0 * +Fa +0 1e-07 473 414 + +0101000 ++1634 0 * +Fa +0 1e-07 471 414 + +0101000 ++1633 0 * +Fa +0 1e-07 467 414 + +0101000 ++1632 0 * +Fa +0 1e-07 470 0 + +0111000 ++1631 0 * +Fa +0 1e-07 465 414 + +0101000 ++1630 0 * +Fa +0 1e-07 469 0 + +0111000 ++1629 0 * +Fa +0 1e-07 475 414 + +0101000 ++1628 0 * +Fa +0 1e-07 476 414 + +0101000 ++1627 0 * +Fa +0 1e-07 477 414 + +0101000 ++1626 0 * +Fa +0 1e-07 478 414 + +0101000 ++1625 0 * +Fa +0 1e-07 479 414 + +0101000 ++1624 0 * +Fa +0 1e-07 482 414 + +0101000 ++1623 0 * +Fa +0 1e-07 485 0 + +0111000 ++1622 0 * +Fa +0 1e-07 483 414 + +0101000 ++1621 0 * +Fa +0 1e-07 486 0 + +0111000 ++1620 0 * +Fa +0 1e-07 484 414 + +0101000 ++1619 0 * +Fa +0 1e-07 432 0 + +0111000 ++1618 0 +1617 0 +1616 0 * +Fa +0 1e-07 428 414 + +0111000 ++1615 0 +1614 0 * +Fa +0 1e-07 428 414 + +0111000 ++1613 0 +1612 0 * +Fa +0 1e-07 428 414 + +0111000 ++1611 0 +1610 0 * +Fa +0 1e-07 487 414 + +0111000 ++1609 0 * +Fa +0 1e-07 487 414 + +0111000 ++1608 0 * +Fa +0 1e-07 488 414 + +0111000 ++1607 0 * +Fa +0 1e-07 488 414 + +0111000 ++1606 0 * +Fa +0 1e-07 430 414 + +0111000 ++1605 0 * +Fa +0 1e-07 430 414 + +0111000 ++1604 0 * +Fa +0 1e-07 426 414 + +0111000 ++1603 0 * +Fa +0 1e-07 426 414 + +0111000 ++1602 0 * +Fa +0 1e-07 497 414 + +0111000 ++1601 0 * +Fa +0 1e-07 498 414 + +0111000 ++1600 0 * +Fa +0 1e-07 499 414 + +0111000 ++1599 0 * +Fa +0 1e-07 504 414 + +0111000 ++1598 0 * +Fa +0 1e-07 441 0 + +0111000 ++1597 0 +1596 0 * +Fa +0 1e-07 444 414 + +0111000 ++1595 0 +1594 0 * +Fa +0 1e-07 444 414 + +0111000 ++1593 0 +1592 0 * +Fa +0 1e-07 444 414 + +0111000 ++1591 0 +1590 0 * +Fa +0 1e-07 500 0 + +0111000 ++1589 0 * +Fa +0 1e-07 507 414 + +0111000 ++1588 0 * +Fa +0 1e-07 507 414 + +0111000 ++1587 0 * +Fa +0 1e-07 502 414 + +0111000 ++1586 0 * +Fa +0 1e-07 502 414 + +0111000 ++1585 0 * +Fa +0 1e-07 506 414 + +0101000 ++1584 0 * +Fa +0 1e-07 439 414 + +0111000 ++1583 0 * +Fa +0 1e-07 439 414 + +0111000 ++1582 0 * +Fa +0 1e-07 442 414 + +0111000 ++1581 0 * +Fa +0 1e-07 442 414 + +0111000 ++1580 0 * +Fa +0 1e-07 510 414 + +0101000 ++1579 0 * +Fa +0 1e-07 517 0 + +0111000 ++1578 0 * +Fa +0 1e-07 509 414 + +0101000 ++1577 0 * +Fa +0 1e-07 516 0 + +0111000 ++1576 0 * +Fa +0 1e-07 519 414 + +0101000 ++1575 0 * +Fa +0 1e-07 448 0 + +0111000 +-1574 0 * +Fa +0 1e-07 520 0 + +0111000 ++1573 0 * +Fa +0 1e-07 446 0 + +0111000 +-1572 0 * +Fa +0 1e-07 521 0 + +0111000 +-1571 0 * +Fa +0 1e-07 522 0 + +0111000 ++1570 0 * +Fa +0 1e-07 437 0 + +0111000 ++1569 0 * +Fa +0 1e-07 523 0 + +0111000 ++1568 0 * +Fa +0 1e-07 301 414 + +0111000 +-1567 0 -1566 0 -1565 0 -1564 0 -1563 0 * +Fa +0 1e-07 360 414 + +0111000 ++1562 0 +1561 0 +1560 0 +1559 0 +1558 0 +1557 0 +1556 0 +1555 0 * +Fa +0 1e-07 360 414 + +0111000 ++1554 0 +1553 0 * +Fa +0 1e-07 527 0 + +0111000 +-1552 0 -1551 0 * +Fa +0 1e-07 360 414 + +0111000 ++1550 0 +1549 0 * +Fa +0 1e-07 360 414 + +0111000 ++1548 0 +1547 0 * +Fa +0 1e-07 360 414 + +0111000 ++1546 0 +1545 0 * +Fa +0 1e-07 360 414 + +0111000 ++1544 0 +1543 0 * +Fa +0 1e-07 360 414 + +0111000 ++1542 0 +1541 0 * +Fa +0 1e-07 425 0 + +0111000 +-1540 0 * +Fa +0 1e-07 524 0 + +0111000 +-1539 0 * +Fa +0 1e-07 525 0 + +0111000 ++1538 0 * +Fa +0 1e-07 541 423 + +0101000 ++1537 0 * +Fa +0 1e-07 542 423 + +0101000 ++1536 0 * +Fa +0 1e-07 358 423 + +0111000 ++1535 0 +1534 0 +1533 0 * +Fa +0 1e-07 385 423 + +0101000 ++1532 0 * +Fa +0 1e-07 384 423 + +0101000 ++1531 0 * +Fa +0 1e-07 382 423 + +0101000 ++1530 0 * +Fa +0 1e-07 375 423 + +0101000 ++1529 0 * +Fa +0 1e-07 552 423 + +0101000 ++1528 0 * +Fa +0 1e-07 371 423 + +0101000 ++1527 0 * +Fa +0 1e-07 386 423 + +0101000 ++1526 0 * +Fa +0 1e-07 556 423 + +0101000 ++1525 0 * +Fa +0 1e-07 558 423 + +0101000 ++1524 0 * +Fa +0 1e-07 559 0 + +0111000 ++1523 0 * +Fa +0 1e-07 560 0 + +0111000 ++1522 0 * +Fa +0 1e-07 561 0 + +0111000 ++1521 0 * +Fa +0 1e-07 562 0 + +0111000 ++1520 0 * +Fa +0 1e-07 563 0 + +0111000 ++1519 0 * +Fa +0 1e-07 564 0 + +0111000 ++1518 0 * +Fa +0 1e-07 566 0 + +0111000 ++1517 0 * +Fa +0 1e-07 567 0 + +0111000 ++1516 0 * +Fa +0 1e-07 565 0 + +0111000 +-1515 0 -1514 0 * +Fa +0 1e-07 568 0 + +0111000 +-1513 0 -1512 0 * +Fa +0 1e-07 547 423 + +0101000 ++1511 0 * +Fa +0 1e-07 546 423 + +0101000 ++1510 0 * +Fa +0 1e-07 378 423 + +0101000 ++1509 0 * +Fa +0 1e-07 379 423 + +0101000 ++1508 0 * +Fa +0 1e-07 388 423 + +0101000 ++1507 0 * +Fa +0 1e-07 389 423 + +0101000 ++1506 0 * +Fa +0 1e-07 390 423 + +0101000 ++1505 0 * +Fa +0 1e-07 391 423 + +0101000 ++1504 0 * +Fa +0 1e-07 392 423 + +0101000 ++1503 0 * +Fa +0 1e-07 393 423 + +0101000 ++1502 0 * +Fa +0 1e-07 377 423 + +0101000 ++1501 0 * +Fa +0 1e-07 376 423 + +0101000 ++1500 0 * +Fa +0 1e-07 357 423 + +0101000 ++1499 0 * +Fa +0 1e-07 557 423 + +0101000 +-1498 0 * +Fa +0 1e-07 555 423 + +0101000 +-1497 0 * +Fa +0 1e-07 554 423 + +0101000 +-1496 0 * +Fa +0 1e-07 553 423 + +0101000 +-1495 0 * +Fa +0 1e-07 365 423 + +0101000 ++1494 0 * +Fa +0 1e-07 551 423 + +0101000 ++1493 0 * +Fa +0 1e-07 550 423 + +0101000 ++1492 0 * +Fa +0 1e-07 549 423 + +0101000 +-1491 0 * +Fa +0 1e-07 548 423 + +0101000 ++1490 0 * +Fa +0 1e-07 543 423 + +0111000 ++1489 0 +1488 0 +1487 0 +1486 0 +1485 0 +1484 0 +1483 0 +1482 0 * +Fa +0 1e-07 543 423 + +0111000 ++1481 0 * +Fa +0 1e-07 543 423 + +0111000 ++1480 0 * +Fa +0 1e-07 543 423 + +0111000 ++1479 0 * +Fa +0 1e-07 543 423 + +0111000 ++1478 0 * +Fa +0 1e-07 576 0 + +0111000 +-1477 0 -1476 0 * +Fa +0 1e-07 543 423 + +0111000 ++1475 0 +1474 0 * +Fa +0 1e-07 543 423 + +0111000 ++1473 0 +1472 0 * +Fa +0 1e-07 543 423 + +0111000 ++1471 0 +1470 0 * +Fa +0 1e-07 583 0 + +0111000 +-1469 0 -1468 0 * +Fa +0 1e-07 591 0 + +0111000 ++1467 0 * +Fa +0 1e-07 593 0 + +0111000 ++1466 0 * +Fa +0 1e-07 205 0 + +0111000 +-1465 0 -1464 0 * +Fa +0 1e-07 595 0 + +0111000 ++1463 0 * +Fa +0 1e-07 596 0 + +0111000 ++1462 0 * +Fa +0 1e-07 600 0 + +0111000 ++1461 0 * +Fa +0 1e-07 598 0 + +0111000 ++1460 0 * +Fa +0 1e-07 577 0 + +0111000 ++1459 0 * +Fa +0 1e-07 575 0 + +0111000 ++1458 0 * +Fa +0 1e-07 605 0 + +0111000 +-1457 0 -1456 0 * +Fa +0 1e-07 603 0 + +0111000 ++1455 0 * +Fa +0 1e-07 602 0 + +0111000 ++1454 0 * +Fa +0 1e-07 599 0 + +0111000 ++1453 0 * +Fa +0 1e-07 597 0 + +0111000 ++1452 0 * +Fa +0 1e-07 208 0 + +0111000 ++1451 0 * +Fa +0 1e-07 207 0 + +0111000 ++1450 0 * +Fa +0 1e-07 592 0 + +0111000 ++1449 0 * +Fa +0 1e-07 594 0 + +0111000 ++1448 0 * +Fa +0 1e-07 608 0 + +0111000 ++1447 0 * +Fa +0 1e-07 607 0 + +0111000 ++1446 0 * +Fa +0 1e-07 588 0 + +0111000 ++1445 0 * +Fa +0 1e-07 587 0 + +0111000 ++1444 0 * +Fa +0 1e-07 609 0 + +0111000 +-1443 0 -1442 0 * +Fa +0 1e-07 611 0 + +0111000 ++1441 0 * +Fa +0 1e-07 610 0 + +0111000 ++1440 0 * +Fa +0 1e-07 604 0 + +0111000 ++1439 0 * +Fa +0 1e-07 606 0 + +0111000 ++1438 0 * +Fa +0 1e-07 601 0 + +0111000 ++1437 0 +1436 0 * +Fa +0 1e-07 613 0 + +0111000 ++1435 0 * +Fa +0 1e-07 612 0 + +0111000 ++1434 0 * +Fa +0 1e-07 614 0 + +0111000 ++1433 0 * +Fa +0 1e-07 615 0 + +0111000 ++1432 0 * +Fa +0 1e-07 616 404 + +0101000 ++1431 0 +1430 0 +1429 0 +1428 0 +1427 0 * +Fa +0 1e-07 619 0 + +0111000 +-1426 0 * +Fa +0 1e-07 620 404 + +0101000 ++1425 0 * +Fa +0 1e-07 629 0 + +0111000 +-1424 0 * +Fa +0 1e-07 631 404 + +0101000 ++1423 0 * +Fa +0 1e-07 635 0 + +0111000 ++1422 0 * +Fa +0 1e-07 634 0 + +0111000 ++1421 0 * +Fa +0 1e-07 633 0 + +0111000 ++1420 0 * +Fa +0 1e-07 632 0 + +0111000 ++1419 0 * +Fa +0 1e-07 636 404 + +0101000 +-1418 0 * +Fa +0 1e-07 638 0 + +0111000 +-1417 0 -1416 0 * +Fa +0 1e-07 639 0 + +0111000 +-1415 0 -1414 0 * +Fa +0 1e-07 641 404 + +0101000 +-1413 0 * +Fa +0 1e-07 644 404 + +0101000 +-1412 0 * +Fa +0 1e-07 646 404 + +0101000 +-1411 0 * +Fa +0 1e-07 647 404 + +0101000 ++1410 0 * +Fa +0 1e-07 649 404 + +0101000 ++1409 0 * +Fa +0 1e-07 651 404 + +0101000 ++1408 0 * +Fa +0 1e-07 653 404 + +0101000 ++1407 0 * +Fa +0 1e-07 657 404 + +0101000 ++1406 0 * +Fa +0 1e-07 661 404 + +0101000 ++1405 0 * +Fa +0 1e-07 664 404 + +0101000 +-1404 0 * +Fa +0 1e-07 663 404 + +0101000 ++1403 0 * +Fa +0 1e-07 668 404 + +0101000 ++1402 0 * +Fa +0 1e-07 669 404 + +0101000 ++1401 0 * +Fa +0 1e-07 672 404 + +0101000 +-1400 0 * +Fa +0 1e-07 675 404 + +0101000 +-1399 0 * +Fa +0 1e-07 676 404 + +0111000 ++1398 0 * +Fa +0 1e-07 676 404 + +0111000 ++1397 0 * +Fa +0 1e-07 676 404 + +0111000 ++1396 0 * +Fa +0 1e-07 681 404 + +0111000 ++1395 0 * +Fa +0 1e-07 681 404 + +0111000 ++1394 0 * +Fa +0 1e-07 681 404 + +0111000 ++1393 0 * +Fa +0 1e-07 681 404 + +0111000 ++1392 0 * +Fa +0 1e-07 684 404 + +0111000 ++1391 0 * +Fa +0 1e-07 684 404 + +0111000 ++1390 0 * +Fa +0 1e-07 684 404 + +0111000 ++1389 0 * +Fa +0 1e-07 689 404 + +0111000 ++1388 0 * +Fa +0 1e-07 689 404 + +0111000 ++1387 0 * +Fa +0 1e-07 689 404 + +0111000 ++1386 0 * +Fa +0 1e-07 689 404 + +0111000 ++1385 0 * +Fa +0 1e-07 693 404 + +0111000 ++1384 0 * +Fa +0 1e-07 693 404 + +0111000 ++1383 0 * +Fa +0 1e-07 693 404 + +0111000 ++1382 0 * +Fa +0 1e-07 692 404 + +0111000 ++1381 0 * +Fa +0 1e-07 692 404 + +0111000 ++1380 0 * +Fa +0 1e-07 692 404 + +0111000 ++1379 0 * +Fa +0 1e-07 692 404 + +0111000 ++1378 0 * +Fa +0 1e-07 697 0 + +0111000 ++1377 0 * +Fa +0 1e-07 701 0 + +0111000 ++1376 0 * +Fa +0 1e-07 702 0 + +0111000 ++1375 0 * +Fa +0 1e-07 704 0 + +0111000 ++1374 0 * +Fa +0 1e-07 706 0 + +0111000 ++1373 0 * +Fa +0 1e-07 708 0 + +0111000 ++1372 0 * +Fa +0 1e-07 711 0 + +0111000 ++1371 0 * +Fa +0 1e-07 713 0 + +0111000 ++1370 0 * +Fa +0 1e-07 716 0 + +0111000 +-1369 0 * +Fa +0 1e-07 718 0 + +0111000 ++1368 0 * +Fa +0 1e-07 722 0 + +0111000 ++1367 0 * +Fa +0 1e-07 725 0 + +0111000 ++1366 0 * +Fa +0 1e-07 726 0 + +0111000 ++1365 0 * +Fa +0 1e-07 729 0 + +0111000 ++1364 0 * +Fa +0 1e-07 648 0 + +0111000 ++1363 0 * +Fa +0 1e-07 728 0 + +0111000 ++1362 0 * +Fa +0 1e-07 727 0 + +0111000 ++1361 0 * +Fa +0 1e-07 724 0 + +0111000 ++1360 0 * +Fa +0 1e-07 720 0 + +0111000 ++1359 0 * +Fa +0 1e-07 721 0 + +0111000 ++1358 0 * +Fa +0 1e-07 717 0 + +0111000 ++1357 0 * +Fa +0 1e-07 715 0 + +0111000 ++1356 0 * +Fa +0 1e-07 714 0 + +0111000 ++1355 0 * +Fa +0 1e-07 712 0 + +0111000 ++1354 0 * +Fa +0 1e-07 709 0 + +0111000 ++1353 0 * +Fa +0 1e-07 707 0 + +0111000 ++1352 0 * +Fa +0 1e-07 705 0 + +0111000 ++1351 0 * +Fa +0 1e-07 703 0 + +0111000 ++1350 0 * +Fa +0 1e-07 700 0 + +0111000 +-1349 0 * +Fa +0 1e-07 674 404 + +0101000 ++1348 0 * +Fa +0 1e-07 670 404 + +0101000 ++1347 0 * +Fa +0 1e-07 666 404 + +0101000 ++1346 0 * +Fa +0 1e-07 662 404 + +0101000 ++1345 0 * +Fa +0 1e-07 738 404 + +0101000 ++1344 0 * +Fa +0 1e-07 658 404 + +0101000 ++1343 0 * +Fa +0 1e-07 659 404 + +0101000 ++1342 0 * +Fa +0 1e-07 696 404 + +0101000 ++1341 0 * +Fa +0 1e-07 743 404 + +0101000 ++1340 0 * +Fa +0 1e-07 745 404 + +0101000 ++1339 0 * +Fa +0 1e-07 655 404 + +0101000 ++1338 0 * +Fa +0 1e-07 645 404 + +0101000 ++1337 0 * +Fa +0 1e-07 642 404 + +0101000 ++1336 0 * +Fa +0 1e-07 643 404 + +0101000 ++1335 0 * +Fa +0 1e-07 640 404 + +0101000 ++1334 0 * +Fa +0 1e-07 630 0 + +0111000 ++1333 0 +1332 0 +1331 0 * +Fa +0 1e-07 628 0 + +0111000 ++1330 0 * +Fa +0 1e-07 627 0 + +0111000 ++1329 0 * +Fa +0 1e-07 626 0 + +0111000 ++1328 0 * +Fa +0 1e-07 625 0 + +0111000 ++1327 0 * +Fa +0 1e-07 624 0 + +0111000 ++1326 0 * +Fa +0 1e-07 623 0 + +0111000 ++1325 0 * +Fa +0 1e-07 618 404 + +0101000 +-1324 0 * +Fa +0 1e-07 617 0 + +0111000 ++1323 0 +1322 0 +1321 0 * +Fa +0 1e-07 621 404 + +0101000 ++1320 0 -1319 0 -1318 0 -1317 0 -1316 0 -1315 0 * +Fa +0 1e-07 761 0 + +0111000 +-1314 0 * +Fa +0 1e-07 734 0 + +0111000 +-1313 0 * +Fa +0 1e-07 760 0 + +0111000 +-1312 0 * +Fa +0 1e-07 757 0 + +0111000 +-1311 0 * +Fa +0 1e-07 733 0 + +0111000 ++1310 0 * +Fa +0 1e-07 771 0 + +0111000 ++1309 0 * +Fa +0 1e-07 779 0 + +0111000 ++1308 0 * +Fa +0 1e-07 731 0 + +0111000 ++1307 0 * +Fa +0 1e-07 730 0 + +0111000 ++1306 0 * +Fa +0 1e-07 792 0 + +0111000 ++1305 0 * +Fa +0 1e-07 791 0 + +0111000 +-1304 0 * +Fa +0 1e-07 788 0 + +0111000 +-1303 0 * +Fa +0 1e-07 732 0 + +0111000 ++1302 0 * +Fa +0 1e-07 787 0 + +0111000 ++1301 0 * +Fa +0 1e-07 780 0 + +0111000 ++1300 0 * +Fa +0 1e-07 783 0 + +0111000 ++1299 0 * +Fa +0 1e-07 784 0 + +0111000 ++1298 0 * +Fa +0 1e-07 723 0 + +0111000 ++1297 0 * +Fa +0 1e-07 767 0 + +0111000 ++1296 0 * +Fa +0 1e-07 770 0 + +0111000 ++1295 0 * +Fa +0 1e-07 756 0 + +0111000 +-1294 0 * +Fa +0 1e-07 710 0 + +0111000 +-1293 0 * +Fa +0 1e-07 698 0 + +0111000 ++1292 0 * +Fa +0 1e-07 766 0 + +0111000 ++1291 0 * +Fa +0 1e-07 776 404 + +0101000 ++1290 0 * +Fa +0 1e-07 772 404 + +0101000 ++1289 0 * +Fa +0 1e-07 789 0 + +0111000 ++1288 0 * +Fa +0 1e-07 790 0 + +0111000 ++1287 0 * +Fa +0 1e-07 768 0 + +0111000 ++1286 0 * +Fa +0 1e-07 769 0 + +0111000 ++1285 0 * +Fa +0 1e-07 763 404 + +0101000 ++1284 0 * +Fa +0 1e-07 773 404 + +0101000 ++1283 0 * +Fa +0 1e-07 762 404 + +0101000 ++1282 0 * +Fa +0 1e-07 781 0 + +0111000 ++1281 0 * +Fa +0 1e-07 782 0 + +0111000 ++1280 0 * +Fa +0 1e-07 758 0 + +0111000 ++1279 0 * +Fa +0 1e-07 759 0 + +0111000 ++1278 0 * +Fa +0 1e-07 753 404 + +0101000 ++1277 0 * +Fa +0 1e-07 786 404 + +0101000 ++1276 0 * +Fa +0 1e-07 785 404 + +0101000 ++1275 0 * +Fa +0 1e-07 699 0 + +0111000 +-1274 0 * +Fa +0 1e-07 719 0 + +0111000 +-1273 0 * +Fa +0 1e-07 774 403 + +0101000 ++1272 0 * +Fa +0 1e-07 775 403 + +0101000 ++1271 0 * +Fa +0 1e-07 796 403 + +0101000 ++1270 0 * +Fa +0 1e-07 799 403 + +0101000 +-1269 0 * +Fa +0 1e-07 751 403 + +0101000 ++1268 0 * +Fa +0 1e-07 750 403 + +0101000 ++1267 0 * +Fa +0 1e-07 749 403 + +0101000 ++1266 0 * +Fa +0 1e-07 748 403 + +0101000 ++1265 0 * +Fa +0 1e-07 747 403 + +0101000 ++1264 0 * +Fa +0 1e-07 746 403 + +0101000 ++1263 0 * +Fa +0 1e-07 744 403 + +0101000 ++1262 0 * +Fa +0 1e-07 742 403 + +0101000 ++1261 0 * +Fa +0 1e-07 741 403 + +0101000 ++1260 0 * +Fa +0 1e-07 740 403 + +0101000 ++1259 0 * +Fa +0 1e-07 739 403 + +0101000 ++1258 0 * +Fa +0 1e-07 737 403 + +0101000 ++1257 0 * +Fa +0 1e-07 736 403 + +0101000 ++1256 0 * +Fa +0 1e-07 735 403 + +0101000 ++1255 0 * +Fa +0 1e-07 752 403 + +0101000 ++1254 0 * +Fa +0 1e-07 754 403 + +0101000 ++1253 0 * +Fa +0 1e-07 755 403 + +0101000 ++1252 0 * +Fa +0 1e-07 765 403 + +0101000 ++1251 0 * +Fa +0 1e-07 764 403 + +0101000 ++1250 0 * +Fa +0 1e-07 777 403 + +0101000 ++1249 0 * +Fa +0 1e-07 778 403 + +0101000 ++1248 0 * +Fa +0 1e-07 819 0 + +0101000 ++1247 0 * +Fa +0 1e-07 820 0 + +0111000 ++1246 0 * +Fa +0 1e-07 822 0 + +0111000 ++1245 0 * +Fa +0 1e-07 821 0 + +0111000 ++1244 0 * +Fa +0 1e-07 823 0 + +0111000 ++1243 0 * +Fa +0 1e-07 824 0 + +0111000 ++1242 0 * +Fa +0 1e-07 825 0 + +0111000 ++1241 0 * +Fa +0 1e-07 826 0 + +0111000 ++1240 0 * +Fa +0 1e-07 828 0 + +0111000 ++1239 0 * +Sh + +0101100 +-904 432 +903 407 -902 432 -901 432 -900 407 +899 457 -898 432 -897 432 +896 432 -895 432 +-894 432 -893 432 -892 432 -891 432 -890 432 -889 407 -888 407 -887 407 -886 407 -885 407 +-884 407 -883 407 -882 407 -881 407 -880 407 -879 407 -878 407 -877 407 -876 407 -875 407 +-874 407 -873 407 -872 407 -871 407 -870 407 -869 407 -868 407 -867 407 -866 407 +865 432 ++864 432 -863 0 -862 433 -861 0 -860 407 +859 432 +858 432 +857 432 +856 432 -855 0 +-862 435 -854 0 -853 407 +852 432 +851 432 +850 432 +849 432 -848 0 -847 437 -846 0 +-845 407 +844 432 +843 432 -842 432 -841 432 -840 432 -839 432 +838 432 -837 432 +836 432 +-835 432 -834 432 -833 432 -832 432 -831 432 +830 432 +829 432 -828 432 +827 432 -826 432 ++825 432 +824 407 +823 407 +822 407 +821 407 +820 407 +819 407 +818 407 +817 407 +816 407 ++815 407 -814 432 +813 432 +812 432 +811 432 +810 432 +809 432 +808 432 +807 432 +806 432 ++805 432 +804 432 * +Sh + +0101100 ++803 0 +802 0 +801 0 +800 0 +799 0 +798 0 +797 0 +796 0 +795 0 +794 0 +-903 0 +793 439 * +Sh + +0101100 ++792 440 +791 440 +790 440 +789 440 +788 440 +787 440 +786 0 +785 0 +784 0 -783 0 +-782 0 -781 0 -780 0 -779 0 -778 0 -777 0 -776 0 -775 0 -774 0 -773 440 +-772 440 * +Sh + +0101100 ++771 442 +770 442 +769 442 +768 442 +767 442 +766 442 +765 0 +764 0 +763 0 -762 0 +-761 0 -760 0 -759 0 -758 0 -757 0 -756 0 -755 0 -754 0 -753 0 -752 442 +-751 442 * +Sh + +0101100 ++771 444 +770 444 +769 444 +768 444 +767 444 +766 444 +750 0 +749 0 +748 0 -747 0 +-746 0 -745 0 -744 0 -743 0 -742 0 -741 0 -740 0 -739 0 -738 0 -752 444 +-751 444 * +Sh + +0101100 ++889 407 +737 407 +884 407 +886 407 +736 407 +887 407 -735 438 +734 407 +733 407 +732 438 ++731 438 +730 438 -785 0 +729 0 +728 0 +727 0 +845 407 -726 407 +725 0 +724 0 ++723 0 +722 0 +721 0 +720 0 +719 438 +718 438 +717 407 +716 456 +715 407 +714 407 ++713 456 +712 407 -711 438 -710 438 +709 438 +708 438 +707 0 +774 0 +778 0 +706 0 ++777 0 +775 0 -705 438 -704 438 +703 0 +702 0 * +Sh + +0101100 ++701 434 +700 434 +699 0 +753 0 +757 0 +698 0 +756 0 +754 0 -697 434 -696 434 ++695 0 +694 0 -693 434 -692 434 +691 434 +690 434 +873 407 +689 407 +868 407 +870 407 ++688 407 +871 407 -687 434 +686 407 +685 407 +684 434 +683 407 +682 454 +681 407 +680 407 ++679 454 +678 407 +677 434 +676 434 -764 0 +675 0 +674 0 +673 0 +860 407 -672 407 ++671 0 +670 0 +669 0 +668 0 +667 0 +666 0 * +Sh + +0101100 ++701 436 +700 436 +665 0 +738 0 +742 0 +664 0 +741 0 +739 0 -697 436 -696 436 ++663 0 +662 0 -693 436 -692 436 +691 436 +690 436 +881 407 +661 407 +876 407 +878 407 ++660 407 +879 407 -687 436 +659 407 +658 407 +684 436 +657 407 +679 455 +656 407 +655 407 ++682 455 +654 407 +677 436 +676 436 -749 0 +653 0 +652 0 +651 0 +853 407 -650 407 ++649 0 +648 0 +647 0 +646 0 +645 0 +644 0 * +Sh + +0101100 ++643 437 +642 437 -641 407 +847 437 -640 407 -639 407 -638 407 -637 407 -636 407 -635 0 +-725 0 -634 0 -722 0 -633 0 -723 0 -632 0 -724 0 -631 437 -630 437 -629 0 +-786 0 * +Sh + +0101100 ++628 407 +640 407 +637 407 +627 407 +638 407 +639 407 -626 0 +625 0 +624 0 +636 407 ++623 0 +781 0 -622 441 -621 441 +620 441 +619 441 * +Sh + +0101100 ++618 433 +617 433 -616 407 +862 433 -615 407 -614 407 -613 407 -612 407 -611 407 -610 0 +-671 0 -609 0 -668 0 -608 0 -669 0 -607 0 -670 0 -606 433 -605 433 +604 0 +-765 0 * +Sh + +0101100 ++618 435 +617 435 -603 407 +862 435 -602 407 -601 407 -600 407 -599 407 -598 407 -597 0 +-649 0 -596 0 -646 0 -595 0 -647 0 -594 0 -648 0 -606 435 -605 435 +593 0 +-750 0 * +Sh + +0101100 ++592 407 +615 407 +612 407 +591 407 +613 407 +614 407 -590 0 -589 0 +588 443 +587 443 ++611 407 +586 0 +760 0 -585 443 -584 443 +583 443 +582 443 * +Sh + +0101100 ++581 407 +602 407 +599 407 +580 407 +600 407 +601 407 -579 0 -578 0 +588 445 +587 445 ++598 407 +577 0 +745 0 -585 445 -584 445 +583 445 +582 445 * +Sh + +0101100 +-576 414 +575 414 +574 0 +626 0 -573 414 -572 414 +571 0 +570 0 +569 414 +568 414 ++567 0 +590 0 +579 0 +566 414 +565 414 -564 414 -563 414 +562 414 +561 414 -560 414 +-559 414 -558 414 -557 414 -556 414 -555 414 +554 414 -553 414 +552 414 -551 414 -550 414 +-549 414 -548 414 -547 414 +546 414 -545 414 -544 414 +543 414 +542 414 +541 414 +540 414 ++539 414 -538 414 -537 414 +536 414 -535 414 -534 414 -533 414 -532 414 -531 414 -530 414 +-529 414 -528 414 -527 414 -526 414 -525 414 -524 414 -523 414 -522 414 -521 414 -520 414 ++519 414 +518 414 -517 414 +516 414 +515 414 +514 414 -513 414 +512 414 -511 414 +510 414 +-509 414 +508 414 +507 414 -506 414 +505 414 -504 414 -503 414 +502 414 -501 414 +500 414 ++499 414 +498 414 +497 414 +496 414 +495 414 -494 414 +493 414 +492 414 -491 414 -490 414 +-489 414 +488 414 +487 414 -486 414 +485 414 -484 414 -483 414 +482 414 +481 414 +480 414 +-479 0 +478 0 +477 414 +476 0 -475 0 +474 414 +473 0 +472 0 -471 0 +470 0 +-469 414 -468 0 -467 0 +466 0 -465 0 -464 0 -463 0 -462 0 +461 414 +460 0 ++459 0 +458 414 +457 0 +456 414 -455 0 -454 414 +453 0 +452 414 +451 0 +450 414 +-449 0 +448 0 -447 0 -446 0 -445 0 -444 0 -443 0 -442 0 -441 414 +440 414 ++439 414 -438 414 -437 414 -436 414 +435 414 +434 414 -433 414 -432 414 -431 414 +430 414 +-429 414 +428 414 -427 414 -426 414 +425 414 -424 414 +423 414 -422 414 +421 414 -420 414 +-419 414 -418 414 +417 414 -416 414 -415 0 -414 414 -413 414 -412 414 +411 0 -410 414 ++409 414 +408 0 +407 414 +406 414 +405 414 +404 414 -403 414 -402 414 +401 414 -400 0 +-399 0 +398 0 -397 0 -396 414 -395 414 +394 414 +393 414 -392 414 -391 0 -390 0 +-389 0 -388 414 -387 0 -386 414 +385 0 -384 0 -383 0 -382 0 -381 0 -380 0 +-379 414 -378 0 -377 414 +376 0 +375 414 -374 0 -373 0 -372 0 -371 0 -370 0 +-369 0 -368 0 +367 0 +366 0 -365 0 -364 0 -363 0 -362 0 -361 0 -360 0 ++359 414 -358 0 -357 0 -356 0 -355 414 -354 0 -353 0 -352 0 -351 0 -350 0 ++349 0 +348 0 -347 0 -346 0 -345 0 -344 414 -343 0 -342 414 +341 0 -340 414 +-339 414 -338 414 -337 414 -336 414 +335 414 -334 414 -333 0 +332 0 +331 0 +330 322 ++329 0 +328 0 +327 0 +330 359 +326 0 +330 387 +325 0 -324 414 -323 414 -322 414 +* +Sh + +0101100 +-321 0 -320 0 +415 0 +319 0 +318 0 +317 0 +316 0 +315 0 +314 0 +313 0 ++312 0 +311 0 +310 0 -309 423 -308 423 -307 423 -306 423 -305 423 -304 423 -303 423 +-302 423 -301 423 -300 423 -299 0 -298 0 -297 0 -296 0 -295 0 -294 0 -293 0 +-292 0 -291 0 -290 0 -289 0 -288 0 -287 0 -286 0 -285 0 -284 0 -283 0 +-282 0 +281 0 +280 0 -279 0 +278 0 -277 0 -276 0 -275 0 -274 0 -273 0 ++272 455 -271 0 +272 454 -270 0 -269 0 +268 456 * +Sh + +0101100 ++267 0 +266 0 -265 0 -272 0 -264 0 -263 0 -262 0 -261 0 +260 0 +259 0 +-258 0 -257 0 -256 0 -682 0 -679 0 -255 0 -254 0 +253 0 +252 0 +251 0 ++250 0 -249 0 -248 0 -247 0 -246 0 -245 0 -244 0 -243 0 +242 0 +241 0 ++240 0 +239 0 +238 0 * +Sh + +0101100 +-237 404 -236 404 +235 0 -234 404 +233 0 -232 404 -231 0 -230 404 -229 404 -228 404 +-227 404 -226 0 -225 404 -224 404 -223 0 -222 0 -221 0 -220 0 +219 0 +218 0 ++217 0 +216 0 -215 0 -214 0 +213 0 +212 0 +211 0 -210 0 -209 0 -208 0 +-207 0 -206 0 -205 0 -204 0 -203 0 -202 0 -201 0 -200 0 -199 0 -198 0 +-197 0 -196 0 -195 0 -194 0 -193 0 -192 0 -191 0 -190 0 -189 0 -188 0 +-187 404 -186 404 +185 404 +184 404 -183 404 -182 404 -181 404 -180 404 -179 404 -178 404 +-177 404 +176 404 -175 404 -174 404 +173 404 +172 404 +171 404 +170 404 +169 404 +168 404 ++167 404 +166 404 +165 404 +164 404 +163 404 +162 404 +161 404 +160 404 -159 404 +158 0 ++157 0 +156 0 +155 0 +154 0 +153 0 +152 0 +151 0 +150 0 +149 0 +148 0 ++147 0 +146 0 +145 0 +144 0 +143 404 -142 404 -141 404 -140 404 -139 404 -138 404 +-137 404 -136 0 -135 404 -134 0 -133 404 -132 404 -131 404 -130 404 +129 404 +128 404 ++127 404 +126 404 +125 404 +124 404 -123 404 -122 404 +121 404 +120 404 +119 404 +118 404 ++117 404 +116 404 +115 404 +114 404 -113 404 -112 404 +111 404 +110 404 -109 0 -108 0 +-107 404 -106 404 -105 404 -104 404 -103 0 -102 0 -101 0 -100 404 -99 404 -98 404 +-97 404 -96 0 -95 0 -94 0 -93 404 -92 404 * +Sh + +0101100 +-91 0 -90 0 +89 0 -88 0 +87 0 +86 0 +85 0 +84 0 +83 0 +82 0 ++81 0 +80 0 +79 0 +78 0 +77 0 +76 0 +75 0 +74 0 +73 0 -72 0 +-71 0 -70 0 -69 0 -68 0 -67 0 +66 403 +65 403 +64 403 -63 403 +62 403 +-61 403 +60 403 +59 403 +58 403 -1238 403 +1237 403 +1236 403 +1235 403 -1234 403 +1233 403 ++1232 403 +1231 403 -1230 403 -1229 403 -1228 0 -1227 0 -1226 0 -1225 0 -1224 0 -1223 0 +-1222 0 -1221 0 -1220 0 -1219 0 -1218 0 -1217 0 -1216 0 -1215 0 -1214 0 -1213 0 +-1212 0 +1211 0 +1210 0 +1209 0 -1208 0 -1207 0 +1206 0 +1205 0 +1204 0 +1203 0 +-1202 0 -1201 0 -1200 0 -1199 0 +1198 0 -1197 0 -1196 0 -1195 0 -1194 0 -1193 0 +-1192 0 -1191 0 -1190 0 -1189 0 -1188 0 +134 0 +1187 0 +1186 0 +1185 0 +1184 0 ++1183 0 +1182 0 +1181 0 +1180 0 +1179 0 +1178 0 * +Sh + +0101100 ++1177 315 +1176 315 +1175 315 -1174 315 +1173 315 -1172 315 -716 315 -713 315 -1171 315 -1170 315 ++1169 315 +1168 315 -1167 315 -1166 315 -1165 315 -1164 315 -1163 315 -1162 315 -1161 315 -1160 315 +-268 315 -1159 315 -1158 315 +1157 315 +1156 315 +1155 315 -1154 0 -1153 0 +1152 315 +1151 315 ++1150 0 +1149 0 +1148 0 +1147 0 -1146 0 * +Sh + +0101100 +-1145 0 -1144 0 -1143 0 +374 0 +1142 0 +1141 0 +377 414 +1140 0 +1139 0 +379 414 ++1138 0 +371 0 -1137 0 -1136 0 +1135 0 +368 0 +1134 0 +365 0 -1133 412 -366 0 +-1132 0 -1131 0 -1130 0 +1129 0 +1128 0 -1127 322 -1126 322 +382 0 +1125 0 +381 0 ++1124 0 +1123 0 +1122 0 +384 0 +1121 0 +383 0 -330 322 -1120 0 +378 0 +1119 0 ++380 0 +1118 0 -329 0 +1117 322 +1116 322 +1115 0 +1114 0 +1113 0 +1112 0 -376 0 +-1111 0 -1110 0 +1109 0 +1108 415 +1107 415 -1106 0 +1105 322 +1104 322 +1103 0 +1102 0 ++1101 0 +1100 322 +1099 0 +1217 0 +203 0 +1098 0 +1218 0 +1214 0 +202 0 +208 0 ++1097 0 +1216 0 +1215 0 +205 0 +206 0 +1096 329 +1095 322 +1094 322 +1093 322 +1092 322 ++1091 322 +1090 322 -1089 0 +1088 322 -1087 0 -1086 0 -1085 0 * +Sh + +0101100 +-1084 0 +1083 0 +1082 0 -1081 0 +1080 0 +1079 0 +1078 0 -1077 0 -1076 0 -1075 0 +-1074 0 +1073 0 +1072 0 -1071 418 +1070 418 +1069 418 +1068 418 -1067 0 -1066 0 +1065 418 +-1064 0 -1063 0 +1062 0 +1061 0 +1060 0 +1059 0 +1058 0 +1057 0 +1056 0 -1055 0 ++1054 0 +1053 0 -1052 0 -1051 0 +390 0 +391 0 +1050 0 +387 0 +389 0 +1049 0 +-328 0 +1048 0 +1047 0 +1046 0 -385 0 +1045 0 +1044 0 -1043 0 -1042 0 +1222 0 ++1219 0 +1223 0 +1221 0 +1220 0 +386 414 +388 414 -1041 0 +196 0 +201 0 +195 0 ++198 0 +199 0 +1040 0 +1039 0 +1038 0 +1037 0 -1036 0 -1035 0 +1096 354 -1034 0 +-1033 0 -1127 359 -1126 359 -1032 0 -330 359 +1117 359 +1116 359 +1031 0 +1105 359 +1104 359 ++1100 359 +1095 359 +1094 359 +1093 359 +1092 359 +1091 359 +1090 359 +1088 359 * +Sh + +0101000 +i1030 0 i1029 0 * +Sh + +0101000 +i1028 0 i1027 0 * +Sh + +0101100 ++1026 403 -1025 403 -1024 403 +1023 403 +1022 403 -1021 403 -1020 403 +1019 403 +1018 403 -1017 0 +-1016 0 +1015 0 +1014 0 +1013 0 -1012 0 -1011 0 +1010 0 +1191 0 +1190 0 * +Sh + +0101100 ++1009 403 -1008 403 -1007 403 +1006 403 +1005 403 -1004 403 -1003 403 +1002 403 +1001 403 -1000 0 +-999 0 +998 0 +997 0 +996 0 -995 0 -994 0 +993 0 +1189 0 +1188 0 * +Sh + +0101100 ++992 0 +991 0 +990 421 -989 0 +988 0 +987 421 +986 421 +1193 0 +1192 0 +985 421 ++984 421 -983 0 +982 0 +981 421 +980 0 -979 0 -978 0 +977 0 -976 0 +975 0 +-974 421 -973 421 +275 0 +276 0 -972 421 -971 421 -970 0 +969 0 -968 421 -967 421 +-966 0 -965 0 * +Sh + +0101100 ++964 0 +963 0 +990 424 -962 0 +961 0 +987 424 +986 424 +1194 0 +1195 0 +985 424 ++984 424 -960 0 +959 0 +981 424 +958 0 -957 0 -956 0 +955 0 +954 0 -953 0 +-974 424 -973 424 +274 0 +273 0 -972 424 -971 424 +952 0 -951 0 -968 424 -967 424 +-950 0 -949 0 * +Sh + +0101100 +-948 0 -947 0 -946 0 +358 0 +945 0 +944 0 +943 0 +346 0 +353 0 +942 0 +-941 0 -940 390 +351 0 -349 0 +342 414 +344 414 -939 0 -938 390 +937 0 -936 0 ++360 0 +935 0 +934 0 +933 0 -932 0 +361 0 +931 0 +930 0 +929 0 +928 0 ++927 0 -926 0 +925 0 +924 0 -923 0 +922 0 +921 0 +920 0 +363 0 +362 0 +-1127 387 -1126 387 +343 0 +345 0 +919 0 -325 0 -330 387 -341 0 +918 0 +917 0 ++916 0 -915 0 -914 0 +1117 387 +1116 387 +1227 0 +1226 0 +1225 0 +1224 0 +1228 0 +-913 0 +912 0 +189 0 +191 0 +192 0 +194 0 +188 0 +911 0 +910 0 +1105 387 ++1104 387 -909 0 +1096 394 +1100 387 -908 0 -907 0 +1095 387 +1094 387 +1093 387 +1092 387 ++1091 387 +1090 387 -906 0 -905 0 +1088 387 * +So + +0100000 ++57 0 * +So + +0100000 ++56 0 * +So + +0100000 ++55 0 * +So + +0100000 ++54 0 * +So + +0100000 ++53 0 * +So + +0100000 ++52 0 * +So + +0100000 ++51 0 * +So + +0100000 ++50 0 * +So + +0100000 ++49 0 * +So + +0100000 ++48 0 * +So + +0100000 ++47 0 * +So + +0100000 ++46 0 * +So + +0100000 ++45 0 * +So + +0100000 ++44 0 * +So + +0100000 ++43 0 * +So + +0100000 ++42 0 * +So + +0100000 ++41 0 * +So + +0100000 ++40 0 * +So + +0100000 ++39 0 * +So + +0100000 ++38 0 * +So + +0100000 ++37 0 * +So + +0100000 ++36 0 +35 0 +34 0 * +So + +0100000 ++33 0 * +So + +0100000 ++32 0 * +So + +0100000 ++31 0 * +So + +0100000 ++30 0 * +So + +0100000 ++29 0 * +Co + +1100000 +-6697 9 -6696 9 -6695 9 -6694 9 -6693 9 -6692 9 -6691 9 -6690 9 +6689 11 -6688 11 +-6687 11 -6686 11 -6685 11 -6684 11 -6683 11 -6682 11 -6681 11 -6680 11 -6679 13 +6678 13 +-6677 13 -6676 13 +6675 13 -6674 13 +6673 13 -6672 13 -6671 15 +6670 15 -6669 17 +6668 17 +-6667 13 +6666 13 -6665 13 +6664 8 +6663 13 +6662 8 +6661 19 -6660 19 +6659 13 -6658 13 +-6657 13 +6656 13 -6655 8 -6654 17 -6653 8 -6652 17 -6651 21 +6650 21 -6649 21 -6648 21 ++6647 21 -6646 21 +6645 21 -6644 21 -6643 23 +6642 23 -6641 25 +6640 25 -6639 21 +6638 21 +-6637 21 +6636 8 +6635 21 +6634 8 +6633 27 -6632 27 +6631 21 -6630 21 -6629 21 +6628 21 +-6627 8 -6626 25 -6625 8 -6624 25 -6651 29 +6650 29 -6649 29 -6648 29 +6647 29 -6646 29 ++6645 29 -6644 29 -6643 31 +6642 31 -6641 33 +6640 33 -6639 29 +6638 29 -6637 29 +6623 8 ++6635 29 +6622 8 +6633 35 -6632 35 +6631 29 -6630 29 -6629 29 +6628 29 -6621 8 -6626 33 +-6620 8 -6624 33 +6619 17 +6618 17 -6617 17 +6616 17 +6615 17 -6614 17 -6613 17 -6612 17 +-6611 17 +6610 17 -6609 17 -6608 8 -6607 17 -6606 8 +6605 8 -6604 17 +6603 17 +6602 8 +-6601 17 +6600 17 -6599 17 -6598 17 +6597 17 -6596 17 +6595 37 +6594 37 +6593 37 -6592 37 +-6591 17 +6590 17 -6589 17 +6588 17 +6587 25 -6586 25 -6585 25 -6584 25 -6583 25 +6582 25 +-6581 25 +6580 25 -6579 25 +6578 25 -6577 25 -6576 25 +6575 25 +6574 25 -6573 25 +6572 25 ++6571 25 -6570 25 +6569 39 +6568 39 +6567 39 -6566 39 +6565 25 +6564 25 -6563 25 -6562 8 +-6561 25 -6560 8 +6559 8 -6558 25 +6557 25 +6556 8 +6587 33 -6586 33 -6585 33 -6584 33 +-6583 33 +6582 33 -6581 33 +6580 33 -6579 33 +6578 33 -6577 33 -6576 33 +6575 33 +6574 33 +-6573 33 +6572 33 +6571 33 -6570 33 +6568 41 +6569 41 +6566 41 -6567 41 +6565 33 +6564 33 +-6563 33 -6555 8 -6561 33 -6554 8 +6553 8 -6558 33 +6557 33 +6552 8 -6551 15 -6550 15 ++6549 15 -6548 42 -6547 15 -6546 42 -6545 15 -6544 19 -6543 15 -6542 19 +6541 15 -6540 15 +-6539 15 +6538 15 +6537 19 -6536 19 +6535 8 -6534 8 -6533 19 -6532 19 -6531 19 +6530 19 +-6529 23 -6528 23 +6527 23 -6526 42 -6525 23 -6524 42 -6523 23 -6522 27 -6521 23 -6520 27 ++6519 23 -6518 23 -6517 23 +6516 23 -6529 31 -6528 31 +6527 31 -6515 42 -6525 31 -6514 42 +-6523 31 -6522 35 -6521 31 -6520 35 +6519 31 -6518 31 -6517 31 +6516 31 +6513 27 -6512 27 ++6511 45 -6510 45 +6509 27 -6508 27 -6507 27 -6506 27 -6505 27 +6504 27 +6513 35 -6512 35 ++6503 45 -6502 45 +6509 35 -6508 35 -6507 35 -6506 35 -6505 35 +6504 35 -6501 45 +6500 45 ++6499 45 -6498 45 -6497 45 +6496 45 -6495 45 -6494 45 -6493 45 -6492 45 -6491 45 -6490 45 +-6489 45 -6488 45 -6487 45 -6486 45 -6485 45 -6484 45 +6483 45 -6482 45 -6481 45 -6480 45 +-6479 45 -6478 45 -6477 45 -6476 45 -6475 45 +6474 45 -6473 45 -6472 45 +6471 45 +6470 45 +-6469 45 +6468 45 -6467 45 +6466 45 -6465 45 +6464 45 -6463 45 -6462 45 +6461 45 +6460 45 ++6459 45 +6458 45 -6457 45 +6456 45 -6455 45 +6454 45 +6453 45 +6452 45 +6451 45 +6450 45 ++6449 45 +6448 45 -6447 45 +6446 45 -6445 45 +6444 45 -6443 45 -6442 45 +6441 45 +6440 45 ++6439 45 -6438 45 +6437 45 +6436 45 -6435 45 -6434 45 +6433 45 -6432 45 -6431 45 -6430 45 +-6429 45 -6428 45 -6427 45 -6426 45 +6425 45 -6424 45 +6423 45 -6422 45 +6421 45 -6420 45 ++6419 45 +6418 45 -6417 45 +6416 45 -6415 45 +6414 45 -6413 45 +6412 45 +6411 45 +6410 45 ++6409 45 +6408 45 +6407 45 +6406 45 +6405 45 +6404 45 +6403 45 -6402 45 +6401 45 -6400 45 +-6399 45 +6398 45 -6397 45 +6396 45 -6395 45 +6394 45 -6393 45 -6392 45 -6391 45 +6390 45 ++6389 45 +6388 45 -6387 45 -6386 45 -6385 45 -6384 45 +6383 45 +6382 45 -6381 45 +6380 45 +-6379 45 +6378 45 -6377 45 -6376 45 -6375 45 -6374 45 -6373 45 -6372 45 -6371 45 -6370 45 +-6369 45 -6368 45 -6367 45 -6366 45 -6365 45 -6364 45 -6363 45 -6362 45 -6361 45 +6360 45 +-6359 45 +6358 45 -6357 45 +6356 45 +6355 45 -6354 45 +6353 45 -6352 45 +6351 8 -6350 45 ++6349 8 +6348 45 -6347 8 -6346 45 +6345 45 -6344 8 +6343 45 +6342 8 -6341 45 +6340 8 ++6339 45 -6338 8 +6337 45 -6336 8 -6335 45 +6334 45 -6333 45 -6332 8 -6331 8 -6330 8 +-6329 45 -6328 45 +6327 45 -6326 8 -6325 8 +6324 45 -6323 8 +6322 8 -6321 8 +6320 8 ++6319 45 -6318 45 -6317 8 +6316 45 -6315 8 -6314 45 -6313 8 +6312 45 -6311 45 -6310 45 +-6309 8 +6308 45 -6307 8 -6306 45 -6305 45 -6304 8 -6303 8 +6302 8 -6301 8 +6300 8 +-6299 8 +6298 8 +6297 45 -6296 45 +6295 45 +6294 45 -6293 45 -6292 45 +6291 45 -6290 45 +-6289 45 -6288 45 +6287 45 -6286 45 -6285 45 -6284 45 +6283 45 -6282 45 -6281 45 -6280 45 +-6279 45 -6278 45 +6277 45 -6276 45 +6275 45 -6274 45 +6273 45 -6272 45 -6271 45 -6270 45 +-6269 45 -6268 45 -6267 45 -6266 45 -6265 45 +6264 45 -6263 45 +6262 45 -6261 45 -6260 45 +-6259 45 +6258 45 -6257 45 -6256 45 -6255 45 +6254 45 +6253 45 -6252 45 -6251 45 +6250 45 +-6249 45 +6248 45 +6247 45 -6246 45 +6245 45 +6244 45 -6243 45 -6242 45 +6241 45 -6240 45 +-6239 45 -6238 45 +6237 45 -6236 8 -6235 45 -6234 45 -6233 45 +6232 8 -6231 45 +6230 45 +-6229 45 -6228 45 -6227 45 +6226 45 -6225 45 -6224 45 +6223 45 -6222 45 -6221 45 +6220 8 ++6219 45 -6218 45 -6217 8 -6216 45 +6215 45 -6214 45 +6213 45 -6212 45 -6211 45 -6210 45 +-6209 45 +6208 45 -6207 45 -6206 45 -6205 45 +6204 45 +6203 45 +6202 45 -6201 45 +6200 45 ++6199 45 +6198 45 +6197 45 -6196 45 +6195 45 -6194 45 -6193 8 -6192 8 -6191 8 -6190 45 +-6189 45 -6188 45 +6187 45 -6186 45 -6185 45 +6184 45 -6183 45 +6182 45 +6181 45 -6180 45 ++6179 45 -6178 45 -6177 8 +6176 8 +6175 8 +6174 8 -6173 45 +6172 45 +6171 45 -6170 8 ++6169 45 +6168 8 -6167 8 +6166 45 +6165 45 +6164 8 +6163 8 -6162 45 +6161 8 +6160 45 ++6159 45 -6158 45 +6157 45 +6156 45 +6155 45 -6154 45 -6153 45 -6152 8 -6151 48 -6150 48 +-6149 48 -6148 48 -6147 8 -6146 48 +6145 48 -6144 45 -6143 48 -6142 48 -6141 48 -6140 48 ++6139 45 -6138 8 -6137 8 -6136 45 +6135 45 -6134 45 +6133 8 -6132 51 +6131 45 +6130 45 ++6129 8 +6128 8 +6127 8 +6126 45 +6125 8 +6124 45 -6123 51 -6122 45 +6121 45 -6120 8 +-6119 51 -6118 51 -6117 51 -6116 51 -6115 8 -6114 51 +6113 51 -6112 45 -6111 45 -6110 45 ++6109 45 -6108 45 +6107 8 +6106 8 -6105 45 +6104 45 +6103 45 -6102 45 -6101 45 +6100 45 +-6099 45 +6098 45 +6097 45 -6096 45 +6095 45 -6094 45 -6093 45 +6092 45 +6091 45 -6090 45 +-6089 45 +6088 45 -6087 54 +6086 54 -6085 56 +6084 56 -6085 58 +6084 58 -6087 60 +6086 60 +-6085 62 +6084 62 -6087 64 +6086 64 +6083 60 -6082 60 +6083 54 -6082 54 +6083 64 -6082 64 ++6081 66 -6080 66 +6079 8 +6078 66 +6077 66 +6076 68 -6075 66 +6074 66 -6073 66 -6072 66 +-6071 66 -6070 66 -6069 66 -6068 66 -6067 66 -6066 66 -6065 66 -6064 66 -6063 66 -6062 66 +-6061 66 -6060 66 -6059 66 -6058 66 -6057 66 +6056 66 +6055 66 +6054 66 -6053 66 +6052 66 ++6051 66 +6050 66 +6049 66 -6048 66 +6047 66 +6046 66 +6045 66 -6044 66 +6043 66 +6042 66 ++6041 66 -6040 66 +6039 66 -6038 66 +6037 66 +6036 8 +6035 66 +6076 70 +6034 66 +6033 66 ++6032 66 -6031 66 +6030 66 -6029 70 +6028 8 -6027 39 +6026 39 -6029 68 +6025 8 -6027 41 ++6026 41 -6024 37 +6023 37 -6022 41 +6021 41 -6022 39 +6021 39 +6020 37 -6019 37 -6018 41 ++6017 41 -6016 41 -6015 41 +6014 41 -6013 41 +6012 41 +6011 41 +6010 41 +6009 41 +6008 41 +-6007 41 -6006 41 +6005 41 +6004 41 -6003 41 -6002 41 +6001 41 +6000 41 -5999 41 -5998 41 ++5997 41 -5996 41 +5995 41 -5994 41 +5993 41 +5992 41 -5991 41 +5990 41 -5989 41 -6018 39 ++6017 39 -6016 39 -6015 39 +6014 39 -6013 39 +6012 39 +6011 39 +6010 39 +6009 39 +6008 39 +-6007 39 -6006 39 +6005 39 +6004 39 -6003 39 -6002 39 +6001 39 +6000 39 -5999 39 -5998 39 ++5997 39 -5996 39 +5995 39 -5994 39 +5993 39 +5992 39 -5991 39 +5990 39 -5989 39 -5988 73 ++5987 73 +5986 73 +5985 73 -5984 73 +5983 8 -5982 73 -5981 8 -5980 73 +5979 73 -5978 73 ++5977 73 -5976 73 +5975 73 +5974 73 -5973 73 -5972 73 -5971 73 -5970 73 -5969 8 +5968 73 +-5967 73 -5966 73 -5965 73 -5964 73 -5963 73 -5962 73 -5961 8 +5960 73 -5959 73 +5958 73 ++5957 73 -5956 73 +5955 73 +5954 73 +5953 8 -5952 73 +5951 73 -5950 73 +5949 73 -5948 73 +-5947 8 +5946 8 -5945 73 -5944 73 -5943 8 +5942 8 -5941 73 -5940 73 -5939 8 +5938 8 +-5937 73 -5936 73 +5935 73 +5934 73 +5933 8 -5932 73 +5931 8 -5930 73 -5929 73 +5928 8 +-5927 73 +5926 8 -5925 73 +5924 8 -5923 73 -5922 8 +5921 73 -5920 8 +5919 73 +5918 8 +-5917 8 -5916 73 +5915 8 -5914 73 -5913 73 +5912 8 -5911 73 -5910 8 +5909 8 -5908 73 +-5907 8 -5906 73 -5905 8 +5904 8 -5903 73 -5902 73 -5901 8 +5900 8 -5899 75 -5898 8 +-5897 8 -5896 73 -5895 73 -5894 8 -5893 8 -5892 75 -5891 75 -5890 8 -5889 8 +5888 8 +-5887 77 -5886 8 -5885 8 -5884 73 -5883 73 -5882 8 -5881 8 -5880 77 -5879 77 -5878 8 +-5877 8 +5876 8 -5887 79 -5875 8 -5874 8 -5873 73 -5872 73 -5871 8 -5870 8 -5880 79 +-5879 79 -5869 73 -5868 73 -5867 73 -5866 8 -5865 73 +5864 73 +5863 73 +5862 73 -5861 73 ++5860 73 +5859 73 +5858 73 -5857 73 -5856 73 -5855 73 +5854 73 -5853 73 -5852 73 -5851 73 ++5850 73 +5849 73 +5848 73 -5847 73 +5846 73 +5845 73 +5844 73 -5843 73 +5842 73 +5841 73 ++5840 73 +5839 73 -5838 73 +5837 73 +5836 73 +5835 73 -5834 73 -5833 73 -5832 73 +5831 73 +-5830 73 +5829 73 +5828 73 +5827 73 -5826 73 +5825 73 +5824 73 -5823 73 +5822 73 -5821 73 +-5820 73 +5819 73 +5818 73 +5817 73 -5816 73 +5815 73 +5814 73 -5813 73 -5812 73 -5811 73 +-5810 73 -5809 73 -5808 73 +5807 73 -5806 73 -5805 73 -5804 73 -5803 73 +5802 73 -5801 73 +-5800 8 -5799 73 -5798 8 -5797 73 -5796 8 -5795 8 -5794 73 -5793 8 -5792 73 -5791 8 +-5790 73 -5789 8 -5788 73 -5787 8 -5786 73 -5785 73 +5784 73 +5783 73 -5782 81 -5781 73 +-5780 73 -5779 73 -5778 73 -5777 73 -5776 73 -5775 73 -5774 81 -5773 73 -5772 73 -5771 81 +-5770 73 -5769 73 -5768 73 -5767 73 -5766 73 -5765 73 -5764 73 -5763 81 -5762 73 +5761 73 +-5760 81 -5759 73 -5758 73 -5757 81 -5756 73 -5755 73 -5754 73 -5753 73 -5752 73 -5751 73 +-5750 73 -5749 81 -5748 73 -5747 73 -5746 81 -5745 73 -5744 73 -5743 73 -5742 73 -5741 73 +-5740 73 +5739 73 -5738 73 -5737 73 -5736 73 +5735 73 -5734 73 +5733 73 -5732 73 -5731 73 +-5730 73 +5729 73 -5728 73 +5727 73 -5726 73 -5725 73 -5724 73 +5723 73 -5722 73 -5721 73 ++5720 73 -5719 73 +5718 73 -5717 73 -5716 73 +5715 73 -5714 73 -5713 73 +5712 73 -5711 73 ++5710 73 -5709 73 +5708 73 +5707 73 +5706 73 +5705 73 +5704 73 -5703 81 +5702 81 -5701 83 +-5700 8 +5699 81 -5698 81 +5697 81 -5696 81 +5695 81 +5694 81 -5693 81 +5692 81 -5691 81 +-5690 81 -5689 81 -5688 81 -5687 81 -5686 81 -5685 81 -5684 81 -5683 81 -5682 81 -5681 81 +-5680 81 -5679 81 -5678 81 +5677 81 -5676 81 +5675 81 -5674 81 -5673 81 +5672 81 -6076 85 +-5671 8 -5670 81 +5669 81 -5668 8 -5701 87 -5667 81 +5666 81 -5665 8 -5701 89 +5664 81 +-5663 81 +5662 81 -5661 81 -5660 81 +5659 81 -5658 81 -5657 81 +5656 81 -5655 81 +5654 81 +-5653 81 +5652 81 +5651 81 +5650 81 -5649 81 -5648 81 +5647 81 -5646 81 -5645 81 -5644 81 +-5643 81 -5642 81 -5641 81 +5640 81 -5639 8 -5638 8 -5637 81 -5636 8 +5635 81 -5634 8 +-5633 8 -5632 81 -5631 8 +5630 81 -5629 8 -5628 8 -5627 81 -5626 8 -5625 81 -5624 81 +-5623 81 -6029 85 +5622 8 +5621 89 -5620 8 +5621 83 -5619 8 +5621 87 -5618 8 -5617 37 ++5616 37 -5615 37 -5614 37 +5613 37 -5612 37 -5611 37 +5610 37 -5609 37 +5608 37 +5607 37 +-5606 37 -5605 37 +5604 37 +5603 37 +5602 37 -5601 37 +5600 37 +5599 37 +5598 37 +5597 37 +-5596 37 +5595 37 -5594 37 +5593 42 -5592 42 -5591 42 -5590 42 -5589 37 -5588 37 +5587 91 ++5586 91 -5585 42 +5584 42 -5583 93 -5582 93 -5581 8 +5580 8 +5579 48 +5578 48 +5577 60 ++5576 60 -5575 48 +5574 95 +5573 8 +5572 48 +5571 95 -5570 8 -5569 48 -5568 48 -5567 60 ++5566 60 -5565 95 -5564 95 -5582 48 +5583 48 -5563 8 +5562 8 +5561 8 i5560 8 i5559 8 ++5558 8 -5557 8 +5556 95 -5555 8 -5554 95 -5553 8 -5552 8 -5551 95 -5550 95 -5549 8 +-5548 60 -5547 60 +5546 97 +5545 97 +5544 97 +5543 97 +6085 99 -6084 99 -5542 60 +5541 60 +-5540 97 +5539 97 -5538 8 +5537 8 -5536 60 -5535 60 -5534 75 +5533 75 -5532 75 +5531 101 ++5530 101 -5529 60 +5528 60 -5527 60 -5526 60 -5525 60 -5524 60 +5523 60 -5522 60 +5521 60 ++5520 60 +5519 60 +5518 60 +5517 75 -5516 75 +5515 8 -5514 101 -5513 8 -5512 101 +5511 8 +-5510 8 -5509 8 -5508 8 -5507 8 -5511 103 +5506 8 +5505 8 +5504 8 i5503 8 -5502 8 ++5501 8 -5500 8 -5499 8 -5498 8 -5497 8 -5496 8 -5495 8 +5494 8 -5493 8 +5492 8 ++5491 8 +5490 8 +5489 8 +5488 8 -5487 8 +5486 8 +5485 8 -5484 105 -5483 8 -5482 8 ++5481 8 -5480 8 -5479 8 -5478 8 +5477 8 +5476 8 +5475 8 -5474 8 -5473 8 -5472 8 +-5471 8 +5470 8 -5469 8 -5468 8 +5467 8 -5466 8 -5465 8 +5464 8 +5463 77 -5462 8 ++5461 77 +5460 8 +5459 77 +5458 77 -5494 107 -5495 107 +5457 77 -5456 77 -5455 77 +5454 8 +-5453 8 +5452 8 +6084 109 -6085 109 -5451 8 +5450 8 +5577 54 +5576 54 +5531 111 +5530 111 ++5449 77 -5448 77 -5567 54 +5566 54 -5447 8 -5512 111 -5446 8 -5514 111 -5548 54 -5547 54 +-5542 54 +5541 54 -5536 54 -5535 54 -5529 54 +5528 54 -5527 54 -5526 54 -5525 54 -5524 54 ++5523 54 -5522 54 +5521 54 +5520 54 +5519 54 +5518 54 i5445 8 i5444 8 i5443 8 i5442 8 +i5441 8 i5440 8 i5439 8 i5438 8 i5437 8 i5436 8 i5435 8 i5434 8 i5433 8 i5432 8 +i5431 8 i5430 8 i5429 8 i5428 8 i5427 8 -5426 81 +5425 81 +5424 81 -5423 81 -5422 81 ++5421 81 +5420 81 -5419 81 +5418 81 +5417 81 +5416 81 -5415 81 -5414 81 +5413 8 +5412 81 ++5411 42 +5410 81 -5409 81 +5408 8 +5407 87 -5406 81 +5405 81 +5404 81 -5403 81 -5402 81 ++5401 81 +5400 81 -5399 81 +5398 81 +5397 81 +5396 81 -5395 81 -5394 81 +5393 8 +5392 81 ++5391 42 +5390 81 -5389 81 +5388 8 +5407 89 -5387 113 +5386 113 -5385 113 -5384 113 +5383 42 ++5382 8 +5381 113 -5380 113 -5379 113 -5378 113 +5377 113 -5376 113 -5375 113 +5374 85 -5373 8 ++5372 113 -5371 113 -5370 8 -5369 113 +5368 113 +5367 113 -5366 42 -5365 113 +5364 113 +5363 113 ++5362 113 +5374 68 -5361 113 -5360 8 +5359 113 -5358 113 +5357 113 -5387 115 +5386 115 -5385 115 +-5384 115 +5356 42 +5355 8 +5381 115 -5380 115 -5379 115 -5378 115 +5377 115 -5376 115 -5375 115 ++5407 83 -5354 8 +5372 115 -5371 115 -5353 42 -5369 115 +5368 115 +5367 115 -5352 8 -5365 115 ++5364 115 +5363 115 +5362 115 +5361 115 -5374 70 +5351 8 -5359 115 -5358 115 +5357 115 -5350 117 +-5349 117 -5348 8 +5347 8 +5346 51 +5345 51 +5344 8 +5343 8 +5342 8 -5341 8 +5340 51 +-5339 51 -5338 51 -5337 119 -5349 51 +5350 51 +5336 8 +5335 8 -5334 8 +5333 8 +5577 64 ++5576 64 +5332 8 -5331 8 +5330 8 -5567 64 +5566 64 +5329 8 +5457 79 -5456 79 +5455 79 ++6084 121 -6085 121 -5548 64 -5547 64 -5328 8 +5327 8 -5542 64 +5541 64 +5531 123 +5530 123 +-5536 64 -5535 64 +5449 79 -5448 79 -5529 64 +5528 64 -5527 64 -5526 64 -5525 64 -5524 64 ++5326 8 -5325 8 -5324 8 -5514 123 -5323 8 +5523 64 -5522 64 +5521 64 +5520 64 +5519 64 ++5518 64 -5322 9 +5321 9 +5320 42 -5319 42 -5318 42 -5317 42 -5316 42 -5315 42 -5314 42 +-5313 42 -5312 42 -5311 42 -5310 9 +5309 9 -5308 9 +5307 9 -5306 9 +5305 9 -5304 125 ++5303 125 -5302 9 +5301 9 -5300 9 -5299 9 -5298 9 +5297 9 +5296 9 +5295 9 +5294 9 +-5293 9 -5292 9 +5291 9 -5290 9 +5289 9 +5288 9 +5287 9 +5286 9 -5285 9 +5284 9 ++5283 9 +5282 9 -5281 9 +5280 9 +5279 9 -5278 9 +5277 9 -5276 9 +5275 9 -5274 42 ++5273 9 -5272 17 -5271 42 -5270 42 -5269 9 -5268 42 -5267 17 -5266 9 +5265 9 -5264 42 ++5263 9 -5262 33 -5261 42 -5260 42 -5259 9 -5258 42 -5257 33 -5256 9 +5255 9 -5254 42 ++5253 9 -5262 25 -5252 42 -5251 42 -5250 9 -5249 42 -5257 25 -5248 9 +5247 9 +5246 9 +-5245 9 -5244 9 -5243 9 -5242 9 +5241 9 +5240 23 -5239 23 +5238 23 -5237 23 -5236 25 ++5235 25 +5234 9 -5233 9 -5232 9 -5231 9 -5230 9 +5229 9 +5240 31 -5239 31 +5238 31 +-5237 31 -5236 33 +5235 33 +5228 9 -5227 9 -5226 9 -5225 9 -5224 9 +5223 9 +5222 15 +-5221 15 +5220 15 -5219 15 -5218 17 +5217 17 +5216 9 -5215 9 +5214 9 -5213 9 -5212 9 +-5211 9 +5210 9 -5209 9 -5208 9 +5207 9 -5206 9 +5205 9 +5204 9 -5203 9 +5202 9 +-5201 9 -5200 9 +5199 9 +5198 9 -5197 9 +5196 9 -5195 9 +5194 9 +5193 9 +5192 9 ++5191 9 +5190 9 +5189 9 +5188 9 +5187 9 -5186 9 +5185 9 -5184 9 -5183 9 +5182 9 ++5181 9 +5180 9 +5179 9 +5178 9 +5177 9 +5176 9 +5175 9 +5174 9 +5173 9 -5172 9 +-5171 9 -5170 9 -5169 9 -5168 9 -5167 9 -5166 125 -5165 125 -5164 9 -5163 9 -5162 9 ++5161 9 -5160 9 -5159 9 +5158 9 +5157 9 -5156 9 +5155 9 -5154 9 +5153 9 -5152 9 +-5151 9 -5150 9 -5149 9 +5148 9 +5147 9 +5146 9 +5145 9 -5144 9 -5143 9 +5142 9 ++5141 9 -5140 9 -5139 9 -5138 9 +5137 9 -5136 9 +5135 9 -5134 9 -5133 9 -5132 9 +-5131 17 -5130 17 -5129 9 +5128 17 +5127 9 -5126 9 -5125 9 +5124 9 -5123 9 -5122 17 +-5121 17 +5120 17 -5119 9 -5118 9 +5117 9 -5116 9 -5115 9 -5114 9 -5113 33 -5112 33 +-5111 9 +5110 33 +5109 9 -5108 9 -5107 9 +5106 9 -5105 9 -5104 33 -5103 33 +5102 33 +-5101 9 -5100 9 +5099 9 -5098 9 -5097 9 -5096 9 -5095 25 -5094 25 -5093 9 +5092 25 ++5091 9 -5090 9 -5089 9 +5088 9 -5087 9 -5086 25 -5085 25 +5084 25 -5083 9 -5082 9 ++5081 9 -5080 9 -5079 9 +5078 9 -5077 9 -5076 9 +5075 9 -5074 9 -5073 9 -5072 9 ++5071 9 -5070 9 -5069 9 +5068 23 +5067 23 +5066 23 +5065 23 -5064 25 -5063 25 -5062 9 ++5061 9 +5060 9 -5059 9 -5058 9 +5057 9 -5056 9 -5055 9 -5054 9 +5053 9 -5052 9 +-5051 9 +5068 31 +5067 31 +5066 31 +5065 31 -5064 33 -5063 33 -5050 9 +5049 9 +5048 9 +-5047 9 -5046 9 -5045 9 +5044 9 -5043 9 -5042 9 +5041 9 -5040 9 -5039 9 +5038 15 ++5037 15 +5036 15 +5035 15 -5034 17 -5033 17 -5032 9 +5031 9 +5030 9 -5029 9 +5028 9 ++5027 9 -5026 9 +5025 9 -5024 9 -5023 9 -5022 9 +5021 9 +5020 9 -5019 9 -5018 9 ++5017 9 +5016 9 -5015 9 -5014 9 +5013 9 -5012 9 -5011 9 -5010 9 +5009 9 -5008 9 +-5007 9 -5006 9 +5005 9 -5004 9 +5003 9 -5002 9 -5001 9 -5000 9 -4999 9 +4998 9 ++4997 9 -4996 9 -4995 9 -4994 9 +4993 9 +4992 9 -4991 9 +4990 9 +4989 9 +4988 9 ++4987 9 +4986 9 +4985 9 +4984 9 +4983 9 +4982 9 +4981 9 +4980 9 +4979 9 +4978 9 ++4977 9 +4976 9 +4975 9 +4974 9 +4973 9 -4972 9 -4971 9 -4970 9 -4969 9 -4968 9 +-4967 9 -4966 9 -4965 9 -4964 9 -4963 9 -4962 9 +4961 9 +4960 9 +4959 9 +4958 9 ++4957 9 +4956 9 +4955 9 +4954 9 +4953 9 -4952 11 +4951 11 -4950 11 +4949 11 -4948 11 ++4947 11 -4946 11 +4945 11 -4944 11 +4943 11 -4942 11 +4941 11 -4940 11 +4939 11 -4938 11 ++4937 11 -4936 11 +4935 11 -4934 11 -4933 11 -4932 13 +4931 13 +4930 13 -4929 13 +4928 13 +-4927 13 -4926 13 +4925 13 -4924 13 -4923 13 +4922 13 -4921 13 -4920 13 -4919 13 -4918 15 +-4917 15 -4916 17 -4915 17 -4914 13 -4913 13 -4912 13 -4911 13 -4910 13 +4909 13 -4908 13 +-4907 13 +4906 19 +4905 19 +4904 13 +4903 13 -4902 13 +4901 13 -4900 17 -4899 17 -4898 13 +-4897 17 -4896 13 +4895 13 -4894 13 -4893 17 -4892 17 -4891 17 +4890 13 -4889 13 -4888 21 ++4887 21 +4886 21 -4885 21 +4884 21 -4883 21 -4882 21 +4881 21 -4880 21 -4879 21 +4878 21 +-4877 21 -4876 21 -4875 21 -4874 23 -4873 23 -4872 25 -4871 25 -4870 21 -4869 21 -4868 21 +-4867 21 -4866 21 +4865 21 -4864 21 -4863 21 +4862 27 +4861 27 +4860 21 +4859 21 -4858 21 ++4857 21 -4856 25 -4855 25 -4854 21 -4853 25 -4852 21 +4851 21 -4850 21 -4849 25 -4848 25 +-4847 25 +4846 21 -4845 21 -4888 29 +4887 29 +4886 29 -4885 29 +4884 29 -4883 29 -4882 29 ++4881 29 -4880 29 -4879 29 +4878 29 -4877 29 -4876 29 -4875 29 -4874 31 -4873 31 -4872 33 +-4871 33 -4870 29 -4869 29 -4844 29 -4843 29 -4866 29 +4865 29 -4842 29 -4841 29 +4862 35 ++4861 35 +4860 29 +4859 29 -4858 29 +4840 29 -4839 33 -4838 33 -4837 29 -4836 33 -4835 29 ++4834 29 -4850 29 -4833 33 -4832 33 -4831 33 +4846 29 -4845 29 -4830 17 -4829 17 +4828 17 +-4827 17 -4826 17 -4825 17 -4824 17 +4823 17 +4822 17 +4821 17 +4820 17 +4819 17 -4818 17 ++4817 17 -4816 17 -4815 17 +4814 17 +4813 17 +4812 17 -4811 17 +4810 17 +4809 17 +4808 17 ++4807 15 +4806 17 +4805 17 -4804 17 +4803 17 +4802 15 +4801 17 -4800 17 +4799 17 -4798 17 ++4797 17 +4796 17 -4795 17 +4794 17 -4793 17 +4792 17 -4791 17 -4790 37 +4789 17 -4788 37 ++4787 37 -4786 37 -4785 17 +4784 17 +4783 17 -4782 37 -4781 37 -4780 17 +4779 17 -4778 17 +-4777 17 -4776 17 +4775 17 -4774 17 +4773 17 +4772 17 -4771 17 +4770 17 +4769 17 -4768 17 ++4767 17 +4766 25 -4765 25 -4764 25 +4763 25 -4762 25 +4761 25 -4760 25 +4759 25 +4758 25 ++4757 25 +4756 25 -4755 25 +4754 25 +4753 25 -4752 25 +4751 25 -4750 25 +4749 25 -4748 25 +-4747 25 -4746 25 +4745 25 +4744 25 +4743 25 -4742 25 -4741 25 +4740 25 -4739 25 -4738 25 +-4737 25 -4736 25 +4735 25 +4734 25 +4733 25 -4732 25 -4731 39 +4730 25 -4729 39 +4728 39 +-4727 39 -4726 25 -4725 25 +4724 25 -4723 39 -4722 39 -4721 25 +4720 25 -4719 25 +4718 25 ++4717 25 +4716 25 -4715 25 +4714 25 +4713 25 +4712 25 +4711 23 +4710 25 +4709 25 -4708 25 ++4707 25 +4706 23 +4705 25 -4704 25 +4703 25 +4766 33 -4765 33 -4764 33 +4763 33 -4762 33 ++4761 33 -4702 33 +4701 33 +4758 33 +4757 33 +4756 33 -4755 33 +4754 33 +4753 33 -4752 33 ++4751 33 -4750 33 +4749 33 -4748 33 -4747 33 -4746 33 +4745 33 +4744 33 +4743 33 -4700 33 +-4741 33 +4699 33 -4739 33 -4738 33 -4737 33 -4736 33 +4735 33 +4734 33 +4733 33 -4698 33 +-4723 41 +4697 33 -4728 41 +4729 41 -4722 41 -4696 33 -4725 33 +4695 33 -4731 41 -4727 41 +-4721 33 +4720 33 -4719 33 +4718 33 +4694 33 +4693 33 -4715 33 +4692 33 +4691 33 +4690 33 ++4689 31 +4710 33 +4688 33 -4708 33 +4687 33 +4686 31 +4685 33 -4704 33 +4703 33 -4684 15 ++4683 15 +4682 15 +4681 15 +4680 15 +4679 15 +4678 15 +4677 15 +4676 15 +4675 15 -4674 19 ++4673 15 -4672 15 +4671 15 -4670 19 +4669 15 +4668 15 +4667 15 +4666 15 -4665 15 +4664 15 +-4663 15 +4662 15 -4661 15 +4660 15 +4659 15 +4658 19 -4657 19 +4656 19 +4655 19 +4654 19 ++4653 19 -4652 19 +4651 19 +4650 19 +4649 19 +4648 19 -4647 19 +4646 19 +4645 19 -4644 19 ++4643 19 -4642 23 +4641 23 +4640 23 +4639 23 +4638 23 +4637 23 +4636 23 +4635 23 +4634 23 ++4633 23 -4632 27 +4631 23 -4630 23 +4629 23 -4628 27 +4627 23 +4626 23 +4625 23 +4624 23 +-4623 23 +4622 23 -4621 23 -4620 23 -4619 23 +4618 23 -4617 23 -4642 31 +4641 31 +4640 31 ++4639 31 +4616 31 +4615 31 +4614 31 +4613 31 +4634 31 +4612 31 -4611 35 +4610 31 -4630 31 ++4609 31 -4608 35 +4607 31 +4626 31 +4625 31 +4606 31 -4605 31 +4604 31 -4603 31 -4620 31 +-4619 31 +4618 31 -4617 31 +4602 27 -4601 27 +4600 27 +4599 27 +4598 45 +4597 45 +4596 27 ++4595 27 -4594 27 +4593 27 +4592 27 +4591 27 +4590 27 -4589 27 +4588 27 +4587 27 -4586 27 ++4585 27 +4602 35 -4584 35 +4583 35 +4599 35 +4582 45 +4581 45 +4596 35 +4595 35 -4594 35 ++4593 35 +4592 35 +4591 35 +4590 35 -4589 35 +4588 35 +4587 35 -4586 35 +4585 35 -4580 45 +-4579 45 +4578 45 +4577 45 -4576 45 -4575 45 -4574 45 -4573 45 -4572 45 -4571 45 -4570 45 +-4569 45 -4568 45 -4567 45 -4566 45 -4565 45 -4564 45 -4563 45 -4562 45 +4561 45 -4560 45 ++4559 45 -4558 45 +4557 45 -4556 45 -4555 45 -4554 45 +4553 45 +4552 45 +4551 45 -4550 45 ++4549 45 +4548 45 -4547 45 +4546 45 -4545 45 +4544 45 -4543 45 -4542 45 +4541 45 +4540 45 ++4539 45 +4538 45 -4537 45 +4536 45 -4535 45 -4534 45 -4533 45 +4532 45 +4531 45 -4530 45 ++4529 45 -4528 45 +4527 45 -4526 45 +4525 45 +4524 45 -4523 45 +4522 45 +4521 45 +4520 45 +-4519 45 -4518 45 +4517 45 +4516 45 -4515 45 +4514 45 -4513 45 -4512 45 +4511 45 -4510 45 ++4509 45 -4508 45 +4507 45 +4506 45 +4505 45 -4504 45 +4503 45 +4502 45 -4501 45 +4500 45 +-4499 45 +4498 45 -4497 45 +4496 45 -4495 45 -4494 45 -4493 45 +4492 45 +4491 45 -4490 45 ++4489 45 -4488 45 -4487 45 +4486 45 -4485 45 -4484 45 -4483 45 -4482 45 -4481 45 -4480 45 +-4479 45 -4478 45 -4477 45 -4476 45 -4475 45 -4474 45 +4473 45 -4472 45 +4471 45 -4470 45 ++4469 45 -4468 45 +4467 45 -4466 45 -4465 45 -4464 45 -4463 45 -4462 45 +4461 45 +4460 45 +-4459 45 -4458 45 +4457 45 +4456 45 -4455 45 -4454 45 +4453 45 +4452 45 -4451 45 -4450 45 ++4449 45 -4448 45 +4447 45 +4446 45 +4445 45 -4444 45 +4443 45 +4442 45 +4441 45 -4440 45 +-4439 45 -4438 45 +4437 45 -4436 45 -4435 45 -4434 45 +4433 45 -4432 45 +4431 45 +4430 45 +-4429 45 +4428 45 +4427 45 -4426 45 +4425 45 +4424 45 -4423 45 -4422 45 +4421 45 -4420 45 +-4419 45 +4418 45 +4417 45 -4416 45 +4415 45 +4414 45 +4413 45 +4412 45 +4411 45 +4410 45 +-4409 45 -4408 45 +4407 45 +4406 45 -4405 45 +4404 45 +4403 45 -4402 45 +4401 45 +4400 45 +-4399 45 -4398 45 -4397 45 +4396 45 -4395 45 +4394 45 +4393 45 -4392 45 +4391 45 -4390 45 ++4389 45 +4388 45 -4387 45 +4386 45 +4385 45 -4384 45 -4383 45 -4382 45 +4381 45 +4380 45 +-4379 45 +4378 45 +4377 45 +4376 45 -4375 45 -4374 45 +4373 45 +4372 45 +4371 45 -4370 45 +-4369 45 +4368 45 +4367 45 -4366 45 +4365 45 -4364 45 +4363 45 -4362 45 +4361 45 -4360 45 ++4359 45 -4358 45 -4357 45 -4356 45 -4355 45 -4354 45 -4353 45 -4352 45 -4351 45 -4350 45 ++4349 45 -4348 45 -4347 45 -4346 45 -4345 45 +4344 45 -4343 45 -4342 45 +4341 45 -4340 45 ++4339 45 -4338 45 -4337 45 +4336 45 -4335 45 +4334 45 +4333 45 +4332 45 -4331 45 -4330 45 ++4329 45 -4328 45 +4327 45 -4326 45 -4325 45 +4324 45 -4323 45 -4322 45 -4321 45 +4320 45 ++4319 45 +4318 45 -4317 45 +4316 45 -4315 45 -4314 45 +4313 45 +4312 45 +4311 45 -4310 45 +-4309 45 +4308 45 +4307 45 -4306 45 +4305 45 +4304 45 -4303 45 -4302 45 +4301 45 -4300 45 +-4299 45 +4298 45 -4297 45 -4296 45 -4295 45 +4294 45 -4293 45 -4292 45 +4291 45 -4290 45 +-4289 45 -4288 45 -4287 45 +4286 45 +4285 45 +4284 45 -4283 45 +4282 45 -4281 45 +4280 45 +-4279 45 -4278 45 +4277 45 +4276 45 -4275 45 -4274 45 -4273 45 -4272 45 +4271 45 -4270 45 ++4269 45 +4268 45 +4267 45 -4266 45 +4265 45 +4264 45 -4263 45 -4262 45 +4261 45 -4260 45 +-4259 45 +4258 45 -4257 45 -4256 45 -4255 45 +4254 45 -4253 45 -4252 45 +4251 45 -4250 45 ++4249 45 +4248 45 +4247 45 +4246 45 -4245 45 -4244 45 +4243 45 +4242 45 -4241 45 +4240 45 +-4239 45 -4238 45 +4237 45 +4236 45 -4235 45 +4234 45 -4233 45 +4232 45 +4231 45 +4230 45 +-4229 45 +4228 45 -4227 45 -4226 45 +4225 45 -4224 45 -4223 45 +4222 45 +4221 45 -4220 45 ++4219 45 -4218 45 +4217 45 +4216 45 +4215 45 -4214 45 +4213 45 -4212 45 -4211 45 +4210 45 +-4209 45 -4208 45 +4207 45 +4206 45 +4205 45 -4204 45 +4203 45 -4202 45 -4201 45 +4200 45 +-4199 45 -4198 45 +4197 45 +4196 45 -4195 45 -4194 45 -4193 45 +4192 45 +4191 45 +4190 45 +-4189 45 +4188 45 -4187 45 -4186 45 -4185 45 +4184 45 +4183 45 +4182 45 -4181 45 -4180 45 ++4179 45 -4178 45 -4177 45 -4176 45 +4175 45 +4174 45 -4173 45 -4172 45 +4171 45 +4170 45 +-4169 45 +4168 45 +4167 45 -4166 45 +4165 45 -4164 45 +4163 45 +4162 45 -4161 45 -4160 45 ++4159 45 +4158 45 +4157 45 -4156 45 -4155 45 -4154 45 -4153 45 -4152 45 +4151 45 +4150 45 +-4149 45 -4148 45 +4147 45 +4146 45 +4145 45 -4144 45 -4143 45 -4142 45 -4141 45 -4140 45 ++4139 45 +4138 45 -4137 45 +4136 45 -4135 45 -4134 45 +4133 45 +4132 45 -4131 45 -4130 45 +-4129 45 -4128 45 +4127 45 +4126 45 +4125 45 -4124 45 -4123 45 +4122 45 -4121 45 +4120 45 ++4119 45 -4118 45 +4117 45 +4116 45 +4115 45 -4114 45 -4113 45 +4112 45 -4111 45 +4110 45 +-4109 45 +4108 45 +4107 45 +4106 204 -4105 45 -4104 45 -4103 45 +4102 45 +4101 45 -4100 45 +-4099 45 +4098 45 +4097 45 -4096 45 +4095 45 -4094 45 +4093 45 -4092 45 +4091 45 -4090 45 ++4089 45 -4088 45 -4087 45 -4086 45 +4085 45 +4084 45 +4083 45 +4082 45 +4081 45 -4080 45 ++4079 45 +4078 45 +4077 45 -4076 45 -4075 45 +4074 45 -4073 45 +4072 45 -4071 45 +4070 45 ++4069 45 -4068 45 -4067 45 +4066 45 -4065 45 +4064 45 -4063 45 +4062 45 +4061 45 -4060 45 +-4059 45 +4058 45 +4057 45 -4056 45 -4055 45 +4054 45 +4053 45 -4052 45 -4051 45 +4050 45 ++4049 45 -4048 45 -4047 45 +4046 45 +4045 45 +4044 45 +4043 45 -4042 45 -4041 45 -4040 45 +-4039 48 +4038 48 +4037 48 -4036 45 +4035 45 -4034 48 -4033 48 -4032 45 -4031 45 -4030 48 +-4029 48 +4028 45 -4027 45 +4026 45 -4025 48 +4024 48 -4023 45 -4022 45 -4021 48 -4020 48 ++4019 45 +4018 45 -4017 45 -4016 45 +4015 45 -4014 45 +4013 45 +4012 45 +4011 45 +4010 45 ++4009 45 +4008 45 -4007 45 -4006 45 +4005 45 -4004 45 +4003 45 -4002 45 +4001 45 +4000 45 ++3999 45 -3998 45 +3997 45 -3996 45 -3995 45 -3994 45 -3993 45 -3992 51 +3991 51 +3990 51 +-3989 45 +3988 45 -3987 51 -3986 51 -3985 45 -3984 45 -3983 45 -3982 45 +3981 45 +3980 45 +-3979 45 +3978 45 +3977 45 -3976 51 -3975 45 +3974 51 +3973 45 +3972 51 +3971 51 +3970 45 +-3969 45 -3968 45 +3967 45 -3966 45 +3965 45 -3964 45 +3963 45 +3962 45 -3961 45 -3960 45 +-3959 45 +3958 45 +3957 45 -3956 45 -3955 45 +3954 45 +3953 45 +3952 45 -3951 45 -3950 45 ++3949 45 -3948 45 +3947 45 +3946 45 -3945 45 +3944 45 +3943 45 -3942 45 -3941 45 +3940 45 +-3939 45 +3938 45 +3937 45 -3936 54 -3935 54 -3934 56 -3933 56 -3934 58 -3933 58 -3936 60 +-3935 60 -3934 62 -3933 62 -3936 64 -3935 64 +3932 60 +3931 60 +3932 54 +3931 54 +3932 64 ++3931 64 -3930 45 +3929 45 +3928 66 -3927 66 -3926 66 -3925 66 +3924 66 -3923 66 -3922 66 ++3921 66 -3920 66 -3919 66 -3918 66 +3917 66 +3916 66 -3915 66 +3914 66 +3913 66 -3912 66 ++3911 66 +3910 66 +3909 66 +3908 66 -3907 66 +3906 66 +3905 66 -3904 66 +3903 66 +3902 66 +-3901 66 +3900 66 +3899 66 +3898 66 +3897 66 -3896 66 +3895 66 +3894 66 -3893 66 +3892 66 ++3891 66 -3890 66 -3889 66 +3888 66 -3887 66 +3886 66 +3885 66 -3884 66 -3883 66 +3882 66 ++3881 66 -3880 66 -3879 66 +3878 66 -3877 66 +3876 66 +3875 66 -3874 66 -3873 66 +3872 66 +-3871 66 +3870 66 +3869 66 +3868 66 +3867 66 +3866 66 +3865 66 -3864 66 -3863 66 -3862 66 +-3861 66 -3860 66 +3859 66 -3858 66 +3857 66 -3856 66 +3855 66 -3854 66 -3853 66 +3852 66 ++3851 66 +3850 66 +3849 66 -3848 66 +3847 66 -3846 66 +3845 66 -3844 66 -3843 66 -3842 66 +-3841 66 -3840 66 -3839 66 +3838 66 +3837 66 -3836 66 +3835 66 -3834 42 +3833 42 -3832 39 +-3831 39 -3830 42 +3829 42 -3832 41 -3831 41 -3828 37 -3827 37 -3826 245 +3825 42 -3824 252 ++3823 42 -3822 41 -3821 41 -3822 39 -3821 39 +3820 37 +3819 37 -3818 41 -3817 41 +3816 41 ++3815 41 -3814 41 +3813 41 +3812 41 -3811 41 -3810 41 +3809 41 -3808 41 +3807 41 -3806 41 ++3805 41 +3804 41 +3803 41 -3802 41 +3801 41 -3800 41 -3799 41 -3798 41 -3797 41 +3796 41 ++3795 41 -3794 41 +3793 41 -3792 41 +3791 41 -3790 41 -3789 41 +3788 41 -3787 41 -3786 41 ++3785 41 -3784 41 -3783 41 -3782 41 +3781 41 -3780 41 -3779 41 +3778 41 -3777 41 +3776 41 ++3775 41 -3774 41 -3773 41 -3772 41 +3771 41 -3770 41 +3769 41 -3768 41 -3767 41 +3766 41 ++3765 41 +3764 41 -3763 41 -3818 39 -3817 39 +3816 39 +3815 39 -3814 39 +3813 39 +3812 39 +-3811 39 -3810 39 +3809 39 -3808 39 +3807 39 -3806 39 +3805 39 +3804 39 +3803 39 -3802 39 ++3801 39 -3800 39 -3799 39 -3798 39 -3797 39 +3796 39 +3795 39 -3794 39 +3793 39 -3792 39 ++3791 39 -3790 39 -3789 39 +3788 39 -3787 39 -3786 39 +3785 39 -3784 39 -3783 39 -3782 39 ++3781 39 -3780 39 -3779 39 +3778 39 -3777 39 +3776 39 +3775 39 -3774 39 -3773 39 -3772 39 ++3771 39 -3770 39 +3769 39 -3768 39 -3767 39 +3766 39 +3765 39 +3764 39 -3763 39 -3762 73 ++3761 73 +3760 73 -3759 73 +3758 73 -3757 73 -3756 73 +3755 73 +3754 73 -3753 73 -3752 73 +-3751 73 -3750 73 -3749 73 -3748 73 -3747 73 +3746 73 +3745 73 +3744 73 +3743 73 +3742 73 +-3741 73 -3740 73 +3739 73 +3738 73 +3737 73 +3736 73 +3735 73 +3734 73 +3733 73 +3732 73 ++3731 73 -3730 73 +3729 73 -3728 73 -3727 73 +3726 73 +3725 73 +3724 73 +3723 73 -3722 73 +-3721 73 +3720 73 +3719 73 +3718 73 +3717 73 -3716 73 -3715 73 +3714 73 -3713 73 +3712 73 ++3711 73 +3710 73 +3709 73 -3708 73 +3707 73 +3706 73 +3705 73 -3704 73 +3703 73 +3702 73 +-3701 73 -3700 73 +3699 73 +3698 73 -3697 73 +3696 73 -3695 73 +3694 73 -3693 73 -3692 73 ++3691 73 +3690 73 -3689 73 -3688 73 +3687 73 -3686 73 -3685 73 +3684 73 -3683 73 -3682 73 ++3681 73 +3680 73 -3679 73 +3678 73 +3677 73 +3676 73 -3675 73 -3674 73 +3673 73 -3672 73 ++3671 73 +3670 73 -3669 73 -3668 73 +3667 73 +3666 73 -3665 73 +3664 73 +3663 73 -3662 73 +-3661 73 +3660 73 +3659 73 -3658 73 +3657 73 +3656 73 -3655 73 -3654 73 +3653 75 -3652 75 +-3651 73 -3650 75 +3649 73 +3648 73 -3647 73 -3646 73 +3645 73 -3644 73 +3643 75 +3642 75 ++3641 75 +3640 75 +3639 73 -3638 73 -3637 75 -3636 73 -3635 73 -3634 77 -3633 77 -3632 73 ++3631 77 +3630 73 +3629 73 -3628 73 -3627 73 +3626 73 -3625 73 -3624 77 -3623 77 +3622 77 ++3621 77 +3620 73 -3619 73 -3618 77 -3617 73 -3616 73 -3615 79 -3614 79 -3613 73 +3612 79 ++3611 73 +3610 73 -3609 73 -3608 73 +3607 73 -3606 73 -3605 79 -3604 79 +3622 79 +3603 79 ++3602 73 -3601 73 +3600 73 +3599 73 -3598 73 -3597 79 -3596 73 -3595 73 +3594 73 +3593 73 +-3592 73 -3591 73 +3590 73 +3589 73 -3588 73 -3587 73 +3586 73 +3585 73 -3584 73 +3583 73 ++3582 73 -3581 73 -3580 73 +3579 73 +3578 73 -3577 73 -3576 73 -3575 73 +3574 73 +3573 73 +-3572 73 -3571 73 +3570 73 +3569 73 +3568 73 +3567 73 -3566 73 -3565 73 +3564 73 -3563 73 +-3562 73 +3561 73 +3560 73 +3559 73 -3558 73 -3557 73 +3556 73 +3555 73 -3554 73 -3553 73 +-3552 73 +3551 73 +3550 73 -3549 73 -3548 73 -3547 73 +3546 73 +3545 73 -3544 73 -3543 73 ++3542 73 +3541 73 -3540 73 +3539 73 -3538 73 -3537 73 +3536 73 -3535 73 +3534 73 +3533 73 ++3532 73 -3531 73 +3530 73 +3529 73 -3528 73 -3527 73 +3526 73 +3525 73 -3524 73 -3523 73 ++3522 73 -3521 73 +3520 73 -3519 73 +3518 73 -3517 73 +3516 73 -3515 73 +3514 73 -3513 73 ++3512 73 -3511 73 -3510 73 +3509 73 -3508 73 +3507 73 -3506 73 +3505 73 -3504 73 +3503 73 ++3502 73 -3501 73 +3500 73 -3499 73 +3498 73 +3497 73 -3496 73 +3495 73 +3494 73 -3493 73 ++3492 73 -3491 73 +3490 73 +3489 73 -3488 73 +3487 73 +3486 73 -3485 73 +3484 73 +3483 73 +-3482 73 +3481 73 +3480 73 -3479 73 +3478 73 -3477 73 +3476 73 -3475 73 +3474 73 +3473 73 ++3472 73 +3471 73 -3470 73 +3469 73 -3468 73 +3467 73 -3466 73 +3465 73 -3464 73 -3463 73 ++3462 73 -3461 73 +3460 73 -3459 73 +3458 73 +3457 73 +3456 73 +3455 73 +3454 73 -3453 73 ++3452 73 +3451 73 -3450 73 -3449 73 +3448 73 +3447 73 -3446 73 +3445 73 +3444 73 +3443 73 ++3442 73 +3441 73 +3440 73 +3439 73 +3438 73 -3437 73 +3436 73 +3435 73 -3434 73 +3433 73 ++3432 73 +3431 73 -3430 73 -3429 73 +3428 73 +3427 73 -3426 73 +3425 73 +3424 73 +3423 73 ++3422 73 +3421 73 +3420 73 +3419 73 +3418 73 +3417 73 +3416 73 +3415 73 +3414 73 -3413 73 ++3412 73 +3411 73 -3410 73 -3409 73 -3408 73 -3407 73 -3406 73 +3405 73 -3404 73 -3403 73 +-3402 73 +3401 73 -3400 73 -3399 73 -3398 73 +3397 73 -3396 73 -3395 73 -3394 73 -3393 73 ++3392 73 +3391 73 -3390 73 -3389 73 -3388 73 +3387 73 -3386 73 -3385 73 -3384 73 -3383 73 +-3382 73 +3381 73 -3380 73 -3379 73 +3378 73 +3377 73 +3376 73 -3375 73 +3374 73 +3373 73 ++3372 73 +3371 73 -3370 73 +3369 73 +3368 73 +3367 73 +3366 73 -3365 73 +3364 73 +3363 73 ++3362 73 -3361 73 -3360 73 +3359 73 +3358 73 +3357 73 +3356 73 +3355 73 +3354 73 +3353 73 ++3352 73 +3351 73 -3350 73 +3349 73 +3348 73 -3347 73 +3346 73 +3345 73 +3344 73 +3343 73 ++3342 73 -3341 73 +3340 73 +3339 73 -3338 73 +3337 73 +3336 73 +3335 73 +3334 73 +3333 73 ++3332 81 -3331 81 -3330 81 -3329 81 +3328 81 +3327 81 -3326 81 +3325 81 +3324 81 -3323 81 +-3322 81 +3321 81 +3320 81 -3319 81 +3318 81 -3317 81 -3316 81 +3315 81 -3314 81 +3313 81 ++3312 81 -3311 81 +3310 81 +3309 81 -3308 81 -3307 81 +3306 81 -3305 81 -3304 81 -3303 81 +-3302 81 -3301 81 -3300 81 -3299 81 -3298 81 +3297 81 -3296 81 -3295 81 -3294 81 -3293 81 +-3292 81 +3291 81 -3290 81 -3289 81 -3288 81 -3287 81 +3286 81 -3285 81 +3284 81 +3283 81 +-3282 81 +3281 81 +3280 81 -3279 81 -3278 81 +3277 81 +3276 81 -3275 81 -3274 81 +3273 81 ++3272 81 +3271 81 -3270 81 -3269 81 -3268 81 +3267 81 +3266 81 -3265 81 +3264 81 +3263 81 ++3262 81 -3261 81 -3260 81 +3259 81 +3258 81 -3257 81 -3256 81 +3255 81 +3254 81 -3253 81 ++3252 81 +3251 81 -3250 81 -3249 81 +3248 81 +3247 81 -3246 81 -3245 81 +3244 81 +3243 81 +-3242 81 -3241 81 +3240 81 -3239 81 -3238 81 +3237 81 -3236 81 -3235 81 +3234 81 -3233 81 +-3232 81 +3231 81 -3230 81 -3229 81 +3228 81 +3227 81 -3226 81 -3225 81 +3224 81 +3223 81 +-3222 81 -3221 81 +3220 81 -3219 81 +3218 81 -3217 81 +3216 81 +3215 81 +3214 81 +3213 81 ++3212 81 -3211 81 -3210 81 +3209 81 +3208 81 +3207 81 -3206 81 +3205 81 +3204 81 +3203 81 ++3202 79 -3201 81 +3200 79 -3199 81 -3198 81 -3197 81 +3196 79 -3195 81 -3194 81 +3193 81 ++3192 77 -3191 81 +3190 77 -3189 81 -3188 81 -3187 81 +3186 77 -3185 81 -3184 81 +3183 81 ++3182 75 -3181 81 -3180 75 -3179 81 -3178 81 -3177 81 -3176 75 -3175 81 -3174 81 +3173 81 ++3172 81 +3171 81 +3170 81 -3169 81 -3168 81 +3167 81 +3166 81 +3165 81 +3164 81 +3163 81 +-3162 81 -3161 81 -3160 42 +3159 42 +3158 42 -3157 42 +3156 42 -3155 42 +3154 42 -3153 42 +-3152 288 +3151 42 -3150 42 +3149 298 -3148 302 +3147 42 -3146 309 +3145 42 -3144 37 -3143 37 ++3142 37 +3141 37 -3140 37 +3139 37 -3138 37 -3137 37 +3136 37 -3135 37 -3134 37 +3133 37 +-3132 37 -3131 37 -3130 37 -3129 37 +3128 37 -3127 37 +3126 37 +3125 37 -3124 37 +3123 37 +-3122 37 -3121 37 -3120 37 +3119 37 +3118 37 +3117 37 +3116 37 -3115 37 +3114 37 -3113 37 ++3112 37 +3111 37 -3110 37 +3109 37 +3108 37 +3107 37 -3106 37 +3105 37 -3104 37 -3103 37 ++3102 37 +3101 37 +3100 42 +3099 42 +3098 37 -3097 37 +3096 42 +3095 42 +3094 37 +3093 37 +-3092 37 +3091 37 -3090 91 -3089 91 +3088 91 -3087 91 -3086 37 +3085 37 +3084 42 +3083 42 ++3082 48 +3081 93 -3080 48 +3079 93 -3078 8 -3077 8 -3076 48 -3075 48 +3074 48 -3073 60 ++3072 60 -3071 60 -3070 60 +3069 60 -3068 60 -3067 48 -3066 48 -3065 48 +3064 48 +3063 48 +-3062 48 -3061 48 +3060 48 +3059 48 +3058 48 +3057 48 -3056 48 +3055 48 -3054 48 -3053 60 +-3052 60 +3051 95 +3050 95 +3049 95 -3079 48 -3081 48 +3048 95 -3047 8 -3046 8 +3045 95 ++3044 60 -3043 60 -3042 95 +3041 95 +3040 95 i3039 8 i3038 8 +3037 8 +3036 8 -3035 101 ++3034 101 +3033 95 +3032 95 +3031 95 +3030 95 +3029 95 +3028 95 +3027 95 +3026 95 -3025 60 ++3024 60 +3023 60 -3022 60 -3021 60 -3020 60 -3019 97 -3018 97 +3017 97 -3016 97 -3015 97 +-3014 97 -3013 97 -3012 97 -3011 8 +3010 8 -3934 99 -3933 99 -3009 60 -3008 60 -3007 97 +-3006 97 +3005 97 -3004 97 -3003 8 -3002 8 +3001 60 -3000 60 -2999 60 -2998 60 -2997 75 ++2996 75 -2995 75 -2994 101 -2993 101 +2992 101 -2991 101 -2990 60 -2989 60 -2988 60 -2987 60 +-2986 60 -2985 60 +2984 75 +2983 75 -2982 75 -2981 60 +2980 60 -2979 60 -2978 60 -2977 60 +-2976 60 -2975 60 -2974 60 -2973 60 -2972 60 -2971 60 -2970 60 +2969 75 +2968 75 +2967 101 ++2966 101 +2965 75 -2964 75 +2963 101 +2962 101 +2961 204 +2960 8 +2959 8 -2958 8 -2957 349 +-2956 8 +2955 204 +2954 204 -2953 204 -2952 204 i2951 8 -2950 204 -2949 8 -2948 351 +2947 204 +-2946 351 +2945 351 -2944 351 -2943 351 -2942 351 -2941 351 -2940 351 -2939 351 -2938 351 +2937 351 ++2936 8 -2935 8 +2934 8 +2933 8 -2932 349 +2931 349 +2930 8 +2929 8 +2928 8 -2927 204 ++2926 204 -2925 8 -2924 204 +2923 204 -2922 204 -2921 8 -2920 8 -2919 8 -2918 8 -2917 8 ++2916 8 -2915 204 -2914 204 +2913 358 +2912 358 -2911 351 -2910 351 +2909 351 +2908 351 -2907 351 +-2906 351 -2905 351 -2904 351 -2903 351 -2902 351 -2901 8 -2900 8 -2899 8 +2898 351 -2897 351 +-2896 351 +2895 351 +2894 351 -2893 111 +2892 111 -2891 8 -2890 362 +2889 362 +2888 77 +2887 77 ++2886 77 +2885 77 +2884 362 +2883 362 +2882 77 +2881 77 +2880 77 +2879 77 -2878 54 +2877 54 ++2876 351 +2940 367 -2875 351 +2941 367 +2874 77 +2873 77 +2872 77 +2871 8 +2870 8 +2869 8 +-2868 77 +2867 77 +2866 77 -2865 54 +2864 54 -2863 8 +2862 8 -3933 109 -3934 109 -2861 8 +-2860 8 -2859 54 -3070 54 +2858 54 -3068 54 -2857 111 -2993 111 +2856 111 -2991 111 +2855 77 ++2854 77 -3053 54 -3052 54 +2853 77 +2852 111 +2851 111 -2850 77 +2849 111 +2848 111 +3044 54 +-3043 54 +3023 54 -3022 54 -3021 54 -3020 54 -3009 54 -3008 54 +3001 54 -3000 54 -2999 54 +-2998 54 -2990 54 -2989 54 -2988 54 -2987 54 -2986 54 -2985 54 -2981 54 +2980 54 -2979 54 +-2978 54 -2977 54 -2976 54 -2975 54 -2974 54 -2973 54 -2972 54 -2971 54 -2970 54 i2847 8 +i2846 204 i2845 8 i2844 8 i2843 8 i2842 8 i2841 204 i2840 8 i2839 8 i2838 8 i2837 8 +i2836 8 i2835 8 i2834 8 i2833 8 i2832 8 i2831 111 i2830 8 i2829 8 i2828 111 i2827 8 +i2826 8 i2825 8 -2824 81 -2823 81 +2822 81 +2821 81 -2820 81 +2819 81 -2818 81 -2817 81 +-2816 81 +2815 81 +2814 81 +2813 81 -2812 81 -2811 81 +2810 81 -2809 81 +2808 81 -2807 81 ++2806 81 +2805 81 -2804 81 -2803 81 +2802 81 -2801 81 -2800 81 -2799 81 -2798 81 +2797 81 +-2796 81 -2795 81 -2794 81 -2793 81 -2792 42 +2791 302 +2790 42 -2789 302 -2788 81 -2787 81 ++2786 81 +2785 81 -2784 81 +2783 81 -2782 81 -2781 81 -2780 81 +2779 81 +2778 81 +2777 81 +-2776 81 -2775 81 +2774 81 -2773 81 +2772 81 -2771 81 +2770 81 +2769 81 -2768 81 -2767 81 ++2766 81 -2765 81 -2764 81 -2763 81 -2762 81 +2761 81 -2760 81 -2759 81 -2758 81 -2757 81 +-2756 42 +2755 309 +2754 42 -2753 309 -2752 113 +2751 113 +2750 113 -2749 113 -2748 113 +2747 113 +-2746 113 -2745 113 +2744 113 -2743 113 +2742 113 +2741 42 -2740 298 +2739 113 -2738 113 +2737 113 ++2736 113 +2735 113 +2734 113 -2733 113 +2732 113 -2731 113 -2730 113 +2729 42 -2728 298 -2727 113 +-2726 113 +2725 113 -2724 113 +2723 113 +2722 113 +2721 113 +2720 113 -2719 113 -2718 113 -2717 113 ++2716 113 +2715 113 +2714 42 -2713 245 -2712 113 +2711 113 -2710 113 -2709 113 +2708 113 -2707 113 +-2706 113 -2705 113 +2704 113 +2703 113 +2702 42 -2701 245 +2700 113 +2699 113 -2698 113 +2697 113 +-2696 113 -2695 113 +2694 113 -2693 113 -2752 115 +2751 115 +2750 115 -2692 115 -2691 115 +2747 115 +-2690 115 -2689 115 +2744 115 -2743 115 +2742 115 +2688 42 -2687 288 +2739 115 -2738 115 +2737 115 ++2736 115 +2735 115 +2734 115 -2733 115 +2732 115 -2686 115 -2685 115 +2684 42 -2683 288 -2682 115 +-2681 115 +2725 115 -2724 115 +2680 115 +2679 115 +2721 115 +2720 115 -2719 115 -2718 115 -2717 115 ++2678 115 +2677 115 -2676 42 +2675 252 -2712 115 +2711 115 -2710 115 -2709 115 +2708 115 -2707 115 +-2706 115 -2705 115 +2674 115 +2673 115 -2672 42 +2671 252 +2670 115 +2669 115 -2698 115 +2697 115 +-2696 115 -2695 115 +2693 115 -2694 115 +2668 51 +2667 117 -2666 51 +2665 117 -2664 8 -2663 8 +-2662 64 +2661 64 -2660 51 -2659 51 +2658 51 +2657 51 -2656 8 -2655 8 -2654 51 -2653 119 +-2652 8 -2651 51 -2650 51 -2649 51 -2648 51 -2647 51 -2646 51 +2645 51 +2644 119 +2643 119 +-2665 51 -2667 51 -2642 119 -2641 8 -2640 8 -2639 8 +2638 8 -2637 8 -2636 8 -2635 64 +-3070 64 +2634 64 -3068 64 +2633 119 +2632 8 +2631 8 +2630 8 -2629 123 +2628 123 -3053 64 +-3052 64 -2627 64 +2626 64 +2625 8 +2624 8 +3044 64 -3043 64 +2874 79 +2872 79 +2873 79 +-2623 79 +2622 79 -2621 79 -2620 8 +2619 8 -3933 121 -3934 121 +3023 64 -3022 64 -3021 64 +-3020 64 -2618 8 -2617 8 -3009 64 -3008 64 -2616 123 -2993 123 +2615 123 -2991 123 +3001 64 +-3000 64 -2999 64 -2998 64 +2855 79 +2854 79 -2990 64 -2989 64 -2988 64 -2987 64 -2986 64 +-2985 64 +2614 8 +2613 123 -2612 79 +2611 79 +2610 123 +2609 123 +2608 8 -2981 64 +2980 64 +-2979 64 -2978 64 -2977 64 -2976 64 -2975 64 -2974 64 -2973 64 -2972 64 -2971 64 -2970 64 +-2607 8 -2606 81 +2605 81 +2604 81 +2603 81 +2602 81 +2601 81 +2600 81 +2599 81 +2598 81 ++2597 81 -2596 8 -2595 8 -2594 8 -2593 8 -2592 8 -2591 8 -2590 8 -2589 8 -2588 8 +-2587 8 -2586 8 -2585 8 -2584 8 -2583 8 -2582 8 +2581 8 +2580 8 +2579 8 +2578 8 ++2577 8 +2576 8 -2575 8 +2574 8 +2573 8 +2572 8 +2571 8 -2570 8 +2569 8 +2568 8 ++2567 8 +2566 8 -2565 8 -2564 8 -2563 8 -2562 8 -2561 8 -2560 8 -2559 8 -2558 8 +-2557 8 -2556 8 -2555 8 -2554 8 -2553 8 -2552 8 -2551 8 -2550 8 -2549 8 +2548 8 ++2547 8 +2546 8 +2545 8 +2544 8 +2543 8 +2542 8 +2541 8 +2540 8 +2539 8 +2538 37 ++2537 37 +2536 37 +2535 37 +2534 37 +2533 37 -2532 37 -2531 37 +2530 37 +2529 37 +2528 37 ++2527 37 -2526 37 -2525 37 -2524 37 -2523 37 -2522 37 -2521 37 -2520 37 -2519 37 -2518 37 +-2517 37 +2516 37 +2515 37 +2514 37 +2513 37 -2512 42 -2511 42 +2510 37 +2509 37 +2508 42 ++2507 42 +2506 42 +2505 42 -2504 42 -2503 42 -2502 8 -2501 8 -2500 8 -2499 8 +2498 8 ++2497 8 +2496 8 +2495 8 +2494 8 +2493 8 -2492 8 +2491 8 +2490 8 +2489 48 -2488 8 +-2487 8 -2486 8 -2485 8 -2484 8 +2483 8 +2482 8 +2481 8 -2480 60 -2479 60 +2478 8 ++2477 8 +2476 8 +2475 8 +2474 8 +2473 8 +2472 8 +2471 8 +2470 8 +2469 8 +2468 8 ++2467 8 +2466 60 +2465 60 +2464 8 +2463 8 +2462 8 +2461 8 -2460 8 -2459 8 +2458 8 ++2457 8 +2456 97 +2455 97 -2454 8 -2453 8 +2452 60 +2451 60 +2450 8 +2449 8 +2448 8 ++2447 8 +2446 60 +2445 60 +2444 8 +2443 8 +2442 8 +2441 101 +2440 60 +2439 60 +2438 60 ++2437 60 +2436 60 +2435 60 +2434 8 +2433 8 +2432 60 -2431 8 -2430 8 +2429 8 -2428 8 ++2427 8 +2426 8 +2425 8 -2424 8 -2423 8 +2422 8 +2421 8 +2420 8 +2419 8 -2418 8 +-2417 8 -2416 8 -2415 8 -2414 8 +2413 8 +2412 8 +2411 351 +2410 351 +2409 351 +2408 351 +-2407 8 -2406 8 -2405 8 +2404 351 +2403 351 -2402 8 -2401 8 +2400 8 +2399 8 +2398 8 ++2397 8 +2396 8 +2395 8 +2394 8 -2393 8 +2392 8 +2391 8 -2390 8 -2389 8 +2388 8 ++2387 8 +2386 8 +2385 8 +2384 8 +2383 8 +2382 8 +2381 8 +2380 8 -2379 8 -2378 8 +-2377 8 -2376 8 +2375 8 +2374 8 +2373 8 +2372 8 +2371 8 +2370 8 -2369 8 -2368 8 ++2441 111 -2367 8 -2366 8 -2480 54 -2479 54 +2365 8 +2466 54 +2465 54 +2364 8 +2363 8 ++2452 54 +2451 54 +2446 54 +2445 54 +2440 54 +2439 54 +2438 54 +2437 54 +2436 54 +2435 54 ++2432 54 i2362 8 i2361 8 i2360 8 i2359 8 i2358 8 i2357 8 +2356 81 +2355 81 -2354 81 +-2353 81 +2352 81 +2351 81 -2350 81 -2349 81 +2348 81 +2347 81 -2346 8 -2345 8 +2344 8 ++2343 8 +2342 8 -2341 8 -2340 8 +2339 8 +2338 81 +2337 81 -2336 81 -2335 81 +2334 81 ++2333 81 -2332 81 -2331 81 +2330 81 +2329 81 -2328 8 -2327 8 +2326 8 +2325 8 +2324 8 +-2323 8 -2322 8 +2321 8 +2320 8 +2319 8 +2318 113 -2317 8 +2316 8 +2315 113 +2314 113 ++2313 113 +2312 113 -2311 8 +2310 8 +2309 113 +2308 8 -2307 8 -2306 8 +2305 8 -2304 8 ++2303 8 -2302 113 -2301 113 -2300 113 -2299 113 -2298 8 +2297 8 -2296 113 -2295 113 -2294 8 +-2293 8 +2292 8 +2291 8 +2318 115 -2290 8 +2289 8 +2315 115 +2314 115 +2313 115 +2312 115 +-2288 8 +2287 8 +2309 115 +2286 8 -2285 8 -2284 8 +2283 8 +2282 8 -2281 8 -2302 115 +-2301 115 -2300 115 -2299 115 +2280 8 -2279 8 -2296 115 -2295 115 -2278 8 -2277 8 -2276 8 +-2275 8 -2274 8 -2273 8 +2272 8 +2271 8 +2270 8 +2269 8 -2268 8 +2267 51 -2266 8 ++2265 51 +2264 8 -2263 8 -2262 8 +2261 8 +2260 8 +2259 8 +2258 8 -2257 8 +2256 8 ++2255 8 +2254 8 +2253 8 +2252 8 +2251 8 -2250 8 -2249 8 +2248 8 +2247 8 -2246 8 +-2245 8 +2244 8 +2243 8 +2242 8 -2480 64 -2479 64 +2241 8 +2240 8 +2239 8 +2238 8 ++2237 8 -2236 8 -2235 8 +2466 64 +2465 64 -2234 8 -2233 8 +2232 8 +2231 8 +2230 8 ++2229 8 +2452 64 +2451 64 +2228 8 +2227 8 +2441 123 +2446 64 +2445 64 -2226 8 -2225 8 ++2440 64 +2439 64 +2438 64 +2437 64 +2436 64 +2435 64 -2224 8 -2223 8 +2432 64 +2222 9 ++2221 42 +2220 9 +2219 9 -2218 42 -2217 42 -2216 125 +2215 9 -2214 9 +2213 9 -2212 9 +-2211 9 -2210 9 -2209 9 +2208 9 -2207 9 -2206 42 -2205 42 -2204 42 -2203 42 -2202 42 +-2201 42 -2200 42 -2199 42 -2198 42 -2197 42 -2196 42 -2195 42 -2194 42 -2193 42 -2192 42 +-2191 42 -2190 42 -2189 42 -2188 42 -2187 42 -2186 42 -2185 42 -2184 42 -2183 42 +2182 9 ++2181 9 -2180 8 -2179 8 -2178 23 -2177 23 -2176 8 -2175 8 -2174 42 -2173 42 +2172 9 ++2171 9 +2170 9 +2169 9 -2168 8 -2167 8 -2178 31 -2177 31 -2166 8 -2165 8 -2164 42 +-2163 42 +2162 9 +2161 9 +2160 9 +2159 9 -2158 8 -2157 8 -2156 15 -2155 15 -2154 8 +-2153 8 -2152 42 -2151 42 +2150 9 +2149 9 +2148 9 -2147 9 +2146 9 -2145 9 +2144 9 +-2143 9 +2142 9 -2141 9 -2140 9 -2139 9 -2138 9 -2137 9 +2136 9 +2135 9 +2134 9 ++2133 9 +2132 9 +2131 9 +2130 9 +2129 9 +2128 42 +2127 42 +2126 42 +2125 42 +2124 42 ++2123 42 +2122 42 +2121 42 +2120 42 +2119 42 +2118 9 +2117 9 +2116 9 +2115 9 +2114 9 ++2113 9 +2112 9 +2111 9 +2110 9 +2109 9 +2108 9 +2107 9 +2106 42 +2105 42 +2104 42 ++2103 42 +2102 42 +2101 42 +2100 42 +2099 42 +2098 42 +2097 42 +2096 11 +2095 13 +2094 13 ++2093 13 +2092 13 +2091 13 +2090 13 +2089 8 +2088 8 +2087 8 +2086 8 +2085 8 +2084 8 +-2083 8 -2082 8 -2081 8 -2080 8 -2079 8 -2078 8 -2077 8 -2076 8 -2075 8 -2074 8 +-2073 8 -2072 8 -2071 13 -2070 13 +2069 21 +2068 21 +2067 21 +2066 21 +2065 21 +2064 21 ++2063 8 +2062 8 +2061 8 +2060 8 +2059 8 +2058 8 -2057 8 -2056 8 -2055 8 -2054 8 +-2053 8 -2052 8 -2051 8 -2050 8 -2049 8 -2048 8 -2047 8 -2046 8 -2045 21 -2044 21 ++2069 29 +2068 29 +2067 29 +2066 29 +2065 29 +2064 29 +2043 8 +2042 8 +2041 8 +2040 8 ++2039 8 +2038 8 -2037 8 -2036 8 -2035 8 -2034 8 -2033 8 -2032 8 -2031 8 -2030 8 +-2029 8 -2028 8 -2027 8 -2026 8 -2045 29 -2044 29 +2025 42 +2024 42 +2023 17 +2022 42 ++2021 42 +2020 17 +2019 17 +2018 17 +2017 8 +2016 8 +2015 8 +2014 8 -2013 42 -2012 42 ++2011 8 +2010 8 +2009 8 +2008 8 +2007 8 +2006 8 +2005 17 +2004 17 +2003 42 +2002 37 ++2001 42 +2000 42 +1999 37 +1998 42 -1997 17 -1996 17 +1995 17 +1994 17 +1993 8 +1992 8 +-1991 17 -1990 17 +1989 8 +1988 8 +1987 25 +1986 25 +1985 8 +1984 8 -1983 25 -1982 25 ++1981 8 +1980 8 -1979 25 -1978 25 +1977 25 +1976 25 +1975 42 +1974 42 +1973 25 +1972 42 ++1971 42 +1970 25 +1969 42 +1968 39 +1967 42 +1966 42 +1965 39 +1964 42 +1963 25 +1962 25 ++1961 8 +1960 8 +1959 8 +1958 8 -1957 42 -1956 42 +1955 8 +1954 8 +1953 8 +1952 8 ++1951 8 +1950 8 +1987 33 +1986 33 +1949 8 +1948 8 -1983 33 -1982 33 +1947 8 +1946 8 +-1979 33 -1978 33 +1977 33 +1976 33 +1945 42 +1944 42 +1973 33 +1943 42 +1942 42 +1970 33 ++1941 42 +1965 41 +1940 42 +1939 42 +1968 41 +1938 42 +1963 33 +1962 33 +1937 8 +1936 8 ++1935 8 +1934 8 -1933 42 -1932 42 +1931 8 +1930 8 +1929 8 +1928 8 +1927 8 +1926 8 ++1925 15 +1924 15 +1923 42 +1922 42 -1921 42 -1920 42 -1919 42 -1918 42 +1917 42 +1916 42 +-1915 8 -1914 8 -1913 8 -1912 8 -1911 15 -1910 15 -1909 8 -1908 8 +1907 42 +1906 42 ++1905 8 +1904 8 +1903 8 +1902 8 +1901 8 +1900 8 -1899 19 -1898 19 +1897 19 +1896 19 ++1895 23 +1894 23 +1893 42 +1892 42 -1891 42 -1890 42 -1889 42 -1888 42 +1887 42 +1886 42 +-1885 8 -1884 8 -1883 8 -1882 8 -1881 23 -1880 23 +1879 8 +1878 8 +1895 31 +1894 31 ++1877 42 +1876 42 -1875 42 -1874 42 -1873 42 -1872 42 +1871 42 +1870 42 -1869 8 -1868 8 +-1867 8 -1866 8 -1881 31 -1880 31 +1865 8 +1864 8 +1863 42 +1862 42 -1861 8 -1860 8 +-1859 8 -1858 8 +1857 27 +1856 27 +1855 8 +1854 8 -1853 27 -1852 27 +1851 27 +1850 27 ++1849 42 +1848 42 -1847 8 -1846 8 -1845 8 -1844 8 +1857 35 +1856 35 +1843 8 +1842 8 +-1853 35 -1852 35 +1851 35 +1850 35 +1841 45 +1840 45 +1839 45 +1838 45 +1837 8 +1836 8 +-1835 45 -1834 45 +1833 8 +1832 8 +1831 45 +1830 45 +1829 8 +1828 8 +1827 8 +1826 45 ++1825 45 -1824 45 -1823 45 +1822 45 +1821 45 -1820 45 -1819 45 -1818 45 -1817 45 -1816 45 +-1815 45 +1814 45 +1813 45 +1812 45 +1811 45 -1810 45 -1809 45 -1808 45 -1807 45 +1806 45 +-1805 45 -1804 45 +1803 45 +1802 45 +1801 45 +1800 45 +1799 45 +1798 45 +1797 45 -1796 45 +-1795 45 +1794 45 +1793 45 -1792 45 +1791 45 -1790 45 +1789 45 -1788 45 -1787 45 -1786 45 +-1785 45 -1784 45 -1783 45 -1782 45 -1781 45 -1780 45 -1779 45 -1778 45 +1777 45 +1776 45 +-1775 45 +1774 45 +1773 45 +1772 45 -1771 45 +1770 45 -1769 45 +1768 45 -1767 45 +1766 45 ++1765 45 -1764 45 +1763 45 -1762 45 -1761 45 +1760 45 +1759 45 -1758 45 +1757 45 +1756 45 ++1755 45 +1754 45 +1753 45 +1752 45 -1751 45 +1750 45 +1749 45 -1748 45 -1747 45 -1746 45 ++1745 45 +1744 45 -1743 45 +1742 45 +1741 45 -1740 45 -1739 45 +1738 45 +1737 45 +1736 45 ++1735 45 -1734 8 +1733 8 +1732 45 +1731 8 -1730 8 +1729 45 +1728 8 +1727 8 +1726 8 ++1725 8 +1724 45 +1723 8 +1722 8 +1721 8 -1720 8 -1719 8 -1718 8 -1717 8 +1716 45 ++1715 8 +1714 8 +1713 45 +1712 8 +1711 45 +1710 8 +1709 45 +1708 8 +1707 45 +1706 8 ++1705 45 +1704 8 +1703 8 -1702 8 -1701 8 -1700 8 -1699 8 -1698 8 -1697 8 -1696 45 ++1695 45 +1694 45 -1693 45 +1692 45 -1691 45 +1690 45 +1689 45 -1688 45 +1687 45 -1686 45 ++1685 45 +1684 45 +1683 45 -1682 45 -1681 45 +1680 45 +1679 45 +1678 45 -1677 45 +1676 45 +-1675 45 -1674 45 -1673 45 +1672 45 -1671 45 +1670 8 +1669 8 +1668 8 +1667 8 +1666 8 ++1665 8 +1664 8 -1663 45 +1662 45 -1661 45 +1660 8 +1659 8 +1658 45 +1657 45 +1656 8 ++1655 8 +1654 45 +1653 45 +1652 45 +1651 45 +1650 45 -1649 45 -1648 45 +1647 45 -1646 8 +-1645 8 +1644 8 -1643 8 -1642 45 +1641 45 +1640 45 +1639 45 +1638 45 +1637 45 +1636 45 ++1635 45 -1634 8 -1633 8 -1632 8 -1631 45 -1630 8 -1629 45 +1628 8 -1627 8 -1626 8 +-1625 8 -1624 8 -1623 8 -1622 45 -1621 8 -1620 45 +1619 8 +1618 45 +1617 45 +1616 45 +-1615 8 -1614 8 -1613 8 -1612 8 -1611 8 -1610 8 -1609 8 -1608 8 -1607 8 -1606 8 ++1605 8 +1604 8 -1603 8 -1602 8 -1601 8 -1600 8 -1599 8 -1598 8 +1597 45 +1596 45 +-1595 8 -1594 8 -1593 8 -1592 8 -1591 8 -1590 8 -1589 45 -1588 8 -1587 8 -1586 8 +-1585 8 -1584 8 +1583 8 +1582 8 -1581 8 -1580 8 -1579 8 -1578 45 -1577 8 -1576 45 ++1575 8 +1574 45 -1573 45 +1572 45 +1571 45 -1570 45 +1569 45 -1568 45 +1567 8 +1566 8 ++1565 8 +1564 8 +1563 8 +1562 8 +1561 8 +1560 8 +1559 8 +1558 8 +1557 8 +1556 8 ++1555 8 +1554 8 +1553 8 -1552 60 -1551 60 +1550 8 +1549 8 +1548 8 +1547 8 +1546 8 ++1545 8 -1552 54 -1551 54 +1544 8 +1543 8 -1552 64 -1551 64 +1542 8 +1541 8 +1540 45 ++1539 45 -1538 45 -1537 8 -1536 8 +1535 8 +1534 8 +1533 8 +1532 8 +1531 8 +1530 8 ++1529 8 +1528 8 +1527 8 +1526 8 +1525 8 +1524 8 -1523 66 -1522 66 -1521 66 -1520 66 +-1519 66 -1518 66 -1517 66 -1516 66 +1515 66 +1514 66 +1513 66 +1512 66 -1511 8 -1510 8 +-1509 8 -1508 8 -1507 8 -1506 8 -1505 8 -1504 8 -1503 8 -1502 8 -1501 8 -1500 8 +-1499 8 +1498 8 +1497 8 +1496 8 +1495 8 -1494 8 +1493 8 +1492 8 +1491 8 +1490 8 +-1489 8 -1488 8 -1487 8 -1486 8 -1485 8 -1484 8 -1483 8 -1482 8 -1481 8 -1480 8 +-1479 8 -1478 8 -1477 41 -1476 41 -1475 8 -1474 8 -1477 39 -1476 39 -1473 8 -1472 8 +-1471 8 -1470 8 -1469 37 -1468 37 +1467 41 +1466 41 +1465 41 +1464 41 -1463 41 -1462 41 +-1461 41 -1460 41 +1459 41 +1458 41 +1457 41 +1456 41 -1455 41 -1454 41 -1453 41 -1452 41 ++1451 41 +1450 41 +1449 41 +1448 41 -1447 41 -1446 41 -1445 41 -1444 41 +1443 41 +1442 41 +-1441 41 -1440 41 +1439 41 +1438 41 +1437 41 +1436 41 +1435 41 +1434 41 +1467 39 +1466 39 ++1465 39 +1464 39 -1463 39 -1462 39 -1461 39 -1460 39 +1459 39 +1458 39 +1457 39 +1456 39 +-1455 39 -1454 39 -1453 39 -1452 39 +1451 39 +1450 39 +1449 39 +1448 39 -1447 39 -1446 39 +-1445 39 -1444 39 +1443 39 +1442 39 -1441 39 -1440 39 +1439 39 +1438 39 +1437 39 +1436 39 ++1435 39 +1434 39 -1433 73 -1432 73 +1431 8 +1430 8 +1429 8 +1428 8 +1427 8 +1426 73 ++1425 8 +1424 73 -1423 8 -1422 73 -1421 73 -1420 73 -1419 73 +1418 8 +1417 73 +1416 73 ++1415 73 +1414 73 +1413 8 +1412 8 +1411 8 -1410 8 +1409 8 +1408 8 +1407 8 +1406 8 +-1405 8 +1404 8 +1403 8 +1402 8 +1401 8 +1400 8 +1399 8 -1398 8 -1397 8 -1396 8 +-1395 8 -1394 8 -1393 8 -1392 8 -1391 8 -1390 8 -1389 8 -1388 8 -1387 8 -1386 8 +-1385 8 -1384 8 -1383 8 -1382 8 -1381 8 -1380 8 -1379 8 -1378 8 -1377 73 -1376 73 ++1375 73 +1374 73 -1373 73 -1372 73 -1371 73 -1370 73 +1369 73 -1368 73 -1367 73 +1366 73 +-1365 73 -1364 73 +1363 73 +1362 73 +1361 73 +1360 73 +1359 73 +1358 73 +1357 73 +1356 73 ++1355 73 +1354 73 +1353 73 +1352 73 +1351 73 +1350 73 +1349 73 +1348 8 +1347 8 +1346 8 ++1345 8 +1344 8 +1343 8 +1342 8 +1341 8 +1340 8 +1339 8 +1338 8 +1337 8 +1336 8 ++1335 8 +1334 8 +1333 73 +1332 73 +1331 73 -1330 73 -1329 73 -1328 73 -1327 73 -1326 73 +-1325 73 +1324 8 -1323 73 -1322 73 -1321 73 -1320 8 +1319 8 +1318 8 +1317 8 +1316 8 ++1315 8 +1314 73 +1313 73 +1312 73 +1311 73 +1310 73 +1309 73 +1308 73 +1307 73 +1306 73 ++1305 73 +1304 73 +1303 73 +1302 73 +1301 73 +1300 73 +1299 73 +1298 73 +1297 73 +1296 73 ++1295 73 +1294 73 +1293 73 +1292 73 +1291 73 -1290 8 -1289 8 -1288 73 -1287 73 -1286 73 +-1285 73 -1284 8 -1283 8 -1282 8 -1281 73 -1280 73 -1279 73 -1278 73 -1277 8 -1276 8 +-1275 8 +1274 73 +1273 73 -1272 8 -1271 8 +1270 8 +1269 8 +1268 8 +1267 8 +1266 8 ++1265 8 +1264 8 +1263 8 +1262 8 +1261 8 +1260 8 +1259 8 +1258 8 +1257 8 +1256 8 ++1255 8 +1254 8 -1253 8 -1252 8 -1251 8 -1250 8 -1249 8 -1248 8 +1247 81 +1246 81 ++1245 81 -1244 81 +1243 81 -1242 81 +1241 81 +1240 81 +1239 81 -1238 81 +1237 81 +1236 81 ++1235 81 -1234 81 +1233 81 +1232 81 +1231 81 -1230 81 -1229 81 -1228 8 -1227 8 -1226 8 +-1225 8 -1224 8 -1223 8 -1222 8 -1221 8 -1220 8 -1219 8 -1218 8 -1217 8 -1216 8 +-1215 8 -1214 8 -1213 8 -1212 8 +1211 8 +1210 8 +1209 8 -1208 8 -1207 8 +1206 8 ++1205 8 +1204 8 +1203 8 -1202 8 -1201 8 -1200 8 -1199 8 +1198 8 -1197 8 -1196 8 +-1195 8 -1194 8 -1193 8 -1192 8 -1191 8 -1190 8 -1189 8 -1188 8 +1187 8 +1186 8 ++1185 8 +1184 8 +1183 8 +1182 8 +1181 8 +1180 8 +1179 8 +1178 8 +1177 37 +1176 37 ++1175 37 -1174 37 +1173 37 -1172 37 -1171 37 -1170 37 +1169 37 +1168 37 -1167 37 -1166 37 +-1165 37 -1164 37 -1163 37 -1162 37 -1161 37 -1160 37 -1159 37 -1158 37 +1157 37 +1156 37 ++1155 37 -1154 42 -1153 42 +1152 37 +1151 37 +1150 42 +1149 42 +1148 42 +1147 42 -1146 42 +-1145 8 -1144 8 -1143 8 +1142 8 +1141 8 +1140 8 +1139 8 +1138 8 -1137 8 -1136 8 ++1135 8 +1134 8 -1133 48 -1132 8 -1131 8 -1130 8 +1129 8 +1128 8 -1127 60 -1126 60 ++1125 8 +1124 8 +1123 8 +1122 8 +1121 8 -1120 8 +1119 8 +1118 8 +1117 60 +1116 60 ++1115 8 +1114 8 +1113 8 +1112 8 -1111 8 -1110 8 +1109 8 +1108 97 +1107 97 -1106 8 ++1105 60 +1104 60 +1103 8 +1102 8 +1101 8 +1100 60 +1099 8 +1098 8 +1097 8 +1096 101 ++1095 60 +1094 60 +1093 60 +1092 60 +1091 60 +1090 60 -1089 8 +1088 60 -1087 8 -1086 8 +-1085 8 -1084 8 +1083 8 +1082 8 -1081 8 +1080 8 +1079 8 +1078 8 -1077 8 -1076 8 +-1075 8 -1074 8 +1073 8 +1072 8 -1071 351 +1070 351 +1069 351 +1068 351 -1067 8 -1066 8 ++1065 351 -1064 8 -1063 8 +1062 8 +1061 8 +1060 8 +1059 8 +1058 8 +1057 8 +1056 8 +-1055 8 +1054 8 +1053 8 -1052 8 -1051 8 +1050 8 +1049 8 +1048 8 +1047 8 +1046 8 ++1045 8 +1044 8 -1043 8 -1042 8 -1041 8 +1040 8 +1039 8 +1038 8 +1037 8 -1036 8 +-1035 8 +1096 111 -1034 8 -1033 8 -1127 54 -1126 54 -1032 8 +1117 54 +1116 54 +1031 8 ++1105 54 +1104 54 +1100 54 +1095 54 +1094 54 +1093 54 +1092 54 +1091 54 +1090 54 +1088 54 +i1030 8 i1029 8 i1028 8 i1027 8 +1026 81 -1025 81 -1024 81 +1023 81 +1022 81 -1021 81 +-1020 81 +1019 81 +1018 81 -1017 8 -1016 8 +1015 8 +1014 8 +1013 8 -1012 8 -1011 8 ++1010 8 +1009 81 -1008 81 -1007 81 +1006 81 +1005 81 -1004 81 -1003 81 +1002 81 +1001 81 +-1000 8 -999 8 +998 8 +997 8 +996 8 -995 8 -994 8 +993 8 +992 8 +991 8 ++990 113 -989 8 +988 8 +987 113 +986 113 +985 113 +984 113 -983 8 +982 8 +981 113 ++980 8 -979 8 -978 8 +977 8 -976 8 +975 8 -974 113 -973 113 -972 113 -971 113 +-970 8 +969 8 -968 113 -967 113 -966 8 -965 8 +964 8 +963 8 +990 115 -962 8 ++961 8 +987 115 +986 115 +985 115 +984 115 -960 8 +959 8 +981 115 +958 8 -957 8 +-956 8 +955 8 +954 8 -953 8 -974 115 -973 115 -972 115 -971 115 +952 8 -951 8 +-968 115 -967 115 -950 8 -949 8 -948 8 -947 8 -946 8 +945 8 +944 8 +943 8 ++942 8 -941 8 -940 51 -939 8 -938 51 +937 8 -936 8 +935 8 +934 8 +933 8 +-932 8 +931 8 +930 8 +929 8 +928 8 +927 8 -926 8 +925 8 +924 8 -923 8 ++922 8 +921 8 +920 8 -1127 64 -1126 64 +919 8 +918 8 +917 8 +916 8 -915 8 +-914 8 +1117 64 +1116 64 -913 8 +912 8 +911 8 +910 8 +1105 64 +1104 64 -909 8 ++1096 123 +1100 64 -908 8 -907 8 +1095 64 +1094 64 +1093 64 +1092 64 +1091 64 +1090 64 +-906 8 -905 8 +1088 64 -904 9 +903 42 -902 9 -901 9 -900 42 +899 125 -898 9 +-897 9 +896 9 -895 9 -894 9 -893 9 -892 9 -891 9 -890 9 -889 42 -888 42 +-887 42 -886 42 -885 42 -884 42 -883 42 -882 42 -881 42 -880 42 -879 42 -878 42 +-877 42 -876 42 -875 42 -874 42 -873 42 -872 42 -871 42 -870 42 -869 42 -868 42 +-867 42 -866 42 +865 9 +864 9 -863 8 -862 23 -861 8 -860 42 +859 9 +858 9 ++857 9 +856 9 -855 8 -862 31 -854 8 -853 42 +852 9 +851 9 +850 9 +849 9 +-848 8 -847 15 -846 8 -845 42 +844 9 +843 9 -842 9 -841 9 -840 9 -839 9 ++838 9 -837 9 +836 9 -835 9 -834 9 -833 9 -832 9 -831 9 +830 9 +829 9 +-828 9 +827 9 -826 9 +825 9 +824 42 +823 42 +822 42 +821 42 +820 42 +819 42 ++818 42 +817 42 +816 42 +815 42 -814 9 +813 9 +812 9 +811 9 +810 9 +809 9 ++808 9 +807 9 +806 9 +805 9 +804 9 +803 42 +802 42 +801 42 +800 42 +799 42 ++798 42 +797 42 +796 42 +795 42 +794 42 +793 11 +792 13 +791 13 +790 13 +789 13 ++788 13 +787 13 +786 8 +785 8 +784 8 -783 8 -782 8 -781 8 -780 8 -779 8 +-778 8 -777 8 -776 8 -775 8 -774 8 -773 13 -772 13 +771 21 +770 21 +769 21 ++768 21 +767 21 +766 21 +765 8 +764 8 +763 8 -762 8 -761 8 -760 8 -759 8 +-758 8 -757 8 -756 8 -755 8 -754 8 -753 8 -752 21 -751 21 +771 29 +770 29 ++769 29 +768 29 +767 29 +766 29 +750 8 +749 8 +748 8 -747 8 -746 8 -745 8 +-744 8 -743 8 -742 8 -741 8 -740 8 -739 8 -738 8 -752 29 -751 29 +737 42 ++736 42 -735 17 +734 42 +733 42 +732 17 +731 17 +730 17 +729 8 +728 8 +727 8 +-726 42 +725 8 +724 8 +723 8 +722 8 +721 8 +720 8 +719 17 +718 17 +717 42 ++716 37 +715 42 +714 42 +713 37 +712 42 -711 17 -710 17 +709 17 +708 17 +707 8 ++706 8 -705 17 -704 17 +703 8 +702 8 +701 25 +700 25 +699 8 +698 8 -697 25 +-696 25 +695 8 +694 8 -693 25 -692 25 +691 25 +690 25 +689 42 +688 42 -687 25 ++686 42 +685 42 +684 25 +683 42 +682 39 +681 42 +680 42 +679 39 +678 42 +677 25 ++676 25 +675 8 +674 8 +673 8 -672 42 +671 8 +670 8 +669 8 +668 8 +667 8 ++666 8 +701 33 +700 33 +665 8 +664 8 -697 33 -696 33 +663 8 +662 8 -693 33 +-692 33 +691 33 +690 33 +661 42 +660 42 -687 33 +659 42 +658 42 +684 33 +657 42 ++679 41 +656 42 +655 42 +682 41 +654 42 +677 33 +676 33 +653 8 +652 8 +651 8 +-650 42 +649 8 +648 8 +647 8 +646 8 +645 8 +644 8 +643 15 +642 15 -641 42 +-640 42 -639 42 -638 42 -637 42 -636 42 -635 8 -634 8 -633 8 -632 8 -631 15 +-630 15 -629 8 +628 42 +627 42 -626 8 +625 8 +624 8 +623 8 -622 19 -621 19 ++620 19 +619 19 +618 23 +617 23 -616 42 -615 42 -614 42 -613 42 -612 42 -611 42 +-610 8 -609 8 -608 8 -607 8 -606 23 -605 23 +604 8 +618 31 +617 31 -603 42 +-602 42 -601 42 -600 42 -599 42 -598 42 -597 8 -596 8 -595 8 -594 8 -606 31 +-605 31 +593 8 +592 42 +591 42 -590 8 -589 8 +588 27 +587 27 +586 8 -585 27 +-584 27 +583 27 +582 27 +581 42 +580 42 -579 8 -578 8 +588 35 +587 35 +577 8 +-585 35 -584 35 +583 35 +582 35 -576 45 +575 45 +574 8 -573 45 -572 45 +571 8 ++570 8 +569 45 +568 45 +567 8 +566 45 +565 45 -564 45 -563 45 +562 45 +561 45 +-560 45 -559 45 -558 45 -557 45 -556 45 -555 45 +554 45 -553 45 +552 45 -551 45 +-550 45 -549 45 -548 45 -547 45 +546 45 -545 45 -544 45 +543 45 +542 45 +541 45 ++540 45 +539 45 -538 45 -537 45 +536 45 -535 45 -534 45 -533 45 -532 45 -531 45 +-530 45 -529 45 -528 45 -527 45 -526 45 -525 45 -524 45 -523 45 -522 45 -521 45 +-520 45 +519 45 +518 45 -517 45 +516 45 +515 45 +514 45 -513 45 +512 45 -511 45 ++510 45 -509 45 +508 45 +507 45 -506 45 +505 45 -504 45 -503 45 +502 45 -501 45 ++500 45 +499 45 +498 45 +497 45 +496 45 +495 45 -494 45 +493 45 +492 45 -491 45 +-490 45 -489 45 +488 45 +487 45 -486 45 +485 45 -484 45 -483 45 +482 45 +481 45 ++480 45 -479 8 +478 8 +477 45 +476 8 -475 8 +474 45 +473 8 +472 8 -471 8 ++470 8 -469 45 -468 8 -467 8 +466 8 -465 8 -464 8 -463 8 -462 8 +461 45 ++460 8 +459 8 +458 45 +457 8 +456 45 -455 8 -454 45 +453 8 +452 45 +451 8 ++450 45 -449 8 +448 8 -447 8 -446 8 -445 8 -444 8 -443 8 -442 8 -441 45 ++440 45 +439 45 -438 45 -437 45 -436 45 +435 45 +434 45 -433 45 -432 45 -431 45 ++430 45 -429 45 +428 45 -427 45 -426 45 +425 45 -424 45 +423 45 -422 45 +421 45 +-420 45 -419 45 -418 45 +417 45 -416 45 -415 8 -414 45 -413 45 -412 45 +411 8 +-410 45 +409 45 +408 8 +407 45 +406 45 +405 45 +404 45 -403 45 -402 45 +401 45 +-400 8 -399 8 +398 8 -397 8 -396 45 -395 45 +394 45 +393 45 -392 45 -391 8 +-390 8 -389 8 -388 45 -387 8 -386 45 +385 8 -384 8 -383 8 -382 8 -381 8 +-380 8 -379 45 -378 8 -377 45 +376 8 +375 45 -374 8 -373 8 -372 8 -371 8 +-370 8 -369 8 -368 8 +367 8 +366 8 -365 8 -364 8 -363 8 -362 8 -361 8 +-360 8 +359 45 -358 8 -357 8 -356 8 -355 45 -354 8 -353 8 -352 8 -351 8 +-350 8 +349 8 +348 8 -347 8 -346 8 -345 8 -344 45 -343 8 -342 45 +341 8 +-340 45 -339 45 -338 45 -337 45 -336 45 +335 45 -334 45 -333 8 +332 8 +331 8 ++330 60 +329 8 +328 8 +327 8 +330 54 +326 8 +330 64 +325 8 -324 45 -323 45 +-322 45 -321 8 -320 8 +319 8 +318 8 +317 8 +316 8 +315 8 +314 8 +313 8 ++312 8 +311 8 +310 8 -309 66 -308 66 -307 66 -306 66 -305 66 -304 66 -303 66 +-302 66 -301 66 -300 66 -299 8 -298 8 -297 8 -296 8 -295 8 -294 8 -293 8 +-292 8 -291 8 -290 8 -289 8 -288 8 -287 8 -286 8 -285 8 -284 8 -283 8 +-282 8 +281 8 +280 8 -279 8 +278 8 -277 8 -276 8 -275 8 -274 8 -273 8 ++272 41 -271 8 +272 39 -270 8 -269 8 +268 37 +267 41 +266 41 -265 41 -264 41 +-263 41 -262 41 -261 41 +260 41 +259 41 -258 41 -257 41 -256 41 -255 41 -254 41 ++253 41 +252 41 +251 41 +250 41 -249 41 -248 41 -247 41 -246 41 -245 41 -244 41 +-243 41 +242 41 +241 41 +240 41 +239 41 +238 41 +267 39 +266 39 -265 39 -264 39 +-263 39 -262 39 -261 39 +260 39 +259 39 -258 39 -257 39 -256 39 -255 39 -254 39 ++253 39 +252 39 +251 39 +250 39 -249 39 -248 39 -247 39 -246 39 -245 39 -244 39 +-243 39 +242 39 +241 39 +240 39 +239 39 +238 39 -237 73 -236 73 +235 8 -234 73 ++233 8 -232 73 -231 8 -230 73 -229 73 -228 73 -227 73 -226 8 -225 73 -224 73 +-223 8 -222 8 -221 8 -220 8 +219 8 +218 8 +217 8 +216 8 -215 8 -214 8 ++213 8 +212 8 +211 8 -210 8 -209 8 -208 8 -207 8 -206 8 -205 8 -204 8 +-203 8 -202 8 -201 8 -200 8 -199 8 -198 8 -197 8 -196 8 -195 8 -194 8 +-193 8 -192 8 -191 8 -190 8 -189 8 -188 8 -187 73 -186 73 +185 73 +184 73 +-183 73 -182 73 -181 73 -180 73 -179 73 -178 73 -177 73 +176 73 -175 73 -174 73 ++173 73 +172 73 +171 73 +170 73 +169 73 +168 73 +167 73 +166 73 +165 73 +164 73 ++163 73 +162 73 +161 73 +160 73 -159 73 +158 8 +157 8 +156 8 +155 8 +154 8 ++153 8 +152 8 +151 8 +150 8 +149 8 +148 8 +147 8 +146 8 +145 8 +144 8 ++143 73 -142 73 -141 73 -140 73 -139 73 -138 73 -137 73 -136 8 -135 73 -134 8 +-133 73 -132 73 -131 73 -130 73 +129 73 +128 73 +127 73 +126 73 +125 73 +124 73 +-123 73 -122 73 +121 73 +120 73 +119 73 +118 73 +117 73 +116 73 +115 73 +114 73 +-113 73 -112 73 +111 73 +110 73 -109 8 -108 8 -107 73 -106 73 -105 73 -104 73 +-103 8 -102 8 -101 8 -100 73 -99 73 -98 73 -97 73 -96 8 -95 8 -94 8 +-93 73 -92 73 -91 8 -90 8 +89 8 -88 8 +87 8 +86 8 +85 8 +84 8 ++83 8 +82 8 +81 8 +80 8 +79 8 +78 8 +77 8 +76 8 +75 8 +74 8 ++73 8 -72 8 -71 8 -70 8 -69 8 -68 8 -67 8 +66 81 +65 81 +64 81 +-63 81 +62 81 -61 81 +60 81 +59 81 +58 81 +57 8 +56 42 +55 8 +54 8 ++53 8 +52 8 +51 8 +50 8 +49 8 +48 8 +47 8 +46 8 +45 8 +44 8 ++43 8 +42 8 +41 41 +41 39 +40 8 +39 8 +38 42 +37 8 +36 8 +35 8 ++34 8 +33 8 +32 8 +31 8 +30 8 +29 8 +28 8 +27 42 +26 8 +25 8 ++24 8 +23 8 +22 8 +21 8 +20 8 +19 8 +18 8 +17 8 +16 8 +15 8 ++14 8 +13 8 +12 41 +12 39 +11 8 +10 8 +9 42 +8 8 +7 8 +6 8 ++5 8 +4 8 +3 8 +2 8 * + ++1 0 \ No newline at end of file diff --git a/katoptron/Juelich/mesh/fused_mirror_assembly_all_mm.geo b/katoptron/Juelich/mesh/fused_mirror_assembly_all_mm.geo new file mode 100644 index 0000000000000000000000000000000000000000..b6ec611027d0480d7085acb0d088e8c284435f56 --- /dev/null +++ b/katoptron/Juelich/mesh/fused_mirror_assembly_all_mm.geo @@ -0,0 +1,694 @@ +// This .geo has been tested with gmsh 3.0.6 and 4.4.1 binaries for Mac and Linux + +Macro Clear_all + allVolumes[] = Volume "*"; + Recursive Delete { Volume{allVolumes[] } ; } + allSurfaces[] = Surface "*"; + Recursive Delete { Surface{allSurfaces[] } ; } + allPoints[] = Point "*"; + Recursive Delete { Point{allPoints[] } ; } +Return + +Macro Compute_next_avaible_point_id + allPoints[] = Point "*" ; + NallPoints = #allPoints[] ; + Printf("NallPoints %f",NallPoints); + next_avaible_point_id = 0; + compute_next_avaible_point_id_verbose = 0; + For i In {0:NallPoints-1} + If(compute_next_avaible_point_id_verbose) + Printf("Compute_next_avaible_point_id %g, %g",i,allPoints[i]); + EndIf + If(allPoints[i]>= next_avaible_point_id) + next_avaible_point_id = allPoints[i] + 1; + EndIf + EndFor + Printf("Compute_next_avaible_point_id newp %g",newp); + Printf("Compute_next_avaible_point_id next_avaible_point_id %g",next_avaible_point_id); +Return + +Macro Scale_axis_mm_to_m + allPoints[] = Point "*" ; + allLines[] = Line "*" ; + allSurfaces[] = Surface "*"; + allVolumes[] = Volume "*"; + If(usePointID) + c1[] = Point{point_OO}; + EndIf + Dilate {{-c1[0],-c1[1],-c1[2]},0.001} { Volume{allVolumes[] } ; } + + allPoints[] = Point "*" ; + allLines[] = Line "*" ; + allSurfaces[] = Surface "*"; + allVolumes[] = Volume "*"; +Return + +Macro Weld_bolt + new_weld_line_loop = newreg; + Line Loop(new_weld_line_loop) = curves_id_1[]; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + num[] = Extrude {0, 0, 0.026} { + Surface{new_weld_line_loop}; + }; + new_volume_1 = num[1]; + num[] = Extrude {0, 0, -0.012} { + Surface{new_weld_line_loop}; + }; + new_volume_2 = num[1]; + new_weld_line_loop = newreg; + Line Loop(new_weld_line_loop) = curves_id_2[]; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + num[] = Extrude {0, 0, 0.002} { + Surface{new_weld_line_loop}; + }; + new_volume_3 = num[1]; + new_weld_line_loop = newreg; + Line Loop(new_weld_line_loop) = curves_id_3[]; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + num[] = Extrude {0, 0, -0.006} { + Surface{new_weld_line_loop}; + }; + new_volume_4 = num[1]; + num[] = BooleanUnion{ Volume{volume_id_1}; Delete; }{ Volume{volume_id_2}; Volume{volume_id_3}; Volume{volume_id_4}; Volume{volume_id_5}; Volume{volume_id_6}; Volume{volume_id_7}; Volume{volume_id_8}; Volume{volume_id_9}; Volume{new_volume_1}; Volume{new_volume_2}; Volume{new_volume_3}; Volume{new_volume_4}; Delete; }; + new_volume_1 = num[0]; +Return + +Macro Weld_bolt_2 + new_weld_line_loop = newreg; + Line Loop(new_weld_line_loop) = curves_id_1[]; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + num[] = Extrude {0, 0, 0.026} { + Surface{new_weld_line_loop}; + }; + new_volume_1 = num[1]; + num[] = Extrude {0, 0, -0.012} { + Surface{new_weld_line_loop}; + }; + new_volume_2 = num[1]; + new_weld_line_loop = newreg; + Line Loop(new_weld_line_loop) = curves_id_2[]; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + num[] = Extrude {0, 0, 0.002} { + Surface{new_weld_line_loop}; + }; + new_volume_3 = num[1]; + new_weld_line_loop = newreg; + Line Loop(new_weld_line_loop) = curves_id_3[]; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + num[] = Extrude {0, 0, -0.006} { + Surface{new_weld_line_loop}; + }; + new_volume_4 = num[1]; + new_weld_line_loop = newreg; + Line Loop(new_weld_line_loop) = curves_id_4[]; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + num[] = Extrude {0, 0, -6.25} { + Surface{new_weld_line_loop}; + }; + new_volume_5 = num[1]; + + Recursive Delete { Volume{volume_id_4, volume_id_5}; } + + num[] = BooleanUnion{ Volume{volume_id_1}; Delete; }{ Volume{volume_id_2}; Volume{volume_id_3}; Volume{volume_id_6}; Volume{volume_id_7}; Volume{volume_id_8}; Volume{volume_id_9}; Volume{new_volume_1}; Volume{new_volume_2}; Volume{new_volume_3}; Volume{new_volume_4}; Volume{new_volume_5}; Delete; }; + new_volume_1 = num[0]; +Return + +Macro Weld_tube + c1[] = Point{pipe_p1}; + c2[] = Point{pipe_p2}; + center1[] = {(c1[0]+c2[0])/2, (c1[1]+c2[1])/2, (c1[2]+c2[2])/2}; + pipe_radius = Sqrt((c1[0]-center1[0])^2+(c1[1]-center1[1])^2+(c1[2]-center1[2])^2); + + c1[] = Point{weld_p1}; + c2[] = Point{weld_p5}; + center1[] = {(c1[0]+c2[0])/2, (c1[1]+c2[1])/2, (c1[2]+c2[2])/2}; + weld_radius = Sqrt((c1[0]-center1[0])^2+(c1[1]-center1[1])^2+(c1[2]-center1[2])^2); + + new_weld_p1 = newp; + Point(new_weld_p1) = {(pipe_radius/weld_radius)*(c1[0]-center1[0])+center1[0],(pipe_radius/weld_radius)*(c1[1]-center1[1])+center1[1],(pipe_radius/weld_radius)*(c1[2]-center1[2])+center1[2]}; + new_weld_line1 = newreg; Line(new_weld_line1) = {new_weld_p1, weld_p2}; + new_weld_line2 = newreg; Line(new_weld_line2) = {weld_p2, weld_p3}; + new_weld_line3 = newreg; Line(new_weld_line3) = {weld_p3, weld_p4}; + new_weld_line4 = newreg; Line(new_weld_line4) = {weld_p4, new_weld_p1}; + + new_weld_line_loop = newreg; Line Loop(new_weld_line_loop) = {new_weld_line1,new_weld_line2,new_weld_line3,new_weld_line4}; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + + c1[]=Point{weld_p3}; + c2[]=Point{weld_p4}; + + Extrude {{c2[0]-c1[0],c2[1]-c1[1],c2[2]-c1[2]}, {center1[0], center1[1], center1[2]}, Pi} { + Surface{new_weld_line_loop}; + } + Extrude {{c2[0]-c1[0],c2[1]-c1[1],c2[2]-c1[2]}, {center1[0], center1[1], center1[2]}, -Pi} { + Surface{new_weld_line_loop}; + } +Return + +Macro Compute_cross_and_theta + norm_1 = Sqrt(vec_1[0]^2+vec_1[1]^2+vec_1[2]^2); + norm_2 = Sqrt(vec_2[0]^2+vec_2[1]^2+vec_2[2]^2); + + cross[] = {vec_1[1]*vec_2[2]-vec_1[2]*vec_2[1],vec_1[2]*vec_2[0]-vec_1[0]*vec_2[2],vec_1[0]*vec_2[1]-vec_1[1]*vec_2[0]}; + norm_cross = Sqrt(cross[0]^2+cross[1]^2+cross[2]^2); + + dot = vec_1[0]*vec_2[0] + vec_1[1]*vec_2[1] + vec_1[2]*vec_2[2]; + + theta = Acos(dot/(norm_1*norm_2)); +Return + +Macro Rotate_Axis + allVolumes[] = Volume "*"; + If(usePointID) + c1[] = Point{point_OX_1}; + c2[] = Point{point_OX_2}; + Printf("Rotate_Axis point_OX_1 c1 (%g,%g,%g)",c1[0],c1[1],c1[2]); + Printf("Rotate_Axis point_OX_2 c2 (%g,%g,%g)",c2[0],c2[1],c2[2]); + EndIf + + OX[] = {c2[0]-c1[0],c2[1]-c1[1],c2[2]-c1[2]}; + vec_1[] = OX[]; + vec_2[] = {1,0,0}; + + Call Compute_cross_and_theta; + + Rotate {{cross[0],cross[1],cross[2]}, {0, 0, 0}, theta} { Volume{allVolumes[] } ; } + + allVolumes[] = Volume "*"; + If(usePointID) + c3[] = Point{point_OY_1}; + c4[] = Point{point_OY_2}; + Printf("Rotate_Axis point_OY_1 c3 (%g,%g,%g)",c3[0],c3[1],c3[2]); + Printf("Rotate_Axis point_OY_2 c4 (%g,%g,%g)",c4[0],c4[1],c4[2]); + EndIf + + OY[] = {c4[0]-c3[0],c4[1]-c3[1],c4[2]-c3[2]}; + vec_1[] = OY[]; + vec_2[] = {0,1,0}; + + Call Compute_cross_and_theta; + + Rotate {{cross[0],cross[1],cross[2]}, {0, 0, 0}, theta} { Volume{allVolumes[] } ; } + +Return + +Macro Rotate_Axis_x + allVolumes[] = Volume "*"; + If(usePointID) + c1[] = Point{point_OX_1}; + c2[] = Point{point_OX_2}; + Printf("Rotate_Axis point_OX_1 c1 (%g,%g,%g)",c1[0],c1[1],c1[2]); + Printf("Rotate_Axis point_OX_2 c2 (%g,%g,%g)",c2[0],c2[1],c2[2]); + EndIf + + OX[] = {c2[0]-c1[0],c2[1]-c1[1],0.}; + vec_1[] = OX[]; + vec_2[] = {1,0,0}; + + Call Compute_cross_and_theta; + + Rotate {{cross[0],cross[1],cross[2]}, {0, 0, 0}, theta} { Volume{allVolumes[] } ; } + +Return + +Macro Rotate_Axis_1 + allVolumes[] = Volume "*"; + If(usePointID) + c1[] = Point{point_OX_1}; + c2[] = Point{point_OX_2}; + Printf("Rotate_Axis point_OX_1 c1 (%g,%g,%g)",c1[0],c1[1],c1[2]); + Printf("Rotate_Axis point_OX_2 c2 (%g,%g,%g)",c2[0],c2[1],c2[2]); + EndIf + + OX[] = {c2[0]-c1[0],c2[1]-c1[1],c2[2]-c1[2]}; + vec_1[] = OX[]; + vec_2[] = {1,0,0}; + + Call Compute_cross_and_theta; + + Rotate {{cross[0],cross[1],cross[2]}, {0, 0, 0}, theta} { Volume{allVolumes[] } ; } + + allVolumes[] = Volume "*"; + If(usePointID) + c3[] = Point{point_OY_1}; + c4[] = Point{point_OY_2}; + Printf("Rotate_Axis point_OY_1 c3 (%g,%g,%g)",c3[0],c3[1],c3[2]); + Printf("Rotate_Axis point_OY_2 c4 (%g,%g,%g)",c4[0],c4[1],c4[2]); + EndIf + + OY[] = {c4[0]-c3[0],c4[1]-c3[1],c4[2]-c3[2]}; + vec_1[] = OY[]; + vec_2[] = {0,1,0}; + + Call Compute_cross_and_theta; + + //Rotate {{cross[0],cross[1],cross[2]}, {0, 0, 0}, theta} { Volume{allVolumes[] } ; } + +Return + +Macro Translate_Axis + allVolumes[] = Volume "*"; + If(usePointID) + c1[] = Point{point_OO}; + Printf("Translate_Axis point_OO c1 (%g,%g,%g)",c1[0],c1[1],c1[2]); + EndIf + Translate {-c1[0],-c1[1],-c1[2]} { Volume{allVolumes[] } ; } + allVolumes[] = Volume "*"; +Return + +Macro Contact_disk + c1[] = Point{point_disk_R_1}; + c2[] = Point{point_disk_R_2}; + + center[] = {(c1[0]+c2[0])/2, (c1[1]+c2[1])/2, (c1[2]+c2[2])/2}; + + R = Sqrt((c1[0]-center[0])^2+(c1[1]-center[1])^2+(c1[2]-center[2])^2); + + c1[] = Point{point_surface_disk_1}; + c2[] = Point{point_surface_disk_2}; + + new_disk = newreg; + Disk(new_disk) = {(c1[0]+c2[0])/2, (c1[1]+c2[1])/2, (c1[2]+c2[2])/2, R, R}; + + Printf("c1 (%g,%g,%g)",c1[0],c1[1],c1[2]); + Printf("c2 (%g,%g,%g)",c2[0],c2[1],c2[2]); + Printf("Center (%g,%g,%g) radius %g",(c1[0]+c2[0])/2, (c1[1]+c2[1])/2, (c1[2]+c2[2])/2, R) ; + + BooleanFragments{ Surface{new_disk}; Delete; }{ Volume{volume_id}; Delete; } +Return + +Macro Add_Optical_Axis + If(usePointID) + p1[] = Point{point_mirror_x}; + p2[] = Point{point_mirror_y}; + Printf("Add_Optical_Axis p1 (%g,%g,%g)",p1[0],p1[1],p1[2]); + Printf("Add_Optical_Axis p2 (%g,%g,%g)",p2[0],p2[1],p2[2]); + EndIf + + Printf("Add_Optical_Axis OA (%g,%g,%g)",p1[0]+Delta_x,p2[1]+Delta_y,p1[2]); + + Call Compute_next_avaible_point_id; + OA = next_avaible_point_id; + Point(OA) = {p1[0]+Delta_x, p2[1]+Delta_y, p1[2], 1}; + new_disk = newreg; + Disk(new_disk) = {p1[0]+Delta_x, p2[1]+Delta_y, p1[2], R, R}; + + BooleanFragments{ Point{OA}; Surface{new_disk}; Delete; }{ Volume{Mirror_id}; Delete; } + //BooleanFragments{ Point{OA}; Delete; }{ Volume{Mirror_id}; Delete; } +Return + +SetFactory("OpenCASCADE"); + +rerun = 0; + +If(!FileExists("fused_mirror_assembly_all_mm.brep") || rerun) + v() = ShapeFromFile("mirror_assembly.stp"); + + BooleanFragments{ Volume{1,2,3,7,8,9,17,18,24,25,26,27}; Delete; }{} + + BooleanFragments{ Volume{13,15}; Delete; }{} + BooleanFragments{ Volume{12,14}; Delete; }{} + BooleanFragments{ Volume{10,11}; Delete; }{} + + // Fuse pipe 1 + weld_p1 = 1477; + weld_p2 = 1478; + weld_p3 = 1473; + weld_p4 = 1471; + weld_p5 = 1475; + + pipe_p1 = 898; + pipe_p2 = 900; + + Call Weld_tube ; + + weld_p1 = 885; + weld_p2 = 886; + weld_p3 = 884; + weld_p4 = 882; + weld_p5 = 887; + + pipe_p1 = 907; + pipe_p2 = 908; + + Call Weld_tube ; + + Recursive Delete { Volume{20,32}; } + + // Fuse pipe 2 + weld_p1 = 893; + weld_p2 = 894; + weld_p3 = 892; + weld_p4 = 890; + weld_p5 = 895; + + pipe_p1 = 932; + pipe_p2 = 931; + + Call Weld_tube ; + + weld_p1 = 1483; + weld_p2 = 1484; + weld_p3 = 1482; + weld_p4 = 1480; + weld_p5 = 1485; + + pipe_p1 = 922; + pipe_p2 = 924; + + Call Weld_tube ; + Recursive Delete { Volume{21,33}; } + + // Fuse pipe 3 + weld_p1 = 1501; + weld_p2 = 1502; + weld_p3 = 1497; + weld_p4 = 1495; + weld_p5 = 1499; + + pipe_p1 = 1440; + pipe_p2 = 1439; + + Call Weld_tube ; + + Recursive Delete { Volume{35}; } + + // Fuse pipe 4 + weld_p1 = 1493; + weld_p2 = 1494; + weld_p3 = 1489; + weld_p4 = 1487; + weld_p5 = 1491; + + pipe_p1 = 1456; + pipe_p2 = 1455; + + Call Weld_tube ; + + Recursive Delete { Volume{34}; } + + usePointID = 0; + + // Realign the axis + If(usePointID) + point_OX_1 = 1928; + point_OX_2 = 1929; + + point_OY_1 = 1925; + point_OY_2 = 1927; + Else + c1[] = {6450.86,-90.1101,4467.16}; + c2[] = {6425.67,-76.908,4448.46}; + + c3[] = {-7294.05,1085.32,2738.15}; + c4[] = {-7294.05,1121.25,2759.9}; + EndIf + + Call Rotate_Axis; + + If(usePointID) + point_OO = 2008; + Else + c1[] = {-7294.05,2346.64,1780.06}; + EndIf + + Call Translate_Axis; + + c1[] = Point{7521}; + c2[] = Point{7519}; + Dilate {{(c1[0]+c2[0])/2.,(c1[1]+c2[1])/2.,(c1[2]+c2[2])/2.}, {0.98, 0.98, 0.98}} { Volume{37} ; } + + c1[] = Point{7538}; + c2[] = Point{7545}; + Dilate {{(c1[0]+c2[0])/2.,(c1[1]+c2[1])/2.,(c1[2]+c2[2])/2.}, {0.98, 0.98, 1.}} { Volume{38} ; } + + /* + c1[] = Point{7713}; + c2[] = Point{7715}; + Dilate {{(c1[0]+c2[0])/2.,(c1[1]+c2[1])/2.,(c1[2]+c2[2])/2.}, {1.1, 1.1, 1.1}} { Volume{51} ; } + + c1[] = Point{7777}; + c2[] = Point{7779}; + Dilate {{(c1[0]+c2[0])/2.,(c1[1]+c2[1])/2.,(c1[2]+c2[2])/2.}, {1.1, 1.1, 1.1}} { Volume{56} ; } + + c1[] = Point{7501}; + c2[] = Point{7506}; + Dilate {{(c1[0]+c2[0])/2.,(c1[1]+c2[1])/2.,(c1[2]+c2[2])/2.}, {1.1, 1.1, 1.1}} { Volume{36} ; } + + c1[] = Point{7736}; + c2[] = Point{7737}; + Dilate {{(c1[0]+c2[0])/2.,(c1[1]+c2[1])/2.,(c1[2]+c2[2])/2.}, {1.2, 1.2, 1.}} { Volume{53} ; } + + c1[] = Point{7855}; + c2[] = Point{7855}; + Dilate {{(c1[0]+c2[0])/2.,(c1[1]+c2[1])/2.,(c1[2]+c2[2])/2.}, {1.2, 1.2, 1.}} { Volume{62} ; } + + c1[] = Point{7620}; + c2[] = Point{7619}; + Dilate {{(c1[0]+c2[0])/2.,(c1[1]+c2[1])/2.,(c1[2]+c2[2])/2.}, {1.2, 1.2, 1.}} { Volume{44} ; } +*/ + curves_id_1[] = {12528, 12529, 12519, 12525}; + curves_id_2[] = {12475, 12482, 12470, 12469}; + curves_id_3[] = {12399, 12396}; + curves_id_4[] = {12484, 12485}; + volume_id_1 = 45; + volume_id_2 = 50; + volume_id_3 = 51; + volume_id_4 = 48; + volume_id_5 = 49; + volume_id_6 = 52; + volume_id_7 = 53; + volume_id_8 = 46; + volume_id_9 = 47; + Call Weld_bolt_2; + + new_weld_line_loop = newreg; + Line Loop(new_weld_line_loop) = { 13117, 13118, 13119, 13120, 13121, 13122, 13123, 13124}; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + num[] = Extrude {0, 0, 5} { + Surface{new_weld_line_loop}; + }; + new_volume_2 = num[1]; + num[] = Extrude {0, 0, -11} { + Surface{new_weld_line_loop}; + }; + new_volume_3 = num[1]; + + new_weld_line_loop = newreg; + Line Loop(new_weld_line_loop) = {13089, 13080, 13079, 13078}; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + num[] = Extrude {0, 0, 2} { + Surface{new_weld_line_loop}; + }; + new_volume_4 = num[1]; + + BooleanUnion{ Volume{new_volume_1}; Delete; }{ Volume{new_volume_2}; Volume{new_volume_3}; Volume{new_volume_4}; Delete; } + + curves_id_1[] = {13014, 13027, 13028, 13017}; + curves_id_2[] = {12349, 12355, 12362, 12350}; + curves_id_3[] = {12978, 12975}; + curves_id_4[] = {12364, 12365}; + volume_id_1 = 36; + volume_id_2 = 37; + volume_id_3 = 38; + volume_id_4 = 42; + volume_id_5 = 43; + volume_id_6 = 39; + volume_id_7 = 44; + volume_id_8 = 40; + volume_id_9 = 41; + Call Weld_bolt_2; + + new_weld_line_loop = newreg; + Line Loop(new_weld_line_loop) = {13235, 13236, 13237, 13240, 13241, 13242}; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + num[] = Extrude {0, 0, 20} { + Surface{new_weld_line_loop}; + }; + new_volume_2 = num[1]; + num[] = Extrude {0, 0, -5} { + Surface{new_weld_line_loop}; + }; + new_volume_3 = num[1]; + + new_weld_line_loop = newreg; + Line Loop(new_weld_line_loop) = {13218, 13220, 13223, 13224}; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + num[] = Extrude {0, 0, 2} { + Surface{new_weld_line_loop}; + }; + new_volume_4 = num[1]; + num[] = Extrude {0, 0, -0.07} { + Surface{new_weld_line_loop}; + }; + new_volume_5 = num[1]; + + BooleanUnion{ Volume{79}; Delete; }{ Volume{80}; Volume{new_volume_2}; Volume{new_volume_3}; Volume{new_volume_4}; Volume{new_volume_5}; Delete; } + BooleanUnion{ Volume{79}; Delete; }{ Volume{80}; Delete; } + + curves_id_1[] = {12619, 12622, 12628, 12629}; + curves_id_2[] = {12652, 12658, 12665, 12653}; + curves_id_3[] = {12583, 12580}; + curves_id_4[] = {12668, 12667}; + volume_id_1 = 54; + volume_id_2 = 55; + volume_id_3 = 56; + volume_id_4 = 57; + volume_id_5 = 58; + volume_id_6 = 61; + volume_id_7 = 62; + volume_id_8 = 59; + volume_id_9 = 60; + //Call Weld_bolt_2; + + c1[] = Point{7855}; + c2[] = Point{7853}; + + c3[] = Point{7761}; + + c4[] = Point{7776}; + c5[] = Point{7778}; + + dz = c3[2]-c1[2]; + + center[] = {(c1[0]+c2[0])/2, (c1[1]+c2[1])/2, (c1[2]+c2[2])/2}; + + D = Sqrt((c4[0]-c5[0])^2+(c4[1]-c5[1])^2+(c4[2]-c5[2])^2); + R = D/2.; + + Recursive Delete { Volume{56}; } + + Cylinder(56) = {center[0],center[1],center[2], 0, 0, dz, R, 2*Pi}; + + Call Weld_bolt_2; + + //+ + //BooleanUnion{ Volume{24}; Delete; }{ Volume{25}; Delete; } + + /* + new_weld_line_loop = newreg; + Line Loop(new_weld_line_loop) = {13449, 13448, 13447, 13446, 13445, 13444, 13443, 13442}; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + num[] = Extrude {0, 0, 20} { + Surface{new_weld_line_loop}; + }; + new_volume_2 = num[1]; + num[] = Extrude {0, 0, -7} { + Surface{new_weld_line_loop}; + }; + new_volume_3 = num[1]; + + new_weld_line_loop = newreg; + Line Loop(new_weld_line_loop) = {13418, 13423, 13408, 13434, 13417, 13399}; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + num[] = Extrude {0, 0, 5} { + Surface{new_weld_line_loop}; + }; + new_volume_4 = num[1]; + BooleanUnion{ Volume{81}; Delete; }{ Volume{82}; Volume{83}; Delete; } + BooleanUnion{ Volume{80}; Delete; }{ Volume{81}; Delete; } + //BooleanUnion{ Volume{82}; Delete; }{ Volume{83}; Delete; } + */ + + + //BooleanUnion{ Volume{new_volume_1}; Delete; }{ Volume{new_volume_2}; Volume{new_volume_3}; Volume{new_volume_4}; Delete; } + + Recursive Delete { Volume{3,17,18}; } + Recursive Delete { Volume{64, 65}; } + + BooleanUnion{ Volume{31}; Delete; }{ Volume{77}; Volume{76}; Delete; } + BooleanUnion{ Volume{30}; Delete; }{ Volume{75}; Volume{74}; Delete; } + BooleanUnion{ Volume{23}; Delete; }{ Volume{73}; Volume{72}; Volume{71}; Volume{70}; Delete; } + BooleanUnion{ Volume{22}; Delete; }{ Volume{69}; Volume{68}; Volume{67}; Volume{66}; Delete; } + + allVolumes[] = Volume "*"; + BooleanFragments{ Volume{allVolumes[] }; Delete; }{} + + Recursive Delete { Volume{81}; } + + If(usePointID) + point_mirror_x = 945; + point_mirror_y = 943; + Else + p1[] = {129.5,10,5.5}; + p2[] = {99.5,-20,5.5}; + EndIf + + Delta_x = -70; + Delta_y = 37; + + Mirror_id = 2; + R = 1.; + + //Call Add_Optical_Axis; + + // Realign the axis + If(usePointID) + point_OX_1 = 9207; + point_OX_2 = 9239; + + point_OY_1 = 10843; + point_OY_2 = 10845; + Else + c1[] = {-135.485,130.067,53.5926}; + c2[] = {-119.545,121.737,54.3284}; + + c3[] = {-177.978,53.1314,60.3884}; + c4[] = {-177.978,-46.8634,61.4069}; + EndIf + + Call Rotate_Axis_x; + + Save "fused_mirror_assembly_all_mm.brep"; + Call Clear_all; +EndIf + +Merge "fused_mirror_assembly_all_mm.brep"; + +Physical Volume("Mirror") = {2}; +Physical Volume("Substrate") = {1}; +Physical Volume("Washer 1") = {5}; +Physical Volume("Washer 2") = {4}; +Physical Volume("Washer 3") = {3}; + +Physical Volume("Shaft 1") = {8}; +Physical Volume("Shaft 2") = {7}; +Physical Volume("Shaft 3") = {6}; + +Physical Volume("Spacer 1 part 1") = {12}; +Physical Volume("Spacer 2 part 1") = {11}; +Physical Volume("Spacer 3 part 1") = {9}; + +Physical Volume("Spacer 1 part 2") = {14}; +Physical Volume("Spacer 2 part 2") = {13}; +Physical Volume("Spacer 3 part 2") = {10}; + +Physical Volume("Holder") = {15,16}; + +Physical Volume("Nut 1") = {17}; +Physical Volume("Nut 2") = {18}; +Physical Volume("Nut 3") = {21}; + +Physical Volume("Holder 2") = {19,20}; + +Physical Volume("Pipes") = {24, 25, 26, 27}; + +Physical Volume("Bolts") = {22, 23, 28}; + +Physical Surface("Mirror surface") = {113}; + +Physical Surface("Cooling channels") = {521, 497, 522, 526, 525, 520, 518, 517, 516, 499, 500, 501, 509, 510, 511, 498, 502, 519, 503, 512, 524, 508, 507, 506, 515, 514, 505, 513, 504}; +Physical Surface("Cooling channels") += {621, 620, 642, 619, 641}; +Physical Surface("Cooling channels") += {878, 850, 803, 793, 845, 800, 795, 796, 799, 879, 876, 851, 849, 864, 865, 848, 863, 842, 784, 812, 785, 786, 811, 859, 875, 858, 841, 873, 874, 840, 787, 789, 808, 810, 788, 790, 807, 791, 839, 806, 805, 860, 870, 838, 866, 868, 869, 846, 797, 802, 801, 794, 855, 809, 877, 854, 872, 871, 852, 862, 844, 853, 847, 861, 856, 857, 867, 843, 804, 792}; +Physical Surface("Cooling channels") += {970, 900, 965, 902, 904, 880, 901, 881, 903, 899, 974, 973, 967, 966, 969, 968, 971, 972}; +Physical Surface("Cooling channels") += {1184, 1185, 1188, 1189, 1198, 1197, 1202, 1201, 1200, 1199, 1226, 1225, 1229, 1227, 1213, 1212, 1217, 1157, 1156, 1152, 1153, 1148, 1149, 1174, 1173, 1170, 1169, 1165, 1166, 1162, 1161, 1144, 1145, 1216, 1228, 1223, 1224, 1221, 1222, 1230, 1196, 1195, 1194, 1193}; + +Physical Surface("Holder x") = {736, 915, 954}; +Physical Point("Holder yz") = {978}; +Physical Point("Holder z") = {988}; + +Mesh.Algorithm = 6; +//Mesh.Algorithm3D = 4; +Mesh.CharacteristicLengthMin = 1.; +Mesh.CharacteristicLengthMax = 1.; +Mesh.MshFileVersion = 2.2; diff --git a/katoptron/Juelich/mesh/fused_mirror_assembly_mm.brep b/katoptron/Juelich/mesh/fused_mirror_assembly_mm.brep new file mode 100644 index 0000000000000000000000000000000000000000..4ebfc88cf039fb41f4cb902abac84ecb9f1e9e59 --- /dev/null +++ b/katoptron/Juelich/mesh/fused_mirror_assembly_mm.brep @@ -0,0 +1,32973 @@ +DBRep_DrawableShape + +CASCADE Topology V1, (c) Matra-Datavision +Locations 143 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 10.4947449441 +1 +-0.740082577630804 -0.047330239837727 0.670848437938293 6446.85967694 +0.38796125092507 0.784756214763919 0.483367097732211 -116.15699979 +-0.549330361502074 0.617994766795245 -0.562422103180246 4458.66396847 +1 +-0.740075641405228 0.387874260635018 -0.54940113117419 0 +-0.387874260635018 0.421191446324924 0.819848353953069 0 +0.54940113117419 0.819848353953069 -0.161267087730152 0 +1 + 1 0 0 0 + 0 0.855469546549163 0.517853120997614 0 + 0 -0.517853120997614 0.855469546549163 0 +1 + 1 0 0 7294.05 + 0 1 0 -2346.64 + 0 0 1 -1780.06 +2 1 1 2 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 13 +2 9 1 2 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 50.5 + 0 1 0 5.5 + 0 0 1 -15.4 +2 11 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 50.5 + 0 1 0 5.5 + 0 0 1 -17 +2 13 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 50.5 + 0 -1 0 5.5 + 0 0 -1 8 +2 15 1 3 1 4 1 5 1 6 1 7 1 0 +2 5 1 6 1 7 1 0 +1 + 1 0 0 50.5 + 0 1 0 5.5 + 0 0 1 -18.5 +2 18 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 -22.5 + 0 1 0 -12.5 + 0 0 1 -15.4 +2 20 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 -22.5 + 0 1 0 -12.5 + 0 0 1 -17 +2 22 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 -22.5 + 0 -1 0 -12.5 + 0 0 -1 7 +2 24 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 -22.5 + 0 1 0 -12.5 + 0 0 1 -18.5 +2 26 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 -22.5 + 0 1 0 29.5 + 0 0 1 -15.4 +2 28 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 -22.5 + 0 1 0 29.5 + 0 0 1 -17 +2 30 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 -22.5 + 0 -1 0 29.5 + 0 0 -1 7 +2 32 1 3 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 -22.5 + 0 1 0 29.5 + 0 0 1 -18.5 +2 34 1 3 1 4 1 5 1 6 1 7 1 0 +1 + -1 -5.56237522861912e-66 3.08148802856e-33 50.5 +-9.49556810794e-66 1 -1.27639401577e-33 5.5 +-3.08148802856e-33 -1.27639401577e-33 -1 -28.5052550559 +2 36 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 -22.5 + 0 -1 3.08148791102e-33 -12.5 + 0 -3.08148791102e-33 -1 -28.5052550559 +2 38 1 4 1 5 1 6 1 7 1 0 +1 + -1 3.79822709830744e-65 6.16297582204e-33 -22.5 +-1.89911354915e-65 1 -9.24446373306e-33 29.5 +-6.16297582204e-33 -9.24446373306e-33 -1 -28.5052550559 +2 40 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 0 +1 + 1 -5.55111512313e-17 1.04404871488e-53 17.5 +5.55111512313e-17 1 -1.38662719945e-54 9.5 +-1.04404871488e-53 1.38662719945e-54 1 -28.5052550559 +2 42 1 43 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 -68.4589041096 + 0 0 1 -1 + 0 -1 0 37.3 +2 45 1 43 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 0 + 0 1 0 0 + 0 0 1 0 +2 47 1 43 1 4 1 5 1 6 1 7 1 0 +1 + 1 0 0 11.0410958904 + 0 -1 0 8.5 + 0 0 -1 5 +2 49 1 2 1 3 1 4 1 5 1 6 1 7 1 0 +2 4 -1 3 -1 2 -1 1 -1 0 +2 9 1 1 -1 0 +2 1 1 49 -1 0 +2 15 1 2 -1 1 -1 0 +2 1 1 2 1 15 -1 0 +2 4 -1 3 -1 15 -1 0 +2 32 1 2 -1 1 -1 0 +2 1 1 2 1 32 -1 0 +2 4 -1 3 -1 32 -1 0 +2 24 1 2 -1 1 -1 0 +2 1 1 2 1 24 -1 0 +2 4 -1 3 -1 24 -1 0 +2 1 1 2 1 22 -1 0 +2 1 1 2 1 30 -1 0 +2 1 1 2 1 13 -1 0 +2 4 -1 3 -1 2 -1 9 -1 0 +2 18 1 11 -1 0 +2 13 1 11 -1 0 +2 11 1 13 -1 0 +2 11 1 15 -1 0 +2 15 1 11 -1 0 +2 4 -1 3 -1 11 -1 0 +2 11 1 18 -1 0 +2 26 1 20 -1 0 +2 34 1 28 -1 0 +2 22 1 20 -1 0 +2 30 1 28 -1 0 +2 20 1 22 -1 0 +2 28 1 30 -1 0 +2 20 1 24 -1 0 +2 28 1 32 -1 0 +2 24 1 20 -1 0 +2 32 1 28 -1 0 +2 4 -1 3 -1 20 -1 0 +2 20 1 26 -1 0 +2 28 1 34 -1 0 +2 4 -1 3 -1 28 -1 0 +2 13 1 15 -1 0 +2 15 1 13 -1 0 +2 4 -1 3 -1 13 -1 0 +2 36 1 3 -1 15 -1 0 +2 15 1 3 1 36 -1 0 +2 38 1 3 -1 24 -1 0 +2 24 1 3 1 38 -1 0 +2 32 1 3 1 40 -1 0 +2 22 1 24 -1 0 +2 24 1 22 -1 0 +2 4 -1 3 -1 22 -1 0 +2 30 1 32 -1 0 +2 40 1 3 -1 32 -1 0 +2 32 1 30 -1 0 +2 4 -1 3 -1 30 -1 0 +2 18 1 13 -1 0 +2 13 1 18 -1 0 +2 4 -1 3 -1 18 -1 0 +2 42 1 43 1 3 -1 18 -1 0 +2 26 1 22 -1 0 +2 34 1 30 -1 0 +2 22 1 26 -1 0 +2 4 -1 3 -1 26 -1 0 +2 30 1 34 -1 0 +2 4 -1 3 -1 34 -1 0 +2 42 1 43 1 3 -1 26 -1 0 +2 42 1 43 1 3 -1 34 -1 0 +2 26 1 3 1 43 -1 42 -1 0 +2 34 1 3 1 43 -1 42 -1 0 +2 4 -1 43 -1 42 -1 0 +2 45 1 42 -1 0 +2 47 1 42 -1 0 +2 4 -1 43 -1 47 -1 0 +2 47 1 43 1 40 -1 0 +2 47 1 43 1 38 -1 0 +2 47 1 43 1 36 -1 0 +2 1 1 2 1 3 1 4 1 0 +2 49 1 2 1 3 1 4 1 0 +2 15 1 3 1 4 1 0 +2 32 1 3 1 4 1 0 +2 24 1 3 1 4 1 0 +2 22 1 3 1 4 1 0 +2 30 1 3 1 4 1 0 +2 13 1 3 1 4 1 0 +2 9 1 2 1 3 1 4 1 0 +2 11 1 3 1 4 1 0 +2 18 1 3 1 4 1 0 +2 20 1 3 1 4 1 0 +2 26 1 3 1 4 1 0 +2 28 1 3 1 4 1 0 +2 34 1 3 1 4 1 0 +2 36 1 4 1 0 +2 38 1 4 1 0 +2 40 1 4 1 0 +2 42 1 43 1 4 1 0 +2 47 1 43 1 4 1 0 +Curve2ds 2823 +1 -0.5 14.5 1 0 +2 0 0 1 0 -0 1 8 +1 -0.50000000000097955 14.5 1 0 +2 0 0 1 0 -0 1 8 +7 0 0 5 6 2 -38 -32.5 -16.199999999999999 -32.5 5.5999999999999996 -32.5 27.399999999999999 -32.5 49.200000000000003 -32.5 71 -32.5 + 0 6 109 6 +7 0 0 5 6 2 0 13 21.800000000000001 13 43.600000000000001 13 65.400000000000006 13 87.200000000000003 13 109 13 + 0 6 109 6 +7 0 0 1 2 2 207.10225695400001 13 254.45195737099999 13 + 31.705691563799999 2 79.317202574099994 2 +7 0 0 5 9 3 71 -32.5 75.712388980399993 -32.5 80.4247779608 -31.574724587399999 84.8946105096 -29.723259324099999 92.867471954300001 -24.367471954300001 98.223259324099999 -16.3946105096 100.07472458700001 -11.9247779608 101 -7.2123889803800001 101 -2.5 + 31.705691563799999 6 55.511447068999999 3 79.317202574099994 6 +7 0 0 1 2 2 207.10225695400001 0 254.45195737099999 0 + 31.705691563799999 2 79.317202574099994 2 +7 0 0 5 6 2 101 -2.5 101 -0.5 101 1.5 101 3.5 101 5.5 101 7.5 + 0 6 10 6 +7 0 0 5 6 2 0 13.000000000000002 2 13.000000000000002 4 13.000000000000002 6 13.000000000000002 8 13.000000000000002 10 13.000000000000002 + 0 6 10 6 +7 0 0 1 2 2 107.808170647 13 132.87983823900001 13 + 0 2 25.507102763500001 2 +7 0 0 5 6 2 101 7.5 101 12.4776888283 99.654424864299997 17.455903910100002 96.956647293900005 21.945748933499999 93.192846020999994 25.470943655100001 88.797802672700001 27.807817643500002 + 0 6 25.507102763500001 6 +7 0 0 1 2 2 107.808170647 0 132.87983823900001 0 + 0 2 25.507102763500001 2 +7 0 0 5 6 2 88.797802672700001 27.807817643500002 83.672569027799995 30.532952712 78.547335382900002 33.258087780499999 73.422101737999995 35.983222848899999 68.296868093100002 38.708357917400001 63.171634448200003 41.433492985900003 + 0 6 29.023430645000001 6 +7 0 0 5 6 2 -1.4210854715202004e-14 13 5.8046861290153657 13 11.609372258030717 13 17.414058386999166 13 23.218744516014524 13 29.02343064502989 13 + 0 6 29.023430645000001 6 +7 0 0 1 2 2 95.599764641600004 13 137.70278531899999 13 + 31.519741269600001 2 73.710500387699994 2 +7 0 0 5 6 2 63.171634448200003 41.433492985900003 55.7500134434 45.379638872299999 47.845323711900001 48.4193390577 39.609065293299999 50.472868920099998 31.202585726199999 51.5 22.797080048600002 51.5 + 31.519741269600001 6 73.710500387699994 6 +7 0 0 1 2 2 95.599764641600004 0 137.70278531899999 0 + 31.519741269600001 2 73.710500387699994 2 +7 0 0 5 6 2 22.797080048600002 51.5 15.8376640389 51.5 8.8782480291599999 51.5 1.9188320194399999 51.5 -5.04058399028 51.5 -12 51.5 + 0 6 34.797080048600002 6 +7 0 0 5 6 2 0 13.000000000000002 6.9594160097000017 13.000000000000002 13.918832019440002 13.000000000000002 20.878248029160002 13.000000000000002 27.83766403888 13.000000000000002 34.797080048600002 13.000000000000002 + 0 6 34.797080048600002 6 +7 0 0 1 2 2 166.58674222600001 13 252.01584080399999 13 + 0 2 86.247384365800002 2 +7 0 0 5 9 3 -12 51.5 -20.4823001647 51.5 -28.9646003294 49.834504257299997 -37.0102989174 46.501866783399997 -51.361449517799997 36.861449517799997 -61.001866783399997 22.5102989174 -64.334504257299997 14.4646003294 -66 5.9823001646899998 -66 -2.5 + 0 6 43.123692182900001 3 86.247384365800002 6 +7 0 0 1 2 2 166.58674222600001 0 252.01584080399999 0 + 0 2 86.247384365800002 2 +7 0 0 5 6 2 -66 -2.5 -66 -2.8999999999999999 -66 -3.2999999999999998 -66 -3.7000000000000002 -66 -4.0999999999999996 -66 -4.5 + 0 6 2 6 +7 0 0 5 6 2 0 13 0.39999999999999991 13 0.79999999999999982 13 1.2000000000000002 13 1.5999999999999996 13 2 13 + 0 6 2 6 +7 0 0 1 2 2 98.517206313800003 13 143.29775463799999 13 + 0 2 46.336855176699999 2 +7 0 0 5 6 2 -66 -4.5 -66 -13.296459430100001 -62.555579886700002 -22.101126014199998 -55.601126014199998 -29.055579886699999 -46.796459430100001 -32.5 -38 -32.5 + 0 6 46.336855176699999 6 +7 0 0 1 2 2 98.517206313800003 0 143.29775463799999 0 + 0 2 46.336855176699999 2 +1 0 6.75 1 0 +2 -22.5 -12.5 1 0 -0 1 6 +1 0 6.75 1 0 +2 -22.5 -12.5 1 0 -0 1 6 +1 0 6.75 1 0 +2 -22.5 29.5 1 0 -0 1 6 +1 0 6.75 1 0 +2 -22.5 29.5 1 0 -0 1 6 +7 0 0 1 2 2 3.1415926535897931 7.25 6.2831853071795862 7.25 + 28.274333882299999 2 56.548667764599998 2 +7 0 0 5 15 5 2.0410958904099998 8.5 2.0410958904099998 7.0862833058800003 2.3186785141900002 5.6725666117699998 2.8741180931799999 4.3316168471100003 4.4808543041200002 1.9397584137099999 6.8727127375199997 0.333022202765 8.21366250218 -0.22241737621900001 11.041095890399999 -0.77758262378099996 13.868529278600001 -0.22241737621900001 15.2094790433 0.333022202765 17.601337476699999 1.9397584137099999 19.208073687599999 4.3316168471100003 19.7635132666 5.6725666117699998 20.041095890400001 7.0862833058800003 20.041095890400001 8.5 + 28.274333882299999 6 35.342917352900002 3 42.411500823499999 3 49.480084294000001 3 56.548667764599998 6 +7 0 0 1 2 2 0 7.25 3.1415926535897931 7.25 + 0 2 28.274333882299999 2 +7 0 0 5 15 5 20.041095890400001 8.5 20.041095890400001 9.9137166941199997 19.7635132666 11.327433388199999 19.208073687599999 12.668383152900001 17.601337476699999 15.0602415863 15.2094790433 16.666977797200001 13.868529278600001 17.222417376199999 11.041095890399999 17.777582623800001 8.21366250218 17.222417376199999 6.8727127375199997 16.666977797200001 4.4808543041200002 15.0602415863 2.8741180931799999 12.668383152900001 2.3186785141900002 11.327433388199999 2.0410958904099998 9.9137166941199997 2.0410958904099998 8.5 + 0 6 7.0685834705800001 3 14.1371669412 3 21.205750411699999 3 28.274333882299999 6 +1 -2.0707963267948974 -25 1 0 +2 0 -3.5 1 0 -0 1 3.5 +2 11.041095890399999 8.5 1 0 0 -1 3.5 +1 -2.0707963267932095 -25 1 0 +2 0 -3.5 1 0 -0 1 3.5 +2 11.041095890399999 8.5 1 0 0 -1 3.5 +7 0 0 1 2 2 0 8.25 3.1415957069804188 8.25 + 30.1592894745 2 50.265501999100003 2 +7 0 0 5 15 5 -49.958904109599999 2.1000000000000001 -48.953593483399999 2.1000000000000001 -47.948282857099997 2.2973924717199998 -46.994717754100002 2.6923724964 -45.293839593599998 3.8349426061599998 -44.151272080600002 5.5358225109700001 -43.756293511700001 6.4893882170200001 -43.361511637900001 8.5000100721899994 -43.756299650899997 10.5106307219 -44.151281131399998 11.464195222000001 -45.293853837900002 13.165071638100001 -46.994735487 14.3076365544 -47.948301796099997 14.7026136675 -48.953613025000003 14.9000030696 -49.958923651299997 14.9 + 30.1592894745 6 35.185842605600001 3 40.212395736799998 3 45.2389488679 3 50.265501999100003 6 +1 -50.958904109599999 2.1000000000000001 1 0 +1 1 -6 -1 0 +7 0 0 1 2 2 0 8.25 3.1415896021149314 8.25 + 10.053116020899999 2 30.1592894745 2 +7 0 0 5 15 5 -51.958923638999998 14.9 -52.964232311700002 14.899996932300001 -53.969540381999998 14.7026021601 -54.923102628400002 14.307620762199999 -56.623975198499998 13.1650497359 -57.766538439400001 11.4641719361 -58.161515472700003 10.5106078818 -58.556295814099997 8.4999899341099994 -58.161509337299997 6.4893731911000003 -57.766529394300001 5.5358103420699996 -56.623960963199998 3.8349360287300001 -54.923084906600003 2.6923701926999999 -53.969521454899997 2.2973917045599999 -52.964212782300002 2.1000000000000001 -51.958904109599999 2.1000000000000001 + 10.053116020899999 6 15.079659384299999 3 20.106202747699999 3 25.132746111100001 3 30.1592894745 6 +1 -50.958904109599999 14.9 1 0 +1 1.0000195293999994 -6 1 0 +1 -1.5707963267948966 -2.5 1 0 +2 28.235903341899999 -16.5 -1 0 0 1 8 +1 0.79136447795974119 0 0 1 +1 3.9210245024267794 0 0 -1 +1 -1.5707963267948966 2 1 0 +2 28.235903341899999 -16.5 -1 0 0 1 8 +1 0 0 0 1 +1 3.6391134366000024 2.5 0 1 +1 16.516168422300002 4.5 1 0 +1 15.358848356199999 -8.5 -1 0 +1 16.516168422300002 0 1 0 +1 15.358848356199999 -8.5 -1 0 +1 0 0.25 0 1 +1 29.393223408130002 2.25 0 -1 +1 -1.5707963267948966 2.5 1 0 +2 2.4817933703700001 -16.5 1 0 -0 1 7.9999999999999991 +1 -1.5707963267948966 -2 1 0 +2 2.4817933703700001 -16.5 1 0 -0 1 7.9999999999999991 +1 1.4120273699608157 0 0 1 +1 6.1244163503478974 0 0 1 +1 -1.5707963267948966 -2.5 1 0 +2 -47.7802294293 -13.5 -1 0 0 1 8 +1 1.5312603361509474 0 0 1 +1 3.1811286442328592 0 0 -1 +1 -1.5707963267948966 2 1 0 +2 -47.7802294293 -13.5 -1 0 0 1 8 +1 0 0 0 1 +1 9.459673181200003 2.5 0 1 +1 -4.7123889803846897 2.5 1 0 +2 -47.7802294293 30.5 1 0 -0 1 8 +1 0 0 0 1 +1 9.459673181200003 2.5 0 -1 +1 -4.7123889803846897 -2 1 0 +2 -47.7802294293 30.5 1 0 -0 1 8 +1 1.5312603361509458 0 0 1 +1 3.102056662946727 0 0 1 +1 -3.3003616104238742 2.5 1 0 +2 2.4817933703700001 33.5 1 0 -0 1 7.9999999999999991 +1 0 0 0 1 +1 0.15876895683168851 0 0 1 +1 -3.3003616104238742 -2 1 0 +2 2.4817933703700001 33.5 1 0 -0 1 7.9999999999999991 +1 1.4120273699629484 0 0 1 +1 36.06454610243 2.5 0 -1 +1 0 0.25 0 1 +1 2.0352636630000021 2.25 0 -1 +1 19.049904882699998 4.5 1 0 +1 19.496434590100002 25.5 -1 0 +1 19.049904882699998 0 1 0 +1 19.496434590100002 25.5 -1 0 +1 -4.7123889803846897 2.5 1 0 +2 36.511075809799998 33.5 1 0 -0 1 8 +1 -4.7123889803846897 -2 1 0 +2 36.511075809799998 33.5 1 0 -0 1 8 +1 0.46333110722450693 0 0 1 +1 2.034127434018774 0 0 1 +1 -0.50000000000097955 0.40000000000000036 1 0 +1 6.7831853071805659 11.313708498984751 -1 3.392591660226698e-15 +1 4.2123889803846888 -16.399999999999267 -1 0 +1 3.1415926535895737 0 0 1 +1 3.1415926535895737 0 0 1 +1 0.57079632679509318 -15.999999999999776 0 -1 +1 -2.0707963267946776 -27.199999999999999 1 0 +1 -2.0707963267946776 11.313708498984774 1 -3.3925916602279878e-15 +1 5.7831853071795853 11.200000000000344 -1 0 +1 3.1415926535907723 7.0949999999699997 0 1 +1 3.1415926535907723 7.0949999999699997 0 1 +1 0.57079632679396097 -23.094999999969858 0 -1 +1 -2.0707963267948974 -27.199999999999999 1 0 +1 -4.1651914291880141 11.313708498984795 1 -5.0888874903416267e-15 +1 5.7831853071795853 11.200000000000344 -1 0 +1 0 7.0949999999699997 0 1 +1 6.2831853071795862 7.0949999999699997 0 1 +1 4.2123889803846879 -16.399999999999267 -1 0 +1 3.7123889803836554 -23.094999999969225 0 -1 +1 -0.5 0.40000000000000036 1 0 +1 8.8775804095727082 11.313708498984756 -1 1.1308638867425798e-15 +1 10.495574287564274 -16.399999999999267 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.712388980384862 -15.999999999999716 0 -1 +1 12.066370614359172 11.200000000000344 -1 0 +1 5.7831853071795853 11.200000000000344 -1 0 +1 4.2123889803846888 -16.399999999999267 -1 0 +1 11.495574287563574 11.879393923933971 -1 3.3925916602285139e-15 +2 50.5 5.5 0 1 -1 0 8.4000000000000004 +2 0 -8 0 -1 -1 -0 8.4000000000000004 +1 3.1415926535902132 11.596551211457212 -1.7271017044604624e-14 1 +1 5.2359877559833317 11.596551211457205 -1.570092458600425e-14 1 +1 6.2831853071795862 11.596551211457202 0 1 +1 2.0943951023935279 11.596551211457209 -1.5700924586004351e-14 1 +1 7.3067840827778126 11.879393923933931 -1 1.8093822187881277e-14 +2 50.5 5.5 0 1 -1 0 8.4000000000000004 +2 0 -8 0 -1 -1 -0 8.4000000000000004 +1 0 -6.3499999999999996 1 0 +1 6.2831853071795862 8.4852813742385713 -1 0 +1 4.2123889803846888 -16.400000000000389 -1 0 +1 3.1415926535906706 0 0 1 +1 3.1415926535906706 0 0 1 +1 1.0707963267941221 -22.749999999999936 0 -1 +1 -2.0707963267957745 -26.199999999999999 1 0 +1 -2.0707963267957741 8.4852813742385802 1 -2.8271597168556695e-15 +1 6.2831853071795862 3.449999999999886 -1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 1.0707963267948248 -22.750000000000494 0 -1 +1 -2.0707963267948983 -26.199999999999999 1 0 +1 -4.1651914291880141 8.4852813742385624 1 1.1308638867425838e-15 +1 6.2831853071795862 3.449999999999886 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 4.2123889803846888 -16.400000000000389 -1 0 +1 4.2123889803847527 -22.750000000000469 0 -1 +1 0 -6.3499999999999996 1 0 +1 8.3775804095730013 8.4852813742385642 -1 1.696295830113876e-15 +1 10.495574287564274 -16.400000000000389 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 4.2123889803836843 -22.750000000000409 0 -1 +1 12.566370614359172 3.449999999999886 -1 0 +1 6.2831853071795862 3.449999999999886 -1 0 +1 4.2123889803846888 -16.400000000000389 -1 0 +1 8.3775804095730013 9.0509667991877123 -1 2.0355549961366507e-14 +2 -22.5 29.5 1 0 -0 1 6.3999999999999986 +2 0 -6 1 0 0 -1 6.4000000000000004 +1 2.0943951023934151 8.7681240867131933 -7.8504622934189397e-16 1 +1 6.2831853071795862 8.7681240867131898 0 1 +1 5.2359877559832082 8.768124086713188 0 1 +1 3.1415926535897931 8.7681240867131898 0 1 +1 6.2831853071795862 9.0509667991878082 -1 0 +2 -22.5 29.5 1 0 -0 1 6.3999999999999986 +2 0 -6 1 0 0 -1 6.4000000000000004 +1 0 -6.3499999999999996 1 0 +1 6.2831853071795862 8.4852813742385713 -1 -1.1308638867425773e-15 +1 4.2123889803846888 -16.400000000000375 -1 0 +1 1.0707963267940042 -22.749999999999428 0 -1 +1 6.2831853071795862 3.4500000000003976 -1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 1.0707963267948231 -22.750000000000487 0 -1 +1 6.2831853071795862 3.4500000000003976 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 4.2123889803846888 -16.400000000000375 -1 0 +1 4.2123889803847545 -22.750000000000462 0 -1 +1 0 -6.3499999999999996 1 0 +1 8.3775804095730066 8.4852813742385642 -1 1.1308638867425806e-15 +1 10.495574287564274 -16.400000000000375 -1 0 +1 4.2123889803838024 -22.749999999999897 0 -1 +1 12.566370614359172 3.4500000000003976 -1 0 +1 6.2831853071795862 3.4500000000003976 -1 0 +1 4.2123889803846888 -16.400000000000375 -1 0 +1 8.3775804095730066 9.0509667991876839 -1 2.6009869395079353e-14 +2 -22.5 -12.5 1 0 -0 1 6.3999999999999986 +2 0 -6 1 0 0 -1 6.4000000000000004 +1 2.0943951023934102 8.7681240867131915 1.570092458683783e-15 1 +1 6.2831853071795862 8.7681240867131898 0 1 +1 5.2359877559832118 8.7681240867131862 -1.5700924586837781e-15 1 +1 3.1415926535897745 8.7681240867131862 -7.8504622934188904e-16 1 +1 10.995574287564276 9.0509667991878171 -1 -1.6962958301138657e-15 +2 -22.5 -12.5 0 1 -1 0 6.4000000000000004 +2 0 -6 0 -1 -1 -0 6.4000000000000004 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -2 1 0 +2 -22.5 -12.5 1 0 -0 1 17.300000000000001 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 -2.2999999999999998 1 0 +1 0 24.465894629054546 1 0 +1 0 -2 1 0 +2 -22.5 -12.5 1 0 -0 1 17.300000000000001 +1 0 2.5 1 0 +2 -22.5 -12.5 1 0 -0 1 17.300000000000001 +1 0 -2 1 0 +2 -22.5 -12.5 1 0 -0 1 17.300000000000001 +1 0 -2.2999999999999998 1 0 +1 -2.0943951023933796 24.465894629054539 1 1.1308638867426094e-15 +1 0 24.183051916579927 1 0 +2 -22.5 -12.5 1 0 -0 1 17.100000000000001 +1 -2.0943951023933796 24.183051916579924 1 0 +2 -22.5 -12.5 1 0 -0 1 17.100000000000001 +1 0 6 1 0 +2 0 0 1 0 -0 1 17 +2 -22.5 -12.5 1 0 -0 1 17 +2 -22.5 29.5 1 0 -0 1 17 +1 0 6 1 0 +2 0 0 1 0 -0 1 17 +2 -22.5 -12.5 1 0 -0 1 17 +2 -22.5 29.5 1 0 -0 1 17 +1 -2.070796326794885 11.030865786510041 1 2.7140733281822116e-14 +2 0 -6 1 0 -0 1 7.7999999999999998 +2 -22.5 -12.5 1 0 0 -1 7.8000000000000007 +2 -22.5 29.5 1 0 0 -1 7.8000000000000007 +1 -4.1651914291880141 11.030865786510647 1 -7.4637016525010553e-14 +2 0 -6 1 0 -0 1 7.7999999999999998 +2 -22.5 -12.5 1 0 0 -1 7.8000000000000007 +2 -22.5 29.5 1 0 0 -1 7.8000000000000007 +1 0 6 1 0 +2 0 0 1 0 -0 1 8 +2 -22.5 -12.5 1 0 -0 1 8 +2 -22.5 29.5 1 0 -0 1 8 +1 0 6 1 0 +2 0 0 1 0 -0 1 8 +2 -22.5 -12.5 1 0 -0 1 8 +2 -22.5 29.5 1 0 -0 1 8 +1 1.047197551196414 24.324473272817237 -1.5700924586837781e-15 1 +1 3.1415926535898198 24.324473272817237 0 1 +1 4.1887902047861356 24.324473272817233 3.1401849173675167e-15 1 +1 0 24.324473272817237 0 1 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 0 -2 1 0 +2 -22.5 29.5 1 0 -0 1 17.300000000000001 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -2.2999999999999998 1 0 +1 -2.0943951023933796 24.465894629054546 1 0 +1 0 -2 1 0 +2 -22.5 29.5 1 0 -0 1 17.300000000000001 +1 -1.6653345369377348e-16 2.5 1 0 +2 -22.5 29.5 1 0 -0 1 17.300000000000001 +1 0 -2 1 0 +2 -22.5 29.5 1 0 -0 1 17.300000000000001 +1 0 -2.2999999999999998 1 0 +1 0 24.465894629054546 1 0 +1 -2.0943951023933796 24.183051916579927 1 0 +2 -22.5 29.5 1 0 -0 1 17.100000000000001 +1 0 24.183051916579927 1 0 +2 -22.5 29.5 1 0 -0 1 17.100000000000001 +1 0 24.324473272817237 0 1 +1 4.1887902047861365 24.324473272817237 3.1401849173675562e-15 1 +1 3.1415926535898109 24.324473272817237 0 1 +1 1.0471975511964138 24.324473272817237 -2.355138688025697e-15 1 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 0 2.5 1 0 +2 50.5 5.5 1 0 -0 1 23.299999999999997 +1 0 -2 1 0 +2 50.5 5.5 1 0 -0 1 23.299999999999997 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -2.2999999999999998 1 0 +1 -2.094395102393424 32.951176003293114 1 0 +1 0 -2 1 0 +2 50.5 5.5 1 0 -0 1 23.299999999999997 +1 0 2.5 1 0 +2 50.5 5.5 1 0 -0 1 23.299999999999997 +1 0 -2.2999999999999998 1 0 +1 0 32.951176003293114 1 0 +1 -2.0943951023934235 32.668333290818495 1 0 +2 50.5 5.5 1 0 -0 1 23.099999999999994 +1 0 32.668333290818495 1 0 +2 50.5 5.5 1 0 -0 1 23.099999999999994 +1 0 6 1 0 +2 0 0 1 0 -0 1 23 +2 50.5 5.5 1 0 -0 1 23 +1 0 6 1 0 +2 0 0 1 0 -0 1 23 +2 50.5 5.5 1 0 -0 1 23 +1 -2.0707963267945773 13.859292911256107 1 6.1632081827477094e-14 +2 4.5562353437399997e-16 -7.9999999999999991 1 0 -0 1 9.8000000000000007 +2 50.5 5.4999999999999991 1 0 0 -1 9.7999999999999972 +1 -4.1651914291880132 13.859292911256553 1 -3.2795052715534944e-14 +2 4.5562353437399997e-16 -7.9999999999999991 1 0 -0 1 9.8000000000000007 +2 50.5 5.4999999999999991 1 0 0 -1 9.7999999999999972 +1 0 6 1 0 +2 0 0 1 0 -0 1 10 +2 50.5 5.5 1 0 -0 1 10 +1 0 6 1 0 +2 0 0 1 0 -0 1 10 +2 50.5 5.5 1 0 -0 1 10 +1 0 32.809754647055804 0 1 +1 4.18879020478618 32.809754647055811 0 1 +1 3.1415926535897127 32.809754647055804 3.1401849173675562e-15 1 +1 1.0471975511963696 32.809754647055804 1.5700924586837386e-15 1 +1 1 4.0999999999999996 1 0 +1 111.56272774030001 0.565685424949256 1 4.1419027761054405e-19 +1 3.1415896021149314 3.2000000000000002 0 -1 +1 2 -0.94999999999999996 -0 1 +1 0 3.2000000000000002 0 -1 +1 0 -0.94999999999999996 -0 1 +1 0 0 0 1 +1 0 2.25 0 -1 +1 -1.5707993782636465 -1.8499999999999996 1 0 +1 6.2831868329170169 9.0509667991878118 -1 -5.6543249258303613e-16 +1 0.99999999389999772 4.0999999999999996 1 0 +1 32.058380293400006 0.56568542494923857 1 0 +1 3.1415957069804188 3.2000000000000002 0 -1 +1 1.9999999877000008 -0.94999999999999996 0 1 +1 -4.7123889803846897 -1.8499999999999996 1 0 +1 9.4247794874624873 9.0509667991878082 -1 0 +1 4.7123875444024508 9.3338095116822739 -3.1731091752987212e-07 -0.99999999999994971 +1 31.058380299500008 0.28284271247462056 0 1 +1 -11.2067401539 15.300000000000001 1 0 +1 71.810563784600006 0 1 0 +1 1.5707948899029507 9.3338095116822952 -3.1751076831857049e-07 -0.9999999999999496 +1 33.058380287200009 0.28284271247462056 0 1 +1 4.7123905070777985 9.3338095116624249 -4.7102773760513198e-15 1 +1 110.56272774030001 0.28284271247463666 -1.2403316233345993e-14 -1 +1 7.8539831606675907 9.6166522241369812 -1 1.3570354227396789e-14 +2 -49.958904109599999 8.5 0 1 -1 0 6.8000000000000007 +1 -11.2067401539 1.7 -1 -2.2263035843300001e-16 +1 71.810563784599992 1.1304665702550789e-14 1 -7.3955709864469857e-32 +1 1.5707978525323272 9.3338095116624284 7.8504622934188657e-16 -1 +1 112.56272774030001 0.28284271247463683 -1.5742343614596589e-16 1 +1 4.7123905061221203 9.616652224137006 -1 2.6009894658834894e-14 +2 -51.958904109599999 8.5 0 1 -1 0 6.8000000000000007 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -1.8499999999999996 1 0 +1 8.3775804095730013 12.727922061357852 -1 1.1308638867425838e-15 +1 0 -1.8499999999999996 1 0 +1 6.2831853071795862 12.727922061357855 -1 0 +1 10.995574287564276 13.293607486307094 -1 0 +2 11.041095890399999 8.5 0 1 -1 0 9.3999999999999986 +1 3.1415926535898113 13.010764773825402 -1.5700924586837731e-15 1 +1 5.2359877559832082 13.010764773825404 -1.5700924586837731e-15 1 +1 6.2831853071795862 13.010764773832474 0 1 +1 2.0943951023934151 13.010764773832477 2.355138688025682e-15 1 +1 8.3775804095730013 13.293607486307163 -1 -1.4701230527653588e-14 +2 11.041095890399999 8.5 1 0 -0 1 9.4000000000000004 +1 13.763830376600005 4.5 1 0 +1 -52.084386624700002 -5.5 -1 0 +1 13.763830376600005 0 1 0 +1 -52.084386624700002 -5.5 -1 0 +1 1.0194793576626502 0 0 1 +1 18.067987571900005 2.25 0 -1 +1 -3.6929096227220408 -2.25 1 0 +2 -56.388543820000002 -2.5 1 0 -0 1 3 +1 -3.6929096227220408 2.25 1 0 +2 -56.388543820000002 -2.5 1 0 -0 1 3 +1 0 0 0 1 +1 1.1741435545438652 0 0 1 +1 1.0194793576626482 0 0 1 +1 18.067987571900005 2.25 0 1 +1 13.763830376600005 0 1 0 +1 -52.084386624700002 22.5 -1 0 +1 13.763830376600005 4.5 1 0 +1 -52.084386624700002 22.5 -1 0 +1 -2.5187660681778201 -2.25 1 0 +2 -38.5 8.5 1 0 -0 1 24 +1 -2.5187660681778201 2.25 1 0 +2 -38.5 8.5 1 0 -0 1 24 +1 0.071509616281146673 0 0 1 +1 0 0 0 -1 +1 2.590275684457545 2.25 -1 0 +2 -56.388543820000002 19.5 1 0 -0 1 3 +1 -0.55131696912372863 -2.25 1 0 +2 -56.388543820000002 19.5 -1 0 0 1 3 +1 207.10225695400001 6.9000000000000004 0 1 +1 109 6.9000000000000004 0 1 +1 143.29775463799999 6.9000000000000004 0 1 +1 0 6.9000000000000004 0 1 +1 54.5 0.79999999999999982 1 0 +1 118.101209582 1.1313708498984769 1 0 +1 254.45195737099999 6.5 0 1 +1 -1.0573556046300002e-30 6.5000000000000009 -1.6267009302e-31 1 +7 0 0 1 2 2 207.10225695400001 0.80000000000000004 254.45195737099999 0.80000000000000004 + 109 2 156.12388980399999 2 +7 0 0 1 2 2 243.59478752199996 1.1313708498999939 309.35350971339039 1.1313770879898555 + 109 2 156.12388980399999 2 +1 107.808170647 6.9000000000000004 0 1 +1 10 6.9000000000000012 -1.6267009302e-31 1 +1 5 0.80000000000000138 1 1.1940564118011782e-31 +1 54.033201642400002 1.1313708498983486 1 -3.9510519181585082e-16 +1 132.87983823900001 6.5 0 1 +1 -2.2156089166073466e-16 6.5 -2.6794007744629963e-24 1 +7 0 0 1 2 2 107.808170647 0.80000000000000004 132.87983823900001 0.80000000000000004 + 166.12388980399999 2 191.01233394499999 2 +7 0 0 1 2 2 62.094959105999997 1.1313708499000001 96.684515910148349 1.1313733782654261 + 166.12388980399999 2 191.01233394499999 2 +1 95.599764641600004 6.9000000000000004 0 1 +1 29.023430645029901 6.9000000000000004 4.4023993482469405e-17 1 +1 14.511715322470803 0.80000000000099958 1 2.6794007744629963e-24 +1 67.889245372634278 1.1313708499017283 1 -5.5511151231257827e-17 +1 137.70278531899999 6.5 0 1 +1 0 6.5000000000000009 0 1 +7 0 0 1 2 2 95.599764641600004 0.80000000000000004 137.70278531899999 0.80000000000000004 + 220.03576459000001 2 262.06329297799999 2 +7 0 0 1 2 2 120.58639119999999 1.1313708498999999 179.74754216553339 1.131376787613714 + 220.03576459000001 2 262.06329297799999 2 +1 166.58674222600001 6.9000000000000004 0 1 +1 34.797080048600002 6.9000000000000012 0 1 +1 17.398540024300001 0.80000000000000138 1 0 +1 130.15324706870001 1.1313708498984729 1 0 +1 252.01584080399999 6.5 0 1 +1 0 6.5000000000000009 0 1 +7 0 0 1 2 2 166.58674222600001 0.80000000000000004 252.01584080399999 0.80000000000000004 + 296.86037302699998 2 381.68337467399999 2 +7 0 0 1 2 2 206.34732287700001 1.1313708499000001 325.41616112837863 1.1313707294091384 + 296.86037302699998 2 381.68337467399999 2 +1 98.517206313800003 6.9000000000000004 0 1 +1 2 6.9000000000000012 0 1 +1 1 0.80000000000000071 1 0 +1 73.143739457099997 1.1313708498984729 1 0 +7 0 0 1 2 2 98.517206313800003 0.80000000000000004 143.29775463799999 0.80000000000000004 + 383.68337467399999 2 427.66567182400001 2 +7 0 0 1 2 2 103.76581805399999 1.1313708499000001 165.07828876436528 1.1313705510753325 + 383.68337467399999 2 427.66567182400001 2 +7 0 0 1 2 2 103.76581805399999 3.0224279829703162e-15 165.07829155293481 1.3399276483031418e-11 + 103.76581805399999 2 165.07828899200001 2 +7 0 0 5 15 5 -65.200000000000003 -4.5 -65.200000000000003 -7.3961324085399998 -64.815683064799998 -10.292565314899999 -64.044701936199999 -13.1202251169 -61.767762986000001 -18.502156188099999 -58.162061913499997 -23.101311403499999 -56.061385811000001 -25.147230317799998 -51.7602007208 -28.339419764199999 -46.831052239900004 -30.3981516644 -44.496038364599997 -31.080147596500002 -41.768787502400002 -31.555521804400001 -39.019917637299997 -31.684083704100001 -38.678137464199999 -31.6947756669 -38.338923938100002 -31.700003949900001 -38.000003569900002 -31.7000003729 + 103.76581805399999 6 124.547002021 3 145.33505857899999 3 162.64698145599999 3 165.07828899200001 6 +1 -65.200000000000003 -3.5 0 -1 +1 73.143739457099997 0 1 0 +1 0 9.7910712518795318e-16 1 -3.0087941894766422e-18 +7 0 0 5 15 5 -12 50.700000000000003 -17.395146434200001 50.700000000000003 -22.790272716 50.016080707500002 -28.0703760954 48.647586647799997 -38.167235070799997 44.603325626500002 -46.935695196499999 38.167852959100003 -50.887142559099999 34.407592682999997 -58.071200711000003 25.572774405099999 -62.709492242700001 15.153781134600001 -64.358373071900004 9.4059114346899992 -65.191238028499995 3.4851502435200001 -65.199969163700004 -2.4372544982000002 -65.199989732399999 -2.4581681825900001 -65.200000056600004 -2.4790835333599999 -65.2000001567 -2.5000012219399999 + 206.34732287700001 6 244.784677386 3 283.22234807799998 3 325.26716929499997 3 325.41616118000002 6 +1 5.3985400242999999 50.700000000000003 -1 0 +1 130.15324706870001 0 1 0 +1 0 4.7602116774627328e-15 1 -2.6482762356956271e-17 +7 0 0 5 9 3 62.796057198 40.727134911599997 55.583984463199997 44.5618620065 47.911829203899998 47.532368133200002 39.920285127100001 49.564612909099999 31.602084407900001 50.640506765600001 23.274783774399999 50.698883892399998 23.115519849199998 50.699624028199999 22.956266601100001 50.699990847400002 22.797018728600001 50.699991800799999 + 120.58639119999999 6 178.61598027900001 3 179.74754108900001 6 +1 75.609141310200002 33.914297240400003 -0.88294759285826285 0.46947156278713975 +1 67.889245372690056 -2.915001573455811e-11 1 -5.5511151231257827e-17 +1 0 3.2061493945663398e-15 1 -3.5908506306048224e-18 +7 0 0 5 12 4 100.2 7.5 100.2 9.6809699653300001 99.932382303899999 11.8619313793 99.396510492800004 13.9991336012 97.692003087800003 18.4059546282 94.895791927999994 22.228794922799999 93.118707907000001 24.048197016300001 91.017193152399997 25.661658038100001 88.725037743800002 26.937935644900001 88.624460949500005 26.993092693200001 88.523529253199996 27.047590689700002 88.422255048899999 27.101440138200001 + 62.094959105999997 6 77.796852188800003 3 95.859399766099997 3 96.6845153915 6 +1 100.2 2.5 0 1 +1 54.033201642400002 -1.3461892237663669e-13 1 -2.4048235389308001e-15 +1 -2.8421709430404007e-14 -2.707542532113754e-14 1 8.7522599674615994e-17 +7 0 0 5 15 5 71 -31.699999999999999 73.999932498999996 -31.699999999999999 76.999844077000006 -31.3147433629 79.934138087199997 -30.543852039600001 85.538504313100006 -28.266498915 90.385589047600007 -24.647042713800001 92.562629609400005 -22.5336263714 96.364010810600007 -17.7458581679 98.8181968098 -12.1443684266 99.678127191599998 -9.1664285505599992 100.153771088 -6.00175461166 100.19845569100001 -2.8289666115399998 100.19948233300001 -2.71933652926 100.199990855 -2.60969449139 100.199991877 -2.50002261243 + 243.59478752199999 6 265.100062267 3 286.60708227999999 3 308.56748184100002 3 309.35350848100001 6 +1 16.5 -31.699999999999999 1 0 +1 118.101209582 0 1 0 +7 0 0 1 2 2 165.07829155293481 1.3399276483031418e-11 165.07828876436528 1.1313705510753329 + -0.5656851612691205 2 0.56568542494923713 2 +1 63.601209581999996 0.56568542494924035 0 1 +1 243.59478752199996 0.56568542494923313 0 1 +1 172.601209582 0.56568542494924035 0 1 +1 309.35350848100001 -7.8509658214442275e-17 0 1 +7 0 0 1 2 2 49.03317902997 -5.7438285097077824e-06 49.033200759310006 1.1313646118023115 + 0 2 1.1313708498999999 2 +1 62.094959105999997 0.56568542494923801 0 1 +1 59.033201642400002 0.56568542494908647 4.9684850902306767e-17 1 +1 96.684515391499986 1.4066336215003684e-15 -1.2560739669453245e-14 1 +7 0 0 1 2 2 53.37749476927047 -2.2965691073295602e-06 53.377529676792747 1.1313683215033876 + 0 2 1.1313708498999999 2 +1 120.58639119996691 0.56568542491727436 -4.0621432090986698e-11 1 +1 82.400960695153657 0.56568542491819163 -1.6679712084484417e-13 1 +1 179.74754108900001 2.6255551268628525e-22 0 1 +7 0 0 1 2 2 112.75476836440001 -5.797709924593164e-06 112.7547062803 1.1313649121814109 + 0 2 1.1313708498999999 2 +1 206.34732287700001 0.5656854249492379 0 1 +1 147.551787093 0.56568542494923646 0 1 +1 325.41616118000002 -1.0048591859783999e-14 0 1 +7 0 0 1 2 2 72.143740679039993 1.1080362583015813e-07 72.143739493879991 1.1313709703894617 + 0 2 1.1313708498999999 2 +1 103.76581805399999 0.56568542494923801 0 1 +1 74.143739457099997 0.56568542494922902 0 1 +1 143.29775463799999 0.5 0 1 +1 0 0.5 0 1 +1 207.10225695400001 0.5 0 1 +1 109 0.5 0 1 +1 16.5 -32.5 1 0 +1 54.5 1 1 0 +1 254.45195737099999 0.5 0 1 +1 2.460956871328279e-29 0.5 -5.9435746756900001e-29 1 +7 0 0 1 2 2 207.10225695400001 1 254.45195737099999 1 + 109 2 156.12388980399999 2 +7 0 0 5 9 3 71 -32.5 75.712388980399993 -32.5 80.4247779608 -31.574724587399999 84.8946105096 -29.723259324099999 92.867471954300001 -24.367471954300001 98.223259324099999 -16.3946105096 100.07472458700001 -11.9247779608 101 -7.2123889803800001 101 -2.5 + 109 6 132.56194490199999 3 156.12388980399999 6 +1 107.808170647 0.5 0 1 +1 10 0.5 4.9219137426550267e-29 1 +1 101 2.5 4.2632564145599998e-15 1 +1 5 1 1 7.0295427457592257e-29 +1 132.87983823900001 0.5 0 1 +1 1.1985639207315868e-15 0.50000000000000111 -5.0296458652345425e-23 1 +7 0 0 1 2 2 107.808170647 1 132.87983823900001 1 + 166.12388980399999 2 191.01233394499999 2 +7 0 0 5 6 2 101 7.5 101 12.4776888283 99.654424864299997 17.455903910100002 96.956647293900005 21.945748933499999 93.192846020999994 25.470943655100001 88.797802672700001 27.807817643500002 + 166.12388980399999 6 191.01233394499999 6 +1 95.599764641600004 0.5 0 1 +1 29.023430645029901 0.50000000000000111 2.3971278498601878e-15 1 +1 75.984718560399998 34.620655314700002 -0.88294759285848323 0.46947156278672519 +1 14.511715322559104 1.0000000000000011 1 5.0297266445912371e-23 +1 137.70278531899999 0.5 0 1 +1 0 0.5 0 1 +7 0 0 1 2 2 95.599764641600004 1 137.70278531899999 1 + 220.03576459000001 2 262.06329297799999 2 +7 0 0 5 6 2 63.171634448200003 41.433492985900003 55.7500134434 45.379638872299999 47.845323711900001 48.4193390577 39.609065293299999 50.472868920099998 31.202585726199999 51.5 22.797080048600002 51.5 + 220.03576459000001 6 262.06329297799999 6 +1 166.58674222600001 0.5 0 1 +1 34.797080048600002 0.5 0 1 +1 5.3985400242999999 51.5 -1 0 +1 17.398540024300001 1 1 0 +1 252.01584080399999 0.5 0 1 +1 0 0.5 0 1 +7 0 0 1 2 2 166.58674222600001 1 252.01584080399999 1 + 296.86037302699998 2 381.68337467399999 2 +7 0 0 5 9 3 -12 51.5 -20.4823001647 51.5 -28.9646003294 49.834504257299997 -37.0102989174 46.501866783399997 -51.361449517799997 36.861449517799997 -61.001866783399997 22.5102989174 -64.334504257299997 14.4646003294 -66 5.9823001646899998 -66 -2.5 + 296.86037302699998 6 339.27187385000002 3 381.68337467399999 6 +1 98.517206313800003 0.5 0 1 +1 2 0.5 0 1 +1 -66 -3.5 0 -1 +1 1 1 1 0 +7 0 0 1 2 2 98.517206313800003 1 143.29775463799999 1 + 383.68337467399999 2 427.66567182400001 2 +7 0 0 5 6 2 -66 -4.5 -66 -13.296459430100001 -62.555579886700002 -22.101126014199998 -55.601126014199998 -29.055579886699999 -46.796459430100001 -32.5 -38 -32.5 + 383.68337467399999 6 427.66567182400001 6 +1 0 15.980613254816044 0 1 +1 4.1887902047861711 15.98061325481587 3.1401849173675167e-15 1 +1 -4.7123889803846888 15.839191898579017 1 -4.5234555469703365e-14 +2 8.7090243936400008e-28 -1.7763568394e-15 0 1 -1 0 11.199999999999999 +2 8.7090243936400008e-28 -8.8000000000000025 0 1 -1 0 11.199999999999999 +1 3.1415926535897927 15.980613254815903 0 1 +1 1.0471975511963774 15.980613254816079 -1.5700924586837781e-15 1 +1 -4.7123889803846897 16.122034611053568 1 -4.5234555469703352e-14 +1 -4.7123889803846897 -1.3 1 0 +1 -2.0943951023934151 15.839191898578644 1 2.8271597168564595e-15 +2 1.00974195868e-28 -2.3075552236599999e-15 1 0 -0 1 11.199999999999999 +2 1.00974195868e-28 -8.8000000000000025 1 0 -0 1 11.199999999999999 +1 -2.0943951023934146 16.122034611053273 1 2.2617277734851679e-15 +1 4.4408920985006262e-16 -1.3000000000004732 1 1.0043484894132574e-13 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 1.2999999999999998 1 0 +1 6.2831853071795862 16.122034611053355 -1 -4.5234555469703352e-14 +1 0 1.2999999999999998 1 0 +1 8.3775804095730013 16.1220346110536 -1 -6.6720969317812433e-14 +1 6.2831853071795862 15.980613254816044 0 1 +1 2.0943951023934146 15.98061325481587 -1.5700924586837584e-15 1 +1 3.1415926535897931 15.980613254815903 0 1 +1 5.2359877559832082 15.980613254816079 0 1 +1 10.995574287564274 15.839191898578944 -1 -4.4669123526332073e-14 +2 8.7090243936400008e-28 -1.7763568394e-15 0 1 -1 0 11.199999999999999 +2 8.7090243936400008e-28 -1.7763568394e-15 0 1 -1 0 11.199999999999999 +1 8.3775804095730013 15.839191898578648 -1 3.3925916602277511e-15 +2 7.5730646901200004e-29 -2.3075552236599999e-15 1 0 -0 1 11.199999999999999 +2 7.5730646901200004e-29 -2.3075552236599999e-15 1 0 -0 1 11.199999999999999 +1 0 -1.4000000000000004 1 0 +2 0 0 1 0 -0 1 10 +2 0 0 1 0 -0 1 10 +1 0 -1.4000000000000004 1 0 +2 0 0 1 0 -0 1 10 +2 0 0 1 0 -0 1 10 +1 10.448376736367599 13.859292911256547 -1 -3.1664188828792361e-14 +2 4.5562353437399997e-16 -10 1 0 -0 1 9.8000000000000007 +2 4.5562353437399997e-16 0 1 0 0 -1 9.8000000000000007 +1 8.353981633974163 13.859292911256107 -1 6.1632081827477094e-14 +2 4.5562353437399997e-16 -10 1 0 -0 1 9.8000000000000007 +2 4.5562353437399997e-16 0 1 0 0 -1 9.8000000000000007 +1 -2.0943951023934151 11.596551211459376 1 5.6543194337129189e-16 +2 6.5077460204099998e-16 -3.5523141753600001e-16 1 0 -0 1 8.1999999999999993 +2 6.5077460204099998e-16 -10 1 0 0 -1 8.1999999999999993 +1 0 11.596551211459378 1 0 +2 6.5077460204099998e-16 -3.5523141753600001e-16 1 0 -0 1 8.1999999999999993 +2 6.5077460204099998e-16 -10 1 0 0 -1 8.1999999999999993 +1 -4.7123889803846879 11.313708498984759 1 0 +1 -4.7123889803846879 1.2999999999999998 1 0 +1 8.9247779607693776 -8.3999999999995154 -1 0 +1 8.9247779607693793 -8.3999999999995154 -1 0 +1 3.1415926535897931 11.455129855222069 0 1 +1 1.0471975511963791 11.455129855222069 0 1 +1 0 11.455129855222069 0 1 +1 4.1887902047861711 11.455129855222069 0 1 +1 -2.0943951023934146 11.313708498984759 1 0 +1 0 1.2999999999999998 1 0 +1 4.2123889803846888 -8.3999999999995154 -1 0 +1 10.495574287564274 -8.3999999999995154 -1 0 +1 -2.0707963267951914 1.5707963267948926 1 1.9083328088779316e-15 +2 -5.2841545998399997e-16 -8.8000000000000007 1 0 -0 1 9.0999999999999996 +2 -5.2841545998399997e-16 0 1 0 -0 1 9.0999999999999996 +1 -5.2123889803849845 1.5707963267949125 1 -1.9083328088779316e-15 +2 -5.2841545998399997e-16 -8.8000000000000007 1 0 -0 1 9.0999999999999996 +2 -5.2841545998399997e-16 0 1 0 -0 1 9.0999999999999996 +1 8.3775804095730013 11.596551211459376 -1 5.6543194337129189e-16 +2 6.5077460204099998e-16 -3.5523141753600001e-16 1 0 -0 1 8.1999999999999993 +1 6.2831853071795862 11.596551211459378 -1 0 +2 6.5077460204099998e-16 -3.5523141753600001e-16 1 0 -0 1 8.1999999999999993 +1 0 -1.3 1 0 +1 8.3775804095730013 11.313708498984759 -1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 -2.0707963267946781 -6.1244997997999988 1 0 +1 5.8407075111029325 6.2831853071795862 -1 0 +1 6.2831853071795862 -0.97550020019947481 -1 0 +1 -2.0707963267948974 -6.1244997997999988 1 0 +1 8.3539816339744828 6.2831853071795862 -1 0 +1 12.566370614359172 -0.97550020019947481 -1 0 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 4.2123889803848744 -7.0999999999994694 0 -1 +1 4.2123889803846666 -7.0999999999995751 0 -1 +1 1.0707963267949339 -7.0999999999994339 0 -1 +1 0 -1.3 1 0 +1 6.2831853071795862 11.313708498984759 -1 0 +1 6.2831853071795862 -0.97550020019947481 -1 0 +1 6.2831853071795862 -0.97550020019947481 -1 0 +1 3.1415926535895737 0 0 1 +1 3.1415926535895728 0 0 1 +1 1.0707963267950824 -7.0999999999995325 0 -1 +1 2.0943951023934164 11.455129855222069 0 1 +1 6.2831853071795862 11.455129855222069 0 1 +1 5.2359877559832082 11.455129855222069 0 1 +1 3.1415926535897936 11.455129855222069 1.5700924586837781e-15 1 +1 0 13.152186130069769 0 1 +1 4.1887902047861711 13.152186130069753 0 1 +1 -4.7123889803846897 13.010764773832403 1 9.0469110939406702e-15 +2 1.3322676295499999e-15 2.2204460492499999e-15 0 1 -1 0 9.1999999999999993 +2 1.3322676295499999e-15 -6.5999999999999979 0 1 -1 0 9.1999999999999993 +2 1.3322676295499999e-15 -6.5999999999999979 0 1 -1 0 9.1999999999999993 +1 3.1415926535897931 13.152186130069799 0 1 +1 1.0471975511963794 13.152186130069817 1.5700924586837781e-15 1 +1 -4.7123889803846888 13.29360748630703 1 1.0177774980683253e-14 +1 -4.7123889803846888 -1.3 1 0 +1 -2.0943951023934151 13.010764773832392 1 1.0177774980683253e-14 +2 2.6645352590999998e-15 -1.84083345573e-17 1 0 -0 1 9.1999999999999993 +2 2.6645352590999998e-15 -6.5999999999999996 1 0 -0 1 9.1999999999999993 +2 2.6645352590999998e-15 -6.5999999999999996 1 0 -0 1 9.1999999999999993 +1 -2.0943951023934151 13.293607486307035 1 1.2439502754168421e-14 +1 0 -1.3000000000002025 1 4.297282769621818e-14 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 1.2999999999999998 1 0 +1 6.2831853071795862 13.293607486307078 -1 9.6123430373119649e-15 +1 0 1.2999999999999998 1 0 +1 8.3775804095730013 13.293607486307186 -1 -1.9790118017995212e-14 +1 6.2831853071795862 13.152186130069769 0 1 +1 2.0943951023934146 13.152186130069753 1.5700924586837682e-15 1 +1 3.1415926535897931 13.152186130069799 0 1 +1 5.2359877559832073 13.152186130069815 -3.1401849173675364e-15 1 +1 10.995574287564276 13.010764773832417 -1 9.0469110939406686e-15 +2 1.3322676295499999e-15 2.2204460492499999e-15 0 1 -1 0 9.1999999999999993 +2 1.3322676295499999e-15 -2.2204460492499999e-15 0 -1 -1 -0 9.1999999999999993 +2 1.3322676295499999e-15 -2.2204460492499999e-15 0 -1 -1 -0 9.1999999999999993 +1 8.3775804095730013 13.01076477383242 -1 1.1308638867425838e-14 +2 2.6645352590999998e-15 -1.84083345573e-17 1 0 -0 1 9.1999999999999993 +2 2.6645352590999998e-15 1.84083345573e-17 1 0 0 -1 9.1999999999999993 +2 2.6645352590999998e-15 1.84083345573e-17 1 0 0 -1 9.1999999999999993 +1 0 -1.4000000000000004 1 0 +2 0 0 1 0 0 -1 8 +2 0 0 1 0 -0 1 8 +2 0 0 1 0 -0 1 8 +1 0 -1.4000000000000004 1 0 +2 0 0 1 0 0 -1 8 +2 0 0 1 0 -0 1 8 +2 0 0 1 0 -0 1 8 +1 10.448376736367599 11.03086578651066 -1 -7.6333312355124428e-14 +2 0 -8 1 0 -0 1 7.7999999999999998 +2 0 0 1 0 0 -1 7.7999999999999998 +2 0 0 1 0 0 -1 7.7999999999999998 +1 8.3539816339744704 11.03086578651004 -1 2.8271597168564706e-14 +2 0 -8 1 0 -0 1 7.7999999999999998 +2 0 0 1 0 0 -1 7.7999999999999998 +2 0 0 1 0 0 -1 7.7999999999999998 +1 -2.0943951023934151 8.7681240867133603 1 -3.6187644375762681e-14 +2 5.6917383248299999e-16 -3.0773183653900002e-16 1 0 -0 1 6.2000000000000002 +2 5.6917383248299999e-16 -8 1 0 0 -1 6.2000000000000002 +2 5.6917383248299999e-16 -8 1 0 0 -1 6.2000000000000002 +1 0 8.7681240867131862 1 2.2617277734851675e-15 +2 5.6917383248299999e-16 -3.0773183653900002e-16 1 0 -0 1 6.2000000000000002 +2 5.6917383248299999e-16 -8 1 0 0 -1 6.2000000000000002 +2 5.6917383248299999e-16 -8 1 0 0 -1 6.2000000000000002 +1 -4.7123889803846897 8.4852813742385482 1 3.3925916602277511e-15 +1 -4.7123889803846897 1.2999999999999998 1 0 +1 8.9247779607693793 -8.4000000000006363 -1 0 +1 8.9247779607693793 -8.4000000000006363 -1 0 +1 3.1415926535897931 8.6267027304758841 0 1 +1 1.047197551196378 8.6267027304759374 7.8504622934188411e-16 1 +1 0 8.6267027304758734 0 1 +1 4.1887902047861711 8.6267027304758201 0 1 +1 -2.0943951023934146 8.4852813742386175 1 -1.0177774980683255e-14 +1 0 1.29999999999982 1 3.8166656177562201e-14 +1 4.2123889803846888 -8.4000000000006363 -1 0 +1 10.495574287564278 -8.4000000000006363 -1 0 +1 -2.0707963267952718 1.5707963267948866 1 1.9083328088778827e-15 +2 -2.2977359924999999e-16 -6.5999999999999988 1 0 -0 1 6.9000000000000004 +2 -2.2977359924999999e-16 8.881784197e-16 1 0 -0 1 6.9000000000000004 +2 -2.2977359924999999e-16 8.881784197e-16 1 0 -0 1 6.9000000000000004 +1 -5.2123889803850645 1.5707963267948841 1 1.8376538159564799e-15 +2 -2.2977359924999999e-16 -6.5999999999999988 1 0 -0 1 6.9000000000000004 +2 -2.2977359924999999e-16 8.881784197e-16 1 0 -0 1 6.9000000000000004 +2 -2.2977359924999999e-16 8.881784197e-16 1 0 -0 1 6.9000000000000004 +1 6.2831853071795862 8.7681240867131862 -1 2.2617277734851679e-15 +2 5.6917383248299999e-16 -3.0773183653900002e-16 1 0 -0 1 6.2000000000000002 +1 8.3775804095730013 8.7681240867133603 -1 -3.6187644375762681e-14 +2 5.6917383248299999e-16 -3.0773183653900002e-16 1 0 -0 1 6.2000000000000002 +1 0 -1.3 1 0 +1 8.3775804095730013 8.4852813742387454 -1 -3.7318508262505264e-14 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 -2.0707963267957745 -6.0744562647000002 1 0 +1 5.8407075111029325 6.2831853071795862 -1 0 +1 6.2831853071795862 -1.0255437352996919 -1 0 +1 -2.0707963267948974 -6.0744562647000002 1 0 +1 8.3539816339744828 6.2831853071795862 -1 0 +1 12.566370614359172 -1.0255437352996919 -1 0 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 4.2123889803838459 -7.1000000000000449 0 -1 +1 4.2123889803847456 -7.1000000000006178 0 -1 +1 1.0707963267948302 -7.1000000000006338 0 -1 +1 0 -1.3 1 0 +1 6.2831853071795862 8.485281374238566 -1 2.8271597168564599e-15 +1 6.2831853071795862 -1.0255437352996919 -1 0 +1 6.2831853071795862 -1.0255437352996919 -1 0 +1 3.1415926535906706 0 0 1 +1 3.1415926535906706 0 0 1 +1 1.0707963267939604 -7.0999999999995751 0 -1 +1 3.1415926535897931 8.6267027304758841 0 1 +1 5.2359877559832073 8.6267027304759374 -3.1401849173675562e-15 1 +1 6.2831853071795862 8.6267027304758752 0 1 +1 2.0943951023934146 8.6267027304758201 1.5700924586837584e-15 1 +1 8.9247779607693793 -8.4000000000006434 -1 0 +1 8.9247779607693793 -8.4000000000006434 -1 0 +1 4.2123889803846888 -8.4000000000006434 -1 0 +1 10.495574287564278 -8.4000000000006434 -1 0 +1 6.2831853071795862 -1.0255437352997057 -1 0 +1 12.566370614359172 -1.0255437352997057 -1 0 +1 4.2123889803838459 -7.1000000000000512 0 -1 +1 4.2123889803847456 -7.1000000000006178 0 -1 +1 1.0707963267948322 -7.1000000000006409 0 -1 +1 6.2831853071795862 -1.0255437352997057 -1 0 +1 6.2831853071795862 -1.0255437352997057 -1 0 +1 1.0707963267939604 -7.0999999999995751 0 -1 +1 -2.0707963267946776 -16 1 0 +2 0 -8 1 0 -0 1 8 +1 -2.0707963267948974 -16 1 0 +2 0 -8 1 0 -0 1 8 +1 -2.0707963267954783 8.768124086713204 1 -3.9580236035983114e-15 +2 -2.84586916241e-16 3.9130700983199998e-16 1 0 -0 1 6.2000000000000002 +1 -4.1651914291880141 8.76812408671322 1 -4.5234555469703359e-15 +2 -2.84586916241e-16 3.9130700983199998e-16 1 0 -0 1 6.2000000000000002 +1 1.0471975511968123 10.040916292848015 -3.6373808626234449e-14 1 +1 3.1415926535899295 10.040916292848001 -3.6286581267418539e-14 1 +1 4.1887902047866064 10.040916292847998 -3.6286581267418514e-14 1 +1 0 10.040916292848012 0 1 +1 10.448376736367599 8.7681240867132377 -1 -6.7851833204555046e-15 +2 -2.84586916241e-16 -8 1 0 -0 1 6.2000000000000002 +1 8.3539816339750637 8.7681240867132058 -1 -3.9580236035983114e-15 +2 -2.84586916241e-16 -8 1 0 -0 1 6.2000000000000002 +1 5.2359877559827739 10.040916292848021 3.6635490702682332e-14 1 +1 3.1415926535896568 10.040916292848003 3.6286581267418615e-14 1 +1 10.448376736367599 11.313708498984759 -1 0 +1 -2.070796326794897 27.200000000000063 1 -9.0469110939400375e-15 +1 2.0943951023929803 10.040916292847999 3.6286581267418615e-14 1 +1 6.2831853071795862 10.040916292848014 0 1 +1 8.3539816339742643 11.313708498984774 -1 -3.3925916602279882e-15 +1 -2.0707963267946776 27.200000000000003 1 0 +1 -2.0707963267946781 -8.6000000000000014 1 0 +2 0 -10 1 0 -0 1 8 +1 -2.0707963267948974 -8.6000000000000014 1 0 +2 0 -10 1 0 -0 1 8 +1 5.2359877559828263 14.000714267490235 2.5121479339410926e-14 1 +1 3.1415926535897092 14.000714267490279 2.5121479339410453e-14 1 +1 10.448376736367599 14.142135623730583 -1 5.4281466563643986e-14 +1 -2.0707963267948966 -8.7999999999991871 1 -1.1987157199471387e-13 +1 6.2831853071796049 -1.199999999999402 -1 0 +1 12.566370614359192 -1.199999999999402 -1 0 +1 2.0943951023930327 14.000714267490133 1.884110950455784e-14 1 +1 6.2831853071795862 14.000714267490086 0 1 +1 8.3539816339744846 14.142135623730722 -1 6.2197513770842125e-14 +1 -2.0707963267948974 -8.8000000000000007 1 0 +1 6.2831853071796067 -1.199999999999402 -1 0 +1 6.2831853071796067 -1.199999999999402 -1 0 +1 -2.070796326794897 -15.800000000000001 1 0 +1 -2.070796326794897 14.142135623730731 1 5.9935785997356959e-14 +1 6.2831853071795862 5.8000000000006162 -1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 1.0707963267949483 -9.9999999999994085 0 -1 +1 3.1415926535897931 -12.300000000000001 0 1 +1 3.1415926535897931 -12.300000000000001 0 1 +1 1.070796326794897 2.3000000000004133 0 -1 +1 6.2831853071795862 5.8000000000006162 -1 0 +1 0 -12.300000000000001 0 1 +1 6.2831853071795862 -12.300000000000001 0 1 +1 4.212388980384743 2.3000000000007952 0 -1 +1 -2.0707963267948983 -15.800000000000001 1 0 +1 -4.1651914291880141 14.14213562373117 1 -3.2229620772163627e-14 +1 12.566370614359172 5.8000000000006162 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 4.2123889803846666 -9.9999999999997122 0 -1 +1 6.2831853071795862 5.8000000000006162 -1 0 +1 1.0471975511967604 14.000714267490235 -2.512147933941061e-14 1 +1 3.141592653589877 14.000714267490281 -2.5121479339410768e-14 1 +1 4.188790204786554 14.000714267490135 -2.1981294421984422e-14 1 +1 0 14.000714267490086 0 1 +1 0 -4.000000330961484e-10 0 1 +1 6.2831853071795862 -4.000000330961484e-10 0 1 +1 -2.0707963267943708 -1.4000000003999986 1 0 +1 -2.0707963267943708 3.141592653589794 1 -1.6962958301141605e-15 +1 3.1415926535892655 -4.000000330961484e-10 0 1 +1 3.141592653589266 -4.000000330961484e-10 0 1 +1 -2.0707963267943708 1.3999999996000021 1 0 +1 -2.0707963267943703 3.1415926535897913 1 1.4135798584284669e-16 +1 -2.0707963267948974 -1.4000000003999986 1 0 +1 -5.212388980384163 3.1415926535897598 1 3.8166656177568588e-15 +1 -2.0707963267948974 1.3999999996000021 1 0 +1 -5.212388980384163 3.1415926535897629 1 2.6858017310140871e-15 +1 -2.0707963267948974 -2.0755002002000005 1 0 +1 8.3539816339744846 0 -1 0 +1 3.1415926535895737 0 0 1 +1 3.1415926535895737 0 0 1 +1 1.0707963267948961 -7 1 0 +2 0 8 1 0 -0 1 8 +1 1.0707963267948959 11.000000000000657 1 0 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535895728 -2 0 1 +1 3.1415926535895737 -2 0 1 +1 3.1415926535895782 16.000000000000899 0 1 +1 3.1415926535895782 16.000000000000899 0 1 +1 0 -2 0 1 +1 6.2831853071795862 -2 0 1 +8 -5 4.2679491924300006 +1 6.2831853071795862 16.000000000000753 0 1 +8 -5 4.2679491924300006 +1 0 16.000000000000753 0 1 +1 1.0707963267948961 2.2679491924300001 1 0 +1 -1.4424777960769388 3.141592653589794 1 -7.0678992921411488e-16 +1 1.0707963267948959 20.267949192430766 1 0 +1 -2.0707963267946776 -2.0755002002000005 1 0 +1 5.8407075111029325 0 -1 0 +1 -5.2123889803844712 -7 1 0 +2 0 8 1 0 -0 1 8 +1 -5.2123889803846906 11.000000000000657 1 0 +1 -5.2123889803844712 2.2679491924300001 1 0 +1 -5.2123889803844712 3.1415926535897887 1 4.2407395752849852e-16 +1 -5.2123889803846906 20.267949192430766 1 0 +1 3.1415926535895773 1.1336709349052398e-11 -3.9665661790632458e-15 1 +1 0 1.1327383475645547e-11 0 1 +1 0 1.1322942583547047e-11 0 1 +1 3.1415926535895764 1.1332268456953898e-11 -3.4707454066803213e-15 1 +1 -5.212388980385124 2.2459278598151329 1 7.0678992921401756e-16 +1 8.3539816339744846 0.89566479385800435 -1 -2.2263882770247687e-15 +1 -2.0707963267953304 2.24592785981514 1 -7.0678992921401736e-16 +1 5.8407075111029316 0.89566479385799147 -1 -8.1280841859623215e-16 +1 0.62831853071851607 -3.1415926535897931 8.0570875506043556e-15 1 +1 3.141592653590068 -3.1415926535897931 7.9331323575181205e-15 1 +1 3.7699111843083095 -3.1415926535897931 7.9331323575181473e-15 1 +1 0 -3.1415926535897931 0 1 +1 0 -1.6875389974302379e-14 0 1 +1 3.1415926535895533 -4.4408920985006262e-16 3.9665661790631732e-15 1 +1 3.1415926535895533 -7.1054273576010019e-15 3.9665661790631638e-15 1 +1 0 -1.2434497875801753e-14 0 1 +1 -5.212388980385124 4.0372574473644418 1 1.1308638867424278e-15 +1 8.3539816339744846 5.387520513321598 -1 0 +1 -2.0707963267953309 4.0372574473644427 1 1.4135798584280347e-15 +1 5.8407075111029325 5.3875205133215962 -1 5.6543194337129189e-16 +1 0.62831853071856703 3.1415926535916783 -8.1810427436905844e-15 1 +1 3.1415926535901191 3.1415926535916774 -8.4289531298630183e-15 1 +1 3.7699111843083593 3.1415926535916747 -7.933132357518111e-15 1 +1 0 3.1415926535916747 0 1 +1 3.141592653588773 -4.000000330961484e-10 0 1 +1 3.141592653588773 -4.000000330961484e-10 0 1 +1 -2.0707963267938774 1.3999999996000021 1 0 +1 -2.0707963267938774 3.1415926535897851 1 1.27222187258582e-15 +1 0 -4.000000330961484e-10 0 1 +1 6.2831853071795862 -4.000000330961484e-10 0 1 +1 -2.0707963267938774 -1.4000000003999986 1 0 +1 -2.0707963267938774 3.1415926535897913 1 2.8271597168573775e-16 +1 -2.0707963267948974 1.3999999996000021 1 0 +1 -5.21238898038367 3.1415926535897816 1 8.4814791505721329e-16 +1 -2.0707963267948974 -1.4000000003999986 1 0 +1 -5.21238898038367 3.1415926535897882 1 -1.413579858428689e-16 +1 -2.0707963267948974 -8.6000000000000014 1 0 +2 0 -8 1 0 -0 1 6 +1 -2.0707963267957745 -8.6000000000000014 1 0 +2 0 -8 1 0 -0 1 6 +1 0 0 0 1 +1 3.1415926535907834 -3.9968028886505635e-15 -2.1222884816716267e-14 1 +1 3.1415926535907834 -5.3290705182007514e-15 -2.1222884816716336e-14 1 +1 0 0 0 1 +1 -5.2123889803850352 4.1041434014810809 1 -1.4135798584280742e-15 +1 8.3539816339744828 5.3206345592338549 -1 -1.130863886742708e-15 +1 -2.0707963267952421 4.1041434014810712 1 0 +1 5.8407075111029325 5.3206345592338469 -1 2.8271597168564594e-16 +1 0.62831853071915222 3.1415926535933605 -2.5490530132469862e-14 1 +1 3.1415926535907031 3.1415926535933614 -2.5375188367164592e-14 1 +1 3.769911184308945 3.1415926535933596 -2.5375188367164545e-14 1 +1 0 3.1415926535933543 0 1 +1 3.1415926535906502 -8.9706020389712648e-13 2.1222884816716485e-14 1 +1 0 -8.9706020389712648e-13 0 1 +1 0 -9.0194518520547717e-13 0 1 +1 3.1415926535906511 -9.0194518520547717e-13 2.0761517755483458e-14 1 +1 -5.2123889803850352 2.1790419056985151 1 0 +1 8.3539816339744846 0.96255074794575468 -1 -2.2970672699461253e-15 +1 -2.0707963267952425 2.1790419056985151 1 0 +1 5.8407075111029325 0.96255074794573425 -1 7.0678992921411498e-16 +1 0.62831853071899235 -3.1415926535897931 2.5490530132469855e-14 1 +1 3.1415926535905436 -3.1415926535897931 2.5375188367164454e-14 1 +1 -3.5840704496664477 0 1 0 +1 7.3539816339744828 -2.1255437352999991 -1 0 +1 3.7699111843087851 -3.1415926535897931 2.5375188367164498e-14 1 +1 0 -3.1415926535897931 0 1 +1 -1.0707963267940186 0 1 0 +1 7.3539816339736053 -2.1255437352999991 -1 0 +1 -2.0707963267957745 -16 1 0 +2 0 -6 1 0 -0 1 6 +1 -2.0707963267948983 -16 1 0 +2 0 -6 1 0 -0 1 6 +1 -2.0707963267953371 5.9396969619670079 1 -2.2617277734848504e-15 +2 -1.5503856378e-16 1.16278922835e-16 1 0 -0 1 4.2000000000000002 +1 -4.1651914291880141 5.9396969619669973 1 2.8271597168564594e-16 +2 -1.5503856378e-16 1.16278922835e-16 1 0 -0 1 4.2000000000000002 +1 1.0471975511965155 7.2124891681017385 -9.4205547521057257e-15 1 +1 3.1415926535896332 7.2124891681017349 -9.0716453168425573e-15 1 +1 4.1887902047863088 7.2124891681017402 -9.071645316842551e-15 1 +1 0 7.212489168101742 0 1 +1 8.3539816339749233 5.9396969619670124 -1 -3.1098756885416703e-15 +2 0 -6.0000000000000009 1 0 -0 1 4.2000000000000002 +1 10.448376736367599 5.9396969619670035 -1 -2.8271597168564594e-16 +2 0 -6.0000000000000009 1 0 -0 1 4.2000000000000002 +1 3.1415926535906706 0 0 1 +1 3.1415926535906706 0 0 1 +1 -5.2123889803855672 -5.25 1 0 +2 0 6 1 0 -0 1 6 +1 -2.0707963267948974 13.499999999999826 1 0 +1 -5.2123889803846906 13.500000000000428 1 0 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 0 -1.5 0 1 +1 6.2831853071795862 -1.5 0 1 +8 -3.75 3.0179491924300001 +1 3.1415926535906706 17.250000000000323 0 1 +8 -3.75 3.0179491924300001 +1 3.1415926535906706 17.250000000000323 0 1 +8 -3.75 3.0179491924300001 +1 6.2831853071795862 17.250000000000426 0 1 +8 -3.75 3.0179491924300001 +1 0 17.250000000000426 0 1 +1 3.1415926535906706 -1.5 0 1 +1 3.1415926535906706 -1.5 0 1 +1 6.2831853071804877 17.249999999999826 0 1 +1 9.0283336362511247e-13 17.249999999999826 0 1 +1 3.1415926535907635 17.24999999999995 0 1 +1 3.1415926535907635 17.24999999999995 0 1 +1 -5.2123889803855672 1.5179491924300001 1 0 +1 -5.2123889803855672 3.1415926535897944 1 -2.8271597168556706e-16 +1 -2.0707963267948974 20.267949192429651 1 0 +1 -5.2123889803846906 20.267949192430255 1 0 +1 -2.0707963267948974 26.200000000000003 1 0 +1 10.448376736367599 8.4852813742385749 -1 -5.6543194337129189e-16 +1 1.0707963267948957 -5.25 1 0 +2 0 6 1 0 -0 1 6 +1 -2.0707963267948974 13.499999999999826 1 0 +1 1.0707963267948959 13.500000000000428 1 0 +1 1.0707963267948957 1.5179491924300001 1 0 +1 -1.442477796076939 3.1415926535897922 1 1.4135798584282297e-16 +1 -2.0707963267948974 20.267949192429651 1 0 +1 1.0707963267948959 20.267949192430255 1 0 +1 -2.0707963267957745 26.200000000000003 1 0 +1 8.3539816339753603 8.485281374238582 -1 -3.3925916602268045e-15 +1 6.2831853071795862 7.2124891681017482 0 1 +1 2.0943951023932774 7.2124891681017429 9.4205547521057462e-15 1 +1 3.1415926535899539 7.2124891681017376 9.4205547521057383e-15 1 +1 5.2359877559830705 7.2124891681017429 9.0716453168425636e-15 1 +1 5.235987755983027 11.172287142744034 1.2560739669429835e-14 1 +1 3.1415926535899099 11.172287142743958 7.8504622933936478e-15 1 +1 10.448376736367599 11.313708498984772 -1 -1.6962958301138752e-15 +1 -2.070796326794897 -8.7999999999992795 1 -1.0630120535379544e-13 +1 6.2831853071796067 -1.2000000000000193 -1 0 +1 12.566370614359194 -1.2000000000000193 -1 0 +1 2.0943951023932339 11.172287142743796 9.4205547520723774e-15 1 +1 6.2831853071795862 11.172287142743869 0 1 +1 8.3539816339742643 11.31370849898466 -1 2.7706165225195238e-14 +1 -2.0707963267946776 -8.8000000000000007 1 0 +1 6.2831853071796058 -1.2000000000000193 -1 0 +1 6.2831853071796058 -1.2000000000000193 -1 0 +1 -2.0707963267946776 -15.800000000000001 1 0 +1 -2.0707963267946781 11.31370849898466 1 2.7706165225195228e-14 +1 6.2831853071795862 5.800000000000006 -1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 1.070796326794873 -10.000000000000602 0 -1 +1 3.1415926535895737 -12.300000000000001 0 1 +1 3.1415926535895737 -12.300000000000001 0 1 +1 1.0707963267951812 2.2999999999998022 0 -1 +1 1.0707963267950216 2.2999999999997036 0 -1 +1 6.2831853071795862 5.800000000000006 -1 0 +1 0 -12.300000000000001 0 1 +1 6.2831853071795862 -12.300000000000001 0 1 +1 4.2123889803848638 2.3000000000003826 0 -1 +1 4.2123889803850236 2.300000000000284 0 -1 +1 -2.0707963267948974 -15.800000000000001 1 0 +1 -4.1651914291880141 11.313708498985278 1 -7.6333312355124377e-14 +1 12.566370614359172 5.800000000000006 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 4.2123889803847288 -10.000000000000743 0 -1 +1 6.2831853071795862 5.800000000000006 -1 0 +1 1.0471975511965592 11.172287142744036 -1.1775693440090618e-14 1 +1 3.1415926535896759 11.17228714274396 -6.2803698347149175e-15 1 +1 4.1887902047863523 11.172287142743798 -1.2560739669429835e-14 1 +1 0 11.172287142743873 0 1 +1 6.2831853071796067 -1.1999999999999136 -1 0 +1 12.566370614359194 -1.1999999999999136 -1 0 +1 6.2831853071796058 -1.1999999999999136 -1 0 +1 6.2831853071796058 -1.1999999999999136 -1 0 +1 6.2831853071795862 5.8000000000001046 -1 0 +1 1.0707963267948095 -10.000000000000508 0 -1 +1 6.2831853071795862 5.8000000000001046 -1 0 +1 12.566370614359172 5.8000000000001046 -1 0 +1 4.2123889803847918 -10.00000000000065 0 -1 +1 6.2831853071795862 5.8000000000001046 -1 0 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 -6 1 0 +2 0 0 1 0 -0 1 23 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -6 1 0 +2 0 0 1 0 -0 1 23 +1 0 -1.4100000000099999 1 0 +2 0 0 1 0 -0 1 21.399999999999999 +1 -2.0707963267948974 -0.050000000749593709 1 0 +1 -2.0707963267948966 -0.050000000749593709 1 0 +1 0 -1.4100000000099999 1 0 +2 0 0 1 0 -0 1 21.399999999999999 +1 4.2123889803846897 -0.050000000749593709 1 0 +1 -2.0707963267948974 -0.050000000749593709 1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 1.0707963267949112 1.3599999992609098 0 1 +1 0 0.18999999999000017 1 0 +2 0 0 1 0 -0 1 21.399999999999999 +8 3.1415926535897931 5.2123889803824301 +1 -2.0707963267926375 1.54999999925 1 0 +2 0 -8.8000000000000007 1 0 -0 1 21.399999999999999 +1 3.1415926535875336 -7.5000006205527825e-10 0 1 +1 3.1415926535875336 -7.5000006205527825e-10 0 1 +1 5.212388980382439 -1.3600000000097872 0 1 +8 5.2123889803824301 6.2831853071795916 +1 -2.0707963267948974 1.54999999925 1 0 +2 0 -8.8000000000000007 1 0 -0 1 21.399999999999999 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 4.2123889803846835 1.3599999992605714 0 1 +1 0 0.18999999999000017 1 0 +2 0 0 1 0 -0 1 21.399999999999999 +8 0 2.0707963267926339 +1 4.2123889803846941 1.54999999925 1 0 +2 0 -8.8000000000000007 1 0 -0 1 21.399999999999999 +1 0 -7.5000006205527825e-10 0 1 +1 6.2831853071795862 -7.5000006205527825e-10 0 1 +1 2.0707963267926246 -1.3600000000100199 0 1 +8 2.0707963267926375 3.1415926535897931 +1 -2.0707963267926375 1.54999999925 1 0 +2 0 -8.8000000000000007 1 0 -0 1 21.399999999999999 +1 0 -1.5 1 0 +2 0 0 1 0 -0 1 11.5 +2 0 -8.8000000000000007 1 0 -0 1 11.5 +1 0 -1.5 1 0 +2 0 0 1 0 -0 1 11.5 +2 0 -8.8000000000000007 1 0 -0 1 11.5 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 1.4999999999999996 1 0 +2 0 0 1 0 -0 1 11.5 +1 0 1.4999999999999996 1 0 +2 0 0 1 0 -0 1 11.5 +1 -2.0707963267926375 -1.5500000007500001 1 0 +2 0 -21.399999999999999 1 0 -0 1 21.399999999999999 +2 0 -8.8000000000000007 1 -5.5511151231299994e-17 5.5511151231299994e-17 1 21.399999999999999 +1 -2.0707963267948974 -1.5500000007500001 1 0 +2 0 -21.399999999999999 1 0 -0 1 21.399999999999999 +2 0 -8.8000000000000007 1 -5.5511151231299994e-17 5.5511151231299994e-17 1 21.399999999999999 +1 -5.2123889803847101 4.7123889803847012 1 -1.6962958301138649e-15 +2 -9.9045007336499992e-16 -21.399999999999995 1 0 -0 1 9.4000000000000004 +1 -5.2123889803846897 1.5707963267948966 1 0 +2 0 -8.7999999999999972 1 -5.5511151231299994e-17 5.5511151231299994e-17 1 9.3999999999999986 +1 -2.0707963267949174 4.7123889803846959 1 -1.6962958301138649e-15 +2 -9.9045007336499992e-16 -21.399999999999995 1 0 -0 1 9.4000000000000004 +8 2.0707963267967844 5.2123889803850467 +1 -2.0707963267967844 1.5707963267949072 1 -3.7459866248343832e-15 +2 0 -8.7999999999999972 1 -5.5511151231299994e-17 5.5511151231299994e-17 1 9.3999999999999986 +1 0 0 0 1 +1 3.1415926535898175 -4.4408920985006262e-16 -8.4814791505633183e-16 1 +1 -5.2123889803847332 3.1415926535897962 1 -5.6543194337128439e-16 +1 -2.0707963267948979 -0.95000000075000013 1 0 +1 3.1415926535898167 -3.1086244689504383e-15 -8.4814791505633667e-16 1 +1 0 0 0 1 +1 -2.0707963267949396 3.1415926535897949 1 -8.4814791505692634e-16 +1 -2.0707963267949396 -0.95000000075000013 1 0 +1 0 -7.5000006205527825e-10 0 1 +1 6.2831853071795862 -7.5000006205527825e-10 0 1 +1 3.1415926535898357 -7.5000006205527825e-10 0 1 +1 3.1415926535898357 -7.5000006205527825e-10 0 1 +1 -2.0707963267949401 1.2499999992499997 1 0 +1 -2.0707963267949401 3.1415926535897953 1 -9.8950590089974727e-16 +1 -2.0707963267948974 1.2499999992499997 1 0 +1 -5.2123889803847332 3.1415926535898029 1 -1.8376538159566732e-15 +1 0 4.1922021409845911e-12 0 1 +1 3.1415926535900773 4.1922021409845911e-12 6.5024673487872161e-15 1 +1 3.1415926535900773 4.1922021409845911e-12 6.5024673487872201e-15 1 +1 0 4.1922021409845911e-12 0 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 -6 1 0 +2 0 0 1 0 -0 1 17 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -6 1 0 +2 0 0 1 0 -0 1 17 +1 0 -1.4100000000099999 1 0 +2 0 0 1 0 -0 1 15.4 +1 -2.0707963267948974 -0.050000000749600579 1 0 +1 -2.0707963267948974 -0.050000000749600579 1 0 +1 0 -1.4100000000099999 1 0 +2 0 0 1 0 -0 1 15.4 +1 4.2123889803846888 -0.050000000749600579 1 0 +1 -2.0707963267948974 -0.050000000749600579 1 0 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 1.0707963267949336 1.3599999992611593 0 1 +1 1.0707963267948986 1.3599999992606335 0 1 +1 0 0.18999999999000017 1 0 +2 0 0 1 0 -0 1 15.4 +8 3.1415926535897931 5.2123889803847856 +1 -2.0707963267949929 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +1 3.1415926535898886 -7.5000006205527825e-10 0 1 +1 3.1415926535898886 -7.5000006205527825e-10 0 1 +1 5.2123889803847723 -1.3600000000095234 0 1 +8 5.2123889803847856 6.2831853071796111 +1 -2.0707963267948983 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 4.2123889803846613 1.3599999992608418 0 1 +1 4.2123889803846977 1.3599999992603236 0 1 +1 0 0.18999999999000017 1 0 +2 0 0 1 0 -0 1 15.4 +8 0 2.070796326794957 +1 4.2123889803847128 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +1 0 -7.5000006205527825e-10 0 1 +1 6.2831853071795862 -7.5000006205527825e-10 0 1 +1 2.0707963267949907 -1.3600000000096868 0 1 +8 2.0707963267949929 3.1415926535897931 +1 -2.0707963267949929 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +1 6.2831853071795862 1.5 -1 0 +2 0 0 1 0 -0 1 9.5 +2 0 -6.5999999999999996 1 0 -0 1 9.5 +2 0 -6.5999999999999996 1 0 -0 1 9.5 +1 6.2831853071795862 1.5 -1 0 +2 0 0 1 0 -0 1 9.5 +2 0 -6.5999999999999996 1 0 -0 1 9.5 +2 0 -6.5999999999999996 1 0 -0 1 9.5 +1 -3.1415926535897931 -1.4999999999999996 1 0 +2 0 0 -1 0 -0 -1 9.5 +1 3.1415926535897931 0 0 1 +1 3.1415926535897927 0 0 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535897931 -1.4999999999999996 1 0 +2 0 0 -1 0 -0 -1 9.5 +1 -2.0707963267948974 -0.050000000749082195 1 0 +1 -2.0707963267948974 -0.050000000749082195 1 0 +1 4.2123889803846888 -0.050000000749082195 1 0 +1 -2.0707963267948974 -0.050000000749082195 1 0 +8 3.1415926535897931 5.2123889803847856 +1 -2.0707963267949929 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +1 5.2123889803847625 -1.3600000000100279 0 1 +8 5.2123889803847856 6.2831853071795551 +1 -2.0707963267948983 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +8 0 2.0707963267949854 +1 4.2123889803846568 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +1 2.0707963267950014 -1.3600000000101922 0 1 +8 2.0707963267949929 3.1415926535897931 +1 -2.0707963267949929 1.54999999925 1 0 +2 0 -6.5999999999999996 1 0 -0 1 15.4 +1 -2.0707963267949929 -1.5500000007500001 1 0 +2 0 -15.4 1 0 -0 1 15.4 +2 -73 -26.799999999999997 1 -5.5511151231299994e-17 5.5511151231299994e-17 1 15.399999999999999 +2 -73 15.199999999999999 1 -5.5511151231299994e-17 5.5511151231299994e-17 1 15.399999999999999 +1 -2.0707963267948983 -1.5500000007500001 1 0 +2 0 -15.4 1 0 -0 1 15.4 +2 -73 -26.799999999999997 1 -5.5511151231299994e-17 5.5511151231299994e-17 1 15.399999999999999 +2 -73 15.199999999999999 1 -5.5511151231299994e-17 5.5511151231299994e-17 1 15.399999999999999 +1 -3.1415926535897931 1.5707963267948994 1 0 +2 -73 -26.800000000000001 1 0 -0 1 7.3999999999999986 +2 0 -15.400000000000004 1 5.5511151231299994e-17 -5.5511151231299994e-17 1 7.4000000000000004 +1 0 1.5707963267948994 1 0 +2 -73 -26.800000000000001 1 0 -0 1 7.3999999999999986 +2 0 -15.400000000000004 1 5.5511151231299994e-17 -5.5511151231299994e-17 1 7.4000000000000004 +1 -5.2123889803847039 4.7123889803847012 1 -1.6962958301138694e-15 +2 -6.3307413543499999e-16 -15.400000000000002 1 0 -0 1 7.2000000000000002 +1 -2.0707963267949099 4.7123889803846764 1 3.3925916602277365e-15 +2 -6.3307413543499999e-16 -15.400000000000002 1 0 -0 1 7.2000000000000002 +1 0 0 0 1 +1 3.1415926535898109 -4.4408920985006262e-16 -8.4814791505758879e-16 1 +1 -5.2123889803847332 3.1415926535897962 1 -5.65431943371284e-16 +1 -2.0707963267948974 -0.95000000075000013 1 0 +1 3.14159265358981 -1.3322676295501878e-15 -8.4814791505759076e-16 1 +1 0 0 0 1 +1 -2.0707963267949392 3.1415926535897944 1 -5.65431943371284e-16 +1 -2.0707963267949392 -0.95000000075000013 1 0 +1 0 -7.5000006205527825e-10 0 1 +1 6.2831853071795862 -7.5000006205527825e-10 0 1 +1 3.1415926535898357 -7.5000006205527825e-10 0 1 +1 3.1415926535898357 -7.5000006205527825e-10 0 1 +1 -2.0707963267949401 1.2499999992499997 1 0 +1 -2.0707963267949401 3.1415926535897971 1 -1.8376538159566736e-15 +1 -2.0707963267948974 1.2499999992499997 1 0 +1 -5.2123889803847332 3.1415926535898042 1 -2.1203697876423155e-15 +1 0 8.8491436400772727e-12 0 1 +1 3.1415926535901511 8.8522522645462232e-12 1.0743206924115134e-14 1 +1 3.1415926535901506 8.8551388444102486e-12 1.0743206924115152e-14 1 +1 0 8.8522522645462232e-12 0 1 +1 0 1.5707963267948994 1 0 +2 -73 15.199999999999999 1 0 -0 1 7.3999999999999986 +2 0 -15.400000000000004 1 5.5511151231299994e-17 -5.5511151231299994e-17 1 7.4000000000000004 +1 -3.1415926535897931 1.5707963267948994 1 0 +2 -73 15.199999999999999 1 0 -0 1 7.3999999999999986 +2 0 -15.400000000000004 1 5.5511151231299994e-17 -5.5511151231299994e-17 1 7.4000000000000004 +1 6.7831853071795862 -2.0471392214055937e-15 -1 3.9274490624344521e-16 +2 0 0 1 0 -0 1 10.589384154299999 +1 6.7831853071797985 8.1329470921634783e-16 -1 -3.9274490624339236e-16 +2 0 0 1 0 -0 1 10.589384154299999 +1 -2.070796326794897 -9.5 1 0 +2 0 0 1 0 -0 1 8.7999999999999972 +1 -2.0707963267929452 -9.5 1 0 +2 0 0 1 0 -0 1 8.7999999999999972 +7 0 0 1 2 2 0.78539063586838642 2 0 2 + 24.756193660499999 2 49.5123873211 2 +7 0 0 5 6 2 -77.420310216800004 -35.920310216799997 -80.863544493899994 -32.477075939700001 -83.630701301599998 -28.3577641933 -85.543882073600003 -23.738937226099999 -86.5 -18.8694686131 -86.5 -14 + 24.756193660499999 6 49.5123873211 6 +1 -3.5548453070077812e-11 0 1 0 +7 0 0 5 6 2 -77.365502634999999 -35.974981103600001 -77.376477798099998 -35.9640606185 -77.3874461435 -35.953133281600003 -77.398407665500002 -35.9421990986 -77.409362358500005 -35.931258075000002 -77.420310216800004 -35.920310216799997 + 24.677480660699999 6 24.756193660499999 6 +1 -1.9456542001790292e-15 0 1 0 +7 0 0 5 6 2 -55.5 -45 -60.353986003400003 -45 -65.207972006899993 -44.049952414499998 -69.813699537000005 -42.148921308600002 -73.924655812099999 -39.3986856868 -77.365502634999999 -35.974981103600001 + 0 6 24.677480660699999 6 +7 0 0 5 6 2 53.5 -45 31.699999999999999 -45 9.9000000000000004 -45 -11.9 -45 -33.700000000000003 -45 -55.5 -45 + 0 6 109 6 +7 0 0 5 6 2 0 0 21.800000000000001 0 43.600000000000001 0 65.400000000000006 0 87.200000000000003 0 109 0 + 0 6 109 6 +7 0 0 1 2 2 1.5707887992667127 2 7.5275281845383937e-06 2 + 0 2 52.706734890200003 2 +7 0 0 5 9 3 86.5 -12 86.5 -17.183627878399999 85.482197046099998 -22.367255756799999 83.445585256499996 -27.284071560600001 77.554219149700003 -36.054219149700003 68.784071560599997 -41.945585256500003 63.867255756799999 -43.982197046099998 58.683627878400003 -45 53.5 -45 + 0 6 26.353367445100002 3 52.706734890200003 6 +1 86.5 -6.9992591740399996 0 -1 +1 59.999259174039999 52 1 0 +7 0 0 1 2 2 1.082111757038257 2 0 2 + 0 2 28.834167653600002 2 +7 0 0 5 6 2 72.706232063000002 20.958205170700001 77.674548047100004 18.3165126335 81.929282422 14.331497071999999 84.978940591300002 9.2560050281099997 86.500015347200005 3.6284438144700002 86.5 -1.99851834808 + 0 6 28.834167653600002 6 +7 0 0 5 6 2 47.082969087899997 34.5823357644 52.207621682899997 31.857509645699999 57.332274278 29.132683526899999 62.456926873 26.407857408200002 67.581579468000001 23.683031289399999 72.706232063000002 20.958205170700001 + 0 6 29.0201402464 6 +7 0 0 1 2 2 0.28847929844518111 2 0 2 + 17.907681323311699 2 43.710801788600001 2 +7 0 0 5 6 2 23.0000015518 43.222180868400002 28.032290530600001 42.200987762300002 32.990839903000001 40.816879762500001 37.840922780699998 39.076902099599998 42.549049793400002 36.9930634157 47.082969087899997 34.5823357644 + 17.9076813233 6 43.710801788600001 6 +1 -5.1756889450789954e-18 0 1 0 +7 0 0 5 6 2 5.2999999999999998 45 8.8637397867299992 45 12.4276487353 44.821590245800003 15.9795444001 44.464822848399997 19.507531426700002 43.930901378999998 23.0000015518 43.222180868400002 + 0 6 17.9076813233 6 +7 0 0 5 6 2 -29.5 45 -22.539999999999999 45 -15.58 45 -8.6199999999999992 45 -1.6599999999999999 45 5.2999999999999998 45 + 0 6 34.799999999999997 6 +7 0 0 5 6 2 0 0 6.9600000000000009 0 13.92 0 20.880000000000003 0 27.84 0 34.799999999999997 0 + 0 6 34.799999999999997 6 +1 6.1072783247598822e-16 0 1 0 +7 0 0 5 9 3 -86.5 -12 -86.5 -3.04646093727 -84.741976716099998 5.90707812546 -81.224192715800001 14.3997599683 -71.048196713199999 29.548196713199999 -55.899759968300003 39.724192715800001 -47.4070781255 43.241976716099998 -38.453539062700003 45 -29.5 45 + 0 6 45.519452859700003 3 91.038905719400006 6 +1 -86.5 -13 0 1 +1 -84.5 -13 0 -1 +1 1 0 1 0 +1 -1.5707963267948966 7 1 0 +2 -29.5 -12 1 0 -0 1 55 +1 -12.1 43 1 0 +1 17.399999999999999 0 1 0 +1 -1.0821041362360615 7 1 0 +2 5.2999999999999998 -44 1 0 -0 1 87 +1 58.955657449900002 26.004375281800002 0.8829475928588979 -0.46947156278594571 +1 14.51007012321894 0 1 0 +1 -6.2831825797266694 7 1 0 +2 60.5 -1.9984474343 1 0 -0 1 24 +1 84.5 -6.9992564465899996 0 -1 +1 5.0007435534199995 0 1 0 +1 -4.7123889803846897 7 1 0 +2 53.5 -12 1 0 -0 1 31 +1 -1 -43 1 0 +1 54.5 0 1 0 +1 -3.1415926535897931 7 1 0 +2 -55.5 -14 1 0 -0 1 29 +1 -2.0707963267948974 3 1 0 +2 0 -8.8000000000000007 1 0 -0 1 23 +1 -2.0707963267945773 3 1 0 +2 0 -8.8000000000000007 1 0 -0 1 23 +1 0 -9.75 0 1 +1 6.2831853071795862 -9.75 0 1 +1 3.1415926535900205 -9.75 0 1 +1 3.1415926535900205 -9.75 0 1 +1 -2.0707963267929452 2.3999999999999986 1 0 +1 -2.0707963267929452 3.1415926535897811 1 2.2617277734850035e-15 +1 -2.070796326794897 2.3999999999999986 1 0 +1 -5.2123889803849179 3.1415926535897953 1 -4.2407395752873262e-16 +1 0 -1.7097434579227411e-11 0 1 +1 3.1415926535915513 -1.7097434579227411e-11 8.1987631787945035e-14 1 +1 3.1415926535901266 -6.0973448512413597e-11 1.5266662470432296e-14 1 +1 0 -6.0973448512413597e-11 0 1 +1 0 -1.5707963267948937 0 1 +1 3.141592653589794 -1.5707963267948937 0 1 +1 3.1415926535897931 -3.1415926535897905 0 1 +1 0 -3.1415926535897905 0 1 +1 0 3.1415926535897931 1 -4.2407395752846889e-16 +1 0 -30.100000000000001 1 0 +1 -3.1415926535897931 3.1415926535897962 1 -9.8950590089976048e-16 +1 0 -30.100000000000001 1 0 +1 -3.1415926535897931 0.35000000000000142 1 0 +2 -73 -26.800000000000001 1 0 -0 1 17 +1 -90 -5.7999999999999998 0 -1 +1 21 0 1 0 +1 -56 -5.7999999999999998 0 1 +1 21 0 1 0 +1 0 0.35000000000000142 1 0 +2 -73 15.199999999999999 1 0 -0 1 17 +1 0 -1.5707963267948937 0 1 +1 3.1415926535897931 -1.5707963267948937 0 1 +1 3.1415926535897931 -3.1415926535897905 0 1 +1 0 -3.1415926535897905 0 1 +1 0 3.1415926535897931 1 -4.2407395752846889e-16 +1 0 -30.100000000000001 1 0 +1 -3.1415926535897931 3.1415926535897793 1 2.1203697876423446e-15 +1 0 -30.100000000000001 1 0 +1 3.1415926535903567 -4.0515146793040913e-11 -7.0678992919588478e-15 1 +1 0 -4.0515146793040913e-11 0 1 +1 -2.0707963267942446 6.2831853071795862 1 0 +1 -2.0707963267942446 2.8000000000000007 1 0 +1 0 -4.0522252220398514e-11 0 1 +1 3.1415926535903562 -4.0522252220398514e-11 -7.0678992919588162e-15 1 +1 -2.0707963267954272 4.7123889803846897 1 0 +1 -2.0707963267954272 4.7123889803846897 1 0 +1 -5.2123889803840378 6.2831853071795862 1 0 +1 -2.070796326794897 2.8000000000000007 1 0 +1 -5.2123889803852199 4.7123889803846897 1 0 +1 -5.2123889803852199 4.7123889803846897 1 0 +1 3.1415926535894734 2.6499999999999986 0 1 +1 3.1415926535894734 2.6499999999999986 0 1 +1 0 2.6499999999999986 0 1 +1 6.2831853071795862 2.6499999999999986 0 1 +1 -2.0707963267945773 2.8000000000000007 1 0 +1 -2.0707963267945773 3.1415926535897953 1 -2.5444437451710733e-15 +1 -2.0707963267948974 2.8000000000000007 1 0 +1 -5.2123889803843699 3.1415926535897563 1 3.9580236035994474e-15 +1 3.1415926535903576 -8.4376949871511897e-15 -7.3506152640163808e-15 1 +1 0 0 0 1 +1 0 0 0 1 +1 3.141592653590358 -2.2204460492503131e-15 -7.350615264016376e-15 1 +1 -1.5707963267948966 21 1 0 +1 0 7.8539816339744828 0 -1 +1 0 0 0 1 +1 21 -0.19999999999999929 -1 0 +1 -1.5707963267948966 -21 1 0 +1 3.1415926535897927 7.8539816339744828 0 -1 +1 1.5707963267948966 0 0 1 +1 0 0 0 1 +1 -3.1415926535897931 6.2831853071795862 1 0 +1 -3.1415926535897931 -25.199999999999999 1 0 +1 0 3.1415926535897931 0 1 +1 3.1415926535897931 21 -1 0 +1 -3.1415926535897931 4.7123889803846968 1 -2.2617277734851679e-15 +1 -3.1415926535897931 4.7123889803846826 1 2.2617277734851679e-15 +1 0 0 0 1 +1 21 -0.19999999999999929 -1 0 +1 -4.7123889803846897 -21 1 0 +1 3.1415926535897936 10.995574287564276 0 -1 +1 1.5707963267948966 0 0 1 +1 0 0 0 1 +1 0 6.2831853071795862 1 0 +1 0 -25.199999999999999 1 0 +1 0 4.7123889803846897 1 0 +1 0 4.7123889803846968 1 -2.2617277734851668e-15 +1 3.1415926535897931 0 0 1 +1 0 0.35000000000000142 0 -1 +1 0 0 0 1 +1 42 0.35000000000000142 0 -1 +1 0 0.15000000000000213 1 0 +1 0 3.1415926535897931 1 -2.9685177026992816e-15 +1 1.5707963267948966 0 0 1 +1 21 0.19999999999999929 1 0 +1 3.1415926535897931 0.25 0 -1 +1 0 0.10000000000000142 0 1 +1 0 0 0 1 +1 42 0.35000000000000142 0 -1 +1 -3.1415926535897931 0.15000000000000213 1 0 +1 -3.1415926535897931 3.1415926535897865 1 2.8271597168564599e-16 +1 1.5707963267948966 0 0 1 +1 21 0.19999999999999929 1 0 +1 3.1415926535897931 3.14159265358979 0 1 +1 1.5707963267948966 -21 -1 0 +1 0 3.1415926535897918 0 1 +1 1.5707963267948966 21 -1 0 +1 0 -21 1 0 +1 3.1415926535897944 4.7123889803846897 0 -1 +1 0 3.1415926535897931 0 1 +1 1.5707963267948966 21 -1 0 +1 -1.9456542001790292e-15 10.5 0 1 +1 109 10.5 0 1 +1 24.756193660500109 10.5 1.0658140967123561e-14 1 +1 0.78539063586838642 -8.5 0 -1 +7 0 0 1 2 2 -1.9456542001790292e-15 1.0000000065000023 24.756193660500006 1.0000000065000307 + 0 2 34.431854355099993 2 +7 0 0 4 5 2 3914.9876571984391 6588.9357458108316 3919.5369442992082 6592.9795689334778 3923.0306047493782 6598.2204543072085 3924.9814343375106 6604.2088212173994 3925.3388513440896 6610.2850677279075 + 0 5 34.4318543551 5 +1 0 -0.60000000000000142 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 9.5 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0.60000000000000142 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 9.5 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 -0.60000000000000142 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 9.5 +1 0 0.60000000000000142 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 9.5 +1 0 7.2999999999999972 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 8 +1 0 7.2999999999999972 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 8 +1 0 -18.600000000000001 0 -1 +1 0 6.3999999999999986 -0 -1 +1 3.1415926535897931 -18.600000000000001 0 -1 +1 42 6.3999999999999986 -0 -1 +1 -22 -1.00000000006 -1.69176841848e-16 -1 +1 21.000000000059998 13 1 0 +1 1.5707963267948957 -4.3500000000000014 -1 0 +2 11.159670332199999 -26 1 0 -0 1 7.0000000000000018 +1 -2.0707963267942446 16 1 0 +2 33 -4 1 0 -0 1 24 +1 4.2123889803846888 16 1 0 +2 33 -4 1 0 -0 1 24 +1 5.1559577935007024 -4.3500000000000014 -1 0 +2 19.6958653043 24 1 0 -0 1 7 +1 2.1868953314300001 17 1 0 +1 43.64579944103 0 1 0 +1 4.7123889803846888 -4.3500000000000014 -1 0 +2 -15.3220746415 24 1 0 -0 1 7 +1 0 -12 1 0 +2 -40 20 1 0 -0 1 18 +1 -3.1415926535897931 -12 1 0 +2 -40 -22 1 0 -0 1 18 +1 2.9809020006378435 -4.3500000000000014 -1 0 +2 -15.3220746415 -26 1 0 -0 1 7 +1 -2.0812021546700001 -19 -1 0 +1 30.62229804507 0 1 0 +1 0 -18.600000000000001 0 -1 +1 0 6.3999999999999986 0 -1 +1 3.1415926535897931 -18.600000000000001 0 -1 +1 42 6.3999999999999986 0 -1 +1 -58 -1.00000000025 0 -1 +1 20.999999999749999 13 -1 0 +1 1.5707963267948959 0.39999999999999858 0 -1 +1 0 6.6000000000000014 0 1 +1 0 0.39999999999999858 0 -1 +1 109 6.6000000000000014 0 1 +1 0 -1 0 1 +1 54.5 13.200000000000003 1 0 +1 0 -11.5 0 1 +1 2 18.5 0 -1 +1 -3.1415926535897931 -6.2000000000000028 1 0 +1 -3.1415926535897931 6.2831853071795862 1 0 +1 1.5707963267948977 0 0 1 +1 10.00148710683 7 0 -1 +1 -4.7123889803846897 -6.2000000000000028 1 0 +1 -4.7123889803846897 6.2831853071795862 1 0 +1 1.5707963267948961 0.39999999999999858 0 -1 +1 0 6.6000000000000014 0 1 +1 0 13.000000000000014 0 1 +1 1 13.200000000000003 1 0 +1 1.5707963267948966 6.9992564465900138 0 1 +1 5.0007435534199995 13.200000000000003 1 0 +1 0 0.39999999999999858 0 -1 +1 0 6.6000000000000014 0 1 +1 1.0821082118928551 0 0 1 +1 29.020140246437869 7 0 -1 +1 -6.2831825797266694 -6.2000000000000028 1 0 +1 -6.2831825797266694 6.2831853071795862 1 0 +1 1.5707963267948966 3.3530659001913872 0 1 +1 14.51007012321894 13.200000000000003 1 0 +1 0 0.39999999999999858 0 -1 +1 0 6.6000000000000014 0 1 +1 0.4886921905584744 0 0 1 +1 34.799999999999997 7 0 -1 +1 -1.0821041362360615 -6.2000000000000028 1 0 +1 -1.0821041362360615 6.2831853071795862 1 0 +1 1.5707963267948966 -12.100000000000001 0 1 +1 17.399999999999999 13.200000000000003 1 0 +1 0 0.39999999999999858 0 -1 +1 0 6.6000000000000014 0 1 +1 -1.5707963267948966 -6.2000000000000028 1 0 +1 -1.5707963267948966 6.2831853071795862 1 0 +1 0.48869219055847424 1.9539925233402755e-14 3.533949646070618e-17 1 +1 -4.7123889803846897 5.3000000000000025 1 -5.6543194337129189e-16 +1 0 -6.9295680305003771e-11 0 1 +1 -4.7123889803846897 -11.157004223084414 1 4.5234555469703351e-15 +1 -1.0821041362367176 4.7123889803846541 1 3.2714276723620588e-14 +2 5.2999999999999998 -44 1 0 -0 1 86.200000000000003 +1 -4.7123889803846897 17.86313602339483 1 0 +1 1.08210839785271 6.8036243305868993e-11 -2.9596327173063112e-08 0.99999999999999956 +1 0 -7.1054273576010019e-15 0 1 +1 55.619498734399997 26.872186295799999 0.8829475928588979 -0.46947156278594571 +1 0 3.1415926535726557 0 1 +1 -1.5707963267933813 1.9985085292477582 0.99999999999903522 1.3890803147198231e-06 +1 -6.283182579726569 4.7123889803846195 1 9.0286369603148025e-15 +2 60.5 -1.9984474343 1 0 -0 1 23.200000000000003 +1 0 12.000000000000014 1 0 +1 1.570796326794897 4.7123889803846852 0 1 +1 0 0 0 1 +1 83.700000000000003 1.42108547152e-14 0 -1 +1 0 0 0 1 +1 6.2831853071795862 53.5 -1 0 +1 -4.7123889803846897 4.712388980384703 1 -2.8271597168564591e-15 +2 53.5 -12 1 0 -0 1 30.200000000000003 +1 -1.5707963267948966 -55.5 1 0 +1 1.5707963267948959 7.8539816339744828 -1.4135798584282337e-16 -1 +1 1.5707963267948966 0 0 1 +1 0 -42.200000000000003 1 0 +1 0 3.1415926535897976 0 1 +1 3.1415926535897931 14.000000000000012 -1 1.1308638867425838e-15 +1 -3.1415926535897931 4.7123889803846941 1 0 +2 -55.5 -14 1 0 -0 1 28.199999999999999 +1 -4.7123889803846897 12.000000000000014 1 0 +1 1.5707963267948954 10.995574287564276 1.4135798584282297e-16 -1 +1 1.5707963267948966 0 0 1 +1 -83.700000000000003 1.42108547152e-14 0 -1 +1 0 0 0 1 +1 -4.7123889803846897 -29.5 1 0 +1 -1.5707963267948966 4.7123889803846897 1 0 +2 -29.5 -12 1 0 -0 1 54.200000000000003 +1 0 0 0 1 +1 0 42.200000000000003 1 0 +1 1.4101056738434032 0 0 1 +1 0.16069065295212756 -16.350000000000001 0 -1 +1 0 0 0 1 +1 26.136829468099997 -4.3500000000000014 0 -1 +1 -4.7123889803846897 -8.4500000000000028 1 0 +1 -0.18145406132329089 9.8994949366116796 1 -2.5194662674586674e-15 +1 1.4101056738429469 0 0 1 +1 43.863170531900003 -4.3500000000000014 0 -1 +1 0 0 0 1 +1 2.9809020006376659 -16.350000000000001 0 -1 +1 -0.16069065295149287 -8.4500000000000028 1 0 +1 4.3702442661097365 9.8994949366116636 1 1.2597331337293282e-15 +1 3.1415926535891403 12.399999999999999 0 1 +1 3.1415926535891403 12.399999999999999 0 1 +1 6.2831853071795862 12.399999999999999 0 1 +1 0 12.399999999999999 0 1 +1 6.2267541202943493 12.399999999999999 0 1 +1 0 -0.75 0 -1 +1 -2.070796326794897 20.100000000000001 1 0 +1 -4.1651914291879963 33.941125496954292 1 -2.3030974016375585e-15 +1 0.44356881311601309 -6.3999999999999986 0 1 +1 61.154769413899999 2.0499999999999972 0 -1 +1 43.64579944103 4.1000000000000014 1 0 +1 119.36689533143 0 1 0 +1 -4.2688201672590118 -8.4500000000000028 1 0 +1 0.74538318215558874 9.8994949366116671 1 0 +1 0 -6.3999999999999986 0 1 +1 17.3814255582 2.0499999999999972 0 -1 +1 30.62229804507 4.1000000000000014 1 0 +1 119.26120215467 0 1 0 +1 1.8598365619409338 12.399999999999999 0 1 +1 0.78175609164126958 -0.75 0 -1 +1 -2.0707963267948974 20.100000000000001 1 0 +1 -4.1651914291880043 33.941125496954278 1 0 +1 -1.5707963267948966 -8.4500000000000028 1 0 +1 3.2743133833641362 9.8994949366116707 1 -4.5445295748724946e-15 +1 0.04001067435396103 -0.35000000000000142 0 1 +1 1.5307856524408725 -16 0 -1 +1 -3.1415926535897931 -12 1 0 +2 -40 -22 1 0 -0 1 18 +1 -3.1415926535897931 -7.8999999999999986 1 0 +1 -1.5707963267949041 25.455844122715707 1 1.2080397691164975e-15 +1 -1.5707963267948966 -4.3500000000000014 1 0 +2 -64.979991993599995 -23 -1 0 0 1 7 +1 0 0 0 1 +1 14.979991993599995 -4.3500000000000014 0 -1 +1 -1.5707963267948966 -8.4500000000000028 1 0 +1 2.8997986029673077 9.8994949366116742 1 -2.3208433350126737e-15 +1 0 -12 1 0 +2 -40 20 1 0 -0 1 18 +1 3.1015819792358323 -0.35000000000000142 0 1 +1 0 -16 0 -1 +1 -1.1102230246251565e-16 -7.8999999999999986 1 0 +1 1.5707963267948966 25.45584412271571 1 0 +1 1.5307856524409176 0 0 1 +1 11.020008006400005 -4.3500000000000014 0 -1 +1 -3.1816033279438178 -4.3500000000000014 1 0 +2 -64.979991993599995 21 -1 0 0 1 7 +1 -3.1816033279438178 -8.4500000000000028 1 0 +1 1.2889916018187035 9.8994949366116671 1 0 +1 -69.434267906800002 -16 -1 0 +1 19.434267906800002 0 1 0 +1 0 0.20000000000000284 0 1 +1 23.888543819999995 2.0499999999999972 0 -1 +1 19.434267906800002 4.1000000000000014 1 0 +1 186.61426790680002 0 1 0 +1 1.0194793576711694 0 0 1 +1 1.1948180779236377 -9.25 0 -1 +1 -4.7123889803846897 2.25 1 0 +2 -73.888543819999995 -12 -1 0 0 1 4 +1 -4.7123889803846897 -1.8500000000000014 1 0 +1 6.2693262104111263 5.6568542494923353 -1 8.7120785037670929e-15 +1 1.0194793576662553 0.20000000000000284 0 1 +1 2.1114561800000047 2.0499999999999972 0 -1 +1 -69.434267906800002 14 1 0 +1 6.5657320931999976 0 1 0 +1 6.5657320931999976 4.1000000000000014 1 0 +1 47.745732093200004 0 1 0 +1 0.09218413966255222 0 0 1 +1 0 -9.25 0 -1 +1 -2.4980915447987089 -11.5 1 0 +2 -56 -0.99999999994099997 1 0 -0 1 25 +1 -2.4980915447987089 -7.3999999999999986 1 0 +1 -2.094395102395155 35.355339059327363 1 6.4440492089393225e-15 +1 -0.55131696912372774 2.25 1 0 +2 -73.888543819999995 10 -1 0 0 1 4 +1 -0.55131696912372774 -1.8500000000000014 1 0 +1 2.1082541991584645 5.6568542494923948 -1 -1.0454494204520488e-14 +1 6.0413912565571337 9.3338095116624267 -1 4.6416866700253963e-15 +2 -64.979991993599995 -23 1 0 -0 1 6.6000000000000014 +1 -69.434267906800002 -16.399999999999999 -1 0 +1 186.61426790680002 0.56568542494923602 1 0 +1 -3.1554517503582504 6.2225396744416352 1 -4.3560392519497295e-15 +2 -73.888543819999995 -12 1 0 -0 1 4.4000000000000057 +1 -2.0943951023951546 35.921024484276664 1 -1.2888098417857644e-14 +2 -56 -0.99999999994099997 1 0 -0 1 25.399999999999999 +1 -1.0333384544313278 6.2225396744416086 1 5.2272471022403906e-15 +2 -73.888543819999995 10 1 0 -0 1 4.4000000000000057 +1 -69.434267906800002 14.4 1 0 +1 47.745732093200004 0.56568542494923602 1 0 +1 10.713769562588084 9.3338095116624213 -1 1.1604216675063745e-15 +2 -64.979991993599995 21 1 0 -0 1 6.6000000000000014 +1 1.5707963267948966 26.021529547664947 1 0 +2 -40 20 1 0 -0 1 18.399999999999999 +1 9.2433238994460787 9.3338095116624178 -1 2.519466267461389e-15 +2 -15.3220746415 24 1 0 -0 1 6.5999999999999996 +1 2.1868953314300001 17.399999999999999 1 0 +1 119.36689533143 0.56568542494923602 1 0 +1 10.170161142924968 9.3338095116624302 -1 0 +2 19.6958653043 24 1 0 -0 1 6.6000000000000014 +1 -4.1651914291879963 34.506810921903536 1 -2.3030974016357815e-15 +2 33 -4 1 0 -0 1 24.399999999999999 +1 -4.1651914291880043 34.506810921903522 1 0 +2 33 -4 1 0 -0 1 24.399999999999999 +1 6.4159060369539329 9.3338095116624231 -1 4.5445295748441745e-15 +2 11.159670332199999 -26 1 0 -0 1 6.5999999999999996 +1 -2.0812021546700001 -19.399999999999999 -1 0 +1 119.26120215467 0.56568542494923602 1 0 +1 7.5118369196995243 9.3338095116624302 -1 0 +2 -15.3220746415 -26 1 0 -0 1 6.5999999999999996 +1 -1.5707963267949041 26.021529547664947 1 0 +2 -40 -22 1 0 -0 1 18.399999999999999 +1 4.5516983274328577 25.73868683519559 -6.2803698342399443e-15 1 +1 4.530934919061969 9.6166522241275079 2.0411201961279885e-14 -1 +1 1.6108070011489577 25.738686835164795 -3.9252311466971685e-16 1 +1 6.0013805822033959 9.6166522241671046 3.454203409093465e-14 -1 +1 5.9410405929046277 9.6166522241370487 -1.5700924586837731e-15 1 +1 132.5020746415 0.28284271247461551 9.4205547520939717e-15 -1 +1 4.8451097101590328 9.6166522241370487 0 -1 +1 106.02032966780001 0.28284271247461551 0 1 +1 5.6268658018026683 9.6166522241028929 4.1607450152665894e-13 1 +1 -0.23455854045144608 34.223968209442354 -1.570092458591166e-14 -1 +1 5.0142033494178504 9.6166522241749703 6.6885938736221848e-13 1 +1 4.1323590179022194 34.223968209406124 -6.2803698343870669e-15 -1 +1 5.4577721625402784 9.6166522241370469 0 1 +1 136.87586530430002 0.28284271247461551 0 -1 +1 4.5309349190613997 9.6166522241370522 0 -1 +1 101.85792535850001 0.28284271247461551 0 1 +1 5.9410405929040522 9.6166522241275096 2.0411201961279949e-14 1 +1 1.7314869797467407 25.738686835195587 -7.4579391781599338e-15 -1 +1 4.6723783060306214 25.738686835164799 0 1 +1 4.4705949297622354 9.6166522241671011 -3.2971941632256214e-14 -1 +1 6.0013805822033923 9.6166522241370487 -1.5700924586837731e-15 1 +1 52.200008006400012 0.28284271247461423 0 -1 +1 0.53745787236356957 5.9396969619670026 -3.9252311467094828e-15 1 +1 43.291456180000011 0.28284271247461423 0 1 +1 1.5569372300266175 5.939696961967214 5.0870995662145623e-13 1 +1 0.49588058206479246 35.638181771781355 2.826166425674748e-14 1 +1 1.5985145203284739 35.638181771825067 3.6112126547924312e-14 1 +1 0.53745787236337583 5.9396969619671998 5.5502768411700627e-13 1 +1 1.5569372300264359 5.9396969619669919 -1.1775693440128262e-15 1 +1 191.06854382 0.28284271247461551 -2.5121479338883919e-14 1 +1 4.4705949297622043 9.6166522241370558 -1.5700924586837781e-15 -1 +1 182.15999199359999 0.28284271247461551 0 1 +1 0 0.60000000000000142 1 0 +2 -68.458904109599999 -1 1 0 -0 1 7.5 +1 0 0.60000000000000142 1 0 +2 -68.458904109599999 -1 1 0 -0 1 7.5 +1 0 -0.60000000000000142 1 0 +2 -68.458904109599999 -1 1 0 -0 1 7.5 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 -0.60000000000000142 1 0 +2 -68.458904109599999 -1 1 0 -0 1 7.5 +1 0 11.799999999999997 1 0 +2 -68.458904109599999 -1 1 0 -0 1 6 +8 3.1415926535897931 5.7831853071786927 +1 5.7831853071786412 -4 -1 -0 +8 5.7831853071786927 6.2831853071795862 +1 12.066370614359155 -4 -1 -0 +1 0 11.799999999999997 1 0 +2 -68.458904109599999 -1 1 0 -0 1 6 +8 0 2.6415926535889014 +1 5.7831853071796431 -4 -1 -0 +8 2.6415926535889014 3.1415926535897931 +1 5.7831853071786945 -4 -1 -0 +1 -5.1756889450789954e-18 10.5 0 1 +1 34.799999999999997 10.5 0 1 +1 17.907681323283025 10.5 0 1 +1 0.28847929844531212 -8.5 0 -1 +7 0 0 1 2 2 -5.1756889450789954e-18 1.0000000065000023 17.907681323283025 1.0000000065000023 + 0 2 25.199528972900001 2 +7 0 0 3 4 2 3809.7523843202916 6615.8091032910925 3805.3130884318643 6611.8630504339626 3801.2701848794363 6607.4711221031448 3797.7043768370017 6602.7210854319583 + 0 4 25.199528972900001 4 +1 6.1072783247598822e-16 10.5 0 1 +1 91.038905719399864 10.5 -1.4210854622831415e-14 1 +1 0 10.5 0 1 +7 0 0 1 2 2 6.1072783247598822e-16 1.0000000065000023 91.038905719400006 1.0000000065000023 + 2.36494886716e-12 2 126.615135948 2 +7 0 0 5 12 4 3916.2332706689663 6634.1955342226438 3909.0222117505714 6642.3079506971972 3899.8801731149406 6648.7039355087109 3889.3485816588186 6652.7657390043614 3872.7443758416875 6654.8640538150139 3856.7667996718374 6651.1825260991227 3851.611740394967 6649.3240459879235 3845.2658218343345 6646.1358339043345 3839.5213252695162 6642.0376936891371 3838.229347933911 6641.0445826708183 3836.9765406100423 6640.008427330331 3835.7621935027942 6638.9290043784631 + 2.36494886716e-12 6 76.749811654799998 3 115.12646151200001 3 126.615135948 6 +1 0 0 0 1 +1 65.698348114799998 26 0 -1 +1 -1.5707963267948966 -19 1 0 +2 -12.1983481148 -55 1 0 -0 1 10 +8 1.5707963267948966 2.3561944901923448 +1 -1.5707963267948966 -19 1 0 +2 -12.1983481148 -55 1 0 -0 1 10 +1 0.78539816339744817 0 0 1 +1 7.1715728752319245 26 0 1 +1 -1.5707963267948966 -2.5000000054999987 1 0 +2 32.049223906965103 -47.84266267101868 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 10 +1 20.650825942600001 -45 -1 0 +1 32.849174057399999 45 1 0 +1 20.650825942600001 -45 -1 0 +1 0 -34.750000002699998 0 1 +1 0.00024841030000288811 36.750000002699998 0 -1 +1 -1.3712025711929532 -39.959558569752915 0.99796128102408377 0.063822265525205368 +1 32.849174057399999 28.500000005499999 1 1.0815229852e-16 +1 0 1.4999999967999997 0 1 +1 0.00024841030000288811 0.50000000320000026 0 -1 +1 3874.2539043120478 6552.727854740092 0.74740830984202555 0.66436497377502279 +1 54.499999999998998 1.0000000065000023 1 1.3037481390099999e-16 +1 0 15.2499999973 0 1 +1 110.8404837385 15.2499999973 0 1 +1 -21.804949832599998 -50.464466094099997 0.70710678118654757 0.70710678118654757 +1 3.5857864375806114 7 1 0 +1 -21.804949832599998 -50.464466094099997 0.70710678118654757 0.70710678118654757 +1 41.346772414308035 -42.70326035853023 -0.75079434591730465 0.66053603243018244 +1 3.5857864375806114 23.499999994500001 1 0 +1 0 0 0 1 +1 4.1421356236821243 26 0 1 +1 -3.9269908169943126 -19 1 0 +2 -14.8578643763 55 1 0 -0 1 10 +8 3.9269908169943126 4.7123889803846897 +1 -3.9269908169943126 -19 1 0 +2 -14.8578643763 55 1 0 -0 1 10 +1 0.78539816339744828 0 0 1 +1 14.6421356237 26 0 -1 +1 -3.9269908169943126 -2.5000000054999987 1 0 +2 27.682868954423437 62.102814594640591 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 10 +1 3822.7572889115436 6627.3690538347773 -0.74740830984202555 -0.66436497377502279 +1 17.399999999999999 1.0000000065000023 1 -2.0417894705799999e-16 +1 17.8336924567 15.2499999973 0 1 +1 34.799999999999997 36.750000002699998 0 -1 +1 -4.7789321881299998 45 1 0 +1 24.72106781187 45 1 0 +1 -4.7789321881299998 45 1 0 +1 18.262707531814485 51.479941498075824 -0.99796128102408377 -0.063822265525205368 +1 24.72106781187 28.500000005499999 1 -1.7624454716500001e-16 +1 -24.464466094100001 50.464466094099997 -0.70710678118654757 0.70710678118654757 +1 7.7279220614041497 7 1 0 +1 -24.464466094100001 50.464466094099997 -0.70710678118654757 0.70710678118654757 +1 11.313708498984761 15.2499999973 0 1 +1 59.5 15.2499999973 0 1 +1 37.559353560248219 58.18964245340878 0.66053603243018244 0.75079434591730465 +1 7.7279220614041497 23.499999994500001 1 0 +1 82.33467866018529 45.30703239973861 -0.55425234378412813 0.83234868859739353 +1 21.072756694829962 23.499999994500001 1 0 +1 42.145513389709926 15.2499999973 0 1 +1 28.710068817900002 15.2499999973 0 1 +1 -68.326309529599996 34.750457374500002 0.50000000000018996 0.86602540378432902 +1 21.072756694829962 7 1 0 +1 -68.326309529599996 34.750457374500002 0.50000000000018996 0.86602540378432902 +1 -3.5964800305756251e-15 15.2499999973 0 1 +1 0 15.2499999973 0 1 +7 0 0 1 2 2 -5.0214983573291461e-16 7 29.965332826399997 7 + 0 2 42.135545458199999 2 +7 0 0 4 5 2 -78.862687876999999 16.500914749 -82.5869740638 10.050262138800001 -85.188155349599995 2.9491496505499999 -86.4932857923 -4.50021638696 -86.499977001199994 -11.948795860200001 + 0 5 42.135545458199999 5 +7 0 0 5 6 2 -7.1054273576010019e-15 7 5.9929248898503786 6.9999999999999813 11.986888130768707 7.0000000000000302 17.978264950604448 6.9999999999999751 23.972416266861163 7.0000000000000098 29.965332826399997 7 + 0 6 42.135545458199999 6 +7 0 0 4 5 2 -78.862687876999999 16.500914749 -82.5869740638 10.050262138800001 -85.188155349599995 2.9491496505499999 -86.4932857923 -4.50021638696 -86.499977001199994 -11.948795860200001 + 0 5 42.135545458199999 5 +1 29.965332826399997 25 0 1 +1 41.051204139799999 25 0 1 +7 0 0 1 2 2 -3.5964800305756251e-15 23.499999994500001 29.965332826399997 23.499999994500001 + 0 2 42.135545467599997 2 +7 0 0 4 5 2 94.014303448269231 27.767150999652792 98.142692126841411 21.567341837802559 101.19177941974887 14.64671980802277 102.96968448638404 7.295837316188333 103.45174727082278 -0.1371295502914478 + 0 5 42.135545467599997 5 +1 3916.897635642742 6633.4481259128006 -0.66436497377502279 0.74740830984202555 +1 0 1.4999999967999997 0 1 +1 103.51722647069492 -1.1606392431436827 -0.063822265525205368 0.99796128102408377 +1 40.025602064699996 23.499999994500001 1 0 +1 -86.5 -12.9743979301 0 1 +1 40.025602069900003 7 1 0 +1 -86.5 -12.9743979301 0 1 +1 0 -34.750000002699998 0 1 +1 39 15.2499999973 0 1 +1 55.291474289485507 61.864372218117843 -0.99796128102408377 -0.063822265525205368 +1 44.105034408900003 23.499999994500001 1 0 +1 -42.394965591099997 53 1 0 +1 44.105034408900003 7 1 0 +1 -42.394965591099997 53 1 0 +1 7.6239253314467536e-16 25 0 1 +1 0.28847931623654521 -25 0 1 +7 0 0 1 2 2 7.6239253314467536e-16 7 17.8336924567 7 + 0 2 25.199526734100001 2 +7 0 0 3 4 2 23 43.222181183300002 17.179127945400001 44.403399888300001 11.2395854121 45 5.2999999999999998 45 + 0 4 25.199526734100001 4 +7 0 0 3 4 2 0 7 5.9446550539925562 6.9999999999999973 11.889108659248647 6.9999999999999991 17.8336924567 7 + 0 4 25.199526734100001 4 +7 0 0 3 4 2 23 43.222181183300002 17.179127945400001 44.403399888300001 11.2395854121 45 5.2999999999999998 45 + 0 4 25.199526734100001 4 +7 0 0 1 2 2 7.6239253314467536e-16 23.499999994500001 17.8336924567 23.499999994500001 + 0 2 25.199526734799999 2 +7 0 0 3 4 2 -9.3461267955577476 47.932832768215661 -3.6125099169060988 49.483144542096767 2.2768471871825344 50.457603414461005 8.2043234539934016 50.836681211754453 + 0 4 25.199526734799999 4 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -13.5 1 0 +2 -68.458904109599999 -1 1 0 -0 1 6 +8 3.1415926535897931 6.2831853071795862 +1 0 -13.5 1 0 +2 -68.458904109599999 -1 1 0 -0 1 6 +1 0 -13.5 1 0 +2 -68.458904109599999 -1 1 0 -0 1 6 +8 0 3.1415926535897931 +1 0 -13.5 1 0 +2 -68.458904109599999 -1 1 0 -0 1 6 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 -18 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 8 +8 0 3.1415926535897931 +1 0 -18 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 8 +1 0 -18 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 8 +8 3.1415926535897931 6.2831853071795862 +1 0 -18 1 0 +2 -6.4589041095899997 -1 1 0 -0 1 8 +1 0 1.4999999967999997 0 1 +1 1.082111757038257 1.4999999967999997 0 1 +1 3780.3947549866007 6566.6607198826459 -0.34802190555935003 -0.93748640163515917 +1 1.0821117570382572 -34.750000002699998 0 1 +1 29.020140246479222 36.750000002699998 3.8197890536866956e-16 -1 +1 59.8946005755 27.7702704676 0.8829475928588979 -0.46947156278594571 +1 14.510070123260288 45 1 1.5748819111832277e-26 +1 59.8946005755 27.7702704676 0.8829475928588979 -0.46947156278594571 +1 0 -34.750000002699998 0 1 +1 -3.6350103925633875e-16 36.750000002699998 -2.0041600807941492e-16 -1 +1 -45.179333700186454 30.157727161729966 -0.85118477210993893 -0.52486615791852242 +1 14.510070123260286 28.500000005499999 1 1.5748819111832277e-26 +1 -1.0821054642780075 -43 1 0 +2 5.2998818036899999 -44.0004740595 1 0 -0 1 89.000474059599995 +8 1.0821054642780075 1.3705847805140896 +1 -1.0821054642780075 -43 1 0 +2 5.2998818036899999 -44.0004740595 1 0 -0 1 89.000474059599995 +1 -1.0821054642780075 -26.500000005499999 1 0 +2 13.884653296628901 -37.982338348858626 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 89.000474059599995 +1 -1.0821054642780075 0.99999999349999769 1 0 +2 3868.8812702757009 6549.2894879246305 -0.74740830984202555 -0.66436497377502279 -0.66436497377502279 0.74740830984202555 89.000474059599995 +1 0 0 0 1 +1 54.998518348079998 50 0 1 +1 -6.2831807553015349 -43 1 0 +2 60.500078944800002 -1.9983999996099999 1 0 -0 1 25.999921055400002 +1 -6.2831807553018217 -43.00000000000027 1 0 +2 60.500078944800002 -1.9983999996099999 1 0 -0 1 25.999921055400002 +1 -6.2831807553015349 -26.500000005499999 1 0 +2 -43.883673678354846 0.4111036466340332 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 25.999921055400002 +1 0 0 0 1 +1 54.998518348079998 50 0 1 +1 -6.2831807553015349 0.99999999349999769 1 0 +2 3799.7194773962219 6544.0091095815624 -0.74740830984202555 -0.66436497377502279 -0.66436497377502279 0.74740830984202555 25.999921055400002 +1 -69.511422039042657 -6.238934046520523 0.063822265525205368 -0.99796128102408377 +1 59.999259174039999 23.499999994500001 1 0 +1 1.5707887992667127 -34.750000002699998 0 1 +1 65 15.2499999973 0 1 +1 86.5 -6.9992591740399996 0 -1 +1 59.999259174039999 7 1 0 +1 86.5 -6.9992591740399996 0 -1 +1 3783.6093160186015 6522.9979890082532 0.66436497377502279 -0.74740830984202555 +1 59.999259174039999 50.999999993499998 1 0 +1 1.5707887992667127 1.4999999967999997 0 1 +1 65 51.4999999968 0 1 +1 -4.7123889803846897 -43 1 0 +2 53.499751589699997 -11.999751589700001 1 0 -0 1 33.000248411299992 +8 4.7123889803846897 6.2831777796514023 +1 -4.7123889803846897 -43 1 0 +2 53.499751589699997 -11.999751589700001 1 0 -0 1 33.000248411299992 +1 -4.7123889803846897 -26.500000005499999 1 0 +2 -36.259309106677648 -9.1230812469638902 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 33.000248411299992 +1 -4.7123889803846897 0.99999999349999769 1 0 +2 3811.5961279199028 6541.1847885931647 -0.74740830984202555 -0.66436497377502279 -0.66436497377502279 0.74740830984202555 33.000248411299992 +1 -3.1416001811202254 -43 1 0 +2 -55.499766644799998 -13.999766644799999 1 0 -0 1 31.000233355999999 +8 3.1416001811202254 3.9269908169872414 +1 -3.1416001811202254 -43 1 0 +2 -55.499766644799998 -13.999766644799999 1 0 -0 1 31.000233355999999 +1 0.78539063586838664 0 0 1 +1 0 50 0 1 +1 -3.1416001811202254 -26.500000005499999 1 0 +2 72.645635233532943 -4.1624226385372154 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 31.000233355999999 +1 -3.1416001811202254 0.99999999349999769 1 0 +2 3894.3920135667768 6612.1054227945278 -0.74740830984202555 -0.66436497377502279 -0.66436497377502279 0.74740830984202555 31.000233355999999 +1 62.002263655744009 -43.923000725697982 0.99796128102408377 0.063822265525205368 +1 128.84048373849998 23.499999994500001 1 -1.9737298215599999e-16 +1 146.84048373849998 15.2499999973 0 1 +1 24.154425590558795 15.2499999973 0 1 +1 -42.340483738499998 -53 -1 0 +1 128.84048373849998 7 1 0 +1 -42.340483738499998 -53 -1 0 +1 -68.880362803899999 -44.460120934599999 0.70710678118654757 -0.70710678118654757 +1 12.077212795244037 7 1 0 +1 -68.880362803899999 -44.460120934599999 0.70710678118654757 -0.70710678118654757 +1 87.943000936809767 -33.706696865081838 -0.66053603243018244 -0.75079434591730465 +1 12.077212795244037 23.499999994500001 1 0 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -43 1 0 +2 -40 -22 1 0 -0 1 6.7999999999999972 +8 3.1415926535897931 6.2831853071795862 +1 0 -43 1 0 +2 -40 -22 1 0 -0 1 6.7999999999999972 +1 0 -43 1 0 +2 -40 -22 1 0 -0 1 6.7999999999999972 +8 0 3.1415926535897931 +1 0 -43 1 0 +2 -40 -22 1 0 -0 1 6.7999999999999972 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -43 1 0 +2 -40 20 1 0 -0 1 6.7999999999999972 +8 3.1415926535897931 6.2831853071795862 +1 0 -43 1 0 +2 -40 20 1 0 -0 1 6.7999999999999972 +1 0 -43 1 0 +2 -40 20 1 0 -0 1 6.7999999999999972 +8 0 3.1415926535897931 +1 0 -43 1 0 +2 -40 20 1 0 -0 1 6.7999999999999972 +1 0 4.0617064475417974 0 1 +1 6.2831853071795862 4.0617064475417974 0 1 +1 3.1415926535883187 4.0617064475417974 4.8982359651350012e-14 1 +1 3.1415926535883161 4.0617064475417974 4.8107674657575902e-14 1 +1 -2.6415926535918803 1.0154266118842759 1 -2.1203697876409358e-16 +2 33 -4 -1 0 0 1 10.765711135 +8 2.6415926535918803 5.7831853071816735 +1 -2.6415926535897922 1.0154266118842759 1 -2.1203697876409351e-16 +2 33 -4 -1 0 0 1 10.765711135 +1 -2.6415926535897927 1.0154266118842732 1 2.1203697876437535e-16 +2 33 -4 -1 0 0 1 10.765711135 +1 -2.6415926535897927 1.0154266118860109 1 0 +2 33 -4 -1 0 0 1 10.765711135 +1 -3.36936457992371 3.000000000000004 1 -6.696148482975058e-16 +2 -49.696382132708329 13.112770568822746 -0.25806358351695385 -0.96612793503882721 0.96612793503882721 -0.25806358351695385 24.000006407600001 +1 0 -8.8817841970012523e-16 0 1 +1 1.3430178624772864 2.6645352591003757e-15 -7.4014868308343778e-17 -1 +1 -3.36936457992371 -2.9999999999999991 1 0 +2 -40.000000188800001 -22.000011602899999 1 0 -0 1 24.000006407600001 +2 -40.000000188800001 -22.000011602899999 1 0 -0 1 24.000006407600001 +1 2.6528038377832193 1.7763568394002505e-15 0 1 +1 0 -2.6645352591003757e-15 0 -1 +1 -0.26101455623919623 -3.0000000000000022 1 1.3562160857909777e-15 +2 -65.154312547671822 -13.758183429330186 0.25806358351695385 0.96612793503882721 0.96612793503882721 -0.25806358351695385 6.9999338036700003 +1 1.3097889473595474 -1.7763568394002505e-15 -3.7007434154171883e-17 1 +1 -5.9988333129500004 0 0 -1 +1 -0.26101455623919623 2.9999999999999991 1 0 +2 -10.050091973400001 -29.999935313400002 -1 0 0 1 6.9999338036700003 +2 -10.050091973400001 -29.999935313400002 -1 0 0 1 6.9999338036700003 +1 2.6528033619741471 -8.8817841970012523e-16 7.4014868308343753e-17 1 +1 0 0 0 -1 +1 -4.9734047232834868 3 1 0 +2 -9.118988589368124 2.2741005472885458 0.96612793503882721 -0.25806358351695385 0.25806358351695385 0.96612793503882721 14.000003953499998 +1 0 2.6645352591003757e-15 0 1 +1 1.309780684061743 2.6645352591003757e-15 0 -1 +1 -4.9734047232834868 -3 1 0 +2 -40.000005889900002 20.000007856700002 0 1 -1 0 14.000003953499998 +2 -40.000005889900002 20.000007856700002 0 1 -1 0 14.000003953499998 +1 0 -1.7763568394002505e-15 0 1 +1 9.1128292808660003 0 0 1 +1 -4.7123868495258172 -3 1 0 +2 -9.119004143976948 -28.725855906530658 0.25806358351695385 0.96612793503882721 0.96612793503882721 -0.25806358351695385 16.9999549184 +1 -4.7123868495258172 3.0000000000000009 1 0 +2 -10.050077960799999 27.999952680300002 -1 0 0 1 16.9999549184 +2 -10.050077960799999 27.999952680300002 -1 0 0 1 16.9999549184 +1 -27.894832051175751 -33.142981131219607 0.25806358351695385 0.96612793503882721 +1 0 -3 1 0 +1 0.65978922739989887 1.7763568394002505e-14 0 1 +1 -9.1128292808240001 0 0 1 +1 -0.937212455434 11 -1 0 +1 0 3 1 0 +1 -0.937212455434 11 -1 0 +1 0 1.5987211554602254e-14 0 1 +1 2.7440918052175172 0 0 -1 +1 -5.6233963275691625 -2.9999999999999982 1 0 +2 -13.822359283184895 -46.334221941634944 -0.96612793503882721 0.25806358351695385 0.25806358351695385 0.96612793503882721 16.999987833900001 +1 -5.6233963275691625 3 1 0 +2 8.1756210378799992 27.9999879308 0 -1 -1 -0 16.999987833900001 +2 8.1756210378799992 27.9999879308 0 -1 -1 -0 16.999987833900001 +1 -5.7696806059859771 3 1 0 +2 -51.144687573593529 -62.059882012100012 -0.25806358351695385 -0.96612793503882721 0.96612793503882721 -0.25806358351695385 23.499995422299996 +1 0 8.8817841970012523e-16 0 1 +1 1.9310208807553817 -4.4408920985006262e-15 0 1 +1 -5.7696806059859771 -3 1 0 +2 33.000154312699998 -3.9999358403 1 0 -0 1 23.499995422299996 +2 33.000154312699998 -3.9999358403 1 0 -0 1 23.499995422299996 +1 -2.2678693845066817 2.9999999999999982 1 0 +2 -51.144718498682636 -62.059712475713198 0.96612793503882721 -0.25806358351695385 0.25806358351695385 0.96612793503882721 23.499997080899998 +1 0 -8.8817841970012523e-16 0 1 +1 0.8737282011488583 1.7763568394002505e-14 0 -1 +1 -2.2678693845066817 -3 1 0 +2 32.999998499500002 -4.0000094690600001 0 1 -1 0 23.499997080899998 +2 32.999998499500002 -4.0000094690600001 0 1 -1 0 23.499997080899998 +1 0 1.7763568394002505e-14 0 1 +1 5.9988333129000004 0 4.4408920985e-16 1 +1 -3.1415919177444529 -3 1 0 +2 -68.250524792154522 -25.349515528333896 -0.96612793503882721 0.25806358351695385 0.25806358351695385 0.96612793503882721 16.999971543900003 +1 -3.1415919177444529 3.0000000000000009 1 0 +2 1.9476373989 -29.999971756400001 0 -1 -1 -0 16.999971543900003 +2 1.9476373989 -29.999971756400001 0 -1 -1 -0 16.999971543900003 +1 -4.0512084233500003 -13 -1 0 +1 0 3 -1 0 +1 -4.0512084233500003 -13 -1 0 +1 -50.278293533569851 -23.9409366326108 0.25806358351695385 0.96612793503882721 +1 0 -3 -1 0 +1 1.3097806864402159 -1.7763568394002505e-15 0 1 +1 -5.9988333129500004 0 0 1 +1 0 -3.5527136788005009e-15 0 1 +1 2.6528033589610924 -1.7763568394002505e-15 0 -1 +1 -0.26101778683788013 -3 1 0 +2 -65.154333038643955 -13.758192184926623 0.25806358351695385 0.96612793503882721 0.96612793503882721 -0.25806358351695385 16.999954907700001 +1 -0.26101778683788013 3.0000000000000009 1 0 +2 -10.0500782264 -29.9999528508 -1 0 0 1 16.999954907700001 +2 -10.0500782264 -29.9999528508 -1 0 0 1 16.999954907700001 +1 -1.7985698767941918 3 1 0 +2 -49.69637702359536 13.112775110171606 0.96612793503882721 -0.25806358351695385 0.25806358351695385 0.96612793503882721 14.000003959200001 +1 0 -1.7763568394002505e-15 0 1 +1 1.3430323514569551 0 0 -1 +1 -1.7985698767941918 -3.0000000000000009 1 0 +2 -40.000005894799997 -22.000007838799998 0 1 -1 0 14.000003959200001 +2 -40.000005894799997 -22.000007838799998 0 1 -1 0 14.000003959200001 +1 -59.939572883958128 -21.360300797441262 0.25806358351695385 0.96612793503882721 +1 0 3 -1 0 +1 0 -4.4408920985006262e-15 0 -1 +1 5.9988333129000004 0 0 1 +1 -4.0512084233500003 -23 -1 0 +1 0 -3 -1 0 +1 -4.0512084233500003 -23 -1 0 +1 -3.1415988050231052 -3 1 0 +2 -68.250625190379424 -25.349431192644236 -0.96612793503882721 0.25806358351695385 0.25806358351695385 0.96612793503882721 7.0000925631999991 +1 0.87371647200405933 -5.3290705182007514e-15 -7.4014868308343765e-17 1 +1 0 5.3290705182007514e-15 0 -1 +1 -3.1415988050231052 2.9999999999999991 1 0 +2 1.94758182896 -30.000090517899999 0 -1 -1 -0 7.0000925631999991 +2 1.94758182896 -30.000090517899999 0 -1 -1 -0 7.0000925631999991 +1 -2.2678687398204804 3.0000000000000018 1 0 +2 -51.144718639936556 -62.059714835284247 0.96612793503882721 -0.25806358351695385 0.25806358351695385 0.96612793503882721 33.499997306399997 +1 -2.2678687398204804 -3 1 0 +2 33.000000815600004 -4.0000089966100001 0 1 -1 0 33.499997306399997 +2 33.000000815600004 -4.0000089966100001 0 1 -1 0 33.499997306399997 +1 1.9310213650931303 8.8817841970012523e-16 0 1 +1 0 8.8817841970012523e-16 0 1 +1 -5.769680315482673 3.0000000000000053 1 -6.4733833834868653e-16 +2 -51.144676718573891 -62.059964958759927 -0.25806358351695385 -0.96612793503882721 0.96612793503882721 -0.25806358351695385 33.499988350499997 +1 -5.769680315482673 -3 1 0 +2 33.000231648499998 -3.99990394745 1 0 -0 1 33.499988350499997 +2 33.000231648499998 -3.99990394745 1 0 -0 1 33.499988350499997 +1 2.7440933653514317 0 0 1 +1 0 -7.9936057773011271e-15 0 -1 +1 -5.623401915451872 -3 1 0 +2 -13.822176754659294 -46.334209340835244 -0.96612793503882721 0.25806358351695385 0.25806358351695385 0.96612793503882721 7.0001627315000015 +1 0.65977552531540073 -8.8817841970012523e-15 0 1 +1 -9.112829280834001 0 0 -1 +1 -5.623401915451872 2.9999999999999991 1 0 +2 8.1755617599299999 28.000161024899999 0 -1 -1 -0 7.0001627315000015 +2 8.1755617599299999 28.000161024899999 0 -1 -1 -0 7.0001627315000015 +1 0 8.8817841970012523e-16 0 -1 +1 9.1128292808660003 0 0 1 +1 -0.937212455434 21 -1 0 +1 0 -3 1 0 +1 -0.937212455434 21 -1 0 +1 -18.233552700787477 -35.723616966389145 0.25806358351695385 0.96612793503882721 +1 0 3 1 0 +1 -4.7123821972672353 -3.000000000000008 1 1.3562167389343574e-15 +2 -9.1190156537063984 -28.725841180590635 0.25806358351695385 0.96612793503882721 0.96612793503882721 -0.25806358351695385 6.9999367231199994 +1 1.30978831657543 1.7763568394002505e-15 7.4014868308343765e-17 1 +1 0 1.7763568394002505e-15 0 -1 +1 -4.7123821972672353 3 1 0 +2 -10.0500892177 27.999937760200002 -1 0 0 1 6.9999367231199994 +2 -10.0500892177 27.999937760200002 -1 0 0 1 6.9999367231199994 +1 -4.9734058683332627 3 1 0 +2 -9.1189864117103188 2.2740940333746549 0.96612793503882721 -0.25806358351695385 0.25806358351695385 0.96612793503882721 24.000006379400002 +1 -4.9734058683332627 -3 1 0 +2 -40.000000158600002 20.0000116416 0 1 -1 0 24.000006379400002 +2 -40.000000158600002 20.0000116416 0 1 -1 0 24.000006379400002 +1 2.6528038411433581 0 0 1 +1 0 2.6645352591003757e-15 0 -1 +1 -4.940161570967236 2.9999999999999942 1 9.7255083692588463e-16 +2 -70.199389163800006 27.000064425600002 0 -1 -1 -0 7.0000700167899979 +2 -70.199389163800006 27.000064425600002 0 -1 -1 -0 7.0000700167899979 +1 -4.940161570967236 -3.0000000000000115 1 1.945101673855245e-15 +2 5.437322676362804 29.64410866615593 -0.96612793503882721 0.25806358351695385 0.25806358351695385 0.96612793503882721 7.0000700167899979 +1 0.91324626536332554 3.5527136788005009e-15 -1.8503717077085941e-17 1 +1 0 0 0 -1 +1 -2.000573797656406 3 1 0 +2 -6.3922716618436759 27.628574443814738 -0.25806358351695385 -0.96612793503882721 0.96612793503882721 -0.25806358351695385 5 +1 -2.0005737976586868 -3 1 0 +2 -65.199337741099995 16.091298859399998 1 0 -0 1 5 +2 -65.199337741099995 16.091298859399998 1 0 -0 1 5 +1 1.1410188559312662 0 0 1 +1 -5.2369399972107544e-06 0 0 1 +1 -3.3693587181442699 3 1 0 +2 -70.199302031900004 26.9999554113 -1 0 0 1 16.999958414800005 +2 -70.199302031900004 26.9999554113 -1 0 0 1 16.999958414800005 +1 -3.3693587181442699 -3 1 0 +2 5.4371948690319005 29.644052618214214 0.25806358351695385 0.96612793503882721 0.96612793503882721 -0.25806358351695385 16.999958414800005 +1 0.91325651601043489 0 0 1 +1 2.0005700730307119 0 0 -1 +1 -3.1415926535897931 -3 1 0 +2 -65.199337741099995 16.091272674700001 1 0 -0 1 5 +2 -65.199337741099995 16.091272674700001 1 0 -0 1 5 +1 -3.1415926535897931 3 1 0 +2 -6.3922969596138142 27.628581201132253 -0.25806358351695385 -0.96612793503882721 0.96612793503882721 -0.25806358351695385 5 +1 -3.141599291424011 -2.9999999999999982 1 0 +2 -48.665961036719423 44.095696091760509 -0.96612793503882721 0.25806358351695385 0.25806358351695385 0.96612793503882721 7.0000631979800012 +1 -3.1415992914240105 3.0000000000000044 1 -9.7254981662837894e-16 +2 -70.199384206299996 -29.000057785500001 0 -1 -1 -0 7.0000631979800012 +2 -70.199384206299996 -29.000057785500001 0 -1 -1 -0 7.0000631979800012 +1 0.42977063902569757 5.3290705182007514e-15 3.7007434154171883e-17 1 +1 1.1410190499384267 1.7763568394002505e-15 1.4802973661668756e-16 -1 +1 -1.5707963267948966 3.0000000000000027 1 -1.5568093536019514e-15 +2 -39.417032846577882 36.44985774081578 0.96612793503882721 -0.25806358351695385 0.25806358351695385 0.96612793503882721 5 +1 0 -8.8817841970012523e-16 0 1 +1 2.0005750499578809 0 0 1 +1 -1.5707963267948957 -3 1 0 +2 -65.199337741099995 -18.091297447999999 0 1 -1 0 5 +2 -65.199337741099995 -18.091297447999999 0 1 -1 0 5 +7 0 0 1 2 2 1.3430323514526912 3 0.42977585371191085 3 + 0 2 19.550105514999998 2 +7 0 0 5 9 3 -53.638400442600002 -25.161334112599999 -54.003979222200002 -23.584138428700001 -54.557315125400002 -22.050463563099999 -55.291490251799999 -20.5902685633 -57.019285000799997 -17.984147073199999 -59.287073799600002 -15.837099635 -60.481358048700002 -14.9322948693 -61.7647902569 -14.165305821500001 -63.116009920099998 -13.545968072999999 + 0 6 10.190667787600001 3 19.550105514999998 6 +7 0 0 5 9 3 -53.638400442600002 -25.161334112599999 -54.003979222200002 -23.584138428700001 -54.557315125400002 -22.050463563099999 -55.291490251799999 -20.5902685633 -57.019285000799997 -17.984147073199999 -59.287073799600002 -15.837099635 -60.481358048700002 -14.9322948693 -61.7647902569 -14.165305821500001 -63.116009920099998 -13.545968072999999 + 0 6 10.190667787600001 3 19.550105514999998 6 +1 -1.1410225559437421 -3 1 0 +2 -65.199337741099995 -18.0912726864 1 0 -0 1 5 +2 -65.199337741099995 -18.0912726864 1 0 -0 1 5 +1 -1.5707942439259173 -3 1 0 +2 -48.665883218529473 44.095590561284403 0.25806358351695385 0.96612793503882721 0.96612793503882721 -0.25806358351695385 16.999958491399994 +1 0.4297758537132072 0 0 1 +1 0 0 0 -1 +1 -1.141022555939335 3 1 0 +2 -39.417008923704401 36.449851350748546 -0.25806358351695385 -0.96612793503882721 0.96612793503882721 -0.25806358351695385 5 +1 16.866794229852157 -103.63784614149513 -0.986174441105656 -0.16571050573197635 +1 7.6701777438390206e-14 13.75 -3.1006684282903556e-16 1 +1 3911.6304895817957 6499.3691201698348 -0.67542413643493326 -0.73742947860871733 +1 15.954276288775315 -94.946904131213955 0.98608145128065083 0.16626295871373645 +1 15.954276290942104 -94.94690413047293 0.98608145128065083 0.16626295871373645 +1 103.31990096091684 13.7499999994994 -5.3959805358488992e-17 1 +1 40.617501793599956 13.749999999500133 1.5744981088918179e-16 1 +1 -70.371661224885955 -8.4562574013738825 0.063822265525047037 -0.99796128102409387 +1 21.673535471459999 7.2187374316433035e-14 1 4.8753960549998093e-17 +1 -2.9069825835440741 13.749999999500002 -2.2083700185809836e-16 1 +1 2.7295691493399539 13.749999999500007 1.5744981088918179e-16 1 +1 3784.2955411794146 6520.7207913125085 0.66436497377490433 -0.74740830984213102 +1 21.673535471459907 27.499999999000067 1 1.4252296378999826e-16 +1 3971.8289644939905 6681.7051654534916 -0.26702133464174482 -0.96369061780539378 +1 176.51345050295157 3.0543978702276 -0.80345686570370878 -0.59536296908152819 +1 177.95980423359791 27.159349402270202 0.16571050573197635 -0.986174441105656 +1 3958.1371055132831 6701.596712028072 0.73742947860871733 -0.67542413643493326 +1 169.15490339098176 49.750585334153385 0.93066370356847528 -0.36587575877640366 +1 3937.2957309696135 6713.9873264966445 0.95875574290157872 0.2842312886598552 +1 -19.986103661089601 111.22585222703539 0.986174441105656 0.16571050573197635 +1 3750.3722557860119 6646.0672012500845 0.67542413643493326 0.73742947860871733 +1 98.154770125299564 13.749999999999874 -2.5325987856293457e-16 1 +1 -57.261732977796171 58.908724488880189 0.28337080471986642 0.9590104207110659 +1 47.62389377108429 -6.0804114895077272e-14 1 -1.1216459390004489e-17 +1 3753.179616828862 6581.8903119541546 -0.36671077168156607 0.93033499876803005 +1 47.623893771084326 27.499999998999936 1 -1.1216459390004489e-17 +1 3847.31916928172 6495.3920133731162 -0.97634473019227075 0.21621972117682059 +1 51.659950480550776 27.499999998999698 1 4.463158303999126e-17 +1 -36.276058921840587 -67.201594192249274 -0.63659672819119151 0.77119686569401358 +1 51.65995048055062 -2.9967499732940537e-13 1 1.0246013119997385e-17 +1 0.72401602240453478 4.2632564145606011e-14 0 1 +1 0 -4.4999310944149329e-09 0 1 +1 -5.8338234331449961 3 1 0 +1 0 4.2632564145606011e-14 0 1 +1 0.085806014717555584 9.0000000024000499 0 1 +1 -5.8338234331449961 -5.999999997499998 1 0 +1 -5.9221504597538477 3.0000000048999422 1 9.9982531167281116e-15 +1 -5.9221504596673062 12.000000002400498 1 -8.2808033690757895e-14 +1 0 -6.9994854356991709e-10 0 1 +1 -5.9221504597528085 -6.0000000017999762 1 -2.2617277734800597e-15 +2 3772.740180424335 6630.563129428876 0.66436497377502279 -0.74740830984202555 0.74740830984202555 0.66436497377502279 11.5 +1 3.1415926535968892 -7.0004091412556591e-10 0 1 +1 0.36103484742573938 3.0000000049000106 1 -3.0298782539849464e-15 +1 0 -1.4999999940000421 0 1 +1 3766.2939694470901 6640.4092603888193 0.93390620162811866 0.35751812060445259 +1 -2.780555401603459 3.0000000053000022 1 0 +7 0 0 1 2 2 0 -5.9999999925000438 3.1415926535859864 -5.9999999973999536 + -18.064157756899998 2 18.064157756899998 2 +7 0 0 5 15 5 3763.9592168532117 6639.5154700329913 3762.2721924047069 6638.8696477160156 3760.7119748717755 6637.8925789231844 3759.3655242220775 6636.617178101541 3757.2452567282098 6633.6071557661789 3756.4205598707335 6630.0188910326005 3756.3703200554241 6628.1649620779262 3756.9994717373393 6624.5372993502842 3758.9536093225533 6621.4168642840223 3760.2290101440476 6620.0704136341919 3763.2390324792518 6617.9501461400505 3766.8272972126642 6617.125449282159 3768.6812261673217 6617.0752094665668 3770.4950575311677 6617.3897853073458 3772.1820819797226 6618.0356076239641 + -18.064157756899998 6 -9.0320788784400001 3 0 3 9.0320788784400001 3 18.064157756899998 6 +1 3.1415926535859859 -2.9994851047376869e-10 0 1 +1 -2.7805554015991327 12.000000002799531 1 8.0446733488448614e-14 +1 3.0532680315688072 -2.9995561590112629e-10 -4.9343245552602314e-17 1 +1 1.1935149577406279 -9.0000000101999262 -1.2335811388150579e-16 1 +1 3774.5168733050687 6618.9294128112178 -0.93390620162811866 -0.35751812060445259 +1 0 -7.999858553375816e-10 0 1 +1 -4.8144415177009865 -6.0000000045999968 1 0 +1 -4.8144415176422575 2.9999999982000034 1 0 +1 1.3981947154945544 -1.000159954855917e-10 0 1 +1 -0.27465414794184356 2.9999999962999979 1 0 +1 -0.27465414735536026 -6.0000000020000002 1 0 +7 0 0 1 2 2 0 -7.9999999999998508 3.1415926535951897 -8.0000000000001492 + 4.4524817489300004 2 10.7356670561 2 +7 0 0 1 2 2 0 -8.0000000000001492 3.1415926536647873 -7.9999999999998508 + 10.7356670561 2 17.018852363299999 2 +7 0 0 1 2 2 0 0.99999999750014723 3.1415926535950049 0.9999999974998488 + 0.97681177770100003 2 7.2599970848800002 2 +7 0 0 1 2 2 0 0.9999999974998488 3.1415926536649721 0.99999999750014723 + 7.2599970848800002 2 13.5431823921 2 +7 0 0 1 2 2 3.1415926535965206 8.9999999954000103 6.2831853071795862 8.9999999954000032 + 8.4398167790700001 2 24.147780047000001 2 +7 0 0 1 2 2 0 8.9999999954000032 3.1415926535965206 8.9999999954000103 + 24.147780047000001 2 39.855743314999998 2 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535965206 7.1054273576010019e-15 0 1 +1 3.1415926535965206 7.1054273576010019e-15 0 1 +1 -0.21977979060100539 18.499999999700005 1 0 +2 -14.284007116259215 85.973058205403092 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 5 +1 -0.21977979059427755 18.499999999700005 1 0 +2 -14.284007116259215 85.973058205403092 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 5 +1 0 -1.4921397450962104e-13 0 1 +1 3.1415926535950227 -1.4921397450962104e-13 0 1 +1 -0.59101865043077362 -16 1 0 +1 3.1415926536649472 1.4921397450962104e-13 0 1 +1 0 1.4921397450962104e-13 0 1 +1 0 -1.4921397450962104e-13 0 1 +1 3.1415926535950298 -1.4921397450962104e-13 0 1 +1 3.1415926536649512 1.4921397450962104e-13 -3.7396986075709803e-16 1 +1 0 1.4921397450962104e-13 0 1 +1 -0.59101865043077362 10.500000001799997 1 0 +2 -17.396897482662549 104.49845527042048 0.063822265525205368 -0.99796128102408377 0.99796128102408377 0.063822265525205368 2 +1 -3.7326113040904882 -16 1 0 +1 -3.7326113040904882 10.500000001799997 1 0 +2 -17.396897482662549 104.49845527042048 0.063822265525205368 -0.99796128102408377 0.99796128102408377 0.063822265525205368 2 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 -0.21977979058061425 9 1 0 +2 11.599735404862283 -69.032210874483084 0.99792536962780554 0.064381337771187458 -0.064381337771187458 0.99792536962780554 5 +1 3.1415926535973906 0 0 1 +1 3.1415926535973902 0 0 1 +1 -0.21977979058061425 18.499999999700002 1 0 +2 13.212008478916736 -77.605574646746533 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 5 +1 -0.2197797905942771 9 1 0 +2 11.599735404862283 -69.032210874483084 0.99792536962780554 0.064381337771187458 -0.064381337771187458 0.99792536962780554 5 +1 -0.2197797905942771 18.499999999700002 1 0 +2 13.212008478916736 -77.605574646746533 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 5 +1 3.1415926535851568 -4.000000330961484e-10 0 1 +1 0 -4.000000330961484e-10 0 1 +1 -1.6744650651118398 2.9999999921000122 1 -2.2617277734885064e-15 +2 11.599735399416184 -69.032210876738404 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 11.5 +1 0 -3.999929276687908e-10 0 1 +1 3.1415926535851568 -3.999929276687908e-10 0 1 +7 0 0 1 2 2 0 -6.000000003699995 3.1415926535851568 -6.0000000016000001 + -18.0641577574 2 18.0641577574 2 +7 0 0 5 15 5 3900.4899949511268 6526.1298040059346 3899.1566030563254 6527.3484934700255 3897.5839220448897 6528.3053720477228 3895.8403478757905 6528.9374525212079 3892.1993092138077 6529.4839012085449 3888.6219717358867 6528.6130250551332 3886.9421302283286 6527.8270803257528 3883.981129527474 6525.6388747697874 3882.0673723717673 6522.4935127470399 3881.4352918981945 6520.7499385778892 3880.8888432106564 6517.108899915982 3881.7597193638326 6513.5315624380255 3882.5456640930033 6511.8517209304018 3883.6397668709542 6510.3712205798593 3884.9731587655401 6509.1525311157111 + -18.0641577574 6 -9.0320788787000001 3 1.7763568394e-15 3 9.0320788787000001 3 18.0641577574 6 +7 0 0 1 2 2 0 -6.0000000074000042 3.1415926535851568 -5.9999999964999944 + -18.064157756499998 2 18.064157756499998 2 +7 0 0 5 15 5 3884.9731587679566 6509.1525311134437 3886.3065506629159 6507.9338416496266 3887.8792316745094 6506.976963072203 3889.6228058436104 6506.3448825989872 3893.2638445054176 6505.7984339121631 3896.8411819829839 6506.6693100659286 3898.5210234904171 6507.4552547954654 3901.4820241909379 6509.6434603515354 3903.3957813462803 6512.7888223743603 3904.0278618198004 6514.5323965433299 3904.574310507061 6518.1734352051244 3903.7034343538335 6521.7507726829017 3902.9174896246318 6523.4306141903644 3901.8233868467323 6524.9111145408187 3900.4899949522355 6526.1298040049132 + -18.064157756499998 6 -9.0320788782400001 3 0 3 9.0320788782400001 3 18.064157756499998 6 +1 -4.8160577187016331 2.99999999209999 1 2.2617277734885052e-15 +2 11.599735399416184 -69.032210876738404 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 11.5 +1 0 5.0049919764205697e-10 0 1 +1 3.1415926535749144 5.0049919764205697e-10 -8.8817841964461388e-16 1 +1 -3.0102976341359069 -16 1 0 +1 3.1415926535749357 4.9950443781199283e-10 8.8817841964461388e-16 1 +1 0 4.9950443781199283e-10 0 1 +1 -3.0102976341359069 -7.9999999994999982 1 0 +2 14.509337179174231 -86.288636276025017 0.99792536962780554 0.064381337771187458 -0.064381337771187458 0.99792536962780554 2 +1 0 5.0049919764205697e-10 0 1 +1 3.1415926535749215 5.0049919764205697e-10 0 1 +1 -3.0102976341359069 1.0000000025999967 1 0 +2 14.50933718041037 -86.288636276546512 0.99792536962780554 0.064381337771187458 -0.064381337771187458 0.99792536962780554 2 +1 3.1415926535749215 4.9950443781199283e-10 0 1 +1 0 4.9950443781199283e-10 0 1 +1 -3.0102976341365615 10.500000002299991 1 1.1308638867481953e-15 +2 16.111942327281415 -94.863627370746443 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 2 +1 -6.1518902877257071 -7.9999999994999982 1 0 +2 14.509337179174231 -86.288636276025017 0.99792536962780554 0.064381337771187458 -0.064381337771187458 0.99792536962780554 2 +1 -6.1518902877257071 -16 1 0 +1 -6.1518902877257071 1.0000000025999967 1 0 +2 14.50933718041037 -86.288636276546512 0.99792536962780554 0.064381337771187458 -0.064381337771187458 0.99792536962780554 2 +1 -6.1518902877257071 10.500000002300006 1 -1.1308638867474459e-15 +2 16.111942327281415 -94.863627370746443 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 2 +7 0 0 1 2 2 0 -6.0000000048000075 1.5707963267951541 -6.0000000048000928 + 2.2474917242100001 2 23.453242136899998 2 +7 0 0 5 6 2 24.913084910492842 -66.795086641815743 24.210271604743333 -62.612574540305438 21.869060825659652 -58.701359974236233 18.006737527404564 -55.950320768391173 13.545123268006794 -55.016048059893244 9.3626111664771585 -55.718861365964663 + 2.2474917242100001 6 23.453242136899998 6 +7 0 0 1 2 2 1.5707963267951541 -6.0000000048000928 3.1415926535944751 -6.0000000047999933 + 23.453242136899998 2 44.658992548599997 2 +7 0 0 5 6 2 9.3626111664771585 -55.718861365964663 5.1800990651271519 -56.421674672024487 1.2688844994622634 -58.762885451162269 -1.482154706089851 -62.625208749298231 -2.4164274145027917 -67.086823008460058 -1.7136141084403889 -71.269335109849962 + 23.453242136899998 6 44.658992548599997 6 +7 0 0 1 2 2 -1.7136195481136163 -71.269302731089454 2.6421746084357896 -97.191454425552848 + -13.142782156000001 2 13.142782156000001 2 +7 0 0 1 2 2 24.913084914203836 -66.79508664217758 29.266377973438434 -92.702353835393652 + -13.135235569600001 2 13.135235569600001 2 +1 0.46427481182618546 -84.23036238969577 0.16571050555986444 -0.98617444113457653 +1 -1.6728512980805683 2.9999999973000091 1 -4.5234660518768177e-15 +2 11.599735402165308 -69.03221087585959 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 13.5 +1 -1.6728512979715937 2.9999999973000091 1 -4.5234555474556392e-15 +2 11.599735402165308 -69.03221087585959 0.064381337771187458 -0.99792536962780554 0.99792536962780554 0.064381337771187458 13.5 +1 27.089731441494358 -79.748720239687302 0.16571050567781417 -0.98617444111475683 +1 0 7.999929607649392e-10 0 1 +1 1.5707963267951541 7.9990769563664799e-10 0 1 +1 1.5707963267951541 7.9990769563664799e-10 2.4671622763691225e-17 1 +1 3.1415926535944716 8.000071716196544e-10 -9.8686491054764899e-17 1 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 -1.7905761174035848 9.0000000000000107 1 -2.2617277735033768e-15 +1 3.141592653564504 7.1054273576010019e-15 0 1 +1 3.141592653564504 7.1054273576010019e-15 0 1 +1 -1.7905761174035848 18.499999999699998 1 1.13086388675169e-15 +2 153.00242447696024 24.154795623375492 0.063822265525205368 -0.99796128102408377 0.99796128102408377 0.063822265525205368 5 +1 -1.7905761173891785 8.9999999999999893 1 2.2617277734669583e-15 +1 -1.790576117389183 18.499999999700012 1 -1.1308638867334776e-15 +2 153.00242447696024 24.154795623375492 0.063822265525205368 -0.99796128102408377 0.99796128102408377 0.063822265525205368 5 +7 0 0 1 2 2 3.0599199677863465 5.9999999812000055 3.1400055482038915 5.9999999808000126 + 18.614045512400001 2 19.615115267699998 2 +7 0 0 1 2 2 5.702445014694165 -3.0000000098999635 5.7825305951392343 -3.0000000102999564 + 18.614045512400001 2 19.615115267699998 2 +7 0 0 1 2 2 1.5692092209207582 5.999999989499976 3.0599199677871463 5.9999999812000055 + -0.019838823690999999 2 18.614045512400001 2 +7 0 0 1 2 2 0 -3.0000000016000499 1.4907107467157275 -3.0000000098999635 + -0.019838823690999999 2 18.614045512400001 2 +1 1.5692092210815554 -2.8421709430404007e-14 0 1 +1 -1.6744359700554807 2.9999999907000046 1 0 +1 0 0 0 1 +1 3.1415926535974723 0 0 1 +7 0 0 1 2 2 0 -6.0000000056000005 3.1415926535876055 -5.9999999988999875 + -19.634954084899999 2 19.634954084899999 2 +7 0 0 5 15 5 3948.745617907608 6693.0982921435052 3947.2963174338738 6694.4229967731399 3945.5869118138744 6695.4631319195669 3943.6917424895069 6696.1502310527376 3939.7341090536738 6696.7443121660262 3935.8456712112061 6695.7978207854494 3934.0197316739072 6694.9435861614757 3930.8011834504632 6692.5651955049179 3928.7209131569621 6689.1463842647445 3928.0338140236163 6687.251214941025 3927.4397329105609 6683.2935815043284 3928.3862242910877 6679.4051436622176 3929.2404589150196 6677.5792041254172 3930.429654243223 6675.9699300132534 3931.8789547177048 6674.6452253842826 + -19.634954084899999 6 -9.8174770424699993 3 0 3 9.8174770424699993 3 19.634954084899999 6 +1 3.1415926535876046 7.1054273576010019e-15 0 1 +1 0 7.1054273576010019e-15 0 1 +7 0 0 1 2 2 3.1400055478378062 5.9999999808000126 3.1415926535876033 5.9999999808000126 + 19.615115263100002 2 19.634954084899999 2 +7 0 0 1 2 2 1.5707963267939118 -3.0000000102999564 1.5723834325442785 -3.0000000102999564 + 19.615115263100002 2 19.634954084899999 2 +1 -4.8160286236354057 -6.000000003799979 1 -2.2617277734796404e-15 +2 3940.312286313037 6683.8717587642186 0.66436497377502279 -0.74740830984202555 0.74740830984202555 0.66436497377502279 12.5 +1 1.4671566835419911 2.9999999907000046 1 0 +1 1.5692092205996522 2.8421709430404007e-14 0 1 +1 -4.816028623637596 5.9999999925000012 1 0 +1 -5.3150962302622204 -2.9999999985999213 1 -9.532939064089309e-15 +1 -4.8160286236354057 5.9999999925004444 1 -9.0516757680412775e-14 +1 -3.2436451910911277 -2.9999999985995247 1 -9.0516757644152373e-14 +7 0 0 1 2 2 0 -8.0000000039002117 3.1415926534196537 -8.0000000038997925 + 1.1481745586300001 2 7.4313598658200002 2 +7 0 0 1 2 2 0 -8.0000000038997925 3.1415926536640519 -8.0000000039002117 + 7.4313598658100002 2 13.714545172999999 2 +1 -5.3150962299330962 3.0000000016999948 1 0 +1 -3.2436451907327468 3.0000000016999948 1 0 +1 0.96808907724649096 3.0000000016999948 1 0 +1 -3.2436451905452146 3.0000000016999948 1 0 +1 -2.0804577089401013 0.99999999819952201 1 1.2891848309562589e-13 +1 -5.2220503622859491 0.99999999820086849 1 -1.2891848308561746e-13 +1 5.7825305947682111 -3.9995740053200279e-10 -1.4802973656487727e-16 1 +1 1.5707963267889733 -3.9995740053200279e-10 -3.7007434141219317e-17 1 +1 5.7024450146943337 -3.9996450595936039e-10 1.4802973656734428e-16 1 +1 1.4907107467150962 -3.9996450595936039e-10 -3.700743414183607e-17 1 +1 1.0701416146260732 -3.9995029510464519e-10 1.4802973660928609e-16 1 +1 -0.42056913253336248 -3.9995740053200279e-10 -1.4802973656487709e-16 1 +1 1.6508819066669864 -3.9995740053200279e-10 -3.7007434141219273e-17 1 +1 0 -4.0004977108765161e-10 0 1 +1 0 -9.9795727237506071e-11 0 1 +1 3.1415926534198881 -9.9795727237506071e-11 0 1 +1 -3.6512540354910525 -16.000000000000014 1 2.2617277734315376e-15 +1 3.1415926536638104 -1.0021494745160453e-10 -8.8817842013311205e-16 1 +1 0 -1.0021494745160453e-10 0 1 +1 0 -9.9795727237506071e-11 0 1 +1 3.141592653419889 -9.9795727237506071e-11 -7.4793972187635579e-16 1 +1 3.1415926536638246 -1.0021494745160453e-10 0 1 +1 0 -1.0021494745160453e-10 0 1 +1 -3.6512540354910525 10.499999997899991 1 1.1308638867160449e-15 +2 171.24665163699817 27.220439979056938 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 2 +1 -0.50966138214520473 -15.999999999999998 1 -2.2617277736078248e-15 +1 -0.50966138214520473 10.499999997899998 1 -1.1308638868036363e-15 +2 171.24665163699817 27.220439979056938 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 2 +1 0.52359877559042722 -5.0017945341096492e-10 -1.2918958832471602e-16 1 +1 3779.3599420748596 6660.0520032804488 0.97242247370700607 -0.23322635492059474 +1 11.469456496445307 104.41348264040644 -0.62304053028250761 0.78218955351327202 +1 -5.1508282869601656 -13.750000000000036 1 6.785183320557509e-15 +2 51.255944573533661 118.66524351922165 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 40 +1 -5.1508282869601656 13.749999998999996 1 0 +2 3801.9538269412287 6695.7674577546741 -0.74740830984202555 -0.66436497377502279 -0.66436497377502279 0.74740830984202555 40 +1 0 -1.4210854715202004e-13 0 1 +1 97.554515145077715 13.749999999999401 3.3979655774767399e-15 1 +1 0 -4.9969628435064806e-10 0 1 +1 151.0713906549085 49.721544693277657 -0.986174441105656 -0.16571050573197635 +1 3923.0586230595063 6702.8374818972552 -0.67542413643493326 -0.73742947860871733 +1 0.54105206813827755 -5.0019721697935893e-10 4.1986616205532715e-16 1 +1 11.092981763095354 13.749999999499931 2.9217037810118824e-17 1 +1 3854.770824323115 6669.7047645647563 -0.95875574290157872 -0.2842312886598552 +1 54.323748453881493 27.499999998999662 1 -5.2646339559997493e-17 +1 76.854219659471212 65.621605810495197 -0.93066370356847528 0.36587575877640366 +1 54.323748453881336 -3.3322090665364469e-13 1 -1.1556232319999318e-17 +1 -4.6097762188662985 -13.750000000000034 1 6.5663064389074243e-15 +2 131.72255544786279 87.031064387573224 -0.99796128102408377 -0.063822265525205368 -0.063822265525205368 0.99796128102408377 40 +1 -4.6097762188662985 13.749999999000057 1 -1.3132612877814467e-14 +2 3884.849318612281 6720.342530807432 -0.74740830984202555 -0.66436497377502279 -0.66436497377502279 0.74740830984202555 40 +1 3966.0087838369409 6671.2613445026172 -0.67542413643493326 -0.73742947860871733 +1 165.49930513688236 -1.5971073474126563 -0.986174441105656 -0.16571050573197635 +1 0.4712388980580855 -5.0037840537697775e-10 1.9580296980464775e-16 1 +1 -5.7093336476045433 -13.750000000000046 1 7.5390925779700711e-15 +2 166.00173681504162 -42.073457299964993 -0.063822265525205368 0.99796128102408377 0.99796128102408377 0.063822265525205368 40 +1 -5.7093336476045433 13.749999998999996 1 0 +2 3991.3103152799067 6639.6635621482592 -0.66436497377502279 0.74740830984202555 0.74740830984202555 0.66436497377502279 40 +1 0 -3.0198066269804258e-13 0 1 +1 125.37571236808888 13.750000000000341 -9.1698936819065543e-15 1 +1 3925.0310973514725 6515.6568214666586 -0.3828915043757577 0.92379331880939108 +1 3937.8625519209209 6596.5692224866707 0.26702133464174482 0.96369061780539378 +1 69.574408449906556 27.500000000000188 1 4.6023331439991921e-17 +1 2.8078731021295518 13.749999999999297 -1 1.3927481552549415e-13 +2 3961.5100379860919 6532.1131760536982 0.74740830984202555 0.66436497377502279 -0.66436497377502279 0.74740830984202555 40.000000000000007 +1 2.8078731021295527 -13.750000000000746 -1 1.5534498654766624e-13 +2 76.333855318569391 -108.51751725879048 0.99796128102408377 0.063822265525205368 -0.063822265525205368 0.99796128102408377 40.000000000000007 +1 97.353277303665408 -43.157212651296369 0.80345686570370878 0.59536296908152819 +1 69.574408449906628 1.8924561995497117e-13 1 -1.7643884719997882e-17 +1 37.452276398291318 -99.043999602465064 0.26659060633435527 0.96380986123523404 +1 0 -5.0055604106091778e-10 0 1 +1 0.66322511575615561 -5.0063775347553019e-10 2.0185873175736879e-17 1 +1 13.773104531586023 13.749999999500035 -1.2696569772187004e-16 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -4.16049991609 1 0 +2 -65 16 1 0 -0 1 4 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 0 2.83950008391 1 0 +2 -65 16 1 0 -0 1 4 +1 0 -4.16049991609 1 0 +2 -65 16 1 0 -0 1 4 +1 0 2.83950008391 1 0 +2 -65 16 1 0 -0 1 4 +1 0 2.83950008391 1 0 +2 -65 -18 1 0 -0 1 4 +1 0 2.83950008391 1 0 +2 -65 -18 1 0 -0 1 4 +1 0 0 0 1 +1 0.00024841030000288811 2 0 -1 +1 -4.7123889803846897 -50 1 0 +2 53.499751589699997 -11.999751589700001 1 0 -0 1 33.000248411299992 +1 1.5707887992667127 0 0 1 +1 65 50 0 1 +1 0 0 0 1 +1 54.998518348079998 50 0 1 +1 -6.2831807553015349 -50 1 0 +2 60.500078944800002 -1.9983999996099999 1 0 -0 1 25.999921055400002 +1 1.0821117570382572 0 0 1 +1 29.02014024647923 2 1.5758285442694932e-26 -1 +1 0 0 0 1 +1 -1.5281856552769534e-16 2 1.5758285442694932e-26 -1 +1 -1.0821054642780075 -50 1 0 +2 5.2998818036899999 -44.0004740595 1 0 -0 1 89.000474059599995 +1 0.28847929844500025 0 0 1 +1 -1.5848104793828522e-06 50 0 1 +7 0 0 1 2 2 -6.3480566594618319e-16 0 17.8336924567 0 + 253.667619105 2 271.48631645500001 2 +7 0 0 5 6 2 23 43.222181183300002 19.507530172599999 43.930901568800003 15.9795434532 44.464822943599998 12.427648101899999 44.8215902775 8.8637394700400005 45 5.2999999999999998 45 + 253.667619105 6 271.48631645500001 6 +1 17.8336924567 25 0 1 +1 34.799999999999997 27 0 -1 +1 0 -22.5 0 1 +1 4.1421356236821243 3.5 0 1 +1 -24.464466094100001 50.464466094099997 -0.70710678118654757 0.70710678118654757 +1 7.7279220614041497 0 1 0 +1 11.313708498984761 3.5 0 1 +1 59.5 3.5 0 1 +1 -3.5964800305756251e-15 25 0 1 +1 0 25 0 1 +7 0 0 1 2 2 -5.0214983573291461e-16 0 29.965332826399997 0 + 365.97542723800001 2 395.77050293600001 2 +7 0 0 5 6 2 -78.862687876999999 16.500914749 -81.842187261500001 11.3402706638 -84.147352448999996 5.7902787984600002 -85.7105434594 -0.0314708573361 -86.494623900099995 -5.98978312823 -86.499977001199994 -11.948795860200001 + 365.97542723800001 6 395.77050293600001 6 +1 29.965332826399997 25 0 1 +1 41.051204139799999 25 0 1 +1 0 0 0 1 +1 39 50 0 1 +1 -3.1416001811202254 -50 1 0 +2 -55.499766644799998 -13.999766644799999 1 0 -0 1 31.000233355999999 +1 0.78539063586838664 0 0 1 +1 0 50 0 1 +1 -68.880362803899999 -44.460120934599999 0.70710678118654757 -0.70710678118654757 +1 12.077212795244037 0 1 0 +1 146.84048373849998 3.5 0 1 +1 24.154425590558795 3.5 0 1 +1 0 3.5 0 1 +1 110.8404837385 3.5 0 1 +1 -21.804949832599998 -50.464466094099997 0.70710678118654757 0.70710678118654757 +1 3.5857864375806114 0 1 0 +1 0.78539816339744817 -22.5 0 1 +1 7.1715728752319245 3.5 0 1 +1 8.3775804095730013 12.727922061357855 -1 0 +2 -68.458904109599999 -1 1 0 -0 1 9 +1 2.0943951023934146 10.60660171779821 1.0467283057891829e-16 1 +1 6.2831853071795862 10.606601717798213 0 1 +1 8.3775804095730013 8.4852813742385749 -1 -1.1308638867425838e-15 +1 0 -17.5 1 0 +1 5.2359877559832082 10.606601717798213 0 1 +1 3.1415926535897913 10.606601717798213 0 1 +1 10.995574287564276 12.727922061357855 -1 0 +2 -68.458904109599999 -1 0 1 -1 0 9 +1 10.995574287564276 8.4852813742385713 -1 0 +1 -4.7123889803846897 -17.5 1 0 +1 8.3775804095730013 15.556349186104043 -1 1.1308638867425838e-15 +2 -6.4589041095899997 -1 1 0 -0 1 11 +1 2.0943951023934146 13.435028842544401 1.0467283057891829e-16 1 +1 6.2831853071795862 13.435028842544401 0 1 +1 8.3775804095730013 11.313708498984752 -1 1.6962958301138756e-15 +1 0 -22 1 0 +1 5.2359877559832082 13.435028842551475 0 1 +1 3.141592653589794 13.435028842551475 0 1 +1 10.995574287564276 15.556349186104045 -1 5.6543194337129208e-16 +2 -6.4589041095899997 -1 0 1 -1 0 11 +1 10.995574287564276 11.313708498984759 -1 0 +1 -4.7123889803846897 -22 1 0 +1 3.1415926535870851 2.7924231826891863 8.174328850962241e-14 1 +1 3.1415926535870859 2.7924231826891863 8.174328850962241e-14 1 +1 0.50000000000000089 0 1 0 +2 0 -42 -1 0 0 1 8.0302016061000003 +1 6.2831853071795862 2.7924231826891863 0 1 +1 0 2.7924231826891863 0 1 +1 0.50000000000000089 5.5848463653722087 1 0 +2 -40 -22 -1 0 0 1 9 +1 -5.7831853071814621 0 1 0 +2 0 -42 -1 0 0 1 8.0302016061000003 +1 -5.7831853071825634 5.5848463653722087 1 0 +2 -40 -22 -1 0 0 1 9 +1 3.1415926535870859 2.7924231826891859 8.1822805327238757e-14 1 +1 3.1415926535870859 2.7924231826891859 8.1743288509622398e-14 1 +1 0.50000000000000044 -1.1356582856289599e-15 1 1.9637245312182664e-16 +2 0 0 -1 0 0 1 8.0302016061000003 +1 6.2831853071795862 2.7924231826891863 0 1 +1 0 2.7924231826891863 0 1 +1 0.50000000000000089 5.5848463653722087 1 0 +2 -40 20 -1 0 0 1 9 +1 -5.7831853071814621 1.135658285627972e-15 1 -1.9637245312159212e-16 +2 0 0 -1 0 0 1 8.0302016061000003 +1 -5.7831853071825634 5.5848463653722087 1 0 +2 -40 20 -1 0 0 1 9 +1 0 -44.5 1 0 +2 0 -42 1 0 -0 1 6.7999999999999972 +1 0 -44.5 1 0 +2 0 -42 1 0 -0 1 6.7999999999999972 +1 0 -44.5 1 0 +2 0 0 1 0 -0 1 6.7999999999999972 +1 0 -44.5 1 0 +2 0 0 1 0 -0 1 6.7999999999999972 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 -4.16049991609 1 0 +2 -65 -18 1 0 -0 1 4 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 0 -4.16049991609 1 0 +2 -65 -18 1 0 -0 1 4 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 6.2831853071795862 0 0 1 +1 0 0 0 1 +1 3.1415926535882988 4.0617064475417965 4.2359744698736479e-14 1 +1 3.1415926535882988 4.0617064475417965 4.2359744698736479e-14 1 +1 -2.6415926535904455 8.123412895091576 1 -5.6543194337117444e-16 +2 33 -4 -1 0 0 1 12 +1 0 4.0617064475417965 0 1 +1 6.2831853071795862 4.0617064475417965 0 1 +1 -2.6415926535897927 8.1234128950915689 1 5.6543194337140933e-16 +2 33 -4 -1 0 0 1 12 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535897931 0 0 1 +1 3.1415926535897931 0 0 1 +1 0 0 0 1 +1 65.698348114799998 26 0 -1 +1 -1.5707963267948966 -26.000000000000007 1 0 +2 -12.1983481148 -55 1 0 -0 1 10 +1 -42.340483738499998 -53 1 0 +1 128.84048373849998 0 -1 0 +1 -86.5 -12.9743979301 0 1 +1 40.025602069900003 0 1 0 +1 28.710068817900002 3.5 0 1 +1 42.145513389709926 3.5 0 1 +1 -68.326309529599996 34.750457374500002 0.50000000000018996 0.86602540378432902 +1 21.072756694829962 0 1 0 +1 -42.394965591099997 53 1 0 +1 44.105034408900003 0 1 0 +1 -3.9269908169943126 -26 1 0 +2 -14.8578643763 55 1 0 -0 1 10 +1 0.78539816339744828 0 0 1 +1 14.6421356237 26 0 -1 +1 -4.7789321881299998 45 -1 0 +1 24.72106781187 52 -1 0 +1 59.8946005755 27.7702704676 -0.8829475928588979 0.46947156278594571 +1 14.510070123260284 52 -1 -1.5748819111832277e-26 +1 86.5 -6.9992591740399996 0 -1 +1 59.999259174039999 0 1 0 +1 20.650701737399999 -45 1 0 +1 32.849298262600001 52 -1 0 +1 1.0707963267948957 -0.75 1 0 +2 0 9.3000000000000007 1 0 -0 1 11.300000000000001 +2 -40 20 -1 5.5511151231299994e-17 5.5511151231299994e-17 1 11.299999999999997 +2 -40 -21.999999999999996 1 -5.5511151231299994e-17 -5.5511151231299994e-17 -1 11.300000000000001 +1 -5.2123889803849357 -0.75 1 0 +2 0 9.3000000000000007 1 0 -0 1 11.300000000000001 +2 -40 20 -1 5.5511151231299994e-17 5.5511151231299994e-17 1 11.299999999999997 +2 -40 -21.999999999999996 1 -5.5511151231299994e-17 -5.5511151231299994e-17 -1 11.300000000000001 +1 1.0707963267948961 0 1 0 +2 0 12.199999999999999 1 0 -0 1 15.300000000000001 +2 33 -4.0000000000000009 -1 5.5511151231299994e-17 5.5511151231299994e-17 1 15.300000000000001 +1 -5.2123889803851542 0 1 0 +2 0 12.199999999999999 1 0 -0 1 15.300000000000001 +2 33 -4.0000000000000009 -1 5.5511151231299994e-17 5.5511151231299994e-17 1 15.300000000000001 +1 1.0707963267948961 0 1 0 +2 0 12.199999999999999 1 0 -0 1 12.199999999999999 +2 33 -4.0000000000000009 -1 5.5511151231299994e-17 5.5511151231299994e-17 1 12.199999999999999 +1 -5.2123889803831265 0 1 0 +2 0 12.199999999999999 1 0 -0 1 12.199999999999999 +2 33 -4.0000000000000009 -1 5.5511151231299994e-17 5.5511151231299994e-17 1 12.199999999999999 +1 1.0707963267948957 -0.75 1 0 +2 0 9.3000000000000007 1 0 -0 1 9.3000000000000007 +2 -40 20 -1 5.5511151231299994e-17 5.5511151231299994e-17 1 9.2999999999999972 +2 -40 -21.999999999999996 1 -5.5511151231299994e-17 -5.5511151231299994e-17 -1 9.3000000000000007 +1 -5.2123889803847998 -0.75 1 0 +2 0 9.3000000000000007 1 0 -0 1 9.3000000000000007 +2 -40 20 -1 5.5511151231299994e-17 5.5511151231299994e-17 1 9.2999999999999972 +2 -40 -21.999999999999996 1 -5.5511151231299994e-17 -5.5511151231299994e-17 -1 9.3000000000000007 +1 -5.2123889803864545 7.1079862832072918 1 -2.8271597168548728e-16 +1 -5.2123889803864545 -8.881784197e-16 1 0 +1 0 3.553993141607557 0 1 +1 6.2831853071795862 3.553993141607557 0 1 +1 -5.212388980384306 0 1 0 +2 0 8 1 0 -0 1 10.265711135 +1 3.1415926535896666 3.553993141607557 -1.88057273662613e-14 1 +1 3.1415926535896666 3.553993141607557 -1.88057273662613e-14 1 +1 1.0707963267948957 7.1079862832072882 1 2.8271597168580465e-16 +1 1.0707963267948957 -8.881784197e-16 1 0 +1 1.0707963267948961 0 1 0 +2 0 8 1 0 -0 1 10.265711135 +1 0 5 0 1 +1 6.2831853071795862 5 0 1 +1 -5.2123889803850805 4 1 0 +1 -5.2123889803850805 6.2831853071795862 1 0 +1 3.141592653590183 5 0 1 +1 3.141592653590183 5 0 1 +1 -5.2123889803850805 5 1 0 +1 -5.2123889803850805 15.311714550336225 1 5.6543194337122162e-15 +1 1.0707963267948957 4 1 0 +1 -2.0707963267952874 6.2831853071795862 1 0 +1 1.0707963267948957 5 1 0 +1 -2.0613516725467402 15.311714550336266 1 0 +1 3.1510373078384712 16.547782527835931 -1.4371028711494499e-14 1 +1 0 16.547782527835924 0 1 +1 -2.0613516725467402 17.783850505329543 1 0 +2 -4.4408920984999998e-15 15.999999999999998 1 0 -0 1 10.453085056000001 +1 0.0094446543752079622 16.547782527835935 -7.1354122341508787e-14 1 +1 3.1415926537168448 16.547782527835945 -7.1316229980648576e-14 1 +1 -5.2123889803844818 17.783850505329504 1 5.6543194783985335e-15 +2 8.881784197e-16 16 1 0 -0 1 10.453085056000001 +1 0 0.75 0 1 +1 6.2831853071795862 0.75 0 1 +1 3.1415926535902567 0.75 0 1 +1 3.1415926535902567 0.75 0 1 +1 -5.2123889803851542 1 1 0 +1 -5.2123889803851542 3.1415926535898007 1 -1.4135798584280217e-15 +1 1.0707963267948961 1 1 0 +1 -2.0707963267953611 3.1415926535897989 1 -2.6858017310132402e-15 +1 -5.2123889803862173 1.5 1 0 +2 0 15.300000000000001 1 0 -0 1 16 +1 1.0707963267948957 1.5 1 0 +2 0 15.300000000000001 1 0 -0 1 16 +1 -2.0707963267941216 1.5707963267948941 1 1.1308638867428628e-15 +2 -1.4022779760100001e-15 15.300000000000002 1 0 -0 1 15.800000000000001 +1 -5.2123889803839152 1.5707963267949578 1 -9.0469110939429042e-15 +2 -1.4022779760100001e-15 15.300000000000002 1 0 -0 1 15.800000000000001 +1 3.141592653589043 -5.9802829355248832e-11 -1.6114810385468342e-14 1 +1 0 -5.9792171214212431e-11 0 1 +1 0 -5.9795723927891231e-11 0 1 +1 3.1415926535890426 -5.9806382068927633e-11 -1.6114810385468297e-14 1 +1 3.1415926535895289 -3.7712055700467317e-12 1.1025922895796904e-14 1 +1 0 -3.7712055700467317e-12 0 1 +1 0 -3.7712055700467317e-12 0 1 +1 3.1415926535895289 -3.7712055700467317e-12 1.1025922895796904e-14 1 +1 -2.0707963267952345 5.2359877559852102 1 -2.8271597168561557e-16 +1 -1.4424777960769388 2.0943951023904166 1 -5.6543194337129189e-16 +1 -5.2123889803850272 5.2359877559852084 1 0 +1 -5.2123889803850272 2.0943951023904148 1 0 +1 3.7699111843081128 1.6444623440747819e-12 2.4596289536511505e-14 1 +1 0 1.6466827901240322e-12 0 1 +1 0.62831853071831956 1.6489032361732825e-12 2.4702308025893093e-14 1 +1 3.1415926535901546 1.6466827901240322e-12 2.4596289536511546e-14 1 +1 0 0.34999999999999998 0 1 +1 6.2831853071795862 0.34999999999999998 0 1 +1 3.1415926535915575 0.34999999999999998 0 1 +1 3.1415926535915575 0.34999999999999998 0 1 +1 -5.2123889803864545 0.40000000000000002 1 0 +1 -5.2123889803864545 3.141592653589802 1 -1.6962958301129236e-15 +1 1.0707963267948957 0.40000000000000002 1 0 +1 -2.0707963267966614 3.1415926535897971 1 -1.8376538159556666e-15 +1 3.1415926535900751 1.8059553852367571e-11 4.806171518711239e-15 1 +1 0 1.8065549056700547e-11 0 1 +1 0 1.808331262509455e-11 0 1 +1 3.1415926535900751 1.8077317420761574e-11 4.8061715187112974e-15 1 +1 -2.0707963267951865 1.5707963267948966 1 0 +2 -1.7763568394e-15 11.500000000000002 1 0 -0 1 11.800000000000001 +1 -5.2123889803849792 1.5707963267949125 1 -1.9083328088779348e-15 +2 0 11.500000000000002 1 0 -0 1 11.800000000000001 +1 0 0.34999999999999998 0 1 +1 6.2831853071795862 0.34999999999999998 0 1 +1 3.1415926535882299 0.34999999999999998 0 1 +1 3.141592653588229 0.34999999999999998 0 1 +1 -5.2123889803831265 0.40000000000000002 1 0 +1 -5.2123889803831265 0 1 0 +1 1.0707963267948961 0.40000000000000002 1 0 +1 -2.0707963267933329 0 1 0 +1 -5.2123889803845049 1.5707963267948706 1 3.8166656177564454e-15 +2 -1.23601678529e-15 11.499999999999998 1 0 -0 1 11.9 +1 -2.0707963267947114 1.5707963267949105 1 -3.8166656177564454e-15 +2 -1.23601678529e-15 11.499999999999998 1 0 -0 1 11.9 +1 3.1415926535896119 0 -2.8271597168804488e-15 1 +1 0 0 0 1 +1 0 0 0 1 +1 3.1415926535896119 0 -2.8271597168804488e-15 1 +1 0 4.25 0 1 +1 6.2831853071795862 4.25 0 1 +1 3.1415926535913208 4.25 0 1 +1 3.1415926535913208 4.25 0 1 +1 -5.2123889803862173 5.7999999999999998 1 0 +1 11.495574287565804 22.627416997969508 -1 2.2617277734840687e-15 +1 1.0707963267948957 5.7999999999999998 1 0 +1 7.3067840827778063 22.62741699796949 -1 7.9160472071980886e-15 +1 7.3067840827778072 20.930360723121776 -1 9.0469110939406717e-15 +2 0 16.000000000000004 1 0 -0 1 14.800000000000001 +1 11.495574287563416 20.930360723121787 -1 3.3925916602286788e-15 +2 0 16.000000000000004 1 0 -0 1 14.800000000000001 +1 5.2359877559828139 21.77888886053676 1.465419628140081e-14 1 +1 3.1415926535896972 21.778888860536782 1.5177560434308014e-14 1 +1 2.0943951023930207 21.778888860536789 1.4915878357854395e-14 1 +1 6.2831853071795862 21.778888860536775 0 1 +1 -5.2123889803849277 4.5694197534861836 1 0 +1 -5.2123889803849277 -0.75 1 0 +1 0 2.284709876743205 0 1 +1 6.2831853071795862 2.284709876743205 0 1 +1 -5.2123889803848282 0 1 0 +2 0 6 1 0 -0 1 7.8065285868099998 +1 3.1415926535899863 2.284709876743205 -3.1683034219088181e-14 1 +1 3.1415926535899863 2.284709876743205 -3.1683034219088181e-14 1 +1 1.0707963267948957 4.5694197534861836 1 0 +1 1.0707963267948957 -0.75 1 0 +1 1.0707963267948957 0 1 0 +2 0 6 1 0 -0 1 7.8065285868099998 +1 0 3.75 0 1 +1 6.2831853071795862 3.75 0 1 +1 -5.212388980384941 3.25 1 0 +1 -5.212388980384941 6.2831853071795862 1 0 +1 3.141592653590044 3.75 0 1 +1 3.141592653590044 3.75 0 1 +1 -5.212388980384941 3.6500000000000004 1 0 +1 -5.212388980384941 11.909111316929993 1 1.6962958301137409e-15 +1 1.0707963267948957 3.25 1 0 +1 -2.0707963267951479 6.2831853071795862 1 0 +1 1.0707963267948957 3.6500000000000004 1 0 +1 -1.8504471532886373 11.909111316930014 1 -2.8271597168564607e-15 +1 3.3619418270966803 12.897965698930012 -2.6945678834044507e-14 1 +1 0 12.897965698930012 0 1 +1 -1.8504471532886377 13.886820080930507 1 -1.130863869812763e-15 +2 8.881784197e-16 12 1 0 -0 1 8.1624680448099998 +1 0.22034919589643231 12.897965698928584 -7.3118222252784848e-14 1 +1 3.1415926759799664 12.897965698928584 -7.2528785528290296e-14 1 +1 -5.2123889803845618 13.886820080930486 1 2.2617278073449014e-15 +2 6.2172489379000002e-15 12.000000000000005 1 0 -0 1 8.1624680448099998 +1 0 0 0 1 +1 6.2831853071795862 0 0 1 +1 3.1415926535900387 0 0 1 +1 3.1415926535900387 0 0 1 +1 -5.2123889803849357 0.25 1 0 +1 -5.2123889803849357 3.1415926535898051 1 -2.2617277734849904e-15 +1 1.0707963267948957 0.25 1 0 +1 -2.0707963267951426 3.141592653589794 1 -4.2407395752843576e-16 +1 -5.2123889803840378 0.75 1 0 +2 0 11.300000000000001 1 0 -0 1 12 +1 1.0707963267948961 0.75 1 0 +2 0 11.300000000000001 1 0 -0 1 12 +1 -2.0707963267951865 1.5707963267949108 1 -3.3925916602274387e-15 +2 -1.2570549911299999e-15 11.299999999999997 1 0 -0 1 11.800000000000001 +1 -5.2123889803849801 1.5707963267948599 1 5.6543194337123984e-15 +2 -1.2570549911299999e-15 11.299999999999997 1 0 -0 1 11.800000000000001 +1 3.1415926535900698 1.0842882147699129e-11 8.1987631789403288e-15 1 +1 0 1.0839329434020328e-11 0 1 +1 0 1.0842882147699129e-11 0 1 +1 3.1415926535900698 1.0846434861377929e-11 8.1987631789403493e-15 1 +1 3.1415926535908922 2.8776980798284058e-13 -5.5129614478979606e-14 1 +1 0 2.8599345114344032e-13 0 1 +1 0 2.8421709430404007e-13 0 1 +1 3.1415926535908913 2.851052727237402e-13 -5.5129614478979467e-14 1 +1 -2.070796326795068 5.2359877559852093 1 -5.6543194337126102e-16 +1 -1.4424777960769384 2.0943951023904099 1 1.5549378442710529e-15 +1 -5.212388980384862 5.2359877559852066 1 0 +1 -5.212388980384862 2.0943951023904157 1 0 +1 3.769911184307976 1.7421619702417956e-12 2.1627771833831072e-14 1 +1 0 1.7417178810319456e-12 0 1 +1 0.62831853071818322 1.7417178810319456e-12 2.1521753344449503e-14 1 +1 3.1415926535900178 1.7434942378713458e-12 2.1627771833831072e-14 1 +1 0 -0.40000000000000002 0 1 +1 6.2831853071795862 -0.40000000000000002 0 1 +1 3.1415926535900303 -0.40000000000000002 0 1 +1 3.1415926535900303 -0.40000000000000002 0 1 +1 -5.2123889803849277 -0.34999999999999998 1 0 +1 -5.2123889803849277 3.1415926535897953 1 -4.2407395752843694e-16 +1 1.0707963267948957 -0.34999999999999998 1 0 +1 -2.0707963267951341 3.1415926535897936 1 -2.8271597168562459e-16 +1 3.1415926535902639 8.4792173282721706e-12 1.0743206924112559e-14 1 +1 0 8.4909856923331972e-12 0 1 +1 0 8.4909856923331972e-12 0 1 +1 3.1415926535902634 8.4792173282721706e-12 1.0743206924112586e-14 1 +1 -2.0707963267953851 1.5707963267948966 1 0 +2 8.881784197e-16 8.6000000000000014 1 0 -0 1 8.9000000000000004 +1 -5.2123889803851782 1.5707963267948966 1 0 +2 -3.5527136788e-15 8.5999999999999961 1 0 -0 1 8.9000000000000004 +1 0 -0.40000000000000002 0 1 +1 6.2831853071795862 -0.40000000000000002 0 1 +1 3.1415926535899028 -0.40000000000000002 0 1 +1 3.1415926535899028 -0.40000000000000002 0 1 +1 -5.2123889803847998 -0.34999999999999998 1 0 +1 -5.2123889803847998 0 1 0 +1 1.0707963267948957 -0.34999999999999998 1 0 +1 -2.0707963267950067 0 1 0 +1 -5.2123889803850805 1.5707963267949474 1 -7.4919732496686874e-15 +2 0 8.6000000000000014 1 0 -0 1 9 +1 -2.0707963267952874 1.5707963267948966 1 0 +2 0 8.6000000000000014 1 0 -0 1 9 +1 3.141592653590171 0 8.1987631788506937e-15 1 +1 0 0 0 1 +1 0 0 0 1 +1 3.1415926535901706 0 7.916047207166187e-15 1 +1 0 3 0 1 +1 6.2831853071795862 3 0 1 +1 3.1415926535891394 3 0 1 +1 3.1415926535891403 3 0 1 +1 -5.2123889803840378 4.0499999999999998 1 0 +1 11.495574287563624 16.970562748477032 -1 1.5832094414399465e-14 +1 1.0707963267948961 4.0499999999999998 1 0 +1 7.3067840827778063 16.97056274847721 -1 -1.9224686074623924e-14 +1 7.3067840827778072 15.273506473629499 -1 -1.9790118017995215e-14 +2 -1.5006201728799999e-15 12 1 0 -0 1 10.800000000000001 +1 11.495574287564473 15.273506473629324 -1 1.5266662471023926e-14 +2 -1.5006201728799999e-15 12 1 0 -0 1 10.800000000000001 +1 5.2359877559848469 16.122034611084892 -1.0571955888436756e-13 1 +1 3.1415926535917302 16.122034611084885 -1.059812409608138e-13 1 +1 2.0943951023950533 16.122034611084832 -1.059812409608138e-13 1 +1 6.2831853071795862 16.122034611084835 0 1 +Curves 1302 +2 50.5 5.5 9.5 0 0 1 1 0 -0 -0 1 0 8 +2 50.5 5.5 9.5 0 0 1 1 0 -0 -0 1 0 8 +7 0 0 5 6 2 -38 -32.5 13 -16.199999999999999 -32.5 13 5.5999999999999996 -32.5 13 27.399999999999999 -32.5 13 49.200000000000003 -32.5 13 71 -32.5 13 + 0 6 109 6 +7 0 0 5 9 3 71 -32.5 13 75.712388980399993 -32.5 13 80.4247779608 -31.574724587399999 13 84.8946105096 -29.723259324099999 13 92.867471954300001 -24.367471954300001 13 98.223259324099999 -16.3946105096 13 100.07472458700001 -11.9247779608 13 101 -7.2123889803800001 13 101 -2.5 13 + 31.705691563799999 6 55.511447068999999 3 79.317202574099994 6 +7 0 0 5 6 2 101 -2.5 13 101 -0.5 13 101 1.5 13 101 3.5 13 101 5.5 13 101 7.5 13 + 0 6 10 6 +7 0 0 5 6 2 101 7.5 13 101 12.4776888283 13 99.654424864299997 17.455903910100002 13 96.956647293900005 21.945748933499999 13 93.192846020999994 25.470943655100001 13 88.797802672700001 27.807817643500002 13 + 0 6 25.507102763500001 6 +7 0 0 5 6 2 88.797802672700001 27.807817643500002 13 83.672569027799995 30.532952712 13 78.547335382900002 33.258087780499999 13 73.422101737999995 35.983222848899999 13 68.296868093100002 38.708357917400001 13 63.171634448200003 41.433492985900003 13 + 0 6 29.023430645000001 6 +7 0 0 5 6 2 63.171634448200003 41.433492985900003 13 55.7500134434 45.379638872299999 13 47.845323711900001 48.4193390577 13 39.609065293299999 50.472868920099998 13 31.202585726199999 51.5 13 22.797080048600002 51.5 13 + 31.519741269600001 6 73.710500387699994 6 +7 0 0 5 6 2 22.797080048600002 51.5 13 15.8376640389 51.5 13 8.8782480291599999 51.5 13 1.9188320194399999 51.5 13 -5.04058399028 51.5 13 -12 51.5 13 + 0 6 34.797080048600002 6 +7 0 0 5 9 3 -12 51.5 13 -20.4823001647 51.5 13 -28.9646003294 49.834504257299997 13 -37.0102989174 46.501866783399997 13 -51.361449517799997 36.861449517799997 13 -61.001866783399997 22.5102989174 13 -64.334504257299997 14.4646003294 13 -66 5.9823001646899998 13 -66 -2.5 13 + 0 6 43.123692182900001 3 86.247384365800002 6 +7 0 0 5 6 2 -66 -2.5 13 -66 -2.8999999999999999 13 -66 -3.2999999999999998 13 -66 -3.7000000000000002 13 -66 -4.0999999999999996 13 -66 -4.5 13 + 0 6 2 6 +7 0 0 5 6 2 -66 -4.5 13 -66 -13.296459430100001 13 -62.555579886700002 -22.101126014199998 13 -55.601126014199998 -29.055579886699999 13 -46.796459430100001 -32.5 13 -38 -32.5 13 + 0 6 46.336855176699999 6 +2 -22.5 -12.5 8.5 0 0 1 1 0 -0 -0 1 0 6 +2 -22.5 -12.5 8.5 0 0 1 1 0 -0 -0 1 0 6 +2 -22.5 29.5 8.5 0 0 1 1 0 -0 -0 1 0 6 +2 -22.5 29.5 8.5 0 0 1 1 0 -0 -0 1 0 6 +7 0 0 5 15 5 2.0410958904099998 8.5 5 2.0410958904099998 7.0862833058800003 5 2.3186785141900002 5.6725666117699998 5 2.8741180931799999 4.3316168471100003 5 4.4808543041200002 1.9397584137099999 5 6.8727127375199997 0.333022202765 5 8.21366250218 -0.22241737621900001 5 11.041095890399999 -0.77758262378099996 5 13.868529278600001 -0.22241737621900001 5 15.2094790433 0.333022202765 5 17.601337476699999 1.9397584137099999 5 19.208073687599999 4.3316168471100003 5 19.7635132666 5.6725666117699998 5 20.041095890400001 7.0862833058800003 5 20.041095890400001 8.5 5 + 28.274333882299999 6 35.342917352900002 3 42.411500823499999 3 49.480084294000001 3 56.548667764599998 6 +7 0 0 5 15 5 20.041095890400001 8.5 5 20.041095890400001 9.9137166941199997 5 19.7635132666 11.327433388199999 5 19.208073687599999 12.668383152900001 5 17.601337476699999 15.0602415863 5 15.2094790433 16.666977797200001 5 13.868529278600001 17.222417376199999 5 11.041095890399999 17.777582623800001 5 8.21366250218 17.222417376199999 5 6.8727127375199997 16.666977797200001 5 4.4808543041200002 15.0602415863 5 2.8741180931799999 12.668383152900001 5 2.3186785141900002 11.327433388199999 5 2.0410958904099998 9.9137166941199997 5 2.0410958904099998 8.5 5 + 0 6 7.0685834705800001 3 14.1371669412 3 21.205750411699999 3 28.274333882299999 6 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 3.5 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 3.5 +7 0 0 5 15 5 -49.958904109599999 2.1000000000000001 6 -48.953593483399999 2.1000000000000001 6 -47.948282857099997 2.2973924717199998 6 -46.994717754100002 2.6923724964 6 -45.293839593599998 3.8349426061599998 6 -44.151272080600002 5.5358225109700001 6 -43.756293511700001 6.4893882170200001 6 -43.361511637900001 8.5000100721899994 6 -43.756299650899997 10.5106307219 6 -44.151281131399998 11.464195222000001 6 -45.293853837900002 13.165071638100001 6 -46.994735487 14.3076365544 6 -47.948301796099997 14.7026136675 6 -48.953613025000003 14.9000030696 6 -49.958923651299997 14.9 6 + 30.1592894745 6 35.185842605600001 3 40.212395736799998 3 45.2389488679 3 50.265501999100003 6 +1 -50.958904109599999 2.1000000000000001 6 1 0 0 +7 0 0 5 15 5 -51.958923638999998 14.9 6 -52.964232311700002 14.899996932300001 6 -53.969540381999998 14.7026021601 6 -54.923102628400002 14.307620762199999 6 -56.623975198499998 13.1650497359 6 -57.766538439400001 11.4641719361 6 -58.161515472700003 10.5106078818 6 -58.556295814099997 8.4999899341099994 6 -58.161509337299997 6.4893731911000003 6 -57.766529394300001 5.5358103420699996 6 -56.623960963199998 3.8349360287300001 6 -54.923084906600003 2.6923701926999999 6 -53.969521454899997 2.2973917045599999 6 -52.964212782300002 2.1000000000000001 6 -51.958904109599999 2.1000000000000001 6 + 10.053116020899999 6 15.079659384299999 3 20.106202747699999 3 25.132746111100001 3 30.1592894745 6 +1 -50.958904109599999 14.9 6 1 0 0 +2 28.235903341899999 -16.5 0 0 0 -1 -1 0 -0 0 1 0 8 +1 33.926407280100001 -10.876996805099999 -2.5 0 0 -1 +2 28.235903341899999 -16.5 -4.5 0 0 -1 -1 0 -0 0 1 0 8 +1 28.235903341899999 -8.5 -2.5 0 0 -1 +1 15.358848356199999 -8.5 -4.5 -1 0 0 +1 15.358848356199999 -8.5 0 -1 0 0 +1 2.4817933703700001 -8.5 -2.25 0 0 1 +2 2.4817933703700001 -16.5 0 0 0 1 1 0 -0 -0 1 0 8 +2 2.4817933703700001 -16.5 -4.5 0 0 1 1 0 -0 -0 1 0 8 +1 -5.41758793251 -15.235177865600001 -2.5 0 0 1 +2 -47.7802294293 -13.5 0 0 0 -1 -1 0 -0 0 1 0 8 +1 -39.786480993200001 -13.1837944664 -2.5 0 0 -1 +2 -47.7802294293 -13.5 -4.5 0 0 -1 -1 0 -0 0 1 0 8 +1 -47.7802294293 -5.5 -2.5 0 0 -1 +2 -47.7802294293 30.5 0 0 0 1 1 0 -0 -0 1 0 8 +1 -47.7802294293 22.5 -2.5 0 0 1 +2 -47.7802294293 30.5 -4.5 0 0 1 1 0 -0 -0 1 0 8 +1 -39.786480993200001 30.183794466399998 -2.5 0 0 1 +2 2.4817933703700001 33.5 0 0 0 1 1 0 -0 -0 1 0 8 +1 -5.41758793251 32.235177865600001 -2.5 0 0 1 +2 2.4817933703700001 33.5 -4.5 0 0 1 1 0 -0 -0 1 0 8 +1 2.4817933703700001 25.5 -2.5 0 0 1 +1 36.511075809799998 25.5 -2.25 0 0 1 +1 19.496434590100002 25.5 -4.5 -1 0 0 +1 19.496434590100002 25.5 0 -1 0 0 +2 36.511075809799998 33.5 0 0 0 1 1 0 -0 -0 1 0 8 +2 36.511075809799998 33.5 -4.5 0 0 1 1 0 -0 -0 1 0 8 +1 40.086519692300001 26.343450479200001 -2.5 0 0 1 +2 50.5 5.5 -4.5999999999999996 0 0 1 1 0 -0 -0 1 0 8 +1 3.8354043088299998 -7.0206604951199996 29 0 0 1 +2 0 0 1.8 0 0 1 1 0 -0 -0 1 0 8 +1 43.479339504899997 1.6645956911699999 2.0949999999700002 0 0 1 +2 0 0 1.8 0 0 1 1 0 -0 -0 1 0 8 +1 57.520660495100003 9.3354043088300003 2.0949999999700002 0 0 1 +2 50.5 5.5 -4.5999999999999996 0 0 1 1 0 -0 -0 1 0 8 +1 -3.8354043088299998 7.0206604951199996 29 0 0 1 +2 50.5 5.5 -5 -1.8684409237800001e-15 3.42015816972e-15 1 0 1 -3.42015816972e-15 -1 -6.3903634901053515e-30 -1.8684409237800001e-15 8.4000000000000004 +1 43.303822992500002 1.5687105834499999 -4.7999999999999998 -0.62054458056371298 -0.3390050494208432 -0.70710678118667292 +1 57.696177007499998 9.4312894165499994 -4.7999999999999998 0.62054458056371298 0.3390050494208432 -0.70710678118667292 +2 50.5 5.5 -5 2.9598024531600001e-15 4.8580609417199997e-15 1 0 1 -4.8580609417199997e-15 -1 1.4378900692903634e-29 2.9598024531600001e-15 8.4000000000000004 +2 -22.5 29.5 -4.5999999999999996 0 0 1 1 0 -0 -0 1 0 6 +1 2.87655323163 -5.2654953713400001 28 0 0 1 +2 0 0 1.8 0 0 1 1 0 -0 -0 1 0 6 +1 -28.5 29.5 1.75 0 0 1 +2 0 0 1.8 0 0 1 1 0 -0 -0 1 0 6 +1 -16.5 29.5 1.75 0 0 1 +2 -22.5 29.5 -4.5999999999999996 0 0 1 1 0 -0 -0 1 0 6 +1 -2.87655323163 5.2654953713400001 28 0 0 1 +2 -22.5 29.5 -5 6.6613381477499997e-15 3.8459253727699997e-15 1 1 0 -6.6613381477499997e-15 -2.5619009399032436e-29 1 -3.8459253727699997e-15 6.4000000000000004 +1 -16.300000000000001 29.5 -4.7999999999999998 0.70710678118654757 0 -0.70710678118654757 +1 -28.699999999999999 29.5 -4.7999999999999998 -0.70710678118654757 0 -0.70710678118654757 +2 -22.5 29.5 -5 -0 0 1 1 0 0 0 1 -0 6.4000000000000004 +2 -22.5 -12.5 -4.5999999999999996 0 0 1 1 0 -0 -0 1 0 6 +1 -28.5 -12.5 1.75 0 0 1 +1 -16.5 -12.5 1.75 0 0 1 +2 -22.5 -12.5 -4.5999999999999996 0 0 1 1 0 -0 -0 1 0 6 +2 -22.5 -12.5 -5 8.5843008341299994e-15 4.9561483973900002e-15 1 1 0 -8.5843008341299994e-15 -4.254506882178704e-29 1 -4.9561483973900002e-15 6.4000000000000004 +1 -16.300000000000001 -12.5 -4.7999999999999998 0.70710678118654757 -3.1401849173679908e-15 -0.70710678118654757 +1 -28.699999999999999 -12.5 -4.7999999999999998 -0.70710678118654757 -3.1401849173679908e-15 -0.70710678118654757 +2 -22.5 -12.5 -5 -1.47911419729e-29 -1.7763568393999999e-14 1 0 1 1.7763568393999999e-14 -1 2.6274346206097322e-43 -1.47911419729e-29 6.4000000000000004 +1 -39.799999999999997 -12.5 -2.5 0 0 1 +2 -22.5 -12.5 -4.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +1 -5.2000000000000002 -12.5 -2.5 0 0 1 +2 -22.5 -12.5 -4.7999999999999998 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 -12.5 -4.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 -12.5 0 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 -12.5 -4.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 -12.5 -4.7999999999999998 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 -12.5 -5 0 0 1 1 0 -0 -0 1 0 17.100000000000001 +2 -22.5 -12.5 -5 0 0 1 1 0 -0 -0 1 0 17.100000000000001 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 17 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 17 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 7.7999999999999998 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 7.7999999999999998 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 8 +1 -39.700000000000003 -12.5 -4.9000000000000004 -0.70710678118654757 3.7682219008375893e-14 0.70710678118654757 +1 -5.2999999999999998 -12.5 -4.9000000000000004 0.70710678118654757 4.3962588843071872e-14 0.70710678118654757 +1 -5.2000000000000002 29.5 -2.5 0 0 1 +2 -22.5 29.5 -4.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +1 -39.799999999999997 29.5 -2.5 0 0 1 +2 -22.5 29.5 -4.7999999999999998 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 29.5 -4.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 29.5 0 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 29.5 -4.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 29.5 -4.7999999999999998 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -22.5 29.5 -5 0 0 1 1 0 -0 -0 1 0 17.100000000000001 +2 -22.5 29.5 -5 0 0 1 1 0 -0 -0 1 0 17.100000000000001 +1 -5.2999999999999998 29.5 -4.9000000000000004 0.70710678118654757 1.2560739669491962e-14 0.70710678118654757 +1 -39.700000000000003 29.5 -4.9000000000000004 -0.70710678118654757 1.2560739669491962e-14 0.70710678118654757 +1 73.799999999999997 5.5 -2.5 0 0 1 +2 50.5 5.5 0 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +2 50.5 5.5 -4.5 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +1 27.199999999999999 5.5 -2.5 0 0 1 +2 50.5 5.5 -4.7999999999999998 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +2 50.5 5.5 -4.5 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +2 50.5 5.5 0 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +2 50.5 5.5 -4.7999999999999998 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +2 50.5 5.5 -5 0 0 1 1 0 -0 -0 1 0 23.100000000000001 +2 50.5 5.5 -5 0 0 1 1 0 -0 -0 1 0 23.100000000000001 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 23 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 23 +2 4.5562353437399997e-16 8.881784197e-16 13 0 0 1 1 0 -0 -0 1 0 9.8000000000000007 +2 4.5562353437399997e-16 8.881784197e-16 13 0 0 1 1 0 -0 -0 1 0 9.8000000000000007 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 10 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 10 +1 73.700000000000003 5.5 -4.9000000000000004 0.70710678118654757 -5.6523328512563833e-14 0.70710678118654757 +1 27.300000000000001 5.5 -4.9000000000000004 -0.70710678118654757 -5.6523328512563833e-14 0.70710678118654757 +1 -50.958904109599999 2.1000000000000001 -4.0999999999999996 -1 -2.22044604925e-16 0 +1 -51.958904109599999 2.1000000000000001 0.94999999999999996 0 0 -1 +1 -49.958904109599999 2.1000000000000001 0.94999999999999996 0 0 -1 +1 -51.958923638999998 14.9 -2.25 0 0 1 +2 -51.958904109599999 8.5 -4.0999999999999996 0 0 1 1 0 -0 -0 1 0 6.4000000000000004 +1 -50.9589236451 14.9 -4.0999999999999996 1 0 0 +1 -49.958923651299997 14.9 0.94999999999999996 0 0 -1 +2 -49.958904109599999 8.5 -4.0999999999999996 0 0 1 1 0 -0 -0 1 0 6.4000000000000004 +1 -51.958923638999998 15.1 -4.2999999999999998 0 -0.70710678118654757 0.70710678118654757 +1 -11.2067401539 15.300000000000001 -4.5 1 0 0 +1 -49.958923651299997 15.1 -4.2999999999999998 0 -0.70710678118654757 0.70710678118654757 +1 -49.958904109599999 1.8999999999999999 -4.2999999999999998 1.2560739669491962e-14 -0.70710678118654757 -0.70710678118654757 +2 -49.958904109599999 8.5 -4.5 -6.7799206850700001e-21 4.4409192180100003e-15 1 0 1 -4.4409192180100003e-15 -1 -3.0109080066910889e-35 -6.7799206850700001e-21 6.7999999999999998 +1 -11.2067401539 1.7 -4.5 -1 -2.2263035843300001e-16 0 +1 -51.958904109599999 1.8999999999999999 -4.2999999999999998 0 0.70710678118654757 0.70710678118654757 +2 -51.958904109599999 8.5 -4.5 1.3551270599100001e-20 -8.8817841969800004e-15 1 0 1 8.8817841969800004e-15 -1 -1.203594610560861e-34 1.3551270599100001e-20 6.7999999999999998 +1 20.041095890400001 8.5 -2.25 0 0 1 +1 2.0410958904099998 8.5 -2.25 0 0 1 +2 11.041095890399999 8.5 -4.0999999999999996 0 0 1 1 0 -0 -0 1 0 9 +2 11.041095890399999 8.5 -4.0999999999999996 0 0 1 1 0 -0 -0 1 0 9 +2 11.041095890399999 8.5 -4.5 -6.7137098316700001e-30 1.7763568393999999e-14 1 0 1 -1.7763568393999999e-14 -1 -1.1925944377234027e-43 -6.7137098316700001e-30 9.4000000000000004 +1 1.8410958904100001 8.5 -4.2999999999999998 -0.70710678118654757 -1.2560739669491962e-14 -0.70710678118654757 +1 20.2410958904 8.5 -4.2999999999999998 0.70710678118654757 -1.2560739669491962e-14 -0.70710678118654757 +2 11.041095890399999 8.5 -4.5 -3.33066907388e-15 -1.92296268638e-15 1 1 0 3.33066907388e-15 -6.4047523497510717e-30 1 1.92296268638e-15 9.4000000000000004 +1 -52.084386624700002 -5.5 -4.5 -1 0 0 +1 -52.084386624700002 -5.5 0 -1 0 0 +1 -56.388543820000002 -5.5 -2.25 0 0 1 +2 -56.388543820000002 -2.5 -4.5 0 0 1 1 0 -0 -0 1 0 3 +2 -56.388543820000002 -2.5 0 0 0 1 1 0 -0 -0 1 0 3 +1 -58.944050079999997 -4.0714285714300003 -2.25 0 0 1 +1 -56.388543820000002 22.5 -2.25 0 0 -1 +1 -52.084386624700002 22.5 0 -1 0 0 +1 -52.084386624700002 22.5 -4.5 -1 0 0 +2 -38.5 8.5 -4.5 0 0 1 1 0 -0 -0 1 0 24 +2 -38.5 8.5 0 0 0 1 1 0 -0 -0 1 0 24 +1 -58.944050079999997 21.071428571399998 -2.25 0 0 1 +2 -56.388543820000002 19.5 -4.5 0 0 1 1 0 -0 -0 1 0 3 +2 -56.388543820000002 19.5 0 0 0 -1 -1 0 -0 0 1 0 3 +1 71 -32.5 6.9000000000000004 0 0 1 +1 -38 -32.5 6.9000000000000004 0 0 1 +1 16.5 -32.5 0.80000000000000004 1 0 0 +1 101 -2.5 6.5 0 0 1 +7 0 0 5 9 3 71 -32.5 0.80000000000000004 75.712388980399993 -32.5 0.80000000000000004 80.4247779608 -31.574724587399999 0.80000000000000004 84.8946105096 -29.723259324099999 0.80000000000000004 92.867471954300001 -24.367471954300001 0.80000000000000004 98.223259324099999 -16.3946105096 0.80000000000000004 100.07472458700001 -11.9247779608 0.80000000000000004 101 -7.2123889803800001 0.80000000000000004 101 -2.5 0.80000000000000004 + 109 6 132.56194490199999 3 156.12388980399999 6 +1 101 7.5 6.9000000000000004 0 0 1 +1 101 2.5 0.80000000000000004 2.8421709430400002e-15 1 0 +1 88.797802672700001 27.807817643500002 6.5 0 0 1 +7 0 0 5 6 2 101 7.5 0.80000000000000004 101 12.4776888283 0.80000000000000004 99.654424864299997 17.455903910100002 0.80000000000000004 96.956647293900005 21.945748933499999 0.80000000000000004 93.192846020999994 25.470943655100001 0.80000000000000004 88.797802672700001 27.807817643500002 0.80000000000000004 + 166.12388980399999 6 191.01233394499999 6 +1 63.171634448200003 41.433492985900003 6.9000000000000004 -3.21491467328e-13 -6.04543737475e-13 1 +1 75.984718560499999 34.620655314700002 0.80000000000100002 -0.88294759285826285 0.46947156278713975 0 +1 22.797080048600002 51.5 6.5 0 0 1 +7 0 0 5 6 2 63.171634448200003 41.433492985900003 0.80000000000000004 55.7500134434 45.379638872299999 0.80000000000000004 47.845323711900001 48.4193390577 0.80000000000000004 39.609065293299999 50.472868920099998 0.80000000000000004 31.202585726199999 51.5 0.80000000000000004 22.797080048600002 51.5 0.80000000000000004 + 220.03576459000001 6 262.06329297799999 6 +1 -12 51.5 6.9000000000000004 0 0 1 +1 5.3985400242999999 51.5 0.80000000000000004 -1 0 0 +1 -66 -2.5 6.5 0 0 1 +7 0 0 5 9 3 -12 51.5 0.80000000000000004 -20.4823001647 51.5 0.80000000000000004 -28.9646003294 49.834504257299997 0.80000000000000004 -37.0102989174 46.501866783399997 0.80000000000000004 -51.361449517799997 36.861449517799997 0.80000000000000004 -61.001866783399997 22.5102989174 0.80000000000000004 -64.334504257299997 14.4646003294 0.80000000000000004 -66 5.9823001646899998 0.80000000000000004 -66 -2.5 0.80000000000000004 + 296.86037302699998 6 339.27187385000002 3 381.68337467399999 6 +1 -66 -4.5 6.9000000000000004 0 0 1 +1 -66 -3.5 0.80000000000000004 0 -1 0 +7 0 0 5 6 2 -66 -4.5 0.80000000000000004 -66 -13.296459430100001 0.80000000000000004 -62.555579886700002 -22.101126014199998 0.80000000000000004 -55.601126014199998 -29.055579886699999 0.80000000000000004 -46.796459430100001 -32.5 0.80000000000000004 -38 -32.5 0.80000000000000004 + 383.68337467399999 6 427.66567182400001 6 +7 0 0 5 15 5 -65.200000000000003 -4.5 0 -65.200000000000003 -7.3961324085399998 0 -64.815683064799998 -10.292565314899999 0 -64.044701936199999 -13.1202251169 0 -61.767762986000001 -18.502156188099999 0 -58.162061913499997 -23.101311403499999 0 -56.061385811000001 -25.147230317799998 0 -51.7602007208 -28.339419764199999 0 -46.831052239900004 -30.3981516644 0 -44.496038364599997 -31.080147596500002 0 -41.768787502400002 -31.555521804400001 0 -39.019917637299997 -31.684083704100001 0 -38.678137464199999 -31.6947756669 0 -38.338923938100002 -31.700003949900001 0 -38.000003569900002 -31.7000003729 0 + 103.76581805399999 6 124.547002021 3 145.33505857899999 3 162.64698145599999 3 165.07828899200001 6 +1 -65.200000000000003 -3.5 0 0 -1 0 +7 0 0 5 15 5 -12 50.700000000000003 0 -17.395146434200001 50.700000000000003 0 -22.790272716 50.016080707500002 0 -28.0703760954 48.647586647799997 0 -38.167235070799997 44.603325626500002 0 -46.935695196499999 38.167852959100003 0 -50.887142559099999 34.407592682999997 0 -58.071200711000003 25.572774405099999 0 -62.709492242700001 15.153781134600001 0 -64.358373071900004 9.4059114346899992 0 -65.191238028499995 3.4851502435200001 0 -65.199969163700004 -2.4372544982000002 0 -65.199989732399999 -2.4581681825900001 0 -65.200000056600004 -2.4790835333599999 0 -65.2000001567 -2.5000012219399999 0 + 206.34732287700001 6 244.784677386 3 283.22234807799998 3 325.26716929499997 3 325.41616118000002 6 +1 5.3985400242999999 50.700000000000003 0 -1 0 0 +7 0 0 5 9 3 62.796057198 40.727134911599997 0 55.583984463199997 44.5618620065 0 47.911829203899998 47.532368133200002 0 39.920285127100001 49.564612909099999 0 31.602084407900001 50.640506765600001 0 23.274783774399999 50.698883892399998 0 23.115519849199998 50.699624028199999 0 22.956266601100001 50.699990847400002 0 22.797018728600001 50.699991800799999 0 + 120.58639119999999 6 178.61598027900001 3 179.74754108900001 6 +1 75.609141310200002 33.914297240400003 0 -0.88294759285826285 0.46947156278713975 0 +7 0 0 5 12 4 100.2 7.5 0 100.2 9.6809699653300001 0 99.932382303899999 11.8619313793 0 99.396510492800004 13.9991336012 0 97.692003087800003 18.4059546282 0 94.895791927999994 22.228794922799999 0 93.118707907000001 24.048197016300001 0 91.017193152399997 25.661658038100001 0 88.725037743800002 26.937935644900001 0 88.624460949500005 26.993092693200001 0 88.523529253199996 27.047590689700002 0 88.422255048899999 27.101440138200001 0 + 62.094959105999997 6 77.796852188800003 3 95.859399766099997 3 96.6845153915 6 +1 100.2 2.5 0 0 1 0 +7 0 0 5 15 5 71 -31.699999999999999 0 73.999932498999996 -31.699999999999999 0 76.999844077000006 -31.3147433629 0 79.934138087199997 -30.543852039600001 0 85.538504313100006 -28.266498915 0 90.385589047600007 -24.647042713800001 0 92.562629609400005 -22.5336263714 0 96.364010810600007 -17.7458581679 0 98.8181968098 -12.1443684266 0 99.678127191599998 -9.1664285505599992 0 100.153771088 -6.00175461166 0 100.19845569100001 -2.8289666115399998 0 100.19948233300001 -2.71933652926 0 100.199990855 -2.60969449139 0 100.199991877 -2.50002261243 0 + 243.59478752199999 6 265.100062267 3 286.60708227999999 3 308.56748184100002 3 309.35350848100001 6 +1 16.5 -31.699999999999999 0 1 0 0 +1 -38 -32.100000000000001 0.40000000000000002 0 -0.70710678118654757 0.70710678118654757 +1 71 -32.100000000000001 0.40000000000000002 0 -0.70710678118654757 0.70710678118654757 +7 0 0 1 2 2 100.199991877 -2.50002261243 -1.1102230246299999e-16 100.999991178 -2.5000008830899998 0.80000000000000004 + 0 2 1.1313708498999999 2 +1 100.59999999999999 7.5 0.40000000000000002 0.70710678118654757 -2.3551386880284931e-15 0.70710678118654757 +7 0 0 1 2 2 88.422255048899999 27.101440138200001 0 88.7978013237 27.8078143111 0.80000000000000004 + 0 2 1.1313708498999999 2 +1 62.983845823099998 41.080313948700002 0.40000000000000002 0.33196652562098372 0.62433823034196934 0.70710678118696524 +7 0 0 1 2 2 22.797018728600001 50.699991800799999 0 22.797080812699999 51.499991602800002 0.80000000000000004 + 0 2 1.1313708498999999 2 +1 -12 51.100000000000001 0.40000000000000002 0 0.70710678118654757 0.70710678118654757 +7 0 0 1 2 2 -65.2000001567 -2.5000012219399999 0 -66.0000001704 -2.5000000367799999 0.80000000000000004 + 0 2 1.1313708498999999 2 +1 -65.599999999999994 -4.5 0.40000000000000002 -0.70710678118654757 0 0.70710678118654757 +1 -38 -32.5 0.5 0 0 1 +1 71 -32.5 0.5 0 0 1 +1 16.5 -32.5 1 1 0 0 +1 101 -2.5 0.5 0 0 1 +7 0 0 5 9 3 71 -32.5 1 75.712388980399993 -32.5 1 80.4247779608 -31.574724587399999 1 84.8946105096 -29.723259324099999 1 92.867471954300001 -24.367471954300001 1 98.223259324099999 -16.3946105096 1 100.07472458700001 -11.9247779608 1 101 -7.2123889803800001 1 101 -2.5 1 + 109 6 132.56194490199999 3 156.12388980399999 6 +1 101 7.5 0.5 2.84217094304e-14 0 1 +1 101 2.5 1 4.2632564145599998e-15 1 0 +1 88.797802672700001 27.807817643500002 0.5 0 0 1 +7 0 0 5 6 2 101 7.5 1 101 12.4776888283 1 99.654424864299997 17.455903910100002 1 96.956647293900005 21.945748933499999 1 93.192846020999994 25.470943655100001 1 88.797802672700001 27.807817643500002 1 + 166.12388980399999 6 191.01233394499999 6 +1 63.171634448200003 41.433492985900003 0.5 -5.85487214266e-12 -1.1006306976900001e-11 1 +1 75.984718560399998 34.620655314700002 1 -0.88294759285848323 0.46947156278672519 0 +1 22.797080048600002 51.5 0.5 0 0 1 +7 0 0 5 6 2 63.171634448200003 41.433492985900003 1 55.7500134434 45.379638872299999 1 47.845323711900001 48.4193390577 1 39.609065293299999 50.472868920099998 1 31.202585726199999 51.5 1 22.797080048600002 51.5 1 + 220.03576459000001 6 262.06329297799999 6 +1 -12 51.5 0.5 0 0 1 +1 5.3985400242999999 51.5 1 -1 0 0 +1 -66 -2.5 0.5 0 0 1 +7 0 0 5 9 3 -12 51.5 1 -20.4823001647 51.5 1 -28.9646003294 49.834504257299997 1 -37.0102989174 46.501866783399997 1 -51.361449517799997 36.861449517799997 1 -61.001866783399997 22.5102989174 1 -64.334504257299997 14.4646003294 1 -66 5.9823001646899998 1 -66 -2.5 1 + 296.86037302699998 6 339.27187385000002 3 381.68337467399999 6 +1 -66 -4.5 0.5 0 0 1 +1 -66 -3.5 1 0 -1 0 +7 0 0 5 6 2 -66 -4.5 1 -66 -13.296459430100001 1 -62.555579886700002 -22.101126014199998 1 -55.601126014199998 -29.055579886699999 1 -46.796459430100001 -32.5 1 -38 -32.5 1 + 383.68337467399999 6 427.66567182400001 6 +1 11.300000000000001 1.7922171683299999e-15 0.10000000000000001 0.70710678118654757 1.2672889130791892e-14 0.70710678118654757 +2 8.7090243936400008e-28 -1.7763568394e-15 9.7699626167000005e-14 2.7679330007800001e-30 1.7763568393999999e-14 1 0 1 -1.7763568393999999e-14 -1 4.9168367169365182e-44 2.7679330007800001e-30 11.199999999999999 +1 -11.300000000000001 8.1628337162099993e-15 0.10000000000000001 -0.70710678118654757 1.3071535693791637e-14 0.70710678118654757 +2 1.7763568394e-15 1.7763568394e-15 0.20000000000000001 2.7679330007800001e-30 1.7763568393999999e-14 1 0 1 -1.7763568393999999e-14 -1 4.9168367169365182e-44 2.7679330007800001e-30 11.4 +2 1.00974195868e-28 -2.3075552236599999e-15 -8.8817841969999996e-15 -1.38379325944e-14 -7.9893341084e-15 1 1 0 1.38379325944e-14 -1.1055586686618002e-28 1 7.9893341084e-15 11.199999999999999 +2 -2.6645352590999998e-15 -4.0839120630600003e-15 0.20000000000000001 -1.38379325944e-14 -7.9893341084e-15 1 1 0 1.38379325944e-14 -1.1055586686618002e-28 1 7.9893341084e-15 11.4 +1 11.4 0 1.5 0 0 1 +1 -11.4 1.3960973510299999e-15 1.5 0 0 1 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 11.4 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 11.4 +1 11.300000000000001 -1.7607747618600001e-15 2.8999999999999999 0.70710678118654757 1.2450557742492034e-14 -0.70710678118654757 +1 -11.300000000000001 3.1446256449e-15 2.8999999999999999 -0.70710678118654757 1.2757517201991837e-14 -0.70710678118654757 +2 8.7090243936400008e-28 -1.7763568394e-15 3 -2.7679330007800001e-30 -1.7763568393999999e-14 1 0 1 1.7763568393999999e-14 -1 4.9168367169365182e-44 -2.7679330007800001e-30 11.199999999999999 +2 7.5730646901200004e-29 -2.3075552236599999e-15 3 1.38379325944e-14 7.9893341084e-15 1 1 0 -1.38379325944e-14 -1.1055586686618002e-28 1 -7.9893341084e-15 11.199999999999999 +2 0 0 4.5999999999999996 0 0 1 1 0 -0 -0 1 0 10 +2 0 0 4.5999999999999996 0 0 1 1 0 -0 -0 1 0 10 +2 4.5562353437399997e-16 0 20.399999999999999 0 0 1 1 0 -0 -0 1 0 9.8000000000000007 +2 4.5562353437399997e-16 0 20.399999999999999 0 0 1 1 0 -0 -0 1 0 9.8000000000000007 +2 6.5077460204099998e-16 -3.5523141753600001e-16 3 0 0 1 1 0 -0 -0 1 0 8.1999999999999993 +2 6.5077460204099998e-16 -3.5523141753600001e-16 3 0 0 1 1 0 -0 -0 1 0 8.1999999999999993 +2 4.4408920985e-16 0 2.7999999999999998 1.2025318677099999e-31 -2.2204460492499999e-15 1 0 1 2.2204460492499999e-15 -1 -2.6701571347538926e-46 1.2025318677099999e-31 8 +1 -8.0999999999999996 -6.8629993849700002e-15 2.8999999999999999 -0.70710678118654757 -2.1498287745486247e-15 0.70710678118654757 +1 8.0999999999999996 2.1662888285400001e-16 2.8999999999999999 0.70710678118654757 -1.5317975206690201e-15 0.70710678118654757 +2 -8.881784197e-16 -6.5019172940700005e-16 2.7999999999999998 0 -0 1 1 0 0 -0 1 0 8 +2 -5.2841545998399997e-16 0 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 9.0999999999999996 +2 -5.2841545998399997e-16 0 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 9.0999999999999996 +2 6.5077460204099998e-16 -3.5523141753600001e-16 0 0 0 1 1 0 -0 -0 1 0 8.1999999999999993 +2 6.5077460204099998e-16 -3.5523141753600001e-16 0 0 0 1 1 0 -0 -0 1 0 8.1999999999999993 +2 0 0 0.20000000000000001 0 0 1 1 0 -0 -0 1 0 8 +1 -8 9.7971743931799991e-16 1.5 0 0 1 +2 0 0 22.875500200200001 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 22.875500200200001 0 0 1 1 0 -0 -0 1 0 8 +1 8 -1.9594348786400001e-15 1.5 0 0 1 +1 -3.8354043088299998 7.0206604951199996 29 0 0 1 +2 0 0 0.20000000000000001 0 0 1 1 0 -0 -0 1 0 8 +1 3.8354043088299998 -7.0206604951199996 29 0 0 1 +1 8.0999999999999996 -1.3988810110299999e-14 0.10000000000000001 0.70710678118654757 -1.5700924586789954e-15 -0.70710678118654757 +1 -8.0999999999999996 1.55431223448e-15 0.10000000000000001 -0.70710678118654757 1.5700924586789954e-15 -0.70710678118654757 +1 9.3000000000000007 -2.46662593732e-15 0.10000000000000001 0.70710678118654757 -1.7441679269288843e-14 0.70710678118654757 +2 1.3322676295499999e-15 2.2204460492499999e-15 -2.1316282072799998e-14 6.9235132639099993e-30 -2.4424906541799999e-14 1 0 1 2.4424906541799999e-14 -1 -1.691061644119144e-43 6.9235132639099993e-30 9.1999999999999993 +1 -9.3000000000000007 -9.9793715242500008e-15 0.10000000000000001 -0.70710678118654757 -1.8012895758488476e-14 0.70710678118654757 +2 8.881784197e-16 -2.6645352590999998e-15 0.20000000000000001 6.9235132639099993e-30 -2.4424906541799999e-14 1 0 1 2.4424906541799999e-14 -1 -1.691061644119144e-43 6.9235132639099993e-30 9.4000000000000004 +2 2.6645352590999998e-15 -1.84083345573e-17 -4.9737991503200002e-14 -7.1765944466400001e-15 -4.1434087356300003e-15 1 1 0 7.1765944466400001e-15 -2.9735564122281926e-29 1 4.1434087356300003e-15 9.1999999999999993 +2 1.7763568394e-15 -1.79476517396e-15 0.20000000000000001 -7.1765944466400001e-15 -4.1434087356300003e-15 1 1 0 7.1765944466400001e-15 -2.9735564122281926e-29 1 4.1434087356300003e-15 9.4000000000000004 +1 9.4000000000000004 0 1.5 0 0 1 +1 -9.4000000000000004 1.1511679911999999e-15 1.5 0 0 1 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 9.4000000000000004 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 9.4000000000000004 +1 9.3000000000000007 2.4141445344000001e-15 2.8999999999999999 0.70710678118654757 -1.707057971038908e-14 -0.70710678118654757 +1 -9.3000000000000007 -1.71931222104e-15 2.8999999999999999 -0.70710678118654757 -1.7384858774988878e-14 -0.70710678118654757 +2 1.3322676295499999e-15 2.2204460492499999e-15 3 -6.9235132639099993e-30 2.4424906541799999e-14 1 0 1 -2.4424906541799999e-14 -1 -1.691061644119144e-43 -6.9235132639099993e-30 9.1999999999999993 +2 2.6645352590999998e-15 -1.84083345573e-17 3 7.1765944466400001e-15 4.1434087356300003e-15 1 1 0 -7.1765944466400001e-15 -2.9735564122281926e-29 1 -4.1434087356300003e-15 9.1999999999999993 +2 0 0 4.5999999999999996 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 4.5999999999999996 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 19.399999999999999 0 0 1 1 0 -0 -0 1 0 7.7999999999999998 +2 0 0 19.399999999999999 0 0 1 1 0 -0 -0 1 0 7.7999999999999998 +2 5.6917383248299999e-16 -3.0773183653900002e-16 3 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +2 5.6917383248299999e-16 -3.0773183653900002e-16 3 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +2 -2.22044604925e-16 3.7865323450600002e-29 2.7999999999999998 1.4314008360899999e-30 -6.6613381477499997e-15 1 0 1 6.6613381477499997e-15 -1 -9.5350449941675611e-45 1.4314008360899999e-30 6 +1 -6.0999999999999996 1.47906547081e-15 2.8999999999999999 -0.70710678118654757 -4.4616077101771458e-15 0.70710678118654757 +1 6.0999999999999996 6.4464562720200003e-16 2.8999999999999999 0.70710678118654757 -4.5583329445670837e-15 0.70710678118654757 +2 1.3322676295499999e-15 -2.6559919212999999e-16 2.7999999999999998 -9.9920072216299998e-15 -5.7688880591500001e-15 1 1 0 9.9920072216299998e-15 -5.7642771147801877e-29 1 5.7688880591500001e-15 6 +2 -2.2977359924999999e-16 8.881784197e-16 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 6.9000000000000004 +2 -2.2977359924999999e-16 8.881784197e-16 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 6.9000000000000004 +2 5.6917383248299999e-16 -3.0773183653900002e-16 0 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +2 5.6917383248299999e-16 -3.0773183653900002e-16 0 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +2 0 0 0.20000000000000001 0 0 1 1 0 -0 -0 1 0 6 +1 -6 7.3478807948799999e-16 1.5 0 0 1 +2 0 0 21.9255437353 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 21.9255437353 0 0 1 1 0 -0 -0 1 0 6 +1 6 -1.4695761589800001e-15 1.5 0 0 1 +1 -2.87655323163 5.2654953713400001 28 0 0 1 +2 0 0 0.20000000000000001 0 0 1 1 0 -0 -0 1 0 6 +1 2.87655323163 -5.2654953713400001 28 0 0 1 +1 -6.0999999999999996 -1.22987870927e-15 0.10000000000000001 -0.70710678118654757 -4.7756262019069448e-15 -0.70710678118654757 +1 6.0999999999999996 -6.6613381477499995e-16 0.10000000000000001 0.70710678118654757 -4.7102773760469866e-15 -0.70710678118654757 +2 0 0 13 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 13 0 0 1 1 0 -0 -0 1 0 8 +2 -2.84586916241e-16 3.9130700983199998e-16 0 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +2 -2.84586916241e-16 3.9130700983199998e-16 0 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +1 3.4039213240900001 -6.2308361894199997 0.90000000000000002 0.3390050494208432 -0.62054458056371298 0.70710678118667292 +1 -3.4039213240900001 6.2308361894199997 0.90000000000000002 -0.3390050494208432 0.62054458056371298 0.70710678118667292 +2 -2.84586916241e-16 0 58 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +2 -2.84586916241e-16 0 58 0 0 1 1 0 -0 -0 1 0 6.2000000000000002 +1 3.4039213240900001 -6.2308361894199997 57.100000000000001 0.3390050494208432 -0.62054458056371298 -0.70710678118667292 +2 2.6645352590999998e-15 -1.3322676295499999e-15 56.200000000000003 -1.5377165720499999e-15 9.3686294527999993e-16 1 1 0 1.5377165720499999e-15 1.4406296766966282e-30 1 -9.3686294527999993e-16 8 +1 -3.4039213240900001 6.2308361894199997 57.100000000000001 -0.3390050494208432 0.62054458056371298 -0.70710678118667292 +2 -1.7763568394e-15 2.22044604925e-16 56.200000000000003 2.45644256797e-16 1.3419606910400001e-16 1 1 0 -2.45644256797e-16 -3.2964493660130939e-32 1 -1.3419606910400001e-16 8 +2 0 0 20.399999999999999 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 20.399999999999999 0 0 1 1 0 -0 -0 1 0 8 +1 4.7463128321800001 -8.6880673627099991 20.300000000000001 0.3390050494208432 -0.62054458056371298 -0.70710678118667292 +2 3.9968028886399999e-15 1.7763568394e-15 20.199999999999999 -1.87245477905e-14 1.140804184e-14 1 1 0 1.87245477905e-14 2.1361042462910357e-28 1 -1.140804184e-14 10 +1 -4.7463128321800001 8.6880673627099991 20.300000000000001 -0.3390050494208432 0.62054458056371298 -0.70710678118667292 +2 2.6645352590999998e-15 3.8857805861899998e-16 20.199999999999999 -2.0083033176799999e-14 -1.09714110281e-14 1 1 0 2.0083033176799999e-14 -2.2033921167364167e-28 1 1.09714110281e-14 10 +2 0 0 13.199999999999999 0 0 1 1 0 -0 -0 1 0 10 +1 -10 1.2246467991500001e-15 6 0 0 1 +1 4.7942553860399997 -8.7758256189000008 16.699999999999999 0 0 1 +1 -4.7942553860399997 8.7758256189000008 16.699999999999999 0 0 1 +2 0 0 13.199999999999999 0 0 1 1 0 -0 -0 1 0 10 +1 10 0 6 0 0 1 +1 4.7463128321800001 -8.6880673627099991 13.1 0.3390050494208432 -0.62054458056371298 0.70710678118667292 +1 -4.7463128321800001 8.6880673627099991 13.1 -0.3390050494208432 0.62054458056371298 0.70710678118667292 +1 -3.6915766472499998 6.7573857265599999 24.899999999999999 0 0 1 +2 0 0 23.5 0 0 1 1 0 -0 -0 1 0 7.7000000000000002 +1 3.6915766472499998 -6.7573857265599999 24.899999999999999 0 0 1 +2 0 0 26.300000000000001 0 0 1 1 0 -0 -0 1 0 7.7000000000000002 +2 0 0 23.5 0 0 1 1 0 -0 -0 1 0 7.7000000000000002 +2 0 0 26.300000000000001 0 0 1 1 0 -0 -0 1 0 7.7000000000000002 +2 0 0 26.9244997998 0 0 1 1 0 -0 -0 1 0 8 +1 3.8354043088299998 -7.0206604951199996 29 0 0 1 +2 0 0 -7 0 0 1 1 0 -0 -0 1 0 8 +1 -3.8354043088299998 7.0206604951199996 29 0 0 1 +1 -3.8354043088299998 7.0206604951199996 -2 0 0 1 +1 3.8354043088299998 -7.0206604951199996 -2 0 0 1 +2 0 0 2.2679491924300001 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 26.9244997998 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 -7 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 2.2679491924300001 0 0 1 1 0 -0 -0 1 0 8 +2 -3.8354043088299998 7.0206604951199996 26.300000000000001 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.29999999999999999 +2 3.8354043088299998 -7.0206604951199996 26.300000000000001 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -2.6645352590999998e-15 1.3322676295499999e-15 26.534187424900001 0 0 1 1 0 -0 -0 1 0 7.8125 +2 -8.881784197e-16 -1.56819002228e-15 26.534187424900001 0 -0 1 1 0 0 -0 1 0 7.8125 +2 3.5956915395300002 -6.5818692141800001 26.9244997998 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.5 +2 -3.5956915395300002 6.5818692141800001 26.9244997998 -0.87758256189037243 -0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 -0 0 1 0.5 +2 3.8354043088299998 -7.0206604951199996 23.5 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -3.8354043088299998 7.0206604951199996 23.5 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -8.881784197e-16 -4.4408920985e-16 23.2658125751 0 0 1 1 0 -0 -0 1 0 7.8125 +2 -8.881784197e-16 1.09634523682e-15 23.2658125751 0 -0 1 1 0 0 -0 1 0 7.8125 +2 3.5956915395300002 -6.5818692141800001 22.875500200200001 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.5 +2 -3.5956915395300002 6.5818692141800001 22.875500200200001 -0.87758256189037243 -0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 -0 0 1 0.5 +1 2.7327255700399999 -5.0022206027799996 23.899999999999999 0 0 1 +2 0 0 25.300000000000001 0 0 1 1 0 -0 -0 1 0 5.7000000000000002 +1 -2.7327255700399999 5.0022206027799996 23.899999999999999 0 0 1 +2 0 0 22.5 0 0 1 1 0 -0 -0 1 0 5.7000000000000002 +2 0 0 25.300000000000001 0 0 1 1 0 -0 -0 1 0 5.7000000000000002 +2 0 0 22.5 0 0 1 1 0 -0 -0 1 0 5.7000000000000002 +2 0 0 19.399999999999999 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 19.399999999999999 0 0 1 1 0 -0 -0 1 0 6 +2 2.87655323163 -5.2654953713400001 22.5 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -2.87655323163 5.2654953713400001 22.5 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.29999999999999999 +2 0 1.7763568394e-15 22.253804458000001 0 0 1 1 0 -0 -0 1 0 5.8285714285700001 +2 -4.4408920985e-16 -3.1918911957999998e-16 22.253804458000001 0 -0 1 1 0 0 -0 1 0 5.8285714285700001 +2 2.6847830161799999 -4.9144623465899997 21.9255437353 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.40000000000000002 +2 -2.6847830161799999 4.9144623465899997 21.9255437353 -0.87758256189037243 -0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 -0 0 1 0.40000000000000002 +2 -2.87655323163 5.2654953713400001 25.300000000000001 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.29999999999999999 +2 2.87655323163 -5.2654953713400001 25.300000000000001 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 0 8.881784197e-16 25.546195542 0 0 1 1 0 -0 -0 1 0 5.8285714285700001 +2 8.881784197e-16 1.4294121442000001e-15 25.546195542 0 -0 1 1 0 0 -0 1 0 5.8285714285700001 +2 2.6847830161799999 -4.9144623465899997 25.874456264700001 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.40000000000000002 +2 4.7184478546599997e-16 1.3322676295499999e-15 25.874456264700001 0 0 -1 -1 0 -0 0 1 0 6 +2 -2.6847830161799999 4.9144623465899997 25.874456264700001 -0.87758256189037243 -0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 -0 0 1 0.40000000000000002 +2 1.1102230246299999e-16 -8.881784197e-16 25.874456264700001 -0 0 -1 -1 0 0 0 1 0 6 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 12 0 0 1 1 0 -0 -0 1 0 6 +2 -1.5503856378e-16 1.16278922835e-16 0 0 0 1 1 0 -0 -0 1 0 4.2000000000000002 +2 -1.5503856378e-16 1.16278922835e-16 0 0 0 1 1 0 -0 -0 1 0 4.2000000000000002 +1 2.4450702468799999 -4.4756710656400003 0.90000000000000002 0.3390050494208432 -0.62054458056371298 0.70710678118667292 +1 -2.4450702468799999 4.4756710656400003 0.90000000000000002 -0.3390050494208432 0.62054458056371298 0.70710678118667292 +2 0 -8.881784197e-16 56 0 0 1 1 0 -0 -0 1 0 4.2000000000000002 +2 0 -8.881784197e-16 56 0 0 1 1 0 -0 -0 1 0 4.2000000000000002 +1 2.87655323163 -5.2654953713400001 28 0 0 1 +2 0 0 -4.5 0 0 1 1 0 -0 -0 1 0 6 +1 -2.87655323163 5.2654953713400001 28 0 0 1 +1 2.87655323163 -5.2654953713400001 -0.75 0 0 1 +1 -2.87655323163 5.2654953713400001 -0.75 0 0 1 +2 0 0 2.2679491924300001 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 54.200000000000003 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 -4.5 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 2.2679491924300001 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 54.200000000000003 0 0 1 1 0 -0 -0 1 0 6 +1 -2.4450702468799999 4.4756710656400003 55.100000000000001 -0.3390050494208432 0.62054458056371298 -0.70710678118667292 +1 2.4450702468799999 -4.4756710656400003 55.100000000000001 0.3390050494208432 -0.62054458056371298 -0.70710678118667292 +1 3.7874617549699998 -6.9329022389299997 19.300000000000001 0.3390050494208432 -0.62054458056371298 -0.70710678118667292 +2 2.6645352590999998e-15 -1.3322676295499999e-15 19.199999999999999 -2.0493787731500001e-14 1.24859617715e-14 1 1 0 2.0493787731500001e-14 2.5588465016874472e-28 1 -1.24859617715e-14 8 +1 -3.7874617549699998 6.9329022389299997 19.300000000000001 -0.3390050494208432 0.62054458056371298 -0.70710678118667292 +2 -1.7763568394e-15 2.2204460492599998e-16 19.199999999999999 1.9181567784200001e-14 1.04789382396e-14 1 1 0 -1.9181567784200001e-14 -2.0100246414933284e-28 1 -1.04789382396e-14 8 +2 0 0 12.199999999999999 0 0 1 1 0 -0 -0 1 0 8 +1 -8 9.7971743931799991e-16 6 0 0 1 +1 3.8354043088299998 -7.0206604951199996 15.699999999999999 0 0 1 +1 -3.8354043088299998 7.0206604951199996 15.699999999999999 0 0 1 +2 0 0 12.199999999999999 0 0 1 1 0 -0 -0 1 0 8 +1 8 0 6 0 0 1 +1 3.7874617549699998 -6.9329022389299997 12.1 0.3390050494208432 -0.62054458056371298 0.70710678118667292 +1 -3.7874617549699998 6.9329022389299997 12.1 -0.3390050494208432 0.62054458056371298 0.70710678118667292 +1 23 0 6 0 0 1 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 23 +1 -23 2.8166876380400002e-15 6 0 0 1 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 23 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +1 -21.399999999999999 2.62074415018e-15 1.4100000000099999 0 0 1 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +1 10.2597065261 -18.7802668245 1.55 0 0 1 +1 21.399999999999999 -5.2414883003499996e-15 1.4100000000099999 0 0 1 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +1 -10.2597065261 18.7802668245 1.55 0 0 1 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 11.5 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 11.5 +1 11.5 0 3.1000000000000001 0 0 1 +1 -11.5 1.4083438190200001e-15 3.1000000000000001 0 0 1 +2 0 0 4.5999999999999996 0 0 1 1 0 -0 -0 1 0 11.5 +2 0 0 4.5999999999999996 0 0 1 1 0 -0 -0 1 0 11.5 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +2 -9.9045007336499992e-16 3.5527136788e-15 0 0 0 1 1 0 -0 -0 1 0 9.4000000000000004 +2 -9.9045007336499992e-16 3.5527136788e-15 0 0 0 1 1 0 -0 -0 1 0 9.4000000000000004 +2 4.5066000628799996 -8.2492760817700006 0.59999999999999998 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.59999999999999998 +2 -4.4408920984999998e-15 2.6645352590999998e-15 0.59999999999999998 0 0 1 1 0 -0 -0 1 0 8.8000000000000007 +2 -4.5066000628799996 8.2492760817700006 0.59999999999999998 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.59999999999999998 +2 -4.4408920984999998e-15 4.8572257327400001e-16 0.59999999999999998 0 -0 1 1 0 0 -0 1 0 8.8000000000000007 +1 -4.2189447397200004 7.7227265446400004 1.55 0 0 1 +1 4.2189447397200004 -7.7227265446400004 1.55 0 0 1 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 8.8000000000000007 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 8.8000000000000007 +2 4.3627724013 -7.9860013132000001 2.7999999999999998 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -4.3627724013 7.9860013132000001 2.7999999999999998 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.29999999999999999 +1 17 0 6 0 0 1 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 17 +1 -17 2.0818995585500001e-15 6 0 0 1 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 17 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 15.4 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 15.4 +1 -15.4 1.88595607069e-15 1.4100000000099999 0 0 1 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 15.4 +1 7.3831532944999996 -13.5147714531 1.55 0 0 1 +1 15.4 -3.7719121413700003e-15 1.4100000000099999 0 0 1 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 15.4 +1 -7.3831532944999996 13.5147714531 1.55 0 0 1 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 9.5 +2 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 9.5 +2 0 0 4.5999999999999996 0 0 -1 -1 0 -0 0 1 0 9.5 +1 -9.5 -5.3822619527700003e-15 3.1000000000000001 0 0 -1 +1 9.5 0 3.1000000000000001 0 0 -1 +2 0 0 4.5999999999999996 0 0 -1 -1 0 -0 0 1 0 9.5 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 15.4 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 15.4 +2 -40 -22 20.5 0 0 1 1 0 -0 -0 1 0 7.4000000000000004 +2 -40 -22 20.5 0 0 1 1 0 -0 -0 1 0 7.4000000000000004 +2 -6.3307413543499999e-16 -1.7763568394e-15 0 0 0 1 1 0 -0 -0 1 0 7.2000000000000002 +2 -6.3307413543499999e-16 -1.7763568394e-15 0 0 0 1 1 0 -0 -0 1 0 7.2000000000000002 +2 3.4518638779500002 -6.3185944456099996 0.59999999999999998 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.59999999999999998 +2 -8.881784197e-16 8.881784197e-16 0.59999999999999998 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +2 -3.4518638779500002 6.3185944456099996 0.59999999999999998 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.59999999999999998 +2 -5.3290705181999996e-15 -8.3266726846900003e-16 0.59999999999999998 0 -0 1 1 0 0 -0 1 0 6.5999999999999996 +1 -3.1642085547900001 5.7920449084800003 1.55 0 0 1 +1 3.1642085547900001 -5.7920449084800003 1.55 0 0 1 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +2 0 0 2.7999999999999998 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +2 3.3080362163700001 -6.05531967704 2.7999999999999998 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -3.3080362163700001 6.05531967704 2.7999999999999998 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -40 20 20.5 -0 0 1 1 0 0 0 1 -0 7.4000000000000004 +2 -40 20 20.5 0 -0 1 1 0 0 -0 1 0 7.4000000000000004 +2 33 -4 8 0 0 1 1 0 -0 -0 1 0 10.589384154299999 +2 33 -4 8 0 0 1 1 0 -0 -0 1 0 10.589384154299999 +2 33 -4 8 0 0 1 1 0 -0 -0 1 0 8.8000000000000007 +2 33 -4 8 0 0 1 1 0 -0 -0 1 0 8.8000000000000007 +7 0 0 5 6 2 -77.420310216800004 -35.920310216799997 52 -80.863544493899994 -32.477075939700001 52 -83.630701301599998 -28.3577641933 52 -85.543882073600003 -23.738937226099999 52 -86.5 -18.8694686131 52 -86.5 -14 52 + 24.756193660499999 6 49.5123873211 6 +7 0 0 5 6 2 -77.365502634999999 -35.974981103600001 52 -77.376477798099998 -35.9640606185 52 -77.3874461435 -35.953133281600003 52 -77.398407665500002 -35.9421990986 52 -77.409362358500005 -35.931258075000002 52 -77.420310216800004 -35.920310216799997 52 + 24.677480660699999 6 24.756193660499999 6 +7 0 0 5 6 2 -55.5 -45 52 -60.353986003400003 -45 52 -65.207972006899993 -44.049952414499998 52 -69.813699537000005 -42.148921308600002 52 -73.924655812099999 -39.3986856868 52 -77.365502634999999 -35.974981103600001 52 + 0 6 24.677480660699999 6 +7 0 0 5 6 2 53.5 -45 52 31.699999999999999 -45 52 9.9000000000000004 -45 52 -11.9 -45 52 -33.700000000000003 -45 52 -55.5 -45 52 + 0 6 109 6 +7 0 0 5 9 3 86.5 -12 52 86.5 -17.183627878399999 52 85.482197046099998 -22.367255756799999 52 83.445585256499996 -27.284071560600001 52 77.554219149700003 -36.054219149700003 52 68.784071560599997 -41.945585256500003 52 63.867255756799999 -43.982197046099998 52 58.683627878400003 -45 52 53.5 -45 52 + 0 6 26.353367445100002 3 52.706734890200003 6 +1 86.5 -6.9992591740399996 52 0 -1 0 +7 0 0 5 6 2 72.706232063000002 20.958205170700001 52 77.674548047100004 18.3165126335 52 81.929282422 14.331497071999999 52 84.978940591300002 9.2560050281099997 52 86.500015347200005 3.6284438144700002 52 86.5 -1.99851834808 52 + 0 6 28.834167653600002 6 +7 0 0 5 6 2 47.082969087899997 34.5823357644 52 52.207621682899997 31.857509645699999 52 57.332274278 29.132683526899999 52 62.456926873 26.407857408200002 52 67.581579468000001 23.683031289399999 52 72.706232063000002 20.958205170700001 52 + 0 6 29.0201402464 6 +7 0 0 5 6 2 23.0000015518 43.222180868400002 52 28.032290530600001 42.200987762300002 52 32.990839903000001 40.816879762500001 52 37.840922780699998 39.076902099599998 52 42.549049793400002 36.9930634157 52 47.082969087899997 34.5823357644 52 + 17.9076813233 6 43.710801788600001 6 +7 0 0 5 6 2 5.2999999999999998 45 52 8.8637397867299992 45 52 12.4276487353 44.821590245800003 52 15.9795444001 44.464822848399997 52 19.507531426700002 43.930901378999998 52 23.0000015518 43.222180868400002 52 + 0 6 17.9076813233 6 +7 0 0 5 6 2 -29.5 45 52 -22.539999999999999 45 52 -15.58 45 52 -8.6199999999999992 45 52 -1.6599999999999999 45 52 5.2999999999999998 45 52 + 0 6 34.799999999999997 6 +7 0 0 5 9 3 -86.5 -12 52 -86.5 -3.04646093727 52 -84.741976716099998 5.90707812546 52 -81.224192715800001 14.3997599683 52 -71.048196713199999 29.548196713199999 52 -55.899759968300003 39.724192715800001 52 -47.4070781255 43.241976716099998 52 -38.453539062700003 45 52 -29.5 45 52 + 0 6 45.519452859700003 3 91.038905719400006 6 +1 -86.5 -13 52 0 1 0 +1 -84.5 -13 52 0 -1 0 +2 -29.5 -12 52 0 0 1 1 0 -0 -0 1 0 55 +1 -12.1 43 52 1 0 0 +2 5.2999999999999998 -44 52 0 0 1 1 0 -0 -0 1 0 87 +1 58.955657449900002 26.004375281800002 52 0.8829475928588979 -0.46947156278594571 0 +2 60.5 -1.9984474343 52 0 0 1 1 0 -0 -0 1 0 24 +1 84.5 -6.9992564465899996 52 0 -1 0 +2 53.5 -12 52 0 0 1 1 0 -0 -0 1 0 31 +1 -1 -43 52 1 0 0 +2 -55.5 -14 52 0 0 1 1 0 -0 -0 1 0 29 +2 33 -4 20.5 0 0 1 1 0 -0 -0 1 0 23 +2 33 -4 20.5 0 0 1 1 0 -0 -0 1 0 23 +1 28.7810552603 3.72272654464 7.75 0 0 1 +1 37.2189447397 -11.7227265446 7.75 0 0 1 +2 33 -4 19.899999999999999 0 0 1 1 0 -0 -0 1 0 8.8000000000000007 +2 33 -4 19.899999999999999 0 0 1 1 0 -0 -0 1 0 8.8000000000000007 +2 28.493399937100001 4.2492760817699997 19.899999999999999 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.59999999999999998 +2 37.506600062899999 -12.2492760818 19.899999999999999 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.59999999999999998 +2 -32.600000000000001 20 19.899999999999999 0 -1 0 0 -0 -1 1 0 0 0.59999999999999998 +2 -47.399999999999999 20 19.899999999999999 -1.66533453694e-15 1 -0 1 1.66533453694e-15 0 0 0 -1 0.59999999999999998 +2 -40 20 19.899999999999999 -0 0 1 1 0 0 0 1 -0 6.7999999999999998 +2 -40 20 19.899999999999999 0 -0 1 1 0 0 -0 1 0 6.7999999999999998 +2 -40 -22 20.5 0 0 1 1 0 -0 -0 1 0 17 +1 -57 -1 20.5 0 -1 0 +1 -23 -1 20.5 0 1 0 +2 -40 20 20.5 0 0 1 1 0 -0 -0 1 0 17 +2 -32.600000000000001 -22 19.899999999999999 0 -1 0 0 -0 -1 1 0 0 0.59999999999999998 +2 -47.399999999999999 -22 19.899999999999999 -7.7715611723799997e-16 1 -0 1 7.7715611723799997e-16 0 0 0 -1 0.59999999999999998 +2 -40 -22 19.899999999999999 -0 0 1 1 0 0 0 1 -0 6.7999999999999998 +2 -40 -22 19.899999999999999 0 -0 1 1 0 0 -0 1 0 6.7999999999999998 +2 44.266500157199999 -24.6231902044 20.300000000000001 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.5 +2 33 -4 20.300000000000001 0 -0 1 1 0 0 -0 1 0 24 +2 21.733499842800001 16.6231902044 20.300000000000001 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.5 +2 33 -4 19.800000000000001 0 -0 1 1 0 0 -0 1 0 23.5 +2 33 -4 20.300000000000001 0 0 1 1 0 -0 -0 1 0 24 +2 33 -4 19.800000000000001 0 0 1 1 0 -0 -0 1 0 23.5 +1 44.026787387900001 -24.184398923500002 20.149999999999999 0 0 1 +1 21.973212612099999 16.184398923500002 20.149999999999999 0 0 1 +2 33 -4 20.300000000000001 0 0 1 1 0 -0 -0 1 0 23 +2 33 -4 20.300000000000001 0 0 1 1 0 -0 -0 1 0 23 +2 21.733499842800001 16.6231902044 20.300000000000001 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 0 0 1 0.5 +2 44.266500157199999 -24.6231902044 20.300000000000001 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.5 +2 -22.5 20 20.300000000000001 -0 1 0 0 0 1 1 0 -0 0.5 +1 -22 -1 20.300000000000001 0 1 0 +2 -22.5 -22 20.300000000000001 -0 1 0 0 0 1 1 0 -0 0.5 +1 -22.5 -1 19.800000000000001 0 1 0 +2 -40 -22 20.300000000000001 0 -0 1 1 0 0 -0 1 0 18 +2 -57.5 -22 20.300000000000001 -4.4408920985e-16 1 0 1 4.4408920985e-16 0 0 0 -1 0.5 +2 -40 -22 19.800000000000001 0 -0 1 1 0 0 -0 1 0 17.5 +1 -58 -1 20.300000000000001 0 -1 0 +2 -57.5 20 20.300000000000001 0 -1 0 0 -0 -1 1 0 0 0.5 +1 -57.5 -1 19.800000000000001 0 -1 0 +2 -40 20 20.300000000000001 -0 0 1 1 0 0 0 1 -0 18 +2 -40 20 19.800000000000001 -0 0 1 1 0 0 0 1 -0 17.5 +1 -57 20 20.149999999999999 0 0 1 +1 -23 20 20.149999999999999 0 0 1 +2 -40 20 20.300000000000001 0 0 1 1 0 -0 -0 1 0 17 +1 -23 -1 20.300000000000001 0 1 0 +1 -23 -22 20.399999999999999 0 0 -1 +1 -57 -22 20.149999999999999 0 0 1 +2 -40 -22 20.300000000000001 0 0 1 1 0 -0 -0 1 0 17 +1 -57 -1 20.300000000000001 0 -1 0 +2 -22.5 -22 20.300000000000001 -1.3877787807800001e-15 -1 0 -1 1.3877787807800001e-15 0 -0 0 -1 0.5 +2 -57.5 -22 20.300000000000001 -1.3322676295499999e-15 1 0 1 1.3322676295499999e-15 0 0 0 -1 0.5 +2 -57.5 20 20.300000000000001 0 -1 0 0 -0 -1 1 0 0 0.5 +2 -22.5 20 20.300000000000001 -1.3322676295499999e-15 -1 0 -1 1.3322676295499999e-15 0 -0 0 -1 0.5 +1 -55.5 -45 41.5 0 0 -1 +1 -77.420310216800004 -35.920310216799997 41.5 0 0 -1 +7 0 0 4 5 2 -55.5 -45 50.999999993499998 -61.586749425800001 -45 50.999999993499998 -67.679800951900006 -43.403984354099997 50.999999993499998 -73.116328422400002 -40.224292011199999 50.999999993499998 -77.420310216800004 -35.920310216799997 50.999999993499998 + 0 5 34.4318543551 5 +2 -6.4589041095899997 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 9.5 +1 -15.958904109600001 -1 32.899999999999999 0 0 1 +2 -6.4589041095899997 -1 33.5 0 0 1 1 0 -0 -0 1 0 9.5 +1 3.0410958904099998 -1 32.899999999999999 0 0 1 +2 -6.4589041095899997 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 9.5 +2 -6.4589041095899997 -1 33.5 0 0 1 1 0 -0 -0 1 0 9.5 +2 -6.4589041095899997 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 8 +2 -6.4589041095899997 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 8 +1 -22 20 26.899999999999999 0 0 -1 +1 -22 -22 26.899999999999999 0 0 -1 +1 -22 -1.00000000006 33.5 -1.69176841848e-16 -1 0 +2 11.159670332199999 -26 33.5 0 0 1 1 0 -0 -0 1 0 7 +2 33 -4 33.5 0 0 1 1 0 -0 -0 1 0 24 +2 33 -4 33.5 0 0 1 1 0 -0 -0 1 0 24 +2 19.6958653043 24 33.5 0 0 1 1 0 -0 -0 1 0 7 +1 2.1868953314300001 17 33.5 1 0 0 +2 -15.3220746415 24 33.5 0 0 1 1 0 -0 -0 1 0 7 +2 -40 20 33.5 0 0 1 1 0 -0 -0 1 0 18 +2 -40 -22 33.5 0 0 1 1 0 -0 -0 1 0 18 +2 -15.3220746415 -26 33.5 0 0 1 1 0 -0 -0 1 0 7 +1 -2.0812021546700001 -19 33.5 -1 0 0 +1 -58 -22 26.899999999999999 0 0 -1 +1 -58 20 26.899999999999999 0 0 -1 +1 -58 -1.00000000025 33.5 0 -1 0 +1 -55.5 -43 45.399999999999999 0 0 -1 +1 53.5 -43 45.399999999999999 0 0 -1 +1 -1 -43 38.799999999999997 1 0 0 +1 -84.5 -14 33.5 0 0 1 +2 -55.5 -14 38.799999999999997 0 0 1 1 0 -0 -0 1 0 29 +1 84.5 -12 45 0 0 1 +2 53.5 -12 38.799999999999997 0 0 1 1 0 -0 -0 1 0 31 +1 -84.5 -12 45.399999999999999 0 0 -1 +1 -84.5 -13 38.799999999999997 0 -1 0 +1 84.5 -6.9992564465899996 38.799999999999997 0 -1 0 +1 84.5 -1.99851289317 45.399999999999999 0 0 -1 +1 71.767288937399996 19.1923099849 45 0 0 1 +2 60.5 -1.9984474343 38.799999999999997 0 0 1 1 0 -0 -0 1 0 24 +1 58.955657449900002 26.004375281800002 38.799999999999997 0.8829475928588979 -0.46947156278594571 0 +1 46.144025962400001 32.816440578700004 45.399999999999999 0 0 -1 +1 5.2999999999999998 43 45 0 0 1 +2 5.2999999999999998 -44 38.799999999999997 0 0 1 1 0 -0 -0 1 0 87 +1 -12.1 43 38.799999999999997 1 0 0 +1 -29.5 43 45.399999999999999 0 0 -1 +2 -29.5 -12 38.799999999999997 0 0 1 1 0 -0 -0 1 0 55 +2 5.2999999999999998 42.200000000000003 38.799999999999997 1 8.3266726846900003e-16 -0 -8.3266726846900003e-16 1 0 0 0 1 0.80000000000000004 +2 45.768448712100003 32.110082504399998 38.799999999999997 0.8829475928588979 -0.46947156278594571 0 0.46947156278594571 0.8829475928588979 0 -0 0 1 0.80000000000000004 +2 5.2999999999999998 -44 38 0 0 1 1 0 -0 -0 1 0 86.200000000000003 +2 71.391711687200001 18.485951910699999 38.799999999999997 0.8829475928588979 -0.46947156278594571 0 0.46947156278594571 0.8829475928588979 0 -0 0 1 0.80000000000000004 +1 55.619498734399997 26.872186295799999 38 0.8829475928588979 -0.46947156278594571 0 +2 83.699999999900001 -1.99851071121 38.799999999999997 -2.7274528199907653e-06 -0.99999999999628053 0 -0.99999999999628053 2.7274528199907653e-06 0 -0 0 -1 0.80000000000000004 +2 60.5 -1.9984474343 38 0 -0 1 1 0 0 -0 1 0 23.199999999999999 +2 83.700000000000003 -12 38.799999999999997 0 -1 0 0 -0 -1 1 0 0 0.80000000000000004 +1 83.700000000000003 1.42108547152e-14 38 0 -1 0 +2 53.5 -42.200000000000003 38.799999999999997 -1 1.36838683111e-15 -0 -1.36838683111e-15 -1 0 0 0 1 0.80000000000000004 +2 53.5 -12 38 -0 0 1 1 0 0 0 1 -0 30.199999999999999 +2 -55.5 -42.200000000000003 38.799999999999997 1 0 0 -0 0 1 0 -1 0 0.80000000000000004 +1 0 -42.200000000000003 38 1 0 0 +2 -83.700000000000003 -14 38.799999999999997 -1.65384947117e-15 1 0 1 1.65384947117e-15 0 0 0 -1 0.80000000000000004 +2 -55.5 -14 38 0 0 1 1 0 -0 -0 1 0 28.199999999999999 +2 -83.700000000000003 -12 38.799999999999997 0 -1 0 0 -0 -1 1 0 0 0.80000000000000004 +1 -83.700000000000003 1.42108547152e-14 38 0 -1 0 +2 -29.5 42.200000000000003 38.799999999999997 1 5.8135314744000002e-16 0 -5.8135314744000002e-16 1 0 0 -0 1 0.80000000000000004 +2 -29.5 -12 38 -0 0 1 1 0 0 0 1 -0 54.200000000000003 +1 0 42.200000000000003 38 1 0 0 +1 -22.231893741899999 22.879999999999999 29.149999999999999 0 0 -1 +1 -15.3220746415 17 29.149999999999999 0 0 -1 +2 -15.3220746415 24 37.600000000000001 -0 0 -1 -1 0 0 0 1 0 7 +1 -15.3220746415 -19 29.149999999999999 0 0 -1 +1 -22.231893741899999 -24.879999999999999 29.149999999999999 0 0 -1 +2 -15.3220746415 -26 37.600000000000001 0 0 -1 -1 0 -0 0 1 0 7 +1 44.506212926499998 -25.0619814854 29.899999999999999 0 0 1 +1 21.493787073499998 17.0619814854 29.899999999999999 0 0 1 +1 22.700024751800001 17.677419354800001 29.899999999999999 0 0 1 +2 33 -4 37.600000000000001 0 0 1 1 0 -0 -0 1 0 24 +1 19.6958653043 17 35.549999999999997 0 0 -1 +1 2.1868953314300001 17 37.600000000000001 1 0 0 +2 19.6958653043 24 37.600000000000001 0 0 -1 -1 0 -0 0 1 0 7 +1 11.159670332199999 -19 35.549999999999997 0 0 -1 +1 -2.0812021546700001 -19 37.600000000000001 -1 0 0 +1 16.091357676499999 -21.032258064499999 29.899999999999999 0 0 1 +2 33 -4 37.600000000000001 0 0 1 1 0 -0 -0 1 0 24 +2 11.159670332199999 -26 37.600000000000001 0 0 -1 -1 0 -0 0 1 0 7 +1 -57.985594235400001 -22.719999999999999 45.149999999999999 0 0 1 +2 -40 -22 33.5 0 0 1 1 0 -0 -0 1 0 18 +2 -40 -22 37.600000000000001 0 0 1 1 0 -0 -0 1 0 18 +2 -64.979991993599995 -23 33.5 0 0 -1 -1 0 -0 0 1 0 7 +1 -64.979991993599995 -16 29.149999999999999 0 0 -1 +2 -64.979991993599995 -23 37.600000000000001 0 0 -1 -1 0 -0 0 1 0 7 +2 -40 20 33.5 0 0 1 1 0 -0 -0 1 0 18 +1 -57.985594235400001 20.719999999999999 45.149999999999999 0 0 1 +2 -40 20 37.600000000000001 0 0 1 1 0 -0 -0 1 0 18 +1 -64.979991993599995 14 29.149999999999999 0 0 -1 +2 -64.979991993599995 21 33.5 0 0 -1 -1 0 -0 0 1 0 7 +2 -64.979991993599995 21 37.600000000000001 0 0 -1 -1 0 -0 0 1 0 7 +1 -69.434267906800002 -16 33.5 -1 0 0 +1 -73.888543819999995 -16 35.549999999999997 0 0 -1 +1 -69.434267906800002 -16 37.600000000000001 -1 0 0 +1 -77.295885499999997 -14.095238095199999 35.75 0 0 -1 +2 -73.888543819999995 -12 33.5 -0 0 -1 -1 0 0 0 1 0 4 +2 -73.888543819999995 -12 37.600000000000001 -0 0 -1 -1 0 0 0 1 0 4 +1 -73.888543819999995 14 35.549999999999997 0 0 -1 +1 -69.434267906800002 14 33.5 1 0 0 +1 -69.434267906800002 14 37.600000000000001 1 0 0 +1 -77.295885499999997 12.095238095199999 45 0 0 1 +2 -56 -0.99999999994099997 33.5 0 0 1 1 0 -0 -0 1 0 25 +2 -56 -0.99999999994099997 37.600000000000001 0 0 1 1 0 -0 -0 1 0 25 +2 -73.888543819999995 10 33.5 0 0 -1 -1 0 -0 0 1 0 4 +2 -73.888543819999995 10 37.600000000000001 0 0 -1 -1 0 -0 0 1 0 4 +2 -64.979991993599995 -23 38 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +1 -69.434267906800002 -16.399999999999999 38 -1 0 0 +2 -73.888543819999995 -12 38 0 0 1 1 0 -0 -0 1 0 4.4000000000000004 +2 -56 -0.99999999994099997 38 0 0 1 1 0 -0 -0 1 0 25.399999999999999 +2 -73.888543819999995 10 38 0 0 1 1 0 -0 -0 1 0 4.4000000000000004 +1 -69.434267906800002 14.4 38 1 0 0 +2 -64.979991993599995 21 38 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +2 -40 20 38 0 0 1 1 0 -0 -0 1 0 18.399999999999999 +2 -15.3220746415 24 38 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +1 2.1868953314300001 17.399999999999999 38 1 0 0 +2 19.6958653043 24 38 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +2 33 -4 38 0 0 1 1 0 -0 -0 1 0 24.399999999999999 +2 33 -4 38 0 0 1 1 0 -0 -0 1 0 24.399999999999999 +2 11.159670332199999 -26 38 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +1 -2.0812021546700001 -19.399999999999999 38 -1 0 0 +2 -15.3220746415 -26 38 0 0 1 1 0 -0 -0 1 0 6.5999999999999996 +2 -40 -22 38 0 0 1 1 0 -0 -0 1 0 18.399999999999999 +1 -22.034470338999999 -24.911999999999999 37.799999999999997 0.69799713466457269 -0.11313708498993073 0.70710678118656711 +1 -58.185434171300003 -22.728000000000002 37.799999999999997 -0.70654086930588689 -0.028284271247495472 0.70710678118688675 +1 -15.3220746415 -19.199999999999999 37.799999999999997 -9.4205547520939732e-15 0.70710678118654757 -0.70710678118654757 +1 11.159670332199999 -19.199999999999999 37.799999999999997 0 -0.70710678118654757 0.70710678118654757 +1 15.9504523238 -21.174193548400002 37.799999999999997 0.49817565198284453 0.50181771568084343 -0.70710678118677939 +1 22.614191624699998 17.858064516100001 37.799999999999997 0.30346593100379843 -0.63867709268457573 -0.70710678118653036 +1 19.6958653043 17.199999999999999 37.799999999999997 0 -0.70710678118654757 -0.70710678118654757 +1 -15.3220746415 17.199999999999999 37.799999999999997 0 0.70710678118654757 0.70710678118654757 +1 -22.034470338999999 22.911999999999999 37.799999999999997 -0.69799713466457269 -0.11313708498993073 -0.70710678118656711 +1 -58.185434171300003 20.728000000000002 37.799999999999997 -0.70654086930588689 0.028284271247495472 0.70710678118688675 +1 -64.979991993599995 14.199999999999999 37.799999999999997 0 -0.70710678118654757 -0.70710678118654757 +1 -73.888543819999995 14.199999999999999 37.799999999999997 0 0.70710678118654757 0.70710678118654757 +1 -77.466252584000003 12.199999999999999 37.799999999999997 -0.60233860193778832 0.37038926633386982 0.70710678118675141 +1 -77.466252584000003 -14.199999999999999 37.799999999999997 -0.6023386019356215 -0.37038926633776725 0.70710678118655568 +1 -73.888543819999995 -16.199999999999999 37.799999999999997 2.5121479338883926e-14 -0.70710678118654757 0.70710678118654757 +1 -64.979991993599995 -16.199999999999999 37.799999999999997 0 -0.70710678118654757 0.70710678118654757 +2 -68.458904109599999 -1 33.5 0 0 1 1 0 -0 -0 1 0 7.5 +2 -68.458904109599999 -1 33.5 0 0 1 1 0 -0 -0 1 0 7.5 +2 -68.458904109599999 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 7.5 +1 -75.958904109599999 -1 32.899999999999999 0 0 1 +1 -60.958904109599999 -1 32.899999999999999 0 0 1 +2 -68.458904109599999 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 7.5 +2 -68.458904109599999 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 6 +2 -68.458904109599999 -1 32.299999999999997 0 0 1 1 0 -0 -0 1 0 6 +1 5.2999999999999998 45 41.5 0 0 -1 +1 23.0000015518 43.222180868400002 41.5 0 0 -1 +7 0 0 3 4 2 5.2999999999999998 45 50.999999993499998 11.2395859398 45 50.999999993499998 17.179129001100002 44.403399781899999 50.999999993499998 23.0000015518 43.222180868400002 50.999999993499998 + 0 4 25.199528972900001 4 +1 -86.5 -12 41.5 0 0 -1 +1 -29.5 45 41.5 0 0 -1 +7 0 0 5 12 4 -86.5 -12 50.999999993499998 -86.5 -1.14593754481 50.999999993499998 -83.916432636400003 9.7081249113499997 50.999999993599999 -78.7435536391 19.7407710785 50.999999993599999 -67.727479097200003 32.340321766899997 50.999999993499998 -53.339827832300003 40.203659332199997 50.999999993599999 -48.252184600699998 42.239456674700001 50.999999993499998 -41.391055897599998 44.072566488 50.999999993499998 -34.374910612599997 44.8260247459 50.999999993499998 -32.749487840199997 44.9421098069 50.999999993499998 -31.124743920099998 45 50.999999993499998 -29.5 45 50.999999993499998 + 2.36494886716e-12 6 76.749811654799998 3 115.12646151200001 3 126.615135948 6 +1 -12.1983481148 -45 26 0 0 1 +2 -12.1983481148 -55 7 0 -0 1 1 0 0 -0 1 0 10 +1 -19.269415926699999 -47.928932188099999 26 0 0 1 +2 -12.1983481148 -55 23.499999994500001 0 -0 1 1 0 0 -0 1 0 10 +1 20.650825942600001 -45 7 -1 0 0 +1 53.499751589699997 -45 15.2499999973 0 0 1 +1 20.650825942600001 -45 23.499999994500001 -1 0 -1.0815229852e-16 +1 53.499751589699997 -45 51.4999999968 0 0 1 +1 -0.99999999999900002 -45 50.999999993499998 -1 0 -1.3037481390099999e-16 +1 -24.340483738500001 -53 15.2499999973 0 0 1 +1 -21.804949832599998 -50.464466094099997 7 0.70710678118654757 0.70710678118654757 0 +1 -21.804949832599998 -50.464466094099997 23.499999994500001 0.70710678118654757 0.70710678118654757 0 +1 -21.928932188099999 47.928932188099999 26 0 0 1 +2 -14.8578643763 55 7 0 0 1 1 0 -0 -0 1 0 10 +1 -14.8578643763 45 26 0 0 1 +2 -14.8578643763 55 23.499999994500001 0 0 1 1 0 -0 -0 1 0 10 +1 -12.1 45 50.999999993499998 1 0 2.0417894705799999e-16 +1 5.2999999999999998 45 15.2499999973 0 0 1 +1 -4.7789321881299998 45 7 1 0 0 +1 -4.7789321881299998 45 23.499999994500001 1 0 1.7624454716500001e-16 +1 -24.464466094100001 50.464466094099997 7 -0.70710678118654757 0.70710678118654757 0 +1 -27 53 15.2499999973 0 0 1 +1 -24.464466094100001 50.464466094099997 23.499999994500001 -0.70710678118654757 0.70710678118654757 0 +1 -68.326309529599996 34.750457374500002 23.499999994500001 0.50000000000018996 0.86602540378432902 0 +1 -57.789931182099998 53 15.2499999973 0 0 1 +1 -68.326309529599996 34.750457374500002 7 0.50000000000018996 0.86602540378432902 0 +1 -78.862687876999999 16.500914749 15.2499999973 0 0 1 +7 0 0 4 5 2 -78.862687876999999 16.500914749 7 -82.5869740638 10.050262138800001 7 -85.188155349599995 2.9491496505499999 7 -86.4932857923 -4.50021638696 7 -86.499977001199994 -11.948795860200001 7 + 0 5 42.135545458199999 5 +1 -86.499977001199994 -11.948795860200001 25 0 0 1 +7 0 0 4 5 2 -78.862687876999999 16.500914749 23.499999994500001 -82.586974064700001 10.050262137300001 23.499999994500001 -85.188155348699993 2.94914965216 23.4999999946 -86.4932857923 -4.5002163852899999 23.499999994500001 -86.499977001199994 -11.948795860200001 23.499999994500001 + 0 5 42.135545467599997 5 +1 -86.5 -13 50.999999993499998 0 1 0 +1 -86.5 -14 51.4999999968 0 0 1 +1 -86.5 -12.974397935300001 23.499999994500001 0 1 0 +1 -86.5 -12.9743979301 7 0 1 0 +1 -86.5 -14 15.2499999973 0 0 1 +1 -42.394965591099997 53 23.499999994500001 1 0 0 +1 -42.394965591099997 53 7 1 0 0 +1 23 43.222181183300002 25 0 0 1 +7 0 0 3 4 2 23 43.222181183300002 7 17.179127945400001 44.403399888300001 7 11.2395854121 45 7 5.2999999999999998 45 7 + 0 4 25.199526734100001 4 +7 0 0 3 4 2 23 43.222181183300002 23.499999994500001 17.179127945200001 44.403399888300001 23.499999994500001 11.2395854123 45 23.499999994500001 5.2999999999999998 45 23.499999994500001 + 0 4 25.199526734799999 4 +1 -62.458904109599999 -1 20.5 0 0 1 +1 -74.458904109599999 -1 20.5 0 0 1 +2 -68.458904109599999 -1 7 0 0 1 1 0 -0 -0 1 0 6 +2 -68.458904109599999 -1 7 0 0 1 1 0 -0 -0 1 0 6 +1 -14.458904109600001 -1 25 0 0 1 +1 1.5410958904100001 -1 25 0 0 1 +2 -6.4589041095899997 -1 7 0 0 1 1 0 -0 -0 1 0 8 +2 -6.4589041095899997 -1 7 0 0 1 1 0 -0 -0 1 0 8 +1 47.082969087899997 34.5823357644 51.4999999968 2.8421709246399999e-14 5.6843418492799998e-14 1 +1 72.706232063000002 20.958205170700001 51.4999999968 2.8421709246399999e-14 5.3290704836999999e-14 1 +1 59.8946005755 27.7702704676 50.999999993499998 0.8829475928588979 -0.46947156278594571 0 +1 72.706232063000002 20.958205170700001 15.2499999973 2.92829733623e-14 5.4259627112399999e-14 1 +1 59.8946005755 27.7702704676 7 0.8829475928588979 -0.46947156278594571 0 +1 47.082969087899997 34.5823357644 15.2499999973 2.8852341400999997e-14 5.4690259073599999e-14 1 +1 59.8946005755 27.7702704676 23.499999994500001 0.8829475928588979 -0.46947156278594571 0 +2 5.2998818036899999 -44.0004740595 7 0 0 1 1 0 -0 -0 1 0 89.000474059599995 +2 5.2998818036899999 -44.0004740595 23.499999994500001 0 0 1 1 0 -0 -0 1 0 89.000474059599995 +2 5.2998818036899999 -44.0004740595 50.999999993499998 0 0 1 1 0 -0 -0 1 0 89.000474059599995 +1 86.5 -1.99851834808 50 0 0 1 +2 60.500078944800002 -1.9983999996099999 7 0 0 1 1 0 -0 -0 1 0 25.999921055400002 +2 60.500078944800002 -1.9983999996099999 23.499999994500001 0 0 1 1 0 -0 -0 1 0 25.999921055400002 +1 86.5 -1.99851834808 50 0 0 1 +2 60.500078944800002 -1.9983999996099999 50.999999993499998 0 0 1 1 0 -0 -0 1 0 25.999921055400002 +1 86.5 -6.9992591740399996 23.499999994500001 0 -1 0 +1 86.5 -12 15.2499999973 0 0 1 +1 86.5 -6.9992591740399996 7 0 -1 0 +1 86.5 -6.9992591740399996 50.999999993499998 0 -1 0 +1 86.5 -12 51.4999999968 0 0 1 +2 53.499751589699997 -11.999751589700001 7 0 0 1 1 0 -0 -0 1 0 33.000248411299999 +2 53.499751589699997 -11.999751589700001 23.499999994500001 0 0 1 1 0 -0 -0 1 0 33.000248411299999 +2 53.499751589699997 -11.999751589700001 50.999999993499998 0 0 1 1 0 -0 -0 1 0 33.000248411299999 +2 -55.499766644799998 -13.999766644799999 7 0 0 1 1 0 -0 -0 1 0 31.000233355999999 +1 -77.4202418693 -35.9202418693 50 0 0 1 +2 -55.499766644799998 -13.999766644799999 23.499999994500001 0 0 1 1 0 -0 -0 1 0 31.000233355999999 +2 -55.499766644799998 -13.999766644799999 50.999999993499998 0 0 1 1 0 -0 -0 1 0 31.000233355999999 +1 -42.340483738499998 -53 23.499999994500001 -1 0 -1.9737298215599999e-16 +1 -60.340483738499998 -53 15.2499999973 0 0 1 +1 -42.340483738499998 -53 7 -1 0 0 +1 -68.880362803899999 -44.460120934599999 7 0.70710678118654757 -0.70710678118654757 0 +1 -68.880362803899999 -44.460120934599999 23.499999994500001 0.70710678118654757 -0.70710678118654757 0 +1 -33.200000000000003 -22 50 0 0 1 +1 -46.799999999999997 -22 50 0 0 1 +2 -40 -22 7 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 -22 7 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +1 -33.200000000000003 20 50 0 0 1 +1 -46.799999999999997 20 50 0 0 1 +2 -40 20 7 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 20 7 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +1 42.912024808799998 1.41496383246 4 0.15239061262502063 0.083251371105611274 -0.98480775301213319 +1 23.087975191200002 -9.4149638324599998 4 -0.15239061262502063 -0.083251371105611274 -0.98480775301213319 +2 33 -4 7 0 0 -1 -1 0 -0 0 1 0 10.765711135 +2 33 -4 7 0 0 -1 -1 0 -0 0 1 0 10.765711135 +2 -40.000000188800001 -22.000011602899999 13 5.76090795865e-17 2.3455816874200001e-17 1 1 0 -5.76090795865e-17 -1.3512680210721575e-33 1 -2.3455816874200001e-17 24.000006407600001 +1 -63.380132715099997 -27.4193944658 10 0 0 1 +2 -40.000000188800001 -22.000011602899999 7 5.76090795865e-17 2.3455816874200001e-17 1 1 0 -5.76090795865e-17 -1.3512680210721575e-33 1 -2.3455816874200001e-17 24.000006407600001 +1 -16.812920653799999 -28.193528390800001 10 0 0 1 +2 -10.050091973400001 -29.999935313400002 13 2.69383714935e-16 -1.7976870128500001e-16 -1 -1 0 -2.69383714935e-16 4.8426760581193609e-32 1 -1.7976870128500001e-16 6.9999338036700003 +1 -10.050041736300001 -23.000001509899999 10 0 0 -1 +2 -10.050091973400001 -29.999935313400002 7 2.69383714935e-16 -1.7976870128500001e-16 -1 -1 0 -2.69383714935e-16 4.8426760581193609e-32 1 -1.7976870128500001e-16 6.9999338036700003 +1 -53.638411611599999 23.161336702100002 10 0 0 1 +2 -40.000005889900002 20.000007856700002 13 1.2518649094500001e-16 3.3689686731300001e-16 1 0 1 -3.3689686731300001e-16 -1 4.2174936629277745e-32 1.2518649094500001e-16 14.0000039535 +1 -26.474205143599999 23.612877197100001 10 0 0 1 +2 -40.000005889900002 20.000007856700002 7 1.2518649094500001e-16 3.3689686731300001e-16 1 0 1 -3.3689686731300001e-16 -1 4.2174936629277745e-32 1.2518649094500001e-16 14.0000039535 +1 -10.050041736300001 10.9999977619 10 0 0 -1 +2 -10.050077960799999 27.999952680300002 13 -1.3606594428900001e-16 1.04491966795e-16 -1 -1 0 1.3606594428900001e-16 1.421779813257651e-32 1 1.04491966795e-16 16.9999549184 +2 -10.050077960799999 27.999952680300002 7 -1.3606594428900001e-16 1.04491966795e-16 -1 -1 0 1.3606594428900001e-16 1.421779813257651e-32 1 1.04491966795e-16 16.9999549184 +1 -0.937212455434 11 13 -1 0 0 +1 8.1756168253899997 11 10 0 0 -1 +1 -0.937212455434 11 7 -1 0 0 +1 18.5957658562 14.5679304444 10 0 -1.1842378929300001e-15 -1 +2 8.1756210378799992 27.9999879308 13 1.61279430607e-16 -9.6888452206000006e-16 -1 0 -1 9.6888452206000006e-16 -1 -1.5626114404177214e-31 -1.61279430607e-16 16.999987833900001 +2 8.1756210378799992 27.9999879308 7 1.61279430607e-16 -9.6888452206000006e-16 -1 0 -1 9.6888452206000006e-16 -1 -1.5626114404177214e-31 -1.61279430607e-16 16.999987833900001 +2 33.000154312699998 -3.9999358403 13 5.9907681504699996e-17 1.03890016243e-17 1 1 0 -5.9907681504699996e-17 -6.2238100046037534e-34 1 -1.03890016243e-17 23.4999954223 +1 53.469313867700002 -15.543907945200001 10 0 0 1 +2 33.000154312699998 -3.9999358403 7 5.9907681504699996e-17 1.03890016243e-17 1 1 0 -5.9907681504699996e-17 -6.2238100046037534e-34 1 -1.03890016243e-17 23.4999954223 +2 32.999998499500002 -4.0000094690600001 13 -1.07608474141e-16 1.6621763078200001e-16 1 0 1 -1.6621763078200001e-16 -1 -1.7886425623783132e-32 -1.07608474141e-16 23.499997080899998 +1 14.981975072599999 -19.086450221900002 10 0 0 1 +2 32.999998499500002 -4.0000094690600001 7 -1.07608474141e-16 1.6621763078200001e-16 1 0 1 -1.6621763078200001e-16 -1 -1.7886425623783132e-32 -1.07608474141e-16 23.499997080899998 +1 1.9476248895499999 -13.0000002125 10 4.4408920985e-16 1.1842378929300001e-15 -1 +2 1.9476373989 -29.999971756400001 13 4.70738733509e-16 1.0081044974899999e-15 -1 0 -1 -1.0081044974899999e-15 -1 4.7455383439316942e-31 -4.70738733509e-16 16.999971543899999 +2 1.9476373989 -29.999971756400001 7 4.70738733509e-16 1.0081044974899999e-15 -1 0 -1 -1.0081044974899999e-15 -1 4.7455383439316942e-31 -4.70738733509e-16 16.999971543899999 +1 -4.0512084233500003 -13 7 -1 0 0 +1 -4.0512084233500003 -13 13 -1 0 0 +1 -10.050041736300001 -13 10 0 0 -1 +1 -26.474207676999999 -25.612876528800001 10 0 0 -1 +2 -10.0500782264 -29.9999528508 13 2.2184535635e-16 -1.48044541144e-16 -1 -1 0 -2.2184535635e-16 3.2842993985762914e-32 1 -1.48044541144e-16 16.999954907700001 +2 -10.0500782264 -29.9999528508 7 2.2184535635e-16 -1.48044541144e-16 -1 -1 0 -2.2184535635e-16 3.2842993985762914e-32 1 -1.48044541144e-16 16.999954907700001 +2 -40.000005894799997 -22.000007838799998 13 5.5640088590099997e-18 3.34722974126e-16 1 0 1 -3.34722974126e-16 -1 1.8624015933512388e-33 5.5640088590099997e-18 14.000003959200001 +1 -53.638411617999999 -25.161336703 10 0 0 1 +2 -40.000005894799997 -22.000007838799998 7 5.5640088590099997e-18 3.34722974126e-16 1 0 1 -3.34722974126e-16 -1 1.8624015933512388e-33 5.5640088590099997e-18 14.000003959200001 +1 -4.0512084233500003 -23 13 -1 0 0 +1 1.9476248895499999 -23 10 0 0 1 +1 -4.0512084233500003 -23 7 -1 0 0 +2 1.94758182896 -30.000090517899999 13 -4.2166878908399999e-16 -5.48623878844e-16 -1 0 -1 5.48623878844e-16 -1 2.3133756665471658e-31 4.2166878908399999e-16 7.0000925632 +1 7.3147213727000002 -25.506193655299999 10 -5.9211894646699999e-16 0 -1 +2 1.94758182896 -30.000090517899999 7 -4.2166878908399999e-16 -5.48623878844e-16 -1 0 -1 5.48623878844e-16 -1 2.3133756665471658e-31 4.2166878908399999e-16 7.0000925632 +2 33.000000815600004 -4.0000089966100001 13 -5.2933418242299998e-17 -1.2842066634500001e-16 1 0 1 1.2842066634500001e-16 -1 6.7977448425947445e-33 -5.2933418242299998e-17 33.499997306399997 +2 33.000000815600004 -4.0000089966100001 7 -5.2933418242299998e-17 -1.2842066634500001e-16 1 0 1 1.2842066634500001e-16 -1 6.7977448425947445e-33 -5.2933418242299998e-17 33.499997306399997 +1 62.1795402395 -20.456141547600001 10 0 0 1 +2 33.000231648499998 -3.99990394745 13 2.1012375303300001e-17 3.6438932552000002e-18 1 1 0 -2.1012375303300001e-17 -7.656685264342593e-35 1 -3.6438932552000002e-18 33.499988350499997 +2 33.000231648499998 -3.99990394745 7 2.1012375303300001e-17 3.6438932552000002e-18 1 1 0 -2.1012375303300001e-17 -7.656685264342593e-35 1 -3.6438932552000002e-18 33.499988350499997 +1 12.4663281178 22.4690972667 10 0 0 1 +2 8.1755617599299999 28.000161024899999 13 -1.95855484681e-16 1.17654303265e-15 -1 0 -1 -1.17654303265e-15 -1 -2.3043240590771934e-31 1.95855484681e-16 7.0001627314999997 +1 8.1756168254000006 20.999998293600001 10 0 1.1842378929300001e-15 -1 +2 8.1755617599299999 28.000161024899999 7 -1.95855484681e-16 1.17654303265e-15 -1 0 -1 -1.17654303265e-15 -1 -2.3043240590771934e-31 1.95855484681e-16 7.0001627314999997 +1 -10.050041736300001 21 10 0 0 1 +1 -0.937212455434 21 7 -1 0 0 +1 -0.937212455434 21 13 -1 0 0 +2 -10.0500892177 27.999937760200002 13 -2.6938377685800001e-16 -1.79768782062e-16 -1 -1 0 2.6938377685800001e-16 -4.8426793473024245e-32 1 -1.79768782062e-16 6.9999367231200003 +1 -16.812928262700002 26.193526351199999 10 0 0 -1 +2 -10.0500892177 27.999937760200002 7 -2.6938377685800001e-16 -1.79768782062e-16 -1 -1 0 2.6938377685800001e-16 -4.8426793473024245e-32 1 -1.79768782062e-16 6.9999367231200003 +2 -40.000000158600002 20.0000116416 13 3.6512598978999999e-17 9.8261528521100004e-17 1 0 1 -9.8261528521100004e-17 -1 3.5877837859544956e-33 3.6512598978999999e-17 24.000006379399998 +2 -40.000000158600002 20.0000116416 7 3.6512598978999999e-17 9.8261528521100004e-17 1 0 1 -9.8261528521100004e-17 -1 3.5877837859544956e-33 3.6512598978999999e-17 24.000006379399998 +1 -63.3801326675 25.419394455199999 10 0 0 1 +2 -70.199389163800006 27.000064425600002 7 3.6359605203699998e-16 -4.57512413114e-16 -1 0 -1 4.57512413114e-16 -1 -1.6634970716617138e-31 -3.6359605203699998e-16 7.0000700167899996 +2 -70.199389163800006 27.000064425600002 13 3.6359605203699998e-16 -4.57512413114e-16 -1 0 -1 4.57512413114e-16 -1 -1.6634970716617138e-31 -3.6359605203699998e-16 7.0000700167899996 +1 -67.282680344799999 20.636591324699999 10 0 0 -1 +2 -65.199337741099995 16.091298859399998 13 0 0 1 1 0 -0 -0 1 0 5 +2 -65.199337741099995 16.091298859399998 7 0 0 1 1 0 -0 -0 1 0 5 +1 -70.199337741099995 16.091298859399998 10 0 0 1 +2 -70.199302031900004 26.9999554113 7 0 0 -1 -1 0 -0 0 1 0 16.999958414799998 +2 -70.199302031900004 26.9999554113 13 0 0 -1 -1 0 -0 0 1 0 16.999958414799998 +1 -63.116012066899998 11.545972449700001 10 0 0 -1 +2 -65.199337741099995 16.091272674700001 7 0 0 1 1 0 -0 -0 1 0 5 +2 -65.199337741099995 16.091272674700001 13 0 0 1 1 0 -0 -0 1 0 5 +2 -70.199384206299996 -29.000057785500001 13 2.03942557704e-16 5.8439850052099999e-16 -1 0 -1 -5.8439850052099999e-16 -1 1.1918372491463511e-31 -2.03942557704e-16 7.0000631979800003 +2 -70.199384206299996 -29.000057785500001 7 2.03942557704e-16 5.8439850052099999e-16 -1 0 -1 -5.8439850052099999e-16 -1 1.1918372491463511e-31 -2.03942557704e-16 7.0000631979800003 +1 -67.282679462999994 -22.636590317500001 10 0 0 -1 +2 -65.199337741099995 -18.091297447999999 13 9.8355079826499999e-17 -6.3129980462000004e-16 1 0 1 6.3129980462000004e-16 -1 -6.2091542677853961e-32 9.8355079826499999e-17 5 +1 -70.199337741099995 -18.091297447999999 10 0 -8.4588420923799999e-16 1 +2 -65.199337741099995 -18.091297447999999 7 9.8355079826499999e-17 -6.3129980462000004e-16 1 0 1 6.3129980462000004e-16 -1 -6.2091542677853961e-32 9.8355079826499999e-17 5 +7 0 0 5 9 3 -53.638400442600002 -25.161334112599999 7 -54.003979222200002 -23.584138428700001 7 -54.557315125400002 -22.050463563099999 7 -55.291490251799999 -20.5902685633 7 -57.019285000799997 -17.984147073199999 7 -59.287073799600002 -15.837099635 7 -60.481358048700002 -14.9322948693 7 -61.7647902569 -14.165305821500001 7 -63.116009920099998 -13.545968072999999 7 + 0 6 10.190667787600001 3 19.550105514999998 6 +2 -65.199337741099995 -18.0912726864 7 0 0 1 1 0 -0 -0 1 0 5 +2 -70.199302332399995 -28.999955369599999 13 -0 0 -1 -1 0 0 0 1 0 16.999958491400001 +1 -63.116011954999998 -13.545972512700001 10 0 0 -1 +2 -65.199337741099995 -18.0912726864 13 0 0 1 1 0 -0 -0 1 0 5 +1 6.5141038693100004 -109.712455713 23.499999994500001 0.99473992845615244 -0.1024327815450157 5.0159347423207682e-15 +1 26.946339062700002 -111.816453577 37.249999994500001 -5.4259627094400001e-15 -3.6173084729600001e-15 1 +1 6.5141038693100004 -109.712455713 50.999999994500001 0.99473992845615244 -0.1024327815450157 4.8429714753407426e-15 +1 -13.918131324000001 -107.60845784999999 37.249999994500001 -5.36136791528e-15 -3.6173084729600001e-15 1 +1 19.251906933600001 -111.02412378 37.499999995499998 5.52644349937e-15 3.15796771393e-15 -1 +1 5.8229157942800001 -109.64128101199999 32.999999994200003 -0.99473992845615244 0.1024327815450157 -3.1579672189504841e-15 +1 -7.6060753518500004 -108.258438244 37.499999995499998 5.3290705172299997e-15 3.1579677139100001e-15 -1 +1 5.8229157908699998 -109.64128101199999 41.999999996299998 -0.99473992845615244 0.1024327815450157 -4.7369508279607256e-15 +1 87.499999999799996 -28.101125938100001 37.249999994 -5.1675835329900002e-15 -3.4881188847699999e-15 1 +1 87.499999999799996 -9.1571596159599995 23.499999994500001 1.5865715347900001e-13 -1 -3.28191511333e-15 +1 87.499999999799996 9.7868067061600001 37.249999994 -5.1675835329900002e-15 -3.4881188847699999e-15 1 +1 87.499999999799996 -9.1571596159599995 50.999999993499998 1.5865715347900001e-13 -1 -3.1881461100899998e-15 +1 -159.616418463 -13.4267384906 50.999999994500001 0.83981625644186431 -0.54287075387791239 2.9197633232995284e-15 +1 -164.72578242700001 -10.123963334500001 37.249999994500001 -5.1675835327999999e-15 -3.4235240904799999e-15 1 +1 -159.616418463 -13.4267384906 23.499999994500001 0.83981625644186431 -0.54287075387791239 2.6277869909695761e-15 +1 -154.507054498 -16.729513646600001 37.249999994500001 -5.1675835327999999e-15 -3.4881188846399999e-15 1 +1 -162.59825610199999 10.5367602475 23.499999994500001 -0.1024327815450157 -0.99473992845615244 -3.8486352171705897e-15 +1 -162.59825610199999 10.5367602475 50.999999994500001 -0.1024327815450157 -0.99473992845615244 -3.934160444220603e-15 +1 -160.47072977600001 31.197483829599999 37.249999994500001 -5.1675835327999999e-15 -3.4881188846399999e-15 1 +1 -161.19916561400001 24.123535403799998 37.499999995000003 6.31593542723e-15 3.5527136778100001e-15 -1 +1 -162.479575584 11.689284349399999 41.999999996299998 0.1024327815450157 0.99473992845615244 3.6948216469305667e-15 +1 -163.759985554 -0.74496670486799998 37.499999995099998 6.31593542731e-15 3.4540271868099999e-15 -1 +1 -162.479575584 11.689284348099999 32.999999994200003 -0.1024327815450157 -0.99473992845615244 -3.9790386957306101e-15 +1 -155.253129836 33.6438877175 23.499999994500001 -0.90541532198995012 -0.42452690692797662 -6.165059484819661e-15 +1 -155.253129836 33.6438877175 50.999999994500001 -0.90541532198995012 -0.42452690692797662 -6.165059484819661e-15 +1 -150.035529897 36.090291605399997 37.249999994500001 -5.1675835327999999e-15 -3.3589292963199998e-15 1 +1 29.578781049 107.065231391 23.499999994500001 -0.99473992845615244 0.1024327815450157 -5.0363893608007718e-15 +1 6.4227351959299996 109.449712116 37.249999994500001 -5.3936653123599997e-15 -3.6173084729600001e-15 1 +1 29.578781049 107.065231391 50.999999994500001 -0.99473992845615244 0.1024327815450157 -5.0363893608007718e-15 +1 52.734826902000002 104.68075066500001 37.249999994500001 -5.4259627094400001e-15 -3.6173084729600001e-15 1 +1 28.1333348042 107.2140754 32.9999999988 -0.99473992845615244 0.1024327815450157 -5.0344656719307717e-15 +1 43.576597384700001 105.62381417 37.499999995700001 5.5264434996000003e-15 3.15796771406e-15 -1 +1 28.133334802299999 107.214075401 41.999999996299998 -0.99473992845615244 0.1024327815450157 -5.0344656707107715e-15 +1 12.690072219899999 108.804336631 37.499999997099998 5.32907051908e-15 3.1579677150099999e-15 -1 +1 70.117413450900003 57.233778685799997 23.499999994500001 -0.34399930899512393 0.93896990122733826 1.2655400189304559e-15 +1 70.117413450900003 57.233778685799997 50.999999993499998 -0.34399930899512393 0.93896990122733826 1.2655400189304559e-15 +1 57.2231695312 -69.958789757399998 50.999999993499998 0.58607935522689247 0.81025365742885125 5.8455468867089262e-15 +1 57.2231695312 -69.958789757399998 23.499999994500001 0.58607935522689247 0.81025365742885125 5.8111613167889323e-15 +1 18.172036477799999 68.839081131300006 35.9999999988 1.1842378929300001e-15 -4.7369515717299999e-15 -1 +2 21.2909982183 79.908050263700005 32.9999999988 5.9293703800799996e-16 -4.0777774832000003e-15 -1 0 -1 4.0777774832000003e-15 -1 -2.417865302544325e-30 -5.9293703800799996e-16 11.4999999998 +1 26.286492957699998 69.549718723200002 35.9999999988 1.1842378929300001e-15 -4.7369515717299999e-15 -1 +2 21.2909982183 79.908050263700005 41.999999996299998 5.9293703800799996e-16 -4.0777774832000003e-15 -1 0 -1 4.0777774832000003e-15 -1 -2.417865302544325e-30 -5.9293703800799996e-16 11.4999999998 +2 23.161170569300001 80.6168936097 41.999999996299998 6.3285417819799996e-16 -4.0332696041599998e-15 -1 0 -1 4.0332696041599998e-15 -1 -2.5524715207916493e-30 -6.3285417819799996e-16 11.5 +2 23.161170569300001 80.6168936097 32.9999999988 6.3285417819799996e-16 -4.0332696041599998e-15 -1 0 -1 4.0332696041599998e-15 -1 -2.5524715207916493e-30 -6.3285417819799996e-16 11.5 +1 27.223459950599999 69.858278225600003 45.000000001899998 6.3285412466000003e-16 -4.0332693629399997e-15 -1 +2 23.161170569300001 80.6168936097 51.000000002999997 6.3285417819799996e-16 -4.0332696041599998e-15 -1 0 -1 4.0332696041599998e-15 -1 -2.5524715207916493e-30 -6.3285417819799996e-16 11.5 +1 19.098881188099998 91.375508993799997 45.000000001899998 6.3285412466000003e-16 -4.0332693629399997e-15 -1 +2 23.161170569300001 80.6168936097 41.999999996299998 6.3285417819799996e-16 -4.0332696041599998e-15 -1 0 -1 4.0332696041599998e-15 -1 -2.5524715207916493e-30 -6.3285417819799996e-16 11.5 +1 23.776514180900001 93.1417119993 46.4999999956 4.85537536183e-14 -2.7948014277899999e-13 -1 +1 21.437697683700002 92.258610495799999 50.999999998500002 -0.93553177252933062 -0.35324255489412487 1.4901769405105267e-09 +1 21.437697684500002 92.258610496100005 41.999999996299998 -0.93553177252933062 -0.35324255489412487 5.258045326691858e-14 +2 27.8388294288 82.3831063855 41.999999996299998 5.4171342637599998e-16 -3.9490123110599997e-15 -1 0 -1 3.9490123110599997e-15 -1 -2.1392329898253185e-30 -5.4171342637599998e-16 11.5 +7 0 0 5 15 5 23.776514180100001 93.141712002399998 50.999999994100001 25.466471998500001 93.779818989500001 50.9999999944 27.2817218307 94.086103534800003 50.999999994600003 29.135401868500001 94.027393012900006 50.999999994900001 32.719860822400001 93.1863087646 50.999999995300001 35.720163512399999 91.052309590899995 50.999999995800003 36.989398629199997 89.700045257900001 50.999999996100001 38.929257486899999 86.570713649300004 50.999999996600003 39.5418265781 82.940213984899998 50.999999997000003 39.4831160564 81.086533947099994 50.999999997300002 38.642031808399999 77.502074993099995 50.999999997800003 36.508032635100001 74.501772302899994 50.999999998299998 35.155768302299997 73.2325371859 50.999999998500002 33.5911024981 72.262607756899996 50.999999998699998 31.9011446799 71.624500769500003 50.999999999000003 + -18.064157756899998 6 -9.0320788784400001 3 0 3 9.0320788784400001 3 18.064157756899998 6 +1 31.9011446799 71.624500769500003 45.000000001899998 5.4171351848700002e-16 -3.9490117842399999e-15 -1 +2 27.8388294288 82.3831063855 32.9999999988 5.4171342637599998e-16 -3.9490123110599997e-15 -1 0 -1 3.9490123110599997e-15 -1 -2.1392329898253185e-30 -5.4171342637599998e-16 11.5 +1 32.834324168099997 72.024774844600003 45.000000001899998 5.4171351848700002e-16 -3.9490117842399999e-15 -1 +1 29.562295848000002 70.741387057699995 32.9999999988 0.93553177252933062 0.35324255489412487 -5.2580017097318581e-14 +1 29.562289381799999 70.741384616199994 51.000000000599996 0.93553177252933062 0.35324255489412487 -1.117639668870395e-09 +1 41.149169102000002 81.920381622500003 35.999999992500001 5.5888520478200004e-16 -6.5302060647800001e-15 -1 +2 29.7090017885 83.091949733700005 41.999999996299998 5.5888520866500001e-16 -6.53020587755e-15 -1 0 -1 6.53020587755e-15 -1 -3.6496354744999411e-30 -5.5888520866500001e-16 11.5 +2 29.7090017885 83.091949733700005 32.999999993499998 5.5888520866500001e-16 -6.53020587755e-15 -1 0 -1 6.53020587755e-15 -1 -3.6496354744999411e-30 -5.5888520866500001e-16 11.5 +1 9.8508308940700005 81.079618377299994 35.9999999944 6.0304365945299997e-16 -6.4562556190099998e-15 -1 +2 21.290998208000001 79.9080502698 32.999999998 6.0304357727700005e-16 -6.45625595758e-15 -1 0 -1 6.45625595758e-15 -1 -3.893403688474987e-30 -6.0304357727700005e-16 11.5 +2 21.2909982079 79.9080502698 41.999999996299998 6.0304357727700005e-16 -6.45625595758e-15 -1 0 -1 6.45625595758e-15 -1 -3.893403688474987e-30 -6.0304357727700005e-16 11.5 +1 11.2704515577 94.941977504500002 32.999999997700002 0.10187548792598977 0.99479715769590016 5.7924984355594186e-11 +1 11.2704515576 94.941977504299999 41.999999996299998 0.10187548792598977 0.99479715769590016 -2.6005054595897391e-13 +1 42.362883243200002 93.772097895499996 41.999999996299998 0.10187548792598977 0.99479715769590016 -2.6003390784597389e-13 +1 42.362883243200002 93.772097895499996 32.999999993899998 0.10187548792598977 0.99479715769590016 -2.6003390784597389e-13 +7 0 0 5 9 3 28.538625593500001 101.847047723 41.999999996299998 29.060364657699999 101.496944132 41.999999996299998 29.444618362899998 100.941954088 41.999999996299998 29.580279002600001 100.252849845 41.999999996299998 29.2898447219 98.934400998599997 41.999999996299998 28.1798646357 98.165893588200007 41.999999996299998 27.4907603921 98.0302329485 41.999999996299998 26.831535969000001 98.175450088800005 41.999999996299998 26.309796904799999 98.525553680599998 41.999999996299998 + 4.4524817489300004 6 7.5940744025200004 3 10.7356670561 6 +7 0 0 5 9 3 26.309796904799999 98.525553680599998 41.999999996299998 25.788057840600001 98.875657272300003 41.999999996299998 25.403804135400001 99.430647315399995 41.999999996299998 25.268143495699999 100.11975155899999 41.999999996299998 25.5585777764 101.438200405 41.999999996299998 26.6685578626 102.20670781600001 41.999999996299998 27.357662106199999 102.342368455 41.999999996299998 28.016886529400001 102.197151315 41.999999996299998 28.538625593500001 101.847047723 41.999999996299998 + 10.7356670561 6 13.877259709700001 3 17.018852363299999 6 +7 0 0 5 9 3 28.538625593500001 101.847047723 32.9999999988 29.060364657699999 101.496944132 32.9999999988 29.444618362899998 100.941954088 32.9999999988 29.580279002600001 100.252849845 32.9999999988 29.2898447219 98.934400998599997 32.9999999988 28.1798646357 98.165893588200007 32.9999999988 27.4907603921 98.0302329485 32.9999999988 26.831535969000001 98.175450088800005 32.9999999988 26.309796904799999 98.525553680599998 32.9999999988 + 0.97681177770100003 6 4.1184044312900001 3 7.2599970848800002 6 +7 0 0 5 9 3 26.309796904799999 98.525553680599998 32.9999999988 25.788057840600001 98.875657272300003 32.9999999988 25.403804135400001 99.430647315399995 32.9999999988 25.268143495699999 100.11975155899999 32.9999999988 25.5585777764 101.438200405 32.9999999988 26.6685578626 102.20670781600001 32.9999999988 27.357662106199999 102.342368455 32.9999999988 28.016886529400001 102.197151315 32.9999999988 28.538625593500001 101.847047723 32.9999999988 + 7.2599970848800002 6 10.4015897385 3 13.5431823921 6 +7 0 0 5 15 5 30.379727411299999 80.409926420000005 32.9999999988 30.208499053800001 79.643420630999998 32.9999999988 29.8867676365 78.910535451300007 32.9999999988 29.423197897800001 78.250757750099993 32.9999999988 28.262338296300001 77.148518143100006 32.9999999988 26.770885201799999 76.567058916099995 32.9999999988 25.976558609400001 76.428318935299998 32.9999999988 24.3763058125 76.469769530899995 32.9999999988 22.910535453200001 77.113232365399995 32.9999999988 22.250757751999998 77.576802104099997 32.9999999988 21.148518144899999 78.737661705600004 32.9999999988 20.567058917899999 80.229114800100007 32.9999999988 20.428318937099998 81.023441392500004 32.9999999988 20.449044234900001 81.8235677909 32.9999999988 20.620272592500001 82.590073579999995 32.9999999988 + 8.4398167790700001 6 12.366807596099999 3 16.293798413000001 3 20.220789230000001 3 24.147780047000001 6 +7 0 0 5 15 5 20.620272592500001 82.590073579999995 32.9999999988 20.79150095 83.356579369000002 32.9999999988 21.1132323673 84.089464548699993 32.9999999988 21.576802105999999 84.749242249900007 32.9999999988 22.737661707499999 85.851481856999996 32.9999999988 24.229114802000002 86.432941084000007 32.9999999988 25.023441394399999 86.571681064800003 32.9999999988 26.623694191199998 86.530230469200006 32.9999999988 28.089464550599999 85.886767634600005 32.9999999988 28.749242251799998 85.423197895900003 32.9999999988 29.8514818588 84.262338294399996 32.9999999988 30.4329410858 82.770885199899993 32.9999999988 30.5716810666 81.976558607499996 32.9999999988 30.550955768800002 81.1764322091 32.9999999988 30.379727411299999 80.409926420000005 32.9999999988 + 24.147780047000001 6 28.074770864000001 3 32.001761680999998 3 35.928752498000001 3 39.855743314999998 6 +1 20.620272592500001 82.590073579999995 41.999999994200003 1.0449157878799999e-16 0 -1 +1 30.379727411299999 80.409926420000005 41.999999994200003 1.0449157878799999e-16 0 -1 +2 25.500000001899998 81.5 23.499999994500001 1.32556210217e-16 8.4147218736300005e-17 -1 -1 0 -1.32556210217e-16 -1.1154236415984865e-32 1 8.4147218736300005e-17 5 +2 25.500000001899998 81.5 23.499999994500001 1.32556210217e-16 8.4147218736300005e-17 -1 -1 0 -1.32556210217e-16 -1.1154236415984865e-32 1 8.4147218736300005e-17 5 +1 26.309796904799999 98.525553680599998 33.999999996299998 7.8154560156899994e-15 8.4870485750299999e-14 -1 +2 27.424211249199999 100.186300702 49.999999996299998 7.8154559352599992e-15 8.4870486415000004e-14 -1 0 -1 -8.4870486415000004e-14 -1 6.6330154678051494e-28 -7.8154559352599992e-15 2 +1 28.538625593500001 101.847047723 33.999999996299998 7.8154560156899994e-15 8.4870485750299999e-14 -1 +1 26.309796904799999 98.525553680599998 33.999999996299998 7.8154560156899994e-15 8.4870485750299999e-14 -1 +1 28.538625593500001 101.847047723 33.999999996299998 7.8154560156899994e-15 8.4870485750299999e-14 -1 +2 27.424211249199999 100.186300702 23.499999994500001 7.8154559352599992e-15 8.4870486415000004e-14 -1 0 -1 -8.4870486415000004e-14 -1 6.6330154678051494e-28 -7.8154559352599992e-15 2 +2 27.424211249199999 100.186300702 49.999999996299998 7.8154559352599992e-15 8.4870486415000004e-14 -1 0 -1 -8.4870486415000004e-14 -1 6.6330154678051494e-28 -7.8154559352599992e-15 2 +2 27.424211249199999 100.186300702 23.499999994500001 7.8154559352599992e-15 8.4870486415000004e-14 -1 0 -1 -8.4870486415000004e-14 -1 6.6330154678051494e-28 -7.8154559352599992e-15 2 +1 3.6202725862 -82.409926417600005 41.999999994200003 1.56737368182e-16 0 -1 +2 8.4999999956199996 -83.499999997499998 32.999999994200003 1.32556210217e-16 8.4147218736300005e-17 -1 -1 0 -1.32556210217e-16 -1.1154236415984865e-32 1 8.4147218736300005e-17 5 +1 13.379727405000001 -84.590073577499993 41.999999994200003 1.56737368182e-16 0 -1 +2 8.4999999956199996 -83.499999997499998 23.499999994500001 1.32556210217e-16 8.4147218736300005e-17 -1 -1 0 -1.32556210217e-16 -1.1154236415984865e-32 1 8.4147218736300005e-17 5 +2 8.4999999956199996 -83.499999997499998 32.999999994200003 1.32556210217e-16 8.4147218736300005e-17 -1 -1 0 -1.32556210217e-16 -1.1154236415984865e-32 1 8.4147218736300005e-17 5 +2 8.4999999956199996 -83.499999997499998 23.499999994500001 1.32556210217e-16 8.4147218736300005e-17 -1 -1 0 -1.32556210217e-16 -1.1154236415984865e-32 1 8.4147218736300005e-17 5 +1 19.938258883100001 -84.6900561848 44.999999988799999 -3.7372132055699999e-16 -9.0990113221800002e-16 -1 +2 8.5 -83.5 41.999999996299998 -3.7372158294600001e-16 -9.0990075420400002e-16 -1 0 -1 9.0990075420400002e-16 -1 3.4004955018487817e-31 3.7372158294600001e-16 11.5 +1 -2.9382588831000001 -82.3099438152 44.999999988799999 -3.7372149819199999e-16 -9.0990113221800002e-16 -1 +7 0 0 5 15 5 -2.93825888295 -82.309943813700002 50.999999992100001 -2.75132529435 -80.513226309900006 50.999999991999999 -2.2116070488499999 -78.753213130500001 50.999999991899998 -1.3283773532300001 -77.122421325000005 50.999999991800003 1.0299238313600001 -74.29502248 50.999999991599999 4.2822352022899999 -72.569264834199998 50.999999991300001 6.0599168537799999 -72.040658596900002 50.999999991199999 9.7267605098499992 -71.708956460099998 50.999999991000003 13.246786868799999 -72.788392950800002 50.999999990799999 14.8775786744 -73.671622646399996 50.999999990699997 17.704977519500002 -76.029923830800001 50.999999990500001 19.4307351655 -79.282235201600002 50.999999990299997 19.959341403 -81.059916853000004 50.999999990200003 20.1251924715 -82.893338681100005 50.999999990100001 19.938258883100001 -84.6900561848 50.999999989999999 + -18.0641577574 6 -9.0320788787000001 3 1.7763568394e-15 3 9.0320788787000001 3 18.0641577574 6 +7 0 0 5 15 5 19.9382588828 -84.690056188100002 50.999999995800003 19.751325293899999 -86.486773691799996 50.999999995300001 19.211607048099999 -88.246786871099999 50.999999994699998 18.328377352299999 -89.877578676400006 50.999999994200003 15.9700761675 -92.704977520900002 50.999999993099998 12.717764796599999 -94.430735166199995 50.999999991999999 10.940083145099999 -94.959341403300002 50.999999991400003 7.2732394892099999 -95.2910435398 50.999999990299997 3.7532131304799998 -94.211607048800005 50.999999989199999 2.1224213250399999 -93.328377353299999 50.999999988699997 -0.70497751977800005 -90.970076168800006 50.999999987599999 -2.4307351656199998 -87.717764798100006 50.999999986500001 -2.9593414029899998 -85.940083146800006 50.999999985999999 -3.1251924714700001 -84.106661318799993 50.999999985400002 -2.9382588831000001 -82.3099438152 50.999999984900001 + -18.064157756499998 6 -9.0320788782400001 3 0 3 9.0320788782400001 3 18.064157756499998 6 +2 8.5 -83.5 41.999999996299998 -3.7372158294600001e-16 -9.0990075420400002e-16 -1 0 -1 9.0990075420400002e-16 -1 3.4004955018487817e-31 3.7372158294600001e-16 11.5 +1 8.6902126879499999 -100.646112499 33.999999996299998 2.2964359018800001e-13 1.6778850948600001e-13 -1 +2 6.7074263208199998 -100.90794875 49.9999999968 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +1 4.7246399536899997 -101.16978500099999 33.999999996299998 2.2964359018800001e-13 1.6778850948600001e-13 -1 +2 6.7074263208199998 -100.90794875 41.999999996299998 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +1 8.6902126879499999 -100.646112499 33.999999996299998 2.2964359018800001e-13 1.6778850948600001e-13 -1 +2 6.7074263208199998 -100.90794875 32.999999994200003 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +1 4.7246399536899997 -101.16978500099999 33.999999996299998 2.2964359018800001e-13 1.6778850948600001e-13 -1 +2 6.7074263208199998 -100.90794875 23.499999994500001 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +2 6.7074263208199998 -100.90794875 41.999999996299998 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +2 6.7074263208199998 -100.90794875 49.9999999968 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +2 6.7074263208199998 -100.90794875 32.999999994200003 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +2 6.7074263208199998 -100.90794875 23.499999994500001 2.29643590168e-13 1.6778850952899999e-13 -1 -1 0 -2.29643590168e-13 -3.853155571717724e-26 1 1.6778850952899999e-13 2 +7 0 0 5 6 2 -4.9297582828299999 -82.124648222700003 41.999999996299998 -4.4976787792500001 -77.905565226999997 41.999999996299998 -2.4131343732300001 -73.8517347035 41.999999996299998 1.2640604474699999 -70.857741346300003 41.999999996299998 5.6562687796000004 -69.638162213699999 41.999999996299998 9.8753517753400004 -70.070241717599998 41.999999996299998 + 2.2474917242100001 6 23.453242136899998 6 +7 0 0 5 6 2 9.8753517753400004 -70.070241717599998 41.999999996299998 14.0944347709 -70.502321221499997 41.999999996299998 18.148265294000002 -72.586865627600005 41.999999996299998 21.142258650900001 -76.264060448199999 41.999999996299998 22.361837783399999 -80.656268780100007 41.999999996299998 21.9297582795 -84.875351775699997 41.999999996299998 + 23.453242136899998 6 44.658992548599997 6 +7 0 0 1 2 2 21.929761623299999 -84.875319113900005 41.999999996299998 19.251906933600001 -111.02412378 41.999999996299998 + -13.142782156000001 2 13.142782156000001 2 +7 0 0 1 2 2 -4.9297582865100003 -82.124648223299999 41.999999996299998 -7.6060753518500004 -108.258438244 41.999999996299998 + -13.135235569600001 2 13.135235569600001 2 +1 20.590835950100001 -97.949705116299995 32.999999994200003 -0.10187548771604103 -0.99479715771740063 6.7579093968127222e-15 +2 8.4999999983999999 -83.499999998700005 32.999999994200003 1.10785473343e-16 -6.8905455708200003e-15 -1 0 -1 6.8905455708200003e-15 -1 -7.6337235265480587e-31 -1.10785473343e-16 13.5 +2 8.4999999983999999 -83.499999998700005 32.999999994200003 1.10785473343e-16 -6.8905455708200003e-15 -1 0 -1 6.8905455708200003e-15 -1 -7.6337235265480587e-31 -1.10785473343e-16 13.5 +1 -6.2679168155999996 -95.191543233800004 32.999999994200003 -0.10187548783502212 -0.99479715770521604 6.761800463941468e-15 +1 -4.9297582827399999 -82.124648221800001 35.999999990699997 -1.10785158824e-16 -7.0754438752399996e-15 -1 +1 9.8753517753400004 -70.070241717599998 35.999999990699997 -1.10785158824e-16 -7.0754438752399996e-15 -1 +1 21.9297582795 -84.875351775699997 35.999999990699997 -1.10784981189e-16 -7.0754438752399996e-15 -1 +1 -142.379727409 10.221242007000001 41.999999994200003 0 -2.24656894395e-15 -1 +2 -137.5 9.1311684270499995 32.999999994200003 3.5275243950799999e-16 -2.2402162931099999e-15 -1 0 -1 2.2402162931099999e-15 -1 -7.9024176242012117e-31 -3.5275243950799999e-16 5 +1 -132.62027259000001 8.0410948470800001 41.999999994200003 0 -2.24656894395e-15 -1 +2 -137.5 9.1311684270499995 23.499999994500001 3.5275243950799999e-16 -2.2402162931099999e-15 -1 0 -1 2.2402162931099999e-15 -1 -7.9024176242012117e-31 -3.5275243950799999e-16 5 +2 -137.5 9.1311684270499995 32.999999994200003 3.5275243950799999e-16 -2.2402162931099999e-15 -1 0 -1 2.2402162931099999e-15 -1 -7.9024176242012117e-31 -3.5275243950799999e-16 5 +2 -137.5 9.1311684270499995 23.499999994500001 3.5275243950799999e-16 -2.2402162931099999e-15 -1 0 -1 2.2402162931099999e-15 -1 -7.9024176242012117e-31 -3.5275243950799999e-16 5 +7 0 0 3 4 2 -125.00301579800001 8.8566035419099993 39.000000005799997 -125.01034536100001 8.5229941308200008 39.000000005899999 -125.031040706 8.1896786012800007 39.000000006100002 -125.065035529 7.8577248189100004 39.000000006199997 + 18.614045512400001 4 19.615115267699998 4 +7 0 0 5 6 2 -136.22655639800001 21.566132897999999 38.999999997499998 -132.519169363 21.186465685400002 38.9999999992 -128.95037998399999 19.428203057699999 39.0000000008 -126.224448873 16.341360615599999 39.000000002500002 -124.92115643299999 12.582481272400001 39.000000004100002 -125.00301579800001 8.8566035419000002 39.000000005799997 + -0.019838823690999999 6 18.614045512400001 6 +1 -136.22655639600001 21.566132897799999 44.999999987000002 5.7838178690899997e-17 -2.1268192540399999e-15 -1 +2 -137.5 9.1311684270499995 41.999999996299998 5.7837690158399994e-17 -2.12681934891e-15 -1 0 -1 2.12681934891e-15 -1 -1.2301031852514658e-31 -5.7837690158399994e-17 12.5 +1 -149.93292772000001 10.4243460221 44.999999987000002 5.7838178690899997e-17 -2.1268194316799998e-15 -1 +7 0 0 5 15 5 -149.93292772000001 10.4243460221 50.999999992600003 -149.72979585900001 12.377305741600001 50.999999992299998 -149.143201253 14.2903806133 50.999999991899998 -148.183220549 16.063008333599999 50.999999991599999 -145.61993911499999 19.1363425282 50.999999990900001 -142.08487263800001 21.0122689104 50.999999990299997 -140.15262669099999 21.586897126699998 50.999999989899997 -136.16693755700001 21.947558892 50.999999989199999 -132.34078781299999 20.774369680300001 50.999999988600003 -130.56816009299999 19.814388976899998 50.999999988200003 -127.494825898 17.251107542100002 50.999999987599999 -125.618899516 13.716041065400001 50.999999986900001 -125.04427130000001 11.783795118800001 50.999999986600002 -124.86394041699999 9.7909505515199999 50.999999986200002 -125.067072279 7.83799083202 50.999999985899997 + -19.634954084899999 6 -9.8174770424699993 3 0 3 9.8174770424699993 3 19.634954084899999 6 +1 -125.067072279 7.83799083202 44.999999987000002 5.7838178690899997e-17 -2.1268194316799998e-15 -1 +7 0 0 3 4 2 -125.065035529 7.8577248235099999 39.000000006199997 -125.06570922500001 7.8511462889699999 39.000000006199997 -125.06638814199999 7.8445682890499997 39.000000006199997 -125.067072279 7.83799083202 39.000000006199997 + 19.615115263100002 4 19.634954084899999 4 +2 -137.5 9.1311684270499995 50.999999990799999 5.7837690158399994e-17 -2.12681934891e-15 -1 0 -1 2.12681934891e-15 -1 -1.2301031852514658e-31 -5.7837690158399994e-17 12.5 +2 -137.5 9.1311684270499995 41.999999996299998 5.7837690158399994e-17 -2.12681934891e-15 -1 0 -1 2.12681934891e-15 -1 -1.2301031852514658e-31 -5.7837690158399994e-17 12.5 +1 -138.773443598 -3.3037960442399998 44.999999987000002 5.7838178690899997e-17 -2.1268194316799998e-15 -1 +2 -137.5 9.1311684270499995 38.999999994500001 5.7837690158399994e-17 -2.12681934891e-15 -1 0 -1 2.12681934891e-15 -1 -1.2301031852514658e-31 -5.7837690158399994e-17 12.5 +2 -137.5 9.1311684270499995 38.999999994500001 5.7837690158399994e-17 -2.12681934891e-15 -1 0 -1 2.12681934891e-15 -1 -1.2301031852514658e-31 -5.7837690158399994e-17 12.5 +7 0 0 1 2 2 -136.22655639999999 21.566132893300001 41.999999996299998 -161.19916561400001 24.1235354037 41.999999996299998 + -12.5516086474 2 12.5516086474 2 +7 0 0 1 2 2 -138.773443598 -3.3037960437399998 41.999999996299998 -163.759985554 -0.74496670486899996 41.999999996299998 + -12.558611452899999 2 12.558611452899999 2 +7 0 0 5 9 3 -157.64850820199999 12.0019382692 41.999999996299998 -157.34196309399999 12.5504036491 41.999999996299998 -156.82003613500001 12.9784890466 41.999999996299998 -156.14423603399999 13.169702776399999 41.999999996299998 -154.806545309 12.9873762627 41.999999996299998 -153.950374514 11.9435223449 41.999999996299998 -153.75916078500001 11.2677222434 41.999999996299998 -153.85032404099999 10.598876881200001 41.999999996299998 -154.15686914899999 10.050411501399999 41.999999996299998 + 1.1481745586300001 6 4.2897672122200001 3 7.4313598658200002 6 +7 0 0 5 9 3 -154.15686914899999 10.050411501399999 41.999999996299998 -154.46341425700001 9.5019461215399996 41.999999996299998 -154.98534121599999 9.0738607240500002 41.999999996299998 -155.66114131800001 8.8826469942599999 41.999999996299998 -156.998832042 9.0649735079500005 41.999999996299998 -157.855002837 10.108827425699999 41.999999996299998 -158.04621656699999 10.7846275272 41.999999996299998 -157.95505331000001 11.4534728894 41.999999996299998 -157.64850820199999 12.0019382692 41.999999996299998 + 7.4313598658100002 6 10.572952519399999 3 13.714545172999999 6 +1 -151.266714576 -2.0243813780600002 32.999999994200003 -0.99479715770132338 0.10187548787303312 -3.3946877250611036e-15 +2 -137.49999999600001 9.1311684221299991 32.999999994200003 2.9860183649199999e-15 -4.03497471773e-15 -1 0 -1 4.03497471773e-15 -1 -1.2048508609129673e-29 -2.9860183649199999e-15 12.5 +2 -137.49999999600001 9.1311684221299991 32.999999994200003 2.9860183649199999e-15 -4.03497471773e-15 -1 0 -1 4.03497471773e-15 -1 -1.2048508609129673e-29 -2.9860183649199999e-15 12.5 +2 -137.49999999600001 9.1311684221299991 32.999999994200003 2.9860183649199999e-15 -4.03497471773e-15 -1 0 -1 4.03497471773e-15 -1 -1.2048508609129673e-29 -2.9860183649199999e-15 12.5 +2 -137.49999999600001 9.1311684221299991 32.999999994200003 2.9860183649199999e-15 -4.03497471773e-15 -1 0 -1 4.03497471773e-15 -1 -1.2048508609129673e-29 -2.9860183649199999e-15 12.5 +1 -148.712861006 22.844834150800001 32.999999994200003 -0.99479715770132338 0.10187548787303312 -3.679630166921196e-15 +2 -155.902688676 11.0261748853 32.999999994200003 2.9860183649199999e-15 -4.03497471773e-15 -1 0 -1 4.03497471773e-15 -1 -1.2048508609129673e-29 -2.9860183649199999e-15 2 +2 -155.902688676 11.0261748853 32.999999994200003 2.9860183649199999e-15 -4.03497471773e-15 -1 0 -1 4.03497471773e-15 -1 -1.2048508609129673e-29 -2.9860183649199999e-15 2 +1 -125.065035524 7.8577248230599999 35.999999996299998 2.75570357644e-15 -4.2209968853499998e-15 -1 +1 -125.00301579400001 8.8566035418200002 35.999999996299998 2.75570357644e-15 -4.2209968853499998e-15 -1 +1 -138.773443598 -3.3037960487200002 35.999999996299998 2.75570357644e-15 -4.2209968853499998e-15 -1 +1 -125.20676677 6.8670092278099997 35.999999996299998 2.75570357644e-15 -4.2209968853499998e-15 -1 +1 -136.226556397 21.566132893300001 35.999999996299998 2.8070303415000002e-15 -4.1935665606699999e-15 -1 +1 -154.15686914899999 10.050411501399999 33.999999992500001 1.20852993746e-13 -1.09153397432e-15 -1 +2 -155.902688676 11.0261748853 49.999999992399999 1.2085299515399999e-13 -1.09153403715e-15 -1 -1 0 -1.2085299515399999e-13 1.31915157702115e-28 1 -1.09153403715e-15 2 +1 -157.64850820199999 12.0019382692 33.999999992500001 1.20852993746e-13 -1.09153397432e-15 -1 +1 -154.15686914899999 10.050411501399999 33.999999992500001 1.20852993746e-13 -1.09153397432e-15 -1 +1 -157.64850820199999 12.0019382692 33.999999992500001 1.20852993746e-13 -1.09153397432e-15 -1 +2 -155.902688676 11.0261748853 23.499999994500001 1.2085299515399999e-13 -1.09153403715e-15 -1 -1 0 -1.2085299515399999e-13 1.31915157702115e-28 1 -1.09153403715e-15 2 +2 -155.902688676 11.0261748853 49.999999992399999 1.2085299515399999e-13 -1.09153403715e-15 -1 -1 0 -1.2085299515399999e-13 1.31915157702115e-28 1 -1.09153403715e-15 2 +2 -155.902688676 11.0261748853 23.499999994500001 1.2085299515399999e-13 -1.09153403715e-15 -1 -1 0 -1.2085299515399999e-13 1.31915157702115e-28 1 -1.09153403715e-15 2 +1 -9.1784735969900009 87.068658281400005 37.249999994 -5.3613679154799999e-15 -3.6173084730900004e-15 1 +1 -1.3778692005299999 98.259185198899999 50.999999993499998 -0.57184921635528985 -0.82035874698441591 5.208869543702641e-16 +1 -1.3778692005299999 98.259185198899999 23.499999994500001 0.57184921635528985 0.82035874698441591 5.7297564980729044e-15 +2 -41.992823476399998 109.942626936 23.499999994500001 -4.0715155394300002e-15 2.0148165554899999e-15 1 1 0 4.0715155394300002e-15 8.2033569147783615e-30 1 -2.0148165554899999e-15 40 +2 -41.992823476399998 109.942626936 50.999999993499998 -4.0715155394300002e-15 2.0148165554899999e-15 1 1 0 4.0715155394300002e-15 8.2033569147783615e-30 1 -2.0148165554899999e-15 40 +1 -25.0117471993 73.726014055999997 37.249999994500001 -4.0602442043400002e-15 2.2146786569100001e-15 1 +1 -124.37373182499999 33.447782462299998 37.249999994 -5.1675835329900002e-15 -3.3589292964400002e-15 1 +1 -137.204630861 34.769037033799997 23.499999994500001 0.99473992845615244 -0.1024327815450157 4.9577563142807594e-15 +1 -137.204630861 34.769037033799997 50.999999993499998 0.99473992845615244 -0.1024327815450157 4.9577563142807594e-15 +1 -103.295344286 37.020766720899999 37.249999994 -5.1675835329900002e-15 -3.3589292964400002e-15 1 +1 -64.153545742899993 55.373390388499999 50.999999993499998 0.90541532198995012 0.42452690692797662 6.0813358714896647e-15 +1 -64.153545742899993 55.373390388499999 23.499999994500001 0.90541532198995012 0.42452690692797662 6.1224259787296629e-15 +2 -120.27642056400001 73.237379600500006 23.499999994500001 -2.2933259066499999e-14 -5.3953122334099997e-15 1 1 0 2.2933259066499999e-14 -1.2373209319344824e-28 1 5.3953122334099997e-15 40 +2 -120.27642056400001 73.237379600500006 50.999999993499998 -2.2933259066499999e-14 -5.3953122334099997e-15 1 1 0 2.2933259066499999e-14 -1.2373209319344824e-28 1 5.3953122334099997e-15 40 +1 -148.32785824300001 -17.365812886200001 50.999999993499998 0.99473992845615244 -0.1024327815450157 4.5753861894107015e-15 +1 -148.32785824300001 -17.365812886200001 23.499999994500001 0.99473992845615244 -0.1024327815450157 4.8613478262507449e-15 +1 -142.148661989 -18.0021121258 37.249999994 -5.1675835329900002e-15 -3.4881188847699999e-15 1 +2 -146.24597324999999 -57.791709263999998 23.499999994500001 9.6659368965000009e-16 -9.5482086703000007e-15 1 0 1 9.5482086703000007e-15 -1 -9.2292382481733984e-30 9.6659368965000009e-16 40 +2 -146.24597324999999 -57.791709263999998 50.999999993499998 9.6659368965000009e-16 -9.5482086703000007e-15 1 0 1 9.5482086703000007e-15 -1 -9.2292382481733984e-30 9.6659368965000009e-16 40 +1 -124.531143095 -24.199059006399999 37.249999994500001 1.4764524379399999e-15 -9.5969408466300004e-15 1 +1 -14.3225999796 -106.441786845 50.999999994500001 -0.3275596318859868 0.94483050731796181 0 +1 -77.668300933899999 -54.491954931899997 50.999999994500001 -0.83981625644186431 0.54287075387791239 -2.6740230788895681e-15 +2 -52.520288927800003 -118.377501115 50.999999994500001 5.3319979771499996e-15 3.3284093715700001e-15 -1 -1 0 -5.3319979771499996e-15 -1.7747072036338342e-29 1 3.3284093715700001e-15 40 +2 -52.520288927800003 -118.377501115 23.499999994500001 5.3555698928500002e-15 3.2349796822300001e-15 -1 -1 0 -5.3555698928500002e-15 -1.732515979013245e-29 1 3.2349796822300001e-15 40 +1 -77.668300933899999 -54.491954931899997 23.499999994500001 -0.83981625644186431 0.54287075387791239 -2.7376902950495579e-15 +1 -14.3225999796 -106.441786845 23.499999994500001 -0.3275596318859868 0.94483050731796181 0 +1 -14.7270686351 -105.27511584 37.249999994 -5.3613679154700003e-15 -3.6173084730900004e-15 1 +1 -30.8054587727 -84.784850857500004 37.249999994 -5.42596270964e-15 -3.6173084730900004e-15 1 +1 -69 16 4.16049991609 0 0 1 +2 -65 16 0 0 0 1 1 0 -0 -0 1 0 4 +1 -61 16 4.16049991609 0 0 1 +2 -65 16 7 0 0 1 1 0 -0 -0 1 0 4 +2 -65 16 0 0 0 1 1 0 -0 -0 1 0 4 +2 -65 16 7 0 0 1 1 0 -0 -0 1 0 4 +2 -65 -18 7 0 0 1 1 0 -0 -0 1 0 4 +2 -65 -18 7 0 0 1 1 0 -0 -0 1 0 4 +1 53.499751589699997 -45.000000000900002 50 0 0 1 +2 53.499751589699997 -11.999751589700001 0 0 0 1 1 0 -0 -0 1 0 33.000248411299999 +1 86.5 -12 50 0 0 1 +1 86.5 -1.99851834808 50 0 0 1 +2 60.500078944800002 -1.9983999996099999 0 0 0 1 1 0 -0 -0 1 0 25.999921055400002 +1 72.706232063000002 20.958205170700001 50 0 0 1 +1 47.082969087899997 34.5823357644 50 0 0 1 +2 5.2998818036899999 -44.0004740595 0 0 0 1 1 0 -0 -0 1 0 89.000474059599995 +1 23 43.222173221299997 50 0 0 1 +7 0 0 5 6 2 23 43.222181183300002 0 19.507530172599999 43.930901568800003 0 15.9795434532 44.464822943599998 0 12.427648101899999 44.8215902775 0 8.8637394700400005 45 0 5.2999999999999998 45 0 + 253.667619105 6 271.48631645500001 6 +1 5.2999999999999998 45 25 0 0 1 +1 -21.928932188099999 47.928932188099999 3.5 0 0 1 +1 -24.464466094100001 50.464466094099997 0 -0.70710678118654757 0.70710678118654757 0 +1 -27 53 3.5 0 0 1 +1 -78.862687876999999 16.500914749 25 0 0 1 +7 0 0 5 6 2 -78.862687876999999 16.500914749 0 -81.842187261500001 11.3402706638 0 -84.147352448999996 5.7902787984600002 0 -85.7105434594 -0.0314708573361 0 -86.494623900099995 -5.98978312823 0 -86.499977001199994 -11.948795860200001 0 + 365.97542723800001 6 395.77050293600001 6 +1 -86.499977001199994 -11.948795860200001 25 0 0 1 +1 -86.5 -14 50 0 0 1 +2 -55.499766644799998 -13.999766644799999 0 0 0 1 1 0 -0 -0 1 0 31.000233355999999 +1 -77.4202418693 -35.9202418693 50 0 0 1 +1 -68.880362803899999 -44.460120934599999 0 0.70710678118654757 -0.70710678118654757 0 +1 -60.340483738499998 -53 3.5 0 0 1 +1 -24.340483738500001 -53 3.5 0 0 1 +1 -21.804949832599998 -50.464466094099997 0 0.70710678118654757 0.70710678118654757 0 +1 -19.269415926699999 -47.928932188099999 3.5 0 0 1 +2 -68.458904109599999 -1 1.7763568394e-15 0 -0 1 1 0 0 -0 1 0 9 +1 -60.958904109599999 -1 1.5 0.70710678118654757 -1.0467283057893303e-16 -0.70710678118654757 +2 -68.458904109599999 -1 3 0 -0 1 1 0 0 -0 1 0 6 +1 -75.958904109599999 -1 1.5 -0.70710678118654757 0 -0.70710678118654757 +2 -68.458904109599999 -1 1.7763568394e-15 -5.2590727014699996e-31 -1.3322676295499999e-15 1 0 1 1.3322676295499999e-15 -1 7.0064923216185508e-46 -5.2590727014699996e-31 9 +2 -68.458904109599999 -1 3 -5.2590727014699996e-31 -1.3322676295499999e-15 1 0 1 1.3322676295499999e-15 -1 7.0064923216185508e-46 -5.2590727014699996e-31 6 +2 -6.4589041095899997 -1 -1.7763568394e-15 2.22044604925e-16 1.2819751242600001e-16 1 1 0 -2.22044604925e-16 -2.8465565998998952e-32 1 -1.2819751242600001e-16 11 +1 3.0410958904099998 -1 1.5 0.70710678118654757 -1.1514011363692635e-15 -0.70710678118654757 +2 -6.4589041095899997 -1 3 2.22044604925e-16 1.2819751242600001e-16 1 1 0 -2.22044604925e-16 -2.8465565998998952e-32 1 -1.2819751242600001e-16 8 +1 -15.958904109600001 -1 1.5 -0.70710678118654757 2.0934566115786606e-16 -0.70710678118654757 +2 -6.4589041095899997 -1 -5.3290705181999996e-15 -1.19524379579e-31 7.4014868308300001e-16 1 0 1 -7.4014868308300001e-16 -1 -8.8465812141709465e-47 -1.19524379579e-31 11 +2 -6.4589041095899997 -1 3 -1.19524379579e-31 7.4014868308300001e-16 1 0 1 -7.4014868308300001e-16 -1 -8.8465812141709465e-47 -1.19524379579e-31 8 +1 -32.527296022500003 -17.917643211200001 2.75 0.15239061262502063 0.083251371105611274 -0.98480775301213319 +2 -40 -22 5.5 0 0 -1 -1 0 -0 0 1 0 8.0302016061000003 +1 -47.472703977499997 -26.082356788799999 2.75 -0.15239061262502063 -0.083251371105611274 -0.98480775301213319 +2 -40 -22 -1.3322676295499999e-14 0 0 -1 -1 0 -0 0 1 0 9 +2 -40 -22 5.5 0 0 -1 -1 0 -0 0 1 0 8.0302016061000003 +2 -40 -22 -1.3322676295499999e-14 0 0 -1 -1 0 -0 0 1 0 9 +1 -32.527296022500003 24.082356788799999 2.75 0.15239061262502063 0.083251371105611274 -0.98480775301213319 +2 -40 20 5.5 0 0 -1 -1 0 -0 0 1 0 8.0302016061000003 +1 -47.472703977499997 15.9176432112 2.75 -0.15239061262502063 -0.083251371105611274 -0.98480775301213319 +2 -40 20 -1.3322676295499999e-14 0 0 -1 -1 0 -0 0 1 0 9 +2 -40 20 5.5 0 0 -1 -1 0 -0 0 1 0 8.0302016061000003 +2 -40 20 -1.3322676295499999e-14 0 0 -1 -1 0 -0 0 1 0 9 +2 -40 -22 5.5 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 -22 5.5 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 20 5.5 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 20 5.5 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +1 -69 -18 4.16049991609 0 0 1 +2 -65 -18 0 0 0 1 1 0 -0 -0 1 0 4 +1 -61 -18 4.16049991609 0 0 1 +2 -65 -18 0 0 0 1 1 0 -0 -0 1 0 4 +1 1.5410958904100001 -1 25 0 0 1 +1 -14.458904109600001 -1 25 0 0 1 +1 -46.799999999999997 -22 50 0 0 1 +1 -33.200000000000003 -22 50 0 0 1 +1 -46.799999999999997 20 50 0 0 1 +1 -33.200000000000003 20 50 0 0 1 +1 23.087975191200002 -9.4149638324599998 4 -0.15239061262502063 -0.083251371105611274 -0.98480775301213319 +2 33 -4 -7.1054273576e-15 0 0 -1 -1 0 -0 0 1 0 12 +1 42.912024808799998 1.41496383246 4 0.15239061262502063 0.083251371105611274 -0.98480775301213319 +2 33 -4 -7.1054273576e-15 0 0 -1 -1 0 -0 0 1 0 12 +1 -62.458904109599999 -1 20.5 0 0 1 +1 -74.458904109599999 -1 20.5 0 0 1 +1 -12.1983481148 -45 26 0 0 1 +2 -12.1983481148 -55 -7.1054273576e-15 0 -0 1 1 0 0 -0 1 0 10 +1 -42.340483738499998 -53 0 1 0 0 +1 -86.5 -12.9743979301 0 0 1 0 +1 -57.789931182099998 53 3.5 0 0 1 +1 -68.326309529599996 34.750457374500002 0 0.50000000000018996 0.86602540378432902 0 +1 -42.394965591099997 53 0 1 0 0 +2 -14.8578643763 55 0 0 0 1 1 0 -0 -0 1 0 10 +1 -14.8578643763 45 26 0 0 1 +1 -4.7789321881299998 45 0 -1 0 0 +1 59.8946005755 27.7702704676 0 -0.8829475928588979 0.46947156278594571 0 +1 86.5 -6.9992591740399996 0 0 -1 0 +1 20.650701737399999 -45 0 1 0 0 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 11.300000000000001 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 11.300000000000001 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 15.300000000000001 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 15.300000000000001 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 12.199999999999999 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 12.199999999999999 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 9.3000000000000007 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 9.3000000000000007 +2 0 0 -8.881784197e-16 0 0 1 1 0 -0 -0 1 0 11.5 +1 5.2175188920100002 -9.55060426963 -3.5 0.083251371105611274 -0.15239061262502063 0.98480775301213319 +2 0 0 -7 0 0 1 1 0 -0 -0 1 0 10.265711135 +1 -5.2175188920100002 9.55060426963 -3.5 -0.083251371105611274 0.15239061262502063 0.98480775301213319 +2 0 0 -8.881784197e-16 0 0 1 1 0 -0 -0 1 0 11.5 +2 0 0 -7 0 0 1 1 0 -0 -0 1 0 10.265711135 +1 4.3148298474400004 -7.8982430570100002 5 0 0 1 +2 0 0 4 0 0 1 1 0 -0 -0 1 0 9 +1 -4.3148298474400004 7.8982430570100002 5 0 0 1 +2 0 0 5 0 0 1 1 0 -0 -0 1 0 9 +2 0 0 4 0 0 1 1 0 -0 -0 1 0 9 +2 0 0 5 0 0 1 1 0 -0 -0 1 0 9 +1 4.6631528902500001 -8.5358441100599993 6 0.28179926116401238 -0.51583008754802262 0.80901699437503549 +2 -4.4408920984999998e-15 -2.4424906541799999e-15 7 -2.23511578476e-15 -1.19377914327e-15 1 1 0 2.23511578476e-15 -2.6682346066400466e-30 1 1.19377914327e-15 10.453085056000001 +1 -4.6631528913300002 8.5358441094700002 6 -0.28179926122893828 0.51583008751288706 0.80901699437482277 +2 8.881784197e-16 1.3322676295499999e-15 7 -1.2746412216999999e-15 -6.9633967307099996e-16 1 1 0 1.2746412216999999e-15 -8.8758325160139799e-31 1 6.9633967307099996e-16 10.453085056000001 +1 7.33521074064 -13.427013196900001 0.75 0 0 1 +1 -7.33521074064 13.427013196900001 0.75 0 0 1 +2 0 0 1 0 0 1 1 0 -0 -0 1 0 15.300000000000001 +2 0 0 1 0 0 1 1 0 -0 -0 1 0 15.300000000000001 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 16 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 16 +2 -1.4022779760100001e-15 1.7763568394e-15 1.5 0 0 1 1 0 -0 -0 1 0 15.800000000000001 +2 -1.4022779760100001e-15 1.7763568394e-15 1.5 0 0 1 1 0 -0 -0 1 0 15.800000000000001 +2 7.5749235099499996 -13.865804477899999 1 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.5 +2 -7.5749235099499996 13.865804477899999 1 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.5 +2 3.8354043088299998 -7.0206604951199996 4 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 1 +2 -3.8354043088299998 7.0206604951199996 4 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 1 +2 -1.7763568394e-15 -4.4408920985e-16 3.1339745962199999 0 -0 1 1 0 0 -0 1 0 8.5 +2 1.7763568394e-15 2.91433543964e-16 3.1339745962199999 0 0 1 1 0 -0 -0 1 0 8.5 +2 4.3148298474400004 -7.8982430570100002 2.2679491924300001 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 1 +2 -4.3148298474400004 7.8982430570100002 2.2679491924300001 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 1 +1 5.5133936939500003 -10.0921994617 0.34999999999999998 0 0 1 +1 -5.5133936939500003 10.0921994617 0.34999999999999998 0 0 1 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 11.5 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 11.5 +2 5.6572213555299999 -10.3554742303 0.40000000000000002 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -5.6572213555299999 10.3554742303 0.40000000000000002 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.29999999999999999 +2 -1.7763568394e-15 2.6645352590999998e-15 0.69999999999999996 0 -0 1 1 0 0 -0 1 0 11.800000000000001 +2 0 1.3877787807800001e-15 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 11.800000000000001 +1 5.84899157097 -10.7065072551 0.34999999999999998 0 0 1 +1 -5.84899157097 10.7065072551 0.34999999999999998 0 0 1 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 12.199999999999999 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 12.199999999999999 +2 -1.23601678529e-15 -1.7763568394e-15 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 11.9 +2 -1.23601678529e-15 -1.7763568394e-15 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 11.9 +2 5.7051639093900004 -10.443232486499999 0.40000000000000002 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -5.7051639093900004 10.443232486499999 0.40000000000000002 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.29999999999999999 +1 7.6708086176699997 -14.041320990199999 4.25 0 0 1 +1 -7.6708086176699997 14.041320990199999 4.25 0 0 1 +2 0 0 5.7999999999999998 0 0 1 1 0 -0 -0 1 0 16 +2 0 0 5.7999999999999998 0 0 1 1 0 -0 -0 1 0 16 +2 0 3.5527136788e-15 7 0 0 1 1 0 -0 -0 1 0 14.800000000000001 +2 0 3.5527136788e-15 7 0 0 1 1 0 -0 -0 1 0 14.800000000000001 +1 -7.3831532944999996 13.5147714531 6.4000000000000004 -0.3390050494208432 0.62054458056371298 -0.70710678118667292 +1 7.3831532944999996 -13.5147714531 6.4000000000000004 0.3390050494208432 -0.62054458056371298 -0.70710678118667292 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 8.5999999999999996 +1 3.9328544021799998 -7.19904169447 -2.25 0.083251371105611274 -0.15239061262502063 0.98480775301213319 +2 0 0 -4.5 0 0 1 1 0 -0 -0 1 0 7.8065285868099998 +1 -3.9328544021799998 7.19904169447 -2.25 -0.083251371105611274 0.15239061262502063 0.98480775301213319 +2 0 0 0 0 0 1 1 0 -0 -0 1 0 8.5999999999999996 +2 0 0 -4.5 0 0 1 1 0 -0 -0 1 0 7.8065285868099998 +1 3.3559787702300001 -6.1430779332299998 4.5 0 0 1 +2 0 0 4 0 0 1 1 0 -0 -0 1 0 7 +1 -3.3559787702300001 6.1430779332299998 4.5 0 0 1 +2 0 0 4.4000000000000004 0 0 1 1 0 -0 -0 1 0 7 +2 0 0 4 0 0 1 1 0 -0 -0 1 0 7 +2 0 0 4.4000000000000004 0 0 1 1 0 -0 -0 1 0 7 +1 3.6346372044800002 -6.6531587756699997 5.2000000000000002 0.28179926116401238 -0.51583008754802262 0.80901699437503549 +2 8.881784197e-16 4.4408920985e-16 6 -1.6120923388500001e-15 -4.6295474197600002e-16 1 1 0 1.6120923388500001e-15 -7.4632579277378816e-31 1 4.6295474197600002e-16 8.1624680448099998 +1 -3.6346373534400001 6.6531586942900001 5.2000000000000002 -0.28179927271297639 0.51583008123895679 0.80901699437493213 +2 6.2172489379000002e-15 4.8849813083500001e-15 6 4.1604139758599998e-15 2.2728445137899998e-15 1 1 0 -4.1604139758599998e-15 -9.4559740801286408e-30 1 -2.2728445137899998e-15 8.1624680448099998 +1 5.4175085862300003 -9.9166829493600002 0.75 0 0 1 +1 -5.4175085862300003 9.9166829493600002 0.75 0 0 1 +2 0 0 1 0 0 1 1 0 -0 -0 1 0 11.300000000000001 +2 0 0 1 0 0 1 1 0 -0 -0 1 0 11.300000000000001 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 12 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 12 +2 -1.2570549911299999e-15 -3.5527136788e-15 1.5 0 0 1 1 0 -0 -0 1 0 11.800000000000001 +2 -1.2570549911299999e-15 -3.5527136788e-15 1.5 0 0 1 1 0 -0 -0 1 0 11.800000000000001 +2 5.6572213555299999 -10.3554742303 1 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.5 +2 -5.6572213555299999 10.3554742303 1 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.5 +2 2.87655323163 -5.2654953713400001 4 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 1 +2 -2.87655323163 5.2654953713400001 4 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 1 +2 -3.5527136788e-15 0 3.1339745962199999 0 -0 1 1 0 0 -0 1 0 6.5 +2 -3.1086244689500001e-15 -1.1102230246299999e-15 3.1339745962199999 0 0 1 1 0 -0 -0 1 0 6.5 +2 3.3559787702300001 -6.1430779332299998 2.2679491924300001 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 1 +2 -3.3559787702300001 6.1430779332299998 2.2679491924300001 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 1 +1 4.1230596320000004 -7.5472100322599998 0.34999999999999998 0 0 1 +1 -4.1230596320000004 7.5472100322599998 0.34999999999999998 0 0 1 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 8.5999999999999996 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 8.5999999999999996 +2 4.26688729358 -7.8104848008200003 0.40000000000000002 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -4.26688729358 7.8104848008200003 0.40000000000000002 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.29999999999999999 +2 8.881784197e-16 2.6645352590999998e-15 0.69999999999999996 0 -0 1 1 0 0 -0 1 0 8.9000000000000004 +2 -3.5527136788e-15 -3.3723024373e-15 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 8.9000000000000004 +1 4.45865750902 -8.1615178255800007 0.34999999999999998 0 0 1 +1 -4.45865750902 8.1615178255800007 0.34999999999999998 0 0 1 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 9.3000000000000007 +2 0 0 0.40000000000000002 0 0 1 1 0 -0 -0 1 0 9.3000000000000007 +2 0 1.7763568394e-15 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 9 +2 0 1.7763568394e-15 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 9 +2 4.3148298474400004 -7.8982430570100002 0.40000000000000002 -0.87758256189037243 -0.4794255386042035 0 0.4794255386042035 -0.87758256189037243 0 0 0 1 0.29999999999999999 +2 -4.3148298474400004 7.8982430570100002 0.40000000000000002 0.87758256189037243 0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 0 -0 1 0.29999999999999999 +1 5.75310646325 -10.5309907427 3.75 0 0 1 +1 -5.75310646325 10.5309907427 3.75 0 0 1 +2 0 0 4.7999999999999998 0 0 1 1 0 -0 -0 1 0 12 +2 0 0 4.7999999999999998 0 0 1 1 0 -0 -0 1 0 12 +2 -1.5006201728799999e-15 0 6 0 0 1 1 0 -0 -0 1 0 10.800000000000001 +2 -1.5006201728799999e-15 0 6 0 0 1 1 0 -0 -0 1 0 10.800000000000001 +1 -5.4654511400899999 10.004441205599999 5.4000000000000004 -0.3390050494208432 0.62054458056371298 -0.70710678118667292 +1 5.4654511400899999 -10.004441205599999 5.4000000000000004 0.3390050494208432 -0.62054458056371298 -0.70710678118667292 +Polygon3D 0 +PolygonOnTriangulations 0 +Surfaces 574 +2 50.5 5.5 -5 0 0 1 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 8 +1 50.5 5.5 9.5 0 0 1 1 0 -0 -0 1 0 +2 50.5 5.5 -5 0 0 1 0.87758256189037243 0.4794255386042035 -0 -0.4794255386042035 0.87758256189037243 0 8 +1 0 0 13 0 0 1 1 0 -0 -0 1 0 +1 -38 -32.5 2.22044604925e-16 0 -1 0 1 0 0 -0 0 1 +6 0 0 1 +7 0 0 5 9 3 71 -32.5 0 75.712388980399993 -32.5 0 80.4247779608 -31.574724587399999 0 84.8946105096 -29.723259324099999 0 92.867471954300001 -24.367471954300001 0 98.223259324099999 -16.3946105096 0 100.07472458700001 -11.9247779608 0 101 -7.2123889803800001 0 101 -2.5 0 + 207.10225695400001 6 230.77710716199999 3 254.45195737099999 6 +6 0 0 1 +7 0 0 5 9 3 71 -32.5 0 75.712388980399993 -32.5 0 80.4247779608 -31.574724587399999 0 84.8946105096 -29.723259324099999 0 92.867471954300001 -24.367471954300001 0 98.223259324099999 -16.3946105096 0 100.07472458700001 -11.9247779608 0 101 -7.2123889803800001 0 101 -2.5 0 + 207.10225695400001 6 230.77710716199999 3 254.45195737099999 6 +1 101 -2.5 -1.3322676295499999e-15 1 -3.3599508870400002e-15 -8.3557604617999994e-17 3.3599508870400002e-15 1 -1.6267009302e-31 8.3557604617999994e-17 -1.1807935473518668e-31 1 +6 0 0 1 +7 0 0 5 6 2 101 7.5 0 101 12.4776888283 0 99.654424864299997 17.455903910100002 0 96.956647293900005 21.945748933499999 0 93.192846020999994 25.470943655100001 0 88.797802672700001 27.807817643500002 0 + 107.808170647 6 132.87983823900001 6 +6 0 0 1 +7 0 0 5 6 2 101 7.5 0 101 12.4776888283 0 99.654424864299997 17.455903910100002 0 96.956647293900005 21.945748933499999 0 93.192846020999994 25.470943655100001 0 88.797802672700001 27.807817643500002 0 + 107.808170647 6 132.87983823900001 6 +1 88.797802672700001 27.807817643500002 4.4408920985e-16 0.46947156278713975 0.88294759285826285 6.8484107274020401e-13 -0.88294759285826285 0.46947156278713975 -2.6794007744629963e-24 -3.2151340868253059e-13 -6.0467877666517567e-13 1 +6 0 0 1 +7 0 0 5 6 2 63.171634448200003 41.433492985900003 0 55.7500134434 45.379638872299999 0 47.845323711900001 48.4193390577 0 39.609065293299999 50.472868920099998 0 31.202585726199999 51.5 0 22.797080048600002 51.5 0 + 95.599764641600004 6 137.70278531899999 6 +6 0 0 1 +7 0 0 5 6 2 63.171634448200003 41.433492985900003 0 55.7500134434 45.379638872299999 0 47.845323711900001 48.4193390577 0 39.609065293299999 50.472868920099998 0 31.202585726199999 51.5 0 22.797080048600002 51.5 0 + 95.599764641600004 6 137.70278531899999 6 +1 22.797080048600002 51.5 -1.3322676295499999e-15 0 1 -0 -1 0 0 0 0 1 +6 0 0 1 +7 0 0 5 9 3 -12 51.5 0 -20.4823001647 51.5 0 -28.9646003294 49.834504257299997 0 -37.0102989174 46.501866783399997 0 -51.361449517799997 36.861449517799997 0 -61.001866783399997 22.5102989174 0 -64.334504257299997 14.4646003294 0 -66 5.9823001646899998 0 -66 -2.5 0 + 166.58674222600001 6 209.301291515 3 252.01584080399999 6 +6 0 0 1 +7 0 0 5 9 3 -12 51.5 0 -20.4823001647 51.5 0 -28.9646003294 49.834504257299997 0 -37.0102989174 46.501866783399997 0 -51.361449517799997 36.861449517799997 0 -61.001866783399997 22.5102989174 0 -64.334504257299997 14.4646003294 0 -66 5.9823001646899998 0 -66 -2.5 0 + 166.58674222600001 6 209.301291515 3 252.01584080399999 6 +1 -66 -2.5 -6.4184768611100004e-16 -1 0 0 0 -1 0 0 0 1 +6 0 0 1 +7 0 0 5 6 2 -66 -4.5 0 -66 -13.296459430100001 0 -62.555579886700002 -22.101126014199998 0 -55.601126014199998 -29.055579886699999 0 -46.796459430100001 -32.5 0 -38 -32.5 0 + 98.517206313800003 6 143.29775463799999 6 +6 0 0 1 +7 0 0 5 6 2 -66 -4.5 0 -66 -13.296459430100001 0 -62.555579886700002 -22.101126014199998 0 -55.601126014199998 -29.055579886699999 0 -46.796459430100001 -32.5 0 -38 -32.5 0 + 98.517206313800003 6 143.29775463799999 6 +2 -22.5 -12.5 1.75 0 0 1 1 0 -0 -0 1 0 6 +1 0 0 8.5 0 0 1 1 0 -0 -0 1 0 +2 -22.5 -12.5 1.75 0 0 1 1 0 -0 -0 1 0 6 +2 -22.5 29.5 1.75 0 0 1 1 0 -0 -0 1 0 6 +1 0 0 8.5 0 0 1 1 0 -0 -0 1 0 +2 -22.5 29.5 1.75 0 0 1 1 0 -0 -0 1 0 6 +2 11.041095890399999 8.5 -2.25 0 0 1 1 0 -0 -0 1 0 9 +1 0 0 5 0 0 1 1 0 -0 -0 1 0 +2 11.041095890399999 8.5 -2.25 0 0 1 1 0 -0 -0 1 0 9 +2 0 0 25 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 3.5 +1 0 3.5 0 0 0 1 1 0 -0 -0 1 0 +2 0 0 25 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 3.5 +2 -49.958904109599999 8.5 -2.25 0 0 1 -1.07187543957e-15 -1 0 1 -1.07187543957e-15 0 6.4000000000000004 +1 0 0 6 0 0 1 1 0 -0 -0 1 0 +1 -49.958904109599999 2.1000000000000001 0 2.22044604925e-16 -1 0 -1 -2.22044604925e-16 0 0 -0 -1 +2 -51.958904109599999 8.5 -2.25 0 0 1 -3.0514748616210506e-06 0.99999999999534428 0 -0.99999999999534428 -3.0514748616210506e-06 0 6.4000000000000004 +1 -51.958923638999998 14.9 0 -0 1 0 1 0 0 0 0 -1 +2 28.235903341899999 -16.5 -2.5 0 0 -1 0 1 0 1 -0 0 8 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +2 50.5 5.5 -2.5 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +1 0 0 -4.5 0 0 1 1 0 -0 -0 1 0 +1 31.875016778500001 -8.5 0 -0 -1 -0 -1 0 0 0 0 -1 +2 2.4817933703700001 -16.5 -2.5 0 0 1 2.7755575615600002e-16 1 -0 -1 2.7755575615600002e-16 0 8 +2 -22.5 -12.5 -2.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 -47.7802294293 -13.5 -2.5 0 0 -1 0 1 0 1 -0 0 8 +1 -38.320556248099997 -5.5 0 -0 -1 -0 -1 0 0 0 0 -1 +2 -47.7802294293 30.5 -2.5 0 0 1 9.2981178312399991e-16 -1 0 1 9.2981178312399991e-16 -0 8 +1 -38.320556248099997 22.5 0 -0 -1 -0 -1 0 0 0 0 -1 +2 -22.5 29.5 -2.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +2 2.4817933703700001 33.5 -2.5 0 0 1 -0.98742266286065905 -0.15810276679794541 0 0.15810276679794541 -0.98742266286065905 0 8 +1 38.5463394728 25.5 0 -0 -1 -0 -1 0 0 0 0 -1 +2 36.511075809799998 33.5 -2.5 0 0 1 -2.9976021664900001e-15 -1 0 1 -2.9976021664900001e-15 0 8 +2 50.5 5.5 -2.5 0 0 1 1 0 -0 -0 1 0 23.300000000000001 +3 50.5 5.5 3.3999999999999999 0 -4.4408920984999998e-15 -1 0.87758256189037243 0.4794255386042035 -2.1290770862065139e-15 0.4794255386042035 -0.87758256189037243 3.8972494648803417e-15 0 +0.78539816339699997 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +3 4.1448326252699997e-15 -5.9458610874400002e-15 -6.2000000000000002 -7.4014868308300001e-16 7.7098821154500002e-16 1 -0.4794255386042035 0.87758256189037243 -1.0314519909091968e-15 -0.87758256189037243 -0.4794255386042035 -2.7991013890231131e-16 0 +0.78539816339699997 +3 -8.1909787594599993e-15 8.5363814782300003e-15 -6.2000000000000002 1.3569392523199999e-15 -1.2335811384699999e-15 1 -0.52029602321325741 -0.85398597659942255 -3.4745089652686364e-16 0.85398597659942255 -0.52029602321325741 -1.8006344532354091e-15 0 +0.78539816339699997 +3 50.5 5.5 3.3999999999999999 0 -6.6613381477499997e-15 -1 -0.85398597659942255 0.52029602321325741 -3.4658677475530908e-15 0.52029602321325741 0.85398597659942255 -5.6886893635652717e-15 0 +0.78539816339699997 +1 0 0 -5 0 0 1 1 0 -0 -0 1 0 +1 0 8 13 0 0 1 1 0 -0 -0 1 0 +3 -22.5 29.5 1.3999999999999999 0 0 -1 1 0 0 0 -1 0 0 +0.78539816339699997 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 +3 3.5527136788e-15 -4.0430621813399996e-15 -4.2000000000000002 -7.4014868308300001e-16 7.7098821154500002e-16 1 -0.4794255386042035 0.87758256189037243 -1.0314519909091968e-15 -0.87758256189037243 -0.4794255386042035 -2.7991013890231131e-16 0 +0.78539816339699997 +3 1.7763568394e-15 -8.881784197e-16 -4.2000000000000002 -3.7007434154199999e-16 3.7007434154199999e-16 1 -0.52029602321325741 -0.85398597659942255 1.2349008977856575e-16 0.85398597659942255 -0.52029602321325741 5.0858650617370047e-16 0 +0.78539816339699997 +3 -22.5 29.5 1.3999999999999999 -8.8817841969999996e-15 0 -1 -0.50000000000018996 0.86602540378432902 4.4408920985016872e-15 0.86602540378432902 0.50000000000018996 -7.6918507455321975e-15 0 +0.78539816339699997 +1 0 0 -5 0 0 1 1 0 -0 -0 1 0 +1 0 6 12 0 0 1 1 0 -0 -0 1 0 +3 -22.5 -12.5 1.3999999999999999 8.8817841969999996e-15 1.7763568393999999e-14 -1 1 -8.3266725922100102e-16 8.8817841969999854e-15 -8.3266725922084325e-16 -1 -1.7763568394000006e-14 0 +0.78539816339699997 +3 -22.5 -12.5 1.3999999999999999 -8.8817841969999996e-15 -4.4408920984999998e-15 -1 -0.50000000000018996 0.86602540378432902 5.9496672573558842e-16 0.86602540378432902 0.50000000000018996 -9.9122967947830407e-15 0 +0.78539816339699997 +1 0 0 -5 0 0 1 1 0 -0 -0 1 0 +2 -22.5 -12.5 -2.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +3 -22.5 -12.5 -22.100000000000001 0 2.6645352590999999e-14 1 1 0 -0 -0 1 -2.6645352590999999e-14 0 +0.78539816339699997 +3 -22.5 -12.5 -22.100000000000001 1.7763568393999999e-14 3.5527136787999998e-14 1 -0.50000000000018996 0.86602540378432902 -2.1885618785125417e-14 -0.86602540378432902 -0.50000000000018996 3.3147269885071147e-14 0 +0.78539816339699997 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 17 +1 0 0 12 0 0 1 1 0 -0 -0 1 0 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 17 +3 1.22568621919e-13 1.3733458814599999e-13 4.2000000000000002 -1.55431223448e-14 -1.71390679427e-14 1 -0.4794255386042035 0.87758256189037243 7.5891773518210512e-15 -0.87758256189037243 -0.4794255386042035 -2.1857280006728061e-14 0 +0.78539816339699997 +3 -1.5720758028699999e-13 1.0524914273400001e-13 4.2000000000000002 1.9984014443300001e-14 -1.3322676295499999e-14 1 -0.52029602321325741 -0.85398597659942255 -9.797754844452552e-16 0.85398597659942255 -0.52029602321325741 -2.3997803585844695e-14 0 +0.78539816339699997 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 8 +2 -22.5 29.5 -2.5 0 0 1 1 0 -0 -0 1 0 17.300000000000001 +3 -22.5 29.5 -22.100000000000001 1.7763568393999999e-14 3.5527136787999998e-14 1 -0.50000000000018996 0.86602540378432902 -2.1885618785125417e-14 -0.86602540378432902 -0.50000000000018996 3.3147269885071147e-14 0 +0.78539816339699997 +3 -22.5 29.5 -22.100000000000001 0 1.7763568393999999e-14 1 1 2.05359049863e-16 -3.647909527568257e-30 -2.05359049863e-16 1 -1.7763568393999999e-14 0 +0.78539816339699997 +3 50.5 5.5 -28.100000000000001 7.1054273575999997e-14 -8.8817841969999996e-15 1 -0.50000000000018996 0.86602540378432902 4.3218987533545698e-14 -0.86602540378432902 -0.50000000000018996 5.7093913865755894e-14 0 +0.78539816339699997 +3 50.5 5.5 -28.100000000000001 3.5527136787999998e-14 -7.9936057773e-14 1 1 3.8119244823699724e-16 -3.5527136787999967e-14 -3.8119244823415734e-16 1 7.9936057773000012e-14 0 +0.78539816339699997 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 23 +1 0 0 12 0 0 1 1 0 -0 -0 1 0 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 23 +3 -2.63788990651e-13 1.07969189145e-14 3.2000000000000002 2.6645352590999999e-14 -1.04083408559e-15 1 -0.4794255386042035 0.87758256189037243 1.3687880360573978e-14 -0.87758256189037243 -0.4794255386042035 2.2884494347200452e-14 0 +0.78539816339699997 +3 -3.0686564400600002e-13 -8.7041485130600004e-14 3.2000000000000002 3.1086244689499997e-14 8.8817841969999996e-15 1 -0.52029602321325741 -0.85398597659942255 2.3758968640001452e-14 0.85398597659942255 -0.52029602321325741 -2.1926060033233814e-14 0 +0.78539816339699997 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 10 +2 0 0 6 0 0 1 1 0 -0 -0 1 0 10 +1 60.603823630699999 1.7 -4.5 -1.5742343614589928e-16 0.70710678118654757 -0.70710678118654757 -1 -2.2263035843295277e-16 -4.7134439086955444e-29 -1.5742343614596591e-16 0.70710678118654757 0.70710678118654757 +3 -51.958904109599999 8.5 2.2999999999999998 -0 8.8817841969999996e-15 -1 0.99999999999883615 1.5257374305097498e-06 1.3551270599072881e-20 1.5257374305097498e-06 -0.99999999999883615 -8.8817841969896624e-15 0 +0.78539816339699997 +1 -83.017303938500007 15.300000000000001 -4.5 0 -0.70710678118654757 -0.70710678118654757 1 0 0 0 -0.70710678118654757 0.70710678118654757 +3 -49.958904109599999 8.5 2.2999999999999998 1.7763568393999999e-14 -4.4408920984999998e-15 -1 -0.9999999999988346 -1.5266930903797474e-06 -1.7763561614100015e-14 -1.5266930903797474e-06 0.9999999999988346 -4.4409192180119519e-15 0 +0.78539816339699997 +3 11.041095890399999 8.5 4.9000000000000004 4.4408920984999998e-15 -0 -1 -0.50000000000018996 0.86602540378432902 -2.2204460492508436e-15 0.86602540378432902 0.50000000000018996 3.8459253727660988e-15 0 +0.78539816339699997 +3 11.041095890399999 8.5 4.9000000000000004 -0 -1.7763568393999999e-14 -1 1 3.7794838600300001e-16 -6.7137120041662023e-30 3.7794838600300001e-16 -1 1.7763568393999999e-14 0 +0.78539816339699997 +2 -56.388543820000002 -2.5 -2.25 0 0 1 -0.85183541999972945 -0.5238095238098337 0 0.5238095238098337 -0.85183541999972945 0 3 +2 -38.5 8.5 -2.25 0 0 1 -0.81223286206743084 0.58333333333330939 0 -0.58333333333330939 -0.81223286206743084 0 24 +2 -56.388543820000002 19.5 -2.25 0 0 -1 -0.85183541999972945 0.5238095238098337 0 0.5238095238098337 0.85183541999972945 0 3 +1 -101.601209582 -31.699999999999999 0 0 -0.70710678118654757 -0.70710678118654757 1 0 0 0 -0.70710678118654757 0.70710678118654757 +9 0 0 0 0 5 1 15 2 5 2 71 -31.699999999999999 0 71 -32.5 0.80000000000000004 +73.999932498999996 -31.699999999999999 0 74.082122430499993 -32.5 0.80000000000000004 +76.999844077000006 -31.3147433629 0 77.164264776300001 -32.104188388499999 0.80000000000000004 +79.934138087199997 -30.543852039600001 0 80.178925382000003 -31.312172124 0.80000000000000004 +85.538504313100006 -28.266498915 0 85.936790907800003 -28.972448936599999 0.80000000000000004 +90.385589047600007 -24.647042713800001 0 90.916691440899996 -25.253821061099998 0.80000000000000004 +92.562629609400005 -22.5336263714 0 93.153392034399999 -23.082489565700001 0.80000000000000004 +96.364010810600007 -17.7458581679 0 97.058936088099998 -18.163522475699999 0.80000000000000004 +98.8181968098 -12.1443684266 0 99.580337487400001 -12.4086062898 0.80000000000000004 +99.678127191599998 -9.1664285505599992 0 100.46382781 -9.3491130076500006 0.80000000000000004 +100.153771088 -6.00175461166 0 100.952504486 -6.0976976074499998 0.80000000000000004 +100.19845569100001 -2.8289666115399998 0 100.99841338100001 -2.8379795540699999 0.80000000000000004 +100.19948233300001 -2.71933652926 0 100.99946796099999 -2.7253074917300002 0.80000000000000004 +100.199990855 -2.60969449139 0 100.999990064 -2.61263924451 0.80000000000000004 +100.199991877 -2.50002261243 0 100.999991178 -2.5000008830899998 0.80000000000000004 + +243.59478752199999 6 +265.100062267 3 +286.60708227999999 3 +308.56748184100002 3 +309.35350848100001 6 + +0 2 +1.1313708498999999 2 + +1 100.2 -51.533201642400002 0 0.70710678118654757 -2.4048235389284615e-15 -0.70710678118654757 3.4009340638683458e-15 1 1.6536496725695456e-27 0.70710678118654757 -2.4048235389308001e-15 0.70710678118654757 +9 0 0 0 0 5 1 12 2 4 2 100.2 7.5 0 101 7.5 0.80000000000000004 +100.2 9.6809699653300001 0 101 9.7595016852600001 0.80000000000000004 +99.932382303899999 11.8619313793 0 100.72274600999999 12.019119654800001 0.80000000000000004 +99.396510492800004 13.9991336012 0 100.167540292 14.2333760225 0.80000000000000004 +97.692003087800003 18.4059546282 0 98.401615176799993 18.798978831199999 0.80000000000000004 +94.895791927999994 22.228794922799999 0 95.504677215300006 22.759522033700001 0.80000000000000004 +93.118707907000001 24.048197016300001 0 93.663560797499997 24.644515729199998 0.80000000000000004 +91.017193152399997 25.661658038100001 0 91.486228092999994 26.316161688499999 0.80000000000000004 +88.725037743800002 26.937935644900001 0 89.111517903700005 27.638405945900001 0.80000000000000004 +88.624460949500005 26.993092693200001 0 89.007271296200003 27.695574940699998 0.80000000000000004 +88.523529253199996 27.047590689700002 0 88.902676135500002 27.752050292 0.80000000000000004 +88.422255048899999 27.101440138200001 0 88.7978013237 27.8078143111 0.80000000000000004 + +62.094959105999997 6 +77.796852188800003 3 +95.859399766099997 3 +96.6845153915 6 + +0 2 +1.1313708498999999 2 + +1 135.551787093 2.0422271188800001 0 0.3319665256210112 0.62433823034302105 -0.70710678118602388 -0.88294759285836333 0.46947156278695085 2.140232435721145e-13 0.33196652562078671 0.62433823034195413 0.70710678118707126 +9 0 0 0 0 5 1 9 2 3 2 62.796057198 40.727134911599997 0 63.171634448200003 41.433492985900003 0.80000000000000004 +55.583984463199997 44.5618620065 0 55.8918290863 45.304234157400003 0.80000000000000004 +47.911829203899998 47.532368133200002 0 48.147679109199998 48.302606713000003 0.800000000002 +39.920285127100001 49.564612909099999 0 40.081031967500003 50.353951053199999 0.80000000000000004 +31.602084407900001 50.640506765600001 0 31.684773302899998 51.439948055099997 0.80000000000000004 +23.274783774399999 50.698883892399998 0 23.279270083299998 51.498873410500003 0.80000000000000004 +23.115519849199998 50.699624028199999 0 23.118516362800001 51.499620425700002 0.80000000000000004 +22.956266601100001 50.699990847400002 0 22.957786219399999 51.499990606600001 0.80000000000000004 +22.797018728600001 50.699991800799999 0 22.797080812699999 51.499991602800002 0.80000000000000004 + +120.58639119999999 6 +178.61598027900001 3 +179.74754108900001 6 + +0 2 +1.1313708498999999 2 + +1 135.551787093 50.700000000000003 0 0 0.70710678118654757 -0.70710678118654757 -1 0 0 0 0.70710678118654757 0.70710678118654757 +9 0 0 0 0 5 1 15 2 5 2 -12 50.700000000000003 0 -12 51.5 0.80000000000000004 +-17.395146434200001 50.700000000000003 0 -17.476276455800001 51.5 0.80000000000000004 +-22.790272716 50.016080707500002 0 -22.952572320800002 50.805796207900002 0.80000000000100002 +-28.0703760954 48.647586647799997 0 -28.312053104499999 49.416718485200001 0.80000000000000004 +-38.167235070799997 44.603325626500002 0 -38.560700314800002 45.311663715900004 0.80000000000000004 +-46.935695196499999 38.167852959100003 0 -47.4610327408 38.7794106335 0.80000000000000004 +-50.887142559099999 34.407592682999997 0 -51.471914774799998 34.962593621099998 0.80000000000000004 +-58.071200711000003 25.572774405099999 0 -58.764022512399997 25.9948903837 0.80000000000000004 +-62.709492242700001 15.153781134600001 0 -63.472039624099999 15.419258406499999 0.80000000000000004 +-64.358373071900004 9.4059114346899992 0 -65.145716843200006 9.5849943279899996 0.80000000000000004 +-65.191238028499995 3.4851502435200001 0 -65.991106268799996 3.5751530049900002 0.80000000000000004 +-65.199969163700004 -2.4372544982000002 0 -65.999968699999997 -2.4363109550600002 0.80000000000000004 +-65.199989732399999 -2.4581681825900001 0 -65.999989579200005 -2.4575390067599998 0.80000000000000004 +-65.200000056600004 -2.4790835333599999 0 -66.000000061999998 -2.47876850875 0.80000000000000004 +-65.2000001567 -2.5000012219399999 0 -66.0000001704 -2.5000000367799999 0.80000000000000004 + +206.34732287700001 6 +244.784677386 3 +283.22234807799998 3 +325.26716929499997 3 +325.41616118000002 6 + +0 2 +1.1313708498999999 2 + +1 -65.200000000000003 69.643739457099997 0 -0.70710678118654757 -0 -0.70710678118654757 0 -1 0 -0.70710678118654757 0 0.70710678118654757 +9 0 0 0 0 5 1 15 2 5 2 -65.200000000000003 -4.5 0 -66 -4.5 0.80000000000000004 +-65.200000000000003 -7.3961324085399998 0 -66 -7.4810604412200004 0.80000000000000004 +-64.815683064799998 -10.292565314899999 0 -65.604413127200004 -10.462771049000001 0.79999999999899996 +-64.044701936199999 -13.1202251169 0 -64.810688052800003 -13.373814243 0.80000000000000004 +-61.767762986000001 -18.502156188099999 0 -62.466683949100002 -18.914202451400001 0.80000000000000004 +-58.162061913499997 -23.101311403499999 0 -58.755023319300001 -23.648471878900001 0.80000000000000004 +-56.061385811000001 -25.147230317799998 0 -56.592692647299998 -25.754441267499999 0.80000000000000004 +-51.7602007208 -28.339419764199999 0 -52.165120637400001 -29.040458938499999 0.80000000000000004 +-46.831052239900004 -30.3981516644 0 -47.090835347599999 -31.159826493400001 0.80000000000000004 +-44.496038364599997 -31.080147596500002 0 -44.686998731400003 -31.861929247500001 0.80000000000000004 +-41.768787502400002 -31.555521804400001 0 -41.8794257355 -32.351280338999999 0.80000000000000004 +-39.019917637299997 -31.684083704100001 0 -39.049840129400003 -32.483616768300003 0.80000000000000004 +-38.678137464199999 -31.6947756669 0 -38.698328009699999 -32.494625999199997 0.80000000000000004 +-38.338923938100002 -31.700003949900001 0 -38.348825505599997 -32.500004460200003 0.80000000000000004 +-38.000003569900002 -31.7000003729 0 -37.999999836699999 -32.500000422600003 0.80000000000000004 + +103.76581805399999 6 +124.547002021 3 +145.33505857899999 3 +162.64698145599999 3 +165.07828899200001 6 + +0 2 +1.1313708498999999 2 + +1 -38 -32.5 1.7347234759799999e-18 2.4651903288199999e-32 -1 0 1 2.4651903288199999e-32 0 -0 0 1 +1 0 0 1 0 0 1 1 0 -0 -0 1 0 +1 101 -2.5 1.38777878078e-17 1 -3.8229538743799999e-15 -2.4664133657399999e-14 3.8229538743799999e-15 1 -5.9435746756900001e-29 2.4664133657399999e-14 -3.4854098566883487e-29 1 +1 88.797802672700001 27.807817643500002 -1.1587952819499999e-15 0.46947156278672519 0.88294759285848323 1.2464142782092703e-11 -0.88294759285848323 0.46947156278672519 -5.0297266445912371e-23 -5.8515605907503522e-12 -1.1005184866469576e-11 1 +1 22.797080048600002 51.5 -2.0816681711700001e-17 0 1 -0 -1 0 0 0 0 1 +1 -66 -2.5 0 -1 -7.8886090522099998e-31 0 7.8886090522099998e-31 -1 0 0 0 1 +3 -9.9475983006400003e-14 -2.00728322852e-13 -11.199999999999999 8.8817841969999996e-15 1.7763568393999999e-14 1 1 -1.55820775386001e-16 -8.8817841969999965e-15 1.5582077538584323e-16 1 -1.7763568393999999e-14 0 +0.78539816339699997 +3 1.4921397451e-13 9.7168427782799995e-14 -11.199999999999999 -1.3322676295499999e-14 -8.8817841969999996e-15 1 -0.50000000000018996 0.86602540378432902 1.0305125977796671e-15 -0.86602540378432902 -0.50000000000018996 -1.5978668216799984e-14 0 +0.78539816339699997 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +1 0 8.8000000000000007 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 11.4 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 11.4 +3 -9.9475983006400003e-14 -2.00728322852e-13 14.199999999999999 8.8817841969999996e-15 1.7763568393999999e-14 -1 1 -1.55820775386001e-16 8.8817841969999965e-15 -1.5582077538584323e-16 -1 -1.7763568393999999e-14 0 +0.78539816339699997 +3 1.4921397451e-13 9.7168427782799995e-14 14.199999999999999 -1.3322676295499999e-14 -8.8817841969999996e-15 -1 -0.50000000000018996 0.86602540378432902 -1.0305125977796671e-15 0.86602540378432902 0.50000000000018996 -1.5978668216799984e-14 0 +0.78539816339699997 +1 0 0 3 0 0 1 1 0 -0 -0 1 0 +1 0 0 4.5999999999999996 0 0 1 1 0 -0 -0 1 0 +3 -3.0686564400600002e-13 -8.7041485130600004e-14 30.199999999999999 3.1086244689499997e-14 8.8817841969999996e-15 -1 -0.52029602321325741 -0.85398597659942255 -2.3758968640001452e-14 -0.85398597659942255 0.52029602321325741 -2.1926060033233814e-14 0 +0.78539816339699997 +1 0 10 20.399999999999999 0 0 1 1 0 -0 -0 1 0 +3 -2.63788990651e-13 1.07969189145e-14 30.199999999999999 2.6645352590999999e-14 -1.04083408559e-15 -1 -0.4794255386042035 0.87758256189037243 -1.3687880360573978e-14 0.87758256189037243 0.4794255386042035 2.2884494347200452e-14 0 +0.78539816339699997 +3 -8.881784197e-16 -6.5019172940700005e-16 -5.2000000000000002 -0 -0 1 -0.50000000000018996 0.86602540378432902 0 -0.86602540378432902 -0.50000000000018996 -0 0 +0.78539816339699997 +3 4.4408920985e-16 1.7763568393999999e-14 -5.2000000000000002 -0 -2.2204460492499999e-15 1 1 5.4157220713400002e-17 1.2025318677142929e-31 -5.4157220713400002e-17 1 2.2204460492499999e-15 0 +0.78539816339699997 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 8 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 8 +5 0 3.6082248300300001e-16 2.7999999999999998 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 9.0999999999999996 0.29999999999999999 +5 8.881784197e-16 0 2.7999999999999998 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9.0999999999999996 0.29999999999999999 +3 -8.881784197e-16 -6.5019172940700005e-16 8.1999999999999993 -0 -0 -1 -0.50000000000018996 0.86602540378432902 0 0.86602540378432902 0.50000000000018996 -0 0 +0.78539816339699997 +3 4.4408920985e-16 1.7763568393999999e-14 8.1999999999999993 -0 -2.2204460492499999e-15 -1 1 5.4157220713400002e-17 -1.2025318677142929e-31 5.4157220713400002e-17 -1 2.2204460492499999e-15 0 +0.78539816339699997 +5 6.9388939039100005e-17 1.3322676295499999e-15 22.875500200200001 0 0 -1 0.90369349581649183 -0.42817994537223303 0 -0.42817994537223303 -0.90369349581649183 -0 7.5 0.5 +5 -1.2212453270899999e-15 0 22.875500200200001 -0 0 -1 -0.4794255386042035 0.87758256189037243 0 0.87758256189037243 0.4794255386042035 0 7.5 0.5 +3 2.1760371282699999e-14 2.2692958623300001e-13 -9.1999999999999993 -2.2204460492499999e-15 -2.4424906541799999e-14 1 1 2.8346119777700043e-16 2.220446049250007e-15 -2.8346119777705466e-16 1 2.4424906541799999e-14 0 +0.78539816339699997 +3 4.3520742565300002e-14 8.1694006277899997e-14 -9.1999999999999993 -4.4408920984999998e-15 -8.8817841969999996e-15 1 -0.50000000000018996 0.86602540378432902 5.4714046962813543e-15 -0.86602540378432902 -0.50000000000018996 -8.2868174712677867e-15 0 +0.78539816339699997 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +1 0 6.5999999999999996 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 9.4000000000000004 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 9.4000000000000004 +3 2.1760371282699999e-14 2.2692958623300001e-13 12.199999999999999 -2.2204460492499999e-15 -2.4424906541799999e-14 -1 1 2.8346119777700043e-16 -2.220446049250007e-15 2.8346119777705466e-16 -1 2.4424906541799999e-14 0 +0.78539816339699997 +3 4.3520742565300002e-14 8.1694006277899997e-14 12.199999999999999 -4.4408920984999998e-15 -8.8817841969999996e-15 -1 -0.50000000000018996 0.86602540378432902 -5.4714046962813543e-15 0.86602540378432902 0.50000000000018996 -8.2868174712677867e-15 0 +0.78539816339699997 +1 0 0 3 0 0 1 1 0 -0 -0 1 0 +1 0 0 4.5999999999999996 0 0 -1 1 0 0 0 -1 0 +3 -1.5720758028699999e-13 1.0524914273400001e-13 27.199999999999999 1.9984014443300001e-14 -1.3322676295499999e-14 -1 -0.52029602321325741 -0.85398597659942255 9.797754844452552e-16 -0.85398597659942255 0.52029602321325741 -2.3997803585844695e-14 0 +0.78539816339699997 +1 0 8 19.399999999999999 0 0 1 1 0 -0 -0 1 0 +3 1.22568621919e-13 1.3733458814599999e-13 27.199999999999999 -1.55431223448e-14 -1.71390679427e-14 -1 -0.4794255386042035 0.87758256189037243 -7.5891773518210512e-15 0.87758256189037243 0.4794255386042035 -2.1857280006728061e-14 0 +0.78539816339699997 +3 8.1268325402600006e-14 -2.6559919212999999e-16 -3.2000000000000002 -1.3322676295499999e-14 5.9164567891600002e-30 1 -0.50000000000018996 0.86602540378432902 -6.6613381477525351e-15 -0.86602540378432902 -0.50000000000018996 -1.1537776118298293e-14 0 +0.78539816339699997 +3 6.4392935428299998e-15 3.99680288865e-14 -3.2000000000000002 -1.1102230246299999e-15 -6.6613381477499997e-15 1 1 2.1488187573399963e-16 1.1102230246300013e-15 -2.1488187573400703e-16 1 6.6613381477499997e-15 0 +0.78539816339699997 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 6 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 +2 0 0 1.5 0 0 1 1 0 -0 -0 1 0 6 +5 -8.881784197e-16 -9.7144514654699994e-16 2.7999999999999998 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6.9000000000000004 0.29999999999999999 +5 -1.7763568394e-15 -4.4408920985e-16 2.7999999999999998 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 6.9000000000000004 0.29999999999999999 +3 6.4392935428299998e-15 3.99680288865e-14 6.2000000000000002 -1.1102230246299999e-15 -6.6613381477499997e-15 -1 1 2.1488187573399963e-16 -1.1102230246300013e-15 2.1488187573400703e-16 -1 6.6613381477499997e-15 0 +0.78539816339699997 +3 8.1268325402600006e-14 -2.6559919212999999e-16 6.2000000000000002 -1.3322676295499999e-14 5.9164567891600002e-30 -1 -0.50000000000018996 0.86602540378432902 6.6613381477525351e-15 0.86602540378432902 0.50000000000018996 -1.1537776118298293e-14 0 +0.78539816339699997 +5 -2.7755575615600002e-16 0 21.9255437353 0 0 -1 0.90369349581649183 -0.42817994537223303 0 -0.42817994537223303 -0.90369349581649183 -0 5.5999999999999996 0.40000000000000002 +5 -3.9968028886500003e-15 0 21.9255437353 -0 0 -1 -0.4794255386042035 0.87758256189037243 0 0.87758256189037243 0.4794255386042035 0 5.5999999999999996 0.40000000000000002 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +3 -8.1909787594599993e-15 8.5363814782300003e-15 64.200000000000003 1.3569392523199999e-15 -1.2335811384699999e-15 -1 -0.52029602321325741 -0.85398597659942255 3.4745089652686364e-16 -0.85398597659942255 0.52029602321325741 -1.8006344532354091e-15 0 +0.78539816339699997 +1 0 8 58 0 0 1 1 0 -0 -0 1 0 +3 4.1448326252699997e-15 -5.9458610874400002e-15 64.200000000000003 -7.4014868308300001e-16 7.7098821154500002e-16 -1 -0.4794255386042035 0.87758256189037243 1.0314519909091968e-15 0.87758256189037243 0.4794255386042035 -2.7991013890231131e-16 0 +0.78539816339699997 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 10 +2 0 0 29 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 10 +2 0 0 24.900000000399999 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 7.7000000000000002 +2 0 0 24.900000000399999 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 7.7000000000000002 +5 -8.881784197e-16 1.09634523682e-15 23.5 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 0.29999999999999999 +5 -8.881784197e-16 -1.56819002228e-15 26.300000000000001 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 0.29999999999999999 +5 -8.881784197e-16 -4.4408920985e-16 23.5 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8 0.29999999999999999 +5 -2.6645352590999998e-15 1.3322676295499999e-15 26.300000000000001 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8 0.29999999999999999 +5 7.7715611723799997e-16 8.881784197e-16 26.9244997998 -0 0 -1 -0.4794255386042035 0.87758256189037243 0 0.87758256189037243 0.4794255386042035 0 7.5 0.5 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8 +1 0 -8 -7 0 0 1 1 0 -0 -0 1 0 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8 +5 -4.4408920985e-16 2.2204460492499999e-15 2.2679491924300001 0 -0 1 0.12796667928004415 0.99177846770034206 0 -0.99177846770034206 0.12796667928004415 0 9 1 +5 6.9388939039100002e-16 0 26.9244997998 0 0 -1 0.90369349581649183 -0.42817994537223303 0 -0.42817994537223303 -0.90369349581649183 -0 7.5 0.5 +5 0 8.881784197e-16 2.2679491924300001 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9 1 +2 0 0 23.900000000399999 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 5.7000000000000002 +2 0 0 23.900000000399999 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 5.7000000000000002 +5 8.881784197e-16 1.4294121442000001e-15 25.300000000000001 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 0.29999999999999999 +5 -4.4408920985e-16 -3.1918911957999998e-16 22.5 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 0.29999999999999999 +5 0 8.881784197e-16 25.300000000000001 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 6 0.29999999999999999 +5 0 1.7763568394e-15 22.5 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 6 0.29999999999999999 +5 1.1102230246299999e-16 -8.881784197e-16 25.874456264700001 -0 0 -1 -0.4794255386042035 0.87758256189037243 0 0.87758256189037243 0.4794255386042035 0 5.5999999999999996 0.40000000000000002 +5 4.7184478546599997e-16 1.3322676295499999e-15 25.874456264700001 0 0 -1 0.90369349581649183 -0.42817994537223303 0 -0.42817994537223303 -0.90369349581649183 -0 5.5999999999999996 0.40000000000000002 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +3 3.5527136788e-15 -4.0430621813399996e-15 60.200000000000003 -7.4014868308300001e-16 7.7098821154500002e-16 -1 -0.4794255386042035 0.87758256189037243 1.0314519909091968e-15 0.87758256189037243 0.4794255386042035 -2.7991013890231131e-16 0 +0.78539816339699997 +1 0 6 56 0 0 1 1 0 -0 -0 1 0 +3 1.7763568394e-15 -8.881784197e-16 60.200000000000003 -3.7007434154199999e-16 3.7007434154199999e-16 -1 -0.52029602321325741 -0.85398597659942255 -1.2349008977856575e-16 -0.85398597659942255 0.52029602321325741 5.0858650617370047e-16 0 +0.78539816339699997 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 6 +1 0 -6 -4.5 0 0 1 1 0 -0 -0 1 0 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 6 +5 0 8.881784197e-16 2.2679491924300001 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 7 1 +5 0 -8.881784197e-16 2.2679491924300001 0 -0 1 0.12796667928004415 0.99177846770034206 0 -0.99177846770034206 0.12796667928004415 0 7 1 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +2 0 0 28 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +2 0 0 1.4100000000099999 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 21.399999999999999 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 21.399999999999999 +2 0 0 1.4100000000099999 0 0 1 1 0 -0 -0 1 0 21.399999999999999 +1 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 +2 0 0 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 11.5 +2 0 0 3.1000000000000001 0 0 1 1 0 -0 -0 1 0 11.5 +1 0 21.399999999999999 0 0 0 1 1 0 -0 -0 1 0 +1 33 4.7999999999999998 20.5 0 0 1 1 0 -0 -0 1 0 +5 -4.4408920984999998e-15 2.6645352590999998e-15 0.59999999999999998 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9.4000000000000004 0.59999999999999998 +5 33 -4 19.899999999999999 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9.4000000000000004 0.59999999999999998 +5 -4.4408920984999998e-15 4.8572257327400001e-16 0.59999999999999998 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 9.4000000000000004 0.59999999999999998 +5 33 -4 19.899999999999999 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 9.4000000000000004 0.59999999999999998 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8.8000000000000007 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8.8000000000000007 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +2 0 0 1.4100000000099999 0 0 1 1 0 -0 -0 1 0 15.4 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 15.4 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 15.4 +2 0 0 1.4100000000099999 0 0 1 1 0 -0 -0 1 0 15.4 +1 0 0 1.6000000000000001 0 0 1 1 0 -0 -0 1 0 +2 0 0 3.1000000000000001 0 0 -1 1 0 0 0 -1 0 9.5 +2 0 0 3.1000000000000001 0 0 -1 1 0 0 0 -1 0 9.5 +1 0 15.4 0 0 0 1 1 0 -0 -0 1 0 +1 33 4.7999999999999998 20.5 0 0 1 1 0 -0 -0 1 0 +5 -40 -22 19.899999999999999 0 -0 1 -1 -4.80096443081e-16 0 4.80096443081e-16 -1 -0 7.4000000000000004 0.59999999999999998 +5 -40 -22 19.899999999999999 -0 0 1 1 0 0 0 1 -0 7.4000000000000004 0.59999999999999998 +5 -8.881784197e-16 8.881784197e-16 0.59999999999999998 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 7.2000000000000002 0.59999999999999998 +5 -5.3290705181999996e-15 -8.3266726846900003e-16 0.59999999999999998 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 7.2000000000000002 0.59999999999999998 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6.5999999999999996 +2 0 0 1.5500000007500001 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6.5999999999999996 +5 -40 20 19.899999999999999 -0 0 1 1 0 0 0 1 -0 7.4000000000000004 0.59999999999999998 +5 -40 20 19.899999999999999 0 -0 1 -1 9.60192886162e-16 0 -9.60192886162e-16 -1 0 7.4000000000000004 0.59999999999999998 +3 33 -4 8 -0 -0 -1 0.87758256189037243 0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 10.589384154299999 +0.17453292519899999 +1 33 -4 8 0 0 1 1 0 -0 -0 1 0 +3 33 -4 8 -0 -0 -1 0.87758256189037243 0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 10.589384154299999 +0.17453292519899999 +2 33 -4 17.5 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8.8000000000000007 +2 33 -4 17.5 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8.8000000000000007 +2 -55.499766644799998 -13.999766644799999 50 0 0 1 -0.99999999997166822 -7.5275290616575032e-06 0 7.5275290616575032e-06 -0.99999999997166822 0 31.000233355999999 +1 0 0 52 0 0 1 1 0 -0 -0 1 0 +6 0 0 -1 +7 0 0 5 6 2 -55.5 -45 52 -60.369468613099997 -45 52 -65.238937226100006 -44.043882073600003 52 -69.8577641933 -42.130701301599998 52 -73.977075939700001 -39.363544493900001 52 -77.420310216800004 -35.920310216799997 52 + 0 6 24.756193660499999 6 +1 53.5 -45 52 -1.97215226305e-31 -1 -0 -1 1.97215226305e-31 0 0 0 -1 +2 53.499751589699997 -11.999751589700001 50 0 0 1 -1.83697019872e-16 -1 0 1 -1.83697019872e-16 0 33.000248411299999 +1 86.5 53 0 -1 0 0 0 -1 0 0 0 1 +2 60.500078944800002 -1.9983999996099999 50 0 0 1 0.99999999998964029 -4.5518777647183625e-06 0 4.5518777647183625e-06 0.99999999998964029 -0 25.999921055400002 +1 47.082969087899997 34.5823357644 52 0.46947156278594571 0.8829475928588979 -6.1645133442292872e-14 0.8829475928588979 -0.46947156278594571 1.5755129999074048e-26 -2.8940637135287487e-14 -5.4429422184345419e-14 -1 +2 5.2998818036899999 -44.0004740595 50 0 0 1 0.46947039019481945 0.88294821633566034 -0 -0.88294821633566034 0.46947039019481945 0 89.000474059599995 +6 0 0 -1 +7 0 0 5 6 2 5.2999999999999998 45 52 8.8637397867699992 45 52 12.4276487354 44.821590245800003 52 15.9795444002 44.464822848399997 52 19.5075314268 43.930901378999998 52 23.000001552000001 43.222180868300001 52 + 0 6 17.9076813235 6 +1 -29.5 45 52 -0 1 0 1 0 0 0 0 -1 +6 0 0 -1 +7 0 0 5 9 3 -86.5 -12 52 -86.5 -3.04646093727 52 -84.741976716099998 5.90707812546 52 -81.224192715800001 14.3997599683 52 -71.048196713199999 29.548196713199999 52 -55.899759968300003 39.724192715800001 52 -47.4070781255 43.241976716099998 52 -38.453539062700003 45 52 -29.5 45 52 + 0 6 45.519452859700003 3 91.038905719400006 6 +1 -86.5 -53 0 1 0 0 -0 1 0 0 -0 1 +1 -84.5 -12 52 1 0 0 0 -1 0 0 0 -1 +2 -29.5 -12 45 0 0 1 -3.8285686989299999e-16 1 0 -1 -3.8285686989299999e-16 0 55 +1 -29.5 43 52 -0 1 0 1 0 0 0 0 -1 +2 5.2999999999999998 -44 45 0 0 1 0.46947156278594571 0.8829475928588979 -0 -0.8829475928588979 0.46947156278594571 0 87 +1 46.144025962400001 32.816440578700004 52 0.46947156278594571 0.8829475928588979 0 0.8829475928588979 -0.46947156278594571 0 0 0 -1 +2 60.5 -1.9984474343 45 0 0 1 0.99999999999628053 -2.7274528211707652e-06 0 2.7274528211707652e-06 0.99999999999628053 -0 24 +1 84.5 -1.99851289317 52 1 0 0 0 -1 0 0 0 -1 +2 53.5 -12 45 0 0 1 -1.07187543957e-15 -1 0 1 -1.07187543957e-15 0 31 +1 -55.5 -43 52 -0 1 0 1 0 0 0 0 -1 +2 -55.5 -14 45 0 0 1 -1 -7.6571373978499999e-16 0 7.6571373978499999e-16 -1 0 29 +2 33 -4 17.5 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 23 +2 33 -4 17.5 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 23 +2 -40 20 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 20 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 -22 20.149999999999999 0 0 1 -1 1.2246467991500001e-16 0 -1.2246467991500001e-16 -1 0 17 +1 -57 20 20.5 1 0 0 0 -1 0 0 0 -1 +1 -23 -22 20.5 -1 0 0 0 1 0 0 0 -1 +2 -40 20 20.149999999999999 0 0 1 1 0 -0 -0 1 0 17 +2 -40 -22 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 -22 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +5 33 -4 20.300000000000001 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 23.5 0.5 +5 33 -4 20.300000000000001 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 23.5 0.5 +2 33 -4 17.5 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 24 +5 33 -4 20.300000000000001 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 23.5 0.5 +2 33 -4 17.5 0 0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 24 +5 33 -4 20.300000000000001 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 23.5 0.5 +2 -22.5 -1 20.300000000000001 -0 1 0 1 0 0 0 0 -1 0.5 +5 -40 20 20.300000000000001 -0 0 1 1 -4.0602442043399999e-16 0 4.0602442043399999e-16 1 0 17.5 0.5 +1 -22 20 20.5 -1 1.69176841848e-16 0 -1.69176841848e-16 -1 0 0 0 1 +5 -40 -22 20.300000000000001 0 -0 1 -1 -4.0602442043399999e-16 0 4.0602442043399999e-16 -1 -0 17.5 0.5 +2 -22.5 -1 20.300000000000001 0 1 0 0 0 -1 -1 0 0 0.5 +2 -40 -22 45.5 0 0 1 -1 1.2246467991500001e-16 0 -1.2246467991500001e-16 -1 0 18 +2 -57.5 -1 20.300000000000001 0 -1 0 -1 0 0 -0 -0 -1 0.5 +5 -40 -22 20.300000000000001 0 -0 1 -1 -2.0898315757699999e-16 0 2.0898315757699999e-16 -1 -0 17.5 0.5 +1 -58 -22 20.5 1 0 0 -0 1 0 0 -0 1 +2 -57.5 -1 20.300000000000001 0 -1 0 0 0 -1 1 0 0 0.5 +2 -40 20 45.5 0 0 1 1 0 -0 -0 1 0 18 +5 -40 20 20.300000000000001 -0 0 1 1 -1.2538989454600001e-15 0 1.2538989454600001e-15 1 0 17.5 0.5 +1 7248.0524318899998 -2368.6446572300001 50.999999994600003 5.3319979771499996e-15 3.3284093715700001e-15 -1 -0.74740830984202555 -0.66436497377502279 -6.1964582010384234e-15 -0.66436497377502279 0.74740830984202555 -1.0547118733902419e-15 +2 -6.4589041095899997 -1 32.899999999999999 0 0 1 1 0 -0 -0 1 0 9.5 +1 0 0 32.299999999999997 0 0 1 1 0 -0 -0 1 0 +2 -6.4589041095899997 -1 32.899999999999999 0 0 1 1 0 -0 -0 1 0 9.5 +1 0 0 33.5 0 0 1 1 0 -0 -0 1 0 +2 -6.4589041095899997 -1 25 0 0 1 1 0 -0 -0 1 0 8 +2 -6.4589041095899997 -1 25 0 0 1 1 0 -0 -0 1 0 8 +2 11.159670332199999 -26 29.149999999999999 0 0 -1 5.5511151231300001e-16 1 0 1 -5.5511151231300001e-16 0 7 +2 19.6958653043 24 29.149999999999999 0 0 -1 0.42916563534376717 -0.90322580645151007 0 -0.90322580645151007 -0.42916563534376717 -0 7 +1 -41.458904109599999 17 33.5 0 -1 0 1 0 0 -0 0 1 +2 -15.3220746415 24 29.149999999999999 -0 0 -1 -4.9960036108099997e-16 -1 0 -1 4.9960036108099997e-16 0 7 +2 -15.3220746415 -26 29.149999999999999 0 0 -1 -0.98711701434023902 0.16000000000003875 0 0.16000000000003875 0.98711701434023902 0 7 +1 28.541095890400001 -19 33.5 0 1 -0 -1 0 0 0 0 1 +1 0 0 33.5 0 0 1 1 0 -0 -0 1 0 +2 0 -42.200000000000003 38.799999999999997 1 0 0 0 -1 0 0 0 -1 0.80000000000000004 +5 -55.5 -14 38.799999999999997 0 0 1 -1 -1.07085341382e-15 0 1.07085341382e-15 -1 0 28.199999999999999 0.80000000000000004 +5 53.5 -12 38.799999999999997 -0 0 1 -4.7055810315199999e-16 -1 0 1 -4.7055810315199999e-16 0 30.199999999999999 0.80000000000000004 +2 -83.700000000000003 1.42108547152e-14 38.799999999999997 0 -1 0 -1 0 0 -0 -0 -1 0.80000000000000004 +2 83.700000000000003 1.42108547152e-14 38.799999999999997 0 -1 0 -1.83697019872e-16 -0 -1 1 0 -1.83697019872e-16 0.80000000000000004 +5 60.5 -1.9984474343 38.799999999999997 0 -0 1 0.99999999999628053 -2.7274528217707653e-06 -0 2.7274528217707653e-06 0.99999999999628053 0 23.199999999999999 0.80000000000000004 +2 55.619498734399997 26.872186295799999 38.799999999999997 0.8829475928588979 -0.46947156278594571 0 -8.6240526998305395e-17 -1.6219484151110351e-16 -1 0.46947156278594571 0.8829475928588979 -1.8369701987173728e-16 0.80000000000000004 +5 5.2999999999999998 -44 38.799999999999997 0 0 1 0.46947156278594571 0.8829475928588979 -0 -0.8829475928588979 0.46947156278594571 0 86.200000000000003 0.80000000000000004 +2 0 42.200000000000003 38.799999999999997 1 0 0 0 -1.83697019872e-16 -1 0 1 -1.83697019872e-16 0.80000000000000004 +5 -29.5 -12 38.799999999999997 -0 0 1 -3.2774111428000002e-16 1 -0 -1 -3.2774111428000002e-16 0 54.200000000000003 0.80000000000000004 +1 0 0 38 0 0 1 1 0 -0 -0 1 0 +3 -15.3220746415 24 44.600000000000001 1.3322676295499999e-14 -0 -1 -0.98358233283401919 0.18045995272300352 -1.3103949030320378e-14 0.18045995272300352 0.98358233283401919 2.4042095344298095e-15 0 +0.78539816339699997 +3 -15.3220746415 -26 44.600000000000001 -4.4408920984999998e-15 -8.8817841969999996e-15 -1 0.33550826299311909 0.94203726330933435 -9.8569276723535754e-15 0.94203726330933435 -0.33550826299311909 -1.2035738509077817e-15 0 +0.78539816339699997 +3 33 -4 13.6 -1.7763568393999999e-14 -4.4408920984999998e-15 1 -0.52029602321325741 -0.85398597659942255 -1.303477356918509e-14 0.85398597659942255 -0.52029602321325741 1.2859259804471999e-14 0 +0.78539816339699997 +1 -117.18000000000001 17 37.600000000000001 0 -0.70710678118654757 0.70710678118654757 1 0 0 -0 0.70710678118654757 0.70710678118654757 +3 19.6958653043 24 44.600000000000001 -0 -0 -1 -0.73482806172198967 -0.67825343324299059 0 -0.67825343324299059 0.73482806172198967 0 0 +0.78539816339699997 +1 117.18000000000001 -19 37.600000000000001 0 0.70710678118654757 0.70710678118654757 -1 0 0 0 -0.70710678118654757 0.70710678118654757 +3 11.159670332199999 -26 44.600000000000001 1.3322676295499999e-14 -0 -1 0.99120552472633061 0.13233143145904414 1.3205510348240124e-14 0.13233143145904414 -0.99120552472633061 1.7630088250489903e-15 0 +0.78539816339699997 +2 -64.979991993599995 -23 29.149999999999999 0 0 -1 -4.5796699765800004e-16 1 0 1 4.5796699765800004e-16 0 7 +3 -40 -22 19.600000000000001 -1.7763568393999999e-14 -8.8817841969999996e-15 1 7.7232873164099901e-16 1 8.8817841970000138e-15 -1 7.7232873164115678e-16 -1.7763568393999993e-14 0 +0.78539816339699997 +1 -50 -16 33.5 0 1 -0 -1 0 0 0 0 1 +3 -64.979991993599995 -23 44.600000000000001 3.5527136787999998e-14 -0 -1 0.97090996135354468 -0.23944487245388771 3.4493651005839173e-14 -0.23944487245388771 -0.97090996135354468 -8.506790736854482e-15 0 +0.78539816339699997 +2 -64.979991993599995 21 29.149999999999999 0 0 -1 0.99919967974374424 -0.039999999999989759 0 -0.039999999999989759 -0.99919967974374424 -0 7 +3 -40 20 19.600000000000001 0 0 1 0 -1 0 1 0 -0 0 +0.78539816339699997 +1 -76 14 33.5 0 -1 0 1 0 0 -0 0 1 +3 -64.979991993599995 21 44.600000000000001 -0 -0 -1 -0.2780896383261115 -0.96055512754638528 0 -0.96055512754638528 0.2780896383261115 0 0 +0.78539816339699997 +2 -73.888543819999995 -12 35.75 -0 0 -1 3.8857805861899998e-16 -1 -0 -1 -3.8857805861899998e-16 0 4 +1 117.18000000000001 -16 37.600000000000001 0 0.70710678118654757 0.70710678118654757 -1 0 0 0 -0.70710678118654757 0.70710678118654757 +2 -56 -0.99999999994099997 45 0 0 1 -0.80000000000131999 0.59999999999824005 0 -0.59999999999824005 -0.80000000000131999 0 25 +3 -73.888543819999995 -12 33.600000000000001 0 4.4408920984999998e-15 1 -0.9999039642555646 -0.013858653109393965 6.1544783089360114e-17 0.013858653109393965 -0.9999039642555646 4.4404656141213629e-15 0 +0.78539816339699997 +2 -73.888543819999995 10 35.75 0 0 -1 -0.85183542000161672 0.52380952380676438 0 0.52380952380676438 0.85183542000161672 0 4 +1 -117.18000000000001 14 37.600000000000001 0 -0.70710678118654757 0.70710678118654757 1 0 0 -0 0.70710678118654757 0.70710678118654757 +3 -56 -0.99999999994099997 12.6 0 -8.8817841969999996e-15 1 -0.50000000000168998 0.86602540378346304 7.6918507455245061e-15 -0.86602540378346304 -0.50000000000168998 -4.4408920985150095e-15 0 +0.78539816339699997 +3 -73.888543819999995 10 33.600000000000001 0 0 1 0.51195392778001336 0.85901290783702244 -0 -0.85901290783702244 0.51195392778001336 0 0 +0.78539816339699997 +2 -68.458904109599999 -1 32.899999999999999 0 0 1 1 0 -0 -0 1 0 7.5 +2 -68.458904109599999 -1 32.899999999999999 0 0 1 1 0 -0 -0 1 0 7.5 +1 0 0 32.299999999999997 0 0 1 1 0 -0 -0 1 0 +2 -68.458904109599999 -1 20.5 0 0 1 1 0 -0 -0 1 0 6 +2 0 9 0 0 1 0 0.87758256189037243 0 -0.4794255386042035 -0.4794255386042035 0 -0.87758256189037243 6 +2 0 9 0 0 1 0 0.87758256189037243 0 -0.4794255386042035 -0.4794255386042035 0 -0.87758256189037243 6 +2 -68.458904109599999 -1 20.5 0 0 1 1 0 -0 -0 1 0 6 +2 -12.1983481148 -55 26 0 -0 1 0 1 0 -1 0 0 10 +1 53.5 -45 52 -1.97215226305e-31 -1 -0 -1 1.97215226305e-31 0 0 0 -1 +1 0 0 7 0 0 1 1 0 -0 -0 1 0 +2 -12.1983481148 -55 26 0 -0 1 0 1 0 -1 0 0 10 +1 0 0 7 0 0 1 1 0 -0 -0 1 0 +1 -24.340483738500001 -53 0 0.70710678118654757 -0.70710678118654757 0 0.70710678118654757 0.70710678118654757 0 -0 0 1 +1 16.732109310799999 -5.2094209951600003 23.499999994500001 5.3555698928500002e-15 3.2349796822300001e-15 -1 -0.99796128102408377 -0.063822265525205368 -5.5511151231305293e-15 -0.063822265525205368 0.99796128102408377 2.8865798640248658e-15 +2 53.499751589699997 -11.999751589700001 50 0 0 1 -1.83697019872e-16 -1 0 1 -1.83697019872e-16 0 33.000248411299999 +1 86.5 -53 0 0 1 -0 -1 0 0 0 0 1 +2 -14.8578643763 55 26 0 0 1 -0.70710678118654757 -0.70710678118654757 0 0.70710678118654757 -0.70710678118654757 0 10 +1 -19 45 0 0.70710678118654757 0.70710678118654757 -0 -0.70710678118654757 0.70710678118654757 0 0 0 1 +2 -14.8578643763 55 26 0 0 1 -0.70710678118654757 -0.70710678118654757 0 0.70710678118654757 -0.70710678118654757 0 10 +1 -29.5 45 52 -0 1 0 1 0 0 0 0 -1 +6 0 0 1 +7 0 0 5 6 2 23 43.222181183300002 0 19.507530172599999 43.930901568800003 0 15.9795434532 44.464822943599998 0 12.427648101899999 44.8215902775 0 8.8637394700400005 45 0 5.2999999999999998 45 0 + 0 6 17.8336924567 6 +1 -86.5 53 0 0 -1 0 1 0 0 -0 0 1 +1 -78.862687876999999 16.500914749 0 0.86602540378432902 -0.50000000000018996 0 0.50000000000018996 0.86602540378432902 0 -0 0 1 +6 0 0 1 +7 0 0 5 6 2 -78.862687876999999 16.500914749 0 -81.842187261500001 11.3402706638 0 -84.147352448999996 5.7902787984600002 0 -85.7105434594 -0.0314708573361 0 -86.494623900099995 -5.98978312823 0 -86.499977001199994 -11.948795860200001 0 + 0 6 29.965332826400001 6 +6 0 0 1 +7 0 0 5 6 2 -78.862687876999999 16.500914749 0 -81.842187261500001 11.3402706638 0 -84.147352448999996 5.7902787984600002 0 -85.7105434594 -0.0314708573361 0 -86.494623900099995 -5.98978312823 0 -86.499977001199994 -11.948795860200001 0 + 0 6 29.965332826400001 6 +1 -86.5 -53 0 1 0 0 -0 1 0 0 -0 1 +2 -55.499766644799998 -13.999766644799999 50 0 0 1 -0.99999999997166822 -7.5275290616575032e-06 0 7.5275290616575032e-06 -0.99999999997166822 0 31.000233355999999 +2 5.2998818036899999 -44.0004740595 50 0 0 1 0.46947039019481945 0.88294821633566034 -0 -0.88294821633566034 0.46947039019481945 0 89.000474059599995 +6 0 0 1 +7 0 0 5 6 2 23 43.222181183300002 0 19.507530172599999 43.930901568800003 0 15.9795434532 44.464822943599998 0 12.427648101899999 44.8215902775 0 8.8637394700400005 45 0 5.2999999999999998 45 0 + 0 6 17.8336924567 6 +2 -68.458904109599999 -1 20.5 0 0 1 1 0 -0 -0 1 0 6 +2 -68.458904109599999 -1 20.5 0 0 1 1 0 -0 -0 1 0 6 +2 -6.4589041095899997 -1 25 0 0 1 1 0 -0 -0 1 0 8 +2 -6.4589041095899997 -1 25 0 0 1 1 0 -0 -0 1 0 8 +2 60.500078944800002 -1.9983999996099999 50 0 0 1 0.99999999998964029 -4.5518777647183625e-06 0 4.5518777647183625e-06 0.99999999998964029 -0 25.999921055400002 +1 47.082969087899997 34.5823357644 52 0.46947156278594571 0.8829475928588979 -6.1645133442292872e-14 0.8829475928588979 -0.46947156278594571 1.5755129999074048e-26 -2.8940637135287487e-14 -5.4429422184345419e-14 -1 +2 5.2998818036899999 -44.0004740595 50 0 0 1 0.46947039019481945 0.88294821633566034 -0 -0.88294821633566034 0.46947039019481945 0 89.000474059599995 +1 86.5 53 0 -1 0 0 0 -1 0 0 0 1 +2 60.500078944800002 -1.9983999996099999 50 0 0 1 0.99999999998964029 -4.5518777647183625e-06 0 4.5518777647183625e-06 0.99999999998964029 -0 25.999921055400002 +2 53.499751589699997 -11.999751589700001 50 0 0 1 -1.83697019872e-16 -1 0 1 -1.83697019872e-16 0 33.000248411299999 +2 -55.499766644799998 -13.999766644799999 50 0 0 1 -0.99999999997166822 -7.5275290616575032e-06 0 7.5275290616575032e-06 -0.99999999997166822 0 31.000233355999999 +1 -77.4202418693 -35.9202418693 0 -0.70710678118654757 -0.70710678118654757 0 0.70710678118654757 -0.70710678118654757 0 0 0 1 +2 -40 -22 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 -22 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 20 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +2 -40 20 50 0 0 1 1 0 -0 -0 1 0 6.7999999999999998 +3 33 -4 8 -0 -0 -1 0.87758256189037243 0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 10.589384154299999 +0.17453292519899999 +3 33 -4 8 -0 -0 -1 0.87758256189037243 0.4794255386042035 -0 0.4794255386042035 -0.87758256189037243 0 10.589384154299999 +0.17453292519899999 +2 -40.000000188800001 -22.000011602899999 10 5.76090795865e-17 2.3455816874200001e-17 1 -0.97417192851032441 -0.22580755900207519 6.1417648913248256e-17 0.22580755900207519 -0.97417192851032441 9.8414327213405798e-18 24.000006407600001 +1 -40.156212697500003 29.396980008700002 13 0 0 1 -0.25806358351695385 0.96612793503882721 0 -0.96612793503882721 -0.25806358351695385 0 +2 -70.199384206299996 -29.000057785500001 10 2.03942557704e-16 5.8439850052099999e-16 -1 6.6378342173397984e-06 0.99999999997796962 5.8439985424501339e-16 0.99999999997796962 -6.6378342173397984e-06 2.0393867855914374e-16 7.0000631979800003 +2 -10.050091973400001 -29.999935313400002 10 2.69383714935e-16 -1.7976870128500001e-16 -1 -0.96612865813894044 0.25806087638898412 -3.0665059563555102e-16 0.25806087638898412 0.96612865813894044 -1.041622965868107e-16 6.9999338036700003 +1 -4.0512084233500003 -23 10 0 -1 0 1 0 0 -0 0 1 +2 -40.000005889900002 20.000007856700002 10 1.2518649094500001e-16 3.3689686731300001e-16 1 0.96612835190482449 0.25806202286595314 -2.078865052534365e-16 -0.25806202286595314 0.96612835190482449 -2.9317973609025001e-16 14.0000039535 +2 -70.199302031900004 26.9999554113 10 0 0 -1 0.97417325212704642 -0.22580184862001074 0 -0.22580184862001074 -0.97417325212704642 -0 16.999958414799998 +2 -10.050077960799999 27.999952680300002 10 -1.3606594428900001e-16 1.04491966795e-16 -1 2.1308617872394242e-06 -0.99999999999772982 -1.0449225673248402e-16 -0.99999999999772982 -2.1308617872394242e-06 1.3606572163075202e-16 16.9999549184 +1 -0.937212455434 11 10 -0 -1 -0 -1 0 0 0 0 -1 +2 8.1756210378799992 27.9999879308 10 1.61279430607e-16 -9.6888452206000006e-16 -1 0.61295013385195052 -0.79012159406693605 8.6439283161495576e-16 -0.79012159406693605 -0.61295013385195052 4.6644753668234948e-16 16.999987833900001 +2 33.000154312699998 -3.9999358403 10 5.9907681504699996e-17 1.03890016243e-17 1 0.87102823584473155 -0.49123295121684862 -4.7077862206485369e-17 0.49123295121684862 0.87102823584473155 -3.8477740943114876e-17 23.4999954223 +2 32.999998499500002 -4.0000094690600001 10 -1.07608474141e-16 1.6621763078200001e-16 1 -0.76672449638603024 -0.64197628199302537 2.4201723468490427e-17 0.64197628199302537 -0.76672449638603024 1.9652521739178986e-16 23.499997080899998 +2 1.9476373989 -29.999971756400001 10 4.70738733509e-16 1.0081044974899999e-15 -1 -7.358452492328008e-07 0.99999999999972933 1.0081041510988663e-15 0.99999999999972933 7.358452492328008e-07 4.7073947531777785e-16 16.999971543899999 +1 -4.0512084233500003 -13 10 -0 1 0 1 0 0 0 0 -1 +2 -10.0500782264 -29.9999528508 10 2.2184535635e-16 -1.48044541144e-16 -1 -0.96612782444105971 0.25806399756801596 -2.5253593759852034e-16 0.25806399756801596 0.96612782444105971 -8.5779650954245655e-17 16.999954907700001 +2 -40.000005894799997 -22.000007838799998 10 5.5640088590099997e-18 3.34722974126e-16 1 -0.97417156187334042 -0.22580914073007888 8.1003806370467358e-17 0.22580914073007888 -0.97417156187334042 3.2482119843974757e-16 14.000003959200001 +2 -70.199302332399995 -28.999955369599999 10 -0 0 -1 -2.0828689786796477e-06 0.99999999999783085 0 0.99999999999783085 2.0828689786796477e-06 0 16.999958491400001 +2 1.94758182896 -30.000090517899999 10 -4.2166878908399999e-16 -5.48623878844e-16 -1 6.151433136810492e-06 0.99999999998107991 -5.4862647270098189e-16 0.99999999998107991 -6.151433136810492e-06 -4.2166541425291401e-16 7.0000925632 +2 33.000000815600004 -4.0000089966100001 10 -5.2933418242299998e-17 -1.2842066634500001e-16 1 -0.76672491026097311 -0.64197578769397745 -1.2302832878465087e-16 0.64197578769397745 -0.76672491026097311 -6.44813510075892e-17 33.499997306399997 +2 33.000231648499998 -3.99990394745 10 2.1012375303300001e-17 3.6438932552000002e-18 1 0.87102809313900131 -0.49123320425500078 -1.6512367833039363e-17 0.49123320425500078 0.87102809313900131 -1.3495909842927628e-17 33.499988350499997 +2 8.1755617599299999 28.000161024899999 10 -1.95855484681e-16 1.17654303265e-15 -1 0.61294571866033543 -0.7901250192064323 -1.0496648670811392e-15 -0.7901250192064323 -0.61294571866033543 -5.6640669608720442e-16 7.0001627314999997 +1 -0.937212455434 21 10 0 1 -0 -1 0 0 0 0 1 +2 -10.0500892177 27.999937760200002 10 -2.6938377685800001e-16 -1.79768782062e-16 -1 6.783127851679964e-06 -0.99999999997699462 1.7976695479326474e-16 -0.99999999997699462 -6.783127851679964e-06 2.6938499624643518e-16 6.9999367231200003 +2 -40.000000158600002 20.0000116416 10 3.6512598978999999e-17 9.8261528521100004e-17 1 0.96612805641133093 0.2580631291270884 -6.0633523809073324e-17 -0.2580631291270884 0.96612805641133093 -8.5510664025013637e-17 24.000006379399998 +2 -70.199389163800006 27.000064425600002 10 3.6359605203699998e-16 -4.57512413114e-16 -1 0.97417177852014902 -0.22580820608403457 4.57515069942239e-16 -0.22580820608403457 -0.97417177852014902 3.6359270892859827e-16 7.0000700167899996 +2 -65.199337741099995 16.091298859399998 10 0 0 1 -0.41666852074605776 0.90905849306812603 0 -0.90905849306812603 -0.41666852074605776 0 5 +2 -65.199337741099995 16.091272674700001 10 0 0 1 -1 2.1316282072799999e-15 0 -2.1316282072799999e-15 -1 0 5 +2 -65.199337741099995 -18.091297447999999 10 9.8355079826499999e-17 -6.3129980462000004e-16 1 -1 5.5511151231300001e-16 9.8355079826500344e-17 -5.5511151231300011e-16 -1 -6.3129980461999994e-16 5 +2 -65.199337741099995 -18.0912726864 10 0 -0 1 0.41666515720801467 0.90906003474403196 0 -0.90906003474403196 0.41666515720801467 0 5 +1 -13.918131324000001 -107.60845784999999 23.499999994500001 -0.1024327815450157 -0.99473992845615244 -3.9751455113206091e-15 0.99473992845615244 -0.1024327815450157 4.9960036108107669e-15 -5.3769094861553343e-15 -3.4424814150695685e-15 1 +1 26.946339062700002 -111.816453577 23.499999994500001 0.81025365742885125 -0.58607935522689247 2.3457727286495693e-15 0.58607935522689247 0.81025365742885125 5.8009153036689349e-15 -5.3004676337852713e-15 -3.3254038729169813e-15 1 +1 -13.918131324000001 -107.60845784999999 23.499999994500001 0.94483050731796181 0.3275596318859868 6.2148761907197492e-15 -0.3275596318859868 0.94483050731796181 1.4988010832399395e-15 -5.3810578930996683e-15 -3.4518555450954471e-15 1 +1 21.929764967699999 -84.875286455999998 52.999999998600003 0.99479715769590016 -0.10187548792598977 -1.9578655817198035e-14 -0.10187548792598977 -0.99479715769590016 2.6068036618197383e-13 -4.6033730655969162e-14 -2.573295022306419e-13 -1 +1 15.631284151699999 -13.8641989612 32.999999994200003 1.10785473343e-16 -6.8905455708200003e-15 -1 -0.99792536962780554 -0.064381337771187458 3.3306690738751748e-16 -0.064381337771187458 0.99792536962780554 -6.8833827526772241e-15 +1 -4.9297582863200002 -82.124648221399994 52.999999993000003 0.99479715769590016 -0.10187548792598977 -1.9578655817198035e-14 -0.10187548792598977 -0.99479715769590016 2.6068036618197383e-13 -4.6033730655969162e-14 -2.573295022306419e-13 -1 +1 15.631284150500001 -13.8641989618 41.999999996299998 1.10785473343e-16 -6.8905455708200003e-15 -1 -0.99792536962780554 -0.064381337771187458 3.3306690738751748e-16 -0.064381337771187458 0.99792536962780554 -6.8833827526772241e-15 +1 87.499999999799996 12.5163758555 23.499999994500001 -1 -1.5831780331199999e-13 -5.38458166943e-15 1.5831780331200002e-13 -1 -3.33066907388e-15 -5.384581669429473e-15 -3.3306690738808524e-15 1 +1 86.499999999799996 12.5163758555 23.499999994500001 0.93896990122733826 0.34399930899512393 6.2398995735322481e-15 -0.34399930899512393 0.93896990122733826 1.2767564783204604e-15 -5.419874539930799e-15 -3.3453570458339886e-15 1 +1 -164.72578242700001 -10.123963334500001 23.499999994500001 -0.54287075387791228 -0.8398162564418642 -5.8135202777090594e-15 0.83981625644186431 -0.54287075387791239 2.6645352590995699e-15 -5.3937101622988012e-15 -3.4357905715328274e-15 1 +1 -160.47072977600001 31.197483829599999 23.499999994500001 -0.99473992845615244 0.1024327815450157 -5.0037163637207664e-15 -0.1024327815450157 -0.99473992845615244 -3.8857805861905959e-15 -5.3754277715795972e-15 -3.3527965171053094e-15 1 +1 -154.507054498 -16.729513646600001 23.499999994500001 -0.1024327815450157 -0.99473992845615244 -3.9751455113206091e-15 0.99473992845615244 -0.1024327815450157 4.9960036108107669e-15 -5.3769094861553343e-15 -3.4424814150695685e-15 1 +1 6.4227351959299996 109.449712116 23.499999994500001 -0.42452690692797662 0.90541532198995012 8.3026030447495425e-16 -0.90541532198995012 -0.42452690692797662 -6.3282712403596507e-15 -5.3772459037261422e-15 -3.4382518167828176e-15 1 +1 -136.22655639600001 21.566132892999999 52.9999999964 -0.10187548792598977 -0.99479715769590016 2.573010962839742e-13 -0.99479715769590016 0.10187548792598977 1.6986412276798295e-14 -4.3110709380231623e-14 -2.5423190021652579e-13 -1 +1 1.77160207601 -5.1313998851599996 41.999999996299998 2.9895922470999999e-15 -4.0903707038399999e-15 -1 -0.99792536962780554 -0.064381337771187458 -2.7200464103303966e-15 -0.064381337771187458 0.99792536962780554 -4.274358644802947e-15 +1 -138.77344359899999 -3.3037960436099998 52.999999990900001 -0.10187548792598977 -0.99479715769590016 2.573010962839742e-13 -0.99479715769590016 0.10187548792598977 1.6986412276798295e-14 -4.3110709380231623e-14 -2.5423190021652579e-13 -1 +1 1.7716020772600001 -5.1313998844900004 32.999999994200003 2.9860183649199999e-15 -4.03497471773e-15 -1 -0.99792536962780554 -0.064381337771187458 -2.7200464103278296e-15 -0.064381337771187458 0.99792536962780554 -4.2188474935724441e-15 +1 -150.035529897 36.090291605399997 23.499999994500001 -0.1024327815450157 -0.99473992845615244 -3.9751455113206091e-15 0.99473992845615244 -0.1024327815450157 4.9960036108107669e-15 -5.3769094861553343e-15 -3.4424814150695685e-15 1 +1 52.734826902000002 104.68075066500001 23.499999994500001 0.1024327815450157 0.99473992845615244 3.9751455113206091e-15 -0.99473992845615244 0.1024327815450157 -4.9960036108107669e-15 -5.3769094861553343e-15 -3.4424814150695685e-15 1 +1 -15.3075350256 78.276079731099998 23.499999994500001 0.82035874698441591 -0.57184921635528985 2.4491601548712418e-15 0.57184921635528985 0.82035874698441591 5.7731597280529266e-15 -5.3105668221953143e-15 -3.3355117653546696e-15 1 +1 18.329705288 11.8682050077 32.9999999988 5.9591354081500002e-16 -3.96769201162e-15 -1 0.10243278158104553 0.99473992845244219 -3.8857805861927156e-15 0.99473992845244219 -0.10243278158104553 9.9920072216128523e-16 +1 41.149169101799998 81.920381622400001 52.999999991999999 -0.99479715769590016 0.10187548792598977 1.902776238319809e-14 0.10187548792598977 0.99479715769590016 -2.6006974351797389e-13 -4.542349595179902e-14 -2.5677817907745405e-13 -1 +1 18.368715843899999 11.8641989607 41.999999996299998 6.8797638096599997e-16 -6.3526689918699996e-15 -1 -0.99792536962780554 -0.064381337771187458 -2.775557561565641e-16 -0.064381337771187458 0.99792536962780554 -6.3837823915965386e-15 +1 9.8508308956100006 81.079618379899998 52.999999995099998 -0.99479715769590016 0.10187548792598977 1.902776238319809e-14 0.10187548792598977 0.99479715769590016 -2.6006974351797389e-13 -4.542349595179902e-14 -2.5677817907745405e-13 -1 +2 21.2909982183 79.908050263700005 35.9999999988 5.9293703800799996e-16 -4.0777774832000003e-15 -1 0.43439084691396884 -0.90072448180193543 3.9305204325658755e-15 -0.90072448180193543 -0.43439084691396884 1.2372763081530302e-15 11.4999999998 +2 21.2909982079 79.9080502698 35.999999994299998 6.0304357727700005e-16 -6.45625595758e-15 -1 -0.27121406416397958 -0.96251905508392754 6.0507154842085996e-15 -0.96251905508392754 0.27121406416397958 -2.3314683517132669e-15 11.5 +2 23.161170569300001 80.6168936097 45.0000000012 6.3285417819799996e-16 -4.0332696041599998e-15 -1 0.35324255489412487 -0.93553177252933062 3.9968028886505596e-15 -0.93553177252933062 -0.35324255489412487 8.3266726846812627e-16 11.5 +1 27.223459950500001 69.858278228900005 52.999999995899998 -0.35324255489412487 0.93553177252933062 -2.7768325948409812e-13 0.93553177252933062 0.35324255489412487 -5.3124171728318789e-14 4.8390193490344427e-14 -2.7854723009482594e-13 -1 +1 23.776514175599999 93.141711997300007 52.999999996699998 0.35324255489412487 -0.93553177252933062 2.7768325948409812e-13 -0.93553177252933062 -0.35324255489412487 5.3124171728318789e-14 4.8390193490344427e-14 -2.7854723009482594e-13 -1 +2 27.8388294288 82.3831063855 45.0000000016 5.4171342637599998e-16 -3.9490123110599997e-15 -1 -0.3532448044399884 0.93553092313196928 -3.8857805861881788e-15 0.93553092313196928 0.3532448044399884 -8.8817841970097503e-16 11.5 +2 29.7090017885 83.091949733700005 35.999999991700001 5.5888520866500001e-16 -6.53020587755e-15 -1 0.99479715769590016 -0.10187548792598977 1.2212453270907945e-15 -0.10187548792598977 -0.99479715769590016 6.4392935428284362e-15 11.5 +2 27.424211249199999 100.186300702 33.999999996299998 7.8154559352599992e-15 8.4870486415000004e-14 -1 0.55720717218914495 0.83037351069321608 7.4829031859719546e-14 0.83037351069321608 -0.55720717218914495 -4.0800696154989415e-14 2 +2 27.424211249199999 100.186300702 33.999999996299998 7.8154559352599992e-15 8.4870486415000004e-14 -1 -0.55720717218914495 -0.83037351069321608 -7.4829031859719546e-14 -0.83037351069321608 0.55720717218914495 4.0800696154989415e-14 2 +2 27.424211249199999 100.186300702 33.999999996299998 7.8154559352599992e-15 8.4870486415000004e-14 -1 0.55720717218914495 0.83037351069321608 7.4829031859719546e-14 0.83037351069321608 -0.55720717218914495 -4.0800696154989415e-14 2 +2 27.424211249199999 100.186300702 33.999999996299998 7.8154559352599992e-15 8.4870486415000004e-14 -1 -0.55720717218914495 -0.83037351069321608 -7.4829031859719546e-14 -0.83037351069321608 0.55720717218914495 4.0800696154989415e-14 2 +2 25.500000001899998 81.5 41.999999994200003 1.32556210217e-16 8.4147218736300005e-17 -1 -0.97594548188412822 0.21801471599402863 -1.11022302462482e-16 0.21801471599402863 0.97594548188412822 1.1102230246251146e-16 5 +2 25.500000001899998 81.5 41.999999994200003 1.32556210217e-16 8.4147218736300005e-17 -1 -0.97594548188412822 0.21801471599402863 -1.11022302462482e-16 0.21801471599402863 0.97594548188412822 1.1102230246251146e-16 5 +1 27.242425188999999 98.194579379000004 49.999999996299998 7.7550514461299993e-15 8.4967468433100002e-14 -1 0.99586066148098695 -0.090893030066398803 6.5570118441970501e-27 -0.090893030066398803 -0.99586066148098695 -8.532063944241141e-14 +2 8.4999999956199996 -83.499999997499998 41.999999994200003 1.32556210217e-16 8.4147218736300005e-17 -1 -0.97594548188412822 0.21801471599402863 -1.11022302462482e-16 0.21801471599402863 0.97594548188412822 1.1102230246251146e-16 5 +2 8.4999999956199996 -83.499999997499998 41.999999994200003 1.32556210217e-16 8.4147218736300005e-17 -1 -0.97594548188412822 0.21801471599402863 -1.11022302462482e-16 0.21801471599402863 0.97594548188412822 1.1102230246251146e-16 5 +2 8.5 -83.5 44.999999988399999 -3.7372158294600001e-16 -9.0990075420400002e-16 -1 -0.99463120722637144 0.10348314650903866 2.7755575615615316e-16 0.10348314650903866 0.99463120722637144 -9.4368957093170117e-16 11.5 +2 8.5 -83.5 44.999999988399999 -3.7372158294600001e-16 -9.0990075420400002e-16 -1 0.99463120722637144 -0.10348314650903866 -2.7755575615615316e-16 -0.10348314650903866 -0.99463120722637144 9.4368957093170117e-16 11.5 +2 6.7074263208199998 -100.90794875 33.9999999968 2.29643590168e-13 1.6778850952899999e-13 -1 0.99139318356517259 0.1309181254850228 2.4963364708745188e-13 0.1309181254850228 -0.99139318356517259 -1.3627987627316524e-13 2 +2 6.7074263208199998 -100.90794875 33.9999999968 2.29643590168e-13 1.6778850952899999e-13 -1 -0.99139318356517259 -0.1309181254850228 -2.4963364708745188e-13 -0.1309181254850228 0.99139318356517259 1.3627987627316524e-13 2 +1 8.3219540749200007 -99.727567399799995 49.9999999968 2.2961184054199999e-13 1.6786923210699999e-13 -1 -0.59019067496078803 0.80726387704971014 -4.1730110797467348e-25 0.80726387704971014 0.59019067496078803 2.8443220001483421e-13 +2 6.7074263208199998 -100.90794875 33.9999999968 2.29643590168e-13 1.6778850952899999e-13 -1 0.99139318356517259 0.1309181254850228 2.4963364708745188e-13 0.1309181254850228 -0.99139318356517259 -1.3627987627316524e-13 2 +2 6.7074263208199998 -100.90794875 33.9999999968 2.29643590168e-13 1.6778850952899999e-13 -1 -0.99139318356517259 -0.1309181254850228 -2.4963364708745188e-13 -0.1309181254850228 0.99139318356517259 1.3627987627316524e-13 2 +2 8.4999999983999999 -83.499999998700005 35.999999991499998 -1.1078518587799999e-16 -7.0754438162300004e-15 -1 -0.99479690971357726 0.1018779094029567 -6.1062266354211155e-16 0.1018779094029567 0.99479690971357726 -7.0499162063677127e-15 13.5 +2 8.4999999983999999 -83.499999998700005 35.999999991499998 -1.1078518587799999e-16 -7.0754438162300004e-15 -1 -0.99479690971357726 0.1018779094029567 -6.1062266354211155e-16 0.1018779094029567 0.99479690971357726 -7.0499162063677127e-15 13.5 +2 -137.5 9.1311684270499995 41.999999994200003 3.5275243950799999e-16 -2.2402162931099999e-15 -1 -0.97594548188412822 0.21801471599402863 -8.326672684690092e-16 0.21801471599402863 0.97594548188412822 -2.1094237467883772e-15 5 +2 -137.5 9.1311684270499995 41.999999994200003 3.5275243950799999e-16 -2.2402162931099999e-15 -1 -0.97594548188412822 0.21801471599402863 -8.326672684690092e-16 0.21801471599402863 0.97594548188412822 -2.1094237467883772e-15 5 +2 -137.5 9.1311684270499995 44.999999987000002 5.7837690158399994e-17 -2.12681934891e-15 -1 -0.99463421765463633 0.10345420760196217 -2.7755575615565657e-16 0.10345420760196217 0.99463421765463633 -2.1094237467909757e-15 12.5 +2 -137.49999999600001 9.1311684221299991 35.999999995899998 2.7557041483599998e-15 -4.2209968411500002e-15 -1 0.82380396417274382 -0.56687479094882376 4.6629367034287948e-15 -0.56687479094882376 -0.82380396417274382 1.9151347174816183e-15 12.5 +2 -137.49999999600001 9.1311684221299991 35.999999995899998 2.8070296638e-15 -4.1935665683500002e-15 -1 0.10187548792500015 0.99479715769600141 -3.8857805861839805e-15 0.99479715769600141 -0.10187548792500015 3.2196467714132273e-15 12.5 +2 -137.5 9.1311684270499995 44.999999987000002 5.7837690158399994e-17 -2.12681934891e-15 -1 0.99463421765463633 -0.10345420760196217 2.7755575615565657e-16 -0.10345420760196217 -0.99463421765463633 2.1094237467909757e-15 12.5 +2 -137.49999999600001 9.1311684221299991 35.999999995899998 2.8070296638e-15 -4.1935665683500002e-15 -1 0.10187548792500015 0.99479715769600141 -3.8857805861839805e-15 0.99479715769600141 -0.10187548792500015 3.2196467714132273e-15 12.5 +2 -137.49999999600001 9.1311684221299991 35.999999995899998 2.7557041483599998e-15 -4.2209968411500002e-15 -1 0.82380396417274382 -0.56687479094882376 4.6629367034287948e-15 -0.56687479094882376 -0.82380396417274382 1.9151347174816183e-15 12.5 +2 -155.902688676 11.0261748853 33.999999992399999 1.2085299515399999e-13 -1.09153403715e-15 -1 -0.87290976317547397 0.48788169196326486 -1.0602629885180508e-13 0.48788169196326486 0.87290976317547397 5.8009153036695189e-14 2 +2 -155.902688676 11.0261748853 33.999999992399999 1.2085299515399999e-13 -1.09153403715e-15 -1 0.87290976317547397 -0.48788169196326486 1.0602629885180508e-13 -0.48788169196326486 -0.87290976317547397 -5.8009153036695189e-14 2 +2 -155.902688676 11.0261748853 33.999999992399999 1.2085299515399999e-13 -1.09153403715e-15 -1 -0.87290976317547397 0.48788169196326486 -1.0602629885180508e-13 0.48788169196326486 0.87290976317547397 5.8009153036695189e-14 2 +2 -155.902688676 11.0261748853 33.999999992399999 1.2085299515399999e-13 -1.09153403715e-15 -1 0.87290976317547397 -0.48788169196326486 1.0602629885180508e-13 -0.48788169196326486 -0.87290976317547397 -5.8009153036695189e-14 2 +1 -153.90278201699999 11.0068524218 49.999999992399999 1.20953689596e-13 -1.1131024267e-15 -1 0.0096612317695025773 0.99995332921126678 5.5511151231623464e-17 0.99995332921126678 -0.0096612317695025773 1.2095879853243393e-13 +2 -41.992823476399998 109.942626936 37.249999994500001 -4.0715155394300002e-15 2.0148165554899999e-15 1 0.42452690692797662 -0.90541532198995012 3.552713678803071e-15 0.90541532198995012 0.42452690692797662 2.8310687127906494e-15 40 +1 -113.339099941 32.311497484699998 23.499999994500001 0.42452690692797662 -0.90541532198995012 -8.3026030447495425e-16 0.90541532198995012 0.42452690692797662 6.1339822110496622e-15 -5.2013336396943241e-15 -3.3557708961198089e-15 1 +2 -120.27642056400001 73.237379600500006 37.249999994500001 -2.2933259066499999e-14 -5.3953122334099997e-15 1 -0.1024327815450157 -0.99473992845615244 -7.7160500211349125e-15 0.99473992845615244 -0.1024327815450157 2.2259971643704582e-14 40 +2 -146.24597324999999 -57.791709263999998 37.249999994500001 9.6659368965000009e-16 -9.5482086703000007e-15 1 0.54287075387791239 0.83981625644186431 7.4940054162231688e-15 -0.83981625644186431 0.54287075387791239 5.9952043329715728e-15 40 +1 -19.2385816854 -92.2618664978 23.499999994500001 0.54287075387791228 0.8398162564418642 5.8135202777090594e-15 -0.83981625644186431 0.54287075387791239 -2.7200464103295604e-15 -5.4403293295155502e-15 -3.4056551910159719e-15 1 +2 -52.520288927800003 -118.377501115 37.249999994500001 -1.0404959675399999e-14 -1.21851197137e-14 1 0.94483050731796181 0.3275596318859868 1.3822276656637368e-14 -0.3275596318859868 0.94483050731796181 8.1046280797627087e-15 40 +2 -65 16 4.16049991609 0 0 1 1 0 -0 -0 1 0 4 +2 -65 16 4.16049991609 0 0 1 1 0 -0 -0 1 0 4 +1 0 0 0 0 0 1 1 0 -0 -0 1 0 +2 -65 -18 4.16049991609 0 0 1 1 0 -0 -0 1 0 4 +2 -65 -18 4.16049991609 0 0 1 1 0 -0 -0 1 0 4 +1 53.5 -45 52 -1.97215226305e-31 -1 -0 -1 1.97215226305e-31 0 0 0 -1 +1 86.5 53 0 -1 0 0 0 -1 0 0 0 1 +1 47.082969087899997 34.5823357644 52 0.46947156278594571 0.8829475928588979 -6.1645133442292872e-14 0.8829475928588979 -0.46947156278594571 1.5755129999074048e-26 -2.8940637135287487e-14 -5.4429422184345419e-14 -1 +1 -29.5 45 52 -0 1 0 1 0 0 0 0 -1 +1 -19 45 0 0.70710678118654757 0.70710678118654757 -0 -0.70710678118654757 0.70710678118654757 0 0 0 1 +1 -86.5 53 0 0 -1 0 1 0 0 -0 0 1 +1 -78.862687876999999 16.500914749 0 0.86602540378432902 -0.50000000000018996 0 0.50000000000018996 0.86602540378432902 0 -0 0 1 +1 -86.5 -53 0 1 0 0 -0 1 0 0 -0 1 +1 -77.4202418693 -35.9202418693 0 -0.70710678118654757 -0.70710678118654757 0 0.70710678118654757 -0.70710678118654757 0 0 0 1 +1 86.5 -53 0 0 1 -0 -1 0 0 0 0 1 +1 -24.340483738500001 -53 0 0.70710678118654757 -0.70710678118654757 0 0.70710678118654757 0.70710678118654757 0 -0 0 1 +3 -68.458904109599999 -1 9 0 0 -1 -0.50000000000018996 0.86602540378432902 0 0.86602540378432902 0.50000000000018996 0 0 +0.78539816339699997 +3 -68.458904109599999 -1 9 0 1.3322676295499999e-15 -1 1 -3.94745957368e-16 -5.2590726089711068e-31 -3.94745957368e-16 -1 -1.3322676295499999e-15 0 +0.78539816339699997 +3 -6.4589041095899997 -1 11 -2.9605947323300001e-16 0 -1 -0.50000000000018996 0.86602540378432902 1.4802973661655623e-16 0.86602540378432902 0.50000000000018996 -2.5639502485078459e-16 0 +0.78539816339699997 +3 -6.4589041095899997 -1 11 5.9211894646699999e-16 -7.4014868308300001e-16 -1 1 1.6148699255100004e-16 5.921189464669999e-16 1.614869925509996e-16 -1 7.4014868308300011e-16 0 +0.78539816339699997 +3 -40 -22 5.5 -0 -0 -1 -0.87758256189037243 -0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 8.0302016061000003 +0.17453292519899999 +3 -40 -22 5.5 -0 -0 -1 -0.87758256189037243 -0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 8.0302016061000003 +0.17453292519899999 +1 -40 20 5.5 0 0 1 1 0 -0 -0 1 0 +3 -40 20 5.5 -0 -0 -1 -0.87758256189037243 -0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 8.0302016061000003 +0.17453292519899999 +3 -40 20 5.5 -0 -0 -1 -0.87758256189037243 -0.4794255386042035 0 -0.4794255386042035 0.87758256189037243 0 8.0302016061000003 +0.17453292519899999 +1 -40 20 5.5 0 0 1 1 0 -0 -0 1 0 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 11.300000000000001 +1 0 -9.3000000000000007 0 0 0 1 1 0 -0 -0 1 0 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 11.300000000000001 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 15.300000000000001 +1 0 -12.199999999999999 0 0 0 1 1 0 -0 -0 1 0 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 15.300000000000001 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 12.199999999999999 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 12.199999999999999 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9.3000000000000007 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9.3000000000000007 +3 0 0 -7 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 10.265711135 +0.17453292519899999 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 11.5 +3 0 0 -7 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 10.265711135 +0.17453292519899999 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 11.5 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9 +5 1.7763568394e-15 2.91433543964e-16 4 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8 1 +3 2.6445401040999999e-14 -1.8623851981100001e-15 -7.3874372842399998 -1.7763568394e-15 2.22044604925e-16 1 0.4794255386042035 -0.87758256189037243 1.0464933077266227e-15 0.87758256189037243 0.4794255386042035 1.4524459316418111e-15 0 +0.62831853071800003 +5 -1.7763568394e-15 -4.4408920985e-16 4 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8 1 +3 2.7505636178100001e-14 1.5128099898e-14 -7.3874372842399998 -2.2204460492499999e-15 -1.2212453270899999e-15 1 -0.47111581537810726 0.88207136247620077 3.1138278588459099e-17 -0.88207136247620077 -0.47111581537810726 -2.5339398600155531e-15 0 +0.62831853071800003 +1 0 -16 7 0 0 1 1 0 -0 -0 1 0 +5 -3.5527136788e-15 -6.4392935428299998e-15 1 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 15.800000000000001 0.5 +5 -1.7763568394e-15 8.881784197e-16 1 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 15.800000000000001 0.5 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 16 +1 0 -15.300000000000001 1.5 0 0 1 1 0 -0 -0 1 0 +2 0 0 0 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 16 +5 0 1.3877787807800001e-15 0.40000000000000002 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 11.800000000000001 0.29999999999999999 +5 -1.7763568394e-15 2.6645352590999998e-15 0.40000000000000002 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 11.800000000000001 0.29999999999999999 +1 0 -11.5 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 +5 -1.7763568394e-15 -1.94289029309e-16 0.40000000000000002 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 11.9 0.29999999999999999 +5 0 8.881784197e-16 0.40000000000000002 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 11.9 0.29999999999999999 +3 5.5659180967900002e-14 2.63585449763e-14 21.800000000000001 -3.7007434154200002e-15 -1.71159382963e-15 -1 0.4794255386042035 -0.87758256189037243 -2.7216600725124432e-16 -0.87758256189037243 -0.4794255386042035 4.0682896810452049e-15 0 +0.78539816339699997 +3 -1.68753899743e-14 1.4506914188399999e-14 21.800000000000001 1.1102230246299999e-15 -7.4014868308300001e-16 -1 0.52029602321325741 0.85398597659942255 -5.4431971356628967e-17 0.85398597659942255 -0.52029602321325741 1.3332113103264298e-15 0 +0.78539816339699997 +3 0 0 -4.5 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 7.8065285868099998 +0.17453292519899999 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8.5999999999999996 +3 0 0 -4.5 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 7.8065285868099998 +0.17453292519899999 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8.5999999999999996 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 7 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 7 +5 -3.1086244689500001e-15 -1.1102230246299999e-15 4 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 6 1 +3 -3.7438227020200001e-14 -2.62975015189e-14 -5.2346734433000002 3.8857805861900003e-15 2.7755575615600002e-15 1 0.4794255386042035 -0.87758256189037243 5.7283846511612145e-16 0.87758256189037243 0.4794255386042035 -4.7407664606503667e-15 0 +0.62831853071800003 +5 -3.5527136788e-15 0 4 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 6 1 +3 1.9597668115999999e-14 3.5623374925699998e-15 -5.2346734433000002 -1.66533453694e-15 -2.7755575615600002e-16 1 -0.27602005662689311 0.96115187579262773 -1.9289249752251903e-16 -0.96115187579262773 -0.27602005662689311 -1.6772503695334274e-15 0 +0.62831853071800003 +1 0 -12 6 0 0 1 1 0 -0 -0 1 0 +5 8.881784197e-16 3.1363800445700001e-15 1 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 11.800000000000001 0.5 +5 -1.7763568394e-15 -8.881784197e-16 1 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 11.800000000000001 0.5 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 12 +1 0 -11.300000000000001 1.5 0 0 1 1 0 -0 -0 1 0 +2 0 0 0.75 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 12 +5 -3.5527136788e-15 -3.3723024373e-15 0.40000000000000002 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 8.9000000000000004 0.29999999999999999 +5 8.881784197e-16 2.6645352590999998e-15 0.40000000000000002 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 8.9000000000000004 0.29999999999999999 +1 0 -8.5999999999999996 0.69999999999999996 0 0 1 1 0 -0 -0 1 0 +5 8.881784197e-16 -6.6613381477499995e-16 0.40000000000000002 0 0 1 0.4794255386042035 -0.87758256189037243 0 0.87758256189037243 0.4794255386042035 -0 9 0.29999999999999999 +5 -6.2172489379000002e-15 -1.7763568394e-15 0.40000000000000002 0 -0 1 -0.4794255386042035 0.87758256189037243 0 -0.87758256189037243 -0.4794255386042035 0 9 0.29999999999999999 +3 1.5099033134899999e-14 -3.2723823650800002e-14 16.800000000000001 -1.4802973661699999e-15 2.6830389761799999e-15 -1 0.4794255386042035 -0.87758256189037243 -3.064280580438202e-15 -0.87758256189037243 -0.4794255386042035 1.2765748711872168e-17 0 +0.78539816339699997 +3 8.4376949871500001e-15 -4.2632564145599997e-14 16.800000000000001 -7.4014868308300001e-16 3.7007434154200002e-15 -1 0.52029602321325741 0.85398597659942255 2.7752865633667171e-15 0.85398597659942255 -0.52029602321325741 -2.5575586779270865e-15 0 +0.78539816339699997 +Triangulations 0 + +TShapes 3768 +Ve +1e-07 +-51.958923639 14.9 -4.1 +0 0 + +0101101 +* +Ve +1e-07 +-49.9589236513 14.9 -4.1 +0 0 + +0101101 +* +Ve +1.22060122566963e-06 +-51.9589248596 15.3 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-49.9589236513 15.3 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-49.9589041096 1.7 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-51.9589041096 1.7 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +20.0410958904 8.5 -4.1 +0 0 + +0101101 +* +Ve +1e-07 +2.04109589041 8.5 -4.1 +0 0 + +0101101 +* +Ve +1e-07 +20.4410958904 8.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +1.64109589041 8.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-56.38854382 -5.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-56.38854382 -5.5 0 +0 0 + +0101101 +* +Ve +1e-07 +-58.94405008 -4.07142857143 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-58.94405008 -4.07142857143 0 +0 0 + +0101101 +* +Ve +1e-07 +-56.38854382 22.5 0 +0 0 + +0101101 +* +Ve +1e-07 +-56.38854382 22.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-58.94405008 21.0714285714 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-58.94405008 21.0714285714 0 +0 0 + +0101101 +* +Ve +9.51703163673272e-05 +71 -32.5 0.8 +0 0 + +0101101 +* +Ve +0.00331634368160302 +-38 -32.5 0.8 +0 0 + +0101101 +* +Ve +9.51703163673272e-05 +101 -2.5 0.8 +0 0 + +0101101 +* +Ve +0.000329339234167311 +101 7.5 0.8 +0 0 + +0101101 +* +Ve +0.000329339234167311 +88.7978026727 27.8078176435 0.8 +0 0 + +0101101 +* +Ve +0.000102671200703963 +63.1716344482 41.4334929859 0.800000000001 +0 0 + +0101101 +* +Ve +0.000102671200703963 +22.7970800486 51.5 0.8 +0 0 + +0101101 +* +Ve +0.000332604549846037 +-12 51.5 0.8 +0 0 + +0101101 +* +Ve +0.000332604549846037 +-66 -2.5 0.8 +0 0 + +0101101 +* +Ve +0.00331634368160302 +-66 -4.5 0.8 +0 0 + +0101101 +* +Ve +1.78496884545777e-06 +-65.2 -4.5 0 +0 0 + +0101101 +* +Ve +3.57962831280521e-06 +-38.0000035699 -31.7000003729 0 +0 0 + +0101101 +* +Ve +1.56700153678202e-07 +-65.2000001567 -2.50000122194 0 +0 0 + +0101101 +* +Ve +1e-07 +-12 50.7 0 +0 0 + +0101101 +* +Ve +8.19920820258925e-06 +22.7970187286 50.6999918008 0 +0 0 + +0101101 +* +Ve +1e-07 +62.796057198 40.7271349116 0 +0 0 + +0101101 +* +Ve +3.2478074647072e-06 +88.4222550489 27.1014401382 0 +0 0 + +0101101 +* +Ve +1e-07 +100.2 7.5 0 +0 0 + +0101101 +* +Ve +8.12300812363715e-06 +100.199991877 -2.50002261243 0 +0 0 + +0101101 +* +Ve +1e-07 +71 -31.7 0 +0 0 + +0101101 +* +Ve +1e-07 +-38 -32.5 1 +0 0 + +0101101 +* +Ve +1e-07 +71 -32.5 1 +0 0 + +0101101 +* +Ve +1e-07 +101 -2.5 1 +0 0 + +0101101 +* +Ve +1e-07 +101 7.5 1 +0 0 + +0101101 +* +Ve +1e-07 +88.7978026727 27.8078176435 1 +0 0 + +0101101 +* +Ve +1e-07 +63.1716344482 41.4334929859 1 +0 0 + +0101101 +* +Ve +1e-07 +22.7970800486 51.5 1 +0 0 + +0101101 +* +Ve +1e-07 +-12 51.5 1 +0 0 + +0101101 +* +Ve +1e-07 +-66 -2.5 1 +0 0 + +0101101 +* +Ve +1e-07 +-66 -4.5 1 +0 0 + +0101101 +* +Ve +1.00001412032745e-07 +11.2 -1.26637722812e-14 0 +0 0 + +0101101 +* +Ve +1e-07 +11.4 -2.79219470206e-15 0.2 +0 0 + +0101101 +* +Ve +1.00001412032745e-07 +-11.2 6.37243841492e-15 0 +0 0 + +0101101 +* +Ve +1e-07 +-11.4 1.39609735103e-15 0.2 +0 0 + +0101101 +* +Ve +1e-07 +11.4 -2.79219470206e-15 2.8 +0 0 + +0101101 +* +Ve +1e-07 +-11.4 1.39609735103e-15 2.8 +0 0 + +0101101 +* +Ve +1.00000298427949e-07 +11.2 -1.26637722812e-14 3 +0 0 + +0101101 +* +Ve +1.0000024158453e-07 +-11.2 6.37243841492e-15 3 +0 0 + +0101101 +* +Ve +1.00000170530257e-07 +10 0 4.6 +0 0 + +0101101 +* +Ve +1.00000198951966e-07 +-10 1.22464679915e-15 4.6 +0 0 + +0101101 +* +Ve +1.00000198951966e-07 +4.69837027832 -8.60030910653 20.4 +0 0 + +0101101 +* +Ve +1.00000198951966e-07 +-4.69837027832 8.60030910653 20.4 +0 0 + +0101101 +* +Ve +1.00000971340767e-07 +-8.2 -1.02756156045e-14 3 +0 0 + +0101101 +* +Ve +1.0000024158453e-07 +8.2 -2.36365216814e-15 3 +0 0 + +0101101 +* +Ve +1.00000369482223e-07 +8 -1.61702895938e-14 2.8 +0 0 + +0101101 +* +Ve +1.00004870178299e-07 +6404.64207793264 -86.2689132546869 4437.73762581774 +0 0 + +0101101 +* +Ve +1.00000957204186e-07 +-8 9.79717439318e-16 2.8 +0 0 + +0101101 +* +Ve +1.00004217536526e-07 +6410.98368883701 -100.263903672191 4433.27397099784 +0 0 + +0101101 +* +Ve +1.00000539579026e-07 +-4.3627724013 7.9860013132 3.1 +0 0 + +0101101 +* +Ve +1.00000255795385e-07 +4.3627724013 -7.9860013132 3.1 +0 0 + +0101101 +* +Ve +1e-07 +-8.2 -6.63408408378e-15 0 +0 0 + +0101101 +* +Ve +1e-07 +8.2 -2.36365216814e-15 0 +0 0 + +0101101 +* +Ve +1e-07 +-8 9.79717439318e-16 0.2 +0 0 + +0101101 +* +Ve +1e-07 +8 -1.61702895938e-14 0.2 +0 0 + +0101101 +* +Ve +1.00000957204186e-07 +6412.20702825104 -97.4700003984992 4441.18023290819 +0 0 + +0101101 +* +Ve +1.00004217536526e-07 +-3.83540430883 7.02066049512 22.8755002002 +0 0 + +0101101 +* +Ve +1.00000412114787e-07 +6400.36570700895 -91.262620383698 4432.39094712416 +0 0 + +0101101 +* +Ve +3.37174408389521e-07 +3.83540430883 -7.02066049512 22.8755002002 +0 0 + +0101101 +* +Ve +1.00001379038797e-07 +9.2 -2.61904017896e-15 0 +0 0 + +0101101 +* +Ve +1e-07 +9.4 -1.06512131276e-14 0.2 +0 0 + +0101101 +* +Ve +1.00001379038797e-07 +-9.2 -7.41025647455e-15 0 +0 0 + +0101101 +* +Ve +1e-07 +-9.4 1.1511679912e-15 0.2 +0 0 + +0101101 +* +Ve +1e-07 +9.4 -1.06512131276e-14 2.8 +0 0 + +0101101 +* +Ve +1e-07 +-9.4 1.1511679912e-15 2.8 +0 0 + +0101101 +* +Ve +1.00000971340767e-07 +9.2 -2.61904017896e-15 3 +0 0 + +0101101 +* +Ve +1.00000298427949e-07 +-9.2 -7.41025647455e-15 3 +0 0 + +0101101 +* +Ve +1.00000213162821e-07 +8 0 4.6 +0 0 + +0101101 +* +Ve +1.00000213162821e-07 +-8 9.79717439318e-16 4.6 +0 0 + +0101101 +* +Ve +1.00000198951966e-07 +3.73951920111 -6.84514398274 19.4 +0 0 + +0101101 +* +Ve +1.00000198951966e-07 +-3.73951920111 6.84514398274 19.4 +0 0 + +0101101 +* +Ve +1.00000971340767e-07 +-6.2 4.51549178933e-16 3 +0 0 + +0101101 +* +Ve +1.00000971340767e-07 +6.2 -1.82629386748e-15 3 +0 0 + +0101101 +* +Ve +1.00000981681071e-07 +6 -1.46957615898e-15 2.8 +0 0 + +0101101 +* +Ve +1.00000961729502e-07 +6460.31275177981 -130.465070240154 4466.15687955259 +0 0 + +0101101 +* +Ve +1.00000961729502e-07 +-6 7.34788079488e-16 2.8 +0 0 + +0101101 +* +Ve +1.00000981681071e-07 +6465.0689599581 -140.961313053285 4462.80913843767 +0 0 + +0101101 +* +Ve +1.0000140054444e-07 +-3.30803621637 6.05531967704 3.1 +0 0 + +0101101 +* +Ve +6.18757156427329e-07 +3.30803621637 -6.05531967704 3.1 +0 0 + +0101101 +* +Ve +1e-07 +6.2 -1.82629386748e-15 0 +0 0 + +0101101 +* +Ve +1e-07 +-6.2 4.51549178933e-16 0 +0 0 + +0101101 +* +Ve +1e-07 +-6 7.34788079488e-16 0.2 +0 0 + +0101101 +* +Ve +1e-07 +6 -1.46957615898e-15 0.2 +0 0 + +0101101 +* +Ve +1.00001287475203e-07 +6465.57126395255 -139.165050478251 4469.08692836278 +0 0 + +0101101 +* +Ve +1.00000966442607e-07 +-2.87655323163 5.26549537134 21.9255437353 +0 0 + +0101101 +* +Ve +1.00000961729502e-07 +6456.69027302098 -134.50951546715 4462.49496402476 +0 0 + +0101101 +* +Ve +1.00001287475203e-07 +2.87655323163 -5.26549537134 21.9255437353 +0 0 + +0101101 +* +Ve +1.00000961729502e-07 +6458.32488170662 -97.5053092200696 4492.11265975799 +0 0 + +0101101 +* +Ve +1.00000976421199e-07 +6463.08108988492 -108.0015520332 4488.76491864307 +0 0 + +0101101 +* +Ve +1.00001287475203e-07 +6463.58339387937 -106.205289458167 4495.04270856818 +0 0 + +0101101 +* +Ve +1.00000966442607e-07 +6454.7024029478 -101.549754447066 4488.45074423016 +0 0 + +0101101 +* +Ve +1e-07 +-3.83540430883 7.02066049512 13 +0 0 + +0101101 +* +Ve +1e-07 +3.83540430883 -7.02066049512 13 +0 0 + +0101101 +* +Ve +1e-07 +-2.97243833935 5.44101188372 0 +0 0 + +0101101 +* +Ve +1e-07 +2.97243833935 -5.44101188372 0 +0 0 + +0101101 +* +Ve +1e-07 +2.97243833935 -5.44101188372 58 +0 0 + +0101101 +* +Ve +1e-07 +-2.97243833935 5.44101188372 58 +0 0 + +0101101 +* +Ve +1e-07 +3.83540430883 -7.02066049512 56.2 +0 0 + +0101101 +* +Ve +1e-07 +-3.83540430883 7.02066049512 56.2 +0 0 + +0101101 +* +Ve +1e-07 +-3.83540430883 7.02066049512 20.4 +0 0 + +0101101 +* +Ve +1e-07 +3.83540430883 -7.02066049512 20.4 +0 0 + +0101101 +* +Ve +1.00004690529351e-07 +4.79425538604 -8.7758256189 20.2 +0 0 + +0101101 +* +Ve +1.00000998508493e-07 +6400.68039698369 -89.1934491150955 4429.7875259515 +0 0 + +0101101 +* +Ve +1.00004130667945e-07 +-4.79425538604 8.7758256189 20.2 +0 0 + +0101101 +* +Ve +1.00001291234263e-07 +6415.48204853631 -96.9526741335962 4440.77413318154 +0 0 + +0101101 +* +Ve +1.00000397903932e-07 +6420.17798760188 -93.5691044494711 4436.83717845928 +0 0 + +0101101 +* +Ve +1.00004690529351e-07 +4.79425538604 -8.7758256189 13.2 +0 0 + +0101101 +* +Ve +1.00004019838618e-07 +-4.79425538604 8.7758256189 13.2 +0 0 + +0101101 +* +Ve +1.00000957204186e-07 +6405.37633604926 -85.8098794309699 4425.85057122923 +0 0 + +0101101 +* +Ve +1e-07 +-3.69157664725 6.75738572656 23.5 +0 0 + +0101101 +* +Ve +1e-07 +-3.69157664725 6.75738572656 26.3 +0 0 + +0101101 +* +Ve +1e-07 +3.69157664725 -6.75738572656 23.5 +0 0 + +0101101 +* +Ve +1e-07 +3.69157664725 -6.75738572656 26.3 +0 0 + +0101101 +* +Ve +1e-07 +3.83540430883 -7.02066049512 26.9244997998 +0 0 + +0101101 +* +Ve +1e-07 +-3.83540430883 7.02066049512 26.9244997998 +0 0 + +0101101 +* +Ve +1.00001301515697e-07 +-3.83540430883 7.02066049512 -7 +0 0 + +0101101 +* +Ve +1.00001338237026e-07 +3.83540430883 -7.02066049512 -7 +0 0 + +0101101 +* +Ve +4.31521155753223e-05 +-3.83540430883 7.02066049512 2.26794919243 +0 0 + +0101101 +* +Ve +4.31544218264034e-05 +3.83540430883 -7.02066049512 2.26794919243 +0 0 + +0101101 +* +Ve +1e-07 +-3.74551202035 6.85611376477 26.5341874249 +0 0 + +0101101 +* +Ve +1e-07 +3.74551202035 -6.85611376477 26.5341874249 +0 0 + +0101101 +* +Ve +1e-07 +3.74551202035 -6.85611376477 23.2658125751 +0 0 + +0101101 +* +Ve +1e-07 +-3.74551202035 6.85611376477 23.2658125751 +0 0 + +0101101 +* +Ve +1e-07 +2.73272557004 -5.00222060278 22.5 +0 0 + +0101101 +* +Ve +1e-07 +2.73272557004 -5.00222060278 25.3 +0 0 + +0101101 +* +Ve +1e-07 +-2.73272557004 5.00222060278 25.3 +0 0 + +0101101 +* +Ve +1e-07 +-2.73272557004 5.00222060278 22.5 +0 0 + +0101101 +* +Ve +1e-07 +2.87655323163 -5.26549537134 19.4 +0 0 + +0101101 +* +Ve +1e-07 +-2.87655323163 5.26549537134 19.4 +0 0 + +0101101 +* +Ve +1e-07 +2.79436599644 -5.11505264645 22.253804458 +0 0 + +0101101 +* +Ve +1e-07 +-2.79436599644 5.11505264645 22.253804458 +0 0 + +0101101 +* +Ve +1e-07 +-2.79436599644 5.11505264645 25.546195542 +0 0 + +0101101 +* +Ve +1e-07 +2.79436599644 -5.11505264645 25.546195542 +0 0 + +0101101 +* +Ve +1e-07 +2.87655323163 -5.26549537134 25.8744562647 +0 0 + +0101101 +* +Ve +1e-07 +-2.87655323163 5.26549537134 25.8744562647 +0 0 + +0101101 +* +Ve +1e-07 +-2.87655323163 5.26549537134 12 +0 0 + +0101101 +* +Ve +1e-07 +2.87655323163 -5.26549537134 12 +0 0 + +0101101 +* +Ve +1e-07 +-2.01358726214 3.68584675994 0 +0 0 + +0101101 +* +Ve +1e-07 +2.01358726214 -3.68584675994 0 +0 0 + +0101101 +* +Ve +1e-07 +-2.01358726214 3.68584675994 56 +0 0 + +0101101 +* +Ve +1e-07 +2.01358726214 -3.68584675994 56 +0 0 + +0101101 +* +Ve +1.00001350629417e-07 +2.87655323163 -5.26549537134 -4.5 +0 0 + +0101101 +* +Ve +1.00001350629417e-07 +-2.87655323163 5.26549537134 -4.5 +0 0 + +0101101 +* +Ve +1.00001350629417e-07 +2.87655323163 -5.26549537134 2.26794919243 +0 0 + +0101101 +* +Ve +1.00001350629417e-07 +-2.87655323163 5.26549537134 2.26794919243 +0 0 + +0101101 +* +Ve +1e-07 +2.87655323163 -5.26549537134 54.2 +0 0 + +0101101 +* +Ve +1e-07 +-2.87655323163 5.26549537134 54.2 +0 0 + +0101101 +* +Ve +1.00004572363208e-07 +3.83540430883 -7.02066049512 19.2 +0 0 + +0101101 +* +Ve +1.00001311408595e-07 +6457.03853462308 -132.416154800226 4459.86339726184 +0 0 + +0101101 +* +Ve +1.00004714321203e-07 +-3.83540430883 7.02066049512 19.2 +0 0 + +0101101 +* +Ve +1.00001394981972e-07 +6468.87985586517 -138.623534815027 4468.65268304587 +0 0 + +0101101 +* +Ve +1.00001291234263e-07 +6473.57579493074 -135.239965130902 4464.71572832361 +0 0 + +0101101 +* +Ve +1.00004572363208e-07 +3.83540430883 -7.02066049512 12.2 +0 0 + +0101101 +* +Ve +1.00004525482328e-07 +-3.83540430883 7.02066049512 12.2 +0 0 + +0101101 +* +Ve +1.00001290060734e-07 +6461.73447368865 -129.032585116101 4455.92644253958 +0 0 + +0101101 +* +Ve +1.00001423995717e-07 +6455.0506645499 -99.4563937801419 4485.81917746724 +0 0 + +0101101 +* +Ve +1.0000140054444e-07 +6466.89198579199 -105.663773794943 4494.60846325127 +0 0 + +0101101 +* +Ve +1.0000140054444e-07 +6471.58792485756 -102.280204110818 4490.67150852901 +0 0 + +0101101 +* +Ve +1.00001423995717e-07 +6459.74660361547 -96.0728240960163 4481.88222274498 +0 0 + +0101101 +* +Ve +1e-07 +23 0 0 +0 0 + +0101101 +* +Ve +1e-07 +-23 2.81668763804e-15 0 +0 0 + +0101101 +* +Ve +1.00001050546506e-07 +-21.4 2.62074415018e-15 0 +0 0 + +0101101 +* +Ve +1.00027010614585e-07 +6398.15699473935 -106.150786220916 4420.73838075035 +0 0 + +0101101 +* +Ve +1.00001301515697e-07 +21.4 0 0 +0 0 + +0101101 +* +Ve +1.00026033556668e-07 +6411.56530577644 -84.6356611660076 4455.22253057322 +0 0 + +0101101 +* +Ve +1.00001369044566e-07 +-21.4 2.62074415018e-15 1.6 +0 0 + +0101101 +* +Ve +1.00027010614585e-07 +10.2597065261 -18.7802668245 3.1 +0 0 + +0101101 +* +Ve +1.00001355033128e-07 +21.4 0 1.6 +0 0 + +0101101 +* +Ve +1.00026033556668e-07 +-10.2597065261 18.7802668245 3.1 +0 0 + +0101101 +* +Ve +1.0000024158453e-07 +-11.5 1.40834381902e-15 1.6 +0 0 + +0101101 +* +Ve +1.00000284217094e-07 +11.5 0 1.6 +0 0 + +0101101 +* +Ve +1e-07 +11.5 0 4.6 +0 0 + +0101101 +* +Ve +1e-07 +-11.5 1.40834381902e-15 4.6 +0 0 + +0101101 +* +Ve +1.00001430151499e-07 +-10.2597065261 18.7802668245 0 +0 0 + +0101101 +* +Ve +1.00001430151499e-07 +10.2597065261 -18.7802668245 0 +0 0 + +0101101 +* +Ve +1.00018080457665e-07 +6400.91006162553 -100.843558814725 4431.25046712647 +0 0 + +0101101 +* +Ve +1.0000988782448e-07 +6406.79969357645 -91.3929898654043 4446.39771050663 +0 0 + +0101101 +* +Ve +1e-07 +4.21894473972 -7.72272654464 0.6 +0 0 + +0101101 +* +Ve +1e-07 +-4.21894473972 7.72272654464 0.6 +0 0 + +0101101 +* +Ve +1e-07 +-4.21894473972 7.72272654464 2.8 +0 0 + +0101101 +* +Ve +1e-07 +4.21894473972 -7.72272654464 2.8 +0 0 + +0101101 +* +Ve +1e-07 +17 0 0 +0 0 + +0101101 +* +Ve +1e-07 +-17 2.08189955855e-15 0 +0 0 + +0101101 +* +Ve +1.00001323670747e-07 +-15.4 1.88595607069e-15 0 +0 0 + +0101101 +* +Ve +1.00012492238535e-07 +6454.91463699501 -145.581430377773 4454.54981794837 +0 0 + +0101101 +* +Ve +1.00001330670319e-07 +15.4 0 0 +0 0 + +0101101 +* +Ve +1.00013415076959e-07 +6464.56360848904 -130.09858337571 4479.36551454987 +0 0 + +0101101 +* +Ve +1.00002072252543e-07 +-15.4 1.88595607069e-15 1.6 +0 0 + +0101101 +* +Ve +1.00013635816802e-07 +7.3831532945 -13.5147714531 3.1 +0 0 + +0101101 +* +Ve +1.0000140054444e-07 +15.4 0 1.6 +0 0 + +0101101 +* +Ve +1.00013415076959e-07 +-7.3831532945 13.5147714531 3.1 +0 0 + +0101101 +* +Ve +1.00001423995717e-07 +9.5 0 1.6 +0 0 + +0101101 +* +Ve +1.00001423995717e-07 +-9.5 -5.38226195277e-15 1.6 +0 0 + +0101101 +* +Ve +1e-07 +9.5 0 4.6 +0 0 + +0101101 +* +Ve +1e-07 +-9.5 -1.16341445919e-15 4.6 +0 0 + +0101101 +* +Ve +1.00013635816802e-07 +6452.92676692183 -112.621669357688 4480.50559815377 +0 0 + +0101101 +* +Ve +1.000125741253e-07 +6462.57573841585 -97.1388223556252 4505.32129475527 +0 0 + +0101101 +* +Ve +1.00001455901892e-07 +-7.3831532945 13.5147714531 0 +0 0 + +0101101 +* +Ve +1.00001455901892e-07 +7.3831532945 -13.5147714531 0 +0 0 + +0101101 +* +Ve +1.00001384227706e-07 +-47.4 -22 20.5 +0 0 + +0101101 +* +Ve +1.0000137397728e-07 +-32.6 -22 20.5 +0 0 + +0101101 +* +Ve +1e-07 +3.45186387795 -6.31859444561 0 +0 0 + +0101101 +* +Ve +1e-07 +-3.45186387795 6.31859444561 0 +0 0 + +0101101 +* +Ve +1e-07 +3.16420855479 -5.79204490848 0.6 +0 0 + +0101101 +* +Ve +1e-07 +-3.16420855479 5.79204490848 0.6 +0 0 + +0101101 +* +Ve +1e-07 +-3.16420855479 5.79204490848 2.8 +0 0 + +0101101 +* +Ve +1e-07 +3.16420855479 -5.79204490848 2.8 +0 0 + +0101101 +* +Ve +1.00000966442607e-07 +-32.6 20 20.5 +0 0 + +0101101 +* +Ve +3.0782708007892e-07 +-47.4 20 20.5 +0 0 + +0101101 +* +Ve +1e-07 +23.706941125 -9.07682120168 8 +0 0 + +0101101 +* +Ve +1e-07 +42.293058875 1.07682120168 8 +0 0 + +0101101 +* +Ve +1e-07 +37.2189447397 -11.7227265446 8 +0 0 + +0101101 +* +Ve +1e-07 +28.7810552603 3.72272654464 8 +0 0 + +0101101 +* +Ve +9.66590793534902e-05 +-77.4202418693 -35.9202418693 52 +0 0 + +0101101 +* +Ve +9.66590793534902e-05 +-86.5 -14 52 +0 0 + +0101101 +* +Ve +1e-07 +-77.365502635 -35.9749811036 52 +0 0 + +0101101 +* +Ve +1e-07 +-55.5 -45 52 +0 0 + +0101101 +* +Ve +0.000248410548413188 +53.4997515897 -45 52 +0 0 + +0101101 +* +Ve +0.000102894900285201 +86.5 -12 52 +0 0 + +0101101 +* +Ve +9.45558587697886e-05 +86.5 -1.99851834808 52 +0 0 + +0101101 +* +Ve +9.45558587697886e-05 +72.706232063 20.9582051707 52 +0 0 + +0101101 +* +Ve +0.000236848210102444 +47.0829690879 34.5823357644 52 +0 0 + +0101101 +* +Ve +0.000236848210102444 +23 43.2221732213 52 +0 0 + +0101101 +* +Ve +1e-07 +5.3 45 52 +0 0 + +0101101 +* +Ve +1e-07 +-29.5 45 52 +0 0 + +0101101 +* +Ve +1e-07 +-86.5 -12 52 +0 0 + +0101101 +* +Ve +1e-07 +-84.5 -12 52 +0 0 + +0101101 +* +Ve +1e-07 +-84.5 -14 52 +0 0 + +0101101 +* +Ve +1e-07 +-29.5 43 52 +0 0 + +0101101 +* +Ve +1e-07 +5.3 43 52 +0 0 + +0101101 +* +Ve +1e-07 +46.1440259624 32.8164405787 52 +0 0 + +0101101 +* +Ve +1e-07 +71.7672889374 19.192309985 52 +0 0 + +0101101 +* +Ve +1e-07 +84.4999999999 -1.99851289317 52 +0 0 + +0101101 +* +Ve +1e-07 +84.5 -12 52 +0 0 + +0101101 +* +Ve +1e-07 +53.5 -43 52 +0 0 + +0101101 +* +Ve +1e-07 +-55.5 -43 52 +0 0 + +0101101 +* +Ve +1e-07 +44.0267873879 -24.1843989235 20.5 +0 0 + +0101101 +* +Ve +1e-07 +21.9732126121 16.1843989235 20.5 +0 0 + +0101101 +* +Ve +1e-07 +28.7810552603 3.72272654464 19.9 +0 0 + +0101101 +* +Ve +1e-07 +37.2189447397 -11.7227265446 19.9 +0 0 + +0101101 +* +Ve +1e-07 +-33.2 20 19.9 +0 0 + +0101101 +* +Ve +1e-07 +-46.8 20 19.9 +0 0 + +0101101 +* +Ve +1e-07 +-57 -22 20.5 +0 0 + +0101101 +* +Ve +1e-07 +-23 -22 20.5 +0 0 + +0101101 +* +Ve +1e-07 +-57 20 20.5 +0 0 + +0101101 +* +Ve +1e-07 +-23 20 20.5 +0 0 + +0101101 +* +Ve +1e-07 +-33.2 -22 19.9 +0 0 + +0101101 +* +Ve +1e-07 +-46.8 -22 19.9 +0 0 + +0101101 +* +Ve +1e-07 +44.2665001572 -24.6231902044 19.8 +0 0 + +0101101 +* +Ve +1e-07 +44.5062129265 -25.0619814854 20.3 +0 0 + +0101101 +* +Ve +1e-07 +21.4937870735 17.0619814854 20.3 +0 0 + +0101101 +* +Ve +1e-07 +21.7334998428 16.6231902044 19.8 +0 0 + +0101101 +* +Ve +1e-07 +44.0267873879 -24.1843989235 20.3 +0 0 + +0101101 +* +Ve +1e-07 +21.9732126121 16.1843989235 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-22 20 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-22.5 20 19.8 +0 0 + +0101101 +* +Ve +1e-07 +-22 -22 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-22.5 -22 19.8 +0 0 + +0101101 +* +Ve +1e-07 +-58 -22 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-57.5 -22 19.8 +0 0 + +0101101 +* +Ve +1e-07 +-58 20 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-57.5 20 19.8 +0 0 + +0101101 +* +Ve +1e-07 +-57 20 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-23 20 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-23 -22 20.3 +0 0 + +0101101 +* +Ve +1e-07 +-57 -22 20.3 +0 0 + +0101101 +* +Ve +0.000713251616780183 +-55.5 -45 50.9999999935 +0 0 + +0101101 +* +Ve +0.000713251616780183 +-77.4202418693 -35.9202418693 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +3.04109589041 -1 32.3 +0 0 + +0101101 +* +Ve +1e-07 +-15.9589041096 -1 32.3 +0 0 + +0101101 +* +Ve +1e-07 +-15.9589041096 -1 33.5 +0 0 + +0101101 +* +Ve +1e-07 +3.04109589041 -1 33.5 +0 0 + +0101101 +* +Ve +1e-07 +1.54109589041 -1 32.3 +0 0 + +0101101 +* +Ve +1e-07 +-14.4589041096 -1 32.3 +0 0 + +0101101 +* +Ve +1e-07 +-22 19.9999999999 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-22 -22 33.5 +0 0 + +0101101 +* +Ve +3.78071420996286e-05 +16.0913576765 -21.0322580645 33.5 +0 0 + +0101101 +* +Ve +1e-07 +11.1596703322 -19 33.5 +0 0 + +0101101 +* +Ve +1e-07 +21.4937870735 17.0619814854 33.5 +0 0 + +0101101 +* +Ve +2.94745543770314e-05 +22.7000247518 17.6774193548 33.5 +0 0 + +0101101 +* +Ve +1e-07 +19.6958653043 17 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-15.3220746415 17 33.5 +0 0 + +0101101 +* +Ve +3.30224838630722e-05 +-22.2318937419 22.88 33.5 +0 0 + +0101101 +* +Ve +3.30224830883139e-05 +-22.2318937419 -24.88 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-15.3220746415 -19 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-58 -22 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-58 19.9999999995 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-55.5 -43 38.8 +0 0 + +0101101 +* +Ve +1e-07 +53.5 -43 38.8 +0 0 + +0101101 +* +Ve +1e-07 +-84.5 -14 38.8 +0 0 + +0101101 +* +Ve +1e-07 +84.5 -12 38.8 +0 0 + +0101101 +* +Ve +1e-07 +-84.5 -12 38.8 +0 0 + +0101101 +* +Ve +4.58860415643713e-07 +84.5 -1.99851289317 38.8 +0 0 + +0101101 +* +Ve +2.3959515903456e-07 +71.7672889374 19.1923099849 38.8 +0 0 + +0101101 +* +Ve +1e-07 +46.1440259624 32.8164405787 38.8 +0 0 + +0101101 +* +Ve +1e-07 +5.3 43 38.8 +0 0 + +0101101 +* +Ve +1e-07 +-29.5 43 38.8 +0 0 + +0101101 +* +Ve +1e-07 +5.3 42.2 38 +0 0 + +0101101 +* +Ve +1e-07 +45.7684487121 32.1100825044 38 +0 0 + +0101101 +* +Ve +2.3959515903456e-07 +71.3917116872 18.4859519107 38 +0 0 + +0101101 +* +Ve +4.58860415643713e-07 +83.6999999999 -1.99851071121 38 +0 0 + +0101101 +* +Ve +1e-07 +83.7 -12 38 +0 0 + +0101101 +* +Ve +1e-07 +53.5 -42.2 38 +0 0 + +0101101 +* +Ve +1e-07 +-55.5 -42.2 38 +0 0 + +0101101 +* +Ve +1e-07 +-83.7 -14 38 +0 0 + +0101101 +* +Ve +1e-07 +-83.7 -12 38 +0 0 + +0101101 +* +Ve +1e-07 +-29.5 42.2 38 +0 0 + +0101101 +* +Ve +1e-07 +-22.2318937419 22.88 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-15.3220746415 17 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-15.3220746415 -19 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-22.2318937419 -24.88 37.6 +0 0 + +0101101 +* +Ve +1e-07 +44.5062129265 -25.0619814854 37.6 +0 0 + +0101101 +* +Ve +1e-07 +22.7000247518 17.6774193548 37.6 +0 0 + +0101101 +* +Ve +1e-07 +19.6958653043 17 37.6 +0 0 + +0101101 +* +Ve +1e-07 +11.1596703322 -19 37.6 +0 0 + +0101101 +* +Ve +1e-07 +16.0913576765 -21.0322580645 37.6 +0 0 + +0101101 +* +Ve +3.10235130105838e-05 +-57.9855942354 -22.72 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-57.9855942354 -22.72 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-64.9799919936 -16 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-64.9799919936 -16 37.6 +0 0 + +0101101 +* +Ve +3.1023396466423e-05 +-57.9855942354 20.72 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-57.9855942354 20.72 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-64.9799919936 14 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-64.9799919936 14 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-73.88854382 -16 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-73.88854382 -16 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-77.2958855 -14.0952380952 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-77.2958855 -14.0952380952 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-73.88854382 14 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-73.88854382 14 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-77.2958855 12.0952380952 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-77.2958855 12.0952380952 37.6 +0 0 + +0101101 +* +Ve +1e-07 +-58.3852741073 -22.736 38 +0 0 + +0101101 +* +Ve +1e-07 +-64.9799919936 -16.4 38 +0 0 + +0101101 +* +Ve +1e-07 +-73.88854382 -16.4 38 +0 0 + +0101101 +* +Ve +1e-07 +-77.636619668 -14.3047619048 38 +0 0 + +0101101 +* +Ve +1e-07 +-77.636619668 12.3047619047 38 +0 0 + +0101101 +* +Ve +1e-07 +-73.88854382 14.4 38 +0 0 + +0101101 +* +Ve +1e-07 +-64.9799919936 14.4 38 +0 0 + +0101101 +* +Ve +1e-07 +-58.3852741073 20.736 38 +0 0 + +0101101 +* +Ve +1e-07 +-21.8370469361 22.944 38 +0 0 + +0101101 +* +Ve +1e-07 +-15.3220746415 17.4 38 +0 0 + +0101101 +* +Ve +1e-07 +19.6958653043 17.4 38 +0 0 + +0101101 +* +Ve +1e-07 +22.5283584976 18.0387096774 38 +0 0 + +0101101 +* +Ve +1e-07 +44.6979831419 -25.4130145101 38 +0 0 + +0101101 +* +Ve +1e-07 +15.8095469711 -21.3161290323 38 +0 0 + +0101101 +* +Ve +1e-07 +11.1596703322 -19.4 38 +0 0 + +0101101 +* +Ve +1e-07 +-15.3220746415 -19.4 38 +0 0 + +0101101 +* +Ve +1e-07 +-21.8370469361 -24.944 38 +0 0 + +0101101 +* +Ve +1e-07 +-60.9589041096 -1 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-75.9589041096 -1 33.5 +0 0 + +0101101 +* +Ve +1e-07 +-60.9589041096 -1 32.3 +0 0 + +0101101 +* +Ve +1e-07 +-75.9589041096 -1 32.3 +0 0 + +0101101 +* +Ve +1.00000971340767e-07 +-74.4589041096 -1 32.3 +0 0 + +0101101 +* +Ve +1.00000971340767e-07 +5.26549537134 5 -2.87655323163 +0 0 + +0101101 +* +Ve +1.00000966442607e-07 +-62.4589041096 -1 32.3 +0 0 + +0101101 +* +Ve +1.00000966442607e-07 +-5.26549537134 5 2.87655323163 +0 0 + +0101101 +* +Ve +0.000371546529634028 +5.3 45 50.9999999935 +0 0 + +0101101 +* +Ve +0.000371546529634028 +23 43.2221732213 50.9999999935 +0 0 + +0101101 +* +Ve +0.0029973161977681 +-86.5 -12 50.9999999935 +0 0 + +0101101 +* +Ve +0.0029973161977681 +-29.5 45 50.9999999935 +0 0 + +0101101 +* +Ve +1.00000931000804e-07 +6430.18947349962 -152.353942639129 4445.90782668008 +0 0 + +0101101 +* +Ve +1e-07 +-12.1983481148 -45 23.4999999945 +0 0 + +0101101 +* +Ve +1.00000931000804e-07 +6435.56127465539 -157.395740690043 4447.98211415285 +0 0 + +0101101 +* +Ve +1e-07 +-19.2694159267 -47.9289321881 23.4999999945 +0 0 + +0101101 +* +Ve +1.00000909938683e-07 +6381.56745452487 -126.865625694371 4409.81786581941 +0 0 + +0101101 +* +Ve +1e-07 +53.4997515897 -45 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +53.4997515897 -45 50.9999999935 +0 0 + +0101101 +* +Ve +1.00000198951966e-07 +6439.55429844866 -163.342670482713 4447.63391229729 +0 0 + +0101101 +* +Ve +1e-07 +-24.3404837385 -53 23.4999999945 +0 0 + +0101101 +* +Ve +1.00000909605717e-07 +6432.99256059412 -83.2024751424518 4508.68272572281 +0 0 + +0101101 +* +Ve +1e-07 +-21.9289321881 47.9289321881 23.4999999945 +0 0 + +0101101 +* +Ve +1.00001819100419e-07 +6427.89801356429 -82.7576725660434 4502.988308721 +0 0 + +0101101 +* +Ve +1e-07 +-14.8578643763 45 23.4999999945 +0 0 + +0101101 +* +Ve +0.000550097116054104 +6412.97952933715 -74.9372022866362 4491.91498179606 +0 0 + +0101101 +* +Ve +0.000371546416342552 +5.3 45 23.4999999945 +0 0 + +0101101 +* +Ve +1.00001819100419e-07 +6436.50555467592 -81.1903009734046 4514.60231060694 +0 0 + +0101101 +* +Ve +1e-07 +-27 53 23.4999999945 +0 0 + +0101101 +* +Ve +0.000144415167202496 +-78.862687877 16.500914749 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-57.7899311821 53 23.4999999945 +0 0 + +0101101 +* +Ve +1.00001094235813e-07 +6459.29264631024 -93.1356011907089 4531.51615463383 +0 0 + +0101101 +* +Ve +0.000147176562999176 +6476.61573686158 -129.953898222422 4520.53581600895 +0 0 + +0101101 +* +Ve +0.000147176562999176 +6483.61451013019 -155.242966596171 4507.14945116506 +0 0 + +0101101 +* +Ve +0.000144415167202496 +-86.5 -11.9487958602 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-86.5 -14 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-86.5 -14 23.4999999945 +0 0 + +0101101 +* +Ve +1.00000925343818e-07 +6483.71159411408 -156.852661792629 4505.88181774103 +0 0 + +0101101 +* +Ve +0.000550097116054104 +6399.96421230406 -69.465442510392 4481.09315167244 +0 0 + +0101101 +* +Ve +0.000371546416342552 +23 43.2221811833 23.4999999945 +0 0 + +0101101 +* +Ve +1.00000227373675e-07 +6465.30390478055 -137.323817365449 4500.70924581299 +0 0 + +0101101 +* +Ve +1.00000227373675e-07 +6474.18489571212 -141.97935237655 4507.30121015102 +0 0 + +0101101 +* +Ve +1.00001193822812e-07 +6429.77994105427 -118.701677321045 4474.34138846089 +0 0 + +0101101 +* +Ve +1.00001193711796e-07 +6417.93861981217 -112.49429730624 4465.55210267685 +0 0 + +0101101 +* +Ve +1e-07 +47.0829690879 34.5823357644 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +72.706232063 20.9582051707 50.9999999935 +0 0 + +0101101 +* +Ve +1.00000227373675e-07 +6364.23125527898 -67.6531440817013 4440.02898858053 +0 0 + +0101101 +* +Ve +1e-07 +72.706232063 20.9582051707 23.4999999945 +0 0 + +0101101 +* +Ve +1.00000056843419e-07 +6382.54975242032 -66.9023560841419 4462.52426630254 +0 0 + +0101101 +* +Ve +1e-07 +47.0829690879 34.5823357644 23.4999999945 +0 0 + +0101101 +* +Ve +1.00000227373675e-07 +6355.10927517896 -80.3171280698723 4418.26451805585 +0 0 + +0101101 +* +Ve +1e-07 +86.5 -1.99851834808 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +86.5 -1.99851834808 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +86.5 -12 23.4999999945 +0 0 + +0101101 +* +Ve +1.00000326849658e-07 +6355.58264770428 -88.1658529530638 4412.08365473476 +0 0 + +0101101 +* +Ve +1e-07 +86.5 -12 50.9999999935 +0 0 + +0101101 +* +Ve +1.00000925343818e-07 +6478.02931361742 -170.532113506207 4487.34743616263 +0 0 + +0101101 +* +Ve +1e-07 +-77.4202418693 -35.9202418693 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-60.3404837385 -53 23.4999999945 +0 0 + +0101101 +* +Ve +1.00001080024958e-07 +6466.19727124337 -177.309275516015 4467.40980531137 +0 0 + +0101101 +* +Ve +1.00000284217094e-07 +6444.64383464506 -142.452376836434 4471.65855133861 +0 0 + +0101101 +* +Ve +1.00001193711796e-07 +6454.70895770084 -147.728649849015 4479.12944425504 +0 0 + +0101101 +* +Ve +1.00001193822812e-07 +6442.65596457188 -109.492615816349 4497.61433154401 +0 0 + +0101101 +* +Ve +1.00000284217094e-07 +6452.72108762765 -114.76888882893 4505.08522446044 +0 0 + +0101101 +* +Ve +1.00001820764029e-07 +6387.56198298852 -94.9279428418648 4444.41651515181 +0 0 + +0101101 +* +Ve +1.00000911269327e-07 +6402.03486438912 -110.359517477023 4448.41705926717 +0 0 + +0101101 +* +Ve +1.40961161397861e-05 +-63.3801189832 -27.4193912828 13 +0 0 + +0101101 +* +Ve +8.25197284423225e-06 +-16.8129206538 -28.1935283908 13 +0 0 + +0101101 +* +Ve +1.40961161397861e-05 +-63.3801189832 -27.4193912828 7 +0 0 + +0101101 +* +Ve +8.25197284423225e-06 +-16.8129206538 -28.1935283908 7 +0 0 + +0101101 +* +Ve +1.50991509780834e-06 +-10.0500417363 -23.0000015099 13 +0 0 + +0101101 +* +Ve +1.50991509780834e-06 +-10.0500417363 -23.0000015099 7 +0 0 + +0101101 +* +Ve +1.47353993359151e-05 +-53.6384116116 23.1613367021 7 +0 0 + +0101101 +* +Ve +1.47353993359151e-05 +-53.6384116116 23.1613367021 13 +0 0 + +0101101 +* +Ve +2.41813512096272e-06 +-26.4742074798 23.612876573 13 +0 0 + +0101101 +* +Ve +2.41813512096272e-06 +-26.4742074798 23.612876573 7 +0 0 + +0101101 +* +Ve +2.23812238144012e-06 +-10.0500417363 11 13 +0 0 + +0101101 +* +Ve +2.23812238144012e-06 +-10.0500417363 11 7 +0 0 + +0101101 +* +Ve +1e-07 +8.17561682539 11.0000000969 13 +0 0 + +0101101 +* +Ve +1.00001346361305e-07 +8.17561682539 11.0000000969 7 +0 0 + +0101101 +* +Ve +4.85179791956173e-05 +18.595795595 14.5678921097 13 +0 0 + +0101101 +* +Ve +4.85179791956173e-05 +18.595795595 14.5678921097 7 +0 0 + +0101101 +* +Ve +9.78915945777831e-05 +53.4692286022 -15.5438598581 13 +0 0 + +0101101 +* +Ve +9.78915945777831e-05 +53.4692286022 -15.5438598581 7 +0 0 + +0101101 +* +Ve +3.57702388541758e-06 +14.9819778151 -19.0864479255 13 +0 0 + +0101101 +* +Ve +3.57702388541758e-06 +14.9819778151 -19.0864479255 7 +0 0 + +0101101 +* +Ve +2.12504818416707e-07 +1.94762488955 -13 13 +0 0 + +0101101 +* +Ve +2.12504818416707e-07 +1.94762488955 -13 7 +0 0 + +0101101 +* +Ve +2.05690205655841e-06 +-10.0500417363 -12.9999979431 7 +0 0 + +0101101 +* +Ve +2.05690205655841e-06 +-10.0500417363 -12.9999979431 13 +0 0 + +0101101 +* +Ve +2.61637537467713e-06 +-26.4742051493 -25.612877204 13 +0 0 + +0101101 +* +Ve +2.61637537467713e-06 +-26.4742051493 -25.612877204 7 +0 0 + +0101101 +* +Ve +1.4535112141792e-05 +-53.6383974584 -25.1613334209 13 +0 0 + +0101101 +* +Ve +0.00112587558913171 +-53.6383974584 -25.1613334209 7 +0 0 + +0101101 +* +Ve +2.04518801056886e-06 +1.94762488955 -23 13 +0 0 + +0101101 +* +Ve +2.04518801056886e-06 +1.94762488955 -23 7 +0 0 + +0101101 +* +Ve +3.89399877296503e-06 +7.3147213727 -25.5061936553 13 +0 0 + +0101101 +* +Ve +3.89399877296503e-06 +7.3147213727 -25.5061936553 7 +0 0 + +0101101 +* +Ve +0.000140504468508401 +62.1795402395 -20.4561415476 13 +0 0 + +0101101 +* +Ve +0.000140504468508401 +62.1795402395 -20.4561415476 7 +0 0 + +0101101 +* +Ve +7.59962679524456e-05 +12.4663281178 22.4690972667 13 +0 0 + +0101101 +* +Ve +7.59962679524456e-05 +12.4663281178 22.4690972667 7 +0 0 + +0101101 +* +Ve +1.70641706663236e-06 +8.1756168254 20.9999982936 13 +0 0 + +0101101 +* +Ve +1.70641706663236e-06 +8.1756168254 20.9999982936 7 +0 0 + +0101101 +* +Ve +1.03725141244299e-06 +-10.0500417363 21 7 +0 0 + +0101101 +* +Ve +1.03725141244299e-06 +-10.0500417363 21 13 +0 0 + +0101101 +* +Ve +7.88856919964979e-06 +-16.8129282627 26.1935263512 13 +0 0 + +0101101 +* +Ve +7.88856919964979e-06 +-16.8129282627 26.1935263512 7 +0 0 + +0101101 +* +Ve +1.45373227877628e-05 +-63.3801326675 25.4193944552 13 +0 0 + +0101101 +* +Ve +1.45373227877628e-05 +-63.3801326675 25.4193944552 7 +0 0 + +0101101 +* +Ve +1.09681772921185e-05 +-67.2826849149 20.6366012954 7 +0 0 + +0101101 +* +Ve +1e-07 +-67.2826803448 20.6365913247 13 +0 0 + +0101101 +* +Ve +2.61847261823001e-05 +-70.1993377411 16.0912726747 13 +0 0 + +0101101 +* +Ve +2.61847261823001e-05 +-70.1993377411 16.0912726747 7 +0 0 + +0101101 +* +Ve +4.54417690769802e-06 +-63.1160101735 11.5459683188 7 +0 0 + +0101101 +* +Ve +1e-07 +-63.1160120669 11.5459724497 13 +0 0 + +0101101 +* +Ve +1e-07 +-67.282679463 -22.6365903175 13 +0 0 + +0101101 +* +Ve +2.65464597541343e-06 +-67.2826783569 -22.6365879043 7 +0 0 + +0101101 +* +Ve +2.47616247640209e-05 +-70.1993377411 -18.0912726864 13 +0 0 + +0101101 +* +Ve +2.47616247569155e-05 +-70.1993377411 -18.0912726864 7 +0 0 + +0101101 +* +Ve +0.00112587558913171 +-63.1160099201 -13.545968073 7 +0 0 + +0101101 +* +Ve +1e-07 +-63.116011955 -13.5459725127 13 +0 0 + +0101101 +* +Ve +1e-07 +-13.918131324 -107.60845785 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +26.9463390627 -111.816453577 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +26.9463390627 -111.816453577 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +-13.918131324 -107.60845785 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +19.2519069336 -111.02412378 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +19.2519069357 -111.02412378 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-7.6060753471 -108.258438244 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-7.60607535185 -108.258438244 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +87.4999999998 -28.1011259381 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +87.4999999998 -28.1011259381 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +87.4999999998 9.78680670616 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +87.4999999998 9.78680670616 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +-164.725782427 -10.1239633345 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +-154.507054498 -16.7295136466 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +-164.725782427 -10.1239633345 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-154.507054498 -16.7295136466 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-160.470729776 31.1974838296 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-160.470729776 31.1974838296 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +-161.199165614 24.1235354038 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +-161.199165614 24.1235354054 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-163.759985554 -0.744966704868 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +-163.759985554 -0.744966709209 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-150.035529897 36.0902916054 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-150.035529897 36.0902916054 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +52.734826902 104.680750665 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +6.42273519593 109.449712116 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +6.42273519593 109.449712116 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +52.734826902 104.680750665 50.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +43.5765973829 105.62381417 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +12.6900722254 108.804336629 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +43.5765973847 105.62381417 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +12.6900722199 108.804336631 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +18.1720364778 68.8390811313 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +18.1720364714 68.8390811331 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +26.2864929577 69.5497187232 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +26.2864929577 69.5497187232 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +18.310383011 70.1900120019 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +27.2234599515 69.858278226 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +27.2234599506 69.8582782256 51.000000003 +0 0 + +0101101 +* +Ve +1e-07 +19.0988811881 91.3755089938 51.000000003 +0 0 + +0101101 +* +Ve +1e-07 +19.0988811885 91.375508994 41.9999999963 +0 0 + +0101101 +* +Ve +5.66660184374918e-05 +23.7765141778 93.1417120015 50.9999999941 +0 0 + +0101101 +* +Ve +1e-07 +23.7765141778 93.1417120015 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +32.8343241681 72.0247748446 41.9999999963 +0 0 + +0101101 +* +Ve +5.66660184374918e-05 +31.9011446799 71.6245007695 50.9999999979 +0 0 + +0101101 +* +Ve +1e-07 +31.9011446799 71.6245007695 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +32.8343241719 72.0247748465 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +41.1491691016 81.9203816206 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +41.1491691053 81.9203816209 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +9.85083089407 81.0796183773 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +9.85083090528 81.0796183766 32.9999999988 +0 0 + +0101101 +* +Ve +0.000615204615200856 +28.5386255935 101.847047723 41.9999999963 +0 0 + +0101101 +* +Ve +0.000615204615200856 +26.3097969048 98.5255536806 41.9999999963 +0 0 + +0101101 +* +Ve +0.000615204615486993 +28.5386255935 101.847047723 32.9999999988 +0 0 + +0101101 +* +Ve +0.000615204615486993 +26.3097969048 98.5255536806 32.9999999988 +0 0 + +0101101 +* +Ve +2.46374048269097e-05 +30.3797274113 80.40992642 32.9999999988 +0 0 + +0101101 +* +Ve +2.46374048269097e-05 +20.6202725925 82.59007358 32.9999999988 +0 0 + +0101101 +* +Ve +1e-07 +20.6202725925 82.59007358 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +30.3797274113 80.40992642 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +26.3097969048 98.5255536806 49.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +28.5386255935 101.847047723 49.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +26.3097969048 98.5255536806 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +28.5386255935 101.847047723 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +3.6202725862 -82.4099264176 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +3.6202725862 -82.4099264176 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +13.379727405 -84.5900735775 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +13.379727405 -84.5900735775 23.4999999945 +0 0 + +0101101 +* +Ve +5.66660233059852e-05 +19.9382588831 -84.6900561848 50.9999999958 +0 0 + +0101101 +* +Ve +1e-07 +19.9382588831 -84.6900561848 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +-2.9382588831 -82.3099438152 41.9999999963 +0 0 + +0101101 +* +Ve +5.66660233059852e-05 +-2.9382588831 -82.3099438152 50.9999999921 +0 0 + +0101101 +* +Ve +1e-07 +8.69021268795 -100.646112499 49.9999999968 +0 0 + +0101101 +* +Ve +1e-07 +8.69021268795 -100.646112499 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +4.72463995369 -101.169785001 49.9999999968 +0 0 + +0101101 +* +Ve +1e-07 +4.72463995369 -101.169785001 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +8.69021268795 -100.646112499 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +8.69021268796 -100.646112499 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +4.72463995369 -101.169785001 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +4.72463995369 -101.169785001 23.4999999945 +0 0 + +0101101 +* +Ve +0.000476662432846974 +-4.92975828651 -82.1246482233 41.9999999963 +0 0 + +0101101 +* +Ve +0.000476662432846974 +9.87535177534 -70.0702417176 41.9999999963 +0 0 + +0101101 +* +Ve +0.000476662362377475 +21.9297582795 -84.8753517757 41.9999999963 +0 0 + +0101101 +* +Ve +4.92487888952724e-05 +21.9297632968 -84.8753027832 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +9.87535177307 -70.0702417174 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-4.92975828409 -82.1246482231 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-142.379727409 10.221242007 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-142.379727409 10.221242007 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-132.62027259 8.04109484708 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-132.62027259 8.04109484708 23.4999999945 +0 0 + +0101101 +* +Ve +0.000323272113850789 +-125.003015794 8.85660354182 38.9999999959 +0 0 + +0101101 +* +Ve +1.34271532771821e-06 +-125.065035524 7.85772482306 38.9999999963 +0 0 + +0101101 +* +Ve +0.000323272113850789 +-136.226556397 21.5661328933 38.999999994 +0 0 + +0101101 +* +Ve +0.00035092586375791 +-136.226556396 21.5661328978 41.9999999958 +0 0 + +0101101 +* +Ve +1e-07 +-149.93292772 10.4243460221 41.9999999963 +0 0 + +0101101 +* +Ve +6.1593797633783e-05 +-149.93292772 10.4243460221 50.9999999926 +0 0 + +0101101 +* +Ve +6.1593797633783e-05 +-125.067072279 7.83799083202 50.9999999908 +0 0 + +0101101 +* +Ve +1e-07 +-125.067072279 7.83799083202 39.0000000062 +0 0 + +0101101 +* +Ve +0.000114729067521325 +-138.773443598 -3.30379604423 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +-138.773443598 -3.30379604424 38.9999999945 +0 0 + +0101101 +* +Ve +1e-07 +-125.20676677 6.86700922781 38.9999999962 +0 0 + +0101101 +* +Ve +0.000615204692372754 +-157.648508202 12.0019382692 41.9999999963 +0 0 + +0101101 +* +Ve +0.000615204692372754 +-154.156869149 10.0504115014 41.9999999963 +0 0 + +0101101 +* +Ve +1e-07 +-138.773443597 -3.30379604882 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-125.20676677 6.86700922781 32.9999999941 +0 0 + +0101101 +* +Ve +1e-07 +-125.065035524 7.85772482306 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-125.003015794 8.85660354182 32.9999999939 +0 0 + +0101101 +* +Ve +1e-07 +-136.226556399 21.5661328962 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-157.648508202 12.0019382692 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-154.156869149 10.0504115014 32.9999999942 +0 0 + +0101101 +* +Ve +1e-07 +-154.156869149 10.0504115014 49.9999999924 +0 0 + +0101101 +* +Ve +1e-07 +-157.648508202 12.0019382692 49.9999999924 +0 0 + +0101101 +* +Ve +1e-07 +-154.156869149 10.0504115014 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-157.648508202 12.0019382692 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-9.17847359699 87.0686582814 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-9.17847359699 87.0686582814 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-25.0117471993 73.726014056 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-25.0117471993 73.726014056 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-124.373731825 33.4477824623 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-124.373731825 33.4477824623 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-103.295344286 37.0207667209 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-103.295344286 37.0207667209 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-142.148661989 -18.0021121258 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-142.148661989 -18.0021121258 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-124.531143095 -24.1990590064 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-124.531143095 -24.1990590064 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-14.7270686351 -105.27511584 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-30.8054587727 -84.7848508575 50.9999999935 +0 0 + +0101101 +* +Ve +1e-07 +-30.8054587727 -84.7848508575 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-14.7270686351 -105.27511584 23.4999999945 +0 0 + +0101101 +* +Ve +1e-07 +-69 16 0 +0 0 + +0101101 +* +Ve +1e-07 +-69 16 7 +0 0 + +0101101 +* +Ve +1e-07 +-61 16 0 +0 0 + +0101101 +* +Ve +1e-07 +-61 16 7 +0 0 + +0101101 +* +Ve +1e-07 +-61 -18 7 +0 0 + +0101101 +* +Ve +1e-07 +-69 -18 7 +0 0 + +0101101 +* +Ve +1e-07 +53.4997515897 -45 0 +0 0 + +0101101 +* +Ve +1e-07 +86.5 -12 0 +0 0 + +0101101 +* +Ve +1e-07 +86.5 -1.99851834808 0 +0 0 + +0101101 +* +Ve +1e-07 +72.706232063 20.9582051707 0 +0 0 + +0101101 +* +Ve +1e-07 +47.0829690879 34.5823357644 0 +0 0 + +0101101 +* +Ve +7.96200796707952e-06 +23 43.2221811833 0 +0 0 + +0101101 +* +Ve +1e-07 +5.3 45 0 +0 0 + +0101101 +* +Ve +1e-07 +-21.9289321881 47.9289321881 0 +0 0 + +0101101 +* +Ve +1e-07 +-27 53 0 +0 0 + +0101101 +* +Ve +1e-07 +-78.862687877 16.500914749 0 +0 0 + +0101101 +* +Ve +2.29990299937802e-05 +-86.5 -11.9487958602 0 +0 0 + +0101101 +* +Ve +1e-07 +-86.5 -14 0 +0 0 + +0101101 +* +Ve +1e-07 +-77.4202418693 -35.9202418693 0 +0 0 + +0101101 +* +Ve +1e-07 +-60.3404837385 -53 0 +0 0 + +0101101 +* +Ve +1e-07 +-24.3404837385 -53 0 +0 0 + +0101101 +* +Ve +1e-07 +-19.2694159267 -47.9289321881 0 +0 0 + +0101101 +* +Ve +1e-07 +-77.4589041096 -1 0 +0 0 + +0101101 +* +Ve +1e-07 +-59.4589041096 -1 0 +0 0 + +0101101 +* +Ve +1e-07 +-62.4589041096 -1 3 +0 0 + +0101101 +* +Ve +1e-07 +-74.4589041096 -1 3 +0 0 + +0101101 +* +Ve +1e-07 +-17.4589041096 -1 0 +0 0 + +0101101 +* +Ve +1e-07 +4.54109589041 -1 0 +0 0 + +0101101 +* +Ve +1e-07 +1.54109589041 -1 3 +0 0 + +0101101 +* +Ve +1e-07 +-14.4589041096 -1 3 +0 0 + +0101101 +* +Ve +1e-07 +-32.952835102 -18.1501162699 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-32.101756943 -17.6851701526 -1.33226762955e-14 +0 0 + +0101101 +* +Ve +1e-07 +-47.047164898 -25.8498837301 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-47.898243057 -26.3148298474 -1.33226762955e-14 +0 0 + +0101101 +* +Ve +1e-07 +-32.952835102 23.8498837301 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-32.101756943 24.3148298474 -1.33226762955e-14 +0 0 + +0101101 +* +Ve +1e-07 +-47.047164898 16.1501162699 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-47.898243057 15.6851701526 -1.33226762955e-14 +0 0 + +0101101 +* +Ve +1e-07 +-46.8 -22 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-33.2 -22 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-46.8 20 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-33.2 20 5.5 +0 0 + +0101101 +* +Ve +1e-07 +-69 -18 0 +0 0 + +0101101 +* +Ve +1e-07 +-61 -18 0 +0 0 + +0101101 +* +Ve +1e-07 +22.4690092573 -9.75310646325 -7.1054273576e-15 +0 0 + +0101101 +* +Ve +1e-07 +43.5309907427 1.75310646325 -7.1054273576e-15 +0 0 + +0101101 +* +Ve +1e-07 +-12.1983481148 -45 0 +0 0 + +0101101 +* +Ve +1e-07 +-57.7899311821 53 0 +0 0 + +0101101 +* +Ve +1e-07 +-14.8578643763 45 0 +0 0 + +0101101 +* +Ve +1.00001355033128e-07 +-5.41750858623 9.91668294936 0 +0 0 + +0101101 +* +Ve +1.00001355033128e-07 +5.41750858623 -9.91668294936 0 +0 0 + +0101101 +* +Ve +1.00000987117516e-07 +-7.33521074064 13.4270131969 -2.77555756156e-17 +0 0 + +0101101 +* +Ve +1.00000971340767e-07 +7.33521074064 -13.4270131969 -2.77555756156e-17 +0 0 + +0101101 +* +Ve +1.00001350629417e-07 +-5.84899157097 10.7065072551 0 +0 0 + +0101101 +* +Ve +1.00001350629417e-07 +5.84899157097 -10.7065072551 0 +0 0 + +0101101 +* +Ve +1.00000981681071e-07 +-4.45865750902 8.16151782558 0 +0 0 + +0101101 +* +Ve +1.00000981681071e-07 +4.45865750902 -8.16151782558 0 +0 0 + +0101101 +* +Ve +1e-07 +5.51339369395 -10.0921994617 -9.71445146547e-17 +0 0 + +0101101 +* +Ve +1e-07 +-5.51339369395 10.0921994617 -9.71445146547e-17 +0 0 + +0101101 +* +Ve +1e-07 +4.92164409007 -9.00900907752 -7 +0 0 + +0101101 +* +Ve +1e-07 +-4.92164409007 9.00900907752 -7 +0 0 + +0101101 +* +Ve +1e-07 +4.31482984744 -7.89824305701 4 +0 0 + +0101101 +* +Ve +1e-07 +4.31482984744 -7.89824305701 5 +0 0 + +0101101 +* +Ve +1e-07 +-4.31482984744 7.89824305701 4 +0 0 + +0101101 +* +Ve +1e-07 +-4.31482984744 7.89824305701 5 +0 0 + +0101101 +* +Ve +1e-07 +5.01147593305 -9.17344516311 7 +0 0 + +0101101 +* +Ve +2.63462588419505e-07 +-5.0114757053 9.17344528754 7 +0 0 + +0101101 +* +Ve +1e-07 +7.33521074064 -13.4270131969 1 +0 0 + +0101101 +* +Ve +1e-07 +-7.33521074064 13.4270131969 1 +0 0 + +0101101 +* +Ve +1e-07 +7.67080861767 -14.0413209902 1.5 +0 0 + +0101101 +* +Ve +1e-07 +-7.67080861767 14.0413209902 1.5 +0 0 + +0101101 +* +Ve +1e-07 +-7.57492350995 13.8658044779 1.5 +0 0 + +0101101 +* +Ve +1e-07 +7.57492350995 -13.8658044779 1.5 +0 0 + +0101101 +* +Ve +1e-07 +4.07511707814 -7.45945177607 3.13397459622 +0 0 + +0101101 +* +Ve +1e-07 +-4.07511707814 7.45945177607 3.13397459622 +0 0 + +0101101 +* +Ve +1e-07 +5.51339369395 -10.0921994617 0.4 +0 0 + +0101101 +* +Ve +1e-07 +-5.51339369395 10.0921994617 0.4 +0 0 + +0101101 +* +Ve +1e-07 +5.65722135553 -10.3554742303 0.7 +0 0 + +0101101 +* +Ve +1e-07 +-5.65722135553 10.3554742303 0.7 +0 0 + +0101101 +* +Ve +1e-07 +5.84899157097 -10.7065072551 0.4 +0 0 + +0101101 +* +Ve +1e-07 +-5.84899157097 10.7065072551 0.4 +0 0 + +0101101 +* +Ve +1e-07 +5.70516390939 -10.4432324865 0.7 +0 0 + +0101101 +* +Ve +1e-07 +-5.70516390939 10.4432324865 0.7 +0 0 + +0101101 +* +Ve +1e-07 +7.67080861767 -14.0413209902 5.8 +0 0 + +0101101 +* +Ve +1e-07 +-7.67080861767 14.0413209902 5.8 +0 0 + +0101101 +* +Ve +1e-07 +-7.09549797134 12.988221916 7 +0 0 + +0101101 +* +Ve +1e-07 +7.09549797134 -12.988221916 7 +0 0 + +0101101 +* +Ve +1e-07 +4.123059632 -7.54721003226 0 +0 0 + +0101101 +* +Ve +1e-07 +-4.123059632 7.54721003226 0 +0 0 + +0101101 +* +Ve +1e-07 +3.74264917236 -6.85087335668 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-3.74264917236 6.85087335668 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +3.35597877023 -6.14307793323 4 +0 0 + +0101101 +* +Ve +1e-07 +3.35597877023 -6.14307793323 4.4 +0 0 + +0101101 +* +Ve +1e-07 +-3.35597877023 6.14307793323 4 +0 0 + +0101101 +* +Ve +1.58298023783649e-07 +-3.35597877023 6.14307793323 4.4 +0 0 + +0101101 +* +Ve +1e-07 +3.91329563872 -7.16323961811 6 +0 0 + +0101101 +* +Ve +5.66655918190863e-07 +-3.91329530182 7.16323980216 6 +0 0 + +0101101 +* +Ve +1e-07 +5.41750858623 -9.91668294936 1 +0 0 + +0101101 +* +Ve +1e-07 +-5.41750858623 9.91668294936 1 +0 0 + +0101101 +* +Ve +1e-07 +5.75310646325 -10.5309907427 1.5 +0 0 + +0101101 +* +Ve +1e-07 +-5.75310646325 10.5309907427 1.5 +0 0 + +0101101 +* +Ve +1e-07 +-5.65722135553 10.3554742303 1.5 +0 0 + +0101101 +* +Ve +1e-07 +5.65722135553 -10.3554742303 1.5 +0 0 + +0101101 +* +Ve +1e-07 +3.11626600093 -5.70428665229 3.13397459622 +0 0 + +0101101 +* +Ve +1e-07 +-3.11626600093 5.70428665229 3.13397459622 +0 0 + +0101101 +* +Ve +1e-07 +4.123059632 -7.54721003226 0.4 +0 0 + +0101101 +* +Ve +1e-07 +-4.123059632 7.54721003226 0.4 +0 0 + +0101101 +* +Ve +1e-07 +4.26688729358 -7.81048480082 0.7 +0 0 + +0101101 +* +Ve +1e-07 +-4.26688729358 7.81048480082 0.7 +0 0 + +0101101 +* +Ve +1e-07 +4.45865750902 -8.16151782558 0.4 +0 0 + +0101101 +* +Ve +1e-07 +-4.45865750902 8.16151782558 0.4 +0 0 + +0101101 +* +Ve +1e-07 +4.31482984744 -7.89824305701 0.7 +0 0 + +0101101 +* +Ve +1e-07 +-4.31482984744 7.89824305701 0.7 +0 0 + +0101101 +* +Ve +1e-07 +5.75310646325 -10.5309907427 4.8 +0 0 + +0101101 +* +Ve +1e-07 +-5.75310646325 10.5309907427 4.8 +0 0 + +0101101 +* +Ve +1e-07 +-5.17779581693 9.47789166842 6 +0 0 + +0101101 +* +Ve +1e-07 +5.17779581693 -9.47789166842 6 +0 0 + +0101101 +* +Ve +1e-07 +43.4793395049 1.66459569117 9.5 +0 0 + +0101101 +* +Ve +1e-07 +57.5206604951 9.33540430883 9.5 +0 0 + +0101101 +* +Ve +5.99999859423481e-07 +6492.28246063021 -145.047517629392 4446.23972842109 +0 0 + +0101101 +* +Ve +6.00001598079206e-07 +6411.61345966845 -102.759741278559 4386.36271901736 +0 0 + +0101101 +* +Ve +6.00000384682402e-07 +6387.99107514439 -67.5782173078896 4388.42265117616 +0 0 + +0101101 +* +Ve +6.00001086559442e-07 +6387.51777274601 -59.7306551602504 4394.60259884411 +0 0 + +0101101 +* +Ve +5.99999866292542e-07 +6395.58723251711 -48.5279487953552 4413.85576134175 +0 0 + +0101101 +* +Ve +6.0000047986014e-07 +6413.9078066696 -47.7770756708447 4436.35358965208 +0 0 + +0101101 +* +Ve +5.99999869727073e-07 +6443.31186076904 -55.5410843609762 4464.75360687052 +0 0 + +0101101 +* +Ve +6.00000476425613e-07 +6469.06457346544 -69.0410030651709 4483.86869943284 +0 0 + +0101101 +* +Ve +5.99999859423481e-07 +6511.58486560874 -132.367746212376 4480.16082154701 +0 0 + +0101101 +* +Ve +6.00000469556559e-07 +6511.67952608841 -133.937258641904 4478.92483201341 +0 0 + +0101101 +* +Ve +1e-07 +-28.5 -12.5 8.5 +0 0 + +0101101 +* +Ve +1e-07 +-16.5 -12.5 8.5 +0 0 + +0101101 +* +Ve +1e-07 +-28.5 29.5 8.5 +0 0 + +0101101 +* +Ve +1e-07 +-16.5 29.5 8.5 +0 0 + +0101101 +* +Ve +4.43472682381836e-05 +2.04109589041 8.5 5 +0 0 + +0101101 +* +Ve +4.43472682381836e-05 +20.0410958904 8.5 5 +0 0 + +0101101 +* +Ve +1.00001423995717e-07 +1.67798938511 -3.07153896662 0 +0 0 + +0101101 +* +Ve +1.00001423995717e-07 +-1.67798938511 3.07153896662 0 +0 0 + +0101101 +* +Ve +3.15359982666418e-05 +-49.9589041096 2.1 6 +0 0 + +0101101 +* +Ve +3.15359982666418e-05 +-49.9589236513 14.9 6 +0 0 + +0101101 +* +Ve +3.15356724842967e-05 +-51.9589041096 2.1 6 +0 0 + +0101101 +* +Ve +3.15356724842967e-05 +-51.958923639 14.9 6 +0 0 + +0101101 +* +Ve +1e-07 +28.2359033419 -8.5 0 +0 0 + +0101101 +* +Ve +1e-07 +33.9264072801 -10.8769968051 0 +0 0 + +0101101 +* +Ve +3.12784270740007e-05 +33.9264072801 -10.8769968051 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +28.2359033419 -8.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +2.48179337037 -8.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +2.48179337037 -8.5 0 +0 0 + +0101101 +* +Ve +1e-07 +-5.41758793251 -15.2351778656 0 +0 0 + +0101101 +* +Ve +3.38586879989101e-05 +-5.41758793251 -15.2351778656 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-47.7802294293 -5.5 0 +0 0 + +0101101 +* +Ve +1e-07 +-39.7864809932 -13.1837944664 0 +0 0 + +0101101 +* +Ve +3.9333488715623e-05 +-39.7864809932 -13.1837944664 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-47.7802294293 -5.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-47.7802294293 22.5 0 +0 0 + +0101101 +* +Ve +1e-07 +-39.7864809932 30.1837944664 0 +0 0 + +0101101 +* +Ve +1e-07 +-47.7802294293 22.5 -4.5 +0 0 + +0101101 +* +Ve +3.93331202162804e-05 +-39.7864809932 30.1837944664 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-5.41758793251 32.2351778656 0 +0 0 + +0101101 +* +Ve +1e-07 +2.48179337037 25.5 0 +0 0 + +0101101 +* +Ve +3.38582597806791e-05 +-5.41758793251 32.2351778656 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +2.48179337037 25.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +36.5110758098 25.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +36.5110758098 25.5 0 +0 0 + +0101101 +* +Ve +1e-07 +40.0865196923 26.3434504792 0 +0 0 + +0101101 +* +Ve +3.71144990280355e-05 +40.0865196923 26.3434504792 -4.5 +0 0 + +0101101 +* +Ve +1.00004607671047e-07 +6410.00886543614 -82.4019764728293 4433.2382489923 +0 0 + +0101101 +* +Ve +1.00022070811617e-07 +43.4793395049 1.66459569117 -4.6 +0 0 + +0101101 +* +Ve +1.00004631278089e-07 +3.83540430883 -7.02066049512 1.8 +0 0 + +0101101 +* +Ve +1.0002186618355e-07 +6425.80223313977 -89.9127086215669 4426.41866504436 +0 0 + +0101101 +* +Ve +1.00021896764488e-07 +6415.04743489636 -78.4455054305792 4423.44586069164 +0 0 + +0101101 +* +Ve +1.00021896764488e-07 +57.5206604951 9.33540430883 -4.6 +0 0 + +0101101 +* +Ve +1.00004432420032e-07 +6416.35047634052 -96.3969668903333 4428.77459417239 +0 0 + +0101101 +* +Ve +1.00004432420032e-07 +-3.83540430883 7.02066049512 1.8 +0 0 + +0101101 +* +Ve +1.00000213162821e-07 +57.8716935199 9.52717452428 -5 +0 0 + +0101101 +* +Ve +1.00000213162821e-07 +43.1283064801 1.47282547572 -5 +0 0 + +0101101 +* +Ve +1.00000383693077e-07 +6463.69166921013 -93.6383724382121 4487.61328293255 +0 0 + +0101101 +* +Ve +1.00000326849658e-07 +-28.5 29.5 -4.6 +0 0 + +0101101 +* +Ve +1.00001417955637e-07 +2.87655323163 -5.26549537134 1.8 +0 0 + +0101101 +* +Ve +1.0000135957112e-07 +6477.08458345686 -96.477263792552 4483.72365793293 +0 0 + +0101101 +* +Ve +1.00001417955637e-07 +6468.20359252529 -91.8217287814514 4477.13169359491 +0 0 + +0101101 +* +Ve +1.00000341060513e-07 +-16.5 29.5 -4.6 +0 0 + +0101101 +* +Ve +1.00000478602093e-07 +6468.44787738842 -104.134615251343 4484.26554181762 +0 0 + +0101101 +* +Ve +1.00001355033128e-07 +-2.87655323163 5.26549537134 1.8 +0 0 + +0101101 +* +Ve +1.00000255795385e-07 +-28.9 29.5 -5 +0 0 + +0101101 +* +Ve +1.00000255795385e-07 +-16.1 29.5 -5 +0 0 + +0101101 +* +Ve +1.00000355271368e-07 +6465.67953928331 -126.598133458297 4461.65750272715 +0 0 + +0101101 +* +Ve +1.00000341060513e-07 +-28.5 -12.5 -4.6 +0 0 + +0101101 +* +Ve +1.00000952869335e-07 +6479.07245353004 -129.437024812637 4457.76787772753 +0 0 + +0101101 +* +Ve +1.00000934140782e-07 +6470.19146259847 -124.781489801536 4451.17591338951 +0 0 + +0101101 +* +Ve +1.00000355271368e-07 +-16.5 -12.5 -4.6 +0 0 + +0101101 +* +Ve +1.00000540012479e-07 +6470.43574746161 -137.094376271427 4458.30976161222 +0 0 + +0101101 +* +Ve +1.00000255795385e-07 +-28.9 -12.5 -5 +0 0 + +0101101 +* +Ve +1.00000255795385e-07 +-16.1 -12.5 -5 +0 0 + +0101101 +* +Ve +1e-07 +-39.8 -12.5 -4.8 +0 0 + +0101101 +* +Ve +1e-07 +-39.8 -12.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-5.2 -12.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-5.2 -12.5 -4.8 +0 0 + +0101101 +* +Ve +1e-07 +-5.4 -12.5 -5 +0 0 + +0101101 +* +Ve +1e-07 +-39.6 -12.5 -5 +0 0 + +0101101 +* +Ve +1.0000135957112e-07 +17 0 12 +0 0 + +0101101 +* +Ve +1.00000981681071e-07 +-17 2.08189955855e-15 12 +0 0 + +0101101 +* +Ve +1.0000135957112e-07 +-3.73951920111 6.84514398274 12 +0 0 + +0101101 +* +Ve +1.0000135957112e-07 +3.73951920111 -6.84514398274 12 +0 0 + +0101101 +* +Ve +1.00000981681071e-07 +-8 9.79717439318e-16 12 +0 0 + +0101101 +* +Ve +1.00000981681071e-07 +8 0 12 +0 0 + +0101101 +* +Ve +1e-07 +-5.2 29.5 -4.8 +0 0 + +0101101 +* +Ve +1e-07 +-5.2 29.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-39.8 29.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +-39.8 29.5 -4.8 +0 0 + +0101101 +* +Ve +1e-07 +-39.6 29.5 -5 +0 0 + +0101101 +* +Ve +1e-07 +-5.4 29.5 -5 +0 0 + +0101101 +* +Ve +1e-07 +73.8 5.5 -4.8 +0 0 + +0101101 +* +Ve +1e-07 +73.8 5.5 0 +0 0 + +0101101 +* +Ve +1e-07 +27.2 5.5 -4.5 +0 0 + +0101101 +* +Ve +1e-07 +27.2 5.5 -4.8 +0 0 + +0101101 +* +Ve +1e-07 +27.4 5.5 -5 +0 0 + +0101101 +* +Ve +1e-07 +73.6 5.5 -5 +0 0 + +0101101 +* +Ve +1.00001346361305e-07 +23 0 12 +0 0 + +0101101 +* +Ve +1.00001346361305e-07 +-23 2.81668763804e-15 12 +0 0 + +0101101 +* +Ve +1.00001350629417e-07 +-4.69837027832 8.60030910653 13 +0 0 + +0101101 +* +Ve +1.00001350629417e-07 +4.69837027832 -8.60030910653 13 +0 0 + +0101101 +* +Ve +1.00000987117516e-07 +-10 1.22464679915e-15 12 +0 0 + +0101101 +* +Ve +1.00000987117516e-07 +10 0 12 +0 0 + +0101101 +* +Ve +1e-07 +-49.9589041096 2.1 -4.1 +0 0 + +0101101 +* +Ve +1e-07 +-51.9589041096 2.1 -4.1 +0 0 + +0101101 +* +Ed + 1e-07 1 1 0 +1 1 0 3.64159265359077 6.78318530718057 +2 1 1 0 3.64159265359077 6.78318530718057 +4 C0 2 0 1 0 +2 2 2 0 3.64159265359077 6.78318530718057 +0 + +0101000 ++3034 0 -3033 0 * +Ed + 1e-07 1 1 0 +1 2 0 0.50000000000098 3.64159265359077 +2 3 3 0 0.50000000000098 3.64159265359077 +4 C0 2 0 3 0 +2 4 2 0 0.50000000000098 3.64159265359077 +0 + +0101000 ++3033 0 -3034 0 * +Ed + 1.00002062092466e-07 1 1 0 +1 3 0 0 109 +4 C0 4 0 5 0 +2 5 4 0 0 109 +2 6 5 0 0 109 +0 + +0101000 ++3032 51 -3031 51 * +Ed + 1.00029163724341e-07 1 1 0 +1 4 0 31.7056915638 79.3172025741 +2 7 6 0 31.7056915638 79.3172025741 +4 C0 4 0 6 0 +2 8 4 0 31.7056915638 79.3172025741 +2 9 7 52 31.7056915638 79.3172025741 +0 + +0101000 ++3031 51 -3030 51 * +Ed + 1.00002739158374e-07 1 1 0 +1 5 0 0 10 +4 C0 4 0 8 0 +2 10 4 0 0 10 +2 11 8 0 0 10 +0 + +0101000 ++3030 51 -3029 51 * +Ed + 1.00003279352948e-07 1 1 0 +1 6 0 0 25.5071027635 +2 12 9 0 0 25.5071027635 +4 C0 4 0 9 0 +2 13 4 0 0 25.5071027635 +2 14 10 52 0 25.5071027635 +0 + +0101000 ++3029 51 -3028 51 * +Ed + 1.00038354368293e-07 1 1 0 +1 7 0 0 29.023430645 +4 C0 4 0 11 0 +2 15 4 0 0 29.023430645 +2 16 11 0 0 29.023430645 +0 + +0101000 ++3028 51 -3027 51 * +Ed + 1.00002670667292e-07 1 1 0 +1 8 0 31.5197412696 73.7105003877 +2 17 12 0 31.5197412696 73.7105003877 +4 C0 4 0 12 0 +2 18 4 0 31.5197412696 73.7105003877 +2 19 13 52 31.5197412696 73.7105003877 +0 + +0101000 ++3027 51 -3026 51 * +Ed + 1.00001469432613e-07 1 1 0 +1 9 0 0 34.7970800486 +4 C0 4 0 14 0 +2 20 4 0 0 34.7970800486 +2 21 14 0 0 34.7970800486 +0 + +0101000 ++3026 51 -3025 51 * +Ed + 1.00199787322968e-07 1 1 0 +1 10 0 0 86.2473843658 +2 22 15 0 0 86.2473843658 +4 C0 4 0 15 0 +2 23 4 0 0 86.2473843658 +2 24 16 52 0 86.2473843658 +0 + +0101000 ++3025 51 -3024 51 * +Ed + 1.00002066983352e-07 1 1 0 +1 11 0 0 2 +4 C0 4 0 17 0 +2 25 4 0 0 2 +2 26 17 0 0 2 +0 + +0101000 ++3024 51 -3023 51 * +Ed + 1.00001384227706e-07 1 1 0 +1 12 0 0 46.3368551767 +2 27 18 0 0 46.3368551767 +4 C0 4 0 18 0 +2 28 4 0 0 46.3368551767 +2 29 19 52 0 46.3368551767 +0 + +0101000 ++3023 51 -3032 51 * +Ed + 1e-07 1 1 0 +1 13 0 3.14159265358979 6.28318530717959 +2 30 20 0 3.14159265358979 6.28318530717959 +4 C0 21 0 20 0 +2 31 21 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3022 0 -3021 0 * +Ed + 1e-07 1 1 0 +1 14 0 0 3.14159265358979 +2 32 22 0 0 3.14159265358979 +4 C0 21 0 22 0 +2 33 21 0 0 3.14159265358979 +0 + +0101000 ++3021 0 -3022 0 * +Ed + 1e-07 1 1 0 +1 15 0 3.14159265358979 6.28318530717959 +2 34 23 0 3.14159265358979 6.28318530717959 +4 C0 24 0 23 0 +2 35 24 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3020 0 -3019 0 * +Ed + 1e-07 1 1 0 +1 16 0 0 3.14159265358979 +2 36 25 0 0 3.14159265358979 +4 C0 24 0 25 0 +2 37 24 0 0 3.14159265358979 +0 + +0101000 ++3019 0 -3020 0 * +Ed + 4.43472648967862e-05 1 1 0 +1 17 0 28.2743338823 56.5486677646 +2 38 26 0 28.2743338823 56.5486677646 +4 C0 27 0 26 0 +2 39 27 0 28.2743338823 56.5486677646 +0 + +0101000 ++3018 0 -3017 0 * +Ed + 4.43472682381836e-05 1 1 0 +1 18 0 0 28.2743338823 +2 40 28 0 0 28.2743338823 +4 C0 27 0 28 0 +2 41 27 0 0 28.2743338823 +0 + +0101000 ++3017 0 -3018 0 * +Ed + 1.00001423995717e-07 1 1 0 +1 19 0 5.212388980383 8.3539816339728 +2 42 29 0 5.212388980383 8.3539816339728 +4 C0 29 0 30 0 +2 43 30 0 5.212388980383 8.3539816339728 +2 44 27 53 5.212388980383 8.3539816339728 +0 + +0101000 ++3016 0 -3015 0 * +Ed + 1.00001379038797e-07 1 1 0 +1 20 0 2.07079632679321 5.212388980383 +2 45 31 0 2.07079632679321 5.212388980383 +4 C0 31 0 30 0 +2 46 30 0 2.07079632679321 5.212388980383 +2 47 27 53 2.07079632679321 5.212388980383 +0 + +0101000 ++3015 0 -3016 0 * +Ed + 3.15359982666418e-05 1 1 0 +1 21 0 30.1592894745 50.2655019991 +2 48 32 0 30.1592894745 50.2655019991 +4 C0 33 0 32 0 +2 49 33 0 30.1592894745 50.2655019991 +0 + +0101000 ++3014 0 -3013 0 * +Ed + 1e-07 1 1 0 +1 22 0 -1 1 +4 C0 33 0 34 0 +2 50 33 0 -1 1 +2 51 34 0 -1 1 +0 + +0101000 ++3012 0 -3014 0 * +Ed + 3.15356724842967e-05 1 1 0 +1 23 0 10.0531160209 30.1592894745 +2 52 35 0 10.0531160209 30.1592894745 +4 C0 33 0 35 0 +2 53 33 0 10.0531160209 30.1592894745 +0 + +0101000 ++3011 0 -3012 0 * +Ed + 1e-07 1 1 0 +1 24 0 -1.0000195294 0.999980458300001 +4 C0 33 0 36 0 +2 54 33 0 -1.0000195294 0.999980458300001 +2 55 36 0 -1.0000195294 0.999980458300001 +0 + +0101000 ++3011 0 -3013 0 * +Ed + 1e-07 1 1 0 +1 25 0 1.5707963267949 2.36216080475464 +2 56 37 0 1.5707963267949 2.36216080475464 +4 C0 37 0 38 0 +2 57 38 0 1.5707963267949 2.36216080475464 +0 + +0101000 ++3010 0 -3009 0 * +Ed + 1e-07 1 1 0 +1 26 0 -2.5 2 +2 58 37 0 -2.5 2 +2 59 39 0 -2.5 2 +4 G1 37 0 39 0 +0 + +0101000 ++3009 0 -3008 0 * +Ed + 1e-07 1 1 0 +1 27 0 1.5707963267949 2.36216080475464 +2 60 37 0 1.5707963267949 2.36216080475464 +4 C0 37 0 40 0 +2 61 40 0 1.5707963267949 2.36216080475464 +0 + +0101000 ++3007 0 -3008 0 * +Ed + 1e-07 1 1 0 +1 28 0 -2.5 2 +2 62 37 0 -2.5 2 +4 G1 37 0 41 0 +2 63 41 0 -2.5 2 +0 + +0101000 ++3010 0 -3007 0 * +Ed + 1e-07 1 1 0 +1 29 0 -12.8770549857 12.87705498583 +4 C0 41 0 40 0 +2 64 41 0 -12.8770549857 12.87705498583 +2 65 40 0 -12.8770549857 12.87705498583 +0 + +0101000 ++3007 0 -3006 0 * +Ed + 1e-07 1 1 0 +1 30 0 -12.8770549857 12.87705498583 +4 C0 41 0 38 0 +2 66 41 0 -12.8770549857 12.87705498583 +2 67 38 0 -12.8770549857 12.87705498583 +0 + +0101000 ++3010 0 -3005 0 * +Ed + 1e-07 1 1 0 +1 31 0 -2.25 2.25 +2 68 42 0 -2.25 2.25 +4 G1 41 0 42 0 +2 69 41 0 -2.25 2.25 +0 + +0101000 ++3006 0 -3005 0 * +Ed + 1e-07 1 1 0 +1 32 0 1.5707963267949 2.98282369675571 +2 70 42 0 1.5707963267949 2.98282369675571 +4 C0 42 0 38 0 +2 71 38 0 1.5707963267949 2.98282369675571 +0 + +0101000 ++3005 0 -3004 0 * +Ed + 1e-07 1 1 0 +1 33 0 1.5707963267949 2.98282369675571 +2 72 42 0 1.5707963267949 2.98282369675571 +4 C0 42 0 40 0 +2 73 40 0 1.5707963267949 2.98282369675571 +0 + +0101000 ++3006 0 -3003 0 * +Ed + 1e-07 1 1 0 +1 34 0 -2 2.5 +2 74 42 0 -2 2.5 +2 75 43 0 -2 2.5 +4 G1 42 0 43 0 +0 + +0101000 ++3003 0 -3004 0 * +Ed + 1e-07 1 1 0 +1 35 0 1.5707963267949 3.10205666294584 +2 76 44 0 1.5707963267949 3.10205666294584 +4 C0 44 0 38 0 +2 77 38 0 1.5707963267949 3.10205666294584 +0 + +0101000 ++3002 0 -3001 0 * +Ed + 1e-07 1 1 0 +1 36 0 -2.5 2 +2 78 44 0 -2.5 2 +2 79 43 0 -2.5 2 +4 G1 44 0 43 0 +0 + +0101000 ++3001 0 -3000 0 * +Ed + 1e-07 1 1 0 +1 37 0 1.5707963267949 3.10205666294584 +2 80 44 0 1.5707963267949 3.10205666294584 +4 C0 44 0 40 0 +2 81 40 0 1.5707963267949 3.10205666294584 +0 + +0101000 ++2999 0 -3000 0 * +Ed + 1e-07 1 1 0 +1 38 0 -2.5 2 +2 82 44 0 -2.5 2 +4 G1 44 0 45 0 +2 83 45 0 -2.5 2 +0 + +0101000 ++3002 0 -2999 0 * +Ed + 1e-07 1 1 0 +1 39 0 4.71238898038469 6.24364931653564 +2 84 46 0 4.71238898038469 6.24364931653564 +4 C0 46 0 38 0 +2 85 38 0 4.71238898038469 6.24364931653564 +0 + +0101000 ++2998 0 -2997 0 * +Ed + 1e-07 1 1 0 +1 40 0 -2 2.5 +2 86 46 0 -2 2.5 +4 G1 46 0 47 0 +2 87 47 0 -2 2.5 +0 + +0101000 ++2996 0 -2998 0 * +Ed + 1e-07 1 1 0 +1 41 0 4.71238898038469 6.24364931653564 +2 88 46 0 4.71238898038469 6.24364931653564 +4 C0 46 0 40 0 +2 89 40 0 4.71238898038469 6.24364931653564 +0 + +0101000 ++2996 0 -2995 0 * +Ed + 1e-07 1 1 0 +1 42 0 -2 2.5 +2 90 46 0 -2 2.5 +2 91 48 0 -2 2.5 +4 G1 46 0 48 0 +0 + +0101000 ++2995 0 -2997 0 * +Ed + 1e-07 1 1 0 +1 43 0 3.30036161042387 4.71238898038469 +2 92 49 0 3.30036161042387 4.71238898038469 +4 C0 49 0 38 0 +2 93 38 0 3.30036161042387 4.71238898038469 +0 + +0101000 ++2994 0 -2993 0 * +Ed + 1e-07 1 1 0 +1 44 0 -2 2.5 +2 94 49 0 -2 2.5 +2 95 48 0 -2 2.5 +4 G1 49 0 48 0 +0 + +0101000 ++2992 0 -2994 0 * +Ed + 1e-07 1 1 0 +1 45 0 3.30036161042387 4.71238898038469 +2 96 49 0 3.30036161042387 4.71238898038469 +4 C0 49 0 40 0 +2 97 40 0 3.30036161042387 4.71238898038469 +0 + +0101000 ++2992 0 -2991 0 * +Ed + 1e-07 1 1 0 +1 46 0 -2 2.5 +2 98 49 0 -2 2.5 +4 G1 49 0 50 0 +2 99 50 0 -2 2.5 +0 + +0101000 ++2991 0 -2993 0 * +Ed + 1e-07 1 1 0 +1 47 0 -2.25 2.25 +2 100 51 0 -2.25 2.25 +4 G1 50 0 51 0 +2 101 50 0 -2.25 2.25 +0 + +0101000 ++2990 0 -2989 0 * +Ed + 1e-07 1 1 0 +1 48 0 -17.0146412197 17.01464121973 +4 C0 50 0 40 0 +2 102 50 0 -17.0146412197 17.01464121973 +2 103 40 0 -17.0146412197 17.01464121973 +0 + +0101000 ++2990 0 -2991 0 * +Ed + 1e-07 1 1 0 +1 49 0 -17.0146412197 17.01464121973 +4 C0 50 0 38 0 +2 104 50 0 -17.0146412197 17.01464121973 +2 105 38 0 -17.0146412197 17.01464121973 +0 + +0101000 ++2989 0 -2993 0 * +Ed + 1e-07 1 1 0 +1 50 0 4.71238898038469 5.17572008760919 +2 106 51 0 4.71238898038469 5.17572008760919 +4 C0 51 0 38 0 +2 107 38 0 4.71238898038469 5.17572008760919 +0 + +0101000 ++2989 0 -2988 0 * +Ed + 1e-07 1 1 0 +1 51 0 4.71238898038469 5.17572008760919 +2 108 51 0 4.71238898038469 5.17572008760919 +4 C0 51 0 40 0 +2 109 40 0 4.71238898038469 5.17572008760919 +0 + +0101000 ++2990 0 -2987 0 * +Ed + 1e-07 1 1 0 +1 52 0 -2 2.5 +2 110 51 0 -2 2.5 +2 111 52 0 -2 2.5 +4 G1 51 0 52 0 +0 + +0101000 ++2987 0 -2988 0 * +Ed + 1.0000051159077e-07 1 1 0 +1 53 0 1.07079632679522 3.64159265359077 +2 112 3 0 1.07079632679522 3.64159265359077 +2 113 53 0 1.07079632679522 3.64159265359077 +4 C0 3 0 53 0 +2 114 54 54 1.07079632679522 3.64159265359077 +0 + +0101000 ++2986 51 -2985 0 * +Ed + 1.00004607671047e-07 1 1 0 +1 54 0 -27.2 -16.3999999999996 +2 115 54 0 -27.2 -16.3999999999996 +2 116 55 0 -27.2 -16.3999999999996 +4 CN 54 0 55 0 +2 117 3 55 -27.2 -16.3999999999996 +0 + +0101000 ++2984 0 -2986 56 * +Ed + 1.00001292562975e-07 1 1 0 +1 55 0 2.64159265358882 5.21238898038447 +2 118 54 0 2.64159265358882 5.21238898038447 +2 119 56 0 2.64159265358882 5.21238898038447 +4 C0 54 0 56 0 +2 120 3 55 2.64159265358882 5.21238898038447 +0 + +0101000 ++2983 56 -2984 0 * +Ed + 1.0002186618355e-07 1 1 0 +1 56 0 -6.69499999997 4.10500000002983 +2 121 3 0 -6.69499999997 4.10500000002983 +2 122 1 0 -6.69499999997 4.10500000002983 +4 CN 3 0 1 0 +2 123 54 54 -6.69499999997 4.10500000002983 +0 + +0101000 ++2985 0 -2983 51 * +Ed + 1.00000582645043e-07 1 1 0 +1 57 0 5.21238898038447 5.78318530717861 +2 124 55 0 5.21238898038447 5.78318530717861 +2 125 57 0 5.21238898038447 5.78318530717861 +4 C0 55 0 57 0 +2 126 3 55 5.21238898038447 5.78318530717861 +0 + +0101000 ++2984 0 -2982 56 * +Ed + 1e-07 1 1 0 +1 58 0 4.10500000003036 7.40500000003 +2 127 3 0 4.10500000003036 7.40500000003 +2 128 1 0 4.10500000003036 7.40500000003 +4 CN 3 0 1 0 +0 + +0101000 ++2982 51 -3033 0 * +Ed + 1e-07 1 1 0 +1 56 0 4.10500000002983 7.40500000003 +2 121 3 0 4.10500000002983 7.40500000003 +2 122 1 0 4.10500000002983 7.40500000003 +4 CN 3 0 1 0 +0 + +0101000 ++2983 51 -3034 0 * +Ed + 1.0000048316906e-07 1 1 0 +1 53 0 0.50000000000098 1.07079632679522 +2 112 3 0 0.50000000000098 1.07079632679522 +2 113 53 0 0.50000000000098 1.07079632679522 +4 C0 3 0 53 0 +2 129 55 54 0.50000000000098 1.07079632679522 +0 + +0101000 ++2981 0 -2986 51 * +Ed + 1.00021896764488e-07 1 1 0 +1 58 0 -6.69499999997 4.10500000003036 +2 127 3 0 -6.69499999997 4.10500000003036 +2 128 1 0 -6.69499999997 4.10500000003036 +4 CN 3 0 1 0 +2 130 55 54 -6.69499999997 4.10500000003036 +0 + +0101000 ++2981 0 -2982 51 * +Ed + 1.00000355271368e-07 1 1 0 +1 59 0 4.21238898038486 6.78318530718057 +2 131 1 0 4.21238898038486 6.78318530718057 +2 132 58 0 4.21238898038486 6.78318530718057 +4 C0 1 0 58 0 +2 133 55 54 4.21238898038486 6.78318530718057 +0 + +0101000 ++2980 51 -2981 0 * +Ed + 1.00004432420032e-07 1 1 0 +1 60 0 -27.2 -16.3999999999994 +2 134 54 0 -27.2 -16.3999999999994 +2 135 55 0 -27.2 -16.3999999999994 +4 CN 54 0 55 0 +2 136 1 55 -27.2 -16.3999999999994 +0 + +0101000 ++2979 0 -2980 56 * +Ed + 1.00000369482223e-07 1 1 0 +1 57 0 5.78318530717861 8.35398163397426 +2 124 55 0 5.78318530717861 8.35398163397426 +2 125 57 0 5.78318530717861 8.35398163397426 +4 C0 55 0 57 0 +2 137 1 55 5.78318530717861 8.35398163397426 +0 + +0101000 ++2982 56 -2979 0 * +Ed + 1.0000027000624e-07 1 1 0 +1 55 0 2.07079632679468 2.64159265358882 +2 118 54 0 2.07079632679468 2.64159265358882 +2 119 56 0 2.07079632679468 2.64159265358882 +4 C0 54 0 56 0 +2 138 1 55 2.07079632679468 2.64159265358882 +0 + +0101000 ++2979 0 -2983 56 * +Ed + 1.00000582645043e-07 1 1 0 +1 59 0 3.64159265359077 4.21238898038486 +2 131 1 0 3.64159265359077 4.21238898038486 +2 132 58 0 3.64159265359077 4.21238898038486 +4 C0 1 0 58 0 +2 139 54 54 3.64159265359077 4.21238898038486 +0 + +0101000 ++2985 0 -2980 51 * +Ed + 1.00000184741111e-07 1 1 0 +1 61 0 5.21238898038399 8.35398163397378 +2 140 53 0 5.21238898038399 8.35398163397378 +4 C0 53 0 59 0 +2 141 59 0 5.21238898038399 8.35398163397378 +2 142 60 54 5.21238898038399 8.35398163397378 +0 + +0101000 ++2978 0 -2977 0 * +Ed + 1e-07 1 1 0 +1 62 0 -0.282842712487936 0.282842712491331 +2 143 53 0 -0.282842712487936 0.282842712491331 +2 144 58 0 -0.282842712487936 0.282842712491331 +4 G2 53 0 58 0 +0 + +0101000 ++2985 0 -2977 0 * +Ed + 1e-07 1 1 0 +1 63 0 -0.282842712487936 0.282842712491331 +2 145 53 0 -0.282842712487936 0.282842712491331 +2 146 58 0 -0.282842712487936 0.282842712491331 +4 G2 53 0 58 0 +0 + +0101000 ++2981 0 -2978 0 * +Ed + 1.00000213162821e-07 1 1 0 +1 64 0 2.0707963267942 5.21238898038399 +2 147 58 0 2.0707963267942 5.21238898038399 +4 C0 58 0 59 0 +2 148 59 0 2.0707963267942 5.21238898038399 +2 149 60 54 2.0707963267942 5.21238898038399 +0 + +0101000 ++2977 0 -2978 0 * +Ed + 1.00000227373675e-07 1 1 0 +1 65 0 1.07079632679402 3.14159265358979 +2 150 25 0 1.07079632679402 3.14159265358979 +2 151 61 0 1.07079632679402 3.14159265358979 +4 C0 25 0 61 0 +2 152 62 57 1.07079632679402 3.14159265358979 +0 + +0101000 ++2976 51 -2975 0 * +Ed + 1.00000383693077e-07 1 1 0 +1 66 0 -26.2 -16.3999999999991 +2 153 62 0 -26.2 -16.3999999999991 +2 154 63 0 -26.2 -16.3999999999991 +4 CN 62 0 63 0 +2 155 25 58 -26.2 -16.3999999999991 +0 + +0101000 ++2974 0 -2976 59 * +Ed + 1.0000135957112e-07 1 1 0 +1 67 0 3.14159265358979 5.21238898038557 +2 156 62 0 3.14159265358979 5.21238898038557 +2 157 64 0 3.14159265358979 5.21238898038557 +4 C0 62 0 64 0 +2 158 25 58 3.14159265358979 5.21238898038557 +0 + +0101000 ++2973 59 -2974 0 * +Ed + 1.00000127897692e-07 1 1 0 +1 68 0 -6.35 3.4500000000004 +2 159 25 0 -6.35 3.4500000000004 +2 160 23 0 -6.35 3.4500000000004 +4 CN 25 0 23 0 +2 161 62 57 -6.35 3.4500000000004 +0 + +0101000 ++2975 0 -2973 51 * +Ed + 1.00001417955637e-07 1 1 0 +1 69 0 5.21238898038557 6.28318530717967 +2 162 63 0 5.21238898038557 6.28318530717967 +2 163 65 0 5.21238898038557 6.28318530717967 +4 C0 63 0 65 0 +2 164 25 58 5.21238898038557 6.28318530717967 +0 + +0101000 ++2974 0 -2972 59 * +Ed + 1e-07 1 1 0 +1 70 0 3.45000000000027 6.75 +2 165 25 0 3.45000000000027 6.75 +2 166 23 0 3.45000000000027 6.75 +4 CN 25 0 23 0 +0 + +0101000 ++2972 51 -3019 0 * +Ed + 1e-07 1 1 0 +1 68 0 3.4500000000004 6.75 +2 159 25 0 3.4500000000004 6.75 +2 160 23 0 3.4500000000004 6.75 +4 CN 25 0 23 0 +0 + +0101000 ++2973 51 -3020 0 * +Ed + 1.00000298427949e-07 1 1 0 +1 65 0 0 1.07079632679402 +2 150 25 0 0 1.07079632679402 +2 151 61 0 0 1.07079632679402 +4 C0 25 0 61 0 +2 167 63 57 0 1.07079632679402 +0 + +0101000 ++2971 0 -2976 51 * +Ed + 1.00000085265128e-07 1 1 0 +1 70 0 -6.35 3.45000000000027 +2 165 25 0 -6.35 3.45000000000027 +2 166 23 0 -6.35 3.45000000000027 +4 CN 25 0 23 0 +2 168 63 57 -6.35 3.45000000000027 +0 + +0101000 ++2971 0 -2972 51 * +Ed + 1.00000341060513e-07 1 1 0 +1 71 0 4.21238898038381 6.28318530717959 +2 169 23 0 4.21238898038381 6.28318530717959 +2 170 66 0 4.21238898038381 6.28318530717959 +4 C0 23 0 66 0 +2 171 63 57 4.21238898038381 6.28318530717959 +0 + +0101000 ++2970 51 -2971 0 * +Ed + 1.00000312638804e-07 1 1 0 +1 72 0 -26.2 -16.4000000000005 +2 172 62 0 -26.2 -16.4000000000005 +2 173 63 0 -26.2 -16.4000000000005 +4 CN 62 0 63 0 +2 174 23 58 -26.2 -16.4000000000005 +0 + +0101000 ++2969 0 -2970 59 * +Ed + 1.00001355033128e-07 1 1 0 +1 69 0 6.28318530717967 8.35398163397536 +2 162 63 0 6.28318530717967 8.35398163397536 +2 163 65 0 6.28318530717967 8.35398163397536 +4 C0 63 0 65 0 +2 175 23 58 6.28318530717967 8.35398163397536 +0 + +0101000 ++2972 59 -2969 0 * +Ed + 1.00001128399136e-07 1 1 0 +1 67 0 2.07079632679577 3.14159265358979 +2 156 62 0 2.07079632679577 3.14159265358979 +2 157 64 0 2.07079632679577 3.14159265358979 +4 C0 62 0 64 0 +2 176 23 58 2.07079632679577 3.14159265358979 +0 + +0101000 ++2969 0 -2973 59 * +Ed + 1.00000326849658e-07 1 1 0 +1 71 0 3.14159265358979 4.21238898038381 +2 169 23 0 3.14159265358979 4.21238898038381 +2 170 66 0 3.14159265358979 4.21238898038381 +4 C0 23 0 66 0 +2 177 62 57 3.14159265358979 4.21238898038381 +0 + +0101000 ++2975 0 -2970 51 * +Ed + 1.00000213162821e-07 1 1 0 +1 73 0 3.14159265358979 6.28318530717959 +2 178 66 0 3.14159265358979 6.28318530717959 +4 C0 66 0 67 0 +2 179 67 0 3.14159265358979 6.28318530717959 +2 180 68 57 3.14159265358979 6.28318530717959 +0 + +0101000 ++2968 0 -2967 0 * +Ed + 1e-07 1 1 0 +1 74 0 -0.282842712474619 0.282842712474619 +2 181 66 0 -0.282842712474619 0.282842712474619 +2 182 61 0 -0.282842712474619 0.282842712474619 +4 CN 66 0 61 0 +0 + +0101000 ++2971 0 -2967 0 * +Ed + 1e-07 1 1 0 +1 75 0 -0.282842712474619 0.282842712474619 +2 183 66 0 -0.282842712474619 0.282842712474619 +2 184 61 0 -0.282842712474619 0.282842712474619 +4 CN 66 0 61 0 +0 + +0101000 ++2975 0 -2968 0 * +Ed + 1.00000255795385e-07 1 1 0 +1 76 0 0 3.14159265358979 +2 185 61 0 0 3.14159265358979 +4 C0 61 0 67 0 +2 186 67 0 0 3.14159265358979 +2 187 68 57 0 3.14159265358979 +0 + +0101000 ++2967 0 -2968 0 * +Ed + 1.00000255795385e-07 1 1 0 +1 77 0 1.07079632679411 3.14159265358979 +2 188 22 0 1.07079632679411 3.14159265358979 +2 189 69 0 1.07079632679411 3.14159265358979 +4 C0 22 0 69 0 +2 190 62 60 1.07079632679411 3.14159265358979 +0 + +0101000 ++2966 51 -2965 0 * +Ed + 1.00000056843419e-07 1 1 0 +1 66 0 -26.2 -16.3999999999998 +2 153 62 0 -26.2 -16.3999999999998 +2 154 63 0 -26.2 -16.3999999999998 +4 CN 62 0 63 0 +2 191 22 61 -26.2 -16.3999999999998 +0 + +0101000 ++2974 0 -2966 62 * +Ed + 1.00000913482761e-07 1 1 0 +1 67 0 3.14159265358979 5.21238898038557 +2 156 62 0 3.14159265358979 5.21238898038557 +2 157 64 0 3.14159265358979 5.21238898038557 +4 C0 62 0 64 0 +2 192 22 61 3.14159265358979 5.21238898038557 +0 + +0101000 ++2964 62 -2974 0 * +Ed + 1.00000142108547e-07 1 1 0 +1 78 0 -6.35 3.45000000000036 +2 193 22 0 -6.35 3.45000000000036 +2 194 20 0 -6.35 3.45000000000036 +4 CN 22 0 20 0 +2 195 62 60 -6.35 3.45000000000036 +0 + +0101000 ++2965 0 -2964 51 * +Ed + 1.00000934140782e-07 1 1 0 +1 69 0 5.21238898038557 6.28318530717965 +2 162 63 0 5.21238898038557 6.28318530717965 +2 163 65 0 5.21238898038557 6.28318530717965 +4 C0 63 0 65 0 +2 196 22 61 5.21238898038557 6.28318530717965 +0 + +0101000 ++2974 0 -2963 62 * +Ed + 1e-07 1 1 0 +1 79 0 3.45000000000044 6.75 +2 197 22 0 3.45000000000044 6.75 +2 198 20 0 3.45000000000044 6.75 +4 CN 22 0 20 0 +0 + +0101000 ++2963 51 -3021 0 * +Ed + 1e-07 1 1 0 +1 78 0 3.45000000000036 6.75 +2 193 22 0 3.45000000000036 6.75 +2 194 20 0 3.45000000000036 6.75 +4 CN 22 0 20 0 +0 + +0101000 ++2964 51 -3022 0 * +Ed + 1.00000355271368e-07 1 1 0 +1 77 0 0 1.07079632679411 +2 188 22 0 0 1.07079632679411 +2 189 69 0 0 1.07079632679411 +4 C0 22 0 69 0 +2 199 63 60 0 1.07079632679411 +0 + +0101000 ++2962 0 -2966 51 * +Ed + 1.00000099475983e-07 1 1 0 +1 79 0 -6.35 3.45000000000044 +2 197 22 0 -6.35 3.45000000000044 +2 198 20 0 -6.35 3.45000000000044 +4 CN 22 0 20 0 +2 200 63 60 -6.35 3.45000000000044 +0 + +0101000 ++2962 0 -2963 51 * +Ed + 1.00000341060513e-07 1 1 0 +1 80 0 4.21238898038381 6.28318530717959 +2 201 20 0 4.21238898038381 6.28318530717959 +2 202 70 0 4.21238898038381 6.28318530717959 +4 C0 20 0 70 0 +2 203 63 60 4.21238898038381 6.28318530717959 +0 + +0101000 ++2961 51 -2962 0 * +Ed + 1.00000540012479e-07 1 1 0 +1 72 0 -26.2 -16.4000000000005 +2 172 62 0 -26.2 -16.4000000000005 +2 173 63 0 -26.2 -16.4000000000005 +4 CN 62 0 63 0 +2 204 20 61 -26.2 -16.4000000000005 +0 + +0101000 ++2969 0 -2961 62 * +Ed + 1.00000369482223e-07 1 1 0 +1 69 0 6.28318530717965 8.35398163397536 +2 162 63 0 6.28318530717965 8.35398163397536 +2 163 65 0 6.28318530717965 8.35398163397536 +4 C0 63 0 65 0 +2 205 20 61 6.28318530717965 8.35398163397536 +0 + +0101000 ++2963 62 -2969 0 * +Ed + 1.00000952869335e-07 1 1 0 +1 67 0 2.07079632679577 3.14159265358979 +2 156 62 0 2.07079632679577 3.14159265358979 +2 157 64 0 2.07079632679577 3.14159265358979 +4 C0 62 0 64 0 +2 206 20 61 2.07079632679577 3.14159265358979 +0 + +0101000 ++2969 0 -2964 62 * +Ed + 1.00000341060513e-07 1 1 0 +1 80 0 3.14159265358979 4.21238898038381 +2 201 20 0 3.14159265358979 4.21238898038381 +2 202 70 0 3.14159265358979 4.21238898038381 +4 C0 20 0 70 0 +2 207 62 60 3.14159265358979 4.21238898038381 +0 + +0101000 ++2965 0 -2961 51 * +Ed + 1.00000227373675e-07 1 1 0 +1 81 0 3.14159265358979 6.28318530717959 +2 208 70 0 3.14159265358979 6.28318530717959 +4 C0 70 0 71 0 +2 209 71 0 3.14159265358979 6.28318530717959 +2 210 68 60 3.14159265358979 6.28318530717959 +0 + +0101000 ++2960 0 -2959 0 * +Ed + 1e-07 1 1 0 +1 82 0 -0.282842712474619 0.282842712474619 +2 211 70 0 -0.282842712474619 0.282842712474619 +2 212 69 0 -0.282842712474619 0.282842712474619 +4 CN 70 0 69 0 +0 + +0101000 ++2962 0 -2959 0 * +Ed + 1e-07 1 1 0 +1 83 0 -0.282842712474619 0.282842712474619 +2 213 70 0 -0.282842712474619 0.282842712474619 +2 214 69 0 -0.282842712474619 0.282842712474619 +4 CN 70 0 69 0 +0 + +0101000 ++2965 0 -2960 0 * +Ed + 1.00000255795385e-07 1 1 0 +1 84 0 4.71238898038469 7.85398163397448 +2 215 69 0 4.71238898038469 7.85398163397448 +4 C0 69 0 71 0 +2 216 71 0 4.71238898038469 7.85398163397448 +2 217 68 60 4.71238898038469 7.85398163397448 +0 + +0101000 ++2959 0 -2960 0 * +Ed + 1e-07 1 1 0 +1 85 0 -2.3 -2 +2 218 72 0 -2.3 -2 +2 219 43 0 -2.3 -2 +4 CN 72 0 43 0 +0 + +0101000 ++2958 0 -2957 0 * +Ed + 1e-07 1 1 0 +1 86 0 0 3.14159265358979 +2 220 72 0 0 3.14159265358979 +4 C0 72 0 40 0 +2 221 40 0 0 3.14159265358979 +0 + +0101000 ++2956 0 -2957 0 * +Ed + 1e-07 1 1 0 +1 87 0 -2.3 -2 +2 222 72 0 -2.3 -2 +2 223 43 0 -2.3 -2 +4 CN 72 0 43 0 +0 + +0101000 ++2955 0 -2956 0 * +Ed + 1e-07 1 1 0 +1 88 0 0 3.14159265358979 +2 224 72 0 0 3.14159265358979 +2 225 73 0 0 3.14159265358979 +4 C0 72 0 73 0 +0 + +0101000 ++2955 0 -2958 0 * +Ed + 1e-07 1 1 0 +1 89 0 6.1244163503479 6.28318530717959 +2 226 43 0 6.1244163503479 6.28318530717959 +4 C0 43 0 40 0 +2 227 40 0 6.1244163503479 6.28318530717959 +0 + +0101000 ++3003 0 -2956 0 * +Ed + 1e-07 1 1 0 +1 90 0 3.18112864423286 6.1244163503479 +2 228 43 0 3.18112864423286 6.1244163503479 +4 C0 43 0 38 0 +2 229 38 0 3.18112864423286 6.1244163503479 +0 + +0101000 ++3001 0 -3004 0 * +Ed + 1e-07 1 1 0 +1 91 0 3.14159265358979 3.18112864423286 +2 230 43 0 3.14159265358979 3.18112864423286 +4 C0 43 0 40 0 +2 231 40 0 3.14159265358979 3.18112864423286 +0 + +0101000 ++2957 0 -3000 0 * +Ed + 1e-07 1 1 0 +1 92 0 3.14159265358979 6.28318530717959 +2 232 43 0 3.14159265358979 6.28318530717959 +2 233 74 0 3.14159265358979 6.28318530717959 +4 C0 43 0 74 0 +0 + +0101000 ++2958 0 -2955 0 * +Ed + 1e-07 1 1 0 +1 93 0 0 3.14159265358979 +2 234 73 0 0 3.14159265358979 +4 C0 71 0 73 0 +2 235 71 0 0 3.14159265358979 +0 + +0101000 ++2954 0 -2953 0 * +Ed + 1e-07 1 1 0 +1 94 0 3.14159265358979 6.28318530717959 +2 236 74 0 3.14159265358979 6.28318530717959 +4 C0 71 0 74 0 +2 237 71 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++2953 0 -2954 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 95 0 0 3.14159265358979 +2 238 75 0 0 3.14159265358979 +4 C0 75 0 76 0 +2 239 76 0 0 3.14159265358979 +2 240 71 63 0 3.14159265358979 +2 241 67 64 0 3.14159265358979 +0 + +0101000 ++2952 0 -2951 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 96 0 3.14159265358979 6.28318530717959 +2 242 77 0 3.14159265358979 6.28318530717959 +4 C0 77 0 76 0 +2 243 76 0 3.14159265358979 6.28318530717959 +2 244 71 63 3.14159265358979 6.28318530717959 +2 245 67 64 3.14159265358979 6.28318530717959 +0 + +0101000 ++2951 0 -2952 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 97 0 2.07079632679489 5.21238898038468 +2 246 78 0 2.07079632679489 5.21238898038468 +4 C0 68 0 78 0 +2 247 68 0 2.07079632679489 5.21238898038468 +2 248 71 61 2.07079632679489 5.21238898038468 +2 249 67 58 2.07079632679489 5.21238898038468 +0 + +0101000 ++2950 0 -2949 0 * +Ed + 1.0000135957112e-07 1 1 0 +1 98 0 5.21238898038468 8.35398163397447 +2 250 79 0 5.21238898038468 8.35398163397447 +4 C0 68 0 79 0 +2 251 68 0 5.21238898038468 8.35398163397447 +2 252 71 61 5.21238898038468 8.35398163397447 +2 253 67 58 5.21238898038468 8.35398163397447 +0 + +0101000 ++2949 0 -2950 0 * +Ed + 1.00000971340767e-07 1 1 0 +1 99 0 3.14159265358979 6.28318530717959 +2 254 80 0 3.14159265358979 6.28318530717959 +4 C0 76 0 80 0 +2 255 76 0 3.14159265358979 6.28318530717959 +2 256 71 63 3.14159265358979 6.28318530717959 +2 257 67 64 3.14159265358979 6.28318530717959 +0 + +0101000 ++2948 0 -2947 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 100 0 0 3.14159265358979 +2 258 81 0 0 3.14159265358979 +4 C0 76 0 81 0 +2 259 76 0 0 3.14159265358979 +2 260 71 63 0 3.14159265358979 +2 261 67 64 0 3.14159265358979 +0 + +0101000 ++2947 0 -2948 0 * +Ed + 1e-07 1 1 0 +1 101 0 -0.14142135623731 0.141421356237306 +2 262 74 0 -0.14142135623731 0.141421356237306 +2 263 73 0 -0.14142135623731 0.141421356237306 +4 CN 74 0 73 0 +0 + +0101000 ++2953 0 -2958 0 * +Ed + 1e-07 1 1 0 +1 102 0 -0.14142135623731 0.14142135623731 +2 264 74 0 -0.14142135623731 0.14142135623731 +2 265 73 0 -0.14142135623731 0.14142135623731 +4 CN 74 0 73 0 +0 + +0101000 ++2954 0 -2955 0 * +Ed + 1e-07 1 1 0 +1 103 0 -2.3 -2 +2 266 82 0 -2.3 -2 +2 267 48 0 -2.3 -2 +4 CN 82 0 48 0 +0 + +0101000 ++2946 0 -2945 0 * +Ed + 1e-07 1 1 0 +1 104 0 3.14159265358979 6.28318530717959 +2 268 82 0 3.14159265358979 6.28318530717959 +4 C0 82 0 40 0 +2 269 40 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++2944 0 -2945 0 * +Ed + 1e-07 1 1 0 +1 105 0 -2.3 -2 +2 270 82 0 -2.3 -2 +2 271 48 0 -2.3 -2 +4 CN 82 0 48 0 +0 + +0101000 ++2943 0 -2944 0 * +Ed + 1e-07 1 1 0 +1 106 0 3.14159265358979 6.28318530717959 +2 272 82 0 3.14159265358979 6.28318530717959 +2 273 83 0 3.14159265358979 6.28318530717959 +4 C0 82 0 83 0 +0 + +0101000 ++2943 0 -2946 0 * +Ed + 1e-07 1 1 0 +1 107 0 3.10205666294673 3.14159265358979 +2 274 48 0 3.10205666294673 3.14159265358979 +4 C0 48 0 40 0 +2 275 40 0 3.10205666294673 3.14159265358979 +0 + +0101000 ++2995 0 -2944 0 * +Ed + 1e-07 1 1 0 +1 108 0 0.158768956831688 3.10205666294673 +2 276 48 0 0.158768956831688 3.10205666294673 +4 C0 48 0 38 0 +2 277 38 0 0.158768956831688 3.10205666294673 +0 + +0101000 ++2994 0 -2997 0 * +Ed + 1e-07 1 1 0 +1 109 0 0 0.158768956831688 +2 278 48 0 0 0.158768956831688 +4 C0 48 0 40 0 +2 279 40 0 0 0.158768956831688 +0 + +0101000 ++2945 0 -2992 0 * +Ed + 1e-07 1 1 0 +1 110 0 0 3.14159265358979 +2 280 48 0 0 3.14159265358979 +2 281 84 0 0 3.14159265358979 +4 C0 48 0 84 0 +0 + +0101000 ++2946 0 -2943 0 * +Ed + 1e-07 1 1 0 +1 111 0 3.14159265358979 6.28318530717959 +2 282 83 0 3.14159265358979 6.28318530717959 +4 C0 67 0 83 0 +2 283 67 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++2942 0 -2941 0 * +Ed + 1e-07 1 1 0 +1 112 0 0 3.14159265358979 +2 284 84 0 0 3.14159265358979 +4 C0 67 0 84 0 +2 285 67 0 0 3.14159265358979 +0 + +0101000 ++2941 0 -2942 0 * +Ed + 1e-07 1 1 0 +1 113 0 -0.14142135623731 0.14142135623731 +2 286 84 0 -0.14142135623731 0.14142135623731 +2 287 83 0 -0.14142135623731 0.14142135623731 +4 CN 84 0 83 0 +0 + +0101000 ++2941 0 -2946 0 * +Ed + 1e-07 1 1 0 +1 114 0 -0.14142135623731 0.141421356237306 +2 288 84 0 -0.14142135623731 0.141421356237306 +2 289 83 0 -0.14142135623731 0.141421356237306 +4 CN 84 0 83 0 +0 + +0101000 ++2942 0 -2943 0 * +Ed + 1e-07 1 1 0 +1 115 0 -2.3 2.5 +2 290 39 0 -2.3 2.5 +2 291 52 0 -2.3 2.5 +4 CN 39 0 52 0 +0 + +0101000 ++2940 0 -2939 0 * +Ed + 1e-07 1 1 0 +1 116 0 3.92102450242678 6.28318530717959 +2 292 39 0 3.92102450242678 6.28318530717959 +4 C0 39 0 38 0 +2 293 38 0 3.92102450242678 6.28318530717959 +0 + +0101000 ++3009 0 -2939 0 * +Ed + 1e-07 1 1 0 +1 117 0 3.14159265358979 3.92102450242678 +2 294 39 0 3.14159265358979 3.92102450242678 +4 C0 39 0 40 0 +2 295 40 0 3.14159265358979 3.92102450242678 +0 + +0101000 ++2938 0 -3008 0 * +Ed + 1e-07 1 1 0 +1 118 0 -2.3 -2 +2 296 39 0 -2.3 -2 +2 297 52 0 -2.3 -2 +4 CN 39 0 52 0 +0 + +0101000 ++2937 0 -2938 0 * +Ed + 1e-07 1 1 0 +1 119 0 3.14159265358979 6.28318530717959 +2 298 39 0 3.14159265358979 6.28318530717959 +2 299 85 0 3.14159265358979 6.28318530717959 +4 C0 39 0 85 0 +0 + +0101000 ++2937 0 -2940 0 * +Ed + 1e-07 1 1 0 +1 120 0 2.03412743401877 3.14159265358979 +2 300 52 0 2.03412743401877 3.14159265358979 +4 C0 52 0 40 0 +2 301 40 0 2.03412743401877 3.14159265358979 +0 + +0101000 ++2987 0 -2938 0 * +Ed + 1e-07 1 1 0 +1 121 0 0 2.03412743401877 +2 302 52 0 0 2.03412743401877 +4 C0 52 0 38 0 +2 303 38 0 0 2.03412743401877 +0 + +0101000 ++2939 0 -2988 0 * +Ed + 1e-07 1 1 0 +1 122 0 0 3.14159265358979 +2 304 52 0 0 3.14159265358979 +2 305 86 0 0 3.14159265358979 +4 C0 52 0 86 0 +0 + +0101000 ++2940 0 -2937 0 * +Ed + 1e-07 1 1 0 +1 123 0 3.14159265358979 6.28318530717959 +2 306 85 0 3.14159265358979 6.28318530717959 +4 C0 59 0 85 0 +2 307 59 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++2936 0 -2935 0 * +Ed + 1e-07 1 1 0 +1 124 0 0 3.14159265358979 +2 308 86 0 0 3.14159265358979 +4 C0 59 0 86 0 +2 309 59 0 0 3.14159265358979 +0 + +0101000 ++2935 0 -2936 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 125 0 0 3.14159265358979 +2 310 87 0 0 3.14159265358979 +4 C0 87 0 88 0 +2 311 88 0 0 3.14159265358979 +2 312 59 65 0 3.14159265358979 +0 + +0101000 ++2934 0 -2933 0 * +Ed + 1.00001346361305e-07 1 1 0 +1 126 0 3.14159265358979 6.28318530717959 +2 313 89 0 3.14159265358979 6.28318530717959 +4 C0 89 0 88 0 +2 314 88 0 3.14159265358979 6.28318530717959 +2 315 59 65 3.14159265358979 6.28318530717959 +0 + +0101000 ++2933 0 -2934 0 * +Ed + 1.00000971340767e-07 1 1 0 +1 127 0 2.07079632679458 5.21238898038437 +2 316 90 0 2.07079632679458 5.21238898038437 +4 C0 60 0 90 0 +2 317 60 0 2.07079632679458 5.21238898038437 +2 318 59 55 2.07079632679458 5.21238898038437 +0 + +0101000 ++2932 0 -2931 0 * +Ed + 1.00001350629417e-07 1 1 0 +1 128 0 5.21238898038437 8.35398163397416 +2 319 91 0 5.21238898038437 8.35398163397416 +4 C0 60 0 91 0 +2 320 60 0 5.21238898038437 8.35398163397416 +2 321 59 55 5.21238898038437 8.35398163397416 +0 + +0101000 ++2931 0 -2932 0 * +Ed + 1.00000987117516e-07 1 1 0 +1 129 0 3.14159265358979 6.28318530717959 +2 322 92 0 3.14159265358979 6.28318530717959 +4 C0 88 0 92 0 +2 323 88 0 3.14159265358979 6.28318530717959 +2 324 59 65 3.14159265358979 6.28318530717959 +0 + +0101000 ++2930 0 -2929 0 * +Ed + 1.00000971340767e-07 1 1 0 +1 130 0 0 3.14159265358979 +2 325 93 0 0 3.14159265358979 +4 C0 88 0 93 0 +2 326 88 0 0 3.14159265358979 +2 327 59 65 0 3.14159265358979 +0 + +0101000 ++2929 0 -2930 0 * +Ed + 1e-07 1 1 0 +1 131 0 -0.141421356237315 0.141421356237306 +2 328 86 0 -0.141421356237315 0.141421356237306 +2 329 85 0 -0.141421356237315 0.141421356237306 +4 CN 86 0 85 0 +0 + +0101000 ++2935 0 -2940 0 * +Ed + 1e-07 1 1 0 +1 132 0 -0.141421356237308 0.141421356237311 +2 330 86 0 -0.141421356237308 0.141421356237311 +2 331 85 0 -0.141421356237308 0.141421356237311 +4 CN 86 0 85 0 +0 + +0101000 ++2936 0 -2937 0 * +Ed + 1e-07 1 1 0 +1 133 0 -1 1 +4 C0 34 0 94 0 +2 332 34 0 -1 1 +2 333 94 0 -1 1 +0 + +0101000 ++2928 0 -2927 0 * +Ed + 1e-07 1 1 0 +1 134 0 -5.05 5.05 +2 334 35 0 -5.05 5.05 +4 G1 34 0 35 0 +2 335 34 0 -5.05 5.05 +0 + +0101000 ++3012 0 -2927 0 * +Ed + 1e-07 1 1 0 +1 135 0 -5.05 5.05 +2 336 32 0 -5.05 5.05 +4 G1 34 0 32 0 +2 337 34 0 -5.05 5.05 +0 + +0101000 ++3014 0 -2928 0 * +Ed + 1e-07 1 1 0 +1 136 0 -1.85 8.25 +2 338 35 0 -1.85 8.25 +4 G1 35 0 36 0 +2 339 36 0 -1.85 8.25 +0 + +0101000 ++3768 0 -3011 0 * +Ed + 1e-07 1 1 0 +1 137 0 1.57079937826365 4.71238898038469 +2 340 35 0 1.57079937826365 4.71238898038469 +2 341 95 0 1.57079937826365 4.71238898038469 +4 C0 35 0 95 0 +0 + +0101000 ++3768 0 -2927 0 * +Ed + 1e-07 1 1 0 +1 138 0 -0.999999993899998 0.999999993800003 +4 C0 36 0 96 0 +2 342 36 0 -0.999999993899998 0.999999993800003 +2 343 96 0 -0.999999993899998 0.999999993800003 +0 + +0101000 ++3768 0 -3767 0 * +Ed + 1e-07 1 1 0 +1 139 0 -5.05 5.05 +2 344 32 0 -5.05 5.05 +4 G1 36 0 32 0 +2 345 36 0 -5.05 5.05 +0 + +0101000 ++3013 0 -3767 0 * +Ed + 1e-07 1 1 0 +1 140 0 4.71238898038469 7.85398468736511 +2 346 32 0 4.71238898038469 7.85398468736511 +2 347 97 0 4.71238898038469 7.85398468736511 +4 C0 32 0 97 0 +0 + +0101000 ++2928 0 -3767 0 * +Ed + 1e-07 1 1 0 +1 141 0 -0.28284271247462 0.282842712474619 +2 348 95 0 -0.28284271247462 0.282842712474619 +4 G1 96 0 95 0 +2 349 96 0 -0.28284271247462 0.282842712474619 +0 + +0101000 ++3766 0 -3768 0 * +Ed + 1e-07 1 1 0 +1 142 0 -40.7521847057 -38.7521834974 +4 C0 96 0 40 0 +2 350 40 0 -40.7521847057 -38.7521834974 +2 351 96 0 -40.7521847057 -38.7521834974 +0 + +0101000 ++3766 0 -3765 0 * +Ed + 1e-07 1 1 0 +1 143 0 -0.28284271247462 0.282842712474619 +2 352 97 0 -0.28284271247462 0.282842712474619 +4 G1 96 0 97 0 +2 353 96 0 -0.28284271247462 0.282842712474619 +0 + +0101000 ++3765 0 -3767 0 * +Ed + 1e-07 1 1 0 +1 144 0 -0.282842712474619 0.282842712474619 +2 354 97 0 -0.282842712474619 0.282842712474619 +4 G1 97 0 94 0 +2 355 94 0 -0.282842712474619 0.282842712474619 +0 + +0101000 ++2928 0 -3764 0 * +Ed + 1e-07 1 1 0 +1 145 0 3.14159265358979 6.283188180959 +2 356 97 0 3.14159265358979 6.283188180959 +4 C0 97 0 40 0 +2 357 40 0 3.14159265358979 6.283188180959 +0 + +0101000 ++3764 0 -3765 0 * +Ed + 1e-07 1 1 0 +1 146 0 38.7521639557 40.7521639557 +4 C0 94 0 40 0 +2 358 40 0 38.7521639557 40.7521639557 +2 359 94 0 38.7521639557 40.7521639557 +0 + +0101000 ++3764 0 -3763 0 * +Ed + 1e-07 1 1 0 +1 147 0 -0.282842712474619 0.282842712474619 +2 360 95 0 -0.282842712474619 0.282842712474619 +4 G1 94 0 95 0 +2 361 94 0 -0.282842712474619 0.282842712474619 +0 + +0101000 ++3763 0 -2927 0 * +Ed + 1e-07 1 1 0 +1 148 0 3.05147058888093e-06 3.14159265358979 +2 362 95 0 3.05147058888093e-06 3.14159265358979 +4 C0 95 0 40 0 +2 363 40 0 3.05147058888093e-06 3.14159265358979 +0 + +0101000 ++3766 0 -3763 0 * +Ed + 1e-07 1 1 0 +1 149 0 -1.85 7.25 +2 364 26 0 -1.85 7.25 +2 365 28 0 -1.85 7.25 +4 CN 26 0 28 0 +0 + +0101000 ++3762 0 -3017 0 * +Ed + 1e-07 1 1 0 +1 150 0 -1.85 7.25 +2 366 26 0 -1.85 7.25 +2 367 28 0 -1.85 7.25 +4 CN 26 0 28 0 +0 + +0101000 ++3761 0 -3018 0 * +Ed + 1e-07 1 1 0 +1 151 0 3.14159265358979 6.28318530717959 +2 368 26 0 3.14159265358979 6.28318530717959 +2 369 98 0 3.14159265358979 6.28318530717959 +4 C0 26 0 98 0 +0 + +0101000 ++3761 0 -3762 0 * +Ed + 1e-07 1 1 0 +1 152 0 0 3.14159265358979 +2 370 28 0 0 3.14159265358979 +2 371 99 0 0 3.14159265358979 +4 C0 28 0 99 0 +0 + +0101000 ++3762 0 -3761 0 * +Ed + 1e-07 1 1 0 +1 153 0 4.71238898038469 7.85398163397448 +2 372 99 0 4.71238898038469 7.85398163397448 +4 C0 99 0 40 0 +2 373 40 0 4.71238898038469 7.85398163397448 +0 + +0101000 ++3760 0 -3759 0 * +Ed + 1e-07 1 1 0 +1 154 0 -0.282842712474619 0.282842712474619 +2 374 99 0 -0.282842712474619 0.282842712474619 +2 375 98 0 -0.282842712474619 0.282842712474619 +4 CN 99 0 98 0 +0 + +0101000 ++3761 0 -3759 0 * +Ed + 1e-07 1 1 0 +1 155 0 -0.282842712474619 0.282842712474619 +2 376 99 0 -0.282842712474619 0.282842712474619 +2 377 98 0 -0.282842712474619 0.282842712474619 +4 CN 99 0 98 0 +0 + +0101000 ++3762 0 -3760 0 * +Ed + 1e-07 1 1 0 +1 156 0 3.14159265358979 6.28318530717959 +2 378 98 0 3.14159265358979 6.28318530717959 +4 C0 98 0 40 0 +2 379 40 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3759 0 -3760 0 * +Ed + 1e-07 1 1 0 +1 157 0 -4.3041571954 4.3041571953 +4 C0 45 0 40 0 +2 380 45 0 -4.3041571954 4.3041571953 +2 381 40 0 -4.3041571954 4.3041571953 +0 + +0101000 ++2999 0 -3758 0 * +Ed + 1e-07 1 1 0 +1 158 0 -4.3041571954 4.3041571953 +4 C0 45 0 38 0 +2 382 45 0 -4.3041571954 4.3041571953 +2 383 38 0 -4.3041571954 4.3041571953 +0 + +0101000 ++3002 0 -3757 0 * +Ed + 1e-07 1 1 0 +1 159 0 -2.25 2.25 +2 384 100 0 -2.25 2.25 +4 G1 45 0 100 0 +2 385 45 0 -2.25 2.25 +0 + +0101000 ++3758 0 -3757 0 * +Ed + 1e-07 1 1 0 +1 160 0 3.69290962272204 4.71238898038469 +2 386 100 0 3.69290962272204 4.71238898038469 +4 C0 100 0 40 0 +2 387 40 0 3.69290962272204 4.71238898038469 +0 + +0101000 ++3756 0 -3758 0 * +Ed + 1e-07 1 1 0 +1 161 0 3.69290962272204 4.71238898038469 +2 388 100 0 3.69290962272204 4.71238898038469 +4 C0 100 0 38 0 +2 389 38 0 3.69290962272204 4.71238898038469 +0 + +0101000 ++3755 0 -3757 0 * +Ed + 1e-07 1 1 0 +1 162 0 -2.25 2.25 +2 390 100 0 -2.25 2.25 +2 391 101 0 -2.25 2.25 +4 G1 100 0 101 0 +0 + +0101000 ++3756 0 -3755 0 * +Ed + 1e-07 1 1 0 +1 163 0 -2.25 2.25 +2 392 102 0 -2.25 2.25 +4 G1 47 0 102 0 +2 393 47 0 -2.25 2.25 +0 + +0101000 ++3754 0 -3753 0 * +Ed + 1e-07 1 1 0 +1 164 0 -4.3041571954 4.3041571953 +4 C0 47 0 38 0 +2 394 47 0 -4.3041571954 4.3041571953 +2 395 38 0 -4.3041571954 4.3041571953 +0 + +0101000 ++2998 0 -3754 0 * +Ed + 1e-07 1 1 0 +1 165 0 -4.3041571954 4.3041571953 +4 C0 47 0 40 0 +2 396 47 0 -4.3041571954 4.3041571953 +2 397 40 0 -4.3041571954 4.3041571953 +0 + +0101000 ++2996 0 -3753 0 * +Ed + 1e-07 1 1 0 +1 166 0 2.59027568445897 3.69290962272168 +2 398 101 0 2.59027568445897 3.69290962272168 +4 C0 101 0 40 0 +2 399 40 0 2.59027568445897 3.69290962272168 +0 + +0101000 ++3752 0 -3756 0 * +Ed + 1e-07 1 1 0 +1 167 0 2.59027568445897 3.69290962272168 +2 400 101 0 2.59027568445897 3.69290962272168 +4 C0 101 0 38 0 +2 401 38 0 2.59027568445897 3.69290962272168 +0 + +0101000 ++3751 0 -3755 0 * +Ed + 1e-07 1 1 0 +1 168 0 -2.25 2.25 +2 402 101 0 -2.25 2.25 +2 403 102 0 -2.25 2.25 +4 G1 101 0 102 0 +0 + +0101000 ++3752 0 -3751 0 * +Ed + 1e-07 1 1 0 +1 169 0 1.5707963267949 2.59027568446606 +2 404 102 0 1.5707963267949 2.59027568446606 +4 C0 40 0 102 0 +2 405 40 0 1.5707963267949 2.59027568446606 +0 + +0101000 ++3753 0 -3752 0 * +Ed + 1e-07 1 1 0 +1 170 0 0.551316969123729 1.5707963267949 +2 406 102 0 0.551316969123729 1.5707963267949 +4 C0 102 0 38 0 +2 407 38 0 0.551316969123729 1.5707963267949 +0 + +0101000 ++3751 0 -3754 0 * +Ed + 1e-07 1 1 0 +1 171 0 -6.1 6.1 +2 408 6 0 -6.1 6.1 +4 G1 5 0 6 0 +2 409 5 0 -6.1 6.1 +0 + +0101000 ++3750 0 -3031 51 * +Ed + 1e-07 1 1 0 +1 172 0 -6.1 6.1 +2 410 18 0 -6.1 6.1 +4 G1 5 0 18 0 +2 411 5 0 -6.1 6.1 +0 + +0101000 ++3749 0 -3032 51 * +Ed + 1e-07 1 1 0 +1 173 0 -54.5 54.5 +4 C0 5 0 103 0 +2 412 5 0 -54.5 54.5 +2 413 103 0 -54.5 54.5 +0 + +0101000 ++3749 0 -3750 0 * +Ed + 1e-07 1 1 0 +1 174 0 -5.7 6.5 +2 414 6 0 -5.7 6.5 +4 G1 6 0 8 0 +2 415 8 0 -5.7 6.5 +0 + +0101000 ++3748 0 -3030 51 * +Ed + 9.51703163673272e-05 1 1 0 +1 175 0 109 156.123889804 +2 416 6 0 109 156.123889804 +2 417 104 0 109 156.123889804 +4 C0 6 0 104 0 +0 + +0101000 ++3750 0 -3748 0 * +Ed + 1e-07 1 1 0 +1 176 0 -6.1 6.1 +2 418 9 0 -6.1 6.1 +4 G1 8 0 9 0 +2 419 8 0 -6.1 6.1 +0 + +0101000 ++3747 0 -3029 51 * +Ed + 1e-07 1 1 0 +1 177 0 -5 5 +4 C0 8 0 105 0 +2 420 8 0 -5 5 +2 421 105 0 -5 5 +0 + +0101000 ++3748 0 -3747 0 * +Ed + 1e-07 1 1 0 +1 178 0 -5.7 6.5 +2 422 9 0 -5.7 6.5 +4 G1 9 0 11 0 +2 423 11 0 -5.7 6.5 +0 + +0101000 ++3746 0 -3028 51 * +Ed + 0.000329339234167311 1 1 0 +1 179 0 166.123889804 191.012333945 +2 424 9 0 166.123889804 191.012333945 +2 425 106 0 166.123889804 191.012333945 +4 C0 9 0 106 0 +0 + +0101000 ++3747 0 -3746 0 * +Ed + 1e-07 1 1 0 +1 180 0 -6.099999999999 6.1 +2 426 12 0 -6.099999999999 6.1 +4 G1 11 0 12 0 +2 427 11 0 -6.099999999999 6.1 +0 + +0101000 ++3745 0 -3027 51 * +Ed + 1e-07 1 1 0 +1 181 0 -14.5117153224708 14.5117153225591 +4 C0 11 0 107 0 +2 428 11 0 -14.5117153224708 14.5117153225591 +2 429 107 0 -14.5117153224708 14.5117153225591 +0 + +0101000 ++3746 0 -3745 0 * +Ed + 1e-07 1 1 0 +1 182 0 -5.7 6.5 +2 430 12 0 -5.7 6.5 +4 G1 12 0 14 0 +2 431 14 0 -5.7 6.5 +0 + +0101000 ++3744 0 -3026 51 * +Ed + 0.000102671200703963 1 1 0 +1 183 0 220.03576459 262.063292978 +2 432 12 0 220.03576459 262.063292978 +2 433 108 0 220.03576459 262.063292978 +4 C0 12 0 108 0 +0 + +0101000 ++3745 0 -3744 0 * +Ed + 1e-07 1 1 0 +1 184 0 -6.1 6.1 +2 434 15 0 -6.1 6.1 +4 G1 14 0 15 0 +2 435 14 0 -6.1 6.1 +0 + +0101000 ++3743 0 -3025 51 * +Ed + 1e-07 1 1 0 +1 185 0 -17.3985400243 17.3985400243 +4 C0 14 0 109 0 +2 436 14 0 -17.3985400243 17.3985400243 +2 437 109 0 -17.3985400243 17.3985400243 +0 + +0101000 ++3744 0 -3743 0 * +Ed + 1e-07 1 1 0 +1 186 0 -5.7 6.5 +2 438 15 0 -5.7 6.5 +4 G1 15 0 17 0 +2 439 17 0 -5.7 6.5 +0 + +0101000 ++3742 0 -3024 51 * +Ed + 0.000332604549846037 1 1 0 +1 187 0 296.860373027 381.683374674 +2 440 15 0 296.860373027 381.683374674 +2 441 110 0 296.860373027 381.683374674 +4 C0 15 0 110 0 +0 + +0101000 ++3743 0 -3742 0 * +Ed + 1e-07 1 1 0 +1 188 0 -6.1 6.1 +2 442 18 0 -6.1 6.1 +4 G1 17 0 18 0 +2 443 17 0 -6.1 6.1 +0 + +0101000 ++3741 0 -3023 51 * +Ed + 1e-07 1 1 0 +1 189 0 -1 1 +4 C0 17 0 111 0 +2 444 17 0 -1 1 +2 445 111 0 -1 1 +0 + +0101000 ++3742 0 -3741 0 * +Ed + 0.00331634368160302 1 1 0 +1 190 0 383.683374674 427.665671824 +2 446 18 0 383.683374674 427.665671824 +2 447 112 0 383.683374674 427.665671824 +4 C0 18 0 112 0 +0 + +0101000 ++3741 0 -3749 0 * +Ed + 1.78496884545777e-06 1 1 0 +1 191 0 103.765818054 165.078288992 +2 448 112 0 103.765818054 165.078288992 +4 C0 38 0 112 0 +2 449 38 0 103.765818054 165.078288992 +0 + +0101000 ++3740 0 -3739 0 * +Ed + 1e-07 1 1 0 +1 192 0 -0.99999877806 1 +4 C0 38 0 111 0 +2 450 38 0 -0.99999877806 1 +2 451 111 0 -0.99999877806 1 +0 + +0101000 ++3738 0 -3740 0 * +Ed + 1e-07 1 1 0 +1 193 0 206.347322877 325.41616118 +2 452 110 0 206.347322877 325.41616118 +4 C0 38 0 110 0 +2 453 38 0 206.347322877 325.41616118 +0 + +0101000 ++3737 0 -3738 0 * +Ed + 1e-07 1 1 0 +1 194 0 -17.3984787043 17.3985400243 +4 C0 38 0 109 0 +2 454 38 0 -17.3984787043 17.3985400243 +2 455 109 0 -17.3984787043 17.3985400243 +0 + +0101000 ++3736 0 -3737 0 * +Ed + 1e-07 1 1 0 +1 195 0 120.5863912 179.747541089 +2 456 108 0 120.5863912 179.747541089 +4 C0 38 0 108 0 +2 457 38 0 120.5863912 179.747541089 +0 + +0101000 ++3735 0 -3736 0 * +Ed + 1e-07 1 1 0 +1 196 0 -14.5117506034196 14.5117153224708 +4 C0 38 0 107 0 +2 458 38 0 -14.5117506034196 14.5117153224708 +2 459 107 0 -14.5117506034196 14.5117153224708 +0 + +0101000 ++3734 0 -3735 0 * +Ed + 1e-07 1 1 0 +1 197 0 62.094959106 96.6845153915 +2 460 106 0 62.094959106 96.6845153915 +4 C0 38 0 106 0 +2 461 38 0 62.094959106 96.6845153915 +0 + +0101000 ++3733 0 -3734 0 * +Ed + 1e-07 1 1 0 +1 198 0 -5.00002261243 5 +4 C0 38 0 105 0 +2 462 38 0 -5.00002261243 5 +2 463 105 0 -5.00002261243 5 +0 + +0101000 ++3732 0 -3733 0 * +Ed + 1e-07 1 1 0 +1 199 0 243.594787522 309.353508481 +2 464 104 0 243.594787522 309.353508481 +4 C0 38 0 104 0 +2 465 38 0 243.594787522 309.353508481 +0 + +0101000 ++3731 0 -3732 0 * +Ed + 1e-07 1 1 0 +1 200 0 -54.5000035699 54.5 +4 C0 38 0 103 0 +2 466 38 0 -54.5000035699 54.5 +2 467 103 0 -54.5000035699 54.5 +0 + +0101000 ++3739 0 -3731 0 * +Ed + 1.80433595155811e-06 1 1 0 +1 201 0 -0.56568516126912 0.565685424949237 +2 468 112 0 -0.56568516126912 0.565685424949237 +4 G1 103 0 112 0 +2 469 103 0 -0.56568516126912 0.565685424949237 +0 + +0101000 ++3739 0 -3749 0 * +Ed + 1e-07 1 1 0 +1 202 0 -0.56568542494924 0.565685424949237 +2 470 104 0 -0.56568542494924 0.565685424949237 +4 G1 103 0 104 0 +2 471 103 0 -0.56568542494924 0.565685424949237 +0 + +0101000 ++3731 0 -3750 0 * +Ed + 6.23815851957287e-06 1 1 0 +1 203 0 0 1.1313708499 +2 472 104 0 0 1.1313708499 +4 G1 104 0 105 0 +2 473 105 0 0 1.1313708499 +0 + +0101000 ++3732 0 -3748 0 * +Ed + 1e-07 1 1 0 +1 204 0 -0.565685424949232 0.565685424949242 +2 474 106 0 -0.565685424949232 0.565685424949242 +4 G1 105 0 106 0 +2 475 105 0 -0.565685424949232 0.565685424949242 +0 + +0101000 ++3733 0 -3747 0 * +Ed + 2.52840338211553e-06 1 1 0 +1 205 0 0 1.1313708499 +2 476 106 0 0 1.1313708499 +4 G1 106 0 107 0 +2 477 107 0 0 1.1313708499 +0 + +0101000 ++3734 0 -3746 0 * +Ed + 1e-07 1 1 0 +1 206 0 -0.565685424917272 0.565685424980412 +2 478 108 0 -0.565685424917272 0.565685424980412 +4 G1 107 0 108 0 +2 479 107 0 -0.565685424917272 0.565685424980412 +0 + +0101000 ++3735 0 -3745 0 * +Ed + 5.937776443219e-06 1 1 0 +1 207 0 0 1.1313708499 +2 480 108 0 0 1.1313708499 +4 G1 108 0 109 0 +2 481 109 0 0 1.1313708499 +0 + +0101000 ++3736 0 -3744 0 * +Ed + 1e-07 1 1 0 +1 208 0 -0.565685424949237 0.565685424949237 +2 482 110 0 -0.565685424949237 0.565685424949237 +4 G1 109 0 110 0 +2 483 109 0 -0.565685424949237 0.565685424949237 +0 + +0101000 ++3737 0 -3743 0 * +Ed + 1.2049220497684e-07 1 1 0 +1 209 0 0 1.13137072940904 +2 484 110 0 0 1.13137072940904 +4 G1 110 0 111 0 +2 485 111 0 0 1.13137072940904 +0 + +0101000 ++3738 0 -3742 0 * +Ed + 1e-07 1 1 0 +1 210 0 -0.565685424949232 0.565685424949242 +2 486 112 0 -0.565685424949232 0.565685424949242 +4 G1 111 0 112 0 +2 487 111 0 -0.565685424949232 0.565685424949242 +0 + +0101000 ++3740 0 -3741 0 * +Ed + 1e-07 1 1 0 +1 211 0 -0.5 0.5 +2 488 19 0 -0.5 0.5 +4 G1 113 0 19 0 +2 489 113 0 -0.5 0.5 +0 + +0101000 ++3032 66 -3730 0 * +Ed + 1e-07 1 1 0 +1 212 0 -0.5 0.5 +2 490 7 0 -0.5 0.5 +4 G1 113 0 7 0 +2 491 113 0 -0.5 0.5 +0 + +0101000 ++3031 66 -3729 0 * +Ed + 1e-07 1 1 0 +1 213 0 -54.5 54.5 +4 C0 113 0 114 0 +2 492 114 0 -54.5 54.5 +2 493 113 0 -54.5 54.5 +0 + +0101000 ++3730 0 -3729 0 * +Ed + 1e-07 1 1 0 +1 214 0 -0.5 0.5 +2 494 7 0 -0.5 0.5 +4 G1 7 0 115 0 +2 495 115 0 -0.5 0.5 +0 + +0101000 ++3030 66 -3728 0 * +Ed + 1e-07 1 1 0 +1 215 0 109 156.123889804 +2 496 7 0 109 156.123889804 +4 C0 7 0 114 0 +2 497 114 0 109 156.123889804 +0 + +0101000 ++3729 0 -3728 0 * +Ed + 1e-07 1 1 0 +1 216 0 -0.5 0.5 +2 498 10 0 -0.5 0.5 +4 G1 115 0 10 0 +2 499 115 0 -0.5 0.5 +0 + +0101000 ++3029 66 -3727 0 * +Ed + 1e-07 1 1 0 +1 217 0 -5 5 +4 C0 115 0 114 0 +2 500 114 0 -5 5 +2 501 115 0 -5 5 +0 + +0101000 ++3728 0 -3727 0 * +Ed + 1e-07 1 1 0 +1 218 0 -0.5 0.5 +2 502 10 0 -0.5 0.5 +4 G1 10 0 116 0 +2 503 116 0 -0.5 0.5 +0 + +0101000 ++3028 66 -3726 0 * +Ed + 1e-07 1 1 0 +1 219 0 166.123889804 191.012333945 +2 504 10 0 166.123889804 191.012333945 +4 C0 10 0 114 0 +2 505 114 0 166.123889804 191.012333945 +0 + +0101000 ++3727 0 -3726 0 * +Ed + 1e-07 1 1 0 +1 220 0 -0.5 0.5 +2 506 13 0 -0.5 0.5 +4 G1 116 0 13 0 +2 507 116 0 -0.5 0.5 +0 + +0101000 ++3027 66 -3725 0 * +Ed + 1e-07 1 1 0 +1 221 0 -14.5117153225591 14.5117153224708 +4 C0 116 0 114 0 +2 508 114 0 -14.5117153225591 14.5117153224708 +2 509 116 0 -14.5117153225591 14.5117153224708 +0 + +0101000 ++3726 0 -3725 0 * +Ed + 1e-07 1 1 0 +1 222 0 -0.5 0.5 +2 510 13 0 -0.5 0.5 +4 G1 13 0 117 0 +2 511 117 0 -0.5 0.5 +0 + +0101000 ++3026 66 -3724 0 * +Ed + 1e-07 1 1 0 +1 223 0 220.03576459 262.063292978 +2 512 13 0 220.03576459 262.063292978 +4 C0 13 0 114 0 +2 513 114 0 220.03576459 262.063292978 +0 + +0101000 ++3725 0 -3724 0 * +Ed + 1e-07 1 1 0 +1 224 0 -0.5 0.5 +2 514 16 0 -0.5 0.5 +4 G1 117 0 16 0 +2 515 117 0 -0.5 0.5 +0 + +0101000 ++3025 66 -3723 0 * +Ed + 1e-07 1 1 0 +1 225 0 -17.3985400243 17.3985400243 +4 C0 117 0 114 0 +2 516 114 0 -17.3985400243 17.3985400243 +2 517 117 0 -17.3985400243 17.3985400243 +0 + +0101000 ++3724 0 -3723 0 * +Ed + 1e-07 1 1 0 +1 226 0 -0.5 0.5 +2 518 16 0 -0.5 0.5 +4 G1 16 0 118 0 +2 519 118 0 -0.5 0.5 +0 + +0101000 ++3024 66 -3722 0 * +Ed + 1e-07 1 1 0 +1 227 0 296.860373027 381.683374674 +2 520 16 0 296.860373027 381.683374674 +4 C0 16 0 114 0 +2 521 114 0 296.860373027 381.683374674 +0 + +0101000 ++3723 0 -3722 0 * +Ed + 1e-07 1 1 0 +1 228 0 -0.5 0.5 +2 522 19 0 -0.5 0.5 +4 G1 118 0 19 0 +2 523 118 0 -0.5 0.5 +0 + +0101000 ++3023 66 -3721 0 * +Ed + 1e-07 1 1 0 +1 229 0 -1 1 +4 C0 118 0 114 0 +2 524 114 0 -1 1 +2 525 118 0 -1 1 +0 + +0101000 ++3722 0 -3721 0 * +Ed + 1e-07 1 1 0 +1 230 0 383.683374674 427.665671824 +2 526 19 0 383.683374674 427.665671824 +4 C0 19 0 114 0 +2 527 114 0 383.683374674 427.665671824 +0 + +0101000 ++3721 0 -3730 0 * +Ed + 1e-07 1 1 0 +1 231 0 -0.141421356237311 0.141421356237309 +2 528 119 0 -0.141421356237311 0.141421356237309 +2 529 120 0 -0.141421356237311 0.141421356237309 +4 CN 119 0 120 0 +0 + +0101000 ++3720 0 -3719 0 * +Ed + 1.00001364242053e-07 1 1 0 +1 232 0 4.71238898038469 7.85398163397448 +2 530 119 0 4.71238898038469 7.85398163397448 +4 C0 119 0 121 0 +2 531 121 0 4.71238898038469 7.85398163397448 +2 532 122 67 4.71238898038469 7.85398163397448 +0 + +0101000 ++3720 0 -3718 0 * +Ed + 1e-07 1 1 0 +1 233 0 -0.141421356237311 0.141421356237309 +2 533 119 0 -0.141421356237311 0.141421356237309 +2 534 120 0 -0.141421356237311 0.141421356237309 +4 CN 119 0 120 0 +0 + +0101000 ++3718 0 -3717 0 * +Ed + 1e-07 1 1 0 +1 234 0 4.71238898038469 7.85398163397448 +2 535 119 0 4.71238898038469 7.85398163397448 +2 536 123 0 4.71238898038469 7.85398163397448 +4 C0 119 0 123 0 +0 + +0101000 ++3719 0 -3717 0 * +Ed + 1.00001412032745e-07 1 1 0 +1 235 0 3.14159265358979 6.28318530717959 +2 537 120 0 3.14159265358979 6.28318530717959 +4 C0 120 0 121 0 +2 538 121 0 3.14159265358979 6.28318530717959 +2 539 122 67 3.14159265358979 6.28318530717959 +0 + +0101000 ++3718 0 -3720 0 * +Ed + 1e-07 1 1 0 +1 236 0 3.14159265358979 6.28318530717959 +2 540 120 0 3.14159265358979 6.28318530717959 +2 541 124 0 3.14159265358979 6.28318530717959 +4 C0 120 0 124 0 +0 + +0101000 ++3717 0 -3719 0 * +Ed + 1e-07 1 1 0 +1 237 0 -1.3 1.3 +2 542 123 0 -1.3 1.3 +2 543 124 0 -1.3 1.3 +4 CN 123 0 124 0 +0 + +0101000 ++3719 0 -3716 0 * +Ed + 1e-07 1 1 0 +1 238 0 -1.3 1.3 +2 544 123 0 -1.3 1.3 +2 545 124 0 -1.3 1.3 +4 CN 123 0 124 0 +0 + +0101000 ++3717 0 -3715 0 * +Ed + 1e-07 1 1 0 +1 239 0 0 3.14159265358979 +2 546 123 0 0 3.14159265358979 +2 547 125 0 0 3.14159265358979 +4 C0 123 0 125 0 +0 + +0101000 ++3716 0 -3715 0 * +Ed + 1e-07 1 1 0 +1 240 0 3.14159265358979 6.28318530717959 +2 548 124 0 3.14159265358979 6.28318530717959 +2 549 126 0 3.14159265358979 6.28318530717959 +4 C0 124 0 126 0 +0 + +0101000 ++3715 0 -3716 0 * +Ed + 1e-07 1 1 0 +1 241 0 -0.141421356237311 0.141421356237309 +2 550 125 0 -0.141421356237311 0.141421356237309 +2 551 126 0 -0.141421356237311 0.141421356237309 +4 CN 125 0 126 0 +0 + +0101000 ++3714 0 -3716 0 * +Ed + 1e-07 1 1 0 +1 242 0 -0.141421356237311 0.141421356237309 +2 552 125 0 -0.141421356237311 0.141421356237309 +2 553 126 0 -0.141421356237311 0.141421356237309 +4 CN 125 0 126 0 +0 + +0101000 ++3713 0 -3715 0 * +Ed + 1.0000024158453e-07 1 1 0 +1 243 0 4.71238898038469 7.85398163397448 +2 554 125 0 4.71238898038469 7.85398163397448 +4 C0 125 0 127 0 +2 555 127 0 4.71238898038469 7.85398163397448 +2 556 128 68 4.71238898038469 7.85398163397448 +0 + +0101000 ++3714 0 -3713 0 * +Ed + 1.00000113686838e-07 1 1 0 +1 244 0 3.14159265358979 6.28318530717959 +2 557 126 0 3.14159265358979 6.28318530717959 +4 C0 126 0 127 0 +2 558 127 0 3.14159265358979 6.28318530717959 +2 559 128 68 3.14159265358979 6.28318530717959 +0 + +0101000 ++3713 0 -3714 0 * +Ed + 1.00000170530257e-07 1 1 0 +1 245 0 0 3.14159265358979 +2 560 93 0 0 3.14159265358979 +4 C0 93 0 128 0 +2 561 128 0 0 3.14159265358979 +2 562 127 69 0 3.14159265358979 +0 + +0101000 ++3712 0 -3711 0 * +Ed + 1.00000170530257e-07 1 1 0 +1 246 0 3.14159265358979 6.28318530717959 +2 563 92 0 3.14159265358979 6.28318530717959 +4 C0 92 0 128 0 +2 564 128 0 3.14159265358979 6.28318530717959 +2 565 127 69 3.14159265358979 6.28318530717959 +0 + +0101000 ++3711 0 -3712 0 * +Ed + 1.00000198951966e-07 1 1 0 +1 247 0 5.21238898038437 8.35398163397416 +2 566 129 0 5.21238898038437 8.35398163397416 +4 C0 130 0 129 0 +2 567 130 0 5.21238898038437 8.35398163397416 +2 568 127 70 5.21238898038437 8.35398163397416 +0 + +0101000 ++3710 0 -3709 0 * +Ed + 1.00000184741111e-07 1 1 0 +1 248 0 2.07079632679458 5.21238898038437 +2 569 131 0 2.07079632679458 5.21238898038437 +4 C0 130 0 131 0 +2 570 130 0 2.07079632679458 5.21238898038437 +2 571 127 70 2.07079632679458 5.21238898038437 +0 + +0101000 ++3709 0 -3710 0 * +Ed + 1.0000024158453e-07 1 1 0 +1 249 0 3.14159265358979 6.28318530717959 +2 572 132 0 3.14159265358979 6.28318530717959 +4 C0 127 0 132 0 +2 573 127 0 3.14159265358979 6.28318530717959 +2 574 130 71 3.14159265358979 6.28318530717959 +0 + +0101000 ++3708 0 -3707 0 * +Ed + 1.0000024158453e-07 1 1 0 +1 250 0 0 3.14159265358979 +2 575 133 0 0 3.14159265358979 +4 C0 127 0 133 0 +2 576 127 0 0 3.14159265358979 +2 577 130 71 0 3.14159265358979 +0 + +0101000 ++3707 0 -3708 0 * +Ed + 1.00000355271368e-07 1 1 0 +1 251 0 4.71238898038469 5.78318530717991 +2 578 133 0 4.71238898038469 5.78318530717991 +2 579 134 0 4.71238898038469 5.78318530717991 +4 C0 133 0 134 0 +2 580 135 71 4.71238898038469 5.78318530717991 +0 + +0101000 ++3706 0 -3705 72 * +Ed + 1.00000341060513e-07 1 1 0 +1 251 0 5.78318530717991 7.85398163397448 +2 578 133 0 5.78318530717991 7.85398163397448 +2 579 134 0 5.78318530717991 7.85398163397448 +4 C0 133 0 134 0 +2 581 136 71 5.78318530717991 7.85398163397448 +0 + +0101000 ++3705 72 -3704 0 * +Ed + 1e-07 1 1 0 +1 252 0 -0.141421356237309 0.141421356237309 +2 582 133 0 -0.141421356237309 0.141421356237309 +2 583 132 0 -0.141421356237309 0.141421356237309 +4 CN 133 0 132 0 +0 + +0101000 ++3704 0 -3708 0 * +Ed + 1e-07 1 1 0 +1 253 0 -0.141421356237309 0.141421356237309 +2 584 133 0 -0.141421356237309 0.141421356237309 +2 585 132 0 -0.141421356237309 0.141421356237309 +4 CN 133 0 132 0 +0 + +0101000 ++3706 0 -3707 0 * +Ed + 1.00000341060513e-07 1 1 0 +1 254 0 3.14159265358979 4.21238898038485 +2 586 132 0 3.14159265358979 4.21238898038485 +2 587 137 0 3.14159265358979 4.21238898038485 +4 C0 132 0 137 0 +2 588 136 71 3.14159265358979 4.21238898038485 +0 + +0101000 ++3704 0 -3703 72 * +Ed + 1.00000369482223e-07 1 1 0 +1 254 0 4.21238898038485 6.28318530717959 +2 586 132 0 4.21238898038485 6.28318530717959 +2 587 137 0 4.21238898038485 6.28318530717959 +4 C0 132 0 137 0 +2 589 135 71 4.21238898038485 6.28318530717959 +0 + +0101000 ++3703 72 -3706 0 * +Ed + 1.00000227373675e-07 1 1 0 +1 255 0 2.07079632679519 5.21238898038498 +2 590 138 0 2.07079632679519 5.21238898038498 +4 G1 122 0 138 0 +2 591 122 0 2.07079632679519 5.21238898038498 +2 592 121 73 2.07079632679519 5.21238898038498 +0 + +0101000 ++3702 0 -3701 0 * +Ed + 1.00000227373675e-07 1 1 0 +1 256 0 5.21238898038498 8.35398163397478 +2 593 139 0 5.21238898038498 8.35398163397478 +4 G1 122 0 139 0 +2 594 122 0 5.21238898038498 8.35398163397478 +2 595 121 73 5.21238898038498 8.35398163397478 +0 + +0101000 ++3701 0 -3702 0 * +Ed + 1e-07 1 1 0 +1 257 0 3.14159265358979 6.28318530717959 +2 596 140 0 3.14159265358979 6.28318530717959 +4 C0 121 0 140 0 +2 597 121 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3700 0 -3699 0 * +Ed + 1e-07 1 1 0 +1 258 0 0 3.14159265358979 +2 598 141 0 0 3.14159265358979 +4 C0 121 0 141 0 +2 599 121 0 0 3.14159265358979 +0 + +0101000 ++3699 0 -3700 0 * +Ed + 1e-07 1 1 0 +1 259 0 3.14159265358979 6.28318530717959 +2 600 137 0 3.14159265358979 6.28318530717959 +2 601 140 0 3.14159265358979 6.28318530717959 +4 C0 137 0 140 0 +0 + +0101000 ++3698 0 -3697 0 * +Ed + 1e-07 1 1 0 +1 260 0 -1.3 -0.975500200199495 +2 602 137 0 -1.3 -0.975500200199495 +2 603 134 0 -1.3 -0.975500200199495 +4 CN 137 0 134 0 +0 + +0101000 ++3698 0 -3696 72 * +Ed + 1.00000312638804e-07 1 1 0 +1 261 0 2.07079632679468 3.14159265358979 +2 604 136 0 2.07079632679468 3.14159265358979 +2 605 142 0 2.07079632679468 3.14159265358979 +4 G1 136 0 142 0 +2 606 137 70 2.07079632679468 3.14159265358979 +0 + +0101000 ++3695 0 -3696 56 * +Ed + 1.00000397903932e-07 1 1 0 +1 262 0 6.28318530717965 8.35398163397426 +2 607 135 0 6.28318530717965 8.35398163397426 +2 608 143 0 6.28318530717965 8.35398163397426 +4 G1 135 0 143 0 +2 609 137 70 6.28318530717965 8.35398163397426 +0 + +0101000 ++3694 56 -3695 0 * +Ed + 1e-07 1 1 0 +1 263 0 -1.3 -0.975500200199475 +2 610 137 0 -1.3 -0.975500200199475 +2 611 134 0 -1.3 -0.975500200199475 +4 CN 137 0 134 0 +0 + +0101000 ++3697 0 -3694 72 * +Ed + 1.00004217536526e-07 1 1 0 +1 264 0 -8.39999999999902 -6.1244997998 +2 612 135 0 -8.39999999999902 -6.1244997998 +2 613 136 0 -8.39999999999902 -6.1244997998 +4 CN 135 0 136 0 +2 614 137 70 -8.39999999999902 -6.1244997998 +0 + +0101000 ++3703 56 -3695 0 * +Ed + 1.00000369482223e-07 1 1 0 +1 263 0 -0.975500200199475 1.3 +2 610 137 0 -0.975500200199475 1.3 +2 611 134 0 -0.975500200199475 1.3 +4 CN 137 0 134 0 +2 615 135 71 -0.975500200199475 1.3 +0 + +0101000 ++3694 72 -3706 0 * +Ed + 1.00000957204186e-07 1 1 0 +1 260 0 -0.975500200199495 1.3 +2 602 137 0 -0.975500200199495 1.3 +2 603 134 0 -0.975500200199495 1.3 +4 CN 137 0 134 0 +2 616 136 71 -0.975500200199495 1.3 +0 + +0101000 ++3696 72 -3704 0 * +Ed + 1e-07 1 1 0 +1 265 0 0 3.14159265358979 +2 617 134 0 0 3.14159265358979 +2 618 141 0 0 3.14159265358979 +4 C0 134 0 141 0 +0 + +0101000 ++3697 0 -3698 0 * +Ed + 1.00000397903932e-07 1 1 0 +1 262 0 5.21238898038447 6.28318530717965 +2 607 135 0 5.21238898038447 6.28318530717965 +2 608 143 0 5.21238898038447 6.28318530717965 +4 G1 135 0 143 0 +2 619 134 70 5.21238898038447 6.28318530717965 +0 + +0101000 ++3693 0 -3694 56 * +Ed + 1.00000925343818e-07 1 1 0 +1 261 0 3.14159265358979 5.21238898038447 +2 604 136 0 3.14159265358979 5.21238898038447 +2 605 142 0 3.14159265358979 5.21238898038447 +4 G1 136 0 142 0 +2 620 134 70 3.14159265358979 5.21238898038447 +0 + +0101000 ++3696 56 -3693 0 * +Ed + 1.00004870178299e-07 1 1 0 +1 266 0 -8.39999999999995 -6.1244997998 +2 621 135 0 -8.39999999999995 -6.1244997998 +2 622 136 0 -8.39999999999995 -6.1244997998 +4 CN 135 0 136 0 +2 623 134 70 -8.39999999999995 -6.1244997998 +0 + +0101000 ++3705 56 -3693 0 * +Ed + 1e-07 1 1 0 +1 267 0 -0.141421356237309 0.141421356237309 +2 624 140 0 -0.141421356237309 0.141421356237309 +2 625 141 0 -0.141421356237309 0.141421356237309 +4 CN 140 0 141 0 +0 + +0101000 ++3697 0 -3699 0 * +Ed + 1e-07 1 1 0 +1 268 0 -0.141421356237309 0.141421356237309 +2 626 140 0 -0.141421356237309 0.141421356237309 +2 627 141 0 -0.141421356237309 0.141421356237309 +4 CN 140 0 141 0 +0 + +0101000 ++3698 0 -3700 0 * +Ed + 1e-07 1 1 0 +1 269 0 -0.141421356237311 0.141421356237309 +2 628 144 0 -0.141421356237311 0.141421356237309 +2 629 145 0 -0.141421356237311 0.141421356237309 +4 CN 144 0 145 0 +0 + +0101000 ++3692 0 -3691 0 * +Ed + 1.00001379038797e-07 1 1 0 +1 270 0 4.71238898038469 7.85398163397448 +2 630 144 0 4.71238898038469 7.85398163397448 +4 C0 144 0 146 0 +2 631 146 0 4.71238898038469 7.85398163397448 +2 632 147 74 4.71238898038469 7.85398163397448 +2 633 147 75 4.71238898038469 7.85398163397448 +0 + +0101000 ++3692 0 -3690 0 * +Ed + 1e-07 1 1 0 +1 271 0 -0.141421356237311 0.141421356237309 +2 634 144 0 -0.141421356237311 0.141421356237309 +2 635 145 0 -0.141421356237311 0.141421356237309 +4 CN 144 0 145 0 +0 + +0101000 ++3690 0 -3689 0 * +Ed + 1e-07 1 1 0 +1 272 0 4.71238898038469 7.85398163397448 +2 636 144 0 4.71238898038469 7.85398163397448 +2 637 148 0 4.71238898038469 7.85398163397448 +4 C0 144 0 148 0 +0 + +0101000 ++3691 0 -3689 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 273 0 3.14159265358979 6.28318530717959 +2 638 145 0 3.14159265358979 6.28318530717959 +4 C0 145 0 146 0 +2 639 146 0 3.14159265358979 6.28318530717959 +2 640 147 74 3.14159265358979 6.28318530717959 +2 641 147 75 3.14159265358979 6.28318530717959 +0 + +0101000 ++3690 0 -3692 0 * +Ed + 1e-07 1 1 0 +1 274 0 3.14159265358979 6.28318530717959 +2 642 145 0 3.14159265358979 6.28318530717959 +2 643 149 0 3.14159265358979 6.28318530717959 +4 C0 145 0 149 0 +0 + +0101000 ++3689 0 -3691 0 * +Ed + 1e-07 1 1 0 +1 275 0 -1.3 1.3 +2 644 148 0 -1.3 1.3 +2 645 149 0 -1.3 1.3 +4 CN 148 0 149 0 +0 + +0101000 ++3691 0 -3688 0 * +Ed + 1e-07 1 1 0 +1 276 0 -1.3 1.3 +2 646 148 0 -1.3 1.3 +2 647 149 0 -1.3 1.3 +4 CN 148 0 149 0 +0 + +0101000 ++3689 0 -3687 0 * +Ed + 1e-07 1 1 0 +1 277 0 0 3.14159265358979 +2 648 148 0 0 3.14159265358979 +2 649 150 0 0 3.14159265358979 +4 C0 148 0 150 0 +0 + +0101000 ++3688 0 -3687 0 * +Ed + 1e-07 1 1 0 +1 278 0 3.14159265358979 6.28318530717959 +2 650 149 0 3.14159265358979 6.28318530717959 +2 651 151 0 3.14159265358979 6.28318530717959 +4 C0 149 0 151 0 +0 + +0101000 ++3687 0 -3688 0 * +Ed + 1e-07 1 1 0 +1 279 0 -0.141421356237311 0.141421356237309 +2 652 150 0 -0.141421356237311 0.141421356237309 +2 653 151 0 -0.141421356237311 0.141421356237309 +4 CN 150 0 151 0 +0 + +0101000 ++3686 0 -3688 0 * +Ed + 1e-07 1 1 0 +1 280 0 -0.141421356237311 0.141421356237309 +2 654 150 0 -0.141421356237311 0.141421356237309 +2 655 151 0 -0.141421356237311 0.141421356237309 +4 CN 150 0 151 0 +0 + +0101000 ++3685 0 -3687 0 * +Ed + 1.00000255795385e-07 1 1 0 +1 281 0 4.71238898038469 7.85398163397448 +2 656 150 0 4.71238898038469 7.85398163397448 +4 C0 150 0 152 0 +2 657 152 0 4.71238898038469 7.85398163397448 +2 658 153 76 4.71238898038469 7.85398163397448 +2 659 153 77 4.71238898038469 7.85398163397448 +0 + +0101000 ++3686 0 -3685 0 * +Ed + 1.00000298427949e-07 1 1 0 +1 282 0 3.14159265358979 6.28318530717959 +2 660 151 0 3.14159265358979 6.28318530717959 +4 C0 151 0 152 0 +2 661 152 0 3.14159265358979 6.28318530717959 +2 662 153 76 3.14159265358979 6.28318530717959 +2 663 153 77 3.14159265358979 6.28318530717959 +0 + +0101000 ++3685 0 -3686 0 * +Ed + 1.00000184741111e-07 1 1 0 +1 283 0 0 3.14159265358979 +2 664 81 0 0 3.14159265358979 +4 C0 81 0 153 0 +2 665 153 0 0 3.14159265358979 +2 666 152 78 0 3.14159265358979 +2 667 152 79 0 3.14159265358979 +0 + +0101000 ++3684 0 -3683 0 * +Ed + 1.00000213162821e-07 1 1 0 +1 284 0 3.14159265358979 6.28318530717959 +2 668 80 0 3.14159265358979 6.28318530717959 +4 C0 80 0 153 0 +2 669 153 0 3.14159265358979 6.28318530717959 +2 670 152 78 3.14159265358979 6.28318530717959 +2 671 152 79 3.14159265358979 6.28318530717959 +0 + +0101000 ++3683 0 -3684 0 * +Ed + 1.00000198951966e-07 1 1 0 +1 285 0 5.21238898038468 8.35398163397447 +2 672 154 0 5.21238898038468 8.35398163397447 +4 C0 155 0 154 0 +2 673 155 0 5.21238898038468 8.35398163397447 +2 674 152 80 5.21238898038468 8.35398163397447 +2 675 152 81 5.21238898038468 8.35398163397447 +0 + +0101000 ++3682 0 -3681 0 * +Ed + 1.00000142108547e-07 1 1 0 +1 286 0 2.07079632679489 5.21238898038468 +2 676 156 0 2.07079632679489 5.21238898038468 +4 C0 155 0 156 0 +2 677 155 0 2.07079632679489 5.21238898038468 +2 678 152 80 2.07079632679489 5.21238898038468 +2 679 152 81 2.07079632679489 5.21238898038468 +0 + +0101000 ++3681 0 -3682 0 * +Ed + 1.00000971340767e-07 1 1 0 +1 287 0 3.14159265358979 6.28318530717959 +2 680 157 0 3.14159265358979 6.28318530717959 +4 C0 152 0 157 0 +2 681 152 0 3.14159265358979 6.28318530717959 +2 682 155 82 3.14159265358979 6.28318530717959 +2 683 155 83 3.14159265358979 6.28318530717959 +0 + +0101000 ++3680 0 -3679 0 * +Ed + 1.00000312638804e-07 1 1 0 +1 288 0 0 3.14159265358979 +2 684 158 0 0 3.14159265358979 +4 C0 152 0 158 0 +2 685 152 0 0 3.14159265358979 +2 686 155 82 0 3.14159265358979 +2 687 155 83 0 3.14159265358979 +0 + +0101000 ++3679 0 -3680 0 * +Ed + 1.00000454747351e-07 1 1 0 +1 289 0 4.71238898038469 5.7831853071788 +2 688 158 0 4.71238898038469 5.7831853071788 +2 689 159 0 4.71238898038469 5.7831853071788 +4 C0 158 0 159 0 +2 690 160 82 4.71238898038469 5.7831853071788 +0 + +0101000 ++3678 0 -3677 84 * +Ed + 1.00000961729502e-07 1 1 0 +1 289 0 5.7831853071788 7.85398163397448 +2 688 158 0 5.7831853071788 7.85398163397448 +2 689 159 0 5.7831853071788 7.85398163397448 +4 C0 158 0 159 0 +2 691 161 82 5.7831853071788 7.85398163397448 +0 + +0101000 ++3677 84 -3676 0 * +Ed + 1e-07 1 1 0 +1 290 0 -0.141421356237309 0.14142135623731 +2 692 158 0 -0.141421356237309 0.14142135623731 +2 693 157 0 -0.141421356237309 0.14142135623731 +4 CN 158 0 157 0 +0 + +0101000 ++3676 0 -3680 0 * +Ed + 1e-07 1 1 0 +1 291 0 -0.141421356237309 0.14142135623731 +2 694 158 0 -0.141421356237309 0.14142135623731 +2 695 157 0 -0.141421356237309 0.14142135623731 +4 CN 158 0 157 0 +0 + +0101000 ++3678 0 -3679 0 * +Ed + 1.00000397903932e-07 1 1 0 +1 292 0 3.14159265358979 4.21238898038369 +2 696 157 0 3.14159265358979 4.21238898038369 +2 697 162 0 3.14159265358979 4.21238898038369 +4 C0 157 0 162 0 +2 698 161 82 3.14159265358979 4.21238898038369 +0 + +0101000 ++3676 0 -3675 84 * +Ed + 1.00000981681071e-07 1 1 0 +1 292 0 4.21238898038369 6.28318530717959 +2 696 157 0 4.21238898038369 6.28318530717959 +2 697 162 0 4.21238898038369 6.28318530717959 +4 C0 157 0 162 0 +2 699 160 82 4.21238898038369 6.28318530717959 +0 + +0101000 ++3675 84 -3678 0 * +Ed + 1.0000140054444e-07 1 1 0 +1 293 0 2.07079632679527 5.21238898038506 +2 700 163 0 2.07079632679527 5.21238898038506 +4 G1 147 0 163 0 +2 701 147 0 2.07079632679527 5.21238898038506 +2 702 146 85 2.07079632679527 5.21238898038506 +2 703 146 86 2.07079632679527 5.21238898038506 +0 + +0101000 ++3674 0 -3673 0 * +Ed + 1.00000976421199e-07 1 1 0 +1 294 0 5.21238898038506 8.35398163397486 +2 704 164 0 5.21238898038506 8.35398163397486 +4 G1 147 0 164 0 +2 705 147 0 5.21238898038506 8.35398163397486 +2 706 146 85 5.21238898038506 8.35398163397486 +2 707 146 86 5.21238898038506 8.35398163397486 +0 + +0101000 ++3673 0 -3674 0 * +Ed + 1e-07 1 1 0 +1 295 0 0 3.14159265358979 +2 708 165 0 0 3.14159265358979 +4 C0 146 0 165 0 +2 709 146 0 0 3.14159265358979 +0 + +0101000 ++3672 0 -3671 0 * +Ed + 1e-07 1 1 0 +1 296 0 3.14159265358979 6.28318530717959 +2 710 166 0 3.14159265358979 6.28318530717959 +4 C0 146 0 166 0 +2 711 146 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3671 0 -3672 0 * +Ed + 1e-07 1 1 0 +1 297 0 3.14159265358979 6.28318530717959 +2 712 162 0 3.14159265358979 6.28318530717959 +2 713 166 0 3.14159265358979 6.28318530717959 +4 C0 162 0 166 0 +0 + +0101000 ++3670 0 -3669 0 * +Ed + 1e-07 1 1 0 +1 298 0 -1.3 -1.02554373530023 +2 714 162 0 -1.3 -1.02554373530023 +2 715 159 0 -1.3 -1.02554373530023 +4 CN 162 0 159 0 +0 + +0101000 ++3670 0 -3668 84 * +Ed + 1.00000454747351e-07 1 1 0 +1 299 0 2.07079632679577 3.14159265358979 +2 716 161 0 2.07079632679577 3.14159265358979 +2 717 167 0 2.07079632679577 3.14159265358979 +4 G1 161 0 167 0 +2 718 162 80 2.07079632679577 3.14159265358979 +0 + +0101000 ++3667 0 -3668 62 * +Ed + 1.00000961729502e-07 1 1 0 +1 300 0 6.2831853071795 8.35398163397536 +2 719 160 0 6.2831853071795 8.35398163397536 +2 720 168 0 6.2831853071795 8.35398163397536 +4 G1 160 0 168 0 +2 721 162 80 6.2831853071795 8.35398163397536 +0 + +0101000 ++3666 62 -3667 0 * +Ed + 1e-07 1 1 0 +1 301 0 -1.3 -1.02554373530013 +2 722 162 0 -1.3 -1.02554373530013 +2 723 159 0 -1.3 -1.02554373530013 +4 CN 162 0 159 0 +0 + +0101000 ++3669 0 -3666 84 * +Ed + 1.00000426325641e-07 1 1 0 +1 302 0 -8.40000000000022 -6.0744562647 +2 724 160 0 -8.40000000000022 -6.0744562647 +2 725 161 0 -8.40000000000022 -6.0744562647 +4 CN 160 0 161 0 +2 726 162 80 -8.40000000000022 -6.0744562647 +0 + +0101000 ++3675 62 -3667 0 * +Ed + 1.00000341060513e-07 1 1 0 +1 301 0 -1.02554373530013 1.3 +2 722 162 0 -1.02554373530013 1.3 +2 723 159 0 -1.02554373530013 1.3 +4 CN 162 0 159 0 +2 727 160 82 -1.02554373530013 1.3 +0 + +0101000 ++3666 84 -3678 0 * +Ed + 1.00000341060513e-07 1 1 0 +1 298 0 -1.02554373530023 1.3 +2 714 162 0 -1.02554373530023 1.3 +2 715 159 0 -1.02554373530023 1.3 +4 CN 162 0 159 0 +2 728 161 82 -1.02554373530023 1.3 +0 + +0101000 ++3668 84 -3676 0 * +Ed + 1e-07 1 1 0 +1 303 0 0 3.14159265358979 +2 729 159 0 0 3.14159265358979 +2 730 165 0 0 3.14159265358979 +4 C0 159 0 165 0 +0 + +0101000 ++3669 0 -3670 0 * +Ed + 1.0000051159077e-07 1 1 0 +1 300 0 5.21238898038557 6.2831853071795 +2 719 160 0 5.21238898038557 6.2831853071795 +2 720 168 0 5.21238898038557 6.2831853071795 +4 G1 160 0 168 0 +2 731 159 80 5.21238898038557 6.2831853071795 +0 + +0101000 ++3665 0 -3666 62 * +Ed + 1.00001287475203e-07 1 1 0 +1 299 0 3.14159265358979 5.21238898038557 +2 716 161 0 3.14159265358979 5.21238898038557 +2 717 167 0 3.14159265358979 5.21238898038557 +4 G1 161 0 167 0 +2 732 159 80 3.14159265358979 5.21238898038557 +0 + +0101000 ++3668 62 -3665 0 * +Ed + 1.00000255795385e-07 1 1 0 +1 304 0 -8.40000000000007 -6.0744562647 +2 733 160 0 -8.40000000000007 -6.0744562647 +2 734 161 0 -8.40000000000007 -6.0744562647 +4 CN 160 0 161 0 +2 735 159 80 -8.40000000000007 -6.0744562647 +0 + +0101000 ++3677 62 -3665 0 * +Ed + 1e-07 1 1 0 +1 305 0 -0.141421356237309 0.14142135623731 +2 736 165 0 -0.141421356237309 0.14142135623731 +2 737 166 0 -0.141421356237309 0.14142135623731 +4 CN 165 0 166 0 +0 + +0101000 ++3670 0 -3671 0 * +Ed + 1e-07 1 1 0 +1 306 0 -0.141421356237309 0.14142135623731 +2 738 165 0 -0.141421356237309 0.14142135623731 +2 739 166 0 -0.141421356237309 0.14142135623731 +4 CN 165 0 166 0 +0 + +0101000 ++3669 0 -3672 0 * +Ed + 1.00000440536496e-07 1 1 0 +1 289 0 4.71238898038469 5.7831853071788 +2 688 158 0 4.71238898038469 5.7831853071788 +2 689 159 0 4.71238898038469 5.7831853071788 +4 C0 158 0 159 0 +2 740 160 83 4.71238898038469 5.7831853071788 +0 + +0101000 ++3678 0 -3664 87 * +Ed + 1.00000961729502e-07 1 1 0 +1 289 0 5.7831853071788 7.85398163397448 +2 688 158 0 5.7831853071788 7.85398163397448 +2 689 159 0 5.7831853071788 7.85398163397448 +4 C0 158 0 159 0 +2 741 161 83 5.7831853071788 7.85398163397448 +0 + +0101000 ++3664 87 -3676 0 * +Ed + 1.00000412114787e-07 1 1 0 +1 292 0 3.14159265358979 4.21238898038369 +2 696 157 0 3.14159265358979 4.21238898038369 +2 697 162 0 3.14159265358979 4.21238898038369 +4 C0 157 0 162 0 +2 742 161 83 3.14159265358979 4.21238898038369 +0 + +0101000 ++3676 0 -3663 87 * +Ed + 1.00000976421199e-07 1 1 0 +1 292 0 4.21238898038369 6.28318530717959 +2 696 157 0 4.21238898038369 6.28318530717959 +2 697 162 0 4.21238898038369 6.28318530717959 +4 C0 157 0 162 0 +2 743 160 83 4.21238898038369 6.28318530717959 +0 + +0101000 ++3663 87 -3678 0 * +Ed + 1e-07 1 1 0 +1 298 0 -1.3 -1.02554373530024 +2 714 162 0 -1.3 -1.02554373530024 +2 715 159 0 -1.3 -1.02554373530024 +4 CN 162 0 159 0 +0 + +0101000 ++3670 0 -3662 87 * +Ed + 1.00000426325641e-07 1 1 0 +1 299 0 2.07079632679577 3.14159265358979 +2 716 161 0 2.07079632679577 3.14159265358979 +2 717 167 0 2.07079632679577 3.14159265358979 +4 G1 161 0 167 0 +2 744 162 81 2.07079632679577 3.14159265358979 +0 + +0101000 ++3667 0 -3662 59 * +Ed + 1.00000966442607e-07 1 1 0 +1 300 0 6.2831853071795 8.35398163397536 +2 719 160 0 6.2831853071795 8.35398163397536 +2 720 168 0 6.2831853071795 8.35398163397536 +4 G1 160 0 168 0 +2 745 162 81 6.2831853071795 8.35398163397536 +0 + +0101000 ++3661 59 -3667 0 * +Ed + 1e-07 1 1 0 +1 301 0 -1.3 -1.02554373530014 +2 722 162 0 -1.3 -1.02554373530014 +2 723 159 0 -1.3 -1.02554373530014 +4 CN 162 0 159 0 +0 + +0101000 ++3669 0 -3661 87 * +Ed + 1.00000426325641e-07 1 1 0 +1 302 0 -8.40000000000022 -6.0744562647 +2 724 160 0 -8.40000000000022 -6.0744562647 +2 725 161 0 -8.40000000000022 -6.0744562647 +4 CN 160 0 161 0 +2 746 162 81 -8.40000000000022 -6.0744562647 +0 + +0101000 ++3663 59 -3667 0 * +Ed + 1.00000355271368e-07 1 1 0 +1 301 0 -1.02554373530014 1.3 +2 722 162 0 -1.02554373530014 1.3 +2 723 159 0 -1.02554373530014 1.3 +4 CN 162 0 159 0 +2 747 160 83 -1.02554373530014 1.3 +0 + +0101000 ++3661 87 -3678 0 * +Ed + 1.00000326849658e-07 1 1 0 +1 298 0 -1.02554373530024 1.3 +2 714 162 0 -1.02554373530024 1.3 +2 715 159 0 -1.02554373530024 1.3 +4 CN 162 0 159 0 +2 748 161 83 -1.02554373530024 1.3 +0 + +0101000 ++3662 87 -3676 0 * +Ed + 1.00000497379915e-07 1 1 0 +1 300 0 5.21238898038557 6.2831853071795 +2 719 160 0 5.21238898038557 6.2831853071795 +2 720 168 0 5.21238898038557 6.2831853071795 +4 G1 160 0 168 0 +2 749 159 81 5.21238898038557 6.2831853071795 +0 + +0101000 ++3665 0 -3661 59 * +Ed + 1.00001287475203e-07 1 1 0 +1 299 0 3.14159265358979 5.21238898038557 +2 716 161 0 3.14159265358979 5.21238898038557 +2 717 167 0 3.14159265358979 5.21238898038557 +4 G1 161 0 167 0 +2 750 159 81 3.14159265358979 5.21238898038557 +0 + +0101000 ++3662 59 -3665 0 * +Ed + 1.00000255795385e-07 1 1 0 +1 304 0 -8.40000000000008 -6.0744562647 +2 733 160 0 -8.40000000000008 -6.0744562647 +2 734 161 0 -8.40000000000008 -6.0744562647 +4 CN 160 0 161 0 +2 751 159 81 -8.40000000000008 -6.0744562647 +0 + +0101000 ++3664 59 -3665 0 * +Ed + 1e-07 1 1 0 +1 60 0 -16.3999999999994 -16 +2 134 54 0 -16.3999999999994 -16 +2 135 55 0 -16.3999999999994 -16 +4 CN 54 0 55 0 +0 + +0101000 ++2980 56 -3660 0 * +Ed + 1e-07 1 1 0 +1 307 0 2.07079632679468 5.21238898038447 +2 752 54 0 2.07079632679468 5.21238898038447 +4 C0 54 0 60 0 +2 753 60 0 2.07079632679468 5.21238898038447 +0 + +0101000 ++3660 0 -3659 0 * +Ed + 1e-07 1 1 0 +1 54 0 -16.3999999999996 -16 +2 115 54 0 -16.3999999999996 -16 +2 116 55 0 -16.3999999999996 -16 +4 CN 54 0 55 0 +0 + +0101000 ++2986 56 -3659 0 * +Ed + 1e-07 1 1 0 +1 308 0 5.21238898038447 8.35398163397426 +2 754 55 0 5.21238898038447 8.35398163397426 +4 C0 55 0 60 0 +2 755 60 0 5.21238898038447 8.35398163397426 +0 + +0101000 ++3659 0 -3660 0 * +Ed + 1e-07 1 1 0 +1 309 0 2.07079632679548 5.21238898038527 +2 756 56 0 2.07079632679548 5.21238898038527 +4 C0 169 0 56 0 +2 757 169 0 2.07079632679548 5.21238898038527 +0 + +0101000 ++3658 0 -3657 0 * +Ed + 1e-07 1 1 0 +1 310 0 5.21238898038527 8.35398163397506 +2 758 57 0 5.21238898038527 8.35398163397506 +4 C0 169 0 57 0 +2 759 169 0 5.21238898038527 8.35398163397506 +0 + +0101000 ++3657 0 -3658 0 * +Ed + 1e-07 1 1 0 +1 311 0 -1.27279220613367 1.27279220613367 +2 760 57 0 -1.27279220613367 1.27279220613367 +2 761 56 0 -1.27279220613367 1.27279220613367 +4 G2 57 0 56 0 +0 + +0101000 ++3657 0 -2984 0 * +Ed + 1e-07 1 1 0 +1 312 0 -1.27279220613367 1.27279220613367 +2 762 57 0 -1.27279220613367 1.27279220613367 +2 763 56 0 -1.27279220613367 1.27279220613367 +4 G2 57 0 56 0 +0 + +0101000 ++3658 0 -2979 0 * +Ed + 1e-07 1 1 0 +1 313 0 5.21238898038527 8.35398163397506 +2 764 170 0 5.21238898038527 8.35398163397506 +4 C0 171 0 170 0 +2 765 171 0 5.21238898038527 8.35398163397506 +0 + +0101000 ++3656 0 -3655 0 * +Ed + 1e-07 1 1 0 +1 314 0 2.07079632679548 5.21238898038527 +2 766 172 0 2.07079632679548 5.21238898038527 +4 C0 171 0 172 0 +2 767 171 0 2.07079632679548 5.21238898038527 +0 + +0101000 ++3655 0 -3656 0 * +Ed + 1e-07 1 1 0 +1 315 0 -1.27279220613367 1.27279220613367 +2 768 170 0 -1.27279220613367 1.27279220613367 +2 769 172 0 -1.27279220613367 1.27279220613367 +4 G2 170 0 172 0 +0 + +0101000 ++3656 0 -3654 0 * +Ed + 1e-07 1 1 0 +1 316 0 5.21238898038447 8.35398163397426 +2 770 170 0 5.21238898038447 8.35398163397426 +2 771 173 0 5.21238898038447 8.35398163397426 +4 C0 170 0 173 0 +0 + +0101000 ++3654 0 -3653 0 * +Ed + 1e-07 1 1 0 +1 317 0 -1.27279220613367 1.27279220613367 +2 772 170 0 -1.27279220613367 1.27279220613367 +2 773 172 0 -1.27279220613367 1.27279220613367 +4 G2 170 0 172 0 +0 + +0101000 ++3655 0 -3653 0 * +Ed + 1e-07 1 1 0 +1 318 0 2.07079632679468 5.21238898038447 +2 774 172 0 2.07079632679468 5.21238898038447 +2 775 174 0 2.07079632679468 5.21238898038447 +4 C0 172 0 174 0 +0 + +0101000 ++3653 0 -3654 0 * +Ed + 1e-07 1 1 0 +1 319 0 2.07079632679468 5.21238898038447 +2 776 136 0 2.07079632679468 5.21238898038447 +4 C0 130 0 136 0 +2 777 130 0 2.07079632679468 5.21238898038447 +0 + +0101000 ++3652 0 -3651 0 * +Ed + 1e-07 1 1 0 +1 320 0 5.21238898038447 8.35398163397426 +2 778 135 0 5.21238898038447 8.35398163397426 +4 C0 130 0 135 0 +2 779 130 0 5.21238898038447 8.35398163397426 +0 + +0101000 ++3651 0 -3652 0 * +Ed + 1e-07 1 1 0 +1 321 0 -0.141421356231557 0.141421356237766 +2 780 129 0 -0.141421356231557 0.141421356237766 +2 781 131 0 -0.141421356231557 0.141421356237766 +4 G2 129 0 131 0 +0 + +0101000 ++3710 0 -3650 0 * +Ed + 1.00000998508493e-07 1 1 0 +1 322 0 5.21238898038469 6.28318530717959 +2 782 129 0 5.21238898038469 6.28318530717959 +2 783 175 0 5.21238898038469 6.28318530717959 +4 C0 129 0 175 0 +2 784 93 88 5.21238898038469 6.28318530717959 +0 + +0101000 ++3650 0 -3649 56 * +Ed + 1.00000981681071e-07 1 1 0 +1 322 0 6.28318530717959 8.35398163397448 +2 782 129 0 6.28318530717959 8.35398163397448 +2 783 175 0 6.28318530717959 8.35398163397448 +4 C0 129 0 175 0 +2 785 92 88 6.28318530717959 8.35398163397448 +0 + +0101000 ++3649 56 -3648 0 * +Ed + 1e-07 1 1 0 +1 323 0 -0.141421356231557 0.141421356237766 +2 786 129 0 -0.141421356231557 0.141421356237766 +2 787 131 0 -0.141421356231557 0.141421356237766 +4 G2 129 0 131 0 +0 + +0101000 ++3709 0 -3648 0 * +Ed + 1.00000912266037e-07 1 1 0 +1 324 0 2.0707963267949 3.14159265358979 +2 788 131 0 2.0707963267949 3.14159265358979 +2 789 176 0 2.0707963267949 3.14159265358979 +4 C0 131 0 176 0 +2 790 92 88 2.0707963267949 3.14159265358979 +0 + +0101000 ++3648 0 -3647 56 * +Ed + 1.00001291234263e-07 1 1 0 +1 324 0 3.14159265358979 5.21238898038469 +2 788 131 0 3.14159265358979 5.21238898038469 +2 789 176 0 3.14159265358979 5.21238898038469 +4 C0 131 0 176 0 +2 791 93 88 3.14159265358979 5.21238898038469 +0 + +0101000 ++3647 56 -3650 0 * +Ed + 1.00000298427949e-07 1 1 0 +1 325 0 3.14159265358979 5.21238898038469 +2 792 176 0 3.14159265358979 5.21238898038469 +2 793 90 0 3.14159265358979 5.21238898038469 +4 C0 176 0 90 0 +2 794 93 88 3.14159265358979 5.21238898038469 +0 + +0101000 ++3646 56 -3645 0 * +Ed + 1.0000027000624e-07 1 1 0 +1 326 0 -1.19999999999968 5.80000000000067 +2 795 93 0 -1.19999999999968 5.80000000000067 +2 796 92 0 -1.19999999999968 5.80000000000067 +4 CN 93 0 92 0 +2 797 176 89 -1.19999999999968 5.80000000000067 +0 + +0101000 ++3647 90 -3646 90 * +Ed + 1.00004690529351e-07 1 1 0 +1 327 0 -3.5 3.5 +2 798 176 0 -3.5 3.5 +2 799 175 0 -3.5 3.5 +4 CN 176 0 175 0 +2 800 93 88 -3.5 3.5 +0 + +0101000 ++3645 0 -3650 0 * +Ed + 1.00000397903932e-07 1 1 0 +1 325 0 2.0707963267949 3.14159265358979 +2 792 176 0 2.0707963267949 3.14159265358979 +2 793 90 0 2.0707963267949 3.14159265358979 +4 C0 176 0 90 0 +2 801 92 88 2.0707963267949 3.14159265358979 +0 + +0101000 ++3644 0 -3646 56 * +Ed + 1.00004019838618e-07 1 1 0 +1 328 0 -3.5 3.5 +2 802 176 0 -3.5 3.5 +2 803 175 0 -3.5 3.5 +4 CN 176 0 175 0 +2 804 92 88 -3.5 3.5 +0 + +0101000 ++3644 0 -3648 0 * +Ed + 1.00000440536496e-07 1 1 0 +1 329 0 6.28318530717966 8.35398163397448 +2 805 175 0 6.28318530717966 8.35398163397448 +2 806 91 0 6.28318530717966 8.35398163397448 +4 C0 175 0 91 0 +2 807 92 88 6.28318530717966 8.35398163397448 +0 + +0101000 ++3643 56 -3644 0 * +Ed + 1.00000127897692e-07 1 1 0 +1 330 0 -1.20000000000004 5.80000000000057 +2 808 93 0 -1.20000000000004 5.80000000000057 +2 809 92 0 -1.20000000000004 5.80000000000057 +4 CN 93 0 92 0 +2 810 175 89 -1.20000000000004 5.80000000000057 +0 + +0101000 ++3649 90 -3643 90 * +Ed + 1.00000957204186e-07 1 1 0 +1 329 0 5.21238898038469 6.28318530717966 +2 805 175 0 5.21238898038469 6.28318530717966 +2 806 91 0 5.21238898038469 6.28318530717966 +4 C0 175 0 91 0 +2 811 93 88 5.21238898038469 6.28318530717966 +0 + +0101000 ++3645 0 -3643 56 * +Ed + 1e-07 1 1 0 +1 331 0 -0.141421356231558 0.141421356237765 +2 812 91 0 -0.141421356231558 0.141421356237765 +2 813 90 0 -0.141421356231558 0.141421356237765 +4 G2 91 0 90 0 +0 + +0101000 ++2931 0 -3645 0 * +Ed + 1e-07 1 1 0 +1 332 0 -0.141421356231558 0.141421356237765 +2 814 91 0 -0.141421356231558 0.141421356237765 +2 815 90 0 -0.141421356231558 0.141421356237765 +4 G2 91 0 90 0 +0 + +0101000 ++2932 0 -3644 0 * +Ed + 1e-07 1 1 0 +1 333 0 -1.4 1.4 +2 816 177 0 -1.4 1.4 +2 817 178 0 -1.4 1.4 +4 CN 177 0 178 0 +0 + +0101000 ++3642 0 -3641 0 * +Ed + 1e-07 1 1 0 +1 334 0 2.07079632679437 5.21238898038416 +2 818 177 0 2.07079632679437 5.21238898038416 +2 819 179 0 2.07079632679437 5.21238898038416 +4 G1 177 0 179 0 +0 + +0101000 ++3642 0 -3640 0 * +Ed + 1e-07 1 1 0 +1 335 0 -1.4 1.4 +2 820 177 0 -1.4 1.4 +2 821 178 0 -1.4 1.4 +4 CN 177 0 178 0 +0 + +0101000 ++3640 0 -3639 0 * +Ed + 1e-07 1 1 0 +1 336 0 2.07079632679437 5.21238898038416 +2 822 177 0 2.07079632679437 5.21238898038416 +2 823 180 0 2.07079632679437 5.21238898038416 +4 G1 177 0 180 0 +0 + +0101000 ++3641 0 -3639 0 * +Ed + 1e-07 1 1 0 +1 337 0 5.21238898038416 8.35398163397396 +2 824 178 0 5.21238898038416 8.35398163397396 +2 825 181 0 5.21238898038416 8.35398163397396 +4 G1 178 0 181 0 +0 + +0101000 ++3640 0 -3642 0 * +Ed + 1e-07 1 1 0 +1 338 0 5.21238898038416 8.35398163397396 +2 826 178 0 5.21238898038416 8.35398163397396 +2 827 182 0 5.21238898038416 8.35398163397396 +4 G1 178 0 182 0 +0 + +0101000 ++3639 0 -3641 0 * +Ed + 1e-07 1 1 0 +1 339 0 5.21238898038447 8.35398163397426 +2 828 173 0 5.21238898038447 8.35398163397426 +2 829 183 0 5.21238898038447 8.35398163397426 +4 G1 173 0 183 0 +0 + +0101000 ++3638 0 -3637 0 * +Ed + 1e-07 1 1 0 +1 340 0 -2.0755002002 11.0000000000001 +2 830 173 0 -2.0755002002 11.0000000000001 +2 831 174 0 -2.0755002002 11.0000000000001 +4 CN 173 0 174 0 +0 + +0101000 ++3638 0 -3636 91 * +Ed + 1.00001301515697e-07 1 1 0 +1 341 0 2.07079632679468 5.21238898038447 +2 832 184 0 2.07079632679468 5.21238898038447 +4 C0 185 0 184 0 +2 833 185 0 2.07079632679468 5.21238898038447 +2 834 173 92 2.07079632679468 5.21238898038447 +0 + +0101000 ++3636 0 -3635 0 * +Ed + 1e-07 1 1 0 +1 342 0 -2.0755002002 11.0000000000008 +2 835 173 0 -2.0755002002 11.0000000000008 +2 836 174 0 -2.0755002002 11.0000000000008 +4 CN 173 0 174 0 +0 + +0101000 ++3637 0 -3635 91 * +Ed + 1.00000540012479e-07 1 1 0 +1 343 0 -5 4.26794919243 +2 837 186 0 -5 4.26794919243 +2 838 184 0 -5 4.26794919243 +4 CN 186 0 184 0 +2 839 173 92 -5 4.26794919243 +2 840 174 92 -5 4.26794919243 +0 + +0101000 ++3636 0 -3634 0 * +Ed + 1.00001323670747e-07 1 1 0 +1 344 0 -5 4.26794919243 +2 841 186 0 -5 4.26794919243 +2 842 184 0 -5 4.26794919243 +4 CN 186 0 184 0 +2 843 173 92 -5 4.26794919243 +2 844 174 92 -5 4.26794919243 +0 + +0101000 ++3635 0 -3633 0 * +Ed + 1.00000454747351e-07 1 1 0 +1 345 0 2.07079632679468 5.21238898038447 +2 845 184 0 2.07079632679468 5.21238898038447 +2 846 187 0 2.07079632679468 5.21238898038447 +4 C1 184 0 187 0 +2 847 173 92 2.07079632679468 5.21238898038447 +0 + +0101000 ++3634 0 -3633 0 * +Ed + 1e-07 1 1 0 +1 340 0 20.2679491924308 27.2 +2 830 173 0 20.2679491924308 27.2 +2 831 174 0 20.2679491924308 27.2 +4 CN 173 0 174 0 +0 + +0101000 ++3634 91 -3654 0 * +Ed + 1e-07 1 1 0 +1 342 0 20.2679491924303 27.2 +2 835 173 0 20.2679491924303 27.2 +2 836 174 0 20.2679491924303 27.2 +4 CN 173 0 174 0 +0 + +0101000 ++3633 91 -3653 0 * +Ed + 1e-07 1 1 0 +1 346 0 2.07079632679468 5.21238898038447 +2 848 174 0 2.07079632679468 5.21238898038447 +2 849 188 0 2.07079632679468 5.21238898038447 +4 G1 174 0 188 0 +0 + +0101000 ++3637 0 -3638 0 * +Ed + 1.00000992727632e-07 1 1 0 +1 347 0 5.21238898038447 8.35398163397426 +2 850 186 0 5.21238898038447 8.35398163397426 +4 C0 185 0 186 0 +2 851 185 0 5.21238898038447 8.35398163397426 +2 852 174 92 5.21238898038447 8.35398163397426 +0 + +0101000 ++3635 0 -3636 0 * +Ed + 1.0000051159077e-07 1 1 0 +1 348 0 5.21238898038447 8.35398163397426 +2 853 186 0 5.21238898038447 8.35398163397426 +2 854 189 0 5.21238898038447 8.35398163397426 +4 C1 186 0 189 0 +2 855 174 92 5.21238898038447 8.35398163397426 +0 + +0101000 ++3633 0 -3634 0 * +Ed + 1e-07 1 1 0 +1 349 0 2.24592785979465 3.14159265358979 +2 856 182 0 2.24592785979465 3.14159265358979 +2 857 180 0 2.24592785979465 3.14159265358979 +4 CN 182 0 180 0 +0 + +0101000 ++3632 0 -3641 0 * +Ed + 1e-07 1 1 0 +1 350 0 2.24592785979465 3.14159265358979 +2 858 182 0 2.24592785979465 3.14159265358979 +2 859 180 0 2.24592785979465 3.14159265358979 +4 CN 182 0 180 0 +0 + +0101000 ++3631 0 -3639 0 * +Ed + 1e-07 1 1 0 +1 351 0 5.21238898038512 8.35398163397492 +2 860 182 0 5.21238898038512 8.35398163397492 +2 861 183 0 5.21238898038512 8.35398163397492 +4 G1 182 0 183 0 +0 + +0101000 ++3631 0 -3632 0 * +Ed + 1e-07 1 1 0 +1 352 0 2.07079632679533 5.21238898038512 +2 862 180 0 2.07079632679533 5.21238898038512 +2 863 188 0 2.07079632679533 5.21238898038512 +4 G1 180 0 188 0 +0 + +0101000 ++3632 0 -3631 0 * +Ed + 1e-07 1 1 0 +1 353 0 3.14159265358979 4.03725744744417 +2 864 188 0 3.14159265358979 4.03725744744417 +2 865 183 0 3.14159265358979 4.03725744744417 +4 G2 188 0 183 0 +0 + +0101000 ++3638 0 -3631 0 * +Ed + 1e-07 1 1 0 +1 354 0 3.14159265358979 4.03725744744417 +2 866 188 0 3.14159265358979 4.03725744744417 +2 867 183 0 3.14159265358979 4.03725744744417 +4 CN 188 0 183 0 +0 + +0101000 ++3637 0 -3632 0 * +Ed + 1e-07 1 1 0 +1 266 0 -8.6 -8.39999999999995 +2 621 135 0 -8.6 -8.39999999999995 +2 622 136 0 -8.6 -8.39999999999995 +4 CN 135 0 136 0 +0 + +0101000 ++3651 0 -3705 56 * +Ed + 1e-07 1 1 0 +1 264 0 -8.6 -8.39999999999902 +2 612 135 0 -8.6 -8.39999999999902 +2 613 136 0 -8.6 -8.39999999999902 +4 CN 135 0 136 0 +0 + +0101000 ++3652 0 -3703 56 * +Ed + 1e-07 1 1 0 +1 355 0 3.14159265358979 4.03725744738494 +2 868 181 0 3.14159265358979 4.03725744738494 +2 869 179 0 3.14159265358979 4.03725744738494 +4 G2 181 0 179 0 +0 + +0101000 ++3640 0 -3630 0 * +Ed + 1e-07 1 1 0 +1 356 0 3.14159265358979 4.03725744738494 +2 870 181 0 3.14159265358979 4.03725744738494 +2 871 179 0 3.14159265358979 4.03725744738494 +4 G2 181 0 179 0 +0 + +0101000 ++3642 0 -3629 0 * +Ed + 1e-07 1 1 0 +1 357 0 5.21238898038512 8.35398163397492 +2 872 181 0 5.21238898038512 8.35398163397492 +2 873 143 0 5.21238898038512 8.35398163397492 +4 G1 181 0 143 0 +0 + +0101000 ++3630 0 -3629 0 * +Ed + 1e-07 1 1 0 +1 358 0 2.07079632679533 5.21238898038512 +2 874 179 0 2.07079632679533 5.21238898038512 +2 875 142 0 2.07079632679533 5.21238898038512 +4 G1 179 0 142 0 +0 + +0101000 ++3629 0 -3630 0 * +Ed + 1e-07 1 1 0 +1 359 0 2.24592785973542 3.14159265358979 +2 876 142 0 2.24592785973542 3.14159265358979 +2 877 143 0 2.24592785973542 3.14159265358979 +4 CN 142 0 143 0 +0 + +0101000 ++3630 0 -3693 0 * +Ed + 1e-07 1 1 0 +1 360 0 2.24592785973542 3.14159265358979 +2 878 142 0 2.24592785973542 3.14159265358979 +2 879 143 0 2.24592785973542 3.14159265358979 +4 CN 142 0 143 0 +0 + +0101000 ++3629 0 -3695 0 * +Ed + 1e-07 1 1 0 +1 361 0 -1.4 1.4 +2 880 190 0 -1.4 1.4 +2 881 191 0 -1.4 1.4 +4 CN 190 0 191 0 +0 + +0101000 ++3628 0 -3627 0 * +Ed + 1e-07 1 1 0 +1 362 0 2.07079632679388 5.21238898038367 +2 882 190 0 2.07079632679388 5.21238898038367 +2 883 192 0 2.07079632679388 5.21238898038367 +4 G1 190 0 192 0 +0 + +0101000 ++3626 0 -3627 0 * +Ed + 1e-07 1 1 0 +1 363 0 -1.4 1.4 +2 884 190 0 -1.4 1.4 +2 885 191 0 -1.4 1.4 +4 CN 190 0 191 0 +0 + +0101000 ++3625 0 -3626 0 * +Ed + 1e-07 1 1 0 +1 364 0 2.07079632679388 5.21238898038367 +2 886 190 0 2.07079632679388 5.21238898038367 +2 887 193 0 2.07079632679388 5.21238898038367 +4 G1 190 0 193 0 +0 + +0101000 ++3625 0 -3628 0 * +Ed + 1e-07 1 1 0 +1 365 0 5.21238898038367 8.35398163397346 +2 888 191 0 5.21238898038367 8.35398163397346 +2 889 194 0 5.21238898038367 8.35398163397346 +4 G1 191 0 194 0 +0 + +0101000 ++3627 0 -3626 0 * +Ed + 1e-07 1 1 0 +1 366 0 5.21238898038367 8.35398163397346 +2 890 191 0 5.21238898038367 8.35398163397346 +2 891 195 0 5.21238898038367 8.35398163397346 +4 G1 191 0 195 0 +0 + +0101000 ++3628 0 -3625 0 * +Ed + 1e-07 1 1 0 +1 304 0 -8.6 -8.40000000000007 +2 733 160 0 -8.6 -8.40000000000007 +2 734 161 0 -8.6 -8.40000000000007 +4 CN 160 0 161 0 +0 + +0101000 ++3624 0 -3677 62 * +Ed + 1e-07 1 1 0 +1 302 0 -8.6 -8.40000000000022 +2 724 160 0 -8.6 -8.40000000000022 +2 725 161 0 -8.6 -8.40000000000022 +4 CN 160 0 161 0 +0 + +0101000 ++3623 0 -3675 62 * +Ed + 1e-07 1 1 0 +1 367 0 5.21238898038557 8.35398163397536 +2 892 160 0 5.21238898038557 8.35398163397536 +4 C0 160 0 155 0 +2 893 155 0 5.21238898038557 8.35398163397536 +0 + +0101000 ++3624 0 -3623 0 * +Ed + 1e-07 1 1 0 +1 368 0 2.07079632679577 5.21238898038557 +2 894 161 0 2.07079632679577 5.21238898038557 +4 C0 161 0 155 0 +2 895 155 0 2.07079632679577 5.21238898038557 +0 + +0101000 ++3623 0 -3624 0 * +Ed + 1e-07 1 1 0 +1 369 0 3.14159265358979 4.10414340149723 +2 896 195 0 3.14159265358979 4.10414340149723 +2 897 193 0 3.14159265358979 4.10414340149723 +4 CN 195 0 193 0 +0 + +0101000 ++3628 0 -3622 0 * +Ed + 1e-07 1 1 0 +1 370 0 3.14159265358979 4.10414340149723 +2 898 195 0 3.14159265358979 4.10414340149723 +2 899 193 0 3.14159265358979 4.10414340149723 +4 CN 195 0 193 0 +0 + +0101000 ++3625 0 -3621 0 * +Ed + 1e-07 1 1 0 +1 371 0 5.21238898038504 8.35398163397483 +2 900 195 0 5.21238898038504 8.35398163397483 +2 901 168 0 5.21238898038504 8.35398163397483 +4 G1 195 0 168 0 +0 + +0101000 ++3622 0 -3621 0 * +Ed + 1e-07 1 1 0 +1 372 0 2.07079632679524 5.21238898038504 +2 902 193 0 2.07079632679524 5.21238898038504 +2 903 167 0 2.07079632679524 5.21238898038504 +4 G1 193 0 167 0 +0 + +0101000 ++3621 0 -3622 0 * +Ed + 1e-07 1 1 0 +1 373 0 2.17904190565329 3.14159265358979 +2 904 167 0 2.17904190565329 3.14159265358979 +2 905 168 0 2.17904190565329 3.14159265358979 +4 CN 167 0 168 0 +0 + +0101000 ++3622 0 -3665 0 * +Ed + 1e-07 1 1 0 +1 374 0 2.17904190565329 3.14159265358979 +2 906 167 0 2.17904190565329 3.14159265358979 +2 907 168 0 2.17904190565329 3.14159265358979 +4 CN 167 0 168 0 +0 + +0101000 ++3621 0 -3667 0 * +Ed + 1e-07 1 1 0 +1 375 0 2.17904190568235 3.14159265358979 +2 908 194 0 2.17904190568235 3.14159265358979 +2 909 192 0 2.17904190568235 3.14159265358979 +4 G2 194 0 192 0 +0 + +0101000 ++3620 0 -3626 0 * +Ed + 1e-07 1 1 0 +1 376 0 2.17904190568235 3.14159265358979 +2 910 194 0 2.17904190568235 3.14159265358979 +2 911 192 0 2.17904190568235 3.14159265358979 +4 G2 194 0 192 0 +0 + +0101000 ++3619 0 -3627 0 * +Ed + 1e-07 1 1 0 +1 377 0 5.21238898038504 8.35398163397483 +2 912 194 0 5.21238898038504 8.35398163397483 +2 913 196 0 5.21238898038504 8.35398163397483 +4 G1 194 0 196 0 +0 + +0101000 ++3619 0 -3620 0 * +Ed + 1e-07 1 1 0 +1 378 0 2.07079632679524 5.21238898038504 +2 914 192 0 2.07079632679524 5.21238898038504 +2 915 197 0 2.07079632679524 5.21238898038504 +4 G1 192 0 197 0 +0 + +0101000 ++3620 0 -3619 0 * +Ed + 1e-07 1 1 0 +1 379 0 3.14159265358979 4.1041434015263 +2 916 197 0 3.14159265358979 4.1041434015263 +2 917 196 0 3.14159265358979 4.1041434015263 +4 G2 197 0 196 0 +0 + +0101000 ++3618 0 -3619 0 * +Ed + 1e-07 1 1 0 +1 380 0 4.21238898038381 7.3539816339736 +2 918 197 0 4.21238898038381 7.3539816339736 +2 919 198 0 4.21238898038381 7.3539816339736 +4 G1 197 0 198 0 +0 + +0101000 ++3618 0 -3617 0 * +Ed + 1e-07 1 1 0 +1 381 0 3.14159265358979 4.1041434015263 +2 920 197 0 3.14159265358979 4.1041434015263 +2 921 196 0 3.14159265358979 4.1041434015263 +4 CN 197 0 196 0 +0 + +0101000 ++3617 0 -3620 0 * +Ed + 1e-07 1 1 0 +1 382 0 1.07079632679402 4.21238898038381 +2 922 196 0 1.07079632679402 4.21238898038381 +2 923 199 0 1.07079632679402 4.21238898038381 +4 G1 196 0 199 0 +0 + +0101000 ++3617 0 -3618 0 * +Ed + 1e-07 1 1 0 +1 72 0 -16.4000000000005 -16 +2 172 62 0 -16.4000000000005 -16 +2 173 63 0 -16.4000000000005 -16 +4 CN 62 0 63 0 +0 + +0101000 ++2961 62 -3616 0 * +Ed + 1e-07 1 1 0 +1 383 0 2.07079632679577 5.21238898038557 +2 924 62 0 2.07079632679577 5.21238898038557 +4 C0 62 0 68 0 +2 925 68 0 2.07079632679577 5.21238898038557 +0 + +0101000 ++3616 0 -3615 0 * +Ed + 1e-07 1 1 0 +1 66 0 -16.3999999999998 -16 +2 153 62 0 -16.3999999999998 -16 +2 154 63 0 -16.3999999999998 -16 +4 CN 62 0 63 0 +0 + +0101000 ++2966 62 -3615 0 * +Ed + 1e-07 1 1 0 +1 384 0 5.21238898038557 8.35398163397536 +2 926 63 0 5.21238898038557 8.35398163397536 +4 C0 63 0 68 0 +2 927 68 0 5.21238898038557 8.35398163397536 +0 + +0101000 ++3615 0 -3616 0 * +Ed + 1e-07 1 1 0 +1 385 0 2.07079632679534 5.21238898038513 +2 928 64 0 2.07079632679534 5.21238898038513 +4 C0 200 0 64 0 +2 929 200 0 2.07079632679534 5.21238898038513 +0 + +0101000 ++3614 0 -3613 0 * +Ed + 1e-07 1 1 0 +1 386 0 5.21238898038513 8.35398163397492 +2 930 65 0 5.21238898038513 8.35398163397492 +4 C0 200 0 65 0 +2 931 200 0 5.21238898038513 8.35398163397492 +0 + +0101000 ++3613 0 -3614 0 * +Ed + 1e-07 1 1 0 +1 387 0 -1.27279220613367 1.27279220613706 +2 932 65 0 -1.27279220613367 1.27279220613706 +2 933 64 0 -1.27279220613367 1.27279220613706 +4 G2 65 0 64 0 +0 + +0101000 ++3613 0 -2974 0 * +Ed + 1e-07 1 1 0 +1 388 0 -1.27279220613367 1.27279220613706 +2 934 65 0 -1.27279220613367 1.27279220613706 +2 935 64 0 -1.27279220613367 1.27279220613706 +4 G2 65 0 64 0 +0 + +0101000 ++3614 0 -2969 0 * +Ed + 1e-07 1 1 0 +1 389 0 2.07079632679534 5.21238898038513 +2 936 201 0 2.07079632679534 5.21238898038513 +4 C0 202 0 201 0 +2 937 202 0 2.07079632679534 5.21238898038513 +0 + +0101000 ++3612 0 -3611 0 * +Ed + 1e-07 1 1 0 +1 390 0 5.21238898038513 8.35398163397492 +2 938 203 0 5.21238898038513 8.35398163397492 +4 C0 202 0 203 0 +2 939 202 0 5.21238898038513 8.35398163397492 +0 + +0101000 ++3611 0 -3612 0 * +Ed + 1e-07 1 1 0 +1 391 0 -2.1255437353 13.5000000000003 +2 940 199 0 -2.1255437353 13.5000000000003 +2 941 198 0 -2.1255437353 13.5000000000003 +4 CN 199 0 198 0 +0 + +0101000 ++3618 0 -3610 93 * +Ed + 1.00001314254387e-07 1 1 0 +1 392 0 5.21238898038557 8.35398163397536 +2 942 204 0 5.21238898038557 8.35398163397536 +4 C0 205 0 204 0 +2 943 205 0 5.21238898038557 8.35398163397536 +2 944 199 94 5.21238898038557 8.35398163397536 +2 945 198 95 5.21238898038557 8.35398163397536 +0 + +0101000 ++3610 0 -3609 0 * +Ed + 1e-07 1 1 0 +1 393 0 -2.1255437353 13.4999999999998 +2 946 199 0 -2.1255437353 13.4999999999998 +2 947 198 0 -2.1255437353 13.4999999999998 +4 CN 199 0 198 0 +0 + +0101000 ++3617 0 -3609 93 * +Ed + 1.00001350629417e-07 1 1 0 +1 394 0 -3.75 3.01794919243 +2 948 204 0 -3.75 3.01794919243 +2 949 206 0 -3.75 3.01794919243 +4 CN 204 0 206 0 +2 950 199 94 -3.75 3.01794919243 +2 951 198 94 -3.75 3.01794919243 +2 952 199 95 -3.75 3.01794919243 +2 953 198 95 -3.75 3.01794919243 +0 + +0101000 ++3610 0 -3608 0 * +Ed + 1.00001350629417e-07 1 1 0 +1 395 0 -3.75 3.01794919243 +2 954 204 0 -3.75 3.01794919243 +2 955 206 0 -3.75 3.01794919243 +4 CN 204 0 206 0 +2 956 199 94 -3.75 3.01794919243 +2 957 198 94 -3.75 3.01794919243 +2 958 199 95 -3.75 3.01794919243 +2 959 198 95 -3.75 3.01794919243 +0 + +0101000 ++3609 0 -3607 0 * +Ed + 1.00001311408595e-07 1 1 0 +1 396 0 5.21238898038557 8.35398163397536 +2 960 204 0 5.21238898038557 8.35398163397536 +2 961 207 0 5.21238898038557 8.35398163397536 +4 C1 204 0 207 0 +2 962 199 94 5.21238898038557 8.35398163397536 +2 963 198 95 5.21238898038557 8.35398163397536 +0 + +0101000 ++3608 0 -3607 0 * +Ed + 1e-07 1 1 0 +1 391 0 20.2679491924308 26.2 +2 940 199 0 20.2679491924308 26.2 +2 941 198 0 20.2679491924308 26.2 +4 CN 199 0 198 0 +0 + +0101000 ++3608 93 -3606 0 * +Ed + 1e-07 1 1 0 +1 397 0 5.21238898038557 8.35398163397536 +2 964 199 0 5.21238898038557 8.35398163397536 +2 965 203 0 5.21238898038557 8.35398163397536 +4 C0 199 0 203 0 +0 + +0101000 ++3606 0 -3605 0 * +Ed + 1e-07 1 1 0 +1 393 0 20.2679491924297 26.2 +2 946 199 0 20.2679491924297 26.2 +2 947 198 0 20.2679491924297 26.2 +4 CN 199 0 198 0 +0 + +0101000 ++3607 93 -3605 0 * +Ed + 1.00001286533722e-07 1 1 0 +1 398 0 2.07079632679577 5.21238898038557 +2 966 206 0 2.07079632679577 5.21238898038557 +4 C0 205 0 206 0 +2 967 205 0 2.07079632679577 5.21238898038557 +2 968 198 94 2.07079632679577 5.21238898038557 +2 969 199 95 2.07079632679577 5.21238898038557 +0 + +0101000 ++3609 0 -3610 0 * +Ed + 1.0000128692609e-07 1 1 0 +1 399 0 2.07079632679577 5.21238898038557 +2 970 206 0 2.07079632679577 5.21238898038557 +2 971 208 0 2.07079632679577 5.21238898038557 +4 C1 206 0 208 0 +2 972 198 94 2.07079632679577 5.21238898038557 +2 973 199 95 2.07079632679577 5.21238898038557 +0 + +0101000 ++3607 0 -3608 0 * +Ed + 1e-07 1 1 0 +1 400 0 2.07079632679577 5.21238898038557 +2 974 198 0 2.07079632679577 5.21238898038557 +2 975 201 0 2.07079632679577 5.21238898038557 +4 C0 198 0 201 0 +0 + +0101000 ++3605 0 -3606 0 * +Ed + 1e-07 1 1 0 +1 401 0 -1.27279220613367 1.27279220613706 +2 976 201 0 -1.27279220613367 1.27279220613706 +2 977 203 0 -1.27279220613367 1.27279220613706 +4 G2 201 0 203 0 +0 + +0101000 ++3612 0 -3605 0 * +Ed + 1e-07 1 1 0 +1 402 0 -1.27279220613367 1.27279220613706 +2 978 201 0 -1.27279220613367 1.27279220613706 +2 979 203 0 -1.27279220613367 1.27279220613706 +4 G2 201 0 203 0 +0 + +0101000 ++3611 0 -3606 0 * +Ed + 1e-07 1 1 0 +1 403 0 -0.141421356237763 0.141421356237765 +2 980 154 0 -0.141421356237763 0.141421356237765 +2 981 156 0 -0.141421356237763 0.141421356237765 +4 G2 154 0 156 0 +0 + +0101000 ++3682 0 -3604 0 * +Ed + 1.00001057730632e-07 1 1 0 +1 404 0 5.21238898038447 6.28318530717957 +2 982 154 0 5.21238898038447 6.28318530717957 +2 983 209 0 5.21238898038447 6.28318530717957 +4 C0 154 0 209 0 +2 984 81 96 5.21238898038447 6.28318530717957 +0 + +0101000 ++3604 0 -3603 62 * +Ed + 1.00001311408595e-07 1 1 0 +1 404 0 6.28318530717957 8.35398163397426 +2 982 154 0 6.28318530717957 8.35398163397426 +2 983 209 0 6.28318530717957 8.35398163397426 +4 C0 154 0 209 0 +2 985 80 96 6.28318530717957 8.35398163397426 +0 + +0101000 ++3603 62 -3602 0 * +Ed + 1e-07 1 1 0 +1 405 0 -0.141421356237763 0.141421356237765 +2 986 154 0 -0.141421356237763 0.141421356237765 +2 987 156 0 -0.141421356237763 0.141421356237765 +4 G2 154 0 156 0 +0 + +0101000 ++3681 0 -3602 0 * +Ed + 1.00001394981972e-07 1 1 0 +1 406 0 2.07079632679468 3.14159265358979 +2 988 156 0 2.07079632679468 3.14159265358979 +2 989 210 0 2.07079632679468 3.14159265358979 +4 C0 156 0 210 0 +2 990 80 96 2.07079632679468 3.14159265358979 +0 + +0101000 ++3602 0 -3601 62 * +Ed + 1.00001394981972e-07 1 1 0 +1 406 0 3.14159265358979 5.21238898038447 +2 988 156 0 3.14159265358979 5.21238898038447 +2 989 210 0 3.14159265358979 5.21238898038447 +4 C0 156 0 210 0 +2 991 81 96 3.14159265358979 5.21238898038447 +0 + +0101000 ++3601 62 -3604 0 * +Ed + 1.00001291234263e-07 1 1 0 +1 407 0 3.14159265358979 5.21238898038447 +2 992 210 0 3.14159265358979 5.21238898038447 +2 993 78 0 3.14159265358979 5.21238898038447 +4 C0 210 0 78 0 +2 994 81 96 3.14159265358979 5.21238898038447 +0 + +0101000 ++3600 62 -3599 0 * +Ed + 1.00000341060513e-07 1 1 0 +1 408 0 -1.20000000000053 5.79999999999949 +2 995 81 0 -1.20000000000053 5.79999999999949 +2 996 80 0 -1.20000000000053 5.79999999999949 +4 CN 81 0 80 0 +2 997 210 97 -1.20000000000053 5.79999999999949 +0 + +0101000 ++3601 98 -3600 98 * +Ed + 1.00004572363208e-07 1 1 0 +1 409 0 -3.5 3.5 +2 998 210 0 -3.5 3.5 +2 999 209 0 -3.5 3.5 +4 CN 210 0 209 0 +2 1000 81 99 -3.5 3.5 +2 1001 81 96 -3.5 3.5 +0 + +0101000 ++3599 0 -3604 0 * +Ed + 1.00001057730632e-07 1 1 0 +1 407 0 2.07079632679468 3.14159265358979 +2 992 210 0 2.07079632679468 3.14159265358979 +2 993 78 0 2.07079632679468 3.14159265358979 +4 C0 210 0 78 0 +2 1002 80 96 2.07079632679468 3.14159265358979 +0 + +0101000 ++3598 0 -3600 62 * +Ed + 1.00004525482328e-07 1 1 0 +1 410 0 -3.5 3.5 +2 1003 210 0 -3.5 3.5 +2 1004 209 0 -3.5 3.5 +4 CN 210 0 209 0 +2 1005 80 99 -3.5 3.5 +2 1006 80 96 -3.5 3.5 +0 + +0101000 ++3598 0 -3602 0 * +Ed + 1.00000931000804e-07 1 1 0 +1 411 0 6.28318530717955 8.35398163397426 +2 1007 209 0 6.28318530717955 8.35398163397426 +2 1008 79 0 6.28318530717955 8.35398163397426 +4 C0 209 0 79 0 +2 1009 80 96 6.28318530717955 8.35398163397426 +0 + +0101000 ++3597 62 -3598 0 * +Ed + 1.00000284217094e-07 1 1 0 +1 412 0 -1.20000000000061 5.79999999999945 +2 1010 81 0 -1.20000000000061 5.79999999999945 +2 1011 80 0 -1.20000000000061 5.79999999999945 +4 CN 81 0 80 0 +2 1012 209 97 -1.20000000000061 5.79999999999945 +0 + +0101000 ++3603 98 -3597 98 * +Ed + 1.00001290060734e-07 1 1 0 +1 411 0 5.21238898038447 6.28318530717955 +2 1007 209 0 5.21238898038447 6.28318530717955 +2 1008 79 0 5.21238898038447 6.28318530717955 +4 C0 209 0 79 0 +2 1013 81 96 5.21238898038447 6.28318530717955 +0 + +0101000 ++3599 0 -3597 62 * +Ed + 1e-07 1 1 0 +1 413 0 -0.141421356237764 0.141421356237764 +2 1014 79 0 -0.141421356237764 0.141421356237764 +2 1015 78 0 -0.141421356237764 0.141421356237764 +4 G2 79 0 78 0 +0 + +0101000 ++2949 0 -3599 0 * +Ed + 1e-07 1 1 0 +1 414 0 -0.141421356237764 0.141421356237764 +2 1016 79 0 -0.141421356237764 0.141421356237764 +2 1017 78 0 -0.141421356237764 0.141421356237764 +4 G2 79 0 78 0 +0 + +0101000 ++2950 0 -3598 0 * +Ed + 1e-07 1 1 0 +1 304 0 -8.6 -8.40000000000008 +2 733 160 0 -8.6 -8.40000000000008 +2 734 161 0 -8.6 -8.40000000000008 +4 CN 160 0 161 0 +0 + +0101000 ++3624 0 -3664 59 * +Ed + 1e-07 1 1 0 +1 302 0 -8.6 -8.40000000000022 +2 724 160 0 -8.6 -8.40000000000022 +2 725 161 0 -8.6 -8.40000000000022 +4 CN 160 0 161 0 +0 + +0101000 ++3623 0 -3663 59 * +Ed + 1e-07 1 1 0 +1 72 0 -16.4000000000005 -16 +2 172 62 0 -16.4000000000005 -16 +2 173 63 0 -16.4000000000005 -16 +4 CN 62 0 63 0 +0 + +0101000 ++2970 59 -3616 0 * +Ed + 1e-07 1 1 0 +1 66 0 -16.3999999999991 -16 +2 153 62 0 -16.3999999999991 -16 +2 154 63 0 -16.3999999999991 -16 +4 CN 62 0 63 0 +0 + +0101000 ++2976 59 -3615 0 * +Ed + 1e-07 1 1 0 +1 391 0 -2.1255437353 13.5000000000009 +2 940 199 0 -2.1255437353 13.5000000000009 +2 941 198 0 -2.1255437353 13.5000000000009 +4 CN 199 0 198 0 +0 + +0101000 ++3618 0 -3609 100 * +Ed + 1e-07 1 1 0 +1 393 0 -2.1255437353 13.5000000000004 +2 946 199 0 -2.1255437353 13.5000000000004 +2 947 198 0 -2.1255437353 13.5000000000004 +4 CN 199 0 198 0 +0 + +0101000 ++3617 0 -3610 100 * +Ed + 1e-07 1 1 0 +1 391 0 20.2679491924314 26.2 +2 940 199 0 20.2679491924314 26.2 +2 941 198 0 20.2679491924314 26.2 +4 CN 199 0 198 0 +0 + +0101000 ++3607 100 -3606 0 * +Ed + 1e-07 1 1 0 +1 393 0 20.2679491924303 26.2 +2 946 199 0 20.2679491924303 26.2 +2 947 198 0 20.2679491924303 26.2 +4 CN 199 0 198 0 +0 + +0101000 ++3608 100 -3605 0 * +Ed + 1.00000198951966e-07 1 1 0 +1 404 0 5.21238898038447 6.28318530717969 +2 982 154 0 5.21238898038447 6.28318530717969 +2 983 209 0 5.21238898038447 6.28318530717969 +4 C0 154 0 209 0 +2 1018 81 99 5.21238898038447 6.28318530717969 +0 + +0101000 ++3604 0 -3596 59 * +Ed + 1.00000909605717e-07 1 1 0 +1 404 0 6.28318530717969 8.35398163397426 +2 982 154 0 6.28318530717969 8.35398163397426 +2 983 209 0 6.28318530717969 8.35398163397426 +4 C0 154 0 209 0 +2 1019 80 99 6.28318530717969 8.35398163397426 +0 + +0101000 ++3596 59 -3602 0 * +Ed + 1.00000255795385e-07 1 1 0 +1 406 0 2.07079632679468 3.14159265358979 +2 988 156 0 2.07079632679468 3.14159265358979 +2 989 210 0 2.07079632679468 3.14159265358979 +4 C0 156 0 210 0 +2 1020 80 99 2.07079632679468 3.14159265358979 +0 + +0101000 ++3602 0 -3595 59 * +Ed + 1.00001301515697e-07 1 1 0 +1 406 0 3.14159265358979 5.21238898038447 +2 988 156 0 3.14159265358979 5.21238898038447 +2 989 210 0 3.14159265358979 5.21238898038447 +4 C0 156 0 210 0 +2 1021 81 99 3.14159265358979 5.21238898038447 +0 + +0101000 ++3595 59 -3604 0 * +Ed + 1.00001294046392e-07 1 1 0 +1 407 0 3.14159265358979 5.21238898038447 +2 992 210 0 3.14159265358979 5.21238898038447 +2 993 78 0 3.14159265358979 5.21238898038447 +4 C0 210 0 78 0 +2 1022 81 99 3.14159265358979 5.21238898038447 +0 + +0101000 ++3594 59 -3599 0 * +Ed + 1.0000140054444e-07 1 1 0 +1 408 0 -1.19999999999996 5.79999999999982 +2 995 81 0 -1.19999999999996 5.79999999999982 +2 996 80 0 -1.19999999999996 5.79999999999982 +4 CN 81 0 80 0 +2 1023 210 101 -1.19999999999996 5.79999999999982 +0 + +0101000 ++3595 102 -3594 102 * +Ed + 1.00001072519482e-07 1 1 0 +1 407 0 2.07079632679468 3.14159265358979 +2 992 210 0 2.07079632679468 3.14159265358979 +2 993 78 0 2.07079632679468 3.14159265358979 +4 C0 210 0 78 0 +2 1024 80 99 2.07079632679468 3.14159265358979 +0 + +0101000 ++3598 0 -3594 59 * +Ed + 1.00001346361305e-07 1 1 0 +1 411 0 6.28318530717967 8.35398163397426 +2 1007 209 0 6.28318530717967 8.35398163397426 +2 1008 79 0 6.28318530717967 8.35398163397426 +4 C0 209 0 79 0 +2 1025 80 99 6.28318530717967 8.35398163397426 +0 + +0101000 ++3593 59 -3598 0 * +Ed + 1.00001423995717e-07 1 1 0 +1 412 0 -1.20000000000011 5.79999999999997 +2 1010 81 0 -1.20000000000011 5.79999999999997 +2 1011 80 0 -1.20000000000011 5.79999999999997 +4 CN 81 0 80 0 +2 1026 209 101 -1.20000000000011 5.79999999999997 +0 + +0101000 ++3596 102 -3593 102 * +Ed + 1.00001299419295e-07 1 1 0 +1 411 0 5.21238898038447 6.28318530717967 +2 1007 209 0 5.21238898038447 6.28318530717967 +2 1008 79 0 5.21238898038447 6.28318530717967 +4 C0 209 0 79 0 +2 1027 81 99 5.21238898038447 6.28318530717967 +0 + +0101000 ++3599 0 -3593 59 * +Ed + 1e-07 1 1 0 +1 415 0 -6 6 +2 1028 87 0 -6 6 +2 1029 89 0 -6 6 +4 CN 87 0 89 0 +0 + +0101000 ++3592 0 -2934 0 * +Ed + 1e-07 1 1 0 +1 416 0 0 3.14159265358979 +2 1030 87 0 0 3.14159265358979 +4 C0 87 0 211 0 +2 1031 211 0 0 3.14159265358979 +0 + +0101000 ++3592 0 -3591 0 * +Ed + 1e-07 1 1 0 +1 417 0 -6 6 +2 1032 87 0 -6 6 +2 1033 89 0 -6 6 +4 CN 87 0 89 0 +0 + +0101000 ++3591 0 -2933 0 * +Ed + 1e-07 1 1 0 +1 418 0 3.14159265358979 6.28318530717959 +2 1034 89 0 3.14159265358979 6.28318530717959 +4 C0 89 0 211 0 +2 1035 211 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3591 0 -3592 0 * +Ed + 1.00000611066753e-07 1 1 0 +1 419 0 3.14159265358979 5.2123889803824 +2 1036 212 0 3.14159265358979 5.2123889803824 +4 C0 211 0 212 0 +2 1037 211 0 3.14159265358979 5.2123889803824 +2 1038 213 103 3.14159265358979 5.2123889803824 +0 + +0101000 ++3590 0 -3589 90 * +Ed + 1.00000971340767e-07 1 1 0 +1 419 0 5.2123889803824 6.28318530717959 +2 1036 212 0 5.2123889803824 6.28318530717959 +4 C0 211 0 212 0 +2 1037 211 0 5.2123889803824 6.28318530717959 +2 1039 214 103 5.2123889803824 6.28318530717959 +0 + +0101000 ++3589 90 -3588 0 * +Ed + 1.00000941033314e-07 1 1 0 +1 420 0 0 2.07079632679269 +2 1040 215 0 0 2.07079632679269 +4 C0 211 0 215 0 +2 1041 211 0 0 2.07079632679269 +2 1042 214 103 0 2.07079632679269 +0 + +0101000 ++3588 0 -3587 90 * +Ed + 1.00000911269327e-07 1 1 0 +1 420 0 2.07079632679269 3.14159265358979 +2 1040 215 0 2.07079632679269 3.14159265358979 +4 C0 211 0 215 0 +2 1041 211 0 2.07079632679269 3.14159265358979 +2 1043 213 103 2.07079632679269 3.14159265358979 +0 + +0101000 ++3587 90 -3590 0 * +Ed + 1.00001050546506e-07 1 1 0 +1 421 0 -1.41000000001 0.18999999999 +2 1044 212 0 -1.41000000001 0.18999999999 +2 1045 215 0 -1.41000000001 0.18999999999 +4 CN 212 0 215 0 +2 1046 213 103 -1.41000000001 0.18999999999 +0 + +0101000 ++3590 0 -3586 0 * +Ed + 1.00001314254387e-07 1 1 0 +1 422 0 3.14159265358979 5.21238898038246 +2 1047 212 0 3.14159265358979 5.21238898038246 +4 C0 212 0 216 0 +2 1048 216 0 3.14159265358979 5.21238898038246 +2 1049 213 103 3.14159265358979 5.21238898038246 +2 1050 122 103 3.14159265358979 5.21238898038246 +0 + +0101000 ++3586 0 -3585 103 * +Ed + 1.00027010614585e-07 1 1 0 +1 423 0 -0.0500000000011249 1.55 +2 1051 213 0 -0.0500000000011249 1.55 +2 1052 214 0 -0.0500000000011249 1.55 +4 CN 213 0 214 0 +2 1053 212 104 -0.0500000000011249 1.55 +0 + +0101000 ++3589 105 -3585 0 * +Ed + 1.00001217912533e-07 1 1 0 +1 422 0 5.21238898038246 6.28318530717959 +2 1047 212 0 5.21238898038246 6.28318530717959 +4 C0 212 0 216 0 +2 1048 216 0 5.21238898038246 6.28318530717959 +2 1054 214 103 5.21238898038246 6.28318530717959 +2 1055 122 103 5.21238898038246 6.28318530717959 +0 + +0101000 ++3585 103 -3584 0 * +Ed + 1.00001301515697e-07 1 1 0 +1 424 0 -1.41000000001 0.18999999999 +2 1056 212 0 -1.41000000001 0.18999999999 +2 1057 215 0 -1.41000000001 0.18999999999 +4 CN 212 0 215 0 +2 1058 214 103 -1.41000000001 0.18999999999 +0 + +0101000 ++3588 0 -3584 0 * +Ed + 1.00001355033128e-07 1 1 0 +1 425 0 0 2.07079632679263 +2 1059 215 0 0 2.07079632679263 +4 C0 215 0 216 0 +2 1060 216 0 0 2.07079632679263 +2 1061 214 103 0 2.07079632679263 +2 1062 122 103 0 2.07079632679263 +0 + +0101000 ++3584 0 -3583 103 * +Ed + 1.00026033556668e-07 1 1 0 +1 426 0 -0.0500000000003649 1.55 +2 1063 213 0 -0.0500000000003649 1.55 +2 1064 214 0 -0.0500000000003649 1.55 +4 CN 213 0 214 0 +2 1065 215 104 -0.0500000000003649 1.55 +0 + +0101000 ++3587 105 -3583 0 * +Ed + 1.00001369044566e-07 1 1 0 +1 425 0 2.07079632679263 3.14159265358979 +2 1059 215 0 2.07079632679263 3.14159265358979 +4 C0 215 0 216 0 +2 1060 216 0 2.07079632679263 3.14159265358979 +2 1066 213 103 2.07079632679263 3.14159265358979 +2 1067 122 103 2.07079632679263 3.14159265358979 +0 + +0101000 ++3583 103 -3586 0 * +Ed + 1.00000227373675e-07 1 1 0 +1 427 0 3.14159265358979 6.28318530717959 +2 1068 217 0 3.14159265358979 6.28318530717959 +4 C0 216 0 217 0 +2 1069 216 0 3.14159265358979 6.28318530717959 +2 1070 122 103 3.14159265358979 6.28318530717959 +0 + +0101000 ++3582 0 -3581 0 * +Ed + 1.0000024158453e-07 1 1 0 +1 428 0 0 3.14159265358979 +2 1071 218 0 0 3.14159265358979 +4 C0 216 0 218 0 +2 1072 216 0 0 3.14159265358979 +2 1073 122 103 0 3.14159265358979 +0 + +0101000 ++3581 0 -3582 0 * +Ed + 1e-07 1 1 0 +1 330 0 -1.4 -1.20000000000004 +2 808 93 0 -1.4 -1.20000000000004 +2 809 92 0 -1.4 -1.20000000000004 +4 CN 93 0 92 0 +0 + +0101000 ++3712 0 -3649 90 * +Ed + 1e-07 1 1 0 +1 326 0 -1.4 -1.19999999999968 +2 795 93 0 -1.4 -1.19999999999968 +2 796 92 0 -1.4 -1.19999999999968 +4 CN 93 0 92 0 +0 + +0101000 ++3711 0 -3647 90 * +Ed + 1e-07 1 1 0 +1 330 0 5.80000000000057 6 +2 808 93 0 5.80000000000057 6 +2 809 92 0 5.80000000000057 6 +4 CN 93 0 92 0 +0 + +0101000 ++3643 90 -2929 0 * +Ed + 1e-07 1 1 0 +1 326 0 5.80000000000067 6 +2 795 93 0 5.80000000000067 6 +2 796 92 0 5.80000000000067 6 +4 CN 93 0 92 0 +0 + +0101000 ++3646 90 -2930 0 * +Ed + 1e-07 1 1 0 +1 429 0 -1.5 1.5 +2 1074 218 0 -1.5 1.5 +2 1075 217 0 -1.5 1.5 +4 CN 218 0 217 0 +0 + +0101000 ++3581 0 -3580 0 * +Ed + 1e-07 1 1 0 +1 430 0 -1.5 1.5 +2 1076 218 0 -1.5 1.5 +2 1077 217 0 -1.5 1.5 +4 CN 218 0 217 0 +0 + +0101000 ++3582 0 -3579 0 * +Ed + 1e-07 1 1 0 +1 431 0 0 3.14159265358979 +2 1078 218 0 0 3.14159265358979 +4 C0 218 0 128 0 +2 1079 128 0 0 3.14159265358979 +0 + +0101000 ++3580 0 -3579 0 * +Ed + 1e-07 1 1 0 +1 432 0 3.14159265358979 6.28318530717959 +2 1080 217 0 3.14159265358979 6.28318530717959 +4 C0 217 0 128 0 +2 1081 128 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3579 0 -3580 0 * +Ed + 1.00001430151499e-07 1 1 0 +1 433 0 2.07079632679264 5.21238898038243 +2 1082 213 0 2.07079632679264 5.21238898038243 +4 C0 213 0 219 0 +2 1083 219 0 2.07079632679264 5.21238898038243 +2 1084 220 106 2.07079632679264 5.21238898038243 +0 + +0101000 ++3578 0 -3577 0 * +Ed + 1e-07 1 1 0 +1 426 0 -1.55 -0.0500000000003649 +2 1063 213 0 -1.55 -0.0500000000003649 +2 1064 214 0 -1.55 -0.0500000000003649 +4 CN 213 0 214 0 +0 + +0101000 ++3578 0 -3587 105 * +Ed + 1e-07 1 1 0 +1 423 0 -1.55 -0.0500000000011249 +2 1051 213 0 -1.55 -0.0500000000011249 +2 1052 214 0 -1.55 -0.0500000000011249 +4 CN 213 0 214 0 +0 + +0101000 ++3577 0 -3589 105 * +Ed + 1.00001412032745e-07 1 1 0 +1 434 0 5.21238898038243 8.35398163397222 +2 1085 214 0 5.21238898038243 8.35398163397222 +4 C0 214 0 219 0 +2 1086 219 0 5.21238898038243 8.35398163397222 +2 1087 220 106 5.21238898038243 8.35398163397222 +0 + +0101000 ++3577 0 -3578 0 * +Ed + 1.00001291234263e-07 1 1 0 +1 435 0 5.21238898038471 8.3539816339745 +2 1088 221 0 5.21238898038471 8.3539816339745 +4 G1 219 0 221 0 +2 1089 219 0 5.21238898038471 8.3539816339745 +2 1090 222 106 5.21238898038471 8.3539816339745 +2 1091 220 106 5.21238898038471 8.3539816339745 +0 + +0101000 ++3576 105 -3575 105 * +Ed + 1.00001330670319e-07 1 1 0 +1 436 0 2.07079632679492 5.21238898038471 +2 1092 223 0 2.07079632679492 5.21238898038471 +4 G1 219 0 223 0 +2 1093 219 0 2.07079632679492 5.21238898038471 +2 1094 224 106 2.07079632679492 5.21238898038471 +2 1095 220 106 2.07079632679492 5.21238898038471 +0 + +0101000 ++3575 105 -3576 105 * +Ed + 1e-07 1 1 0 +1 437 0 3.14159265358979 4.71238898038469 +2 1096 221 0 3.14159265358979 4.71238898038469 +2 1097 223 0 3.14159265358979 4.71238898038469 +4 CN 221 0 223 0 +0 + +0101000 ++3574 0 -3576 105 * +Ed + 1e-07 1 1 0 +1 438 0 5.21238898038473 8.35398163397453 +2 1098 221 0 5.21238898038473 8.35398163397453 +2 1099 225 0 5.21238898038473 8.35398163397453 +4 G1 221 0 225 0 +0 + +0101000 ++3574 0 -3573 0 * +Ed + 1e-07 1 1 0 +1 439 0 3.14159265358979 4.71238898038469 +2 1100 221 0 3.14159265358979 4.71238898038469 +2 1101 223 0 3.14159265358979 4.71238898038469 +4 CN 221 0 223 0 +0 + +0101000 ++3573 0 -3575 105 * +Ed + 1e-07 1 1 0 +1 440 0 2.07079632679494 5.21238898038473 +2 1102 223 0 2.07079632679494 5.21238898038473 +2 1103 226 0 2.07079632679494 5.21238898038473 +4 G1 223 0 226 0 +0 + +0101000 ++3573 0 -3574 0 * +Ed + 1e-07 1 1 0 +1 441 0 -0.95 1.25 +2 1104 226 0 -0.95 1.25 +2 1105 225 0 -0.95 1.25 +4 CN 226 0 225 0 +0 + +0101000 ++3573 0 -3572 0 * +Ed + 1e-07 1 1 0 +1 442 0 -0.95 1.25 +2 1106 226 0 -0.95 1.25 +2 1107 225 0 -0.95 1.25 +4 CN 226 0 225 0 +0 + +0101000 ++3574 0 -3571 0 * +Ed + 1e-07 1 1 0 +1 443 0 2.07079632679494 5.21238898038473 +2 1108 226 0 2.07079632679494 5.21238898038473 +2 1109 138 0 2.07079632679494 5.21238898038473 +4 G1 226 0 138 0 +0 + +0101000 ++3572 0 -3571 0 * +Ed + 1e-07 1 1 0 +1 444 0 5.21238898038473 8.35398163397453 +2 1110 225 0 5.21238898038473 8.35398163397453 +2 1111 139 0 5.21238898038473 8.35398163397453 +4 G1 225 0 139 0 +0 + +0101000 ++3571 0 -3572 0 * +Ed + 1e-07 1 1 0 +1 445 0 1.5707963267949 3.14159265358979 +2 1112 139 0 1.5707963267949 3.14159265358979 +2 1113 138 0 1.5707963267949 3.14159265358979 +4 G2 139 0 138 0 +0 + +0101000 ++3701 0 -3571 0 * +Ed + 1e-07 1 1 0 +1 446 0 1.5707963267949 3.14159265358979 +2 1114 139 0 1.5707963267949 3.14159265358979 +2 1115 138 0 1.5707963267949 3.14159265358979 +4 G2 139 0 138 0 +0 + +0101000 ++3702 0 -3572 0 * +Ed + 1e-07 1 1 0 +1 447 0 -6 6 +2 1116 75 0 -6 6 +2 1117 77 0 -6 6 +4 CN 75 0 77 0 +0 + +0101000 ++3570 0 -2952 0 * +Ed + 1e-07 1 1 0 +1 448 0 0 3.14159265358979 +2 1118 75 0 0 3.14159265358979 +4 C0 75 0 227 0 +2 1119 227 0 0 3.14159265358979 +0 + +0101000 ++3570 0 -3569 0 * +Ed + 1e-07 1 1 0 +1 449 0 -6 6 +2 1120 75 0 -6 6 +2 1121 77 0 -6 6 +4 CN 75 0 77 0 +0 + +0101000 ++3569 0 -2951 0 * +Ed + 1e-07 1 1 0 +1 450 0 3.14159265358979 6.28318530717959 +2 1122 77 0 3.14159265358979 6.28318530717959 +4 C0 77 0 227 0 +2 1123 227 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3569 0 -3570 0 * +Ed + 1.00000952869335e-07 1 1 0 +1 451 0 3.14159265358979 5.21238898038482 +2 1124 228 0 3.14159265358979 5.21238898038482 +4 C0 227 0 228 0 +2 1125 227 0 3.14159265358979 5.21238898038482 +2 1126 229 107 3.14159265358979 5.21238898038482 +0 + +0101000 ++3568 0 -3567 98 * +Ed + 1.00000312638804e-07 1 1 0 +1 451 0 5.21238898038482 6.28318530717959 +2 1124 228 0 5.21238898038482 6.28318530717959 +4 C0 227 0 228 0 +2 1125 227 0 5.21238898038482 6.28318530717959 +2 1127 230 107 5.21238898038482 6.28318530717959 +0 + +0101000 ++3567 98 -3566 0 * +Ed + 1.00000987117516e-07 1 1 0 +1 452 0 0 2.07079632679502 +2 1128 231 0 0 2.07079632679502 +4 C0 227 0 231 0 +2 1129 227 0 0 2.07079632679502 +2 1130 230 107 0 2.07079632679502 +0 + +0101000 ++3566 0 -3565 98 * +Ed + 1.00001297475161e-07 1 1 0 +1 452 0 2.07079632679502 3.14159265358979 +2 1128 231 0 2.07079632679502 3.14159265358979 +4 C0 227 0 231 0 +2 1129 227 0 2.07079632679502 3.14159265358979 +2 1131 229 107 2.07079632679502 3.14159265358979 +0 + +0101000 ++3565 98 -3568 0 * +Ed + 1.00001323670747e-07 1 1 0 +1 453 0 -1.41000000001 0.18999999999 +2 1132 228 0 -1.41000000001 0.18999999999 +2 1133 231 0 -1.41000000001 0.18999999999 +4 CN 228 0 231 0 +2 1134 229 108 -1.41000000001 0.18999999999 +2 1135 229 107 -1.41000000001 0.18999999999 +0 + +0101000 ++3568 0 -3564 0 * +Ed + 1.00001311408595e-07 1 1 0 +1 454 0 3.14159265358979 5.2123889803848 +2 1136 228 0 3.14159265358979 5.2123889803848 +4 C0 228 0 232 0 +2 1137 232 0 3.14159265358979 5.2123889803848 +2 1138 229 107 3.14159265358979 5.2123889803848 +2 1139 147 107 3.14159265358979 5.2123889803848 +0 + +0101000 ++3564 0 -3563 107 * +Ed + 1.00012492238535e-07 1 1 0 +1 455 0 -0.050000000001459 1.55 +2 1140 229 0 -0.050000000001459 1.55 +2 1141 230 0 -0.050000000001459 1.55 +4 CN 229 0 230 0 +2 1142 228 109 -0.050000000001459 1.55 +0 + +0101000 ++3567 110 -3563 0 * +Ed + 1.00001355033128e-07 1 1 0 +1 454 0 5.2123889803848 6.28318530717959 +2 1136 228 0 5.2123889803848 6.28318530717959 +4 C0 228 0 232 0 +2 1137 232 0 5.2123889803848 6.28318530717959 +2 1143 230 107 5.2123889803848 6.28318530717959 +2 1144 147 107 5.2123889803848 6.28318530717959 +0 + +0101000 ++3563 107 -3562 0 * +Ed + 1.00001330670319e-07 1 1 0 +1 456 0 -1.41000000001 0.18999999999 +2 1145 228 0 -1.41000000001 0.18999999999 +2 1146 231 0 -1.41000000001 0.18999999999 +4 CN 228 0 231 0 +2 1147 230 108 -1.41000000001 0.18999999999 +2 1148 230 107 -1.41000000001 0.18999999999 +0 + +0101000 ++3566 0 -3562 0 * +Ed + 1.00001292562975e-07 1 1 0 +1 457 0 0 2.07079632679496 +2 1149 231 0 0 2.07079632679496 +4 C0 231 0 232 0 +2 1150 232 0 0 2.07079632679496 +2 1151 230 107 0 2.07079632679496 +2 1152 147 107 0 2.07079632679496 +0 + +0101000 ++3562 0 -3561 107 * +Ed + 1.00013415076959e-07 1 1 0 +1 458 0 -0.0500000000001795 1.55 +2 1153 229 0 -0.0500000000001795 1.55 +2 1154 230 0 -0.0500000000001795 1.55 +4 CN 229 0 230 0 +2 1155 231 109 -0.0500000000001795 1.55 +0 + +0101000 ++3565 110 -3561 0 * +Ed + 1.00001330670319e-07 1 1 0 +1 457 0 2.07079632679496 3.14159265358979 +2 1149 231 0 2.07079632679496 3.14159265358979 +4 C0 231 0 232 0 +2 1150 232 0 2.07079632679496 3.14159265358979 +2 1156 229 107 2.07079632679496 3.14159265358979 +2 1157 147 107 2.07079632679496 3.14159265358979 +0 + +0101000 ++3561 107 -3564 0 * +Ed + 1.00001423995717e-07 1 1 0 +1 459 0 0 3.14159265358979 +2 1158 233 0 0 3.14159265358979 +4 C0 232 0 233 0 +2 1159 232 0 0 3.14159265358979 +2 1160 147 107 0 3.14159265358979 +2 1161 147 108 0 3.14159265358979 +0 + +0101000 ++3560 0 -3559 0 * +Ed + 1.00001412032745e-07 1 1 0 +1 460 0 3.14159265358979 6.28318530717959 +2 1162 234 0 3.14159265358979 6.28318530717959 +4 C0 232 0 234 0 +2 1163 232 0 3.14159265358979 6.28318530717959 +2 1164 147 107 3.14159265358979 6.28318530717959 +2 1165 147 108 3.14159265358979 6.28318530717959 +0 + +0101000 ++3559 0 -3560 0 * +Ed + 1e-07 1 1 0 +1 412 0 -1.4 -1.20000000000061 +2 1010 81 0 -1.4 -1.20000000000061 +2 1011 80 0 -1.4 -1.20000000000061 +4 CN 81 0 80 0 +0 + +0101000 ++3684 0 -3603 98 * +Ed + 1e-07 1 1 0 +1 408 0 -1.4 -1.20000000000053 +2 995 81 0 -1.4 -1.20000000000053 +2 996 80 0 -1.4 -1.20000000000053 +4 CN 81 0 80 0 +0 + +0101000 ++3683 0 -3601 98 * +Ed + 1e-07 1 1 0 +1 412 0 5.79999999999945 6 +2 1010 81 0 5.79999999999945 6 +2 1011 80 0 5.79999999999945 6 +4 CN 81 0 80 0 +0 + +0101000 ++3597 98 -2947 0 * +Ed + 1e-07 1 1 0 +1 408 0 5.79999999999949 6 +2 995 81 0 5.79999999999949 6 +2 996 80 0 5.79999999999949 6 +4 CN 81 0 80 0 +0 + +0101000 ++3600 98 -2948 0 * +Ed + 1e-07 1 1 0 +1 461 0 3.14159265358979 6.28318530717959 +2 1166 234 0 3.14159265358979 6.28318530717959 +4 C0 234 0 153 0 +2 1167 153 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3558 0 -3557 0 * +Ed + 1e-07 1 1 0 +1 462 0 -1.5 1.5 +2 1168 234 0 -1.5 1.5 +2 1169 233 0 -1.5 1.5 +4 CN 234 0 233 0 +0 + +0101000 ++3557 0 -3559 0 * +Ed + 1e-07 1 1 0 +1 463 0 -1.5 1.5 +2 1170 234 0 -1.5 1.5 +2 1171 233 0 -1.5 1.5 +4 CN 234 0 233 0 +0 + +0101000 ++3558 0 -3560 0 * +Ed + 1e-07 1 1 0 +1 464 0 0 3.14159265358979 +2 1172 233 0 0 3.14159265358979 +4 C0 233 0 153 0 +2 1173 153 0 0 3.14159265358979 +0 + +0101000 ++3557 0 -3558 0 * +Ed + 1.00001036613425e-07 1 1 0 +1 451 0 3.14159265358979 5.21238898038481 +2 1124 228 0 3.14159265358979 5.21238898038481 +4 C0 227 0 228 0 +2 1125 227 0 3.14159265358979 5.21238898038481 +2 1174 229 108 3.14159265358979 5.21238898038481 +0 + +0101000 ++3568 0 -3556 102 * +Ed + 1.00001297475161e-07 1 1 0 +1 451 0 5.21238898038481 6.28318530717959 +2 1124 228 0 5.21238898038481 6.28318530717959 +4 C0 227 0 228 0 +2 1125 227 0 5.21238898038481 6.28318530717959 +2 1175 230 108 5.21238898038481 6.28318530717959 +0 + +0101000 ++3556 102 -3566 0 * +Ed + 1.00001050546506e-07 1 1 0 +1 452 0 0 2.07079632679501 +2 1128 231 0 0 2.07079632679501 +4 C0 227 0 231 0 +2 1129 227 0 0 2.07079632679501 +2 1176 230 108 0 2.07079632679501 +0 + +0101000 ++3566 0 -3555 102 * +Ed + 1.00000971340767e-07 1 1 0 +1 452 0 2.07079632679501 3.14159265358979 +2 1128 231 0 2.07079632679501 3.14159265358979 +4 C0 227 0 231 0 +2 1129 227 0 2.07079632679501 3.14159265358979 +2 1177 229 108 2.07079632679501 3.14159265358979 +0 + +0101000 ++3555 102 -3568 0 * +Ed + 1.00002072252543e-07 1 1 0 +1 454 0 3.14159265358979 5.21238898038476 +2 1136 228 0 3.14159265358979 5.21238898038476 +4 C0 228 0 232 0 +2 1137 232 0 3.14159265358979 5.21238898038476 +2 1178 229 108 3.14159265358979 5.21238898038476 +2 1179 147 108 3.14159265358979 5.21238898038476 +0 + +0101000 ++3564 0 -3563 108 * +Ed + 1.00013635816802e-07 1 1 0 +1 455 0 -0.0499999999996953 1.55 +2 1140 229 0 -0.0499999999996953 1.55 +2 1141 230 0 -0.0499999999996953 1.55 +4 CN 229 0 230 0 +2 1180 228 111 -0.0499999999996953 1.55 +0 + +0101000 ++3556 112 -3563 0 * +Ed + 1.0000140054444e-07 1 1 0 +1 454 0 5.21238898038476 6.28318530717959 +2 1136 228 0 5.21238898038476 6.28318530717959 +4 C0 228 0 232 0 +2 1137 232 0 5.21238898038476 6.28318530717959 +2 1181 230 108 5.21238898038476 6.28318530717959 +2 1182 147 108 5.21238898038476 6.28318530717959 +0 + +0101000 ++3563 108 -3562 0 * +Ed + 1.00001379038797e-07 1 1 0 +1 457 0 0 2.07079632679499 +2 1149 231 0 0 2.07079632679499 +4 C0 231 0 232 0 +2 1150 232 0 0 2.07079632679499 +2 1183 230 108 0 2.07079632679499 +2 1184 147 108 0 2.07079632679499 +0 + +0101000 ++3562 0 -3561 108 * +Ed + 1.000125741253e-07 1 1 0 +1 458 0 -0.0500000000000078 1.55 +2 1153 229 0 -0.0500000000000078 1.55 +2 1154 230 0 -0.0500000000000078 1.55 +4 CN 229 0 230 0 +2 1185 231 111 -0.0500000000000078 1.55 +0 + +0101000 ++3555 112 -3561 0 * +Ed + 1.00002062092466e-07 1 1 0 +1 457 0 2.07079632679499 3.14159265358979 +2 1149 231 0 2.07079632679499 3.14159265358979 +4 C0 231 0 232 0 +2 1150 232 0 2.07079632679499 3.14159265358979 +2 1186 229 108 2.07079632679499 3.14159265358979 +2 1187 147 108 2.07079632679499 3.14159265358979 +0 + +0101000 ++3561 108 -3564 0 * +Ed + 1e-07 1 1 0 +1 412 0 -1.4 -1.20000000000011 +2 1010 81 0 -1.4 -1.20000000000011 +2 1011 80 0 -1.4 -1.20000000000011 +4 CN 81 0 80 0 +0 + +0101000 ++3684 0 -3596 102 * +Ed + 1e-07 1 1 0 +1 408 0 -1.4 -1.19999999999996 +2 995 81 0 -1.4 -1.19999999999996 +2 996 80 0 -1.4 -1.19999999999996 +4 CN 81 0 80 0 +0 + +0101000 ++3683 0 -3595 102 * +Ed + 1e-07 1 1 0 +1 412 0 5.79999999999997 6 +2 1010 81 0 5.79999999999997 6 +2 1011 80 0 5.79999999999997 6 +4 CN 81 0 80 0 +0 + +0101000 ++3593 102 -2947 0 * +Ed + 1e-07 1 1 0 +1 408 0 5.79999999999982 6 +2 995 81 0 5.79999999999982 6 +2 996 80 0 5.79999999999982 6 +4 CN 81 0 80 0 +0 + +0101000 ++3594 102 -2948 0 * +Ed + 1.00001430151499e-07 1 1 0 +1 465 0 2.07079632679499 5.21238898038479 +2 1188 229 0 2.07079632679499 5.21238898038479 +4 C0 229 0 235 0 +2 1189 235 0 2.07079632679499 5.21238898038479 +2 1190 236 113 2.07079632679499 5.21238898038479 +2 1191 236 114 2.07079632679499 5.21238898038479 +0 + +0101000 ++3554 0 -3553 0 * +Ed + 1e-07 1 1 0 +1 458 0 -1.55 -0.0500000000001795 +2 1153 229 0 -1.55 -0.0500000000001795 +2 1154 230 0 -1.55 -0.0500000000001795 +4 CN 229 0 230 0 +0 + +0101000 ++3554 0 -3565 110 * +Ed + 1e-07 1 1 0 +1 455 0 -1.55 -0.050000000001459 +2 1140 229 0 -1.55 -0.050000000001459 +2 1141 230 0 -1.55 -0.050000000001459 +4 CN 229 0 230 0 +0 + +0101000 ++3553 0 -3567 110 * +Ed + 1.00001455901892e-07 1 1 0 +1 466 0 5.21238898038479 8.35398163397458 +2 1192 230 0 5.21238898038479 8.35398163397458 +4 C0 230 0 235 0 +2 1193 235 0 5.21238898038479 8.35398163397458 +2 1194 236 113 5.21238898038479 8.35398163397458 +2 1195 236 114 5.21238898038479 8.35398163397458 +0 + +0101000 ++3553 0 -3554 0 * +Ed + 1.0000137397728e-07 1 1 0 +1 467 0 3.14159265358979 6.28318530717959 +2 1196 237 0 3.14159265358979 6.28318530717959 +4 G1 236 0 237 0 +2 1197 236 0 3.14159265358979 6.28318530717959 +2 1198 235 115 3.14159265358979 6.28318530717959 +0 + +0101000 ++3552 0 -3551 0 * +Ed + 1.00000312638804e-07 1 1 0 +1 468 0 0 3.14159265358979 +2 1199 238 0 0 3.14159265358979 +4 G1 236 0 238 0 +2 1200 236 0 0 3.14159265358979 +2 1201 235 115 0 3.14159265358979 +0 + +0101000 ++3551 0 -3552 0 * +Ed + 1e-07 1 1 0 +1 469 0 5.2123889803847 8.3539816339745 +2 1202 239 0 5.2123889803847 8.3539816339745 +4 G1 235 0 239 0 +2 1203 235 0 5.2123889803847 8.3539816339745 +0 + +0101000 ++3550 0 -3549 0 * +Ed + 1e-07 1 1 0 +1 470 0 2.07079632679491 5.2123889803847 +2 1204 240 0 2.07079632679491 5.2123889803847 +4 G1 235 0 240 0 +2 1205 235 0 2.07079632679491 5.2123889803847 +0 + +0101000 ++3549 0 -3550 0 * +Ed + 1e-07 1 1 0 +1 471 0 3.14159265358979 4.71238898038469 +2 1206 239 0 3.14159265358979 4.71238898038469 +2 1207 240 0 3.14159265358979 4.71238898038469 +4 CN 239 0 240 0 +0 + +0101000 ++3548 0 -3550 0 * +Ed + 1e-07 1 1 0 +1 472 0 5.21238898038473 8.35398163397453 +2 1208 239 0 5.21238898038473 8.35398163397453 +2 1209 241 0 5.21238898038473 8.35398163397453 +4 G1 239 0 241 0 +0 + +0101000 ++3548 0 -3547 0 * +Ed + 1e-07 1 1 0 +1 473 0 3.14159265358979 4.71238898038469 +2 1210 239 0 3.14159265358979 4.71238898038469 +2 1211 240 0 3.14159265358979 4.71238898038469 +4 CN 239 0 240 0 +0 + +0101000 ++3547 0 -3549 0 * +Ed + 1e-07 1 1 0 +1 474 0 2.07079632679494 5.21238898038473 +2 1212 240 0 2.07079632679494 5.21238898038473 +2 1213 242 0 2.07079632679494 5.21238898038473 +4 G1 240 0 242 0 +0 + +0101000 ++3547 0 -3548 0 * +Ed + 1e-07 1 1 0 +1 475 0 -0.95 1.25 +2 1214 242 0 -0.95 1.25 +2 1215 241 0 -0.95 1.25 +4 CN 242 0 241 0 +0 + +0101000 ++3547 0 -3546 0 * +Ed + 1e-07 1 1 0 +1 476 0 -0.95 1.25 +2 1216 242 0 -0.95 1.25 +2 1217 241 0 -0.95 1.25 +4 CN 242 0 241 0 +0 + +0101000 ++3548 0 -3545 0 * +Ed + 1e-07 1 1 0 +1 477 0 2.07079632679494 5.21238898038473 +2 1218 242 0 2.07079632679494 5.21238898038473 +2 1219 163 0 2.07079632679494 5.21238898038473 +4 G1 242 0 163 0 +0 + +0101000 ++3546 0 -3545 0 * +Ed + 1e-07 1 1 0 +1 478 0 5.21238898038473 8.35398163397453 +2 1220 241 0 5.21238898038473 8.35398163397453 +2 1221 164 0 5.21238898038473 8.35398163397453 +4 G1 241 0 164 0 +0 + +0101000 ++3545 0 -3546 0 * +Ed + 1e-07 1 1 0 +1 479 0 1.5707963267949 3.14159265358979 +2 1222 164 0 1.5707963267949 3.14159265358979 +2 1223 163 0 1.5707963267949 3.14159265358979 +4 G2 164 0 163 0 +0 + +0101000 ++3673 0 -3545 0 * +Ed + 1e-07 1 1 0 +1 480 0 1.5707963267949 3.14159265358979 +2 1224 164 0 1.5707963267949 3.14159265358979 +2 1225 163 0 1.5707963267949 3.14159265358979 +4 G2 164 0 163 0 +0 + +0101000 ++3674 0 -3546 0 * +Ed + 1e-07 1 1 0 +1 458 0 -1.55 -0.0500000000000078 +2 1153 229 0 -1.55 -0.0500000000000078 +2 1154 230 0 -1.55 -0.0500000000000078 +4 CN 229 0 230 0 +0 + +0101000 ++3554 0 -3555 112 * +Ed + 1e-07 1 1 0 +1 455 0 -1.55 -0.0499999999996953 +2 1140 229 0 -1.55 -0.0499999999996953 +2 1141 230 0 -1.55 -0.0499999999996953 +4 CN 229 0 230 0 +0 + +0101000 ++3553 0 -3556 112 * +Ed + 1.00000966442607e-07 1 1 0 +1 481 0 0 3.14159265358979 +2 1226 243 0 0 3.14159265358979 +4 G1 243 0 236 0 +2 1227 236 0 0 3.14159265358979 +2 1228 235 116 0 3.14159265358979 +0 + +0101000 ++3544 0 -3543 0 * +Ed + 1.00000170530257e-07 1 1 0 +1 482 0 3.14159265358979 6.28318530717959 +2 1229 244 0 3.14159265358979 6.28318530717959 +4 G1 244 0 236 0 +2 1230 236 0 3.14159265358979 6.28318530717959 +2 1231 235 116 3.14159265358979 6.28318530717959 +0 + +0101000 ++3543 0 -3544 0 * +Ed + 1e-07 1 1 0 +1 483 0 3.64159265359001 6.7831853071798 +2 1232 245 0 3.64159265359001 6.7831853071798 +4 C0 246 0 245 0 +2 1233 246 0 3.64159265359001 6.7831853071798 +0 + +0101000 ++3542 0 -3541 0 * +Ed + 1e-07 1 1 0 +1 484 0 0.500000000000212 3.64159265359001 +2 1234 247 0 0.500000000000212 3.64159265359001 +4 C0 246 0 247 0 +2 1235 246 0 0.500000000000212 3.64159265359001 +0 + +0101000 ++3541 0 -3542 0 * +Ed + 1e-07 1 1 0 +1 485 0 5.21238898038492 8.35398163397253 +2 1236 248 0 5.21238898038492 8.35398163397253 +4 C0 246 0 248 0 +2 1237 246 0 5.21238898038492 8.35398163397253 +0 + +0101000 ++3540 0 -3539 0 * +Ed + 1e-07 1 1 0 +1 486 0 2.07079632679295 5.21238898038492 +2 1238 249 0 2.07079632679295 5.21238898038492 +4 C0 246 0 249 0 +2 1239 246 0 2.07079632679295 5.21238898038492 +0 + +0101000 ++3539 0 -3540 0 * +Ed + 9.66590793534902e-05 1 1 0 +1 487 0 24.7561936605 49.5123873211 +2 1240 250 0 24.7561936605 49.5123873211 +4 C0 251 0 250 0 +2 1241 251 0 24.7561936605 49.5123873211 +0 + +0101000 ++3538 0 -3537 0 * +Ed + 1e-07 1 1 0 +1 488 0 24.6774806607 24.7561936604995 +2 1242 252 0 24.6774806607 24.7561936604995 +4 C0 251 0 252 0 +2 1243 251 0 24.6774806607 24.7561936604995 +0 + +0101000 ++3536 0 -3538 0 * +Ed + 1e-07 1 1 0 +1 489 0 0 24.6774806607 +2 1244 252 0 0 24.6774806607 +4 C0 251 0 252 0 +2 1245 251 0 0 24.6774806607 +0 + +0101000 ++3535 0 -3536 0 * +Ed + 1e-07 1 1 0 +1 490 0 0.000248410300005524 109 +4 C0 251 0 253 0 +2 1246 251 0 0.000248410300005524 109 +2 1247 253 0 0.000248410300005524 109 +0 + +0101000 ++3534 0 -3535 0 * +Ed + 0.000102894900285201 1 1 0 +1 491 0 0 52.7067348902 +2 1248 254 0 0 52.7067348902 +4 C0 251 0 254 0 +2 1249 251 0 0 52.7067348902 +0 + +0101000 ++3533 0 -3534 0 * +Ed + 1e-07 1 1 0 +1 492 0 -5.00074082596 5.00074082596 +4 C0 251 0 255 0 +2 1250 251 0 -5.00074082596 5.00074082596 +2 1251 255 0 -5.00074082596 5.00074082596 +0 + +0101000 ++3532 0 -3533 0 * +Ed + 9.45558587697886e-05 1 1 0 +1 493 0 0 28.8341676536 +2 1252 256 0 0 28.8341676536 +4 C0 251 0 256 0 +2 1253 251 0 0 28.8341676536 +0 + +0101000 ++3531 0 -3532 0 * +Ed + 1e-07 1 1 0 +1 494 0 0 29.0201402464 +4 C0 251 0 257 0 +2 1254 251 0 0 29.0201402464 +0 + +0101000 ++3530 0 -3531 0 * +Ed + 0.000236848210102444 1 1 0 +1 495 0 17.9076813233117 43.7108017886 +2 1255 258 0 17.9076813233117 43.7108017886 +4 C0 251 0 258 0 +2 1256 251 0 17.9076813233117 43.7108017886 +0 + +0101000 ++3529 0 -3530 0 * +Ed + 1e-07 1 1 0 +1 496 0 0 17.9076813233 +2 1257 259 0 0 17.9076813233 +4 C0 251 0 259 0 +2 1258 251 0 0 17.9076813233 +0 + +0101000 ++3528 0 -3529 0 * +Ed + 1e-07 1 1 0 +1 497 0 0 34.8 +4 C0 251 0 260 0 +2 1259 251 0 0 34.8 +2 1260 260 0 0 34.8 +0 + +0101000 ++3527 0 -3528 0 * +Ed + 1e-07 1 1 0 +1 498 0 0 91.0389057194 +2 1261 261 0 0 91.0389057194 +4 C0 251 0 261 0 +2 1262 251 0 0 91.0389057194 +0 + +0101000 ++3526 0 -3527 0 * +Ed + 1e-07 1 1 0 +1 499 0 -1 1 +4 C0 251 0 262 0 +2 1263 251 0 -1 1 +0 + +0101000 ++3537 0 -3526 0 * +Ed + 1e-07 1 1 0 +1 500 0 -1 1 +4 C0 251 0 263 0 +2 1264 251 0 -1 1 +2 1265 263 0 -1 1 +0 + +0101000 ++3525 0 -3524 0 * +Ed + 1e-07 1 1 0 +1 501 0 1.5707963267949 3.14159265358979 +2 1266 264 0 1.5707963267949 3.14159265358979 +4 C0 251 0 264 0 +2 1267 251 0 1.5707963267949 3.14159265358979 +0 + +0101000 ++3523 0 -3525 0 * +Ed + 1e-07 1 1 0 +1 502 0 -17.4 17.4 +4 C0 251 0 265 0 +2 1268 251 0 -17.4 17.4 +2 1269 265 0 -17.4 17.4 +0 + +0101000 ++3523 0 -3522 0 * +Ed + 1e-07 1 1 0 +1 503 0 1.08210413623606 1.5707963267949 +2 1270 266 0 1.08210413623606 1.5707963267949 +4 C0 251 0 266 0 +2 1271 251 0 1.08210413623606 1.5707963267949 +0 + +0101000 ++3521 0 -3522 0 * +Ed + 1e-07 1 1 0 +1 504 0 -14.5100701232189 14.510070123172 +4 C0 251 0 267 0 +2 1272 251 0 -14.5100701232189 14.510070123172 +2 1273 267 0 -14.5100701232189 14.510070123172 +0 + +0101000 ++3521 0 -3520 0 * +Ed + 1e-07 1 1 0 +1 505 0 6.28318257972667 7.36529079162158 +2 1274 268 0 6.28318257972667 7.36529079162158 +4 C0 251 0 268 0 +2 1275 251 0 6.28318257972667 7.36529079162158 +0 + +0101000 ++3519 0 -3520 0 * +Ed + 1e-07 1 1 0 +1 506 0 -5.00074355342 5.00074355341 +4 C0 251 0 269 0 +2 1276 251 0 -5.00074355342 5.00074355341 +2 1277 269 0 -5.00074355342 5.00074355341 +0 + +0101000 ++3519 0 -3518 0 * +Ed + 1e-07 1 1 0 +1 507 0 4.71238898038469 6.28318530717959 +2 1278 270 0 4.71238898038469 6.28318530717959 +4 C0 251 0 270 0 +2 1279 251 0 4.71238898038469 6.28318530717959 +0 + +0101000 ++3517 0 -3518 0 * +Ed + 1e-07 1 1 0 +1 508 0 -54.5 54.5 +4 C0 251 0 271 0 +2 1280 251 0 -54.5 54.5 +2 1281 271 0 -54.5 54.5 +0 + +0101000 ++3516 0 -3517 0 * +Ed + 1e-07 1 1 0 +1 509 0 3.14159265358979 4.71238898038469 +2 1282 272 0 3.14159265358979 4.71238898038469 +4 C0 251 0 272 0 +2 1283 251 0 3.14159265358979 4.71238898038469 +0 + +0101000 ++3524 0 -3516 0 * +Ed + 1e-07 1 1 0 +1 510 0 5.21238898038437 8.35398163397416 +2 1284 273 0 5.21238898038437 8.35398163397416 +4 C0 220 0 273 0 +2 1285 220 0 5.21238898038437 8.35398163397416 +0 + +0101000 ++3515 0 -3514 0 * +Ed + 1e-07 1 1 0 +1 511 0 2.07079632679458 5.21238898038437 +2 1286 274 0 2.07079632679458 5.21238898038437 +4 C0 220 0 274 0 +2 1287 220 0 2.07079632679458 5.21238898038437 +0 + +0101000 ++3514 0 -3515 0 * +Ed + 1e-07 1 1 0 +1 512 0 0.25 12.15 +2 1288 249 0 0.25 12.15 +2 1289 248 0 0.25 12.15 +4 CN 249 0 248 0 +0 + +0101000 ++3539 0 -3513 0 * +Ed + 1e-07 1 1 0 +1 513 0 0.25 12.15 +2 1290 249 0 0.25 12.15 +2 1291 248 0 0.25 12.15 +4 CN 249 0 248 0 +0 + +0101000 ++3540 0 -3512 0 * +Ed + 1e-07 1 1 0 +1 514 0 2.07079632679295 5.21238898038492 +2 1292 249 0 2.07079632679295 5.21238898038492 +2 1293 224 0 2.07079632679295 5.21238898038492 +4 G1 249 0 224 0 +0 + +0101000 ++3513 0 -3512 0 * +Ed + 1e-07 1 1 0 +1 515 0 5.21238898038492 8.35398163397253 +2 1294 248 0 5.21238898038492 8.35398163397253 +2 1295 222 0 5.21238898038492 8.35398163397253 +4 G1 248 0 222 0 +0 + +0101000 ++3512 0 -3513 0 * +Ed + 1e-07 1 1 0 +1 516 0 1.5707963267949 3.14159265358979 +2 1296 224 0 1.5707963267949 3.14159265358979 +2 1297 222 0 1.5707963267949 3.14159265358979 +4 G2 224 0 222 0 +0 + +0101000 ++3575 117 -3513 0 * +Ed + 1e-07 1 1 0 +1 517 0 1.5707963267949 3.14159265358979 +2 1298 224 0 1.5707963267949 3.14159265358979 +2 1299 222 0 1.5707963267949 3.14159265358979 +4 G2 224 0 222 0 +0 + +0101000 ++3576 117 -3512 0 * +Ed + 1e-07 1 1 0 +1 518 0 3.14159265358979 4.71238898038469 +2 1300 243 0 3.14159265358979 4.71238898038469 +2 1301 244 0 3.14159265358979 4.71238898038469 +4 CN 243 0 244 0 +0 + +0101000 ++3544 0 -3511 0 * +Ed + 1e-07 1 1 0 +1 519 0 4.71238898038469 6.28318530717959 +2 1302 243 0 4.71238898038469 6.28318530717959 +2 1303 244 0 4.71238898038469 6.28318530717959 +4 CN 243 0 244 0 +0 + +0101000 ++3543 0 -3510 0 * +Ed + 1e-07 1 1 0 +1 520 0 0 3.14159265358979 +2 1304 243 0 0 3.14159265358979 +2 1305 275 0 0 3.14159265358979 +4 G1 243 0 275 0 +0 + +0101000 ++3511 0 -3510 0 * +Ed + 1e-07 1 1 0 +1 521 0 3.14159265358979 6.28318530717959 +2 1306 244 0 3.14159265358979 6.28318530717959 +2 1307 276 0 3.14159265358979 6.28318530717959 +4 G1 244 0 276 0 +0 + +0101000 ++3510 0 -3511 0 * +Ed + 1e-07 1 1 0 +1 522 0 3.14159265358979 6.28318530717959 +2 1308 277 0 3.14159265358979 6.28318530717959 +4 C0 236 0 277 0 +2 1309 236 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3509 0 -3508 0 * +Ed + 1e-07 1 1 0 +1 523 0 -21 21 +4 C0 236 0 278 0 +2 1310 236 0 -21 21 +2 1311 278 0 -21 21 +0 + +0101000 ++3507 0 -3509 0 * +Ed + 1e-07 1 1 0 +1 524 0 -21 21 +4 C0 236 0 279 0 +2 1312 236 0 -21 21 +2 1313 279 0 -21 21 +0 + +0101000 ++3508 0 -3506 0 * +Ed + 1e-07 1 1 0 +1 525 0 0 3.14159265358979 +2 1314 280 0 0 3.14159265358979 +4 C0 236 0 280 0 +2 1315 236 0 0 3.14159265358979 +0 + +0101000 ++3506 0 -3507 0 * +Ed + 1e-07 1 1 0 +1 526 0 3.14159265358979 4.71238898038469 +2 1316 238 0 3.14159265358979 4.71238898038469 +2 1317 237 0 3.14159265358979 4.71238898038469 +4 CN 238 0 237 0 +0 + +0101000 ++3551 0 -3505 0 * +Ed + 1e-07 1 1 0 +1 527 0 4.71238898038469 6.28318530717959 +2 1318 238 0 4.71238898038469 6.28318530717959 +2 1319 237 0 4.71238898038469 6.28318530717959 +4 CN 238 0 237 0 +0 + +0101000 ++3552 0 -3504 0 * +Ed + 1e-07 1 1 0 +1 528 0 0 3.14159265358979 +2 1320 238 0 0 3.14159265358979 +2 1321 281 0 0 3.14159265358979 +4 G1 238 0 281 0 +0 + +0101000 ++3505 0 -3504 0 * +Ed + 1e-07 1 1 0 +1 529 0 3.14159265358979 6.28318530717959 +2 1322 237 0 3.14159265358979 6.28318530717959 +2 1323 282 0 3.14159265358979 6.28318530717959 +4 G1 237 0 282 0 +0 + +0101000 ++3504 0 -3505 0 * +Ed + 1e-07 1 1 0 +1 530 0 4.71238898038469 6.28318530717959 +2 1324 283 0 4.71238898038469 6.28318530717959 +2 1325 284 0 4.71238898038469 6.28318530717959 +4 CN 283 0 284 0 +0 + +0101000 ++3503 0 -3502 0 * +Ed + 1e-07 1 1 0 +1 531 0 2.07079632679424 5.21238898038404 +2 1326 283 0 2.07079632679424 5.21238898038404 +2 1327 285 0 2.07079632679424 5.21238898038404 +4 G1 283 0 285 0 +0 + +0101000 ++3501 0 -3502 0 * +Ed + 1e-07 1 1 0 +1 532 0 4.71238898038469 6.28318530717959 +2 1328 283 0 4.71238898038469 6.28318530717959 +2 1329 284 0 4.71238898038469 6.28318530717959 +4 CN 283 0 284 0 +0 + +0101000 ++3500 0 -3501 0 * +Ed + 1e-07 1 1 0 +1 533 0 2.07079632679543 5.21238898038522 +2 1330 283 0 2.07079632679543 5.21238898038522 +2 1331 286 0 2.07079632679543 5.21238898038522 +4 CN 283 0 286 0 +0 + +0101000 ++3500 0 -3503 0 * +Ed + 1e-07 1 1 0 +1 534 0 5.21238898038404 8.35398163397383 +2 1332 284 0 5.21238898038404 8.35398163397383 +2 1333 287 0 5.21238898038404 8.35398163397383 +4 G1 284 0 287 0 +0 + +0101000 ++3502 0 -3501 0 * +Ed + 1e-07 1 1 0 +1 535 0 5.21238898038522 8.35398163397501 +2 1334 284 0 5.21238898038522 8.35398163397501 +2 1335 288 0 5.21238898038522 8.35398163397501 +4 CN 284 0 288 0 +0 + +0101000 ++3503 0 -3500 0 * +Ed + 1e-07 1 1 0 +1 536 0 0.150000000000002 0.350000000000001 +2 1336 274 0 0.150000000000002 0.350000000000001 +2 1337 273 0 0.150000000000002 0.350000000000001 +4 CN 274 0 273 0 +0 + +0101000 ++3499 0 -3515 0 * +Ed + 1e-07 1 1 0 +1 537 0 0.150000000000002 0.350000000000001 +2 1338 274 0 0.150000000000002 0.350000000000001 +2 1339 273 0 0.150000000000002 0.350000000000001 +4 CN 274 0 273 0 +0 + +0101000 ++3498 0 -3514 0 * +Ed + 1e-07 1 1 0 +1 538 0 2.07079632679458 5.21238898038437 +2 1340 274 0 2.07079632679458 5.21238898038437 +2 1341 286 0 2.07079632679458 5.21238898038437 +4 G1 274 0 286 0 +0 + +0101000 ++3498 0 -3499 0 * +Ed + 1e-07 1 1 0 +1 539 0 5.21238898038437 8.35398163397416 +2 1342 273 0 5.21238898038437 8.35398163397416 +2 1343 288 0 5.21238898038437 8.35398163397416 +4 G1 273 0 288 0 +0 + +0101000 ++3499 0 -3498 0 * +Ed + 1e-07 1 1 0 +1 540 0 3.14159265358979 4.71238898038469 +2 1344 288 0 3.14159265358979 4.71238898038469 +2 1345 286 0 3.14159265358979 4.71238898038469 +4 CN 288 0 286 0 +0 + +0101000 ++3498 0 -3500 0 * +Ed + 1e-07 1 1 0 +1 541 0 3.14159265358979 4.71238898038469 +2 1346 288 0 3.14159265358979 4.71238898038469 +2 1347 286 0 3.14159265358979 4.71238898038469 +4 CN 288 0 286 0 +0 + +0101000 ++3499 0 -3503 0 * +Ed + 1e-07 1 1 0 +1 542 0 1.5707963267949 3.14159265358979 +2 1348 289 0 1.5707963267949 3.14159265358979 +2 1349 290 0 1.5707963267949 3.14159265358979 +4 G1 289 0 290 0 +0 + +0101000 ++3497 0 -3496 0 * +Ed + 1e-07 1 1 0 +1 543 0 -21 21 +2 1350 289 0 -21 21 +4 G1 289 0 291 0 +2 1351 291 0 -21 21 +0 + +0101000 ++3495 0 -3497 0 * +Ed + 1e-07 1 1 0 +1 544 0 1.5707963267949 3.14159265358979 +2 1352 289 0 1.5707963267949 3.14159265358979 +2 1353 292 0 1.5707963267949 3.14159265358979 +4 G1 289 0 292 0 +0 + +0101000 ++3495 0 -3494 0 * +Ed + 1e-07 1 1 0 +1 545 0 -21 21 +2 1354 289 0 -21 21 +2 1355 293 0 -21 21 +4 CN 289 0 293 0 +0 + +0101000 ++3494 0 -3496 0 * +Ed + 1e-07 1 1 0 +1 546 0 3.14159265358979 6.28318530717959 +2 1356 292 0 3.14159265358979 6.28318530717959 +2 1357 294 0 3.14159265358979 6.28318530717959 +4 G1 292 0 294 0 +0 + +0101000 ++3493 0 -3495 0 * +Ed + 1e-07 1 1 0 +1 547 0 1.5707963267949 3.14159265358979 +2 1358 292 0 1.5707963267949 3.14159265358979 +2 1359 295 0 1.5707963267949 3.14159265358979 +4 G1 292 0 295 0 +0 + +0101000 ++3492 0 -3493 0 * +Ed + 1e-07 1 1 0 +1 548 0 3.14159265358979 6.28318530717959 +2 1360 292 0 3.14159265358979 6.28318530717959 +2 1361 296 0 3.14159265358979 6.28318530717959 +4 CN 292 0 296 0 +0 + +0101000 ++3492 0 -3494 0 * +Ed + 1e-07 1 1 0 +1 549 0 -21 21 +2 1362 295 0 -21 21 +4 G1 295 0 297 0 +2 1363 297 0 -21 21 +0 + +0101000 ++3491 0 -3493 0 * +Ed + 1e-07 1 1 0 +1 550 0 4.71238898038469 6.28318530717959 +2 1364 295 0 4.71238898038469 6.28318530717959 +2 1365 290 0 4.71238898038469 6.28318530717959 +4 G1 295 0 290 0 +0 + +0101000 ++3491 0 -3490 0 * +Ed + 1e-07 1 1 0 +1 551 0 -21 21 +2 1366 295 0 -21 21 +2 1367 298 0 -21 21 +4 CN 295 0 298 0 +0 + +0101000 ++3490 0 -3492 0 * +Ed + 1e-07 1 1 0 +1 552 0 0 3.14159265358979 +2 1368 290 0 0 3.14159265358979 +2 1369 299 0 0 3.14159265358979 +4 G1 290 0 299 0 +0 + +0101000 ++3497 0 -3491 0 * +Ed + 1e-07 1 1 0 +1 553 0 0 3.14159265358979 +2 1370 290 0 0 3.14159265358979 +2 1371 300 0 0 3.14159265358979 +4 CN 290 0 300 0 +0 + +0101000 ++3496 0 -3490 0 * +Ed + 1e-07 1 1 0 +1 554 0 0.150000000000002 0.350000000000001 +2 1372 280 0 0.150000000000002 0.350000000000001 +4 G1 280 0 278 0 +2 1373 278 0 0.150000000000002 0.350000000000001 +0 + +0101000 ++3489 0 -3507 0 * +Ed + 1e-07 1 1 0 +1 555 0 0.150000000000002 0.350000000000001 +2 1374 280 0 0.150000000000002 0.350000000000001 +4 G1 280 0 279 0 +2 1375 279 0 0.150000000000002 0.350000000000001 +0 + +0101000 ++3488 0 -3506 0 * +Ed + 1e-07 1 1 0 +1 556 0 0 3.14159265358979 +2 1376 280 0 0 3.14159265358979 +2 1377 300 0 0 3.14159265358979 +4 G1 280 0 300 0 +0 + +0101000 ++3488 0 -3489 0 * +Ed + 1e-07 1 1 0 +1 557 0 -21 21 +2 1378 293 0 -21 21 +4 G1 279 0 293 0 +2 1379 279 0 -21 21 +0 + +0101000 ++3487 0 -3488 0 * +Ed + 1e-07 1 1 0 +1 558 0 -0.100000000000001 0.0999999999999979 +2 1380 277 0 -0.100000000000001 0.0999999999999979 +4 G1 279 0 277 0 +2 1381 279 0 -0.100000000000001 0.0999999999999979 +0 + +0101000 ++3508 0 -3487 0 * +Ed + 1e-07 1 1 0 +1 559 0 0.150000000000002 0.350000000000001 +2 1382 277 0 0.150000000000002 0.350000000000001 +4 G1 277 0 278 0 +2 1383 278 0 0.150000000000002 0.350000000000001 +0 + +0101000 ++3486 0 -3509 0 * +Ed + 1e-07 1 1 0 +1 560 0 3.14159265358979 6.28318530717959 +2 1384 277 0 3.14159265358979 6.28318530717959 +2 1385 296 0 3.14159265358979 6.28318530717959 +4 G1 277 0 296 0 +0 + +0101000 ++3486 0 -3487 0 * +Ed + 1e-07 1 1 0 +1 561 0 -21 21 +2 1386 298 0 -21 21 +4 G1 278 0 298 0 +2 1387 278 0 -21 21 +0 + +0101000 ++3489 0 -3486 0 * +Ed + 1e-07 1 1 0 +1 562 0 0 1.5707963267949 +2 1388 296 0 0 1.5707963267949 +2 1389 293 0 0 1.5707963267949 +4 G1 296 0 293 0 +0 + +0101000 ++3487 0 -3494 0 * +Ed + 1e-07 1 1 0 +1 563 0 0 1.5707963267949 +2 1390 296 0 0 1.5707963267949 +2 1391 298 0 0 1.5707963267949 +4 G1 296 0 298 0 +0 + +0101000 ++3486 0 -3492 0 * +Ed + 1e-07 1 1 0 +1 564 0 0 1.5707963267949 +2 1392 298 0 0 1.5707963267949 +2 1393 300 0 0 1.5707963267949 +4 G1 298 0 300 0 +0 + +0101000 ++3490 0 -3489 0 * +Ed + 1e-07 1 1 0 +1 565 0 0 1.5707963267949 +2 1394 300 0 0 1.5707963267949 +2 1395 293 0 0 1.5707963267949 +4 G1 300 0 293 0 +0 + +0101000 ++3488 0 -3496 0 * +Ed + 1e-07 1 1 0 +1 566 0 -10.5 -9.4999999935 +2 1396 252 0 -10.5 -9.4999999935 +4 G1 252 0 253 0 +2 1397 253 0 -10.5 -9.4999999935 +0 + +0101000 ++3535 0 -3485 0 * +Ed + 9.66590793534902e-05 1 1 0 +1 567 0 -10.5 -9.4999999935 +2 1398 252 0 -10.5 -9.4999999935 +2 1399 250 0 -10.5 -9.4999999935 +4 G1 252 0 250 0 +0 + +0101000 ++3538 0 -3484 0 * +Ed + 0.000713251616780183 1 1 0 +1 568 0 0 34.4318543551 +2 1400 252 0 0 34.4318543551 +4 C0 252 0 301 0 +2 1401 301 0 0 34.4318543551 +0 + +0101000 ++3485 0 -3484 0 * +Ed + 1e-07 1 1 0 +1 569 0 0 3.14159265358979 +2 1402 302 0 0 3.14159265358979 +4 C0 302 0 303 0 +2 1403 303 0 0 3.14159265358979 +0 + +0101000 ++3483 0 -3482 0 * +Ed + 1e-07 1 1 0 +1 570 0 -0.600000000000001 0.600000000000001 +2 1404 302 0 -0.600000000000001 0.600000000000001 +2 1405 304 0 -0.600000000000001 0.600000000000001 +4 CN 302 0 304 0 +0 + +0101000 ++3482 0 -3481 0 * +Ed + 1e-07 1 1 0 +1 571 0 0 3.14159265358979 +2 1406 302 0 0 3.14159265358979 +4 C0 302 0 305 0 +2 1407 305 0 0 3.14159265358979 +0 + +0101000 ++3480 0 -3481 0 * +Ed + 1e-07 1 1 0 +1 572 0 -0.600000000000001 0.600000000000001 +2 1408 302 0 -0.600000000000001 0.600000000000001 +2 1409 304 0 -0.600000000000001 0.600000000000001 +4 CN 302 0 304 0 +0 + +0101000 ++3483 0 -3480 0 * +Ed + 1e-07 1 1 0 +1 573 0 3.14159265358979 6.28318530717959 +2 1410 304 0 3.14159265358979 6.28318530717959 +4 C0 304 0 303 0 +2 1411 303 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3482 0 -3483 0 * +Ed + 1e-07 1 1 0 +1 574 0 3.14159265358979 6.28318530717959 +2 1412 304 0 3.14159265358979 6.28318530717959 +4 C0 304 0 305 0 +2 1413 305 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3481 0 -3480 0 * +Ed + 1e-07 1 1 0 +1 575 0 0 3.14159265358979 +2 1414 306 0 0 3.14159265358979 +4 C0 303 0 306 0 +2 1415 303 0 0 3.14159265358979 +0 + +0101000 ++3479 0 -3478 0 * +Ed + 1e-07 1 1 0 +1 576 0 3.14159265358979 6.28318530717959 +2 1416 307 0 3.14159265358979 6.28318530717959 +4 C0 303 0 307 0 +2 1417 303 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3478 0 -3479 0 * +Ed + 1e-07 1 1 0 +1 577 0 -6.6 6.6 +2 1418 299 0 -6.6 6.6 +4 G1 291 0 299 0 +2 1419 291 0 -6.6 6.6 +0 + +0101000 ++3477 0 -3497 0 * +Ed + 1e-07 1 1 0 +1 578 0 -6.6 6.6 +2 1420 294 0 -6.6 6.6 +4 G1 291 0 294 0 +2 1421 291 0 -6.6 6.6 +0 + +0101000 ++3476 0 -3495 0 * +Ed + 1e-07 1 1 0 +1 579 0 -20.99999999996 20.99999999994 +4 C0 291 0 305 0 +2 1422 305 0 -20.99999999996 20.99999999994 +2 1423 291 0 -20.99999999996 20.99999999994 +0 + +0101000 ++3477 0 -3476 0 * +Ed + 1e-07 1 1 0 +1 580 0 0.789040235153626 1.5707963267949 +2 1424 308 0 0.789040235153626 1.5707963267949 +4 C0 305 0 308 0 +2 1425 305 0 0.789040235153626 1.5707963267949 +0 + +0101000 ++3475 0 -3474 0 * +Ed + 1e-07 1 1 0 +1 581 0 2.07079632679424 3.93063288873583 +2 1426 285 0 2.07079632679424 3.93063288873583 +4 C0 305 0 285 0 +2 1427 305 0 2.07079632679424 3.93063288873583 +0 + +0101000 ++3473 0 -3475 0 * +Ed + 1e-07 1 1 0 +1 582 0 2.01436513990966 2.07079632679424 +2 1428 287 0 2.01436513990966 2.07079632679424 +4 C0 305 0 287 0 +2 1429 305 0 2.01436513990966 2.07079632679424 +0 + +0101000 ++3472 0 -3473 0 * +Ed + 1e-07 1 1 0 +1 583 0 4.71238898038469 5.15595779351037 +2 1430 309 0 4.71238898038469 5.15595779351037 +4 C0 305 0 309 0 +2 1431 305 0 4.71238898038469 5.15595779351037 +0 + +0101000 ++3471 0 -3472 0 * +Ed + 1e-07 1 1 0 +1 584 0 -17.50896997293 17.50896997287 +4 C0 305 0 310 0 +2 1432 305 0 -17.50896997293 17.50896997287 +2 1433 310 0 -17.50896997293 17.50896997287 +0 + +0101000 ++3470 0 -3471 0 * +Ed + 1e-07 1 1 0 +1 585 0 3.30228330654129 4.71238898038469 +2 1434 311 0 3.30228330654129 4.71238898038469 +4 C0 305 0 311 0 +2 1435 305 0 3.30228330654129 4.71238898038469 +0 + +0101000 ++3469 0 -3470 0 * +Ed + 1e-07 1 1 0 +1 586 0 0 0.160690652952128 +2 1436 299 0 0 0.160690652952128 +4 C0 305 0 299 0 +2 1437 305 0 0 0.160690652952128 +0 + +0101000 ++3477 0 -3469 0 * +Ed + 1e-07 1 1 0 +1 587 0 6.12249465422746 6.28318530717959 +2 1438 294 0 6.12249465422746 6.28318530717959 +4 C0 305 0 294 0 +2 1439 305 0 6.12249465422746 6.28318530717959 +0 + +0101000 ++3468 0 -3476 0 * +Ed + 1e-07 1 1 0 +1 588 0 1.5707963267949 2.9809020006383 +2 1440 312 0 1.5707963267949 2.9809020006383 +4 C0 305 0 312 0 +2 1441 305 0 1.5707963267949 2.9809020006383 +0 + +0101000 ++3467 0 -3468 0 * +Ed + 1e-07 1 1 0 +1 589 0 -13.24087248687 13.24087248683 +4 C0 305 0 313 0 +2 1442 305 0 -13.24087248687 13.24087248683 +2 1443 313 0 -13.24087248687 13.24087248683 +0 + +0101000 ++3474 0 -3467 0 * +Ed + 1e-07 1 1 0 +1 590 0 -6.6 6.6 +2 1444 294 0 -6.6 6.6 +4 G1 297 0 294 0 +2 1445 297 0 -6.6 6.6 +0 + +0101000 ++3466 0 -3493 0 * +Ed + 1e-07 1 1 0 +1 591 0 -6.6 6.6 +2 1446 299 0 -6.6 6.6 +4 G1 297 0 299 0 +2 1447 297 0 -6.6 6.6 +0 + +0101000 ++3465 0 -3491 0 * +Ed + 1e-07 1 1 0 +1 592 0 -20.99999999975 20.99999999975 +4 C0 297 0 314 0 +2 1448 314 0 -20.99999999975 20.99999999975 +2 1449 297 0 -20.99999999975 20.99999999975 +0 + +0101000 ++3465 0 -3466 0 * +Ed + 1e-07 1 1 0 +1 593 0 -6.6 6.6 +2 1450 272 0 -6.6 6.6 +4 G1 271 0 272 0 +2 1451 271 0 -6.6 6.6 +0 + +0101000 ++3516 0 -3464 0 * +Ed + 1e-07 1 1 0 +1 594 0 -6.6 6.6 +2 1452 270 0 -6.6 6.6 +4 G1 271 0 270 0 +2 1453 271 0 -6.6 6.6 +0 + +0101000 ++3517 0 -3463 0 * +Ed + 1e-07 1 1 0 +1 595 0 -54.5 54.5 +2 1454 315 0 -54.5 54.5 +4 G1 271 0 315 0 +2 1455 271 0 -54.5 54.5 +0 + +0101000 ++3464 0 -3463 0 * +Ed + 1e-07 1 1 0 +1 596 0 5.3 18.5 +2 1456 272 0 5.3 18.5 +4 G1 272 0 263 0 +2 1457 263 0 5.3 18.5 +0 + +0101000 ++3462 0 -3524 0 * +Ed + 1e-07 1 1 0 +1 597 0 3.14159265358979 4.71238898038469 +2 1458 272 0 3.14159265358979 4.71238898038469 +2 1459 316 0 3.14159265358979 4.71238898038469 +4 G1 272 0 316 0 +0 + +0101000 ++3462 0 -3464 0 * +Ed + 1e-07 1 1 0 +1 598 0 -6.2 7 +2 1460 270 0 -6.2 7 +4 G1 270 0 269 0 +2 1461 269 0 -6.2 7 +0 + +0101000 ++3461 0 -3518 0 * +Ed + 1e-07 1 1 0 +1 599 0 4.71238898038469 6.28318530717959 +2 1462 270 0 4.71238898038469 6.28318530717959 +2 1463 317 0 4.71238898038469 6.28318530717959 +4 G1 270 0 317 0 +0 + +0101000 ++3463 0 -3461 0 * +Ed + 1e-07 1 1 0 +1 600 0 -6.6 6.6 +2 1464 264 0 -6.6 6.6 +4 G1 263 0 264 0 +2 1465 263 0 -6.6 6.6 +0 + +0101000 ++3525 0 -3460 0 * +Ed + 1e-07 1 1 0 +1 601 0 -1 1 +2 1466 318 0 -1 1 +4 G1 263 0 318 0 +2 1467 263 0 -1 1 +0 + +0101000 ++3460 0 -3462 0 * +Ed + 1e-07 1 1 0 +1 602 0 -5.00074355342 5.00074355341 +2 1468 319 0 -5.00074355342 5.00074355341 +4 G1 269 0 319 0 +2 1469 269 0 -5.00074355342 5.00074355341 +0 + +0101000 ++3459 0 -3461 0 * +Ed + 1e-07 1 1 0 +1 603 0 -6.6 6.6 +2 1470 268 0 -6.6 6.6 +4 G1 269 0 268 0 +2 1471 269 0 -6.6 6.6 +0 + +0101000 ++3519 0 -3459 0 * +Ed + 1e-07 1 1 0 +1 604 0 -6.2 7 +2 1472 268 0 -6.2 7 +4 G1 268 0 267 0 +2 1473 267 0 -6.2 7 +0 + +0101000 ++3458 0 -3520 0 * +Ed + 1e-07 1 1 0 +1 605 0 6.28318257972667 7.36529079161962 +2 1474 268 0 6.28318257972667 7.36529079161962 +2 1475 320 0 6.28318257972667 7.36529079161962 +4 G1 268 0 320 0 +0 + +0101000 ++3459 0 -3458 0 * +Ed + 1e-07 1 1 0 +1 606 0 -14.5100701232189 14.5100701232189 +2 1476 321 0 -14.5100701232189 14.5100701232189 +4 G1 267 0 321 0 +2 1477 267 0 -14.5100701232189 14.5100701232189 +0 + +0101000 ++3457 0 -3458 0 * +Ed + 1e-07 1 1 0 +1 607 0 -6.6 6.6 +2 1478 266 0 -6.6 6.6 +4 G1 267 0 266 0 +2 1479 267 0 -6.6 6.6 +0 + +0101000 ++3521 0 -3457 0 * +Ed + 1e-07 1 1 0 +1 608 0 -6.2 7 +2 1480 266 0 -6.2 7 +4 G1 266 0 265 0 +2 1481 265 0 -6.2 7 +0 + +0101000 ++3456 0 -3522 0 * +Ed + 1e-07 1 1 0 +1 609 0 1.08210413623606 1.5707963267949 +2 1482 266 0 1.08210413623606 1.5707963267949 +2 1483 322 0 1.08210413623606 1.5707963267949 +4 G1 266 0 322 0 +0 + +0101000 ++3457 0 -3456 0 * +Ed + 1e-07 1 1 0 +1 610 0 -17.4 17.4 +2 1484 323 0 -17.4 17.4 +4 G1 265 0 323 0 +2 1485 265 0 -17.4 17.4 +0 + +0101000 ++3455 0 -3456 0 * +Ed + 1e-07 1 1 0 +1 611 0 -6.6 6.6 +2 1486 264 0 -6.6 6.6 +4 G1 265 0 264 0 +2 1487 265 0 -6.6 6.6 +0 + +0101000 ++3523 0 -3455 0 * +Ed + 1e-07 1 1 0 +1 612 0 1.5707963267949 3.14159265358979 +2 1488 264 0 1.5707963267949 3.14159265358979 +2 1489 324 0 1.5707963267949 3.14159265358979 +4 G1 264 0 324 0 +0 + +0101000 ++3455 0 -3460 0 * +Ed + 1e-07 1 1 0 +1 613 0 4.71238898038469 6.28318530717959 +2 1490 322 0 4.71238898038469 6.28318530717959 +2 1491 323 0 4.71238898038469 6.28318530717959 +4 G1 322 0 323 0 +0 + +0101000 ++3454 0 -3456 0 * +Ed + 1e-07 1 1 0 +1 614 0 4.71238898038469 6.28318530717959 +2 1492 322 0 4.71238898038469 6.28318530717959 +2 1493 321 0 4.71238898038469 6.28318530717959 +4 G1 322 0 321 0 +0 + +0101000 ++3453 0 -3457 0 * +Ed + 1e-07 1 1 0 +1 615 0 1.08210413623672 1.5707963267949 +2 1494 322 0 1.08210413623672 1.5707963267949 +4 G1 322 0 325 0 +2 1495 325 0 1.08210413623672 1.5707963267949 +0 + +0101000 ++3453 0 -3454 0 * +Ed + 2.3959515903456e-07 1 1 0 +1 616 0 4.71238898038469 6.28318530717959 +2 1496 321 0 4.71238898038469 6.28318530717959 +2 1497 320 0 4.71238898038469 6.28318530717959 +4 G1 321 0 320 0 +0 + +0101000 ++3452 0 -3458 0 * +Ed + 1e-07 1 1 0 +1 617 0 -11.1570042230844 17.8631360233948 +2 1498 321 0 -11.1570042230844 17.8631360233948 +4 G1 321 0 325 0 +2 1499 325 0 -11.1570042230844 17.8631360233948 +0 + +0101000 ++3453 0 -3452 0 * +Ed + 4.58860415643713e-07 1 1 0 +1 618 0 1.5707963267949 3.14159265358979 +2 1500 320 0 1.5707963267949 3.14159265358979 +2 1501 319 0 1.5707963267949 3.14159265358979 +4 G1 320 0 319 0 +0 + +0101000 ++3451 0 -3459 0 * +Ed + 1e-07 1 1 0 +1 619 0 6.28318257972657 7.36529083811007 +2 1502 320 0 6.28318257972657 7.36529083811007 +4 G1 320 0 325 0 +2 1503 325 0 6.28318257972657 7.36529083811007 +0 + +0101000 ++3451 0 -3452 0 * +Ed + 1e-07 1 1 0 +1 620 0 0 1.5707963267949 +2 1504 319 0 0 1.5707963267949 +2 1505 317 0 0 1.5707963267949 +4 G1 319 0 317 0 +0 + +0101000 ++3450 0 -3461 0 * +Ed + 1e-07 1 1 0 +1 621 0 1.99851071121001 12 +2 1506 319 0 1.99851071121001 12 +4 G1 319 0 325 0 +2 1507 325 0 1.99851071121001 12 +0 + +0101000 ++3451 0 -3450 0 * +Ed + 1e-07 1 1 0 +1 622 0 4.71238898038469 6.28318530717959 +2 1508 317 0 4.71238898038469 6.28318530717959 +2 1509 315 0 4.71238898038469 6.28318530717959 +4 G1 317 0 315 0 +0 + +0101000 ++3449 0 -3463 0 * +Ed + 1e-07 1 1 0 +1 623 0 4.71238898038469 6.28318530717959 +2 1510 317 0 4.71238898038469 6.28318530717959 +4 G1 317 0 325 0 +2 1511 325 0 4.71238898038469 6.28318530717959 +0 + +0101000 ++3449 0 -3450 0 * +Ed + 1e-07 1 1 0 +1 624 0 1.5707963267949 3.14159265358979 +2 1512 315 0 1.5707963267949 3.14159265358979 +2 1513 316 0 1.5707963267949 3.14159265358979 +4 G1 315 0 316 0 +0 + +0101000 ++3464 0 -3448 0 * +Ed + 1e-07 1 1 0 +1 625 0 -55.5 53.5 +2 1514 315 0 -55.5 53.5 +4 G1 315 0 325 0 +2 1515 325 0 -55.5 53.5 +0 + +0101000 ++3448 0 -3449 0 * +Ed + 1e-07 1 1 0 +1 626 0 1.5707963267949 3.14159265358979 +2 1516 316 0 1.5707963267949 3.14159265358979 +2 1517 318 0 1.5707963267949 3.14159265358979 +4 G1 316 0 318 0 +0 + +0101000 ++3447 0 -3462 0 * +Ed + 1e-07 1 1 0 +1 627 0 3.14159265358979 4.71238898038469 +2 1518 316 0 3.14159265358979 4.71238898038469 +4 G1 316 0 325 0 +2 1519 325 0 3.14159265358979 4.71238898038469 +0 + +0101000 ++3447 0 -3448 0 * +Ed + 1e-07 1 1 0 +1 628 0 4.71238898038469 6.28318530717959 +2 1520 318 0 4.71238898038469 6.28318530717959 +2 1521 324 0 4.71238898038469 6.28318530717959 +4 G1 318 0 324 0 +0 + +0101000 ++3460 0 -3446 0 * +Ed + 1e-07 1 1 0 +1 629 0 12 14 +2 1522 318 0 12 14 +4 G1 318 0 325 0 +2 1523 325 0 12 14 +0 + +0101000 ++3446 0 -3447 0 * +Ed + 1e-07 1 1 0 +1 630 0 4.71238898038469 6.28318530717959 +2 1524 324 0 4.71238898038469 6.28318530717959 +2 1525 323 0 4.71238898038469 6.28318530717959 +4 G1 324 0 323 0 +0 + +0101000 ++3445 0 -3455 0 * +Ed + 1e-07 1 1 0 +1 631 0 1.5707963267949 3.14159265358979 +2 1526 324 0 1.5707963267949 3.14159265358979 +4 G1 324 0 325 0 +2 1527 325 0 1.5707963267949 3.14159265358979 +0 + +0101000 ++3445 0 -3446 0 * +Ed + 1e-07 1 1 0 +1 632 0 -29.5 5.3 +2 1528 323 0 -29.5 5.3 +4 G1 323 0 325 0 +2 1529 325 0 -29.5 5.3 +0 + +0101000 ++3445 0 -3454 0 * +Ed + 1e-07 1 1 0 +1 633 0 -8.45 -4.35 +2 1530 311 0 -8.45 -4.35 +2 1531 299 0 -8.45 -4.35 +4 G1 311 0 299 0 +0 + +0101000 ++3444 0 -3469 0 * +Ed + 1e-07 1 1 0 +1 634 0 -8.45 -4.35 +2 1532 311 0 -8.45 -4.35 +4 G1 311 0 310 0 +2 1533 310 0 -8.45 -4.35 +0 + +0101000 ++3443 0 -3470 0 * +Ed + 1e-07 1 1 0 +1 635 0 4.71238898038469 6.12249465422809 +2 1534 311 0 4.71238898038469 6.12249465422809 +2 1535 326 0 4.71238898038469 6.12249465422809 +4 C0 311 0 326 0 +0 + +0101000 ++3443 0 -3444 0 * +Ed + 1e-07 1 1 0 +1 636 0 -8.45 -4.35 +2 1536 312 0 -8.45 -4.35 +4 G1 312 0 313 0 +2 1537 313 0 -8.45 -4.35 +0 + +0101000 ++3442 0 -3467 0 * +Ed + 1e-07 1 1 0 +1 637 0 -8.45 -4.35 +2 1538 312 0 -8.45 -4.35 +2 1539 294 0 -8.45 -4.35 +4 G1 312 0 294 0 +0 + +0101000 ++3441 0 -3468 0 * +Ed + 1e-07 1 1 0 +1 638 0 0.160690652951493 1.5707963267949 +2 1540 312 0 0.160690652951493 1.5707963267949 +2 1541 327 0 0.160690652951493 1.5707963267949 +4 C0 312 0 327 0 +0 + +0101000 ++3441 0 -3442 0 * +Ed + 1e-07 1 1 0 +1 639 0 -9.6 7.7 +2 1542 287 0 -9.6 7.7 +2 1543 285 0 -9.6 7.7 +4 CN 287 0 285 0 +0 + +0101000 ++3502 0 -3440 0 * +Ed + 1e-07 1 1 0 +1 640 0 -9.6 3.6 +2 1544 287 0 -9.6 3.6 +2 1545 285 0 -9.6 3.6 +4 CN 287 0 285 0 +0 + +0101000 ++3501 0 -3473 0 * +Ed + 1e-07 1 1 0 +1 641 0 3.6 7.7 +2 1546 287 0 3.6 7.7 +2 1547 309 0 3.6 7.7 +4 G1 287 0 309 0 +0 + +0101000 ++3472 0 -3439 0 * +Ed + 1e-07 1 1 0 +1 642 0 5.21238898038404 8.29755044708925 +2 1548 287 0 5.21238898038404 8.29755044708925 +2 1549 328 0 5.21238898038404 8.29755044708925 +4 C0 287 0 328 0 +0 + +0101000 ++3440 0 -3439 0 * +Ed + 1e-07 1 1 0 +1 643 0 -2.05 2.05 +2 1550 309 0 -2.05 2.05 +4 G1 310 0 309 0 +2 1551 310 0 -2.05 2.05 +0 + +0101000 ++3438 0 -3471 0 * +Ed + 1e-07 1 1 0 +1 644 0 -17.50896997293 17.50896997287 +4 C0 310 0 329 0 +2 1552 310 0 -17.50896997293 17.50896997287 +2 1553 329 0 -17.50896997293 17.50896997287 +0 + +0101000 ++3443 0 -3438 0 * +Ed + 1e-07 1 1 0 +1 645 0 4.26882016725901 4.71238898038469 +2 1554 309 0 4.26882016725901 4.71238898038469 +2 1555 330 0 4.26882016725901 4.71238898038469 +4 C0 309 0 330 0 +0 + +0101000 ++3439 0 -3438 0 * +Ed + 1e-07 1 1 0 +1 646 0 -2.05 2.05 +2 1556 308 0 -2.05 2.05 +4 G1 313 0 308 0 +2 1557 313 0 -2.05 2.05 +0 + +0101000 ++3437 0 -3474 0 * +Ed + 1e-07 1 1 0 +1 647 0 -13.24087248687 13.24087248683 +4 C0 313 0 331 0 +2 1558 313 0 -13.24087248687 13.24087248683 +2 1559 331 0 -13.24087248687 13.24087248683 +0 + +0101000 ++3437 0 -3442 0 * +Ed + 1e-07 1 1 0 +1 648 0 3.6 7.7 +2 1560 285 0 3.6 7.7 +2 1561 308 0 3.6 7.7 +4 G1 285 0 308 0 +0 + +0101000 ++3475 0 -3436 0 * +Ed + 1e-07 1 1 0 +1 649 0 3.93063288873583 5.21238898038404 +2 1562 285 0 3.93063288873583 5.21238898038404 +2 1563 328 0 3.93063288873583 5.21238898038404 +4 C0 285 0 328 0 +0 + +0101000 ++3436 0 -3440 0 * +Ed + 1e-07 1 1 0 +1 650 0 1.5707963267949 2.35255241843617 +2 1564 308 0 1.5707963267949 2.35255241843617 +2 1565 332 0 1.5707963267949 2.35255241843617 +4 C0 308 0 332 0 +0 + +0101000 ++3437 0 -3436 0 * +Ed + 1e-07 1 1 0 +1 651 0 -11.65 -7.55 +2 1566 294 0 -11.65 -7.55 +2 1567 333 0 -11.65 -7.55 +4 G1 294 0 333 0 +0 + +0101000 ++3435 0 -3434 0 * +Ed + 1e-07 1 1 0 +1 652 0 3.14159265358979 3.18160332794375 +2 1568 294 0 3.14159265358979 3.18160332794375 +4 C0 294 0 314 0 +2 1569 314 0 3.14159265358979 3.18160332794375 +0 + +0101000 ++3466 0 -3435 0 * +Ed + 1e-07 1 1 0 +1 653 0 3.18160332794375 6.12249465422746 +2 1570 294 0 3.18160332794375 6.12249465422746 +2 1571 334 0 3.18160332794375 6.12249465422746 +4 C0 294 0 334 0 +0 + +0101000 ++3434 0 -3441 0 * +Ed + 1e-07 1 1 0 +1 654 0 1.5707963267949 3.10158197923577 +2 1572 333 0 1.5707963267949 3.10158197923577 +4 C0 333 0 314 0 +2 1573 314 0 1.5707963267949 3.10158197923577 +0 + +0101000 ++3433 0 -3435 0 * +Ed + 1e-07 1 1 0 +1 655 0 -8.45 -4.35 +2 1574 333 0 -8.45 -4.35 +4 G1 333 0 335 0 +2 1575 335 0 -8.45 -4.35 +0 + +0101000 ++3432 0 -3433 0 * +Ed + 1e-07 1 1 0 +1 656 0 1.5707963267949 3.10158197923577 +2 1576 333 0 1.5707963267949 3.10158197923577 +2 1577 336 0 1.5707963267949 3.10158197923577 +4 C0 333 0 336 0 +0 + +0101000 ++3432 0 -3434 0 * +Ed + 1e-07 1 1 0 +1 657 0 3.10158197923583 3.14159265361757 +2 1578 299 0 3.10158197923583 3.14159265361757 +4 C0 299 0 314 0 +2 1579 314 0 3.10158197923583 3.14159265361757 +0 + +0101000 ++3431 0 -3465 0 * +Ed + 1e-07 1 1 0 +1 658 0 -11.65 -7.55 +2 1580 299 0 -11.65 -7.55 +2 1581 337 0 -11.65 -7.55 +4 G1 299 0 337 0 +0 + +0101000 ++3431 0 -3430 0 * +Ed + 1e-07 1 1 0 +1 659 0 0.160690652952128 3.10158197923583 +2 1582 299 0 0.160690652952128 3.10158197923583 +2 1583 338 0 0.160690652952128 3.10158197923583 +4 C0 299 0 338 0 +0 + +0101000 ++3444 0 -3430 0 * +Ed + 1e-07 1 1 0 +1 660 0 -8.45 -4.35 +2 1584 337 0 -8.45 -4.35 +4 G1 337 0 339 0 +2 1585 339 0 -8.45 -4.35 +0 + +0101000 ++3429 0 -3428 0 * +Ed + 1e-07 1 1 0 +1 661 0 3.18160332794382 4.71238898038469 +2 1586 337 0 3.18160332794382 4.71238898038469 +4 C0 337 0 314 0 +2 1587 314 0 3.18160332794382 4.71238898038469 +0 + +0101000 ++3431 0 -3428 0 * +Ed + 1e-07 1 1 0 +1 662 0 3.18160332794382 4.71238898038469 +2 1588 337 0 3.18160332794382 4.71238898038469 +2 1589 340 0 3.18160332794382 4.71238898038469 +4 C0 337 0 340 0 +0 + +0101000 ++3430 0 -3429 0 * +Ed + 1e-07 1 1 0 +1 663 0 -4.45427591320001 4.45427591319999 +4 C0 335 0 314 0 +2 1590 314 0 -4.45427591320001 4.45427591319999 +2 1591 335 0 -4.45427591320001 4.45427591319999 +0 + +0101000 ++3433 0 -3427 0 * +Ed + 1e-07 1 1 0 +1 664 0 -2.05 2.05 +2 1592 341 0 -2.05 2.05 +4 G1 335 0 341 0 +2 1593 335 0 -2.05 2.05 +0 + +0101000 ++3426 0 -3427 0 * +Ed + 1e-07 1 1 0 +1 665 0 -4.45427591320001 4.45427591319999 +4 C0 335 0 342 0 +2 1594 335 0 -4.45427591320001 4.45427591319999 +2 1595 342 0 -4.45427591320001 4.45427591319999 +0 + +0101000 ++3432 0 -3426 0 * +Ed + 1e-07 1 1 0 +1 666 0 -1.85 2.25 +2 1596 341 0 -1.85 2.25 +2 1597 343 0 -1.85 2.25 +4 G1 341 0 343 0 +0 + +0101000 ++3425 0 -3424 0 * +Ed + 1e-07 1 1 0 +1 667 0 4.71238898038469 5.73186833805586 +2 1598 341 0 4.71238898038469 5.73186833805586 +4 C0 341 0 314 0 +2 1599 314 0 4.71238898038469 5.73186833805586 +0 + +0101000 ++3427 0 -3424 0 * +Ed + 1e-07 1 1 0 +1 668 0 4.71238898038469 5.73186833805586 +2 1600 341 0 4.71238898038469 5.73186833805586 +2 1601 344 0 4.71238898038469 5.73186833805586 +4 C0 341 0 344 0 +0 + +0101000 ++3426 0 -3425 0 * +Ed + 1e-07 1 1 0 +1 669 0 -2.05 2.05 +2 1602 345 0 -2.05 2.05 +4 G1 339 0 345 0 +2 1603 339 0 -2.05 2.05 +0 + +0101000 ++3423 0 -3422 0 * +Ed + 1e-07 1 1 0 +1 670 0 -4.45427591319999 4.45427591320001 +4 C0 339 0 314 0 +2 1604 314 0 -4.45427591319999 4.45427591320001 +2 1605 339 0 -4.45427591319999 4.45427591320001 +0 + +0101000 ++3422 0 -3428 0 * +Ed + 1e-07 1 1 0 +1 671 0 -4.45427591319999 4.45427591320001 +4 C0 339 0 346 0 +2 1606 339 0 -4.45427591319999 4.45427591320001 +2 1607 346 0 -4.45427591319999 4.45427591320001 +0 + +0101000 ++3423 0 -3429 0 * +Ed + 1e-07 1 1 0 +1 672 0 -11.5 -7.4 +2 1608 343 0 -11.5 -7.4 +2 1609 345 0 -11.5 -7.4 +4 G1 343 0 345 0 +0 + +0101000 ++3421 0 -3420 0 * +Ed + 1e-07 1 1 0 +1 673 0 2.59027568446126 3.69290962272235 +2 1610 343 0 2.59027568446126 3.69290962272235 +4 C0 343 0 314 0 +2 1611 314 0 2.59027568446126 3.69290962272235 +0 + +0101000 ++3421 0 -3424 0 * +Ed + 1e-07 1 1 0 +1 674 0 2.59027568446126 3.69290962272235 +2 1612 343 0 2.59027568446126 3.69290962272235 +2 1613 347 0 2.59027568446126 3.69290962272235 +4 C0 343 0 347 0 +0 + +0101000 ++3420 0 -3425 0 * +Ed + 1e-07 1 1 0 +1 675 0 0.551316969123728 1.5707963267949 +2 1614 345 0 0.551316969123728 1.5707963267949 +4 C0 345 0 314 0 +2 1615 314 0 0.551316969123728 1.5707963267949 +0 + +0101000 ++3421 0 -3422 0 * +Ed + 1e-07 1 1 0 +1 676 0 0.551316969123728 1.5707963267949 +2 1616 345 0 0.551316969123728 1.5707963267949 +2 1617 348 0 0.551316969123728 1.5707963267949 +4 C0 345 0 348 0 +0 + +0101000 ++3420 0 -3423 0 * +Ed + 1e-07 1 1 0 +1 677 0 0.0400106743540416 1.5707963267949 +2 1618 336 0 0.0400106743540416 1.5707963267949 +4 C0 325 0 336 0 +2 1619 325 0 0.0400106743540416 1.5707963267949 +0 + +0101000 ++3419 0 -3418 0 * +Ed + 1e-07 1 1 0 +1 678 0 -4.45427591320001 4.45427591319999 +4 C0 325 0 342 0 +2 1620 325 0 -4.45427591320001 4.45427591319999 +2 1621 342 0 -4.45427591320001 4.45427591319999 +0 + +0101000 ++3418 0 -3417 0 * +Ed + 1e-07 1 1 0 +1 679 0 3.69290962272901 4.71238898038469 +2 1622 344 0 3.69290962272901 4.71238898038469 +4 C0 325 0 344 0 +2 1623 325 0 3.69290962272901 4.71238898038469 +0 + +0101000 ++3416 0 -3417 0 * +Ed + 1e-07 1 1 0 +1 680 0 2.59027568446201 3.69290962272489 +2 1624 347 0 2.59027568446201 3.69290962272489 +4 C0 325 0 347 0 +2 1625 325 0 2.59027568446201 3.69290962272489 +0 + +0101000 ++3415 0 -3416 0 * +Ed + 1e-07 1 1 0 +1 681 0 1.5707963267949 2.59027568446994 +2 1626 348 0 1.5707963267949 2.59027568446994 +4 C0 325 0 348 0 +2 1627 325 0 1.5707963267949 2.59027568446994 +0 + +0101000 ++3414 0 -3415 0 * +Ed + 1e-07 1 1 0 +1 682 0 -4.45427591319999 4.45427591320001 +4 C0 325 0 346 0 +2 1628 325 0 -4.45427591319999 4.45427591320001 +2 1629 346 0 -4.45427591319999 4.45427591320001 +0 + +0101000 ++3414 0 -3413 0 * +Ed + 1e-07 1 1 0 +1 683 0 4.71238898038469 6.24317463282554 +2 1630 340 0 4.71238898038469 6.24317463282554 +4 C0 325 0 340 0 +2 1631 325 0 4.71238898038469 6.24317463282554 +0 + +0101000 ++3413 0 -3412 0 * +Ed + 1e-07 1 1 0 +1 684 0 0.160690652951567 3.10158197923584 +2 1632 338 0 0.160690652951567 3.10158197923584 +4 C0 325 0 338 0 +2 1633 325 0 0.160690652951567 3.10158197923584 +0 + +0101000 ++3411 0 -3412 0 * +Ed + 1e-07 1 1 0 +1 685 0 3.30228330654281 4.71238898038469 +2 1634 326 0 3.30228330654281 4.71238898038469 +4 C0 325 0 326 0 +2 1635 325 0 3.30228330654281 4.71238898038469 +0 + +0101000 ++3411 0 -3410 0 * +Ed + 1e-07 1 1 0 +1 686 0 -17.50896997293 17.50896997287 +4 C0 325 0 329 0 +2 1636 325 0 -17.50896997293 17.50896997287 +2 1637 329 0 -17.50896997293 17.50896997287 +0 + +0101000 ++3410 0 -3409 0 * +Ed + 1e-07 1 1 0 +1 687 0 4.71238898038469 5.15595779350366 +2 1638 330 0 4.71238898038469 5.15595779350366 +4 C0 325 0 330 0 +2 1639 325 0 4.71238898038469 5.15595779350366 +0 + +0101000 ++3409 0 -3408 0 * +Ed + 1e-07 1 1 0 +1 688 0 5.21238898038365 8.29755044709124 +2 1640 328 0 5.21238898038365 8.29755044709124 +4 C0 325 0 328 0 +2 1641 325 0 5.21238898038365 8.29755044709124 +0 + +0101000 ++3407 0 -3408 0 * +Ed + 1e-07 1 1 0 +1 689 0 3.93063288873727 5.21238898038365 +2 1642 328 0 3.93063288873727 5.21238898038365 +4 C0 325 0 328 0 +2 1643 325 0 3.93063288873727 5.21238898038365 +0 + +0101000 ++3406 0 -3407 0 * +Ed + 1e-07 1 1 0 +1 690 0 0.789040235148755 1.5707963267949 +2 1644 332 0 0.789040235148755 1.5707963267949 +4 C0 325 0 332 0 +2 1645 325 0 0.789040235148755 1.5707963267949 +0 + +0101000 ++3406 0 -3405 0 * +Ed + 1e-07 1 1 0 +1 691 0 -13.24087248687 13.24087248683 +4 C0 325 0 331 0 +2 1646 325 0 -13.24087248687 13.24087248683 +2 1647 331 0 -13.24087248687 13.24087248683 +0 + +0101000 ++3405 0 -3404 0 * +Ed + 1e-07 1 1 0 +1 692 0 1.5707963267949 2.98090200063678 +2 1648 327 0 1.5707963267949 2.98090200063678 +4 C0 325 0 327 0 +2 1649 325 0 1.5707963267949 2.98090200063678 +0 + +0101000 ++3404 0 -3403 0 * +Ed + 1e-07 1 1 0 +1 693 0 3.18160332794375 6.12249465422802 +2 1650 334 0 3.18160332794375 6.12249465422802 +4 C0 325 0 334 0 +2 1651 325 0 3.18160332794375 6.12249465422802 +0 + +0101000 ++3419 0 -3403 0 * +Ed + 1e-07 1 1 0 +1 694 0 -0.282842712496918 0.282842712496923 +2 1652 334 0 -0.282842712496918 0.282842712496923 +2 1653 327 0 -0.282842712496918 0.282842712496923 +4 G1 334 0 327 0 +0 + +0101000 ++3441 0 -3403 0 * +Ed + 1e-07 1 1 0 +1 695 0 -0.282842712440174 0.28284271251083 +2 1654 334 0 -0.282842712440174 0.28284271251083 +2 1655 336 0 -0.282842712440174 0.28284271251083 +4 G1 334 0 336 0 +0 + +0101000 ++3434 0 -3419 0 * +Ed + 1e-07 1 1 0 +1 696 0 -0.282842712474621 0.282842712474616 +2 1656 327 0 -0.282842712474621 0.282842712474616 +4 G1 327 0 331 0 +2 1657 331 0 -0.282842712474621 0.282842712474616 +0 + +0101000 ++3404 0 -3442 0 * +Ed + 1e-07 1 1 0 +1 697 0 -0.282842712474616 0.282842712474621 +2 1658 332 0 -0.282842712474616 0.282842712474621 +4 G1 331 0 332 0 +2 1659 331 0 -0.282842712474616 0.282842712474621 +0 + +0101000 ++3437 0 -3405 0 * +Ed + 1e-07 1 1 0 +1 698 0 -0.282842712491306 0.282842712491302 +2 1660 332 0 -0.282842712491306 0.282842712491302 +2 1661 328 0 -0.282842712491306 0.282842712491302 +4 G1 332 0 328 0 +0 + +0101000 ++3406 0 -3436 0 * +Ed + 1e-07 1 1 0 +1 699 0 -0.282842712490296 0.282842712490292 +2 1662 330 0 -0.282842712490296 0.282842712490292 +2 1663 328 0 -0.282842712490296 0.282842712490292 +4 G1 330 0 328 0 +0 + +0101000 ++3408 0 -3439 0 * +Ed + 1e-07 1 1 0 +1 700 0 -0.282842712474621 0.282842712474616 +2 1664 330 0 -0.282842712474621 0.282842712474616 +4 G1 330 0 329 0 +2 1665 329 0 -0.282842712474621 0.282842712474616 +0 + +0101000 ++3409 0 -3438 0 * +Ed + 1e-07 1 1 0 +1 701 0 -0.282842712474616 0.282842712474621 +2 1666 326 0 -0.282842712474616 0.282842712474621 +4 G1 329 0 326 0 +2 1667 329 0 -0.282842712474616 0.282842712474621 +0 + +0101000 ++3443 0 -3410 0 * +Ed + 1e-07 1 1 0 +1 702 0 -0.282842712496923 0.282842712496918 +2 1668 326 0 -0.282842712496923 0.282842712496918 +2 1669 338 0 -0.282842712496923 0.282842712496918 +4 G1 326 0 338 0 +0 + +0101000 ++3411 0 -3444 0 * +Ed + 1e-07 1 1 0 +1 703 0 -0.282842712440174 0.28284271251083 +2 1670 338 0 -0.282842712440174 0.28284271251083 +2 1671 340 0 -0.282842712440174 0.28284271251083 +4 G1 338 0 340 0 +0 + +0101000 ++3430 0 -3412 0 * +Ed + 1e-07 1 1 0 +1 704 0 -0.282842712474622 0.282842712474616 +2 1672 340 0 -0.282842712474622 0.282842712474616 +4 G1 340 0 346 0 +2 1673 346 0 -0.282842712474622 0.282842712474616 +0 + +0101000 ++3413 0 -3429 0 * +Ed + 1e-07 1 1 0 +1 705 0 -0.282842712474616 0.282842712474622 +2 1674 348 0 -0.282842712474616 0.282842712474622 +4 G1 346 0 348 0 +2 1675 346 0 -0.282842712474616 0.282842712474622 +0 + +0101000 ++3423 0 -3414 0 * +Ed + 1e-07 1 1 0 +1 706 0 -0.282842712488739 0.282842712451697 +2 1676 348 0 -0.282842712488739 0.282842712451697 +2 1677 347 0 -0.282842712488739 0.282842712451697 +4 G1 348 0 347 0 +0 + +0101000 ++3420 0 -3415 0 * +Ed + 1e-07 1 1 0 +1 707 0 -0.282842712488739 0.282842712488736 +2 1678 347 0 -0.282842712488739 0.282842712488736 +2 1679 344 0 -0.282842712488739 0.282842712488736 +4 G1 347 0 344 0 +0 + +0101000 ++3425 0 -3416 0 * +Ed + 1e-07 1 1 0 +1 708 0 -0.282842712474616 0.282842712474621 +2 1680 344 0 -0.282842712474616 0.282842712474621 +4 G1 344 0 342 0 +2 1681 342 0 -0.282842712474616 0.282842712474621 +0 + +0101000 ++3426 0 -3417 0 * +Ed + 1e-07 1 1 0 +1 709 0 -0.282842712474616 0.282842712474621 +2 1682 336 0 -0.282842712474616 0.282842712474621 +4 G1 342 0 336 0 +2 1683 342 0 -0.282842712474616 0.282842712474621 +0 + +0101000 ++3432 0 -3418 0 * +Ed + 1e-07 1 1 0 +1 710 0 0 3.14159265358979 +2 1684 349 0 0 3.14159265358979 +4 C0 314 0 349 0 +2 1685 314 0 0 3.14159265358979 +0 + +0101000 ++3402 0 -3401 0 * +Ed + 1e-07 1 1 0 +1 711 0 3.14159265358979 6.28318530717959 +2 1686 350 0 3.14159265358979 6.28318530717959 +4 C0 314 0 350 0 +2 1687 314 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3401 0 -3402 0 * +Ed + 1e-07 1 1 0 +1 712 0 0 3.14159265358979 +2 1688 349 0 0 3.14159265358979 +4 C0 349 0 351 0 +2 1689 351 0 0 3.14159265358979 +0 + +0101000 ++3400 0 -3399 0 * +Ed + 1e-07 1 1 0 +1 713 0 -0.600000000000001 0.600000000000001 +2 1690 349 0 -0.600000000000001 0.600000000000001 +2 1691 350 0 -0.600000000000001 0.600000000000001 +4 CN 349 0 350 0 +0 + +0101000 ++3399 0 -3401 0 * +Ed + 1e-07 1 1 0 +1 714 0 -0.600000000000001 0.600000000000001 +2 1692 349 0 -0.600000000000001 0.600000000000001 +2 1693 350 0 -0.600000000000001 0.600000000000001 +4 CN 349 0 350 0 +0 + +0101000 ++3400 0 -3402 0 * +Ed + 1e-07 1 1 0 +1 715 0 3.14159265358979 6.28318530717959 +2 1694 350 0 3.14159265358979 6.28318530717959 +4 C0 350 0 351 0 +2 1695 351 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3399 0 -3400 0 * +Ed + 1.00000971340767e-07 1 1 0 +1 716 0 3.14159265358979 5.78318530717869 +2 1696 352 0 3.14159265358979 5.78318530717869 +4 C0 351 0 352 0 +2 1697 351 0 3.14159265358979 5.78318530717869 +2 1698 353 118 3.14159265358979 5.78318530717869 +0 + +0101000 ++3398 0 -3397 118 * +Ed + 1.00000312638804e-07 1 1 0 +1 716 0 5.78318530717869 6.28318530717959 +2 1696 352 0 5.78318530717869 6.28318530717959 +4 C0 351 0 352 0 +2 1697 351 0 5.78318530717869 6.28318530717959 +2 1699 354 118 5.78318530717869 6.28318530717959 +0 + +0101000 ++3397 118 -3396 0 * +Ed + 1.00000966442607e-07 1 1 0 +1 717 0 0 2.6415926535889 +2 1700 355 0 0 2.6415926535889 +4 C0 351 0 355 0 +2 1701 351 0 0 2.6415926535889 +2 1702 354 118 0 2.6415926535889 +0 + +0101000 ++3396 0 -3395 118 * +Ed + 1.00000312638804e-07 1 1 0 +1 717 0 2.6415926535889 3.14159265358979 +2 1700 355 0 2.6415926535889 3.14159265358979 +4 C0 351 0 355 0 +2 1701 351 0 2.6415926535889 3.14159265358979 +2 1703 353 118 2.6415926535889 3.14159265358979 +0 + +0101000 ++3395 118 -3398 0 * +Ed + 1e-07 1 1 0 +1 718 0 -10.5 -9.4999999935 +2 1704 259 0 -10.5 -9.4999999935 +4 G1 259 0 260 0 +2 1705 260 0 -10.5 -9.4999999935 +0 + +0101000 ++3528 0 -3394 0 * +Ed + 7.80304409749528e-06 1 1 0 +1 719 0 -10.5 -9.4999999935 +2 1706 259 0 -10.5 -9.4999999935 +2 1707 258 0 -10.5 -9.4999999935 +4 G1 259 0 258 0 +0 + +0101000 ++3529 0 -3393 0 * +Ed + 0.000371546529634028 1 1 0 +1 720 0 0 25.1995289729 +2 1708 259 0 0 25.1995289729 +4 C0 259 0 301 0 +2 1709 301 0 0 25.1995289729 +0 + +0101000 ++3394 0 -3393 0 * +Ed + 1e-07 1 1 0 +1 721 0 -10.5 -9.4999999935 +2 1710 261 0 -10.5 -9.4999999935 +4 G1 261 0 262 0 +0 + +0101000 ++3526 0 -3392 0 * +Ed + 1e-07 1 1 0 +1 722 0 -10.5 -9.4999999935 +2 1711 261 0 -10.5 -9.4999999935 +4 G1 261 0 260 0 +2 1712 260 0 -10.5 -9.4999999935 +0 + +0101000 ++3527 0 -3391 0 * +Ed + 0.0029973161977681 1 1 0 +1 723 0 2.36494886716e-12 126.615135948 +2 1713 261 0 2.36494886716e-12 126.615135948 +4 C0 261 0 301 0 +2 1714 301 0 2.36494886716e-12 126.615135948 +0 + +0101000 ++3392 0 -3391 0 * +Ed + 1e-07 1 1 0 +1 724 0 -19 -2.5000000055 +2 1715 356 0 -19 -2.5000000055 +4 G1 356 0 357 0 +2 1716 357 0 -19 -2.5000000055 +0 + +0101000 ++3390 117 -3389 0 * +Ed + 1.00000931000804e-07 1 1 0 +1 725 0 1.5707963267949 2.35619449019234 +2 1717 356 0 1.5707963267949 2.35619449019234 +4 C0 356 0 358 0 +2 1718 358 0 1.5707963267949 2.35619449019234 +2 1719 359 119 1.5707963267949 2.35619449019234 +2 1720 360 119 1.5707963267949 2.35619449019234 +0 + +0101000 ++3390 117 -3388 117 * +Ed + 1e-07 1 1 0 +1 726 0 -19 -2.5000000055 +2 1721 356 0 -19 -2.5000000055 +4 G1 356 0 361 0 +2 1722 361 0 -19 -2.5000000055 +0 + +0101000 ++3388 117 -3387 0 * +Ed + 1e-07 1 1 0 +1 727 0 1.5707963267949 2.35619449019234 +2 1723 356 0 1.5707963267949 2.35619449019234 +4 C0 356 0 362 0 +2 1724 362 0 1.5707963267949 2.35619449019234 +0 + +0101000 ++3389 0 -3387 0 * +Ed + 1.00000909938683e-07 1 1 0 +1 728 0 -32.8489256471 32.8491740574 +4 C0 357 0 358 0 +2 1725 358 0 -32.8489256471 32.8491740574 +2 1726 357 0 -32.8489256471 32.8491740574 +2 1727 360 119 -32.8489256471 32.8491740574 +0 + +0101000 ++3386 117 -3390 117 * +Ed + 1e-07 1 1 0 +1 729 0 -8.2499999973 8.2499999972 +2 1728 363 0 -8.2499999973 8.2499999972 +4 G1 357 0 363 0 +2 1729 357 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3386 117 -3385 0 * +Ed + 1e-07 1 1 0 +1 730 0 -32.8489256471 32.8491740574 +4 C0 357 0 362 0 +2 1730 362 0 -32.8489256471 32.8491740574 +2 1731 357 0 -32.8489256471 32.8491740574 +0 + +0101000 ++3385 0 -3389 0 * +Ed + 1e-07 1 1 0 +1 731 0 -0.500000003300002 0.5000000032 +2 1732 254 0 -0.500000003300002 0.5000000032 +4 G1 253 0 254 0 +2 1733 253 0 -0.500000003300002 0.5000000032 +0 + +0101000 ++3384 0 -3534 0 * +Ed + 1e-07 1 1 0 +1 732 0 -54.499751589699 54.500000000001 +4 C0 253 0 301 0 +2 1734 301 0 -54.499751589699 54.500000000001 +2 1735 253 0 -54.499751589699 54.500000000001 +0 + +0101000 ++3384 0 -3485 0 * +Ed + 1e-07 1 1 0 +1 733 0 -8.2499999973 8.2499999972 +4 C0 361 0 364 0 +2 1736 361 0 -8.2499999973 8.2499999972 +2 1737 364 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3383 117 -3382 0 * +Ed + 1.00000198951966e-07 1 1 0 +1 734 0 -3.58578643758061 3.58578643765132 +4 C0 361 0 358 0 +2 1738 358 0 -3.58578643758061 3.58578643765132 +2 1739 361 0 -3.58578643758061 3.58578643765132 +2 1740 360 119 -3.58578643758061 3.58578643765132 +0 + +0101000 ++3383 117 -3388 117 * +Ed + 1e-07 1 1 0 +1 735 0 -3.58578643758061 3.58578643765132 +4 C0 361 0 362 0 +2 1741 362 0 -3.58578643758061 3.58578643765132 +2 1742 361 0 -3.58578643758061 3.58578643765132 +0 + +0101000 ++3382 0 -3387 0 * +Ed + 1e-07 1 1 0 +1 736 0 -19 -2.5000000055 +2 1743 365 0 -19 -2.5000000055 +4 G1 365 0 366 0 +2 1744 366 0 -19 -2.5000000055 +0 + +0101000 ++3381 117 -3380 0 * +Ed + 1.00000909605717e-07 1 1 0 +1 737 0 3.92699081699431 4.71238898038469 +2 1745 365 0 3.92699081699431 4.71238898038469 +4 C0 365 0 358 0 +2 1746 358 0 3.92699081699431 4.71238898038469 +2 1747 367 119 3.92699081699431 4.71238898038469 +2 1748 360 119 3.92699081699431 4.71238898038469 +0 + +0101000 ++3381 117 -3379 117 * +Ed + 1e-07 1 1 0 +1 738 0 -19 -2.5000000055 +2 1749 365 0 -19 -2.5000000055 +4 G1 365 0 368 0 +2 1750 368 0 -19 -2.5000000055 +0 + +0101000 ++3379 117 -3378 0 * +Ed + 1e-07 1 1 0 +1 739 0 3.92699081699431 4.71238898038469 +2 1751 365 0 3.92699081699431 4.71238898038469 +4 C0 365 0 362 0 +2 1752 362 0 3.92699081699431 4.71238898038469 +0 + +0101000 ++3380 0 -3378 0 * +Ed + 1e-07 1 1 0 +1 740 0 -17.4 17.4 +4 C0 260 0 301 0 +2 1753 301 0 -17.4 17.4 +2 1754 260 0 -17.4 17.4 +0 + +0101000 ++3391 0 -3394 0 * +Ed + 1e-07 1 1 0 +1 741 0 -8.2499999973 8.2499999972 +2 1755 369 0 -8.2499999973 8.2499999972 +4 G1 368 0 369 0 +2 1756 368 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3377 117 -3376 0 * +Ed + 1.00000142108547e-07 1 1 0 +1 742 0 -10.07893218817 10.07893218813 +4 C0 368 0 358 0 +2 1757 358 0 -10.07893218817 10.07893218813 +2 1758 368 0 -10.07893218817 10.07893218813 +2 1759 360 119 -10.07893218817 10.07893218813 +0 + +0101000 ++3379 117 -3377 117 * +Ed + 1e-07 1 1 0 +1 743 0 -10.07893218817 10.07893218813 +4 C0 368 0 362 0 +2 1760 362 0 -10.07893218817 10.07893218813 +2 1761 368 0 -10.07893218817 10.07893218813 +0 + +0101000 ++3378 0 -3376 0 * +Ed + 1.00000909605717e-07 1 1 0 +1 744 0 -3.58578643772203 3.58578643758061 +4 C0 366 0 358 0 +2 1762 358 0 -3.58578643772203 3.58578643758061 +2 1763 366 0 -3.58578643772203 3.58578643758061 +2 1764 360 119 -3.58578643772203 3.58578643758061 +0 + +0101000 ++3381 117 -3375 117 * +Ed + 1e-07 1 1 0 +1 745 0 -8.2499999973 8.2499999972 +4 C0 366 0 370 0 +2 1765 366 0 -8.2499999973 8.2499999972 +2 1766 370 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3375 117 -3374 0 * +Ed + 1e-07 1 1 0 +1 746 0 -3.58578643772203 3.58578643758061 +4 C0 366 0 362 0 +2 1767 362 0 -3.58578643772203 3.58578643758061 +2 1768 366 0 -3.58578643772203 3.58578643758061 +0 + +0101000 ++3380 0 -3374 0 * +Ed + 1e-07 1 1 0 +1 747 0 -21.07275669483 21.07275669488 +4 C0 371 0 362 0 +2 1769 362 0 -21.07275669483 21.07275669488 +2 1770 371 0 -21.07275669483 21.07275669488 +0 + +0101000 ++3373 0 -3372 0 * +Ed + 1e-07 1 1 0 +1 748 0 -8.2499999973 8.2499999972 +4 C0 371 0 370 0 +2 1771 371 0 -8.2499999973 8.2499999972 +2 1772 370 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3371 117 -3372 0 * +Ed + 1.00000156319402e-07 1 1 0 +1 749 0 -21.07275669483 21.07275669488 +4 C0 371 0 358 0 +2 1773 358 0 -21.07275669483 21.07275669488 +2 1774 371 0 -21.07275669483 21.07275669488 +2 1775 360 119 -21.07275669483 21.07275669488 +0 + +0101000 ++3370 117 -3371 117 * +Ed + 1e-07 1 1 0 +1 750 0 -8.2499999973 8.2499999972 +2 1776 372 0 -8.2499999973 8.2499999972 +4 G1 371 0 372 0 +2 1777 371 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3370 117 -3373 0 * +Ed + 0.000147176562999176 1 1 0 +1 751 0 0 42.1355454582 +2 1778 372 0 0 42.1355454582 +4 C0 372 0 358 0 +2 1779 358 0 0 42.1355454582 +2 1780 373 119 0 42.1355454582 +2 1781 360 119 0 42.1355454582 +0 + +0101000 ++3370 117 -3369 117 * +Ed + 2.29990299937802e-05 1 1 0 +1 752 0 -18 -1.5000000055 +2 1782 372 0 -18 -1.5000000055 +4 G1 372 0 374 0 +2 1783 374 0 -18 -1.5000000055 +0 + +0101000 ++3369 117 -3368 0 * +Ed + 0.000144415167202496 1 1 0 +1 753 0 0 42.1355454676 +2 1784 372 0 0 42.1355454676 +4 C0 372 0 362 0 +2 1785 362 0 0 42.1355454676 +0 + +0101000 ++3373 0 -3368 0 * +Ed + 1e-07 1 1 0 +1 754 0 -1 1 +4 C0 262 0 301 0 +2 1786 301 0 -1 1 +0 + +0101000 ++3367 0 -3392 0 * +Ed + 1e-07 1 1 0 +1 755 0 -0.500000003300002 0.5000000032 +2 1787 250 0 -0.500000003300002 0.5000000032 +4 G1 262 0 250 0 +0 + +0101000 ++3367 0 -3537 0 * +Ed + 1e-07 1 1 0 +1 756 0 -1.0256020647 1.0256020751 +4 C0 374 0 362 0 +2 1788 362 0 -1.0256020647 1.0256020751 +2 1789 374 0 -1.0256020647 1.0256020751 +0 + +0101000 ++3366 0 -3368 0 * +Ed + 1.00000198951966e-07 1 1 0 +1 757 0 -1.0256020699 1.0256020699 +4 C0 374 0 358 0 +2 1790 358 0 -1.0256020699 1.0256020699 +2 1791 374 0 -1.0256020699 1.0256020699 +2 1792 360 119 -1.0256020699 1.0256020699 +0 + +0101000 ++3365 117 -3369 117 * +Ed + 1e-07 1 1 0 +1 758 0 -8.2499999973 8.2499999972 +2 1793 375 0 -8.2499999973 8.2499999972 +4 G1 374 0 375 0 +2 1794 374 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3365 117 -3366 0 * +Ed + 1e-07 1 1 0 +1 759 0 -15.394965591 15.3949655911 +4 C0 370 0 362 0 +2 1795 362 0 -15.394965591 15.3949655911 +2 1796 370 0 -15.394965591 15.3949655911 +0 + +0101000 ++3372 0 -3374 0 * +Ed + 1.00000184741111e-07 1 1 0 +1 760 0 -15.394965591 15.3949655911 +4 C0 370 0 358 0 +2 1797 358 0 -15.394965591 15.3949655911 +2 1798 370 0 -15.394965591 15.3949655911 +2 1799 360 119 -15.394965591 15.3949655911 +0 + +0101000 ++3371 117 -3375 117 * +Ed + 7.80303701318251e-06 1 1 0 +1 761 0 -18 -1.5000000055 +2 1800 369 0 -18 -1.5000000055 +2 1801 376 0 -18 -1.5000000055 +4 G1 369 0 376 0 +0 + +0101000 ++3364 117 -3363 0 * +Ed + 0.000550097116054104 1 1 0 +1 762 0 0 25.1995267341 +2 1802 369 0 0 25.1995267341 +4 C0 369 0 358 0 +2 1803 358 0 0 25.1995267341 +2 1804 377 119 0 25.1995267341 +2 1805 360 119 0 25.1995267341 +0 + +0101000 ++3364 117 -3377 117 * +Ed + 0.000371546416342552 1 1 0 +1 763 0 0 25.1995267348 +2 1806 369 0 0 25.1995267348 +4 C0 369 0 362 0 +2 1807 362 0 0 25.1995267348 +0 + +0101000 ++3363 0 -3376 0 * +Ed + 1e-07 1 1 0 +1 764 0 -13.5 11.8 +2 1808 352 0 -13.5 11.8 +2 1809 355 0 -13.5 11.8 +4 CN 352 0 355 0 +0 + +0101000 ++3362 117 -3396 0 * +Ed + 1e-07 1 1 0 +1 765 0 -13.5 11.8 +2 1810 352 0 -13.5 11.8 +2 1811 355 0 -13.5 11.8 +4 CN 352 0 355 0 +0 + +0101000 ++3361 117 -3398 0 * +Ed + 1.00000227373675e-07 1 1 0 +1 766 0 3.14159265358979 6.28318530717959 +2 1812 352 0 3.14159265358979 6.28318530717959 +4 C0 352 0 358 0 +2 1813 358 0 3.14159265358979 6.28318530717959 +2 1814 378 119 3.14159265358979 6.28318530717959 +2 1815 360 119 3.14159265358979 6.28318530717959 +0 + +0101000 ++3361 117 -3362 117 * +Ed + 1.00000227373675e-07 1 1 0 +1 767 0 0 3.14159265358979 +2 1816 355 0 0 3.14159265358979 +4 C0 355 0 358 0 +2 1817 358 0 0 3.14159265358979 +2 1818 379 119 0 3.14159265358979 +2 1819 360 119 0 3.14159265358979 +0 + +0101000 ++3362 117 -3361 117 * +Ed + 1e-07 1 1 0 +1 768 0 -18 7.3 +2 1820 306 0 -18 7.3 +2 1821 307 0 -18 7.3 +4 CN 306 0 307 0 +0 + +0101000 ++3360 117 -3478 0 * +Ed + 1e-07 1 1 0 +1 769 0 -18 7.3 +2 1822 306 0 -18 7.3 +2 1823 307 0 -18 7.3 +4 CN 306 0 307 0 +0 + +0101000 ++3359 117 -3479 0 * +Ed + 1.00000284217094e-07 1 1 0 +1 770 0 0 3.14159265358979 +2 1824 306 0 0 3.14159265358979 +4 C0 306 0 358 0 +2 1825 358 0 0 3.14159265358979 +2 1826 380 119 0 3.14159265358979 +2 1827 360 119 0 3.14159265358979 +0 + +0101000 ++3359 117 -3360 117 * +Ed + 1.00000284217094e-07 1 1 0 +1 771 0 3.14159265358979 6.28318530717959 +2 1828 307 0 3.14159265358979 6.28318530717959 +4 C0 307 0 358 0 +2 1829 358 0 3.14159265358979 6.28318530717959 +2 1830 381 119 3.14159265358979 6.28318530717959 +2 1831 360 119 3.14159265358979 6.28318530717959 +0 + +0101000 ++3360 117 -3359 117 * +Ed + 1e-07 1 1 0 +1 772 0 -0.500000003300002 0.5000000032 +2 1832 258 0 -0.500000003300002 0.5000000032 +4 G1 257 0 258 0 +0 + +0101000 ++3358 0 -3530 0 * +Ed + 1e-07 1 1 0 +1 773 0 -0.500000003300002 0.5000000032 +2 1833 256 0 -0.500000003300002 0.5000000032 +4 G1 257 0 256 0 +0 + +0101000 ++3357 0 -3531 0 * +Ed + 1e-07 1 1 0 +1 774 0 -14.5100701232603 14.5100701232189 +4 C0 257 0 301 0 +2 1834 301 0 -14.5100701232603 14.5100701232189 +0 + +0101000 ++3358 0 -3357 0 * +Ed + 1e-07 1 1 0 +1 775 0 -8.2499999973 8.2499999972 +2 1835 382 0 -8.2499999973 8.2499999972 +4 G1 383 0 382 0 +2 1836 383 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3356 117 -3355 0 * +Ed + 1.00000014210855e-07 1 1 0 +1 776 0 -14.5100701232603 14.5100701232189 +4 C0 383 0 358 0 +2 1837 358 0 -14.5100701232603 14.5100701232189 +2 1838 383 0 -14.5100701232603 14.5100701232189 +2 1839 360 119 -14.5100701232603 14.5100701232189 +0 + +0101000 ++3354 117 -3356 117 * +Ed + 1e-07 1 1 0 +1 777 0 -8.2499999973 8.2499999972 +2 1840 376 0 -8.2499999973 8.2499999972 +4 G1 383 0 376 0 +2 1841 383 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3354 117 -3353 0 * +Ed + 1e-07 1 1 0 +1 778 0 -14.5100701232603 14.5100701232189 +4 C0 383 0 362 0 +2 1842 362 0 -14.5100701232603 14.5100701232189 +2 1843 383 0 -14.5100701232603 14.5100701232189 +0 + +0101000 ++3353 0 -3355 0 * +Ed + 1.00000056843419e-07 1 1 0 +1 779 0 1.08210546427801 1.37058478051409 +2 1844 376 0 1.08210546427801 1.37058478051409 +4 C0 376 0 358 0 +2 1845 358 0 1.08210546427801 1.37058478051409 +2 1846 384 119 1.08210546427801 1.37058478051409 +2 1847 360 119 1.08210546427801 1.37058478051409 +0 + +0101000 ++3354 117 -3364 117 * +Ed + 1e-07 1 1 0 +1 780 0 1.08210546427801 1.37058478051409 +2 1848 376 0 1.08210546427801 1.37058478051409 +4 C0 376 0 362 0 +2 1849 362 0 1.08210546427801 1.37058478051409 +0 + +0101000 ++3353 0 -3363 0 * +Ed + 1e-07 1 1 0 +1 781 0 1.08210546427801 1.37058476272254 +2 1850 258 0 1.08210546427801 1.37058476272254 +4 C0 258 0 301 0 +2 1851 301 0 1.08210546427801 1.37058476272254 +0 + +0101000 ++3358 0 -3393 0 * +Ed + 1e-07 1 1 0 +1 782 0 -43 -26.5000000055 +2 1852 382 0 -43 -26.5000000055 +4 G1 382 0 385 0 +2 1853 385 0 -43 -26.5000000055 +0 + +0101000 ++3352 117 -3351 0 * +Ed + 1.00000227373675e-07 1 1 0 +1 783 0 6.28318075530153 7.36529251234008 +2 1854 382 0 6.28318075530153 7.36529251234008 +4 C0 382 0 358 0 +2 1855 358 0 6.28318075530153 7.36529251234008 +2 1856 386 119 6.28318075530153 7.36529251234008 +2 1857 360 119 6.28318075530153 7.36529251234008 +0 + +0101000 ++3352 117 -3356 117 * +Ed + 1e-07 1 1 0 +1 784 0 6.28318075530153 7.36529251234008 +2 1858 382 0 6.28318075530153 7.36529251234008 +4 C0 382 0 362 0 +2 1859 362 0 6.28318075530153 7.36529251234008 +0 + +0101000 ++3351 0 -3355 0 * +Ed + 1e-07 1 1 0 +1 785 0 0.999999993499998 2 +2 1860 256 0 0.999999993499998 2 +4 G1 256 0 255 0 +2 1861 255 0 0.999999993499998 2 +0 + +0101000 ++3350 0 -3532 0 * +Ed + 1e-07 1 1 0 +1 786 0 6.28318075530153 7.36529251234008 +2 1862 256 0 6.28318075530153 7.36529251234008 +4 C0 256 0 301 0 +2 1863 301 0 6.28318075530153 7.36529251234008 +0 + +0101000 ++3350 0 -3357 0 * +Ed + 1e-07 1 1 0 +1 787 0 -5.00074082596 5.00074082596 +4 C0 385 0 362 0 +2 1864 362 0 -5.00074082596 5.00074082596 +2 1865 385 0 -5.00074082596 5.00074082596 +0 + +0101000 ++3351 0 -3349 0 * +Ed + 1e-07 1 1 0 +1 788 0 -8.2499999973 8.2499999972 +2 1866 363 0 -8.2499999973 8.2499999972 +4 G1 385 0 363 0 +2 1867 385 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3348 117 -3349 0 * +Ed + 1.00000184741111e-07 1 1 0 +1 789 0 -5.00074082596 5.00074082596 +4 C0 385 0 358 0 +2 1868 358 0 -5.00074082596 5.00074082596 +2 1869 385 0 -5.00074082596 5.00074082596 +2 1870 360 119 -5.00074082596 5.00074082596 +0 + +0101000 ++3352 117 -3348 117 * +Ed + 1e-07 1 1 0 +1 790 0 -5.00074082596 5.00074082596 +4 C0 255 0 301 0 +2 1871 301 0 -5.00074082596 5.00074082596 +2 1872 255 0 -5.00074082596 5.00074082596 +0 + +0101000 ++3350 0 -3347 0 * +Ed + 1e-07 1 1 0 +1 791 0 -0.500000003300002 0.5000000032 +2 1873 254 0 -0.500000003300002 0.5000000032 +4 G1 255 0 254 0 +2 1874 255 0 -0.500000003300002 0.5000000032 +0 + +0101000 ++3347 0 -3533 0 * +Ed + 1.00000326849658e-07 1 1 0 +1 792 0 4.71238898038469 6.2831777796514 +2 1875 363 0 4.71238898038469 6.2831777796514 +4 C0 363 0 358 0 +2 1876 358 0 4.71238898038469 6.2831777796514 +2 1877 387 119 4.71238898038469 6.2831777796514 +2 1878 360 119 4.71238898038469 6.2831777796514 +0 + +0101000 ++3386 117 -3348 117 * +Ed + 1e-07 1 1 0 +1 793 0 4.71238898038469 6.2831777796514 +2 1879 363 0 4.71238898038469 6.2831777796514 +4 C0 363 0 362 0 +2 1880 362 0 4.71238898038469 6.2831777796514 +0 + +0101000 ++3385 0 -3349 0 * +Ed + 1e-07 1 1 0 +1 794 0 4.71238898038469 6.2831777796514 +2 1881 254 0 4.71238898038469 6.2831777796514 +4 C0 254 0 301 0 +2 1882 301 0 4.71238898038469 6.2831777796514 +0 + +0101000 ++3384 0 -3347 0 * +Ed + 1.00000925343818e-07 1 1 0 +1 795 0 3.14160018112023 3.92699081698724 +2 1883 375 0 3.14160018112023 3.92699081698724 +4 C0 375 0 358 0 +2 1884 358 0 3.14160018112023 3.92699081698724 +2 1885 388 119 3.14160018112023 3.92699081698724 +2 1886 360 119 3.14160018112023 3.92699081698724 +0 + +0101000 ++3365 117 -3346 117 * +Ed + 1e-07 1 1 0 +1 796 0 -43 -26.5000000055 +2 1887 375 0 -43 -26.5000000055 +4 G1 375 0 389 0 +2 1888 389 0 -43 -26.5000000055 +0 + +0101000 ++3346 117 -3345 0 * +Ed + 1e-07 1 1 0 +1 797 0 3.14160018112023 3.92699081698724 +2 1889 375 0 3.14160018112023 3.92699081698724 +4 C0 375 0 362 0 +2 1890 362 0 3.14160018112023 3.92699081698724 +0 + +0101000 ++3366 0 -3345 0 * +Ed + 1e-07 1 1 0 +1 798 0 3.14160018112023 3.92699081698724 +2 1891 250 0 3.14160018112023 3.92699081698724 +4 C0 250 0 301 0 +2 1892 301 0 3.14160018112023 3.92699081698724 +0 + +0101000 ++3367 0 -3484 0 * +Ed + 1e-07 1 1 0 +1 799 0 -18 18 +4 C0 364 0 362 0 +2 1893 362 0 -18 18 +2 1894 364 0 -18 18 +0 + +0101000 ++3382 0 -3344 0 * +Ed + 1e-07 1 1 0 +1 800 0 -8.2499999973 8.2499999972 +4 C0 364 0 389 0 +2 1895 364 0 -8.2499999973 8.2499999972 +2 1896 389 0 -8.2499999973 8.2499999972 +0 + +0101000 ++3343 117 -3344 0 * +Ed + 1.00000170530257e-07 1 1 0 +1 801 0 -18 18 +4 C0 364 0 358 0 +2 1897 358 0 -18 18 +2 1898 364 0 -18 18 +2 1899 360 119 -18 18 +0 + +0101000 ++3383 117 -3343 117 * +Ed + 1.00000113686838e-07 1 1 0 +1 802 0 -12.077212795244 12.0772127953148 +4 C0 389 0 358 0 +2 1900 358 0 -12.077212795244 12.0772127953148 +2 1901 389 0 -12.077212795244 12.0772127953148 +2 1902 360 119 -12.077212795244 12.0772127953148 +0 + +0101000 ++3346 117 -3343 117 * +Ed + 1e-07 1 1 0 +1 803 0 -12.077212795244 12.0772127953148 +4 C0 389 0 362 0 +2 1903 362 0 -12.077212795244 12.0772127953148 +2 1904 389 0 -12.077212795244 12.0772127953148 +0 + +0101000 ++3345 0 -3344 0 * +Ed + 1e-07 1 1 0 +1 804 0 -43 -30.1 +2 1905 282 0 -43 -30.1 +2 1906 281 0 -43 -30.1 +4 CN 282 0 281 0 +0 + +0101000 ++3342 117 -3505 0 * +Ed + 1e-07 1 1 0 +1 805 0 -43 -30.1 +2 1907 282 0 -43 -30.1 +2 1908 281 0 -43 -30.1 +4 CN 282 0 281 0 +0 + +0101000 ++3341 117 -3504 0 * +Ed + 1.00000284217094e-07 1 1 0 +1 806 0 3.14159265358979 6.28318530717959 +2 1909 282 0 3.14159265358979 6.28318530717959 +4 C0 282 0 358 0 +2 1910 358 0 3.14159265358979 6.28318530717959 +2 1911 390 119 3.14159265358979 6.28318530717959 +2 1912 360 119 3.14159265358979 6.28318530717959 +0 + +0101000 ++3341 117 -3342 117 * +Ed + 1.00000284217094e-07 1 1 0 +1 807 0 0 3.14159265358979 +2 1913 281 0 0 3.14159265358979 +4 C0 281 0 358 0 +2 1914 358 0 0 3.14159265358979 +2 1915 391 119 0 3.14159265358979 +2 1916 360 119 0 3.14159265358979 +0 + +0101000 ++3342 117 -3341 117 * +Ed + 1e-07 1 1 0 +1 808 0 -43 -30.1 +2 1917 276 0 -43 -30.1 +2 1918 275 0 -43 -30.1 +4 CN 276 0 275 0 +0 + +0101000 ++3340 117 -3511 0 * +Ed + 1e-07 1 1 0 +1 809 0 -43 -30.1 +2 1919 276 0 -43 -30.1 +2 1920 275 0 -43 -30.1 +4 CN 276 0 275 0 +0 + +0101000 ++3339 117 -3510 0 * +Ed + 1.00000284217094e-07 1 1 0 +1 810 0 3.14159265358979 6.28318530717959 +2 1921 276 0 3.14159265358979 6.28318530717959 +4 C0 276 0 358 0 +2 1922 358 0 3.14159265358979 6.28318530717959 +2 1923 392 119 3.14159265358979 6.28318530717959 +2 1924 360 119 3.14159265358979 6.28318530717959 +0 + +0101000 ++3339 117 -3340 117 * +Ed + 1.00000284217094e-07 1 1 0 +1 811 0 0 3.14159265358979 +2 1925 275 0 0 3.14159265358979 +4 C0 275 0 358 0 +2 1926 358 0 0 3.14159265358979 +2 1927 393 119 0 3.14159265358979 +2 1928 360 119 0 3.14159265358979 +0 + +0101000 ++3340 117 -3339 117 * +Ed + 1e-07 1 1 0 +1 812 0 -4.06170644753603 -3.04627983564482 +2 1929 245 0 -4.06170644753603 -3.04627983564482 +2 1930 247 0 -4.06170644753603 -3.04627983564482 +4 CN 245 0 247 0 +0 + +0101000 ++3541 0 -3338 117 * +Ed + 1e-07 1 1 0 +1 813 0 -4.06170644753603 -3.04627983564482 +2 1931 245 0 -4.06170644753603 -3.04627983564482 +2 1932 247 0 -4.06170644753603 -3.04627983564482 +4 CN 245 0 247 0 +0 + +0101000 ++3542 0 -3337 117 * +Ed + 1.00000911269327e-07 1 1 0 +1 814 0 2.64159265359188 5.78318530718167 +2 1933 245 0 2.64159265359188 5.78318530718167 +4 C0 245 0 358 0 +2 1934 358 0 2.64159265359188 5.78318530718167 +2 1935 394 119 2.64159265359188 5.78318530718167 +2 1936 360 119 2.64159265359188 5.78318530718167 +0 + +0101000 ++3338 117 -3337 117 * +Ed + 1.00000911269327e-07 1 1 0 +1 815 0 5.78318530718167 8.92477796077147 +2 1937 247 0 5.78318530718167 8.92477796077147 +4 C0 247 0 358 0 +2 1938 358 0 5.78318530718167 8.92477796077147 +2 1939 395 119 5.78318530718167 8.92477796077147 +2 1940 360 119 5.78318530718167 8.92477796077147 +0 + +0101000 ++3337 117 -3338 117 * +Ed + 1e-07 1 1 0 +1 816 0 3.36936457992371 6.02216841770877 +2 1941 396 0 3.36936457992371 6.02216841770877 +4 C0 396 0 397 0 +2 1942 397 0 3.36936457992371 6.02216841770877 +0 + +0101000 ++3336 0 -3335 0 * +Ed + 1.40961161397861e-05 1 1 0 +1 817 0 -3 3 +2 1943 396 0 -3 3 +2 1944 398 0 -3 3 +4 G1 396 0 398 0 +0 + +0101000 ++3334 0 -3336 0 * +Ed + 1.00000312638804e-07 1 1 0 +1 818 0 3.36936457992371 6.02216841770877 +2 1945 396 0 3.36936457992371 6.02216841770877 +4 C0 396 0 358 0 +2 1946 358 0 3.36936457992371 6.02216841770877 +2 1947 360 119 3.36936457992371 6.02216841770877 +0 + +0101000 ++3334 0 -3333 0 * +Ed + 8.25197284423225e-06 1 1 0 +1 819 0 -3 3 +2 1948 396 0 -3 3 +2 1949 399 0 -3 3 +4 G1 396 0 399 0 +0 + +0101000 ++3333 0 -3335 0 * +Ed + 1e-07 1 1 0 +1 820 0 0.261014556239196 1.57080350359134 +2 1950 399 0 0.261014556239196 1.57080350359134 +4 C0 399 0 397 0 +2 1951 397 0 0.261014556239196 1.57080350359134 +0 + +0101000 ++3335 0 -3332 0 * +Ed + 1.50991509780834e-06 1 1 0 +1 821 0 -3 3 +2 1952 399 0 -3 3 +4 G1 399 0 400 0 +2 1953 400 0 -3 3 +0 + +0101000 ++3332 0 -3331 0 * +Ed + 1.00000198951966e-07 1 1 0 +1 822 0 0.261014556239196 1.57080350359134 +2 1954 399 0 0.261014556239196 1.57080350359134 +4 C0 399 0 358 0 +2 1955 358 0 0.261014556239196 1.57080350359134 +2 1956 360 119 0.261014556239196 1.57080350359134 +0 + +0101000 ++3333 0 -3331 0 * +Ed + 1.47353993359151e-05 1 1 0 +1 823 0 -3 3 +2 1957 401 0 -3 3 +2 1958 402 0 -3 3 +4 G1 401 0 402 0 +0 + +0101000 ++3330 0 -3329 0 * +Ed + 1e-07 1 1 0 +1 824 0 4.97340472328349 7.62620808526193 +2 1959 401 0 4.97340472328349 7.62620808526193 +4 C0 401 0 397 0 +2 1960 397 0 4.97340472328349 7.62620808526193 +0 + +0101000 ++3328 0 -3329 0 * +Ed + 2.41813512096272e-06 1 1 0 +1 825 0 -3 3 +2 1961 401 0 -3 3 +2 1962 403 0 -3 3 +4 G1 401 0 403 0 +0 + +0101000 ++3327 0 -3328 0 * +Ed + 1.00000971340767e-07 1 1 0 +1 826 0 4.97340472328349 7.62620808526193 +2 1963 401 0 4.97340472328349 7.62620808526193 +4 C0 401 0 358 0 +2 1964 358 0 4.97340472328349 7.62620808526193 +2 1965 360 119 4.97340472328349 7.62620808526193 +0 + +0101000 ++3327 0 -3330 0 * +Ed + 2.23812238144012e-06 1 1 0 +1 827 0 -3 3 +2 1966 403 0 -3 3 +4 G1 403 0 404 0 +2 1967 404 0 -3 3 +0 + +0101000 ++3326 0 -3325 0 * +Ed + 1e-07 1 1 0 +1 828 0 4.71238684952582 6.02216753358045 +2 1968 403 0 4.71238684952582 6.02216753358045 +4 C0 403 0 397 0 +2 1969 397 0 4.71238684952582 6.02216753358045 +0 + +0101000 ++3326 0 -3328 0 * +Ed + 1.00000213162821e-07 1 1 0 +1 829 0 4.71238684952582 6.02216753358045 +2 1970 403 0 4.71238684952582 6.02216753358045 +4 C0 403 0 358 0 +2 1971 358 0 4.71238684952582 6.02216753358045 +2 1972 360 119 4.71238684952582 6.02216753358045 +0 + +0101000 ++3325 0 -3327 0 * +Ed + 1e-07 1 1 0 +1 830 0 -9.112829280824 9.112829280866 +4 C0 404 0 397 0 +2 1973 397 0 -9.112829280824 9.112829280866 +2 1974 404 0 -9.112829280824 9.112829280866 +0 + +0101000 ++3324 0 -3326 0 * +Ed + 1e-07 1 1 0 +1 831 0 -3 3 +2 1975 405 0 -3 3 +4 G1 404 0 405 0 +2 1976 404 0 -3 3 +0 + +0101000 ++3324 0 -3323 0 * +Ed + 1.00000976421199e-07 1 1 0 +1 832 0 -9.112829280824 9.112829280866 +4 C0 404 0 358 0 +2 1977 358 0 -9.112829280824 9.112829280866 +2 1978 404 0 -9.112829280824 9.112829280866 +2 1979 360 119 -9.112829280824 9.112829280866 +0 + +0101000 ++3323 0 -3325 0 * +Ed + 4.85179791956173e-05 1 1 0 +1 833 0 -3 3 +2 1980 405 0 -3 3 +2 1981 406 0 -3 3 +4 G1 405 0 406 0 +0 + +0101000 ++3322 0 -3321 0 * +Ed + 1e-07 1 1 0 +1 834 0 5.62339632756916 6.28318555497329 +2 1982 405 0 5.62339632756916 6.28318555497329 +4 C0 405 0 397 0 +2 1983 397 0 5.62339632756916 6.28318555497329 +0 + +0101000 ++3322 0 -3324 0 * +Ed + 1.00001346361305e-07 1 1 0 +1 835 0 5.62339632756916 6.28318555497329 +2 1984 405 0 5.62339632756916 6.28318555497329 +4 C0 405 0 358 0 +2 1985 358 0 5.62339632756916 6.28318555497329 +2 1986 360 119 5.62339632756916 6.28318555497329 +0 + +0101000 ++3321 0 -3323 0 * +Ed + 1e-07 1 1 0 +1 836 0 5.76968060598598 8.51377241120863 +2 1987 406 0 5.76968060598598 8.51377241120863 +4 C0 406 0 397 0 +2 1988 397 0 5.76968060598598 8.51377241120863 +0 + +0101000 ++3320 0 -3322 0 * +Ed + 9.78915945777831e-05 1 1 0 +1 837 0 -3 3 +2 1989 406 0 -3 3 +2 1990 407 0 -3 3 +4 G1 406 0 407 0 +0 + +0101000 ++3319 0 -3320 0 * +Ed + 1.00000326849658e-07 1 1 0 +1 838 0 5.76968060598598 8.51377241120863 +2 1991 406 0 5.76968060598598 8.51377241120863 +4 C0 406 0 358 0 +2 1992 358 0 5.76968060598598 8.51377241120863 +2 1993 360 119 5.76968060598598 8.51377241120863 +0 + +0101000 ++3319 0 -3321 0 * +Ed + 1e-07 1 1 0 +1 839 0 2.26786938450668 4.19889026528999 +2 1994 407 0 2.26786938450668 4.19889026528999 +4 C0 407 0 397 0 +2 1995 397 0 2.26786938450668 4.19889026528999 +0 + +0101000 ++3318 0 -3320 0 * +Ed + 3.57702388541758e-06 1 1 0 +1 840 0 -3 3 +2 1996 407 0 -3 3 +2 1997 408 0 -3 3 +4 G1 407 0 408 0 +0 + +0101000 ++3317 0 -3318 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 841 0 2.26786938450668 4.19889026528999 +2 1998 407 0 2.26786938450668 4.19889026528999 +4 C0 407 0 358 0 +2 1999 358 0 2.26786938450668 4.19889026528999 +2 2000 360 119 2.26786938450668 4.19889026528999 +0 + +0101000 ++3317 0 -3319 0 * +Ed + 2.12502128371508e-07 1 1 0 +1 842 0 -3 3 +2 2001 408 0 -3 3 +4 G1 408 0 409 0 +2 2002 409 0 -3 3 +0 + +0101000 ++3316 0 -3315 0 * +Ed + 1e-07 1 1 0 +1 843 0 3.14159191774445 4.01532011888745 +2 2003 408 0 3.14159191774445 4.01532011888745 +4 C0 408 0 397 0 +2 2004 397 0 3.14159191774445 4.01532011888745 +0 + +0101000 ++3316 0 -3318 0 * +Ed + 1.00000227373675e-07 1 1 0 +1 844 0 3.14159191774445 4.01532011888745 +2 2005 408 0 3.14159191774445 4.01532011888745 +4 C0 408 0 358 0 +2 2006 358 0 3.14159191774445 4.01532011888745 +2 2007 360 119 3.14159191774445 4.01532011888745 +0 + +0101000 ++3315 0 -3317 0 * +Ed + 1.00000312638804e-07 1 1 0 +1 845 0 -5.9988333129 5.99883331295 +4 C0 409 0 358 0 +2 2008 358 0 -5.9988333129 5.99883331295 +2 2009 409 0 -5.9988333129 5.99883331295 +2 2010 360 119 -5.9988333129 5.99883331295 +0 + +0101000 ++3315 0 -3314 0 * +Ed + 1e-07 1 1 0 +1 846 0 -5.9988333129 5.99883331295 +4 C0 409 0 397 0 +2 2011 397 0 -5.9988333129 5.99883331295 +2 2012 409 0 -5.9988333129 5.99883331295 +0 + +0101000 ++3316 0 -3313 0 * +Ed + 2.05688140848502e-06 1 1 0 +1 847 0 -3 3 +2 2013 410 0 -3 3 +4 G1 409 0 410 0 +2 2014 409 0 -3 3 +0 + +0101000 ++3313 0 -3314 0 * +Ed + 2.61637537467713e-06 1 1 0 +1 848 0 -3 3 +2 2015 410 0 -3 3 +2 2016 411 0 -3 3 +4 G1 410 0 411 0 +0 + +0101000 ++3312 0 -3311 0 * +Ed + 1e-07 1 1 0 +1 849 0 0.26101778683788 1.57079847327706 +2 2017 410 0 0.26101778683788 1.57079847327706 +4 C0 410 0 397 0 +2 2018 397 0 0.26101778683788 1.57079847327706 +0 + +0101000 ++3312 0 -3313 0 * +Ed + 1.00000312638804e-07 1 1 0 +1 850 0 0.26101778683788 1.57079847327706 +2 2019 410 0 0.26101778683788 1.57079847327706 +4 C0 410 0 358 0 +2 2020 358 0 0.26101778683788 1.57079847327706 +2 2021 360 119 0.26101778683788 1.57079847327706 +0 + +0101000 ++3311 0 -3314 0 * +Ed + 1e-07 1 1 0 +1 851 0 1.79856987679419 4.45137323575428 +2 2022 411 0 1.79856987679419 4.45137323575428 +4 C0 411 0 397 0 +2 2023 397 0 1.79856987679419 4.45137323575428 +0 + +0101000 ++3310 0 -3312 0 * +Ed + 1.4535112141792e-05 1 1 0 +1 852 0 -3 3 +2 2024 411 0 -3 3 +2 2025 412 0 -3 3 +4 G1 411 0 412 0 +0 + +0101000 ++3309 0 -3310 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 853 0 1.79856987679419 4.45137323575428 +2 2026 411 0 1.79856987679419 4.45137323575428 +4 C0 411 0 358 0 +2 2027 358 0 1.79856987679419 4.45137323575428 +2 2028 360 119 1.79856987679419 4.45137323575428 +0 + +0101000 ++3309 0 -3311 0 * +Ed + 1e-07 1 1 0 +1 854 0 -5.9988333129 5.99883331295 +4 C0 400 0 397 0 +2 2029 397 0 -5.9988333129 5.99883331295 +2 2030 400 0 -5.9988333129 5.99883331295 +0 + +0101000 ++3308 0 -3332 0 * +Ed + 2.04518801056886e-06 1 1 0 +1 855 0 -3 3 +2 2031 413 0 -3 3 +4 G1 400 0 413 0 +2 2032 400 0 -3 3 +0 + +0101000 ++3307 0 -3308 0 * +Ed + 1.00000170530257e-07 1 1 0 +1 856 0 -5.9988333129 5.99883331295 +4 C0 400 0 358 0 +2 2033 358 0 -5.9988333129 5.99883331295 +2 2034 400 0 -5.9988333129 5.99883331295 +2 2035 360 119 -5.9988333129 5.99883331295 +0 + +0101000 ++3307 0 -3331 0 * +Ed + 1e-07 1 1 0 +1 857 0 3.14159880502311 4.01531527702699 +2 2036 413 0 3.14159880502311 4.01531527702699 +4 C0 413 0 397 0 +2 2037 397 0 3.14159880502311 4.01531527702699 +0 + +0101000 ++3308 0 -3306 0 * +Ed + 3.89399877296503e-06 1 1 0 +1 858 0 -3 3 +2 2038 413 0 -3 3 +2 2039 414 0 -3 3 +4 G1 413 0 414 0 +0 + +0101000 ++3306 0 -3305 0 * +Ed + 1.00001346361305e-07 1 1 0 +1 859 0 3.14159880502311 4.01531527702699 +2 2040 413 0 3.14159880502311 4.01531527702699 +4 C0 413 0 358 0 +2 2041 358 0 3.14159880502311 4.01531527702699 +2 2042 360 119 3.14159880502311 4.01531527702699 +0 + +0101000 ++3307 0 -3305 0 * +Ed + 1e-07 1 1 0 +1 860 0 2.26786873982048 4.19889010491378 +2 2043 414 0 2.26786873982048 4.19889010491378 +4 C0 414 0 397 0 +2 2044 397 0 2.26786873982048 4.19889010491378 +0 + +0101000 ++3306 0 -3304 0 * +Ed + 1.00000198951966e-07 1 1 0 +1 861 0 2.26786873982048 4.19889010491378 +2 2045 414 0 2.26786873982048 4.19889010491378 +4 C0 414 0 358 0 +2 2046 358 0 2.26786873982048 4.19889010491378 +2 2047 360 119 2.26786873982048 4.19889010491378 +0 + +0101000 ++3305 0 -3303 0 * +Ed + 0.000140504468508401 1 1 0 +1 862 0 -3 3 +2 2048 414 0 -3 3 +2 2049 415 0 -3 3 +4 G1 414 0 415 0 +0 + +0101000 ++3303 0 -3304 0 * +Ed + 1e-07 1 1 0 +1 863 0 5.76968031548267 8.51377368083406 +2 2050 415 0 5.76968031548267 8.51377368083406 +4 C0 415 0 397 0 +2 2051 397 0 5.76968031548267 8.51377368083406 +0 + +0101000 ++3304 0 -3302 0 * +Ed + 1.00000213162821e-07 1 1 0 +1 864 0 5.76968031548267 8.51377368083406 +2 2052 415 0 5.76968031548267 8.51377368083406 +4 C0 415 0 358 0 +2 2053 358 0 5.76968031548267 8.51377368083406 +2 2054 360 119 5.76968031548267 8.51377368083406 +0 + +0101000 ++3303 0 -3301 0 * +Ed + 7.59962679524456e-05 1 1 0 +1 865 0 -3 3 +2 2055 415 0 -3 3 +2 2056 416 0 -3 3 +4 G1 415 0 416 0 +0 + +0101000 ++3301 0 -3302 0 * +Ed + 1e-07 1 1 0 +1 866 0 5.62340191545187 6.28317744086674 +2 2057 416 0 5.62340191545187 6.28317744086674 +4 C0 416 0 397 0 +2 2058 397 0 5.62340191545187 6.28317744086674 +0 + +0101000 ++3302 0 -3300 0 * +Ed + 1.70641706663236e-06 1 1 0 +1 867 0 -3 3 +2 2059 416 0 -3 3 +4 G1 416 0 417 0 +2 2060 417 0 -3 3 +0 + +0101000 ++3300 0 -3299 0 * +Ed + 1.00000213162821e-07 1 1 0 +1 868 0 5.62340191545187 6.28317744086674 +2 2061 416 0 5.62340191545187 6.28317744086674 +4 C0 416 0 358 0 +2 2062 358 0 5.62340191545187 6.28317744086674 +2 2063 360 119 5.62340191545187 6.28317744086674 +0 + +0101000 ++3301 0 -3299 0 * +Ed + 1.03725141244299e-06 1 1 0 +1 869 0 -3 3 +2 2064 418 0 -3 3 +4 G1 417 0 418 0 +2 2065 417 0 -3 3 +0 + +0101000 ++3298 0 -3297 0 * +Ed + 1.00000976421199e-07 1 1 0 +1 870 0 -9.112829280834 9.112829280866 +4 C0 417 0 358 0 +2 2066 358 0 -9.112829280834 9.112829280866 +2 2067 417 0 -9.112829280834 9.112829280866 +2 2068 360 119 -9.112829280834 9.112829280866 +0 + +0101000 ++3299 0 -3298 0 * +Ed + 1e-07 1 1 0 +1 871 0 -9.112829280834 9.112829280866 +4 C0 417 0 397 0 +2 2069 397 0 -9.112829280834 9.112829280866 +2 2070 417 0 -9.112829280834 9.112829280866 +0 + +0101000 ++3300 0 -3297 0 * +Ed + 1e-07 1 1 0 +1 872 0 4.71238219726724 6.02217051383227 +2 2071 418 0 4.71238219726724 6.02217051383227 +4 C0 418 0 397 0 +2 2072 397 0 4.71238219726724 6.02217051383227 +0 + +0101000 ++3297 0 -3296 0 * +Ed + 7.88856919964979e-06 1 1 0 +1 873 0 -3 3 +2 2073 418 0 -3 3 +2 2074 419 0 -3 3 +4 G1 418 0 419 0 +0 + +0101000 ++3296 0 -3295 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 874 0 4.71238219726724 6.02217051383227 +2 2075 418 0 4.71238219726724 6.02217051383227 +4 C0 418 0 358 0 +2 2076 358 0 4.71238219726724 6.02217051383227 +2 2077 360 119 4.71238219726724 6.02217051383227 +0 + +0101000 ++3298 0 -3295 0 * +Ed + 1e-07 1 1 0 +1 875 0 4.97340586833326 7.62620970947703 +2 2078 419 0 4.97340586833326 7.62620970947703 +4 C0 419 0 397 0 +2 2079 397 0 4.97340586833326 7.62620970947703 +0 + +0101000 ++3296 0 -3294 0 * +Ed + 1.00000298427949e-07 1 1 0 +1 876 0 4.97340586833326 7.62620970947703 +2 2080 419 0 4.97340586833326 7.62620970947703 +4 C0 419 0 358 0 +2 2081 358 0 4.97340586833326 7.62620970947703 +2 2082 360 119 4.97340586833326 7.62620970947703 +0 + +0101000 ++3295 0 -3293 0 * +Ed + 1.45373227877628e-05 1 1 0 +1 877 0 -3 3 +2 2083 419 0 -3 3 +2 2084 420 0 -3 3 +4 G1 419 0 420 0 +0 + +0101000 ++3293 0 -3294 0 * +Ed + 1.00000326849658e-07 1 1 0 +1 878 0 4.94016157096724 5.8534078363234 +2 2085 420 0 4.94016157096724 5.8534078363234 +4 C0 420 0 358 0 +2 2086 358 0 4.94016157096724 5.8534078363234 +2 2087 360 119 4.94016157096724 5.8534078363234 +0 + +0101000 ++3293 0 -3292 0 * +Ed + 1e-07 1 1 0 +1 879 0 4.94016157096724 5.85340783632177 +2 2088 420 0 4.94016157096724 5.85340783632177 +4 C0 420 0 397 0 +2 2089 397 0 4.94016157096724 5.85340783632177 +0 + +0101000 ++3294 0 -3291 0 * +Ed + 1e-07 1 1 0 +1 880 0 -3 3 +2 2090 420 0 -3 3 +2 2091 421 0 -3 3 +4 G1 420 0 421 0 +0 + +0101000 ++3291 0 -3292 0 * +Ed + 1e-07 1 1 0 +1 881 0 2.00057379765641 3.14159789052979 +2 2092 421 0 2.00057379765641 3.14159789052979 +4 C0 421 0 397 0 +2 2093 397 0 2.00057379765641 3.14159789052979 +0 + +0101000 ++3291 0 -3290 0 * +Ed + 1.00000213162821e-07 1 1 0 +1 882 0 2.00057379765869 3.14159789052979 +2 2094 421 0 2.00057379765869 3.14159789052979 +4 C0 421 0 358 0 +2 2095 358 0 2.00057379765869 3.14159789052979 +2 2096 360 119 2.00057379765869 3.14159789052979 +0 + +0101000 ++3292 0 -3289 0 * +Ed + 1e-07 1 1 0 +1 883 0 -3 3 +2 2097 421 0 -3 3 +2 2098 422 0 -3 3 +4 C1 421 0 422 0 +0 + +0101000 ++3289 0 -3290 0 * +Ed + 1.00000298427949e-07 1 1 0 +1 884 0 3.36935871814427 4.28261523415869 +2 2099 402 0 3.36935871814427 4.28261523415869 +4 C0 402 0 358 0 +2 2100 358 0 3.36935871814427 4.28261523415869 +2 2101 360 119 3.36935871814427 4.28261523415869 +0 + +0101000 ++3330 0 -3288 0 * +Ed + 1e-07 1 1 0 +1 885 0 3.36935871814427 4.28261523415942 +2 2102 402 0 3.36935871814427 4.28261523415942 +4 C0 402 0 397 0 +2 2103 397 0 3.36935871814427 4.28261523415942 +0 + +0101000 ++3329 0 -3287 0 * +Ed + 1e-07 1 1 0 +1 886 0 -3 3 +2 2104 402 0 -3 3 +2 2105 422 0 -3 3 +4 G1 402 0 422 0 +0 + +0101000 ++3287 0 -3288 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 887 0 3.14159265358979 5.14216272662296 +2 2106 422 0 3.14159265358979 5.14216272662296 +4 C0 422 0 358 0 +2 2107 358 0 3.14159265358979 5.14216272662296 +2 2108 360 119 3.14159265358979 5.14216272662296 +0 + +0101000 ++3289 0 -3288 0 * +Ed + 1e-07 1 1 0 +1 888 0 3.14159265358979 5.1421627266205 +2 2109 422 0 3.14159265358979 5.1421627266205 +4 C0 422 0 397 0 +2 2110 397 0 3.14159265358979 5.1421627266205 +0 + +0101000 ++3290 0 -3287 0 * +Ed + 1e-07 1 1 0 +1 889 0 3.57136993044971 4.48461715389789 +2 2111 398 0 3.57136993044971 4.48461715389789 +4 C0 398 0 397 0 +2 2112 397 0 3.57136993044971 4.48461715389789 +0 + +0101000 ++3286 0 -3336 0 * +Ed + 1.00000227373675e-07 1 1 0 +1 890 0 3.57136993045051 4.48461715389789 +2 2113 398 0 3.57136993045051 4.48461715389789 +4 C0 398 0 358 0 +2 2114 358 0 3.57136993045051 4.48461715389789 +2 2115 360 119 3.57136993045051 4.48461715389789 +0 + +0101000 ++3285 0 -3334 0 * +Ed + 1e-07 1 1 0 +1 891 0 -3 3 +2 2116 398 0 -3 3 +2 2117 423 0 -3 3 +4 G1 398 0 423 0 +0 + +0101000 ++3286 0 -3285 0 * +Ed + 1e-07 1 1 0 +1 892 0 1.5707913744749 2.71181537673332 +2 2118 423 0 1.5707913744749 2.71181537673332 +4 C0 423 0 397 0 +2 2119 397 0 1.5707913744749 2.71181537673332 +0 + +0101000 ++3284 0 -3286 0 * +Ed + 1e-07 1 1 0 +1 893 0 -3 3 +2 2120 423 0 -3 3 +2 2121 424 0 -3 3 +4 C1 423 0 424 0 +0 + +0101000 ++3283 0 -3284 0 * +Ed + 1.00000227373675e-07 1 1 0 +1 894 0 1.5707913744749 2.71181537673445 +2 2122 423 0 1.5707913744749 2.71181537673445 +4 C0 423 0 358 0 +2 2123 358 0 1.5707913744749 2.71181537673445 +2 2124 360 119 1.5707913744749 2.71181537673445 +0 + +0101000 ++3283 0 -3285 0 * +Ed + 0.00112587558913171 1 1 0 +1 895 0 0 19.550105515 +2 2125 412 0 0 19.550105515 +4 C0 358 0 412 0 +2 2126 358 0 0 19.550105515 +2 2127 360 119 0 19.550105515 +0 + +0101000 ++3309 0 -3282 0 * +Ed + 1.00000971340767e-07 1 1 0 +1 896 0 1.14102255594374 3.14159265358979 +2 2128 424 0 1.14102255594374 3.14159265358979 +4 C0 358 0 424 0 +2 2129 358 0 1.14102255594374 3.14159265358979 +2 2130 360 119 1.14102255594374 3.14159265358979 +0 + +0101000 ++3282 0 -3283 0 * +Ed + 1e-07 1 1 0 +1 897 0 2.00057009763912 2.91382659537874 +2 2131 412 0 2.00057009763912 2.91382659537874 +4 C0 412 0 397 0 +2 2132 397 0 2.00057009763912 2.91382659537874 +0 + +0101000 ++3281 0 -3310 0 * +Ed + 1e-07 1 1 0 +1 898 0 -3 3 +2 2133 412 0 -3 3 +2 2134 424 0 -3 3 +4 G1 412 0 424 0 +0 + +0101000 ++3281 0 -3282 0 * +Ed + 1e-07 1 1 0 +1 899 0 1.14102255593934 3.14159265358979 +2 2135 424 0 1.14102255593934 3.14159265358979 +4 C0 397 0 424 0 +2 2136 397 0 1.14102255593934 3.14159265358979 +0 + +0101000 ++3281 0 -3284 0 * +Ed + 1e-07 1 1 0 +1 900 0 -20.5402785278643 20.5402785280463 +4 C0 425 0 362 0 +2 2137 362 0 -20.5402785278643 20.5402785280463 +0 + +0101000 ++3280 0 -3279 0 * +Ed + 1e-07 1 1 0 +1 901 0 -13.75 13.75 +4 C0 425 0 426 0 +2 2138 426 0 -13.75 13.75 +0 + +0101000 ++3279 0 -3278 0 * +Ed + 1e-07 1 1 0 +1 902 0 -20.5402785278643 20.5402785280463 +4 C0 425 0 301 0 +2 2139 301 0 -20.5402785278643 20.5402785280463 +0 + +0101000 ++3277 0 -3278 0 * +Ed + 1e-07 1 1 0 +1 903 0 -13.75 13.75 +4 C0 425 0 427 0 +0 + +0101000 ++3280 0 -3277 0 * +Ed + 1e-07 1 1 0 +1 904 0 -4.5000000008 4.50000000129999 +4 C0 425 0 428 0 +0 + +0101000 ++3276 0 -3275 0 * +Ed + 1e-07 1 1 0 +1 905 0 -13.5000021184201 13.5000021183803 +4 C0 425 0 429 0 +2 2140 429 0 -13.5000021184201 13.5000021183803 +0 + +0101000 ++3275 0 -3274 0 * +Ed + 1e-07 1 1 0 +1 906 0 -4.5000000008 4.50000000129999 +4 C0 425 0 430 0 +0 + +0101000 ++3273 0 -3274 0 * +Ed + 1e-07 1 1 0 +1 907 0 -13.5000021197232 13.5000021197132 +4 C0 425 0 431 0 +2 2141 431 0 -13.5000021197232 13.5000021197132 +0 + +0101000 ++3276 0 -3273 0 * +Ed + 1e-07 1 1 0 +1 908 0 -13.7499999995 13.7500000005 +4 C0 432 0 426 0 +2 2142 426 0 -13.7499999995 13.7500000005 +2 2143 432 0 -13.7499999995 13.7500000005 +0 + +0101000 ++3272 0 -3271 0 * +Ed + 1e-07 1 1 0 +1 909 0 -18.94396632212 18.94396632214 +4 C0 432 0 362 0 +2 2144 362 0 -18.94396632212 18.94396632214 +2 2145 432 0 -18.94396632212 18.94396632214 +0 + +0101000 ++3270 0 -3272 0 * +Ed + 1e-07 1 1 0 +1 910 0 -13.7499999995 13.7500000005 +4 C0 432 0 433 0 +2 2146 433 0 -13.7499999995 13.7500000005 +2 2147 432 0 -13.7499999995 13.7500000005 +0 + +0101000 ++3270 0 -3269 0 * +Ed + 1e-07 1 1 0 +1 911 0 -18.94396632212 18.94396632214 +4 C0 432 0 301 0 +2 2148 301 0 -18.94396632212 18.94396632214 +2 2149 432 0 -18.94396632212 18.94396632214 +0 + +0101000 ++3269 0 -3271 0 * +Ed + 1e-07 1 1 0 +1 912 0 -6.0839069559267 6.08390695671222 +4 C0 434 0 301 0 +2 2150 301 0 -6.0839069559267 6.08390695671222 +0 + +0101000 ++3268 0 -3267 0 * +Ed + 1e-07 1 1 0 +1 913 0 -13.75 13.75 +4 C0 434 0 435 0 +0 + +0101000 ++3266 0 -3268 0 * +Ed + 1e-07 1 1 0 +1 914 0 -6.0839069559267 6.08390695671222 +4 C0 434 0 362 0 +2 2151 362 0 -6.0839069559267 6.08390695671222 +0 + +0101000 ++3266 0 -3265 0 * +Ed + 1e-07 1 1 0 +1 915 0 -13.75 13.75 +4 C0 434 0 436 0 +0 + +0101000 ++3265 0 -3267 0 * +Ed + 1e-07 1 1 0 +1 916 0 -20.7699751372929 20.769975137091 +4 C0 435 0 362 0 +2 2152 362 0 -20.7699751372929 20.769975137091 +0 + +0101000 ++3264 0 -3266 0 * +Ed + 1e-07 1 1 0 +1 917 0 -20.7699751372929 20.769975137091 +4 C0 435 0 301 0 +2 2153 301 0 -20.7699751372929 20.769975137091 +0 + +0101000 ++3263 0 -3268 0 * +Ed + 1e-07 1 1 0 +1 918 0 -13.75 13.75 +4 C0 435 0 437 0 +0 + +0101000 ++3264 0 -3263 0 * +Ed + 1e-07 1 1 0 +1 919 0 -4.50000000129999 4.5000000008 +4 C0 435 0 438 0 +0 + +0101000 ++3262 0 -3261 0 * +Ed + 1e-07 1 1 0 +1 920 0 -12.5000019588735 12.5000019590048 +4 C0 435 0 439 0 +0 + +0101000 ++3260 0 -3262 0 * +Ed + 1e-07 1 1 0 +1 921 0 -4.5000000012 4.50000000089999 +4 C0 435 0 440 0 +0 + +0101000 ++3260 0 -3259 0 * +Ed + 1e-07 1 1 0 +1 922 0 -12.5000019618895 12.5000019618985 +4 C0 435 0 441 0 +0 + +0101000 ++3261 0 -3259 0 * +Ed + 1e-07 1 1 0 +1 923 0 -5.76265920441119 5.76265920531662 +4 C0 437 0 362 0 +2 2154 362 0 -5.76265920441119 5.76265920531662 +0 + +0101000 ++3258 0 -3264 0 * +Ed + 1e-07 1 1 0 +1 924 0 -5.76265920441119 5.76265920531662 +4 C0 437 0 301 0 +2 2155 301 0 -5.76265920441119 5.76265920531662 +0 + +0101000 ++3257 0 -3263 0 * +Ed + 1e-07 1 1 0 +1 925 0 -13.75 13.75 +4 C0 437 0 442 0 +0 + +0101000 ++3258 0 -3257 0 * +Ed + 1e-07 1 1 0 +1 926 0 -23.2784923884453 23.2784923884125 +4 C0 443 0 362 0 +2 2156 362 0 -23.2784923884453 23.2784923884125 +0 + +0101000 ++3256 0 -3255 0 * +Ed + 1e-07 1 1 0 +1 927 0 -13.75 13.75 +4 C0 443 0 444 0 +0 + +0101000 ++3255 0 -3254 0 * +Ed + 1e-07 1 1 0 +1 928 0 -23.2784923884453 23.2784923884125 +4 C0 443 0 301 0 +2 2157 301 0 -23.2784923884453 23.2784923884125 +0 + +0101000 ++3253 0 -3254 0 * +Ed + 1e-07 1 1 0 +1 929 0 -13.75 13.75 +4 C0 443 0 433 0 +2 2158 433 0 -13.75 13.75 +0 + +0101000 ++3256 0 -3253 0 * +Ed + 1e-07 1 1 0 +1 930 0 -15.5249247938377 15.5249247938348 +4 C0 443 0 445 0 +0 + +0101000 ++3252 0 -3251 0 * +Ed + 1e-07 1 1 0 +1 931 0 -4.5000000006 4.4999999969 +4 C0 443 0 446 0 +0 + +0101000 ++3250 0 -3252 0 * +Ed + 1e-07 1 1 0 +1 932 0 -15.5249247976207 15.5249247975182 +4 C0 443 0 447 0 +0 + +0101000 ++3250 0 -3249 0 * +Ed + 1e-07 1 1 0 +1 933 0 -4.4999999992 4.4999999983 +4 C0 443 0 448 0 +0 + +0101000 ++3249 0 -3251 0 * +Ed + 1e-07 1 1 0 +1 934 0 -50.5308763546284 50.5308763542153 +4 C0 433 0 362 0 +2 2159 362 0 -50.5308763546284 50.5308763542153 +2 2160 433 0 -50.5308763546284 50.5308763542153 +0 + +0101000 ++3270 0 -3256 0 * +Ed + 1e-07 1 1 0 +1 935 0 -50.5308763546284 50.5308763542153 +4 C0 433 0 301 0 +2 2161 301 0 -50.5308763546284 50.5308763542153 +2 2162 433 0 -50.5308763546284 50.5308763542153 +0 + +0101000 ++3269 0 -3253 0 * +Ed + 1e-07 1 1 0 +1 936 0 -51.6599504805506 51.6599504803661 +4 C0 426 0 301 0 +2 2163 301 0 -51.6599504805506 51.6599504803661 +2 2164 426 0 -51.6599504805506 51.6599504803661 +0 + +0101000 ++3278 0 -3271 0 * +Ed + 1e-07 1 1 0 +1 937 0 -51.6599504805506 51.6599504803661 +4 C0 426 0 362 0 +2 2165 362 0 -51.6599504805506 51.6599504803661 +2 2166 426 0 -51.6599504805506 51.6599504803661 +0 + +0101000 ++3279 0 -3272 0 * +Ed + 1e-07 1 1 0 +1 938 0 -5.9999999975 3 +2 2167 449 0 -5.9999999975 3 +2 2168 450 0 -5.9999999975 3 +4 CN 449 0 450 0 +0 + +0101000 ++3248 0 -3247 0 * +Ed + 1e-07 1 1 0 +1 939 0 5.833823433145 6.55783945612737 +2 2169 449 0 5.833823433145 6.55783945612737 +4 C0 449 0 445 0 +0 + +0101000 ++3246 0 -3247 0 * +Ed + 1e-07 1 1 0 +1 940 0 -5.9999999975 3 +2 2170 449 0 -5.9999999975 3 +2 2171 451 0 -5.9999999975 3 +4 C0 449 0 451 0 +0 + +0101000 ++3245 0 -3246 0 * +Ed + 1e-07 1 1 0 +1 941 0 5.833823433145 6.55783945554926 +2 2172 449 0 5.833823433145 6.55783945554926 +4 C0 449 0 447 0 +0 + +0101000 ++3245 0 -3248 0 * +Ed + 1e-07 1 1 0 +1 942 0 6.0079564744714 6.71862335544013 +2 2173 451 0 6.0079564744714 6.71862335544013 +4 C0 451 0 447 0 +0 + +0101000 ++3245 0 -3244 0 * +Ed + 1e-07 1 1 0 +1 943 0 5.92215045966731 6.0079564744714 +2 2174 451 0 5.92215045966731 6.0079564744714 +4 C0 451 0 445 0 +0 + +0101000 ++3243 0 -3246 0 * +Ed + 1e-07 1 1 0 +1 944 0 -6.0000000011 12.0000000031 +2 2175 451 0 -6.0000000011 12.0000000031 +4 G1 451 0 452 0 +0 + +0101000 ++3242 0 -3243 0 * +Ed + 1e-07 1 1 0 +1 945 0 5.92215045975281 9.06374311335074 +2 2176 451 0 5.92215045975281 9.06374311335074 +4 C0 451 0 301 0 +2 2177 301 0 5.92215045975281 9.06374311335074 +0 + +0101000 ++3242 0 -3241 0 * +Ed + 1e-07 1 1 0 +1 946 0 -6.0000000011 3.0000000056 +2 2178 451 0 -6.0000000011 3.0000000056 +4 G1 451 0 453 0 +0 + +0101000 ++3241 0 -3240 0 * +Ed + 1e-07 1 1 0 +1 947 0 0.435438048260542 2.78055780620983 +2 2179 451 0 0.435438048260542 2.78055780620983 +4 C0 451 0 447 0 +0 + +0101000 ++3244 0 -3240 0 * +Ed + 1e-07 1 1 0 +1 948 0 -4.4999999985 4.4999999993 +2 2180 454 0 -4.4999999985 4.4999999993 +4 G1 453 0 454 0 +0 + +0101000 ++3239 0 -3238 0 * +Ed + 1e-07 1 1 0 +1 949 0 -2.49998617245052 2.49998617254683 +4 C0 453 0 301 0 +2 2181 301 0 -2.49998617245052 2.49998617254683 +0 + +0101000 ++3239 0 -3241 0 * +Ed + 1e-07 1 1 0 +1 950 0 -2.49998617159612 2.49998617295637 +4 C0 453 0 447 0 +0 + +0101000 ++3238 0 -3240 0 * +Ed + 1e-07 1 1 0 +1 951 0 2.78055540160346 5.83382343316794 +2 2182 454 0 2.78055540160346 5.83382343316794 +4 C0 454 0 447 0 +0 + +0101000 ++3238 0 -3237 0 * +Ed + 5.66660184374918e-05 1 1 0 +1 952 0 -18.0641577569 18.0641577569 +2 2183 454 0 -18.0641577569 18.0641577569 +4 C0 454 0 301 0 +2 2184 301 0 -18.0641577569 18.0641577569 +0 + +0101000 ++3239 0 -3236 0 * +Ed + 1e-07 1 1 0 +1 953 0 -5.999999996 12.0000000031 +2 2185 454 0 -5.999999996 12.0000000031 +4 G1 454 0 452 0 +0 + +0101000 ++3236 0 -3235 0 * +Ed + 1e-07 1 1 0 +1 954 0 5.83382343279854 5.92214805518512 +2 2186 454 0 5.83382343279854 5.92214805518512 +4 C0 454 0 445 0 +0 + +0101000 ++3234 0 -3235 0 * +Ed + 1e-07 1 1 0 +1 955 0 3.0000000056 12.0000000031 +2 2187 454 0 3.0000000056 12.0000000031 +2 2188 455 0 3.0000000056 12.0000000031 +4 C0 454 0 455 0 +0 + +0101000 ++3237 0 -3234 0 * +Ed + 1e-07 1 1 0 +1 956 0 -2.50000691186715 2.50002073720383 +4 C0 452 0 445 0 +0 + +0101000 ++3243 0 -3235 0 * +Ed + 1e-07 1 1 0 +1 957 0 -2.50000000107317 2.50002764898108 +4 C0 452 0 301 0 +2 2189 301 0 -2.50000000107317 2.50002764898108 +0 + +0101000 ++3242 0 -3236 0 * +Ed + 1e-07 1 1 0 +1 958 0 -6.0000000038 2.9999999937 +2 2190 455 0 -6.0000000038 2.9999999937 +4 G1 455 0 446 0 +0 + +0101000 ++3233 0 -3232 0 * +Ed + 1e-07 1 1 0 +1 959 0 4.81444151770099 6.00795647526926 +2 2191 455 0 4.81444151770099 6.00795647526926 +4 C0 455 0 447 0 +0 + +0101000 ++3233 0 -3237 0 * +Ed + 1e-07 1 1 0 +1 960 0 4.81444151764226 6.00795647490636 +2 2192 455 0 4.81444151764226 6.00795647490636 +4 C0 455 0 445 0 +0 + +0101000 ++3232 0 -3234 0 * +Ed + 1e-07 1 1 0 +1 961 0 -6.0000000019 2.9999999956 +2 2193 450 0 -6.0000000019 2.9999999956 +4 G1 450 0 448 0 +0 + +0101000 ++3231 0 -3230 0 * +Ed + 1e-07 1 1 0 +1 962 0 0.274654147941844 1.67284886365817 +2 2194 450 0 0.274654147941844 1.67284886365817 +4 C0 450 0 445 0 +0 + +0101000 ++3247 0 -3230 0 * +Ed + 1e-07 1 1 0 +1 963 0 0.27465414735536 1.6728488636203 +2 2195 450 0 0.27465414735536 1.6728488636203 +4 C0 450 0 447 0 +0 + +0101000 ++3248 0 -3231 0 * +Ed + 1e-07 1 1 0 +1 964 0 -13.9348600060298 13.9348600042042 +4 C0 448 0 445 0 +0 + +0101000 ++3230 0 -3251 0 * +Ed + 1e-07 1 1 0 +1 965 0 -13.9348600062664 13.9348600058426 +4 C0 448 0 447 0 +0 + +0101000 ++3231 0 -3249 0 * +Ed + 1e-07 1 1 0 +1 966 0 -11.9137013844669 11.9137013840588 +4 C0 446 0 447 0 +0 + +0101000 ++3233 0 -3250 0 * +Ed + 1e-07 1 1 0 +1 967 0 -11.9137013837916 11.9137013838755 +4 C0 446 0 445 0 +0 + +0101000 ++3232 0 -3252 0 * +Ed + 0.00061520457868217 1 1 0 +1 968 0 4.45248174893 10.7356670561 +2 2196 456 0 4.45248174893 10.7356670561 +4 C0 447 0 456 0 +0 + +0101000 ++3229 0 -3228 0 * +Ed + 0.000615204615200856 1 1 0 +1 969 0 10.7356670561 17.0188523633 +2 2197 457 0 10.7356670561 17.0188523633 +4 C0 447 0 457 0 +0 + +0101000 ++3228 0 -3229 0 * +Ed + 0.000615204578661866 1 1 0 +1 970 0 0.976811777701 7.25999708488 +2 2198 458 0 0.976811777701 7.25999708488 +4 C0 445 0 458 0 +0 + +0101000 ++3227 0 -3226 0 * +Ed + 0.000615204615486993 1 1 0 +1 971 0 7.25999708488 13.5431823921 +2 2199 459 0 7.25999708488 13.5431823921 +4 C0 445 0 459 0 +0 + +0101000 ++3226 0 -3227 0 * +Ed + 2.46374048269097e-05 1 1 0 +1 972 0 8.43981677907 24.147780047 +2 2200 460 0 8.43981677907 24.147780047 +4 C0 445 0 460 0 +0 + +0101000 ++3225 0 -3224 0 * +Ed + 2.46374046298577e-05 1 1 0 +1 973 0 24.147780047 39.855743315 +2 2201 461 0 24.147780047 39.855743315 +4 C0 445 0 461 0 +0 + +0101000 ++3224 0 -3225 0 * +Ed + 1e-07 1 1 0 +1 974 0 8.9999999954 18.4999999997 +2 2202 461 0 8.9999999954 18.4999999997 +2 2203 460 0 8.9999999954 18.4999999997 +4 CN 461 0 460 0 +0 + +0101000 ++3224 0 -3223 0 * +Ed + 1e-07 1 1 0 +1 975 0 8.9999999954 18.4999999997 +2 2204 461 0 8.9999999954 18.4999999997 +2 2205 460 0 8.9999999954 18.4999999997 +4 CN 461 0 460 0 +0 + +0101000 ++3225 0 -3222 0 * +Ed + 1e-07 1 1 0 +1 976 0 0.219779790601005 3.3613724441908 +2 2206 461 0 0.219779790601005 3.3613724441908 +4 C0 461 0 362 0 +2 2207 362 0 0.219779790601005 3.3613724441908 +0 + +0101000 ++3223 0 -3222 0 * +Ed + 1e-07 1 1 0 +1 977 0 3.3613724441908 6.50296509778059 +2 2208 460 0 3.3613724441908 6.50296509778059 +4 C0 460 0 362 0 +2 2209 362 0 3.3613724441908 6.50296509778059 +0 + +0101000 ++3222 0 -3223 0 * +Ed + 1e-07 1 1 0 +1 978 0 -16 -8 +2 2210 457 0 -16 -8 +2 2211 456 0 -16 -8 +4 CN 457 0 456 0 +0 + +0101000 ++3221 0 -3228 0 * +Ed + 1e-07 1 1 0 +1 979 0 0.591018650430774 3.73261130409049 +2 2212 457 0 0.591018650430774 3.73261130409049 +4 C0 457 0 462 0 +0 + +0101000 ++3221 0 -3220 0 * +Ed + 1e-07 1 1 0 +1 980 0 -16 -8 +2 2213 457 0 -16 -8 +2 2214 456 0 -16 -8 +4 CN 457 0 456 0 +0 + +0101000 ++3220 0 -3229 0 * +Ed + 1e-07 1 1 0 +1 981 0 0.999999997499998 10.5000000018 +2 2215 459 0 0.999999997499998 10.5000000018 +2 2216 458 0 0.999999997499998 10.5000000018 +4 CN 459 0 458 0 +0 + +0101000 ++3226 0 -3219 0 * +Ed + 1e-07 1 1 0 +1 982 0 0.999999997499998 10.5000000018 +2 2217 459 0 0.999999997499998 10.5000000018 +2 2218 458 0 0.999999997499998 10.5000000018 +4 CN 459 0 458 0 +0 + +0101000 ++3227 0 -3218 0 * +Ed + 1e-07 1 1 0 +1 983 0 0.591018650430774 3.73261130409049 +2 2219 459 0 0.591018650430774 3.73261130409049 +4 C0 459 0 362 0 +2 2220 362 0 0.591018650430774 3.73261130409049 +0 + +0101000 ++3219 0 -3218 0 * +Ed + 1e-07 1 1 0 +1 984 0 3.73261130409049 6.87420395761036 +2 2221 456 0 3.73261130409049 6.87420395761036 +4 C0 456 0 462 0 +0 + +0101000 ++3220 0 -3221 0 * +Ed + 1e-07 1 1 0 +1 985 0 3.73261130409049 6.87420395761036 +2 2222 458 0 3.73261130409049 6.87420395761036 +4 C0 458 0 362 0 +2 2223 362 0 3.73261130409049 6.87420395761036 +0 + +0101000 ++3218 0 -3219 0 * +Ed + 1e-07 1 1 0 +1 986 0 9 18.4999999997 +2 2224 463 0 9 18.4999999997 +2 2225 464 0 9 18.4999999997 +4 CN 463 0 464 0 +0 + +0101000 ++3217 0 -3216 0 * +Ed + 1e-07 1 1 0 +1 987 0 0.219779790580614 3.36137244419167 +2 2226 463 0 0.219779790580614 3.36137244419167 +4 C0 463 0 429 0 +2 2227 429 0 0.219779790580614 3.36137244419167 +0 + +0101000 ++3217 0 -3215 0 * +Ed + 1e-07 1 1 0 +1 988 0 9 18.4999999997 +2 2228 463 0 9 18.4999999997 +2 2229 464 0 9 18.4999999997 +4 CN 463 0 464 0 +0 + +0101000 ++3215 0 -3214 0 * +Ed + 1e-07 1 1 0 +1 989 0 0.219779790580614 3.36137244419167 +2 2230 463 0 0.219779790580614 3.36137244419167 +4 C0 463 0 362 0 +2 2231 362 0 0.219779790580614 3.36137244419167 +0 + +0101000 ++3216 0 -3214 0 * +Ed + 1e-07 1 1 0 +1 990 0 3.36137244419167 6.5029650977602 +2 2232 464 0 3.36137244419167 6.5029650977602 +4 C0 464 0 429 0 +2 2233 429 0 3.36137244419167 6.5029650977602 +0 + +0101000 ++3215 0 -3217 0 * +Ed + 1e-07 1 1 0 +1 991 0 3.36137244419167 6.5029650977602 +2 2234 464 0 3.36137244419167 6.5029650977602 +4 C0 464 0 362 0 +2 2235 362 0 3.36137244419167 6.5029650977602 +0 + +0101000 ++3214 0 -3216 0 * +Ed + 1e-07 1 1 0 +1 992 0 -6.000000007 2.9999999925 +2 2236 465 0 -6.000000007 2.9999999925 +2 2237 466 0 -6.000000007 2.9999999925 +4 CN 465 0 466 0 +0 + +0101000 ++3213 0 -3212 0 * +Ed + 1e-07 1 1 0 +1 993 0 1.67446506511184 4.81605771870163 +2 2238 465 0 1.67446506511184 4.81605771870163 +4 C0 465 0 431 0 +2 2239 431 0 1.67446506511184 4.81605771870163 +0 + +0101000 ++3211 0 -3212 0 * +Ed + 1e-07 1 1 0 +1 994 0 -6.0000000033 2.9999999925 +2 2240 465 0 -6.0000000033 2.9999999925 +2 2241 466 0 -6.0000000033 2.9999999925 +4 CN 465 0 466 0 +0 + +0101000 ++3210 0 -3211 0 * +Ed + 5.66659738820112e-05 1 1 0 +1 995 0 -18.0641577574 18.0641577574 +2 2242 465 0 -18.0641577574 18.0641577574 +4 C0 465 0 301 0 +2 2243 301 0 -18.0641577574 18.0641577574 +0 + +0101000 ++3210 0 -3213 0 * +Ed + 5.66660233059852e-05 1 1 0 +1 996 0 -18.0641577565 18.0641577565 +2 2244 466 0 -18.0641577565 18.0641577565 +4 C0 466 0 301 0 +2 2245 301 0 -18.0641577565 18.0641577565 +0 + +0101000 ++3213 0 -3210 0 * +Ed + 1e-07 1 1 0 +1 997 0 4.81605771870163 7.95765037229143 +2 2246 466 0 4.81605771870163 7.95765037229143 +4 C0 466 0 431 0 +2 2247 431 0 4.81605771870163 7.95765037229143 +0 + +0101000 ++3212 0 -3211 0 * +Ed + 1e-07 1 1 0 +1 998 0 -16.0000000005 -8 +2 2248 467 0 -16.0000000005 -8 +2 2249 468 0 -16.0000000005 -8 +4 CN 467 0 468 0 +0 + +0101000 ++3209 0 -3208 0 * +Ed + 1e-07 1 1 0 +1 999 0 3.01029763413591 6.15189028772571 +2 2250 467 0 3.01029763413591 6.15189028772571 +4 C0 467 0 469 0 +0 + +0101000 ++3209 0 -3207 0 * +Ed + 1e-07 1 1 0 +1 1000 0 -16.0000000005 -8 +2 2251 467 0 -16.0000000005 -8 +2 2252 468 0 -16.0000000005 -8 +4 CN 467 0 468 0 +0 + +0101000 ++3207 0 -3206 0 * +Ed + 1e-07 1 1 0 +1 1001 0 3.01029763413591 6.15189028772571 +2 2253 467 0 3.01029763413591 6.15189028772571 +4 C0 467 0 431 0 +2 2254 431 0 3.01029763413591 6.15189028772571 +0 + +0101000 ++3208 0 -3206 0 * +Ed + 1e-07 1 1 0 +1 1002 0 1.00000000209999 10.5000000018 +2 2255 470 0 1.00000000209999 10.5000000018 +2 2256 471 0 1.00000000209999 10.5000000018 +4 CN 470 0 471 0 +0 + +0101000 ++3205 0 -3204 0 * +Ed + 1e-07 1 1 0 +1 1003 0 3.01029763413591 6.15189028772571 +2 2257 470 0 3.01029763413591 6.15189028772571 +4 C0 470 0 429 0 +2 2258 429 0 3.01029763413591 6.15189028772571 +0 + +0101000 ++3205 0 -3203 0 * +Ed + 1e-07 1 1 0 +1 1004 0 1.00000000209999 10.5000000018 +2 2259 470 0 1.00000000209999 10.5000000018 +2 2260 471 0 1.00000000209999 10.5000000018 +4 CN 470 0 471 0 +0 + +0101000 ++3203 0 -3202 0 * +Ed + 1e-07 1 1 0 +1 1005 0 3.01029763413656 6.15189028772571 +2 2261 470 0 3.01029763413656 6.15189028772571 +4 C0 470 0 362 0 +2 2262 362 0 3.01029763413656 6.15189028772571 +0 + +0101000 ++3204 0 -3202 0 * +Ed + 1e-07 1 1 0 +1 1006 0 6.15189028772571 9.29348294131549 +2 2263 468 0 6.15189028772571 9.29348294131549 +4 C0 468 0 431 0 +2 2264 431 0 6.15189028772571 9.29348294131549 +0 + +0101000 ++3206 0 -3208 0 * +Ed + 1e-07 1 1 0 +1 1007 0 6.15189028772571 9.29348294131549 +2 2265 468 0 6.15189028772571 9.29348294131549 +4 C0 468 0 469 0 +0 + +0101000 ++3207 0 -3209 0 * +Ed + 1e-07 1 1 0 +1 1008 0 6.15189028772571 9.29348294131549 +2 2266 471 0 6.15189028772571 9.29348294131549 +4 C0 471 0 429 0 +2 2267 429 0 6.15189028772571 9.29348294131549 +0 + +0101000 ++3203 0 -3205 0 * +Ed + 1e-07 1 1 0 +1 1009 0 6.15189028772571 9.29348294131615 +2 2268 471 0 6.15189028772571 9.29348294131615 +4 C0 471 0 362 0 +2 2269 362 0 6.15189028772571 9.29348294131615 +0 + +0101000 ++3202 0 -3204 0 * +Ed + 0.000476662432846974 1 1 0 +1 1010 0 2.24749172421 23.4532421369 +2 2270 472 0 2.24749172421 23.4532421369 +4 C0 431 0 472 0 +2 2271 431 0 2.24749172421 23.4532421369 +0 + +0101000 ++3201 0 -3200 0 * +Ed + 0.000476662362377475 1 1 0 +1 1011 0 23.4532421369 44.6589925486 +2 2272 473 0 23.4532421369 44.6589925486 +4 C0 431 0 473 0 +2 2273 431 0 23.4532421369 44.6589925486 +0 + +0101000 ++3200 0 -3199 0 * +Ed + 1e-07 1 1 0 +1 1012 0 -13.1427493234829 13.142782156 +4 C0 431 0 428 0 +2 2274 431 0 -13.1427493234829 13.142782156 +0 + +0101000 ++3199 0 -3276 0 * +Ed + 1e-07 1 1 0 +1 1013 0 -13.1352355696 13.1352355696 +4 C0 431 0 430 0 +2 2275 431 0 -13.1352355696 13.1352355696 +0 + +0101000 ++3201 0 -3273 0 * +Ed + 1e-07 1 1 0 +1 1014 0 -13.142782156283 13.1427985718153 +4 C0 429 0 428 0 +2 2276 429 0 -13.142782156283 13.1427985718153 +0 + +0101000 ++3198 0 -3275 0 * +Ed + 1e-07 1 1 0 +1 1015 0 3.24364762470694 4.81444030362025 +2 2277 473 0 3.24364762470694 4.81444030362025 +4 C0 429 0 473 0 +2 2278 429 0 3.24364762470694 4.81444030362025 +0 + +0101000 ++3197 0 -3198 0 * +Ed + 1e-07 1 1 0 +1 1016 0 1.67285129797159 3.24364762470694 +2 2279 472 0 1.67285129797159 3.24364762470694 +4 C0 429 0 472 0 +2 2280 429 0 1.67285129797159 3.24364762470694 +0 + +0101000 ++3196 0 -3197 0 * +Ed + 1e-07 1 1 0 +1 1017 0 -13.135235569875 13.1352355693766 +4 C0 429 0 430 0 +2 2281 429 0 -13.135235569875 13.1352355693766 +0 + +0101000 ++3196 0 -3274 0 * +Ed + 1e-07 1 1 0 +1 1018 0 -6.0000000056 2.99999999649999 +2 2282 472 0 -6.0000000056 2.99999999649999 +4 G1 472 0 430 0 +0 + +0101000 ++3201 0 -3196 0 * +Ed + 1e-07 1 1 0 +1 1019 0 -6.0000000056 2.99999999649999 +2 2283 472 0 -6.0000000056 2.99999999649999 +2 2284 473 0 -6.0000000056 2.99999999649999 +4 CN 472 0 473 0 +0 + +0101000 ++3200 0 -3197 0 * +Ed + 1e-07 1 1 0 +1 1020 0 -6.0000000056 2.99999999649999 +2 2285 473 0 -6.0000000056 2.99999999649999 +4 G1 473 0 428 0 +0 + +0101000 ++3199 0 -3198 0 * +Ed + 1e-07 1 1 0 +1 1021 0 9 18.4999999997 +2 2286 474 0 9 18.4999999997 +2 2287 475 0 9 18.4999999997 +4 CN 474 0 475 0 +0 + +0101000 ++3195 0 -3194 0 * +Ed + 1e-07 1 1 0 +1 1022 0 1.79057611740358 4.93216877095368 +2 2288 474 0 1.79057611740358 4.93216877095368 +4 C0 474 0 441 0 +0 + +0101000 ++3195 0 -3193 0 * +Ed + 1e-07 1 1 0 +1 1023 0 9 18.4999999997 +2 2289 474 0 9 18.4999999997 +2 2290 475 0 9 18.4999999997 +4 CN 474 0 475 0 +0 + +0101000 ++3193 0 -3192 0 * +Ed + 1e-07 1 1 0 +1 1024 0 1.79057611740358 4.93216877095368 +2 2291 474 0 1.79057611740358 4.93216877095368 +4 C0 474 0 362 0 +2 2292 362 0 1.79057611740358 4.93216877095368 +0 + +0101000 ++3194 0 -3192 0 * +Ed + 1e-07 1 1 0 +1 1025 0 4.93216877095368 8.07376142458317 +2 2293 475 0 4.93216877095368 8.07376142458317 +4 C0 475 0 441 0 +0 + +0101000 ++3193 0 -3195 0 * +Ed + 1e-07 1 1 0 +1 1026 0 4.93216877095368 8.07376142458317 +2 2294 475 0 4.93216877095368 8.07376142458317 +4 C0 475 0 362 0 +2 2295 362 0 4.93216877095368 8.07376142458317 +0 + +0101000 ++3192 0 -3194 0 * +Ed + 1.34271532771821e-06 1 1 0 +1 1027 0 18.6140455124 19.6151152677 +2 2296 476 0 18.6140455124 19.6151152677 +2 2297 477 0 18.6140455124 19.6151152677 +4 CN 476 0 477 0 +0 + +0101000 ++3191 0 -3190 0 * +Ed + 0.000323272113850789 1 1 0 +1 1028 0 -0.019838823691 18.6140455124 +2 2298 476 0 -0.019838823691 18.6140455124 +2 2299 478 0 -0.019838823691 18.6140455124 +4 CN 476 0 478 0 +0 + +0101000 ++3189 0 -3191 0 * +Ed + 1e-07 1 1 0 +1 1029 0 2.9999999912 5.999999993 +2 2300 476 0 2.9999999912 5.999999993 +4 G1 476 0 438 0 +0 + +0101000 ++3188 0 -3189 0 * +Ed + 1e-07 1 1 0 +1 1030 0 1.67443597005548 3.24364519112936 +2 2301 476 0 1.67443597005548 3.24364519112936 +4 C0 476 0 439 0 +0 + +0101000 ++3187 0 -3188 0 * +Ed + 1e-07 1 1 0 +1 1031 0 -6.0000000056 2.9999999907 +2 2302 476 0 -6.0000000056 2.9999999907 +2 2303 479 0 -6.0000000056 2.9999999907 +4 CN 476 0 479 0 +0 + +0101000 ++3186 0 -3187 0 * +Ed + 6.1593797633783e-05 1 1 0 +1 1032 0 -19.6349540849 19.6349540849 +2 2304 476 0 -19.6349540849 19.6349540849 +4 C0 476 0 301 0 +2 2305 301 0 -19.6349540849 19.6349540849 +0 + +0101000 ++3186 0 -3185 0 * +Ed + 1e-07 1 1 0 +1 1033 0 -6.0000000038 5.99999998080001 +2 2306 476 0 -6.0000000038 5.99999998080001 +2 2307 479 0 -6.0000000038 5.99999998080001 +4 CN 476 0 479 0 +0 + +0101000 ++3185 0 -3184 0 * +Ed + 1e-07 1 1 0 +1 1034 0 19.6151152631 19.6349540849 +2 2308 476 0 19.6151152631 19.6349540849 +2 2309 480 0 19.6151152631 19.6349540849 +4 CN 476 0 480 0 +0 + +0101000 ++3190 0 -3184 0 * +Ed + 1e-07 1 1 0 +1 1035 0 4.81602862363541 7.95762127723507 +2 2310 479 0 4.81602862363541 7.95762127723507 +4 C0 479 0 301 0 +2 2311 301 0 4.81602862363541 7.95762127723507 +0 + +0101000 ++3185 0 -3186 0 * +Ed + 1e-07 1 1 0 +1 1036 0 0.102052537057743 1.67443597005548 +2 2312 479 0 0.102052537057743 1.67443597005548 +4 C0 479 0 439 0 +0 + +0101000 ++3183 0 -3187 0 * +Ed + 1e-07 1 1 0 +1 1037 0 2.9999999907 5.9999999925 +2 2313 479 0 2.9999999907 5.9999999925 +4 G1 479 0 440 0 +0 + +0101000 ++3183 0 -3182 0 * +Ed + 1e-07 1 1 0 +1 1038 0 4.89452709772886 6.38523784423725 +2 2314 479 0 4.89452709772886 6.38523784423725 +2 2315 481 0 4.89452709772886 6.38523784423725 +4 CN 479 0 481 0 +0 + +0101000 ++3181 0 -3182 0 * +Ed + 1e-07 1 1 0 +1 1039 0 4.81602862363541 4.89452709772886 +2 2316 479 0 4.81602862363541 4.89452709772886 +2 2317 480 0 4.81602862363541 4.89452709772886 +4 CN 479 0 480 0 +0 + +0101000 ++3184 0 -3181 0 * +Ed + 1e-07 1 1 0 +1 1040 0 -12.5516086474 12.5516086474 +4 C0 439 0 438 0 +0 + +0101000 ++3188 0 -3262 0 * +Ed + 1e-07 1 1 0 +1 1041 0 -12.5586114529 12.5586114529 +4 C0 439 0 440 0 +0 + +0101000 ++3183 0 -3260 0 * +Ed + 0.000615204569726452 1 1 0 +1 1042 0 1.14817455863 7.43135986582 +2 2318 482 0 1.14817455863 7.43135986582 +4 C0 439 0 482 0 +0 + +0101000 ++3180 0 -3179 0 * +Ed + 0.000615204692372754 1 1 0 +1 1043 0 7.43135986581 13.714545173 +2 2319 483 0 7.43135986581 13.714545173 +4 C0 439 0 483 0 +0 + +0101000 ++3179 0 -3180 0 * +Ed + 1e-07 1 1 0 +1 1044 0 -12.5586114540772 12.5586114528879 +4 C0 441 0 440 0 +0 + +0101000 ++3178 0 -3259 0 * +Ed + 1e-07 1 1 0 +1 1045 0 4.89452709739973 6.38523784447877 +2 2320 481 0 4.89452709739973 6.38523784447877 +4 C0 441 0 481 0 +0 + +0101000 ++3177 0 -3178 0 * +Ed + 1e-07 1 1 0 +1 1046 0 4.81444151752172 4.89452709739973 +2 2321 480 0 4.81444151752172 4.89452709739973 +4 C0 441 0 480 0 +0 + +0101000 ++3176 0 -3177 0 * +Ed + 1e-07 1 1 0 +1 1047 0 4.73435593744784 4.81444151752172 +2 2322 477 0 4.73435593744784 4.81444151752172 +4 C0 441 0 477 0 +0 + +0101000 ++3175 0 -3176 0 * +Ed + 1e-07 1 1 0 +1 1048 0 3.24364519054521 4.73435593744784 +2 2323 478 0 3.24364519054521 4.73435593744784 +4 C0 441 0 478 0 +0 + +0101000 ++3174 0 -3175 0 * +Ed + 1e-07 1 1 0 +1 1049 0 -12.5516086473928 12.5516086483876 +4 C0 441 0 438 0 +0 + +0101000 ++3174 0 -3261 0 * +Ed + 1e-07 1 1 0 +1 1050 0 2.0804577089401 5.22205036228595 +2 2324 484 0 2.0804577089401 5.22205036228595 +4 C0 441 0 484 0 +0 + +0101000 ++3173 0 -3172 0 * +Ed + 1e-07 1 1 0 +1 1051 0 5.22205036228595 8.36364301611969 +2 2325 485 0 5.22205036228595 8.36364301611969 +4 C0 441 0 485 0 +0 + +0101000 ++3172 0 -3173 0 * +Ed + 1e-07 1 1 0 +1 1052 0 -3 3.00000000209999 +2 2326 477 0 -3 3.00000000209999 +2 2327 480 0 -3 3.00000000209999 +4 CN 477 0 480 0 +0 + +0101000 ++3190 0 -3176 0 * +Ed + 1e-07 1 1 0 +1 1053 0 -2.9999999996 3.0000000024 +2 2328 477 0 -2.9999999996 3.0000000024 +2 2329 478 0 -2.9999999996 3.0000000024 +4 CN 477 0 478 0 +0 + +0101000 ++3191 0 -3175 0 * +Ed + 1e-07 1 1 0 +1 1054 0 -2.9999999982 3.00000000209999 +2 2330 481 0 -2.9999999982 3.00000000209999 +4 G1 481 0 440 0 +0 + +0101000 ++3182 0 -3178 0 * +Ed + 1e-07 1 1 0 +1 1055 0 -2.99999999990001 3.0000000022 +2 2331 481 0 -2.99999999990001 3.0000000022 +2 2332 480 0 -2.99999999990001 3.0000000022 +4 CN 481 0 480 0 +0 + +0101000 ++3181 0 -3177 0 * +Ed + 1e-07 1 1 0 +1 1056 0 -2.9999999977 3.00000000209999 +2 2333 478 0 -2.9999999977 3.00000000209999 +4 G1 478 0 438 0 +0 + +0101000 ++3189 0 -3174 0 * +Ed + 1e-07 1 1 0 +1 1057 0 -15.9999999999 -8.0000000038 +2 2334 483 0 -15.9999999999 -8.0000000038 +2 2335 482 0 -15.9999999999 -8.0000000038 +4 CN 483 0 482 0 +0 + +0101000 ++3171 0 -3179 0 * +Ed + 1e-07 1 1 0 +1 1058 0 3.65125403549105 6.79284668932479 +2 2336 483 0 3.65125403549105 6.79284668932479 +4 C0 483 0 486 0 +0 + +0101000 ++3171 0 -3170 0 * +Ed + 1e-07 1 1 0 +1 1059 0 -15.9999999999 -8.0000000038 +2 2337 483 0 -15.9999999999 -8.0000000038 +2 2338 482 0 -15.9999999999 -8.0000000038 +4 CN 483 0 482 0 +0 + +0101000 ++3170 0 -3180 0 * +Ed + 1e-07 1 1 0 +1 1060 0 0.999999998299998 10.499999998 +2 2339 485 0 0.999999998299998 10.499999998 +2 2340 484 0 0.999999998299998 10.499999998 +4 CN 485 0 484 0 +0 + +0101000 ++3172 0 -3169 0 * +Ed + 1e-07 1 1 0 +1 1061 0 0.999999998299998 10.499999998 +2 2341 485 0 0.999999998299998 10.499999998 +2 2342 484 0 0.999999998299998 10.499999998 +4 CN 485 0 484 0 +0 + +0101000 ++3173 0 -3168 0 * +Ed + 1e-07 1 1 0 +1 1062 0 3.65125403549105 6.79284668932479 +2 2343 485 0 3.65125403549105 6.79284668932479 +4 C0 485 0 362 0 +2 2344 362 0 3.65125403549105 6.79284668932479 +0 + +0101000 ++3169 0 -3168 0 * +Ed + 1e-07 1 1 0 +1 1063 0 0.509661382145205 3.65125403549105 +2 2345 482 0 0.509661382145205 3.65125403549105 +4 C0 482 0 486 0 +0 + +0101000 ++3170 0 -3171 0 * +Ed + 1e-07 1 1 0 +1 1064 0 0.509661382145205 3.65125403549105 +2 2346 484 0 0.509661382145205 3.65125403549105 +4 C0 484 0 362 0 +2 2347 362 0 0.509661382145205 3.65125403549105 +0 + +0101000 ++3168 0 -3169 0 * +Ed + 1e-07 1 1 0 +1 1065 0 -13.7499999995 13.7499999995 +2 2348 487 0 -13.7499999995 13.7499999995 +4 G1 444 0 487 0 +0 + +0101000 ++3167 0 -3166 0 * +Ed + 1e-07 1 1 0 +1 1066 0 -13.6410161510208 13.641016151349 +4 C0 444 0 301 0 +2 2349 301 0 -13.6410161510208 13.641016151349 +0 + +0101000 ++3254 0 -3166 0 * +Ed + 1e-07 1 1 0 +1 1067 0 -13.641016151349 13.6410161510208 +4 C0 444 0 362 0 +2 2350 362 0 -13.641016151349 13.6410161510208 +0 + +0101000 ++3167 0 -3255 0 * +Ed + 1e-07 1 1 0 +1 1068 0 5.15082828696017 5.67442706255529 +2 2351 487 0 5.15082828696017 5.67442706255529 +4 C0 487 0 362 0 +2 2352 362 0 5.15082828696017 5.67442706255529 +0 + +0101000 ++3165 0 -3167 0 * +Ed + 1e-07 1 1 0 +1 1069 0 5.15082828696017 5.67442706255529 +2 2353 487 0 5.15082828696017 5.67442706255529 +4 C0 487 0 301 0 +2 2354 301 0 5.15082828696017 5.67442706255529 +0 + +0101000 ++3164 0 -3166 0 * +Ed + 1e-07 1 1 0 +1 1070 0 -13.75 13.749999999 +2 2355 487 0 -13.75 13.749999999 +4 G1 487 0 488 0 +2 2356 488 0 -13.75 13.749999999 +0 + +0101000 ++3165 0 -3164 0 * +Ed + 1e-07 1 1 0 +1 1071 0 -13.7499999995 13.7499999995 +2 2357 489 0 -13.7499999995 13.7499999995 +4 G1 442 0 489 0 +0 + +0101000 ++3163 0 -3162 0 * +Ed + 1e-07 1 1 0 +1 1072 0 -12.8987473699968 12.8987473699866 +4 C0 442 0 362 0 +2 2358 362 0 -12.8987473699968 12.8987473699866 +0 + +0101000 ++3258 0 -3163 0 * +Ed + 1e-07 1 1 0 +1 1073 0 -12.8987473699968 12.8987473699866 +4 C0 442 0 301 0 +2 2359 301 0 -12.8987473699968 12.8987473699866 +0 + +0101000 ++3257 0 -3162 0 * +Ed + 1e-07 1 1 0 +1 1074 0 -13.7499999995 13.7499999995 +2 2360 489 0 -13.7499999995 13.7499999995 +4 G1 488 0 489 0 +2 2361 488 0 -13.7499999995 13.7499999995 +0 + +0101000 ++3161 0 -3160 0 * +Ed + 1e-07 1 1 0 +1 1075 0 -43.2307666907861 43.2307666911963 +4 C0 488 0 301 0 +2 2362 301 0 -43.2307666907861 43.2307666911963 +2 2363 488 0 -43.2307666907861 43.2307666911963 +0 + +0101000 ++3160 0 -3164 0 * +Ed + 1e-07 1 1 0 +1 1076 0 -43.2307666907861 43.2307666911963 +4 C0 488 0 362 0 +2 2364 362 0 -43.2307666907861 43.2307666911963 +2 2365 488 0 -43.2307666907861 43.2307666911963 +0 + +0101000 ++3161 0 -3165 0 * +Ed + 1e-07 1 1 0 +1 1077 0 4.6097762188663 5.15082828698478 +2 2366 489 0 4.6097762188663 5.15082828698478 +4 C0 489 0 362 0 +2 2367 362 0 4.6097762188663 5.15082828698478 +0 + +0101000 ++3163 0 -3161 0 * +Ed + 1e-07 1 1 0 +1 1078 0 4.6097762188663 5.15082828698478 +2 2368 489 0 4.6097762188663 5.15082828698478 +4 C0 489 0 301 0 +2 2369 301 0 4.6097762188663 5.15082828698478 +0 + +0101000 ++3162 0 -3160 0 * +Ed + 1e-07 1 1 0 +1 1079 0 -6.21187114162243 6.2118711406277 +4 C0 436 0 301 0 +2 2370 301 0 -6.21187114162243 6.2118711406277 +0 + +0101000 ++3267 0 -3159 0 * +Ed + 1e-07 1 1 0 +1 1080 0 -6.21187114162243 6.2118711406277 +4 C0 436 0 362 0 +2 2371 362 0 -6.21187114162243 6.2118711406277 +0 + +0101000 ++3265 0 -3158 0 * +Ed + 1e-07 1 1 0 +1 1081 0 -13.7499999995 13.7499999995 +2 2372 490 0 -13.7499999995 13.7499999995 +4 G1 436 0 490 0 +0 + +0101000 ++3158 0 -3159 0 * +Ed + 1e-07 1 1 0 +1 1082 0 5.70933364760454 6.1805725456612 +2 2373 490 0 5.70933364760454 6.1805725456612 +4 C0 490 0 362 0 +2 2374 362 0 5.70933364760454 6.1805725456612 +0 + +0101000 ++3157 0 -3158 0 * +Ed + 1e-07 1 1 0 +1 1083 0 5.70933364760454 6.1805725456612 +2 2375 490 0 5.70933364760454 6.1805725456612 +4 C0 490 0 301 0 +2 2376 301 0 5.70933364760454 6.1805725456612 +0 + +0101000 ++3156 0 -3159 0 * +Ed + 1e-07 1 1 0 +1 1084 0 -13.75 13.749999999 +2 2377 490 0 -13.75 13.749999999 +4 G1 490 0 491 0 +2 2378 491 0 -13.75 13.749999999 +0 + +0101000 ++3157 0 -3156 0 * +Ed + 1e-07 1 1 0 +1 1085 0 -1.23479396146506 1.2347939614323 +4 C0 301 0 427 0 +2 2379 301 0 -1.23479396146506 1.2347939614323 +0 + +0101000 ++3277 0 -3155 0 * +Ed + 1e-07 1 1 0 +1 1086 0 -55.8013039183206 55.8013039181823 +4 C0 301 0 491 0 +2 2380 301 0 -55.8013039183206 55.8013039181823 +2 2381 491 0 -55.8013039183206 55.8013039181823 +0 + +0101000 ++3154 0 -3156 0 * +Ed + 1e-07 1 1 0 +1 1087 0 2.1446479863734 2.80787310213978 +2 2382 492 0 2.1446479863734 2.80787310213978 +4 C0 301 0 492 0 +2 2383 301 0 2.1446479863734 2.80787310213978 +0 + +0101000 ++3154 0 -3155 0 * +Ed + 1e-07 1 1 0 +1 1088 0 2.1446479863734 2.80787310213978 +2 2384 492 0 2.1446479863734 2.80787310213978 +4 C0 362 0 492 0 +2 2385 362 0 2.1446479863734 2.80787310213978 +0 + +0101000 ++3153 0 -3152 0 * +Ed + 1e-07 1 1 0 +1 1089 0 -55.8013039183206 55.8013039181823 +4 C0 362 0 491 0 +2 2386 362 0 -55.8013039183206 55.8013039181823 +2 2387 491 0 -55.8013039183206 55.8013039181823 +0 + +0101000 ++3153 0 -3157 0 * +Ed + 1e-07 1 1 0 +1 1090 0 -1.23479396146506 1.2347939614323 +4 C0 362 0 427 0 +2 2388 362 0 -1.23479396146506 1.2347939614323 +0 + +0101000 ++3280 0 -3152 0 * +Ed + 1e-07 1 1 0 +1 1091 0 -13.7499999995 13.7499999995 +2 2389 492 0 -13.7499999995 13.7499999995 +4 G1 427 0 492 0 +0 + +0101000 ++3152 0 -3155 0 * +Ed + 1e-07 1 1 0 +1 1092 0 -13.7499999995 13.7499999995 +2 2390 492 0 -13.7499999995 13.7499999995 +4 G1 491 0 492 0 +2 2391 491 0 -13.7499999995 13.7499999995 +0 + +0101000 ++3153 0 -3154 0 * +Ed + 1e-07 1 1 0 +1 1093 0 -4.16049991609 2.83950008391 +2 2392 493 0 -4.16049991609 2.83950008391 +2 2393 494 0 -4.16049991609 2.83950008391 +4 CN 493 0 494 0 +0 + +0101000 ++3151 0 -3150 0 * +Ed + 1e-07 1 1 0 +1 1094 0 3.14159265358979 6.28318530717959 +2 2394 493 0 3.14159265358979 6.28318530717959 +4 C0 493 0 495 0 +2 2395 495 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3151 0 -3149 0 * +Ed + 1e-07 1 1 0 +1 1095 0 -4.16049991609 2.83950008391 +2 2396 493 0 -4.16049991609 2.83950008391 +2 2397 494 0 -4.16049991609 2.83950008391 +4 CN 493 0 494 0 +0 + +0101000 ++3149 0 -3148 0 * +Ed + 1e-07 1 1 0 +1 1096 0 3.14159265358979 6.28318530717959 +2 2398 493 0 3.14159265358979 6.28318530717959 +4 C0 493 0 360 0 +2 2399 360 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3150 0 -3148 0 * +Ed + 1e-07 1 1 0 +1 1097 0 0 3.14159265358979 +2 2400 494 0 0 3.14159265358979 +4 C0 494 0 495 0 +2 2401 495 0 0 3.14159265358979 +0 + +0101000 ++3149 0 -3151 0 * +Ed + 1e-07 1 1 0 +1 1098 0 0 3.14159265358979 +2 2402 494 0 0 3.14159265358979 +4 C0 494 0 360 0 +2 2403 360 0 0 3.14159265358979 +0 + +0101000 ++3148 0 -3150 0 * +Ed + 1e-07 1 1 0 +1 1099 0 0 3.14159265358979 +2 2404 496 0 0 3.14159265358979 +4 C0 360 0 496 0 +2 2405 360 0 0 3.14159265358979 +0 + +0101000 ++3147 0 -3146 0 * +Ed + 1e-07 1 1 0 +1 1100 0 3.14159265358979 6.28318530717959 +2 2406 497 0 3.14159265358979 6.28318530717959 +4 C0 360 0 497 0 +2 2407 360 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3146 0 -3147 0 * +Ed + 1e-07 1 1 0 +1 1101 0 -50 -43 +2 2408 387 0 -50 -43 +4 G1 387 0 498 0 +2 2409 498 0 -50 -43 +0 + +0101000 ++3145 0 -3386 120 * +Ed + 1e-07 1 1 0 +1 1102 0 4.71238898038469 6.2831777796514 +2 2410 387 0 4.71238898038469 6.2831777796514 +4 C0 387 0 495 0 +2 2411 495 0 4.71238898038469 6.2831777796514 +0 + +0101000 ++3145 0 -3144 0 * +Ed + 1e-07 1 1 0 +1 1103 0 -50 -43 +2 2412 387 0 -50 -43 +4 G1 387 0 499 0 +2 2413 499 0 -50 -43 +0 + +0101000 ++3144 0 -3348 120 * +Ed + 1e-07 1 1 0 +1 1104 0 -50 -43 +2 2414 386 0 -50 -43 +4 G1 386 0 499 0 +2 2415 499 0 -50 -43 +0 + +0101000 ++3143 0 -3352 120 * +Ed + 1e-07 1 1 0 +1 1105 0 6.28318075530153 7.36529251234008 +2 2416 386 0 6.28318075530153 7.36529251234008 +4 C0 386 0 495 0 +2 2417 495 0 6.28318075530153 7.36529251234008 +0 + +0101000 ++3143 0 -3142 0 * +Ed + 1e-07 1 1 0 +1 1106 0 -50 -43 +2 2418 386 0 -50 -43 +4 G1 386 0 500 0 +2 2419 500 0 -50 -43 +0 + +0101000 ++3142 0 -3356 120 * +Ed + 1e-07 1 1 0 +1 1107 0 -50 -43 +2 2420 384 0 -50 -43 +4 G1 384 0 500 0 +2 2421 500 0 -50 -43 +0 + +0101000 ++3141 0 -3354 120 * +Ed + 1e-07 1 1 0 +1 1108 0 1.08210546427801 1.37058478051409 +2 2422 384 0 1.08210546427801 1.37058478051409 +4 C0 384 0 495 0 +2 2423 495 0 1.08210546427801 1.37058478051409 +0 + +0101000 ++3141 0 -3140 0 * +Ed + 7.80303658359224e-06 1 1 0 +1 1109 0 -50 -43 +2 2424 384 0 -50 -43 +2 2425 377 0 -50 -43 +4 G1 384 0 377 0 +0 + +0101000 ++3140 0 -3364 120 * +Ed + 1e-07 1 1 0 +1 1110 0 253.667619105 271.486316455 +2 2426 377 0 253.667619105 271.486316455 +4 C0 377 0 495 0 +2 2427 495 0 253.667619105 271.486316455 +0 + +0101000 ++3140 0 -3139 0 * +Ed + 1e-07 1 1 0 +1 1111 0 -25 -18 +2 2428 377 0 -25 -18 +4 G1 377 0 501 0 +2 2429 501 0 -25 -18 +0 + +0101000 ++3139 0 -3377 120 * +Ed + 1e-07 1 1 0 +1 1112 0 -3.5 3.5 +2 2430 367 0 -3.5 3.5 +4 G1 502 0 367 0 +2 2431 502 0 -3.5 3.5 +0 + +0101000 ++3138 0 -3381 120 * +Ed + 1e-07 1 1 0 +1 1113 0 -3.58578643772203 3.58578643758061 +4 C0 502 0 495 0 +2 2432 495 0 -3.58578643772203 3.58578643758061 +2 2433 502 0 -3.58578643772203 3.58578643758061 +0 + +0101000 ++3138 0 -3137 0 * +Ed + 1e-07 1 1 0 +1 1114 0 -3.5 3.5 +4 C0 502 0 503 0 +2 2434 502 0 -3.5 3.5 +2 2435 503 0 -3.5 3.5 +0 + +0101000 ++3137 0 -3375 120 * +Ed + 1e-07 1 1 0 +1 1115 0 -25 -18 +2 2436 373 0 -25 -18 +4 G1 373 0 504 0 +2 2437 504 0 -25 -18 +0 + +0101000 ++3136 0 -3370 120 * +Ed + 1e-07 1 1 0 +1 1116 0 365.975427238 395.770502936 +2 2438 373 0 365.975427238 395.770502936 +4 C0 373 0 495 0 +2 2439 495 0 365.975427238 395.770502936 +0 + +0101000 ++3136 0 -3135 0 * +Ed + 2.29990299937802e-05 1 1 0 +1 1117 0 -25 -18 +2 2440 373 0 -25 -18 +4 G1 373 0 505 0 +2 2441 505 0 -25 -18 +0 + +0101000 ++3135 0 -3369 120 * +Ed + 1e-07 1 1 0 +1 1118 0 -50 -43 +2 2442 388 0 -50 -43 +4 G1 388 0 505 0 +2 2443 505 0 -50 -43 +0 + +0101000 ++3134 0 -3365 120 * +Ed + 1e-07 1 1 0 +1 1119 0 3.14160018112023 3.92699081698724 +2 2444 388 0 3.14160018112023 3.92699081698724 +4 C0 388 0 495 0 +2 2445 495 0 3.14160018112023 3.92699081698724 +0 + +0101000 ++3134 0 -3133 0 * +Ed + 1e-07 1 1 0 +1 1120 0 -50 -43 +2 2446 388 0 -50 -43 +4 G1 388 0 506 0 +2 2447 506 0 -50 -43 +0 + +0101000 ++3133 0 -3346 120 * +Ed + 1e-07 1 1 0 +1 1121 0 -12.077212795244 12.0772127953148 +4 C0 506 0 495 0 +2 2448 495 0 -12.077212795244 12.0772127953148 +2 2449 506 0 -12.077212795244 12.0772127953148 +0 + +0101000 ++3133 0 -3132 0 * +Ed + 1e-07 1 1 0 +1 1122 0 -3.5 3.5 +4 C0 506 0 507 0 +2 2450 507 0 -3.5 3.5 +2 2451 506 0 -3.5 3.5 +0 + +0101000 ++3132 0 -3343 120 * +Ed + 1e-07 1 1 0 +1 1123 0 -3.5 3.5 +4 C0 508 0 507 0 +2 2452 508 0 -3.5 3.5 +2 2453 507 0 -3.5 3.5 +0 + +0101000 ++3131 0 -3383 120 * +Ed + 1e-07 1 1 0 +1 1124 0 -3.58578643758061 3.58578643765132 +4 C0 508 0 495 0 +2 2454 495 0 -3.58578643758061 3.58578643765132 +2 2455 508 0 -3.58578643758061 3.58578643765132 +0 + +0101000 ++3131 0 -3130 0 * +Ed + 1e-07 1 1 0 +1 1125 0 -3.5 3.5 +2 2456 359 0 -3.5 3.5 +4 G1 508 0 359 0 +2 2457 508 0 -3.5 3.5 +0 + +0101000 ++3130 0 -3388 120 * +Ed + 1e-07 1 1 0 +1 1126 0 3.14159265358979 6.28318530717959 +2 2458 509 0 3.14159265358979 6.28318530717959 +4 C0 509 0 495 0 +2 2459 495 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3129 0 -3128 0 * +Ed + 1e-07 1 1 0 +1 1127 0 -2.12132034355964 2.12132034355964 +2 2460 509 0 -2.12132034355964 2.12132034355964 +2 2461 510 0 -2.12132034355964 2.12132034355964 +4 CN 509 0 510 0 +0 + +0101000 ++3127 0 -3128 0 * +Ed + 1e-07 1 1 0 +1 1128 0 3.14159265358979 6.28318530717959 +2 2462 509 0 3.14159265358979 6.28318530717959 +2 2463 378 0 3.14159265358979 6.28318530717959 +4 C0 509 0 378 0 +0 + +0101000 ++3126 0 -3127 0 * +Ed + 1e-07 1 1 0 +1 1129 0 -2.12132034355964 2.12132034355964 +2 2464 509 0 -2.12132034355964 2.12132034355964 +2 2465 510 0 -2.12132034355964 2.12132034355964 +4 CN 509 0 510 0 +0 + +0101000 ++3126 0 -3129 0 * +Ed + 1e-07 1 1 0 +1 1130 0 4.71238898038469 7.85398163397448 +2 2466 510 0 4.71238898038469 7.85398163397448 +4 C0 510 0 495 0 +2 2467 495 0 4.71238898038469 7.85398163397448 +0 + +0101000 ++3128 0 -3129 0 * +Ed + 1e-07 1 1 0 +1 1131 0 4.71238898038469 7.85398163397448 +2 2468 510 0 4.71238898038469 7.85398163397448 +2 2469 379 0 4.71238898038469 7.85398163397448 +4 C0 510 0 379 0 +0 + +0101000 ++3127 0 -3126 0 * +Ed + 1e-07 1 1 0 +1 1132 0 3.14159265358979 6.28318530717959 +2 2470 511 0 3.14159265358979 6.28318530717959 +4 C0 511 0 495 0 +2 2471 495 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3125 0 -3124 0 * +Ed + 1e-07 1 1 0 +1 1133 0 -2.12132034355964 2.12132034355964 +2 2472 511 0 -2.12132034355964 2.12132034355964 +2 2473 512 0 -2.12132034355964 2.12132034355964 +4 CN 511 0 512 0 +0 + +0101000 ++3123 0 -3124 0 * +Ed + 1e-07 1 1 0 +1 1134 0 3.14159265358979 6.28318530717959 +2 2474 511 0 3.14159265358979 6.28318530717959 +2 2475 381 0 3.14159265358979 6.28318530717959 +4 C0 511 0 381 0 +0 + +0101000 ++3122 0 -3123 0 * +Ed + 1e-07 1 1 0 +1 1135 0 -2.12132034355964 2.12132034355964 +2 2476 511 0 -2.12132034355964 2.12132034355964 +2 2477 512 0 -2.12132034355964 2.12132034355964 +4 CN 511 0 512 0 +0 + +0101000 ++3122 0 -3125 0 * +Ed + 1e-07 1 1 0 +1 1136 0 4.71238898038469 7.85398163397448 +2 2478 512 0 4.71238898038469 7.85398163397448 +4 C0 512 0 495 0 +2 2479 495 0 4.71238898038469 7.85398163397448 +0 + +0101000 ++3124 0 -3125 0 * +Ed + 1e-07 1 1 0 +1 1137 0 4.71238898038469 7.85398163397448 +2 2480 512 0 4.71238898038469 7.85398163397448 +2 2481 380 0 4.71238898038469 7.85398163397448 +4 C0 512 0 380 0 +0 + +0101000 ++3123 0 -3122 0 * +Ed + 1e-07 1 1 0 +1 1138 0 -2.79242318268615 2.79242318267784 +2 2482 513 0 -2.79242318268615 2.79242318267784 +2 2483 514 0 -2.79242318268615 2.79242318267784 +4 CN 513 0 514 0 +0 + +0101000 ++3121 0 -3120 0 * +Ed + 1e-07 1 1 0 +1 1139 0 2.64159265359167 5.78318530718146 +2 2484 513 0 2.64159265359167 5.78318530718146 +4 C0 513 0 515 0 +2 2485 515 0 2.64159265359167 5.78318530718146 +0 + +0101000 ++3121 0 -3119 0 * +Ed + 1e-07 1 1 0 +1 1140 0 -2.79242318268615 2.79242318267784 +2 2486 513 0 -2.79242318268615 2.79242318267784 +2 2487 514 0 -2.79242318268615 2.79242318267784 +4 CN 513 0 514 0 +0 + +0101000 ++3119 0 -3118 0 * +Ed + 1e-07 1 1 0 +1 1141 0 2.64159265359277 5.78318530718256 +2 2488 513 0 2.64159265359277 5.78318530718256 +4 C0 513 0 495 0 +2 2489 495 0 2.64159265359277 5.78318530718256 +0 + +0101000 ++3120 0 -3118 0 * +Ed + 1e-07 1 1 0 +1 1142 0 5.78318530718146 8.92477796077126 +2 2490 514 0 5.78318530718146 8.92477796077126 +4 C0 514 0 515 0 +2 2491 515 0 5.78318530718146 8.92477796077126 +0 + +0101000 ++3119 0 -3121 0 * +Ed + 1e-07 1 1 0 +1 1143 0 5.78318530718256 8.92477796077236 +2 2492 514 0 5.78318530718256 8.92477796077236 +4 C0 514 0 495 0 +2 2493 495 0 5.78318530718256 8.92477796077236 +0 + +0101000 ++3118 0 -3120 0 * +Ed + 1e-07 1 1 0 +1 1144 0 -2.79242318268615 2.79242318267784 +2 2494 516 0 -2.79242318268615 2.79242318267784 +2 2495 517 0 -2.79242318268615 2.79242318267784 +4 G2 516 0 517 0 +0 + +0101000 ++3117 0 -3116 0 * +Ed + 1e-07 1 1 0 +1 1145 0 2.64159265359167 5.78318530718146 +2 2496 516 0 2.64159265359167 5.78318530718146 +4 C0 516 0 518 0 +2 2497 518 0 2.64159265359167 5.78318530718146 +0 + +0101000 ++3117 0 -3115 0 * +Ed + 1e-07 1 1 0 +1 1146 0 -2.79242318268615 2.79242318267784 +2 2498 516 0 -2.79242318268615 2.79242318267784 +2 2499 517 0 -2.79242318268615 2.79242318267784 +4 CN 516 0 517 0 +0 + +0101000 ++3115 0 -3114 0 * +Ed + 1e-07 1 1 0 +1 1147 0 2.64159265359277 5.78318530718256 +2 2500 516 0 2.64159265359277 5.78318530718256 +4 C0 516 0 495 0 +2 2501 495 0 2.64159265359277 5.78318530718256 +0 + +0101000 ++3116 0 -3114 0 * +Ed + 1e-07 1 1 0 +1 1148 0 5.78318530718146 8.92477796077126 +2 2502 517 0 5.78318530718146 8.92477796077126 +4 C0 517 0 518 0 +2 2503 518 0 5.78318530718146 8.92477796077126 +0 + +0101000 ++3115 0 -3117 0 * +Ed + 1e-07 1 1 0 +1 1149 0 5.78318530718256 8.92477796077236 +2 2504 517 0 5.78318530718256 8.92477796077236 +4 C0 517 0 495 0 +2 2505 495 0 5.78318530718256 8.92477796077236 +0 + +0101000 ++3114 0 -3116 0 * +Ed + 1e-07 1 1 0 +1 1150 0 3.14159265358979 6.28318530717959 +2 2506 390 0 3.14159265358979 6.28318530717959 +4 C0 515 0 390 0 +2 2507 515 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3113 0 -3112 0 * +Ed + 1e-07 1 1 0 +1 1151 0 0 3.14159265358979 +2 2508 391 0 0 3.14159265358979 +4 C0 515 0 391 0 +2 2509 515 0 0 3.14159265358979 +0 + +0101000 ++3112 0 -3113 0 * +Ed + 1e-07 1 1 0 +1 1152 0 3.14159265358979 6.28318530717959 +2 2510 392 0 3.14159265358979 6.28318530717959 +4 C0 518 0 392 0 +2 2511 518 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3111 0 -3110 0 * +Ed + 1e-07 1 1 0 +1 1153 0 0 3.14159265358979 +2 2512 393 0 0 3.14159265358979 +4 C0 518 0 393 0 +2 2513 518 0 0 3.14159265358979 +0 + +0101000 ++3110 0 -3111 0 * +Ed + 1e-07 1 1 0 +1 1154 0 -4.16049991609 2.83950008391 +2 2514 497 0 -4.16049991609 2.83950008391 +2 2515 496 0 -4.16049991609 2.83950008391 +4 CN 497 0 496 0 +0 + +0101000 ++3109 0 -3146 0 * +Ed + 1e-07 1 1 0 +1 1155 0 3.14159265358979 6.28318530717959 +2 2516 497 0 3.14159265358979 6.28318530717959 +4 C0 497 0 495 0 +2 2517 495 0 3.14159265358979 6.28318530717959 +0 + +0101000 ++3109 0 -3108 0 * +Ed + 1e-07 1 1 0 +1 1156 0 -4.16049991609 2.83950008391 +2 2518 497 0 -4.16049991609 2.83950008391 +2 2519 496 0 -4.16049991609 2.83950008391 +4 CN 497 0 496 0 +0 + +0101000 ++3108 0 -3147 0 * +Ed + 1e-07 1 1 0 +1 1157 0 0 3.14159265358979 +2 2520 496 0 0 3.14159265358979 +4 C0 496 0 495 0 +2 2521 495 0 0 3.14159265358979 +0 + +0101000 ++3108 0 -3109 0 * +Ed + 1e-07 1 1 0 +1 1158 0 -22 -18 +2 2522 380 0 -22 -18 +2 2523 381 0 -22 -18 +4 CN 380 0 381 0 +0 + +0101000 ++3123 0 -3359 120 * +Ed + 1e-07 1 1 0 +1 1159 0 -22 -18 +2 2524 380 0 -22 -18 +2 2525 381 0 -22 -18 +4 CN 380 0 381 0 +0 + +0101000 ++3122 0 -3360 120 * +Ed + 1e-07 1 1 0 +1 1160 0 -44.5 -43 +2 2526 390 0 -44.5 -43 +2 2527 391 0 -44.5 -43 +4 CN 390 0 391 0 +0 + +0101000 ++3113 0 -3341 120 * +Ed + 1e-07 1 1 0 +1 1161 0 -44.5 -43 +2 2528 390 0 -44.5 -43 +2 2529 391 0 -44.5 -43 +4 CN 390 0 391 0 +0 + +0101000 ++3112 0 -3342 120 * +Ed + 1e-07 1 1 0 +1 1162 0 -44.5 -43 +2 2530 392 0 -44.5 -43 +2 2531 393 0 -44.5 -43 +4 CN 392 0 393 0 +0 + +0101000 ++3111 0 -3339 120 * +Ed + 1e-07 1 1 0 +1 1163 0 -44.5 -43 +2 2532 392 0 -44.5 -43 +2 2533 393 0 -44.5 -43 +4 CN 392 0 393 0 +0 + +0101000 ++3110 0 -3340 120 * +Ed + 1e-07 1 1 0 +1 1164 0 -3.04627983564482 4.0617064475521 +2 2534 394 0 -3.04627983564482 4.0617064475521 +2 2535 395 0 -3.04627983564482 4.0617064475521 +4 CN 394 0 395 0 +0 + +0101000 ++3337 120 -3107 0 * +Ed + 1e-07 1 1 0 +1 1165 0 2.64159265359045 5.78318530718024 +2 2536 394 0 2.64159265359045 5.78318530718024 +4 C0 394 0 495 0 +2 2537 495 0 2.64159265359045 5.78318530718024 +0 + +0101000 ++3106 0 -3107 0 * +Ed + 1e-07 1 1 0 +1 1166 0 -3.04627983564482 4.0617064475521 +2 2538 394 0 -3.04627983564482 4.0617064475521 +2 2539 395 0 -3.04627983564482 4.0617064475521 +4 G2 394 0 395 0 +0 + +0101000 ++3338 120 -3106 0 * +Ed + 1e-07 1 1 0 +1 1167 0 5.78318530718024 8.92477796077003 +2 2540 395 0 5.78318530718024 8.92477796077003 +4 C0 395 0 495 0 +2 2541 495 0 5.78318530718024 8.92477796077003 +0 + +0101000 ++3107 0 -3106 0 * +Ed + 1e-07 1 1 0 +1 1168 0 -17.5 -13.5 +2 2542 379 0 -17.5 -13.5 +2 2543 378 0 -17.5 -13.5 +4 CN 379 0 378 0 +0 + +0101000 ++3127 0 -3362 120 * +Ed + 1e-07 1 1 0 +1 1169 0 -17.5 -13.5 +2 2544 379 0 -17.5 -13.5 +2 2545 378 0 -17.5 -13.5 +4 CN 379 0 378 0 +0 + +0101000 ++3126 0 -3361 120 * +Ed + 1e-07 1 1 0 +1 1170 0 -26 -19 +2 2546 359 0 -26 -19 +4 G1 359 0 498 0 +2 2547 498 0 -26 -19 +0 + +0101000 ++3105 0 -3390 120 * +Ed + 1e-07 1 1 0 +1 1171 0 1.5707963267949 2.35619449019234 +2 2548 359 0 1.5707963267949 2.35619449019234 +4 C0 359 0 495 0 +2 2549 495 0 1.5707963267949 2.35619449019234 +0 + +0101000 ++3105 0 -3130 0 * +Ed + 1e-07 1 1 0 +1 1172 0 -18 18 +4 C0 507 0 495 0 +2 2550 495 0 -18 18 +2 2551 507 0 -18 18 +0 + +0101000 ++3132 0 -3131 0 * +Ed + 1e-07 1 1 0 +1 1173 0 -1.0256020699 1.0256020699 +4 C0 505 0 495 0 +2 2552 495 0 -1.0256020699 1.0256020699 +2 2553 505 0 -1.0256020699 1.0256020699 +0 + +0101000 ++3134 0 -3135 0 * +Ed + 1e-07 1 1 0 +1 1174 0 -3.5 3.5 +4 C0 504 0 503 0 +2 2554 503 0 -3.5 3.5 +2 2555 504 0 -3.5 3.5 +0 + +0101000 ++3104 0 -3371 120 * +Ed + 1e-07 1 1 0 +1 1175 0 -21.07275669483 21.07275669488 +4 C0 504 0 495 0 +2 2556 495 0 -21.07275669483 21.07275669488 +2 2557 504 0 -21.07275669483 21.07275669488 +0 + +0101000 ++3136 0 -3104 0 * +Ed + 1e-07 1 1 0 +1 1176 0 -15.394965591 15.3949655911 +4 C0 503 0 495 0 +2 2558 495 0 -15.394965591 15.3949655911 +2 2559 503 0 -15.394965591 15.3949655911 +0 + +0101000 ++3104 0 -3137 0 * +Ed + 1e-07 1 1 0 +1 1177 0 3.92699081699431 4.71238898038469 +2 2560 367 0 3.92699081699431 4.71238898038469 +4 C0 367 0 495 0 +2 2561 495 0 3.92699081699431 4.71238898038469 +0 + +0101000 ++3138 0 -3103 0 * +Ed + 1e-07 1 1 0 +1 1178 0 -26 -19 +2 2562 367 0 -26 -19 +4 G1 367 0 501 0 +2 2563 501 0 -26 -19 +0 + +0101000 ++3103 0 -3379 120 * +Ed + 1e-07 1 1 0 +1 1179 0 -10.07893218813 10.07893218817 +4 C0 501 0 495 0 +2 2564 495 0 -10.07893218813 10.07893218817 +2 2565 501 0 -10.07893218813 10.07893218817 +0 + +0101000 ++3139 0 -3103 0 * +Ed + 1e-07 1 1 0 +1 1180 0 -14.5100701232189 14.5100701232603 +4 C0 500 0 495 0 +2 2566 495 0 -14.5100701232189 14.5100701232603 +2 2567 500 0 -14.5100701232189 14.5100701232603 +0 + +0101000 ++3142 0 -3141 0 * +Ed + 1e-07 1 1 0 +1 1181 0 -5.00074082596 5.00074082596 +4 C0 499 0 495 0 +2 2568 495 0 -5.00074082596 5.00074082596 +2 2569 499 0 -5.00074082596 5.00074082596 +0 + +0101000 ++3143 0 -3144 0 * +Ed + 1e-07 1 1 0 +1 1182 0 -32.8490498522 32.8490498523 +4 C0 498 0 495 0 +2 2570 495 0 -32.8490498522 32.8490498523 +2 2571 498 0 -32.8490498522 32.8490498523 +0 + +0101000 ++3105 0 -3145 0 * +Ed + 1.00000971340767e-07 1 1 0 +1 1183 0 2.07079632679514 5.21238898038494 +2 2572 519 0 2.07079632679514 5.21238898038494 +4 C0 520 0 519 0 +2 2573 520 0 2.07079632679514 5.21238898038494 +2 2574 495 121 2.07079632679514 5.21238898038494 +2 2575 495 122 2.07079632679514 5.21238898038494 +0 + +0101000 ++3102 0 -3101 0 * +Ed + 1.00001355033128e-07 1 1 0 +1 1184 0 5.21238898038494 8.35398163397473 +2 2576 521 0 5.21238898038494 8.35398163397473 +4 C0 520 0 521 0 +2 2577 520 0 5.21238898038494 8.35398163397473 +2 2578 495 121 5.21238898038494 8.35398163397473 +2 2579 495 122 5.21238898038494 8.35398163397473 +0 + +0101000 ++3101 0 -3102 0 * +Ed + 1.00000971340767e-07 1 1 0 +1 1185 0 2.07079632679536 5.21238898038515 +2 2580 522 0 2.07079632679536 5.21238898038515 +4 C0 523 0 522 0 +2 2581 523 0 2.07079632679536 5.21238898038515 +2 2582 495 123 2.07079632679536 5.21238898038515 +0 + +0101000 ++3100 0 -3099 0 * +Ed + 1.00000971340767e-07 1 1 0 +1 1186 0 5.21238898038515 8.35398163397495 +2 2583 524 0 5.21238898038515 8.35398163397495 +4 C0 523 0 524 0 +2 2584 523 0 5.21238898038515 8.35398163397495 +2 2585 495 123 5.21238898038515 8.35398163397495 +0 + +0101000 ++3099 0 -3100 0 * +Ed + 1.00001350629417e-07 1 1 0 +1 1187 0 2.07079632679333 5.21238898038313 +2 2586 525 0 2.07079632679333 5.21238898038313 +4 C0 523 0 525 0 +2 2587 523 0 2.07079632679333 5.21238898038313 +2 2588 495 123 2.07079632679333 5.21238898038313 +0 + +0101000 ++3098 0 -3097 0 * +Ed + 1.00000298427949e-07 1 1 0 +1 1188 0 5.21238898038313 8.35398163397292 +2 2589 526 0 5.21238898038313 8.35398163397292 +4 C0 523 0 526 0 +2 2590 523 0 5.21238898038313 8.35398163397292 +2 2591 495 123 5.21238898038313 8.35398163397292 +0 + +0101000 ++3097 0 -3098 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 1189 0 2.07079632679501 5.2123889803848 +2 2592 527 0 2.07079632679501 5.2123889803848 +4 C0 520 0 527 0 +2 2593 520 0 2.07079632679501 5.2123889803848 +2 2594 495 121 2.07079632679501 5.2123889803848 +2 2595 495 122 2.07079632679501 5.2123889803848 +0 + +0101000 ++3096 0 -3095 0 * +Ed + 1.00000981681071e-07 1 1 0 +1 1190 0 5.2123889803848 8.35398163397459 +2 2596 528 0 5.2123889803848 8.35398163397459 +4 C0 520 0 528 0 +2 2597 520 0 5.2123889803848 8.35398163397459 +2 2598 495 121 5.2123889803848 8.35398163397459 +2 2599 495 122 5.2123889803848 8.35398163397459 +0 + +0101000 ++3095 0 -3096 0 * +Ed + 1e-07 1 1 0 +1 1191 0 5.21238898038645 8.35398163397625 +2 2600 529 0 5.21238898038645 8.35398163397625 +2 2601 530 0 5.21238898038645 8.35398163397625 +4 C0 529 0 530 0 +0 + +0101000 ++3094 0 -3093 0 * +Ed + 1e-07 1 1 0 +1 1192 0 -3.55399314159998 3.55399314159389 +2 2602 529 0 -3.55399314159998 3.55399314159389 +2 2603 531 0 -3.55399314159998 3.55399314159389 +4 CN 529 0 531 0 +0 + +0101000 ++3092 0 -3094 0 * +Ed + 1e-07 1 1 0 +1 1193 0 5.21238898038431 8.3539816339741 +2 2604 529 0 5.21238898038431 8.3539816339741 +4 C0 529 0 185 0 +2 2605 185 0 5.21238898038431 8.3539816339741 +0 + +0101000 ++3092 0 -3091 0 * +Ed + 1e-07 1 1 0 +1 1194 0 -3.55399314159998 3.55399314159389 +2 2606 529 0 -3.55399314159998 3.55399314159389 +2 2607 531 0 -3.55399314159998 3.55399314159389 +4 CN 529 0 531 0 +0 + +0101000 ++3091 0 -3093 0 * +Ed + 1e-07 1 1 0 +1 1195 0 2.07079632679666 5.21238898038645 +2 2608 531 0 2.07079632679666 5.21238898038645 +2 2609 532 0 2.07079632679666 5.21238898038645 +4 C0 531 0 532 0 +0 + +0101000 ++3093 0 -3094 0 * +Ed + 1e-07 1 1 0 +1 1196 0 2.07079632679451 5.21238898038431 +2 2610 531 0 2.07079632679451 5.21238898038431 +4 C0 531 0 185 0 +2 2611 185 0 2.07079632679451 5.21238898038431 +0 + +0101000 ++3091 0 -3092 0 * +Ed + 1e-07 1 1 0 +1 1197 0 -1 0 +2 2612 533 0 -1 0 +2 2613 534 0 -1 0 +4 CN 533 0 534 0 +0 + +0101000 ++3090 0 -3089 0 * +Ed + 1e-07 1 1 0 +1 1198 0 5.21238898038508 8.35398163397487 +2 2614 533 0 5.21238898038508 8.35398163397487 +2 2615 535 0 5.21238898038508 8.35398163397487 +4 C1 533 0 535 0 +0 + +0101000 ++3090 0 -3088 0 * +Ed + 1e-07 1 1 0 +1 1199 0 -1 0 +2 2616 533 0 -1 0 +2 2617 534 0 -1 0 +4 CN 533 0 534 0 +0 + +0101000 ++3088 0 -3087 0 * +Ed + 1e-07 1 1 0 +1 1200 0 5.21238898038508 8.35398163397487 +2 2618 533 0 5.21238898038508 8.35398163397487 +2 2619 536 0 5.21238898038508 8.35398163397487 +4 C0 533 0 536 0 +0 + +0101000 ++3089 0 -3087 0 * +Ed + 1e-07 1 1 0 +1 1201 0 2.07079632679529 5.21238898038508 +2 2620 534 0 2.07079632679529 5.21238898038508 +2 2621 537 0 2.07079632679529 5.21238898038508 +4 C1 534 0 537 0 +0 + +0101000 ++3088 0 -3090 0 * +Ed + 1e-07 1 1 0 +1 1202 0 2.07079632679529 5.21238898038508 +2 2622 534 0 2.07079632679529 5.21238898038508 +2 2623 538 0 2.07079632679529 5.21238898038508 +4 C0 534 0 538 0 +0 + +0101000 ++3087 0 -3089 0 * +Ed + 1e-07 1 1 0 +1 1203 0 -1.23606797750079 1.23606797749797 +2 2624 538 0 -1.23606797750079 1.23606797749797 +2 2625 536 0 -1.23606797750079 1.23606797749797 +4 G2 538 0 536 0 +0 + +0101000 ++3089 0 -3086 0 * +Ed + 1e-07 1 1 0 +1 1204 0 2.07079630196715 5.21238898038448 +2 2626 538 0 2.07079630196715 5.21238898038448 +4 C0 538 0 539 0 +2 2627 539 0 2.07079630196715 5.21238898038448 +0 + +0101000 ++3085 0 -3086 0 * +Ed + 1e-07 1 1 0 +1 1205 0 -1.23606797750079 1.23606797750292 +2 2628 538 0 -1.23606797750079 1.23606797750292 +2 2629 536 0 -1.23606797750079 1.23606797750292 +4 G2 538 0 536 0 +0 + +0101000 ++3087 0 -3085 0 * +Ed + 1e-07 1 1 0 +1 1206 0 5.21238898038448 8.35398160914674 +2 2630 536 0 5.21238898038448 8.35398160914674 +4 C0 536 0 539 0 +2 2631 539 0 5.21238898038448 8.35398160914674 +0 + +0101000 ++3086 0 -3085 0 * +Ed + 1e-07 1 1 0 +1 1207 0 -0.75 0.25 +2 2632 524 0 -0.75 0.25 +2 2633 522 0 -0.75 0.25 +4 CN 524 0 522 0 +0 + +0101000 ++3099 0 -3084 0 * +Ed + 1e-07 1 1 0 +1 1208 0 -0.75 0.25 +2 2634 524 0 -0.75 0.25 +2 2635 522 0 -0.75 0.25 +4 CN 524 0 522 0 +0 + +0101000 ++3100 0 -3083 0 * +Ed + 1e-07 1 1 0 +1 1209 0 5.21238898038515 8.35398163397495 +2 2636 524 0 5.21238898038515 8.35398163397495 +2 2637 540 0 5.21238898038515 8.35398163397495 +4 G1 524 0 540 0 +0 + +0101000 ++3084 0 -3083 0 * +Ed + 1e-07 1 1 0 +1 1210 0 2.07079632679536 5.21238898038515 +2 2638 522 0 2.07079632679536 5.21238898038515 +2 2639 541 0 2.07079632679536 5.21238898038515 +4 G1 522 0 541 0 +0 + +0101000 ++3083 0 -3084 0 * +Ed + 1e-07 1 1 0 +1 1211 0 5.21238898038622 8.35398163397601 +2 2640 542 0 5.21238898038622 8.35398163397601 +4 C0 543 0 542 0 +2 2641 543 0 5.21238898038622 8.35398163397601 +0 + +0101000 ++3082 0 -3081 0 * +Ed + 1e-07 1 1 0 +1 1212 0 2.07079632679642 5.21238898038622 +2 2642 544 0 2.07079632679642 5.21238898038622 +4 C0 543 0 544 0 +2 2643 543 0 2.07079632679642 5.21238898038622 +0 + +0101000 ++3081 0 -3082 0 * +Ed + 1e-07 1 1 0 +1 1213 0 2.07079632679412 5.21238898038392 +2 2644 541 0 2.07079632679412 5.21238898038392 +4 G1 543 0 541 0 +2 2645 543 0 2.07079632679412 5.21238898038392 +0 + +0101000 ++3080 0 -3079 0 * +Ed + 1e-07 1 1 0 +1 1214 0 5.21238898038392 8.35398163397371 +2 2646 540 0 5.21238898038392 8.35398163397371 +4 G1 543 0 540 0 +2 2647 543 0 5.21238898038392 8.35398163397371 +0 + +0101000 ++3079 0 -3080 0 * +Ed + 1e-07 1 1 0 +1 1215 0 1.5707963267949 3.14159265358979 +2 2648 541 0 1.5707963267949 3.14159265358979 +2 2649 540 0 1.5707963267949 3.14159265358979 +4 CN 541 0 540 0 +0 + +0101000 ++3079 0 -3084 0 * +Ed + 1e-07 1 1 0 +1 1216 0 1.5707963267949 3.14159265358979 +2 2650 541 0 1.5707963267949 3.14159265358979 +2 2651 540 0 1.5707963267949 3.14159265358979 +4 CN 541 0 540 0 +0 + +0101000 ++3080 0 -3083 0 * +Ed + 1e-07 1 1 0 +1 1217 0 5.23598775599215 6.28318530717959 +2 2652 537 0 5.23598775599215 6.28318530717959 +2 2653 535 0 5.23598775599215 6.28318530717959 +4 G2 537 0 535 0 +0 + +0101000 ++3078 0 -3090 0 * +Ed + 1e-07 1 1 0 +1 1218 0 5.23598775599215 6.28318530717959 +2 2654 537 0 5.23598775599215 6.28318530717959 +2 2655 535 0 5.23598775599215 6.28318530717959 +4 G2 537 0 535 0 +0 + +0101000 ++3077 0 -3088 0 * +Ed + 1e-07 1 1 0 +1 1219 0 2.07079632679523 5.21238898038503 +2 2656 537 0 2.07079632679523 5.21238898038503 +2 2657 187 0 2.07079632679523 5.21238898038503 +4 C1 537 0 187 0 +0 + +0101000 ++3077 0 -3078 0 * +Ed + 1e-07 1 1 0 +1 1220 0 5.21238898038503 8.35398163397482 +2 2658 535 0 5.21238898038503 8.35398163397482 +2 2659 189 0 5.21238898038503 8.35398163397482 +4 C1 535 0 189 0 +0 + +0101000 ++3078 0 -3077 0 * +Ed + 1e-07 1 1 0 +1 1221 0 2.0943951023856 3.14159265358979 +2 2660 187 0 2.0943951023856 3.14159265358979 +2 2661 189 0 2.0943951023856 3.14159265358979 +4 CN 187 0 189 0 +0 + +0101000 ++3078 0 -3633 0 * +Ed + 1e-07 1 1 0 +1 1222 0 2.0943951023856 3.14159265358979 +2 2662 187 0 2.0943951023856 3.14159265358979 +2 2663 189 0 2.0943951023856 3.14159265358979 +4 G2 187 0 189 0 +0 + +0101000 ++3077 0 -3634 0 * +Ed + 1e-07 1 1 0 +1 1223 0 -0.35 0.05 +2 2664 530 0 -0.35 0.05 +2 2665 532 0 -0.35 0.05 +4 CN 530 0 532 0 +0 + +0101000 ++3094 0 -3076 0 * +Ed + 1e-07 1 1 0 +1 1224 0 -0.35 0.05 +2 2666 530 0 -0.35 0.05 +2 2667 532 0 -0.35 0.05 +4 CN 530 0 532 0 +0 + +0101000 ++3093 0 -3075 0 * +Ed + 1e-07 1 1 0 +1 1225 0 5.21238898038645 8.35398163397625 +2 2668 530 0 5.21238898038645 8.35398163397625 +2 2669 545 0 5.21238898038645 8.35398163397625 +4 G1 530 0 545 0 +0 + +0101000 ++3076 0 -3075 0 * +Ed + 1e-07 1 1 0 +1 1226 0 2.07079632679666 5.21238898038645 +2 2670 532 0 2.07079632679666 5.21238898038645 +2 2671 546 0 2.07079632679666 5.21238898038645 +4 G1 532 0 546 0 +0 + +0101000 ++3075 0 -3076 0 * +Ed + 1e-07 1 1 0 +1 1227 0 1.5707963267949 3.14159265358979 +2 2672 546 0 1.5707963267949 3.14159265358979 +2 2673 545 0 1.5707963267949 3.14159265358979 +4 G2 546 0 545 0 +0 + +0101000 ++3074 0 -3076 0 * +Ed + 1e-07 1 1 0 +1 1228 0 1.5707963267949 3.14159265358979 +2 2674 546 0 1.5707963267949 3.14159265358979 +2 2675 545 0 1.5707963267949 3.14159265358979 +4 G2 546 0 545 0 +0 + +0101000 ++3073 0 -3075 0 * +Ed + 1e-07 1 1 0 +1 1229 0 2.07079632679519 5.21238898038498 +2 2676 546 0 2.07079632679519 5.21238898038498 +4 G1 546 0 547 0 +2 2677 547 0 2.07079632679519 5.21238898038498 +0 + +0101000 ++3073 0 -3074 0 * +Ed + 1e-07 1 1 0 +1 1230 0 5.21238898038498 8.35398163397477 +2 2678 545 0 5.21238898038498 8.35398163397477 +4 G1 545 0 547 0 +2 2679 547 0 5.21238898038498 8.35398163397477 +0 + +0101000 ++3074 0 -3073 0 * +Ed + 1e-07 1 1 0 +1 1231 0 -0.35 0.05 +2 2680 526 0 -0.35 0.05 +2 2681 525 0 -0.35 0.05 +4 CN 526 0 525 0 +0 + +0101000 ++3097 0 -3072 0 * +Ed + 1e-07 1 1 0 +1 1232 0 -0.35 0.05 +2 2682 526 0 -0.35 0.05 +2 2683 525 0 -0.35 0.05 +4 CN 526 0 525 0 +0 + +0101000 ++3098 0 -3071 0 * +Ed + 1e-07 1 1 0 +1 1233 0 5.21238898038313 8.35398163397292 +2 2684 526 0 5.21238898038313 8.35398163397292 +2 2685 548 0 5.21238898038313 8.35398163397292 +4 G1 526 0 548 0 +0 + +0101000 ++3072 0 -3071 0 * +Ed + 1e-07 1 1 0 +1 1234 0 2.07079632679333 5.21238898038313 +2 2686 525 0 2.07079632679333 5.21238898038313 +2 2687 549 0 2.07079632679333 5.21238898038313 +4 G1 525 0 549 0 +0 + +0101000 ++3071 0 -3072 0 * +Ed + 1e-07 1 1 0 +1 1235 0 5.2123889803845 8.3539816339743 +2 2688 548 0 5.2123889803845 8.3539816339743 +4 G1 547 0 548 0 +2 2689 547 0 5.2123889803845 8.3539816339743 +0 + +0101000 ++3070 0 -3069 0 * +Ed + 1e-07 1 1 0 +1 1236 0 2.07079632679471 5.2123889803845 +2 2690 549 0 2.07079632679471 5.2123889803845 +4 G1 547 0 549 0 +2 2691 547 0 2.07079632679471 5.2123889803845 +0 + +0101000 ++3069 0 -3070 0 * +Ed + 1e-07 1 1 0 +1 1237 0 0 1.5707963267949 +2 2692 549 0 0 1.5707963267949 +2 2693 548 0 0 1.5707963267949 +4 CN 549 0 548 0 +0 + +0101000 ++3072 0 -3070 0 * +Ed + 1e-07 1 1 0 +1 1238 0 0 1.5707963267949 +2 2694 549 0 0 1.5707963267949 +2 2695 548 0 0 1.5707963267949 +4 CN 549 0 548 0 +0 + +0101000 ++3071 0 -3069 0 * +Ed + 1e-07 1 1 0 +1 1239 0 -2.75 1.55 +2 2696 542 0 -2.75 1.55 +2 2697 544 0 -2.75 1.55 +4 CN 542 0 544 0 +0 + +0101000 ++3082 0 -3068 0 * +Ed + 1e-07 1 1 0 +1 1240 0 -2.75 1.55 +2 2698 542 0 -2.75 1.55 +2 2699 544 0 -2.75 1.55 +4 CN 542 0 544 0 +0 + +0101000 ++3081 0 -3067 0 * +Ed + 1e-07 1 1 0 +1 1241 0 5.21238898038622 8.35398163397601 +2 2700 542 0 5.21238898038622 8.35398163397601 +2 2701 550 0 5.21238898038622 8.35398163397601 +4 C0 542 0 550 0 +0 + +0101000 ++3068 0 -3067 0 * +Ed + 1e-07 1 1 0 +1 1242 0 2.07079632679642 5.21238898038622 +2 2702 544 0 2.07079632679642 5.21238898038622 +2 2703 551 0 2.07079632679642 5.21238898038622 +4 C0 544 0 551 0 +0 + +0101000 ++3067 0 -3068 0 * +Ed + 1e-07 1 1 0 +1 1243 0 2.07079632679404 5.21238898038383 +2 2704 551 0 2.07079632679404 5.21238898038383 +4 C0 539 0 551 0 +2 2705 539 0 2.07079632679404 5.21238898038383 +0 + +0101000 ++3066 0 -3065 0 * +Ed + 1e-07 1 1 0 +1 1244 0 5.21238898038383 8.35398163397362 +2 2706 550 0 5.21238898038383 8.35398163397362 +4 C0 539 0 550 0 +2 2707 539 0 5.21238898038383 8.35398163397362 +0 + +0101000 ++3065 0 -3066 0 * +Ed + 1e-07 1 1 0 +1 1245 0 -0.848528137401764 0.848528137405155 +2 2708 551 0 -0.848528137401764 0.848528137405155 +2 2709 550 0 -0.848528137401764 0.848528137405155 +4 G2 551 0 550 0 +0 + +0101000 ++3066 0 -3067 0 * +Ed + 1e-07 1 1 0 +1 1246 0 -0.848528137401764 0.848528137405155 +2 2710 551 0 -0.848528137401764 0.848528137405155 +2 2711 550 0 -0.848528137401764 0.848528137405155 +4 G2 551 0 550 0 +0 + +0101000 ++3065 0 -3068 0 * +Ed + 1e-07 1 1 0 +1 1247 0 5.21238898038493 8.35398163397472 +2 2712 552 0 5.21238898038493 8.35398163397472 +2 2713 553 0 5.21238898038493 8.35398163397472 +4 C0 552 0 553 0 +0 + +0101000 ++3064 0 -3063 0 * +Ed + 1e-07 1 1 0 +1 1248 0 -2.28470987674373 2.28470987674373 +2 2714 552 0 -2.28470987674373 2.28470987674373 +2 2715 554 0 -2.28470987674373 2.28470987674373 +4 G2 552 0 554 0 +0 + +0101000 ++3062 0 -3064 0 * +Ed + 1e-07 1 1 0 +1 1249 0 5.21238898038483 8.35398163397462 +2 2716 552 0 5.21238898038483 8.35398163397462 +4 C0 552 0 205 0 +2 2717 205 0 5.21238898038483 8.35398163397462 +0 + +0101000 ++3062 0 -3061 0 * +Ed + 1e-07 1 1 0 +1 1250 0 -2.28470987674373 2.28470987674373 +2 2718 552 0 -2.28470987674373 2.28470987674373 +2 2719 554 0 -2.28470987674373 2.28470987674373 +4 CN 552 0 554 0 +0 + +0101000 ++3061 0 -3063 0 * +Ed + 1e-07 1 1 0 +1 1251 0 2.07079632679513 5.21238898038493 +2 2720 554 0 2.07079632679513 5.21238898038493 +2 2721 555 0 2.07079632679513 5.21238898038493 +4 C0 554 0 555 0 +0 + +0101000 ++3063 0 -3064 0 * +Ed + 1e-07 1 1 0 +1 1252 0 2.07079632679503 5.21238898038483 +2 2722 554 0 2.07079632679503 5.21238898038483 +4 C0 554 0 205 0 +2 2723 205 0 2.07079632679503 5.21238898038483 +0 + +0101000 ++3061 0 -3062 0 * +Ed + 1e-07 1 1 0 +1 1253 0 -0.5 -0.0999999999999996 +2 2724 556 0 -0.5 -0.0999999999999996 +2 2725 557 0 -0.5 -0.0999999999999996 +4 CN 556 0 557 0 +0 + +0101000 ++3060 0 -3059 0 * +Ed + 1e-07 1 1 0 +1 1254 0 5.21238898038494 8.35398163397473 +2 2726 556 0 5.21238898038494 8.35398163397473 +2 2727 558 0 5.21238898038494 8.35398163397473 +4 C1 556 0 558 0 +0 + +0101000 ++3060 0 -3058 0 * +Ed + 1e-07 1 1 0 +1 1255 0 -0.5 -0.0999999999999996 +2 2728 556 0 -0.5 -0.0999999999999996 +2 2729 557 0 -0.5 -0.0999999999999996 +4 CN 556 0 557 0 +0 + +0101000 ++3058 0 -3057 0 * +Ed + 1e-07 1 1 0 +1 1256 0 5.21238898038494 8.35398163397473 +2 2730 556 0 5.21238898038494 8.35398163397473 +2 2731 559 0 5.21238898038494 8.35398163397473 +4 C0 556 0 559 0 +0 + +0101000 ++3059 0 -3057 0 * +Ed + 1e-07 1 1 0 +1 1257 0 2.07079632679515 5.21238898038494 +2 2732 557 0 2.07079632679515 5.21238898038494 +2 2733 560 0 2.07079632679515 5.21238898038494 +4 C1 557 0 560 0 +0 + +0101000 ++3058 0 -3060 0 * +Ed + 1e-07 1 1 0 +1 1258 0 2.07079632679515 5.21238898038494 +2 2734 557 0 2.07079632679515 5.21238898038494 +2 2735 561 0 2.07079632679515 5.21238898038494 +4 C0 557 0 561 0 +0 + +0101000 ++3057 0 -3059 0 * +Ed + 1e-07 1 1 0 +1 1259 0 -0.988854382001193 0.988854381998375 +2 2736 561 0 -0.988854382001193 0.988854381998375 +2 2737 559 0 -0.988854382001193 0.988854381998375 +4 G2 561 0 559 0 +0 + +0101000 ++3059 0 -3056 0 * +Ed + 1e-07 1 1 0 +1 1260 0 2.07079627976294 5.21238898038456 +2 2738 561 0 2.07079627976294 5.21238898038456 +4 C0 561 0 562 0 +2 2739 562 0 2.07079627976294 5.21238898038456 +0 + +0101000 ++3055 0 -3056 0 * +Ed + 1e-07 1 1 0 +1 1261 0 -0.988854381999761 0.988854382000159 +2 2740 561 0 -0.988854381999761 0.988854382000159 +2 2741 559 0 -0.988854381999761 0.988854382000159 +4 G2 561 0 559 0 +0 + +0101000 ++3057 0 -3055 0 * +Ed + 1e-07 1 1 0 +1 1262 0 5.21238898038456 8.35398158694252 +2 2742 559 0 5.21238898038456 8.35398158694252 +4 C0 559 0 562 0 +2 2743 562 0 5.21238898038456 8.35398158694252 +0 + +0101000 ++3056 0 -3055 0 * +Ed + 1e-07 1 1 0 +1 1263 0 -0.75 0.25 +2 2744 521 0 -0.75 0.25 +2 2745 519 0 -0.75 0.25 +4 CN 521 0 519 0 +0 + +0101000 ++3101 0 -3054 0 * +Ed + 1e-07 1 1 0 +1 1264 0 -0.75 0.25 +2 2746 521 0 -0.75 0.25 +2 2747 519 0 -0.75 0.25 +4 CN 521 0 519 0 +0 + +0101000 ++3102 0 -3053 0 * +Ed + 1e-07 1 1 0 +1 1265 0 5.21238898038494 8.35398163397473 +2 2748 521 0 5.21238898038494 8.35398163397473 +2 2749 563 0 5.21238898038494 8.35398163397473 +4 G1 521 0 563 0 +0 + +0101000 ++3054 0 -3053 0 * +Ed + 1e-07 1 1 0 +1 1266 0 2.07079632679514 5.21238898038494 +2 2750 519 0 2.07079632679514 5.21238898038494 +2 2751 564 0 2.07079632679514 5.21238898038494 +4 G1 519 0 564 0 +0 + +0101000 ++3053 0 -3054 0 * +Ed + 1e-07 1 1 0 +1 1267 0 5.21238898038404 8.35398163397383 +2 2752 565 0 5.21238898038404 8.35398163397383 +4 C0 566 0 565 0 +2 2753 566 0 5.21238898038404 8.35398163397383 +0 + +0101000 ++3052 0 -3051 0 * +Ed + 1e-07 1 1 0 +1 1268 0 2.07079632679424 5.21238898038404 +2 2754 567 0 2.07079632679424 5.21238898038404 +4 C0 566 0 567 0 +2 2755 566 0 2.07079632679424 5.21238898038404 +0 + +0101000 ++3051 0 -3052 0 * +Ed + 1e-07 1 1 0 +1 1269 0 2.07079632679519 5.21238898038498 +2 2756 564 0 2.07079632679519 5.21238898038498 +4 G1 566 0 564 0 +2 2757 566 0 2.07079632679519 5.21238898038498 +0 + +0101000 ++3050 0 -3049 0 * +Ed + 1e-07 1 1 0 +1 1270 0 5.21238898038498 8.35398163397477 +2 2758 563 0 5.21238898038498 8.35398163397477 +4 G1 566 0 563 0 +2 2759 566 0 5.21238898038498 8.35398163397477 +0 + +0101000 ++3049 0 -3050 0 * +Ed + 1e-07 1 1 0 +1 1271 0 1.5707963267949 3.14159265358979 +2 2760 564 0 1.5707963267949 3.14159265358979 +2 2761 563 0 1.5707963267949 3.14159265358979 +4 G2 564 0 563 0 +0 + +0101000 ++3049 0 -3054 0 * +Ed + 1e-07 1 1 0 +1 1272 0 1.5707963267949 3.14159265358979 +2 2762 564 0 1.5707963267949 3.14159265358979 +2 2763 563 0 1.5707963267949 3.14159265358979 +4 G2 564 0 563 0 +0 + +0101000 ++3050 0 -3053 0 * +Ed + 1e-07 1 1 0 +1 1273 0 5.23598775598799 6.28318530717959 +2 2764 560 0 5.23598775598799 6.28318530717959 +2 2765 558 0 5.23598775598799 6.28318530717959 +4 CN 560 0 558 0 +0 + +0101000 ++3048 0 -3060 0 * +Ed + 1e-07 1 1 0 +1 1274 0 5.23598775598799 6.28318530717959 +2 2766 560 0 5.23598775598799 6.28318530717959 +2 2767 558 0 5.23598775598799 6.28318530717959 +4 CN 560 0 558 0 +0 + +0101000 ++3047 0 -3058 0 * +Ed + 1e-07 1 1 0 +1 1275 0 2.07079632679507 5.21238898038486 +2 2768 560 0 2.07079632679507 5.21238898038486 +2 2769 208 0 2.07079632679507 5.21238898038486 +4 C1 560 0 208 0 +0 + +0101000 ++3047 0 -3048 0 * +Ed + 1e-07 1 1 0 +1 1276 0 5.21238898038486 8.35398163397466 +2 2770 558 0 5.21238898038486 8.35398163397466 +2 2771 207 0 5.21238898038486 8.35398163397466 +4 C1 558 0 207 0 +0 + +0101000 ++3048 0 -3047 0 * +Ed + 1e-07 1 1 0 +1 1277 0 2.0943951023856 3.14159265358979 +2 2772 208 0 2.0943951023856 3.14159265358979 +2 2773 207 0 2.0943951023856 3.14159265358979 +4 CN 208 0 207 0 +0 + +0101000 ++3048 0 -3608 0 * +Ed + 1e-07 1 1 0 +1 1278 0 2.0943951023856 3.14159265358979 +2 2774 208 0 2.0943951023856 3.14159265358979 +2 2775 207 0 2.0943951023856 3.14159265358979 +4 G2 208 0 207 0 +0 + +0101000 ++3047 0 -3607 0 * +Ed + 1e-07 1 1 0 +1 1279 0 -0.35 0.05 +2 2776 553 0 -0.35 0.05 +2 2777 555 0 -0.35 0.05 +4 CN 553 0 555 0 +0 + +0101000 ++3064 0 -3046 0 * +Ed + 1e-07 1 1 0 +1 1280 0 -0.35 0.05 +2 2778 553 0 -0.35 0.05 +2 2779 555 0 -0.35 0.05 +4 CN 553 0 555 0 +0 + +0101000 ++3063 0 -3045 0 * +Ed + 1e-07 1 1 0 +1 1281 0 5.21238898038493 8.35398163397472 +2 2780 553 0 5.21238898038493 8.35398163397472 +2 2781 568 0 5.21238898038493 8.35398163397472 +4 G1 553 0 568 0 +0 + +0101000 ++3046 0 -3045 0 * +Ed + 1e-07 1 1 0 +1 1282 0 2.07079632679513 5.21238898038493 +2 2782 555 0 2.07079632679513 5.21238898038493 +2 2783 569 0 2.07079632679513 5.21238898038493 +4 G1 555 0 569 0 +0 + +0101000 ++3045 0 -3046 0 * +Ed + 1e-07 1 1 0 +1 1283 0 1.5707963267949 3.14159265358979 +2 2784 569 0 1.5707963267949 3.14159265358979 +2 2785 568 0 1.5707963267949 3.14159265358979 +4 G2 569 0 568 0 +0 + +0101000 ++3044 0 -3046 0 * +Ed + 1e-07 1 1 0 +1 1284 0 1.5707963267949 3.14159265358979 +2 2786 569 0 1.5707963267949 3.14159265358979 +2 2787 568 0 1.5707963267949 3.14159265358979 +4 G2 569 0 568 0 +0 + +0101000 ++3043 0 -3045 0 * +Ed + 1e-07 1 1 0 +1 1285 0 2.07079632679539 5.21238898038518 +2 2788 569 0 2.07079632679539 5.21238898038518 +4 G1 569 0 570 0 +2 2789 570 0 2.07079632679539 5.21238898038518 +0 + +0101000 ++3043 0 -3044 0 * +Ed + 1e-07 1 1 0 +1 1286 0 5.21238898038518 8.35398163397497 +2 2790 568 0 5.21238898038518 8.35398163397497 +4 G1 568 0 570 0 +2 2791 570 0 5.21238898038518 8.35398163397497 +0 + +0101000 ++3044 0 -3043 0 * +Ed + 1e-07 1 1 0 +1 1287 0 -0.35 0.05 +2 2792 528 0 -0.35 0.05 +2 2793 527 0 -0.35 0.05 +4 CN 528 0 527 0 +0 + +0101000 ++3095 0 -3042 0 * +Ed + 1e-07 1 1 0 +1 1288 0 -0.35 0.05 +2 2794 528 0 -0.35 0.05 +2 2795 527 0 -0.35 0.05 +4 CN 528 0 527 0 +0 + +0101000 ++3096 0 -3041 0 * +Ed + 1e-07 1 1 0 +1 1289 0 5.2123889803848 8.35398163397459 +2 2796 528 0 5.2123889803848 8.35398163397459 +2 2797 571 0 5.2123889803848 8.35398163397459 +4 G1 528 0 571 0 +0 + +0101000 ++3042 0 -3041 0 * +Ed + 1e-07 1 1 0 +1 1290 0 2.07079632679501 5.2123889803848 +2 2798 527 0 2.07079632679501 5.2123889803848 +2 2799 572 0 2.07079632679501 5.2123889803848 +4 G1 527 0 572 0 +0 + +0101000 ++3041 0 -3042 0 * +Ed + 1e-07 1 1 0 +1 1291 0 5.21238898038508 8.35398163397487 +2 2800 571 0 5.21238898038508 8.35398163397487 +4 G1 570 0 571 0 +2 2801 570 0 5.21238898038508 8.35398163397487 +0 + +0101000 ++3040 0 -3039 0 * +Ed + 1e-07 1 1 0 +1 1292 0 2.07079632679529 5.21238898038508 +2 2802 572 0 2.07079632679529 5.21238898038508 +4 G1 570 0 572 0 +2 2803 570 0 2.07079632679529 5.21238898038508 +0 + +0101000 ++3039 0 -3040 0 * +Ed + 1e-07 1 1 0 +1 1293 0 0 1.5707963267949 +2 2804 572 0 0 1.5707963267949 +2 2805 571 0 0 1.5707963267949 +4 G2 572 0 571 0 +0 + +0101000 ++3042 0 -3040 0 * +Ed + 1e-07 1 1 0 +1 1294 0 0 1.5707963267949 +2 2806 572 0 0 1.5707963267949 +2 2807 571 0 0 1.5707963267949 +4 G2 572 0 571 0 +0 + +0101000 ++3041 0 -3039 0 * +Ed + 1e-07 1 1 0 +1 1295 0 -2.25 1.05 +2 2808 565 0 -2.25 1.05 +2 2809 567 0 -2.25 1.05 +4 CN 565 0 567 0 +0 + +0101000 ++3052 0 -3038 0 * +Ed + 1e-07 1 1 0 +1 1296 0 -2.25 1.05 +2 2810 565 0 -2.25 1.05 +2 2811 567 0 -2.25 1.05 +4 CN 565 0 567 0 +0 + +0101000 ++3051 0 -3037 0 * +Ed + 1e-07 1 1 0 +1 1297 0 5.21238898038404 8.35398163397383 +2 2812 565 0 5.21238898038404 8.35398163397383 +2 2813 573 0 5.21238898038404 8.35398163397383 +4 C0 565 0 573 0 +0 + +0101000 ++3038 0 -3037 0 * +Ed + 1e-07 1 1 0 +1 1298 0 2.07079632679424 5.21238898038404 +2 2814 567 0 2.07079632679424 5.21238898038404 +2 2815 574 0 2.07079632679424 5.21238898038404 +4 C0 567 0 574 0 +0 + +0101000 ++3037 0 -3038 0 * +Ed + 1e-07 1 1 0 +1 1299 0 2.07079632679509 5.21238898038489 +2 2816 574 0 2.07079632679509 5.21238898038489 +4 C0 562 0 574 0 +2 2817 562 0 2.07079632679509 5.21238898038489 +0 + +0101000 ++3036 0 -3035 0 * +Ed + 1e-07 1 1 0 +1 1300 0 5.21238898038489 8.35398163397468 +2 2818 573 0 5.21238898038489 8.35398163397468 +4 C0 562 0 573 0 +2 2819 562 0 5.21238898038489 8.35398163397468 +0 + +0101000 ++3035 0 -3036 0 * +Ed + 1e-07 1 1 0 +1 1301 0 -0.848528137451408 0.848528137401766 +2 2820 574 0 -0.848528137451408 0.848528137401766 +2 2821 573 0 -0.848528137451408 0.848528137401766 +4 G2 574 0 573 0 +0 + +0101000 ++3036 0 -3037 0 * +Ed + 1e-07 1 1 0 +1 1302 0 -0.848528137451408 0.848528137401766 +2 2822 574 0 -0.848528137451408 0.848528137401766 +2 2823 573 0 -0.848528137451408 0.848528137401766 +4 G2 574 0 573 0 +0 + +0101000 ++3035 0 -3038 0 * +Wi + +0101100 +-2926 0 -2925 0 * +Wi + +0101100 ++2924 124 +2923 124 +2922 124 +2921 124 +2920 124 +2919 124 +2918 124 +2917 124 +2916 124 +2915 124 +* +Wi + +0101100 +-2914 0 -2913 0 * +Wi + +0101100 +-2912 0 -2911 0 * +Wi + +0101100 ++2910 124 +2909 124 * +Wi + +0101100 ++2908 125 +2907 125 * +Wi + +0101100 +-2908 0 -2907 0 * +Wi + +0101100 +-2906 0 -2905 0 -2904 0 +2903 0 * +Wi + +0101100 ++2902 0 +2901 0 -2900 0 -2899 0 * +Wi + +0101100 +-2898 0 -2899 0 +2897 0 -2896 0 * +Wi + +0101100 +-2895 0 -2896 0 +2894 0 +2893 0 * +Wi + +0101100 ++2892 0 +2891 0 -2890 0 -2889 0 * +Wi + +0101100 +-2888 0 -2887 0 +2886 0 +2885 0 * +Wi + +0101100 +-2884 0 -2883 0 +2882 0 +2881 0 * +Wi + +0101100 +-2880 0 +2879 0 +2881 0 -2878 0 * +Wi + +0101100 +-2877 0 -2880 0 +2876 0 +2875 0 * +Wi + +0101100 ++2874 124 +2873 126 +2872 126 +2871 124 * +Wi + +0101100 +-2872 126 -2870 126 -2869 124 -2925 124 +2868 124 * +Wi + +0101100 ++2867 124 -2866 124 +2870 126 -2873 126 * +Wi + +0101100 ++2865 124 +2864 126 +2863 126 +2866 124 * +Wi + +0101100 +-2863 126 -2862 126 -2868 124 -2926 124 +2869 124 * +Wi + +0101100 ++2861 124 -2871 124 +2862 126 -2864 126 * +Wi + +0101100 ++2860 124 -2859 124 -2867 124 -2874 124 +2858 124 * +Wi + +0101100 ++2857 124 -2858 124 -2861 124 -2865 124 +2859 124 * +Wi + +0101100 ++2856 124 +2855 127 +2854 127 +2853 124 * +Wi + +0101100 +-2854 127 -2852 127 -2851 124 -2911 124 +2850 124 * +Wi + +0101100 ++2849 124 -2848 124 +2852 127 -2855 127 * +Wi + +0101100 ++2847 124 +2846 127 +2845 127 +2848 124 * +Wi + +0101100 +-2845 127 -2844 127 -2850 124 -2912 124 +2851 124 * +Wi + +0101100 ++2843 124 -2853 124 +2844 127 -2846 127 * +Wi + +0101100 ++2842 124 -2841 124 -2843 124 -2847 124 +2840 124 * +Wi + +0101100 ++2839 124 -2840 124 -2849 124 -2856 124 +2841 124 * +Wi + +0101100 ++2838 124 +2837 128 +2836 128 +2835 124 * +Wi + +0101100 +-2836 128 -2834 128 -2833 124 -2913 124 +2832 124 * +Wi + +0101100 ++2831 124 -2830 124 +2834 128 -2837 128 * +Wi + +0101100 ++2829 124 +2828 128 +2827 128 +2830 124 * +Wi + +0101100 +-2827 128 -2826 128 -2832 124 -2914 124 +2833 124 * +Wi + +0101100 ++2825 124 -2835 124 +2826 128 -2828 128 * +Wi + +0101100 ++2824 124 -2823 124 -2825 124 -2829 124 +2822 124 * +Wi + +0101100 ++2821 124 -2822 124 -2831 124 -2838 124 +2823 124 * +Wi + +0101100 ++2820 0 -2819 0 -2818 0 +2817 0 * +Wi + +0101100 ++2818 0 -2816 0 +2893 0 -2815 0 +2891 0 -2814 0 -2820 0 +2813 0 * +Wi + +0101100 ++2812 124 +2811 124 * +Wi + +0101100 +-2810 129 -2809 129 * +Wi + +0101100 +-2808 128 -2807 128 * +Wi + +0101100 +-2824 124 -2821 124 * +Wi + +0101100 ++2810 0 +2809 0 * +Wi + +0101100 +-2806 0 -2805 0 * +Wi + +0101100 ++2805 129 +2806 129 * +Wi + +0101100 ++2807 128 +2808 128 * +Wi + +0101100 +-2804 0 +2811 0 +2803 0 -2813 0 * +Wi + +0101100 +-2803 0 +2812 0 +2804 0 -2817 0 * +Wi + +0101100 ++2802 0 -2801 0 -2800 0 +2799 0 * +Wi + +0101100 ++2800 0 -2798 0 +2885 0 -2797 0 -2883 0 -2796 0 -2802 0 +2795 0 * +Wi + +0101100 ++2794 124 +2793 124 * +Wi + +0101100 +-2810 130 -2809 130 * +Wi + +0101100 +-2808 127 -2807 127 * +Wi + +0101100 +-2842 124 -2839 124 * +Wi + +0101100 ++2805 130 +2806 130 * +Wi + +0101100 ++2807 127 +2808 127 * +Wi + +0101100 +-2792 0 +2793 0 +2791 0 -2795 0 * +Wi + +0101100 +-2791 0 +2794 0 +2792 0 -2799 0 * +Wi + +0101100 ++2790 0 -2789 0 +2901 0 -2788 0 -2787 0 +2786 0 * +Wi + +0101100 ++2787 0 -2785 0 +2875 0 -2784 0 -2790 0 +2783 0 * +Wi + +0101100 ++2782 124 +2781 124 * +Wi + +0101100 +-2780 131 -2779 131 * +Wi + +0101100 +-2778 126 -2777 126 * +Wi + +0101100 +-2860 124 -2857 124 * +Wi + +0101100 ++2780 0 +2779 0 * +Wi + +0101100 +-2776 0 -2775 0 * +Wi + +0101100 ++2775 131 +2776 131 * +Wi + +0101100 ++2777 126 +2778 126 * +Wi + +0101100 +-2774 0 +2781 0 +2773 0 -2783 0 * +Wi + +0101100 +-2773 0 +2782 0 +2774 0 -2786 0 * +Wi + +0101100 ++2772 0 -2771 0 +2905 0 +2770 0 * +Wi + +0101100 +-2771 0 -2904 0 -2769 0 +2768 0 * +Wi + +0101100 ++2767 0 -2766 0 -2903 0 -2769 0 * +Wi + +0101100 +-2766 0 -2906 0 +2770 0 +2765 0 * +Wi + +0101100 +-2764 0 +2763 0 +2762 0 -2767 0 * +Wi + +0101100 +-2765 0 +2761 0 +2760 0 +2762 0 * +Wi + +0101100 ++2761 0 +2759 0 +2758 0 -2772 0 * +Wi + +0101100 +-2768 0 -2764 0 +2757 0 +2758 0 * +Wi + +0101100 ++2756 0 -2910 0 -2755 0 +2754 0 * +Wi + +0101100 ++2755 0 -2909 0 -2756 0 +2753 0 * +Wi + +0101100 ++2752 0 -2751 0 -2753 0 +2750 0 * +Wi + +0101100 ++2749 0 -2750 0 -2754 0 +2751 0 * +Wi + +0101100 +-2748 0 -2889 0 +2747 0 -2746 0 * +Wi + +0101100 ++2745 0 +2746 0 -2744 0 -2743 0 * +Wi + +0101100 +-2742 0 -2741 0 -2887 0 +2740 0 * +Wi + +0101100 ++2739 0 +2743 0 -2738 0 -2737 0 * +Wi + +0101100 +-2736 0 -2740 0 +2886 0 +2798 0 +2801 0 +2796 0 +2882 0 -2879 0 +2876 0 +2785 0 ++2788 0 -2900 0 +2898 0 +2894 0 +2816 0 +2819 0 +2814 0 -2890 0 +2748 0 -2745 0 +-2739 0 * +Wi + +0101100 ++2752 0 +2749 0 * +Wi + +0101100 ++2757 0 -2759 0 +2760 0 -2763 0 * +Wi + +0101100 ++2736 0 +2737 0 +2735 0 +2742 0 * +Wi + +0101100 ++2734 124 -2924 124 -2733 124 +2732 124 * +Wi + +0101100 ++2731 124 -2923 124 -2734 124 +2730 124 * +Wi + +0101100 ++2729 124 -2922 124 -2731 124 +2728 124 * +Wi + +0101100 ++2727 124 -2921 124 -2729 124 +2726 124 * +Wi + +0101100 ++2725 124 -2920 124 -2727 124 +2724 124 * +Wi + +0101100 ++2723 124 -2919 124 -2725 124 +2722 124 * +Wi + +0101100 ++2721 124 -2918 124 -2723 124 +2720 124 * +Wi + +0101100 ++2719 124 -2917 124 -2721 124 +2718 124 * +Wi + +0101100 ++2717 124 -2916 124 -2719 124 +2716 124 * +Wi + +0101100 ++2733 124 -2915 124 -2717 124 +2715 124 * +Wi + +0101100 +-2714 0 -2713 0 -2712 0 -2711 0 -2710 0 -2709 0 -2708 0 -2707 0 -2706 0 -2705 0 +* +Wi + +0101100 ++2738 0 +2744 0 -2747 0 +2892 0 +2815 0 -2895 0 -2897 0 +2902 0 +2789 0 +2784 0 +-2877 0 +2878 0 -2884 0 +2797 0 -2888 0 +2741 0 -2735 0 * +Wi + +0101100 +-2704 0 +2705 0 +2703 0 -2732 0 * +Wi + +0101100 +-2703 0 +2706 0 +2702 0 -2730 0 * +Wi + +0101100 +-2702 0 +2707 0 +2701 0 -2728 0 * +Wi + +0101100 +-2701 0 +2708 0 +2700 0 -2726 0 * +Wi + +0101100 +-2700 0 +2709 0 +2699 0 -2724 0 * +Wi + +0101100 +-2699 0 +2710 0 +2698 0 -2722 0 * +Wi + +0101100 +-2698 0 +2711 0 +2697 0 -2720 0 * +Wi + +0101100 +-2697 0 +2712 0 +2696 0 -2718 0 * +Wi + +0101100 +-2696 0 +2713 0 +2695 0 -2716 0 * +Wi + +0101100 +-2695 0 +2714 0 +2704 0 -2715 0 * +Wi + +0101100 +-2694 132 +2924 124 +2693 132 -2692 132 * +Wi + +0101100 +-2693 132 +2923 124 +2691 132 -2690 132 * +Wi + +0101100 +-2691 132 +2922 124 +2689 132 -2688 132 * +Wi + +0101100 +-2689 132 +2921 124 +2687 132 -2686 132 * +Wi + +0101100 +-2687 132 +2920 124 +2685 132 -2684 132 * +Wi + +0101100 +-2685 132 +2919 124 +2683 132 -2682 132 * +Wi + +0101100 +-2683 132 +2918 124 +2681 132 -2680 132 * +Wi + +0101100 +-2681 132 +2917 124 +2679 132 -2678 132 * +Wi + +0101100 +-2679 132 +2916 124 +2677 132 -2676 132 * +Wi + +0101100 +-2677 132 +2915 124 +2694 132 -2675 132 * +Wi + +0101100 ++2692 0 +2690 0 +2688 0 +2686 0 +2684 0 +2682 0 +2680 0 +2678 0 +2676 0 +2675 0 +* +Wi + +0101100 +-2674 0 +2673 0 +2672 0 -2671 0 * +Wi + +0101100 +-2672 0 +2670 0 +2674 0 -2669 0 * +Wi + +0101100 +-2668 0 +2671 0 +2667 0 -2666 0 * +Wi + +0101100 +-2667 0 +2669 0 +2668 0 -2665 0 * +Wi + +0101100 ++2664 0 +2666 0 -2663 0 -2662 0 * +Wi + +0101100 ++2663 0 +2665 0 -2664 0 -2661 0 * +Wi + +0101100 ++2662 133 +2661 133 * +Wi + +0101100 +-2660 131 -2659 131 * +Wi + +0101100 +-2658 126 -2657 126 * +Wi + +0101100 +-2656 133 -2655 133 * +Wi + +0101100 ++2659 131 +2660 131 * +Wi + +0101100 ++2657 126 +2658 126 * +Wi + +0101100 ++2654 133 +2653 133 +2652 133 -2655 133 -2651 133 * +Wi + +0101100 ++2650 133 +2649 133 +2651 133 -2656 133 -2652 133 * +Wi + +0101100 ++2670 133 +2673 133 * +Wi + +0101100 +-2648 134 -2647 134 * +Wi + +0101100 ++2647 134 +2648 134 * +Wi + +0101100 +-2646 133 -2645 133 * +Wi + +0101100 ++2644 133 -2643 133 +2642 126 +2641 126 +2640 133 * +Wi + +0101100 +-2641 126 +2639 126 -2649 133 +2638 133 * +Wi + +0101100 +-2642 126 -2637 133 -2650 133 -2639 126 * +Wi + +0101100 ++2636 133 -2640 133 +2635 126 +2634 126 +2643 133 * +Wi + +0101100 +-2634 126 +2633 126 -2653 133 +2637 133 * +Wi + +0101100 +-2635 126 -2638 133 -2654 133 -2633 126 * +Wi + +0101100 ++2646 0 -2632 0 -2644 0 +2631 0 * +Wi + +0101100 ++2645 0 -2631 0 -2636 0 +2632 0 * +Wi + +0101100 +-2630 0 +2629 0 +2628 0 -2627 0 * +Wi + +0101100 +-2628 0 +2626 0 +2630 0 -2625 0 * +Wi + +0101100 +-2624 0 +2627 0 +2623 0 -2622 0 * +Wi + +0101100 +-2623 0 +2625 0 +2624 0 -2621 0 * +Wi + +0101100 ++2620 0 +2622 0 -2619 0 -2618 0 * +Wi + +0101100 ++2619 0 +2621 0 -2620 0 -2617 0 * +Wi + +0101100 ++2618 135 +2617 135 * +Wi + +0101100 +-2616 129 -2615 129 * +Wi + +0101100 +-2614 128 -2613 128 * +Wi + +0101100 +-2612 135 -2611 135 * +Wi + +0101100 ++2615 129 +2616 129 * +Wi + +0101100 ++2613 128 +2614 128 * +Wi + +0101100 ++2610 135 +2609 135 +2608 135 -2611 135 -2607 135 * +Wi + +0101100 ++2606 135 +2605 135 +2607 135 -2612 135 -2608 135 * +Wi + +0101100 ++2626 135 +2629 135 * +Wi + +0101100 +-2604 136 -2603 136 * +Wi + +0101100 ++2603 136 +2604 136 * +Wi + +0101100 +-2602 135 -2601 135 * +Wi + +0101100 ++2600 135 -2599 135 +2598 128 +2597 128 +2596 135 * +Wi + +0101100 +-2597 128 +2595 128 -2605 135 +2594 135 * +Wi + +0101100 +-2598 128 -2593 135 -2606 135 -2595 128 * +Wi + +0101100 ++2592 135 -2596 135 +2591 128 +2590 128 +2599 135 * +Wi + +0101100 +-2590 128 +2589 128 -2609 135 +2593 135 * +Wi + +0101100 +-2591 128 -2594 135 -2610 135 -2589 128 * +Wi + +0101100 ++2602 0 -2588 0 -2592 0 +2587 0 * +Wi + +0101100 ++2601 0 -2587 0 -2600 0 +2588 0 * +Wi + +0101100 ++2618 137 +2617 137 * +Wi + +0101100 +-2616 130 -2615 130 * +Wi + +0101100 +-2614 127 -2613 127 * +Wi + +0101100 +-2612 137 -2611 137 * +Wi + +0101100 ++2615 130 +2616 130 * +Wi + +0101100 ++2613 127 +2614 127 * +Wi + +0101100 ++2586 137 +2585 137 +2608 137 -2611 137 -2607 137 * +Wi + +0101100 ++2584 137 +2583 137 +2607 137 -2612 137 -2608 137 * +Wi + +0101100 ++2626 137 +2629 137 * +Wi + +0101100 +-2604 138 -2603 138 * +Wi + +0101100 ++2603 138 +2604 138 * +Wi + +0101100 +-2602 137 -2601 137 * +Wi + +0101100 ++2600 137 -2582 137 +2581 127 +2580 127 +2579 137 * +Wi + +0101100 +-2580 127 +2578 127 -2583 137 +2577 137 * +Wi + +0101100 +-2581 127 -2576 137 -2584 137 -2578 127 * +Wi + +0101100 ++2592 137 -2579 137 +2575 127 +2574 127 +2582 137 * +Wi + +0101100 +-2574 127 +2573 127 -2585 137 +2576 137 * +Wi + +0101100 +-2575 127 -2577 137 -2586 137 -2573 127 * +Wi + +0101100 +-2874 124 -2861 124 -2572 126 -2571 126 +2570 126 * +Wi + +0101100 +-2865 124 -2867 124 -2570 126 -2569 126 +2572 126 * +Wi + +0101100 +-2568 0 -2567 0 * +Wi + +0101100 +-2566 126 +2567 126 +2565 126 -2870 126 -2863 126 * +Wi + +0101100 +-2565 126 +2568 126 +2566 126 -2862 126 -2872 126 * +Wi + +0101100 ++2564 0 +2563 0 * +Wi + +0101100 ++2562 0 +2561 0 -2560 0 -2564 0 * +Wi + +0101100 ++2560 0 +2559 0 -2562 0 -2563 0 * +Wi + +0101100 +-2656 133 -2655 133 * +Wi + +0101100 +-2558 126 -2557 126 * +Wi + +0101100 ++2556 126 +2555 126 +2554 126 -2553 126 -2658 126 * +Wi + +0101100 ++2553 126 +2552 126 +2551 126 -2556 126 -2657 126 * +Wi + +0101100 +-2860 124 -2857 124 * +Wi + +0101100 +-2569 126 -2571 126 * +Wi + +0101100 ++2550 126 +2549 131 -2551 126 +2548 126 * +Wi + +0101100 ++2547 126 -2546 126 -2552 126 -2549 131 * +Wi + +0101100 ++2545 126 +2544 131 -2554 126 +2546 126 * +Wi + +0101100 ++2543 126 -2548 126 -2555 126 -2544 131 * +Wi + +0101100 +-2542 126 +2777 126 +2541 126 -2543 126 -2545 126 * +Wi + +0101100 +-2541 126 +2778 126 +2542 126 -2547 126 -2550 126 * +Wi + +0101100 +-2540 0 +2539 0 +2538 0 -2537 0 * +Wi + +0101100 +-2538 0 +2536 0 +2540 0 -2535 0 * +Wi + +0101100 ++2534 126 -2533 126 -2532 139 +2531 126 * +Wi + +0101100 +-2530 0 +2532 0 +2529 0 -2528 0 * +Wi + +0101100 ++2528 139 -2527 126 -2561 126 +2526 126 * +Wi + +0101100 ++2525 126 -2531 126 -2524 139 +2533 126 * +Wi + +0101100 +-2529 0 +2524 0 +2530 0 -2523 0 * +Wi + +0101100 ++2523 139 -2526 126 -2559 126 +2527 126 * +Wi + +0101100 ++2522 0 -2535 0 -2521 0 +2520 0 * +Wi + +0101100 ++2521 0 -2537 0 -2522 0 +2519 0 * +Wi + +0101100 +-2518 0 -2525 0 +2517 0 +2519 0 * +Wi + +0101100 +-2517 0 -2534 0 +2518 0 +2520 0 * +Wi + +0101100 +-2516 126 +2654 133 +2649 133 +2515 126 +2557 126 * +Wi + +0101100 +-2515 126 +2650 133 +2653 133 +2516 126 +2558 126 * +Wi + +0101100 +-2514 0 +2536 0 +2513 0 -2512 0 * +Wi + +0101100 +-2513 0 +2539 0 +2514 0 -2511 0 * +Wi + +0101100 +-2510 126 -2511 126 +2509 126 +2642 126 +2634 126 * +Wi + +0101100 +-2509 126 -2512 126 +2510 126 +2635 126 +2641 126 * +Wi + +0101100 ++2508 0 -2507 0 -2506 0 +2505 0 * +Wi + +0101100 ++2506 0 -2504 0 -2508 0 +2503 0 * +Wi + +0101100 +-2502 128 +2610 135 +2605 135 +2501 128 +2500 128 * +Wi + +0101100 +-2501 128 +2606 135 +2609 135 +2502 128 +2499 128 * +Wi + +0101100 +-2498 0 +2503 0 +2497 0 -2496 0 * +Wi + +0101100 +-2497 0 +2505 0 +2498 0 -2495 0 * +Wi + +0101100 +-2494 128 -2495 128 +2493 128 +2598 128 +2590 128 * +Wi + +0101100 +-2493 128 -2496 128 +2494 128 +2591 128 +2597 128 * +Wi + +0101100 ++2492 0 -2504 0 -2491 0 +2490 0 * +Wi + +0101100 ++2491 0 -2507 0 -2492 0 +2489 0 * +Wi + +0101100 +-2488 0 +2487 0 +2486 0 +2489 0 * +Wi + +0101100 +-2486 0 +2485 0 +2488 0 +2490 0 * +Wi + +0101100 +-2838 124 -2825 124 -2484 128 -2483 128 +2482 128 * +Wi + +0101100 +-2829 124 -2831 124 -2482 128 -2481 128 +2484 128 * +Wi + +0101100 +-2480 0 -2479 0 * +Wi + +0101100 +-2478 128 +2479 128 +2477 128 -2834 128 -2827 128 * +Wi + +0101100 +-2477 128 +2480 128 +2478 128 -2826 128 -2836 128 * +Wi + +0101100 ++2476 0 +2475 0 * +Wi + +0101100 +-2474 128 -2473 140 +2472 128 -2485 128 * +Wi + +0101100 +-2471 0 +2473 0 +2470 0 -2469 0 * +Wi + +0101100 +-2468 128 -2467 128 +2466 128 +2469 140 * +Wi + +0101100 +-2472 128 -2465 140 +2474 128 -2487 128 * +Wi + +0101100 +-2470 0 +2465 0 +2471 0 -2464 0 * +Wi + +0101100 +-2466 128 -2463 128 +2468 128 +2464 140 * +Wi + +0101100 ++2462 0 +2463 0 -2461 0 -2476 0 * +Wi + +0101100 ++2461 0 +2467 0 -2462 0 -2475 0 * +Wi + +0101100 +-2612 135 -2611 135 * +Wi + +0101100 +-2499 128 -2500 128 * +Wi + +0101100 ++2460 128 +2459 128 +2458 128 -2457 128 -2614 128 * +Wi + +0101100 ++2457 128 +2456 128 +2455 128 -2460 128 -2613 128 * +Wi + +0101100 +-2824 124 -2821 124 * +Wi + +0101100 +-2481 128 -2483 128 * +Wi + +0101100 ++2454 128 +2453 129 -2455 128 +2452 128 * +Wi + +0101100 ++2451 128 -2450 128 -2456 128 -2453 129 * +Wi + +0101100 ++2449 128 +2448 129 -2458 128 +2450 128 * +Wi + +0101100 ++2447 128 -2452 128 -2459 128 -2448 129 * +Wi + +0101100 +-2446 128 +2807 128 +2445 128 -2447 128 -2449 128 * +Wi + +0101100 +-2445 128 +2808 128 +2446 128 -2451 128 -2454 128 * +Wi + +0101100 +-2444 127 +2586 137 +2583 137 +2443 127 +2500 127 * +Wi + +0101100 +-2443 127 +2584 137 +2585 137 +2444 127 +2499 127 * +Wi + +0101100 +-2494 127 -2495 127 +2493 127 +2581 127 +2574 127 * +Wi + +0101100 +-2493 127 -2496 127 +2494 127 +2575 127 +2580 127 * +Wi + +0101100 +-2856 124 -2843 124 -2442 127 -2483 127 +2441 127 * +Wi + +0101100 +-2847 124 -2849 124 -2441 127 -2481 127 +2442 127 * +Wi + +0101100 +-2478 127 +2479 127 +2477 127 -2852 127 -2845 127 * +Wi + +0101100 +-2477 127 +2480 127 +2478 127 -2844 127 -2854 127 * +Wi + +0101100 +-2440 127 -2465 141 +2439 127 -2485 127 * +Wi + +0101100 +-2438 127 -2467 127 +2437 127 +2464 141 * +Wi + +0101100 +-2439 127 -2473 141 +2440 127 -2487 127 * +Wi + +0101100 +-2437 127 -2463 127 +2438 127 +2469 141 * +Wi + +0101100 +-2612 137 -2611 137 * +Wi + +0101100 +-2499 127 -2500 127 * +Wi + +0101100 ++2460 127 +2436 127 +2435 127 -2457 127 -2614 127 * +Wi + +0101100 ++2457 127 +2434 127 +2433 127 -2460 127 -2613 127 * +Wi + +0101100 +-2842 124 -2839 124 * +Wi + +0101100 +-2481 127 -2483 127 * +Wi + +0101100 ++2432 127 +2431 130 -2433 127 +2452 127 * +Wi + +0101100 ++2430 127 -2450 127 -2434 127 -2431 130 * +Wi + +0101100 ++2429 127 +2428 130 -2435 127 +2450 127 * +Wi + +0101100 ++2427 127 -2452 127 -2436 127 -2428 130 * +Wi + +0101100 +-2446 127 +2807 127 +2445 127 -2427 127 -2429 127 * +Wi + +0101100 +-2445 127 +2808 127 +2446 127 -2430 127 -2432 127 * +Wi + +0101100 +-2426 0 +2425 0 +2424 0 -2780 0 * +Wi + +0101100 +-2424 0 +2423 0 +2426 0 -2779 0 * +Wi + +0101100 +-2423 131 -2425 131 * +Wi + +0101100 ++2422 131 +2421 131 +2420 131 +2419 131 * +Wi + +0101100 +-2418 131 -2417 131 +2416 134 +2422 131 * +Wi + +0101100 +-2416 134 -2415 131 +2414 131 +2421 131 * +Wi + +0101100 +-2414 131 -2413 131 +2412 134 +2420 131 * +Wi + +0101100 +-2412 134 -2411 131 +2418 131 +2419 131 * +Wi + +0101100 +-2413 131 -2411 131 -2417 131 -2415 131 * +Wi + +0101100 ++2410 131 +2409 131 * +Wi + +0101100 ++2660 131 -2408 131 +2555 126 +2551 126 +2407 131 * +Wi + +0101100 +-2550 126 -2543 126 -2406 131 -2775 131 +2405 131 * +Wi + +0101100 ++2659 131 -2407 131 +2552 126 +2554 126 +2408 131 * +Wi + +0101100 +-2545 126 -2547 126 -2405 131 -2776 131 +2406 131 * +Wi + +0101100 +-2404 0 +2409 0 +2403 0 -2402 0 * +Wi + +0101100 +-2403 0 +2410 0 +2404 0 -2401 0 * +Wi + +0101100 ++2401 131 +2402 131 * +Wi + +0101100 +-2662 133 -2661 133 * +Wi + +0101100 ++2400 134 -2399 134 -2419 131 -2422 131 +2398 134 * +Wi + +0101100 ++2397 134 -2398 134 -2421 131 -2420 131 +2399 134 * +Wi + +0101100 +-2400 134 -2397 134 * +Wi + +0101100 ++2396 134 +2395 134 * +Wi + +0101100 +-2394 134 +2393 134 +2392 134 -2396 134 * +Wi + +0101100 +-2392 134 +2391 134 +2394 134 -2395 134 * +Wi + +0101100 ++2409 131 +2410 131 * +Wi + +0101100 +-2673 133 -2670 133 * +Wi + +0101100 +-2390 0 +2391 0 +2389 0 -2388 0 * +Wi + +0101100 +-2389 0 +2393 0 +2390 0 -2387 0 * +Wi + +0101100 +-2386 0 +2647 0 +2385 0 -2387 0 * +Wi + +0101100 +-2385 0 +2648 0 +2386 0 -2388 0 * +Wi + +0101100 +-2384 0 +2383 0 +2382 0 -2810 0 * +Wi + +0101100 +-2382 0 +2381 0 +2384 0 -2809 0 * +Wi + +0101100 +-2381 129 -2383 129 * +Wi + +0101100 ++2380 129 +2379 129 +2378 129 +2377 129 * +Wi + +0101100 +-2376 129 -2375 129 +2374 136 +2380 129 * +Wi + +0101100 +-2374 136 -2373 129 +2372 129 +2379 129 * +Wi + +0101100 +-2372 129 -2371 129 +2370 136 +2378 129 * +Wi + +0101100 +-2370 136 -2369 129 +2376 129 +2377 129 * +Wi + +0101100 +-2371 129 -2369 129 -2375 129 -2373 129 * +Wi + +0101100 ++2368 129 +2367 129 * +Wi + +0101100 ++2616 129 -2366 129 +2459 128 +2455 128 +2365 129 * +Wi + +0101100 +-2454 128 -2447 128 -2364 129 -2805 129 +2363 129 * +Wi + +0101100 ++2615 129 -2365 129 +2456 128 +2458 128 +2366 129 * +Wi + +0101100 +-2449 128 -2451 128 -2363 129 -2806 129 +2364 129 * +Wi + +0101100 ++2362 0 +2361 0 +2367 0 -2360 0 * +Wi + +0101100 ++2359 0 +2360 0 +2368 0 -2361 0 * +Wi + +0101100 ++2362 129 +2359 129 * +Wi + +0101100 ++2617 135 +2618 135 * +Wi + +0101100 +-2381 130 -2383 130 * +Wi + +0101100 ++2358 130 +2357 130 +2356 130 +2355 130 * +Wi + +0101100 +-2376 130 -2354 130 +2353 138 +2358 130 * +Wi + +0101100 +-2353 138 -2352 130 +2372 130 +2357 130 * +Wi + +0101100 +-2372 130 -2351 130 +2350 138 +2356 130 * +Wi + +0101100 +-2350 138 -2349 130 +2376 130 +2355 130 * +Wi + +0101100 +-2351 130 -2349 130 -2354 130 -2352 130 * +Wi + +0101100 ++2368 130 +2367 130 * +Wi + +0101100 ++2616 130 -2348 130 +2436 127 +2433 127 +2347 130 * +Wi + +0101100 +-2432 127 -2427 127 -2346 130 -2805 130 +2345 130 * +Wi + +0101100 ++2615 130 -2347 130 +2434 127 +2435 127 +2348 130 * +Wi + +0101100 +-2429 127 -2430 127 -2345 130 -2806 130 +2346 130 * +Wi + +0101100 ++2362 130 +2359 130 * +Wi + +0101100 ++2617 137 +2618 137 * +Wi + +0101100 ++2344 136 -2343 136 -2377 129 -2380 129 +2342 136 * +Wi + +0101100 ++2341 136 -2342 136 -2379 129 -2378 129 +2343 136 * +Wi + +0101100 ++2344 136 +2341 136 * +Wi + +0101100 +-2340 142 -2339 142 * +Wi + +0101100 ++2339 142 +2340 142 * +Wi + +0101100 +-2338 136 -2337 136 * +Wi + +0101100 +-2336 0 +2335 0 +2334 0 -2338 0 * +Wi + +0101100 +-2334 0 +2333 0 +2336 0 -2337 0 * +Wi + +0101100 ++2367 129 +2368 129 * +Wi + +0101100 +-2629 135 -2626 135 * +Wi + +0101100 +-2332 0 +2333 0 +2331 0 -2330 0 * +Wi + +0101100 +-2331 0 +2335 0 +2332 0 -2329 0 * +Wi + +0101100 +-2328 0 +2603 0 +2327 0 -2329 0 * +Wi + +0101100 +-2327 0 +2604 0 +2328 0 -2330 0 * +Wi + +0101100 ++2344 138 -2326 138 -2355 130 -2358 130 +2325 138 * +Wi + +0101100 ++2341 138 -2325 138 -2357 130 -2356 130 +2326 138 * +Wi + +0101100 ++2344 138 +2341 138 * +Wi + +0101100 +-2324 142 -2323 142 * +Wi + +0101100 ++2323 142 +2324 142 * +Wi + +0101100 +-2338 138 -2337 138 * +Wi + +0101100 ++2367 130 +2368 130 * +Wi + +0101100 +-2629 137 -2626 137 * +Wi + +0101100 +-2322 0 -2321 0 * +Wi + +0101100 ++2320 0 +2319 0 * +Wi + +0101100 +-2318 0 -2317 0 -2316 0 -2315 0 -2314 0 -2313 0 -2312 0 -2311 0 -2310 0 -2309 0 +-2308 0 -2307 0 -2306 0 * +Wi + +0101100 +-2305 0 -2304 0 +2303 0 -2302 0 +2301 0 -2300 0 +2299 0 -2298 0 -2297 0 -2296 0 +* +Wi + +0101100 ++2295 142 +2294 142 * +Wi + +0101100 +-2400 134 -2397 134 * +Wi + +0101100 +-2293 0 +2319 0 +2292 0 -2291 0 * +Wi + +0101100 +-2292 0 +2320 0 +2293 0 -2290 0 * +Wi + +0101100 +-2289 142 +2395 134 +2288 142 -2291 142 * +Wi + +0101100 +-2288 142 +2396 134 +2289 142 -2290 142 * +Wi + +0101100 +-2287 0 +2324 0 +2286 0 -2285 0 * +Wi + +0101100 +-2286 0 +2323 0 +2287 0 -2284 0 * +Wi + +0101100 ++2283 142 +2282 142 +2281 142 +2280 142 * +Wi + +0101100 +-2344 136 -2341 136 * +Wi + +0101100 +-2344 138 -2341 138 * +Wi + +0101100 +-2279 0 +2339 0 +2278 0 -2277 0 * +Wi + +0101100 +-2278 0 +2340 0 +2279 0 -2276 0 * +Wi + +0101100 ++2275 0 -2274 0 -2273 0 +2272 0 * +Wi + +0101100 ++2273 0 -2271 0 -2275 0 +2270 0 * +Wi + +0101100 ++2269 0 -2294 0 -2268 0 +2267 0 * +Wi + +0101100 ++2268 0 -2295 0 -2269 0 +2266 0 * +Wi + +0101100 ++2265 0 -2270 0 -2264 0 +2266 0 * +Wi + +0101100 ++2264 0 -2272 0 -2265 0 +2267 0 * +Wi + +0101100 +-2263 0 -2262 0 +2261 0 +2260 0 * +Wi + +0101100 +-2261 0 -2259 0 -2258 0 +2257 0 * +Wi + +0101100 ++2258 0 -2256 0 +2255 0 +2254 0 * +Wi + +0101100 +-2255 0 -2253 0 +2263 0 +2252 0 * +Wi + +0101100 ++2251 0 -2280 0 -2250 0 +2249 0 * +Wi + +0101100 ++2248 0 +2250 0 -2281 0 +2247 0 * +Wi + +0101100 +-2247 0 -2283 0 -2246 0 +2245 0 * +Wi + +0101100 ++2244 0 +2246 0 -2282 0 -2251 0 * +Wi + +0101100 ++2243 0 -2257 0 -2242 0 +2245 0 * +Wi + +0101100 ++2242 0 -2254 0 +2241 0 +2244 0 * +Wi + +0101100 +-2241 0 -2252 0 -2240 0 +2249 0 * +Wi + +0101100 ++2240 0 -2260 0 -2243 0 +2248 0 * +Wi + +0101100 +-2239 0 +2316 0 +2317 0 +2238 0 -2237 0 * +Wi + +0101100 ++2236 0 +2235 0 -2234 0 -2233 0 * +Wi + +0101100 ++2232 0 +2233 0 -2231 0 -2235 0 * +Wi + +0101100 ++2236 0 +2232 0 * +Wi + +0101100 +-2230 0 -2229 0 * +Wi + +0101100 ++2228 0 -2262 0 -2227 0 -2226 0 * +Wi + +0101100 +-2225 0 -2224 0 -2223 0 -2222 0 -2221 0 -2220 0 -2219 0 +2226 0 -2218 0 -2217 0 +-2216 0 * +Wi + +0101100 +-2234 0 -2231 0 * +Wi + +0101100 ++2215 0 -2256 0 -2214 0 +2213 0 * +Wi + +0101100 +-2212 0 +2297 0 +2211 0 -2210 0 * +Wi + +0101100 +-2212 0 -2296 0 -2209 0 +2208 0 * +Wi + +0101100 ++2207 0 -2298 0 +2211 0 +2206 0 * +Wi + +0101100 +-2205 0 +2305 0 -2209 0 -2204 0 * +Wi + +0101100 ++2203 0 +2207 0 -2299 0 +2202 0 * +Wi + +0101100 ++2201 0 -2300 0 +2202 0 +2200 0 * +Wi + +0101100 ++2199 0 +2201 0 -2301 0 +2198 0 * +Wi + +0101100 ++2197 0 -2302 0 +2198 0 +2196 0 * +Wi + +0101100 ++2195 0 +2197 0 -2303 0 +2194 0 * +Wi + +0101100 +-2205 0 -2304 0 +2194 0 +2193 0 * +Wi + +0101100 ++2192 0 -2196 0 -2191 0 +2190 0 * +Wi + +0101100 ++2191 0 +2199 0 -2189 0 -2188 0 * +Wi + +0101100 ++2189 0 -2200 0 -2187 0 +2186 0 * +Wi + +0101100 ++2187 0 +2203 0 -2185 0 -2184 0 * +Wi + +0101100 ++2185 0 -2206 0 -2183 0 +2182 0 * +Wi + +0101100 ++2183 0 -2210 0 +2181 0 +2180 0 * +Wi + +0101100 +-2181 0 -2208 0 -2179 0 +2178 0 * +Wi + +0101100 ++2179 0 -2204 0 +2177 0 +2176 0 * +Wi + +0101100 +-2177 0 -2193 0 -2175 0 +2174 0 * +Wi + +0101100 ++2175 0 +2195 0 -2192 0 -2173 0 * +Wi + +0101100 ++2172 0 +2220 0 -2171 0 +2170 0 * +Wi + +0101100 ++2169 0 +2217 0 -2168 0 +2167 0 * +Wi + +0101100 +-2166 0 +2271 0 +2165 0 -2223 0 +2164 0 -2163 0 * +Wi + +0101100 ++2171 0 +2221 0 -2162 0 -2161 0 * +Wi + +0101100 ++2162 0 +2222 0 +2164 0 +2160 0 * +Wi + +0101100 ++2159 0 +2216 0 -2169 0 -2158 0 * +Wi + +0101100 +-2157 0 -2224 0 -2165 0 +2274 0 +2166 0 -2156 0 * +Wi + +0101100 +-2157 0 +2225 0 -2159 0 +2155 0 * +Wi + +0101100 +-2154 0 -2153 0 +2215 0 +2259 0 -2227 0 -2218 0 -2168 0 -2152 0 * +Wi + +0101100 +-2154 0 -2151 0 -2150 0 +2149 0 * +Wi + +0101100 ++2172 0 -2219 0 +2228 0 +2253 0 -2214 0 -2148 0 +2147 0 -2146 0 * +Wi + +0101100 ++2145 0 -2144 0 +2147 0 +2143 0 * +Wi + +0101100 ++2150 0 +2142 0 -2141 0 -2140 0 * +Wi + +0101100 ++2139 0 -2138 0 -2141 0 +2137 0 * +Wi + +0101100 ++2136 0 +2135 0 -2145 0 -2134 0 * +Wi + +0101100 +-2133 0 +2132 0 -2139 0 -2131 0 * +Wi + +0101100 ++2136 0 -2130 0 +2133 0 +2129 0 * +Wi + +0101100 +-2173 0 +2174 0 +2176 0 +2178 0 +2180 0 +2182 0 -2184 0 +2186 0 -2188 0 +2190 0 +* +Wi + +0101100 ++2128 0 +2127 0 -2126 0 -2125 0 -2124 0 +2123 0 +2122 0 -2121 0 +2120 0 +2119 0 ++2118 0 -2117 0 -2116 0 +2115 0 +2114 0 +2113 0 -2112 0 * +Wi + +0101100 ++2152 0 +2111 0 -2112 0 -2110 0 * +Wi + +0101100 ++2111 0 -2113 0 +2109 0 -2167 0 * +Wi + +0101100 +-2109 0 -2114 0 -2108 0 +2158 0 * +Wi + +0101100 ++2108 0 -2115 0 +2107 0 -2155 0 * +Wi + +0101100 +-2106 0 -2118 0 +2105 0 -2160 0 * +Wi + +0101100 +-2105 0 -2119 0 -2104 0 +2161 0 * +Wi + +0101100 ++2104 0 -2120 0 +2103 0 -2170 0 * +Wi + +0101100 ++2146 0 +2102 0 -2121 0 +2103 0 * +Wi + +0101100 ++2102 0 -2122 0 +2101 0 -2143 0 * +Wi + +0101100 +-2101 0 -2123 0 -2100 0 +2134 0 * +Wi + +0101100 +-2129 0 +2099 0 -2124 0 -2100 0 * +Wi + +0101100 ++2131 0 +2098 0 -2125 0 -2099 0 * +Wi + +0101100 +-2137 0 +2097 0 -2126 0 -2098 0 * +Wi + +0101100 ++2097 0 -2127 0 -2096 0 +2140 0 * +Wi + +0101100 ++2096 0 -2128 0 -2110 0 -2149 0 * +Wi + +0101100 ++2156 0 +2163 0 -2106 0 -2117 0 -2116 0 +2107 0 * +Wi + +0101100 ++2132 0 -2138 0 -2142 0 +2151 0 -2153 0 -2213 0 -2148 0 +2144 0 -2135 0 -2130 0 +* +Wi + +0101100 +-2095 0 -2094 0 * +Wi + +0101100 ++2093 0 +2092 0 -2095 0 -2091 0 * +Wi + +0101100 ++2090 0 +2091 0 -2094 0 -2092 0 * +Wi + +0101100 ++2093 142 +2090 142 * +Wi + +0101100 +-2089 142 -2088 142 -2087 142 -2086 142 * +Wi + +0101100 +-2085 0 +2309 0 +2084 0 -2083 0 * +Wi + +0101100 +-2082 0 +2307 0 +2081 0 -2080 0 * +Wi + +0101100 +-2079 142 +2078 142 +2077 142 -2076 142 * +Wi + +0101100 +-2079 142 -2075 142 +2074 142 +2073 142 * +Wi + +0101100 ++2072 0 +2315 0 +2239 0 -2071 0 * +Wi + +0101100 +-2070 142 +2069 142 +2077 142 -2068 142 * +Wi + +0101100 +-2067 142 +2066 142 +2065 142 -2064 142 * +Wi + +0101100 +-2081 0 +2308 0 +2085 0 -2063 0 * +Wi + +0101100 +-2062 142 -2061 142 +2065 142 +2060 142 * +Wi + +0101100 +-2067 142 +2059 142 +2058 142 -2057 142 * +Wi + +0101100 ++2056 142 -2055 142 -2054 142 +2053 142 * +Wi + +0101100 +-2053 142 +2052 142 +2051 142 -2050 142 * +Wi + +0101100 +-2049 0 +2048 0 +2306 0 +2082 0 * +Wi + +0101100 ++2047 142 -2051 142 -2046 142 +2045 142 * +Wi + +0101100 ++2044 142 -2058 142 -2043 142 +2055 142 * +Wi + +0101100 +-2042 142 +2041 142 +2062 142 -2040 142 * +Wi + +0101100 ++2039 142 -2089 142 -2088 142 -2038 142 +2037 142 * +Wi + +0101100 ++2038 142 -2087 142 -2086 142 -2039 142 +2036 142 * +Wi + +0101100 ++2035 142 -2230 142 -2034 142 +2033 142 * +Wi + +0101100 ++2034 142 -2229 142 -2035 142 +2032 142 * +Wi + +0101100 ++2031 0 +2311 0 -2030 0 -2029 0 * +Wi + +0101100 +-2028 142 -2027 142 +2026 142 +2025 142 * +Wi + +0101100 +-2026 142 +2024 142 +2042 142 -2023 142 * +Wi + +0101100 +-2084 0 +2310 0 -2031 0 +2022 0 * +Wi + +0101100 +-2021 142 +2020 142 +2028 142 -2019 142 * +Wi + +0101100 ++2030 0 +2312 0 -2018 0 +2017 0 * +Wi + +0101100 ++2016 142 -2015 142 -2014 142 +2021 142 * +Wi + +0101100 +-2013 0 +2018 0 +2313 0 -2012 0 * +Wi + +0101100 +-2074 142 +2011 142 +2015 142 -2010 142 * +Wi + +0101100 ++2012 0 +2314 0 -2072 0 +2009 0 * +Wi + +0101100 +-2045 142 +2008 142 +2007 142 -2006 142 * +Wi + +0101100 +-2238 0 +2318 0 -2048 0 +2005 0 * +Wi + +0101100 ++2004 142 -2003 142 -2002 142 +2070 142 * +Wi + +0101100 +-2007 142 +2001 142 +2003 142 -2000 142 * +Wi + +0101100 ++1999 142 -2276 142 -1998 142 +1997 142 * +Wi + +0101100 ++1998 142 -2277 142 -1999 142 +1996 142 * +Wi + +0101100 ++1995 142 -2284 142 -1994 142 +1993 142 * +Wi + +0101100 ++1994 142 -2285 142 -1995 142 +1992 142 * +Wi + +0101100 +-1991 142 -2322 142 +1990 142 -1989 142 * +Wi + +0101100 +-1990 142 -2321 142 +1991 142 -1988 142 * +Wi + +0101100 +-1987 0 -1986 0 +1985 0 +1984 0 * +Wi + +0101100 ++1983 0 +1982 0 -1981 0 +1984 0 * +Wi + +0101100 ++1980 0 -1979 0 -1978 0 +1977 0 * +Wi + +0101100 +-1976 0 +1975 0 -1978 0 -1974 0 * +Wi + +0101100 +-1976 0 -1973 0 +1972 0 +1971 0 * +Wi + +0101100 +-1970 0 +1969 0 +1972 0 -1968 0 * +Wi + +0101100 +-1970 0 -1967 0 -1966 0 +1965 0 * +Wi + +0101100 ++1966 0 -1964 0 -1963 0 +1962 0 * +Wi + +0101100 +-1961 0 +1960 0 -1963 0 -1959 0 * +Wi + +0101100 +-1958 0 -1961 0 +1957 0 +1956 0 * +Wi + +0101100 +-1955 0 +1954 0 +1956 0 -1953 0 * +Wi + +0101100 +-1955 0 -1952 0 -1951 0 +1950 0 * +Wi + +0101100 +-1949 0 -1948 0 +1947 0 -1982 0 * +Wi + +0101100 ++1946 0 +1945 0 -1944 0 +1948 0 * +Wi + +0101100 +-1943 0 +1945 0 +1942 0 +1941 0 * +Wi + +0101100 +-1940 0 -1941 0 +1939 0 +1938 0 * +Wi + +0101100 ++1937 0 +1936 0 -1935 0 +1938 0 * +Wi + +0101100 +-1934 0 -1933 0 -1936 0 +1932 0 * +Wi + +0101100 ++1931 0 +1930 0 -1929 0 +1934 0 * +Wi + +0101100 +-1928 0 +1930 0 +1927 0 +1926 0 * +Wi + +0101100 +-1925 0 +1926 0 +1924 0 +1923 0 * +Wi + +0101100 +-1922 0 +1923 0 +1921 0 +1920 0 * +Wi + +0101100 +-1919 0 +1980 0 +1918 0 +1917 0 * +Wi + +0101100 ++1916 0 -1917 0 -1915 0 -1920 0 * +Wi + +0101100 ++1914 0 -1986 0 -1913 0 -1912 0 * +Wi + +0101100 +-1911 0 -1910 0 +1909 0 -1912 0 * +Wi + +0101100 ++2078 142 -2069 142 +2002 142 -2001 142 -2008 142 +2046 142 -2052 142 +2054 142 +2043 142 -2059 142 ++2066 142 +2061 142 -2041 142 -2024 142 +2027 142 -2020 142 +2014 142 -2011 142 +2075 142 * +Wi + +0101100 ++1909 142 +1913 142 +1985 142 +1981 142 -1947 142 +1944 142 +1942 142 +1939 142 +1935 142 +1933 142 ++1929 142 +1927 142 +1925 142 +1921 142 +1916 142 -1919 142 -1977 142 -1974 142 -1971 142 -1968 142 +-1965 142 -1962 142 -1959 142 +1958 142 -1953 142 -1950 142 +1908 142 +1907 142 * +Wi + +0101100 +-1989 142 -1988 142 * +Wi + +0101100 ++1993 142 +1992 142 * +Wi + +0101100 ++1997 142 +1996 142 * +Wi + +0101100 ++2033 142 +2032 142 * +Wi + +0101100 ++2037 142 +2036 142 * +Wi + +0101100 ++1906 0 -1951 0 +1908 0 -1905 0 * +Wi + +0101100 +-1904 0 +1906 0 +1952 0 +1954 0 -1957 0 +1960 0 +1964 0 +1967 0 +1969 0 +1973 0 ++1975 0 +1979 0 +1918 0 -1915 0 -1922 0 -1924 0 -1928 0 -1931 0 -1932 0 -1937 0 +-1940 0 -1943 0 -1946 0 +1949 0 -1983 0 -1987 0 -1914 0 -1911 0 * +Wi + +0101100 ++1907 0 +1910 0 -1904 0 +1905 0 * +Wi + +0101100 ++1903 0 +1902 0 -1901 0 -1900 0 * +Wi + +0101100 ++1899 0 +1898 0 -1897 0 -1896 0 * +Wi + +0101100 +-1895 0 -1894 0 +1893 0 +1892 0 * +Wi + +0101100 +-1891 0 -1890 0 +1889 0 +1888 0 * +Wi + +0101100 ++1887 0 +1890 0 -1886 0 -1885 0 * +Wi + +0101100 +-1884 0 -1883 0 +1882 0 -1881 0 * +Wi + +0101100 ++1880 0 +1885 0 -1879 0 -1878 0 * +Wi + +0101100 ++1877 0 +1876 0 -1875 0 -1874 0 * +Wi + +0101100 +-1873 0 -1872 0 +1871 0 +1870 0 * +Wi + +0101100 +-1893 0 +1869 0 +1874 0 -1868 0 * +Wi + +0101100 +-1867 0 -1902 0 +1866 0 +1895 0 * +Wi + +0101100 ++1865 0 -1864 0 -1863 0 +1862 0 * +Wi + +0101100 +-1861 0 +1863 0 -1860 0 -1859 0 +1858 0 +1857 0 -1856 0 * +Wi + +0101100 +-1855 0 +1854 0 +1857 0 -1853 0 * +Wi + +0101100 +-1852 0 -1855 0 +1851 0 +1850 0 -1849 0 -1848 0 * +Wi + +0101100 ++1850 0 -1847 0 -1859 0 +1846 0 * +Wi + +0101100 +-1845 0 +1844 0 +1848 0 -1843 0 * +Wi + +0101100 ++1842 0 -1841 0 -1865 0 +1840 0 * +Wi + +0101100 ++1839 0 -1870 0 -1838 0 +1842 0 * +Wi + +0101100 +-1845 0 +1837 0 +1872 0 -1836 0 * +Wi + +0101100 +-1856 0 -1861 0 +1862 0 +1840 0 +1838 0 -1871 0 -1837 0 +1844 0 -1852 0 +1853 0 +* +Wi + +0101100 +-1835 0 -1834 0 * +Wi + +0101100 ++1873 0 -1839 0 -1841 0 -1864 0 -1860 0 +1847 0 -1849 0 -1843 0 +1836 0 * +Wi + +0101100 ++1833 0 +1832 0 * +Wi + +0101100 ++1831 0 +1830 0 * +Wi + +0101100 +-1829 0 +1830 0 +1828 0 -1827 0 * +Wi + +0101100 +-1828 0 +1831 0 +1829 0 -1826 0 * +Wi + +0101100 +-1825 0 +1824 0 +1823 0 -1834 0 * +Wi + +0101100 +-1822 0 +1832 0 +1821 0 -1820 0 * +Wi + +0101100 ++1825 0 -1835 0 -1823 0 +1819 0 * +Wi + +0101100 +-1821 0 +1833 0 +1822 0 -1818 0 * +Wi + +0101100 ++1824 0 +1819 0 * +Wi + +0101100 +-1817 0 +1816 0 +1815 0 -1814 0 * +Wi + +0101100 +-1815 0 +1813 0 +1817 0 -1812 0 * +Wi + +0101100 ++1811 0 -1810 0 -1809 0 +1808 0 * +Wi + +0101100 +-1811 0 +1807 0 +1809 0 -1806 0 * +Wi + +0101100 +-1805 0 +1804 0 +1803 0 -1802 0 * +Wi + +0101100 +-1801 0 +1800 0 +1799 0 -1798 0 * +Wi + +0101100 ++1805 0 -1797 0 -1803 0 +1796 0 * +Wi + +0101100 +-1799 0 +1795 0 +1801 0 -1794 0 * +Wi + +0101100 ++1804 0 +1796 0 * +Wi + +0101100 ++1793 0 +1792 0 +1791 0 +1896 0 -1790 0 * +Wi + +0101100 +-1810 0 -1806 0 * +Wi + +0101100 +-1797 0 -1802 0 * +Wi + +0101100 +-1898 0 -1789 0 -1788 0 -1787 0 +1786 0 * +Wi + +0101100 ++1813 0 +1816 0 * +Wi + +0101100 ++1795 0 +1800 0 * +Wi + +0101100 +-1787 0 -1785 0 +1793 0 +1784 0 * +Wi + +0101100 +-1784 0 +1792 0 +1783 0 -1788 0 * +Wi + +0101100 +-1785 0 +1790 0 +1897 0 -1786 0 * +Wi + +0101100 ++1789 0 -1899 0 -1791 0 +1783 0 * +Wi + +0101100 +-1782 0 +1781 0 +1780 0 -1779 0 * +Wi + +0101100 +-1780 0 +1778 0 +1782 0 -1777 0 * +Wi + +0101100 +-1776 0 -1775 0 -1774 0 -1773 0 -1772 0 +1771 0 +1770 0 -1769 0 * +Wi + +0101100 ++1768 0 +1772 0 -1767 0 +1766 0 -1765 0 -1764 0 -1770 0 * +Wi + +0101100 ++1883 0 -1763 0 -1773 0 -1767 0 +1762 0 * +Wi + +0101100 +-1761 0 -1760 0 * +Wi + +0101100 ++1881 0 -1759 0 -1758 0 -1757 0 -1756 0 -1755 0 +1754 0 * +Wi + +0101100 ++1753 0 +1752 0 * +Wi + +0101100 ++1781 0 +1778 0 * +Wi + +0101100 ++1751 0 -1756 0 -1750 0 +1776 0 * +Wi + +0101100 ++1765 0 +1749 0 -1758 0 -1748 0 * +Wi + +0101100 ++1750 0 -1755 0 -1747 0 +1775 0 * +Wi + +0101100 ++1769 0 +1764 0 +1748 0 -1757 0 -1751 0 * +Wi + +0101100 +-1754 0 -1747 0 -1774 0 +1763 0 +1884 0 * +Wi + +0101100 +-1882 0 -1762 0 +1766 0 +1749 0 +1759 0 * +Wi + +0101100 +-1746 0 +1745 0 +1744 0 -1760 0 * +Wi + +0101100 +-1743 0 +1752 0 +1742 0 -1741 0 * +Wi + +0101100 ++1746 0 -1761 0 -1744 0 +1740 0 * +Wi + +0101100 +-1742 0 +1753 0 +1743 0 -1739 0 * +Wi + +0101100 ++1745 0 +1740 0 * +Wi + +0101100 ++1738 0 -1737 0 -1876 0 -1736 0 * +Wi + +0101100 ++1735 0 +1738 0 -1734 0 -1733 0 * +Wi + +0101100 +-1732 0 -1731 0 +1878 0 +1730 0 * +Wi + +0101100 ++1729 0 +1728 0 -1733 0 -1727 0 * +Wi + +0101100 ++1726 0 +1729 0 -1725 0 -1732 0 * +Wi + +0101100 +-1724 0 -1888 0 +1723 0 +1722 0 * +Wi + +0101100 ++1721 0 +1722 0 -1720 0 -1719 0 * +Wi + +0101100 +-1718 0 +1901 0 +1867 0 -1892 0 +1868 0 +1875 0 +1737 0 -1734 0 -1728 0 -1725 0 +-1730 0 +1879 0 +1886 0 +1891 0 +1724 0 -1720 0 -1717 0 +1716 0 * +Wi + +0101100 ++1808 0 +1807 0 * +Wi + +0101100 +-1854 0 +1851 0 -1846 0 +1858 0 * +Wi + +0101100 ++2237 0 -2005 0 +2049 0 +2080 0 +2063 0 +2083 0 -2022 0 +2029 0 -2017 0 +2013 0 +-2009 0 +2071 0 * +Wi + +0101100 ++1768 0 +1771 0 * +Wi + +0101100 +-1715 0 +1714 0 +1721 0 -1723 0 -1889 0 -1887 0 -1880 0 +1731 0 +1726 0 +1727 0 ++1735 0 +1736 0 -1877 0 -1869 0 +1894 0 -1866 0 -1903 0 +1713 0 * +Wi + +0101100 +-1777 0 -1779 0 * +Wi + +0101100 +-1818 0 -1820 0 * +Wi + +0101100 +-1812 0 -1814 0 * +Wi + +0101100 +-1827 0 -1826 0 * +Wi + +0101100 +-2044 0 -2056 0 +2050 0 -2047 0 +2006 0 +2000 0 -2004 0 +2068 0 -2076 0 -2073 0 ++2010 0 -2016 0 +2019 0 -2025 0 +2023 0 +2040 0 -2060 0 -2064 0 +2057 0 * +Wi + +0101100 +-1798 0 -1794 0 * +Wi + +0101100 +-1741 0 -1739 0 * +Wi + +0101100 +-1712 0 -1713 0 +1900 0 +1718 0 * +Wi + +0101100 ++1711 0 +1717 0 -1719 0 -1714 0 * +Wi + +0101100 +-1715 0 +1711 0 +1716 0 -1712 0 * +Wi + +0101100 +-1710 0 +1709 0 +1708 0 -1707 0 * +Wi + +0101100 +-1708 0 +1706 0 +1710 0 -1705 0 * +Wi + +0101100 ++1913 142 +1909 142 +1907 142 +1908 142 -1950 142 -1953 142 +1958 142 -1959 142 -1962 142 -1965 142 +-1968 142 -1971 142 -1974 142 -1977 142 -1919 142 +1916 142 +1921 142 +1925 142 +1927 142 +1929 142 ++1933 142 +1935 142 +1939 142 +1942 142 +1944 142 -1947 142 +1981 142 +1985 142 * +Wi + +0101100 +-1705 143 -1707 143 * +Wi + +0101100 +-1704 143 -1703 143 * +Wi + +0101100 +-1702 143 +1701 143 +1700 143 -2011 142 * +Wi + +0101100 +-1699 143 +1698 143 +1697 143 -2020 142 * +Wi + +0101100 +-1696 143 +1695 143 +1694 143 -2024 142 * +Wi + +0101100 +-1694 143 +1693 143 +1692 143 -2041 142 * +Wi + +0101100 +-1691 143 +1690 143 +1689 143 -2059 142 * +Wi + +0101100 +-1688 143 +1687 143 +1686 143 -2052 142 * +Wi + +0101100 +-1685 143 +1684 143 +1683 143 -2008 142 * +Wi + +0101100 +-1683 143 +1682 143 +1681 143 -2001 142 * +Wi + +0101100 +-1680 143 +1679 143 +1678 143 -2069 142 * +Wi + +0101100 ++1677 0 -1676 0 -1675 0 +1674 0 * +Wi + +0101100 ++1673 0 -1674 0 -1672 0 +1676 0 * +Wi + +0101100 ++1671 0 -1670 0 -1669 0 +1668 0 * +Wi + +0101100 ++1667 0 -1668 0 -1666 0 +1670 0 * +Wi + +0101100 +-1665 0 +1664 0 +1663 0 -1662 0 * +Wi + +0101100 +-1663 0 +1661 0 +1665 0 -1660 0 * +Wi + +0101100 +-1659 0 +1658 0 +1657 0 -1656 0 * +Wi + +0101100 +-1657 0 +1655 0 +1659 0 -1654 0 * +Wi + +0101100 ++1664 0 +1661 0 * +Wi + +0101100 ++1653 0 +1652 0 * +Wi + +0101100 ++1658 0 +1655 0 * +Wi + +0101100 ++1651 0 +1650 0 * +Wi + +0101100 +-1649 0 +1648 0 +1647 0 -1703 0 * +Wi + +0101100 +-1647 0 +1646 0 +1649 0 -1704 0 * +Wi + +0101100 +-1645 143 +1666 143 +1644 143 -2033 142 * +Wi + +0101100 +-1644 143 +1669 143 +1645 143 -2032 142 * +Wi + +0101100 +-1643 143 +1653 143 +1642 143 -1997 142 * +Wi + +0101100 +-1642 143 +1652 143 +1643 143 -1996 142 * +Wi + +0101100 +-1641 143 +1651 143 +1640 143 -1993 142 * +Wi + +0101100 +-1640 143 +1650 143 +1641 143 -1992 142 * +Wi + +0101100 ++1639 143 -1638 143 -1637 143 +1989 142 * +Wi + +0101100 ++1637 143 -1636 143 -1639 143 +1988 142 * +Wi + +0101100 +-1635 143 +1672 143 +1634 143 -2036 142 * +Wi + +0101100 +-1634 143 +1675 143 +1635 143 -2037 142 * +Wi + +0101100 +-1633 143 +1632 143 +1678 143 -2078 142 * +Wi + +0101100 ++2002 142 -1681 143 +1631 143 +1680 143 * +Wi + +0101100 ++2046 142 -1686 143 -1630 143 +1685 143 * +Wi + +0101100 ++2054 142 -1629 143 -1628 143 +1688 143 * +Wi + +0101100 ++2043 142 -1689 143 -1627 143 +1629 143 * +Wi + +0101100 +-1691 143 +1626 143 +1625 143 -2066 142 * +Wi + +0101100 +-1692 143 +1624 143 +1625 143 +2061 142 * +Wi + +0101100 +-1697 143 +1623 143 +1696 143 +2027 142 * +Wi + +0101100 ++2014 142 -1700 143 -1622 143 +1699 143 * +Wi + +0101100 +-1633 143 +1621 143 +1702 143 +2075 142 * +Wi + +0101100 ++1679 143 +1631 143 -1632 143 +1682 143 +1621 143 +1684 143 +1701 143 -1630 143 -1622 143 +1687 143 ++1698 143 -1628 143 +1623 143 -1627 143 +1695 143 +1690 143 +1693 143 -1626 143 +1624 143 * +Wi + +0101100 +-1673 143 -1677 143 * +Wi + +0101100 +-1648 143 -1646 143 * +Wi + +0101100 ++1620 140 +1619 140 * +Wi + +0101100 ++1620 141 +1619 141 * +Wi + +0101100 +-1709 143 -1706 143 * +Wi + +0101100 +-1667 143 -1671 143 * +Wi + +0101100 ++1618 139 +1617 139 * +Wi + +0101100 +-1617 0 -1618 0 * +Wi + +0101100 ++1616 0 +1615 0 * +Wi + +0101100 +-1616 139 -1615 139 * +Wi + +0101100 ++1636 143 +1638 143 * +Wi + +0101100 +-1619 0 -1620 0 * +Wi + +0101100 ++1614 0 +1613 0 * +Wi + +0101100 +-1614 141 -1613 141 * +Wi + +0101100 ++1654 143 +1656 143 * +Wi + +0101100 +-1614 140 -1613 140 * +Wi + +0101100 ++1660 143 +1662 143 * +Wi + +0101100 +-1612 0 -1611 0 +1610 0 +1609 0 * +Wi + +0101100 +-1608 0 -1609 0 +1607 0 +1611 0 * +Wi + +0101100 +-1610 0 -1607 0 * +Wi + +0101100 ++2532 0 +2524 0 * +Wi + +0101100 +-1606 0 +1605 0 +1604 0 -1603 0 * +Wi + +0101100 +-1604 0 +1602 0 +1606 0 -1601 0 * +Wi + +0101100 ++1601 0 +1600 0 -1599 0 -1598 0 * +Wi + +0101100 ++1603 0 +1598 0 -1597 0 -1600 0 * +Wi + +0101100 +-1596 0 +1617 0 +1595 0 -1594 0 * +Wi + +0101100 +-1595 0 +1618 0 +1596 0 -1593 0 * +Wi + +0101100 +-1592 0 -1591 0 * +Wi + +0101100 ++1590 0 +1589 0 * +Wi + +0101100 ++1588 0 -1593 0 -1587 0 +1590 0 * +Wi + +0101100 ++1587 0 -1594 0 -1588 0 +1589 0 * +Wi + +0101100 ++1586 0 -1602 0 -1585 0 +1584 0 * +Wi + +0101100 ++1585 0 -1605 0 -1586 0 +1583 0 * +Wi + +0101100 ++1582 0 -2528 0 -1581 0 +1584 0 * +Wi + +0101100 ++1581 0 -2523 0 -1582 0 +1583 0 * +Wi + +0101100 +-1580 0 +1612 0 +1579 0 -1578 0 * +Wi + +0101100 +-1579 0 +1608 0 +1580 0 -1577 0 * +Wi + +0101100 ++1576 0 -1577 0 -1575 0 +1574 0 * +Wi + +0101100 ++1575 0 -1578 0 -1576 0 +1573 0 * +Wi + +0101100 +-1572 0 +1615 0 +1571 0 -1570 0 * +Wi + +0101100 +-1571 0 +1616 0 +1572 0 -1569 0 * +Wi + +0101100 +-1568 0 -1567 0 * +Wi + +0101100 ++1574 0 +1573 0 * +Wi + +0101100 ++1566 0 -1567 0 -1565 0 +1569 0 * +Wi + +0101100 ++1565 0 -1568 0 -1566 0 +1570 0 * +Wi + +0101100 +-1564 0 +1592 0 +1563 0 -1562 0 * +Wi + +0101100 +-1563 0 +1591 0 +1564 0 -1561 0 * +Wi + +0101100 ++1560 0 +1559 0 * +Wi + +0101100 +-1597 0 -1599 0 * +Wi + +0101100 ++1558 0 +1561 0 -1557 0 -1560 0 * +Wi + +0101100 ++1557 0 +1562 0 -1558 0 -1559 0 * +Wi + +0101100 +-1556 0 -1555 0 +1554 0 +1553 0 * +Wi + +0101100 +-1552 0 -1553 0 +1551 0 +1555 0 * +Wi + +0101100 +-1554 0 -1551 0 * +Wi + +0101100 ++2465 0 +2473 0 * +Wi + +0101100 +-1550 0 +1549 0 +1548 0 -1547 0 * +Wi + +0101100 +-1548 0 +1546 0 +1550 0 -1545 0 * +Wi + +0101100 ++1545 0 +1544 0 -1543 0 -1542 0 * +Wi + +0101100 ++1547 0 +1542 0 -1541 0 -1544 0 * +Wi + +0101100 +-1540 0 +1619 0 +1539 0 -1538 0 * +Wi + +0101100 +-1539 0 +1620 0 +1540 0 -1537 0 * +Wi + +0101100 +-1536 0 -1535 0 * +Wi + +0101100 ++1534 0 +1533 0 * +Wi + +0101100 ++1532 0 -1537 0 -1531 0 +1534 0 * +Wi + +0101100 ++1531 0 -1538 0 -1532 0 +1533 0 * +Wi + +0101100 ++1530 0 -1546 0 -1529 0 +1528 0 * +Wi + +0101100 ++1529 0 -1549 0 -1530 0 +1527 0 * +Wi + +0101100 ++1526 0 -2464 0 -1525 0 +1528 0 * +Wi + +0101100 ++1525 0 -2469 0 -1526 0 +1527 0 * +Wi + +0101100 +-1524 0 +1556 0 +1523 0 -1522 0 * +Wi + +0101100 +-1523 0 +1552 0 +1524 0 -1521 0 * +Wi + +0101100 ++1520 0 -1521 0 -1519 0 +1518 0 * +Wi + +0101100 ++1519 0 -1522 0 -1520 0 +1517 0 * +Wi + +0101100 +-1516 0 +1613 0 +1515 0 -1514 0 * +Wi + +0101100 +-1515 0 +1614 0 +1516 0 -1513 0 * +Wi + +0101100 +-1512 0 -1511 0 * +Wi + +0101100 ++1518 0 +1517 0 * +Wi + +0101100 ++1510 0 -1511 0 -1509 0 +1513 0 * +Wi + +0101100 ++1509 0 -1512 0 -1510 0 +1514 0 * +Wi + +0101100 +-1508 0 +1536 0 +1507 0 -1506 0 * +Wi + +0101100 +-1507 0 +1535 0 +1508 0 -1505 0 * +Wi + +0101100 ++1504 0 +1503 0 * +Wi + +0101100 +-1541 0 -1543 0 * +Wi + +0101100 ++1502 0 +1505 0 -1501 0 -1504 0 * +Wi + +0101100 ++1501 0 +1506 0 -1502 0 -1503 0 * +Fa +0 1e-07 2 0 + +0111000 +-1500 0 * +Fa +0 1e-07 4 124 + +0111000 ++1499 0 * +Fa +0 1e-07 21 0 + +0111000 +-1498 0 * +Fa +0 1e-07 24 0 + +0111000 +-1497 0 * +Fa +0 1e-07 27 124 + +0111000 ++1496 0 +1495 0 * +Fa +0 1e-07 30 0 + +0111000 +-1494 0 * +Fa +0 1e-07 33 0 + +0111000 +-1493 0 * +Fa +0 1e-07 37 0 + +0111000 ++1492 0 * +Fa +0 1e-07 41 0 + +0111000 ++1491 0 * +Fa +0 1e-07 42 0 + +0111000 ++1490 0 * +Fa +0 1e-07 44 0 + +0111000 ++1489 0 * +Fa +0 1e-07 46 0 + +0111000 ++1488 0 * +Fa +0 1e-07 49 0 + +0111000 ++1487 0 * +Fa +0 1e-07 50 0 + +0111000 +-1486 0 * +Fa +0 1e-07 51 0 + +0111000 ++1485 0 * +Fa +0 1e-07 3 124 + +0111000 ++1484 0 * +Fa +0 1e-07 3 124 + +0111000 ++1483 0 * +Fa +0 1e-07 3 124 + +0111000 ++1482 0 * +Fa +0 1e-07 1 124 + +0111000 ++1481 0 * +Fa +0 1e-07 1 124 + +0111000 ++1480 0 * +Fa +0 1e-07 1 124 + +0111000 ++1479 0 * +Fa +0 1e-07 53 124 + +0101000 ++1478 0 * +Fa +0 1e-07 58 124 + +0101000 ++1477 0 * +Fa +0 1e-07 25 124 + +0111000 ++1476 0 * +Fa +0 1e-07 25 124 + +0111000 ++1475 0 * +Fa +0 1e-07 25 124 + +0111000 ++1474 0 * +Fa +0 1e-07 23 124 + +0111000 ++1473 0 * +Fa +0 1e-07 23 124 + +0111000 ++1472 0 * +Fa +0 1e-07 23 124 + +0111000 ++1471 0 * +Fa +0 1e-07 66 124 + +0101000 ++1470 0 * +Fa +0 1e-07 61 124 + +0101000 ++1469 0 * +Fa +0 1e-07 22 124 + +0111000 ++1468 0 * +Fa +0 1e-07 22 124 + +0111000 ++1467 0 * +Fa +0 1e-07 22 124 + +0111000 ++1466 0 * +Fa +0 1e-07 20 124 + +0111000 ++1465 0 * +Fa +0 1e-07 20 124 + +0111000 ++1464 0 * +Fa +0 1e-07 20 124 + +0111000 ++1463 0 * +Fa +0 1e-07 70 124 + +0101000 ++1462 0 * +Fa +0 1e-07 69 124 + +0101000 ++1461 0 * +Fa +0 1e-07 72 0 + +0111000 ++1460 0 * +Fa +0 1e-07 43 0 + +0111000 ++1459 0 * +Fa +0 1e-07 71 124 + +0111000 ++1458 0 +1457 0 * +Fa +0 1e-07 71 124 + +0111000 ++1456 0 +1455 0 * +Fa +0 1e-07 76 0 + +0111000 ++1454 0 +1453 0 * +Fa +0 1e-07 71 124 + +0111000 ++1452 0 +1451 0 * +Fa +0 1e-07 74 0 + +0111000 ++1450 0 * +Fa +0 1e-07 73 0 + +0111000 ++1449 0 * +Fa +0 1e-07 82 0 + +0111000 ++1448 0 * +Fa +0 1e-07 48 0 + +0111000 ++1447 0 * +Fa +0 1e-07 67 124 + +0111000 ++1446 0 +1445 0 * +Fa +0 1e-07 67 124 + +0111000 ++1444 0 +1443 0 * +Fa +0 1e-07 67 124 + +0111000 ++1442 0 +1441 0 * +Fa +0 1e-07 84 0 + +0111000 ++1440 0 * +Fa +0 1e-07 83 0 + +0111000 ++1439 0 * +Fa +0 1e-07 39 0 + +0111000 ++1438 0 * +Fa +0 1e-07 52 0 + +0111000 ++1437 0 * +Fa +0 1e-07 59 124 + +0111000 ++1436 0 +1435 0 * +Fa +0 1e-07 59 124 + +0111000 ++1434 0 +1433 0 * +Fa +0 1e-07 88 0 + +0111000 ++1432 0 +1431 0 * +Fa +0 1e-07 59 124 + +0111000 ++1430 0 +1429 0 * +Fa +0 1e-07 86 0 + +0111000 ++1428 0 * +Fa +0 1e-07 85 0 + +0111000 ++1427 0 * +Fa +0 1e-07 34 0 + +0111000 +-1426 0 * +Fa +0 1e-07 35 0 + +0111000 ++1425 0 * +Fa +0 1e-07 36 0 + +0111000 +-1424 0 * +Fa +0 1e-07 32 0 + +0111000 ++1423 0 * +Fa +0 1e-07 96 0 + +0111000 ++1422 0 * +Fa +0 1e-07 97 0 + +0111000 ++1421 0 * +Fa +0 1e-07 94 0 + +0111000 ++1420 0 * +Fa +0 1e-07 95 0 + +0111000 ++1419 0 * +Fa +0 1e-07 26 0 + +0111000 ++1418 0 * +Fa +0 1e-07 28 0 + +0111000 ++1417 0 * +Fa +0 1e-07 99 0 + +0111000 ++1416 0 * +Fa +0 1e-07 98 0 + +0111000 ++1415 0 * +Fa +0 1e-07 45 0 + +0111000 ++1414 0 * +Fa +0 1e-07 100 0 + +0111000 ++1413 0 * +Fa +0 1e-07 47 0 + +0111000 +-1412 0 * +Fa +0 1e-07 101 0 + +0111000 ++1411 0 * +Fa +0 1e-07 40 0 + +0111000 +-1410 0 -1409 0 -1408 0 * +Fa +0 1e-07 102 0 + +0111000 ++1407 0 * +Fa +0 1e-07 5 124 + +0101000 ++1406 0 * +Fa +0 1e-07 6 124 + +0101000 ++1405 0 * +Fa +0 1e-07 8 124 + +0101000 ++1404 0 * +Fa +0 1e-07 9 124 + +0101000 ++1403 0 * +Fa +0 1e-07 11 124 + +0101000 ++1402 0 * +Fa +0 1e-07 12 124 + +0101000 ++1401 0 * +Fa +0 1e-07 14 124 + +0101000 ++1400 0 * +Fa +0 1e-07 15 124 + +0101000 ++1399 0 * +Fa +0 1e-07 17 124 + +0101000 ++1398 0 * +Fa +0 1e-07 18 124 + +0101000 ++1397 0 * +Fa +0 1e-07 38 0 + +0111000 +-1396 0 -1395 0 * +Fa +0 1e-07 103 0 + +0101000 ++1394 0 * +Fa +0 1e-07 104 0 + +0111000 ++1393 0 * +Fa +0 1e-07 105 0 + +0111000 ++1392 0 * +Fa +0 1e-07 106 0 + +0101000 ++1391 0 * +Fa +0 1e-07 107 0 + +0111000 ++1390 0 * +Fa +0 1e-07 108 0 + +0111000 ++1389 0 * +Fa +0 1e-07 109 0 + +0111000 ++1388 0 * +Fa +0 1e-07 110 0 + +0111000 ++1387 0 * +Fa +0 1e-07 111 0 + +0101000 ++1386 0 * +Fa +0 1e-07 112 0 + +0111000 ++1385 0 * +Fa +0 1e-07 113 132 + +0111000 ++1384 0 * +Fa +0 1e-07 7 132 + +0101000 ++1383 0 * +Fa +0 1e-07 115 132 + +0101000 ++1382 0 * +Fa +0 1e-07 10 132 + +0101000 ++1381 0 * +Fa +0 1e-07 116 132 + +0101000 ++1380 0 * +Fa +0 1e-07 13 132 + +0101000 ++1379 0 * +Fa +0 1e-07 117 132 + +0101000 ++1378 0 * +Fa +0 1e-07 16 132 + +0101000 ++1377 0 * +Fa +0 1e-07 118 132 + +0101000 ++1376 0 * +Fa +0 1e-07 19 132 + +0101000 ++1375 0 * +Fa +0 1e-07 114 0 + +0111000 ++1374 0 * +Fa +0 1e-07 119 0 + +0111000 ++1373 0 * +Fa +0 1e-07 120 0 + +0111000 ++1372 0 * +Fa +0 1e-07 123 0 + +0111000 ++1371 0 * +Fa +0 1e-07 124 0 + +0111000 ++1370 0 * +Fa +0 1e-07 125 0 + +0111000 ++1369 0 * +Fa +0 1e-07 126 0 + +0111000 ++1368 0 * +Fa +0 1e-07 127 133 + +0111000 ++1367 0 +1366 0 * +Fa +0 1e-07 127 133 + +0111000 ++1365 0 +1364 0 * +Fa +0 1e-07 127 133 + +0111000 ++1363 0 +1362 0 * +Fa +0 1e-07 133 133 + +0101000 ++1361 0 * +Fa +0 1e-07 132 133 + +0101000 ++1360 0 * +Fa +0 1e-07 121 133 + +0111000 ++1359 0 +1358 0 * +Fa +0 1e-07 121 133 + +0111000 ++1357 0 +1356 0 * +Fa +0 1e-07 137 133 + +0111000 ++1355 0 * +Fa +0 1e-07 137 133 + +0111000 ++1354 0 * +Fa +0 1e-07 137 133 + +0111000 ++1353 0 * +Fa +0 1e-07 134 133 + +0111000 ++1352 0 * +Fa +0 1e-07 134 133 + +0111000 ++1351 0 * +Fa +0 1e-07 134 133 + +0111000 ++1350 0 * +Fa +0 1e-07 140 0 + +0111000 ++1349 0 * +Fa +0 1e-07 141 0 + +0111000 ++1348 0 * +Fa +0 1e-07 144 0 + +0111000 ++1347 0 * +Fa +0 1e-07 145 0 + +0111000 ++1346 0 * +Fa +0 1e-07 148 0 + +0111000 ++1345 0 * +Fa +0 1e-07 149 0 + +0111000 ++1344 0 * +Fa +0 1e-07 150 0 + +0111000 ++1343 0 * +Fa +0 1e-07 151 0 + +0111000 ++1342 0 * +Fa +0 1e-07 152 135 + +0111000 ++1341 0 +1340 0 * +Fa +0 1e-07 152 135 + +0111000 ++1339 0 +1338 0 * +Fa +0 1e-07 152 135 + +0111000 ++1337 0 +1336 0 * +Fa +0 1e-07 158 135 + +0101000 ++1335 0 * +Fa +0 1e-07 157 135 + +0101000 ++1334 0 * +Fa +0 1e-07 146 135 + +0111000 ++1333 0 +1332 0 * +Fa +0 1e-07 146 135 + +0111000 ++1331 0 +1330 0 * +Fa +0 1e-07 162 135 + +0111000 ++1329 0 * +Fa +0 1e-07 162 135 + +0111000 ++1328 0 * +Fa +0 1e-07 162 135 + +0111000 ++1327 0 * +Fa +0 1e-07 159 135 + +0111000 ++1326 0 * +Fa +0 1e-07 159 135 + +0111000 ++1325 0 * +Fa +0 1e-07 159 135 + +0111000 ++1324 0 * +Fa +0 1e-07 165 0 + +0111000 ++1323 0 * +Fa +0 1e-07 166 0 + +0111000 ++1322 0 * +Fa +0 1e-07 152 137 + +0111000 ++1321 0 +1320 0 * +Fa +0 1e-07 152 137 + +0111000 ++1319 0 +1318 0 * +Fa +0 1e-07 152 137 + +0111000 ++1317 0 +1316 0 * +Fa +0 1e-07 158 137 + +0101000 ++1315 0 * +Fa +0 1e-07 157 137 + +0101000 ++1314 0 * +Fa +0 1e-07 146 137 + +0111000 ++1313 0 +1312 0 * +Fa +0 1e-07 146 137 + +0111000 ++1311 0 +1310 0 * +Fa +0 1e-07 162 137 + +0111000 ++1309 0 * +Fa +0 1e-07 162 137 + +0111000 ++1308 0 * +Fa +0 1e-07 162 137 + +0111000 ++1307 0 * +Fa +0 1e-07 159 137 + +0111000 ++1306 0 * +Fa +0 1e-07 159 137 + +0111000 ++1305 0 * +Fa +0 1e-07 159 137 + +0111000 ++1304 0 * +Fa +0 1e-07 54 126 + +0111000 ++1303 0 * +Fa +0 1e-07 55 126 + +0111000 ++1302 0 * +Fa +0 1e-07 169 0 + +0111000 +-1301 0 * +Fa +0 1e-07 57 126 + +0101000 ++1300 0 * +Fa +0 1e-07 56 126 + +0101000 ++1299 0 * +Fa +0 1e-07 171 0 + +0111000 ++1298 0 * +Fa +0 1e-07 170 0 + +0111000 ++1297 0 * +Fa +0 1e-07 172 0 + +0111000 ++1296 0 * +Fa +0 1e-07 130 126 + +0111000 ++1295 0 +1294 0 * +Fa +0 1e-07 129 126 + +0101000 ++1293 0 * +Fa +0 1e-07 131 126 + +0101000 ++1292 0 * +Fa +0 1e-07 60 126 + +0111000 ++1291 0 +1290 0 * +Fa +0 1e-07 176 126 + +0111000 ++1289 0 * +Fa +0 1e-07 176 126 + +0111000 ++1288 0 * +Fa +0 1e-07 175 126 + +0111000 ++1287 0 * +Fa +0 1e-07 175 126 + +0111000 ++1286 0 * +Fa +0 1e-07 91 126 + +0101000 ++1285 0 * +Fa +0 1e-07 90 126 + +0101000 ++1284 0 * +Fa +0 1e-07 177 0 + +0111000 ++1283 0 * +Fa +0 1e-07 178 0 + +0111000 ++1282 0 * +Fa +0 1e-07 173 126 + +0111000 ++1281 0 * +Fa +0 1e-07 184 0 + +0111000 ++1280 0 * +Fa +0 1e-07 173 126 + +0111000 ++1279 0 * +Fa +0 1e-07 174 126 + +0111000 ++1278 0 * +Fa +0 1e-07 186 0 + +0111000 ++1277 0 * +Fa +0 1e-07 174 126 + +0111000 ++1276 0 * +Fa +0 1e-07 182 0 + +0111000 ++1275 0 * +Fa +0 1e-07 180 0 + +0111000 ++1274 0 * +Fa +0 1e-07 188 0 + +0111000 ++1273 0 * +Fa +0 1e-07 183 0 + +0111000 ++1272 0 * +Fa +0 1e-07 135 126 + +0111000 ++1271 0 * +Fa +0 1e-07 136 126 + +0111000 ++1270 0 * +Fa +0 1e-07 181 0 + +0111000 ++1269 0 * +Fa +0 1e-07 179 0 + +0111000 ++1268 0 * +Fa +0 1e-07 142 126 + +0101000 ++1267 0 * +Fa +0 1e-07 143 126 + +0101000 ++1266 0 * +Fa +0 1e-07 190 0 + +0111000 ++1265 0 * +Fa +0 1e-07 191 0 + +0111000 ++1264 0 * +Fa +0 1e-07 160 128 + +0111000 ++1263 0 * +Fa +0 1e-07 161 128 + +0111000 ++1262 0 * +Fa +0 1e-07 195 0 + +0111000 ++1261 0 * +Fa +0 1e-07 193 0 + +0111000 ++1260 0 * +Fa +0 1e-07 167 128 + +0101000 ++1259 0 * +Fa +0 1e-07 168 128 + +0101000 ++1258 0 * +Fa +0 1e-07 194 0 + +0111000 ++1257 0 * +Fa +0 1e-07 192 0 + +0111000 ++1256 0 * +Fa +0 1e-07 197 0 + +0111000 ++1255 0 * +Fa +0 1e-07 196 0 + +0111000 ++1254 0 * +Fa +0 1e-07 62 128 + +0111000 ++1253 0 * +Fa +0 1e-07 63 128 + +0111000 ++1252 0 * +Fa +0 1e-07 200 0 + +0111000 +-1251 0 * +Fa +0 1e-07 65 128 + +0101000 ++1250 0 * +Fa +0 1e-07 64 128 + +0101000 ++1249 0 * +Fa +0 1e-07 202 0 + +0111000 ++1248 0 * +Fa +0 1e-07 199 128 + +0111000 ++1247 0 * +Fa +0 1e-07 204 0 + +0111000 ++1246 0 * +Fa +0 1e-07 199 128 + +0111000 ++1245 0 * +Fa +0 1e-07 198 128 + +0111000 ++1244 0 * +Fa +0 1e-07 206 0 + +0111000 ++1243 0 * +Fa +0 1e-07 198 128 + +0111000 ++1242 0 * +Fa +0 1e-07 201 0 + +0111000 ++1241 0 * +Fa +0 1e-07 203 0 + +0111000 ++1240 0 * +Fa +0 1e-07 155 128 + +0111000 ++1239 0 +1238 0 * +Fa +0 1e-07 154 128 + +0101000 ++1237 0 * +Fa +0 1e-07 156 128 + +0101000 ++1236 0 * +Fa +0 1e-07 68 128 + +0111000 ++1235 0 +1234 0 * +Fa +0 1e-07 210 128 + +0111000 ++1233 0 * +Fa +0 1e-07 210 128 + +0111000 ++1232 0 * +Fa +0 1e-07 209 128 + +0111000 ++1231 0 * +Fa +0 1e-07 209 128 + +0111000 ++1230 0 * +Fa +0 1e-07 79 128 + +0101000 ++1229 0 * +Fa +0 1e-07 78 128 + +0101000 ++1228 0 * +Fa +0 1e-07 160 127 + +0111000 ++1227 0 * +Fa +0 1e-07 161 127 + +0111000 ++1226 0 * +Fa +0 1e-07 167 127 + +0101000 ++1225 0 * +Fa +0 1e-07 168 127 + +0101000 ++1224 0 * +Fa +0 1e-07 62 127 + +0111000 ++1223 0 * +Fa +0 1e-07 63 127 + +0111000 ++1222 0 * +Fa +0 1e-07 65 127 + +0101000 ++1221 0 * +Fa +0 1e-07 64 127 + +0101000 ++1220 0 * +Fa +0 1e-07 199 127 + +0111000 ++1219 0 * +Fa +0 1e-07 199 127 + +0111000 ++1218 0 * +Fa +0 1e-07 198 127 + +0111000 ++1217 0 * +Fa +0 1e-07 198 127 + +0111000 ++1216 0 * +Fa +0 1e-07 155 127 + +0111000 ++1215 0 +1214 0 * +Fa +0 1e-07 154 127 + +0101000 ++1213 0 * +Fa +0 1e-07 156 127 + +0101000 ++1212 0 * +Fa +0 1e-07 68 127 + +0111000 ++1211 0 +1210 0 * +Fa +0 1e-07 210 127 + +0111000 ++1209 0 * +Fa +0 1e-07 210 127 + +0111000 ++1208 0 * +Fa +0 1e-07 209 127 + +0111000 ++1207 0 * +Fa +0 1e-07 209 127 + +0111000 ++1206 0 * +Fa +0 1e-07 79 127 + +0101000 ++1205 0 * +Fa +0 1e-07 78 127 + +0101000 ++1204 0 * +Fa +0 1e-07 87 0 + +0111000 ++1203 0 * +Fa +0 1e-07 89 0 + +0111000 ++1202 0 * +Fa +0 1e-07 211 131 + +0101000 +-1201 0 -1200 0 * +Fa +0 1e-07 212 131 + +0111000 ++1199 0 * +Fa +0 1e-07 212 131 + +0111000 ++1198 0 * +Fa +0 1e-07 215 131 + +0111000 ++1197 0 * +Fa +0 1e-07 215 131 + +0111000 ++1196 0 * +Fa +0 1e-07 216 131 + +0101000 +-1195 0 -1194 0 * +Fa +0 1e-07 93 131 + +0111000 ++1193 0 * +Fa +0 1e-07 93 131 + +0111000 ++1192 0 * +Fa +0 1e-07 92 131 + +0111000 ++1191 0 * +Fa +0 1e-07 92 131 + +0111000 ++1190 0 * +Fa +0 1e-07 218 0 + +0111000 ++1189 0 * +Fa +0 1e-07 217 0 + +0111000 ++1188 0 * +Fa +0 1e-07 128 131 + +0111000 ++1187 0 +1186 0 * +Fa +0 1e-07 213 134 + +0111000 ++1185 0 * +Fa +0 1e-07 214 134 + +0111000 ++1184 0 * +Fa +0 1e-07 219 134 + +0101000 +-1183 0 -1182 0 * +Fa +0 1e-07 221 134 + +0101000 ++1181 0 * +Fa +0 1e-07 223 134 + +0101000 ++1180 0 * +Fa +0 1e-07 122 134 + +0111000 ++1179 0 +1178 0 * +Fa +0 1e-07 226 0 + +0111000 ++1177 0 * +Fa +0 1e-07 225 0 + +0111000 ++1176 0 * +Fa +0 1e-07 139 0 + +0111000 ++1175 0 * +Fa +0 1e-07 138 0 + +0111000 ++1174 0 * +Fa +0 1e-07 75 0 + +0111000 ++1173 0 * +Fa +0 1e-07 77 0 + +0111000 ++1172 0 * +Fa +0 1e-07 227 129 + +0101000 +-1171 0 -1170 0 * +Fa +0 1e-07 228 129 + +0111000 ++1169 0 * +Fa +0 1e-07 228 129 + +0111000 ++1168 0 * +Fa +0 1e-07 231 129 + +0111000 ++1167 0 * +Fa +0 1e-07 231 129 + +0111000 ++1166 0 * +Fa +0 1e-07 232 129 + +0101000 +-1165 0 -1164 0 * +Fa +0 1e-07 81 129 + +0111000 ++1163 0 * +Fa +0 1e-07 81 129 + +0111000 ++1162 0 * +Fa +0 1e-07 80 129 + +0111000 ++1161 0 * +Fa +0 1e-07 80 129 + +0111000 ++1160 0 * +Fa +0 1e-07 234 0 + +0111000 ++1159 0 * +Fa +0 1e-07 233 0 + +0111000 ++1158 0 * +Fa +0 1e-07 153 129 + +0111000 ++1157 0 +1156 0 * +Fa +0 1e-07 227 130 + +0101000 +-1155 0 -1154 0 * +Fa +0 1e-07 228 130 + +0111000 ++1153 0 * +Fa +0 1e-07 228 130 + +0111000 ++1152 0 * +Fa +0 1e-07 231 130 + +0111000 ++1151 0 * +Fa +0 1e-07 231 130 + +0111000 ++1150 0 * +Fa +0 1e-07 232 130 + +0101000 +-1149 0 -1148 0 * +Fa +0 1e-07 81 130 + +0111000 ++1147 0 * +Fa +0 1e-07 81 130 + +0111000 ++1146 0 * +Fa +0 1e-07 80 130 + +0111000 ++1145 0 * +Fa +0 1e-07 80 130 + +0111000 ++1144 0 * +Fa +0 1e-07 153 130 + +0111000 ++1143 0 +1142 0 * +Fa +0 1e-07 229 136 + +0111000 ++1141 0 * +Fa +0 1e-07 230 136 + +0111000 ++1140 0 * +Fa +0 1e-07 235 136 + +0111000 ++1139 0 +1138 0 * +Fa +0 1e-07 235 136 + +0111000 ++1137 0 +1136 0 * +Fa +0 1e-07 239 0 + +0111000 ++1135 0 * +Fa +0 1e-07 240 0 + +0111000 ++1134 0 * +Fa +0 1e-07 147 136 + +0111000 ++1133 0 +1132 0 * +Fa +0 1e-07 242 0 + +0111000 ++1131 0 * +Fa +0 1e-07 241 0 + +0111000 ++1130 0 * +Fa +0 1e-07 164 0 + +0111000 ++1129 0 * +Fa +0 1e-07 163 0 + +0111000 ++1128 0 * +Fa +0 1e-07 229 138 + +0111000 ++1127 0 * +Fa +0 1e-07 230 138 + +0111000 ++1126 0 * +Fa +0 1e-07 235 138 + +0111000 ++1125 0 +1124 0 * +Fa +0 1e-07 235 138 + +0111000 ++1123 0 +1122 0 * +Fa +0 1e-07 147 138 + +0111000 ++1121 0 +1120 0 * +Fa +0 1e-07 246 0 + +0111000 +-1119 0 -1118 0 * +Fa +0 1e-07 251 0 + +0111000 ++1117 0 +1116 0 * +Fa +0 1e-07 220 142 + +0111000 ++1115 0 +1114 0 * +Fa +0 1e-07 249 0 + +0111000 ++1113 0 * +Fa +0 1e-07 248 0 + +0111000 ++1112 0 * +Fa +0 1e-07 224 142 + +0101000 ++1111 0 * +Fa +0 1e-07 222 142 + +0101000 ++1110 0 * +Fa +0 1e-07 243 0 + +0111000 ++1109 0 * +Fa +0 1e-07 244 0 + +0111000 ++1108 0 * +Fa +0 1e-07 236 142 + +0111000 ++1107 0 +1106 0 +1105 0 * +Fa +0 1e-07 238 0 + +0111000 ++1104 0 * +Fa +0 1e-07 237 0 + +0111000 ++1103 0 * +Fa +0 1e-07 283 0 + +0111000 ++1102 0 * +Fa +0 1e-07 284 0 + +0111000 ++1101 0 * +Fa +0 1e-07 274 0 + +0111000 ++1100 0 * +Fa +0 1e-07 273 0 + +0111000 ++1099 0 * +Fa +0 1e-07 288 0 + +0111000 ++1098 0 * +Fa +0 1e-07 286 0 + +0111000 ++1097 0 * +Fa +0 1e-07 289 0 + +0111000 ++1096 0 * +Fa +0 1e-07 292 0 + +0111000 ++1095 0 * +Fa +0 1e-07 295 0 + +0111000 ++1094 0 * +Fa +0 1e-07 290 0 + +0111000 ++1093 0 * +Fa +0 1e-07 280 0 + +0111000 ++1092 0 * +Fa +0 1e-07 279 0 + +0111000 +-1091 0 * +Fa +0 1e-07 277 0 + +0111000 ++1090 0 * +Fa +0 1e-07 278 0 + +0111000 +-1089 0 * +Fa +0 1e-07 296 0 + +0111000 ++1088 0 * +Fa +0 1e-07 298 0 + +0111000 ++1087 0 * +Fa +0 1e-07 300 0 + +0111000 ++1086 0 * +Fa +0 1e-07 293 0 + +0111000 ++1085 0 * +Fa +0 1e-07 252 0 + +0111000 ++1084 0 * +Fa +0 1e-07 302 0 + +0111000 ++1083 0 * +Fa +0 1e-07 304 0 + +0111000 ++1082 0 * +Fa +0 1e-07 303 0 + +0111000 ++1081 0 +1080 0 * +Fa +0 1e-07 291 0 + +0111000 ++1079 0 * +Fa +0 1e-07 305 0 + +0111000 ++1078 0 +1077 0 * +Fa +0 1e-07 297 0 + +0111000 ++1076 0 * +Fa +0 1e-07 271 0 + +0111000 ++1075 0 * +Fa +0 1e-07 272 0 + +0111000 ++1074 0 * +Fa +0 1e-07 270 0 + +0111000 ++1073 0 * +Fa +0 1e-07 263 0 + +0111000 ++1072 0 * +Fa +0 1e-07 269 0 + +0111000 +-1071 0 * +Fa +0 1e-07 268 0 + +0111000 ++1070 0 * +Fa +0 1e-07 267 0 + +0111000 +-1069 0 * +Fa +0 1e-07 266 0 + +0111000 ++1068 0 * +Fa +0 1e-07 265 0 + +0111000 +-1067 0 * +Fa +0 1e-07 264 0 + +0111000 ++1066 0 * +Fa +0 1e-07 322 0 + +0111000 ++1065 0 * +Fa +0 1e-07 321 0 + +0111000 ++1064 0 * +Fa +0 1e-07 320 0 + +0111000 ++1063 0 * +Fa +0 1e-07 319 0 + +0111000 ++1062 0 * +Fa +0 1e-07 317 0 + +0111000 ++1061 0 * +Fa +0 1e-07 315 0 + +0111000 ++1060 0 * +Fa +0 1e-07 316 0 + +0111000 ++1059 0 * +Fa +0 1e-07 318 0 + +0111000 ++1058 0 * +Fa +0 1e-07 324 0 + +0111000 ++1057 0 * +Fa +0 1e-07 323 0 + +0111000 ++1056 0 * +Fa +0 1e-07 311 0 + +0111000 ++1055 0 * +Fa +0 1e-07 312 0 + +0111000 ++1054 0 * +Fa +0 1e-07 287 0 + +0111000 ++1053 0 * +Fa +0 1e-07 310 0 + +0111000 ++1052 0 * +Fa +0 1e-07 309 0 + +0111000 ++1051 0 * +Fa +0 1e-07 313 0 + +0111000 ++1050 0 * +Fa +0 1e-07 285 0 + +0111000 ++1049 0 * +Fa +0 1e-07 308 0 + +0111000 ++1048 0 * +Fa +0 1e-07 294 0 + +0111000 ++1047 0 * +Fa +0 1e-07 333 0 + +0111000 ++1046 0 * +Fa +0 1e-07 299 0 + +0111000 ++1045 0 * +Fa +0 1e-07 337 0 + +0111000 ++1044 0 * +Fa +0 1e-07 335 0 + +0111000 ++1043 0 * +Fa +0 1e-07 341 0 + +0111000 ++1042 0 * +Fa +0 1e-07 339 0 + +0111000 ++1041 0 * +Fa +0 1e-07 343 0 + +0111000 ++1040 0 * +Fa +0 1e-07 345 0 + +0111000 ++1039 0 * +Fa +0 1e-07 325 0 + +0111000 ++1038 0 +1037 0 * +Fa +0 1e-07 334 0 + +0111000 ++1036 0 * +Fa +0 1e-07 327 0 + +0111000 ++1035 0 * +Fa +0 1e-07 331 0 + +0111000 ++1034 0 * +Fa +0 1e-07 332 0 + +0111000 ++1033 0 * +Fa +0 1e-07 330 0 + +0111000 ++1032 0 * +Fa +0 1e-07 329 0 + +0111000 ++1031 0 * +Fa +0 1e-07 326 0 + +0111000 ++1030 0 * +Fa +0 1e-07 338 0 + +0111000 ++1029 0 * +Fa +0 1e-07 340 0 + +0111000 ++1028 0 * +Fa +0 1e-07 346 0 + +0111000 ++1027 0 * +Fa +0 1e-07 348 0 + +0111000 ++1026 0 * +Fa +0 1e-07 347 0 + +0111000 ++1025 0 * +Fa +0 1e-07 344 0 + +0111000 ++1024 0 * +Fa +0 1e-07 342 0 + +0111000 ++1023 0 * +Fa +0 1e-07 336 0 + +0111000 ++1022 0 * +Fa +0 1e-07 328 0 + +0111000 ++1021 0 * +Fa +0 1e-07 314 0 + +0111000 ++1020 0 +1019 0 * +Fa +0 1e-07 349 0 + +0111000 ++1018 0 * +Fa +0 1e-07 350 0 + +0111000 ++1017 0 * +Fa +0 1e-07 351 142 + +0101000 ++1016 0 +1015 0 * +Fa +0 1e-07 259 0 + +0111000 ++1014 0 * +Fa +0 1e-07 261 0 + +0111000 ++1013 0 * +Fa +0 1e-07 356 142 + +0101000 ++1012 0 * +Fa +0 1e-07 357 142 + +0101000 ++1011 0 * +Fa +0 1e-07 253 0 + +0111000 ++1010 0 * +Fa +0 1e-07 361 142 + +0101000 ++1009 0 * +Fa +0 1e-07 365 142 + +0101000 ++1008 0 * +Fa +0 1e-07 260 0 + +0111000 ++1007 0 * +Fa +0 1e-07 368 142 + +0101000 ++1006 0 * +Fa +0 1e-07 366 142 + +0101000 ++1005 0 * +Fa +0 1e-07 371 142 + +0101000 +-1004 0 * +Fa +0 1e-07 372 142 + +0101000 ++1003 0 * +Fa +0 1e-07 262 0 + +0111000 +-1002 0 * +Fa +0 1e-07 374 142 + +0101000 +-1001 0 * +Fa +0 1e-07 370 142 + +0101000 +-1000 0 * +Fa +0 1e-07 369 142 + +0101000 ++999 0 * +Fa +0 1e-07 352 142 + +0101000 ++998 0 * +Fa +0 1e-07 355 142 + +0101000 ++997 0 * +Fa +0 1e-07 306 142 + +0111000 ++996 0 * +Fa +0 1e-07 307 142 + +0101000 ++995 0 * +Fa +0 1e-07 257 0 + +0111000 ++994 0 * +Fa +0 1e-07 383 142 + +0101000 ++993 0 * +Fa +0 1e-07 376 142 + +0101000 ++992 0 * +Fa +0 1e-07 258 0 + +0111000 ++991 0 * +Fa +0 1e-07 382 142 + +0101000 ++990 0 * +Fa +0 1e-07 256 0 + +0111000 ++989 0 * +Fa +0 1e-07 385 142 + +0101000 +-988 0 * +Fa +0 1e-07 255 0 + +0111000 +-987 0 * +Fa +0 1e-07 363 142 + +0101000 ++986 0 * +Fa +0 1e-07 254 0 + +0111000 ++985 0 * +Fa +0 1e-07 375 142 + +0101000 ++984 0 * +Fa +0 1e-07 250 0 + +0111000 ++983 0 * +Fa +0 1e-07 364 142 + +0101000 +-982 0 * +Fa +0 1e-07 389 142 + +0101000 ++981 0 * +Fa +0 1e-07 282 142 + +0101000 ++980 0 * +Fa +0 1e-07 281 142 + +0101000 ++979 0 * +Fa +0 1e-07 276 142 + +0101000 ++978 0 * +Fa +0 1e-07 275 142 + +0101000 ++977 0 * +Fa +0 1e-07 245 142 + +0101000 ++976 0 * +Fa +0 1e-07 247 142 + +0111000 ++975 0 * +Fa +0 1e-07 396 0 + +0111000 ++974 0 * +Fa +0 1e-07 399 0 + +0111000 ++973 0 * +Fa +0 1e-07 401 0 + +0111000 ++972 0 * +Fa +0 1e-07 403 0 + +0111000 ++971 0 * +Fa +0 1e-07 404 0 + +0111000 +-970 0 * +Fa +0 1e-07 405 0 + +0111000 ++969 0 * +Fa +0 1e-07 406 0 + +0111000 ++968 0 * +Fa +0 1e-07 407 0 + +0111000 ++967 0 * +Fa +0 1e-07 408 0 + +0111000 ++966 0 * +Fa +0 1e-07 409 0 + +0111000 +-965 0 * +Fa +0 1e-07 410 0 + +0111000 ++964 0 * +Fa +0 1e-07 411 0 + +0111000 ++963 0 * +Fa +0 1e-07 400 0 + +0111000 +-962 0 * +Fa +0 1e-07 413 0 + +0111000 ++961 0 * +Fa +0 1e-07 414 0 + +0111000 ++960 0 * +Fa +0 1e-07 415 0 + +0111000 ++959 0 * +Fa +0 1e-07 416 0 + +0111000 ++958 0 * +Fa +0 1e-07 417 0 + +0111000 +-957 0 * +Fa +0 1e-07 418 0 + +0111000 ++956 0 * +Fa +0 1e-07 419 0 + +0111000 ++955 0 * +Fa +0 1e-07 420 0 + +0111000 ++954 0 * +Fa +0 1e-07 421 0 + +0111000 ++953 0 * +Fa +0 1e-07 402 0 + +0111000 ++952 0 * +Fa +0 1e-07 422 0 + +0111000 ++951 0 * +Fa +0 1e-07 398 0 + +0111000 ++950 0 * +Fa +0 1e-07 423 0 + +0111000 ++949 0 * +Fa +0 1e-07 358 142 + +0111000 +-948 0 -947 0 -946 0 -945 0 -944 0 -943 0 -942 0 * +Fa +0 1e-07 412 0 + +0111000 ++941 0 * +Fa +0 1e-07 397 0 + +0111000 +-940 0 * +Fa +0 1e-07 424 0 + +0111000 ++939 0 * +Fa +0 1e-07 425 0 + +0111000 ++938 0 +937 0 * +Fa +0 1e-07 432 0 + +0111000 +-936 0 * +Fa +0 1e-07 434 0 + +0111000 ++935 0 * +Fa +0 1e-07 435 0 + +0111000 ++934 0 +933 0 * +Fa +0 1e-07 437 0 + +0111000 ++932 0 * +Fa +0 1e-07 443 0 + +0111000 ++931 0 +930 0 * +Fa +0 1e-07 433 0 + +0111000 ++929 0 * +Fa +0 1e-07 426 0 + +0111000 ++928 0 * +Fa +0 1e-07 449 0 + +0111000 ++927 0 * +Fa +0 1e-07 451 0 + +0111000 ++926 0 * +Fa +0 1e-07 453 0 + +0111000 ++925 0 * +Fa +0 1e-07 454 0 + +0111000 ++924 0 * +Fa +0 1e-07 452 0 + +0111000 ++923 0 * +Fa +0 1e-07 455 0 + +0111000 ++922 0 * +Fa +0 1e-07 450 0 + +0111000 ++921 0 * +Fa +0 1e-07 448 0 + +0111000 +-920 0 * +Fa +0 1e-07 446 0 + +0111000 ++919 0 * +Fa +0 1e-07 447 0 + +0111000 ++918 0 +917 0 * +Fa +0 1e-07 445 0 + +0111000 +-916 0 -915 0 -914 0 * +Fa +0 1e-07 461 0 + +0111000 ++913 0 * +Fa +0 1e-07 460 0 + +0111000 ++912 0 * +Fa +0 1e-07 457 0 + +0111000 ++911 0 * +Fa +0 1e-07 459 0 + +0111000 ++910 0 * +Fa +0 1e-07 456 0 + +0111000 ++909 0 * +Fa +0 1e-07 458 0 + +0111000 ++908 0 * +Fa +0 1e-07 462 0 + +0111000 ++907 0 * +Fa +0 1e-07 463 0 + +0111000 ++906 0 * +Fa +0 1e-07 464 0 + +0111000 ++905 0 * +Fa +0 1e-07 465 0 + +0111000 ++904 0 * +Fa +0 1e-07 466 0 + +0111000 ++903 0 * +Fa +0 1e-07 467 0 + +0111000 ++902 0 * +Fa +0 1e-07 470 0 + +0111000 ++901 0 * +Fa +0 1e-07 468 0 + +0111000 ++900 0 * +Fa +0 1e-07 471 0 + +0111000 ++899 0 * +Fa +0 1e-07 469 0 + +0111000 ++898 0 * +Fa +0 1e-07 431 0 + +0111000 ++897 0 +896 0 +895 0 * +Fa +0 1e-07 429 0 + +0111000 +-894 0 -893 0 -892 0 * +Fa +0 1e-07 472 0 + +0111000 ++891 0 * +Fa +0 1e-07 473 0 + +0111000 ++890 0 * +Fa +0 1e-07 430 0 + +0111000 ++889 0 * +Fa +0 1e-07 428 0 + +0111000 +-888 0 * +Fa +0 1e-07 474 0 + +0111000 ++887 0 * +Fa +0 1e-07 475 0 + +0111000 ++886 0 * +Fa +0 1e-07 476 0 + +0111000 ++885 0 * +Fa +0 1e-07 479 0 + +0111000 ++884 0 * +Fa +0 1e-07 439 0 + +0111000 ++883 0 +882 0 * +Fa +0 1e-07 441 0 + +0111000 +-881 0 -880 0 -879 0 * +Fa +0 1e-07 477 0 + +0111000 ++878 0 * +Fa +0 1e-07 481 0 + +0111000 ++877 0 * +Fa +0 1e-07 478 0 + +0111000 ++876 0 * +Fa +0 1e-07 480 0 + +0111000 ++875 0 * +Fa +0 1e-07 438 0 + +0111000 ++874 0 * +Fa +0 1e-07 440 0 + +0111000 +-873 0 * +Fa +0 1e-07 483 0 + +0111000 ++872 0 * +Fa +0 1e-07 485 0 + +0111000 ++871 0 * +Fa +0 1e-07 482 0 + +0111000 ++870 0 * +Fa +0 1e-07 484 0 + +0111000 ++869 0 * +Fa +0 1e-07 486 0 + +0111000 ++868 0 * +Fa +0 1e-07 444 0 + +0111000 +-867 0 * +Fa +0 1e-07 487 0 + +0111000 ++866 0 * +Fa +0 1e-07 442 0 + +0111000 +-865 0 * +Fa +0 1e-07 488 0 + +0111000 +-864 0 * +Fa +0 1e-07 489 0 + +0111000 ++863 0 * +Fa +0 1e-07 436 0 + +0111000 ++862 0 * +Fa +0 1e-07 490 0 + +0111000 ++861 0 * +Fa +0 1e-07 301 0 + +0111000 +-860 0 -859 0 -858 0 -857 0 -856 0 * +Fa +0 1e-07 362 0 + +0111000 ++855 0 +854 0 +853 0 +852 0 +851 0 +850 0 +849 0 +848 0 * +Fa +0 1e-07 427 0 + +0111000 +-847 0 * +Fa +0 1e-07 491 0 + +0111000 +-846 0 * +Fa +0 1e-07 492 0 + +0111000 ++845 0 * +Fa +0 1e-07 493 0 + +0111000 ++844 0 * +Fa +0 1e-07 494 0 + +0111000 ++843 0 * +Fa +0 1e-07 360 143 + +0111000 ++842 0 +841 0 +840 0 * +Fa +0 1e-07 387 143 + +0101000 ++839 0 * +Fa +0 1e-07 386 143 + +0101000 ++838 0 * +Fa +0 1e-07 384 143 + +0101000 ++837 0 * +Fa +0 1e-07 377 143 + +0101000 ++836 0 * +Fa +0 1e-07 502 143 + +0101000 ++835 0 * +Fa +0 1e-07 373 143 + +0111000 ++834 0 * +Fa +0 1e-07 388 143 + +0101000 ++833 0 * +Fa +0 1e-07 506 143 + +0101000 ++832 0 * +Fa +0 1e-07 508 143 + +0101000 ++831 0 * +Fa +0 1e-07 509 0 + +0111000 ++830 0 * +Fa +0 1e-07 510 0 + +0111000 ++829 0 * +Fa +0 1e-07 511 0 + +0111000 ++828 0 * +Fa +0 1e-07 512 0 + +0111000 ++827 0 * +Fa +0 1e-07 513 0 + +0111000 ++826 0 * +Fa +0 1e-07 514 0 + +0111000 ++825 0 * +Fa +0 1e-07 516 0 + +0111000 ++824 0 * +Fa +0 1e-07 517 0 + +0111000 ++823 0 * +Fa +0 1e-07 515 0 + +0111000 +-822 0 -821 0 * +Fa +0 1e-07 518 0 + +0111000 +-820 0 -819 0 * +Fa +0 1e-07 497 0 + +0111000 ++818 0 * +Fa +0 1e-07 496 0 + +0111000 ++817 0 * +Fa +0 1e-07 380 143 + +0101000 ++816 0 * +Fa +0 1e-07 381 143 + +0101000 ++815 0 * +Fa +0 1e-07 390 143 + +0101000 ++814 0 * +Fa +0 1e-07 391 143 + +0101000 ++813 0 * +Fa +0 1e-07 392 143 + +0101000 ++812 0 * +Fa +0 1e-07 393 143 + +0101000 ++811 0 * +Fa +0 1e-07 394 143 + +0101000 ++810 0 * +Fa +0 1e-07 395 143 + +0101000 ++809 0 * +Fa +0 1e-07 379 143 + +0101000 ++808 0 * +Fa +0 1e-07 378 143 + +0101000 ++807 0 * +Fa +0 1e-07 359 143 + +0101000 ++806 0 * +Fa +0 1e-07 507 143 + +0101000 +-805 0 * +Fa +0 1e-07 505 143 + +0101000 +-804 0 * +Fa +0 1e-07 504 143 + +0101000 +-803 0 * +Fa +0 1e-07 503 143 + +0101000 +-802 0 * +Fa +0 1e-07 367 143 + +0101000 ++801 0 * +Fa +0 1e-07 501 143 + +0101000 ++800 0 * +Fa +0 1e-07 500 143 + +0101000 ++799 0 * +Fa +0 1e-07 499 143 + +0101000 +-798 0 * +Fa +0 1e-07 498 143 + +0101000 ++797 0 * +Fa +0 1e-07 495 143 + +0111000 ++796 0 +795 0 +794 0 +793 0 +792 0 +791 0 +790 0 +789 0 * +Fa +0 1e-07 523 0 + +0111000 +-788 0 -787 0 * +Fa +0 1e-07 495 143 + +0111000 ++786 0 +785 0 * +Fa +0 1e-07 520 0 + +0111000 +-784 0 -783 0 * +Fa +0 1e-07 495 143 + +0111000 ++782 0 +781 0 * +Fa +0 1e-07 495 143 + +0111000 ++780 0 +779 0 * +Fa +0 1e-07 529 0 + +0111000 ++778 0 * +Fa +0 1e-07 531 0 + +0111000 ++777 0 * +Fa +0 1e-07 185 0 + +0111000 +-776 0 -775 0 * +Fa +0 1e-07 533 0 + +0111000 ++774 0 * +Fa +0 1e-07 534 0 + +0111000 ++773 0 * +Fa +0 1e-07 538 0 + +0111000 ++772 0 * +Fa +0 1e-07 536 0 + +0111000 ++771 0 * +Fa +0 1e-07 524 0 + +0111000 ++770 0 * +Fa +0 1e-07 522 0 + +0111000 ++769 0 * +Fa +0 1e-07 543 0 + +0111000 +-768 0 -767 0 * +Fa +0 1e-07 541 0 + +0111000 ++766 0 * +Fa +0 1e-07 540 0 + +0111000 ++765 0 * +Fa +0 1e-07 537 0 + +0111000 ++764 0 * +Fa +0 1e-07 535 0 + +0111000 ++763 0 * +Fa +0 1e-07 187 0 + +0111000 ++762 0 * +Fa +0 1e-07 189 0 + +0111000 ++761 0 * +Fa +0 1e-07 530 0 + +0111000 ++760 0 * +Fa +0 1e-07 532 0 + +0111000 ++759 0 * +Fa +0 1e-07 546 0 + +0111000 ++758 0 * +Fa +0 1e-07 545 0 + +0111000 ++757 0 * +Fa +0 1e-07 526 0 + +0111000 ++756 0 * +Fa +0 1e-07 525 0 + +0111000 ++755 0 * +Fa +0 1e-07 547 0 + +0111000 +-754 0 -753 0 * +Fa +0 1e-07 549 0 + +0111000 ++752 0 * +Fa +0 1e-07 548 0 + +0111000 ++751 0 * +Fa +0 1e-07 542 0 + +0111000 ++750 0 * +Fa +0 1e-07 544 0 + +0111000 ++749 0 * +Fa +0 1e-07 539 0 + +0111000 ++748 0 +747 0 * +Fa +0 1e-07 551 0 + +0111000 ++746 0 * +Fa +0 1e-07 550 0 + +0111000 ++745 0 * +Fa +0 1e-07 552 0 + +0111000 ++744 0 * +Fa +0 1e-07 554 0 + +0111000 ++743 0 * +Fa +0 1e-07 205 0 + +0111000 +-742 0 -741 0 * +Fa +0 1e-07 556 0 + +0111000 ++740 0 * +Fa +0 1e-07 557 0 + +0111000 ++739 0 * +Fa +0 1e-07 561 0 + +0111000 ++738 0 * +Fa +0 1e-07 559 0 + +0111000 ++737 0 * +Fa +0 1e-07 521 0 + +0111000 ++736 0 * +Fa +0 1e-07 519 0 + +0111000 ++735 0 * +Fa +0 1e-07 566 0 + +0111000 +-734 0 -733 0 * +Fa +0 1e-07 564 0 + +0111000 ++732 0 * +Fa +0 1e-07 563 0 + +0111000 ++731 0 * +Fa +0 1e-07 560 0 + +0111000 ++730 0 * +Fa +0 1e-07 558 0 + +0111000 ++729 0 * +Fa +0 1e-07 208 0 + +0111000 ++728 0 * +Fa +0 1e-07 207 0 + +0111000 ++727 0 * +Fa +0 1e-07 553 0 + +0111000 ++726 0 * +Fa +0 1e-07 555 0 + +0111000 ++725 0 * +Fa +0 1e-07 569 0 + +0111000 ++724 0 * +Fa +0 1e-07 568 0 + +0111000 ++723 0 * +Fa +0 1e-07 528 0 + +0111000 ++722 0 * +Fa +0 1e-07 527 0 + +0111000 ++721 0 * +Fa +0 1e-07 570 0 + +0111000 +-720 0 -719 0 * +Fa +0 1e-07 572 0 + +0111000 ++718 0 * +Fa +0 1e-07 571 0 + +0111000 ++717 0 * +Fa +0 1e-07 565 0 + +0111000 ++716 0 * +Fa +0 1e-07 567 0 + +0111000 ++715 0 * +Fa +0 1e-07 562 0 + +0111000 ++714 0 +713 0 * +Fa +0 1e-07 574 0 + +0111000 ++712 0 * +Fa +0 1e-07 573 0 + +0111000 ++711 0 * +Sh + +0101100 +-710 124 +709 0 -708 124 -707 124 -706 0 +705 125 -704 124 -703 124 +702 124 -701 124 +-700 124 -699 124 -698 124 -697 124 -696 124 -695 0 -694 0 -693 0 -692 0 -691 0 +-690 0 -689 0 -688 0 -687 0 -686 0 -685 0 -684 0 -683 0 -682 0 -681 0 +-680 0 -679 0 -678 0 -677 0 -676 0 -675 0 -674 0 -673 0 -672 0 +671 124 ++670 124 -669 0 -668 0 -667 129 -666 0 +665 124 +664 124 +663 124 +662 124 -661 0 +-660 0 -667 130 -659 0 +658 124 +657 124 +656 124 +655 124 -654 0 -653 0 -652 131 +-651 0 +650 124 +649 124 -648 124 -647 124 -646 124 -645 124 +644 124 -643 124 +642 124 +-641 124 -640 124 -639 124 -638 124 -637 124 +636 124 +635 124 -634 124 +633 124 -632 124 ++631 124 +630 0 +629 0 +628 0 +627 0 +626 0 +625 0 +624 0 +623 0 +622 0 ++621 0 -620 124 +619 124 +618 124 +617 124 +616 124 +615 124 +614 124 +613 124 +612 124 ++611 124 +610 124 * +Sh + +0101100 ++609 0 +608 0 +607 0 +606 0 +605 0 +604 0 +603 0 +602 0 +601 0 +600 0 +-709 0 +599 132 * +Sh + +0101100 ++598 133 +597 133 +596 133 +595 133 +594 133 +593 133 +592 0 +591 0 +590 0 -589 0 +-588 0 -587 0 -586 0 -585 0 -584 0 -583 0 -582 0 -581 0 -580 0 -579 133 +-578 133 * +Sh + +0101100 ++577 135 +576 135 +575 135 +574 135 +573 135 +572 135 +571 0 +570 0 +569 0 -568 0 +-567 0 -566 0 -565 0 -564 0 -563 0 -562 0 -561 0 -560 0 -559 0 -558 135 +-557 135 * +Sh + +0101100 ++577 137 +576 137 +575 137 +574 137 +573 137 +572 137 +556 0 +555 0 +554 0 -553 0 +-552 0 -551 0 -550 0 -549 0 -548 0 -547 0 -546 0 -545 0 -544 0 -558 137 +-557 137 * +Sh + +0101100 ++695 0 +543 0 +690 0 +692 0 +542 0 +693 0 -541 126 +540 0 +539 0 +538 126 ++537 126 +536 126 -591 0 +535 0 +534 0 +533 0 +653 0 -532 0 +531 0 +530 0 ++529 0 +528 0 +527 0 +526 0 +525 126 +524 126 +523 0 +522 139 +521 0 +520 0 ++519 139 +518 0 -517 126 -516 126 +515 126 +514 126 +513 0 +580 0 +584 0 +512 0 ++583 0 +581 0 -511 126 -510 126 +509 0 +508 0 * +Sh + +0101100 ++507 128 +506 128 +505 0 +559 0 +563 0 +504 0 +562 0 +560 0 -503 128 -502 128 ++501 0 +500 0 -499 128 -498 128 +497 128 +496 128 +679 0 +495 0 +674 0 +676 0 ++494 0 +677 0 -493 128 +492 0 +491 0 +490 128 +489 0 +488 140 +487 0 +486 0 ++485 140 +484 0 +483 128 +482 128 -570 0 +481 0 +480 0 +479 0 +668 0 -478 0 ++477 0 +476 0 +475 0 +474 0 +473 0 +472 0 * +Sh + +0101100 ++507 127 +506 127 +471 0 +544 0 +548 0 +470 0 +547 0 +545 0 -503 127 -502 127 ++469 0 +468 0 -499 127 -498 127 +497 127 +496 127 +687 0 +467 0 +682 0 +684 0 ++466 0 +685 0 -493 127 +465 0 +464 0 +490 127 +463 0 +485 141 +462 0 +461 0 ++488 141 +460 0 +483 127 +482 127 -555 0 +459 0 +458 0 +457 0 +660 0 -456 0 ++455 0 +454 0 +453 0 +452 0 +451 0 +450 0 * +Sh + +0101100 ++449 131 +448 131 -447 0 +652 131 -446 0 -445 0 -444 0 -443 0 -442 0 -441 0 +-531 0 -440 0 -528 0 -439 0 -529 0 -438 0 -530 0 -437 131 -436 131 -435 0 +-592 0 * +Sh + +0101100 ++434 0 +446 0 +443 0 +433 0 +444 0 +445 0 -432 0 +431 0 +430 0 +442 0 ++587 0 +429 0 -428 134 -427 134 +426 134 +425 134 * +Sh + +0101100 ++424 129 +423 129 -422 0 +667 129 -421 0 -420 0 -419 0 -418 0 -417 0 -416 0 +-477 0 -415 0 -474 0 -414 0 -475 0 -413 0 -476 0 -412 129 -411 129 +410 0 +-571 0 * +Sh + +0101100 ++424 130 +423 130 -409 0 +667 130 -408 0 -407 0 -406 0 -405 0 -404 0 -403 0 +-455 0 -402 0 -452 0 -401 0 -453 0 -400 0 -454 0 -412 130 -411 130 +399 0 +-556 0 * +Sh + +0101100 ++398 0 +421 0 +418 0 +397 0 +419 0 +420 0 -396 0 -395 0 +394 136 +393 136 ++417 0 +566 0 +392 0 -391 136 -390 136 +389 136 +388 136 * +Sh + +0101100 ++387 0 +408 0 +405 0 +386 0 +406 0 +407 0 -385 0 -384 0 +394 138 +393 138 ++404 0 +551 0 +383 0 -391 138 -390 138 +389 138 +388 138 * +Sh + +0101100 +-382 142 +381 142 +380 0 +432 0 -379 142 -378 142 +377 0 +376 0 +375 142 +374 142 ++373 0 +396 0 +385 0 +372 142 +371 142 -370 142 -369 142 +368 142 +367 142 -366 142 +-365 142 -364 142 -363 142 -362 142 -361 142 +360 142 -359 142 +358 142 -357 142 -356 142 +-355 142 -354 142 -353 142 +352 142 -351 142 -350 142 +349 142 +348 142 +347 142 +346 142 ++345 142 -344 142 -343 142 +342 142 -341 142 -340 142 -339 142 -338 142 -337 142 -336 142 +-335 142 -334 142 -333 142 -332 142 -331 142 -330 142 -329 142 -328 142 -327 142 -326 142 ++325 142 +324 142 -323 142 +322 142 +321 142 +320 142 -319 142 +318 142 -317 142 +316 142 +-315 142 +314 142 +313 142 -312 142 +311 142 -310 142 -309 142 +308 142 -307 142 +306 142 ++305 142 +304 142 +303 142 +302 142 +301 142 -300 142 +299 142 +298 142 -297 142 -296 142 +-295 142 +294 142 +293 142 -292 142 +291 142 -290 142 -289 142 +288 0 +287 142 +286 142 +-285 0 +284 0 +283 142 +282 0 -281 0 +280 142 +279 0 +278 0 -277 0 +276 0 +-275 142 -274 0 -273 0 +272 0 -271 0 -270 0 -269 0 -268 0 +267 142 +266 0 ++265 0 +264 142 +263 0 +262 142 -261 0 -260 142 +259 0 +258 142 +257 0 +256 142 +-255 0 +254 0 -253 0 -252 0 -251 0 -250 0 -249 0 -248 0 -247 142 +246 142 ++245 142 -244 142 -243 142 -242 142 +241 142 +240 142 -239 142 -238 142 -237 142 +236 142 +-235 142 +234 142 -233 142 -232 142 +231 142 -230 142 +229 142 -228 142 +227 142 -226 142 +-225 142 -224 142 +223 142 -222 142 -221 0 -220 142 -219 142 -218 142 +217 142 -216 142 ++215 142 +214 142 +213 142 +212 142 +211 142 +210 142 -209 142 -208 142 +207 142 -206 142 ++205 142 -204 142 -203 142 -202 142 +201 142 +200 142 -199 142 -198 142 -197 142 -196 142 +-195 142 -194 142 -193 142 +192 142 -191 142 -190 142 -189 142 -188 142 -187 142 -186 142 +-185 142 -184 142 +183 142 +182 142 -181 142 -180 142 -179 142 +178 142 -177 142 -176 142 +-175 142 -174 142 -173 142 +172 142 -171 142 -170 142 -169 142 -168 142 -167 142 +166 142 +-165 142 -164 142 -163 142 -162 142 -161 142 +160 142 -159 142 -158 142 -157 142 -156 142 +-155 142 +154 142 -153 142 -152 142 +151 142 -150 142 -149 142 -148 142 * +Sh + +0101100 +-147 143 -146 143 +221 0 +145 0 +144 0 +143 0 +142 0 +141 0 +140 0 +139 0 ++138 0 +137 0 +136 0 -135 143 -134 143 -133 143 -132 143 -131 143 -130 143 -129 143 +-128 143 -127 143 -126 143 -125 143 -124 143 -123 0 -122 0 -121 0 -120 0 -119 0 +-118 0 -117 0 -116 0 -115 0 -114 0 -113 0 -112 0 -111 0 -110 0 -109 0 +-108 0 +107 0 +106 0 -105 0 +104 0 -103 0 +102 139 -101 0 +100 141 -99 0 ++100 140 -98 0 * +Sh + +0101100 ++97 0 +96 0 -95 0 -102 0 -94 0 -93 0 -92 0 -91 0 +90 0 +89 0 +-88 0 -87 0 -86 0 -519 0 -522 0 -85 0 -84 0 +83 0 +82 0 +81 0 ++80 0 -79 0 -78 0 -77 0 -76 0 -75 0 -74 0 -73 0 +72 0 +71 0 ++70 0 +69 0 +68 0 * +Sh + +0101100 ++67 0 +66 0 -65 0 -100 0 -64 0 -63 0 -62 0 -61 0 +60 0 +59 0 +-58 0 -57 0 -56 0 -488 0 -485 0 -55 0 -54 0 +53 0 +52 0 +51 0 ++50 0 -49 0 -48 0 -47 0 -46 0 -45 0 -44 0 -43 0 +42 0 +41 0 ++40 0 +39 0 +38 0 * +So + +0100000 ++37 0 * +So + +0100000 ++36 0 * +So + +0100000 ++35 0 * +So + +0100000 ++34 0 * +So + +0100000 ++33 0 * +So + +0100000 ++32 0 * +So + +0100000 ++31 0 * +So + +0100000 ++30 0 * +So + +0100000 ++29 0 * +So + +0100000 ++28 0 * +So + +0100000 ++27 0 * +So + +0100000 ++26 0 * +So + +0100000 ++25 0 * +So + +0100000 ++24 0 * +So + +0100000 ++23 0 * +So + +0100000 ++22 0 * +So + +0100000 ++21 0 * +So + +0100000 ++20 0 * +Co + +1100000 ++3768 8 -3767 8 -3766 8 -3765 8 +3764 8 -3763 8 -3762 8 +3761 8 -3760 8 +3759 8 ++3758 8 -3757 8 +3756 8 -3755 8 -3754 8 +3753 8 +3752 8 -3751 8 +3750 8 -3749 8 ++3748 8 +3747 8 +3746 8 +3745 8 +3744 8 +3743 8 +3742 8 +3741 8 -3740 8 +3739 8 +-3738 8 -3737 8 -3736 8 -3735 8 -3734 8 -3733 8 -3732 8 -3731 8 +3730 10 -3729 10 +-3728 10 -3727 10 -3726 10 -3725 10 -3724 10 -3723 10 -3722 10 -3721 10 -3720 12 +3719 12 +-3718 12 -3717 12 +3716 12 -3715 12 +3714 12 -3713 12 -3712 14 +3711 14 -3710 16 +3709 16 +-3708 12 +3707 12 -3706 12 +3705 17 +3704 12 +3703 17 +3702 19 -3701 19 +3700 12 -3699 12 +-3698 12 +3697 12 -3696 17 -3695 16 -3694 17 -3693 16 -3692 21 +3691 21 -3690 21 -3689 21 ++3688 21 -3687 21 +3686 21 -3685 21 -3684 23 +3683 23 -3682 25 +3681 25 -3680 21 +3679 21 +-3678 21 +3677 17 +3676 21 +3675 17 +3674 27 -3673 27 +3672 21 -3671 21 -3670 21 +3669 21 +-3668 17 -3667 25 -3666 17 -3665 25 -3692 29 +3691 29 -3690 29 -3689 29 +3688 29 -3687 29 ++3686 29 -3685 29 -3684 31 +3683 31 -3682 33 +3681 33 -3680 29 +3679 29 -3678 29 +3664 17 ++3676 29 +3663 17 +3674 35 -3673 35 +3672 29 -3671 29 -3670 29 +3669 29 -3662 17 -3667 33 +-3661 17 -3665 33 +3660 16 +3659 16 -3658 16 +3657 16 +3656 16 -3655 16 -3654 16 -3653 16 +-3652 16 +3651 16 -3650 16 -3649 17 -3648 16 -3647 17 +3646 17 -3645 16 +3644 16 +3643 17 +-3642 16 +3641 16 -3640 16 -3639 16 +3638 16 -3637 16 +3636 37 +3635 37 +3634 37 -3633 37 +-3632 16 +3631 16 -3630 16 +3629 16 +3628 25 -3627 25 -3626 25 -3625 25 -3624 25 +3623 25 +-3622 25 +3621 25 -3620 25 +3619 25 -3618 25 -3617 25 +3616 25 +3615 25 -3614 25 +3613 25 ++3612 25 -3611 25 +3610 39 +3609 39 +3608 39 -3607 39 +3606 25 +3605 25 -3604 25 -3603 17 +-3602 25 -3601 17 +3600 17 -3599 25 +3598 25 +3597 17 +3628 33 -3627 33 -3626 33 -3625 33 +-3624 33 +3623 33 -3622 33 +3621 33 -3620 33 +3619 33 -3618 33 -3617 33 +3616 33 +3615 33 +-3614 33 +3613 33 +3612 33 -3611 33 +3609 41 +3610 41 +3607 41 -3608 41 +3606 33 +3605 33 +-3604 33 -3596 17 -3602 33 -3595 17 +3594 17 -3599 33 +3598 33 +3593 17 -3592 14 -3591 14 ++3590 14 -3589 17 -3588 14 -3587 17 -3586 14 -3585 19 -3584 14 -3583 19 +3582 14 -3581 14 +-3580 14 +3579 14 +3578 19 -3577 19 +3576 17 -3575 17 -3574 19 -3573 19 -3572 19 +3571 19 +-3570 23 -3569 23 +3568 23 -3567 17 -3566 23 -3565 17 -3564 23 -3563 27 -3562 23 -3561 27 ++3560 23 -3559 23 -3558 23 +3557 23 -3570 31 -3569 31 +3568 31 -3556 17 -3566 31 -3555 17 +-3564 31 -3563 35 -3562 31 -3561 35 +3560 31 -3559 31 -3558 31 +3557 31 +3554 27 -3553 27 ++3552 44 -3551 44 +3550 27 -3549 27 -3548 27 -3547 27 -3546 27 +3545 27 +3554 35 -3553 35 ++3544 44 -3543 44 +3550 35 -3549 35 -3548 35 -3547 35 -3546 35 +3545 35 -3542 44 +3541 44 ++3540 44 -3539 44 -3538 44 +3537 44 -3536 44 -3535 44 -3534 44 -3533 44 -3532 44 -3531 44 +-3530 44 -3529 44 -3528 44 -3527 44 -3526 44 -3525 44 +3524 44 -3523 44 -3522 44 -3521 44 +-3520 44 -3519 44 -3518 44 -3517 44 -3516 44 +3515 44 -3514 44 -3513 44 +3512 44 +3511 44 +-3510 44 +3509 44 -3508 44 +3507 44 -3506 44 +3505 44 -3504 44 -3503 44 +3502 44 +3501 44 ++3500 44 +3499 44 -3498 44 +3497 44 -3496 44 +3495 44 +3494 44 +3493 44 +3492 44 +3491 44 ++3490 44 +3489 44 -3488 44 +3487 44 -3486 44 +3485 44 -3484 44 -3483 44 +3482 44 +3481 44 ++3480 44 -3479 44 +3478 44 +3477 44 -3476 44 -3475 44 +3474 44 -3473 44 -3472 44 -3471 44 +-3470 44 -3469 44 -3468 44 -3467 44 +3466 44 -3465 44 +3464 44 -3463 44 +3462 44 -3461 44 ++3460 44 +3459 44 -3458 44 +3457 44 -3456 44 +3455 44 -3454 44 +3453 44 +3452 44 +3451 44 ++3450 44 +3449 44 +3448 44 +3447 44 +3446 44 +3445 44 +3444 44 -3443 44 +3442 44 -3441 44 +-3440 44 +3439 44 -3438 44 +3437 44 -3436 44 +3435 44 -3434 44 -3433 44 -3432 44 +3431 44 ++3430 44 +3429 44 -3428 44 -3427 44 -3426 44 -3425 44 +3424 44 +3423 44 -3422 44 +3421 44 +-3420 44 +3419 44 -3418 44 -3417 44 -3416 44 -3415 44 -3414 44 -3413 44 -3412 44 -3411 44 +-3410 44 -3409 44 -3408 44 -3407 44 -3406 44 -3405 44 -3404 44 -3403 44 -3402 44 +3401 44 +-3400 44 +3399 44 -3398 44 +3397 46 +3396 44 +3395 46 +3394 44 -3393 44 +3392 44 -3391 44 ++3390 17 -3389 44 +3388 17 +3387 44 -3386 17 -3385 44 +3384 44 -3383 17 +3382 44 +3381 17 +-3380 44 +3379 17 +3378 44 -3377 17 +3376 44 -3375 17 -3374 44 +3373 44 -3372 44 -3371 17 +-3370 17 -3369 17 -3368 44 -3367 44 +3366 44 -3365 17 -3364 17 +3363 44 -3362 17 +3361 17 +-3360 17 +3359 17 +3358 44 -3357 44 -3356 17 +3355 44 -3354 17 -3353 44 -3352 17 +3351 44 +-3350 44 -3349 44 -3348 17 +3347 44 -3346 17 -3345 44 -3344 44 -3343 17 -3342 17 +3341 17 +-3340 17 +3339 17 -3338 17 +3337 17 +3336 44 -3335 44 +3334 44 +3333 44 -3332 44 -3331 44 ++3330 44 -3329 44 -3328 44 -3327 44 +3326 44 -3325 44 -3324 44 -3323 44 +3322 44 -3321 44 +-3320 44 -3319 44 -3318 44 -3317 44 +3316 44 -3315 44 +3314 44 -3313 44 +3312 44 -3311 44 +-3310 44 -3309 44 -3308 44 -3307 44 -3306 44 -3305 44 -3304 44 +3303 44 -3302 44 +3301 44 +-3300 44 -3299 44 -3298 44 +3297 44 -3296 44 -3295 44 -3294 44 +3293 44 +3292 44 -3291 44 +-3290 44 +3289 44 -3288 44 +3287 44 +3286 44 -3285 44 +3284 44 +3283 44 -3282 44 -3281 44 ++3280 44 -3279 44 -3278 44 -3277 44 +3276 44 -3275 44 -3274 44 -3273 44 -3272 44 +3271 44 +-3270 44 -3269 44 -3268 44 +3267 44 -3266 44 -3265 44 +3264 44 -3263 44 -3262 44 +3261 44 +-3260 44 -3259 44 +3258 44 -3257 44 +3256 44 -3255 44 -3254 44 -3253 44 -3252 44 +3251 44 +-3250 44 -3249 44 -3248 44 +3247 44 +3246 44 +3245 44 -3244 44 +3243 44 +3242 44 +3241 44 ++3240 44 -3239 44 +3238 44 -3237 44 +3236 44 +3235 44 +3234 44 +3233 44 -3232 44 -3231 44 ++3230 44 -3229 44 +3228 44 +3227 44 -3226 44 +3225 44 -3224 44 -3223 44 +3222 44 +3221 44 ++3220 44 -3219 44 +3218 44 +3217 44 -3216 44 +3215 44 +3214 44 -3213 44 +3212 44 +3211 44 ++3210 44 +3209 44 -3208 44 +3207 44 +3206 44 +3205 44 -3204 44 +3203 44 +3202 44 +3201 44 +-3200 44 -3199 44 -3198 44 -3197 44 -3196 44 +3195 44 -3194 44 +3193 44 +3192 44 +3191 44 +-3190 44 +3189 44 +3188 44 +3187 44 +3186 44 +3185 44 +3184 44 +3183 44 +3182 44 +3181 44 +-3180 44 +3179 44 -3178 44 -3177 44 -3176 44 -3175 44 -3174 44 +3173 44 -3172 44 +3171 44 ++3170 44 -3169 44 +3168 44 +3167 44 -3166 44 -3165 44 +3164 44 -3163 44 +3162 44 +3161 44 +-3160 44 +3159 44 -3158 44 -3157 44 +3156 44 +3155 44 -3154 44 -3153 44 +3152 44 +3151 48 +-3150 48 +3149 48 +3148 48 -3147 48 +3146 48 -3145 48 -3144 48 -3143 48 -3142 48 -3141 48 +-3140 48 -3139 48 -3138 48 -3137 48 -3136 48 -3135 48 -3134 48 -3133 48 -3132 48 -3131 48 +-3130 48 -3129 48 +3128 48 +3127 48 +3126 48 -3125 48 +3124 48 +3123 48 +3122 48 +3121 48 +-3120 48 +3119 48 +3118 48 +3117 48 -3116 48 +3115 48 +3114 48 +3113 48 -3112 48 +3111 48 +-3110 48 +3109 48 +3108 48 +3107 48 +3106 48 +3105 48 -3104 48 +3103 48 -3102 39 +3101 39 +-3102 41 +3101 41 -3100 37 +3099 37 -3098 37 +3097 37 -3096 41 +3095 41 -3096 39 +3095 39 +-3094 37 +3093 37 -3092 37 -3091 37 +3090 37 -3089 37 +3088 37 +3087 37 +3086 37 +3085 37 ++3084 37 -3083 37 -3082 37 +3081 37 +3080 37 -3079 37 -3078 37 +3077 37 +3076 37 -3075 37 +-3074 37 +3073 37 -3072 37 +3071 37 -3070 37 +3069 37 +3068 37 -3067 37 +3066 37 -3065 37 +-3064 41 +3063 41 -3062 41 -3061 41 +3060 41 -3059 41 +3058 41 +3057 41 +3056 41 +3055 41 ++3054 41 -3053 41 -3052 41 +3051 41 +3050 41 -3049 41 -3048 41 +3047 41 +3046 41 -3045 41 +-3044 41 +3043 41 -3042 41 +3041 41 -3040 41 +3039 41 +3038 41 -3037 41 +3036 41 -3035 41 +-3064 39 +3063 39 -3062 39 -3061 39 +3060 39 -3059 39 +3058 39 +3057 39 +3056 39 +3055 39 ++3054 39 -3053 39 -3052 39 +3051 39 +3050 39 -3049 39 -3048 39 +3047 39 +3046 39 -3045 39 +-3044 39 +3043 39 -3042 39 +3041 39 -3040 39 +3039 39 +3038 39 -3037 39 +3036 39 -3035 39 +-3034 8 +3033 8 +3032 17 -3031 17 -3030 17 -3029 17 -3028 17 -3027 17 -3026 17 -3025 17 +-3024 17 -3023 17 -3022 8 +3021 8 -3020 8 +3019 8 -3018 8 +3017 8 -3016 50 +3015 50 +-3014 8 +3013 8 -3012 8 -3011 8 -3010 8 +3009 8 +3008 8 +3007 8 +3006 8 -3005 8 +-3004 8 +3003 8 -3002 8 +3001 8 +3000 8 +2999 8 +2998 8 -2997 8 +2996 8 +2995 8 ++2994 8 -2993 8 +2992 8 +2991 8 -2990 8 +2989 8 -2988 8 +2987 8 -2986 17 +2985 8 +-2984 16 -2983 17 -2982 17 -2981 8 -2980 17 -2979 16 -2978 8 +2977 8 -2976 17 +2975 8 +-2974 33 -2973 17 -2972 17 -2971 8 -2970 17 -2969 33 -2968 8 +2967 8 -2966 17 +2965 8 +-2974 25 -2964 17 -2963 17 -2962 8 -2961 17 -2969 25 -2960 8 +2959 8 +2958 8 -2957 8 +-2956 8 -2955 8 -2954 8 +2953 8 +2952 23 -2951 23 +2950 25 -2949 25 +2948 23 -2947 23 ++2946 8 -2945 8 -2944 8 -2943 8 -2942 8 +2941 8 +2952 31 -2951 31 +2950 33 -2949 33 ++2948 31 -2947 31 +2940 8 -2939 8 -2938 8 -2937 8 -2936 8 +2935 8 +2934 14 -2933 14 ++2932 16 -2931 16 +2930 14 -2929 14 +2928 8 -2927 8 -2926 8 -2925 8 +2924 8 +2923 8 ++2922 8 +2921 8 +2920 8 +2919 8 +2918 8 +2917 8 +2916 8 +2915 8 -2914 8 -2913 8 +-2912 8 -2911 8 -2910 8 -2909 8 -2908 50 -2907 50 -2906 8 -2905 8 -2904 8 +2903 8 +-2902 8 -2901 8 +2900 8 +2899 8 -2898 8 +2897 8 -2896 8 +2895 8 -2894 8 -2893 8 +-2892 8 -2891 8 +2890 8 +2889 8 +2888 8 +2887 8 -2886 8 -2885 8 +2884 8 +2883 8 +-2882 8 -2881 8 -2880 8 +2879 8 -2878 8 +2877 8 -2876 8 -2875 8 -2874 8 -2873 16 +-2872 16 -2871 8 +2870 16 +2869 8 -2868 8 -2867 8 +2866 8 -2865 8 -2864 16 -2863 16 ++2862 16 -2861 8 -2860 8 +2859 8 -2858 8 -2857 8 -2856 8 -2855 33 -2854 33 -2853 8 ++2852 33 +2851 8 -2850 8 -2849 8 +2848 8 -2847 8 -2846 33 -2845 33 +2844 33 -2843 8 +-2842 8 +2841 8 -2840 8 -2839 8 -2838 8 -2837 25 -2836 25 -2835 8 +2834 25 +2833 8 +-2832 8 -2831 8 +2830 8 -2829 8 -2828 25 -2827 25 +2826 25 -2825 8 -2824 8 +2823 8 +-2822 8 -2821 8 +2820 8 -2819 8 -2818 8 +2817 8 -2816 8 -2815 8 -2814 8 +2813 8 +-2812 8 -2811 8 +2810 23 +2809 23 +2808 25 +2807 25 +2806 23 +2805 23 -2804 8 +2803 8 ++2802 8 -2801 8 -2800 8 +2799 8 -2798 8 -2797 8 -2796 8 +2795 8 -2794 8 -2793 8 ++2810 31 +2809 31 +2808 33 +2807 33 +2806 31 +2805 31 -2792 8 +2791 8 +2790 8 -2789 8 +-2788 8 -2787 8 +2786 8 -2785 8 -2784 8 +2783 8 -2782 8 -2781 8 +2780 14 +2779 14 ++2778 16 +2777 16 +2776 14 +2775 14 -2774 8 +2773 8 +2772 8 -2771 8 +2770 8 +2769 8 +-2768 8 +2767 8 -2766 8 -2765 8 -2764 8 +2763 8 +2762 8 -2761 8 -2760 8 +2759 8 ++2758 8 -2757 8 -2756 8 +2755 8 -2754 8 -2753 8 -2752 8 +2751 8 -2750 8 -2749 8 +-2748 8 +2747 8 -2746 8 +2745 8 -2744 8 -2743 8 -2742 8 -2741 8 +2740 8 +2739 8 +-2738 8 -2737 8 -2736 8 +2735 8 +2734 8 -2733 8 +2732 8 +2731 8 +2730 8 +2729 8 ++2728 8 +2727 8 +2726 8 +2725 8 +2724 8 +2723 8 +2722 8 +2721 8 +2720 8 +2719 8 ++2718 8 +2717 8 +2716 8 +2715 8 -2714 8 -2713 8 -2712 8 -2711 8 -2710 8 -2709 8 +-2708 8 -2707 8 -2706 8 -2705 8 -2704 8 +2703 8 +2702 8 +2701 8 +2700 8 +2699 8 ++2698 8 +2697 8 +2696 8 +2695 8 -2694 10 +2693 10 -2692 10 +2691 10 -2690 10 +2689 10 +-2688 10 +2687 10 -2686 10 +2685 10 -2684 10 +2683 10 -2682 10 +2681 10 -2680 10 +2679 10 +-2678 10 +2677 10 -2676 10 -2675 10 -2674 12 +2673 12 +2672 12 -2671 12 +2670 12 -2669 12 +-2668 12 +2667 12 -2666 12 -2665 12 +2664 12 -2663 12 -2662 12 -2661 12 -2660 14 -2659 14 +-2658 16 -2657 16 -2656 12 -2655 12 -2654 12 -2653 12 -2652 12 +2651 12 -2650 12 -2649 12 ++2648 19 +2647 19 +2646 12 +2645 12 -2644 12 +2643 12 -2642 16 -2641 16 -2640 12 -2639 16 +-2638 12 +2637 12 -2636 12 -2635 16 -2634 16 -2633 16 +2632 12 -2631 12 -2630 21 +2629 21 ++2628 21 -2627 21 +2626 21 -2625 21 -2624 21 +2623 21 -2622 21 -2621 21 +2620 21 -2619 21 +-2618 21 -2617 21 -2616 23 -2615 23 -2614 25 -2613 25 -2612 21 -2611 21 -2610 21 -2609 21 +-2608 21 +2607 21 -2606 21 -2605 21 +2604 27 +2603 27 +2602 21 +2601 21 -2600 21 +2599 21 +-2598 25 -2597 25 -2596 21 -2595 25 -2594 21 +2593 21 -2592 21 -2591 25 -2590 25 -2589 25 ++2588 21 -2587 21 -2630 29 +2629 29 +2628 29 -2627 29 +2626 29 -2625 29 -2624 29 +2623 29 +-2622 29 -2621 29 +2620 29 -2619 29 -2618 29 -2617 29 -2616 31 -2615 31 -2614 33 -2613 33 +-2612 29 -2611 29 -2586 29 -2585 29 -2608 29 +2607 29 -2584 29 -2583 29 +2604 35 +2603 35 ++2602 29 +2601 29 -2600 29 +2582 29 -2581 33 -2580 33 -2579 29 -2578 33 -2577 29 +2576 29 +-2592 29 -2575 33 -2574 33 -2573 33 +2588 29 -2587 29 -2572 16 -2571 16 +2570 16 -2569 16 +-2568 16 -2567 16 -2566 16 +2565 16 +2564 16 +2563 16 +2562 16 +2561 16 -2560 16 +2559 16 +-2558 16 -2557 16 +2556 16 +2555 16 +2554 16 -2553 16 +2552 16 +2551 16 +2550 16 +2549 14 ++2548 16 +2547 16 -2546 16 +2545 16 +2544 14 +2543 16 -2542 16 +2541 16 -2540 16 +2539 16 ++2538 16 -2537 16 +2536 16 -2535 16 +2534 16 -2533 16 -2532 37 +2531 16 -2530 37 +2529 37 +-2528 37 -2527 16 +2526 16 +2525 16 -2524 37 -2523 37 -2522 16 +2521 16 -2520 16 -2519 16 +-2518 16 +2517 16 -2516 16 +2515 16 +2514 16 -2513 16 +2512 16 +2511 16 -2510 16 +2509 16 ++2508 25 -2507 25 -2506 25 +2505 25 -2504 25 +2503 25 -2502 25 +2501 25 +2500 25 +2499 25 ++2498 25 -2497 25 +2496 25 +2495 25 -2494 25 +2493 25 -2492 25 +2491 25 -2490 25 -2489 25 +-2488 25 +2487 25 +2486 25 +2485 25 -2484 25 -2483 25 +2482 25 -2481 25 -2480 25 -2479 25 +-2478 25 +2477 25 +2476 25 +2475 25 -2474 25 -2473 39 +2472 25 -2471 39 +2470 39 -2469 39 +-2468 25 -2467 25 +2466 25 -2465 39 -2464 39 -2463 25 +2462 25 -2461 25 +2460 25 +2459 25 ++2458 25 -2457 25 +2456 25 +2455 25 +2454 25 +2453 23 +2452 25 +2451 25 -2450 25 +2449 25 ++2448 23 +2447 25 -2446 25 +2445 25 +2508 33 -2507 33 -2506 33 +2505 33 -2504 33 +2503 33 +-2444 33 +2443 33 +2500 33 +2499 33 +2498 33 -2497 33 +2496 33 +2495 33 -2494 33 +2493 33 +-2492 33 +2491 33 -2490 33 -2489 33 -2488 33 +2487 33 +2486 33 +2485 33 -2442 33 -2483 33 ++2441 33 -2481 33 -2480 33 -2479 33 -2478 33 +2477 33 +2476 33 +2475 33 -2440 33 -2465 41 ++2439 33 -2470 41 +2471 41 -2464 41 -2438 33 -2467 33 +2437 33 -2473 41 -2469 41 -2463 33 ++2462 33 -2461 33 +2460 33 +2436 33 +2435 33 -2457 33 +2434 33 +2433 33 +2432 33 +2431 31 ++2452 33 +2430 33 -2450 33 +2429 33 +2428 31 +2427 33 -2446 33 +2445 33 -2426 14 +2425 14 ++2424 14 +2423 14 +2422 14 +2421 14 +2420 14 +2419 14 +2418 14 +2417 14 -2416 19 +2415 14 +-2414 14 +2413 14 -2412 19 +2411 14 +2410 14 +2409 14 +2408 14 -2407 14 +2406 14 -2405 14 ++2404 14 -2403 14 +2402 14 +2401 14 +2400 19 -2399 19 +2398 19 +2397 19 +2396 19 +2395 19 +-2394 19 +2393 19 +2392 19 +2391 19 +2390 19 -2389 19 +2388 19 +2387 19 -2386 19 +2385 19 +-2384 23 +2383 23 +2382 23 +2381 23 +2380 23 +2379 23 +2378 23 +2377 23 +2376 23 +2375 23 +-2374 27 +2373 23 -2372 23 +2371 23 -2370 27 +2369 23 +2368 23 +2367 23 +2366 23 -2365 23 ++2364 23 -2363 23 -2362 23 -2361 23 +2360 23 -2359 23 -2384 31 +2383 31 +2382 31 +2381 31 ++2358 31 +2357 31 +2356 31 +2355 31 +2376 31 +2354 31 -2353 35 +2352 31 -2372 31 +2351 31 +-2350 35 +2349 31 +2368 31 +2367 31 +2348 31 -2347 31 +2346 31 -2345 31 -2362 31 -2361 31 ++2360 31 -2359 31 +2344 27 -2343 27 +2342 27 +2341 27 +2340 44 +2339 44 +2338 27 +2337 27 +-2336 27 +2335 27 +2334 27 +2333 27 +2332 27 -2331 27 +2330 27 +2329 27 -2328 27 +2327 27 ++2344 35 -2326 35 +2325 35 +2341 35 +2324 44 +2323 44 +2338 35 +2337 35 -2336 35 +2335 35 ++2334 35 +2333 35 +2332 35 -2331 35 +2330 35 +2329 35 -2328 35 +2327 35 -2322 44 -2321 44 ++2320 44 +2319 44 -2318 44 -2317 44 -2316 44 -2315 44 -2314 44 -2313 44 -2312 44 -2311 44 +-2310 44 -2309 44 -2308 44 -2307 44 -2306 44 -2305 44 -2304 44 +2303 44 -2302 44 +2301 44 +-2300 44 +2299 44 -2298 44 -2297 44 -2296 44 +2295 44 +2294 44 +2293 44 -2292 44 +2291 44 ++2290 44 -2289 44 +2288 44 -2287 44 +2286 44 -2285 44 -2284 44 +2283 44 +2282 44 +2281 44 ++2280 44 -2279 44 +2278 44 -2277 44 -2276 44 -2275 44 +2274 44 +2273 44 -2272 44 +2271 44 +-2270 44 +2269 44 -2268 44 +2267 44 +2266 44 -2265 44 +2264 44 +2263 44 +2262 44 -2261 44 +-2260 44 +2259 44 +2258 44 -2257 44 +2256 44 -2255 44 -2254 44 +2253 44 -2252 44 +2251 44 +-2250 44 +2249 44 +2248 44 +2247 44 -2246 44 +2245 44 +2244 44 -2243 44 +2242 44 -2241 44 ++2240 44 -2239 44 +2238 44 -2237 44 -2236 44 -2235 44 +2234 44 +2233 44 -2232 44 +2231 44 +-2230 44 -2229 44 +2228 44 -2227 44 -2226 44 -2225 44 -2224 44 -2223 44 -2222 44 -2221 44 +-2220 44 -2219 44 -2218 44 -2217 44 -2216 44 +2215 44 -2214 44 +2213 44 -2212 44 +2211 44 +-2210 44 +2209 44 -2208 44 -2207 44 -2206 44 -2205 44 -2204 44 +2203 44 +2202 44 -2201 44 +-2200 44 +2199 44 +2198 44 -2197 44 -2196 44 +2195 44 +2194 44 -2193 44 -2192 44 +2191 44 +-2190 44 +2189 44 +2188 44 +2187 44 -2186 44 +2185 44 +2184 44 +2183 44 -2182 44 -2181 44 +-2180 44 +2179 44 -2178 44 -2177 44 -2176 44 +2175 44 -2174 44 +2173 44 +2172 44 -2171 44 ++2170 44 +2169 44 -2168 44 +2167 44 +2166 44 -2165 44 -2164 44 +2163 44 -2162 44 -2161 44 ++2160 44 +2159 44 -2158 44 +2157 44 +2156 44 +2155 44 +2154 44 +2153 44 +2152 44 -2151 44 +-2150 44 +2149 44 +2148 44 -2147 44 +2146 44 +2145 44 -2144 44 +2143 44 +2142 44 -2141 44 +-2140 44 -2139 44 +2138 44 -2137 44 +2136 44 +2135 44 -2134 44 +2133 44 -2132 44 +2131 44 ++2130 44 -2129 44 +2128 44 +2127 44 -2126 44 -2125 44 -2124 44 +2123 44 +2122 44 -2121 44 ++2120 44 +2119 44 +2118 44 -2117 44 -2116 44 +2115 44 +2114 44 +2113 44 -2112 44 -2111 44 ++2110 44 +2109 44 -2108 44 +2107 44 -2106 44 +2105 44 -2104 44 +2103 44 -2102 44 +2101 44 +-2100 44 -2099 44 -2098 44 -2097 44 -2096 44 -2095 44 -2094 44 -2093 44 -2092 44 +2091 44 +-2090 44 -2089 44 -2088 44 -2087 44 -2086 44 -2085 44 +2084 44 -2083 44 -2082 44 +2081 44 +-2080 44 +2079 44 -2078 44 -2077 44 +2076 44 -2075 44 +2074 44 +2073 44 +2072 44 -2071 44 +-2070 44 +2069 44 -2068 44 +2067 44 -2066 44 -2065 44 +2064 44 -2063 44 -2062 44 -2061 44 ++2060 44 +2059 44 +2058 44 -2057 44 +2056 44 -2055 44 -2054 44 +2053 44 +2052 44 +2051 44 +-2050 44 -2049 44 +2048 44 +2047 44 -2046 44 +2045 44 +2044 44 -2043 44 -2042 44 +2041 44 +-2040 44 -2039 44 +2038 44 -2037 44 -2036 44 -2035 44 +2034 44 -2033 44 -2032 44 +2031 44 +-2030 44 -2029 44 -2028 44 -2027 44 +2026 44 +2025 44 +2024 44 -2023 44 +2022 44 -2021 44 ++2020 44 -2019 44 -2018 44 +2017 44 +2016 44 -2015 44 -2014 44 -2013 44 -2012 44 +2011 44 +-2010 44 +2009 44 +2008 44 +2007 44 -2006 44 +2005 44 +2004 44 -2003 44 -2002 44 +2001 44 +-2000 44 -1999 44 +1998 44 -1997 44 -1996 44 -1995 44 +1994 44 -1993 44 -1992 44 +1991 44 +-1990 44 +1989 44 +1988 44 +1987 44 +1986 44 -1985 44 -1984 44 +1983 44 +1982 44 -1981 44 ++1980 44 -1979 44 -1978 44 +1977 44 +1976 44 -1975 44 +1974 44 -1973 44 +1972 44 +1971 44 ++1970 44 -1969 44 +1968 44 -1967 44 -1966 44 +1965 44 -1964 44 -1963 44 +1962 44 +1961 44 +-1960 44 +1959 44 -1958 44 +1957 44 +1956 44 +1955 44 -1954 44 +1953 44 -1952 44 -1951 44 ++1950 44 -1949 44 -1948 44 +1947 44 +1946 44 +1945 44 -1944 44 +1943 44 -1942 44 -1941 44 ++1940 44 -1939 44 -1938 44 +1937 44 +1936 44 -1935 44 -1934 44 -1933 44 +1932 44 +1931 44 ++1930 44 -1929 44 +1928 44 -1927 44 -1926 44 -1925 44 +1924 44 +1923 44 +1922 44 -1921 44 +-1920 44 +1919 44 -1918 44 -1917 44 -1916 44 +1915 44 +1914 44 -1913 44 -1912 44 +1911 44 ++1910 44 -1909 44 +1908 44 +1907 44 -1906 44 +1905 44 -1904 44 +1903 44 +1902 44 -1901 44 +-1900 44 +1899 44 +1898 44 -1897 44 -1896 44 -1895 44 -1894 44 +1893 44 +1892 44 -1891 44 +-1890 44 +1889 44 +1888 44 +1887 44 -1886 44 -1885 44 -1884 44 -1883 44 +1882 44 -1881 44 ++1880 44 -1879 44 -1878 44 +1877 44 +1876 44 -1875 44 -1874 44 -1873 44 -1872 44 +1871 44 ++1870 44 +1869 44 -1868 44 -1867 44 +1866 44 -1865 44 +1864 44 +1863 44 -1862 44 +1861 44 ++1860 44 +1859 44 -1858 44 -1857 44 +1856 44 -1855 44 +1854 44 -1853 44 +1852 44 -1851 44 +-1850 44 +1849 44 +1848 44 -1847 44 +1846 44 +1845 44 -1844 44 +1843 44 -1842 44 +1841 44 +-1840 44 +1839 44 -1838 44 +1837 44 -1836 44 -1835 44 -1834 44 +1833 44 +1832 44 +1831 44 ++1830 44 +1829 44 -1828 44 +1827 44 +1826 44 +1825 44 -1824 44 -1823 44 +1822 44 -1821 44 ++1820 44 -1819 44 +1818 44 +1817 44 -1816 44 -1815 44 +1814 44 -1813 44 +1812 44 -1811 44 ++1810 44 +1809 44 -1808 44 -1807 44 +1806 44 +1805 44 -1804 44 -1803 44 +1802 44 +1801 44 +-1800 44 -1799 44 +1798 44 +1797 44 -1796 44 -1795 44 +1794 44 +1793 44 +1792 44 +1791 44 +-1790 44 -1789 44 -1788 44 -1787 44 +1786 44 +1785 44 -1784 44 -1783 44 +1782 44 -1781 44 +-1780 44 +1779 44 -1778 44 +1777 44 +1776 44 +1775 44 +1774 44 +1773 44 +1772 44 -1771 44 +-1770 44 +1769 44 -1768 44 +1767 44 -1766 44 +1765 44 +1764 44 -1763 44 +1762 44 -1761 44 +-1760 44 -1759 44 -1758 44 -1757 44 -1756 44 -1755 44 +1754 44 +1753 44 +1752 44 -1751 44 ++1750 44 -1749 44 +1748 44 +1747 44 +1746 44 -1745 44 -1744 44 +1743 44 -1742 44 +1741 44 +-1740 44 +1739 44 +1738 44 -1737 44 -1736 44 -1735 44 +1734 44 +1733 44 -1732 44 -1731 44 ++1730 44 +1729 44 +1728 44 -1727 44 -1726 44 +1725 44 -1724 44 +1723 44 +1722 44 -1721 44 ++1720 44 +1719 44 -1718 44 -1717 44 +1716 44 -1715 44 +1714 44 +1713 44 -1712 44 +1711 44 ++1710 48 -1709 48 -1708 48 +1707 48 -1706 48 +1705 48 -1704 48 -1703 48 -1702 48 +1701 48 ++1700 48 -1699 48 +1698 48 +1697 48 -1696 48 +1695 48 +1694 48 +1693 48 +1692 48 -1691 48 ++1690 48 +1689 48 -1688 48 +1687 48 +1686 48 -1685 48 +1684 48 +1683 48 +1682 48 +1681 48 +-1680 48 +1679 48 +1678 48 -1677 48 +1676 48 +1675 48 -1674 48 -1673 48 +1672 48 -1671 48 ++1670 48 +1669 48 -1668 48 -1667 48 +1666 48 +1665 48 -1664 48 -1663 48 +1662 48 -1661 48 ++1660 48 +1659 48 -1658 48 -1657 48 +1656 48 -1655 48 +1654 48 +1653 48 +1652 48 +1651 48 ++1650 48 +1649 48 -1648 48 -1647 48 -1646 48 +1645 48 -1644 48 +1643 48 -1642 48 +1641 48 +-1640 48 -1639 48 +1638 48 +1637 48 +1636 48 +1635 48 -1634 48 +1633 48 -1632 48 +1631 48 +-1630 48 -1629 48 -1628 48 -1627 48 -1626 48 -1625 48 +1624 48 +1623 48 -1622 48 +1621 48 +-1620 39 -1619 39 -1620 41 -1619 41 -1618 37 -1617 37 -1616 37 -1615 37 -1614 41 -1613 41 +-1614 39 -1613 39 -1612 37 -1611 37 +1610 37 +1609 37 -1608 37 +1607 37 +1606 37 -1605 37 +-1604 37 +1603 37 -1602 37 +1601 37 -1600 37 +1599 37 +1598 37 +1597 37 -1596 37 +1595 37 +-1594 37 -1593 37 -1592 37 -1591 37 +1590 37 +1589 37 -1588 37 +1587 37 -1586 37 +1585 37 +-1584 37 -1583 37 +1582 37 -1581 37 -1580 37 +1579 37 -1578 37 -1577 37 -1576 37 +1575 37 +-1574 37 -1573 37 +1572 37 -1571 37 +1570 37 +1569 37 -1568 37 -1567 37 -1566 37 +1565 37 +-1564 37 +1563 37 -1562 37 -1561 37 +1560 37 +1559 37 +1558 37 -1557 37 -1556 41 -1555 41 ++1554 41 +1553 41 -1552 41 +1551 41 +1550 41 -1549 41 -1548 41 +1547 41 -1546 41 +1545 41 +-1544 41 +1543 41 +1542 41 +1541 41 -1540 41 +1539 41 -1538 41 -1537 41 -1536 41 -1535 41 ++1534 41 +1533 41 -1532 41 +1531 41 -1530 41 +1529 41 -1528 41 -1527 41 +1526 41 -1525 41 +-1524 41 +1523 41 -1522 41 -1521 41 -1520 41 +1519 41 -1518 41 -1517 41 +1516 41 -1515 41 ++1514 41 +1513 41 -1512 41 -1511 41 -1510 41 +1509 41 -1508 41 +1507 41 -1506 41 -1505 41 ++1504 41 +1503 41 +1502 41 -1501 41 -1556 39 -1555 39 +1554 39 +1553 39 -1552 39 +1551 39 ++1550 39 -1549 39 -1548 39 +1547 39 -1546 39 +1545 39 -1544 39 +1543 39 +1542 39 +1541 39 +-1540 39 +1539 39 -1538 39 -1537 39 -1536 39 -1535 39 +1534 39 +1533 39 -1532 39 +1531 39 +-1530 39 +1529 39 -1528 39 -1527 39 +1526 39 -1525 39 -1524 39 +1523 39 -1522 39 -1521 39 +-1520 39 +1519 39 -1518 39 -1517 39 +1516 39 -1515 39 +1514 39 +1513 39 -1512 39 -1511 39 +-1510 39 +1509 39 -1508 39 +1507 39 -1506 39 -1505 39 +1504 39 +1503 39 +1502 39 -1501 39 ++1500 8 +1499 17 +1498 8 +1497 8 -1496 17 -1495 17 -1494 50 +1493 8 -1492 8 +1491 8 +-1490 8 -1489 8 -1488 8 -1487 8 +1486 8 -1485 8 -1484 17 -1483 17 -1482 17 -1481 17 +-1480 17 -1479 17 -1478 17 -1477 17 -1476 17 -1475 17 -1474 17 -1473 17 -1472 17 -1471 17 +-1470 17 -1469 17 -1468 17 -1467 17 -1466 17 -1465 17 -1464 17 -1463 17 -1462 17 -1461 17 ++1460 8 +1459 8 -1458 17 -1457 17 -1456 17 -1455 17 -1454 23 -1453 23 -1452 17 -1451 17 ++1450 8 +1449 8 +1448 8 +1447 8 -1446 17 -1445 17 -1444 17 -1443 17 -1454 31 -1453 31 +-1442 17 -1441 17 +1440 8 +1439 8 +1438 8 +1437 8 -1436 17 -1435 17 -1434 17 -1433 17 +-1432 14 -1431 14 -1430 17 -1429 17 +1428 8 +1427 8 +1426 8 -1425 8 +1424 8 -1423 8 ++1422 8 -1421 8 +1420 8 -1419 8 -1418 8 -1417 8 -1416 8 -1415 8 +1414 8 +1413 8 ++1412 8 +1411 8 +1410 8 +1409 8 +1408 8 +1407 8 +1406 17 +1405 17 +1404 17 +1403 17 ++1402 17 +1401 17 +1400 17 +1399 17 +1398 17 +1397 17 +1396 8 +1395 8 +1394 8 +1393 8 ++1392 8 +1391 8 +1390 8 +1389 8 +1388 8 +1387 8 +1386 8 +1385 8 +1384 17 +1383 17 ++1382 17 +1381 17 +1380 17 +1379 17 +1378 17 +1377 17 +1376 17 +1375 17 +1374 10 +1373 12 ++1372 12 +1371 12 +1370 12 +1369 12 +1368 12 +1367 17 +1366 17 +1365 17 +1364 17 +1363 17 ++1362 17 -1361 17 -1360 17 -1359 17 -1358 17 -1357 17 -1356 17 -1355 17 -1354 17 -1353 17 +-1352 17 -1351 17 -1350 17 -1349 12 -1348 12 +1347 21 +1346 21 +1345 21 +1344 21 +1343 21 ++1342 21 +1341 17 +1340 17 +1339 17 +1338 17 +1337 17 +1336 17 -1335 17 -1334 17 -1333 17 +-1332 17 -1331 17 -1330 17 -1329 17 -1328 17 -1327 17 -1326 17 -1325 17 -1324 17 -1323 21 +-1322 21 +1347 29 +1346 29 +1345 29 +1344 29 +1343 29 +1342 29 +1321 17 +1320 17 +1319 17 ++1318 17 +1317 17 +1316 17 -1315 17 -1314 17 -1313 17 -1312 17 -1311 17 -1310 17 -1309 17 +-1308 17 -1307 17 -1306 17 -1305 17 -1304 17 -1323 29 -1322 29 +1303 17 +1302 17 +1301 16 ++1300 17 +1299 17 +1298 16 +1297 16 +1296 16 +1295 17 +1294 17 +1293 17 +1292 17 -1291 17 +-1290 17 +1289 17 +1288 17 +1287 17 +1286 17 +1285 17 +1284 17 +1283 16 +1282 16 +1281 17 ++1280 37 +1279 17 +1278 17 +1277 37 +1276 17 -1275 16 -1274 16 +1273 16 +1272 16 +1271 17 ++1270 17 -1269 16 -1268 16 +1267 17 +1266 17 +1265 25 +1264 25 +1263 17 +1262 17 -1261 25 +-1260 25 +1259 17 +1258 17 -1257 25 -1256 25 +1255 25 +1254 25 +1253 17 +1252 17 +1251 25 ++1250 17 +1249 17 +1248 25 +1247 17 +1246 39 +1245 17 +1244 17 +1243 39 +1242 17 +1241 25 ++1240 25 +1239 17 +1238 17 +1237 17 +1236 17 -1235 17 -1234 17 +1233 17 +1232 17 +1231 17 ++1230 17 +1229 17 +1228 17 +1265 33 +1264 33 +1227 17 +1226 17 -1261 33 -1260 33 +1225 17 ++1224 17 -1257 33 -1256 33 +1255 33 +1254 33 +1223 17 +1222 17 +1251 33 +1221 17 +1220 17 ++1248 33 +1219 17 +1243 41 +1218 17 +1217 17 +1246 41 +1216 17 +1241 33 +1240 33 +1215 17 ++1214 17 +1213 17 +1212 17 -1211 17 -1210 17 +1209 17 +1208 17 +1207 17 +1206 17 +1205 17 ++1204 17 +1203 14 +1202 14 +1201 17 +1200 17 -1199 17 -1198 17 -1197 17 -1196 17 +1195 17 ++1194 17 -1193 17 -1192 17 -1191 17 -1190 17 -1189 14 -1188 14 -1187 17 -1186 17 +1185 17 ++1184 17 +1183 17 +1182 17 +1181 17 +1180 17 +1179 17 +1178 17 -1177 19 -1176 19 +1175 19 ++1174 19 +1173 23 +1172 23 +1171 17 +1170 17 -1169 17 -1168 17 -1167 17 -1166 17 +1165 17 ++1164 17 -1163 17 -1162 17 -1161 17 -1160 17 -1159 23 -1158 23 +1157 17 +1156 17 +1173 31 ++1172 31 +1155 17 +1154 17 -1153 17 -1152 17 -1151 17 -1150 17 +1149 17 +1148 17 -1147 17 +-1146 17 -1145 17 -1144 17 -1159 31 -1158 31 +1143 17 +1142 17 +1141 17 +1140 17 -1139 17 +-1138 17 -1137 17 -1136 17 +1135 27 +1134 27 +1133 17 +1132 17 -1131 27 -1130 27 +1129 27 ++1128 27 +1127 17 +1126 17 -1125 17 -1124 17 -1123 17 -1122 17 +1135 35 +1134 35 +1121 17 ++1120 17 -1131 35 -1130 35 +1129 35 +1128 35 +1119 44 +1118 44 +1117 44 +1116 44 +1115 17 ++1114 17 -1113 44 -1112 44 +1111 17 +1110 17 +1109 44 +1108 44 +1107 17 +1106 17 +1105 17 ++1104 44 +1103 44 -1102 44 -1101 44 +1100 44 +1099 44 -1098 44 -1097 44 -1096 44 -1095 44 +-1094 44 -1093 44 +1092 44 +1091 44 +1090 44 +1089 44 -1088 44 -1087 44 -1086 44 -1085 44 ++1084 44 -1083 44 -1082 44 +1081 44 +1080 44 +1079 44 +1078 44 +1077 44 +1076 44 +1075 44 +-1074 44 -1073 44 +1072 44 +1071 44 -1070 44 +1069 44 -1068 44 +1067 44 -1066 44 -1065 44 +-1064 44 -1063 44 -1062 44 -1061 44 -1060 44 -1059 44 -1058 44 -1057 44 -1056 44 +1055 44 ++1054 44 -1053 44 +1052 44 +1051 44 +1050 44 -1049 44 +1048 44 -1047 44 +1046 44 -1045 44 ++1044 44 +1043 44 -1042 44 +1041 44 -1040 44 -1039 44 +1038 44 +1037 44 -1036 44 +1035 44 ++1034 44 +1033 44 +1032 44 +1031 44 +1030 44 -1029 44 +1028 44 +1027 44 -1026 44 -1025 44 +-1024 44 +1023 44 +1022 44 -1021 44 +1020 44 +1019 44 -1018 44 -1017 44 +1016 17 +1015 17 ++1014 44 +1013 44 -1012 17 +1011 17 +1010 44 +1009 17 -1008 17 +1007 44 +1006 17 +1005 17 ++1004 17 +1003 17 +1002 44 +1001 17 +1000 17 +999 17 -998 17 -997 17 -996 17 -995 17 ++994 44 +993 17 +992 17 +991 44 +990 17 +989 44 +988 17 +987 44 +986 17 +985 44 ++984 17 +983 44 +982 17 +981 17 -980 17 -979 17 -978 17 -977 17 -976 17 -975 17 +-974 44 +973 44 +972 44 -971 44 +970 44 -969 44 +968 44 +967 44 -966 44 +965 44 +-964 44 +963 44 +962 44 +961 44 -960 44 -959 44 +958 44 +957 44 +956 44 -955 44 ++954 44 -953 44 -952 44 -951 44 +950 44 -949 44 +948 17 +947 17 +946 17 +945 17 ++944 17 +943 17 +942 17 -941 44 +940 44 -939 44 +938 44 +937 44 +936 44 +935 44 ++934 44 +933 44 +932 44 +931 44 +930 44 +929 44 +928 44 -927 44 -926 44 +925 44 +-924 44 +923 44 -922 44 -921 44 +920 44 +919 44 +918 44 +917 44 +916 44 +915 44 ++914 44 -913 44 -912 44 -911 44 -910 44 -909 44 -908 44 +907 44 -906 44 -905 44 +-904 44 -903 44 -902 44 -901 44 -900 44 -899 44 +898 44 +897 44 +896 44 +895 44 ++894 44 +893 44 +892 44 -891 44 -890 44 +889 44 +888 44 -887 44 -886 44 -885 44 +-884 44 +883 44 +882 44 +881 44 +880 44 +879 44 -878 44 -877 44 -876 44 -875 44 ++874 44 +873 44 -872 44 -871 44 -870 44 -869 44 +868 44 +867 44 -866 44 +865 44 ++864 44 -863 44 +862 44 -861 44 +860 44 +859 44 +858 44 +857 44 +856 44 +855 44 ++854 44 +853 44 +852 44 +851 44 +850 44 +849 44 +848 44 +847 44 +846 44 -845 44 +-844 48 -843 48 +842 17 +841 17 +840 17 +839 17 +838 17 +837 17 +836 17 +835 17 ++834 17 +833 17 +832 17 +831 17 -830 48 -829 48 -828 48 -827 48 -826 48 -825 48 +-824 48 -823 48 +822 48 +821 48 +820 48 +819 48 -818 48 -817 48 -816 17 -815 17 +-814 17 -813 17 -812 17 -811 17 -810 17 -809 17 -808 17 -807 17 -806 17 +805 17 ++804 17 +803 17 +802 17 -801 17 +800 17 +799 17 +798 17 +797 17 -796 17 -795 17 +-794 17 -793 17 -792 17 -791 17 -790 17 -789 17 -788 37 -787 37 -786 17 -785 17 +-784 41 -783 41 -782 17 -781 17 -784 39 -783 39 -780 17 -779 17 +778 37 +777 37 ++776 37 +775 37 -774 37 -773 37 -772 37 -771 37 +770 37 +769 37 +768 37 +767 37 +-766 37 -765 37 -764 37 -763 37 +762 37 +761 37 +760 37 +759 37 -758 37 -757 37 +-756 37 -755 37 +754 37 +753 37 -752 37 -751 37 +750 37 +749 37 +748 37 +747 37 ++746 37 +745 37 +744 41 +743 41 +742 41 +741 41 -740 41 -739 41 -738 41 -737 41 ++736 41 +735 41 +734 41 +733 41 -732 41 -731 41 -730 41 -729 41 +728 41 +727 41 ++726 41 +725 41 -724 41 -723 41 -722 41 -721 41 +720 41 +719 41 -718 41 -717 41 ++716 41 +715 41 +714 41 +713 41 +712 41 +711 41 +744 39 +743 39 +742 39 +741 39 +-740 39 -739 39 -738 39 -737 39 +736 39 +735 39 +734 39 +733 39 -732 39 -731 39 +-730 39 -729 39 +728 39 +727 39 +726 39 +725 39 -724 39 -723 39 -722 39 -721 39 ++720 39 +719 39 -718 39 -717 39 +716 39 +715 39 +714 39 +713 39 +712 39 +711 39 +-710 8 +709 17 -708 8 -707 8 -706 17 +705 50 -704 8 -703 8 +702 8 -701 8 +-700 8 -699 8 -698 8 -697 8 -696 8 -695 17 -694 17 -693 17 -692 17 -691 17 +-690 17 -689 17 -688 17 -687 17 -686 17 -685 17 -684 17 -683 17 -682 17 -681 17 +-680 17 -679 17 -678 17 -677 17 -676 17 -675 17 -674 17 -673 17 -672 17 +671 8 ++670 8 -669 17 -668 17 -667 23 -666 17 +665 8 +664 8 +663 8 +662 8 -661 17 +-660 17 -667 31 -659 17 +658 8 +657 8 +656 8 +655 8 -654 17 -653 17 -652 14 +-651 17 +650 8 +649 8 -648 8 -647 8 -646 8 -645 8 +644 8 -643 8 +642 8 +-641 8 -640 8 -639 8 -638 8 -637 8 +636 8 +635 8 -634 8 +633 8 -632 8 ++631 8 +630 17 +629 17 +628 17 +627 17 +626 17 +625 17 +624 17 +623 17 +622 17 ++621 17 -620 8 +619 8 +618 8 +617 8 +616 8 +615 8 +614 8 +613 8 +612 8 ++611 8 +610 8 +609 17 +608 17 +607 17 +606 17 +605 17 +604 17 +603 17 +602 17 ++601 17 +600 17 +599 10 +598 12 +597 12 +596 12 +595 12 +594 12 +593 12 +592 17 ++591 17 +590 17 -589 17 -588 17 -587 17 -586 17 -585 17 -584 17 -583 17 -582 17 +-581 17 -580 17 -579 12 -578 12 +577 21 +576 21 +575 21 +574 21 +573 21 +572 21 ++571 17 +570 17 +569 17 -568 17 -567 17 -566 17 -565 17 -564 17 -563 17 -562 17 +-561 17 -560 17 -559 17 -558 21 -557 21 +577 29 +576 29 +575 29 +574 29 +573 29 ++572 29 +556 17 +555 17 +554 17 -553 17 -552 17 -551 17 -550 17 -549 17 -548 17 +-547 17 -546 17 -545 17 -544 17 -558 29 -557 29 +543 17 +542 17 -541 16 +540 17 ++539 17 +538 16 +537 16 +536 16 +535 17 +534 17 +533 17 -532 17 +531 17 +530 17 ++529 17 +528 17 +527 17 +526 17 +525 16 +524 16 +523 17 +522 37 +521 17 +520 17 ++519 37 +518 17 -517 16 -516 16 +515 16 +514 16 +513 17 +512 17 -511 16 -510 16 ++509 17 +508 17 +507 25 +506 25 +505 17 +504 17 -503 25 -502 25 +501 17 +500 17 +-499 25 -498 25 +497 25 +496 25 +495 17 +494 17 -493 25 +492 17 +491 17 +490 25 ++489 17 +488 39 +487 17 +486 17 +485 39 +484 17 +483 25 +482 25 +481 17 +480 17 ++479 17 -478 17 +477 17 +476 17 +475 17 +474 17 +473 17 +472 17 +507 33 +506 33 ++471 17 +470 17 -503 33 -502 33 +469 17 +468 17 -499 33 -498 33 +497 33 +496 33 ++467 17 +466 17 -493 33 +465 17 +464 17 +490 33 +463 17 +485 41 +462 17 +461 17 ++488 41 +460 17 +483 33 +482 33 +459 17 +458 17 +457 17 -456 17 +455 17 +454 17 ++453 17 +452 17 +451 17 +450 17 +449 14 +448 14 -447 17 -446 17 -445 17 -444 17 +-443 17 -442 17 -441 17 -440 17 -439 17 -438 17 -437 14 -436 14 -435 17 +434 17 ++433 17 -432 17 +431 17 +430 17 +429 17 -428 19 -427 19 +426 19 +425 19 +424 23 ++423 23 -422 17 -421 17 -420 17 -419 17 -418 17 -417 17 -416 17 -415 17 -414 17 +-413 17 -412 23 -411 23 +410 17 +424 31 +423 31 -409 17 -408 17 -407 17 -406 17 +-405 17 -404 17 -403 17 -402 17 -401 17 -400 17 -412 31 -411 31 +399 17 +398 17 ++397 17 -396 17 -395 17 +394 27 +393 27 +392 17 -391 27 -390 27 +389 27 +388 27 ++387 17 +386 17 -385 17 -384 17 +394 35 +393 35 +383 17 -391 35 -390 35 +389 35 ++388 35 -382 44 +381 44 +380 17 -379 44 -378 44 +377 17 +376 17 +375 44 +374 44 ++373 17 +372 44 +371 44 -370 44 -369 44 +368 44 +367 44 -366 44 -365 44 -364 44 +-363 44 -362 44 -361 44 +360 44 -359 44 +358 44 -357 44 -356 44 -355 44 -354 44 +-353 44 +352 44 -351 44 -350 44 +349 44 +348 44 +347 44 +346 44 +345 44 -344 44 +-343 44 +342 44 -341 44 -340 44 -339 44 -338 44 -337 44 -336 44 -335 44 -334 44 +-333 44 -332 44 -331 44 -330 44 -329 44 -328 44 -327 44 -326 44 +325 44 +324 44 +-323 44 +322 44 +321 44 +320 44 -319 44 +318 44 -317 44 +316 44 -315 44 +314 44 ++313 44 -312 44 +311 44 -310 44 -309 44 +308 44 -307 44 +306 44 +305 44 +304 44 ++303 44 +302 44 +301 44 -300 44 +299 44 +298 44 -297 44 -296 44 -295 44 +294 44 ++293 44 -292 44 +291 44 -290 44 -289 44 +288 17 +287 44 +286 44 -285 17 +284 17 ++283 44 +282 17 -281 17 +280 44 +279 17 +278 17 -277 17 +276 17 -275 44 -274 17 +-273 17 +272 17 -271 17 -270 17 -269 17 -268 17 +267 44 +266 17 +265 17 +264 44 ++263 17 +262 44 -261 17 -260 44 +259 17 +258 44 +257 17 +256 44 -255 17 +254 17 +-253 17 -252 17 -251 17 -250 17 -249 17 -248 17 -247 44 +246 44 +245 44 -244 44 +-243 44 -242 44 +241 44 +240 44 -239 44 -238 44 -237 44 +236 44 -235 44 +234 44 +-233 44 -232 44 +231 44 -230 44 +229 44 -228 44 +227 44 -226 44 -225 44 -224 44 ++223 44 -222 44 -221 17 -220 44 -219 44 -218 44 +217 44 -216 44 +215 44 +214 44 ++213 44 +212 44 +211 44 +210 44 -209 44 -208 44 +207 44 -206 44 +205 44 -204 44 +-203 44 -202 44 +201 44 +200 44 -199 44 -198 44 -197 44 -196 44 -195 44 -194 44 +-193 44 +192 44 -191 44 -190 44 -189 44 -188 44 -187 44 -186 44 -185 44 -184 44 ++183 44 +182 44 -181 44 -180 44 -179 44 +178 44 -177 44 -176 44 -175 44 -174 44 +-173 44 +172 44 -171 44 -170 44 -169 44 -168 44 -167 44 +166 44 -165 44 -164 44 +-163 44 -162 44 -161 44 +160 44 -159 44 -158 44 -157 44 -156 44 -155 44 +154 44 +-153 44 -152 44 +151 44 -150 44 -149 44 -148 44 -147 48 -146 48 +145 17 +144 17 ++143 17 +142 17 +141 17 +140 17 +139 17 +138 17 +137 17 +136 17 -135 48 -134 48 +-133 48 -132 48 -131 48 -130 48 -129 48 -128 48 -127 48 -126 48 -125 48 -124 48 +-123 17 -122 17 -121 17 -120 17 -119 17 -118 17 -117 17 -116 17 -115 17 -114 17 +-113 17 -112 17 -111 17 -110 17 -109 17 -108 17 +107 17 +106 17 -105 17 +104 17 +-103 17 +102 37 -101 17 +100 41 -99 17 +100 39 -98 17 +97 37 +96 37 -95 37 +-94 37 -93 37 -92 37 -91 37 +90 37 +89 37 -88 37 -87 37 -86 37 -85 37 +-84 37 +83 37 +82 37 +81 37 +80 37 -79 37 -78 37 -77 37 -76 37 -75 37 +-74 37 -73 37 +72 37 +71 37 +70 37 +69 37 +68 37 +67 41 +66 41 -65 41 +-64 41 -63 41 -62 41 -61 41 +60 41 +59 41 -58 41 -57 41 -56 41 -55 41 +-54 41 +53 41 +52 41 +51 41 +50 41 -49 41 -48 41 -47 41 -46 41 -45 41 +-44 41 -43 41 +42 41 +41 41 +40 41 +39 41 +38 41 +67 39 +66 39 -65 39 +-64 39 -63 39 -62 39 -61 39 +60 39 +59 39 -58 39 -57 39 -56 39 -55 39 +-54 39 +53 39 +52 39 +51 39 +50 39 -49 39 -48 39 -47 39 -46 39 -45 39 +-44 39 -43 39 +42 39 +41 39 +40 39 +39 39 +38 39 +37 17 +36 17 +35 17 ++34 17 +33 17 +32 17 +31 17 +30 17 +29 17 +28 17 +27 17 +26 17 +25 17 ++24 17 +23 17 +22 17 +21 37 +20 41 +20 39 +19 17 +18 17 +17 17 +16 17 ++15 17 +14 17 +13 17 +12 17 +11 17 +10 17 +9 17 +8 17 +7 17 +6 17 ++5 17 +4 17 +3 37 +2 41 +2 39 * + ++1 0 \ No newline at end of file diff --git a/katoptron/Juelich/mesh/fused_mirror_assembly_mm.geo b/katoptron/Juelich/mesh/fused_mirror_assembly_mm.geo new file mode 100644 index 0000000000000000000000000000000000000000..e042e679b3e81be965c36f291289709cd15fce70 --- /dev/null +++ b/katoptron/Juelich/mesh/fused_mirror_assembly_mm.geo @@ -0,0 +1,324 @@ +// This .geo has been tested with gmsh 3.0.6 and 4.4.1 binaries for Mac and Linux + +Macro Clear_all + allVolumes[] = Volume "*"; + Recursive Delete { Volume{allVolumes[] } ; } + allSurfaces[] = Surface "*"; + Recursive Delete { Surface{allSurfaces[] } ; } + allPoints[] = Point "*"; + Recursive Delete { Point{allPoints[] } ; } +Return + +Macro Compute_next_avaible_point_id + allPoints[] = Point "*" ; + NallPoints = #allPoints[] ; + Printf("NallPoints %f",NallPoints); + next_avaible_point_id = 0; + compute_next_avaible_point_id_verbose = 0; + For i In {0:NallPoints-1} + If(compute_next_avaible_point_id_verbose) + Printf("Compute_next_avaible_point_id %g, %g",i,allPoints[i]); + EndIf + If(allPoints[i]>= next_avaible_point_id) + next_avaible_point_id = allPoints[i] + 1; + EndIf + EndFor + Printf("Compute_next_avaible_point_id newp %g",newp); + Printf("Compute_next_avaible_point_id next_avaible_point_id %g",next_avaible_point_id); +Return + +Macro Scale_axis_mm_to_m + allPoints[] = Point "*" ; + allLines[] = Line "*" ; + allSurfaces[] = Surface "*"; + allVolumes[] = Volume "*"; + If(usePointID) + c1[] = Point{point_OO}; + EndIf + Dilate {{-c1[0],-c1[1],-c1[2]},0.001} { Volume{allVolumes[] } ; } + + allPoints[] = Point "*" ; + allLines[] = Line "*" ; + allSurfaces[] = Surface "*"; + allVolumes[] = Volume "*"; +Return + +Macro Weld_bolt + new_weld_line_loop = newreg; + Curve Loop(new_weld_line_loop) = curves_id_1[]; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + num[] = Extrude {0, 0, 0.026} { + Surface{new_weld_line_loop}; + }; + new_volume_1 = num[1]; + num[] = Extrude {0, 0, -0.012} { + Surface{new_weld_line_loop}; + }; + new_volume_2 = num[1]; + new_weld_line_loop = newreg; + Curve Loop(new_weld_line_loop) = curves_id_2[]; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + num[] = Extrude {0, 0, 0.002} { + Surface{new_weld_line_loop}; + }; + new_volume_3 = num[1]; + new_weld_line_loop = newreg; + Curve Loop(new_weld_line_loop) = curves_id_3[]; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + num[] = Extrude {0, 0, -0.006} { + Surface{new_weld_line_loop}; + }; + new_volume_4 = num[1]; + num[] = BooleanUnion{ Volume{volume_id_1}; Delete; }{ Volume{volume_id_2}; Volume{volume_id_3}; Volume{volume_id_4}; Volume{volume_id_5}; Volume{volume_id_6}; Volume{volume_id_7}; Volume{volume_id_8}; Volume{volume_id_9}; Volume{new_volume_1}; Volume{new_volume_2}; Volume{new_volume_3}; Volume{new_volume_4}; Delete; }; + new_volume_1 = num[0]; +Return + +Macro Weld_tube + c1[] = Point{pipe_p1}; + c2[] = Point{pipe_p2}; + center1[] = {(c1[0]+c2[0])/2, (c1[1]+c2[1])/2, (c1[2]+c2[2])/2}; + pipe_radius = Sqrt((c1[0]-center1[0])^2+(c1[1]-center1[1])^2+(c1[2]-center1[2])^2); + + c1[] = Point{weld_p1}; + c2[] = Point{weld_p5}; + center1[] = {(c1[0]+c2[0])/2, (c1[1]+c2[1])/2, (c1[2]+c2[2])/2}; + weld_radius = Sqrt((c1[0]-center1[0])^2+(c1[1]-center1[1])^2+(c1[2]-center1[2])^2); + + new_weld_p1 = newp; + Point(new_weld_p1) = {(pipe_radius/weld_radius)*(c1[0]-center1[0])+center1[0],(pipe_radius/weld_radius)*(c1[1]-center1[1])+center1[1],(pipe_radius/weld_radius)*(c1[2]-center1[2])+center1[2]}; + new_weld_line1 = newreg; Line(new_weld_line1) = {new_weld_p1, weld_p2}; + new_weld_line2 = newreg; Line(new_weld_line2) = {weld_p2, weld_p3}; + new_weld_line3 = newreg; Line(new_weld_line3) = {weld_p3, weld_p4}; + new_weld_line4 = newreg; Line(new_weld_line4) = {weld_p4, new_weld_p1}; + + new_weld_line_loop = newreg; Line Loop(new_weld_line_loop) = {new_weld_line1,new_weld_line2,new_weld_line3,new_weld_line4}; + Plane Surface(new_weld_line_loop) = {new_weld_line_loop}; + + c1[]=Point{weld_p3}; + c2[]=Point{weld_p4}; + + Extrude {{c2[0]-c1[0],c2[1]-c1[1],c2[2]-c1[2]}, {center1[0], center1[1], center1[2]}, Pi} { + Surface{new_weld_line_loop}; + } + Extrude {{c2[0]-c1[0],c2[1]-c1[1],c2[2]-c1[2]}, {center1[0], center1[1], center1[2]}, -Pi} { + Surface{new_weld_line_loop}; + } +Return + +Macro Compute_cross_and_theta + norm_1 = Sqrt(vec_1[0]^2+vec_1[1]^2+vec_1[2]^2); + norm_2 = Sqrt(vec_2[0]^2+vec_2[1]^2+vec_2[2]^2); + + cross[] = {vec_1[1]*vec_2[2]-vec_1[2]*vec_2[1],vec_1[2]*vec_2[0]-vec_1[0]*vec_2[2],vec_1[0]*vec_2[1]-vec_1[1]*vec_2[0]}; + norm_cross = Sqrt(cross[0]^2+cross[1]^2+cross[2]^2); + + dot = vec_1[0]*vec_2[0] + vec_1[1]*vec_2[1] + vec_1[2]*vec_2[2]; + + theta = Acos(dot/(norm_1*norm_2)); +Return + +Macro Rotate_Axis + allVolumes[] = Volume "*"; + If(usePointID) + c1[] = Point{point_OX_1}; + c2[] = Point{point_OX_2}; + Printf("Rotate_Axis point_OX_1 c1 (%g,%g,%g)",c1[0],c1[1],c1[2]); + Printf("Rotate_Axis point_OX_2 c2 (%g,%g,%g)",c2[0],c2[1],c2[2]); + EndIf + + OX[] = {c2[0]-c1[0],c2[1]-c1[1],c2[2]-c1[2]}; + vec_1[] = OX[]; + vec_2[] = {1,0,0}; + + Call Compute_cross_and_theta; + + Rotate {{cross[0],cross[1],cross[2]}, {0, 0, 0}, theta} { Volume{allVolumes[] } ; } + + allVolumes[] = Volume "*"; + If(usePointID) + c3[] = Point{point_OY_1}; + c4[] = Point{point_OY_2}; + Printf("Rotate_Axis point_OY_1 c3 (%g,%g,%g)",c3[0],c3[1],c3[2]); + Printf("Rotate_Axis point_OY_2 c4 (%g,%g,%g)",c4[0],c4[1],c4[2]); + EndIf + + OY[] = {c4[0]-c3[0],c4[1]-c3[1],c4[2]-c3[2]}; + vec_1[] = OY[]; + vec_2[] = {0,1,0}; + + Call Compute_cross_and_theta; + Rotate {{cross[0],cross[1],cross[2]}, {0, 0, 0}, theta} { Volume{allVolumes[] } ; } + +Return + +Macro Translate_Axis + allVolumes[] = Volume "*"; + If(usePointID) + c1[] = Point{point_OO}; + Printf("Translate_Axis point_OO c1 (%g,%g,%g)",c1[0],c1[1],c1[2]); + EndIf + Translate {-c1[0],-c1[1],-c1[2]} { Volume{allVolumes[] } ; } + allVolumes[] = Volume "*"; +Return + +Macro Contact_disk + c1[] = Point{point_disk_R_1}; + c2[] = Point{point_disk_R_2}; + + center[] = {(c1[0]+c2[0])/2, (c1[1]+c2[1])/2, (c1[2]+c2[2])/2}; + + R = Sqrt((c1[0]-center[0])^2+(c1[1]-center[1])^2+(c1[2]-center[2])^2); + + c1[] = Point{point_surface_disk_1}; + c2[] = Point{point_surface_disk_2}; + + new_disk = newreg; + Disk(new_disk) = {(c1[0]+c2[0])/2, (c1[1]+c2[1])/2, (c1[2]+c2[2])/2, R, R}; + + Printf("c1 (%g,%g,%g)",c1[0],c1[1],c1[2]); + Printf("c2 (%g,%g,%g)",c2[0],c2[1],c2[2]); + Printf("Center (%g,%g,%g) radius %g",(c1[0]+c2[0])/2, (c1[1]+c2[1])/2, (c1[2]+c2[2])/2, R) ; + + BooleanFragments{ Surface{new_disk}; Delete; }{ Volume{volume_id}; Delete; } +Return + +Macro Add_Optical_Axis + If(usePointID) + p1[] = Point{point_mirror_x}; + p2[] = Point{point_mirror_y}; + Printf("Add_Optical_Axis p1 (%g,%g,%g)",p1[0],p1[1],p1[2]); + Printf("Add_Optical_Axis p2 (%g,%g,%g)",p2[0],p2[1],p2[2]); + EndIf + + Printf("Add_Optical_Axis OA (%g,%g,%g)",p1[0]+Delta_x,p2[1]+Delta_y,p1[2]); + + Call Compute_next_avaible_point_id; + OA = next_avaible_point_id; + Point(OA) = {p1[0]+Delta_x, p2[1]+Delta_y, p1[2], 1}; + new_disk = newreg; + Disk(new_disk) = {p1[0]+Delta_x, p2[1]+Delta_y, p1[2], R, R}; + + BooleanFragments{ Point{OA}; Surface{new_disk}; Delete; }{ Volume{Mirror_id}; Delete; } + //BooleanFragments{ Point{OA}; Delete; }{ Volume{Mirror_id}; Delete; } +Return + +SetFactory("OpenCASCADE"); + +rerun = 0; + +If(!FileExists("fused_mirror_assembly_mm.brep") || rerun) + v() = ShapeFromFile("mirror_assembly.stp"); + + For k In {20:23:1} + Recursive Delete { Volume{k}; } + EndFor + + For k In {27:62:1} + Recursive Delete { Volume{k}; } + EndFor + + allVolumes[] = Volume "*"; + BooleanFragments{ Volume{allVolumes[] }; Delete; }{} + + usePointID = 0; + + // Realign the axis + + If(usePointID) + point_OX_1 = 835; + point_OX_2 = 834; + + point_OY_1 = 938; + point_OY_2 = 940; + Else + c1[] = {6450.86,-90.1101,4467.16}; + c2[] = {6425.67,-76.908,4448.46}; + + c3[] = {-7294.05,1085.32,2738.15}; + c4[] = {-7294.05,1121.25,2759.9}; + EndIf + + Call Rotate_Axis; + + If(usePointID) + point_OO = 938; + Else + c1[] = {-7294.05,2346.64,1780.06}; + EndIf + + Call Translate_Axis; + + usePointID = 1; + + If(usePointID) + point_mirror_x = 4046; + point_mirror_y = 4045; + Else + p1[] = {129.5,10,5.1462499}; + p2[] = {99.5,-20,5.1462499}; + EndIf + + Delta_x = -70; + Delta_y = 37; + + Mirror_id = 2; + R = 1.; + + //Call Add_Optical_Axis; + + Recursive Delete { Volume{3,17,18}; } + + Save "fused_mirror_assembly_mm.brep"; + Call Clear_all; +EndIf + +Merge "fused_mirror_assembly_mm.brep"; + +Physical Volume("Mirror") = {2}; +Physical Volume("Substrate") = {1}; +Physical Volume("Washer 1") = {5}; +Physical Volume("Washer 2") = {4}; +Physical Volume("Washer 3") = {3}; + +Physical Volume("Shaft 1") = {8}; +Physical Volume("Shaft 2") = {7}; +Physical Volume("Shaft 3") = {6}; + +Physical Volume("Spacer 1 part 1") = {12}; +Physical Volume("Spacer 2 part 1") = {11}; +Physical Volume("Spacer 3 part 1") = {9}; + +Physical Volume("Spacer 1 part 2") = {14}; +Physical Volume("Spacer 2 part 2") = {13}; +Physical Volume("Spacer 3 part 2") = {10}; + +Physical Volume("Holder") = {15,16}; + +Physical Volume("Nut 1") = {18}; +Physical Volume("Nut 2") = {19}; +Physical Volume("Nut 3") = {17}; + +Physical Surface("Mirror surface") = {113}; +//Physical Surface("Disk around optical axis") = {738}; + +Physical Surface("Cooling channels") = {524, 525, 526, 597, 598, 599, 619, 620}; + +For k In {497:522} + Physical Surface("Cooling channels") += {k}; +EndFor + +Physical Surface("Holder z clamping") = {544, 545, 562, 563, 572, 573}; +Physical Surface("Holder x-y clamping") = {553, 554, 546, 547, 568, 569}; + +Physical Point("Holder x-y-z clamping point") = {762}; +Physical Point("Holder z clamping point") = {740}; +Physical Point("Holder z-y clamping point") = {733}; + +Physical Point("Optical Axis") = {958}; + + +Mesh.Algorithm = 6; +//Mesh.Algorithm3D = 4; +Mesh.CharacteristicLengthMin = 1.5; +Mesh.CharacteristicLengthMax = 1.5; +Mesh.MshFileVersion = 2.2; diff --git a/katoptron/Juelich/post_process/AB.py b/katoptron/Juelich/post_process/AB.py new file mode 100644 index 0000000000000000000000000000000000000000..f988bc6466b6e8816bf9dd66759da800303fad2f --- /dev/null +++ b/katoptron/Juelich/post_process/AB.py @@ -0,0 +1,111 @@ + + +import numpy as np +import os +from katoptron.Juelich.post_process.vtk_post_process_2 import post_process +from katoptron.Juelich.post_process.vtk_post_process_2 import post_process_mirror + + +def cuts(filename, filename_ref, dz1, T1, dz2, T2, remove_ref=False): + p_cut = np.array([5.971051450397588, 20.29345703125, -26.85714554786682]) + n_cut = np.array([1., 0., 0.]) + + directory = 'cut_1' + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + post_process(filename=filename, + filename_ref=filename_ref, + remove_ref=remove_ref, + p_cut=p_cut, + scale_u=1. / 1000., + scale_T=1., + n_cut=n_cut, + T_range=T1, + dz_range=dz1) + + os.chdir('..') + + directory = 'cut_2' + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + p_cut = np.array( + [24.91341173426381, 4.525806024554082, -26.975820456076352]) + n_cut = np.array([0.20170202470821563, -0.9790050766051117, 0.]) + + post_process(filename=filename, + filename_ref=filename_ref, + remove_ref=remove_ref, + p_cut=p_cut, + scale_u=1. / 1000., + scale_T=1., + n_cut=n_cut, + T_range=T2, + dz_range=dz2) + + os.chdir('..') + + +def cuts_all_N(N, case_id, ref_case_id, case_name, remove_ref, T1, Z1, T2, Z2): + file_dir = os.path.dirname(__file__) + for i in range(0, N): + directory = 'point_' + str(i) + '_' + case_name + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + base_dir = file_dir + '/../../../workspace/katoptron_Juelich_tests_M1_assembly_fused/MPI_2/' + case_id + '/1/' + str( + i) + base_dir_ref = file_dir + '/../../../workspace/katoptron_Juelich_tests_M1_assembly_fused/MPI_2/' + ref_case_id + '/1/' + str( + i) + cuts(base_dir + '/fused_mirror_assembly_mm_part_2_ast1_s0.pvtu', + base_dir_ref + '/fused_mirror_assembly_mm_part_2_ast1_s0.pvtu', + dz1[i, :], T1[i, :], dz2[i, :], T2[i, :], remove_ref=remove_ref) + post_process_mirror(filename=base_dir + '/mirror_data_all.npz', + filename_ref=base_dir_ref + '/mirror_data_all.npz', + remove_ref=remove_ref) + os.chdir('..') + + +if __name__ == "__main__": + + N = 2 + + T1 = np.zeros((N, 2)) + dz1 = np.zeros((N, 2)) + + T2 = np.zeros((N, 2)) + dz2 = np.zeros((N, 2)) + + T1[0, :] = [70, 120.00236433] + T1[1, :] = [70, 160.19321603] + + T2[0, :] = [70, 120.00236433] + T2[1, :] = [70, 160.19321603] + + #cuts_all_N(N, 'A2', 'A2_baking', 'A', False, T, Z) + #cuts_all_N(N, 'B2', 'B2_baking', 'B', False, T, Z) + + dz1[0, :] = [5e-07, 2e-05] + dz1[1, :] = [-1.5e-06, 4e-05] + + dz2[0, :] = [-2.5e-05, 2.1e-05] + dz2[1, :] = [-5e-05, 5e-05] + ''' + dz1[0, :] = [5e-07, 1.5e-05] + dz1[1, :] = [-1.5e-06, 4e-05] + + dz2[0, :] = [-2.5e-05, 1.6e-05] + dz2[1, :] = [-5e-05, 5e-05] + ''' + cuts_all_N(N, 'A2', 'A2_baking', 'A_diff', True, T1, dz1, T2, dz2) + ''' + dz1[0, :] = [1.9e-06, 2e-05] + dz1[1, :] = [1e-06, 4e-05] + + dz2[0, :] = [-2.1e-05, 2.1e-05] + dz2[1, :] = [-5e-05, 5e-05] + ''' + cuts_all_N(N, 'B2', 'B2_baking', 'B_diff', True, T1, dz1, T2, dz2) diff --git a/katoptron/Juelich/post_process/__init__.py b/katoptron/Juelich/post_process/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e8aed8a0e2f77220f1adb944a0e00d317b1934bc --- /dev/null +++ b/katoptron/Juelich/post_process/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +# katoptron.Juelich.post_process MODULE initialization file diff --git a/katoptron/Juelich/post_process/vtk_post_process.py b/katoptron/Juelich/post_process/vtk_post_process.py new file mode 100644 index 0000000000000000000000000000000000000000..33b7bb9211266f5f3cbda182f07bad407f1f8213 --- /dev/null +++ b/katoptron/Juelich/post_process/vtk_post_process.py @@ -0,0 +1,328 @@ +import vtk +import numpy as np +from numpy import zeros +import matplotlib.pyplot as plt +#from mpl_toolkits.mplot3d import Axes3D +#import matplotlib2tikz +from numpy import linalg as LA + + +def SaveFigureAsImage(fileName, fig=None, **kwargs): + ''' Save a Matplotlib figure as an image without borders or frames. + Args: + fileName (str): String that ends in .png etc. + + fig (Matplotlib figure instance): figure you want to save as the image + Keyword Args: + orig_size (tuple): width, height of the original image used to maintain + aspect ratio. + ''' + fig_size = fig.get_size_inches() + w, h = fig_size[0], fig_size[1] + fig.patch.set_alpha(0) + if 'orig_size' in kwargs: # Aspect ratio scaling if required + w, h = kwargs['orig_size'] + w2, h2 = fig_size[0], fig_size[1] + fig.set_size_inches([((w2 / w)) * w, ((w2 / w)) * h]) + fig.set_dpi(((w2 / w)) * fig.get_dpi()) + a = fig.gca() + a.set_frame_on(False) + a.set_xticks([]) + a.set_yticks([]) + plt.axis('off') + plt.xlim(0, h) + plt.ylim(w, 0) + fig.savefig(fileName, transparent=True, bbox_inches='tight', + pad_inches=0) + + +def compute_integrated_F(volume_id, + component_id, + cut_origin_x, + cut_origin_y, + cut_origin_z, + cut_normal_x, + cut_normal_y, + cut_normal_z, + reader, + plot_results=False): + + thresh = vtk.vtkThreshold() + thresh.ThresholdBetween(volume_id - 0.5, volume_id + 0.5) + thresh.SetInputConnection(reader.GetOutputPort()) + thresh.SetInputArrayToProcess(0, 0, 0, + vtk.vtkDataObject.FIELD_ASSOCIATION_CELLS, + "volume_id") + thresh.Update() + + plane = vtk.vtkPlane() + plane.SetOrigin(cut_origin_x, cut_origin_y, cut_origin_z) + plane.SetNormal(cut_normal_x, cut_normal_y, cut_normal_z) + + cutter = vtk.vtkCutter() + cutter.SetCutFunction(plane) + cutter.SetInputConnection(thresh.GetOutputPort()) + cutter.Update() + + data = cutter.GetOutput() + + triangles = data.GetPolys().GetData() + points = data.GetPoints() + + stress = data.GetCellData().GetArray('sigma') + + ntri = (triangles.GetNumberOfTuples() // 4) + npts = points.GetNumberOfPoints() + nstress = stress.GetNumberOfTuples() + + tri = zeros((ntri, 3), dtype=int) + x = zeros(npts) + y = zeros(npts) + z = zeros(npts) + + sigma_vector = zeros(nstress) + + sigma_vector_node = zeros(npts) + area_node = zeros(npts) + + for i in range(0, ntri): + tri[i, 0] = triangles.GetTuple(4 * i + 1)[0] + tri[i, 1] = triangles.GetTuple(4 * i + 2)[0] + tri[i, 2] = triangles.GetTuple(4 * i + 3)[0] + + for i in range(npts): + pt = points.GetPoint(i) + x[i] = pt[0] + y[i] = pt[1] + z[i] = pt[2] + + for i in range(0, nstress): + sigma = stress.GetTuple(i) + sigma_vector[i] = sigma[component_id] + + if plot_results: + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + #plt.triplot(x, y, tri) + axtri = plt.tripcolor(x, y, tri, sigma_vector) + #plt.scatter(x, y) + plt.gca().set_aspect('equal') + cb = fig.colorbar(axtri, orientation="horizontal") + + F = 0. + total_area = 0. + for i in range(0, ntri): + cross = np.cross( + np.array([ + x[tri[i, 1]] - x[tri[i, 0]], y[tri[i, 1]] - y[tri[i, 0]], + z[tri[i, 1]] - z[tri[i, 0]] + ]), + np.array([ + x[tri[i, 2]] - x[tri[i, 0]], y[tri[i, 2]] - y[tri[i, 0]], + z[tri[i, 2]] - z[tri[i, 0]] + ])) + area = (LA.norm(cross) / 2) + F = F + area * sigma_vector[i] + total_area = total_area + area + for j in range(0, 3): + sigma_vector_node[tri[i, j]] = sigma_vector_node[ + tri[i, j]] + area * sigma_vector[i] + area_node[tri[i, j]] = area_node[tri[i, j]] + area + + for i in range(npts): + sigma_vector_node[i] = (sigma_vector_node[i] / area_node[i]) + + if plot_results: + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + #plt.triplot(x, y, tri) + axtri = plt.tricontourf(x, y, tri, sigma_vector_node) + #plt.scatter(x, y) + plt.gca().set_aspect('equal') + cb = fig.colorbar(axtri, orientation="horizontal") + + return F + + +def post_process(): + filename = 'MIRROR_1_ASSEMBLY_fused_2_ast1_s0_0.vtu' + + reader = vtk.vtkXMLUnstructuredGridReader() + reader.SetFileName(filename) + reader.Update() + + #data1 = reader.GetOutput() + + thresh = vtk.vtkThreshold() + thresh.ThresholdBetween(8.5, 11.5) + thresh.SetInputConnection(reader.GetOutputPort()) + thresh.SetInputArrayToProcess(0, 0, 0, + vtk.vtkDataObject.FIELD_ASSOCIATION_CELLS, + "volume_id") + thresh.Update() + + plane = vtk.vtkPlane() + plane.SetOrigin(-0.0156128890812397, 0.020816631615161896, + -0.009049303388172896) + plane.SetNormal(0, 0, 1) + + cutter = vtk.vtkFiltersCorePython.vtkCutter() + cutter.SetCutFunction(plane) + cutter.SetInputConnection(thresh.GetOutputPort()) + cutter.Update() + + data = cutter.GetOutput() + + triangles = data.GetPolys().GetData() + points = data.GetPoints() + + mapper = vtk.vtkCellDataToPointData() + mapper.AddInputData(data) + mapper.Update() + + vels = mapper.GetOutput().GetPointData().GetArray('z') # .GetArray(1) + + stress = data.GetCellData().GetArray('sigma') + stress_VM = data.GetCellData().GetArray('von Mises') + + ntri = (triangles.GetNumberOfTuples() // 4) + npts = points.GetNumberOfPoints() + nvls = points.GetNumberOfPoints() # vels.GetNumberOfTuples() + + nstress = stress.GetNumberOfTuples() + + tri = zeros((ntri, 3), dtype=int) + x = zeros(npts) + y = zeros(npts) + z = zeros(npts) + ux = zeros(nvls) + + sigma_vector_node = zeros(npts) + area_node = zeros(npts) + + sigma_zz = zeros(nstress) + + for i in range(0, ntri): + tri[i, 0] = triangles.GetTuple(4 * i + 1)[0] + tri[i, 1] = triangles.GetTuple(4 * i + 2)[0] + tri[i, 2] = triangles.GetTuple(4 * i + 3)[0] + + for i in range(npts): + pt = points.GetPoint(i) + x[i] = pt[0] + y[i] = pt[1] + z[i] = pt[2] + + for i in range(0, nvls): + U = vels.GetTuple(i) + ux[i] = U[0] + + for i in range(0, nstress): + sigma = stress.GetTuple(i) + sigma_zz[i] = sigma[8] + + for i in range(0, ntri): + cross = np.cross( + np.array([ + x[tri[i, 1]] - x[tri[i, 0]], y[tri[i, 1]] - y[tri[i, 0]], + z[tri[i, 1]] - z[tri[i, 0]] + ]), + np.array([ + x[tri[i, 2]] - x[tri[i, 0]], y[tri[i, 2]] - y[tri[i, 0]], + z[tri[i, 2]] - z[tri[i, 0]] + ])) + area = (LA.norm(cross) / 2) + for j in range(0, 3): + sigma_vector_node[ + tri[i, j]] = sigma_vector_node[tri[i, j]] + area * sigma_zz[i] + area_node[tri[i, j]] = area_node[tri[i, j]] + area + + for i in range(npts): + sigma_vector_node[i] = (sigma_vector_node[i] / area_node[i]) + + #tmp = stress.GetTuple(0) + + levels = np.linspace(min(ux), max(ux), 16) + # Velocity x-component + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + plt.tricontour(x, + y, + tri, + ux, + levels, + linestyles='-', + colors='black', + linewidths=0.5) + axtri = plt.tricontourf(x, y, tri, ux, levels) + plt.gca().set_aspect('equal') + + # plt.minorticks_on() + # plt.gca().set_xticklabels([]) + # plt.gca().set_yticklabels([]) + # plt.gca().set_axis_off() + #plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0) + # plt.margins(0,0) + # plt.gca().xaxis.set_major_locator(plt.NullLocator()) + # plt.gca().yaxis.set_major_locator(plt.NullLocator()) + # plt.axis('off') + #plt.tricontour(x, y, tri, ux, 16) + # plt.show + #plt.savefig("Ux.pdf", transparent=True, bbox_inches='tight', pad_inches=-0.05) + + # matplotlib2tikz.save('test.tex') + + cb = fig.colorbar(axtri, orientation="horizontal") + + levels = np.linspace(min(sigma_zz), max(sigma_zz), 16) + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + axtri = plt.tripcolor(x, y, tri, sigma_zz, levels) + print("sigma_zz_unsmooth.pdf") + print(levels) + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + plt.savefig("sigma_zz_unsmooth.pdf", + transparent=True, + bbox_inches='tight', + pad_inches=-0.05) + + #cb = fig.colorbar(axtri, orientation="horizontal") + + levels = np.linspace(min(sigma_vector_node), max(sigma_vector_node), 16) + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + axtri = plt.tricontourf(x, y, tri, sigma_vector_node, levels) + print("sigma_zz_smooth.pdf") + print(levels) + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + plt.savefig("sigma_zz_smooth.pdf", + transparent=True, + bbox_inches='tight', + pad_inches=-0.05) + + #cb = fig.colorbar(axtri, orientation="horizontal") + + F_zz_1 = compute_integrated_F(9, 8, 0.0529999991413206, 0.0440000002272427, + -0.0413666241463175, 0, 0, 1, reader) + F_zz_2 = compute_integrated_F(10, 8, 0.0529999991413206, + 0.0440000002272427, -0.0413666241463175, 0, + 0, 1, reader) + F_zz_3 = compute_integrated_F(11, 8, 0.0529999991413206, + 0.0440000002272427, -0.0413666241463175, 0, + 0, 1, reader) + + print(F_zz_1) + print(F_zz_2) + print(F_zz_3) + + # plt.show() diff --git a/katoptron/Juelich/post_process/vtk_post_process_2.py b/katoptron/Juelich/post_process/vtk_post_process_2.py new file mode 100644 index 0000000000000000000000000000000000000000..0a77c7d364ff5cf19de097d32b977ffe231703bb --- /dev/null +++ b/katoptron/Juelich/post_process/vtk_post_process_2.py @@ -0,0 +1,961 @@ +import vtk +import numpy as np +from numpy import zeros +import matplotlib.pyplot as plt +#from mpl_toolkits.mplot3d import Axes3D +#import matplotlib2tikz +from numpy import linalg as LA +import matplotlib.tri as mtri +import katoptron.utilities as u + + +def SaveFigureAsImage(fileName, fig=None, **kwargs): + ''' Save a Matplotlib figure as an image without borders or frames. + Args: + fileName (str): String that ends in .png etc. + + fig (Matplotlib figure instance): figure you want to save as the image + Keyword Args: + orig_size (tuple): width, height of the original image used to maintain + aspect ratio. + ''' + fig_size = fig.get_size_inches() + w, h = fig_size[0], fig_size[1] + fig.patch.set_alpha(0) + if 'orig_size' in kwargs: # Aspect ratio scaling if required + w, h = kwargs['orig_size'] + w2, h2 = fig_size[0], fig_size[1] + fig.set_size_inches([((w2 / w)) * w, ((w2 / w)) * h]) + fig.set_dpi(((w2 / w)) * fig.get_dpi()) + a = fig.gca() + a.set_frame_on(False) + a.set_xticks([]) + a.set_yticks([]) + plt.axis('off') + plt.xlim(0, h) + plt.ylim(w, 0) + fig.savefig(fileName, transparent=True, bbox_inches='tight', + pad_inches=0) + + +def compute_integrated_F(volume_id, component_id, cut_origin_x, cut_origin_y, + cut_origin_z, cut_normal_x, cut_normal_y, + cut_normal_z, reader): + + thresh = vtk.vtkThreshold() + thresh.ThresholdBetween(volume_id - 0.5, volume_id + 0.5) + thresh.SetInputConnection(reader.GetOutputPort()) + thresh.SetInputArrayToProcess(0, 0, 0, + vtk.vtkDataObject.FIELD_ASSOCIATION_CELLS, + "volume_id") + thresh.Update() + + plane = vtk.vtkPlane() + plane.SetOrigin(cut_origin_x, cut_origin_y, cut_origin_z) + plane.SetNormal(cut_normal_x, cut_normal_y, cut_normal_z) + + cutter = vtk.vtkFiltersCorePython.vtkCutter() + cutter.SetCutFunction(plane) + cutter.SetInputConnection(thresh.GetOutputPort()) + cutter.Update() + + data = cutter.GetOutput() + + triangles = data.GetPolys().GetData() + points = data.GetPoints() + + stress = data.GetCellData().GetArray('sigma') + + ntri = (triangles.GetNumberOfTuples() // 4) + npts = points.GetNumberOfPoints() + nstress = stress.GetNumberOfTuples() + + tri = zeros((ntri, 3), dtype=int) + x = zeros(npts) + y = zeros(npts) + z = zeros(npts) + + sigma_vector = zeros(nstress) + + sigma_vector_node = zeros(npts) + area_node = zeros(npts) + + for i in range(0, ntri): + tri[i, 0] = triangles.GetTuple(4 * i + 1)[0] + tri[i, 1] = triangles.GetTuple(4 * i + 2)[0] + tri[i, 2] = triangles.GetTuple(4 * i + 3)[0] + + for i in range(npts): + pt = points.GetPoint(i) + x[i] = pt[0] + y[i] = pt[1] + z[i] = pt[2] + + for i in range(0, nstress): + sigma = stress.GetTuple(i) + sigma_vector[i] = sigma[component_id] + + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + #plt.triplot(x, y, tri) + axtri = plt.tripcolor(x, y, tri, sigma_vector) + #plt.scatter(x, y) + plt.gca().set_aspect('equal') + cb = fig.colorbar(axtri, orientation="horizontal") + + F = 0. + + for i in range(0, ntri): + cross = np.cross( + np.array([ + x[tri[i, 1]] - x[tri[i, 0]], y[tri[i, 1]] - y[tri[i, 0]], + z[tri[i, 1]] - z[tri[i, 0]] + ]), + np.array([ + x[tri[i, 2]] - x[tri[i, 0]], y[tri[i, 2]] - y[tri[i, 0]], + z[tri[i, 2]] - z[tri[i, 0]] + ])) + area = (LA.norm(cross) / 2) + F = F + area * sigma_vector[i] + for j in range(0, 3): + sigma_vector_node[tri[i, j]] = sigma_vector_node[ + tri[i, j]] + area * sigma_vector[i] + area_node[tri[i, j]] = area_node[tri[i, j]] + area + + for i in range(npts): + sigma_vector_node[i] = (sigma_vector_node[i] / area_node[i]) + + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + #plt.triplot(x, y, tri) + axtri = plt.tricontourf(x, y, tri, sigma_vector_node) + #plt.scatter(x, y) + plt.gca().set_aspect('equal') + cb = fig.colorbar(axtri, orientation="horizontal") + + return F + + +def post_process( + filename='MIRROR_1_ASSEMBLY_fused_2_ast1_s0_0.vtu', + filename_ref='MIRROR_1_ASSEMBLY_fused_2_ast1_s0_0.vtu', + remove_ref=False, + scale_u=1., + scale_T=1., + T_0=22., + p_cut=np.array( + [-0.0156128890812397, 0.020816631615161896, + 0.0006999988108873367]), + n_cut=np.array([1, 0, 0]), + T_range=np.array([0., 0.]), + dz_range=np.array([0., 0.]), +): + if remove_ref: + if filename_ref[-4:] == ".vtu": + reader = vtk.vtkXMLUnstructuredGridReader() + elif filename_ref[-5:] == ".pvtu": + reader = vtk.vtkXMLPUnstructuredGridReader() + + reader.SetFileName(filename_ref) + reader.Update() + + plane = vtk.vtkPlane() + plane.SetOrigin(p_cut[0], p_cut[1], p_cut[2]) + plane.SetNormal(n_cut[0], n_cut[1], n_cut[2]) + + theta = np.arctan(n_cut[1] * 1. / n_cut[0]) + + cutter = vtk.vtkFiltersCorePython.vtkCutter() + cutter.SetCutFunction(plane) + cutter.SetInputConnection(reader.GetOutputPort()) + cutter.Update() + + data = cutter.GetOutput() + + triangles = data.GetPolys().GetData() + points = data.GetPoints() + + mapper = vtk.vtkCellDataToPointData() + mapper.AddInputData(data) + mapper.Update() + + u = mapper.GetOutput().GetPointData().GetArray('displacement') + + ntri = (triangles.GetNumberOfTuples() // 4) + npts = points.GetNumberOfPoints() + + dx_ref = zeros(npts) + dy_ref = zeros(npts) + dz_ref = zeros(npts) + + for i in range(0, npts): + dx_ref[i] = scale_u * u.GetTuple(i)[0] + dy_ref[i] = scale_u * u.GetTuple(i)[1] + dz_ref[i] = scale_u * u.GetTuple(i)[2] + + if filename[-4:] == ".vtu": + reader = vtk.vtkXMLUnstructuredGridReader() + elif filename[-5:] == ".pvtu": + reader = vtk.vtkXMLPUnstructuredGridReader() + + reader.SetFileName(filename) + reader.Update() + + #data1 = reader.GetOutput() + ''' + thresh = vtk.vtkThreshold() + thresh.ThresholdBetween(8.5,11.5) + thresh.SetInputConnection(reader.GetOutputPort()) + thresh.SetInputArrayToProcess(0, 0, 0, vtk.vtkDataObject.FIELD_ASSOCIATION_CELLS, "volume_id") + thresh.Update() + ''' + plane = vtk.vtkPlane() + plane.SetOrigin(p_cut[0], p_cut[1], p_cut[2]) + plane.SetNormal(n_cut[0], n_cut[1], n_cut[2]) + + theta = np.arctan(n_cut[1] * 1. / n_cut[0]) + + cutter = vtk.vtkFiltersCorePython.vtkCutter() + cutter.SetCutFunction(plane) + cutter.SetInputConnection(reader.GetOutputPort()) + cutter.Update() + + data = cutter.GetOutput() + + triangles = data.GetPolys().GetData() + points = data.GetPoints() + + mapper = vtk.vtkCellDataToPointData() + mapper.AddInputData(data) + mapper.Update() + + T = mapper.GetOutput().GetPointData().GetArray('T') + u = mapper.GetOutput().GetPointData().GetArray('displacement') + stress_VM_pt = mapper.GetOutput().GetPointData().GetArray('von Mises') + + stress = data.GetCellData().GetArray('sigma') + stress_VM = data.GetCellData().GetArray('von Mises') + volume_id = data.GetCellData().GetArray('volume_id') + + ntri = (triangles.GetNumberOfTuples() // 4) + npts = points.GetNumberOfPoints() + nvls = points.GetNumberOfPoints() # T.GetNumberOfTuples() + + nstress = stress.GetNumberOfTuples() + + tri = zeros((ntri, 3), dtype=int) + x = zeros(npts) + y = zeros(npts) + z = zeros(npts) + dx = zeros(npts) + dy = zeros(npts) + dz = zeros(npts) + T_vec = zeros(nvls) + + sigma_vector_node = zeros(npts) + sigma_vector_node_filtered = zeros(npts) + area_node = zeros(npts) + + sigma_zz = zeros(nstress) + sigma_zz_filtered = zeros(nstress) + volume_id_vec = zeros(nstress) + volume_id_vec_2 = zeros(nstress) + + level_zz = np.linspace(-1e8, 1e8, 16) + + for i in range(0, ntri): + tri[i, 0] = triangles.GetTuple(4 * i + 1)[0] + tri[i, 1] = triangles.GetTuple(4 * i + 2)[0] + tri[i, 2] = triangles.GetTuple(4 * i + 3)[0] + + for i in range(npts): + pt = points.GetPoint(i) + x[i] = scale_u * pt[0] + y[i] = scale_u * pt[1] + z[i] = scale_u * pt[2] + + for i in range(0, nvls): + T_tmp = T.GetTuple(i) + T_vec[i] = scale_T * T_tmp[0] + T_0 + + dx[i] = scale_u * u.GetTuple(i)[0] + dy[i] = scale_u * u.GetTuple(i)[1] + dz[i] = scale_u * u.GetTuple(i)[2] + + sigma_vector_node_filtered[i] = scale_u**2 * stress_VM_pt.GetTuple( + i)[0] + + if remove_ref: + dx -= dx_ref + dy -= dy_ref + dz -= dz_ref + + print('T') + print(np.amin(T_vec)) + print(np.amax(T_vec)) + + print('u') + print(np.amin(dx)) + print(np.amax(dx)) + print(np.amin(dy)) + print(np.amax(dy)) + print(np.amin(dz)) + print(np.amax(dz)) + + for i in range(0, nstress): + sigma = stress.GetTuple(i) + sigma_zz[i] = scale_u**2 * sigma[8] + + volume_id_vec[i] = volume_id.GetTuple(i)[0] + + if sigma_zz[i] <= level_zz[0]: + sigma_zz_filtered[i] = level_zz[0] + elif sigma_zz[i] >= level_zz[15]: + sigma_zz_filtered[i] = level_zz[15] + else: + sigma_zz_filtered[i] = sigma_zz[i] + + volume_id_vec_tmp = volume_id_vec + + volume_id_vec_tmp[np.where(volume_id_vec == 4)] = 3 + volume_id_vec_tmp[np.where(volume_id_vec == 5)] = 3 + + volume_id_vec_tmp[np.where(volume_id_vec == 7)] = 6 + volume_id_vec_tmp[np.where(volume_id_vec == 8)] = 6 + + volume_id_vec_tmp[np.where(volume_id_vec == 10)] = 9 + volume_id_vec_tmp[np.where(volume_id_vec == 11)] = 9 + + volume_id_vec_tmp[np.where(volume_id_vec == 13)] = 12 + volume_id_vec_tmp[np.where(volume_id_vec == 14)] = 12 + + volume_id_vec_tmp[np.where(volume_id_vec == 16)] = 15 + volume_id_vec_tmp[np.where(volume_id_vec == 17)] = 15 + + volume_id_vec_tmp[np.where(volume_id_vec >= 19)] = 19 + #volume_id_vec_tmp[np.where( volume_id_vec ==17 )] = 15 + + indices_volume_id = np.argsort(volume_id_vec_tmp) + + current_i = 0 + volume_id_vec_2[indices_volume_id[0]] = current_i + for i in range(1, len(volume_id_vec)): + if volume_id_vec_tmp[indices_volume_id[i - 1]] != volume_id_vec_tmp[ + indices_volume_id[i]]: + current_i = current_i + 1 + volume_id_vec_2[indices_volume_id[i]] = current_i + + for i in range(0, ntri): + cross = np.cross( + np.array([ + x[tri[i, 1]] - x[tri[i, 0]], y[tri[i, 1]] - y[tri[i, 0]], + z[tri[i, 1]] - z[tri[i, 0]] + ]), + np.array([ + x[tri[i, 2]] - x[tri[i, 0]], y[tri[i, 2]] - y[tri[i, 0]], + z[tri[i, 2]] - z[tri[i, 0]] + ])) + area = (LA.norm(cross) / 2) + for j in range(0, 3): + sigma_vector_node[ + tri[i, j]] = sigma_vector_node[tri[i, j]] + area * sigma_zz[i] + area_node[tri[i, j]] = area_node[tri[i, j]] + area + + for i in range(npts): + sigma_vector_node[i] = (sigma_vector_node[i] / area_node[i]) + ''' + if sigma_vector_node[i] <= level_zz[0]: + sigma_vector_node_filtered[i] = level_zz[0] + elif sigma_vector_node[i] >= level_zz[15]: + sigma_vector_node_filtered[i] = level_zz[15] + else: + sigma_vector_node_filtered[i] = sigma_vector_node[i] + ''' + #tmp = stress.GetTuple(0) + + if T_range[0] == T_range[1]: + T_range[0] = min(T_vec) + T_range[1] = max(T_vec) + level = np.linspace(T_range[0], T_range[1], 16) + # Velocity x-component + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + plt.tricontour(np.cos(theta) * y - np.sin(theta) * x, + -z, + tri, + T_vec, + level, + linestyles='-', + colors='black', + linewidths=0.5) + axtri = plt.tricontourf( + np.cos(theta) * y - np.sin(theta) * x, -z, tri, T_vec, level) + f = open("T.txt", "w+") + print(str(level[0]) + ', ' + str(level[3]) + ', ' + str( + level[6]) + ', ' + str(level[9]) + ', ' + str(level[12]) + ', ' + str( + level[15]), file=f) + f.close() + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + plt.savefig("T.pdf", + transparent=True, + bbox_inches='tight', + pad_inches=-0.05) + + level = np.linspace(min(dx), max(dx), 16) + # Velocity x-component + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + plt.tricontour(np.cos(theta) * y - np.sin(theta) * x, + -z, + tri, + dx, + level, + linestyles='-', + colors='black', + linewidths=0.5) + axtri = plt.tricontourf( + np.cos(theta) * y - np.sin(theta) * x, -z, tri, dx, level) + f = open("dx.txt", "w+") + print(str(level[0]) + ', ' + str(level[3]) + ', ' + str( + level[6]) + ', ' + str(level[9]) + ', ' + str(level[12]) + ', ' + str( + level[15]), file=f) + f.close() + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + plt.savefig("dx.pdf", + transparent=True, + bbox_inches='tight', + pad_inches=-0.05) + + level = np.linspace(min(dy), max(dy), 16) + # Velocity x-component + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + plt.tricontour(np.cos(theta) * y - np.sin(theta) * x, + -z, + tri, + dy, + level, + linestyles='-', + colors='black', + linewidths=0.5) + axtri = plt.tricontourf( + np.cos(theta) * y - np.sin(theta) * x, -z, tri, dy, level) + f = open("dy.txt", "w+") + print(str(level[0]) + ', ' + str(level[3]) + ', ' + str( + level[6]) + ', ' + str(level[9]) + ', ' + str(level[12]) + ', ' + str( + level[15]), file=f) + f.close() + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + plt.savefig("dy.pdf", + transparent=True, + bbox_inches='tight', + pad_inches=-0.05) + + if dz_range[0] == dz_range[1]: + dz_range[0] = min(dz) + dz_range[1] = max(dz) + level = np.linspace(dz_range[0], dz_range[1], 16) + # Velocity x-component + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + plt.tricontour(np.cos(theta) * y - np.sin(theta) * x, + -z, + tri, + dz, + level, + linestyles='-', + colors='black', + linewidths=0.5) + axtri = plt.tricontourf( + np.cos(theta) * y - np.sin(theta) * x, -z, tri, dz, level) + f = open("dz.txt", "w+") + print(str(level[0]) + ', ' + str(level[3]) + ', ' + str( + level[6]) + ', ' + str(level[9]) + ', ' + str(level[12]) + ', ' + str( + level[15]), file=f) + f.close() + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + plt.savefig("dz.pdf", + transparent=True, + bbox_inches='tight', + pad_inches=-0.05) + plt.close() + ''' + #plt.minorticks_on() + #plt.gca().set_xticklabels([]) + #plt.gca().set_yticklabels([]) + #plt.gca().set_axis_off() + #plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, hspace = 0, wspace = 0) + #plt.margins(0,0) + #plt.gca().xaxis.set_major_locator(plt.NullLocator()) + #plt.gca().yaxis.set_major_locator(plt.NullLocator()) + #plt.axis('off') + #plt.tricontour(x, y, tri, T_vec, 16) + #plt.show + #plt.savefig("T_vec.pdf", transparent=True, bbox_inches='tight', pad_inches=-0.05) + + #matplotlib2tikz.save('test.tex') + + cb = fig.colorbar(axtri, orientation="horizontal") + + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + axtri = plt.tripcolor(np.cos(theta)*y-np.sin(theta)*x, -z, tri, volume_id_vec_2) + f = open("volume_id.txt", "w+") + print >> f, str(level[0]) + ', ' + str(level[3]) + ', ' + str(level[6]) + ', ' + str(level[9]) + ', ' + str(level[12]) + ', ' + str(level[15]) + f.close() + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + plt.savefig("volume_id.png", + transparent=True, + bbox_inches='tight', + pad_inches=0., + dpi=2000) + plt.savefig("volume_id.pdf", + transparent=True, + bbox_inches='tight', + pad_inches=-0.05) + + linewidth = 2 + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + axtri = plt.tripcolor(np.cos(theta)*y-np.sin(theta)*x, -z, tri, volume_id_vec_2) + plt.plot([0.00606, 0.01513], [0.018, 0.018], 'g-', lw=linewidth) + plt.plot([0.03085, 0.03993], [0.018, 0.018], 'g-', lw=linewidth) + plt.plot([0.04805, 0.05714], [0.018, 0.018], 'g-', lw=linewidth) + plt.plot([0.07285, 0.08194], [0.018, 0.018], 'g-', lw=linewidth) + + plt.plot([0.00301297, 0.0862297], [-2.60656e-05, -2.60656e-05], + 'r-', + lw=linewidth) + + plt.plot([0.01513, 0.01718, 0.01718], [0.018, 0.018, 0.007833], + 'r-', + lw=linewidth) + plt.plot([0.02881, 0.02881, 0.03085], [0.007833, 0.018, 0.018], + 'r-', + lw=linewidth) + plt.plot([0.05714, 0.0591934, 0.0591934], [0.018, 0.018, 0.007833], + 'r-', + lw=linewidth) + plt.plot([0.0708286, 0.0708286, 0.07285], [0.007833, 0.018, 0.018], + 'r-', + lw=linewidth) + + plt.plot([0.00768668, 0.00768668, 0.0136152], + [0.0299629, 0.028372, 0.028372], + 'r-', + lw=linewidth) + plt.plot([0.00768668, 0.0157517], [0.0314519, 0.0314519], + 'g-', + lw=linewidth) + plt.plot([0.0139112, 0.0163621], [0.0283628, 0.0283628], + 'g-', + lw=linewidth) + plt.plot([0.0139204, 0.0151413], [0.0253754, 0.0253754], + 'g-', + lw=linewidth) + plt.plot([0.0153632, 0.0170188], [0.0253754, 0.0253754], + 'g-', + lw=linewidth) + + plt.plot([0.0118091, 0.0138181], [0.0519943, 0.0519943], + 'g-', + lw=linewidth) + + plt.plot([0.0383327, 0.0383327, 0.0323929], + [0.0299629, 0.028372, 0.028372], + 'r-', + lw=linewidth) + plt.plot([0.0302762, 0.0383327], [0.0314519, 0.0314519], + 'g-', + lw=linewidth) + plt.plot([0.0297374, 0.032108], [0.0283628, 0.0283628], 'g-', lw=linewidth) + plt.plot([0.0289832, 0.0306937], [0.0253754, 0.0253754], + 'g-', + lw=linewidth) + plt.plot([0.0308688, 0.0321214], [0.0253754, 0.0253754], + 'g-', + lw=linewidth) + + plt.plot([0.0322022, 0.0342226], [0.0519943, 0.0519943], + 'g-', + lw=linewidth) + + plt.plot([0.0496977, 0.0496977, 0.0556013], + [0.0299629, 0.028372, 0.028372], + 'r-', + lw=linewidth) + plt.plot([0.0496977, 0.0577345], [0.0314519, 0.0314519], + 'g-', + lw=linewidth) + plt.plot([0.0559981, 0.0583794], [0.0283628, 0.0283628], + 'g-', + lw=linewidth) + plt.plot([0.0559237, 0.0571888], [0.0253754, 0.0253754], + 'g-', + lw=linewidth) + plt.plot([0.0573872, 0.0590244], [0.0253754, 0.0253754], + 'g-', + lw=linewidth) + + plt.plot([0.0538401, 0.0558245], [0.0519943, 0.0519943], + 'g-', + lw=linewidth) + + plt.plot([0.0803319, 0.0803319, 0.0743539], + [0.0299629, 0.028372, 0.028372], + 'r-', + lw=linewidth) + plt.plot([0.0722703, 0.0803815], [0.0314519, 0.0314519], + 'g-', + lw=linewidth) + plt.plot([0.0717246, 0.0741058], [0.0283628, 0.0283628], + 'g-', + lw=linewidth) + plt.plot([0.07103, 0.0726536], [0.0253754, 0.0253754], 'g-', lw=linewidth) + plt.plot([0.0728542, 0.0741013], [0.0253754, 0.0253754], + 'g-', + lw=linewidth) + + plt.plot([0.0742012, 0.0762138], [0.0519943, 0.0519943], + 'g-', + lw=linewidth) + + plt.plot([0.0171631, 0.0171631], [0.0474981, 0.0542711], + 'r-', + lw=linewidth) + plt.plot([0.0288311, 0.0288311], [0.0474981, 0.0542711], + 'r-', + lw=linewidth) + plt.plot([0.0591792, 0.0591792], [0.0474981, 0.0542711], + 'r-', + lw=linewidth) + plt.plot([0.0708312, 0.0708312], [0.0474981, 0.0542711], + 'r-', + lw=linewidth) + + f = open("volume_id_with_contact.txt", "w+") + print >> f, str(level[0]) + ', ' + str(level[3]) + ', ' + str(level[6]) + ', ' + str(level[9]) + ', ' + str(level[12]) + ', ' + str(level[15]) + f.close() + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + plt.savefig("volume_id_with_contact.png", + transparent=True, + bbox_inches='tight', + pad_inches=0., + dpi=2000) + plt.savefig("volume_id_with_contact.pdf", + transparent=True, + bbox_inches='tight', + pad_inches=-0.05) + + #plt.show() + + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + axtri = plt.tripcolor(np.cos(theta)*(y+ 100 * dy)-np.sin(theta)*(x+ 100 * dx), -z - 100 * dz, tri, volume_id_vec_2) + f = open("volume_id_def.txt", "w+") + print >> f, str(level[0]) + ', ' + str(level[3]) + ', ' + str(level[6]) + ', ' + str(level[9]) + ', ' + str(level[12]) + ', ' + str(level[15]) + f.close() + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + plt.savefig("volume_id_def.png", + transparent=True, + bbox_inches='tight', + pad_inches=0., + dpi=2000) + plt.savefig("volume_id_def.pdf", + transparent=True, + bbox_inches='tight', + pad_inches=-0.05) + + level = np.linspace(-1e8, 1e8, 16) + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + axtri = plt.tripcolor(np.cos(theta)*y-np.sin(theta)*x, -z, tri, sigma_zz, level) + f = open("sigma_zz_unsmooth_2.txt", "w+") + print >> f, str(level[0]) + ', ' + str(level[3]) + ', ' + str(level[6]) + ', ' + str(level[9]) + ', ' + str(level[12]) + ', ' + str(level[15]) + f.close() + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + plt.savefig("sigma_zz_unsmooth_2.pdf", + transparent=True, + bbox_inches='tight', + pad_inches=-0.05) + + level = np.linspace(-1e8, 1e8, 16) + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + axtri = plt.tripcolor(np.cos(theta)*y-np.sin(theta)*x, -z, tri, sigma_zz_filtered, level) + f = open("sigma_zz_filtered.txt", "w+") + print >> f, str(level[0]) + ', ' + str(level[3]) + ', ' + str(level[6]) + ', ' + str(level[9]) + ', ' + str(level[12]) + ', ' + str(level[15]) + f.close() + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + plt.savefig("sigma_zz_filtered.pdf", + transparent=True, + bbox_inches='tight', + pad_inches=-0.05) + + #cb = fig.colorbar(axtri, orientation="horizontal") + + level = np.linspace(-2e8, 2e8, 16) + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + axtri = plt.tricontourf(np.cos(theta)*y-np.sin(theta)*x, -z, tri, sigma_vector_node, level) + f = open("sigma_zz_smooth_2.txt", "w+") + print >> f, str(level[0]) + ', ' + str(level[3]) + ', ' + str(level[6]) + ', ' + str(level[9]) + ', ' + str(level[12]) + ', ' + str(level[15]) + f.close() + + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + plt.savefig("sigma_zz_smooth_2.pdf", + transparent=True, + bbox_inches='tight', + pad_inches=-0.05) + + level = np.linspace(min(sigma_vector_node_filtered), + max(sigma_vector_node_filtered), 16) + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + axtri = plt.tricontourf(np.cos(theta)*y-np.sin(theta)*x, -z, tri, sigma_vector_node_filtered, level) + + f = open("sigma_vector_node_filtered.txt", "w+") + print >> f, str(level[0]) + ', ' + str(level[3]) + ', ' + str(level[6]) + ', ' + str(level[9]) + ', ' + str(level[12]) + ', ' + str(level[15]) + f.close() + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + plt.savefig("sigma_vector_node_filtered.pdf", + transparent=True, + bbox_inches='tight', + pad_inches=-0.05) + + #cb = fig.colorbar(axtri, orientation="horizontal") + + + #plt.show() + ''' + + +def post_process_mirror(filename='mirror_data.npz', + filename_ref='mirror_data.npz', + remove_ref=False, + round_lim=True): + if remove_ref: + npzfile = np.load(filename_ref) + dz_ref = npzfile['dz'].flatten() + + npzfile = np.load(filename) + + x = npzfile['x'] + y = npzfile['y'] + z = npzfile['z'] + T = npzfile['T'].flatten() + tri = npzfile['tri'] + dz = npzfile['dz'].flatten() + + if remove_ref: + dz -= dz_ref + + tri2 = mtri.Triangulation(x, y, triangles=tri) + + f = open("mirror_surface_levels.txt", "w+") + + OAX, OAY = 0.0595, 0.017 + + optical_coefficients, dz_residual = u.compute_RBM_Curvature_Irreg( + x, y, z, tri, dz, "m", np.array([OAX, OAY])) + np.savez('mirror_optical_results', + optical_coefficients=optical_coefficients, + dz_residual=dz_residual) + np.savetxt('mirror_optical_results.out', optical_coefficients) + ''' + level = np.linspace(min(dx), max(dx), 16) + # Velocity x-component + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + plt.tricontour(x, + y, + tri, + dx, + level, + linestyles='-', + colors='black', + linewidths=0.5) + axtri = plt.tricontourf(x, y, tri, dx, level) + print >> f, "dx" + print >> f, level * 1000 + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + plt.savefig("dx_m.pdf", + transparent=True, + bbox_inches='tight', + pad_inches=-0.05) + + level = np.linspace(min(dy), max(dy), 16) + # Velocity x-component + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + plt.tricontour(x, + y, + tri, + dy, + level, + linestyles='-', + colors='black', + linewidths=0.5) + axtri = plt.tricontourf(x, y, tri, dy, level) + print >> f, "dy" + print >> f, level * 1000 + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + plt.savefig("dy_m.pdf", + transparent=True, + bbox_inches='tight', + pad_inches=-0.05) + ''' + if round_lim: + min_T = min(T) + max_T = max(T) + else: + min_T = min(T) + max_T = max(T) + level = np.linspace(min_T, max_T, 16) + # Velocity x-component + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + plt.tricontour(tri2, + T, + level, + linestyles='-', + colors='black', + linewidths=0.5) + axtri = plt.tricontourf(tri2, T, level) + print("T", file=f) + print(level, file=f) + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + plt.savefig("T.pdf", + transparent=True, + bbox_inches='tight', + pad_inches=-0.05) + + round_dz = 0.000005 + if round_lim: + min_dz = np.floor((min(dz) / round_dz)) * round_dz + max_dz = np.ceil((max(dz) / round_dz)) * round_dz + else: + min_dz = min(dz) + max_dz = max(dz) + + level = np.linspace(min_dz, max_dz, 17) + # Velocity x-component + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + plt.tricontour(tri2, + dz, + level, + linestyles='-', + colors='black', + linewidths=0.5) + axtri = plt.tricontourf(tri2, dz, level) + print("dz", file=f) + print(level * 1000, file=f) + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + plt.savefig("dz_m.pdf", + transparent=True, + bbox_inches='tight', + pad_inches=-0.05) + + dz = 1000. * dz + #level = np.linspace(1000*min_dz, 1000*max_dz, 16) + # Velocity x-component + fig = plt.figure(figsize=(8, 8)) + plt.set_cmap('coolwarm') + plt.tricontour(tri2, + dz, + 1000. * level, + linestyles='-', + colors='black', + linewidths=0.5) + axtri = plt.tricontourf(tri2, dz, 1000. * level) + print("dz", file=f) + print(level * 1000, file=f) + plt.gca().set_aspect('equal') + plt.gca().set_axis_off() + plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0) + plt.margins(0, 0) + plt.gca().xaxis.set_major_locator(plt.NullLocator()) + plt.gca().yaxis.set_major_locator(plt.NullLocator()) + cb = fig.colorbar(axtri, orientation="horizontal") + cb.set_label('Normal displacement [mm]', rotation=0) + plt.savefig("dz_m_2.pdf", + transparent=True, + bbox_inches='tight', + pad_inches=0.05) + f.close() diff --git a/katoptron/Juelich/samples_files/Xiao_1.npz b/katoptron/Juelich/samples_files/Xiao_1.npz new file mode 100644 index 0000000000000000000000000000000000000000..7b03e3d7fc50ec5955a2e13fc9936bac99945492 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_1.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_10.npz b/katoptron/Juelich/samples_files/Xiao_10.npz new file mode 100644 index 0000000000000000000000000000000000000000..8f8dbe9b26245343bddee73a2d3650a677336337 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_10.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_11.npz b/katoptron/Juelich/samples_files/Xiao_11.npz new file mode 100644 index 0000000000000000000000000000000000000000..917ecdec9eb627f14875285285a7a5f14c202a28 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_11.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_12.npz b/katoptron/Juelich/samples_files/Xiao_12.npz new file mode 100644 index 0000000000000000000000000000000000000000..2ba898b0938e915cc3f3aa3488b233fc8099776c Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_12.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_13.npz b/katoptron/Juelich/samples_files/Xiao_13.npz new file mode 100644 index 0000000000000000000000000000000000000000..a6df523a8a0cbde295076a661e3f23612888368b Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_13.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_14.npz b/katoptron/Juelich/samples_files/Xiao_14.npz new file mode 100644 index 0000000000000000000000000000000000000000..66e523668233914181e04d2add4bfb80d30a1548 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_14.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_15.npz b/katoptron/Juelich/samples_files/Xiao_15.npz new file mode 100644 index 0000000000000000000000000000000000000000..34b569ca9f9493bc33f044becfde2b93142ad342 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_15.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_16.npz b/katoptron/Juelich/samples_files/Xiao_16.npz new file mode 100644 index 0000000000000000000000000000000000000000..938f63549dbea270f5ab541256661b920f975f36 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_16.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_17.npz b/katoptron/Juelich/samples_files/Xiao_17.npz new file mode 100644 index 0000000000000000000000000000000000000000..4baa4cb0c56a5a441030c460ab19c70739bad042 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_17.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_18.npz b/katoptron/Juelich/samples_files/Xiao_18.npz new file mode 100644 index 0000000000000000000000000000000000000000..6c432ffb115272d435a9601fa6b91188f3880501 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_18.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_19.npz b/katoptron/Juelich/samples_files/Xiao_19.npz new file mode 100644 index 0000000000000000000000000000000000000000..3b65de7dec83b286a38c982e2a6a6df514a3e9e0 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_19.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_2.npz b/katoptron/Juelich/samples_files/Xiao_2.npz new file mode 100644 index 0000000000000000000000000000000000000000..71a2c4e6810a2df289a299ad7de8b83a334fa2d8 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_2.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_20.npz b/katoptron/Juelich/samples_files/Xiao_20.npz new file mode 100644 index 0000000000000000000000000000000000000000..2924847b69b9688d103fc30e54614c80599c0121 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_20.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_21.npz b/katoptron/Juelich/samples_files/Xiao_21.npz new file mode 100644 index 0000000000000000000000000000000000000000..0238893367ebd5c935e2b2dbbab1b0ddb1262813 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_21.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_22.npz b/katoptron/Juelich/samples_files/Xiao_22.npz new file mode 100644 index 0000000000000000000000000000000000000000..16cc46634ba04629f0ebe6b3e1c720612b222df0 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_22.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_23.npz b/katoptron/Juelich/samples_files/Xiao_23.npz new file mode 100644 index 0000000000000000000000000000000000000000..249b9cd470086282aa46000226f1baf584d456d7 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_23.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_24.npz b/katoptron/Juelich/samples_files/Xiao_24.npz new file mode 100644 index 0000000000000000000000000000000000000000..79c69ba38d476c8594ec72d1424eb2a4283de651 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_24.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_25.npz b/katoptron/Juelich/samples_files/Xiao_25.npz new file mode 100644 index 0000000000000000000000000000000000000000..de6c0a9bf8011de5ccc85148617a0428497f3b96 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_25.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_26.npz b/katoptron/Juelich/samples_files/Xiao_26.npz new file mode 100644 index 0000000000000000000000000000000000000000..457c26c08fb5030d726dac36cf60729f9396fcb5 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_26.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_27.npz b/katoptron/Juelich/samples_files/Xiao_27.npz new file mode 100644 index 0000000000000000000000000000000000000000..ac3720888e33467c4e33b3148fb85b240f66b1a5 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_27.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_28.npz b/katoptron/Juelich/samples_files/Xiao_28.npz new file mode 100644 index 0000000000000000000000000000000000000000..8cd28ff90d183b6b49734472866018d1d80225ec Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_28.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_29.npz b/katoptron/Juelich/samples_files/Xiao_29.npz new file mode 100644 index 0000000000000000000000000000000000000000..05886390d5c8c3f0919d66847a30efe9a5030bd7 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_29.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_3.npz b/katoptron/Juelich/samples_files/Xiao_3.npz new file mode 100644 index 0000000000000000000000000000000000000000..63c39112096774687963de5731858ea2d26e230d Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_3.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_30.npz b/katoptron/Juelich/samples_files/Xiao_30.npz new file mode 100644 index 0000000000000000000000000000000000000000..22f997509d24910547f8adc3d2ddd3c51168035c Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_30.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_31.npz b/katoptron/Juelich/samples_files/Xiao_31.npz new file mode 100644 index 0000000000000000000000000000000000000000..3bdc6c63e013b0e30cfc8c8ad3c7d1c86d0959ec Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_31.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_32.npz b/katoptron/Juelich/samples_files/Xiao_32.npz new file mode 100644 index 0000000000000000000000000000000000000000..2c97d1fa8065ac520a899b96feaaead81a4e12ca Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_32.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_33.npz b/katoptron/Juelich/samples_files/Xiao_33.npz new file mode 100644 index 0000000000000000000000000000000000000000..942988c3efefab15b3694e248d9bfda092369197 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_33.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_34.npz b/katoptron/Juelich/samples_files/Xiao_34.npz new file mode 100644 index 0000000000000000000000000000000000000000..8955d9aa2ab42b31f257eeacc025c6bea6d17ef7 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_34.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_35.npz b/katoptron/Juelich/samples_files/Xiao_35.npz new file mode 100644 index 0000000000000000000000000000000000000000..341b57eb9cf65f0d53296c644ba4811f54973f41 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_35.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_36.npz b/katoptron/Juelich/samples_files/Xiao_36.npz new file mode 100644 index 0000000000000000000000000000000000000000..43609406a691e9b4591fec857697164dd4873cab Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_36.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_37.npz b/katoptron/Juelich/samples_files/Xiao_37.npz new file mode 100644 index 0000000000000000000000000000000000000000..39e862f48bf5507ca1fdace4238139e9afe618bb Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_37.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_38.npz b/katoptron/Juelich/samples_files/Xiao_38.npz new file mode 100644 index 0000000000000000000000000000000000000000..4646a35d35db324ee59c85a24ef578e5f9c4a85c Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_38.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_39.npz b/katoptron/Juelich/samples_files/Xiao_39.npz new file mode 100644 index 0000000000000000000000000000000000000000..2a0a4bda52b1d0a0ef0e45705181e21cc5ac6376 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_39.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_4.npz b/katoptron/Juelich/samples_files/Xiao_4.npz new file mode 100644 index 0000000000000000000000000000000000000000..63c39112096774687963de5731858ea2d26e230d Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_4.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_40.npz b/katoptron/Juelich/samples_files/Xiao_40.npz new file mode 100644 index 0000000000000000000000000000000000000000..a6932e59351b9f03244de8ba0d72ebc48e2276b4 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_40.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_41.npz b/katoptron/Juelich/samples_files/Xiao_41.npz new file mode 100644 index 0000000000000000000000000000000000000000..d2e9637a91ca865122e162d4abf50efeb67f09c6 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_41.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_42.npz b/katoptron/Juelich/samples_files/Xiao_42.npz new file mode 100644 index 0000000000000000000000000000000000000000..7964cc28089a4fbad5ee731886f5af0386b85cbc Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_42.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_43.npz b/katoptron/Juelich/samples_files/Xiao_43.npz new file mode 100644 index 0000000000000000000000000000000000000000..8429ceb24d4090cbee0145043b46dd7abcb7bf64 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_43.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_44.npz b/katoptron/Juelich/samples_files/Xiao_44.npz new file mode 100644 index 0000000000000000000000000000000000000000..6e078a8acf2ceeb2ecdf2d53efcc08a80f06fefd Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_44.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_45.npz b/katoptron/Juelich/samples_files/Xiao_45.npz new file mode 100644 index 0000000000000000000000000000000000000000..f00ed1da3c4f3ab343b2b2bd31fa1c03ce330bc1 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_45.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_46.npz b/katoptron/Juelich/samples_files/Xiao_46.npz new file mode 100644 index 0000000000000000000000000000000000000000..f9b42f0abf0fb038536695e9d7e7245ee5e12dee Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_46.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_47.npz b/katoptron/Juelich/samples_files/Xiao_47.npz new file mode 100644 index 0000000000000000000000000000000000000000..033ecdd992e4aa2e9d3ddcce73cc47e83cdaae74 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_47.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_48.npz b/katoptron/Juelich/samples_files/Xiao_48.npz new file mode 100644 index 0000000000000000000000000000000000000000..3e193d9e087bd7c7719995d8c2d2fd484321cba1 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_48.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_49.npz b/katoptron/Juelich/samples_files/Xiao_49.npz new file mode 100644 index 0000000000000000000000000000000000000000..0918916be6ac617f97c4e44b4bca1e49cf754a2f Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_49.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_5.npz b/katoptron/Juelich/samples_files/Xiao_5.npz new file mode 100644 index 0000000000000000000000000000000000000000..eed3e60620c924c1e5958248531446c026112b0a Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_5.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_50.npz b/katoptron/Juelich/samples_files/Xiao_50.npz new file mode 100644 index 0000000000000000000000000000000000000000..f35763aa71725038ca9e6d42f970f7a5b9ac173d Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_50.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_6.npz b/katoptron/Juelich/samples_files/Xiao_6.npz new file mode 100644 index 0000000000000000000000000000000000000000..417801c9203949b37de027fa7be0afd3d2f20b43 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_6.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_7.npz b/katoptron/Juelich/samples_files/Xiao_7.npz new file mode 100644 index 0000000000000000000000000000000000000000..9b1946fea901b32ada4d1794ca36a0e5003c89ad Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_7.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_8.npz b/katoptron/Juelich/samples_files/Xiao_8.npz new file mode 100644 index 0000000000000000000000000000000000000000..6f4c1c3ae433bf11eaa6563bde78415e29229831 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_8.npz differ diff --git a/katoptron/Juelich/samples_files/Xiao_9.npz b/katoptron/Juelich/samples_files/Xiao_9.npz new file mode 100644 index 0000000000000000000000000000000000000000..959ddd04c781034755bd4a1fbc88d29835429067 Binary files /dev/null and b/katoptron/Juelich/samples_files/Xiao_9.npz differ diff --git a/katoptron/Juelich/slurm/blake.slurm.sh b/katoptron/Juelich/slurm/blake.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..e5e54cafc63c60efdd48fba44cfdb4f0a3b66fe9 --- /dev/null +++ b/katoptron/Juelich/slurm/blake.slurm.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=Mirror_AB +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/Mirror_AB.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export n_nodes=1 + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_PLACE_THREADS=24c,1t +export KMP_AFFINITY=compact + +export ensemble_size=1 + +export MKL_NUM_THREADS=${OMP_NUM_THREADS} +export N_MPI_PER_SOCKET=1 + +n_MPI=$(( 2*n_nodes )) +base_dir=$(pwd) +msh_file=${base_dir}/katoptron/Juelich/mesh/fused_mirror_assembly_mm.msh +workspace_dir=${base_dir}/workspace/katoptron_Juelich_tests_M1_assembly_fused +msh_part_file=${workspace_dir}/fused_mirror_assembly_mm_part_${n_MPI}.msh + +if [ ! -d ${workspace_dir} ] +then + mkdir ${workspace_dir} +fi + +if [ ! -e ${msh_part_file} ] +then + gmsh -3 ${msh_file} -o ${msh_part_file} -part ${n_MPI} +fi + +mpirun -npersocket ${N_MPI_PER_SOCKET} python run.py -k ${OMP_NUM_THREADS} katoptron/Juelich/tests/M1_assembly_fused.py diff --git a/katoptron/Juelich/slurm/blake_ER_NER.slurm.sh b/katoptron/Juelich/slurm/blake_ER_NER.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..6ac1bc52d9bf7d04a67c643ac9c4f945f15f19c7 --- /dev/null +++ b/katoptron/Juelich/slurm/blake_ER_NER.slurm.sh @@ -0,0 +1,101 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=Mirror +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/Mirror.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export n_nodes=1 + +function setEnsembleReduction(){ + remove2env INCLUDE "${Trilinos_DIR}/include" + remove2env LIB "${Trilinos_DIR}/lib" + remove2env PYTHONPATH "${Trilinos_DIR}/lib/python2.7/site-packages" + remove2env LD_LIBRARY_PATH "${Trilinos_DIR}/lib/python2.7/site-packages/PyTrilinos" + remove2env LD_LIBRARY_PATH "${Trilinos_DIR}/lib/python2.7/site-packages" + remove2env LD_LIBRARY_PATH "${Trilinos_DIR}/lib" + if [ “$1†== “false†]; then + export Trilinos_DIR=$Trilinos_DIR_NO_ER + export Waves_DIR=$Waves_DIR_NO_ER + export ensemble_reduction="false" + else + export Trilinos_DIR=$Trilinos_DIR_ER + export Waves_DIR=$Waves_DIR_ER + export ensemble_reduction="true" + fi + add2env INCLUDE "${Trilinos_DIR}/include" end + add2env LIB "${Trilinos_DIR}/lib" end + add2env PYTHONPATH "${Trilinos_DIR}/lib/python2.7/site-packages" front + add2env LD_LIBRARY_PATH "${Trilinos_DIR}/lib/python2.7/site-packages/PyTrilinos" end + add2env LD_LIBRARY_PATH "${Trilinos_DIR}/lib/python2.7/site-packages" end + add2env LD_LIBRARY_PATH "${Trilinos_DIR}/lib" end + cd $Waves_DIR +} + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_PLACE_THREADS=24c,1t +export KMP_AFFINITY=compact + +export MKL_NUM_THREADS=${OMP_NUM_THREADS} +export N_MPI_PER_SOCKET=1 + +ensemble_sizes=( 1 8 16 32) +run_NER=true +run_ER=true + +setEnsembleReduction false + +n_MPI=$(( 2*n_nodes )) +base_dir=$(pwd) +msh_file=${base_dir}/katoptron/Juelich/mesh/fused_mirror_assembly_mm.msh +workspace_NER_dir=${base_dir}/workspace/katoptron_Juelich_tests_M1_assembly_fused_MC_k +msh_part_NER_file=${workspace_NER_dir}/fused_mirror_assembly_mm_part_${n_MPI}.msh + +if [ ! -d ${workspace_NER_dir} ] +then + mkdir ${workspace_NER_dir} +fi + +if [ ! -e ${msh_part_NER_file} ] +then + gmsh -3 ${msh_file} -o ${msh_part_NER_file} -part ${n_MPI} +fi + +if [ "$run_NER" = true ]; then + for s in "${ensemble_sizes[@]}" + do + export ensemble_size=$s + mpirun -npersocket ${N_MPI_PER_SOCKET} python run.py -k ${OMP_NUM_THREADS} katoptron/Juelich/tests/M1_assembly_fused_MC_k.py + done +fi + +ensemble_sizes=( 8 16 32) + +setEnsembleReduction true + +base_dir=$(pwd) +workspace_ER_dir=${base_dir}/workspace/katoptron_Juelich_tests_M1_assembly_fused_MC_k +msh_part_ER_file=${workspace_ER_dir}/fused_mirror_assembly_mm_part_${n_MPI}.msh + +if [ ! -d ${workspace_ER_dir} ] +then + mkdir ${workspace_ER_dir} +fi + +cp ${msh_part_NER_file} ${msh_part_ER_file} + +if [ "$run_ER" = true ]; then + for s in "${ensemble_sizes[@]}" + do + export ensemble_size=$s + mpirun -npersocket ${N_MPI_PER_SOCKET} python run.py -k ${OMP_NUM_THREADS} katoptron/Juelich/tests/M1_assembly_fused_MC_k.py + done +fi \ No newline at end of file diff --git a/katoptron/Juelich/slurm/blake_all.slurm.sh b/katoptron/Juelich/slurm/blake_all.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..fa0a52a96104574b6462ed58f0050aca08bc55a0 --- /dev/null +++ b/katoptron/Juelich/slurm/blake_all.slurm.sh @@ -0,0 +1,47 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=Mirror_all +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 2 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/Mirror_all.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export n_nodes=2 + +ensemble_sizes=( 1 8 16 32) + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_PLACE_THREADS=24c,1t +export KMP_AFFINITY=compact + +export MKL_NUM_THREADS=${OMP_NUM_THREADS} +export N_MPI_PER_SOCKET=1 + +n_MPI=$(( 2*n_nodes )) +base_dir=$(pwd) +msh_file=${base_dir}/katoptron/Juelich/mesh/fused_mirror_assembly_all_mm.msh +workspace_dir=${base_dir}/workspace/katoptron_Juelich_tests_M1_assembly_fused_all +msh_part_file=${workspace_dir}/fused_mirror_assembly_all_mm_part_${n_MPI}.msh + +if [ ! -d ${workspace_dir} ] +then + mkdir ${workspace_dir} +fi + +if [ ! -e ${msh_part_file} ] +then + gmsh -3 ${msh_file} -o ${msh_part_file} -part ${n_MPI} +fi + +for s in "${ensemble_sizes[@]}" +do + export ensemble_size=$s + mpirun -npersocket ${N_MPI_PER_SOCKET} python run.py -k ${OMP_NUM_THREADS} katoptron/Juelich/tests/M1_assembly_fused_all.py +done diff --git a/katoptron/Juelich/slurm/blake_order.slurm.sh b/katoptron/Juelich/slurm/blake_order.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..fecd4d790865d42c36ca91adf20c2aed483d522d --- /dev/null +++ b/katoptron/Juelich/slurm/blake_order.slurm.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=M_order +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/M_order.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export n_nodes=1 + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_PLACE_THREADS=24c,1t +export KMP_AFFINITY=compact + +export ensemble_size=1 + +export MKL_NUM_THREADS=${OMP_NUM_THREADS} +export N_MPI_PER_SOCKET=1 + +n_MPI=$(( 2*n_nodes )) +base_dir=$(pwd) +msh_file=${base_dir}/katoptron/Juelich/mesh/fused_mirror_assembly_mm.msh +workspace_dir=${base_dir}/workspace/katoptron_Juelich_tests_M1_assembly_fused_MC_k_order +msh_part_file=${workspace_dir}/fused_mirror_assembly_mm_part_${n_MPI}.msh + +if [ ! -d ${workspace_dir} ] +then + mkdir ${workspace_dir} +fi + +if [ ! -e ${msh_part_file} ] +then + gmsh -3 ${msh_file} -o ${msh_part_file} -part ${n_MPI} +fi + +mpirun -npersocket ${N_MPI_PER_SOCKET} python run.py -k ${OMP_NUM_THREADS} katoptron/Juelich/tests/M1_assembly_fused_MC_k_order.py diff --git a/katoptron/Juelich/slurm/blake_preload.slurm.sh b/katoptron/Juelich/slurm/blake_preload.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..e7952bb35ad8f6c0a4839a29615a46adbe3e7945 --- /dev/null +++ b/katoptron/Juelich/slurm/blake_preload.slurm.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=Mirror_AB +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/Mirror_AB.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export n_nodes=1 + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_PLACE_THREADS=24c,1t +export KMP_AFFINITY=compact + +export ensemble_size=1 + +export MKL_NUM_THREADS=${OMP_NUM_THREADS} +export N_MPI_PER_SOCKET=1 + +n_MPI=$(( 2*n_nodes )) +base_dir=$(pwd) +msh_file=${base_dir}/katoptron/Juelich/mesh/fused_mirror_assembly_mm.msh +workspace_dir=${base_dir}/workspace/katoptron_Juelich_tests_M1_assembly_fused_preload +msh_part_file=${workspace_dir}/fused_mirror_assembly_mm_part_${n_MPI}.msh + +if [ ! -d ${workspace_dir} ] +then + mkdir ${workspace_dir} +fi + +if [ ! -e ${msh_part_file} ] +then + gmsh -3 ${msh_file} -o ${msh_part_file} -part ${n_MPI} +fi + +mpirun -npersocket ${N_MPI_PER_SOCKET} python run.py -k ${OMP_NUM_THREADS} katoptron/Juelich/tests/M1_assembly_fused_preload.py diff --git a/katoptron/Juelich/smoothers/AMG_BGS_gs_gs.xml b/katoptron/Juelich/smoothers/AMG_BGS_gs_gs.xml new file mode 100644 index 0000000000000000000000000000000000000000..4a44425b2ec2da05cd9fab0d5f6470bf0aaec900 --- /dev/null +++ b/katoptron/Juelich/smoothers/AMG_BGS_gs_gs.xml @@ -0,0 +1,226 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + <!-- BLOCK 1 --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + </ParameterList> + + <ParameterList name="myDropFact1"> + <Parameter name="factory" type="string" value="CoalesceDropFactory"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myAggFact2"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3,1 }"/> + <Parameter name="Strided block id" type="int" value="0"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + <Parameter name="tentative: calculate qr" type="bool" value="false"/> + </ParameterList> + + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 --> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3,1 }"/> + <Parameter name="Strided block id" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myAggFact2"/> <!-- use old aggregates! --> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + <Parameter name="tentative: calculate qr" type="bool" value="false"/> + </ParameterList> + + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact2"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + <!-- <Parameter name="Graph" type="string" value="myDropFact1"/> --> + </ParameterList> + + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myAggFact2"/><!-- reuse aggs --> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + </ParameterList> + + + <!-- BLOCK SMOOTHERS --> + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="20"/> + <Parameter name="relaxation: damping factor" type="double" value="0.97"/> + </ParameterList> + </ParameterList> + + <ParameterList name="mySmooFact2"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="20"/> + <Parameter name="relaxation: damping factor" type="double" value="1.04"/> + </ParameterList> + </ParameterList> + + <ParameterList name="mySCHWARZ1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="SCHWARZ"/> + <ParameterList name="ParameterList"> + <Parameter name="schwarz: overlap level" type="int" value="1"/> + <Parameter name="schwarz: combine mode" type="string" value="Zero"/> + <Parameter name="subdomain solver name" type="string" value="RELAXATION"/> + <ParameterList name="subdomain solver parameters"> + <Parameter name="relaxation: type" type="string" value="Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="1"/> + <Parameter name="relaxation: damping factor" type="double" value="0.79"/> + </ParameterList> + </ParameterList> + </ParameterList> + + <ParameterList name="mySCHWARZ2"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="SCHWARZ"/> + <ParameterList name="ParameterList"> + <Parameter name="schwarz: overlap level" type="int" value="1"/> + <Parameter name="schwarz: combine mode" type="string" value="Zero"/> + <Parameter name="subdomain solver name" type="string" value="RELAXATION"/> + <ParameterList name="subdomain solver parameters"> + <Parameter name="relaxation: type" type="string" value="Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="1"/> + <Parameter name="relaxation: damping factor" type="double" value="0.79"/> + </ParameterList> + </ParameterList> + </ParameterList> + + <!-- Use Block GS: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="BlockedGaussSeidelSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="1."/> + <Parameter name="Backward mode" type="bool" value="true"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Smoother" type="string" value="mySmooFact2"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="3"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockDirectSolver"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> diff --git a/katoptron/Juelich/smoothers/AMG_BGS_gs_gs_old.xml b/katoptron/Juelich/smoothers/AMG_BGS_gs_gs_old.xml new file mode 100644 index 0000000000000000000000000000000000000000..170ffb5fd6ef95767e8282bb0f058489b19d7264 --- /dev/null +++ b/katoptron/Juelich/smoothers/AMG_BGS_gs_gs_old.xml @@ -0,0 +1,294 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + <!-- BLOCK 1 --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + </ParameterList> + + <ParameterList name="myDropFact1"> + <Parameter name="factory" type="string" value="CoalesceDropFactory"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myAggFact2"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3,1 }"/> + <Parameter name="Strided block id" type="int" value="0"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + <Parameter name="multigrid algorithm" type="string" value="unsmoothed"/> + <Parameter name="tentative: calculate qr" type="bool" value="false"/> + </ParameterList> + + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 --> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3,1 }"/> + <Parameter name="Strided block id" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myAggFact2"/> <!-- use old aggregates! --> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + <Parameter name="multigrid algorithm" type="string" value="unsmoothed"/> + <Parameter name="tentative: calculate qr" type="bool" value="false"/> + </ParameterList> + + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + <!-- <Parameter name="Graph" type="string" value="myDropFact1"/> --> + </ParameterList> + + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myAggFact2"/><!-- reuse aggs --> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + </ParameterList> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="10"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <ParameterList name="mySmooFact2"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="10"/> + <Parameter name="relaxation: damping factor" type="double" value="0.8"/> + </ParameterList> + </ParameterList> + + <ParameterList name="mySmooFact3"> + <Parameter name="factory" type="string" value="DirectSolver"/> + <Parameter name="type" type="string" value="BASKER"/> + </ParameterList> + + <ParameterList name="mySmooFact4"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="100"/> + <Parameter name="relaxation: damping factor" type="double" value="1."/> + </ParameterList> + </ParameterList> + + <ParameterList name="mySmooFact5"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="100"/> + <Parameter name="relaxation: damping factor" type="double" value="1."/> + </ParameterList> + </ParameterList> + + <!-- Use Block GS: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="BlockedGaussSeidelSmoother"/> + <Parameter name="Sweeps" type="int" value="3"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <Parameter name="Backward mode" type="bool" value="true"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Smoother" type="string" value="mySmooFact2"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockSmootherDirect"> + <Parameter name="factory" type="string" value="BlockedGaussSeidelSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="1."/> + <Parameter name="Backward mode" type="bool" value="true"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact4"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Smoother" type="string" value="mySmooFact5"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + <!-- ======================= REPARTITIONING ======================= --> + <!-- amalgamation of coarse level matrix --> + <ParameterList name="myRebAmalgFact"> + <Parameter name="factory" type="string" value="AmalgamationFactory"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + </ParameterList> + + <ParameterList name="myRepartitionHeuristicFact"> + <Parameter name="factory" type="string" value="RepartitionHeuristicFactory"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <Parameter name="repartition: min rows per proc" type="int" value="2000"/> + <Parameter name="repartition: max imbalance" type="double" value="1.1"/> + <Parameter name="repartition: start level" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myZoltanInterface"> + <Parameter name="factory" type="string" value="ZoltanInterface"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <Parameter name="number of partitions" type="string" value="myRepartitionHeuristicFact"/> + <!--<Parameter name="Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + </ParameterList> + + <ParameterList name="myRepartitionFact"> + <Parameter name="factory" type="string" value="RepartitionFactory"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <Parameter name="number of partitions" type="string" value="myRepartitionHeuristicFact"/> + <Parameter name="Partition" type="string" value="myZoltanInterface"/> + <Parameter name="repartition: remap parts" type="bool" value="false"/> + </ParameterList> + + <ParameterList name="myRebalanceProlongatorFact"> + <Parameter name="factory" type="string" value="RebalanceTransferFactory"/> + <Parameter name="type" type="string" value="Interpolation"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="Nullspace" type="string" value="myBlockedPFact"/> + </ParameterList> + + <ParameterList name="myRebalanceRestrictionFact"> + <Parameter name="factory" type="string" value="RebalanceTransferFactory"/> + <Parameter name="type" type="string" value="Restriction"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + </ParameterList> + + <ParameterList name="myRebalanceAFact"> + <Parameter name="factory" type="string" value="RebalanceAcFactory"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="4"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockDirectSolver"/> + <Parameter name="P" type="string" value="myRebalanceProlongatorFact"/> + <Parameter name="R" type="string" value="myRebalanceRestrictionFact"/> + <Parameter name="A" type="string" value="myRebalanceAFact"/> + <Parameter name="Importer" type="string" value="myRepartitionFact"/> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> diff --git a/katoptron/Juelich/smoothers/AMG_BGS_gs_gs_rep.xml b/katoptron/Juelich/smoothers/AMG_BGS_gs_gs_rep.xml new file mode 100644 index 0000000000000000000000000000000000000000..ea2db74e767207b27551664a3f64356fff200af0 --- /dev/null +++ b/katoptron/Juelich/smoothers/AMG_BGS_gs_gs_rep.xml @@ -0,0 +1,380 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + <!-- BLOCK 1 --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + </ParameterList> + + <ParameterList name="myDropFact1"> + <Parameter name="factory" type="string" value="CoalesceDropFactory"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myAggFact2"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3,1 }"/> + <Parameter name="Strided block id" type="int" value="0"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + <Parameter name="multigrid algorithm" type="string" value="unsmoothed"/> + <Parameter name="tentative: calculate qr" type="bool" value="false"/> + </ParameterList> + + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 --> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3,1 }"/> + <Parameter name="Strided block id" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myAggFact2"/> <!-- use old aggregates! --> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + <Parameter name="multigrid algorithm" type="string" value="unsmoothed"/> + <Parameter name="tentative: calculate qr" type="bool" value="false"/> + </ParameterList> + + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + <!-- <Parameter name="Graph" type="string" value="myDropFact1"/> --> + </ParameterList> + + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myAggFact2"/><!-- reuse aggs --> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <!-- we need the factories from the first group --> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/> + </ParameterList> + </ParameterList> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="10"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <ParameterList name="mySmooFact2"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="10"/> + <Parameter name="relaxation: damping factor" type="double" value="0.8"/> + </ParameterList> + </ParameterList> + + <ParameterList name="mySmooFact3"> + <Parameter name="factory" type="string" value="DirectSolver"/> + <Parameter name="type" type="string" value="BASKER"/> + </ParameterList> + + <ParameterList name="mySmooFact4"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="100"/> + <Parameter name="relaxation: damping factor" type="double" value="1."/> + </ParameterList> + </ParameterList> + + <ParameterList name="mySmooFact5"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="100"/> + <Parameter name="relaxation: damping factor" type="double" value="1."/> + </ParameterList> + </ParameterList> + + <!-- Use Block GS: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="BlockedGaussSeidelSmoother"/> + <Parameter name="Sweeps" type="int" value="3"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <Parameter name="Backward mode" type="bool" value="true"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Smoother" type="string" value="mySmooFact2"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockSmootherDirect"> + <Parameter name="factory" type="string" value="BlockedGaussSeidelSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="1."/> + <Parameter name="Backward mode" type="bool" value="true"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact4"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Smoother" type="string" value="mySmooFact5"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + <!-- ======================= REPARTITIONING ======================= --> + <!-- amalgamation of coarse level matrix --> + + <ParameterList name="myRepartitionHeuristicFactory"> + <Parameter name="factory" type="string" value="RepartitionHeuristicFactory"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <Parameter name="repartition: start level" type="int" value="2"/> + <Parameter name="repartition: min rows per proc" type="int" value="256"/> + <Parameter name="repartition: nonzeroImbalance" type="double" value="1.2"/> + </ParameterList> + + <ParameterList name="myRebSubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + </ParameterList> + + <ParameterList name="myRebSubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myInputCoordsFact"> + <Parameter name="factory" type="string" value="FineLevelInputDataFactory"/> + <Parameter name="Variable" type="string" value="CoOrdinates"/> + <Parameter name="Variable type" type="string" value="MultiVector"/> + <Parameter name="Fine level factory" type="string" value="NoFactory"/> + <!--<Parameter name="Coarse level factory" type="string" value="myTransferCoordinatesFact"/>--> + <!--<Parameter name="Coarse level factory" type="string" value="NoFactory"/> TO BE DEFINED LATER --> + </ParameterList> + + <ParameterList name="myZoltanInterface1"> + <Parameter name="factory" type="string" value="ZoltanInterface"/> + <Parameter name="A" type="string" value="myRebSubBlockAFactory1"/> + <Parameter name="number of partitions" type="string" value="myRepartitionHeuristicFactory"/> + </ParameterList> + + <ParameterList name="myZoltanInterface2"> + <Parameter name="factory" type="string" value="ZoltanInterface"/> + <Parameter name="A" type="string" value="myRebSubBlockAFactory2"/> + <Parameter name="number of partitions" type="string" value="myRepartitionHeuristicFactory"/> + </ParameterList> + + <ParameterList name="myRepartitionFactory1"> + <Parameter name="factory" type="string" value="RepartitionFactory"/> + <Parameter name="A" type="string" value="myRebSubBlockAFactory1"/> + <Parameter name="Partition" type="string" value="myZoltanInterface1"/> + <Parameter name="number of partitions" type="string" value="myRepartitionHeuristicFactory"/> + <Parameter name="repartition: print partition distribution" type="bool" value="true"/> + <Parameter name="repartition: remap parts" type="bool" value="true"/> + </ParameterList> + + <ParameterList name="myRepartitionFactory2"> + <Parameter name="factory" type="string" value="RepartitionFactory"/> + <Parameter name="A" type="string" value="myRebSubBlockAFactory2"/> + <Parameter name="Partition" type="string" value="myZoltanInterface2"/> + <Parameter name="number of partitions" type="string" value="myRepartitionHeuristicFactory"/> + <Parameter name="repartition: print partition distribution" type="bool" value="true"/> + <Parameter name="repartition: remap parts" type="bool" value="false"/> + </ParameterList> + + <ParameterList name="myRebFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> <!-- non-rebalanced A00! --> + <Parameter name="Importer" type="string" value="myRepartitionFactory1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="number of partitions" type="string" value="myRepartitionHeuristicFactory"/> + <Parameter name="Coordinates" type="string" value="myInputCoordsFact"/> + </ParameterList> + + <ParameterList name="myRebSecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> <!-- non-rebalanced A11! --> + <Parameter name="Importer" type="string" value="myRepartitionFactory2"/> + <Parameter name="number of partitions" type="string" value="myRepartitionHeuristicFactory"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="Coordinates" type="string" value="myInputCoordsFact"/> + </ParameterList> + + <ParameterList name="myRebBlockedPFact"> + <Parameter name="factory" type="string" value="RebalanceBlockInterpolationFactory"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myRebFirstGroup"/> + </ParameterList> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="myRebSecondGroup"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myInputCoordsFactDeps"> + <Parameter name="dependency for" type="string" value="myInputCoordsFact"/> + <Parameter name="Coarse level factory" type="string" value="myTransferCoordinatesFact"/> + </ParameterList> + + <ParameterList name="myRebBlockedRFact"> + <Parameter name="factory" type="string" value="RebalanceBlockRestrictionFactory"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="repartition: use subcommunicators" type="bool" value="false"/> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myRebFirstGroup"/> + </ParameterList> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="myRebSecondGroup"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myRebBlockedAcFact"> + <Parameter name="factory" type="string" value="RebalanceBlockAcFactory"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <Parameter name="repartition: use subcommunicators" type="bool" value="false"/> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myRebFirstGroup"/> + </ParameterList> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="myRebSecondGroup"/> + </ParameterList> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="4"/> + <Parameter name="coarse: max size" type="int" value="2500"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockDirectSolver"/> + <Parameter name="P" type="string" value="myRebBlockedPFact"/> + <Parameter name="R" type="string" value="myRebBlockedRFact"/> + <Parameter name="A" type="string" value="myRebBlockedAcFact"/> + <Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> diff --git a/katoptron/Juelich/smoothers/heat_no_contact.xml b/katoptron/Juelich/smoothers/heat_no_contact.xml new file mode 100644 index 0000000000000000000000000000000000000000..7b1148789fe445240df704f7855719b652c4057f --- /dev/null +++ b/katoptron/Juelich/smoothers/heat_no_contact.xml @@ -0,0 +1,19 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + <Parameter name="max levels" type="int" value="5"/> + <Parameter name="smoother: type" type="string" value="RELAXATION"/> + <ParameterList name="smoother: params"> + <Parameter name="relaxation: type" type="string" value="Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="5"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + <Parameter name="coarse: type" type="string" value="Klu"/> + <Parameter name="verbosity" type="string" value="extreme"/> + <Parameter name="multigrid algorithm" type="string" value="unsmoothed"/> + <Parameter name="tentative: calculate qr" type="bool" value="false"/> + <Parameter name="number of equations" type="int" value="4"/> +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/Juelich/smoothers/heat_no_contact_mtgs.xml b/katoptron/Juelich/smoothers/heat_no_contact_mtgs.xml new file mode 100644 index 0000000000000000000000000000000000000000..6685c2d51dcfa42250eb1cf31516ece3b9344236 --- /dev/null +++ b/katoptron/Juelich/smoothers/heat_no_contact_mtgs.xml @@ -0,0 +1,20 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + <Parameter name="max levels" type="int" value="5"/> + <Parameter name="smoother: type" type="string" value="RELAXATION"/> + <ParameterList name="smoother: params"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="15"/> + <Parameter name="relaxation: damping factor" type="double" value="1.1724"/> + <Parameter name="relaxation: backward mode" type="bool" value="true"/> + </ParameterList> + <Parameter name="coarse: type" type="string" value="Klu"/> + <Parameter name="verbosity" type="string" value="extreme"/> + <Parameter name="multigrid algorithm" type="string" value="unsmoothed"/> + <Parameter name="tentative: calculate qr" type="bool" value="false"/> + <Parameter name="number of equations" type="int" value="4"/> +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/Juelich/smoothers/mySIM1.xml b/katoptron/Juelich/smoothers/mySIM1.xml new file mode 100644 index 0000000000000000000000000000000000000000..1c217e5cb3b18c8da24062fc0b22c6c66a803705 --- /dev/null +++ b/katoptron/Juelich/smoothers/mySIM1.xml @@ -0,0 +1,190 @@ +<ParameterList name="MueLu"> + + <!-- Configuration of the Xpetra operator (fine level) --> + <ParameterList name="Matrix"> + <Parameter name="number of equations" type="int" value="1"/> <!-- Number of PDE equations at each grid node.--> + </ParameterList> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + + <!-- sub block factories --> + <!-- BLOCK 1 --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + </ParameterList> + + <ParameterList name="myDropFact1"> + <Parameter name="factory" type="string" value="CoalesceDropFactory"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3,1 }"/> + <Parameter name="Strided block id" type="int" value="0"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 --> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3,1 }"/> + <Parameter name="Strided block id" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use old aggregates! --> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + <Parameter name="Graph" type="string" value="myDropFact1"/> + </ParameterList> + + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/><!-- reuse aggs --> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + </ParameterList> + + <!-- BLOCK SMOOTHERS --> + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="20"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <ParameterList name="mySmooFact2"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="10"/> + <Parameter name="relaxation: damping factor" type="double" value="0.8"/> + </ParameterList> + </ParameterList> + + + <!-- Use Block GS: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="BlockedGaussSeidelSmoother"/> + <Parameter name="Sweeps" type="int" value="50"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Smoother" type="string" value="mySmooFact2"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="3"/> + <Parameter name="coarse: max size" type="int" value="10"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + </ParameterList> + + </ParameterList> +</ParameterList> diff --git a/katoptron/Juelich/smoothers/mySIM1_old.xml b/katoptron/Juelich/smoothers/mySIM1_old.xml new file mode 100644 index 0000000000000000000000000000000000000000..dbfa1ac497857933219b97329ab90ff3d0386dd7 --- /dev/null +++ b/katoptron/Juelich/smoothers/mySIM1_old.xml @@ -0,0 +1,190 @@ +<ParameterList name="MueLu"> + + <!-- Configuration of the Xpetra operator (fine level) --> + <ParameterList name="Matrix"> + <Parameter name="number of equations" type="int" value="1"/> <!-- Number of PDE equations at each grid node.--> + </ParameterList> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + + <!-- sub block factories --> + <!-- BLOCK 1 --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + </ParameterList> + + <ParameterList name="myDropFact1"> + <Parameter name="factory" type="string" value="CoalesceDropFactory"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3,1 }"/> + <Parameter name="Strided block id" type="int" value="0"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 --> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3,1 }"/> + <Parameter name="Strided block id" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use old aggregates! --> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + <Parameter name="Graph" type="string" value="myDropFact1"/> + </ParameterList> + + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/><!-- reuse aggs --> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + </ParameterList> + + <!-- BLOCK SMOOTHERS --> + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="20"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <ParameterList name="mySmooFact2"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="10"/> + <Parameter name="relaxation: damping factor" type="double" value="0.8"/> + </ParameterList> + </ParameterList> + + + <!-- Use Block GS: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="BlockedGaussSeidelSmoother"/> + <Parameter name="Sweeps" type="int" value="50"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Smoother" type="string" value="mySmooFact2"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="3"/> + <Parameter name="coarse: max size" type="int" value="10"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + </ParameterList> + + </ParameterList> +</ParameterList> diff --git a/katoptron/Juelich/tests/M1_assembly_contact.py b/katoptron/Juelich/tests/M1_assembly_contact.py new file mode 100644 index 0000000000000000000000000000000000000000..c5ac3c9e43525ebe500d9ecac44e73ae4633b54d --- /dev/null +++ b/katoptron/Juelich/tests/M1_assembly_contact.py @@ -0,0 +1,241 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +import numpy as np +import shlex +import subprocess +import os +import tarfile +import glob + +from katoptron.Juelich.UQ.halton import * +from katoptron.Juelich.UQ.copulas import * + + +def evaluate_one_ensemble(ensemble_size, + msh, + comm, + file_dir, + randomVariable_1, + randomVariable_2, + randomVariable_3, + scale_u, + scale_T, + option, + baking=False): + + from fwk.wutils import parseargs + args = parseargs() + + from PyTrilinos import Teuchos + import numpy as np + + small_disk_footprint = False + use_block = True + + comm, rank, siz = m.utilities.import_MPI() + + solverList = Teuchos.ParameterList() + solverList['type'] = "BlockGmres" + + solverList['Maximum Iterations'] = 500 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['Use preconditioner'] = True + + solverList['Print Teuchos timers'] = True + solverList['Write txt files'] = True + if small_disk_footprint: + solverList['Write vtk files'] = False + + solverList['convert MueLu xml file'] = True + solverList["use xml file"] = True + + solverList['Ensemble Convergence Tolerance'] = 10**(-8) + solverList[ + "MueLu xml file name"] = file_dir + '/../smoothers/heat_no_contact_mtgs.xml' + + solverList["Scaled Block 0"] = True + pbl = m.Problem(msh, comm) + + +def main(): + comm, rank, size = m.utilities.import_MPI() + + from PyTrilinos import Teuchos + import numpy as np + + geo_name = 'contact_mirror_assembly_mm.geo' + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir+'/../mesh', work_dir, comm, rank, size) + + solverList = Teuchos.ParameterList() + solverList['type'] = "BlockGmres" + + solverList['Maximum Iterations'] = 500 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['Use preconditioner'] = True + + solverList['Print Teuchos timers'] = True + solverList['Write txt files'] = True + + solverList['convert MueLu xml file'] = True + solverList["use xml file"] = True + + solverList['Ensemble Convergence Tolerance'] = 10**(-8) + solverList[ + "MueLu xml file name"] = file_dir + '/../smoothers/heat_no_contact_mtgs.xml' + + solverList["Scaled Block 0"] = True + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + pbl = m.Problem(msh, comm) + + ensemble_size = 1 + + scale_u = 1000. + scale_T = 1. + + scale_E = 1. / scale_u**2 + scale_k = (scale_T / scale_u) + scale_hsource = 1. / scale_u**3 + scale_hflux = 1. / scale_u**2 + scale_d = scale_T + + # 379 000 MPa = 379 GPa = 379E9 Pa + E_rhodium = 379E9 * np.ones(ensemble_size) * scale_E + nu_rhodium = 0.26 * np.ones(ensemble_size) + # 0.150 kW/(m K) = 150 W/(m K) + k_rhodium = 150 * scale_k + d_rhodium = 0.781E-05 * scale_d + + E_WCu = 280E9 * np.ones(ensemble_size) * scale_E + nu_WCu = 0.298 * np.ones(ensemble_size) + k_WCu = 180 * scale_k + d_WCu = 0.88E-05 * scale_d + + E_SS = 200E9 * np.ones(ensemble_size) * scale_E + nu_SS = 0.3 * np.ones(ensemble_size) + k_SS = 15.3 * scale_k + d_SS = 1.57E-05 * scale_d + + E_CuCrZr = 118E9 * np.ones(ensemble_size) * scale_E + nu_CuCrZr = 0.33 * np.ones(ensemble_size) + k_CuCrZr = 345 * np.ones(ensemble_size) * scale_k + d_CuCrZr = 1.8E-05 * np.ones(ensemble_size) * scale_d + + E_AlN = 320E9 * np.ones(ensemble_size) * scale_E + nu_AlN = 0.24 * np.ones(ensemble_size) + k_AlN = 180 * np.ones(ensemble_size) * scale_k + d_AlN = 0.48E-05 * scale_d + + E_I718 = 183E9 * np.ones(ensemble_size) * scale_E + nu_I718 = 0.31 * np.ones(ensemble_size) + k_I718 = 15.8 * scale_k + d_I718 = 1.38E-05 * scale_d + + T_ref = 22. + + m.Medium(pbl, "Mirror", "rhodium", E_rhodium, nu_rhodium, k_rhodium, + d_rhodium) + m.Medium(pbl, "Substrate", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + + m.Medium(pbl, "Holder", "CuCrZr", E_CuCrZr, nu_CuCrZr, k_CuCrZr, d_CuCrZr) + + m.Medium(pbl, "Washer 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Shaft 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Nut 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Spacer 1 part 1", "AlN", E_AlN, nu_AlN, + 180. * scale_k, d_AlN) + m.Medium(pbl, "Spacer 2 part 1", "AlN", E_AlN, nu_AlN, + 180. * scale_k, d_AlN) + m.Medium(pbl, "Spacer 3 part 1", "AlN", E_AlN, nu_AlN, + 180. * scale_k, d_AlN) + + m.Medium(pbl, "Spacer 1 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + m.Medium(pbl, "Spacer 2 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + m.Medium(pbl, "Spacer 3 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + + m.Dirichlet(pbl, "Holder x-y-z clamping point", "Clamped", 1, 0., 1, 0., 1, + 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder z clamping point", "Clamped", 0, 0., 0, 0., 1, 0., + 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder z-y clamping point", "Clamped", 0, 0., 1, 0., 1, + 0., 0, 0., ensemble_size) + + m.Dirichlet(pbl, "Cooling channels", "Clamped", 0, 0., 0, 0., 0, 0., 1, + ((70. - T_ref) / scale_T), ensemble_size) + + m.Dirichlet(pbl, "Mirror surface", "Clamped", 1, 0., 1, 0., 1, -10., 1, + ((70. - T_ref) / scale_T), ensemble_size) + ''' + zero = np.zeros(ensemble_size) + hf = 20. / 0.0121 * np.ones( + ensemble_size) * scale_hflux # 20 W / (0.0121 m^2) + + m.Neumann(pbl, "Mirror surface", "heat fluxes", 0, zero, 0, zero, 0, zero, + 1, hf, ensemble_size) + + m.Source(pbl, "Mirror", "ihg", 20E6 * scale_hsource) + m.Source(pbl, "Substrate", "ihg", 2.45E6 * scale_hsource) + + if material_option(option) == 1: + m.Source(pbl, "Holder", "ihg", 0.7E6 * scale_hsource) + elif material_option(option) == 2: + m.Source(pbl, "Holder", "ihg", 0.6E6 * scale_hsource) + + m.Source(pbl, "Spacer 1 part 1", "ihg", 0.3E6 * scale_hsource) + m.Source(pbl, "Spacer 2 part 1", "ihg", 0.3E6 * scale_hsource) + m.Source(pbl, "Spacer 3 part 1", "ihg", 0.3E6 * scale_hsource) + + m.Source(pbl, "Spacer 1 part 2", "ihg", 2.45E6 * scale_hsource) + m.Source(pbl, "Spacer 2 part 2", "ihg", 2.45E6 * scale_hsource) + m.Source(pbl, "Spacer 3 part 2", "ihg", 2.45E6 * scale_hsource) + + m.Source(pbl, "Shaft 1", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Shaft 2", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Shaft 3", "ihg", 0.8E6 * scale_hsource) + + m.Source(pbl, "Nut 1", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Nut 2", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Nut 3", "ihg", 0.8E6 * scale_hsource) + + m.Source(pbl, "Washer 1", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Washer 2", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Washer 3", "ihg", 0.8E6 * scale_hsource) + ''' + + nThreads = u.Initialize_Kokkos() + slv = m.IterativeSolver(pbl, solverList, 4, ensemble_size) + + slv.start() + u.Finalize_Kokkos() + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/tests/M1_assembly_fused.py b/katoptron/Juelich/tests/M1_assembly_fused.py new file mode 100644 index 0000000000000000000000000000000000000000..762dd765def1fae8f80f1725e23507db2ea6349d --- /dev/null +++ b/katoptron/Juelich/tests/M1_assembly_fused.py @@ -0,0 +1,559 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +import numpy as np +import shlex +import subprocess +import os +import tarfile +import glob + +from katoptron.Juelich.UQ.halton import * +from katoptron.Juelich.UQ.copulas import * + + +def irradiation(irradotion_index, p1=1., p3=1.95): + sigma_1_min = 0.1 + sigma_1_max = 0.1 + sigma_3_min = 0.05 + sigma_3_max = 0.05 + + sigma_1 = sigma_1_min + (sigma_1_max - sigma_1_min) * irradotion_index + sigma_3 = sigma_3_min + (sigma_3_max - sigma_3_min) * irradotion_index + + mode_min = 70 + mode_max = 180 + + mode_1 = mode_min + (mode_max - mode_min) * irradotion_index**p1 + mode_3 = mode_min + (mode_max - mode_min) * irradotion_index**p3 + + mu_1 = np.log(mode_1) # + sigma_1**2 + mu_3 = np.log(mode_3) # + sigma_3**2 + + return sigma_1, sigma_3, mode_1, mode_3, mu_1, mu_3 + + +def random_case(N, id_case): + comm, rank, siz = m.utilities.import_MPI() + np.random.seed(42) + + sigma = 0.15 + mode = 180 + mu = np.log(mode) + sigma**2 + + qMC = True + + if id_case == 'qMC 1': + n_rand = 2 + halton_points = np.zeros((n_rand, N)) + for i in range(0, N): + halton_points[:, i] = halton(i + 1, n_rand) + + randomVariable_halton = lognormal(halton_points, [mu, mu], + [sigma, sigma]) + randomVariable_1 = randomVariable_halton[0, :] + randomVariable_2 = randomVariable_halton[1, :] + randomVariable_3 = mode * np.ones((N, )) + elif id_case == 'MC 1': + randomVariable_1 = np.random.lognormal(mu, sigma, N) + randomVariable_2 = np.random.lognormal(mu, sigma, N) + randomVariable_3 = mode * np.ones((N, )) + elif id_case == 'qMC 2': + mode_min = 70 + mode_max = 180 + n_rand = 2 + halton_points = np.zeros((n_rand, N)) + for i in range(0, N): + halton_points[:, i] = halton(i, n_rand) + + randomVariable_halton = lognormal(halton_points, [mu, mu], + [sigma, sigma]) + randomVariable_1 = mode_min + (mode_max - + mode_min) * halton_points[0, :] + randomVariable_2 = mode_min + (mode_max - + mode_min) * halton_points[0, :] + randomVariable_3 = mode_min + (mode_max - + mode_min) * halton_points[1, :] + elif id_case == 'qMC 3': + from scipy.stats import lognorm + mode_min = 70 + mode_max = 180 + n_rand = 3 + halton_points = np.zeros((n_rand, N)) + + randomVariable_1 = np.zeros((N, )) + randomVariable_3 = np.zeros((N, )) + + for i in range(0, N): + halton_points[:, i] = halton(i + 1, n_rand) + sigma_1, sigma_3, mode_1, mode_3, mu_1, mu_3 = irradiation( + halton_points[0, i]) + randomVariable_1[i] = lognorm.ppf(halton_points[1, i], + sigma_1, + scale=np.exp(mu_1)) + randomVariable_3[i] = lognorm.ppf(halton_points[2, i], + sigma_3, + scale=np.exp(mu_3)) + + randomVariable_2 = randomVariable_1 + elif id_case == 'Xiao': + file_dir = os.path.dirname(__file__) + loaded = np.load(file_dir + '/../samples_files/Xiao_' + str(N) + + '.npz') + samples = loaded['samples'] + N = samples.shape[0] + weights = loaded['weights'] + randomVariable_1 = samples[0:N, 0] + randomVariable_3 = samples[0:N, 1] + randomVariable_2 = randomVariable_1 + + if rank == 0: + np.savetxt('randomVariable_1.txt', randomVariable_1) + np.savetxt('randomVariable_2.txt', randomVariable_2) + np.savetxt('randomVariable_3.txt', randomVariable_3) + + return randomVariable_1, randomVariable_2, randomVariable_3 + + +def material_option(option): + return int(option[-1]) + + +def clamping_option(option): + return str(option[0]) + + +def scale_msh(msh, scale): + for n in msh.nodes: + for i in range(0, 3): + n.pos[i] = n.pos[i] * scale + + +def tar_results(directory, filename, rank, all=False): + os.chdir(directory) + if rank == 0: + tf = tarfile.open(filename + ".tar.gz", mode="w:gz") + if all: + for file in glob.glob('*'): + if file.endswith(".tar.gz"): + print(file + ' is not included') + else: + tf.add(file) + else: + for file in glob.glob('r*.txt'): + tf.add(file) + for file in glob.glob('*/*/t*.txt'): + tf.add(file) + for file in glob.glob('*/*/b*.txt'): + tf.add(file) + for file in glob.glob('*/*/*.npz'): + tf.add(file) + for file in glob.glob('*/*/*.out'): + tf.add(file) + tf.close() + + +def evaluate_one_ensemble(ensemble_size, msh, comm, file_dir, randomVariable_1, + randomVariable_2, randomVariable_3, scale_u, + scale_T, option, baking=False): + + from fwk.wutils import parseargs + args = parseargs() + + from PyTrilinos import Teuchos + import numpy as np + + small_disk_footprint = False + use_block = True + + comm, rank, siz = m.utilities.import_MPI() + + solverList = Teuchos.ParameterList() + solverList['type'] = "BlockGmres" + + solverList['Maximum Iterations'] = 500 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['Use preconditioner'] = True + + solverList['Print Teuchos timers'] = True + solverList['Write txt files'] = True + if small_disk_footprint: + solverList['Write vtk files'] = False + + solverList['convert MueLu xml file'] = True + solverList["use xml file"] = True + + if use_block: + if ensemble_size >= 16 and siz == 2 and clamping_option(option) == "A": + solverList["Num Blocks"] = 150 + else: + solverList["Num Blocks"] = 200 + + solverList['Use blocked matrix'] = True + + solverList['Use blocked status test'] = True + solverList['Use blocked status test: x'] = True + solverList['Use blocked status test: T'] = True + solverList['Use weighted status test'] = True + + solverList['Ensemble Convergence Tolerance: T - relative'] = True + solverList['Ensemble Convergence Tolerance: x - relative'] = True + solverList[ + 'Ensemble Convergence Tolerance: T - relative full rhs'] = False + solverList[ + 'Ensemble Convergence Tolerance: x - relative full rhs'] = False + solverList[ + 'Ensemble Convergence Tolerance: weights - relative'] = False + + solverList['Ensemble Convergence Tolerance'] = 10**(-5) + solverList['Ensemble Convergence Tolerance: x'] = 10**(-6) + solverList['Ensemble Convergence Tolerance: T'] = 10**(-7) + solverList['Ensemble Convergence Tolerance: weights'] = 10**(-3) + + solverList[ + "MueLu xml file name"] = file_dir + '/../smoothers/AMG_BGS_gs_gs.xml' + else: + solverList['Ensemble Convergence Tolerance'] = 10**(-8) + solverList[ + "MueLu xml file name"] = file_dir + '/../smoothers/heat_no_contact_mtgs.xml' + + solverList["Scaled Block 0"] = True + pbl = m.Problem(msh, comm) + + # Distance in the mesh are represented in meters + + scale_E = 1. / scale_u**2 + scale_k = (scale_T / scale_u) + scale_hsource = 1. / scale_u**3 + scale_hflux = 1. / scale_u**2 + scale_d = scale_T + + # 379 000 MPa = 379 GPa = 379E9 Pa + E_rhodium = 379E9 * np.ones(ensemble_size) * scale_E + nu_rhodium = 0.26 * np.ones(ensemble_size) + # 0.150 kW/(m K) = 150 W/(m K) + k_rhodium = 150 * scale_k + d_rhodium = 0.781E-05 * scale_d + + E_WCu = 280E9 * np.ones(ensemble_size) * scale_E + nu_WCu = 0.298 * np.ones(ensemble_size) + k_WCu = 180 * scale_k + d_WCu = 0.88E-05 * scale_d + + E_SS = 200E9 * np.ones(ensemble_size) * scale_E + nu_SS = 0.3 * np.ones(ensemble_size) + k_SS = 15.3 * scale_k + d_SS = 1.57E-05 * scale_d + + E_CuCrZr = 118E9 * np.ones(ensemble_size) * scale_E + nu_CuCrZr = 0.33 * np.ones(ensemble_size) + k_CuCrZr = 345 * np.ones(ensemble_size) * scale_k + d_CuCrZr = 1.8E-05 * np.ones(ensemble_size) * scale_d + + E_AlN = 320E9 * np.ones(ensemble_size) * scale_E + nu_AlN = 0.24 * np.ones(ensemble_size) + k_AlN = 180 * np.ones(ensemble_size) * scale_k + d_AlN = 0.48E-05 * np.ones(ensemble_size) * scale_d + + E_I718 = 183E9 * np.ones(ensemble_size) * scale_E + nu_I718 = 0.31 * np.ones(ensemble_size) + k_I718 = 15.8 * scale_k + d_I718 = 1.38E-05 * scale_d + + T_ref = 22. + + m.Medium(pbl, "Mirror", "rhodium", E_rhodium, nu_rhodium, k_rhodium, + d_rhodium) + m.Medium(pbl, "Substrate", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + + if material_option(option) == 1: + m.Medium(pbl, "Holder", "SS", E_SS, nu_SS, k_SS, d_SS) + elif material_option(option) == 2: + m.Medium(pbl, "Holder", "CuCrZr", E_CuCrZr, nu_CuCrZr, k_CuCrZr, + d_CuCrZr) + + m.Medium(pbl, "Washer 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Shaft 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Nut 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Spacer 1 part 1", "AlN", E_AlN, nu_AlN, + randomVariable_1 * scale_k, d_AlN) + m.Medium(pbl, "Spacer 2 part 1", "AlN", E_AlN, nu_AlN, + randomVariable_2 * scale_k, d_AlN) + m.Medium(pbl, "Spacer 3 part 1", "AlN", E_AlN, nu_AlN, + randomVariable_3 * scale_k, d_AlN) + + m.Medium(pbl, "Spacer 1 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + m.Medium(pbl, "Spacer 2 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + m.Medium(pbl, "Spacer 3 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + + if clamping_option(option) == "A": + m.Dirichlet(pbl, "Holder z clamping", "Clamped", 0, 0., 0, 0., 1, 0., + 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder x-y clamping", "Clamped", 1, 0., 1, 0., 0, + 0., 0, 0., ensemble_size) + + elif clamping_option(option) == "B": + m.Dirichlet(pbl, "Holder x-y-z clamping point", "Clamped", 1, 0., 1, + 0., 1, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder z clamping point", "Clamped", 0, 0., 0, 0., + 1, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder z-y clamping point", "Clamped", 0, 0., 1, 0., + 1, 0., 0, 0., ensemble_size) + + m.Dirichlet(pbl, "Cooling channels", "Clamped", 0, 0., 0, 0., 0, 0., 1, + ((70. - T_ref) / scale_T), ensemble_size) + + if not baking: + zero = np.zeros(ensemble_size) + hf = 20. / 0.0121 * np.ones( + ensemble_size) * scale_hflux # 20 W / (0.0121 m^2) + + m.Neumann(pbl, "Mirror surface", "heat fluxes", 0, zero, 0, zero, 0, zero, + 1, hf, ensemble_size) + + m.Source(pbl, "Mirror", "ihg", 20E6 * scale_hsource) + m.Source(pbl, "Substrate", "ihg", 2.45E6 * scale_hsource) + + if material_option(option) == 1: + m.Source(pbl, "Holder", "ihg", 0.7E6 * scale_hsource) + elif material_option(option) == 2: + m.Source(pbl, "Holder", "ihg", 0.6E6 * scale_hsource) + + m.Source(pbl, "Spacer 1 part 1", "ihg", 0.3E6 * scale_hsource) + m.Source(pbl, "Spacer 2 part 1", "ihg", 0.3E6 * scale_hsource) + m.Source(pbl, "Spacer 3 part 1", "ihg", 0.3E6 * scale_hsource) + + m.Source(pbl, "Spacer 1 part 2", "ihg", 2.45E6 * scale_hsource) + m.Source(pbl, "Spacer 2 part 2", "ihg", 2.45E6 * scale_hsource) + m.Source(pbl, "Spacer 3 part 2", "ihg", 2.45E6 * scale_hsource) + + m.Source(pbl, "Shaft 1", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Shaft 2", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Shaft 3", "ihg", 0.8E6 * scale_hsource) + + m.Source(pbl, "Nut 1", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Nut 2", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Nut 3", "ihg", 0.8E6 * scale_hsource) + + m.Source(pbl, "Washer 1", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Washer 2", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Washer 3", "ihg", 0.8E6 * scale_hsource) + + if use_block: + m.Weight(pbl, "Mirror", 1, 0., 1, 0., 1, 1., 1, 0., ensemble_size) + + slv = m.IterativeSolver(pbl, args.k, solverList, 4, ensemble_size) + + slv.start() + + if rank == 0: + f = open('timers.txt', 'w') + print(slv.getTimers(), file=f) + f.closed + + tag_name = "Mirror surface" + name_sol = "x_mm.txt" + DOFperNode = 4 + which_dof = 2 + + x, y, z, tri, dz = u.extract_2D(msh, tag_name, DOFperNode, which_dof, + ensemble_size, name_sol) + which_dof = 3 + x, y, z, tri, T = u.extract_2D(msh, tag_name, DOFperNode, which_dof, + ensemble_size, name_sol) + np.savez('mirror_data_' + str(rank), x=x, y=y, z=z, tri=tri, dz=dz, T=T) + + if rank == 0: + for i in range(1, siz): + data = comm.recv(source=i, tag=11) + else: + comm.send(1, dest=0, tag=11) + + if small_disk_footprint: + if rank == 0: + os.remove(name_sol) + + if rank == 0: + #OAX = msh.ntags["Optical Axis"].elems[0].nodes[0].pos[0] + #OAY = msh.ntags["Optical Axis"].elems[0].nodes[0].pos[1] + OAX, OAY = 0.0595, 0.017 + OAX = (OAX / scale_u) + OAY = (OAY / scale_u) + #OAX, OAY = 0.0595, 0.017 + for i in range(0, siz): + npzfile = np.load('mirror_data_' + str(i) + '.npz') + x_i = npzfile['x'] + y_i = npzfile['y'] + z_i = 0. * x_i + dz_i = npzfile['dz'] + tri_i = npzfile['tri'] + T_i = npzfile['T'] + if i == 0: + x = x_i + y = y_i + z = z_i + dz = dz_i + tri = tri_i + T = T_i + nNodes = len(x) + else: + x = np.append(x, x_i, axis=0) + y = np.append(y, y_i, axis=0) + z = np.append(z, z_i, axis=0) + dz = np.append(dz, dz_i, axis=0) + tri = np.append(tri, tri_i + nNodes, axis=0) + T = np.append(T, T_i, axis=0) + nNodes = len(x) + x = (x / scale_u) + y = (y / scale_u) + z = (z / scale_u) + dz = (dz / scale_u) + T = T * scale_T + T_ref + np.savez('mirror_data_all', x=x, y=y, z=z, tri=tri, dz=dz, T=T) + for i in range(0, ensemble_size): + optical_coefficients, dz_residual = u.compute_RBM_Curvature_Irreg( + x, y, z, tri, dz[:, i], "m", np.array([OAX, OAY])) + np.savez('mirror_optical_results_' + str(i), + optical_coefficients=optical_coefficients, + dz_residual=dz_residual) + np.savetxt('mirror_optical_results_' + str(i) + '.out', + optical_coefficients) + + if small_disk_footprint: + if rank == 0: + for i in range(0, siz): + os.remove('mirror_data_' + str(i) + '.npz') + + +def evaluate_all_ensembles(ensemble_sizes, N, msh, comm, rank, size, file_dir, + randomVariable1, randomVariable2, randomVariable3, + scale_u, scale_T, option, baking=False): + """ + This function loop over the ensemble sizes, + and the ensembles + """ + for ensemble_size in ensemble_sizes: + directory = str(ensemble_size) + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + + N_ensemble = int(np.floor(N // ensemble_size)) + + ensemble_index_min = 0 + for ensemble_index in range(ensemble_index_min, N_ensemble): + directory = str(ensemble_index) + u.mkdir_MPI(option, comm, rank, size) + os.chdir(option) + + ensemble_index_start = ensemble_index * ensemble_size + ensemble_index_end = ensemble_index_start + ensemble_size + + randomVariable_cur1 = randomVariable1[ensemble_index_start: + ensemble_index_end] + + randomVariable_cur2 = randomVariable2[ensemble_index_start: + ensemble_index_end] + + randomVariable_cur3 = randomVariable3[ensemble_index_start: + ensemble_index_end] + + evaluate_one_ensemble(ensemble_size, msh, comm, file_dir, + randomVariable_cur1, randomVariable_cur2, + randomVariable_cur3, scale_u, scale_T, option, baking) + os.chdir('..') + os.chdir('..') + + +def main(): + comm, rank, size = m.utilities.import_MPI() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + directory = 'MPI_' + str(size) + u.mkdir_MPI(option, comm, rank, size) + os.chdir(option) + + mesh_name = 'fused_mirror_assembly_mm_part_' + str(size) + '.msh' + + msh = gmsh.MeshLoader(mesh_name, work_dir).execute(myrank=rank) + + scale_u_1 = 1000. + scale_u_2 = 1. + scale_u = scale_u_1 * scale_u_2 + scale_T = 1. + + scale_msh(msh, scale_u_2) + + randomVariable_1 = np.array([180., 30.]) + randomVariable_2 = np.array([180., 30.]) + randomVariable_3 = np.array([180., 30.]) + + ensemble_size = int(os.getenv('ensemble_size', 1)) + + ensemble_sizes = [ensemble_size] + + N = 2 + + option = 'A2' + + directory = 'A2_baking' + u.mkdir_MPI(option, comm, rank, size) + os.chdir(option) + + evaluate_all_ensembles(ensemble_sizes, N, msh, comm, rank, size, file_dir, + randomVariable_1, randomVariable_2, + randomVariable_3, scale_u, scale_T, option, baking=True) + os.chdir('..') + + directory = 'A2' + u.mkdir_MPI(option, comm, rank, size) + os.chdir(option) + + evaluate_all_ensembles(ensemble_sizes, N, msh, comm, file_dir, + randomVariable_1, randomVariable_2, + randomVariable_3, scale_u, scale_T, option, baking=False) + os.chdir('..') + + option = 'B2' + + directory = 'B2_baking' + u.mkdir_MPI(option, comm, rank, size) + os.chdir(option) + + evaluate_all_ensembles(ensemble_sizes, N, msh, comm, file_dir, + randomVariable_1, randomVariable_2, + randomVariable_3, scale_u, scale_T, option, baking=True) + os.chdir('..') + + directory = 'B2' + u.mkdir_MPI(option, comm, rank, size) + os.chdir(option) + + evaluate_all_ensembles(ensemble_sizes, N, msh, comm, file_dir, + randomVariable_1, randomVariable_2, + randomVariable_3, scale_u, scale_T, option, baking=False) + os.chdir('..') + + os.chdir('..') + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/tests/M1_assembly_fused_MC_k.py b/katoptron/Juelich/tests/M1_assembly_fused_MC_k.py new file mode 100644 index 0000000000000000000000000000000000000000..185b585cf99a8e368827aeb19a51e2e79fb63e32 --- /dev/null +++ b/katoptron/Juelich/tests/M1_assembly_fused_MC_k.py @@ -0,0 +1,545 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +import numpy as np +import shlex +import subprocess +import os +import tarfile +import glob + +from katoptron.Juelich.UQ.halton import * +from katoptron.Juelich.UQ.copulas import * + + +def irradiation(irradotion_index, p1=1., p3=1.95): + sigma_1_min = 0.1 + sigma_1_max = 0.1 + sigma_3_min = 0.05 + sigma_3_max = 0.05 + + sigma_1 = sigma_1_min + (sigma_1_max - sigma_1_min) * irradotion_index + sigma_3 = sigma_3_min + (sigma_3_max - sigma_3_min) * irradotion_index + + mode_min = 70 + mode_max = 180 + + mode_1 = mode_min + (mode_max - mode_min) * irradotion_index**p1 + mode_3 = mode_min + (mode_max - mode_min) * irradotion_index**p3 + + mu_1 = np.log(mode_1) # + sigma_1**2 + mu_3 = np.log(mode_3) # + sigma_3**2 + + return sigma_1, sigma_3, mode_1, mode_3, mu_1, mu_3 + + +def random_case(N, id_case): + comm, rank, siz = m.utilities.import_MPI() + np.random.seed(42) + + sigma = 0.15 + mode = 180 + mu = np.log(mode) + sigma**2 + + qMC = True + + if id_case == 'qMC 1': + n_rand = 2 + halton_points = np.zeros((n_rand, N)) + for i in range(0, N): + halton_points[:, i] = halton(i + 1, n_rand) + + randomVariable_halton = lognormal(halton_points, [mu, mu], + [sigma, sigma]) + randomVariable_1 = randomVariable_halton[0, :] + randomVariable_2 = randomVariable_halton[1, :] + randomVariable_3 = mode * np.ones((N, )) + elif id_case == 'MC 1': + randomVariable_1 = np.random.lognormal(mu, sigma, N) + randomVariable_2 = np.random.lognormal(mu, sigma, N) + randomVariable_3 = mode * np.ones((N, )) + elif id_case == 'qMC 2': + mode_min = 70 + mode_max = 180 + n_rand = 2 + halton_points = np.zeros((n_rand, N)) + for i in range(0, N): + halton_points[:, i] = halton(i, n_rand) + + randomVariable_halton = lognormal(halton_points, [mu, mu], + [sigma, sigma]) + randomVariable_1 = mode_min + (mode_max - + mode_min) * halton_points[0, :] + randomVariable_2 = mode_min + (mode_max - + mode_min) * halton_points[0, :] + randomVariable_3 = mode_min + (mode_max - + mode_min) * halton_points[1, :] + elif id_case == 'qMC 3': + from scipy.stats import lognorm + mode_min = 70 + mode_max = 180 + n_rand = 3 + halton_points = np.zeros((n_rand, N)) + + randomVariable_1 = np.zeros((N, )) + randomVariable_3 = np.zeros((N, )) + + for i in range(0, N): + halton_points[:, i] = halton(i + 1, n_rand) + sigma_1, sigma_3, mode_1, mode_3, mu_1, mu_3 = irradiation( + halton_points[0, i]) + randomVariable_1[i] = lognorm.ppf(halton_points[1, i], + sigma_1, + scale=np.exp(mu_1)) + randomVariable_3[i] = lognorm.ppf(halton_points[2, i], + sigma_3, + scale=np.exp(mu_3)) + + randomVariable_2 = randomVariable_1 + elif id_case == 'Xiao': + file_dir = os.path.dirname(__file__) + loaded = np.load(file_dir + '/../samples_files/Xiao_' + str(N) + + '.npz') + samples = loaded['samples'] + N = samples.shape[0] + weights = loaded['weights'] + randomVariable_1 = samples[0:N, 0] + randomVariable_3 = samples[0:N, 1] + randomVariable_2 = randomVariable_1 + + if rank == 0: + np.savetxt('randomVariable_1.txt', randomVariable_1) + np.savetxt('randomVariable_2.txt', randomVariable_2) + np.savetxt('randomVariable_3.txt', randomVariable_3) + + return randomVariable_1, randomVariable_2, randomVariable_3 + + +def material_option(option): + return int(option[-1]) + + +def clamping_option(option): + return str(option[0]) + + +def scale_msh(msh, scale): + for n in msh.nodes: + for i in range(0, 3): + n.pos[i] = n.pos[i] * scale + + +def tar_results(directory, filename, rank, all=False): + os.chdir(directory) + if rank == 0: + tf = tarfile.open(filename + ".tar.gz", mode="w:gz") + if all: + for file in glob.glob('*'): + if file.endswith(".tar.gz"): + print(file + ' is not included') + else: + tf.add(file) + else: + for file in glob.glob('r*.txt'): + tf.add(file) + for file in glob.glob('*/*/t*.txt'): + tf.add(file) + for file in glob.glob('*/*/b*.txt'): + tf.add(file) + for file in glob.glob('*/*/*.npz'): + tf.add(file) + for file in glob.glob('*/*/*.out'): + tf.add(file) + tf.close() + + +def evaluate_one_ensemble(ensemble_size, msh, comm, file_dir, randomVariable_1, + randomVariable_2, randomVariable_3, scale_u, + scale_T): + + from fwk.wutils import parseargs + args = parseargs() + + from PyTrilinos import Teuchos + import numpy as np + + small_disk_footprint = True + use_block = True + + comm, rank, siz = m.utilities.import_MPI() + + option = 'A2' + + solverList = Teuchos.ParameterList() + solverList['type'] = "BlockGmres" + + solverList['Maximum Iterations'] = 500 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['Use preconditioner'] = True + + solverList['Print Teuchos timers'] = True + solverList['Write txt files'] = True + if small_disk_footprint: + solverList['Write vtk files'] = False + + solverList['convert MueLu xml file'] = True + solverList["use xml file"] = True + + if use_block: + if ensemble_size >= 16 and siz == 2 and clamping_option(option) == "A": + solverList["Num Blocks"] = 150 + else: + solverList["Num Blocks"] = 200 + + solverList['Use blocked matrix'] = True + + solverList['Use blocked status test'] = True + solverList['Use blocked status test: x'] = True + solverList['Use blocked status test: T'] = True + solverList['Use weighted status test'] = True + + solverList['Ensemble Convergence Tolerance: T - relative'] = True + solverList['Ensemble Convergence Tolerance: x - relative'] = True + solverList[ + 'Ensemble Convergence Tolerance: T - relative full rhs'] = False + solverList[ + 'Ensemble Convergence Tolerance: x - relative full rhs'] = False + solverList[ + 'Ensemble Convergence Tolerance: weights - relative'] = False + + solverList['Ensemble Convergence Tolerance'] = 10**(-5) + solverList['Ensemble Convergence Tolerance: x'] = 10**(-6) + solverList['Ensemble Convergence Tolerance: T'] = 10**(-7) + solverList['Ensemble Convergence Tolerance: weights'] = 10**(-3) + + solverList[ + "MueLu xml file name"] = file_dir + '/../smoothers/AMG_BGS_gs_gs.xml' + else: + solverList['Ensemble Convergence Tolerance'] = 10**(-8) + solverList[ + "MueLu xml file name"] = file_dir + '/../smoothers/heat_no_contact_mtgs.xml' + + solverList["Scaled Block 0"] = True + pbl = m.Problem(msh, comm) + + # Distance in the mesh are represented in meters + + scale_E = 1. / scale_u**2 + scale_k = (scale_T / scale_u) + scale_hsource = 1. / scale_u**3 + scale_hflux = 1. / scale_u**2 + scale_d = scale_T + + # 379 000 MPa = 379 GPa = 379E9 Pa + E_rhodium = 379E9 * np.ones(ensemble_size) * scale_E + nu_rhodium = 0.26 * np.ones(ensemble_size) + # 0.150 kW/(m K) = 150 W/(m K) + k_rhodium = 150 * scale_k + d_rhodium = 0.781E-05 * scale_d + + E_WCu = 280E9 * np.ones(ensemble_size) * scale_E + nu_WCu = 0.298 * np.ones(ensemble_size) + k_WCu = 180 * scale_k + d_WCu = 0.88E-05 * scale_d + + E_SS = 200E9 * np.ones(ensemble_size) * scale_E + nu_SS = 0.3 * np.ones(ensemble_size) + k_SS = 15.3 * scale_k + d_SS = 1.57E-05 * scale_d + + E_CuCrZr = 118E9 * np.ones(ensemble_size) * scale_E + nu_CuCrZr = 0.33 * np.ones(ensemble_size) + k_CuCrZr = 345 * np.ones(ensemble_size) * scale_k + d_CuCrZr = 1.8E-05 * np.ones(ensemble_size) * scale_d + + E_AlN = 320E9 * np.ones(ensemble_size) * scale_E + nu_AlN = 0.24 * np.ones(ensemble_size) + k_AlN = 180 * np.ones(ensemble_size) * scale_k + d_AlN = 0.48E-05 * np.ones(ensemble_size) * scale_d + + E_I718 = 183E9 * np.ones(ensemble_size) * scale_E + nu_I718 = 0.31 * np.ones(ensemble_size) + k_I718 = 15.8 * scale_k + d_I718 = 1.38E-05 * scale_d + + T_ref = 22. + + m.Medium(pbl, "Mirror", "rhodium", E_rhodium, nu_rhodium, k_rhodium, + d_rhodium) + m.Medium(pbl, "Substrate", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + + if material_option(option) == 1: + m.Medium(pbl, "Holder", "SS", E_SS, nu_SS, k_SS, d_SS) + elif material_option(option) == 2: + m.Medium(pbl, "Holder", "CuCrZr", E_CuCrZr, nu_CuCrZr, k_CuCrZr, + d_CuCrZr) + + m.Medium(pbl, "Washer 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Shaft 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Nut 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Spacer 1 part 1", "AlN", E_AlN, nu_AlN, + randomVariable_1 * scale_k, d_AlN) + m.Medium(pbl, "Spacer 2 part 1", "AlN", E_AlN, nu_AlN, + randomVariable_2 * scale_k, d_AlN) + m.Medium(pbl, "Spacer 3 part 1", "AlN", E_AlN, nu_AlN, + randomVariable_3 * scale_k, d_AlN) + + m.Medium(pbl, "Spacer 1 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + m.Medium(pbl, "Spacer 2 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + m.Medium(pbl, "Spacer 3 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + + if clamping_option(option) == "A": + m.Dirichlet(pbl, "Holder z clamping", "Clamped", 0, 0., 0, 0., 1, 0., + 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder x-y clamping", "Clamped", 1, 0., 1, 0., 0, + 0., 0, 0., ensemble_size) + + elif clamping_option(option) == "B": + m.Dirichlet(pbl, "Holder x-y-z clamping point", "Clamped", 1, 0., 1, + 0., 1, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder z clamping point", "Clamped", 0, 0., 0, 0., + 1, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder z-y clamping point", "Clamped", 0, 0., 1, 0., + 1, 0., 0, 0., ensemble_size) + + m.Dirichlet(pbl, "Cooling channels", "Clamped", 0, 0., 0, 0., 0, 0., 1, + ((70. - T_ref) / scale_T), ensemble_size) + + zero = np.zeros(ensemble_size) + hf = 20. / 0.0121 * np.ones( + ensemble_size) * scale_hflux # 20 W / (0.0121 m^2) + + m.Neumann(pbl, "Mirror surface", "heat fluxes", 0, zero, 0, zero, 0, zero, + 1, hf, ensemble_size) + + m.Source(pbl, "Mirror", "ihg", 20E6 * scale_hsource) + m.Source(pbl, "Substrate", "ihg", 2.45E6 * scale_hsource) + + if material_option(option) == 1: + m.Source(pbl, "Holder", "ihg", 0.7E6 * scale_hsource) + elif material_option(option) == 2: + m.Source(pbl, "Holder", "ihg", 0.6E6 * scale_hsource) + + m.Source(pbl, "Spacer 1 part 1", "ihg", 0.3E6 * scale_hsource) + m.Source(pbl, "Spacer 2 part 1", "ihg", 0.3E6 * scale_hsource) + m.Source(pbl, "Spacer 3 part 1", "ihg", 0.3E6 * scale_hsource) + + m.Source(pbl, "Spacer 1 part 2", "ihg", 2.45E6 * scale_hsource) + m.Source(pbl, "Spacer 2 part 2", "ihg", 2.45E6 * scale_hsource) + m.Source(pbl, "Spacer 3 part 2", "ihg", 2.45E6 * scale_hsource) + + m.Source(pbl, "Shaft 1", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Shaft 2", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Shaft 3", "ihg", 0.8E6 * scale_hsource) + + m.Source(pbl, "Nut 1", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Nut 2", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Nut 3", "ihg", 0.8E6 * scale_hsource) + + m.Source(pbl, "Washer 1", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Washer 2", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Washer 3", "ihg", 0.8E6 * scale_hsource) + + if use_block: + m.Weight(pbl, "Mirror", 1, 0., 1, 0., 1, 1., 1, 0., ensemble_size) + + slv = m.IterativeSolver(pbl, args.k, solverList, 4, ensemble_size) + + slv.start() + + if rank == 0: + f = open('timers.txt', 'w') + print(slv.getTimers(), file=f) + f.closed + + tag_name = "Mirror surface" + name_sol = "x_mm.txt" + DOFperNode = 4 + which_dof = 2 + + x, y, z, tri, dz = u.extract_2D(msh, tag_name, DOFperNode, which_dof, + ensemble_size, name_sol) + which_dof = 3 + x, y, z, tri, T = u.extract_2D(msh, tag_name, DOFperNode, which_dof, + ensemble_size, name_sol) + np.savez('mirror_data_' + str(rank), x=x, y=y, z=z, tri=tri, dz=dz, T=T) + + if rank == 0: + for i in range(1, siz): + data = comm.recv(source=i, tag=11) + else: + comm.send(1, dest=0, tag=11) + + if small_disk_footprint: + if rank == 0: + os.remove(name_sol) + + if rank == 0: + #OAX = msh.ntags["Optical Axis"].elems[0].nodes[0].pos[0] + #OAY = msh.ntags["Optical Axis"].elems[0].nodes[0].pos[1] + OAX, OAY = 0.0595, 0.017 + OAX = (OAX / scale_u) + OAY = (OAY / scale_u) + #OAX, OAY = 0.0595, 0.017 + for i in range(0, siz): + npzfile = np.load('mirror_data_' + str(i) + '.npz') + x_i = npzfile['x'] + y_i = npzfile['y'] + z_i = 0. * x_i + dz_i = npzfile['dz'] + tri_i = npzfile['tri'] + T_i = npzfile['T'] + if i == 0: + x = x_i + y = y_i + z = z_i + dz = dz_i + tri = tri_i + T = T_i + nNodes = len(x) + else: + x = np.append(x, x_i, axis=0) + y = np.append(y, y_i, axis=0) + z = np.append(z, z_i, axis=0) + dz = np.append(dz, dz_i, axis=0) + tri = np.append(tri, tri_i + nNodes, axis=0) + T = np.append(T, T_i, axis=0) + nNodes = len(x) + x = (x / scale_u) + y = (y / scale_u) + z = (z / scale_u) + dz = (dz / scale_u) + T = T * scale_T + T_ref + np.savez('mirror_data_all', x=x, y=y, z=z, tri=tri, dz=dz, T=T) + for i in range(0, ensemble_size): + optical_coefficients, dz_residual = u.compute_RBM_Curvature_Irreg( + x, y, z, tri, dz[:, i], "m", np.array([OAX, OAY])) + np.savez('mirror_optical_results_' + str(i), + optical_coefficients=optical_coefficients, + dz_residual=dz_residual) + np.savetxt('mirror_optical_results_' + str(i) + '.out', + optical_coefficients) + + if small_disk_footprint: + if rank == 0: + for i in range(0, siz): + os.remove('mirror_data_' + str(i) + '.npz') + + +def evaluate_all_ensembles(ensemble_sizes, N, msh, comm, file_dir, + randomVariable1, randomVariable2, randomVariable3, + scale_u, scale_T): + """ + This function loop over the ensemble sizes, + and the ensembles + """ + comm, rank, size = m.utilities.import_MPI() + for ensemble_size in ensemble_sizes: + directory = str(ensemble_size) + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + + N_ensemble = int(np.floor(N // ensemble_size)) + + ensemble_index_min = 0 + for ensemble_index in range(ensemble_index_min, N_ensemble): + directory = str(ensemble_index) + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + + ensemble_index_start = ensemble_index * ensemble_size + ensemble_index_end = ensemble_index_start + ensemble_size + + randomVariable_cur1 = randomVariable1[ensemble_index_start: + ensemble_index_end] + + randomVariable_cur2 = randomVariable2[ensemble_index_start: + ensemble_index_end] + + randomVariable_cur3 = randomVariable3[ensemble_index_start: + ensemble_index_end] + + evaluate_one_ensemble(ensemble_size, msh, comm, file_dir, + randomVariable_cur1, randomVariable_cur2, + randomVariable_cur3, scale_u, scale_T) + os.chdir('..') + os.chdir('..') + + +def main(): + comm, rank, size = m.utilities.import_MPI() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + directory = 'MPI_' + str(siz) + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + mesh_name = 'fused_mirror_assembly_mm_part_' + str(siz) + '.msh' + + msh = gmsh.MeshLoader(mesh_name, work_dir).execute(myrank=rank) + + # sigma = 0.05 + # Scaled = True, tol = 10**(-8), scale_T=1 + # 1 -> 55 (m) -> smooth T QoI unsmooth u QoI + # 1000 -> 125 (mm) -> smooth T QoI unsmooth u QoI + # 10 000 -> 126 (100 \mu m) -> smooth T QoI nearly smooth u QoI + # 50 000 -> 167 (20 \mu m) -> smooth T QoI nearly smooth u QoI + # 100 000 -> 175 (10 \mu m) -> smooth QoI (OK) + # Scaled = False, tol = 10**(-8), scale_T=1 + # 1 -> 222 (m) -> Solver has experienced a loss of accuracy! + # 1000 -> 222 (mm) + # 10 000 -> (100 \mu m) + # 100 000 -> 222 (10 \mu m) -> No loss of accuracy + # Scaled = True, tol = 10**(-8), + # scale_u = 1000. and scale_T = 1. -> 125 (KO) + # scale_u = 1000. and scale_T = 100. -> 174 nearly smooth + # scale_u = 10000. and scale_T = 1. -> 126 (KO) + # scale_u = 10000. and scale_T = 100. -> 204 (OK) + # scale_u = 10000. and scale_T = 400. -> 217 (OK) + + scale_u_1 = 1000. + scale_u_2 = 1. + scale_u = scale_u_1 * scale_u_2 + scale_T = 1. + + scale_msh(msh, scale_u_2) + + N = 20 + id_case = 'Xiao' + + randomVariable_1, randomVariable_2, randomVariable_3 = random_case( + N, id_case) + + ensemble_size = int(os.getenv('ensemble_size', 1)) + + ensemble_sizes = [ensemble_size] + + N = len(randomVariable_1) + + evaluate_all_ensembles(ensemble_sizes, N, msh, comm, file_dir, + randomVariable_1, randomVariable_2, + randomVariable_3, scale_u, scale_T) + + os.chdir('..') + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/tests/M1_assembly_fused_MC_k_order.py b/katoptron/Juelich/tests/M1_assembly_fused_MC_k_order.py new file mode 100644 index 0000000000000000000000000000000000000000..565e6e0a9f0f10b720cbed7679e83fbedfaa467e --- /dev/null +++ b/katoptron/Juelich/tests/M1_assembly_fused_MC_k_order.py @@ -0,0 +1,554 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +import numpy as np +import shlex +import subprocess +import os +import tarfile +import glob + +from katoptron.Juelich.UQ.halton import * +from katoptron.Juelich.UQ.copulas import * + + +def irradiation(irradotion_index, p1=1., p3=1.95): + sigma_1_min = 0.1 + sigma_1_max = 0.1 + sigma_3_min = 0.05 + sigma_3_max = 0.05 + + sigma_1 = sigma_1_min + (sigma_1_max - sigma_1_min) * irradotion_index + sigma_3 = sigma_3_min + (sigma_3_max - sigma_3_min) * irradotion_index + + mode_min = 70 + mode_max = 180 + + mode_1 = mode_min + (mode_max - mode_min) * irradotion_index**p1 + mode_3 = mode_min + (mode_max - mode_min) * irradotion_index**p3 + + mu_1 = np.log(mode_1) # + sigma_1**2 + mu_3 = np.log(mode_3) # + sigma_3**2 + + return sigma_1, sigma_3, mode_1, mode_3, mu_1, mu_3 + + +def random_case(N, id_case): + comm, rank, siz = m.utilities.import_MPI() + np.random.seed(42) + + sigma = 0.15 + mode = 180 + mu = np.log(mode) + sigma**2 + + qMC = True + + if id_case == 'qMC 1': + n_rand = 2 + halton_points = np.zeros((n_rand, N)) + for i in range(0, N): + halton_points[:, i] = halton(i + 1, n_rand) + + randomVariable_halton = lognormal(halton_points, [mu, mu], + [sigma, sigma]) + randomVariable_1 = randomVariable_halton[0, :] + randomVariable_2 = randomVariable_halton[1, :] + randomVariable_3 = mode * np.ones((N, )) + elif id_case == 'MC 1': + randomVariable_1 = np.random.lognormal(mu, sigma, N) + randomVariable_2 = np.random.lognormal(mu, sigma, N) + randomVariable_3 = mode * np.ones((N, )) + elif id_case == 'qMC 2': + mode_min = 70 + mode_max = 180 + n_rand = 2 + halton_points = np.zeros((n_rand, N)) + for i in range(0, N): + halton_points[:, i] = halton(i, n_rand) + + randomVariable_halton = lognormal(halton_points, [mu, mu], + [sigma, sigma]) + randomVariable_1 = mode_min + (mode_max - + mode_min) * halton_points[0, :] + randomVariable_2 = mode_min + (mode_max - + mode_min) * halton_points[0, :] + randomVariable_3 = mode_min + (mode_max - + mode_min) * halton_points[1, :] + elif id_case == 'qMC 3': + from scipy.stats import lognorm + mode_min = 70 + mode_max = 180 + n_rand = 3 + halton_points = np.zeros((n_rand, N)) + + randomVariable_1 = np.zeros((N, )) + randomVariable_3 = np.zeros((N, )) + + for i in range(0, N): + halton_points[:, i] = halton(i + 1, n_rand) + sigma_1, sigma_3, mode_1, mode_3, mu_1, mu_3 = irradiation( + halton_points[0, i]) + randomVariable_1[i] = lognorm.ppf(halton_points[1, i], + sigma_1, + scale=np.exp(mu_1)) + randomVariable_3[i] = lognorm.ppf(halton_points[2, i], + sigma_3, + scale=np.exp(mu_3)) + + randomVariable_2 = randomVariable_1 + elif id_case == 'Xiao': + file_dir = os.path.dirname(__file__) + loaded = np.load(file_dir + '/../samples_files/Xiao_' + str(N) + + '.npz') + samples = loaded['samples'] + N = samples.shape[0] + weights = loaded['weights'] + randomVariable_1 = samples[0:N, 0] + randomVariable_3 = samples[0:N, 1] + randomVariable_2 = randomVariable_1 + + if rank == 0: + np.savetxt('randomVariable_1.txt', randomVariable_1) + np.savetxt('randomVariable_2.txt', randomVariable_2) + np.savetxt('randomVariable_3.txt', randomVariable_3) + + return randomVariable_1, randomVariable_2, randomVariable_3 + + +def material_option(option): + return int(option[-1]) + + +def clamping_option(option): + return str(option[0]) + + +def scale_msh(msh, scale): + for n in msh.nodes: + for i in range(0, 3): + n.pos[i] = n.pos[i] * scale + + +def tar_results(directory, filename, rank, all=False): + os.chdir(directory) + if rank == 0: + tf = tarfile.open(filename + ".tar.gz", mode="w:gz") + if all: + for file in glob.glob('*'): + if file.endswith(".tar.gz"): + print(file + ' is not included') + else: + tf.add(file) + else: + for file in glob.glob('r*.txt'): + tf.add(file) + for file in glob.glob('*/*/t*.txt'): + tf.add(file) + for file in glob.glob('*/*/b*.txt'): + tf.add(file) + for file in glob.glob('*/*/*.npz'): + tf.add(file) + for file in glob.glob('*/*/*.out'): + tf.add(file) + tf.close() + + +def evaluate_one_ensemble(ensemble_size, msh, comm, file_dir, randomVariable_1, + randomVariable_2, randomVariable_3, scale_u, + scale_T): + + from fwk.wutils import parseargs + args = parseargs() + + from PyTrilinos import Teuchos + import numpy as np + + small_disk_footprint = True + use_block = True + + comm, rank, siz = m.utilities.import_MPI() + + option = 'A2' + + solverList = Teuchos.ParameterList() + solverList['type'] = "BlockGmres" + + solverList['Maximum Iterations'] = 500 + solverList["Num Blocks"] = 2 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['Use preconditioner'] = True + + solverList['Print Teuchos timers'] = True + solverList['Write txt files'] = True + if small_disk_footprint: + solverList['Write vtk files'] = False + + solverList['convert MueLu xml file'] = True + solverList["use xml file"] = True + + solverList['Write matrix and vectors'] = False + + if use_block: + if ensemble_size >= 16 and siz == 2 and clamping_option(option) == "A": + solverList["Num Blocks"] = 150 + else: + solverList["Num Blocks"] = 200 + + solverList['Use blocked matrix'] = True + + solverList['Use blocked status test'] = True + solverList['Use blocked status test: x'] = True + solverList['Use blocked status test: T'] = True + solverList['Use weighted status test'] = True + + solverList['Ensemble Convergence Tolerance: T - relative'] = True + solverList['Ensemble Convergence Tolerance: x - relative'] = True + solverList[ + 'Ensemble Convergence Tolerance: T - relative full rhs'] = False + solverList[ + 'Ensemble Convergence Tolerance: x - relative full rhs'] = False + solverList[ + 'Ensemble Convergence Tolerance: weights - relative'] = False + + solverList['Ensemble Convergence Tolerance'] = 10**(-5) + solverList['Ensemble Convergence Tolerance: x'] = 10**(-6) + solverList['Ensemble Convergence Tolerance: T'] = 10**(-7) + solverList['Ensemble Convergence Tolerance: weights'] = 10**(-3) + + solverList[ + "MueLu xml file name"] = file_dir + '/../smoothers/AMG_BGS_gs_gs.xml' + else: + solverList['Ensemble Convergence Tolerance'] = 10**(-8) + solverList[ + "MueLu xml file name"] = file_dir + '/../smoothers/heat_no_contact_mtgs.xml' + + solverList["Scaled Block 0"] = True + pbl = m.Problem(msh, comm) + + # Distance in the mesh are represented in meters + + scale_E = 1. / scale_u**2 + scale_k = (scale_T / scale_u) + scale_hsource = 1. / scale_u**3 + scale_hflux = 1. / scale_u**2 + scale_d = scale_T + + # 379 000 MPa = 379 GPa = 379E9 Pa + E_rhodium = 379E9 * np.ones(ensemble_size) * scale_E + nu_rhodium = 0.26 * np.ones(ensemble_size) + # 0.150 kW/(m K) = 150 W/(m K) + k_rhodium = 150 * scale_k + d_rhodium = 0.781E-05 * scale_d + + E_WCu = 280E9 * np.ones(ensemble_size) * scale_E + nu_WCu = 0.298 * np.ones(ensemble_size) + k_WCu = 180 * scale_k + d_WCu = 0.88E-05 * scale_d + + E_SS = 200E9 * np.ones(ensemble_size) * scale_E + nu_SS = 0.3 * np.ones(ensemble_size) + k_SS = 15.3 * scale_k + d_SS = 1.57E-05 * scale_d + + E_CuCrZr = 118E9 * np.ones(ensemble_size) * scale_E + nu_CuCrZr = 0.33 * np.ones(ensemble_size) + k_CuCrZr = 345 * np.ones(ensemble_size) * scale_k + d_CuCrZr = 1.8E-05 * np.ones(ensemble_size) * scale_d + + E_AlN = 320E9 * np.ones(ensemble_size) * scale_E + nu_AlN = 0.24 * np.ones(ensemble_size) + k_AlN = 180 * np.ones(ensemble_size) * scale_k + d_AlN = 0.48E-05 * np.ones(ensemble_size) * scale_d + + E_I718 = 183E9 * np.ones(ensemble_size) * scale_E + nu_I718 = 0.31 * np.ones(ensemble_size) + k_I718 = 15.8 * scale_k + d_I718 = 1.38E-05 * scale_d + + T_ref = 22. + + m.Medium(pbl, "Mirror", "rhodium", E_rhodium, nu_rhodium, k_rhodium, + d_rhodium) + m.Medium(pbl, "Substrate", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + + if material_option(option) == 1: + m.Medium(pbl, "Holder", "SS", E_SS, nu_SS, k_SS, d_SS) + elif material_option(option) == 2: + m.Medium(pbl, "Holder", "CuCrZr", E_CuCrZr, nu_CuCrZr, k_CuCrZr, + d_CuCrZr) + + m.Medium(pbl, "Washer 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Shaft 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Nut 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Spacer 1 part 1", "AlN", E_AlN, nu_AlN, + randomVariable_1 * scale_k, d_AlN) + m.Medium(pbl, "Spacer 2 part 1", "AlN", E_AlN, nu_AlN, + randomVariable_2 * scale_k, d_AlN) + m.Medium(pbl, "Spacer 3 part 1", "AlN", E_AlN, nu_AlN, + randomVariable_3 * scale_k, d_AlN) + + m.Medium(pbl, "Spacer 1 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + m.Medium(pbl, "Spacer 2 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + m.Medium(pbl, "Spacer 3 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + + if clamping_option(option) == "A": + m.Dirichlet(pbl, "Holder z clamping", "Clamped", 0, 0., 0, 0., 1, 0., + 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder x-y clamping", "Clamped", 1, 0., 1, 0., 0, + 0., 0, 0., ensemble_size) + + elif clamping_option(option) == "B": + m.Dirichlet(pbl, "Holder x-y-z clamping point", "Clamped", 1, 0., 1, + 0., 1, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder z clamping point", "Clamped", 0, 0., 0, 0., + 1, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder z-y clamping point", "Clamped", 0, 0., 1, 0., + 1, 0., 0, 0., ensemble_size) + + m.Dirichlet(pbl, "Cooling channels", "Clamped", 0, 0., 0, 0., 0, 0., 1, + ((70. - T_ref) / scale_T), ensemble_size) + + zero = np.zeros(ensemble_size) + hf = 20. / 0.0121 * np.ones( + ensemble_size) * scale_hflux # 20 W / (0.0121 m^2) + + m.Neumann(pbl, "Mirror surface", "heat fluxes", 0, zero, 0, zero, 0, zero, + 1, hf, ensemble_size) + + m.Source(pbl, "Mirror", "ihg", 20E6 * scale_hsource) + m.Source(pbl, "Substrate", "ihg", 2.45E6 * scale_hsource) + + if material_option(option) == 1: + m.Source(pbl, "Holder", "ihg", 0.7E6 * scale_hsource) + elif material_option(option) == 2: + m.Source(pbl, "Holder", "ihg", 0.6E6 * scale_hsource) + + m.Source(pbl, "Spacer 1 part 1", "ihg", 0.3E6 * scale_hsource) + m.Source(pbl, "Spacer 2 part 1", "ihg", 0.3E6 * scale_hsource) + m.Source(pbl, "Spacer 3 part 1", "ihg", 0.3E6 * scale_hsource) + + m.Source(pbl, "Spacer 1 part 2", "ihg", 2.45E6 * scale_hsource) + m.Source(pbl, "Spacer 2 part 2", "ihg", 2.45E6 * scale_hsource) + m.Source(pbl, "Spacer 3 part 2", "ihg", 2.45E6 * scale_hsource) + + m.Source(pbl, "Shaft 1", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Shaft 2", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Shaft 3", "ihg", 0.8E6 * scale_hsource) + + m.Source(pbl, "Nut 1", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Nut 2", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Nut 3", "ihg", 0.8E6 * scale_hsource) + + m.Source(pbl, "Washer 1", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Washer 2", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Washer 3", "ihg", 0.8E6 * scale_hsource) + + if use_block: + m.Weight(pbl, "Mirror", 1, 0., 1, 0., 1, 1., 1, 0., ensemble_size) + + slv = m.IterativeSolver(pbl, args.k, solverList, 4, ensemble_size) + + slv.start() + + if rank == 0: + f = open('timers.txt', 'w') + print(slv.getTimers(), file=f) + f.closed + + tag_name = "Mirror surface" + name_sol = "x_mm.txt" + DOFperNode = 4 + which_dof = 2 + + x, y, z, tri, dz = u.extract_2D(msh, tag_name, DOFperNode, which_dof, + ensemble_size, name_sol) + which_dof = 3 + x, y, z, tri, T = u.extract_2D(msh, tag_name, DOFperNode, which_dof, + ensemble_size, name_sol) + np.savez('mirror_data_' + str(rank), x=x, y=y, z=z, tri=tri, dz=dz, T=T) + + if rank == 0: + for i in range(1, siz): + data = comm.recv(source=i, tag=11) + else: + comm.send(1, dest=0, tag=11) + + if small_disk_footprint: + if rank == 0: + os.remove(name_sol) + + if rank == 0: + #OAX = msh.ntags["Optical Axis"].elems[0].nodes[0].pos[0] + #OAY = msh.ntags["Optical Axis"].elems[0].nodes[0].pos[1] + OAX, OAY = 0.0595, 0.017 + OAX = (OAX / scale_u) + OAY = (OAY / scale_u) + #OAX, OAY = 0.0595, 0.017 + for i in range(0, siz): + npzfile = np.load('mirror_data_' + str(i) + '.npz') + x_i = npzfile['x'] + y_i = npzfile['y'] + z_i = 0. * x_i + dz_i = npzfile['dz'] + tri_i = npzfile['tri'] + T_i = npzfile['T'] + if i == 0: + x = x_i + y = y_i + z = z_i + dz = dz_i + tri = tri_i + T = T_i + nNodes = len(x) + else: + x = np.append(x, x_i, axis=0) + y = np.append(y, y_i, axis=0) + z = np.append(z, z_i, axis=0) + dz = np.append(dz, dz_i, axis=0) + tri = np.append(tri, tri_i + nNodes, axis=0) + T = np.append(T, T_i, axis=0) + nNodes = len(x) + x = (x / scale_u) + y = (y / scale_u) + z = (z / scale_u) + dz = (dz / scale_u) + T = T * scale_T + T_ref + np.savez('mirror_data_all', x=x, y=y, z=z, tri=tri, dz=dz, T=T) + for i in range(0, ensemble_size): + optical_coefficients, dz_residual = u.compute_RBM_Curvature_Irreg( + x, y, z, tri, dz[:, i], "m", np.array([OAX, OAY])) + np.savez('mirror_optical_results_' + str(i), + optical_coefficients=optical_coefficients, + dz_residual=dz_residual) + np.savetxt('mirror_optical_results_' + str(i) + '.out', + optical_coefficients) + + if small_disk_footprint: + if rank == 0: + for i in range(0, siz): + os.remove('mirror_data_' + str(i) + '.npz') + + +def evaluate_all_ensembles(ensemble_sizes, N, msh, comm, file_dir, + randomVariable1, randomVariable2, randomVariable3, + scale_u, scale_T): + """ + This function loop over the ensemble sizes, + and the ensembles + """ + comm, rank, size = m.utilities.import_MPI() + + for ensemble_size in ensemble_sizes: + directory = str(ensemble_size) + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + + N_ensemble = int(np.floor(N // ensemble_size)) + + ensemble_index_min = 0 + for ensemble_index in range(ensemble_index_min, N_ensemble): + directory = str(ensemble_index) + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + + ensemble_index_start = ensemble_index * ensemble_size + ensemble_index_end = ensemble_index_start + ensemble_size + + randomVariable_cur1 = randomVariable1[ensemble_index_start: + ensemble_index_end] + + randomVariable_cur2 = randomVariable2[ensemble_index_start: + ensemble_index_end] + + randomVariable_cur3 = randomVariable3[ensemble_index_start: + ensemble_index_end] + + evaluate_one_ensemble(ensemble_size, msh, comm, file_dir, + randomVariable_cur1, randomVariable_cur2, + randomVariable_cur3, scale_u, scale_T) + os.chdir('..') + os.chdir('..') + + +def main(): + comm, rank, size = m.utilities.import_MPI() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + mesh_name = 'fused_mirror_assembly_mm_part_' + str(siz) + '.msh' + + msh = gmsh.MeshLoader(mesh_name, work_dir).execute(myrank=rank) + + # sigma = 0.05 + # Scaled = True, tol = 10**(-8), scale_T=1 + # 1 -> 55 (m) -> smooth T QoI unsmooth u QoI + # 1000 -> 125 (mm) -> smooth T QoI unsmooth u QoI + # 10 000 -> 126 (100 \mu m) -> smooth T QoI nearly smooth u QoI + # 50 000 -> 167 (20 \mu m) -> smooth T QoI nearly smooth u QoI + # 100 000 -> 175 (10 \mu m) -> smooth QoI (OK) + # Scaled = False, tol = 10**(-8), scale_T=1 + # 1 -> 222 (m) -> Solver has experienced a loss of accuracy! + # 1000 -> 222 (mm) + # 10 000 -> (100 \mu m) + # 100 000 -> 222 (10 \mu m) -> No loss of accuracy + # Scaled = True, tol = 10**(-8), + # scale_u = 1000. and scale_T = 1. -> 125 (KO) + # scale_u = 1000. and scale_T = 100. -> 174 nearly smooth + # scale_u = 10000. and scale_T = 1. -> 126 (KO) + # scale_u = 10000. and scale_T = 100. -> 204 (OK) + # scale_u = 10000. and scale_T = 400. -> 217 (OK) + + scale_u_1 = 1000. + scale_u_2 = 1. + scale_u = scale_u_1*scale_u_2 + scale_T = 1. + + # Convert mm to m + #scale_msh(msh, 0.001) + scale_msh(msh, scale_u_2) + + orders = np.arange(2, 46, 2) + + for order in orders: + id_case = 'Xiao' + directory = 'order_'+str(order) + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + + N = order + randomVariable_1, randomVariable_2, randomVariable_3 = random_case( + N, id_case) + + N = len(randomVariable_1) + + ensemble_size = int(os.getenv('ensemble_size', 1)) + ensemble_sizes = [ensemble_size] + + evaluate_all_ensembles(ensemble_sizes, N, msh, comm, file_dir, + randomVariable_1, randomVariable_2, + randomVariable_3, scale_u, scale_T) + os.chdir('..') + #tar_results(work_dir, 'QoI_results', rank) + #tar_results(work_dir, 'all_results', rank, True) + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/tests/M1_assembly_fused_all.py b/katoptron/Juelich/tests/M1_assembly_fused_all.py new file mode 100644 index 0000000000000000000000000000000000000000..1331f463d0a653512ce3b98f79d69abb7fd0f572 --- /dev/null +++ b/katoptron/Juelich/tests/M1_assembly_fused_all.py @@ -0,0 +1,475 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +import numpy as np +import shlex +import subprocess +import os +import tarfile +import glob + +from katoptron.Juelich.UQ.halton import * +from katoptron.Juelich.UQ.copulas import * + + +def irradiation(irradotion_index, p1=1., p3=1.95): + sigma_1_min = 0.1 + sigma_1_max = 0.1 + sigma_3_min = 0.05 + sigma_3_max = 0.05 + + sigma_1 = sigma_1_min + (sigma_1_max - sigma_1_min) * irradotion_index + sigma_3 = sigma_3_min + (sigma_3_max - sigma_3_min) * irradotion_index + + mode_min = 70 + mode_max = 180 + + mode_1 = mode_min + (mode_max - mode_min) * irradotion_index**p1 + mode_3 = mode_min + (mode_max - mode_min) * irradotion_index**p3 + + mu_1 = np.log(mode_1) # + sigma_1**2 + mu_3 = np.log(mode_3) # + sigma_3**2 + + return sigma_1, sigma_3, mode_1, mode_3, mu_1, mu_3 + + +def random_case(N, id_case): + comm, rank, siz = m.utilities.import_MPI() + np.random.seed(42) + + sigma = 0.15 + mode = 180 + mu = np.log(mode) + sigma**2 + + qMC = True + + if id_case == 'qMC 1': + n_rand = 2 + halton_points = np.zeros((n_rand, N)) + for i in range(0, N): + halton_points[:, i] = halton(i + 1, n_rand) + + randomVariable_halton = lognormal(halton_points, [mu, mu], + [sigma, sigma]) + randomVariable_1 = randomVariable_halton[0, :] + randomVariable_2 = randomVariable_halton[1, :] + randomVariable_3 = mode * np.ones((N, )) + elif id_case == 'MC 1': + randomVariable_1 = np.random.lognormal(mu, sigma, N) + randomVariable_2 = np.random.lognormal(mu, sigma, N) + randomVariable_3 = mode * np.ones((N, )) + elif id_case == 'qMC 2': + mode_min = 70 + mode_max = 180 + n_rand = 2 + halton_points = np.zeros((n_rand, N)) + for i in range(0, N): + halton_points[:, i] = halton(i, n_rand) + + randomVariable_halton = lognormal(halton_points, [mu, mu], + [sigma, sigma]) + randomVariable_1 = mode_min + (mode_max - + mode_min) * halton_points[0, :] + randomVariable_2 = mode_min + (mode_max - + mode_min) * halton_points[0, :] + randomVariable_3 = mode_min + (mode_max - + mode_min) * halton_points[1, :] + elif id_case == 'qMC 3': + from scipy.stats import lognorm + mode_min = 70 + mode_max = 180 + n_rand = 3 + halton_points = np.zeros((n_rand, N)) + + randomVariable_1 = np.zeros((N, )) + randomVariable_3 = np.zeros((N, )) + + for i in range(0, N): + halton_points[:, i] = halton(i + 1, n_rand) + sigma_1, sigma_3, mode_1, mode_3, mu_1, mu_3 = irradiation( + halton_points[0, i]) + randomVariable_1[i] = lognorm.ppf(halton_points[1, i], + sigma_1, + scale=np.exp(mu_1)) + randomVariable_3[i] = lognorm.ppf(halton_points[2, i], + sigma_3, + scale=np.exp(mu_3)) + + randomVariable_2 = randomVariable_1 + elif id_case == 'Xiao': + file_dir = os.path.dirname(__file__) + loaded = np.load(file_dir + '/../samples_files/Xiao_' + str(N) + + '.npz') + samples = loaded['samples'] + N = samples.shape[0] + weights = loaded['weights'] + randomVariable_1 = samples[0:N, 0] + randomVariable_3 = samples[0:N, 1] + randomVariable_2 = randomVariable_1 + + if rank == 0: + np.savetxt('randomVariable_1.txt', randomVariable_1) + np.savetxt('randomVariable_2.txt', randomVariable_2) + np.savetxt('randomVariable_3.txt', randomVariable_3) + + return randomVariable_1, randomVariable_2, randomVariable_3 + + +def material_option(option): + return int(option[-1]) + + +def clamping_option(option): + return str(option[0]) + + +def scale_msh(msh, scale): + for n in msh.nodes: + for i in range(0, 3): + n.pos[i] = n.pos[i] * scale + + +def tar_results(directory, filename, rank, all=False): + os.chdir(directory) + if rank == 0: + tf = tarfile.open(filename + ".tar.gz", mode="w:gz") + if all: + for file in glob.glob('*'): + if file.endswith(".tar.gz"): + print(file + ' is not included') + else: + tf.add(file) + else: + for file in glob.glob('r*.txt'): + tf.add(file) + for file in glob.glob('*/*/t*.txt'): + tf.add(file) + for file in glob.glob('*/*/b*.txt'): + tf.add(file) + for file in glob.glob('*/*/*.npz'): + tf.add(file) + for file in glob.glob('*/*/*.out'): + tf.add(file) + tf.close() + + +def evaluate_one_ensemble(ensemble_size, + msh, + comm, + file_dir, + randomVariable_1, + randomVariable_2, + randomVariable_3, + scale_u, + scale_T, + small_disk_footprint=True): + + from fwk.wutils import parseargs + args = parseargs() + + from PyTrilinos import Teuchos + import numpy as np + + use_block = True + + comm, rank, size = m.utilities.import_MPI() + + option = 'B2' + + solverList = Teuchos.ParameterList() + solverList['type'] = "BlockGmres" + + solverList['Maximum Iterations'] = 500 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['Use preconditioner'] = True + + solverList['Print Teuchos timers'] = True + solverList['Write txt files'] = True + if small_disk_footprint: + solverList['Write vtk files'] = False + + solverList['convert MueLu xml file'] = True + solverList["use xml file"] = True + + if use_block: + if ensemble_size >= 16 and size == 2 and clamping_option(option) == "A": + solverList["Num Blocks"] = 150 + else: + solverList["Num Blocks"] = 250 + + solverList['Use blocked matrix'] = True + + solverList['Use blocked status test'] = True + solverList['Use blocked status test: x'] = True + solverList['Use blocked status test: T'] = True + solverList['Use weighted status test'] = False + + solverList['Ensemble Convergence Tolerance: T - relative'] = True + solverList['Ensemble Convergence Tolerance: x - relative'] = True + solverList[ + 'Ensemble Convergence Tolerance: T - relative full rhs'] = False + solverList[ + 'Ensemble Convergence Tolerance: x - relative full rhs'] = False + solverList[ + 'Ensemble Convergence Tolerance: weights - relative'] = False + + solverList['Ensemble Convergence Tolerance'] = 1e-5 + solverList['Ensemble Convergence Tolerance: x'] = 1e-5 + solverList['Ensemble Convergence Tolerance: T'] = 1e-7 + solverList['Ensemble Convergence Tolerance: weights'] = 5e-3 + + solverList[ + "MueLu xml file name"] = file_dir + '/../smoothers/AMG_BGS_gs_gs.xml' + else: + solverList['Ensemble Convergence Tolerance'] = 10**(-8) + solverList[ + "MueLu xml file name"] = file_dir + '/../smoothers/heat_no_contact_mtgs.xml' + + solverList["Scaled Block 0"] = True + pbl = m.Problem(msh, comm) + + # Distance in the mesh are represented in meters + + scale_E = 1. / scale_u**2 + scale_k = (scale_T / scale_u) + scale_hsource = 1. / scale_u**3 + scale_hflux = 1. / scale_u**2 + scale_d = scale_T + + # 379 000 MPa = 379 GPa = 379E9 Pa + E_rhodium = 379E9 * np.ones(ensemble_size) * scale_E + nu_rhodium = 0.26 * np.ones(ensemble_size) + # 0.150 kW/(m K) = 150 W/(m K) + k_rhodium = 150 * scale_k + d_rhodium = 0.781E-05 * scale_d + + E_WCu = 280E9 * np.ones(ensemble_size) * scale_E + nu_WCu = 0.298 * np.ones(ensemble_size) + k_WCu = 180 * scale_k + d_WCu = 0.88E-05 * scale_d + + E_SS = 200E9 * np.ones(ensemble_size) * scale_E + nu_SS = 0.3 * np.ones(ensemble_size) + k_SS = 15.3 * scale_k + d_SS = 1.57E-05 * scale_d + + E_CuCrZr = 118E9 * np.ones(ensemble_size) * scale_E + nu_CuCrZr = 0.33 * np.ones(ensemble_size) + k_CuCrZr = 345 * np.ones(ensemble_size) * scale_k + d_CuCrZr = 1.8E-05 * np.ones(ensemble_size) * scale_d + + E_AlN = 320E9 * np.ones(ensemble_size) * scale_E + nu_AlN = 0.24 * np.ones(ensemble_size) + k_AlN = 180 * np.ones(ensemble_size) * scale_k + d_AlN = 0.48E-05 * np.ones(ensemble_size) * scale_d + + E_I718 = 183E9 * np.ones(ensemble_size) * scale_E + nu_I718 = 0.31 * np.ones(ensemble_size) + k_I718 = 15.8 * scale_k + d_I718 = 1.38E-05 * scale_d + + T_ref = 22. + + m.Medium(pbl, "Mirror", "rhodium", E_rhodium, nu_rhodium, k_rhodium, + d_rhodium) + m.Medium(pbl, "Substrate", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + + if material_option(option) == 1: + m.Medium(pbl, "Holder", "SS", E_SS, nu_SS, k_SS, d_SS) + m.Medium(pbl, "Holder 2", "SS", E_SS, nu_SS, k_SS, d_SS) + m.Medium(pbl, "Pipes", "SS", E_SS, nu_SS, k_SS, d_SS) + elif material_option(option) == 2: + m.Medium(pbl, "Holder", "CuCrZr", E_CuCrZr, nu_CuCrZr, k_CuCrZr, + d_CuCrZr) + m.Medium(pbl, "Holder 2", "CuCrZr", E_CuCrZr, nu_CuCrZr, k_CuCrZr, + d_CuCrZr) + m.Medium(pbl, "Pipes", "CuCrZr", E_CuCrZr, nu_CuCrZr, k_CuCrZr, + d_CuCrZr) + + m.Medium(pbl, "Bolts", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Washer 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Shaft 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Nut 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Spacer 1 part 1", "AlN", E_AlN, nu_AlN, + randomVariable_1 * scale_k, d_AlN) + m.Medium(pbl, "Spacer 2 part 1", "AlN", E_AlN, nu_AlN, + randomVariable_2 * scale_k, d_AlN) + m.Medium(pbl, "Spacer 3 part 1", "AlN", E_AlN, nu_AlN, + randomVariable_3 * scale_k, d_AlN) + + m.Medium(pbl, "Spacer 1 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + m.Medium(pbl, "Spacer 2 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + m.Medium(pbl, "Spacer 3 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + + m.Dirichlet(pbl, "Holder x", "Clamped", 1, 0., 0, 0., 0, 0., 0, 0., + ensemble_size) + m.Dirichlet(pbl, "Holder yz", "Clamped", 0, 0., 1, 0., 1, 0., 0, 0., + ensemble_size) + m.Dirichlet(pbl, "Holder z", "Clamped", 0, 0., 0, 0., 1, 0., 0, 0., + ensemble_size) + + m.Dirichlet(pbl, "Cooling channels", "Clamped", 0, 0., 0, 0., 0, 0., 1, + ((70. - T_ref) scale_T), ensemble_size) + + zero = np.zeros(ensemble_size) + hf = 20. / 0.0121 * np.ones( + ensemble_size) * scale_hflux # 20 W / (0.0121 m^2) + + m.Neumann(pbl, "Mirror surface", "heat fluxes", 0, zero, 0, zero, 0, zero, + 1, hf, ensemble_size) + + m.Source(pbl, "Mirror", "ihg", 20E6 * scale_hsource) + m.Source(pbl, "Substrate", "ihg", 2.45E6 * scale_hsource) + + if material_option(option) == 1: + m.Source(pbl, "Holder", "ihg", 0.7E6 * scale_hsource) + m.Source(pbl, "Holder 2", "ihg", 0.7E6 * scale_hsource) + m.Source(pbl, "Pipes", "ihg", 0.7E6 * scale_hsource) + elif material_option(option) == 2: + m.Source(pbl, "Holder", "ihg", 0.6E6 * scale_hsource) + m.Source(pbl, "Holder 2", "ihg", 0.6E6 * scale_hsource) + m.Source(pbl, "Pipes", "ihg", 0.6E6 * scale_hsource) + m.Source(pbl, "Bolts", "ihg", 0.8E6 * scale_hsource) + + m.Source(pbl, "Spacer 1 part 1", "ihg", 0.3E6 * scale_hsource) + m.Source(pbl, "Spacer 2 part 1", "ihg", 0.3E6 * scale_hsource) + m.Source(pbl, "Spacer 3 part 1", "ihg", 0.3E6 * scale_hsource) + + m.Source(pbl, "Spacer 1 part 2", "ihg", 2.45E6 * scale_hsource) + m.Source(pbl, "Spacer 2 part 2", "ihg", 2.45E6 * scale_hsource) + m.Source(pbl, "Spacer 3 part 2", "ihg", 2.45E6 * scale_hsource) + + m.Source(pbl, "Shaft 1", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Shaft 2", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Shaft 3", "ihg", 0.8E6 * scale_hsource) + + m.Source(pbl, "Nut 1", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Nut 2", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Nut 3", "ihg", 0.8E6 * scale_hsource) + + m.Source(pbl, "Washer 1", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Washer 2", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Washer 3", "ihg", 0.8E6 * scale_hsource) + + if use_block: + m.Weight(pbl, "Mirror", 1, 0., 1, 0., 1, 1., 1, 0., ensemble_size) + + slv = m.IterativeSolver(pbl, args.k, solverList, 4, ensemble_size) + + slv.start() + + if rank == 0: + f = open('timers.txt', 'w') + print(slv.getTimers(), file=f) + f.closed + + +def evaluate_all_ensembles(ensemble_sizes, N, msh, comm, file_dir, + randomVariable1, randomVariable2, randomVariable3, + scale_u, scale_T): + """ + This function loop over the ensemble sizes, + and the ensembles + """ + comm, rank, size = m.utilities.import_MPI() + small_disk_footprint = True + for ensemble_size in ensemble_sizes: + directory = str(ensemble_size) + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + + N_ensemble = int(np.floor(N // ensemble_size)) + + ensemble_index_min = 0 + for ensemble_index in range(ensemble_index_min, N_ensemble): + directory = str(ensemble_index) + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + + ensemble_index_start = ensemble_index * ensemble_size + ensemble_index_end = ensemble_index_start + ensemble_size + + randomVariable_cur1 = randomVariable1[ensemble_index_start: + ensemble_index_end] + + randomVariable_cur2 = randomVariable2[ensemble_index_start: + ensemble_index_end] + + randomVariable_cur3 = randomVariable3[ensemble_index_start: + ensemble_index_end] + + evaluate_one_ensemble(ensemble_size, + msh, + comm, + file_dir, + randomVariable_cur1, + randomVariable_cur2, + randomVariable_cur3, + scale_u, + scale_T, + small_disk_footprint=small_disk_footprint) + small_disk_footprint = True + os.chdir('..') + os.chdir('..') + + +def main(): + comm, rank, size = m.utilities.import_MPI() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + directory = 'MPI_' + str(size) + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + + mesh_name = 'fused_mirror_assembly_all_mm_part_' + str(size) + '.msh' + + msh = gmsh.MeshLoader(mesh_name, work_dir).execute(myrank=rank) + + scale_u_1 = 1000. + scale_u_2 = 1. + scale_u = scale_u_1 * scale_u_2 + scale_T = 1. + + scale_msh(msh, scale_u_2) + + N = 12 + id_case = 'Xiao' + + randomVariable_1, randomVariable_2, randomVariable_3 = random_case( + N, id_case) + + ensemble_size = int(os.getenv('ensemble_size', 1)) + + ensemble_sizes = [ensemble_size] + + N = len(randomVariable_1) + + evaluate_all_ensembles(ensemble_sizes, N, msh, comm, file_dir, + randomVariable_1, randomVariable_2, + randomVariable_3, scale_u, scale_T) + + os.chdir('..') + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/tests/M1_assembly_fused_old.py b/katoptron/Juelich/tests/M1_assembly_fused_old.py new file mode 100644 index 0000000000000000000000000000000000000000..4fc098117ca99da05b9fb1de58fc7b7e3f9dbfc8 --- /dev/null +++ b/katoptron/Juelich/tests/M1_assembly_fused_old.py @@ -0,0 +1,568 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +import numpy as np +import shlex +import subprocess +import os +import tarfile +import glob + +from katoptron.Juelich.UQ.halton import * +from katoptron.Juelich.UQ.copulas import * + + +def irradiation(irradotion_index, p1=1., p3=1.95): + sigma_1_min = 0.1 + sigma_1_max = 0.1 + sigma_3_min = 0.05 + sigma_3_max = 0.05 + + sigma_1 = sigma_1_min + (sigma_1_max - sigma_1_min) * irradotion_index + sigma_3 = sigma_3_min + (sigma_3_max - sigma_3_min) * irradotion_index + + mode_min = 70 + mode_max = 180 + + mode_1 = mode_min + (mode_max - mode_min) * irradotion_index**p1 + mode_3 = mode_min + (mode_max - mode_min) * irradotion_index**p3 + + mu_1 = np.log(mode_1) # + sigma_1**2 + mu_3 = np.log(mode_3) # + sigma_3**2 + + return sigma_1, sigma_3, mode_1, mode_3, mu_1, mu_3 + + +def random_case(N, id_case): + comm, rank, siz = m.utilities.import_MPI() + np.random.seed(42) + + sigma = 0.15 + mode = 180 + mu = np.log(mode) + sigma**2 + + qMC = True + + if id_case == 'qMC 1': + n_rand = 2 + halton_points = np.zeros((n_rand, N)) + for i in range(0, N): + halton_points[:, i] = halton(i + 1, n_rand) + + randomVariable_halton = lognormal(halton_points, [mu, mu], + [sigma, sigma]) + randomVariable_1 = randomVariable_halton[0, :] + randomVariable_2 = randomVariable_halton[1, :] + randomVariable_3 = mode * np.ones((N, )) + elif id_case == 'MC 1': + randomVariable_1 = np.random.lognormal(mu, sigma, N) + randomVariable_2 = np.random.lognormal(mu, sigma, N) + randomVariable_3 = mode * np.ones((N, )) + elif id_case == 'qMC 2': + mode_min = 70 + mode_max = 180 + n_rand = 2 + halton_points = np.zeros((n_rand, N)) + for i in range(0, N): + halton_points[:, i] = halton(i, n_rand) + + randomVariable_halton = lognormal(halton_points, [mu, mu], + [sigma, sigma]) + randomVariable_1 = mode_min + (mode_max - + mode_min) * halton_points[0, :] + randomVariable_2 = mode_min + (mode_max - + mode_min) * halton_points[0, :] + randomVariable_3 = mode_min + (mode_max - + mode_min) * halton_points[1, :] + elif id_case == 'qMC 3': + from scipy.stats import lognorm + mode_min = 70 + mode_max = 180 + n_rand = 3 + halton_points = np.zeros((n_rand, N)) + + randomVariable_1 = np.zeros((N, )) + randomVariable_3 = np.zeros((N, )) + + for i in range(0, N): + halton_points[:, i] = halton(i + 1, n_rand) + sigma_1, sigma_3, mode_1, mode_3, mu_1, mu_3 = irradiation( + halton_points[0, i]) + randomVariable_1[i] = lognorm.ppf(halton_points[1, i], + sigma_1, + scale=np.exp(mu_1)) + randomVariable_3[i] = lognorm.ppf(halton_points[2, i], + sigma_3, + scale=np.exp(mu_3)) + + randomVariable_2 = randomVariable_1 + elif id_case == 'Xiao': + file_dir = os.path.dirname(__file__) + loaded = np.load(file_dir + '/../samples_files/Xiao_' + str(N) + + '.npz') + samples = loaded['samples'] + N = samples.shape[0] + weights = loaded['weights'] + randomVariable_1 = samples[0:N, 0] + randomVariable_3 = samples[0:N, 1] + randomVariable_2 = randomVariable_1 + + if rank == 0: + np.savetxt('randomVariable_1.txt', randomVariable_1) + np.savetxt('randomVariable_2.txt', randomVariable_2) + np.savetxt('randomVariable_3.txt', randomVariable_3) + + return randomVariable_1, randomVariable_2, randomVariable_3 + + +def material_option(option): + return int(option[-1]) + + +def clamping_option(option): + return str(option[0]) + + +def scale_msh(msh, scale): + for n in msh.nodes: + for i in range(0, 3): + n.pos[i] = n.pos[i] * scale + + +def tar_results(directory, filename, rank, all=False): + os.chdir(directory) + if rank == 0: + tf = tarfile.open(filename + ".tar.gz", mode="w:gz") + if all: + for file in glob.glob('*'): + if file.endswith(".tar.gz"): + print(file + ' is not included') + else: + tf.add(file) + else: + for file in glob.glob('r*.txt'): + tf.add(file) + for file in glob.glob('*/*/t*.txt'): + tf.add(file) + for file in glob.glob('*/*/b*.txt'): + tf.add(file) + for file in glob.glob('*/*/*.npz'): + tf.add(file) + for file in glob.glob('*/*/*.out'): + tf.add(file) + tf.close() + + +def evaluate_one_ensemble(ensemble_size, msh, comm, file_dir, randomVariable_1, + randomVariable_2, randomVariable_3, scale_u, + scale_T, option, baking=False): + + from fwk.wutils import parseargs + args = parseargs() + + from PyTrilinos import Teuchos + import numpy as np + + small_disk_footprint = False + use_block = True + + comm, rank, siz = m.utilities.import_MPI() + + solverList = Teuchos.ParameterList() + solverList['type'] = "BlockGmres" + + solverList['Maximum Iterations'] = 500 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['Use preconditioner'] = True + + solverList['Print Teuchos timers'] = True + solverList['Write txt files'] = True + if small_disk_footprint: + solverList['Write vtk files'] = False + + solverList['convert MueLu xml file'] = True + solverList["use xml file"] = True + + if use_block: + if ensemble_size >= 16 and siz == 2 and clamping_option(option) == "A": + solverList["Num Blocks"] = 150 + else: + solverList["Num Blocks"] = 200 + + solverList['Use blocked matrix'] = True + + solverList['Use blocked status test'] = True + solverList['Use blocked status test: x'] = True + solverList['Use blocked status test: T'] = True + solverList['Use weighted status test'] = True + + solverList['Ensemble Convergence Tolerance: T - relative'] = True + solverList['Ensemble Convergence Tolerance: x - relative'] = True + solverList[ + 'Ensemble Convergence Tolerance: T - relative full rhs'] = False + solverList[ + 'Ensemble Convergence Tolerance: x - relative full rhs'] = False + solverList[ + 'Ensemble Convergence Tolerance: weights - relative'] = False + + solverList['Ensemble Convergence Tolerance'] = 10**(-5) + solverList['Ensemble Convergence Tolerance: x'] = 10**(-6) + solverList['Ensemble Convergence Tolerance: T'] = 10**(-7) + solverList['Ensemble Convergence Tolerance: weights'] = 10**(-3) + + solverList[ + "MueLu xml file name"] = file_dir + '/../smoothers/AMG_BGS_gs_gs.xml' + else: + solverList['Ensemble Convergence Tolerance'] = 10**(-8) + solverList[ + "MueLu xml file name"] = file_dir + '/../smoothers/heat_no_contact_mtgs.xml' + + solverList["Scaled Block 0"] = True + pbl = m.Problem(msh, comm) + + # Distance in the mesh are represented in meters + + scale_E = 1. / scale_u**2 + scale_k = (scale_T / scale_u) + scale_hsource = 1. / scale_u**3 + scale_hflux = 1. / scale_u**2 + scale_d = scale_T + + # 379 000 MPa = 379 GPa = 379E9 Pa + E_rhodium = 379E9 * np.ones(ensemble_size) * scale_E + nu_rhodium = 0.26 * np.ones(ensemble_size) + # 0.150 kW/(m K) = 150 W/(m K) + k_rhodium = 150 * scale_k + d_rhodium = 0.781E-05 * scale_d + + E_WCu = 280E9 * np.ones(ensemble_size) * scale_E + nu_WCu = 0.26 * np.ones(ensemble_size) + k_WCu = 180 * scale_k + d_WCu = 0.88E-05 * scale_d + + E_SS = 180E9 * np.ones(ensemble_size) * scale_E + nu_SS = 0.26 * np.ones(ensemble_size) + k_SS = 20. * scale_k + d_SS = 1.57E-05 * scale_d + + E_CuCrZr = 130E9 * np.ones(ensemble_size) * scale_E + nu_CuCrZr = 0.26 * np.ones(ensemble_size) + k_CuCrZr = 280 * np.ones(ensemble_size) * scale_k + d_CuCrZr = 1.6E-05 * np.ones(ensemble_size) * scale_d + + E_AlN = 320E9 * np.ones(ensemble_size) * scale_E + nu_AlN = 0.24 * np.ones(ensemble_size) + k_AlN = 180 * np.ones(ensemble_size) * scale_k + d_AlN = 0.48E-05 * np.ones(ensemble_size) * scale_d + + E_I718 = 180E9 * np.ones(ensemble_size) * scale_E + nu_I718 = 0.26 * np.ones(ensemble_size) + k_I718 = 20. * scale_k + d_I718 = 1.4E-05 * scale_d + + T_ref = 22. + + m.Medium(pbl, "Mirror", "rhodium", E_rhodium, nu_rhodium, k_rhodium, + d_rhodium) + m.Medium(pbl, "Substrate", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + + if material_option(option) == 1: + m.Medium(pbl, "Holder", "SS", E_SS, nu_SS, k_SS, d_SS) + elif material_option(option) == 2: + m.Medium(pbl, "Holder", "CuCrZr", E_CuCrZr, nu_CuCrZr, k_CuCrZr, + d_CuCrZr) + + m.Medium(pbl, "Washer 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Shaft 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Nut 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + ''' + m.Medium(pbl, "Spacer 1 part 1", "AlN", E_AlN, nu_AlN, + randomVariable_1 * scale_k, d_AlN) + m.Medium(pbl, "Spacer 2 part 1", "AlN", E_AlN, nu_AlN, + randomVariable_2 * scale_k, d_AlN) + m.Medium(pbl, "Spacer 3 part 1", "AlN", E_AlN, nu_AlN, + randomVariable_3 * scale_k, d_AlN) + ''' + + m.Medium(pbl, "Spacer 1 part 1", "CuCrZr", E_CuCrZr, nu_AlN, + k_CuCrZr, d_CuCrZr) + m.Medium(pbl, "Spacer 2 part 1", "CuCrZr", E_CuCrZr, nu_AlN, + k_CuCrZr, d_CuCrZr) + m.Medium(pbl, "Spacer 3 part 1", "CuCrZr", E_CuCrZr, nu_AlN, + k_CuCrZr, d_CuCrZr) + + m.Medium(pbl, "Spacer 1 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + m.Medium(pbl, "Spacer 2 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + m.Medium(pbl, "Spacer 3 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + + if clamping_option(option) == "A": + m.Dirichlet(pbl, "Holder z clamping", "Clamped", 0, 0., 0, 0., 1, 0., + 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder x-y clamping", "Clamped", 1, 0., 1, 0., 0, + 0., 0, 0., ensemble_size) + + elif clamping_option(option) == "B": + m.Dirichlet(pbl, "Holder x-y-z clamping point", "Clamped", 1, 0., 1, + 0., 1, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder z clamping point", "Clamped", 0, 0., 0, 0., + 1, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder z-y clamping point", "Clamped", 0, 0., 1, 0., + 1, 0., 0, 0., ensemble_size) + + m.Dirichlet(pbl, "Cooling channels", "Clamped", 0, 0., 0, 0., 0, 0., 1, + ((70. - T_ref) / scale_T), ensemble_size) + + if not baking: + zero = np.zeros(ensemble_size) + hf = 70. / 0.0121 * np.ones( + ensemble_size) * scale_hflux # 20 W / (0.0121 m^2) + + m.Neumann(pbl, "Mirror surface", "heat fluxes", 0, zero, 0, zero, 0, zero, + 1, hf, ensemble_size) + + m.Source(pbl, "Mirror", "ihg", 70E6 * scale_hsource) + m.Source(pbl, "Substrate", "ihg", 2.45E6 * scale_hsource) + + if material_option(option) == 1: + m.Source(pbl, "Holder", "ihg", 0.7E6 * scale_hsource) + elif material_option(option) == 2: + m.Source(pbl, "Holder", "ihg", 0.7E6 * scale_hsource) + + m.Source(pbl, "Spacer 1 part 1", "ihg", 0.7E6 * scale_hsource) + m.Source(pbl, "Spacer 2 part 1", "ihg", 0.7E6 * scale_hsource) + m.Source(pbl, "Spacer 3 part 1", "ihg", 0.7E6 * scale_hsource) + + m.Source(pbl, "Spacer 1 part 2", "ihg", 2.45E6 * scale_hsource) + m.Source(pbl, "Spacer 2 part 2", "ihg", 2.45E6 * scale_hsource) + m.Source(pbl, "Spacer 3 part 2", "ihg", 2.45E6 * scale_hsource) + + m.Source(pbl, "Shaft 1", "ihg", 0.7E6 * scale_hsource) + m.Source(pbl, "Shaft 2", "ihg", 0.7E6 * scale_hsource) + m.Source(pbl, "Shaft 3", "ihg", 0.7E6 * scale_hsource) + + m.Source(pbl, "Nut 1", "ihg", 0.7E6 * scale_hsource) + m.Source(pbl, "Nut 2", "ihg", 0.7E6 * scale_hsource) + m.Source(pbl, "Nut 3", "ihg", 0.7E6 * scale_hsource) + + m.Source(pbl, "Washer 1", "ihg", 0.7E6 * scale_hsource) + m.Source(pbl, "Washer 2", "ihg", 0.7E6 * scale_hsource) + m.Source(pbl, "Washer 3", "ihg", 0.7E6 * scale_hsource) + + if use_block: + m.Weight(pbl, "Mirror", 1, 0., 1, 0., 1, 1., 1, 0., ensemble_size) + + slv = m.IterativeSolver(pbl, args.k, solverList, 4, ensemble_size) + + slv.start() + + if rank == 0: + f = open('timers.txt', 'w') + print(slv.getTimers(), file=f) + f.closed + + tag_name = "Mirror surface" + name_sol = "x_mm.txt" + DOFperNode = 4 + which_dof = 2 + + x, y, z, tri, dz = u.extract_2D(msh, tag_name, DOFperNode, which_dof, + ensemble_size, name_sol) + which_dof = 3 + x, y, z, tri, T = u.extract_2D(msh, tag_name, DOFperNode, which_dof, + ensemble_size, name_sol) + np.savez('mirror_data_' + str(rank), x=x, y=y, z=z, tri=tri, dz=dz, T=T) + + if rank == 0: + for i in range(1, siz): + data = comm.recv(source=i, tag=11) + else: + comm.send(1, dest=0, tag=11) + + if small_disk_footprint: + if rank == 0: + os.remove(name_sol) + + if rank == 0: + #OAX = msh.ntags["Optical Axis"].elems[0].nodes[0].pos[0] + #OAY = msh.ntags["Optical Axis"].elems[0].nodes[0].pos[1] + OAX, OAY = 0.0595, 0.017 + OAX = (OAX / scale_u) + OAY = (OAY / scale_u) + #OAX, OAY = 0.0595, 0.017 + for i in range(0, siz): + npzfile = np.load('mirror_data_' + str(i) + '.npz') + x_i = npzfile['x'] + y_i = npzfile['y'] + z_i = 0. * x_i + dz_i = npzfile['dz'] + tri_i = npzfile['tri'] + T_i = npzfile['T'] + if i == 0: + x = x_i + y = y_i + z = z_i + dz = dz_i + tri = tri_i + T = T_i + nNodes = len(x) + else: + x = np.append(x, x_i, axis=0) + y = np.append(y, y_i, axis=0) + z = np.append(z, z_i, axis=0) + dz = np.append(dz, dz_i, axis=0) + tri = np.append(tri, tri_i + nNodes, axis=0) + T = np.append(T, T_i, axis=0) + nNodes = len(x) + x = (x / scale_u) + y = (y / scale_u) + z = (z / scale_u) + dz = (dz / scale_u) + T = T * scale_T + T_ref + np.savez('mirror_data_all', x=x, y=y, z=z, tri=tri, dz=dz, T=T) + for i in range(0, ensemble_size): + optical_coefficients, dz_residual = u.compute_RBM_Curvature_Irreg( + x, y, z, tri, dz[:, i], "m", np.array([OAX, OAY])) + np.savez('mirror_optical_results_' + str(i), + optical_coefficients=optical_coefficients, + dz_residual=dz_residual) + np.savetxt('mirror_optical_results_' + str(i) + '.out', + optical_coefficients) + + if small_disk_footprint: + if rank == 0: + for i in range(0, siz): + os.remove('mirror_data_' + str(i) + '.npz') + + +def evaluate_all_ensembles(ensemble_sizes, N, msh, comm, file_dir, + randomVariable1, randomVariable2, randomVariable3, + scale_u, scale_T, option, baking=False): + """ + This function loop over the ensemble sizes, + and the ensembles + """ + for ensemble_size in ensemble_sizes: + directory = str(ensemble_size) + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + + N_ensemble = int(np.floor(N // ensemble_size)) + + ensemble_index_min = 0 + for ensemble_index in range(ensemble_index_min, N_ensemble): + directory = str(ensemble_index) + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + + ensemble_index_start = ensemble_index * ensemble_size + ensemble_index_end = ensemble_index_start + ensemble_size + + randomVariable_cur1 = randomVariable1[ensemble_index_start: + ensemble_index_end] + + randomVariable_cur2 = randomVariable2[ensemble_index_start: + ensemble_index_end] + + randomVariable_cur3 = randomVariable3[ensemble_index_start: + ensemble_index_end] + + evaluate_one_ensemble(ensemble_size, msh, comm, file_dir, + randomVariable_cur1, randomVariable_cur2, + randomVariable_cur3, scale_u, scale_T, option, baking) + os.chdir('..') + os.chdir('..') + + +def main(): + comm, rank, siz = m.utilities.import_MPI() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + directory = 'MPI_' + str(siz) + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + + mesh_name = 'fused_mirror_assembly_mm_part_' + str(siz) + '.msh' + + msh = gmsh.MeshLoader(mesh_name, work_dir).execute(myrank=rank) + + scale_u_1 = 1000. + scale_u_2 = 1. + scale_u = scale_u_1 * scale_u_2 + scale_T = 1. + + scale_msh(msh, scale_u_2) + + randomVariable_1 = np.array([180., 30.]) + randomVariable_2 = np.array([180., 30.]) + randomVariable_3 = np.array([180., 30.]) + + ensemble_size = int(os.getenv('ensemble_size', 1)) + + ensemble_sizes = [ensemble_size] + + N = 1 + + option = 'A1' + ''' + directory = 'A1_baking' + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + + evaluate_all_ensembles(ensemble_sizes, N, msh, comm, file_dir, + randomVariable_1, randomVariable_2, + randomVariable_3, scale_u, scale_T, option, baking=True) + os.chdir('..') + ''' + directory = 'A1' + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + + evaluate_all_ensembles(ensemble_sizes, N, msh, comm, file_dir, + randomVariable_1, randomVariable_2, + randomVariable_3, scale_u, scale_T, option, baking=False) + os.chdir('..') + ''' + option = 'B1' + + directory = 'B1_baking' + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + + evaluate_all_ensembles(ensemble_sizes, N, msh, comm, file_dir, + randomVariable_1, randomVariable_2, + randomVariable_3, scale_u, scale_T, option, baking=True) + os.chdir('..') + + directory = 'B1' + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + + evaluate_all_ensembles(ensemble_sizes, N, msh, comm, file_dir, + randomVariable_1, randomVariable_2, + randomVariable_3, scale_u, scale_T, option, baking=False) + os.chdir('..') + ''' + os.chdir('..') + + +if __name__ == "__main__": + main() diff --git a/katoptron/Juelich/tests/M1_assembly_fused_preload.py b/katoptron/Juelich/tests/M1_assembly_fused_preload.py new file mode 100644 index 0000000000000000000000000000000000000000..b5cbd209ac82d91d2702d99288db5bbb39168741 --- /dev/null +++ b/katoptron/Juelich/tests/M1_assembly_fused_preload.py @@ -0,0 +1,544 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +import numpy as np +import shlex +import subprocess +import os +import tarfile +import glob + +from katoptron.Juelich.UQ.halton import * +from katoptron.Juelich.UQ.copulas import * + + +def irradiation(irradotion_index, p1=1., p3=1.95): + sigma_1_min = 0.1 + sigma_1_max = 0.1 + sigma_3_min = 0.05 + sigma_3_max = 0.05 + + sigma_1 = sigma_1_min + (sigma_1_max - sigma_1_min) * irradotion_index + sigma_3 = sigma_3_min + (sigma_3_max - sigma_3_min) * irradotion_index + + mode_min = 70 + mode_max = 180 + + mode_1 = mode_min + (mode_max - mode_min) * irradotion_index**p1 + mode_3 = mode_min + (mode_max - mode_min) * irradotion_index**p3 + + mu_1 = np.log(mode_1) # + sigma_1**2 + mu_3 = np.log(mode_3) # + sigma_3**2 + + return sigma_1, sigma_3, mode_1, mode_3, mu_1, mu_3 + + +def random_case(N, id_case): + comm, rank, siz = m.utilities.import_MPI() + np.random.seed(42) + + sigma = 0.15 + mode = 180 + mu = np.log(mode) + sigma**2 + + qMC = True + + if id_case == 'qMC 1': + n_rand = 2 + halton_points = np.zeros((n_rand, N)) + for i in range(0, N): + halton_points[:, i] = halton(i + 1, n_rand) + + randomVariable_halton = lognormal(halton_points, [mu, mu], + [sigma, sigma]) + randomVariable_1 = randomVariable_halton[0, :] + randomVariable_2 = randomVariable_halton[1, :] + randomVariable_3 = mode * np.ones((N, )) + elif id_case == 'MC 1': + randomVariable_1 = np.random.lognormal(mu, sigma, N) + randomVariable_2 = np.random.lognormal(mu, sigma, N) + randomVariable_3 = mode * np.ones((N, )) + elif id_case == 'qMC 2': + mode_min = 70 + mode_max = 180 + n_rand = 2 + halton_points = np.zeros((n_rand, N)) + for i in range(0, N): + halton_points[:, i] = halton(i, n_rand) + + randomVariable_halton = lognormal(halton_points, [mu, mu], + [sigma, sigma]) + randomVariable_1 = mode_min + (mode_max - + mode_min) * halton_points[0, :] + randomVariable_2 = mode_min + (mode_max - + mode_min) * halton_points[0, :] + randomVariable_3 = mode_min + (mode_max - + mode_min) * halton_points[1, :] + elif id_case == 'qMC 3': + from scipy.stats import lognorm + mode_min = 70 + mode_max = 180 + n_rand = 3 + halton_points = np.zeros((n_rand, N)) + + randomVariable_1 = np.zeros((N, )) + randomVariable_3 = np.zeros((N, )) + + for i in range(0, N): + halton_points[:, i] = halton(i + 1, n_rand) + sigma_1, sigma_3, mode_1, mode_3, mu_1, mu_3 = irradiation( + halton_points[0, i]) + randomVariable_1[i] = lognorm.ppf(halton_points[1, i], + sigma_1, + scale=np.exp(mu_1)) + randomVariable_3[i] = lognorm.ppf(halton_points[2, i], + sigma_3, + scale=np.exp(mu_3)) + + randomVariable_2 = randomVariable_1 + elif id_case == 'Xiao': + file_dir = os.path.dirname(__file__) + loaded = np.load(file_dir + '/../samples_files/Xiao_' + str(N) + + '.npz') + samples = loaded['samples'] + N = samples.shape[0] + weights = loaded['weights'] + randomVariable_1 = samples[0:N, 0] + randomVariable_3 = samples[0:N, 1] + randomVariable_2 = randomVariable_1 + + if rank == 0: + np.savetxt('randomVariable_1.txt', randomVariable_1) + np.savetxt('randomVariable_2.txt', randomVariable_2) + np.savetxt('randomVariable_3.txt', randomVariable_3) + + return randomVariable_1, randomVariable_2, randomVariable_3 + + +def material_option(option): + return int(option[-1]) + + +def clamping_option(option): + return str(option[0]) + + +def scale_msh(msh, scale): + for n in msh.nodes: + for i in range(0, 3): + n.pos[i] = n.pos[i] * scale + + +def tar_results(directory, filename, rank, all=False): + os.chdir(directory) + if rank == 0: + tf = tarfile.open(filename + ".tar.gz", mode="w:gz") + if all: + for file in glob.glob('*'): + if file.endswith(".tar.gz"): + print(file + ' is not included') + else: + tf.add(file) + else: + for file in glob.glob('r*.txt'): + tf.add(file) + for file in glob.glob('*/*/t*.txt'): + tf.add(file) + for file in glob.glob('*/*/b*.txt'): + tf.add(file) + for file in glob.glob('*/*/*.npz'): + tf.add(file) + for file in glob.glob('*/*/*.out'): + tf.add(file) + tf.close() + + +def evaluate_one_ensemble(ensemble_size, msh, comm, file_dir, randomVariable_1, + randomVariable_2, randomVariable_3, scale_u, + scale_T, option, baking=False): + + from fwk.wutils import parseargs + args = parseargs() + + from PyTrilinos import Teuchos + import numpy as np + + small_disk_footprint = False + use_block = True + + comm, rank, siz = m.utilities.import_MPI() + + solverList = Teuchos.ParameterList() + solverList['type'] = "BlockGmres" + + solverList['Maximum Iterations'] = 500 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['Use preconditioner'] = True + + solverList['Print Teuchos timers'] = True + solverList['Write txt files'] = True + if small_disk_footprint: + solverList['Write vtk files'] = False + + solverList['convert MueLu xml file'] = True + solverList["use xml file"] = True + + if use_block: + if ensemble_size >= 16 and siz == 2 and clamping_option(option) == "A": + solverList["Num Blocks"] = 150 + else: + solverList["Num Blocks"] = 200 + + solverList['Use blocked matrix'] = True + + solverList['Use blocked status test'] = True + solverList['Use blocked status test: x'] = True + solverList['Use blocked status test: T'] = True + solverList['Use weighted status test'] = True + + solverList['Ensemble Convergence Tolerance: T - relative'] = True + solverList['Ensemble Convergence Tolerance: x - relative'] = True + solverList[ + 'Ensemble Convergence Tolerance: T - relative full rhs'] = False + solverList[ + 'Ensemble Convergence Tolerance: x - relative full rhs'] = False + solverList[ + 'Ensemble Convergence Tolerance: weights - relative'] = False + + solverList['Ensemble Convergence Tolerance'] = 10**(-5) + solverList['Ensemble Convergence Tolerance: x'] = 10**(-6) + solverList['Ensemble Convergence Tolerance: T'] = 10**(-7) + solverList['Ensemble Convergence Tolerance: weights'] = 10**(-3) + + solverList[ + "MueLu xml file name"] = file_dir + '/../smoothers/AMG_BGS_gs_gs.xml' + else: + solverList['Ensemble Convergence Tolerance'] = 10**(-8) + solverList[ + "MueLu xml file name"] = file_dir + '/../smoothers/heat_no_contact_mtgs.xml' + + solverList["Scaled Block 0"] = True + pbl = m.Problem(msh, comm) + + # Distance in the mesh are represented in meters + + scale_E = 1. / scale_u**2 + scale_k = (scale_T / scale_u) + scale_hsource = 1. / scale_u**3 + scale_hflux = 1. / scale_u**2 + scale_d = scale_T + + # 379 000 MPa = 379 GPa = 379E9 Pa + E_rhodium = 379E9 * np.ones(ensemble_size) * scale_E + nu_rhodium = 0.26 * np.ones(ensemble_size) + # 0.150 kW/(m K) = 150 W/(m K) + k_rhodium = 150 * scale_k + d_rhodium = 0.781E-05 * scale_d + + E_WCu = 280E9 * np.ones(ensemble_size) * scale_E + nu_WCu = 0.298 * np.ones(ensemble_size) + k_WCu = 180 * scale_k + d_WCu = 0.88E-05 * scale_d + + E_SS = 200E9 * np.ones(ensemble_size) * scale_E + nu_SS = 0.3 * np.ones(ensemble_size) + k_SS = 15.3 * scale_k + d_SS = 1.57E-05 * scale_d + + E_CuCrZr = 118E9 * np.ones(ensemble_size) * scale_E + nu_CuCrZr = 0.33 * np.ones(ensemble_size) + k_CuCrZr = 345 * np.ones(ensemble_size) * scale_k + d_CuCrZr = 1.8E-05 * np.ones(ensemble_size) * scale_d + + E_AlN = 320E9 * np.ones(ensemble_size) * scale_E + nu_AlN = 0.24 * np.ones(ensemble_size) + k_AlN = 180 * np.ones(ensemble_size) * scale_k + d_AlN = 0.48E-05 * np.ones(ensemble_size) * scale_d + + E_I718 = 183E9 * np.ones(ensemble_size) * scale_E + nu_I718 = 0.31 * np.ones(ensemble_size) + k_I718 = 15.8 * scale_k + d_I718 = 1.38E-05 * scale_d + + T_ref = 22. + + m.Medium(pbl, "Mirror", "rhodium", E_rhodium, nu_rhodium, k_rhodium, + d_rhodium) + m.Medium(pbl, "Substrate", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + + if material_option(option) == 1: + m.Medium(pbl, "Holder", "SS", E_SS, nu_SS, k_SS, d_SS) + elif material_option(option) == 2: + m.Medium(pbl, "Holder", "CuCrZr", E_CuCrZr, nu_CuCrZr, k_CuCrZr, + d_CuCrZr) + + m.Medium(pbl, "Washer 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Washer 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Shaft 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Shaft 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Nut 1", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 2", "I718", E_I718, nu_I718, k_I718, d_I718) + m.Medium(pbl, "Nut 3", "I718", E_I718, nu_I718, k_I718, d_I718) + + m.Medium(pbl, "Spacer 1 part 1", "AlN", E_AlN, nu_AlN, + randomVariable_1 * scale_k, d_AlN) + m.Medium(pbl, "Spacer 2 part 1", "AlN", E_AlN, nu_AlN, + randomVariable_2 * scale_k, d_AlN) + m.Medium(pbl, "Spacer 3 part 1", "AlN", E_AlN, nu_AlN, + randomVariable_3 * scale_k, d_AlN) + + m.Medium(pbl, "Spacer 1 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + m.Medium(pbl, "Spacer 2 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + m.Medium(pbl, "Spacer 3 part 2", "WCu", E_WCu, nu_WCu, k_WCu, d_WCu) + + if clamping_option(option) == "A": + m.Dirichlet(pbl, "Holder z clamping", "Clamped", 0, 0., 0, 0., 1, 0., + 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder x-y clamping", "Clamped", 1, 0., 1, 0., 0, + 0., 0, 0., ensemble_size) + + elif clamping_option(option) == "B": + m.Dirichlet(pbl, "Holder x-y-z clamping point", "Clamped", 1, 0., 1, + 0., 1, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder z clamping point", "Clamped", 0, 0., 0, 0., + 1, 0., 0, 0., ensemble_size) + m.Dirichlet(pbl, "Holder z-y clamping point", "Clamped", 0, 0., 1, 0., + 1, 0., 0, 0., ensemble_size) + + m.Dirichlet(pbl, "Cooling channels", "Clamped", 0, 0., 0, 0., 0, 0., 1, + ((70. - T_ref) / scale_T), ensemble_size) + + if not baking: + zero = np.zeros(ensemble_size) + hf = 20. / 0.0121 * np.ones( + ensemble_size) * scale_hflux # 20 W / (0.0121 m^2) + + m.Neumann(pbl, "Mirror surface", "heat fluxes", 0, zero, 0, zero, 0, zero, + 1, hf, ensemble_size) + + m.Source(pbl, "Mirror", "ihg", 20E6 * scale_hsource) + m.Source(pbl, "Substrate", "ihg", 2.45E6 * scale_hsource) + + if material_option(option) == 1: + m.Source(pbl, "Holder", "ihg", 0.7E6 * scale_hsource) + elif material_option(option) == 2: + m.Source(pbl, "Holder", "ihg", 0.6E6 * scale_hsource) + + m.Source(pbl, "Spacer 1 part 1", "ihg", 0.3E6 * scale_hsource) + m.Source(pbl, "Spacer 2 part 1", "ihg", 0.3E6 * scale_hsource) + m.Source(pbl, "Spacer 3 part 1", "ihg", 0.3E6 * scale_hsource) + + m.Source(pbl, "Spacer 1 part 2", "ihg", 2.45E6 * scale_hsource) + m.Source(pbl, "Spacer 2 part 2", "ihg", 2.45E6 * scale_hsource) + m.Source(pbl, "Spacer 3 part 2", "ihg", 2.45E6 * scale_hsource) + + m.Source(pbl, "Shaft 1", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Shaft 2", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Shaft 3", "ihg", 0.8E6 * scale_hsource) + + m.Source(pbl, "Nut 1", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Nut 2", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Nut 3", "ihg", 0.8E6 * scale_hsource) + + m.Source(pbl, "Washer 1", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Washer 2", "ihg", 0.8E6 * scale_hsource) + m.Source(pbl, "Washer 3", "ihg", 0.8E6 * scale_hsource) + + if use_block: + m.Weight(pbl, "Mirror", 1, 0., 1, 0., 1, 1., 1, 0., ensemble_size) + + slv = m.IterativeSolver(pbl, args.k, solverList, 4, ensemble_size) + + slv.start() + + if rank == 0: + f = open('timers.txt', 'w') + print(slv.getTimers(), file=f) + f.closed + + tag_name = "Mirror surface" + name_sol = "x_mm.txt" + DOFperNode = 4 + which_dof = 2 + + x, y, z, tri, dz = u.extract_2D(msh, tag_name, DOFperNode, which_dof, + ensemble_size, name_sol) + which_dof = 3 + x, y, z, tri, T = u.extract_2D(msh, tag_name, DOFperNode, which_dof, + ensemble_size, name_sol) + np.savez('mirror_data_' + str(rank), x=x, y=y, z=z, tri=tri, dz=dz, T=T) + + if rank == 0: + for i in range(1, siz): + data = comm.recv(source=i, tag=11) + else: + comm.send(1, dest=0, tag=11) + + if small_disk_footprint: + if rank == 0: + os.remove(name_sol) + + if rank == 0: + #OAX = msh.ntags["Optical Axis"].elems[0].nodes[0].pos[0] + #OAY = msh.ntags["Optical Axis"].elems[0].nodes[0].pos[1] + OAX, OAY = 0.0595, 0.017 + OAX = (OAX / scale_u) + OAY = (OAY / scale_u) + #OAX, OAY = 0.0595, 0.017 + for i in range(0, siz): + npzfile = np.load('mirror_data_' + str(i) + '.npz') + x_i = npzfile['x'] + y_i = npzfile['y'] + z_i = 0. * x_i + dz_i = npzfile['dz'] + tri_i = npzfile['tri'] + T_i = npzfile['T'] + if i == 0: + x = x_i + y = y_i + z = z_i + dz = dz_i + tri = tri_i + T = T_i + nNodes = len(x) + else: + x = np.append(x, x_i, axis=0) + y = np.append(y, y_i, axis=0) + z = np.append(z, z_i, axis=0) + dz = np.append(dz, dz_i, axis=0) + tri = np.append(tri, tri_i + nNodes, axis=0) + T = np.append(T, T_i, axis=0) + nNodes = len(x) + x = (x / scale_u) + y = (y / scale_u) + z = (z / scale_u) + dz = (dz / scale_u) + T = T * scale_T + T_ref + np.savez('mirror_data_all', x=x, y=y, z=z, tri=tri, dz=dz, T=T) + for i in range(0, ensemble_size): + optical_coefficients, dz_residual = u.compute_RBM_Curvature_Irreg( + x, y, z, tri, dz[:, i], "m", np.array([OAX, OAY])) + np.savez('mirror_optical_results_' + str(i), + optical_coefficients=optical_coefficients, + dz_residual=dz_residual) + np.savetxt('mirror_optical_results_' + str(i) + '.out', + optical_coefficients) + + if small_disk_footprint: + if rank == 0: + for i in range(0, siz): + os.remove('mirror_data_' + str(i) + '.npz') + + +def evaluate_all_ensembles(ensemble_sizes, N, msh, comm, file_dir, + randomVariable1, randomVariable2, randomVariable3, + scale_u, scale_T, option, baking=False): + """ + This function loop over the ensemble sizes, + and the ensembles + """ + for ensemble_size in ensemble_sizes: + directory = str(ensemble_size) + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + + N_ensemble = int(np.floor(N // ensemble_size)) + + ensemble_index_min = 0 + for ensemble_index in range(ensemble_index_min, N_ensemble): + directory = str(ensemble_index) + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + + ensemble_index_start = ensemble_index * ensemble_size + ensemble_index_end = ensemble_index_start + ensemble_size + + randomVariable_cur1 = randomVariable1[ensemble_index_start: + ensemble_index_end] + + randomVariable_cur2 = randomVariable2[ensemble_index_start: + ensemble_index_end] + + randomVariable_cur3 = randomVariable3[ensemble_index_start: + ensemble_index_end] + + evaluate_one_ensemble(ensemble_size, msh, comm, file_dir, + randomVariable_cur1, randomVariable_cur2, + randomVariable_cur3, scale_u, scale_T, option, baking) + os.chdir('..') + os.chdir('..') + + +def main(): + comm, rank, siz = m.utilities.import_MPI() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + directory = 'MPI_' + str(siz) + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + + mesh_name = 'fused_mirror_assembly_mm_part_' + str(siz) + '.msh' + + msh = gmsh.MeshLoader(mesh_name, work_dir).execute(myrank=rank) + + scale_u_1 = 1000. + scale_u_2 = 1. + scale_u = scale_u_1 * scale_u_2 + scale_T = 1. + + scale_msh(msh, scale_u_2) + + N = 20 + id_case = 'Xiao' + + randomVariable_1, randomVariable_2, randomVariable_3 = random_case( + N, id_case) + + ensemble_size = int(os.getenv('ensemble_size', 1)) + + ensemble_sizes = [ensemble_size] + + N = len(randomVariable_1) + + u.mkdir_MPI(option, comm, rank, size) + os.chdir(option) + + evaluate_all_ensembles(ensemble_sizes, N, msh, comm, file_dir, + randomVariable_1, randomVariable_2, + randomVariable_3, scale_u, scale_T, option, baking=False) + os.chdir('..') + + option = 'B2' + + u.mkdir_MPI(option, comm, rank, size) + os.chdir(option) + + evaluate_all_ensembles(ensemble_sizes, N, msh, comm, file_dir, + randomVariable_1, randomVariable_2, + randomVariable_3, scale_u, scale_T, option, baking=False) + os.chdir('..') + + os.chdir('..') + + +if __name__ == "__main__": + main() diff --git a/katoptron/__init__.py b/katoptron/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bd6e47794ebe4ac07a2e04f6a1daa8e5ab8a55e8 --- /dev/null +++ b/katoptron/__init__.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8; -*- +# katoptron MODULE initialization file + + +import fwk +import tbox +try: + from katoptronw import * +except: + print('katoptronw is not imported, this build is only enough for python post processing') diff --git a/katoptron/_src/CMakeLists.txt b/katoptron/_src/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..d7fd03c000fc46b9cf2dda1a4169395706a37c25 --- /dev/null +++ b/katoptron/_src/CMakeLists.txt @@ -0,0 +1,117 @@ +# CMake input file of the SWIG wrapper around "katoptronw.so" + +INCLUDE(${SWIG_USE_FILE}) + +INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH}) + +FILE(GLOB SRCS *.h *.cpp *.inl *.swg) +FILE(GLOB ISRCS *.i) + +SET(CMAKE_SWIG_FLAGS "") +SET_SOURCE_FILES_PROPERTIES(${ISRCS} PROPERTIES CPLUSPLUS ON) + + +# -- Search for Trilinos +FIND_PACKAGE(Trilinos REQUIRED) +FIND_PACKAGE(MPI4PY REQUIRED) +#FIND_PACKAGE(NUMPY REQUIRED) + +set (_VERB 1) # set to 1 for debugging +IF(_VERB) + MESSAGE("\nFound MPI4PY! Here are the details: ") + MESSAGE(" MPI4PY_INCLUDE_DIR = ${MPI4PY_INCLUDE_DIR}") + MESSAGE(" TRILINOS_SOURCE_DIR = ${TEST_INCLUDE_DIR}") + MESSAGE("End of MPI4PY details\n") +ENDIF() + +# -------------------------------------------------------------- +# Finds MPI (including MSMPI) +# -------------------------------------------------------------- +if(WIN32) + FIND_PATH(MPI_INCLUDE_PATH NAMES mpi.h HINTS "$ENV{MSMPI_INC}") + if("${CMAKE_SIZEOF_VOID_P}" EQUAL 8) + set(MS_MPI_ARCH_DIR x64) + find_library(MPI_LIBRARIES msmpi PATHS "$ENV{MSMPI_LIB64}") + else() + set(MS_MPI_ARCH_DIR x86) + find_library(MPI_LIBRARIES msmpi PATHS "$ENV{MSMPI_LIB32}") + endif() +else() + find_package(MPI REQUIRED) + # intel mpi (mpi.h doit etre inclus avant stdio.h) + # ou definir ces 2 macros + ADD_DEFINITIONS(-DMPICH_IGNORE_CXX_SEEK -DMPICH_SKIP_MPICXX) +endif() +# -------------------------------------------------------------- + + +#Teuchos.i +#export TRILINOS_SOURCE_DIR=/Users/kliegeois/dev/Trilinos-master +#SET(TRILINOS_SOURCE_DIR /Users/kliegeois/dev/Trilinos-master) +#SET(TRILINOS_BUILD_DIR /Users/kliegeois/dev/TrilinosB) + +IF(1) +SET(SWINCFLAGS +-I${PROJECT_SOURCE_DIR}/katoptron/src +-I${PROJECT_SOURCE_DIR}/ext/amfe/tbox/src +-I${PROJECT_SOURCE_DIR}/ext/amfe/tbox/_src +-I${PROJECT_SOURCE_DIR}/ext/amfe/fwk/src +-I${PROJECT_SOURCE_DIR}/ext/amfe/fwk/_src +-I${MPI4PY_INCLUDE_DIR} +-I${Trilinos_INCLUDE_DIRS} +-I${TRILINOS_SOURCE_DIR}/packages/PyTrilinos/src +-I${TRILINOS_SOURCE_DIR}/packages/teuchos/parameterlist/src +-I${TRILINOS_BUILD_DIR}/packages/PyTrilinos/doc/Doxygen +) +ELSE() +SET(SWINCFLAGS +-I${PROJECT_SOURCE_DIR}/katoptron/src +-I${PROJECT_SOURCE_DIR}/ext/amfe/tbox/src +-I${PROJECT_SOURCE_DIR}/ext/amfe/tbox/_src +-I${PROJECT_SOURCE_DIR}/ext/amfe/fwk/src +-I${PROJECT_SOURCE_DIR}/ext/amfe/fwk/_src +-I${MPI4PY_INCLUDE_DIR} +-I${Trilinos_INCLUDE_DIRS} +) +ENDIF() +# Teuchos.i +# Teuchos_dox.i + +SET_SOURCE_FILES_PROPERTIES(${ISRCS} PROPERTIES SWIG_FLAGS "${SWINCFLAGS}") + +SWIG_ADD_MODULE(katoptronw python ${ISRCS} ${SRCS}) +MACRO_DebugPostfix(_katoptronw) + +# --- + + +IF(1) +INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/katoptron/src + ${PROJECT_SOURCE_DIR}/ext/amfe/tbox/src + ${PROJECT_SOURCE_DIR}/ext/amfe/fwk/src + ${PROJECT_SOURCE_DIR}/ext/amfe/fwk/_src + ${PROJECT_SOURCE_DIR}/ext/amfe/tbox/_src + ${Trilinos_INCLUDE_DIRS} + ${Trilinos_TPL_INCLUDE_DIRS} + ${MPI_INCLUDE_PATH} + ${MPI4PY_INCLUDE_DIR} + ${TRILINOS_SOURCE_DIR}/packages/teuchos/parameterlist/src + ${TRILINOS_SOURCE_DIR}/packages/teuchos/core/src + ${TRILINOS_SOURCE_DIR}/packages/PyTrilinos/src + ${NUMPY_INCLUDE_DIR}) +ELSE() +INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/katoptron/src + ${PROJECT_SOURCE_DIR}/ext/amfe/tbox/src + ${PROJECT_SOURCE_DIR}/ext/amfe/fwk/src + ${Trilinos_INCLUDE_DIRS} + ${Trilinos_TPL_INCLUDE_DIRS} + ${MPI_INCLUDE_PATH} + ${MPI4PY_INCLUDE_DIR}) +ENDIF() +# numpy/arrayobject.h +SWIG_LINK_LIBRARIES(katoptronw + katoptron tbox fwk ${Trilinos_LIBRARIES} ${Trilinos_TPL_LIBRARIES} ${PYTHON_LIBRARIES} +) + +INSTALL(FILES ${CMAKE_SWIG_OUTDIR}/katoptronw.py DESTINATION ${CMAKE_INSTALL_PREFIX}) +INSTALL(TARGETS _katoptronw DESTINATION ${CMAKE_INSTALL_PREFIX}) diff --git a/katoptron/_src/katoptronw.i b/katoptron/_src/katoptronw.i new file mode 100644 index 0000000000000000000000000000000000000000..ef5cb1aa8b36719170812a70830934a07a01eb88 --- /dev/null +++ b/katoptron/_src/katoptronw.i @@ -0,0 +1,134 @@ +// SWIG input file of the 'katoptron' module + +%feature("autodoc","1"); + +%module(docstring= +"'katoptronw' module: tests of Trilinos library +(c) ULg - A&M", +directors="1", +threads="1" +) katoptronw +%{ + +#include <string> +#include <sstream> +#include <typeinfo> +#include "katoptron.h" + +#include <mpi.h> +#include "Teuchos_ParameterList.hpp" + +#include "fwkw.h" +#include "tboxw.h" + +#include "DiscreteProblem.h" +#include "wProblem.h" +//#include "wSolver.h" +#include "wMedium.h" +#include "wDirichlet.h" +#include "wNeumann.h" +#include "wRandomVariable.h" +#include "wSource.h" +#include "wContact.h" +#include "wWeight.h" +#include "wDisplayHook.h" +#include "LinearSolver.h" +#include "IterativeSolver.h" + +#include <vector> + +#include "Kokkos_Init.h" + +#include "EnsembleReduction.h" + +//Fix for missing SWIGPY_SLICE_ARG with some versions of swig. +#if PY_VERSION_HEX >= 0x03020000 +# define SWIGPY_SLICE_ARG(obj) ((PyObject*) (obj)) +#else +# define SWIGPY_SLICE_ARG(obj) ((PySliceObject*) (obj)) +#endif + +%} + +%include "fwkw.swg" + +// ----------- MODULES UTILISES ------------ +%import "fwkw.i" +%import "tboxw.i" + + +// ----------- KATOPTRON CLASSES ---------------- + +// Instantiate some std templates + +%include mpi4py/mpi4py.i +%mpi4py_typemap(Comm, MPI_Comm); + +%feature("notabstract") MpiComm_int; +//%include Teuchos.i + + +//%teuchos_rcp_pydict_overrides(CONST, CLASS...); + +%include "katoptron.h" + +%shared_ptr(katoptron::Medium); +%shared_ptr(katoptron::Dirichlet); +%shared_ptr(katoptron::Neumann); +%shared_ptr(katoptron::RandomVariable); +%shared_ptr(katoptron::Contact); +%shared_ptr(katoptron::Weight); +%shared_ptr(katoptron::Source); +%shared_ptr(katoptron::Problem); + +%feature("director") DisplayHook; +%include "wDisplayHook.h" + +%feature("director:except") { + if ($error != NULL) { + std::cout << "[in director:except]\n"; + //throw Swig::DirectorMethodException(); + throw std::runtime_error("Director problem"); + } +} + +%include "wRandomVariable.h" + +%immutable katoptron::Problem::msh; // avoid the creation of the setter method +%include "wProblem.h" +//%include "wSolver.h" +%immutable katoptron::LinearSolver::tms; +%include "LinearSolver.h" +%include "IterativeSolver.h" + +%pythonappend katoptron::Medium::Medium "self.thisown=0" +%include "wMedium.h" +%pythonappend katoptron::Dirichlet::Dirichlet "self.thisown=0" +%include "wDirichlet.h" +%pythonappend katoptron::Neumann::Neumann "self.thisown=0" +%include "wNeumann.h" + +%pythonappend katoptron::Weight::Weight "self.thisown=0" +%include "wWeight.h" + +%pythonappend katoptron::Source::Source "self.thisown=0" +%include "wSource.h" +%pythonappend katoptron::Contact::Contact "self.thisown=0" +%include "wContact.h" + +%include "DiscreteProblem.h" +namespace katoptron { + %template(DiscreteProblem_d) DiscreteProblem<double>; +} + +%include "Kokkos_Init.h" +void Kokkos_Initialize(int nThreads); +void Kokkos_Finalize(void); + +%include "EnsembleReduction.h" +bool UseEnsembleReduction(); + +namespace std { + %template(std_vector_KatProblem) vector<katoptron::Problem*>; +} + diff --git a/katoptron/convergence.py b/katoptron/convergence.py new file mode 100644 index 0000000000000000000000000000000000000000..2cc46f3dca39e56c5440a0b645ba0cfb6c23b3d5 --- /dev/null +++ b/katoptron/convergence.py @@ -0,0 +1,335 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import numpy as np + +verb = False # set to True for (a lot of) debug info + +try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + siz = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() +except: + comm = None + rank = 0 + siz = 1 + name = "noname" + + +def enum(*sequential, **named): + enums = dict(list(zip(sequential, list(range(len(sequential))))), **named) + return type('Enum', (), enums) + + +tags = enum('READY', 'DONE', 'EXIT', 'START', 'WAKEUP', 'SUICIDE') + + +class Index_no_repetition_2: + def __init__(self, among_i): + self.among_i = among_i + self.n = len(among_i) + self.i = np.zeros((2,), dtype=int) + self.i_index = np.zeros((2,), dtype=int) + self.is_valid = True + for j in range(0, 2): + self.i_index[j] = j + self.i[j] = among_i[self.i_index[j]] + + def compute_next(self): + n = self.n + if self.i_index[1] < n-1: + self.i_index[1] = self.i_index[1]+1 + self.i[1] = self.among_i[self.i_index[1]] + else: + if self.i_index[0] < n-2: + self.i_index[0] = self.i_index[0]+1 + self.i_index[1] = self.i_index[0]+1 + for j in range(0, 2): + self.i[j] = self.among_i[self.i_index[j]] + else: + self.is_valid = False + return self.is_valid + + def get_i(self): + return self.i + + +class Index_no_repetition: + def __init__(self, k, n, n_0=0): + self.k = k + self.n = n + self.i = np.zeros((k,), dtype=int) + self.i_max = np.zeros((k,), dtype=int) + self.is_valid = True + for j in range(0, k): + self.i[j] = n_0+j + for j in range(0, k-1): + self.i_max[j] = self.i[j+1] - 1 + self.i_max[-1] = n - 1 + + def compute_next(self): + k = self.k + mask = (self.i < self.i_max-1) + tmp = np.argwhere(mask == True) + j = -1 + for i in range(0, k): + j = (1-mask[i])*j + mask[i]*i + if j == -1: + self.is_valid = False + else: + self.i[j:k] = self.i[j]+1+np.arange(0, k-j) + if j == 0: + j_1 = 0 + else: + j_1 = j - 1 + self.i_max[j_1:k-1] = self.i[j_1+1:k] + return self.is_valid + + def get_is_valid(self): + return self.is_valid + + def get_i(self): + return self.i + + +def compute_convergence(k_max, n, omegas, deltas, A, b, x0, verbose=False): + if siz > 1: + convergence = compute_convergence_mpi( + k_max, n, omegas, deltas, A, b, x0, verbose) + else: + convergence = compute_convergence_serial( + k_max, n, omegas, deltas, A, b, x0, verbose) + return convergence + + +def compute_sum_of_product_times_product(k, n, omegas, deltas): + i1 = Index_no_repetition(k, n) + results_sum = 0. + while True: + results_product_1 = 1. + results_product_2 = 1. + index = i1.get_i() + print(index) + results_product_1 = results_product_1 * np.prod(omegas[index]) + i2 = Index_no_repetition_2(index) + while True: + index2 = i2.get_i() + tmp = np.absolute(deltas[index2[0]]-deltas[index2[1]]) + results_product_2 = results_product_2 * tmp**2 + if not i2.compute_next(): + break + results_sum = results_sum + results_product_1 * results_product_2 + if not i1.compute_next(): + break + return results_sum + + +def compute_convergence_serial(k_max, n, omegas, deltas, A, b, x0, verbose): + convergence = np.ones((k_max,)) + convergence[0] = (np.linalg.norm(b - A.dot(x0)))**2 + old_sum = compute_sum_of_product_times_product(2, n, omegas, deltas) + convergence[1] = old_sum + for k in range(2, k_max): + new_sum = compute_sum_of_product_times_product(k+1, n, omegas, deltas) + convergence[k] = new_sum / old_sum + if verbose: + print(convergence) + old_sum = new_sum + return convergence + + +def compute_convergence_mpi(k_max, n, omegas, deltas, A, b, x0, verbose): + convergence = np.ones((k_max,)) + convergence[0] = (np.linalg.norm(b - A.dot(x0)))**2 + + if rank == 0: + master = Master() + old_sum = master.start(2, n, omegas, deltas) + convergence[1] = old_sum + else: + worker = Worker(rank) + worker.start() + + for k in range(2, k_max): + if rank == 0: + master = Master() + new_sum = master.start(k+1, n, omegas, deltas) + convergence[k] = new_sum / old_sum + old_sum = new_sum + if verbose: + print(convergence) + else: + worker = Worker(rank) + worker.start() + return convergence + + +class Job: + """ Class containing data transmitted between MPI procs + """ + + def __init__(self, omegas, deltas, index): + # input + self.omegas = omegas + self.deltas = deltas + self.index = index + # output + self.partial_sum = 0. + + def execute(self): + """ + [executed by worker processes] + solve a given job and calculate "partial_sum" + """ + results_product_1 = 1. + results_product_2 = 1. + results_product_1 = results_product_1 * \ + np.prod(self.omegas[self.index]) + i2 = Index_no_repetition_2(self.index) + while True: + index2 = i2.get_i() + tmp = np.absolute(self.deltas[index2[0]]-self.deltas[index2[1]]) + results_product_2 = results_product_2 * tmp**2 + if not i2.compute_next(): + break + self.partial_sum = self.partial_sum + results_product_1 * results_product_2 + + +class Master: + """ + MPI Process with rank #0 + """ + + def __init__(self): + self.slaves = list(range(1, siz)) + + def start(self, k, n, omegas, deltas): + """ + master loop + """ + global rank + if rank != 0: + raise Exception("this routine should be called with MPI rank=0") + if verb: + print("[%d] starting master" % rank) + + # ----------------------------------------- + + for s in self.slaves: + if verb: + print("[%d] sending wake-up signal to worker %d" % (rank, s)) + comm.send(None, dest=s, tag=tags.WAKEUP) + + ################################################# + + i1 = Index_no_repetition(k, n) + results_sum = 0 + + ################################################# + + num_workers = siz-1 + closed_workers = 0 + while closed_workers < num_workers: + # get a msg from any source + data = comm.recv(source=mpi.ANY_SOURCE, + tag=mpi.ANY_TAG, status=status) + source = status.Get_source() + tag = status.Get_tag() + if tag == tags.READY: + if verb: + print("[0] worker %d is ready" % source) + + ################################################# + + if i1.get_is_valid(): + job = Job(omegas, deltas, i1.get_i()) + + if verb: + print("[0] sending job to %d" % source) + comm.send(job, dest=source, tag=tags.START) + + # ------------------- + + i1.compute_next() + else: + + ################################################# + + if verb: + print("[%d] exit %d" % (rank, source)) + comm.send(None, dest=source, tag=tags.EXIT) + + elif tag == tags.DONE: + if verb: + print("[0] worker %d gives me its results" % source) + + ################################################# + results_sum = results_sum + data.partial_sum + ################################################# + + elif tag == tags.EXIT: + closed_workers += 1 + if verb: + print("[0] worker %d exited (%d worker(s) still running)" % ( + source, num_workers-closed_workers)) + + # ----------------------------------------- + + self.killslaves() + + return results_sum + + def killslaves(self): + global rank + for s in self.slaves: + if verb: + print("[%d] sending suicide job to %d" % (rank, s)) + comm.send(None, dest=s, tag=tags.SUICIDE) + + +class Worker: + """ + MPI Process with rank #1-#n + """ + + def __init__(self, rank): + self.rank = rank + + def start(self): + """ + worker loop + """ + if self.rank == 0: + raise Exception("this routine should be called with MPI rank!=0") + + if verb: + print("[%d] starting worker" % self.rank) + while True: + comm.recv(source=0, tag=mpi.ANY_TAG, status=status) + tag = status.Get_tag() + if tag == tags.WAKEUP: + if verb: + print("[%d] waking up" % self.rank) + while True: + comm.send(None, dest=0, tag=tags.READY) + job = comm.recv(source=0, tag=mpi.ANY_TAG, status=status) + tag = status.Get_tag() + if tag == tags.START: + if verb: + print("[%d] starting job" % self.rank) + job.execute() + if verb: + print("[%d] sending job results" % self.rank) + comm.send(job, dest=0, tag=tags.DONE) + elif tag == tags.EXIT: + if verb: + print("[%d] sending exit confirmation" % self.rank) + comm.send(None, dest=0, tag=tags.EXIT) + break + elif tag == tags.SUICIDE: + if verb: + print("[%d] I'm dying..." % self.rank) + break diff --git a/katoptron/eigenvalues.py b/katoptron/eigenvalues.py new file mode 100644 index 0000000000000000000000000000000000000000..ac08a75a5dd66857814d581989f3e7f47c5cf176 --- /dev/null +++ b/katoptron/eigenvalues.py @@ -0,0 +1,637 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import numpy as np + +from scipy.linalg import eig + +tol = 1e-6 + + +class Gauss_Seidel: + def __init__(self, A, n=1, damping=1.): + from scipy.sparse import tril + from scipy.sparse import triu + from scipy.sparse import eye + from scipy.sparse import diags + + D = diags(A.diagonal(), 0) + E = -tril(A, -1) + F = -triu(A, 1) + + self.x = np.zeros((A.shape[0],)) + + self.M = (D-damping*E).tocsr() + self.N = damping*F+(1-damping)*D + self.damping = damping + self.n = n + + self.shape = [A.shape[0], A.shape[0]] + + def dot(self, b): + from scipy.sparse.linalg import spsolve_triangular + self.x = spsolve_triangular(self.M, self.damping*b) + for i in range(0, self.n-1): + self.x = spsolve_triangular( + self.M, self.N.dot(self.x)+self.damping*b) + return self.x + + +class SIMPLE_preconditioned_matrix: + def __init__(self, Q, invQ, G, GT, R, invR, omega=1.): + from scipy.sparse import diags + self.n1 = Q.shape[0] + self.n2 = G.shape[1] + + self.x = np.zeros((self.n1+self.n2,)) + self.x_tmp = np.zeros((self.n1+self.n2,)) + + self.omega = omega + + self.Q = Q + self.G = G + self.GT = GT + + self.R = R + + self.invQ = invQ + self.invR = invR + + Qdiag = Q.diagonal() + self.invD = diags(1 / Qdiag, 0) + + self.shape = [Q.shape[0]+G.shape[1], Q.shape[0]+G.shape[1]] + + def dot(self, b): + n1 = self.n1 + n2 = self.n2 + + self.x[0:n1] = self.invQ.dot(b[0:n1]) + self.x[n1:n1+n2] = self.invR.dot(b[n1:n1+n2]-self.GT.dot(self.x[0:n1])) + + self.x_tmp[0:n1] = self.x[0:n1] - self.omega * \ + self.invD.dot(self.G.dot(self.x[n1:n1+n2])) + self.x_tmp[n1:n1+n2] = self.omega*self.x[n1:n1+n2] + + self.x[0:n1] = self.Q.dot(self.x_tmp[0:n1]) + \ + self.G.dot(self.x_tmp[n1:n1+n2]) + self.x[n1:n1+n2] = self.GT.dot(self.x_tmp[0:n1]) + + return self.x + + +def read_mm(filename, ensemble_id=-1, is_sparse=True): + from scipy.sparse import csr_matrix + + X_dim = np.genfromtxt(filename, skip_header=1, max_rows=1) + m = X_dim[0].astype(int) + n = X_dim[1].astype(int) + + if is_sparse: + nnz = X_dim[2].astype(int) + if ensemble_id == -1: + # No ensemble typed data + X = np.loadtxt(filename, skiprows=2) + + row = X[:, 0].astype(int)-1 + col = X[:, 1].astype(int)-1 + data = X[:, 2] + + else: + # Ensemble typed data + X = np.genfromtxt(filename, skip_header=2, + usecols=(0, 1, 3+ensemble_id)) + + row = X[:, 0].astype(int)-1 + col = X[:, 1].astype(int)-1 + data = X[:, 2] + + mask = data != 0. + A = csr_matrix((data[mask], (row[mask], col[mask])), shape=(m, n)) + B = A.tocsc() + else: + X = np.loadtxt(filename, skiprows=2) + if n != 1: + B = X.reshape((m, n)).T + else: + B = X.reshape((m,)) + + return B + + +def create_block(A11, A12, A21, A22): + from scipy.sparse import bmat + A = bmat([[A11, A12], [A21, A22]]) + return A + + +def get_symmetrical_part(A): + A2 = A + tmp = A - A.T + A2[tmp != 0] = 0 + return A2 + + +def Schur_complement(GT, invQ, G): + R = -GT*invQ*G + return R + + +def approx_Schur_complement(Q, G, GT): + from scipy.sparse import diags + Qdiag = Q.diagonal() + invD = diags(1 / Qdiag, 0) + R = Schur_complement(GT, invD, G) + return R + + +def SIMPLE_prec(Q, invQ, G, GT, R, invR, use_invQG=False, omega=1.): + from scipy.sparse import eye + from scipy.sparse import diags + Qdiag = Q.diagonal() + invD = diags(1 / Qdiag, 0) + n1 = Q.shape[0] + n2 = R.shape[0] + if use_invQG: + print('Warning: use_invQG is OK in SIMPLE only if we use a direct solver for each block for now') + print('Warning: this returned the preconditioned matrix and not the preconditioner matrix') + GTinvQ = invQ.T + invP = create_block(eye(n1)-(eye(n1)-Q*invD)*G*invR * + GTinvQ, (eye(n1)-Q*invD)*G*invR, None, eye(n2)) + else: + B = create_block(eye(n1), -omega*invD*G, None, omega*eye(n2)) + invM = create_block(invQ, None, -invR*GT*invQ, invR) + invP = B*invM + + return invP + + +def compute_inv(A): + from scipy.sparse.linalg import inv + invA = inv(A) + return invA + + +def compute_inv_on_image(A, B): + # Compute the inverse of A applied on the image of B: + # invAB = A^{—1} * B + from scipy.sparse.linalg import spsolve + from scipy.sparse import issparse + + if issparse(B): + B2 = B.todense() + else: + B2 = B + + invAB = spsolve(A, B2) + return invAB + + +def compute_inv_GS(A, n, damping=1.): + from scipy.sparse import tril + from scipy.sparse import triu + from scipy.sparse import eye + from scipy.sparse import diags + from scipy.sparse import issparse + Adiag = A.diagonal() + D = diags(Adiag, 0) + E = -tril(A, -1) + F = -triu(A, 1) + + M = (D-damping*E).tocsc() + N = damping*F+(1-damping)*D + invM = compute_inv(M) + invMN = invM*N + invA = invM*damping + + invMN_pow = invMN + + for i in range(0, n-1): + invA = invA + invMN_pow*invM*damping + invMN_pow = invMN_pow * invMN + + return invA + + +def compute_VW(A, b, m=0, N=1): + from scipy.linalg import qr + n = A.shape[0] + + if m == 0: + m = n + + V = np.zeros((n, m)) + W = np.zeros((n, m)) + + tmp = b.reshape((n,)) + previous_vec = np.zeros((n,)) + V[:, 0] = tmp / np.linalg.norm(tmp) + previous_vec = A.dot(V[:, 0]) + W[:, 0] = previous_vec / np.linalg.norm(previous_vec) + + for i in range(1, m): + tmp = previous_vec + for j in range(0, i): + tmp = tmp - (np.inner(tmp, V[:, j])) * V[:, j] + norm = np.linalg.norm(tmp) + if norm <= tol: + m = i + break + tmp = tmp / norm + V[:, i] = tmp + previous_vec = A.dot(V[:, i]) + norm = np.linalg.norm(previous_vec) + W[:, i] = previous_vec / norm + V = V[:, 0:m] + W = W[:, 0:m] + + q, r = np.linalg.qr(W) + W = q + + for i_N in range(0, N): + q, r = np.linalg.qr(V) + V = q + if i_N != 0: + q, r = np.linalg.qr(W) + W = q + + product = np.dot(W.T, b) + + for i in range(0, len(product)): + if product[i] < 0: + W[:, i] = -W[:, i] + return V, W + + +def compute_V(A, b, m=0, N=0): + n = A.shape[0] + + if m == 0: + m = n + + V = np.zeros((n, m)) + + tmp = b.reshape((n,)) + V[:, 0] = tmp / np.linalg.norm(tmp) + for i in range(1, m): + tmp = A.dot(V[:, i-1]) + for j in range(0, i): + tmp = tmp - (np.inner(tmp, V[:, j])) * V[:, j] + norm = np.linalg.norm(tmp) + if norm <= tol: + m = i + break + else: + tmp = tmp / norm + V[:, i] = tmp + V = V[:, 0:m] + for i in range(0, N): + for i in range(1, m): + tmp = V[:, i] + for j in range(0, i): + tmp = tmp - (np.inner(tmp, V[:, j])) * V[:, j] + norm = np.linalg.norm(tmp) + if norm <= tol: + m = i + break + else: + tmp = tmp / norm + V[:, i] = tmp + V = V[:, 0:m] + return V + + +def compute_W(A, b, V, N=0): + from scipy.linalg import qr + n = V.shape[0] + m = V.shape[1] + tmp = A.dot(V[:, 0]) + W = np.zeros((n, m)) + + W[:, 0] = tmp / np.linalg.norm(tmp) + + for i in range(1, m): + tmp = A.dot(V[:, i]) + for j in range(0, i): + tmp = tmp - (np.inner(tmp, W[:, j])) * W[:, j] + norm = np.linalg.norm(tmp) + W[:, i] = tmp / norm + for i in range(0, N): + for i in range(1, m): + tmp = W[:, i] + for j in range(0, i): + tmp = tmp - (np.inner(tmp, W[:, j])) * W[:, j] + W[:, i] = tmp / np.linalg.norm(tmp) + + product = np.dot(W.T, b) + + for i in range(0, len(product)): + if product[i] < 0: + W[:, i] = -W[:, i] + + return W + + +def compute_eig_Q(V, W): + Q = np.dot(V.T, W) + a, Z = eig(Q) + + return a, Z + + +def compute_deltas_omegas(V, W, b): + import cmath + deltas, Z = compute_eig_Q(V, W) + omegas = np.zeros((Z.shape[1],)) + for i in range(0, len(omegas)): + tmp = cmath.polar(Z[0, i]) + omegas[i] = tmp[0]**2 + + return deltas, omegas + + +def eigenvalues_ZE(Q, invQ, G, GT, R, invR, use_invQG=False): + from scipy.sparse import diags + from scipy.sparse import issparse + Qdiag = Q.diagonal() + D = diags(1 / Qdiag, 0) + invD = diags(1/ Qdiag, 0) + n1 = Q.shape[0] + n2 = R.shape[0] + v = np.ones((n1+n2,), dtype=complex) + + J = invD*(D-Q) + if use_invQG: + invQG = invQ + else: + invQG = invQ*G + ZE = J*invQG*invR*GT + + if issparse(ZE): + ZE2 = ZE.todense() + else: + ZE2 = ZE + + a, V = eig(ZE2) + + v[0:n1] = a + + return v + + +def eigenvalues_SR(invQ, G, GT, R, use_invQG=False): + from scipy.sparse import issparse + n1 = invQ.shape[0] + n2 = R.shape[0] + v = np.ones((n1+n2,), dtype=complex) + + if use_invQG: + invQG = invQ + else: + invQG = invQ*G + + S = -GT*invQG + + if issparse(S): + S2 = S.todense() + else: + S2 = S + + if issparse(R): + R2 = R.todense() + else: + R2 = R + + a, V = eig(S2, R2) + + v[0:n2] = a + + return v + + +def compute_1_eigenvector_per_eigenvale(A, v): + from scipy.sparse.linalg import eigs + n = A.shape[0] + if len(v) != 1: + nv = v.shape[0] + else: + nv = 1 + + V = np.zeros((n, nv)) + b = np.zeros((n,)) + + for i in range(0, nv): + values, vectors = eigs(A, k=1, sigma=v[i].real) + V[:, i] = vectors.reshape((n,)) + + return V + + +def jacobi_iteration_matrix(A): + from scipy.sparse import diags + from scipy.sparse import eye + + diagA = A.diagonal() + invD = diags(1 / diagA, 0) + + jacobi_iteration_matrix = eye(A.shape[0]) - np.dot(invD, A) + return jacobi_iteration_matrix + + +def is_SPD(A, tol=1e-8): + # Linked to theorem 10.1.2 (p. 512 in Golub, Matrix Computation) + # if A is SPD, then GS converge for any initial guess + A = A.todense() + if not np.allclose(A, A.T, atol=tol): + return False + else: + try: + L = np.linalg.cholesky(A) + except: + return False + return True + + +def compute_eig_and_departure_from_orthogonality(A): + from numpy import linalg as LA + w, v = LA.eig(A) + cond = LA.cond(v) + return w, v, cond + + +def diagonal_dominance(A): + is_diagonal_dominance = True + for i in range(0, A.shape[0]): + diag = np.absolute(A[i, i]) + sum_row = np.sum(np.absolute(A[i, :])) + sum_row = sum_row - diag + if diag <= sum_row: + print(str(diag) + ' <= ' + str(sum_row) + ' at row ' + str(i)) + is_diagonal_dominance = False + break + return is_diagonal_dominance + + +def spectral_radius(A): + from scipy.sparse.linalg import eigs + w, v = eigs(A, k=10, which='LM') + + spectral_radius_A = np.absolute(w[0]) + return spectral_radius_A + + +def sparse_matrix_2_norm(A): + from scipy.sparse.linalg import svds + u, s, vt = svds(A, k=1) + norm_A = s[0] + return norm_A + + +def compute_theta(v): + import cmath + theta = np.zeros((len(v),)) + for x in range(len(v)): + tmp = cmath.polar(v[x]) + theta[x] = tmp[1] + return theta + + +def compute_cum_delta(theta, deltas, omegas, n): + theta_discrete = np.linspace(-np.pi, np.pi, n) + cum_delta = np.zeros((n,)) + deriv_delta = np.zeros((n,)) + cum_delta_omega = np.zeros((n,)) + deriv_delta_omega = np.zeros((n,)) + + n_theta = len(theta) + + first_index = 0 + second_index = 0 + for i in range(1, n): + for j in range(second_index, n_theta): + if theta_discrete[i] < theta[j]: + second_index = j + break + #indices = np.argwhere((theta_discrete[i-1] <= theta ) & (theta < theta_discrete[i])) + cum_delta[i] = cum_delta[i-1] + second_index-first_index + cum_delta_omega[i] = cum_delta_omega[i-1] + \ + np.sum(omegas[first_index:second_index]) + deriv_delta[i] = second_index-(first_index / (2*np.pi/n)) + deriv_delta_omega[i] = ( + np.sum(omegas[first_index:second_index])/ (2*np.pi/n)) + first_index = second_index + + percent_delta = (cum_delta / cum_delta[n-1]) + percent_delta_omega = (cum_delta_omega / cum_delta_omega[n-1]) + + return theta_discrete, cum_delta, deriv_delta, cum_delta_omega, deriv_delta_omega, percent_delta, percent_delta_omega + + +def write_eigenvalues(v, filename): + np.savetxt(filename, v, fmt='%f %f') + + +def write_eigenvectors(v, V, filename): + np.savetxt(filename+'_eigenvalues.txt', v, fmt='%f %f') + nv = V.shape[1] + for i in range(0, nv): + np.savetxt(filename+'_eigenvectors_'+str(i)+'.txt', V[:, i]) + + +def plot_eigenvalues_on_unit_circle(v): + import matplotlib.pyplot as plt + import cmath + fig = plt.figure() + ax = fig.add_subplot(111, projection='polar') + an = np.linspace(0, 2*np.pi, 100) + ax.plot(an, np.ones(an.shape), zorder=1) + for x in range(len(v)): + tmp = cmath.polar(v[x]) + r = tmp[0] + theta = tmp[1] + ax.plot(theta, r, 'ro', zorder=2) + ax.set_ylim(0, 1.5) + ax.grid(True) + + +def plot_eigenvalues_on_unit_circle_highlight(v, indices): + import matplotlib.pyplot as plt + import cmath + fig = plt.figure() + ax = fig.add_subplot(111, projection='polar') + an = np.linspace(0, 2*np.pi, 100) + ax.plot(an, np.ones(an.shape), zorder=1) + for x in range(len(v)): + tmp = cmath.polar(v[x]) + r = tmp[0] + theta = tmp[1] + if indices[x] == 0: + ax.plot(theta, r, 'go', alpha=0.3, zorder=2) + else: + ax.plot(theta, r, 'ro', zorder=10) + ax.set_ylim(0, 1.5) + ax.grid(True) + + +def plot_polar_function(theta, f, rho_min, rho_max): + import matplotlib.pyplot as plt + scale = (rho_max-rho_min) / np.max(f) + rho = rho_min + scale*f + plt.plot(theta, rho, zorder=3) + plt.ylim(0, rho_max+0.5) + + +def plot_omegas(v): + import matplotlib.pyplot as plt + plt.figure() + v = -np.sort(-v) + plt.semilogy(v) + plt.grid(True) + + +def plot_omegas_percent(v): + import matplotlib.pyplot as plt + plt.figure() + v = -np.sort(-v) + plt.plot(np.cumsum(v) / np.sum(v)) + plt.grid(True) + + +def main(): + filename = 'ApCTC_mm.txt' + Q = read_mm(filename) + filename = 'B_mm.txt' + GT = read_mm(filename) + G = GT.transpose() + + A = create_block(Q, G, GT, None) + + R = approx_Schur_complement(Q, G, GT) + + invQ = compute_inv(Q) + invR = compute_inv(R) + invP = SIMPLE_prec(Q, invQ, G, GT, R, invR) + + AinvP = (A*invP).todense() + + a, v = eig(AinvP) + + display = 1 + + if display: + import matplotlib.pyplot as plt + for x in range(len(a)): + plt.plot(a[x].real, a[x].imag, 'ro', label='python') + limit = np.max(np.ceil(np.absolute(a))) + plt.xlim((-limit, limit)) + plt.ylim((-limit, limit)) + plt.show() + + v2 = eigenvalues_SR(Q, invQ, G, GT, R, invR) + + write_eigenvalues(a, 'eigenvalues_direct_direct.txt') + write_eigenvalues(v2, 'eigenvalues_direct_direct_2.txt') + + +if __name__ == "__main__": + main() diff --git a/katoptron/exe/CMakeLists.txt b/katoptron/exe/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..d69d79753cd65a035129fb065a1c07cde052e84b --- /dev/null +++ b/katoptron/exe/CMakeLists.txt @@ -0,0 +1,90 @@ +# Example of compiled problem using "katoptron" + +FILE(GLOB SRCS *.h *.cpp *.inl *.hpp) + +ADD_EXECUTABLE(katoptron1 ${SRCS}) +MACRO_DebugPostfix(katoptron1) + + +# -- Search for Trilinos +FIND_PACKAGE(Trilinos REQUIRED) + +set (_VERB 0) # set to 1 for debugging +IF(_VERB) + MESSAGE("\nFound Trilinos! Here are the details: ") + MESSAGE(" Trilinos_DIR = ${Trilinos_DIR}") + MESSAGE(" Trilinos_VERSION = ${Trilinos_VERSION}") + MESSAGE(" Trilinos_PACKAGE_LIST = ${Trilinos_PACKAGE_LIST}") + MESSAGE(" Trilinos_LIBRARIES = ${Trilinos_LIBRARIES}") + MESSAGE(" Trilinos_INCLUDE_DIRS = ${Trilinos_INCLUDE_DIRS}") + MESSAGE(" Trilinos_LIBRARY_DIRS = ${Trilinos_LIBRARY_DIRS}") + MESSAGE(" Trilinos_TPL_LIST = ${Trilinos_TPL_LIST}") + MESSAGE(" Trilinos_TPL_INCLUDE_DIRS = ${Trilinos_TPL_INCLUDE_DIRS}") + MESSAGE(" Trilinos_TPL_LIBRARIES = ${Trilinos_TPL_LIBRARIES}") + MESSAGE(" Trilinos_TPL_LIBRARY_DIRS = ${Trilinos_TPL_LIBRARY_DIRS}") + MESSAGE(" Trilinos_BUILD_SHARED_LIBS = ${Trilinos_BUILD_SHARED_LIBS}") + MESSAGE("End of Trilinos details\n") +ENDIF() + +# MPI check +LIST(FIND Trilinos_TPL_LIST MPI MPI_List_ID) +IF (MPI_List_ID GREATER -1) + MESSAGE("-- Checking if MPI is enabled in Trilinos: MPI ENABLED") + SET(MYAPP_MPI TRUE) + ADD_DEFINITIONS(-DMYAPP_MPI) +ELSE() + MESSAGE("-- Checking if MPI is enabled in Trilinos: MPI NOT ENABLED") + SET(MYAPP_MPI FALSE) +ENDIF() + +# Set optional dependency in MyApp on Epetra package: +# this toggles code within #ifdef MYAPP_EPETRA +LIST(FIND Trilinos_PACKAGE_LIST Epetra Epetra_List_ID) +IF (Epetra_List_ID GREATER -1) + ADD_DEFINITIONS(-DMYAPP_EPETRA) + MESSAGE("-- Looking for Epetra: -- found, compiling with -DMYAPP_EPETRA") + SET(MYAPP_EPETRA TRUE) +ELSE() + MESSAGE("-- Looking for Epetra: -- not found.") + SET(MYAPP_EPETRA FALSE) +ENDIF() + +# -------------------------------------------------------------- +# Finds MPI (including MSMPI) +# -------------------------------------------------------------- +if(WIN32) + FIND_PATH(MPI_INCLUDE_PATH NAMES mpi.h HINTS "$ENV{MSMPI_INC}") + if("${CMAKE_SIZEOF_VOID_P}" EQUAL 8) + set(MS_MPI_ARCH_DIR x64) + find_library(MPI_LIBRARIES msmpi PATHS "$ENV{MSMPI_LIB64}") + else() + set(MS_MPI_ARCH_DIR x86) + find_library(MPI_LIBRARIES msmpi PATHS "$ENV{MSMPI_LIB32}") + endif() +else() + find_package(MPI REQUIRED) + # intel mpi (mpi.h doit etre inclus avant stdio.h) + # ou definir ces 2 macros + ADD_DEFINITIONS(-DMPICH_IGNORE_CXX_SEEK -DMPICH_SKIP_MPICXX) +endif() +# -------------------------------------------------------------- + +list(REMOVE_ITEM Trilinos_LIBRARIES pytrilinos) + +INCLUDE_DIRECTORIES( ${MPI_INCLUDE_PATH} + ${PROJECT_SOURCE_DIR}/katoptron/src + ${PROJECT_SOURCE_DIR}/ext/amfe/tbox/src + ${PROJECT_SOURCE_DIR}/ext/amfe/fwk/src + ${Trilinos_INCLUDE_DIRS} + ${Trilinos_TPL_INCLUDE_DIRS} + ) + +LINK_DIRECTORIES (${Trilinos_LIBRARY_DIRS} ${Trilinos_TPL_LIBRARY_DIRS}) + +TARGET_LINK_LIBRARIES( katoptron1 + katoptron + tbox + fwk + ${Trilinos_LIBRARIES} + ${Trilinos_TPL_LIBRARIES} + ${MPI_LIBRARIES}) \ No newline at end of file diff --git a/katoptron/exe/main.cpp b/katoptron/exe/main.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b2e2067230f878d34fc16d76bee0ba543bf96bac --- /dev/null +++ b/katoptron/exe/main.cpp @@ -0,0 +1,260 @@ +#include "katoptron.h" +#include "wMshData.h" +#include "wProblem.h" +#include "wMedium.h" +#include "wDirichlet.h" +#include "wNeumann.h" +#include "wContact.h" +#include "IterativeSolver.h" +#include <mpi.h> + +#include "wGmshImport.h" +#include "wNode.h" +#include "DiscreteProblem.h" + +#include <iostream> +#include <cmath> + +#include <Teuchos_ParameterList.hpp> +#include <Teuchos_RCP.hpp> + +#include <stdlib.h> + +#include <xmmintrin.h> +#include <cmath> + +#include "Belos_Tpetra_MP_Vector.hpp" +#include "BelosLinearProblem.hpp" +#include "BelosPseudoBlockGmresSolMgr.hpp" + +#include "Kokkos_Init.h" + +const double pi = std::acos(-1); + +template <typename scalar> +void test_function(int ensemble_size) +{ + + typedef Tpetra::Vector<>::local_ordinal_type local_ordinal_type; + typedef Tpetra::Vector<>::global_ordinal_type global_ordinal_type; + + //typedef Tpetra::Map<> map_type; + //typedef Tpetra::Vector<>::scalar_type scalar_type; + //typedef Tpetra::Vector<>::mag_type magnitude_type; + typedef Tpetra::MultiVector<scalar, local_ordinal_type, global_ordinal_type> multivector_type; + //typedef Tpetra::CrsMatrix<scalar,local_ordinal_type,global_ordinal_type> crs_matrix_type; + //typedef Tpetra::CrsGraph<local_ordinal_type,global_ordinal_type> crs_graph_type; + //typedef Tpetra::Vector<scalar,local_ordinal_type,global_ordinal_type> vector_type; + + int worldsize; + MPI_Comm_size(MPI_COMM_WORLD, &worldsize); + + int myrank; + MPI_Comm_rank(MPI_COMM_WORLD, &myrank); + + int DOFperNode = 3; + + std::string mesh_name; + mesh_name = "cube.msh"; + + auto msh = std::make_shared<MshData>(); + auto gmshLoader = std::make_shared<GmshImport>(msh); + if (worldsize > 1) + gmshLoader->load(mesh_name, myrank); + else + gmshLoader->load(mesh_name, -1); + + //auto numNodes = msh->nodes.size(); + + katoptron::Problem pbl(msh, MPI_COMM_WORLD); + + double E_value = 21000.; + double nu_value = 0.29; + double k = 0.; + double d = 0.; + + std::vector<double> E, nu; + for (auto i = 0; i < ensemble_size; ++i) + { + E.push_back(E_value); + nu.push_back(nu_value); + } + + katoptron::Medium md0(pbl, std::string("Body 1"), std::string("Mat 1"), E, nu, k, d); + pbl.media[0] = &md0; + + std::vector<double> zero, dy; + for (auto i = 0; i < ensemble_size; ++i) + { + zero.push_back((double)0.); + dy.push_back((double)1.); + } + + katoptron::Dirichlet ud0(pbl, std::string("Surf 1 1"), std::string("Clamped 1"), 1, zero, 1, zero, 1, zero, 0, zero); + katoptron::Dirichlet ud1(pbl, std::string("Surf 1 2"), std::string("Clamped 1"), 0, zero, 1, dy, 0, zero, 0, zero); + + pbl.duBCs[0] = &ud0; + pbl.duBCs[1] = &ud1; + + Teuchos::ParameterList solverList; + + scalar tol = (scalar)1E-06; + solverList.set(std::string("Convergence Tolerance"), tol); + solverList.set(std::string("Maximum Iterations"), 1000); + solverList.set(std::string("Verbosity"), 33); + solverList.set(std::string("Flexible Gmres"), false); + solverList.set(std::string("Output Style"), 1); + solverList.set(std::string("Output Frequency"), 1); + //solverList.set(std::string("MueLu xml file name"), std::string("nested_multigrid_2_lvls.xml")); + solverList.set(std::string("Output Style"), 1); + //solverList.set(std::string("convert MueLu xml file"), true); + solverList.set(std::string("Use preconditioner"), false); + solverList.set(std::string("Maximum active set iteration"), 1); + solverList.set(std::string("type"), std::string("BlockGmres")); + + RCP<Teuchos::ParameterList> solverList2 = rcp(new Teuchos::ParameterList(solverList)); + + RCP<Teuchos::ParameterList> randomParams = rcp(new Teuchos::ParameterList()); + //katoptron::IterativeSolver slv(pbl, 1, solverList2, DOFperNode, (ensemble_size > 1), ensemble_size); + + auto begin = std::chrono::high_resolution_clock::now(); + + Kokkos::View<scalar *, Kokkos::LayoutLeft> a = Kokkos::View<scalar *, Kokkos::LayoutLeft>("KL Random Variables", 0); + katoptron::DiscreteProblem<scalar> discreteProblem(pbl, DOFperNode, randomParams, a); + + discreteProblem.computeMatrices(); + discreteProblem.computeLoads(); + + typedef multivector_type MV; + typedef typename multivector_type::dot_type belos_scalar; + typedef Tpetra::Operator<scalar> OP; + typedef Belos::LinearProblem<belos_scalar, MV, OP> BLinProb; + RCP<BLinProb> blinproblem = rcp(new BLinProb(discreteProblem.algebraic->matrices->K, discreteProblem.algebraic->vectors->x, discreteProblem.algebraic->vectors->b)); + blinproblem->setProblem(); + RCP<Teuchos::ParameterList> belosParams = rcp(new Teuchos::ParameterList(solverList)); + RCP<Belos::SolverManager<belos_scalar, MV, OP>> blinsolver = + rcp(new Belos::PseudoBlockGmresSolMgr<belos_scalar, MV, OP>(blinproblem, belosParams)); + //Belos::ReturnType ret = blinsolver->solve(); + blinsolver->solve(); + + auto end = std::chrono::high_resolution_clock::now(); + double total_time = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin).count(); + std::cout << ensemble_size << " " << total_time << " nanosec" << std::endl; +} + +template <typename scalar> +void test_function2(int ensemble_size) +{ + int worldsize; + MPI_Comm_size(MPI_COMM_WORLD, &worldsize); + + int myrank; + MPI_Comm_rank(MPI_COMM_WORLD, &myrank); + + int DOFperNode = 3; + + std::string mesh_name; + mesh_name = "cube.msh"; + + auto msh = std::make_shared<MshData>(); + auto gmshLoader = std::make_shared<GmshImport>(msh); + if (worldsize > 1) + gmshLoader->load(mesh_name, myrank); + else + gmshLoader->load(mesh_name, -1); + + //auto numNodes = msh->nodes.size(); + + katoptron::Problem pbl(msh, MPI_COMM_WORLD); + + double E_value = 21000.; + double nu_value = 0.29; + double k = 0.; + double d = 0.; + + std::vector<double> E, nu; + for (auto i = 0; i < ensemble_size; ++i) + { + E.push_back(E_value); + nu.push_back(nu_value); + } + + katoptron::Medium md0(pbl, std::string("Body 1"), std::string("Mat 1"), E, nu, k, d); + pbl.media[0] = &md0; + + std::vector<double> zero, dy; + for (auto i = 0; i < ensemble_size; ++i) + { + zero.push_back((double)0.); + dy.push_back((double)1.); + } + + katoptron::Dirichlet ud0(pbl, std::string("Surf 1 1"), std::string("Clamped 1"), 1, zero, 1, zero, 1, zero, 0, zero); + katoptron::Dirichlet ud1(pbl, std::string("Surf 1 2"), std::string("Clamped 1"), 0, zero, 1, dy, 0, zero, 0, zero); + + pbl.duBCs[0] = &ud0; + pbl.duBCs[1] = &ud1; + + Teuchos::ParameterList solverList; + + solverList.set(std::string("Ensemble Convergence Tolerance"), 1E-06); + solverList.set(std::string("Maximum Iterations"), 1000); + solverList.set(std::string("Verbosity"), 33); + solverList.set(std::string("Flexible Gmres"), false); + solverList.set(std::string("Output Style"), 1); + solverList.set(std::string("Output Frequency"), 1); + //solverList.set(std::string("MueLu xml file name"), std::string("nested_multigrid_2_lvls.xml")); + solverList.set(std::string("Output Style"), 1); + //solverList.set(std::string("convert MueLu xml file"), true); + solverList.set(std::string("Use preconditioner"), false); + solverList.set(std::string("Maximum active set iteration"), 1); + solverList.set(std::string("type"), std::string("BlockGmres")); + solverList.set(std::string("Write vtk files"), false); + + RCP<Teuchos::ParameterList> solverList2 = rcp(new Teuchos::ParameterList(solverList)); + katoptron::IterativeSolver slv(pbl, solverList2, DOFperNode, ensemble_size); + + auto begin2 = std::chrono::high_resolution_clock::now(); + slv.start(); + auto end2 = std::chrono::high_resolution_clock::now(); + double total_time2 = std::chrono::duration_cast<std::chrono::nanoseconds>(end2 - begin2).count(); + std::cout << ensemble_size << " " << total_time2 << " nanosec" << std::endl; +} + +int main(int argc, char **argv) +{ + size_t case_id, N, k; + if (argc > 1) + case_id = atoi(argv[1]); + else + case_id = 1; + + if (argc > 2) + N = atoi(argv[2]); + else + N = 1; + + if (argc > 3) + k = atoi(argv[3]); + else + k = 1; + + MPI_Init(NULL, NULL); + Kokkos_Initialize(k); + { + const int ensemble_size = 1; + typedef double scalar; + for (size_t i = 0; i < N; ++i) + { + std::cout << " ==================== " << std::endl; + std::cout << " =-- start test " << i << " --= " << std::endl; + std::cout << " ==================== " << std::endl; + if (case_id == 1) + test_function<scalar>(ensemble_size); + else + test_function2<scalar>(ensemble_size); + } + } + Kokkos_Finalize(); + MPI_Finalize(); +} diff --git a/katoptron/matlab/Belos/read_belos.m b/katoptron/matlab/Belos/read_belos.m new file mode 100644 index 0000000000000000000000000000000000000000..6ec2699acf61598f43377361cf12745f01f58b7f --- /dev/null +++ b/katoptron/matlab/Belos/read_belos.m @@ -0,0 +1,40 @@ +function [it, res] = read_belos(filename) + + it = []; + res = []; + + fid = fopen(filename); + + tline = fgetl(fid); + while ischar(tline) + current_length = length(tline); + if current_length > 5 + if tline(1:4) == 'Iter' + % get the iteration id + i_1 = 5; + i_2 = 5; + while tline(i_2) ~= ',' + i_2 = i_2+1; + end + it = [it, str2num(tline(i_1:i_2-1))]; + + % get the res + i_1 = i_2; + i_2 = current_length; + while tline(i_1) ~= ':' + i_1 = i_1+1; + end + res = [res, str2num(tline(i_1+1:i_2))]; + end + end + tline = fgetl(fid); + end + + figure + semilogy(it,res,'*') + grid on + box on + set(gca,'fontsize',18) + xlabel('Iteration') + ylabel('(2-Norm Res Vec) / (2-Norm Prec Res0)') +end \ No newline at end of file diff --git a/katoptron/matlab/Belos/test_belos.m b/katoptron/matlab/Belos/test_belos.m new file mode 100644 index 0000000000000000000000000000000000000000..9242fbe45cb95efd82e11270eafa33759684b9f8 --- /dev/null +++ b/katoptron/matlab/Belos/test_belos.m @@ -0,0 +1,10 @@ +clc +clear all +[it_0, res_0] = read_belos('belos_nu_0.txt'); +[it_m02, res_m02] = read_belos('belos_nu_m02.txt'); +close all +[it, res] = read_belos('belos_nu_02.txt'); +hold on +plot(it_0,res_0,'*g') +plot(it_m02,res_m02,'*r') + diff --git a/katoptron/matlab/Belos/test_belos2.m b/katoptron/matlab/Belos/test_belos2.m new file mode 100644 index 0000000000000000000000000000000000000000..a3b0bb196a9d14108451b76dfe7b6b893e0988c4 --- /dev/null +++ b/katoptron/matlab/Belos/test_belos2.m @@ -0,0 +1,41 @@ +clc +clear all +[it_wo, res_wo] = read_belos('belos_without_prec.txt'); +[it_w, res_w] = read_belos('belos_with_prec.txt'); +close all + + +figure +semilogy(it_wo,res_wo,'o','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','r') +hold on +semilogy(it_w,res_w,'o','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','g') +grid on +box on +set(gca,'fontsize',18) +xlabel('Iteration') +ylabel('(2-Norm Res Vec) / (2-Norm Prec Res0)') +hold off + +figure + +H = show_trilinos_graph('matrix_after_bc.text'); +figure +spy(H) + +H_sym = (H'+H)/2; +HH = H*H'; + +H_d_max = eigs(H, 1); +H_d_min = eigs(H, 1, 'sm'); + +H_sym_d_max = eigs(H_sym, 1); +H_sym_d_min = eigs(H_sym, 1, 'sm'); + +HH_d_max = eigs(HH, 1); +HH_d_min = eigs(HH, 1, 'sm'); \ No newline at end of file diff --git a/katoptron/matlab/Belos/test_belos3.m b/katoptron/matlab/Belos/test_belos3.m new file mode 100644 index 0000000000000000000000000000000000000000..4ef5180c94459a0bfac520040dd2478a1a0eceb5 --- /dev/null +++ b/katoptron/matlab/Belos/test_belos3.m @@ -0,0 +1,41 @@ +clc +clear all +[it_wo, res_wo] = read_belos('belos.txt'); +close all + + +figure +semilogy(it_wo,res_wo,'o','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','r') +grid on +box on +set(gca,'fontsize',18) +xlabel('Iteration') +ylabel('(2-Norm Res Vec) / (2-Norm Prec Res0)') + +figure + +H = show_trilinos_graph('matrix_after_bc.text'); +figure +spy(H) + +H_sym = (H'+H)/2; +HH = H*H'; + +H_d_max = eigs(H, 1); +H_d_min = eigs(H, 1, 'sm'); + +H_sym_d_max = eigs(H_sym, 1); +H_sym_d_min = eigs(H_sym, 1, 'sm'); + +HH_d_max = eigs(HH, 1); +HH_d_min = eigs(HH, 1, 'sm'); + +%% + +mu = H_sym_d_min; +sigma = sqrt(HH_d_max); + +rate = sqrt(1-mu^2/sigma^2) \ No newline at end of file diff --git a/katoptron/matlab/Belos/test_belos4.m b/katoptron/matlab/Belos/test_belos4.m new file mode 100644 index 0000000000000000000000000000000000000000..88aa66644c94df5ac04b2586a38de236ec30a185 --- /dev/null +++ b/katoptron/matlab/Belos/test_belos4.m @@ -0,0 +1,84 @@ +clc +clear all +[it_fg, res_fg] = read_belos('first_guess_belos_50it.text'); +[it_sg, res_sg] = read_belos('second_guess_belos_50it.text'); + +[it_e1, res_e1] = read_belos('ensemble1_guess_belos_50it.text'); +[it_e2, res_e2] = read_belos('ensemble2_guess_belos_50it.text'); +[it_e3, res_e3] = read_belos('ensemble3_guess_belos_50it.text'); +[it_e4, res_e4] = read_belos('ensemble4_guess_belos_50it.text'); +close all + + +figure +semilogy(it_fg, res_fg,'o','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','r') +hold on +semilogy(it_sg, res_sg,'o','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','g') +grid on +box on +set(gca,'fontsize',18) +xlabel('Iteration') +ylabel('(2-Norm Res Vec) / (2-Norm Prec Res0)') + + +figure + +semilogy(it_fg, res_fg,'s','LineWidth',0.5,... + 'MarkerSize',8,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','r') +hold on +semilogy(it_sg, res_sg,'s','LineWidth',0.5,... + 'MarkerSize',8,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','g') + +semilogy(it_e1, res_e1,'o','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','r') + +semilogy(it_e2, res_e2,'o','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','y') +semilogy(it_e3, res_e3,'o','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','b') +semilogy(it_e4, res_e4,'o','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','g') + + +grid on +box on +set(gca,'fontsize',18) +xlabel('Iteration') +ylabel('(2-Norm Res Vec) / (2-Norm Prec Res0)') + +fg_sol = load('solution_first_guess.text'); +sg_sol = load('solution_second_guess.text'); + +e1_sol = load('solution_e1_50it.text'); +e2_sol = load('solution_e2_50it.text'); +e3_sol = load('solution_e3_50it.text'); +e4_sol = load('solution_e4_50it.text'); + +%% +clc +max(abs(e1_sol(:,1)-fg_sol)) +max(abs(e1_sol(:,2)-fg_sol)) +max(abs(e2_sol(:,1)-fg_sol)) +max(abs(e2_sol(:,2)-sg_sol)) +max(abs(e3_sol(:,1)-sg_sol)) +max(abs(e3_sol(:,2)-fg_sol)) +max(abs(e4_sol(:,1)-sg_sol)) +max(abs(e4_sol(:,2)-sg_sol)) \ No newline at end of file diff --git a/katoptron/matlab/Belos/test_belos5.m b/katoptron/matlab/Belos/test_belos5.m new file mode 100644 index 0000000000000000000000000000000000000000..5e73867a88ecddfe625ae0f006bfd43ffb047c57 --- /dev/null +++ b/katoptron/matlab/Belos/test_belos5.m @@ -0,0 +1,43 @@ +clc +clear all +[it_fg, res_fg] = read_belos('low_frequence_belos.text'); +[it_fgw, res_fgw] = read_belos('low_frequence_w_noise_belos.text'); +[it_sg, res_sg] = read_belos('high_frequence_belos.text'); +[it_sgw, res_sgw] = read_belos('high_frequence_w_noise_belos.text'); +[it_tg, res_tg] = read_belos('low_and_high_frequence_belos.text'); +[it_tgw, res_tgw] = read_belos('low_and_high_frequence_w_noise_belos.text'); +close all + + +figure +semilogy(it_fg, res_fg,'o','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','r') +hold on +semilogy(it_fgw, res_fgw,'o','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','r',... + 'MarkerFaceColor','r') +semilogy(it_sg, res_sg,'o','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','g') +semilogy(it_sgw, res_sgw,'o','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','g',... + 'MarkerFaceColor','g') +semilogy(it_tg, res_tg,'o','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','b') +semilogy(it_tgw, res_tgw,'o','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','b',... + 'MarkerFaceColor','b') +grid on +box on +set(gca,'fontsize',18) +xlabel('Iteration') +ylabel('(2-Norm Res Vec) / (2-Norm Prec Res0)') + diff --git a/katoptron/matlab/Belos/test_belos6.m b/katoptron/matlab/Belos/test_belos6.m new file mode 100644 index 0000000000000000000000000000000000000000..cbad3c020f9aae96784cb419f12d3e037e2c06bf --- /dev/null +++ b/katoptron/matlab/Belos/test_belos6.m @@ -0,0 +1,76 @@ +close all +clc +clear all +[it_1g, res_1g] = read_belos('multi_low_frequence_belos.text'); +[it_2g, res_2g] = read_belos('multi_high_frequence_belos.text'); + +[it_3g, res_3g] = read_belos('multi_low_frequence_belos2.text'); +[it_4g, res_4g] = read_belos('multi_high_frequence_belos2.text'); +[it_5g, res_5g] = read_belos('multiFGuess_belos.text'); +[it_6g, res_6g] = read_belos('multiF2Guess_belos.text'); + +[it_1e, res_1e] = read_belos('multi_frequence_ensemble1_belos.text'); +[it_2e, res_2e] = read_belos('multi_frequence_ensemble2_belos.text'); + +[it_3e, res_3e] = read_belos('multi_frequence_ensemble3_belos.text'); +[it_4e, res_4e] = read_belos('multi_frequence_ensemble4_belos.text'); + + +%% +close all +figure +semilogy(it_1g, res_1g,'o','LineWidth',1,... + 'MarkerSize',8,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','r') +hold on +semilogy(it_2g, res_2g,'o','LineWidth',1,... + 'MarkerSize',8,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','g') +semilogy(it_3g, res_3g,'s','LineWidth',1,... + 'MarkerSize',8,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','r') +semilogy(it_4g, res_4g,'s','LineWidth',1,... + 'MarkerSize',8,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','g') +semilogy(it_5g, res_5g,'s','LineWidth',1,... + 'MarkerSize',8,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','b') +grid on +box on +set(gca,'fontsize',18) +xlabel('Iteration') +ylabel('(2-Norm Res Vec) / (2-Norm Prec Res0)') +hold off + +figure +semilogy(it_1g, res_1g,'r','LineWidth',2) +hold on +semilogy(it_2g, res_2g,'g','LineWidth',2) +semilogy(it_1e, res_1e,'o','LineWidth',0.5,... + 'MarkerSize',16,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','r') +semilogy(it_2e, res_2e,'o','LineWidth',0.5,... + 'MarkerSize',16,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','g') +semilogy(it_3e, res_3e,'s','LineWidth',0.5,... + 'MarkerSize',8,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','r') +semilogy(it_4e, res_4e,'s','LineWidth',0.5,... + 'MarkerSize',8,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','g') + +grid on +box on +set(gca,'fontsize',18) +xlabel('Iteration') +ylabel('(2-Norm Res Vec) / (2-Norm Prec Res0)') +hold off diff --git a/katoptron/matlab/Belos/test_belos7.m b/katoptron/matlab/Belos/test_belos7.m new file mode 100644 index 0000000000000000000000000000000000000000..fc0df41935be86ae0b7750025ec91d41d992a138 --- /dev/null +++ b/katoptron/matlab/Belos/test_belos7.m @@ -0,0 +1,204 @@ +close all +clc +clear all + +Afull = load('matrixA.txt'); +A = sparse(Afull); + +b = load('vector_after_bc.text'); + +if size(b,2) == 2 + b = b(:,1); +end + +solution_1it_ensemble1 = load('multi_frequence_ensemble1_belos_1it_solution.text'); +solution_1it_ensemble2 = load('multi_frequence_ensemble2_belos_1it_solution.text'); +solution_1it_ensemble3 = load('multi_frequence_ensemble3_belos_1it_solution.text'); +solution_1it_ensemble4 = load('multi_frequence_ensemble4_belos_1it_solution.text'); + +guess_ensemble1 = load('multi_frequence_ensemble1_guess.text'); +guess_ensemble2 = load('multi_frequence_ensemble2_guess.text'); +guess_ensemble3 = load('multi_frequence_ensemble3_guess.text'); +guess_ensemble4 = load('multi_frequence_ensemble4_guess.text'); + +[it_1e, res_1e] = read_belos('multi_frequence_ensemble1_belos_1it.text'); +[it_2e, res_2e] = read_belos('multi_frequence_ensemble2_belos_1it.text'); + +[it_3e, res_3e] = read_belos('multi_frequence_ensemble3_belos_1it.text'); +[it_4e, res_4e] = read_belos('multi_frequence_ensemble4_belos_1it.text'); + + +%% +close all +figure +semilogy(it_1e, res_1e,'o','LineWidth',0.5,... + 'MarkerSize',16,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','r') +hold on +semilogy(it_2e, res_2e,'o','LineWidth',0.5,... + 'MarkerSize',16,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','g') +semilogy(it_3e, res_3e,'s','LineWidth',0.5,... + 'MarkerSize',8,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','r') +semilogy(it_4e, res_4e,'s','LineWidth',0.5,... + 'MarkerSize',8,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','g') + +grid on +box on +set(gca,'fontsize',18) +xlabel('Iteration') +ylabel('(2-Norm Res Vec) / (2-Norm Prec Res0)') +hold off + +%% +format long +solution_1it_ensemble1_1 = solution_1it_ensemble1(:,1); +solution_1it_ensemble1_2 = solution_1it_ensemble1(:,2); + +solution_1it_ensemble2_1 = solution_1it_ensemble2(:,1); +solution_1it_ensemble2_2 = solution_1it_ensemble2(:,2); + +solution_1it_ensemble3_1 = solution_1it_ensemble3(:,1); +solution_1it_ensemble3_2 = solution_1it_ensemble3(:,2); + +solution_1it_ensemble4_1 = solution_1it_ensemble4(:,1); +solution_1it_ensemble4_2 = solution_1it_ensemble4(:,2); + +guess_ensemble5 = guess_ensemble2; +solution_1it_ensemble5 = [solution_1it_ensemble1(:,1),solution_1it_ensemble4(:,2)]; + +norm_r0 = zeros(5,3); + +norm_r0(1,1) = norm(b-A*guess_ensemble1(:,1)); +norm_r0(1,2) = norm(b-A*guess_ensemble1(:,2)); + +norm_r0(2,1) = norm(b-A*guess_ensemble2(:,1)); +norm_r0(2,2) = norm(b-A*guess_ensemble2(:,2)); + +norm_r0(3,1) = norm(b-A*guess_ensemble3(:,1)); +norm_r0(3,2) = norm(b-A*guess_ensemble3(:,2)); + +norm_r0(4,1) = norm(b-A*guess_ensemble4(:,1)); +norm_r0(4,2) = norm(b-A*guess_ensemble4(:,2)); + +norm_r0(5,1) = norm(b-A*guess_ensemble5(:,1)); +norm_r0(5,2) = norm(b-A*guess_ensemble5(:,2)); + +for i=1:5 + norm_r0(i,3) = sqrt(norm_r0(i,1)^2+norm_r0(i,2)^2); +end + +norm_1it = zeros(5,3); + +norm_1it(1,1) = norm(b-A*solution_1it_ensemble1_1); +norm_1it(1,2) = norm(b-A*solution_1it_ensemble1_2); + +norm_1it(2,1) = norm(b-A*solution_1it_ensemble2_1); +norm_1it(2,2) = norm(b-A*solution_1it_ensemble2_2); + +norm_1it(3,1) = norm(b-A*solution_1it_ensemble3_1); +norm_1it(3,2) = norm(b-A*solution_1it_ensemble3_2); + +norm_1it(4,1) = norm(b-A*solution_1it_ensemble4_1); +norm_1it(4,2) = norm(b-A*solution_1it_ensemble4_2); + +norm_1it(5,1) = norm(b-A*solution_1it_ensemble5(:,1)); +norm_1it(5,2) = norm(b-A*solution_1it_ensemble5(:,2)); + +for i=1:5 + norm_1it(i,3) = sqrt(norm_1it(i,1)^2+norm_1it(i,2)^2); +end + +ratio_1it_r0 = zeros(5,4); +for i=1:5 + ratio_1it_r0(i,1:3) = norm_1it(i,:)./norm_r0(i,:); +end + +ratio_1it_r0(1:4,4) = [res_1e(end);res_2e(end);res_3e(end);res_4e(end)]; + +clc +norm_r0 +norm_1it +ratio_1it_r0 + +c_1 = zeros(5,3); +max_abs_error = zeros(5,3); + +for i =1:2 + r0 = b-A*guess_ensemble1(:,i); + %r0 = r0 /norm(r0); + c_1(1,i) = r0'*(solution_1it_ensemble1(:,i)-guess_ensemble1(:,i))/norm(r0)^2; + max_abs_error(1,i) = max(abs(guess_ensemble1(:,i)+c_1(1,i)*r0-solution_1it_ensemble1(:,i))); +end + +guess = [guess_ensemble1(:,1);guess_ensemble1(:,2)]; +r0 = [b-A*guess_ensemble1(:,1);b-A*guess_ensemble1(:,2)]; +sol = [solution_1it_ensemble1(:,1);solution_1it_ensemble1(:,2)]; +%r0 = r0 /norm(r0); +c_1(1,3) = r0'*(sol-guess)/norm(r0)^2; +max_abs_error(1,3) = max(abs(guess+c_1(1,3)*r0-sol)); + +for i =1:2 + r0 = b-A*guess_ensemble2(:,i); + %r0 = r0 /norm(r0); + c_1(2,i) = r0'*(solution_1it_ensemble2(:,i)-guess_ensemble2(:,i))/norm(r0)^2; + max_abs_error(2,i) = max(abs(guess_ensemble2(:,i)+c_1(2,i)*r0-solution_1it_ensemble2(:,i))); +end + +guess = [guess_ensemble2(:,1);guess_ensemble2(:,2)]; +r0 = [b-A*guess_ensemble2(:,1);b-A*guess_ensemble2(:,2)]; +sol = [solution_1it_ensemble2(:,1);solution_1it_ensemble2(:,2)]; +%r0 = r0 /norm(r0); +c_1(2,3) = r0'*(sol-guess)/norm(r0)^2; +max_abs_error(2,3) = max(abs(guess+c_1(2,3)*r0-sol)); + +for i =1:2 + r0 = b-A*guess_ensemble3(:,i); + %r0 = r0 /norm(r0); + c_1(3,i) = r0'*(solution_1it_ensemble3(:,i)-guess_ensemble3(:,i))/norm(r0)^2; + max_abs_error(3,i) = max(abs(guess_ensemble3(:,i)+c_1(3,i)*r0-solution_1it_ensemble3(:,i))); +end + +guess = [guess_ensemble3(:,1);guess_ensemble3(:,2)]; +r0 = [b-A*guess_ensemble3(:,1);b-A*guess_ensemble3(:,2)]; +sol = [solution_1it_ensemble3(:,1);solution_1it_ensemble3(:,2)]; +%r0 = r0 /norm(r0); +c_1(3,3) = r0'*(sol-guess)/norm(r0)^2; +max_abs_error(3,3) = max(abs(guess+c_1(3,3)*r0-sol)); + +for i =1:2 + r0 = b-A*guess_ensemble4(:,i); + %r0 = r0 /norm(r0); + c_1(4,i) = r0'*(solution_1it_ensemble4(:,i)-guess_ensemble4(:,i))/norm(r0)^2; + max_abs_error(4,i) = max(abs(guess_ensemble4(:,i)+c_1(4,i)*r0-solution_1it_ensemble4(:,i))); +end + +guess = [guess_ensemble4(:,1);guess_ensemble4(:,2)]; +r0 = [b-A*guess_ensemble4(:,1);b-A*guess_ensemble4(:,2)]; +sol = [solution_1it_ensemble4(:,1);solution_1it_ensemble4(:,2)]; +%r0 = r0 /norm(r0); +c_1(4,3) = r0'*(sol-guess)/norm(r0)^2; +max_abs_error(4,3) = max(abs(guess+c_1(4,3)*r0-sol)); + +for i =1:2 + r0 = b-A*guess_ensemble5(:,i); + %r0 = r0 /norm(r0); + c_1(5,i) = r0'*(solution_1it_ensemble5(:,i)-guess_ensemble5(:,i))/norm(r0)^2; + max_abs_error(5,i) = max(abs(guess_ensemble5(:,i)+c_1(5,i)*r0-solution_1it_ensemble5(:,i))); +end + +guess = [guess_ensemble5(:,1);guess_ensemble5(:,2)]; +r0 = [b-A*guess_ensemble5(:,1);b-A*guess_ensemble5(:,2)]; +sol = [solution_1it_ensemble5(:,1);solution_1it_ensemble5(:,2)]; +%r0 = r0 /norm(r0); +c_1(5,3) = r0'*(sol-guess)/norm(r0)^2; +max_abs_error(5,3) = max(abs(guess+c_1(5,3)*r0-sol)); + +c_1 +max_abs_error \ No newline at end of file diff --git a/katoptron/matlab/Belos/test_belos8.m b/katoptron/matlab/Belos/test_belos8.m new file mode 100644 index 0000000000000000000000000000000000000000..a157e5f189ecdd07460b8779bdef8a4e4d7335fc --- /dev/null +++ b/katoptron/matlab/Belos/test_belos8.m @@ -0,0 +1,25 @@ +%close all +clc +clear all + +[it_1g, res_1g] = read_belos('multiFGuess_belos.text'); +[it_2g, res_2g] = read_belos('multiFGuess_belos_preconditioned.text'); + +%% +close all +figure +semilogy(it_1g, res_1g,'o','LineWidth',1,... + 'MarkerSize',8,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','r') +hold on +semilogy(it_2g, res_2g,'o','LineWidth',1,... + 'MarkerSize',8,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','g') +grid on +box on +set(gca,'fontsize',18) +xlabel('Iteration') +ylabel('(2-Norm Res Vec) / (2-Norm Prec Res0)') +hold off diff --git a/katoptron/matlab/CPU statistic/amesos2_klu2.mat b/katoptron/matlab/CPU statistic/amesos2_klu2.mat new file mode 100644 index 0000000000000000000000000000000000000000..f00dacc8efdaaaef8c220acc2504d01acd889e18 Binary files /dev/null and b/katoptron/matlab/CPU statistic/amesos2_klu2.mat differ diff --git a/katoptron/matlab/CPU statistic/amesos_belos.mat b/katoptron/matlab/CPU statistic/amesos_belos.mat new file mode 100644 index 0000000000000000000000000000000000000000..7988f8339f14b60bbff74236cf804e5464f57e51 Binary files /dev/null and b/katoptron/matlab/CPU statistic/amesos_belos.mat differ diff --git a/katoptron/matlab/CPU statistic/cube_.tex b/katoptron/matlab/CPU statistic/cube_.tex new file mode 100644 index 0000000000000000000000000000000000000000..ab7dfc3b54f4bc87c6017087ca60a8c1699895a4 --- /dev/null +++ b/katoptron/matlab/CPU statistic/cube_.tex @@ -0,0 +1,238 @@ +% This file was created by matlab2tikz. +% Minimal pgfplots version: 1.3 +% +%The latest updates can be retrieved from +% http://www.mathworks.com/matlabcentral/fileexchange/22022-matlab2tikz +%where you can also make suggestions and rate matlab2tikz. +% +\begin{tikzpicture} + +\begin{axis}[% +width=6.027778in, +height=4.669444in, +at={(1.011111in,0.726389in)}, +scale only axis, +xmin=1, +xmax=200, +xlabel={Number of linear iterations}, +xmajorgrids, +ymin=0.3, +ymax=1, +ylabel={Scalability [-]}, +ymajorgrids, +legend style={at={(0.97,0.03)},anchor=south east,legend cell align=left,align=left,draw=white!15!black} +] +\addplot [color=blue,solid,line width=2.0pt] + table[row sep=crcr]{% +1 0.314102564102564\\ +2 0.411347517730496\\ +3 0.48030303030303\\ +4 0.531746031746032\\ +5 0.571596244131455\\ +6 0.60337552742616\\ +7 0.629310344827586\\ +8 0.650877192982456\\ +9 0.669093851132686\\ +10 0.684684684684685\\ +11 0.698179271708683\\ +12 0.70997375328084\\ +13 0.72037037037037\\ +14 0.72960372960373\\ +15 0.737858719646799\\ +16 0.745283018867924\\ +17 0.751996007984032\\ +18 0.758095238095238\\ +19 0.763661202185792\\ +20 0.768760907504363\\ +21 0.773450586264657\\ +22 0.777777777777778\\ +23 0.781782945736434\\ +24 0.785500747384155\\ +25 0.788961038961039\\ +26 0.792189679218968\\ +27 0.795209176788124\\ +28 0.798039215686274\\ +29 0.800697084917617\\ +30 0.80319803198032\\ +31 0.805555555555556\\ +32 0.807781649245064\\ +33 0.809887005649717\\ +34 0.811881188118812\\ +35 0.813772775991425\\ +36 0.815569487983281\\ +37 0.817278287461774\\ +38 0.818905472636816\\ +39 0.820456754130223\\ +40 0.821937321937322\\ +41 0.823351903435469\\ +42 0.824704813805631\\ +43 0.826\\ +44 0.827241079199304\\ +45 0.82843137254902\\ +46 0.829573934837093\\ +47 0.830671580671581\\ +48 0.831726907630522\\ +49 0.83274231678487\\ +50 0.833720030935808\\ +51 0.83466211085801\\ +52 0.835570469798658\\ +53 0.836446886446886\\ +54 0.837293016558675\\ +55 0.838110403397027\\ +56 0.838900487125957\\ +57 0.839664613278576\\ +58 0.84040404040404\\ +59 0.841119946984758\\ +60 0.841813437703849\\ +61 0.842485549132948\\ +62 0.843137254901961\\ +63 0.843769470404984\\ +64 0.844383057090239\\ +65 0.844978826376286\\ +66 0.845557543231962\\ +67 0.846119929453263\\ +68 0.846666666666667\\ +69 0.847198399085192\\ +70 0.847715736040609\\ +71 0.848219254312743\\ +72 0.848709500274574\\ +73 0.849186991869919\\ +74 0.849652220438737\\ +75 0.850105652403592\\ +76 0.850547730829421\\ +77 0.850978876867594\\ +78 0.851399491094148\\ +79 0.851809954751131\\ +80 0.852210630899156\\ +81 0.852601865488464\\ +82 0.852983988355167\\ +83 0.853357314148681\\ +84 0.853722143195828\\ +85 0.854078762306611\\ +86 0.854427445526194\\ +87 0.854768454837231\\ +88 0.855102040816327\\ +89 0.855428443248093\\ +90 0.855747891699956\\ +91 0.856060606060606\\ +92 0.856366797044763\\ +93 0.856666666666667\\ +94 0.856960408684547\\ +95 0.857248209018121\\ +96 0.85753024614101\\ +97 0.857806691449814\\ +98 0.858077709611452\\ +99 0.858343458890239\\ +100 0.858604091456077\\ +101 0.85885975367501\\ +102 0.859110586383314\\ +103 0.859356725146199\\ +104 0.859598300502124\\ +105 0.859835438193647\\ +106 0.860068259385665\\ +107 0.860296880871853\\ +108 0.860521415270019\\ +109 0.860741971207088\\ +110 0.860958653494329\\ +111 0.861171563293435\\ +112 0.861380798274002\\ +113 0.861586452762923\\ +114 0.861788617886179\\ +115 0.86198738170347\\ +116 0.862182829336114\\ +117 0.86237504308859\\ +118 0.862564102564103\\ +119 0.8627500847745\\ +120 0.862933064244871\\ +121 0.863113113113113\\ +122 0.86329030122476\\ +123 0.863464696223317\\ +124 0.863636363636364\\ +125 0.863805366957646\\ +126 0.863971767725377\\ +127 0.864135625596944\\ +128 0.864296998420221\\ +129 0.864455942301662\\ +130 0.864612511671335\\ +131 0.864766759345073\\ +132 0.86491873658387\\ +133 0.865068493150685\\ +134 0.865216077364763\\ +135 0.865361536153616\\ +136 0.86550491510277\\ +137 0.865646258503401\\ +138 0.865785609397944\\ +139 0.865923009623797\\ +140 0.866058499855199\\ +141 0.866192119643371\\ +142 0.866323907455013\\ +143 0.86645390070922\\ +144 0.866582135812905\\ +145 0.866708648194794\\ +146 0.866833472338059\\ +147 0.866956641811654\\ +148 0.867078189300412\\ +149 0.86719814663396\\ +150 0.867316544814514\\ +151 0.867433414043583\\ +152 0.867548783747661\\ +153 0.867662682602922\\ +154 0.867775138558987\\ +155 0.867886178861789\\ +156 0.86799583007558\\ +157 0.868104118104118\\ +158 0.868211068211068\\ +159 0.868316705039652\\ +160 0.868421052631579\\ +161 0.868524134445287\\ +162 0.868625973373524\\ +163 0.8687265917603\\ +164 0.868826011417225\\ +165 0.86892425363928\\ +166 0.869021339220015\\ +167 0.869117288466228\\ +168 0.869212121212121\\ +169 0.869305856832972\\ +170 0.869398514258327\\ +171 0.869490111984751\\ +172 0.869580668088131\\ +173 0.869670200235571\\ +174 0.869758725696885\\ +175 0.869846261355695\\ +176 0.869932823720176\\ +177 0.870018428933426\\ +178 0.870103092783505\\ +179 0.870186830713147\\ +180 0.870269657829141\\ +181 0.870351588911427\\ +182 0.870432638421879\\ +183 0.870512820512821\\ +184 0.870592149035263\\ +185 0.870670637546879\\ +186 0.870748299319728\\ +187 0.870825147347741\\ +188 0.870901194353963\\ +189 0.87097645279758\\ +190 0.871050934880722\\ +191 0.871124652555057\\ +192 0.871197617528185\\ +193 0.871269841269841\\ +194 0.871341335017898\\ +195 0.871412109784203\\ +196 0.871482176360225\\ +197 0.871551545322547\\ +198 0.871620227038184\\ +199 0.871688231669747\\ +200 0.871755569180462\\ +}; +\addlegendentry{Actual}; + +\addplot [color=red,dashed,line width=2.0pt] + table[row sep=crcr]{% +1 1\\ +200 1\\ +}; +\addlegendentry{Ideal}; + +\end{axis} +\end{tikzpicture}% \ No newline at end of file diff --git a/katoptron/matlab/CPU statistic/cube_test_nic4_distributed.m b/katoptron/matlab/CPU statistic/cube_test_nic4_distributed.m new file mode 100644 index 0000000000000000000000000000000000000000..8d3ca747241bd720a78798d9eb69282aac2a8885 --- /dev/null +++ b/katoptron/matlab/CPU statistic/cube_test_nic4_distributed.m @@ -0,0 +1,182 @@ +close all +clc +clear all + +np = 1:19; + +%222.9 +map = [0.1, 58.8, 27.9, 15.1, 10.2, 7.2, 5.2, 4.1, 3.3, 2.7, 2.3, 2.0, 1.6, 1.4, 1.3, 1.1, 1.0, 0.9, 0.8]; +graph = [75.4, 37.8, 27.0, 19.2, 15.7, 13.7, 11.5, 10.2, 8.7, 8.0, 7.5, 6.8, 6.4, 5.8, 5.4, 5.2, 5.0, 4.8, 4.5]; +assembly = [140.3, 71.6, 46.1, 35.9, 28.6, 23.9, 20.0, 17.9, 15.3, 13.9, 12.6, 11.7, 10.4, 10., 9.4, 8.5, 7.7, 7.5, 7.3]; + +total = map+graph+assembly; + +line_width = 1.5; +bar_width = 1; +figure +b1 = bar(np+0.5,map+graph+assembly,bar_width,'r','LineWidth',line_width); +hold on +b2 = bar(np+0.5,graph+assembly,bar_width,'g','LineWidth',line_width); +b3 = bar(np+0.5,assembly,bar_width,'b','LineWidth',line_width); +xlabel('MPI process') +ylabel('Real CPU cost [sec]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,20]) +legend([b1,b2,b3],'Map','Graph','Matrix') +%matlab2tikz('mpi_cube_real_CPU.tex') + + +figure +b1 = bar(np+0.5,(map+graph+assembly)./total,bar_width,'r','LineWidth',line_width); +hold on +b2 = bar(np+0.5,(graph+assembly)./total,bar_width,'g','LineWidth',line_width); +b3 = bar(np+0.5,assembly./total,bar_width,'b','LineWidth',line_width); +xlabel('MPI process') +ylabel('Relative CPU cost [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,20]) +legend([b1,b2,b3],'Map','Graph','Matrix', 'Location','SouthEast') +%matlab2tikz('mpi_cube_relative_CPU.tex') + +% figure +% b1 = bar(np+0.5,(map+graph+assembly).*np,bar_width,'r','LineWidth',line_width); +% hold on +% b2 = bar(np+0.5,(graph+assembly).*np,bar_width,'g','LineWidth',line_width); +% b3 = bar(np+0.5,(assembly).*np,bar_width,'b','LineWidth',line_width); +% xlabel('MPI process') +% ylabel('Used CPU cost [sec]') +% set(gca,'fontsize',18) +% grid on +% box on +% xlim([1,20]) +% legend([b1,b2,b3],'Map','Graph','Matrix') +%matlab2tikz('mpi_cube_used_CPU.tex') + +line_width = 2; + +figure +p1 = plot(np,total(1)./total,'-bo',... + 'LineWidth',line_width,... + 'MarkerEdgeColor','b',... + 'MarkerFaceColor',[.49 1 .63],... + 'MarkerSize',10); +hold on +p2 = plot(np,np,'r--','LineWidth',line_width); +xlabel('MPI process') +ylabel('Speedup [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,19]) +legend([p1,p2],'Actual','Ideal', 'Location','SouthEast') +%matlab2tikz('mpi_cube_speed_up.tex') + +figure +p1 =plot(np,(total(1))./(total.*np),'-bo',... + 'LineWidth',line_width,... + 'MarkerEdgeColor','b',... + 'MarkerFaceColor',[.49 1 .63],... + 'MarkerSize',10); +hold on +p2 = plot([1,19],[1,1],'r--','LineWidth',line_width); +xlabel('MPI process') +ylabel('Efficiency [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,19]) +legend([p1,p2],'Actual','Ideal', 'Location','SouthEast') +%matlab2tikz('mpi_cube_scalability.tex') + +%% + +figure +p1 = plot(np,assembly(1)./assembly,'-bo',... + 'LineWidth',line_width,... + 'MarkerEdgeColor','b',... + 'MarkerFaceColor',[.49 1 .63],... + 'MarkerSize',10); +hold on +p2 = plot(np,np,'r--','LineWidth',line_width); +xlabel('MPI process') +ylabel('Speedup [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,19]) +legend([p1,p2],'Actual','Ideal', 'Location','SouthEast') +%matlab2tikz('mpi_cube_speed_up.tex') + +figure +p1 =plot(np,(assembly(1))./(assembly.*np),'-bo',... + 'LineWidth',line_width,... + 'MarkerEdgeColor','b',... + 'MarkerFaceColor',[.49 1 .63],... + 'MarkerSize',10); +hold on +p2 = plot([1,19],[1,1],'r--','LineWidth',line_width); +xlabel('MPI process') +ylabel('Efficiency [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,19]) +legend([p1,p2],'Actual','Ideal', 'Location','SouthEast') +%matlab2tikz('mpi_cube_scalability.tex') + +%% + +close all +clc +clear all + +np = 12; + +n_iter = linspace(1,200,200); + +map = [0.1,2.]; +graph = [75.4,6.8]; +assembly = [140.3,11.7]; + +for i=1:length(n_iter) + total(i,:) = map(:)+graph(:)+n_iter(i)*assembly(:); +end + +line_width = 2; + +figure +p1 = plot(n_iter,total(:,1)./total(:,2),'-b',... + 'LineWidth',line_width); +hold on +p2 = plot([1,max(n_iter)],[np,np],'r--','LineWidth',line_width); +p3 = plot([1,max(n_iter)],[assembly(1)/assembly(2),assembly(1)/assembly(2)],'g--','LineWidth',line_width); +xlabel('Number of linear iterations') +ylabel('Speedup [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,max(n_iter)]) +ylim([10,12]) +legend([p1,p2,p3],'Actual','Ideal','Theoretical limit', 'Location','SouthEast') +matlab2tikz('cube_linear_speed_mpi.tex') + +figure +p1 =plot(n_iter,total(:,1)./(total(:,2)*np),'-b',... + 'LineWidth',line_width); +hold on +p2 = plot([1,max(n_iter)],[1,1],'r--','LineWidth',line_width); +p3 = plot([1,max(n_iter)],[assembly(1)/(np*assembly(2)),assembly(1)/(np*assembly(2))],'g--','LineWidth',line_width); +xlabel('Number of linear iterations') +ylabel('Efficiency [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,max(n_iter)]) +ylim([0.8,1]) +legend([p1,p2,p3],'Actual','Ideal','Theoretical limit', 'Location','SouthEast') +matlab2tikz('cube_linear_sca_mpi.tex') + diff --git a/katoptron/matlab/CPU statistic/cube_test_nic4_distributed_mean.m b/katoptron/matlab/CPU statistic/cube_test_nic4_distributed_mean.m new file mode 100644 index 0000000000000000000000000000000000000000..bebb6835de99554e0d18219420a5c68704fd538c --- /dev/null +++ b/katoptron/matlab/CPU statistic/cube_test_nic4_distributed_mean.m @@ -0,0 +1,188 @@ +close all +clc +clear all + +np = 1:19; + +%222.9 +map = [0.04, 47.54, 21.84, 12.75, 8.53, 5.76, 4.23, 3.42, 2.6, 2.15, 1.97, 3.25, 4.48, 1.23, 1.05, 3.55, 0.78, 3.58, 3.35]; +graph = [18.92, 12.99, 8.75, 7.55, 6.10, 5.03, 4.37, 3.94, 3.26, 3.03, 2.87, 3.95, 4.84, 2.24, 2.04, 3.81, 1.82, 4.01, 3.69]; +assembly = [51.54, 25.83, 17.31, 14.68, 11.63, 9.56, 8.48, 7.13, 5.94, 5.59, 5.10, 5.98, 8.32, 4.05, 3.74, 5.23, 3.36, 6.46, 6.01]; +export = [1.28, 1.09, 0.78, 0.64, 0.53, 0.45, 0.39, 0.35, 0.33, 0.29, 0.29, 0.35, 0.42, 0.23, 0.21, 0.2, 0.23, 0.35, 0.36]; + +assembly = assembly + export; +map = 0*map; +% 10 error + + +total = map+graph+assembly; + +line_width = 1.5; +bar_width = 1; +figure +b1 = bar(np+0.5,map+graph+assembly,bar_width,'r','LineWidth',line_width); +hold on +b2 = bar(np+0.5,graph+assembly,bar_width,'g','LineWidth',line_width); +b3 = bar(np+0.5,assembly,bar_width,'b','LineWidth',line_width); +xlabel('MPI process') +ylabel('Real CPU cost [sec]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,20]) +legend([b1,b2,b3],'Map','Graph','Matrix') +%matlab2tikz('mpi_cube_real_CPU.tex') + + +figure +b1 = bar(np+0.5,(map+graph+assembly)./total,bar_width,'r','LineWidth',line_width); +hold on +b2 = bar(np+0.5,(graph+assembly)./total,bar_width,'g','LineWidth',line_width); +b3 = bar(np+0.5,assembly./total,bar_width,'b','LineWidth',line_width); +xlabel('MPI process') +ylabel('Relative CPU cost [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,20]) +legend([b1,b2,b3],'Map','Graph','Matrix', 'Location','SouthEast') +%matlab2tikz('mpi_cube_relative_CPU.tex') + +% figure +% b1 = bar(np+0.5,(map+graph+assembly).*np,bar_width,'r','LineWidth',line_width); +% hold on +% b2 = bar(np+0.5,(graph+assembly).*np,bar_width,'g','LineWidth',line_width); +% b3 = bar(np+0.5,(assembly).*np,bar_width,'b','LineWidth',line_width); +% xlabel('MPI process') +% ylabel('Used CPU cost [sec]') +% set(gca,'fontsize',18) +% grid on +% box on +% xlim([1,20]) +% legend([b1,b2,b3],'Map','Graph','Matrix') +%matlab2tikz('mpi_cube_used_CPU.tex') + +line_width = 2; + +figure +p1 = plot(np,total(1)./total,'-bo',... + 'LineWidth',line_width,... + 'MarkerEdgeColor','b',... + 'MarkerFaceColor',[.49 1 .63],... + 'MarkerSize',10); +hold on +p2 = plot(np,np,'r--','LineWidth',line_width); +xlabel('MPI process') +ylabel('Speedup [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,19]) +legend([p1,p2],'Actual','Ideal', 'Location','SouthEast') +%matlab2tikz('mpi_cube_speed_up.tex') + +figure +p1 =plot(np,(total(1))./(total.*np),'-bo',... + 'LineWidth',line_width,... + 'MarkerEdgeColor','b',... + 'MarkerFaceColor',[.49 1 .63],... + 'MarkerSize',10); +hold on +p2 = plot([1,19],[1,1],'r--','LineWidth',line_width); +xlabel('MPI process') +ylabel('Efficiency [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,19]) +legend([p1,p2],'Actual','Ideal', 'Location','SouthEast') +%matlab2tikz('mpi_cube_scalability.tex') + +%% + +figure +p1 = plot(np,assembly(1)./assembly,'-bo',... + 'LineWidth',line_width,... + 'MarkerEdgeColor','b',... + 'MarkerFaceColor',[.49 1 .63],... + 'MarkerSize',10); +hold on +p2 = plot(np,np,'r--','LineWidth',line_width); +xlabel('MPI process') +ylabel('Speedup [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,19]) +legend([p1,p2],'Actual','Ideal', 'Location','SouthEast') +%matlab2tikz('mpi_cube_speed_up.tex') + +figure +p1 =plot(np,(assembly(1))./(assembly.*np),'-bo',... + 'LineWidth',line_width,... + 'MarkerEdgeColor','b',... + 'MarkerFaceColor',[.49 1 .63],... + 'MarkerSize',10); +hold on +p2 = plot([1,19],[1,1],'r--','LineWidth',line_width); +xlabel('MPI process') +ylabel('Efficiency [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,19]) +legend([p1,p2],'Actual','Ideal', 'Location','SouthEast') +%matlab2tikz('mpi_cube_scalability.tex') + +%% + +close all +clc +clear all + +np = 12; + +n_iter = linspace(1,200,200); + +map = [0.1,2.]; +graph = [75.4,6.8]; +assembly = [140.3,11.7]; + +for i=1:length(n_iter) + total(i,:) = map(:)+graph(:)+n_iter(i)*assembly(:); +end + +line_width = 2; + +figure +p1 = plot(n_iter,total(:,1)./total(:,2),'-b',... + 'LineWidth',line_width); +hold on +p2 = plot([1,max(n_iter)],[np,np],'r--','LineWidth',line_width); +p3 = plot([1,max(n_iter)],[assembly(1)/assembly(2),assembly(1)/assembly(2)],'g--','LineWidth',line_width); +xlabel('Number of linear iterations') +ylabel('Speedup [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,max(n_iter)]) +ylim([10,12]) +legend([p1,p2,p3],'Actual','Ideal','Theoretical limit', 'Location','SouthEast') +matlab2tikz('cube_linear_speed_mpi.tex') + +figure +p1 =plot(n_iter,total(:,1)./(total(:,2)*np),'-b',... + 'LineWidth',line_width); +hold on +p2 = plot([1,max(n_iter)],[1,1],'r--','LineWidth',line_width); +p3 = plot([1,max(n_iter)],[assembly(1)/(np*assembly(2)),assembly(1)/(np*assembly(2))],'g--','LineWidth',line_width); +xlabel('Number of linear iterations') +ylabel('Efficiency [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,max(n_iter)]) +ylim([0.8,1]) +legend([p1,p2,p3],'Actual','Ideal','Theoretical limit', 'Location','SouthEast') +matlab2tikz('cube_linear_sca_mpi.tex') + diff --git a/katoptron/matlab/CPU statistic/cube_test_nic4_shared.m b/katoptron/matlab/CPU statistic/cube_test_nic4_shared.m new file mode 100644 index 0000000000000000000000000000000000000000..498ceb2c9292a1cc2be441a97a9d2d15b7b51ed4 --- /dev/null +++ b/katoptron/matlab/CPU statistic/cube_test_nic4_shared.m @@ -0,0 +1,283 @@ +close all +clc +clear all + +np = 1; + +k = 1:8; + +map = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1 ,0.1, 0.1]; +graph = [75.4, 75.5, 60.8,60.4,74.2,73.8,73.6,73.6]; +assembly = [140.3, 74.0, 38.,28.6,30.1,25.0,21.4,19.0]; + +total = map+graph+assembly; + +line_width = 1.5; +bar_width = 1; +figure +b1 = bar(k+0.5,map+graph+assembly,bar_width,'r','LineWidth',line_width); +hold on +b2 = bar(k+0.5,graph+assembly,bar_width,'g','LineWidth',line_width); +b3 = bar(k+0.5,assembly,bar_width,'b','LineWidth',line_width); +xlabel('Threads') +ylabel('Real CPU cost [sec]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,9]) +legend([b1,b2,b3],'Map','Graph','Matrix') +%matlab2tikz('mpi_cube_real_CPU_s1.tex') + + +figure +b1 = bar(k+0.5,(map+graph+assembly)./total,bar_width,'r','LineWidth',line_width); +hold on +b2 = bar(k+0.5,(graph+assembly)./total,bar_width,'g','LineWidth',line_width); +b3 = bar(k+0.5,assembly./total,bar_width,'b','LineWidth',line_width); +xlabel('Threads') +ylabel('Relative CPU cost [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,9]) +legend([b1,b2,b3],'Map','Graph','Matrix', 'Location','SouthEast') +%matlab2tikz('mpi_cube_relative_CPU_s1.tex') + +% figure +% b1 = bar(np+0.5,(map+graph+assembly).*np,bar_width,'r','LineWidth',line_width); +% hold on +% b2 = bar(np+0.5,(graph+assembly).*np,bar_width,'g','LineWidth',line_width); +% b3 = bar(np+0.5,(assembly).*np,bar_width,'b','LineWidth',line_width); +% xlabel('MPI process') +% ylabel('Used CPU cost [sec]') +% set(gca,'fontsize',18) +% grid on +% box on +% xlim([1,20]) +% legend([b1,b2,b3],'Map','Graph','Matrix') +%%matlab2tikz('mpi_cube_used_CPU.tex') + +line_width = 2; + +figure +p1 = plot(k,total(1)./total,'-bo',... + 'LineWidth',line_width,... + 'MarkerEdgeColor','b',... + 'MarkerFaceColor',[.49 1 .63],... + 'MarkerSize',10); +hold on +p2 = plot(k,k,'r--','LineWidth',line_width); +xlabel('Threads') +ylabel('Speedup [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,8]) +legend([p1,p2],'Actual','Ideal', 'Location','SouthEast') +%matlab2tikz('mpi_cube_speed_up_s1.tex') + +figure +p1 =plot(k,(total(1))./(total.*k),'-bo',... + 'LineWidth',line_width,... + 'MarkerEdgeColor','b',... + 'MarkerFaceColor',[.49 1 .63],... + 'MarkerSize',10); +hold on +p2 = plot([1,8],[1,1],'r--','LineWidth',line_width); +xlabel('Threads') +ylabel('Efficiency [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,8]) +legend([p1,p2],'Actual','Ideal', 'Location','SouthEast') +%matlab2tikz('mpi_cube_scalability_s1.tex') + + +%% + +close all +clc +clear all + +np = 16; + +k = 1:6; + + +map = [1.1, 1.1, 1.1, 2.6, 2.7,1.1]; +graph = [5.2, 5.2, 5.2, 10.8, 5.2,5.1]; +assembly = [8.5, 4.3, 3.0, 2.3, 1.6,1.6]; + +total = map+graph+assembly; + +line_width = 1.5; +bar_width = 1; +figure +b1 = bar(k+0.5,map+graph+assembly,bar_width,'r','LineWidth',line_width); +hold on +b2 = bar(k+0.5,graph+assembly,bar_width,'g','LineWidth',line_width); +b3 = bar(k+0.5,assembly,bar_width,'b','LineWidth',line_width); +xlabel('Threads') +ylabel('Real CPU cost [sec]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,9]) +legend([b1,b2,b3],'Map','Graph','Matrix') +%matlab2tikz('mpi_cube_real_CPU_s2.tex') + + +figure +b1 = bar(k+0.5,(map+graph+assembly)./total,bar_width,'r','LineWidth',line_width); +hold on +b2 = bar(k+0.5,(graph+assembly)./total,bar_width,'g','LineWidth',line_width); +b3 = bar(k+0.5,assembly./total,bar_width,'b','LineWidth',line_width); +xlabel('Threads') +ylabel('Relative CPU cost [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,9]) +legend([b1,b2,b3],'Map','Graph','Matrix', 'Location','SouthEast') +%matlab2tikz('mpi_cube_relative_CPU_s2.tex') + +% figure +% b1 = bar(np+0.5,(map+graph+assembly).*np,bar_width,'r','LineWidth',line_width); +% hold on +% b2 = bar(np+0.5,(graph+assembly).*np,bar_width,'g','LineWidth',line_width); +% b3 = bar(np+0.5,(assembly).*np,bar_width,'b','LineWidth',line_width); +% xlabel('MPI process') +% ylabel('Used CPU cost [sec]') +% set(gca,'fontsize',18) +% grid on +% box on +% xlim([1,20]) +% legend([b1,b2,b3],'Map','Graph','Matrix') +%%matlab2tikz('mpi_cube_used_CPU.tex') + +line_width = 2; + +figure +p1 = plot(k,total(1)./total,'-bo',... + 'LineWidth',line_width,... + 'MarkerEdgeColor','b',... + 'MarkerFaceColor',[.49 1 .63],... + 'MarkerSize',10); +hold on +p2 = plot(k,k,'r--','LineWidth',line_width); +xlabel('Threads') +ylabel('Speedup [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,8]) +legend([p1,p2],'Actual','Ideal', 'Location','SouthEast') +%matlab2tikz('mpi_cube_speed_up_s2.tex') + +figure +p1 =plot(k,(total(1))./(total.*k),'-bo',... + 'LineWidth',line_width,... + 'MarkerEdgeColor','b',... + 'MarkerFaceColor',[.49 1 .63],... + 'MarkerSize',10); +hold on +p2 = plot([1,8],[1,1],'r--','LineWidth',line_width); +xlabel('Threads') +ylabel('Efficiency [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,8]) +legend([p1,p2],'Actual','Ideal', 'Location','SouthEast') +%matlab2tikz('mpi_cube_scalability_s2.tex') + +%% + +figure +p1 = plot(k,assembly(1)./assembly,'-bo',... + 'LineWidth',line_width,... + 'MarkerEdgeColor','b',... + 'MarkerFaceColor',[.49 1 .63],... + 'MarkerSize',10); +hold on +p2 = plot(k,k,'r--','LineWidth',line_width); +xlabel('Threads') +ylabel('Speedup [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,8]) +legend([p1,p2],'Actual','Ideal', 'Location','SouthEast') +%matlab2tikz('mpi_cube_speed_up_s2.tex') + +figure +p1 =plot(k,(assembly(1))./(assembly.*k),'-bo',... + 'LineWidth',line_width,... + 'MarkerEdgeColor','b',... + 'MarkerFaceColor',[.49 1 .63],... + 'MarkerSize',10); +hold on +p2 = plot([1,8],[1,1],'r--','LineWidth',line_width); +xlabel('Threads') +ylabel('Efficiency [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,8]) +legend([p1,p2],'Actual','Ideal', 'Location','SouthEast') +%matlab2tikz('mpi_cube_scalability_s2.tex') + + +%% + +close all +clc +clear all + +np = 16; +k = 6; + +n_iter = linspace(1,500,200); + +map = [1.1,1.1]; +graph = [5.1,5.1]; +assembly = [8.5,1.6]; + +for i=1:length(n_iter) + total(i,:) = map(:)+graph(:)+n_iter(i)*assembly(:); +end + +line_width = 2; + +figure +p1 = plot(n_iter,total(:,1)./total(:,2),'-b',... + 'LineWidth',line_width); +hold on +p2 = plot([1,max(n_iter)],[k,k],'r--','LineWidth',line_width); +p3 = plot([1,max(n_iter)],[assembly(1)/assembly(2),assembly(1)/assembly(2)],'g--','LineWidth',line_width); +xlabel('Number of linear iterations') +ylabel('Speedup [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,max(n_iter)]) +ylim([1,6]) +legend([p1,p2,p3],'Actual','Ideal','Theoretical limit', 'Location','SouthEast') +%matlab2tikz('cube_linear_speed.tex') + +figure +p1 =plot(n_iter,total(:,1)./(total(:,2)*k),'-b',... + 'LineWidth',line_width); +hold on +p2 = plot([1,max(n_iter)],[1,1],'r--','LineWidth',line_width); +p3 = plot([1,max(n_iter)],[assembly(1)/(6*assembly(2)),assembly(1)/(6*assembly(2))],'g--','LineWidth',line_width); +xlabel('Number of linear iterations') +ylabel('Efficiency [-]') +set(gca,'fontsize',18) +grid on +box on +xlim([1,max(n_iter)]) +ylim([0,1]) +legend([p1,p2,p3],'Actual','Ideal','Theoretical limit', 'Location','SouthEast') +%matlab2tikz('cube_linear_sca.tex') diff --git a/katoptron/matlab/CPU statistic/read_workspace.m b/katoptron/matlab/CPU statistic/read_workspace.m new file mode 100644 index 0000000000000000000000000000000000000000..bdfd6a9ec6dcf8930b157c218511f043fd34c55b --- /dev/null +++ b/katoptron/matlab/CPU statistic/read_workspace.m @@ -0,0 +1,5 @@ +function n = read_workspace(path, name, first_id, last_id) + + + +end \ No newline at end of file diff --git a/katoptron/matlab/Krylov/createVandermond.m b/katoptron/matlab/Krylov/createVandermond.m new file mode 100644 index 0000000000000000000000000000000000000000..957c0fa8bcb392ac5394d1bf6c1689dfe7817d6e --- /dev/null +++ b/katoptron/matlab/Krylov/createVandermond.m @@ -0,0 +1,64 @@ +clear all +close all +clc +lambda = [1,1,1.0000001,1.000001,3.99999,4,4.00001]; + +tol = 10^(-8); +figure +subplot(1,3,1) +plot(lambda,ones(size(lambda)),'*') +grid on +axis equal +m = length(lambda); + +%m = 10; +n = 20; + +r_eig = ones(m,1); +% lambda = ones(m,1); +% for i=1:m +% lambda(i) = m+1-i; +% end + + + + +C_eig = zeros(m,n); +C_eig(:,1) = r_eig; +ranks = zeros(1,n); +ranks(1) = 1; + +for i=2:n + C_eig(:,i) = diag(lambda)*C_eig(:,i-1); + ranks(i) = rank(C_eig(:,1:i),tol); +end + +subplot(1,3,2) +plot(1:n,ranks,'*') +xlim([1,n]) +ylim([1,n]) +grid on +axis equal + +C_eig + +max_det = zeros(1,n); +for i=1:n + if i > m + break + end + C = nchoosek(1:m,i); + + for j=1:size(C,1) + current_det = det(C_eig(C(j,:),1:i)); + if current_det > max_det(i) + max_det(i) = current_det; + end + end +end + +subplot(1,3,3) +plot(1:n,max_det,'*') +xlim([1,n]) + +grid on \ No newline at end of file diff --git a/katoptron/matlab/Multigrid/eigenvaluesOneDTest.m b/katoptron/matlab/Multigrid/eigenvaluesOneDTest.m new file mode 100644 index 0000000000000000000000000000000000000000..c5f1b793635ba0d8fc7eec0611244d88a4bbd6d7 --- /dev/null +++ b/katoptron/matlab/Multigrid/eigenvaluesOneDTest.m @@ -0,0 +1,113 @@ +clear all +close all +clc +format long + +L = 1; +n = 1:31; +ni = [1,3,7,15,31]; + +[ theta, eigenvaluesA, eigenvaluesAh] = oneDLaplacianEigenvalues( n, L ); + +eigenvaluesAh(:,ni) + +figure +subplot(2,2,1) +hold on +for i=1:length(n) + for j=1:n(i) + if j>(n(i)/2) + plot(i,eigenvaluesA(j,i),'o','LineWidth',1,... + 'MarkerSize',8,... + 'MarkerEdgeColor','g',... + 'MarkerFaceColor','g'); + else + plot(i,eigenvaluesA(j,i),'o','LineWidth',1,... + 'MarkerSize',8,... + 'MarkerEdgeColor','r',... + 'MarkerFaceColor','r'); + end + end +end +for i=1:(length(n)-1) + plot([i,i+1],[eigenvaluesA(n(i),i),eigenvaluesA(n(i+1),i+1)],'k','linewidth',2) + plot([i,i+1],[eigenvaluesA(1,i),eigenvaluesA(1,i+1)],'k','linewidth',2) +end +hold off +grid on +box on + +subplot(2,2,2) +hold on +for i=1:length(n) + for j=1:n(i) + if j>(n(i)/2) + plot(i,eigenvaluesAh(j,i),'o','LineWidth',1,... + 'MarkerSize',8,... + 'MarkerEdgeColor','g',... + 'MarkerFaceColor','g'); + else + plot(i,eigenvaluesAh(j,i),'o','LineWidth',1,... + 'MarkerSize',8,... + 'MarkerEdgeColor','r',... + 'MarkerFaceColor','r'); + end + end +end +for i=1:(length(n)-1) + plot([i,i+1],[eigenvaluesAh(n(i),i),eigenvaluesAh(n(i+1),i+1)],'k','linewidth',2) + plot([i,i+1],[eigenvaluesAh(1,i),eigenvaluesAh(1,i+1)],'k','linewidth',2) +end +hold off +grid on +box on + +subplot(2,2,3) +hold on +for i=1:length(ni) + for j=1:ni(i) + if j>(n(ni(i))/2) + plot(n(ni(i)),eigenvaluesA(j,ni(i)),'o','LineWidth',1,... + 'MarkerSize',8,... + 'MarkerEdgeColor','g',... + 'MarkerFaceColor','g'); + else + plot(n(ni(i)),eigenvaluesA(j,ni(i)),'o','LineWidth',1,... + 'MarkerSize',8,... + 'MarkerEdgeColor','r',... + 'MarkerFaceColor','r'); + end + end +end +for i=1:(length(n)-1) + plot([i,i+1],[eigenvaluesA(n(i),i),eigenvaluesA(n(i+1),i+1)],'k','linewidth',2) + plot([i,i+1],[eigenvaluesA(1,i),eigenvaluesA(1,i+1)],'k','linewidth',2) +end +hold off +grid on +box on + +subplot(2,2,4) +hold on +for i=1:length(ni) + for j=1:n(ni(i)) + if j>(n(ni(i))/2) + plot(n(ni(i)),eigenvaluesAh(j,ni(i)),'o','LineWidth',1,... + 'MarkerSize',8,... + 'MarkerEdgeColor','g',... + 'MarkerFaceColor','g'); + else + plot(n(ni(i)),eigenvaluesAh(j,ni(i)),'o','LineWidth',1,... + 'MarkerSize',8,... + 'MarkerEdgeColor','r',... + 'MarkerFaceColor','r'); + end + end +end +for i=1:(length(n)-1) + plot([i,i+1],[eigenvaluesAh(n(i),i),eigenvaluesAh(n(i+1),i+1)],'k','linewidth',2) + plot([i,i+1],[eigenvaluesAh(1,i),eigenvaluesAh(1,i+1)],'k','linewidth',2) +end +hold off +grid on +box on \ No newline at end of file diff --git a/katoptron/matlab/Multigrid/oneDLaplacianEigenvalues.m b/katoptron/matlab/Multigrid/oneDLaplacianEigenvalues.m new file mode 100644 index 0000000000000000000000000000000000000000..738ba5e7a3c980e5f80c3bd1e4a9c9cda1cf6447 --- /dev/null +++ b/katoptron/matlab/Multigrid/oneDLaplacianEigenvalues.m @@ -0,0 +1,17 @@ +function [ theta, eigenvaluesA, eigenvaluesAh] = oneDLaplacianEigenvalues( n, L ) + +theta = zeros(max(n),length(n)); +eigenvaluesA = zeros(max(n),length(n)); +eigenvaluesAh = zeros(max(n),length(n)); + +for i=1:length(n) + h = L/(n(i)+1); + + for k=1:n(i) + theta(k,i) = k*pi/(n(i)+1); + eigenvaluesA(k,i) = 4*sin(theta(k,i)/2)^2; + eigenvaluesAh(k,i) = eigenvaluesA(k,i)/h^2; + end +end +end + diff --git a/katoptron/matlab/Multigrid/oneDLaplacianMatrix.m b/katoptron/matlab/Multigrid/oneDLaplacianMatrix.m new file mode 100644 index 0000000000000000000000000000000000000000..6c765de6c645217e689b1b9999847c026ec7bd38 --- /dev/null +++ b/katoptron/matlab/Multigrid/oneDLaplacianMatrix.m @@ -0,0 +1,9 @@ +function [ A,Ah,h ] = oneDLaplacianMatrix( n, L ) + + h = L/(n+1); + A = full(gallery('tridiag',n,-1,2,-1)); + Ah = (1/h^2)*A; + + +end + diff --git a/katoptron/matlab/Multigrid/oneDProlongation.m b/katoptron/matlab/Multigrid/oneDProlongation.m new file mode 100644 index 0000000000000000000000000000000000000000..40ccea79a00f70c41beafb0c05cc8e0f3353bc70 --- /dev/null +++ b/katoptron/matlab/Multigrid/oneDProlongation.m @@ -0,0 +1,10 @@ +function [I_H_h,n2] = oneDProlongation(n) + + n2 = (n-1)/2; + I_H_h = zeros(n,n2); + + for i=1:n2 + I_H_h((2*(i-1))+(1:3),i) = [1;2;1]; + end + I_H_h = I_H_h/2; +end \ No newline at end of file diff --git a/katoptron/matlab/Multigrid/oneDRestriction.m b/katoptron/matlab/Multigrid/oneDRestriction.m new file mode 100644 index 0000000000000000000000000000000000000000..63a0d07b87be68720fec78bb59646e985b84eb65 --- /dev/null +++ b/katoptron/matlab/Multigrid/oneDRestriction.m @@ -0,0 +1,10 @@ +function [I_h_H,n2] = oneDRestriction(n) + + n2 = (n-1)/2; + I_h_H = zeros(n2,n); + + for i=1:n2 + I_h_H(i,(2*(i-1))+(1:3)) = [1,2,1]; + end + I_h_H = I_h_H/4; +end \ No newline at end of file diff --git a/katoptron/matlab/Multigrid/read_agregate.m b/katoptron/matlab/Multigrid/read_agregate.m new file mode 100644 index 0000000000000000000000000000000000000000..051fa1e6614b5c400bc0968fee956341e65d4b2b --- /dev/null +++ b/katoptron/matlab/Multigrid/read_agregate.m @@ -0,0 +1,20 @@ +function [indices] = read_agregate(filename,agg_id,proc) + + indices = []; + + fid = fopen(filename); + + line_start = ['Agg ',int2str(agg_id), ' Proc ', int2str(proc),':']; + tline = fgetl(fid); + while ischar(tline) + current_length = length(tline); + + if tline(1:length(line_start)) == line_start + indices = str2num(tline((length(line_start)+1):current_length)); + + break + end + tline = fgetl(fid); + end + fclose(fid); +end \ No newline at end of file diff --git a/katoptron/matlab/Multigrid/richardsonSmoother.m b/katoptron/matlab/Multigrid/richardsonSmoother.m new file mode 100644 index 0000000000000000000000000000000000000000..fdf159e97d36147be15f1445a2afa0ffc92c5aa8 --- /dev/null +++ b/katoptron/matlab/Multigrid/richardsonSmoother.m @@ -0,0 +1,14 @@ +function [x_new, S_nu] = richardsonSmoother(x_old,A,b,omega,nu) + + I = eye(size(A)); + S = I-omega*A; + g = omega*b; + + for i=1:nu + x_new = S*x_old+g; + x_old = x_new; + end + + S_nu = S^nu; +end + \ No newline at end of file diff --git a/katoptron/matlab/Multigrid/testOneDProlongation.m b/katoptron/matlab/Multigrid/testOneDProlongation.m new file mode 100644 index 0000000000000000000000000000000000000000..dfbfc5795efa3cc1cd38cb7ac36c2b6eda318b95 --- /dev/null +++ b/katoptron/matlab/Multigrid/testOneDProlongation.m @@ -0,0 +1,96 @@ +clear all +close all +clc +format long + +L = 1; +nH = 7; +n = 2*nH+1; +mode = 4; +[ Ah,Ahh,h ] = oneDLaplacianMatrix( n, L ); + + + +H = 2 *h; + +[I_h_H,n2] = oneDRestriction(n); +[I_H_h,n2] = oneDProlongation(n); +AH = I_h_H * Ah * I_H_h; + + + +[Vh,D] = eig(Ah); +d = diag(D); +[VH,DH] = eig(AH); + + +V = zeros(n,n); +for k =1:n + for i =1:n + V(i,k) = sin(i*k*pi/(n+1)); + end +end + + +[Vh,Dh] = eig(Ah); + +tmp = diag(V'*Vh); +for i=1:n + if tmp(i) < 0 + Vh(:,i) = -Vh(:,i); + end +end +tmp = diag(VH'*I_h_H*Vh); +for i=1:((n-1)/2) + VH(:,i) = VH(:,i)/tmp(i); % change the norm +end + +xH = VH(:,mode); +maxx = max(abs(xH)); +xH = xH / maxx; + +xh = I_H_h * xH; + +figure +subplot(2,3,1) +plot([0:H:L],[0;xH;0],'o-','linewidth',2) + +box on +grid on +subplot(2,3,2) +plot([0:h:L],[0;xh;0],'o-','linewidth',2) +box on +grid on +subplot(2,3,3) +plot([0:h:L],[0;xh;0],'o-','linewidth',2) +hold on +plot([0:H:L],[0;xH;0],'o-','linewidth',2) +plot([0:H:L],[0;VH(:,mode);0]*norm([0;xH;0])/norm([0;VH(:,mode);0]),'o--','linewidth',2) +box on +grid on +subplot(2,3,4) + +plot(0:((n-1)/2-1),VH'*xH,'o-','linewidth',2) +box on +grid on +subplot(2,3,5) +plot(0:(n-1),Vh'*xh,'o-','linewidth',2) +box on +grid on +subplot(2,3,6) +plot(0:(n-1),Vh'*xh,'o-','linewidth',2) +hold on +plot(0:((n-1)/2-1),VH'*xH,'o-','linewidth',2) +plot(0:((n-1)/2-1),VH'*VH(:,mode)*norm([0;xH;0])/norm([0;VH(:,mode);0]),'o--','linewidth',2) + +box on +grid on + +figure +tmp = Vh'*xh; +subplot(2,2,1) +plot(0:(nH-1),VH'*xH,'o-','linewidth',2) +subplot(2,2,2) +plot(0:(nH-1),tmp(1:nH),'o-','linewidth',2) +subplot(2,2,4) +plot(0:(nH-1),tmp(n:-1:n-nH+1),'o-','linewidth',2) diff --git a/katoptron/matlab/Multigrid/testOneDRestriction.m b/katoptron/matlab/Multigrid/testOneDRestriction.m new file mode 100644 index 0000000000000000000000000000000000000000..4680a02702fa017293fb1fd555d619079dbfcb4d --- /dev/null +++ b/katoptron/matlab/Multigrid/testOneDRestriction.m @@ -0,0 +1,98 @@ + +clear all +close all +clc +format long + +L = 1; +n = 15; +nH = (n-1)/2; +mode = 12; +[ Ah,Ahh,h ] = oneDLaplacianMatrix( n, L ); + + + +H = 2 *h; + +[I_h_H,n2] = oneDRestriction(n); +[I_H_h,n2] = oneDProlongation(n); +AH = I_h_H * Ah * I_H_h; + + + +[Vh,D] = eig(Ah); +d = diag(D); +[VH,DH] = eig(AH); + + +V = zeros(n,n); +for k =1:n + for i =1:n + V(i,k) = sin(i*k*pi/(n+1)); + end +end + + +[Vh,Dh] = eig(Ah); + +tmp = diag(V'*Vh); +for i=1:n + if tmp(i) < 0 + Vh(:,i) = -Vh(:,i); + end +end +tmp = diag(VH'*I_h_H*Vh); +for i=1:((n-1)/2) + VH(:,i) = VH(:,i)/tmp(i); % change the norm +end + +xh = Vh(:,mode); +maxx = max(abs(xh)); +xh = xh / maxx; + +xH = I_h_H * xh; + +figure +subplot(2,3,1) +plot([0:h:L],[0;xh;0],'o-','linewidth',2) +box on +grid on +subplot(2,3,2) +plot([0:H:L],[0;xH;0],'o-','linewidth',2) +box on +grid on +subplot(2,3,3) +plot([0:h:L],[0;xh;0],'o-','linewidth',2) +hold on +plot([0:H:L],[0;xH;0],'o-','linewidth',2) +if mode <= size(VH,2) + plot([0:H:L],[0;VH(:,mode);0]*norm([0;xH;0])/norm([0;VH(:,mode);0]),'o--','linewidth',2) +end +box on +grid on +subplot(2,3,4) +plot(0:(n-1),Vh'*xh,'o-','linewidth',2) +box on +grid on +subplot(2,3,5) +plot(0:((n-1)/2-1),VH'*xH,'o-','linewidth',2) +box on +grid on +subplot(2,3,6) +plot(0:(n-1),Vh'*xh,'o-','linewidth',2) +hold on +plot(0:((n-1)/2-1),VH'*xH,'o-','linewidth',2) +if mode <= size(VH,2) + plot(0:((n-1)/2-1),VH'*VH(:,mode)*norm([0;xH;0])/norm([0;VH(:,mode);0]),'o--','linewidth',2) +end +box on +grid on + +figure +tmp = Vh'*xh; +subplot(2,2,1) +plot(0:(nH-1),tmp(1:nH),'o-','linewidth',2) +subplot(2,2,3) +plot(0:(nH-1),tmp(n:-1:n-nH+1),'o-','linewidth',2) +subplot(2,2,2) +plot(0:(nH-1),VH'*xH,'o-','linewidth',2) \ No newline at end of file diff --git a/katoptron/matlab/Multigrid/testOneDTwoGridCycle.m b/katoptron/matlab/Multigrid/testOneDTwoGridCycle.m new file mode 100644 index 0000000000000000000000000000000000000000..a3602964c3bd43cafe71ead95236ba5ebedc32fe --- /dev/null +++ b/katoptron/matlab/Multigrid/testOneDTwoGridCycle.m @@ -0,0 +1,148 @@ + + +clear all +close all +clc +format long + +L = 1; +n = 21; + +nu1 = 10; +nu2 = 10; + +eigeninitialguess = 1; +numeigenvectors = n; +ndisplay = n*10; +b_eigenvectors = [];%[1,12]; +b_coeff = [];%[1/20,4]; + +omega = 1/4; +dimension = 1; +display = 0; + +%% +[ Ah,Ahh,h ] = oneDLaplacianMatrix( n, L ); + +V = zeros(n,n); +for k =1:n + for i =1:n + V(i,k) = sin(i*k*pi/(n+1)); + end +end + + +[Vh,Dh] = eig(Ah); + +tmp = diag(V'*Vh); +for i=1:n + if tmp(i) < 0 + Vh(:,i) = -Vh(:,i); + end +end + + +x = zeros(n,1); +xdisplay = (linspace(0,1,ndisplay))'; +ydisplay = zeros(ndisplay,1); +if eigeninitialguess + for k =1:numeigenvectors + x = x + sin(k*pi*(h:h:(L-h))');%Vh(:,k); + ydisplay = ydisplay + sin(k*pi*xdisplay);%+ max(Vh(:,k))*sin(k*pi*xdisplay)/max(sin(k*pi*xdisplay)); + end +else + x = rand(n,1)-0.5;%V(:,1)+V(:,5)+V(:,21)+V(:,29)+V(:,209); + maxx = max(abs(x)); + x = x / maxx; +end +b = zeros(size(x)); +for i =1:length(b_coeff) + b = b + b_coeff(i)*sin(b_eigenvectors(i)*pi*(h:h:(L-h))'); +end + +x_old = x; +[x,M,x1,xH1,xH,xcc,AH,I_h_H,I_H_h] = twoGridCycle(x,Ah,b,omega,nu1,nu2,dimension,display,L,h); +x_new = x; + +max(abs(x)) + + +[VH,DH] = eig(AH); + +tmp = diag(VH'*I_h_H*Vh); +for i=1:((n-1)/2) + VH(:,i) = VH(:,i)/tmp(i); % change the norm +end + +scrsz = get(groot,'Screensize'); +figure('Position',[1 1 scrsz(3) scrsz(4)]) +subplot(2,1,1) +plot([0:h:L],[0;x_old;0],'linewidth',3) +hold on +plot([0:h:L],[0;x1;0],'linewidth',3) +plot([0:2*h:L],[0;xH1;0],'linewidth',3) +plot([0:2*h:L],[0;xH;0],'linewidth',3) +plot([0:h:L],[0;xcc;0],'linewidth',3) + +box on +grid on +plot([0:h:L],[0;x_new;0],'linewidth',3) +if eigeninitialguess + plot(xdisplay,ydisplay,'--','linewidth',2) +end +hold off +legend('initial guess','smoothed guess','smoothed guess on coars mesh','coars mesh solution','coars corrected','smoothed corrected' ,'Location','northoutside','Orientation','horizontal') + + +subplot(2,1,2) +plot(0:(n-1),Vh'*x_old,'linewidth',3) +hold on +plot(0:(n-1),Vh'*x1,'linewidth',3) +plot(0:((n-1)/2-1),VH'*xH1,'linewidth',3) +plot(0:((n-1)/2-1),VH'*xH,'linewidth',3) +plot(0:(n-1),Vh'*xcc,'linewidth',3) +box on +grid on +plot(0:(n-1),Vh'*x_new,'linewidth',3) + +%plot(0:((n-1)/2-1),VH'*I_h_H*x_old,'linewidth',3) + +xlim([0,n-1]) +hold off + + +B = Ah; +[V,D] = eig(B); +d = diag(D); +figure +subplot(2,3,1) +plot(real(d),imag(d),'o') +axis equal +subplot(2,3,4) +nbins = 100; +hist(real(d),nbins) + +B = M; +[V,D] = eig(B); +d = diag(D); +subplot(2,3,2) +plot(real(d),imag(d),'o') +axis equal +subplot(2,3,5) +nbins = 100; +hist(real(d),nbins) + +B = M*Ah; +[V,D] = eig(B); +d = diag(D); +subplot(2,3,3) +plot(real(d),imag(d),'o') +axis equal +subplot(2,3,6) +nbins = 100; +hist(real(d),nbins) + +% B\(M*b) +% Ah\b +% x_new + diff --git a/katoptron/matlab/Multigrid/testRichardsonSmoother.m b/katoptron/matlab/Multigrid/testRichardsonSmoother.m new file mode 100644 index 0000000000000000000000000000000000000000..4361c424c44d82e2cb3ff92dbfbed3f0464aff58 --- /dev/null +++ b/katoptron/matlab/Multigrid/testRichardsonSmoother.m @@ -0,0 +1,33 @@ + +clear all +close all +clc +format long + +L = 1; +n = 100; +[ A,Ah,h ] = oneDLaplacianMatrix( n, L ); + +[V,D] = eig(A); +d = diag(D); + +figure +plot(d) + + +x = V(:,1)+V(:,5)+V(:,52); +maxx = max(abs(x)); +x = x / maxx; +b = zeros(size(x)); + +omega = 1/4; +nu = 20; +figure +plot([0:h:L],[0;x;0],'linewidth',2) +hold on +for i=1:10 + x = richardsonSmoother(x,A,b,omega,nu); + plot([0:h:L],[0;x;0],'linewidth',2) +end +box on +grid on \ No newline at end of file diff --git a/katoptron/matlab/Multigrid/twoGridCycle.m b/katoptron/matlab/Multigrid/twoGridCycle.m new file mode 100644 index 0000000000000000000000000000000000000000..08d6327a65c7b54ac93d0756cefbcf947d192e1c --- /dev/null +++ b/katoptron/matlab/Multigrid/twoGridCycle.m @@ -0,0 +1,101 @@ +function [xh,M,x1,xH1,xH,xcc,AH,I_h_H,I_H_h] = twoGridCycle(xh,Ah,bh,omega,nu1,nu2,dimension,display,L,h) + +if display + scrsz = get(groot,'Screensize'); + figure('Position',[1 scrsz(4)/2 scrsz(3) scrsz(4)/2]) + plot([0:h:L],[0;xh;0],'linewidth',3) + hold on + box on + grid on +end + +I = eye(size(Ah)); + +n = size(Ah,1); +if dimension == 1 + [I_h_H,n2] = oneDRestriction(n); + [I_H_h,n2] = oneDProlongation(n); +end + +AH = I_h_H * Ah * I_H_h; + +S_nu1 = eye(size(Ah)); +if nu1 >= 1 + [xh, S_nu1] = richardsonSmoother(xh,Ah,bh,omega,nu1); +end + +x1 = xh; + +if display + plot([0:h:L],[0;xh;0],'linewidth',3) +end + +rh = bh - Ah * xh; + +rH = I_h_H * rh; + +invAH = inv(AH); +deltaH = invAH*rH; + +xH1 = I_h_H * xh; +xH = xH1 + deltaH; + + +xh = xh + I_H_h * deltaH; +max(abs(xh - I_H_h * xH)) +%xh = I_H_h * xH; +%xH = I_h_H * xh; +max(abs(invAH*I_h_H*bh)) +max(abs(xH)) + +xcc = xh; + +if display + plot([0:h:L],[0;xh;0],'linewidth',3) +end + +S_nu2 = eye(size(Ah)); +if nu2 >= 1 + [xh, S_nu2] = richardsonSmoother(xh,Ah,bh,omega,nu2); +end + +if display + plot([0:h:L],[0;xh;0],'linewidth',3) + hold off + legend('initial guess','smoothed guess','coars corrected','smoothed corrected' ,'Location','northoutside','Orientation','horizontal') +end + +disp '1' +(I-I_H_h*invAH*I_h_H*Ah)*x1 +disp '2' +xcc + +M = S_nu2*(I-I_H_h*invAH*I_h_H*Ah)*S_nu1; + +if display + rank(I_H_h*AH*I_h_H) + [V,D] = eig(I_H_h*AH*I_h_H); + [V,D2] = eig(I-inv(M)*Ah);%eig(I-I_H_h*invAH*I_h_H*Ah); + d = diag(D); + figure('Position',[1 1 scrsz(3)/2 scrsz(4)/3]) + + plot(real(d),imag(d),'o','LineWidth',1,... + 'MarkerSize',8,... + 'MarkerEdgeColor','b',... + 'MarkerFaceColor','b'); + box on + grid on + + figure('Position',[scrsz(3)/2 1 scrsz(3)/2 scrsz(4)/3]) + edges = [-0.01:0.02:1.01]; + h = histogram(real(d),edges); +% d0 = find(d < 0.5); +% d1 = find(d > 0.5); +% plot([0,1],[length(d0),length(d1)],'o','LineWidth',1,... +% 'MarkerSize',8,... +% 'MarkerEdgeColor','b',... +% 'MarkerFaceColor','b'); + box on + grid on +end +end \ No newline at end of file diff --git a/katoptron/matlab/Richardson/oneDLaplacian.m b/katoptron/matlab/Richardson/oneDLaplacian.m new file mode 100644 index 0000000000000000000000000000000000000000..ac4ac5f50887f3a9e639265e74df15a35f9e6970 --- /dev/null +++ b/katoptron/matlab/Richardson/oneDLaplacian.m @@ -0,0 +1,117 @@ +clear all +close all +clc + +n = 10; +nIter = n; +A = full(gallery('tridiag',n,-1,2,-1)); + +L = 1; +l = linspace(0,L,n); +h = l(2)-l(1); +A = A*(1/h^2); +A(1,1) = 1; +A(1,2) = 0; +A(end,end-1) = 0; +A(end,end) = 1; + +b = zeros(n,1); + +[V,D] = eig(A); + +max(max(abs(A*V-V*D))) + +d = diag(D); +%[d,indices] = sort(d,'descend'); +%V = V(:,indices); + +tau = 1/max(d); + +x = zeros(n,nIter); +coef = zeros(n,nIter); +x(:,1) = V(:,1); +res = zeros(nIter,1); +res(1) = norm(b - A*x(:,1)); +coef(:,1) = V'*x(:,1); +for i=2:nIter + x(:,i) = x(:,i-1) + tau*(b - A*x(:,i-1)); + res(i) = norm(b - A*x(:,i)); + + coef(:,i) = V'*x(:,i); +end + +figure +subplot(2,2,1) +ax = gca; +plot(3,d(3),'o','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor',ax.ColorOrder(ax.ColorOrderIndex,:)); +hold on +for i=4:n + if ax.ColorOrderIndex > size(ax.ColorOrder,1) + ax.ColorOrderIndex = 1; + end + plot(i,d(i),'o','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor',ax.ColorOrder(ax.ColorOrderIndex,:)); +end +plot(1,d(1),'o','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','r'); +plot(2,d(2),'o','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor','r'); +hold off +xlim([1,n]) + +subplot(2,2,2) +ax = gca; +plot(1:nIter,abs(coef(3,:)),'o-','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor',ax.ColorOrder(ax.ColorOrderIndex,:)); +hold on +for i=4:n + if ax.ColorOrderIndex > size(ax.ColorOrder,1) + ax.ColorOrderIndex = 1; + end + plot(1:nIter,abs(coef(i,:)),'o-','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor',ax.ColorOrder(ax.ColorOrderIndex,:)); +end +hold off +xlim([1,nIter]) + +subplot(2,2,3) +ax = gca; +plot(l,x(:,1),'o-','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor',ax.ColorOrder(ax.ColorOrderIndex,:)); +hold on +for i=2:nIter + if ax.ColorOrderIndex > size(ax.ColorOrder,1) + ax.ColorOrderIndex = 1; + end + plot(l,x(:,i),'o-','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor',ax.ColorOrder(ax.ColorOrderIndex,:)); +end +hold off + +subplot(2,2,4) +ax = gca; +plot(1:nIter,res,'o-','LineWidth',0.5,... + 'MarkerSize',6,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor',ax.ColorOrder(ax.ColorOrderIndex,:)); +xlim([1,nIter]) + +% https://www.wolframalpha.com/input/?i=g(n%2B1)%3D(1-a)*g(n)%2Bb +% https://www.wolframalpha.com/input/?i=lim+n-%3Einf+((1-a)%5En+*(-a*b%2Ba*c%2Bb)%2B(a-1)*b)%2F((a-1)*a)+if+-1+%3C+(1-a)+%3C1 diff --git a/katoptron/matlab/TPL/DrosteEffect-BrewerMap-c64a384/.gitattributes b/katoptron/matlab/TPL/DrosteEffect-BrewerMap-c64a384/.gitattributes new file mode 100644 index 0000000000000000000000000000000000000000..e966fd74841ae613751173dc26d5eaf4b038b762 --- /dev/null +++ b/katoptron/matlab/TPL/DrosteEffect-BrewerMap-c64a384/.gitattributes @@ -0,0 +1,2 @@ +# Declare files that will always have CRLF line endings on checkout. +*.* text eol=crlf diff --git a/katoptron/matlab/TPL/DrosteEffect-BrewerMap-c64a384/LICENSE.TXT b/katoptron/matlab/TPL/DrosteEffect-BrewerMap-c64a384/LICENSE.TXT new file mode 100644 index 0000000000000000000000000000000000000000..d0381d6d04c77c78c42ae875f97d38483ba0c636 --- /dev/null +++ b/katoptron/matlab/TPL/DrosteEffect-BrewerMap-c64a384/LICENSE.TXT @@ -0,0 +1,176 @@ +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS diff --git a/katoptron/matlab/TPL/DrosteEffect-BrewerMap-c64a384/README.md b/katoptron/matlab/TPL/DrosteEffect-BrewerMap-c64a384/README.md new file mode 100644 index 0000000000000000000000000000000000000000..4f69245454843257b22b736a605bbf61852d848b --- /dev/null +++ b/katoptron/matlab/TPL/DrosteEffect-BrewerMap-c64a384/README.md @@ -0,0 +1,85 @@ +BrewerMap +========= + +The complete palette of ColorBrewer colormaps for MATLAB. Simple selection by scheme name and map length. + + +One function provides the complete selection of the ColorBrewer colorschemes, especially intended for mapping and plots with attractive, distinguishable colors. + +Simple to use: only the the colormap length and the colorscheme name are needed to select and define an output colormap. The colorscheme can be preselected by the user, after which only the colormap length is required to define an output colormap. + +The function can be used as a drop-in replacement for the inbuilt colormap functions and it is compatible with all MATLAB functions that require a colormap. The function consists of just one M-file that provides all of the ColorBrewer colorschemes (no mat file, no third party files, no file-clutter!). Downsampling or interpolation of the nodes occurs automatically, if required (interpolation occurs within the Lab colorspace). As an option, the colormap can be returned reversed. + +Calling brewermap('demo') creates a figure that displays all of the ColorBrewer colorschemes. + +This product includes color specifications and designs developed by Cynthia Brewer (http://colorbrewer.org/). See the ColorBrewer website for further information about each colorscheme, colorblind suitability, licensing, and citations. + +### Examples ### + + % Plot a scheme's RGB values: + rgbplot(brewermap(9,'Blues')) % standard + rgbplot(brewermap(9,'*Blues')) % reversed + + % View information about a colorscheme: + [~,num,typ] = brewermap(0,'Paired') + num = 12 + typ = 'Qualitative' + + % Multiline plot using matrices: + N = 6; + axes('ColorOrder',brewermap(N,'Pastel2'),'NextPlot','replacechildren') + X = linspace(0,pi*3,1000); + Y = bsxfun(@(x,n)n*sin(x+2*n*pi/N), X.', 1:N); + plot(X,Y, 'linewidth',4) + + % Multiline plot in a loop: + N = 6; + set(0,'DefaultAxesColorOrder',brewermap(N,'Accent')) + X = linspace(0,pi*3,1000); + Y = bsxfun(@(x,n)n*sin(x+2*n*pi/N), X.', 1:N); + for n = 1:N + plot(X(:),Y(:,n), 'linewidth',4); + hold all + end + + % New colors for the COLORMAP example: + load spine + image(X) + colormap(brewermap([],'YlGnBu')) + + % New colors for the SURF example: + [X,Y,Z] = peaks(30); + surfc(X,Y,Z) + colormap(brewermap([],'RdYlGn')) + axis([-3,3,-3,3,-10,5]) + + % New colors for the CONTOURCMAP example: + brewermap('PuOr'); % preselect the colorscheme. + load topo + load coast + figure + worldmap(topo, topolegend) + contourfm(topo, topolegend); + contourcmap('brewermap', 'Colorbar','on', 'Location','horizontal',... + 'TitleString','Contour Intervals in Meters'); + plotm(lat, long, 'k') + +### Note ### + +Note that the function BREWERMAP: +* Consists of just one convenient M-file (no .mat files or file clutter). +* No third-party file dependencies. +* Interpolates in the Lab colorspace. +* Requires just the standard ColorBrewer scheme name to select the colorscheme. +* Supports all ColorBrewer colorschemes. +* Outputs a MATLAB standard N-by-3 numeric RGB array. +* Default length is the standard MATLAB default colormap length (same length as the current colormap). +* Is compatible with all MATLAB functions that use colormaps (eg: CONTOURCMAP). +* Includes the option to reverse the colormap color sequence. +* Does not break ColorBrewer's Apache license conditions! + +### Note ### + +The following files are part of GitHub/git repository, and are not required for using this submission in MATLAB: +* .gitattributes +* README.md diff --git a/katoptron/matlab/TPL/DrosteEffect-BrewerMap-c64a384/brewermap.m b/katoptron/matlab/TPL/DrosteEffect-BrewerMap-c64a384/brewermap.m new file mode 100644 index 0000000000000000000000000000000000000000..4d2b0dc6afde6e8e1cf2ff0135f3a5f2c0dea33a --- /dev/null +++ b/katoptron/matlab/TPL/DrosteEffect-BrewerMap-c64a384/brewermap.m @@ -0,0 +1,518 @@ +function [map,num,typ] = brewermap(N,scheme) +% The complete selection of ColorBrewer colorschemes (RGB colormaps). +% +% (c) 2017 Stephen Cobeldick +% +% Returns any RGB colormap from the ColorBrewer colorschemes, especially +% intended for mapping and plots with attractive, distinguishable colors. +% +%%% Syntax (basic): +% map = brewermap(N,scheme); % Select colormap length, select any colorscheme. +% brewermap('demo') % View a figure showing all ColorBrewer colorschemes. +% schemes = brewermap('list')% Return a list of all ColorBrewer colorschemes. +% [map,num,typ] = brewermap(...); % The current colorscheme's number of nodes and type. +% +%%% Syntax (preselect colorscheme): +% old = brewermap(scheme); % Preselect any colorscheme, return the previous scheme. +% map = brewermap(N); % Use preselected scheme, select colormap length. +% map = brewermap; % Use preselected scheme, length same as current figure's colormap. +% +% See also CUBEHELIX RGBPLOT3 RGBPLOT COLORMAP COLORBAR PLOT PLOT3 SURF IMAGE AXES SET JET LBMAP PARULA +% +%% Color Schemes %% +% +% This product includes color specifications and designs developed by Cynthia Brewer. +% See the ColorBrewer website for further information about each colorscheme, +% colour-blind suitability, licensing, and citations: http://colorbrewer.org/ +% +% To reverse the colormap sequence simply prefix the string token with '*'. +% +% Each colorscheme is defined by a set of hand-picked RGB values (nodes). +% If <N> is greater than the requested colorscheme's number of nodes then: +% * Sequential and Diverging schemes are interpolated to give a larger +% colormap. The interpolation is performed in the Lab colorspace. +% * Qualitative schemes are repeated to give a larger colormap. +% Else: +% * Exact values from the ColorBrewer sequences are returned for all schemes. +% +%%% Diverging +% +% Scheme|'BrBG'|'PRGn'|'PiYG'|'PuOr'|'RdBu'|'RdGy'|'RdYlBu'|'RdYlGn'|'Spectral'| +% ------|------|------|------|------|------|------|--------|--------|----------| +% Nodes | 11 | 11 | 11 | 11 | 11 | 11 | 11 | 11 | 11 | +% +%%% Qualitative +% +% Scheme|'Accent'|'Dark2'|'Paired'|'Pastel1'|'Pastel2'|'Set1'|'Set2'|'Set3'| +% ------|--------|-------|--------|---------|---------|------|------|------| +% Nodes | 8 | 8 | 12 | 9 | 8 | 9 | 8 | 12 | +% +%%% Sequential +% +% Scheme|'Blues'|'BuGn'|'BuPu'|'GnBu'|'Greens'|'Greys'|'OrRd'|'Oranges'|'PuBu'| +% ------|-------|------|------|------|--------|-------|------|---------|------| +% Nodes | 9 | 9 | 9 | 9 | 9 | 9 | 9 | 9 | 9 | +% +% Scheme|'PuBuGn'|'PuRd'|'Purples'|'RdPu'|'Reds'|'YlGn'|'YlGnBu'|'YlOrBr'|'YlOrRd'| +% ------|--------|------|---------|------|------|------|--------|--------|--------| +% Nodes | 9 | 9 | 9 | 9 | 9 | 9 | 9 | 9 | 9 | +% +%% Examples %% +% +%%% Plot a scheme's RGB values: +% rgbplot(brewermap(9,'Blues')) % standard +% rgbplot(brewermap(9,'*Blues')) % reversed +% +%%% View information about a colorscheme: +% [~,num,typ] = brewermap(0,'Paired') +% num = 12 +% typ = 'Qualitative' +% +%%% Multi-line plot using matrices: +% N = 6; +% axes('ColorOrder',brewermap(N,'Pastel2'),'NextPlot','replacechildren') +% X = linspace(0,pi*3,1000); +% Y = bsxfun(@(x,n)n*sin(x+2*n*pi/N), X(:), 1:N); +% plot(X,Y, 'linewidth',4) +% +%%% Multi-line plot in a loop: +% N = 6; +% set(0,'DefaultAxesColorOrder',brewermap(N,'Accent')) +% X = linspace(0,pi*3,1000); +% Y = bsxfun(@(x,n)n*sin(x+2*n*pi/N), X(:), 1:N); +% for n = 1:N +% plot(X(:),Y(:,n), 'linewidth',4); +% hold all +% end +% +%%% New colors for the COLORMAP example: +% load spine +% image(X) +% colormap(brewermap([],'YlGnBu')) +% +%%% New colors for the SURF example: +% [X,Y,Z] = peaks(30); +% surfc(X,Y,Z) +% colormap(brewermap([],'RdYlGn')) +% axis([-3,3,-3,3,-10,5]) +% +%%% New colors for the CONTOURCMAP example: +% brewermap('PuOr'); % preselect the colorscheme. +% load topo +% load coast +% figure +% worldmap(topo, topolegend) +% contourfm(topo, topolegend); +% contourcmap('brewermap', 'Colorbar','on', 'Location','horizontal',... +% 'TitleString','Contour Intervals in Meters'); +% plotm(lat, long, 'k') +% +%% Input and Output Arguments %% +% +%%% Inputs (*=default): +% N = NumericScalar, N>=0, an integer to define the colormap length. +% = *[], use the length of the current figure's colormap (see COLORMAP). +% = StringToken, to preselect this ColorBrewer scheme for later use. +% = 'demo', create a figure showing all of the ColorBrewer schemes. +% = 'list', return a cell array of strings listing all ColorBrewer schemes. +% scheme = StringToken, a ColorBrewer scheme name to select the colorscheme. +% = *none, use the preselected colorscheme (must be set previously!). +% +%%% Outputs: +% map = NumericMatrix, size Nx3, a colormap of RGB values between 0 and 1. +% num = NumericScalar, the number of nodes defining the ColorBrewer scheme. +% typ = String, the colorscheme type: 'Diverging'/'Qualitative'/'Sequential'. +% OR +% schemes = CellArray of Strings, a list of every ColorBrewer scheme. +% +% [map,num,typ] = brewermap(*N,*scheme) +% OR +% schemes = brewermap('list') + +%% Input Wrangling %% +% +persistent tok isr +% +str = 'A colorscheme must be preselected before calling without a scheme token.'; +% +% The order of names in <vec>: case-insensitive sort by type and then by name: +vec = {'BrBG';'PiYG';'PRGn';'PuOr';'RdBu';'RdGy';'RdYlBu';'RdYlGn';'Spectral';'Accent';'Dark2';'Paired';'Pastel1';'Pastel2';'Set1';'Set2';'Set3';'Blues';'BuGn';'BuPu';'GnBu';'Greens';'Greys';'OrRd';'Oranges';'PuBu';'PuBuGn';'PuRd';'Purples';'RdPu';'Reds';'YlGn';'YlGnBu';'YlOrBr';'YlOrRd'}; +% +if nargin==0 % Current figure's colormap length and the preselected colorscheme. + assert(~isempty(tok),str) + [map,num,typ] = bmSample([],isr,tok); +elseif nargin==2 % Input colormap length and colorscheme. + assert(isnumeric(N),'The first argument must be a scalar numeric, or empty.') + assert(ischar(scheme)&&isrow(scheme),'The second argument must be a string.') + tmp = strncmp('*',scheme,1); + [map,num,typ] = bmSample(N,tmp,bmMatch(vec,scheme(1+tmp:end))); +elseif isnumeric(N) % Input colormap length and the preselected colorscheme. + assert(~isempty(tok),str) + [map,num,typ] = bmSample(N,isr,tok); +else% String + assert(ischar(N)&&isrow(N),'The first argument must be a string or scalar numeric.') + switch lower(N) + case 'demo' % Plot all colorschemes in a figure. + bmDemoFig(vec) + case 'list' % Return a list of all colorschemes. + [num,typ] = cellfun(@bmSelect,vec,'UniformOutput',false); + num = cat(1,num{:}); + map = vec; + otherwise % Store the preselected colorscheme token. + map = tok; + tmp = strncmp('*',N,1); + tok = bmMatch(vec,N(1+tmp:end)); + [num,typ] = bmSelect(tok); + isr = tmp; % only update |isr| when name is okay. + end +end +% +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%brewermap +function tok = bmMatch(vec,str) +idx = strcmpi(vec,str); +assert(any(idx),'Colorscheme "%s" is not supported. Check the token tables.',str) +tok = vec{idx}; +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%bmMatch +function [map,num,typ] = bmSample(N,isr,tok) +% Pick a colorscheme, downsample/interpolate to the requested colormap length. +% +if isempty(N) + N = size(get(gcf,'colormap'),1); +else + assert(isscalar(N)&&isreal(N),'First argument must be a real numeric scalar, or empty.') +end +% +% obtain nodes: +[num,typ,rgb] = bmSelect(tok); +% downsample: +[idx,itp] = bmIndex(N,num,typ,isr); +map = rgb(idx,:); +% interpolate: +if itp + M = [3.2406,-1.5372,-0.4986;-0.9689,1.8758,0.0415;0.0557,-0.2040,1.0570]; + wpt = [0.95047,1,1.08883]; % D65 + % + map = bmRGB2Lab(map,M,wpt); % optional + % + % Extrapolate a small amount at both ends: + %vec = linspace(0,num+1,N+2); + %map = interp1(1:num,map,vec(2:end-1),'linear','extrap'); + % Interpolation completely within ends: + map = interp1(1:num,map,linspace(1,num,N),'spline'); + % + map = bmLab2RGB(map,M,wpt); % optional +end +% +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%bmSample +function rgb = bmGammaCor(rgb) +% Gamma correction of RGB data. +idx = rgb <= 0.0031308; +rgb(idx) = 12.92 * rgb(idx); +rgb(~idx) = real(1.055 * rgb(~idx).^(1/2.4) - 0.055); +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%bmGammaCor +function rgb = bmGammaInv(rgb) +% Inverse gamma correction of RGB data. +idx = rgb <= 0.04045; +rgb(idx) = rgb(idx) / 12.92; +rgb(~idx) = real(((rgb(~idx) + 0.055) / 1.055).^2.4); +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%bmGammaInv +function lab = bmRGB2Lab(rgb,M,wpt) % Nx3 <- Nx3 +% Convert a matrix of RGB values to Lab. +% +%applycform(rgb,makecform('srgb2lab','AdaptedWhitePoint',wpt)) +% +% RGB2XYZ: +xyz = (M \ bmGammaInv(rgb.')).'; +% Remember to include my license when copying my implementation. +% XYZ2Lab: +xyz = bsxfun(@rdivide,xyz,wpt); +idx = xyz>(6/29)^3; +F = idx.*(xyz.^(1/3)) + ~idx.*(xyz*(29/6)^2/3+4/29); +lab(:,2:3) = bsxfun(@times,[500,200],F(:,1:2)-F(:,2:3)); +lab(:,1) = 116*F(:,2) - 16; +% +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%bmRGB2Lab +function rgb = bmLab2RGB(lab,M,wpt) % Nx3 <- Nx3 +% Convert a matrix of Lab values to RGB. +% +%applycform(lab,makecform('lab2srgb','AdaptedWhitePoint',wpt)) +% +% Lab2XYZ +tmp = bsxfun(@rdivide,lab(:,[2,1,3]),[500,Inf,-200]); +tmp = bsxfun(@plus,tmp,(lab(:,1)+16)/116); +idx = tmp>(6/29); +tmp = idx.*(tmp.^3) + ~idx.*(3*(6/29)^2*(tmp-4/29)); +xyz = bsxfun(@times,tmp,wpt); +% Remember to include my license when copying my implementation. +% XYZ2RGB +rgb = max(0,min(1, bmGammaCor(xyz * M.'))); +% +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%cbLab2RGB +function bmDemoFig(seq) +% Creates a figure showing all of the ColorBrewer colorschemes. +% +persistent cbh axh +% +xmx = max(cellfun(@bmSelect,seq)); +ymx = numel(seq); +% +if ishghandle(cbh) + figure(cbh); + delete(axh); +else + cbh = figure('HandleVisibility','callback', 'IntegerHandle','off',... + 'NumberTitle','off', 'Name',[mfilename,' Demo'],'Color','white'); +end +% +axh = axes('Parent',cbh, 'Color','none',... + 'XTick',0:xmx, 'YTick',0.5:ymx, 'YTickLabel',seq, 'YDir','reverse'); +title(axh,['ColorBrewer Color Schemes (',mfilename,'.m)'], 'Interpreter','none') +xlabel(axh,'Scheme Nodes') +ylabel(axh,'Scheme Name') +axf = get(axh,'FontName'); +% +for y = 1:ymx + [num,typ,rgb] = bmSelect(seq{y}); + map = rgb(bmIndex(num,num,typ,false),:); % downsample + for x = 1:num + patch([x-1,x-1,x,x],[y-1,y,y,y-1],1, 'FaceColor',map(x,:), 'Parent',axh) + end + text(xmx+0.1,y-0.5,typ, 'Parent',axh, 'FontName',axf) +end +% +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%bmDemoFig +function [idx,itp] = bmIndex(N,num,typ,isr) +% Ensure exactly the same colors as in the online ColorBrewer schemes. +% +itp = N>num; +switch typ + case 'Qualitative' + itp = false; + idx = 1+mod(0:N-1,num); + case 'Diverging' + switch N + case 1 % extrapolated + idx = 8; + case 2 % extrapolated + idx = [4,12]; + case 3 + idx = [5,8,11]; + case 4 + idx = [3,6,10,13]; + case 5 + idx = [3,6,8,10,13]; + case 6 + idx = [2,5,7,9,11,14]; + case 7 + idx = [2,5,7,8,9,11,14]; + case 8 + idx = [2,4,6,7,9,10,12,14]; + case 9 + idx = [2,4,6,7,8,9,10,12,14]; + case 10 + idx = [1,2,4,6,7,9,10,12,14,15]; + otherwise + idx = [1,2,4,6,7,8,9,10,12,14,15]; + end + case 'Sequential' + switch N + case 1 % extrapolated + idx = 6; + case 2 % extrapolated + idx = [4,8]; + case 3 + idx = [3,6,9]; + case 4 + idx = [2,5,7,10]; + case 5 + idx = [2,5,7,9,11]; + case 6 + idx = [2,4,6,7,9,11]; + case 7 + idx = [2,4,6,7,8,10,12]; + case 8 + idx = [1,3,4,6,7,8,10,12]; + otherwise + idx = [1,3,4,6,7,8,10,11,13]; + end + otherwise + error('The colorscheme type "%s" is not recognized',typ) +end +% +if isr + idx = idx(end:-1:1); +end +% +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%bmIndex +function [num,typ,rgb] = bmSelect(tok) +% Return the length, type and RGB values of any colorscheme. +% +switch tok % ColorName + case 'BrBG' + rgb = [84,48,5;140,81,10;166,97,26;191,129,45;216,179,101;223,194,125;246,232,195;245,245,245;199,234,229;128,205,193;90,180,172;53,151,143;1,133,113;1,102,94;0,60,48]; + typ = 'Diverging'; + case 'PiYG' + rgb = [142,1,82;197,27,125;208,28,139;222,119,174;233,163,201;241,182,218;253,224,239;247,247,247;230,245,208;184,225,134;161,215,106;127,188,65;77,172,38;77,146,33;39,100,25]; + typ = 'Diverging'; + case 'PRGn' + rgb = [64,0,75;118,42,131;123,50,148;153,112,171;175,141,195;194,165,207;231,212,232;247,247,247;217,240,211;166,219,160;127,191,123;90,174,97;0,136,55;27,120,55;0,68,27]; + typ = 'Diverging'; + case 'PuOr' + rgb = [127,59,8;179,88,6;230,97,1;224,130,20;241,163,64;253,184,99;254,224,182;247,247,247;216,218,235;178,171,210;153,142,195;128,115,172;94,60,153;84,39,136;45,0,75]; + typ = 'Diverging'; + case 'RdBu' + rgb = [103,0,31;178,24,43;202,0,32;214,96,77;239,138,98;244,165,130;253,219,199;247,247,247;209,229,240;146,197,222;103,169,207;67,147,195;5,113,176;33,102,172;5,48,97]; + typ = 'Diverging'; + case 'RdGy' + rgb = [103,0,31;178,24,43;202,0,32;214,96,77;239,138,98;244,165,130;253,219,199;255,255,255;224,224,224;186,186,186;153,153,153;135,135,135;64,64,64;77,77,77;26,26,26]; + typ = 'Diverging'; + case 'RdYlBu' + rgb = [165,0,38;215,48,39;215,25,28;244,109,67;252,141,89;253,174,97;254,224,144;255,255,191;224,243,248;171,217,233;145,191,219;116,173,209;44,123,182;69,117,180;49,54,149]; + typ = 'Diverging'; + case 'RdYlGn' + rgb = [165,0,38;215,48,39;215,25,28;244,109,67;252,141,89;253,174,97;254,224,139;255,255,191;217,239,139;166,217,106;145,207,96;102,189,99;26,150,65;26,152,80;0,104,55]; + typ = 'Diverging'; + case 'Spectral' + rgb = [158,1,66;213,62,79;215,25,28;244,109,67;252,141,89;253,174,97;254,224,139;255,255,191;230,245,152;171,221,164;153,213,148;102,194,165;43,131,186;50,136,189;94,79,162]; + typ = 'Diverging'; + case 'Accent' + rgb = [127,201,127;190,174,212;253,192,134;255,255,153;56,108,176;240,2,127;191,91,23;102,102,102]; + typ = 'Qualitative'; + case 'Dark2' + rgb = [27,158,119;217,95,2;117,112,179;231,41,138;102,166,30;230,171,2;166,118,29;102,102,102]; + typ = 'Qualitative'; + case 'Paired' + rgb = [166,206,227;31,120,180;178,223,138;51,160,44;251,154,153;227,26,28;253,191,111;255,127,0;202,178,214;106,61,154;255,255,153;177,89,40]; + typ = 'Qualitative'; + case 'Pastel1' + rgb = [251,180,174;179,205,227;204,235,197;222,203,228;254,217,166;255,255,204;229,216,189;253,218,236;242,242,242]; + typ = 'Qualitative'; + case 'Pastel2' + rgb = [179,226,205;253,205,172;203,213,232;244,202,228;230,245,201;255,242,174;241,226,204;204,204,204]; + typ = 'Qualitative'; + case 'Set1' + rgb = [228,26,28;55,126,184;77,175,74;152,78,163;255,127,0;255,255,51;166,86,40;247,129,191;153,153,153]; + typ = 'Qualitative'; + case 'Set2' + rgb = [102,194,165;252,141,98;141,160,203;231,138,195;166,216,84;255,217,47;229,196,148;179,179,179]; + typ = 'Qualitative'; + case 'Set3' + rgb = [141,211,199;255,255,179;190,186,218;251,128,114;128,177,211;253,180,98;179,222,105;252,205,229;217,217,217;188,128,189;204,235,197;255,237,111]; + typ = 'Qualitative'; + case 'Blues' + rgb = [247,251,255;239,243,255;222,235,247;198,219,239;189,215,231;158,202,225;107,174,214;66,146,198;49,130,189;33,113,181;8,81,156;8,69,148;8,48,107]; + typ = 'Sequential'; + case 'BuGn' + rgb = [247,252,253;237,248,251;229,245,249;204,236,230;178,226,226;153,216,201;102,194,164;65,174,118;44,162,95;35,139,69;0,109,44;0,88,36;0,68,27]; + typ = 'Sequential'; + case 'BuPu' + rgb = [247,252,253;237,248,251;224,236,244;191,211,230;179,205,227;158,188,218;140,150,198;140,107,177;136,86,167;136,65,157;129,15,124;110,1,107;77,0,75]; + typ = 'Sequential'; + case 'GnBu' + rgb = [247,252,240;240,249,232;224,243,219;204,235,197;186,228,188;168,221,181;123,204,196;78,179,211;67,162,202;43,140,190;8,104,172;8,88,158;8,64,129]; + typ = 'Sequential'; + case 'Greens' + rgb = [247,252,245;237,248,233;229,245,224;199,233,192;186,228,179;161,217,155;116,196,118;65,171,93;49,163,84;35,139,69;0,109,44;0,90,50;0,68,27]; + typ = 'Sequential'; + case 'Greys' + rgb = [255,255,255;247,247,247;240,240,240;217,217,217;204,204,204;189,189,189;150,150,150;115,115,115;99,99,99;82,82,82;37,37,37;37,37,37;0,0,0]; + typ = 'Sequential'; + case 'OrRd' + rgb = [255,247,236;254,240,217;254,232,200;253,212,158;253,204,138;253,187,132;252,141,89;239,101,72;227,74,51;215,48,31;179,0,0;153,0,0;127,0,0]; + typ = 'Sequential'; + case 'Oranges' + rgb = [255,245,235;254,237,222;254,230,206;253,208,162;253,190,133;253,174,107;253,141,60;241,105,19;230,85,13;217,72,1;166,54,3;140,45,4;127,39,4]; + typ = 'Sequential'; + case 'PuBu' + rgb = [255,247,251;241,238,246;236,231,242;208,209,230;189,201,225;166,189,219;116,169,207;54,144,192;43,140,190;5,112,176;4,90,141;3,78,123;2,56,88]; + typ = 'Sequential'; + case 'PuBuGn' + rgb = [255,247,251;246,239,247;236,226,240;208,209,230;189,201,225;166,189,219;103,169,207;54,144,192;28,144,153;2,129,138;1,108,89;1,100,80;1,70,54]; + typ = 'Sequential'; + case 'PuRd' + rgb = [247,244,249;241,238,246;231,225,239;212,185,218;215,181,216;201,148,199;223,101,176;231,41,138;221,28,119;206,18,86;152,0,67;145,0,63;103,0,31]; + typ = 'Sequential'; + case 'Purples' + rgb = [252,251,253;242,240,247;239,237,245;218,218,235;203,201,226;188,189,220;158,154,200;128,125,186;117,107,177;106,81,163;84,39,143;74,20,134;63,0,125]; + typ = 'Sequential'; + case 'RdPu' + rgb = [255,247,243;254,235,226;253,224,221;252,197,192;251,180,185;250,159,181;247,104,161;221,52,151;197,27,138;174,1,126;122,1,119;122,1,119;73,0,106]; + typ = 'Sequential'; + case 'Reds' + rgb = [255,245,240;254,229,217;254,224,210;252,187,161;252,174,145;252,146,114;251,106,74;239,59,44;222,45,38;203,24,29;165,15,21;153,0,13;103,0,13]; + typ = 'Sequential'; + case 'YlGn' + rgb = [255,255,229;255,255,204;247,252,185;217,240,163;194,230,153;173,221,142;120,198,121;65,171,93;49,163,84;35,132,67;0,104,55;0,90,50;0,69,41]; + typ = 'Sequential'; + case 'YlGnBu' + rgb = [255,255,217;255,255,204;237,248,177;199,233,180;161,218,180;127,205,187;65,182,196;29,145,192;44,127,184;34,94,168;37,52,148;12,44,132;8,29,88]; + typ = 'Sequential'; + case 'YlOrBr' + rgb = [255,255,229;255,255,212;255,247,188;254,227,145;254,217,142;254,196,79;254,153,41;236,112,20;217,95,14;204,76,2;153,52,4;140,45,4;102,37,6]; + typ = 'Sequential'; + case 'YlOrRd' + rgb = [255,255,204;255,255,178;255,237,160;254,217,118;254,204,92;254,178,76;253,141,60;252,78,42;240,59,32;227,26,28;189,0,38;177,0,38;128,0,38]; + typ = 'Sequential'; + otherwise + error('Colorscheme "%s" is not supported. Check the token tables.',tok) +end +% +rgb = rgb./255; +% +switch typ + case 'Diverging' + num = 11; + case 'Qualitative' + num = size(rgb,1); + case 'Sequential' + num = 9; + otherwise + error('The colorscheme type "%s" is not recognized',typ) +end +% +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%bmSelect +% Code and Implementation: +% Copyright (c) 2017 Stephen Cobeldick +% Color Specifications Only: +% Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The Pennsylvania State University. +% +% Licensed under the Apache License, Version 2.0 (the "License"); +% you may not use this file except in compliance with the License. +% You may obtain a copy of the License at +% +% http://www.apache.org/licenses/LICENSE-2.0 +% +% Unless required by applicable law or agreed to in writing, software +% distributed under the License is distributed on an "AS IS" BASIS, +% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +% See the License for the specific language governing permissions and limitations under the License. +% +% Redistribution and use in source and binary forms, with or without +% modification, are permitted provided that the following conditions are met: +% +% 1. Redistributions as source code must retain the above copyright notice, this +% list of conditions and the following disclaimer. +% +% 2. The end-user documentation included with the redistribution, if any, must +% include the following acknowledgment: "This product includes color +% specifications and designs developed by Cynthia Brewer +% (http://colorbrewer.org/)." Alternately, this acknowledgment may appear in the +% software itself, if and wherever such third-party acknowledgments normally appear. +% +% 4. The name "ColorBrewer" must not be used to endorse or promote products +% derived from this software without prior written permission. For written +% permission, please contact Cynthia Brewer at cbrewer@psu.edu. +% +% 5. Products derived from this software may not be called "ColorBrewer", nor +% may "ColorBrewer" appear in their name, without prior written permission of Cynthia Brewer. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%license \ No newline at end of file diff --git a/katoptron/matlab/TPL/DrosteEffect-BrewerMap-c64a384/brewermap_view.m b/katoptron/matlab/TPL/DrosteEffect-BrewerMap-c64a384/brewermap_view.m new file mode 100644 index 0000000000000000000000000000000000000000..d1661447651ccbfec9ec91f74ee3db47cb060887 --- /dev/null +++ b/katoptron/matlab/TPL/DrosteEffect-BrewerMap-c64a384/brewermap_view.m @@ -0,0 +1,323 @@ +function [map,scheme] = brewermap_view(N,scheme) +% An interactive figure for ColorBrewer colormap selection. With demo! +% +% (c) 2017 Stephen Cobeldick +% +% View Cynthia Brewer's ColorBrewer color schemes in a figure. +% +% * Two colorbars give the color scheme in color and grayscale. +% * A button toggles between 3D-cube and 2D-lineplot of the RGB values. +% * A button toggles an endless cycle through the color schemes. +% * A button reverses the colormap. +% * 35 buttons select any ColorBrewer color scheme. +% * Text with the color scheme's type (Diverging/Qualitative/Sequential) +% * Text with the color scheme's number of nodes (defining colors). +% +%%% Syntax: +% brewermap_view +% brewermap_view(N) +% brewermap_view(N,scheme) +% brewermap_view([],...) +% brewermap_view({axes/figure handles},...) % see "Adjust External Colormaps" +% [map,scheme] = brewermap_view(...) +% +% Calling the function with an output argument blocks MATLAB execution until +% the figure is deleted: the final colormap and scheme are then returned. +% +% See also BREWERMAP CUBEHELIX RGBPLOT COLORMAP COLORMAPEDITOR COLORBAR UICONTROL ADDLISTENER +% +%% Adjust Colormaps of Other Figures or Axes %% +% +%%% Example: +% +% load spine +% image(X) +% brewermap_view({gca}) +% +% Very useful! Simply provide a cell array of axes or figure handles when +% calling this function, and their colormaps will be updated in real-time: +% note that MATLAB versions <=2010 only support axes handles for this! +% +%% Input and Output Arguments %% +% +%%% Inputs (*=default): +% N = NumericScalar, an integer to define the colormap length. +% = *[], colormap length of one hundred and twenty-eight (128). +% = {axes/figure handles}, their colormaps will be updated by BREWERMAP_VIEW. +% scheme = String, a ColorBrewer color scheme name. +% +%%% Outputs (these block execution until the figure is deleted!): +% map = NumericMatrix, the colormap defined when the figure is closed. +% scheme = StringToken, the name of the color scheme given in <map>. +% +% [map,scheme] = brewermap_view(N,scheme) + +%% Input Wrangling %% +% +persistent H +% +xtH = {}; +% Parse colormap size: +if nargin<1 || isnumeric(N)&&isempty(N) + N = 128; +elseif iscell(N)&&numel(N) + ish = all(1==cellfun('prodofsize',N)&cellfun(@ishghandle,N)); + assert(ish,'Input <N> may be a cell array of scalar axes or figure handles.') + xtH = N; + N = size(colormap(xtH{1}),1); +else + assert(isnumeric(N)&&isscalar(N),'Input <N> must be a scalar numeric.') + assert(isreal(N)&&fix(N)==N&&N>0,'Input <N> must be positive real integer: %g+%gi',N,imag(N)) + N = double(N); +end +% +[mcs,mun,pyt] = brewermap('list'); +% +% Parse scheme name: +if nargin<2 + scheme = mcs{1+rem(round(now*1e7),numel(mcs))}; +else + assert(ischar(scheme)&&isrow(scheme),'Second input <scheme> must be a string.') +end +% Check if a reversed colormap was requested: +isR = strncmp(scheme,'*',1); +scheme = scheme(1+isR:end); +% +%% Create Figure %% +% +% LHS and RHS slider bounds/limits, and slider step sizes: +lbd = 1; +rbd = 128; +% +% Define the 3D cube axis order: +xyz = 'RGB'; +[~,xyz] = ismember(xyz,'RGB'); +% +if isempty(H) || ~ishghandle(H.fig) + % Check brewermap version: + ers = 'The function BREWERMAP returned an unexpected %s.'; + assert(all(35==[numel(mcs),numel(mun),numel(pyt)]),ers,'array size') + tmp = find(any(diff(+char(pyt)),2)); + assert(numel(tmp)==2&&all(tmp==[9;17]),ers,'scheme name sequence') + % + % Create a new figure: + ClBk = struct('bmvChgS',@bmvChgS, 'bmvRevM',@bmvRevM,... + 'bmv2D3D',@bmv2D3D, 'bmvDemo',@bmvDemo, 'bmvSldr',@bmvSldr); + H = bmvPlot(N,scheme, mcs, lbd, rbd, xyz, ClBk); +end +% +bmvUpDt() +% +if nargout + waitfor(H.fig); +else + clear map +end +% +%% Nested Functions %% +% + function bmvUpDt() + % Update all graphics objects in the figure. + % + % Get ColorBrewer colormap and grayscale equivalent: + [map,num,typ] = brewermap(N,[char(42*ones(1,isR)),scheme]); + mag = sum(map*[0.298936;0.587043;0.114021],2); + % + % Update colorbar values: + set(H.cbAx, 'YLim', [0,abs(N)+(N==0)]+0.5); + set(H.cbIm(1), 'CData',reshape(map,[],1,3)) + set(H.cbIm(2), 'CData',repmat(mag,[1,1,3])) + % + % Update 2D line / 3D patch values: + if get(H.D2D3, 'Value') % 2D + set(H.ln2D, 'XData',linspace(0,1,abs(N))); + set(H.ln2D, {'YData'},num2cell([map,mag],1).'); + else % 3D + set(H.pt3D,... + 'XData',map(:,xyz(1)),... + 'YData',map(:,xyz(2)),... + 'ZData',map(:,xyz(3)), 'FaceVertexCData',map) + end + % + % Update reverse button: + set(H.bRev, 'Value',isR) + % + % Update warning text: + str = {typ;sprintf('%d Nodes',num)}; + set(H.warn,'String',str); + % + % Update parameter value text: + set(H.vTxt(1), 'String',sprintf('N = %.0f',N)); + % + % Update external axes/figure: + for k = find(cellfun(@ishghandle,xtH)) + colormap(xtH{k},map); + end + end +% + function bmv2D3D(h,~) + % Switch between 2D-line and 3D-cube representation. + % + if get(h,'Value') % 2D + set(H.ax3D, 'HitTest','off', 'Visible','off') + set(H.ax2D, 'HitTest','on') + set(H.pt3D, 'Visible','off') + set(H.ln2D, 'Visible','on') + else % 3D + set(H.ax2D, 'HitTest','off') + set(H.ax3D, 'HitTest','on', 'Visible','on') + set(H.ln2D, 'Visible','off') + set(H.pt3D, 'Visible','on') + end + % + bmvUpDt(); + end +% + function bmvChgS(~,e) + % Change the color scheme. + % + scheme = get(e.NewValue,'String'); + % + bmvUpDt() + end +% + function bmvRevM(h,~) + % Reverse the colormap. + % + isR = get(h,'Value'); + % + bmvUpDt() + end +% + function bmvSldr(~,~) + % Update the slider position. + % + N = round(get(H.vSld,'Value')); + % + bmvUpDt() + end +% + function bmvDemo(h,~) + % Display all ColorBrewer schemes sequentially. + % + while ishghandle(h)&&get(h,'Value') + % + ids = 1+mod(find(strcmpi(scheme,mcs)),numel(mcs)); + set(H.bGrp,'SelectedObject',H.bEig(ids)); + scheme = mcs{ids}; + % + bmvUpDt(); + % + % Faster/slower: + pause(1.2); + end + % + end +% +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%brewermap_view +function H = bmvPlot(N,scheme, mcs, lbd, rbd, xyz, ClBk) +% Draw a new figure with RGBplot axes, ColorBar axes, and uicontrol sliders. +% +M = 9; % buttons per column +gap = 0.01; % gaps +bth = 0.04; % demo height +btw = 0.09; % demo width +uih = 0.40; % height of UI control group +cbw = 0.21; % width of both colorbars +axh = 1-uih-2*gap; % axes height +wdt = 1-cbw-2*gap; % axes width +stp = [1,10]; % slider step +% +H.fig = figure('HandleVisibility','callback', 'Color','white',... + 'IntegerHandle','off', 'NumberTitle','off',... + 'Name','ColorBrewer Interactive Scheme Selector'); +% +% Add 2D lineplot: +H.ax2D = axes('Parent',H.fig, 'Position',[gap, uih+gap, wdt, axh],... + 'ColorOrder',[1,0,0; 0,1,0; 0,0,1; 0.6,0.6,0.6], 'HitTest','off',... + 'Visible','off', 'XLim',[0,1], 'YLim',[0,1], 'XTick',[], 'YTick',[]); +H.ln2D = line([0,0,0,0;1,1,1,1],[0,0,0,0;1,1,1,1], 'Parent',H.ax2D, 'Visible','off'); +% +% Add 3D scatterplot: +H.ax3D = axes('Parent',H.fig, 'OuterPosition',[0, uih, wdt+2*gap, 1-uih],... + 'Visible','on', 'XLim',[0,1], 'YLim',[0,1], 'ZLim',[0,1], 'HitTest','on'); +H.pt3D = patch('Parent',H.ax3D, 'XData',[0;1], 'YData',[0;1], 'ZData',[0;1],... + 'Visible','on', 'LineStyle','none', 'FaceColor','none', 'MarkerEdgeColor','none',... + 'Marker','o', 'MarkerFaceColor','flat', 'MarkerSize',10, 'FaceVertexCData',[1,1,0;1,0,1]); +view(H.ax3D,3); +grid(H.ax3D,'on') +lbl = {'Red','Green','Blue'}; +xlabel(H.ax3D,lbl{xyz(1)}) +ylabel(H.ax3D,lbl{xyz(2)}) +zlabel(H.ax3D,lbl{xyz(3)}) +% +% Add warning text: +H.warn = text('Parent',H.ax2D, 'Units','normalized', 'Position',[1,1],... + 'HorizontalAlignment','right', 'VerticalAlignment','top', 'Color','k'); +% +% Add demo button: +H.demo = uicontrol(H.fig, 'Style','togglebutton', 'Units','normalized',... + 'Position',[gap,uih+gap+0*bth,btw,bth], 'String','Demo',... + 'Max',1, 'Min',0, 'Callback',ClBk.bmvDemo); +% Add 2D/3D button: +H.D2D3 = uicontrol(H.fig, 'Style','togglebutton', 'Units','normalized',... + 'Position',[gap,uih+gap+1*bth,btw,bth], 'String','2D / 3D',... + 'Max',1, 'Min',0, 'Callback',ClBk.bmv2D3D); +% Add reverse button: +H.bRev = uicontrol(H.fig, 'Style','togglebutton', 'Units','normalized',... + 'Position',[gap,uih+gap+2*bth,btw,bth], 'String','Reverse',... + 'Max',1, 'Min',0, 'Callback',ClBk.bmvRevM); +% +% Add colorbars: +C = reshape([1,1,1],1,[],3); +H.cbAx(1) = axes('Parent',H.fig, 'Visible','off', 'Units','normalized',... + 'Position',[1-cbw/1,gap,cbw/2-gap,1-2*gap], 'YLim',[0.5,1.5],... + 'YDir','reverse', 'HitTest','off'); +H.cbAx(2) = axes('Parent',H.fig, 'Visible','off', 'Units','normalized',... + 'Position',[1-cbw/2,gap,cbw/2-gap,1-2*gap], 'YLim',[0.5,1.5],... + 'YDir','reverse', 'HitTest','off'); +H.cbIm(1) = image('Parent',H.cbAx(1), 'CData',C); +H.cbIm(2) = image('Parent',H.cbAx(2), 'CData',C); +% +% Add parameter slider, listener, and corresponding text: +sv = max(lbd,min(rbd,N)); +H.vTxt = uicontrol(H.fig,'Style','text', 'Units','normalized',... + 'Position',[gap,uih-bth,btw,bth], 'String','X'); +H.vSld = uicontrol(H.fig,'Style','slider', 'Units','normalized',... + 'Position',[gap,gap,btw,uih-bth], 'Min',lbd(1), 'Max',rbd(1),... + 'SliderStep',stp(1,:)/(rbd(1)-lbd(1)), 'Value',sv(1)); +addlistener(H.vSld, 'Value', 'PostSet',ClBk.bmvSldr); +% +% Add scheme button group: +H.bGrp = uibuttongroup('Parent',H.fig, 'BorderType','none', 'Units','normalized',... + 'BackgroundColor','white', 'Position',[2*gap+btw,gap,wdt-btw-gap,uih-gap]); +% Determine button locations: +Z = 1:numel(mcs); +Z = Z+(Z>17); +C = (ceil(Z/M)-1)/4; +R = (M-1-mod(Z-1,M))/M; +% Add scheme buttons to group: +for k = numel(mcs):-1:1 + H.bEig(k) = uicontrol('Parent',H.bGrp, 'Style','Toggle', 'String',mcs{k},... + 'Unit','normalized', 'Position',[C(k),R(k),1/4,1/M]); +end +set(H.bGrp,'SelectedObject',H.bEig(strcmpi(scheme,mcs))); +set(H.bGrp,'SelectionChangeFcn',ClBk.bmvChgS); +% +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%bmvPlot +% +% Copyright (c) 2017 Stephen Cobeldick +% +% Licensed under the Apache License, Version 2.0 (the "License"); +% you may not use this file except in compliance with the License. +% You may obtain a copy of the License at +% +% http://www.apache.org/licenses/LICENSE-2.0 +% +% Unless required by applicable law or agreed to in writing, software +% distributed under the License is distributed on an "AS IS" BASIS, +% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +% See the License for the specific language governing permissions and limitations under the License. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%license \ No newline at end of file diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/AUTHORS b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/AUTHORS new file mode 100644 index 0000000000000000000000000000000000000000..2558a19f7c3ce5d8ca82069cb4178fe791339001 --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/AUTHORS @@ -0,0 +1 @@ +Nico Schlömer designed and implemented the intial version and is the current maintainer. diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/COPYING b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/COPYING new file mode 100644 index 0000000000000000000000000000000000000000..15dc1832b0e5c62c9400a6b8b093bf510ce6cdf8 --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/COPYING @@ -0,0 +1,24 @@ +Copyright (c) 2008--2012 Nico Schlömer +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/ChangeLog b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/ChangeLog new file mode 100644 index 0000000000000000000000000000000000000000..911c5e4d1f1d128035a3a9b4c4f6c43a76de8b2f --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/ChangeLog @@ -0,0 +1,388 @@ +2014-11-21 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.6.0. + * Annotation support in R2014a and earlier + * New subplot positioning approach (by Klaus Broelemann) that uses absolute + instead of relative positions. + * Support stacked bar plots and others in the same axes (needs pgfplots + 1.11). + * Support legends with multiline entries. + * Support for the alpha channel in PNG output. + * Test framework updated and doesn't display figures by default. + * Major code clean-up and code complexity checks. + * Bug fixes: + - Cycle paths only when needed (#317, #49, #404) + - Don't use infinite xmin/max, etc. (#436) + - Warn about the noSize parameter (#431) + - Images aren't flipped anymore (#401) + - No scientific notation in width/height (#396) + - Axes with custom colors (#376) + - Mesh plots are exported properly (#382) + - Legend colors are handled better (#389) + - Handle Z axis properties for quiver3 (#406) + - Better text handling, e.g. degrees (#402) + - Don't output absolute paths into TikZ by default + - ... + +2014-10-20 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.5.0. + * Support for MATLAB 2014b (with it's substantial graphics changes). + All credit goes to Egon Geerardyn. + * Bugfixes: + - single bar width + - invisible bar plots + - surface options + - patch plots and cycling + - patches with literal colors + +2014-03-07 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.4.7. + * Acid tests: Remove MATLAB-based eps2pdf. + * Bugfixes: + - multiple patches + - log plot with nonzero baseline + - marker options for scatter plots + - table data formatting + - several fixes for Octave + +2014-02-07 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.4.6. + * Set externalData default to false. + * Properly check for required Pgfplots version. + * Marker scaling in scatter plots. + +2014-02-02 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.4.5. + * Arrange data in tables. + * Optionally define custom colors. + * Allow for strict setting of font sizes. + * Bugfixes: + - tick labels for log plots + - tick labels with commas + +2014-01-02 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.4.4. + * Support for color maps with scatter plots. + * Support for different-length up-down error bars. + * Input options validation. + * Bugfixes: + - legends for both area and line plots + - invisible text fields + +2013-10-20 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.4.3. + * Support for 3D quiver plots. + * Extended support for colorbar axis options. + * New logo! + * Bugfixes: + - text generation + - extraCode option + - join strings + - ... + +2013-09-12 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.4.2. + * Support for explicit color specification in 3D plots. + * Better color handling for patch plots. + * Support for various unicode characters. + * Bugfixes: + - edge colors for bar plots + - multiple color bars + - ... + +2013-08-14 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.4.1. + * Replaced option `extraTikzpictureCode` by `extraCode` + for inserting code at the beginning of the file. + * Support for relative text positioning. + * Improved documentation. + * Code cleanup: moved all figure manipulations over to cleanfigure() + * Bugfixes: + - error bars + - empty tick labels + - ... + +2013-06-26 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.4.0. + * Added cleanfigure() for removing unwanted entities from a plot + before conversion + * Add option `floatFormat` to allow for custom specification of the format + of float numbers + * Bugfixes: + - linewidth for patches + - ... + +2013-04-13 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.3.3. + * Support for: + - pictures in LaTeX subfloats + * Bugfixes: + - axes labels + - extra* options + - logscaled axes + - ... + +2013-03-14 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.3.2. + * Support for: + - waterfall plots + * Bugfixes: + - axis locations + - color handling + - stacked bars + - ... + +2013-02-15 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.3.1. + * Use table{} for plots for cleaner output files. + * Support for: + - hg transformations + - pcolor plots + * Removed command line options: + - minimumPointsDistance + * Bugfixes: + - legend positioning and alignment + - tick labels + - a bunch of fixed for Octave + - line width for markers + - axis labels for color bars + - image trimming + - subplots with bars + - ... + +2012-11-19 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.3.0. + * Support for: + - area plots + - legend position + - inner color bars + - log-scaled color bars + * New command line options: + - standalone (create compilable TeX file) + - checkForUpdates + * mlint cleanups. + * Removed deprecated options. + * Bugfixes: + - colorbar-axis association + - option parsing + - automatic updater + - unit 'px' + - ... + +2012-09-01 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.2.3. + * Multiline text for all entities. + * Support for logical images. + * Support for multiple legends (legends in subplots). + * Fixed version check bug. + * Fix minumumPointsDistance. + +2012-07-19 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.2.2. + * Support for multiline titles and axis labels. + * Respect log-scaled axes for minimumPointsDistance. + * Add support for automatic graph labels via + new option. + * About 5 bugfixes. + +2012-05-04 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.2.1. + * Support for color maps. + * Support for native color bars. + * Partial support for hist3 plots. + * Support for spectrogram plots. + * Support for rotated text. + * Native handling of Infs/NaNs. + * Better info text. + * matlab2tikz version checking. + * Line plotting code cleanup. + * About 10 bugfixes. + +2012-03-17 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.2.0. + * Greatly overhauled text handling. (Burkhart Lingner) + * Added option 'tikzFileComment'. + * Added option 'parseStrings'. + * Added option 'extraTikzpictureSettings'. + * Added proper documetion (for 'help matlab2tikz'). + * Improved legend positioning, orientation. + * Support for horizontal bar plots. + * Get bar widths right. + * Doubles are plottet with 15-digit precision now. + * Support for rectangle objects. + * Better color handling. + * Testing framework improvements. + * Several bugfixes: + - ticks handled more concisely + - line splitting bugs + - ... + +2011-11-22 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.1.4. + * Support for scatter 3D plots. + * Support for 3D parameter curves. + * Support for 3D patches. + * Support for minor ticks. + * Add option interpretTickLabelsAsTex (default false). + * Several bugfixes: + - %-sign in annotations + - fixed \omega and friends in annotations + - proper legend for bar plots + - don't override PNG files if there is + more than one image plot + - don't always close patch paths + +2011-08-22 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.1.3. + * Greatly overhauled text handling. + * Better Octave compatibility. + * Several bugfixes: + - subplot order + - environment detection + + +2011-06-02 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.1.2. + * Support for logscaled color bar. + * Support for truecolor images. + * Initial support for text handles. + * Speed up processing for line plots. + * Several bugfixes: + - axis labels, tick labels, etc. for z-axis + - marker handling for scatter plots + - fix for unicolor scatter plots + +2011-04-06 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.1.1. + * Improved Octave compatibility. + * Several bugfixes: + - input parser + +2011-01-31 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.1.0. + * Basic Octave compatibility. + * Several bugfixes: + - bar plots fix (thanks to Christoph Rüdiger) + - fix legends with split graphs + +2010-09-10 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.0.7. + * Compatibility fixes for older MATLAB installations. + * Several bugfixes: + - line plots with only one point + - certain surface plots + - orientation of triangle markers ("<" vs. ">") + - display of the color "purple" + +2010-05-06 Nico Schlömer <nico.schloemer@gmail.com> + + * Version 0.0.6. + * Support for scatter plots. + * Preliminary support for surface plots; thanks to Pooya. + * Large changes in the codebase: + - next to matlab2tikz.m, the file pgfplotsEnvironment.m + is now needed as well; it provides a much better + structured approach to storing and writing environments + when parsing the MATLAB(R) figure + * proper MATLAB(R) version check + * lots of small fixes + +2009-12-21 Nico Schlömer <nico.schloemer@ua.ac.be> + + * Version 0.0.5. + * Improvements in axis handling: + - colored axes + - allow different left and right ordinates + * Improvements for line plots: + + * Version 0.0.5. + * Improvements in axis handling: + - colored axes + - allow different left and right ordinates + * Improvements for line plots: + - far outliers are moved toward the plot, avoiding 'Dimension too + large'-type errors in LaTeX + - optional point reduction by new option 'minimumPointsDistance' + * Improvements for image handling: + - creation of a PNG file, added by '\addplot graphics' + - fixed axis orientation bug + * Bugfixes for: + - multiple axes + - CMYK colors + - legend text alignment (thanks Dragen Mitrevski) + - transparent patches (thanks Carlos Russo) + * Added support for: + - background color + - Bode plots + - zplane plots + - freqz plots + + +2009-06-09 Nico Schlömer <nico.schloemer@ua.ac.be> + + * Version 0.0.4. + * Added support for: + - error bars (thanks Robert Whittlesey for the suggestion) + * Improvents in: + - legends (thanks Theo Markettos for the patch), + - images, + - quiver plots (thanks Robert for spotting this). + * Improved options handling. + * Allow for custom file encoding (thanks Donghua Wang for the + suggestion). + * Numerous bugfixes (thanks Andreas Gäb). + +2009-03-08 Nico Schlömer <nico.schloemer@ua.ac.be> + + * Version 0.0.3. + * Added support for: + - subplots + - reverse axes + * Completed support for: + - images + +2009-01-08 Nico Schlömer <nico.schloemer@ua.ac.be> + + * Version 0.0.2. + * Added support for: + - quiver (arrow) plots + - bar plots + - stem plots + - stairs plots + * Added preliminary support for: + - images + - rose plots + - compass plots + - polar plots + * Moreover, large code improvement have been introduced, notably: + - aspect ratio handling + - color handling + - plot options handling + + +2008-11-07 Nico Schlömer <nico.schloemer@ua.ac.be> + + * Initial version 0.0.1. diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/Makefile b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..1d9d6e9b293476bf6c6ade41bb8048d0dd6ec373 --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/Makefile @@ -0,0 +1,21 @@ +# This makefile creates a release tarball. + +MATLAB2TIKZ_DIR=. +VERSION=0.4.7 + +default: release + +release: + # The license is automatically added by + # MathWorks after the upload. + @zip -r matlab2tikz_${VERSION}.zip \ + ${MATLAB2TIKZ_DIR}/AUTHORS \ + ${MATLAB2TIKZ_DIR}/ChangeLog \ + ${MATLAB2TIKZ_DIR}/README.md \ + ${MATLAB2TIKZ_DIR}/THANKS \ + ${MATLAB2TIKZ_DIR}/version-${VERSION} \ + ${MATLAB2TIKZ_DIR}/tools/ \ + ${MATLAB2TIKZ_DIR}/src/ + +clean: + rm -f matlab2tikz_${VERSION}.zip diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/README.md b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/README.md new file mode 100644 index 0000000000000000000000000000000000000000..aedbc18e5d7fa0bf5ba00886dd428671b7d1d32e --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/README.md @@ -0,0 +1,69 @@ + + +[](https://travis-ci.org/matlab2tikz/matlab2tikz) + +This is matlab2tikz, a MATLAB(R) script for converting MATLAB(R) figures into +native TikZ/Pgfplots figures. + +To download and rate matlab2tikz, go to its page on MathWorks +http://www.mathworks.com/matlabcentral/fileexchange/22022. + +matlab2tikz supports the conversion of most MATLAB figures, +including 2D and 3D plots. For plots constructed with third- +party packages, your mileage may vary. + +The workflow is as follows. + +0. a. Place the matlab2tikz scripts (contents of src/ folder) in a directory + where MATLAB can find it (the current directory, for example). + b. Make sure that your LaTeX installation includes the packages + * TikZ (aka PGF, >=2.00) and + * Pgfplots (>=1.3). + +1. Generate your plot in MATLAB. + +2. Invoke matlab2tikz by +```matlab +>> matlab2tikz(); +``` + or +```matlab +>> matlab2tikz('myfile.tex'); +``` + The script accepts numerous options; check them out by invoking the help, +```matlab +>> help matlab2tikz +``` +Sometimes, MATLAB makes it hard to create matching LaTeX plots by keeping +invisible objects around or stretches the plots too far beyond the bounding box. +Use +```matlab +>> cleanfigure; +>> matlab2tikz('myfile.tex'); +``` +to first clean the figure of unwanted entities, and then convert it to TeX. + +3. Add the contents of `myfile.tex` into your LaTeX source code; a + convenient way of doing so is to use `\input{/path/to/myfile.tex}`. + Also make sure that at the header of your document the Pgfplots package + is included: +```latex +\documentclass{article} +\usepackage{pgfplots} +% and optionally (as of Pgfplots 1.3): +\pgfplotsset{compat=newest} +\pgfplotsset{plot coordinates/math parser=false} +\newlength\figureheight +\newlength\figurewidth +\begin{document} +\input{myfile.tex} +\end{document} +``` + +There are reported incompatibilities with the following LaTeX packages: + * signalflowdiagram <http://www.texample.net/tikz/examples/signal-flow-building-blocks/> + (Check out <http://sourceforge.net/tracker/?func=detail&aid=3312653&group_id=224188&atid=1060656>.) + +If you experience bugs, have nice examples of what matlab2tikz can do, or if +you are just looking for more information, please visit the web page of +matlab2tikz <https://github.com/matlab2tikz/matlab2tikz>. diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/THANKS b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/THANKS new file mode 100644 index 0000000000000000000000000000000000000000..74103b84acc6ad625904eb460458b397ee5d172c --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/THANKS @@ -0,0 +1,47 @@ +matlab2tikz has once greatly profited from its ancestor, Matfig2PGF, + + http://www.mathworks.com/matlabcentral/fileexchange/12962 + +Matfig2PGF is written by Paul Wagenaars. + +Also, the authors would like to thank Christian Feuersänger for the Pgfplots +package which forms the basis for the matlab2tikz output on the LaTeX side. + +Thanks for patches, suggestions, and other contributions go to + + Katherine Elkington + Andreas Gäb + Roman Gesenhues + David Haberthür + Patrick Häcker + Mykel Kochenderfer + Henk Kortier + Theo Markettos + Dragan Mitrevski + Carlos Russo + Robert Whittlesey + Pooya Ziraksaz + Johannes Schmitz + Christoph Rüdiger + Ben Abbott + Johannes Mueller-Roemer + Julien Ridoux + Burkart Lingner + Francesco Montorsi + Ricardo Santiago Mozos + Eike Blechschmidt + Michael Schoeberl + Patrick Häcker + Egon Geerardyn + Oleg Komarov + Klaus Broelemann + Peter Pablo + ... + +and MathWorks' very own + + Martijn Aben + Bastiaan Zuurendonk + Michael Glasser + +and many more! diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/logos/matlab2tikz.svg b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/logos/matlab2tikz.svg new file mode 100644 index 0000000000000000000000000000000000000000..ea2a8f7d2d3a976ef8b641db57efed52b221802b --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/logos/matlab2tikz.svg @@ -0,0 +1,94 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="744.09448819" + height="1052.3622047" + id="svg3051" + version="1.1" + inkscape:version="0.48.5 r10040" + sodipodi:docname="m2t.svg"> + <defs + id="defs3053" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.25" + inkscape:cx="696.59128" + inkscape:cy="461.26734" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1280" + inkscape:window-height="738" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" /> + <metadata + id="metadata3056"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <path + style="fill:#ef8200;fill-opacity:1;stroke:none" + d="m 229.79347,889.91953 c -51.20296,-69.53548 -110.45905,-150.5284 -117.8477,-161.07762 -3.66043,-5.22621 -4.15923,-6.45766 -2.93039,-7.23468 0.81449,-0.51503 2.1559,-0.94763 2.9809,-0.96134 4.45183,-0.074 21.84491,-16.50352 39.70528,-37.5057 64.93246,-76.3547 212.14442,-292.5117 313.27925,-460 28.45805,-47.12908 55.23448,-94.70724 59.01417,-107.81682 2.21373,-7.67817 3.30364,-4.58186 5.54982,7.259 0.84717,4.46595 9.42069,39.94343 19.05225,78.83886 61.4356,248.09709 88.96885,376.22196 95.45994,444.21896 1.34274,14.06576 0.80116,31.67542 -1.06339,34.57694 -0.67969,1.05768 -29.41344,23.07306 -63.85279,48.92306 -46.63668,35.00526 -216.41083,162.82778 -297.77739,224.19582 l -3.13285,2.36286 z" + id="path3072" /> + <path + style="fill:#ffd912;fill-opacity:1" + d="M 828.49628,790.87316 C 751.45425,746.41551 656.62349,689.46978 647.33146,682.08395 c -2.47911,-1.97053 -2.52321,-2.17947 -1.05805,-5.01277 3.18772,-6.16438 4.02557,-14.85566 3.44538,-35.74002 -0.80529,-28.98647 -5.98761,-65.55929 -17.38517,-122.69097 -18.80756,-94.27528 -55.9766,-241.89492 -91.4729,-363.29152 -4.95189,-16.93533 -13.8484,-44.15875 -13.64905,-44.7568 0.19935,-0.59804 7.77507,16.91106 10.71396,23.16944 14.72516,31.35732 169.10504,368.5638 262.04653,572.37888 18.81036,41.25 35.965,78.78344 38.1214,83.40766 2.15641,4.62421 3.80419,8.50202 3.66173,8.61735 -0.14245,0.11533 -6.10901,-3.16608 -13.25901,-7.29204 z" + id="path3070" /> + <path + style="fill:#00b0cf;fill-opacity:1" + d="M 98.496283,712.93087 C 76.224153,691.69469 25.659453,651.42885 -55.133796,590.59166 l -36.630081,-27.58239 14.630081,-4.80606 C 1.4604828e-5,532.86436 84.848253,489.14509 155.49628,438.33721 c 90.71369,-65.23848 211.18904,-171.14032 339.75,-298.65155 14.7125,-14.59237 30.24771,-31.09621 30.24771,-30.65137 0,1.46965 -5.56006,9.74411 -33.50167,53.6059 -117.938,185.13504 -236.74752,364.94776 -300.3065,454.5 -22.45559,31.6391 -46.86362,64.24839 -58.75719,78.5 -10.15154,12.16419 -23.13943,25.02746 -25.20109,24.95928 -0.6772,-0.0224 -4.83126,-3.47326 -9.231257,-7.6686 z" + id="path2987" /> + <text + xml:space="preserve" + style="font-size:256.08959961px;font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ef8200;fill-opacity:1;stroke:none;font-family:Monotype Corsiva;-inkscape-font-specification:Monotype Corsiva Bold Italic" + x="835.56165" + y="469.78217" + id="text3863" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan3865" + x="835.56165" + y="469.78217" + style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans Italic"><tspan + style="font-style:normal;-inkscape-font-specification:Liberation Sans" + id="tspan2999">MATLAB</tspan><tspan + style="font-style:italic;font-weight:bold;-inkscape-font-specification:Liberation Sans Italic" + id="tspan2997">2</tspan></tspan><tspan + sodipodi:role="line" + x="835.56165" + y="789.89417" + id="tspan3867" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ef8200;fill-opacity:1;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans" + id="tspan3875">Ti</tspan><tspan + style="font-style:italic;-inkscape-font-specification:Liberation Sans Italic" + id="tspan2995">k</tspan><tspan + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans" + id="tspan3873">Z</tspan></tspan></text> + </g> +</svg> diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/cleanfigure.m b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/cleanfigure.m new file mode 100644 index 0000000000000000000000000000000000000000..ffc0feef203d48643ae36c50840c71eab62a185c --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/cleanfigure.m @@ -0,0 +1,524 @@ +function cleanfigure(varargin) +% CLEANFIGURE() removes the unnecessary objects from your MATLAB plot +% to give you a better experience with matlab2tikz. +% CLEANFIGURE comes with several options that can be combined at will. +% +% CLEANFIGURE('handle',HANDLE,...) explicitly specifies the +% handle of the figure that is to be stored. (default: gcf) +% +% CLEANFIGURE('minimumPointsDistance',DOUBLE,...) explicitly specified the +% minimum distance between two points. (default: 1.0e-10) +% +% Example +% x = -pi:pi/1000:pi; +% y = tan(sin(x)) - sin(tan(x)); +% plot(x,y,'--rs'); +% cleanfigure(); +% + +% Copyright (c) 2013--2014, Nico Schlömer <nico.schloemer@gmail.com> +% All rights reserved. +% +% Redistribution and use in source and binary forms, with or without +% modification, are permitted provided that the following conditions are +% met: +% +% * Redistributions of source code must retain the above copyright +% notice, this list of conditions and the following disclaimer. +% * Redistributions in binary form must reproduce the above copyright +% notice, this list of conditions and the following disclaimer in +% the documentation and/or other materials provided with the distribution +% +% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +% POSSIBILITY OF SUCH DAMAGE. + + % Treat hidden handles, too. + shh = get(0, 'ShowHiddenHandles'); + set(0, 'ShowHiddenHandles', 'on'); + + % Keep track of the current axes. + meta.gca = []; + + % Set up command line options. + m2t.cmdOpts = m2tInputParser; + m2t.cmdOpts = m2t.cmdOpts.addParamValue(m2t.cmdOpts, 'minimumPointsDistance', 1.0e-10, @isnumeric); + m2t.cmdOpts = m2t.cmdOpts.addParamValue(m2t.cmdOpts, 'handle', gcf, @ishandle); + + % Finally parse all the elements. + m2t.cmdOpts = m2t.cmdOpts.parse(m2t.cmdOpts, varargin{:}); + + % Recurse down the tree of plot objects and clean up the leaves. + for h = m2t.cmdOpts.Results.handle(:)' + recursiveCleanup(meta, h, m2t.cmdOpts.Results.minimumPointsDistance, 0); + end + + % Reset to initial state. + set(0, 'ShowHiddenHandles', shh); + + return; +end +% ========================================================================= +function indent = recursiveCleanup(meta, h, minimumPointsDistance, indent) + + type = get(h, 'Type'); + + %display(sprintf([repmat(' ',1,indent), type, '->'])) + + % Don't try to be smart about quiver groups. + % NOTE: + % A better way to write `strcmp(get(h,...))` would be to use + % isa(handle(h), 'specgraph.quivergroup'). + % The handle() function isn't supported by Octave, though, so let's stick + % with strcmp(). + if strcmp(get(h, 'Type'), 'specgraph.quivergroup') + %if strcmp(class(handle(h)), 'specgraph.quivergroup') + return; + end + + % Update the current axes. + if strcmp(get(h, 'Type'), 'axes') + meta.gca = h; + end + + children = get(h, 'Children'); + if ~isempty(children) + for child = children(:)' + indent = indent + 4; + indent = recursiveCleanup(meta, child, minimumPointsDistance, indent); + indent = indent - 4; + end + else + % We're in a leaf, so apply all the fancy simplications. + + %% Skip invisible objects. + %if ~strcmp(get(h, 'Visible'), 'on') + % display(sprintf([repmat(' ',1,indent), ' invisible'])) + % return; + %end + + %display(sprintf([repmat(' ',1,indent), ' handle this'])) + + if strcmp(type, 'line') + pruneOutsideBox(meta, h); + % Move some points closer to the box to avoid TeX:DimensionTooLarge + % errors. This may involve inserting extra points. + movePointsCloser(meta, h); + % Don't be too precise. + coarsenLine(meta, h, minimumPointsDistance); + elseif strcmp(type, 'text') + % Check if text is inside bounds by checking if the Extent rectangle + % and the axes box overlap. + xlim = get(meta.gca, 'XLim'); + ylim = get(meta.gca, 'YLim'); + extent = get(h, 'Extent'); + extent(3:4) = extent(1:2) + extent(3:4); + overlap = xlim(1) < extent(3) && xlim(2) > extent(1) ... + && ylim(1) < extent(4) && ylim(2) > extent(2); + if ~overlap + % Artificially disable visibility. m2t will check and skip. + set(h, 'Visible', 'off'); + end + end + end + + return; +end +% ========================================================================= +function pruneOutsideBox(meta, handle) + % Some sections of the line may sit outside of the visible box. + % Cut those off. + + xData = get(handle, 'XData'); + yData = get(handle, 'YData'); + zData = get(handle, 'ZData'); + + if isempty(zData) + data = [xData(:), yData(:)]; + else + data = [xData(:), yData(:), zData(:)]; + end + + if isempty(data) + return; + end + + %hasLines = ~strcmp(lineStyle,'none') && lineWidth>0.0; + %hasMarkers = ~strcmp(marker,'none'); + hasLines = true; + hasMarkers = true; + xLim = get(meta.gca, 'XLim'); + yLim = get(meta.gca, 'YLim'); + + tol = 1.0e-10; + relaxedXLim = xLim + [-tol, tol]; + relaxedYLim = yLim + [-tol, tol]; + + numPoints = size(data, 1); + + % Get which points are inside a (slightly larger) box. + dataIsInBox = isInBox(data(:,1:2), ... + relaxedXLim, relaxedYLim); + + % By default, don't plot any points. + shouldPlot = false(numPoints, 1); + if hasMarkers + shouldPlot = shouldPlot | dataIsInBox; + end + if hasLines + % Check if the connecting line is in the box. + segvis = segmentVisible(data(:,1:2), ... + dataIsInBox, xLim, yLim); + % Plot points which are next to an edge which is in the box. + shouldPlot = shouldPlot | [false; segvis] | [segvis; false]; + end + + if ~all(shouldPlot) + % There are two options here: + % data = data(shouldPlot, :); + % i.e., simply removing the data that isn't supposed to be plotted. + % For line plots, this has the disadvantage that the line between two + % 'loose' ends may now appear in the figure. + % To avoid this, add a row of NaNs wherever a block of actual data is + % removed. + chunkIndices = []; + k = 1; + while k <= numPoints + % fast forward to shouldPlot==True + while k<=numPoints && ~shouldPlot(k) + k = k+1; + end + kStart = k; + % fast forward to shouldPlot==False + while k<=numPoints && shouldPlot(k) + k = k+1; + end + kEnd = k-1; + + if kStart <= kEnd + chunkIndices = [chunkIndices; ... + [kStart, kEnd]]; + end + end + + % Create masked data with NaN padding. + % Make sure that there are no NaNs at the beginning of the data since + % this would be interpreted as column names by Pgfplots. + if size(chunkIndices, 1) > 0 + ci = chunkIndices(1,:); + newData = data(ci(1):ci(2), :); + n = size(data, 2); + for ci = chunkIndices(2:end,:)' + newData = [newData; ... + NaN(1, n); ... + data(ci(1):ci(2), :)]; + end + data = newData; + end + end + + % Override with the new data. + set(handle, 'XData', data(:, 1)); + set(handle, 'YData', data(:, 2)); + if ~isempty(zData) + set(handle, 'ZData', data(:, 3)); + end + + return; +end +% ========================================================================= +function out = segmentVisible(data, dataIsInBox, xLim, yLim) + % Given a bounding box {x,y}Lim, loop through all pairs of subsequent nodes + % in p and determine whether the line between the pair crosses the box. + + n = size(data, 1); + out = false(n-1, 1); + for k = 1:n-1 + out(k) = (dataIsInBox(k) && all(isfinite(data(k+1,:)))) ... % one of the neighbors is inside the box + || (dataIsInBox(k+1) && all(isfinite(data(k,:)))) ... % and the other is finite + || segmentsIntersect(data(k,:), data(k+1,:), ... + [xLim(1);yLim(1)], [xLim(1);yLim(2)]) ... % left border + || segmentsIntersect(data(k,:), data(k+1,:), ... + [xLim(1);yLim(1)], [xLim(2);yLim(1)]) ... % bottom border + || segmentsIntersect(data(k,:), data(k+1,:), ... + [xLim(2);yLim(1)], [xLim(2);yLim(2)]) ... % right border + || segmentsIntersect(data(k,:), data(k+1,:), ... + [xLim(1);yLim(2)], [xLim(2);yLim(2)]); % top border + end + +end +% ========================================================================= +function out = segmentsIntersect(X1, X2, X3, X4) + % Checks whether the segments X1--X2 and X3--X4 intersect. + lambda = crossLines(X1, X2, X3, X4); + out = all(lambda > 0.0) && all(lambda < 1.0); + return +end +% ========================================================================= +function coarsenLine(meta, handle, minimumPointsDistance) + % Reduce the number of data points in the line handle. + % Given a minimum distance at which two nodes are considered different, + % this can help with plots that contain a large amount of data points not + % all of which need to be plotted. + % + if ( abs(minimumPointsDistance) < 1.0e-15 ) + % bail out early + return + end + + % Extract the data from the current line handle. + xData = get(handle, 'XData'); + yData = get(handle, 'YData'); + zData = get(handle, 'ZData'); + if ~isempty(zData) + % Don't do funny stuff when zData is present. + return; + end + + data = [xData(:), yData(:)]; + + if isempty(data) + return; + end + + % Generate a mask which is true for the first point, and all + % subsequent points which have a greater norm2-distance from + % the previous point than 'threshold'. + n = size(data, 1); + + % Get info about log scaling. + isXlog = strcmp(get(meta.gca, 'XScale'), 'log'); + isYlog = strcmp(get(meta.gca, 'YScale'), 'log'); + + mask = false(n, 1); + + XRef = data(1,:); + mask(1) = true; + for kk = 2:n + % Compute the visible distance of those points, + % incorporating possible log-scaling of the axes. + visDiff = XRef - data(kk,:); + if isXlog + % visDiff(1) = log10(XRef(1)) - log10(data(kk,1)); + visDiff(1) = log10(visDiff(1)); + end + if isYlog + visDiff(2) = log10(visDiff(2)); + end + % Check if it's larger than the threshold and + % update the reference point in that case. + if norm(visDiff) > minimumPointsDistance + XRef = data(kk,:); + mask(kk) = true; + end + end + mask(end) = true; + + % Make sure to keep NaNs. + mask = mask | any(isnan(data)')'; + + % Set the new (masked) data. + set(handle, 'XData', data(mask, 1)); + set(handle, 'YData', data(mask, 2)); + + return; +end +% ========================================================================= +function movePointsCloser(meta, handle) + % Move all points outside a box much larger than the visible one + % to the boundary of that box and make sure that lines in the visible + % box are preserved. This typically involves replacing one point by + % two new ones and a NaN. + + % Extract the data from the current line handle. + xData = get(handle, 'XData'); + yData = get(handle, 'YData'); + zData = get(handle, 'ZData'); + + if ~isempty(zData) && any(zData(1)~=zData) + % Don't do funny stuff with varying zData. + return; + end + + data = [xData(:), yData(:)]; + + xlim = get(meta.gca, 'XLim'); + ylim = get(meta.gca, 'YLim'); + + xWidth = xlim(2) - xlim(1); + yWidth = ylim(2) - ylim(1); + % Don't choose the larger box too large to make sure that the values inside + % it can still be treated by TeX. + extendFactor = 0.1; + largeXLim = xlim + extendFactor * [-xWidth, xWidth]; + largeYLim = ylim + extendFactor * [-yWidth, yWidth]; + + % Get which points are in an extended box (the limits of which + % don't exceed TeX's memory). + dataIsInLargeBox = isInBox(data(:,1:2), ... + largeXLim, largeYLim); + + % Count the NaNs as being inside the box. + dataIsInLargeBox = dataIsInLargeBox | any(isnan(data)')'; + + % Loop through all points which are to be included in the plot yet do not + % fit into the extended box, and gather the points by which they are to be + % replaced. + replaceIndices = find(~dataIsInLargeBox)'; + m = length(replaceIndices); + r = cell(m, 1); + for k = 1:m + i = replaceIndices(k); + r{k} = []; + if i > 1 && all(isfinite(data(i-1,:))) + newPoint = moveToBox(data(i,:), data(i-1,:), largeXLim, largeYLim); + % Don't bother if the point is inf: + % There's no intersection with the large box, so even the + % connection between the two after they have been moved + % won't be probably be visible. + if all(isfinite(newPoint)) + r{k} = [r{k}; newPoint]; + end + end + if i < size(data,1) && all(isfinite(data(i+1,:))) + newPoint = moveToBox(data(i,:), data(i+1,:), largeXLim, largeYLim); + % Don't bother if the point is inf: + % There's no intersection with the large box, so even the + % connection between the two after they have been moved + % won't be probably be visible. + if all(isfinite(newPoint)) + r{k} = [r{k}; newPoint]; + end + end + end + + % Insert all r{k}{:} at replaceIndices[k]. + dataNew = []; + lastReplIndex = 0; + lastEntryIsReplacement = false; + for k = 1:m + % Make sure that two subsequent moved points are separated by a NaN entry. + % This is to make sure that there is no visible line between two moved + % points that wasn't there before. + d = data(lastReplIndex+1:replaceIndices(k)-1,:); + if size(r{k}, 1) == 2 + % Two replacement entries -- pad them with a NaN. + rep = [r{k}(1, :); ... + NaN(1, size(r{k}, 2)); ... + r{k}(2, :)]; + else + rep = r{k}; + end + if isempty(d) && ~isempty(rep) && lastEntryIsReplacement + % The last entry was a replacment, and the first one now is. + % Prepend a NaN. + rep = [NaN(1, size(r{k}, 2)); ... + rep]; + end + % Add the data. + if ~isempty(d) + dataNew = [dataNew; ... + d]; + lastEntryIsReplacement = false; + end + if ~isempty(rep) + dataNew = [dataNew; ... + rep]; + lastEntryIsReplacement = true; + end + lastReplIndex = replaceIndices(k); + end + dataNew = [dataNew; ... + data(lastReplIndex+1:end,:)]; + + % Set the new (masked) data. + set(handle, 'XData', dataNew(:,1)); + set(handle, 'YData', dataNew(:,2)); + if ~isempty(zData) + % As per precondition, all zData entries are equal. + zDataNew = zData(1) * ones(size(dataNew,1), 1); + set(handle, 'zData', zDataNew); + end + + return; +end +% ========================================================================= +function xNew = moveToBox(x, xRef, xlim, ylim) + % Takes a box defined by xlim, ylim, one point x and a reference point + % xRef. + % Returns the point xNew that sits on the line segment between x and xRef + % *and* on the box. If several such points exist, take the closest one + % to x. + + % Find out with which border the line x---xRef intersects, and determine + % the smallest parameter alpha such that x + alpha*(xRef-x) + % sits on the boundary. + minAlpha = inf; + % left boundary: + lambda = crossLines(x, xRef, [xlim(1);ylim(1)], [xlim(1);ylim(2)]); + if 0.0 < lambda(2) && lambda(2) < 1.0 && abs(minAlpha) > abs(lambda(1)) + minAlpha = lambda(1); + end + + % bottom boundary: + lambda = crossLines(x, xRef, [xlim(1);ylim(1)], [xlim(2);ylim(1)]); + if 0.0 < lambda(2) && lambda(2) < 1.0 && abs(minAlpha) > abs(lambda(1)) + minAlpha = lambda(1); + end + + % right boundary: + lambda = crossLines(x, xRef, [xlim(2);ylim(1)], [xlim(2);ylim(2)]); + if 0.0 < lambda(2) && lambda(2) < 1.0 && abs(minAlpha) > abs(lambda(1)) + minAlpha = lambda(1); + end + + % top boundary: + lambda = crossLines(x, xRef, [xlim(1);ylim(2)], [xlim(2);ylim(2)]); + if 0.0 < lambda(2) && lambda(2) < 1.0 && abs(minAlpha) > abs(lambda(1)) + minAlpha = lambda(1); + end + + % create the new point + xNew = x + minAlpha*(xRef-x); +end +% ========================================================================= +function out = isInBox(data, xLim, yLim) + + out = data(:,1) > xLim(1) & data(:,1) < xLim(2) ... + & data(:,2) > yLim(1) & data(:,2) < yLim(2); + +end +% ========================================================================= +function lambda = crossLines(X1, X2, X3, X4) + % Given four points X_k=(x_k,y_k), k\in{1,2,3,4}, and the two lines defined + % by those, + % + % L1(lambda) = X1 + lambda (X2 - X1) + % L2(lambda) = X3 + lambda (X4 - X3) + % + % returns the lambda for which they intersect (and Inf if they are parallel). + % Technically, one needs to solve the 2x2 equation system + % + % x1 + lambda1 (x2-x1) = x3 + lambda2 (x4-x3) + % y1 + lambda1 (y2-y1) = y3 + lambda2 (y4-y3) + % + % for lambda and mu. + + rhs = X3(:) - X1(:); + % Divide by det even if it's 0: Infs are returned. + % A = [X2-X1, -(X4-X3)]; + detA = -(X2(1)-X1(1))*(X4(2)-X3(2)) + (X2(2)-X1(2))*(X4(1)-X3(1)); + invA = [-(X4(2)-X3(2)), X4(1)-X3(1);... + -(X2(2)-X1(2)), X2(1)-X1(1)] / detA; + lambda = invA * rhs; + +end +% ========================================================================= diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/cond_2 b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/cond_2 new file mode 100644 index 0000000000000000000000000000000000000000..92c8bdfd0261dfb22aa789b8be103063776a2475 --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/cond_2 @@ -0,0 +1,38 @@ +% This file was created by matlab2tikz. +% Minimal pgfplots version: 1.3 +% +%The latest updates can be retrieved from +% http://www.mathworks.com/matlabcentral/fileexchange/22022-matlab2tikz +%where you can also make suggestions and rate matlab2tikz. +% +\begin{tikzpicture} + +\begin{axis}[% +width=4.489655in, +height=3.541034in, +at={(0.753103in,0.477931in)}, +scale only axis, +separate axis lines, +every outer x axis line/.append style={black}, +every x tick label/.append style={font=\color{black}}, +xmin=1, +xmax=5, +xlabel={Nombre de paramètres}, +xmajorgrids, +every outer y axis line/.append style={black}, +every y tick label/.append style={font=\color{black}}, +ymin=80, +ymax=170, +ylabel={Conditionnement}, +ymajorgrids +] +\addplot [color=red,solid,line width=2.0pt,forget plot] + table[row sep=crcr]{% +1 88.563537144876\\ +2 105.940559773145\\ +3 124.236088112109\\ +4 143.61998422876\\ +5 164.222442760817\\ +}; +\end{axis} +\end{tikzpicture}% \ No newline at end of file diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/cond_2.tex b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/cond_2.tex new file mode 100644 index 0000000000000000000000000000000000000000..92c8bdfd0261dfb22aa789b8be103063776a2475 --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/cond_2.tex @@ -0,0 +1,38 @@ +% This file was created by matlab2tikz. +% Minimal pgfplots version: 1.3 +% +%The latest updates can be retrieved from +% http://www.mathworks.com/matlabcentral/fileexchange/22022-matlab2tikz +%where you can also make suggestions and rate matlab2tikz. +% +\begin{tikzpicture} + +\begin{axis}[% +width=4.489655in, +height=3.541034in, +at={(0.753103in,0.477931in)}, +scale only axis, +separate axis lines, +every outer x axis line/.append style={black}, +every x tick label/.append style={font=\color{black}}, +xmin=1, +xmax=5, +xlabel={Nombre de paramètres}, +xmajorgrids, +every outer y axis line/.append style={black}, +every y tick label/.append style={font=\color{black}}, +ymin=80, +ymax=170, +ylabel={Conditionnement}, +ymajorgrids +] +\addplot [color=red,solid,line width=2.0pt,forget plot] + table[row sep=crcr]{% +1 88.563537144876\\ +2 105.940559773145\\ +3 124.236088112109\\ +4 143.61998422876\\ +5 164.222442760817\\ +}; +\end{axis} +\end{tikzpicture}% \ No newline at end of file diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/figure2dot.m b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/figure2dot.m new file mode 100644 index 0000000000000000000000000000000000000000..73df420d4e901ae55b9937784d00c3a5a7c47e62 --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/figure2dot.m @@ -0,0 +1,155 @@ +function figure2dot(filename) +%FIGURE2DOT Save figure in Graphviz (.dot) file. +% FIGURE2DOT() saves the current figure as dot-file. +% + +% Copyright (c) 2008--2014, Nico Schlömer <nico.schloemer@gmail.com> +% All rights reserved. +% +% Redistribution and use in source and binary forms, with or without +% modification, are permitted provided that the following conditions are +% met: +% +% * Redistributions of source code must retain the above copyright +% notice, this list of conditions and the following disclaimer. +% * Redistributions in binary form must reproduce the above copyright +% notice, this list of conditions and the following disclaimer in +% the documentation and/or other materials provided with the distribution +% +% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +% POSSIBILITY OF SUCH DAMAGE. +% +% ========================================================================= + global node_number + + % also show hidden handles + set(0, 'ShowHiddenHandles', 'on'); + + filehandle = fopen(filename, 'w'); + + % start printing + fprintf(filehandle, 'digraph simple_hierarchy {\n\n'); + + fprintf(filehandle, 'node[shape=box];\n\n'); + + % define the root node + node_number = 0; + p = get(gcf, 'Parent'); + % define root element + type = get(p, 'Type'); + fprintf(filehandle, 'N%d [label="%s"]\n\n', node_number, type); + + % start recursion + plot_children(filehandle, p, node_number); + + % finish off + fprintf(filehandle, '}'); + fclose(filehandle); + set(0, 'ShowHiddenHandles', 'off'); + +end +% ========================================================================= +function plot_children(fh, h, id) + + global node_number + + % get the children + children = get(h, 'Children'); + + % ----------------------------------------------------------------------- + % loop through the children + for child = children(:)' + % define child number + node_number = node_number + 1; + type = get(child, 'Type'); + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % skip certain entries + if strcmp(type, 'uimenu' ) || ... + strcmp(type, 'uitoolbar' ) || ... + strcmp(type, 'uicontextmenu') + continue; + end + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + label = cell(0); + label = [label, sprintf('Type: %s', type)]; + + hClass = class(handle(child)); + label = [label, sprintf('Class: %s', hClass)]; + + tag = get(child, 'Tag'); + if ~isempty(tag) + label = [label, sprintf('Tag: %s', tag)]; + end + + visibility = get(child, 'Visible'); + color = []; % set default value + if ~strcmp(visibility, 'on') + label = [label, sprintf('Visible: %s', visibility)]; + color = 'gray'; + end + + handlevisibility = get(child, 'HandleVisibility'); + if ~strcmp(handlevisibility, 'on') + label = [label, sprintf('HandleVisibility: %s', handlevisibility)]; + end + + % gather options + options = cell(0); + if ~isempty(label) + options = [options, ['label=', collapse(label,'\n')]]; + end + if ~isempty(color) + options = [options, ['color=', color]]; + end + + % print node + fprintf(fh, 'N%d [label="%s"]\n', node_number, collapse(label, '\n')); + + % connect to the child + fprintf(fh, 'N%d -> N%d;\n\n', id, node_number); + + % recurse + plot_children(fh, child, node_number); + end + % ----------------------------------------------------------------------- + +end +% ========================================================================= +function newstr = collapse(cellstr, delimiter) + % This function collapses a cell of strings to a single string (with a + % given delimiter inbetween two strings, if desired). + % + % Example of usage: + % collapse(cellstr, ',') + + if length(cellstr)<1 + newstr = []; + return + end + + if isnumeric(cellstr{1}) + newstr = my_num2str(cellstr{1}); + else + newstr = cellstr{1}; + end + + for k = 2:length(cellstr) + if isnumeric(cellstr{k}) + str = my_num2str(cellstr{k}); + else + str = cellstr{k}; + end + newstr = [newstr, delimiter, str]; + end + +end +% ========================================================================= diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/m2tInputParser.m b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/m2tInputParser.m new file mode 100644 index 0000000000000000000000000000000000000000..30147cddcb17e7238ed45c5267e59abdf772a909 --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/m2tInputParser.m @@ -0,0 +1,256 @@ +function parser = m2tInputParser() +%MATLAB2TIKZINPUTPARSER Input parsing for matlab2tikz.. +% This implementation exists because Octave is lacking one. + +% Copyright (c) 2008--2014 Nico Schlömer +% All rights reserved. +% +% Redistribution and use in source and binary forms, with or without +% modification, are permitted provided that the following conditions are +% met: +% +% * Redistributions of source code must retain the above copyright +% notice, this list of conditions and the following disclaimer. +% * Redistributions in binary form must reproduce the above copyright +% notice, this list of conditions and the following disclaimer in +% the documentation and/or other materials provided with the distribution +% +% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +% POSSIBILITY OF SUCH DAMAGE. +% ========================================================================= + % Initialize the structure. + parser = struct (); + % Public Properties + parser.Results = {}; + % Enabel/disable parameters case sensitivity. + parser.CaseSensitive = false; + % Keep parameters not defined by the constructor. + parser.KeepUnmatched = false; + % Enable/disable warning for parameters not defined by the constructor. + parser.WarnUnmatched = true; + % Enable/disable passing arguments in a structure. + parser.StructExpand = true; + % Names of parameters defined in input parser constructor. + parser.Parameters = {}; + % Names of parameters not defined in the constructor. + parser.Unmatched = struct (); + % Names of parameters using default values. + parser.UsingDefaults = {}; + % Names of deprecated parameters and their alternatives + parser.DeprecatedParameters = struct(); + + % Handles for functions that act on the object. + parser.addRequired = @addRequired; + parser.addOptional = @addOptional; + parser.addParamValue = @addParamValue; + parser.deprecateParam = @deprecateParam; + parser.parse = @parse; + + % Initialize the parser plan + parser.plan = {}; +end +% ========================================================================= +function p = parser_plan (q, arg_type, name, default, validator) + p = q; + plan = p.plan; + if (isempty (plan)) + plan = struct (); + n = 1; + else + n = numel (plan) + 1; + end + plan(n).type = arg_type; + plan(n).name = name; + plan(n).default = default; + plan(n).validator = validator; + p.plan = plan; +end +% ========================================================================= +function p = addRequired (p, name, validator) + p = parser_plan (p, 'required', name, [], validator); +end +% ========================================================================= +function p = addOptional (p, name, default, validator) + p = parser_plan (p, 'optional', name, default, validator); +end +% ========================================================================= +function p = addParamValue (p, name, default, validator) + p = parser_plan (p, 'paramvalue', name, default, validator); +end +% ========================================================================= +function p = deprecateParam (p, name, alternatives) + if isempty(alternatives) + alternatives = {}; + elseif ischar(alternatives) + alternatives = {alternatives}; % make cellstr + elseif ~iscellstr(alternatives) + error('m2tInputParser:BadAlternatives',... + 'Alternatives for a deprecated parameter must be a char or cellstr'); + end + p.DeprecatedParameters.(name) = alternatives; +end +% ========================================================================= +function p = parse (p, varargin) + plan = p.plan; + results = p.Results; + using_defaults = {}; + if (p.CaseSensitive) + name_cmp = @strcmp; + else + name_cmp = @strcmpi; + end + if (p.StructExpand) + k = find (cellfun (@isstruct, varargin)); + for m = numel(k):-1:1 + n = k(m); + s = varargin{n}; + c = [fieldnames(s).'; struct2cell(s).']; + c = c(:).'; + if (n > 1 && n < numel (varargin)) + varargin = horzcat (varargin(1:n-1), c, varargin(n+1:end)); + elseif (numel (varargin) == 1) + varargin = c; + elseif (n == 1); + varargin = horzcat (c, varargin(n+1:end)); + else % n == numel (varargin) + varargin = horzcat (varargin(1:n-1), c); + end + end + end + if (isempty (results)) + results = struct (); + end + type = {plan.type}; + n = find( strcmp( type, 'paramvalue' ) ); + m = setdiff (1:numel( plan ), n ); + plan = plan ([n,m]); + for n = 1 : numel (plan) + found = false; + results.(plan(n).name) = plan(n).default; + if (~ isempty (varargin)) + switch plan(n).type + case 'required' + found = true; + if (strcmpi (varargin{1}, plan(n).name)) + varargin(1) = []; + end + value = varargin{1}; + varargin(1) = []; + case 'optional' + m = find (cellfun (@ischar, varargin)); + k = find (name_cmp (plan(n).name, varargin(m))); + if (isempty (k) && validate_arg (plan(n).validator, varargin{1})) + found = true; + value = varargin{1}; + varargin(1) = []; + elseif (~ isempty (k)) + m = m(k); + found = true; + value = varargin{max(m)+1}; + varargin(union(m,m+1)) = []; + end + case 'paramvalue' + m = find( cellfun (@ischar, varargin) ); + k = find (name_cmp (plan(n).name, varargin(m))); + if (~ isempty (k)) + found = true; + m = m(k); + value = varargin{max(m)+1}; + varargin(union(m,m+1)) = []; + end + otherwise + error( sprintf ('%s:parse', mfilename), ... + 'parse (%s): Invalid argument type.', mfilename ... + ) + end + end + if (found) + if (validate_arg (plan(n).validator, value)) + results.(plan(n).name) = value; + else + error( sprintf ('%s:invalidinput', mfilename), ... + '%s: Input argument ''%s'' has invalid value.\n', mfilename, plan(n).name ... + ); + end + p.Parameters = union (p.Parameters, {plan(n).name}); + elseif (strcmp (plan(n).type, 'required')) + error( sprintf ('%s:missinginput', mfilename), ... + '%s: input ''%s'' is missing.\n', mfilename, plan(n).name ... + ); + else + using_defaults = union (using_defaults, {plan(n).name}); + end + end + + if ~isempty(varargin) + % Include properties that do not match specified properties + for n = 1:2:numel(varargin) + if ischar(varargin{n}) + if p.KeepUnmatched + results.(varargin{n}) = varargin{n+1}; + end + if p.WarnUnmatched + warning(sprintf('%s:unmatchedArgument',mfilename), ... + 'Ignoring unknown argument "%s"', varargin{n}); + end + p.Unmatched.(varargin{n}) = varargin{n+1}; + else + error (sprintf ('%s:invalidinput', mfilename), ... + '%s: invalid input', mfilename) + end + end + end + + % Store the results of the parsing + p.Results = results; + p.UsingDefaults = using_defaults; + + warnForDeprecatedParameters(p); +end +% ========================================================================= +function result = validate_arg (validator, arg) + try + result = validator (arg); + catch %#ok + result = false; + end +end +% ========================================================================= +function warnForDeprecatedParameters(p) + usedDeprecatedParameters = intersect(p.Parameters, fieldnames(p.DeprecatedParameters)); + + for iParam = 1:numel(usedDeprecatedParameters) + oldParameter = usedDeprecatedParameters{iParam}; + alternatives = p.DeprecatedParameters.(oldParameter); + + switch numel(alternatives) + case 0 + replacements = ''; + case 1 + replacements = ['''' alternatives{1} '''']; + otherwise + replacements = deblank(sprintf('''%s'' and ',alternatives{:})); + replacements = regexprep(replacements,' and$',''); + end + if ~isempty(replacements) + replacements = sprintf('From now on, please use %s to control the output.\n',replacements); + end + + message = ['\n===============================================================================\n', ... + 'You are using the deprecated parameter ''%s''.\n', ... + '%s', ... + '===============================================================================']; + warning('matlab2tikz:deprecatedParameter', ... + message, oldParameter, replacements); + + end +end diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/matlab2tikz.m b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/matlab2tikz.m new file mode 100644 index 0000000000000000000000000000000000000000..faae1d0578b4da27dab5a8e85dbe4f87a7b53efd --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/matlab2tikz.m @@ -0,0 +1,5555 @@ +function matlab2tikz(varargin) +%MATLAB2TIKZ Save figure in native LaTeX (TikZ/Pgfplots). +% MATLAB2TIKZ() saves the current figure as LaTeX file. +% MATLAB2TIKZ comes with several options that can be combined at will. +% +% MATLAB2TIKZ(FILENAME,...) or MATLAB2TIKZ('filename',FILENAME,...) +% stores the LaTeX code in FILENAME. +% +% MATLAB2TIKZ('filehandle',FILEHANDLE,...) stores the LaTeX code in the file +% referenced by FILEHANDLE. (default: []) +% +% MATLAB2TIKZ('figurehandle',FIGUREHANDLE,...) explicitly specifies the +% handle of the figure that is to be stored. (default: gcf) +% +% MATLAB2TIKZ('colormap',DOUBLE,...) explicitly specifies the colormap to be +% used. (default: current color map) +% +% MATLAB2TIKZ('strict',BOOL,...) tells MATLAB2TIKZ to adhere to MATLAB(R) +% conventions wherever there is room for relaxation. (default: false) +% +% MATLAB2TIKZ('strictFontSize',BOOL,...) retains the exact font sizes +% specified in MATLAB for the TikZ code. This goes against normal LaTeX +% practice. (default: false) +% +% MATLAB2TIKZ('showInfo',BOOL,...) turns informational output on or off. +% (default: true) +% +% MATLAB2TIKZ('showWarnings',BOOL,...) turns warnings on or off. +% (default: true) +% +% MATLAB2TIKZ('imagesAsPng',BOOL,...) stores MATLAB(R) images as (lossless) +% PNG files. This is more efficient than storing the image color data as TikZ +% matrix. (default: true) +% +% MATLAB2TIKZ('externalData',BOOL,...) stores all data points in external +% files as tab separated values (TSV files). (default: false) +% +% MATLAB2TIKZ('dataPath',CHAR, ...) defines where external data files +% and/or PNG figures are saved. It can be either an absolute or a relative +% path with respect to your MATLAB work directory. By default, data files are +% placed in the same directory as the TikZ output file. To place data files +% in your MATLAB work directory, you can use '.'. (default: []) +% +% MATLAB2TIKZ('relativeDataPath',CHAR, ...) tells MATLAB2TIKZ to use the +% given path to follow the external data files and PNG files. This is the +% relative path from your main LaTeX file to the data file directory. +% By default the same directory is used as the output (default: []) +% +% MATLAB2TIKZ('height',CHAR,...) sets the height of the image. This can be +% any LaTeX-compatible length, e.g., '3in' or '5cm' or '0.5\textwidth'. If +% unspecified, MATLAB2TIKZ tries to make a reasonable guess. +% +% MATLAB2TIKZ('width',CHAR,...) sets the width of the image. +% If unspecified, MATLAB2TIKZ tries to make a reasonable guess. +% +% MATLAB2TIKZ('noSize',BOOL,...) determines whether 'width', 'height', and +% 'scale only axis' are specified in the generated TikZ output. For compatibility with the +% tikzscale package set this to true. (default: false) +% +% MATLAB2TIKZ('extraCode',CHAR or CELLCHAR,...) explicitly adds extra code +% at the beginning of the output file. (default: []) +% +% MATLAB2TIKZ('extraCodeAtEnd',CHAR or CELLCHAR,...) explicitly adds extra +% code at the end of the output file. (default: []) +% +% MATLAB2TIKZ('extraAxisOptions',CHAR or CELLCHAR,...) explicitly adds extra +% options to the Pgfplots axis environment. (default: []) +% +% MATLAB2TIKZ('extraColors', {{'name',[R G B]}, ...} , ...) adds +% user-defined named RGB-color definitions to the TikZ output. +% R, G and B are expected between 0 and 1. (default: {}) +% +% MATLAB2TIKZ('extraTikzpictureOptions',CHAR or CELLCHAR,...) +% explicitly adds extra options to the tikzpicture environment. (default: []) +% +% MATLAB2TIKZ('encoding',CHAR,...) sets the encoding of the output file. +% +% MATLAB2TIKZ('floatFormat',CHAR,...) sets the format used for float values. +% You can use this to decrease the file size. (default: '%.15g') +% +% MATLAB2TIKZ('maxChunkLength',INT,...) sets maximum number of data points +% per \addplot for line plots (default: 4000) +% +% MATLAB2TIKZ('parseStrings',BOOL,...) determines whether title, axes labels +% and the like are parsed into LaTeX by MATLAB2TIKZ's parser. +% If you want greater flexibility, set this to false and use straight LaTeX +% for your labels. (default: true) +% +% MATLAB2TIKZ('parseStringsAsMath',BOOL,...) determines whether to use TeX's +% math mode for more characters (e.g. operators and figures). (default: false) +% +% MATLAB2TIKZ('showHiddenStrings',BOOL,...) determines whether to show +% strings whose were deliberately hidden. This is usually unnecessary, but +% can come in handy for unusual plot types (e.g., polar plots). (default: +% false) +% +% MATLAB2TIKZ('interpretTickLabelsAsTex',BOOL,...) determines whether to +% interpret tick labels as TeX. MATLAB(R) doesn't do that by default. +% (default: false) +% +% MATLAB2TIKZ('tikzFileComment',CHAR,...) adds a custom comment to the header +% of the output file. (default: '') +% +% MATLAB2TIKZ('automaticLabels',BOOL,...) determines whether to automatically +% add labels to plots (where applicable) which make it possible to refer +% to them using \ref{...} (e.g., in the caption of a figure). (default: false) +% +% MATLAB2TIKZ('standalone',BOOL,...) determines whether to produce +% a standalone compilable LaTeX file. Setting this to true may be useful for +% taking a peek at what the figure will look like. (default: false) +% +% MATLAB2TIKZ('checkForUpdates',BOOL,...) determines whether to automatically +% check for updates of matlab2tikz. (default: true) +% +% Example +% x = -pi:pi/10:pi; +% y = tan(sin(x)) - sin(tan(x)); +% plot(x,y,'--rs'); +% matlab2tikz('myfile.tex'); +% + +% Copyright (c) 2008--2014, Nico Schlömer <nico.schloemer@gmail.com> +% All rights reserved. +% +% Redistribution and use in source and binary forms, with or without +% modification, are permitted provided that the following conditions are +% met: +% +% * Redistributions of source code must retain the above copyright +% notice, this list of conditions and the following disclaimer. +% * Redistributions in binary form must reproduce the above copyright +% notice, this list of conditions and the following disclaimer in +% the documentation and/or other materials provided with the distribution +% +% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +% POSSIBILITY OF SUCH DAMAGE. + +% Note: +% This program was based on Paul Wagenaars' Matfig2PGF that can be +% found on http://www.mathworks.com/matlabcentral/fileexchange/12962 . + +%% Check if we are in MATLAB or Octave. +[m2t.env, m2t.envVersion] = getEnvironment(); + +minimalVersion = struct('MATLAB', struct('name','2014a', 'num',[8 3]), ... + 'Octave', struct('name','3.8', 'num',[3 8])); +checkDeprecatedEnvironment(m2t, minimalVersion); + +m2t.cmdOpts = []; +m2t.currentHandles = []; + +m2t.transform = []; % For hgtransform groups +m2t.pgfplotsVersion = [1,3]; +m2t.name = 'matlab2tikz'; +m2t.version = '0.6.0'; +m2t.author = 'Nico Schlömer'; +m2t.authorEmail = 'nico.schloemer@gmail.com'; +m2t.years = '2008--2014'; +m2t.website = 'http://www.mathworks.com/matlabcentral/fileexchange/22022-matlab2tikz'; +VCID = VersionControlIdentifier(); +m2t.versionFull = strtrim(sprintf('v%s %s', m2t.version, VCID)); + +m2t.tol = 1.0e-15; % numerical tolerance (e.g. used to test equality of doubles) +m2t.imageAsPngNo = 0; +m2t.dataFileNo = 0; +m2t.barplotId = 0; % identification flag for bar plots +m2t.quiverId = 0; % identification flag for quiver plot styles +m2t.automaticLabelIndex = 0; + +% definition of color depth +m2t.colorDepth = 48; %[bit] RGB color depth (typical values: 24, 30, 48) +m2t.colorPrecision = 2^(-m2t.colorDepth/3); +m2t.colorFormat = sprintf('%%0.%df',ceil(-log10(m2t.colorPrecision))); + +% the actual contents of the TikZ file go here +m2t.content = struct('name', '', ... + 'comment', [], ... + 'options', {opts_new()}, ... + 'content', {cell(0)}, ... + 'children', {cell(0)}); +m2t.preamble = sprintf(['\\usepackage{pgfplots}\n', ... + '\\usepackage{grffile}\n', ... + '\\pgfplotsset{compat=newest}\n', ... + '\\usetikzlibrary{plotmarks}\n', ... + '\\usepackage{amsmath}\n']); + +%% scan the options +ipp = m2tInputParser; + +ipp = ipp.addOptional(ipp, 'filename', '', @(x) filenameValidation(x,ipp)); +ipp = ipp.addOptional(ipp, 'filehandle', [], @filehandleValidation); + +ipp = ipp.addParamValue(ipp, 'figurehandle', get(0,'CurrentFigure'), @ishandle); +ipp = ipp.addParamValue(ipp, 'colormap', [], @isnumeric); +ipp = ipp.addParamValue(ipp, 'strict', false, @islogical); +ipp = ipp.addParamValue(ipp, 'strictFontSize', false, @islogical); +ipp = ipp.addParamValue(ipp, 'showInfo', true, @islogical); +ipp = ipp.addParamValue(ipp, 'showWarnings', true, @islogical); +ipp = ipp.addParamValue(ipp, 'checkForUpdates', true, @islogical); + +ipp = ipp.addParamValue(ipp, 'encoding' , '', @ischar); +ipp = ipp.addParamValue(ipp, 'standalone', false, @islogical); +ipp = ipp.addParamValue(ipp, 'tikzFileComment', '', @ischar); +ipp = ipp.addParamValue(ipp, 'extraColors', {}, @iscolordefinitions); +ipp = ipp.addParamValue(ipp, 'extraCode', {}, @isCellOrChar); +ipp = ipp.addParamValue(ipp, 'extraCodeAtEnd', {}, @isCellOrChar); +ipp = ipp.addParamValue(ipp, 'extraAxisOptions', {}, @isCellOrChar); +ipp = ipp.addParamValue(ipp, 'extraTikzpictureOptions', {}, @isCellOrChar); +ipp = ipp.addParamValue(ipp, 'floatFormat', '%.15g', @ischar); +ipp = ipp.addParamValue(ipp, 'automaticLabels', false, @islogical); +ipp = ipp.addParamValue(ipp, 'showHiddenStrings', false, @islogical); +ipp = ipp.addParamValue(ipp, 'height', '', @ischar); +ipp = ipp.addParamValue(ipp, 'width' , '', @ischar); +ipp = ipp.addParamValue(ipp, 'imagesAsPng', true, @islogical); +ipp = ipp.addParamValue(ipp, 'externalData', false, @islogical); +ipp = ipp.addParamValue(ipp, 'dataPath', '', @ischar); +ipp = ipp.addParamValue(ipp, 'relativeDataPath', '', @ischar); +ipp = ipp.addParamValue(ipp, 'noSize', false, @islogical); + +% Maximum chunk length. +% TeX parses files line by line with a buffer of size buf_size. If the +% plot has too many data points, pdfTeX's buffer size may be exceeded. +% As a work-around, the plot is split into several smaller chunks. +% +% What is a "large" array? +% TeX parser buffer is buf_size=200 000 char on Mac TeXLive, let's say +% 100 000 to be on the safe side. +% 1 point is represented by 25 characters (estimation): 2 coordinates (10 +% char), 2 brackets, comma and white space, + 1 extra char. +% That gives a magic arbitrary number of 4000 data points per array. +ipp = ipp.addParamValue(ipp, 'maxChunkLength', 4000, @isnumeric); + +% By default strings like axis labels are parsed to match the appearance of +% strings as closely as possible to that generated by MATLAB. +% If the user wants to have particular strings in the matlab2tikz output that +% can't be generated in MATLAB, they can disable string parsing. In that case +% all strings are piped literally to the LaTeX output. +ipp = ipp.addParamValue(ipp, 'parseStrings', true, @islogical); + +% In addition to regular string parsing, an additional stage can be enabled +% which uses TeX's math mode for more characters like figures and operators. +ipp = ipp.addParamValue(ipp, 'parseStringsAsMath', false, @islogical); + +% As opposed to titles, axis labels and such, MATLAB(R) does not interpret tick +% labels as TeX. matlab2tikz retains this behavior, but if it is desired to +% interpret the tick labels as TeX, set this option to true. +ipp = ipp.addParamValue(ipp, 'interpretTickLabelsAsTex', false, @islogical); + +%% deprecated parameters (will auto-generate warnings upon parse) +ipp = ipp.addParamValue(ipp, 'relativePngPath', '', @ischar); +ipp = ipp.deprecateParam(ipp, 'relativePngPath', 'relativeDataPath'); + +%% Finally parse all the arguments +ipp = ipp.parse(ipp, varargin{:}); +m2t.cmdOpts = ipp; % store the input parser back into the m2t data struct + +%% inform users of potentially dangerous options +warnAboutParameter(m2t, 'parseStringsAsMath', @(opt)(opt==true), ... + ['This may produce undesirable string output. For full control over output\n', ... + 'strings please set the parameter "parseStrings" to false.']); +warnAboutParameter(m2t, 'noSize', @(opt)(opt==true), ... + 'This may impede both axes sizing and placement!'); +warnAboutParameter(m2t, 'imagesAsPng', @(opt)(opt==false), ... + ['It is highly recommended to use PNG data to store images.\n', ... + 'Make sure to set "imagesAsPng" to true.']); + +% The following color RGB-values which will need to be defined. +% 'extraRgbColorNames' contains their designated names, 'extraRgbColorSpecs' +% their specifications. +[m2t.extraRgbColorNames, m2t.extraRgbColorSpecs] = ... + dealColorDefinitions(m2t.cmdOpts.Results.extraColors); + +%% shortcut +m2t.ff = m2t.cmdOpts.Results.floatFormat; + +%% add global elements +if isempty(m2t.cmdOpts.Results.figurehandle) + error('matlab2tikz:figureNotFound','MATLAB figure not found.'); +end +m2t.currentHandles.gcf = m2t.cmdOpts.Results.figurehandle; +if m2t.cmdOpts.Results.colormap + m2t.currentHandles.colormap = m2t.cmdOpts.Results.colormap; +else + m2t.currentHandles.colormap = get(m2t.currentHandles.gcf, 'colormap'); +end + +%% handle output file handle/file name +[m2t, fid, fileWasOpen] = openFileForOutput(m2t); + +% By default, reference the PNG (if required) from the TikZ file +% as the file path of the TikZ file itself. This works if the MATLAB script +% is executed in the same folder where the TeX file sits. +if isempty(m2t.cmdOpts.Results.relativeDataPath) + if ~isempty(m2t.cmdOpts.Results.relativePngPath) + %NOTE: eventually break backwards compatibility of relative PNG path + m2t.relativeDataPath = m2t.cmdOpts.Results.relativePngPath; + userWarning(m2t, ['Using "relativePngPath" for "relativeDataPath".', ... + ' This will stop working in a future release.']); + else + m2t.relativeDataPath = m2t.cmdOpts.Results.relativeDataPath; + end +else + m2t.relativeDataPath = m2t.cmdOpts.Results.relativeDataPath; +end +if isempty(m2t.cmdOpts.Results.dataPath) + m2t.dataPath = fileparts(m2t.tikzFileName); +else + m2t.dataPath = m2t.cmdOpts.Results.dataPath; +end + + +userInfo(m2t, ['(To disable info messages, pass [''showInfo'', false] to matlab2tikz.)\n', ... + '(For all other options, type ''help matlab2tikz''.)\n']); + +userInfo(m2t, '\nThis is %s %s.\n', m2t.name, m2t.versionFull) + +%% Check for a new matlab2tikz version outside version control +if m2t.cmdOpts.Results.checkForUpdates && isempty(VCID) + m2tUpdater(... + m2t.name, ... + m2t.website, ... + m2t.version, ... + m2t.cmdOpts.Results.showInfo, ... + m2t.env... + ); +end + +%% print some version info to the screen +versionInfo = ['The latest updates can be retrieved from\n' ,... + ' %s\n' ,... + 'where you can also make suggestions and rate %s.\n' ,... + 'For usage instructions, bug reports, the latest ' ,... + 'development versions and more, see\n' ,... + ' https://github.com/matlab2tikz/matlab2tikz,\n' ,... + ' https://github.com/matlab2tikz/matlab2tikz/wiki,\n' ,... + ' https://github.com/matlab2tikz/matlab2tikz/issues.\n']; +userInfo(m2t, versionInfo, m2t.website, m2t.name); + +%% Save the figure as TikZ to file +saveToFile(m2t, fid, fileWasOpen); +end +% ============================================================================== +function [m2t, fid, fileWasOpen] = openFileForOutput(m2t) +% opens the output file and/or show a dialog to select one +if ~isempty(m2t.cmdOpts.Results.filehandle) + fid = m2t.cmdOpts.Results.filehandle; + fileWasOpen = true; + if ~isempty(m2t.cmdOpts.Results.filename) + userWarning(m2t, ... + 'File handle AND file name for output given. File handle used, file name discarded.') + end +else + fileWasOpen = false; + % set filename + if ~isempty(m2t.cmdOpts.Results.filename) + filename = m2t.cmdOpts.Results.filename; + else + [filename, pathname] = uiputfile({'*.tex;*.tikz'; '*.*'}, 'Save File'); + filename = fullfile(pathname, filename); + end + + fid = fileOpenForWrite(m2t, filename); +end +m2t.tikzFileName = fopen(fid); +end +% ============================================================================== +function l = filenameValidation(x, p) +% is the filename argument NOT another keyword? + l = ischar(x) && ~any(strcmp(x,p.Parameters)); +end +% ============================================================================== +function l = filehandleValidation(x) +% is the filehandle the handle to an opened file? + l = isnumeric(x) && any(x==fopen('all')); +end +% ============================================================================== +function l = isCellOrChar(x) + l = iscell(x) || ischar(x); +end +% ============================================================================== +function isValid = iscolordefinitions(colors) + isRGBTuple = @(c)( numel(c) == 3 && all(0<=c & c<=1) ); + isValidEntry = @(e)( iscell(e) && ischar(e{1}) && isRGBTuple(e{2}) ); + + isValid = iscell(colors) && all(cellfun(isValidEntry, colors)); +end +% ============================================================================== +function fid = fileOpenForWrite(m2t, filename) + encoding = switchMatOct(m2t, {'native', m2t.cmdOpts.Results.encoding}, {}); + + fid = fopen(filename, 'w', encoding{:}); + if fid == -1 + error('matlab2tikz:fileOpenError', ... + 'Unable to open file ''%s'' for writing.', filename); + end +end +% ============================================================================== +function path = TeXpath(path) + path = strrep(path, filesep, '/'); +% TeX uses '/' as a file separator (as UNIX). Windows, however, uses +% '\' which is not supported by TeX as a file separator +end +% ============================================================================== +function m2t = saveToFile(m2t, fid, fileWasOpen) +% Save the figure as TikZ to a file. All other routines are called from here. + + % It is important to turn hidden handles on, as visible lines (such as the + % axes in polar plots, for example), are otherwise hidden from their + % parental handles (and can hence not be discovered by matlab2tikz). + % With ShowHiddenHandles 'on', there is no escape. :) + set(0, 'ShowHiddenHandles', 'on'); + + % get all axes handles + [m2t, axesHandles] = findPlotAxes(m2t, m2t.currentHandles.gcf); + + % Turn around the handles vector to make sure that plots that appeared + % first also appear first in the vector. This has effects on the alignment + % and the order in which the plots appear in the final TikZ file. + % In fact, this is not really important but makes things more 'natural'. + axesHandles = axesHandles(end:-1:1); + + % Alternative Positioning of axes. + % Select relevant Axes and draw them. + [relevantAxesHandles, axesBoundingBox] = getRelevantAxes(m2t, axesHandles); + + m2t.axesBoundingBox = axesBoundingBox; + m2t.axesContainers = {}; + for relevantAxesHandle = relevantAxesHandles + m2t = drawAxes(m2t, relevantAxesHandle); + end + + % Handle color bars. + for cbar = m2t.cbarHandles(:)' + m2t = handleColorbar(m2t, cbar); + end + + % Add all axes containers to the file contents. + for axesContainer = m2t.axesContainers + m2t.content = addChildren(m2t.content, axesContainer); + end + + set(0, 'ShowHiddenHandles', 'off'); + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % actually print the stuff + minimalPgfplotsVersion = formatPgfplotsVersion(m2t, m2t.pgfplotsVersion); + + environment = sprintf('%s %s',m2t.env, m2t.envVersion); + m2t.content.comment = sprintf(['This file was created by %s.\n', ... + ' Minimal pgfplots version: %s\n'], ... + m2t.name, ... + minimalPgfplotsVersion); + + if m2t.cmdOpts.Results.showInfo + % disable this info if showInfo=false + m2t.content.comment = [m2t.content.comment, ... + sprintf(['\n',... + 'The latest updates can be retrieved from\n', ... + ' %s\n', ... + 'where you can also make suggestions and rate %s.\n'], ... + m2t.website, m2t.name ) ... + ]; + end + + userInfo(m2t, 'You will need pgfplots version %s or newer to compile the TikZ output.',... + minimalPgfplotsVersion); + + % Add custom comment. + if ~isempty(m2t.cmdOpts.Results.tikzFileComment) + m2t.content.comment = [m2t.content.comment, ... + sprintf('\n%s\n', m2t.cmdOpts.Results.tikzFileComment) + ]; + end + + m2t.content.name = 'tikzpicture'; + + % Add custom TikZ options if any given. + m2t.content.options = opts_append_userdefined(m2t.content.options, ... + m2t.cmdOpts.Results.extraTikzpictureOptions); + + m2t.content.colors = generateColorDefinitions(m2t.extraRgbColorNames, ... + m2t.extraRgbColorSpecs, m2t.colorFormat); + + % Finally print it to the file, + addComments(fid, m2t.content.comment); + + if m2t.cmdOpts.Results.standalone + fprintf(fid, '\\documentclass[tikz]{standalone}\n%s\n', m2t.preamble); + end + + addCustomCode(fid, '', m2t.cmdOpts.Results.extraCode, ''); + + if m2t.cmdOpts.Results.standalone + fprintf(fid, '\\begin{document}\n'); + end + % printAll() handles the actual figure plotting. + printAll(m2t, m2t.content, fid); + + addCustomCode(fid, '\n', m2t.cmdOpts.Results.extraCodeAtEnd, ''); + + if m2t.cmdOpts.Results.standalone + fprintf(fid, '\n\\end{document}'); + end + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + % close the file if necessary + if ~fileWasOpen + fclose(fid); + end +end +% ============================================================================== +function str = generateColorDefinitions(names, specs, colorFormat) +% output the color definitions to LaTeX + str = ''; + ff = colorFormat; + if ~isempty(names) + m2t.content.colors = sprintf('%%\n%% defining custom colors\n'); + for k = 1:length(names) + % make sure to append with '%' to avoid spacing woes + str = [str, ... + sprintf(['\\definecolor{%s}{rgb}{', ff, ',', ff, ',', ff,'}%%\n'], ... + names{k}', specs{k})]; + end + str = [str sprintf('%%\n')]; + end +end +% ============================================================================== +function [m2t, axesHandles] = findPlotAxes(m2t, fh) +% find axes handles that are not legends/colorbars + % NOTE: also do R2014b to avoid code duplication + axesHandles = findobj(fh, 'type', 'axes'); + + % Remove all legend handles as they are treated separately. + if ~isempty(axesHandles) + % TODO fix for octave + tagKeyword = switchMatOct(m2t, 'Tag', 'tag'); + % Find all legend handles. This is MATLAB-only. + m2t.legendHandles = findobj(fh, tagKeyword, 'legend'); + m2t.legendHandles = m2t.legendHandles(:)'; + axesHandles = setdiff(axesHandles, m2t.legendHandles); + end + + % Remove all legend handles as they are treated separately. + if ~isempty(axesHandles) + colorbarKeyword = switchMatOct(m2t, 'Colorbar', 'colorbar'); + % Find all colorbar handles. This is MATLAB-only. + cbarHandles = findobj(fh, tagKeyword, colorbarKeyword); + % Octave also finds text handles here; no idea why. Filter. + m2t.cbarHandles = []; + for h = cbarHandles(:)' + if strcmpi(get(h, 'Type'),'axes') + m2t.cbarHandles = [m2t.cbarHandles, h]; + end + end + m2t.cbarHandles = m2t.cbarHandles(:)'; + axesHandles = setdiff(axesHandles, m2t.cbarHandles); + else + m2t.cbarHandles = []; + end + +end +% ============================================================================== +function addComments(fid, comment) +% prints TeX comments to file stream |fid| + if ~isempty(comment) + newline = sprintf('\n'); + newlineTeX = sprintf('\n%%'); + fprintf(fid, '%% %s\n', strrep(comment, newline, newlineTeX)); + end +end +% ============================================================================== +function addCustomCode(fid, before, code, after) + if ~isempty(code) + fprintf(fid, before); + if ischar(code) + code = {code}; + end + if iscellstr(code) + for str = code(:)' + fprintf(fid, '%s\n', str{1}); + end + else + error('matlab2tikz:saveToFile', 'Need str or cellstr.'); + end + fprintf(fid,after); + end +end +% ============================================================================== +function [m2t, pgfEnvironments] = handleAllChildren(m2t, handle) +% Draw all children of a graphics object (if they need to be drawn). +% #COMPLEX: mainly a switch-case + str = ''; + children = get(handle, 'Children'); + + % prepare cell array of pgfEnvironments + pgfEnvironments = cell(0); + + % It's important that we go from back to front here, as this is + % how MATLAB does it, too. Significant for patch (contour) plots, + % and the order of plotting the colored patches. + for child = children(end:-1:1)' + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + [m2t, legendString, interpreter] = findLegendInformation(m2t, child); + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + switch char(get(child, 'Type')) + % 'axes' environments are treated separately. + + case 'line' + [m2t, str] = drawLine(m2t, child); + + case 'patch' + [m2t, str] = drawPatch(m2t, child); + + case 'image' + [m2t, str] = drawImage(m2t, child); + + case 'contour' + [m2t, str] = drawContour(m2t, child); + + case {'hggroup', 'matlab.graphics.primitive.Group', ... + 'scatter', 'bar', 'stair', 'stem' ,'errorbar', 'area', ... + 'quiver'} + [m2t, str] = drawHggroup(m2t, child); + + case 'hgtransform' + % From http://www.mathworks.de/de/help/matlab/ref/hgtransformproperties.html: + % Matrix: 4-by-4 matrix + % Transformation matrix applied to hgtransform object and its + % children. The hgtransform object applies the transformation + % matrix to all its children. + % More information at http://www.mathworks.de/de/help/matlab/creating_plots/group-objects.html. + m2t.transform = get(child, 'Matrix'); + [m2t, str] = handleAllChildren(m2t, child); + m2t.transform = []; + + case 'surface' + [m2t, str] = drawSurface(m2t, child); + + case 'text' + [m2t, str] = drawVisibleText(m2t, child); + + case 'rectangle' + [m2t, str] = drawRectangle(m2t, child); + + case {'uitoolbar', 'uimenu', 'uicontextmenu', 'uitoggletool',... + 'uitogglesplittool', 'uipushtool', 'hgjavacomponent'} + % don't to anything for these handles and its children + str = ''; + + case '' + warning('matlab2tikz:NoChildren',... + ['No children found for handle %d. ',... + 'Carrying on as if nothing happened'], handle); + + otherwise + error('matlab2tikz:handleAllChildren', ... + 'I don''t know how to handle this object: %s\n', ... + get(child, 'Type')); + + end + + [m2t, str] = addLegendInformation(m2t, str, legendString, interpreter); + + % append the environment + pgfEnvironments{end+1} = str; + end +end +% ============================================================================== +function [m2t, legendString, interpreter] = findLegendInformation(m2t, child) +% Check if 'child' is referenced in a legend. +% If yes, some plot types may want to add stuff (e.g. 'forget plot'). +% Add '\addlegendentry{...}' then after the plot. +legendString = ''; +interpreter = ''; +hasLegend = false; + +% Check if current handle is referenced in a legend. +switch m2t.env + case 'MATLAB' + if ~isempty(m2t.legendHandles) + % Make sure that m2t.legendHandles is a row vector. + for legendHandle = m2t.legendHandles(:)' + ud = get(legendHandle, 'UserData'); + if isfield(ud, 'handles') + plotChildren = ud.handles; + else + plotChildren = getOrDefault(legendHandle, 'PlotChildren', []); + end + if ~isempty(child) + k = find(child == plotChildren); + if isempty(k) + % Lines of error bar plots are not referenced + % directly in legends as an error bars plot contains + % two "lines": the data and the deviations. Here, the + % legends refer to the specgraph.errorbarseries + % handle which is 'Parent' to the line handle. + k = find(get(child,'Parent') == plotChildren); + end + if ~isempty(k) + % Legend entry found. Add it to the plot. + hasLegend = true; + interpreter = get(legendHandle, 'Interpreter'); + if ~isempty(ud) && isfield(ud,'strings') + legendString = ud.lstrings(k); + else + legendString = get(child, 'DisplayName'); + end + end + end + end + end + case 'Octave' + % Octave associates legends with axes, not with (line) plot. + % The variable m2t.gcaHasLegend is set in drawAxes(). + hasLegend = ~isempty(m2t.gcaAssociatedLegend); + interpreter = get(m2t.gcaAssociatedLegend, 'interpreter'); + legendString = getOrDefault(child,'displayname',''); + otherwise + errorUnknownEnvironment(); +end + +% split string to cell, if newline character '\n' (ASCII 10) is present +delimeter = sprintf('\n'); +legendString = regexp(legendString,delimeter,'split'); + +m2t.currentHandleHasLegend = hasLegend && ~isempty(legendString); +end +% ============================================================================== +function [m2t, str] = addLegendInformation(m2t, str, legendString, interpreter) +% Add legend after the plot data. +% The test for ischar(str) && ~isempty(str) is a workaround for hggroups; +% the output might not necessarily be a string, but a cellstr. + if ischar(str) && ~isempty(str) && m2t.currentHandleHasLegend + c = prettyPrint(m2t, legendString, interpreter); + % We also need a legend alignment option to make multiline + % legend entries work. This is added by default in getLegendOpts(). + str = [str, sprintf('\\addlegendentry{%s};\n\n', join(m2t, c, '\\'))]; + end +end +% ============================================================================== +function data = applyHgTransform(m2t, data) + if ~isempty(m2t.transform) + R = m2t.transform(1:3,1:3); + t = m2t.transform(1:3,4); + n = size(data, 1); + data = data * R' + kron(ones(n,1), t'); + end +end +% ============================================================================== +function m2t = drawAxes(m2t, handle) +% Input arguments: +% handle.................The axes environment handle. + +% Handle special cases. + switch lower(get(handle, 'Tag')) + case 'colorbar' + m2t = handleColorbar(m2t, handle); + return + case 'legend' + % In MATLAB, an axis and its legend are siblings, while in Pgfplots, + % the \legend (or \addlegendentry) command must appear within the axis + % environment, so handle it there. + return + otherwise + % continue as usual + end + + % Initialize empty environment. + % Use a struct instead of a custom subclass of hgsetget (which would + % facilitate writing clean code) as structs are more portable (old MATLAB(R) + % versions, GNU Octave). + m2t.axesContainers{end+1} = struct('handle', handle, ... + 'name', '', ... + 'comment', [], ... + 'options', {opts_new()}, ... + 'content', {cell(0)}, ... + 'children', {cell(0)}); + + % update gca + m2t.currentHandles.gca = handle; + + % Bar plots need to have some values counted per axis. Setting + % m2t.barplotId to 0 makes sure these are recomputed in drawBarSeries() + % TODO: find nicer approach for barplots + m2t.barplotId = 0; + + m2t.gcaAssociatedLegend = getAssociatedLegend(m2t, handle); + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % get the axes position + pos = getAxesPosition(m2t, handle, ... + m2t.cmdOpts.Results.width, ... + m2t.cmdOpts.Results.height, ... + m2t.axesBoundingBox); + % Axes should not be in px any more + + % set the width + if (~m2t.cmdOpts.Results.noSize) + % optionally prevents setting the width and height of the axis + m2t = setDimensionOfAxes(m2t, 'width', pos.w); + m2t = setDimensionOfAxes(m2t, 'height', pos.h); + + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, 'at', ... + ['{(' formatDim(pos.x.value, pos.x.unit) ','... + formatDim(pos.y.value, pos.y.unit) ')}']); + % the following is general MATLAB behavior: + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + 'scale only axis', []); + end + % Add the physical dimension of one unit of length in the coordinate system. + % This is used later on to translate lengths to physical units where + % necessary (e.g., in bar plots). + m2t.unitlength.x.unit = pos.w.unit; + xLim = get(m2t.currentHandles.gca, 'XLim'); + m2t.unitlength.x.value = pos.w.value / (xLim(2)-xLim(1)); + m2t.unitlength.y.unit = pos.h.unit; + yLim = get(m2t.currentHandles.gca, 'YLim'); + m2t.unitlength.y.value = pos.h.value / (yLim(2)-yLim(1)); + for axis = 'xyz' + m2t.([axis 'AxisReversed']) = ... + strcmp(get(handle,[upper(axis),'Dir']), 'reverse'); + end + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % In MATLAB, all plots are treated as 3D plots; it's just the view that + % makes 2D plots appear like 2D. + % Recurse into the children of this environment. Do this here to give the + % contained plots the chance to set m2t.currentAxesContain3dData to true. + m2t.currentAxesContain3dData = false; + [m2t, childrenEnvs] = handleAllChildren(m2t, handle); + m2t.axesContainers{end} = addChildren(m2t.axesContainers{end}, childrenEnvs); + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % The rest of this is handling axes options. + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % Get other axis options (ticks, axis color, label,...). + % This is set here such that the axis orientation indicator in m2t is set + % before -- if ~isVisible(handle) -- the handle's children are called. + [m2t, xopts] = getAxisOptions(m2t, handle, 'x'); + [m2t, yopts] = getAxisOptions(m2t, handle, 'y'); + + m2t.axesContainers{end}.options = opts_merge(m2t.axesContainers{end}.options, ... + xopts, yopts); + if m2t.currentAxesContain3dData + [m2t, zopts] = getAxisOptions(m2t, handle, 'z'); + m2t.axesContainers{end}.options = opts_merge(m2t.axesContainers{end}.options, zopts); + + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + 'view', sprintf(['{', m2t.ff, '}{', m2t.ff, '}'], get(handle, 'View'))); + end + hasXGrid = false; + hasYGrid = false; + hasZGrid = false; + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + if ~isVisible(handle) + % Setting hide{x,y} axis also hides the axis labels in Pgfplots whereas + % in MATLAB, they may still be visible. Well. + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, 'hide axis', []); + % % An invisible axes container *can* have visible children, so don't + % % immediately bail out here. + % children = get(handle, 'Children'); + % for child = children(:)' + % if isVisible(child) + % % If the axes contain something that's visible, add an invisible + % % axes pair. + % m2t.axesContainers{end}.name = 'axis'; + % m2t.axesContainers{end}.options = {m2t.axesContainers{end}.options{:}, ... + % 'hide x axis', 'hide y axis'}; + % m2t.axesContainers{end}.comment = getTag(handle); + % break; + % end + % end + % % recurse into the children of this environment + % [m2t, childrenEnvs] = handleAllChildren(m2t, handle); + % m2t.axesContainers{end} = addChildren(m2t.axesContainers{end}, childrenEnvs); + % return + end + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + m2t.axesContainers{end}.name = 'axis'; + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % background color + m2t = drawBackgroundOfAxes(m2t, handle); + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % title + m2t = drawTitleOfAxes(m2t, handle); + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % axes locations + m2t = drawBoxAndLineLocationsOfAxes(m2t, handle); + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % grid line style + if hasXGrid || hasYGrid || hasZGrid + matlabGridLineStyle = get(handle, 'GridLineStyle'); + % Take over the grid line style in any case when in strict mode. + % If not, don't add anything in case of default line grid line style + % and effectively take Pgfplots' default. + defaultMatlabGridLineStyle = ':'; + if m2t.cmdOpts.Results.strict ... + || ~strcmp(matlabGridLineStyle,defaultMatlabGridLineStyle) + gls = translateLineStyle(matlabGridLineStyle); + axisGridOpts = {'grid style', sprintf('{%s}', gls)}; + m2t.axesContainers{end}.options = cat(1, ... + m2t.axesContainers{end}.options,... + axisGridOpts); + end + else + % When specifying 'axis on top', the axes stay above all graphs (which is + % default MATLAB behavior), but so do the grids (which is not default + % behavior). + %TODO: use proper grid ordering + if m2t.cmdOpts.Results.strict + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + 'axis on top', []); + end + end + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + m2t = drawLegendOptionsOfAxes(m2t, handle); + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % add manually given extra axis options + m2t.axesContainers{end}.options = opts_append_userdefined(... + m2t.axesContainers{end}.options, m2t.cmdOpts.Results.extraAxisOptions); +end +% ============================================================================== +function legendhandle = getAssociatedLegend(m2t, handle) +% Check if the axis is referenced by a legend (only necessary for Octave) + legendhandle = []; + switch m2t.env + case 'Octave' + if ~isempty(m2t.legendHandles) + % Make sure that m2t.legendHandles is a row vector. + for lhandle = m2t.legendHandles(:)' + ud = get(lhandle, 'UserData'); + if any(handle == ud.handle) + legendhandle = lhandle; + break; + end + end + end + case 'MATLAB' + % no action needed + otherwise + errorUnknownEnvironment(); + end +end +% ============================================================================== +function m2t = setDimensionOfAxes(m2t, widthOrHeight, dimension) +% sets the dimension "name" of the current axes to the struct "dim" + m2t.axesContainers{end}.options = opts_add(... + m2t.axesContainers{end}.options, widthOrHeight, ... + formatDim(dimension.value, dimension.unit)); +end +% ============================================================================== +function m2t = drawBackgroundOfAxes(m2t, handle) +% draw the background color of the current axes + backgroundColor = get(handle, 'Color'); + if ~isNone(backgroundColor) + [m2t, col] = getColor(m2t, handle, backgroundColor, 'patch'); + if ~strcmp(col, 'white') + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + 'axis background/.style', sprintf('{fill=%s}', col)); + end + end +end +% ============================================================================== +function m2t = drawTitleOfAxes(m2t, handle) +% processes the title of an axes object + title = get(get(handle, 'Title'), 'String'); + if ~isempty(title) + titleInterpreter = get(get(handle, 'Title'), 'Interpreter'); + title = prettyPrint(m2t, title, titleInterpreter); + titleStyle = getFontStyle(m2t, get(handle,'Title')); + if length(title) > 1 + titleStyle = opts_add(titleStyle, 'align', 'center'); + end + if ~isempty(titleStyle) + m2t.axesContainers{end}.options = opts_add(... + m2t.axesContainers{end}.options, 'title style', ... + sprintf('{%s}', opts_print(m2t, titleStyle, ','))); + end + title = join(m2t, title, '\\[1ex]'); + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + 'title', sprintf('{%s}', title)); + end +end +% ============================================================================== +function m2t = drawBoxAndLineLocationsOfAxes(m2t, handle) +% draw the box and axis line location of an axes object + isboxOn = strcmp(get(handle, 'box'), 'on'); + xloc = get(handle, 'XAxisLocation'); + if isboxOn + if strcmp(xloc, 'bottom') + % default; nothing added + elseif strcmp(xloc, 'top') + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + 'axis x line*', 'top'); + else + error('matlab2tikz:drawAxes', ... + 'Illegal axis location ''%s''.', xloc); + end + else % box off + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + 'axis x line*', xloc); + end + yloc = get(handle, 'YAxisLocation'); + if isboxOn + if strcmp(yloc, 'left') + % default; nothing added + elseif strcmp(yloc, 'right') + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + 'axis y line*', 'right'); + else + error('matlab2tikz:drawAxes', ... + 'Illegal axis location ''%s''.', yloc); + end + else % box off + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + 'axis y line*', yloc); + end + if m2t.currentAxesContain3dData + % There's no such attribute as 'ZAxisLocation'. + % Instead, the default seems to be 'left'. + if ~isboxOn + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + 'axis z line*', 'left'); + end + end +end +% ============================================================================== +function m2t = drawLegendOptionsOfAxes(m2t, handle) + % See if there are any legends that need to be plotted. + % Since the legends are at the same level as axes in the hierarchy, + % we can't work out which relates to which using the tree + % so we have to do it by looking for a plot inside which the legend sits. + % This could be done better with a heuristic of finding + % the nearest legend to a plot, which would cope with legends outside + % plot boundaries. + switch m2t.env + case 'MATLAB' + legendHandle = legend(handle); + if ~isempty(legendHandle) + [m2t, key, legendOpts] = getLegendOpts(m2t, legendHandle); + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + key, ... + ['{', legendOpts, '}']); + end + case 'Octave' + % TODO: How to uniquely connect a legend with a pair of axes in Octave? + axisDims = pos2dims(get(handle,'Position')); %#ok + % siblings of this handle: + siblings = get(get(handle,'Parent'), 'Children'); + % "siblings" always(?) is a column vector. Iterating over the column + % with the for statement below wouldn't return the individual vector + % elements but the same column vector, resulting in no legends exported. + % So let's make sure "siblings" is a row vector by reshaping it: + siblings = reshape(siblings, 1, []); + for sibling = siblings + if sibling && strcmp(get(sibling,'Type'), 'axes') && strcmp(get(sibling,'Tag'), 'legend') + legDims = pos2dims(get(sibling, 'Position')); %#ok + + % TODO The following logic does not work for 3D plots. + % => Commented out. + % This creates problems though for stacked plots with legends. + % if ( legDims.left > axisDims.left ... + % && legDims.bottom > axisDims.bottom ... + % && legDims.left + legDims.width < axisDims.left + axisDims.width ... + % && legDims.bottom + legDims.height < axisDims.bottom + axisDims.height) + [m2t, key, legendOpts] = getLegendOpts(m2t, sibling); + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + key, ... + ['{', legendOpts, '}']); + % end + end + end + otherwise + errorUnknownEnvironment(); + end +end +% ============================================================================== +function m2t = handleColorbar(m2t, handle) + if isempty(handle) + return; + end + + % Find the axes environment that this colorbar belongs to. + parentAxesHandle = double(get(handle,'axes')); + parentFound = false; + for k = 1:length(m2t.axesContainers) + if m2t.axesContainers{k}.handle == parentAxesHandle + k0 = k; + parentFound = true; + break; + end + end + if parentFound + m2t.axesContainers{k0}.options = ... + opts_append(m2t.axesContainers{k0}.options, ... + matlab2pgfplotsColormap(m2t, m2t.currentHandles.colormap), []); + % Append cell string. + m2t.axesContainers{k0}.options = cat(1,... + m2t.axesContainers{k0}.options, ... + getColorbarOptions(m2t, handle)); + else + warning('matlab2tikz:parentAxesOfColorBarNotFound',... + 'Could not find parent axes for color bar. Skipping.'); + end +end +% ============================================================================== +function tag = getTag(handle) + % if a tag is given, use it as comment + tag = get(handle, 'tag'); + if ~isempty(tag) + tag = sprintf('Axis "%s"', tag); + else + tag = sprintf('Axis at [%.2g %.2f %.2g %.2g]', get(handle, 'position')); + end +end +% ============================================================================== +function [m2t, options] = getAxisOptions(m2t, handle, axis) + if ~ismember(axis, {'x','y','z'}) + error('matlab2tikz:illegalAxisSpecifier',... + 'Illegal axis specifier ''%s''.', axis); + end + options = opts_new(); + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % axis colors + [color, isDfltColor] = getAndCheckDefault('Axes', handle, ... + [upper(axis),'Color'], [ 0 0 0 ]); + if ~isDfltColor || m2t.cmdOpts.Results.strict + [m2t, col] = getColor(m2t, handle, color, 'patch'); + if strcmp(get(handle, 'box'), 'on') + % If the axes are arranged as a box, make sure that the individual + % axes are drawn as four separate paths. This makes the alignment + % at the box corners somewhat less nice, but allows for different + % axis styles (e.g., colors). + options = opts_add(options, 'separate axis lines', []); + end + options = ... + opts_add(options, ... + ['every outer ', axis, ' axis line/.append style'], ... + ['{', col, '}']); + options = ... + opts_add(options, ... + ['every ',axis,' tick label/.append style'], ... + ['{font=\color{',col,'}}']); + end + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % handle the orientation + isAxisReversed = strcmp(get(handle,[upper(axis),'Dir']), 'reverse'); + m2t.([axis 'AxisReversed']) = isAxisReversed; + if isAxisReversed + options = opts_add(options, [axis, ' dir'], 'reverse'); + end + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + axisScale = getOrDefault(handle, [upper(axis) 'Scale'], 'lin'); + if strcmp(axisScale, 'log'); + options = opts_add(options, [axis,'mode'], 'log'); + end + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % get axis limits + limits = get(handle, [upper(axis),'Lim']); + if isfinite(limits(1)) + options = opts_add(options, [axis,'min'], sprintf(m2t.ff, limits(1))); + end + if isfinite(limits(2)) + options = opts_add(options, [axis,'max'], sprintf(m2t.ff, limits(2))); + end + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % get ticks along with the labels + [ticks, tickLabels, hasMinorTicks, tickDir] = getAxisTicks(m2t, handle, axis); + + % According to http://www.mathworks.com/help/techdoc/ref/axes_props.html, + % the number of minor ticks is automatically determined by MATLAB(R) to + % fit the size of the axis. Until we know how to extract this number, use + % a reasonable default. + matlabDefaultNumMinorTicks = 3; + if ~isempty(ticks) + options = opts_add(options, ... + [axis,'tick'], sprintf('{%s}', ticks)); + end + if ~isempty(tickLabels) + options = opts_add(options, ... + [axis,'ticklabels'], sprintf('{%s}', tickLabels)); + end + if hasMinorTicks + options = opts_add(options, ... + [axis,'minorticks'], 'true'); + if m2t.cmdOpts.Results.strict + options = ... + opts_add(options, ... + sprintf('minor %s tick num', axis), ... + sprintf('{%d}', matlabDefaultNumMinorTicks)); + end + end + if strcmpi(tickDir,'out') + options = opts_add(options, ... + 'tick align','outside'); + elseif strcmpi(tickDir,'both') + options = opts_add(options, ... + 'tick align','center'); + end + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % get axis label + axisLabel = get(get(handle, [upper(axis),'Label']), 'String'); + if ~isempty(axisLabel) + axisLabelInterpreter = ... + get(get(handle, [upper(axis),'Label']), 'Interpreter'); + label = prettyPrint(m2t, axisLabel, axisLabelInterpreter); + if length(label) > 1 + % If there's more than one cell item, the list + % is displayed multi-row in MATLAB(R). + % To replicate the same in Pgfplots, one can + % use xlabel={first\\second\\third} only if the + % alignment or the width of the "label box" + % is defined. This is a restriction that comes with + % TikZ nodes. + options = opts_add(options, ... + [axis, 'label style'], '{align=center}'); + end + label = join(m2t, label,'\\[1ex]'); + %if isVisible(handle) + options = opts_add(options, ... + [axis, 'label'], sprintf('{%s}', label)); + %else + % m2t.axesContainers{end}.options{end+1} = ... + % sprintf(['extra description/.code={\n', ... + % '\\node[/pgfplots/every axis label,/pgfplots/every axis %s label]{%s};\n', ... + % '}'], axis, label); + %end + end + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % get grids + if strcmp(getOrDefault(handle, [upper(axis),'Grid'], 'off'), 'on'); + options = opts_add(options, [axis, 'majorgrids'], []); + end + if strcmp(getOrDefault(handle, [upper(axis),'MinorGrid'], 'off'), 'on'); + options = opts_add(options, [axis, 'minorgrids'], []); + end +end +% ============================================================================== +function bool = axisIsVisible(axisHandle) + if ~isVisible(axisHandle) + % An invisible axes container *can* have visible children, so don't + % immediately bail out here. + children = get(axisHandle, 'Children'); + bool = false; + for child = children(:)' + if isVisible(child) + bool = true; + return; + end + end + else + bool = true; + end +end +% ============================================================================== +function [m2t, str] = drawLine(m2t, handle, yDeviation) +% Returns the code for drawing a regular line and error bars. +% This is an extremely common operation and takes place in most of the +% not too fancy plots. + str = ''; + + if ~isVisible(handle) + return + end + + lineStyle = get(handle, 'LineStyle'); + lineWidth = get(handle, 'LineWidth'); + marker = get(handle, 'Marker'); + + % Get draw options. + color = get(handle, 'Color'); + [m2t, xcolor] = getColor(m2t, handle, color, 'patch'); + lineOptions = getLineOptions(m2t, lineStyle, lineWidth); + [m2t, markerOptions] = getMarkerOptions(m2t, handle); + drawOptions = [{sprintf('color=%s', xcolor)}, ... % color + lineOptions, ... + markerOptions]; + + % Check for "special" lines, e.g.: + if strcmp(get(handle, 'Tag'), 'zplane_unitcircle') + % Draw unit circle and axes. + % TODO Don't hardcode "10". + opts = join(m2t, drawOptions, ','); + str = [sprintf('\\draw[%s] (axis cs:0,0) circle[radius=1];\n', opts),... + sprintf('\\draw[%s] (axis cs:-10,0)--(axis cs:10,0);\n', opts), ... + sprintf('\\draw[%s] (axis cs:0,-10)--(axis cs:0,10);\n', opts)]; + return + end + + hasLines = ~isNone(lineStyle) && lineWidth>0.0; + hasMarkers = ~isNone(marker); + if ~hasLines && ~hasMarkers + return + end + + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % Plot the actual line data. + % First put them all together in one multiarray. + % This also implicitly makes sure that the lengths match. + xData = get(handle, 'XData'); + yData = get(handle, 'YData'); + zData = getOrDefault(handle, 'ZData', []); + % We would like to do + % data = [xData(:), yData(:), zData(:)], + % but Octave fails. Hence this isempty() construction. + if isempty(zData) + data = [xData(:), yData(:)]; + else + data = applyHgTransform(m2t, [xData(:), yData(:), zData(:)]); + end + + % check if the *optional* argument 'yDeviation' was given + hasDeviations = false; + if nargin > 2 + data = [data, yDeviation(:,1:2)]; + hasDeviations = true; + end + + % Check if any value is infinite/NaN. In that case, add appropriate option. + if any(~isfinite(data(:))) + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, 'unbounded coords', 'jump'); + end + + if ~isempty(zData) + % Don't try to be smart in parametric 3d plots: Just plot all the data. + [m2t, table] = makeTable(m2t, {'','',''}, data); + str = sprintf('%s\\addplot3 [%s]\n table[row sep=crcr] {%s};\n ', ... + str, join(m2t, drawOptions, ','), table); + + m2t.currentAxesContain3dData = true; + else + % split the data into logical chunks + dataCell = splitLine(m2t, hasLines, data); + + % plot them + for k = 1:length(dataCell) + % If the line has a legend string, make sure to only include a legend + % entry for the *last* occurrence of the plot series. + % Hence the condition k<length(xDataCell). + %if ~isempty(m2t.legendHandles) && (~m2t.currentHandleHasLegend || k < length(dataCell)) + if ~m2t.currentHandleHasLegend || k < length(dataCell) + % No legend entry found. Don't include plot in legend. + opts = join(m2t, [drawOptions, {'forget plot'}], ','); + else + opts = join(m2t, drawOptions, ','); + end + + [m2t, Part] = plotLine2d(m2t, opts, dataCell{k}); + str = [str, Part]; + end + end + + if m2t.cmdOpts.Results.automaticLabels + [m2t, label] = addLabel(m2t); + str = [str, label]; + end +end +% ============================================================================== +function [m2t, str] = addLabel(m2t) + [pathstr, name] = fileparts(m2t.cmdOpts.Results.filename); %#ok + label = sprintf('addplot:%s%d', name, m2t.automaticLabelIndex); + str = sprintf('\\label{%s}\n', label); + m2t.automaticLabelIndex = m2t.automaticLabelIndex + 1; + + userWarning(m2t, 'Automatically added label ''%s'' for line plot.', label); +end +% ============================================================================== +function [m2t,str] = plotLine2d(m2t, opts, data) + errorbarMode = (size(data,2) == 4); % is (optional) yDeviation given? + + str = ''; + if errorbarMode + m2t = needsPgfplotsVersion(m2t, [1,9]); + str = sprintf('plot [error bars/.cd, y dir = both, y explicit]\n'); + end + + % Convert to string array then cell to call sprintf once (and no loops). + if errorbarMode + tabOpts = 'row sep=crcr, y error plus index=2, y error minus index=3'; + else + tabOpts = 'row sep=crcr'; + end + [m2t, table] = makeTable(m2t, repmat({''}, size(data,2)), data); + str = sprintf('\\addplot [%s]\n %s table[%s]{%s};\n',... + opts, str, tabOpts, table); +end +% ============================================================================== +function dataCell = splitLine(m2t, hasLines, data) +% Split the xData, yData into several chunks of data for each of which +% an \addplot will be generated. + dataCell{1} = data; + + % Split each of the current chunks further with respect to outliers. + dataCell = splitByArraySize(m2t, hasLines, dataCell); +end +% ============================================================================== +function dataCellNew = splitByArraySize(m2t, hasLines, dataCell) +% TeX parses files line by line with a buffer of size buf_size. If the +% plot has too many data points, pdfTeX's buffer size may be exceeded. +% As a work-around, the plot is split into several smaller plots, and this +% function does the job. + dataCellNew = cell(0); + + for data = dataCell + chunkStart = 1; + len = size(data{1}, 1); + while chunkStart <= len + chunkEnd = min(chunkStart + m2t.cmdOpts.Results.maxChunkLength - 1, len); + + % Copy over the data to the new containers. + dataCellNew{end+1} = data{1}(chunkStart:chunkEnd,:); + + % If the plot has lines, add an extra (overlap) point to the data + % stream; otherwise the line between two data chunks would be broken. + if hasLines && chunkEnd~=len + dataCellNew{end} = [dataCellNew{end};... + data{1}(chunkEnd+1,:)]; + end + + chunkStart = chunkEnd + 1; + end + end +end +% ============================================================================== +function lineOpts = getLineOptions(m2t, lineStyle, lineWidth) +% Gathers the line options. + lineOpts = cell(0); + + if ~isNone(lineStyle) && (lineWidth > m2t.tol) + lineOpts{end+1} = sprintf('%s', translateLineStyle(lineStyle)); + end + + % Take over the line width in any case when in strict mode. If not, don't add + % anything in case of default line width and effectively take Pgfplots' + % default. + % Also apply the line width if no actual line is there; the markers make use + % of this, too. + matlabDefaultLineWidth = 0.5; + if m2t.cmdOpts.Results.strict ... + || ~abs(lineWidth-matlabDefaultLineWidth) <= m2t.tol + lineOpts{end+1} = sprintf('line width=%.1fpt', lineWidth); + end +end +% ============================================================================== +function [m2t, drawOptions] = getMarkerOptions(m2t, h) +% Handles the marker properties of a line (or any other) plot. + drawOptions = cell(0); + + marker = get(h, 'Marker'); + + if ~isNone(marker) + markerSize = get(h, 'MarkerSize'); + lineStyle = get(h, 'LineStyle'); + lineWidth = get(h, 'LineWidth'); + + [tikzMarkerSize, isDefault] = ... + translateMarkerSize(m2t, marker, markerSize); + + % take over the marker size in any case when in strict mode; + % if not, don't add anything in case of default marker size + % and effectively take Pgfplots' default. + if m2t.cmdOpts.Results.strict || ~isDefault + drawOptions{end+1} = sprintf('mark size=%.1fpt', tikzMarkerSize); + end + + markOptions = cell(0); + % make sure that the markers get painted in solid (and not dashed) + % if the 'lineStyle' is not solid (otherwise there is no problem) + if ~strcmp(lineStyle, 'solid') + markOptions{end+1} = 'solid'; + end + + % print no lines + if isNone(lineStyle) || lineWidth==0 + drawOptions{end+1} = 'only marks'; + end + + % get the marker color right + markerFaceColor = get(h, 'markerfaceColor'); + markerEdgeColor = get(h, 'markeredgeColor'); + [tikzMarker, markOptions] = translateMarker(m2t, marker, ... + markOptions, ~isNone(markerFaceColor)); + if ~isNone(markerFaceColor) + [m2t, xcolor] = getColor(m2t, h, markerFaceColor, 'patch'); + if ~isempty(xcolor) + markOptions{end+1} = sprintf('fill=%s', xcolor); + end + end + if ~isNone(markerEdgeColor) && ~strcmp(markerEdgeColor,'auto') + [m2t, xcolor] = getColor(m2t, h, markerEdgeColor, 'patch'); + if ~isempty(xcolor) + markOptions{end+1} = sprintf('draw=%s', xcolor); + end + end + + % add it all to drawOptions + drawOptions{end+1} = sprintf('mark=%s', tikzMarker); + + if ~isempty(markOptions) + mo = join(m2t, markOptions, ','); + drawOptions{end+1} = ['mark options={', mo, '}']; + end + end +end +% ============================================================================== +function [tikzMarkerSize, isDefault] = ... + translateMarkerSize(m2t, matlabMarker, matlabMarkerSize) +% The markersizes of Matlab and TikZ are related, but not equal. This +% is because +% +% 1.) MATLAB uses the MarkerSize property to describe something like +% the diameter of the mark, while TikZ refers to the 'radius', +% 2.) MATLAB and TikZ take different measures (e.g. the +% edge of a square vs. its diagonal). + if(~ischar(matlabMarker)) + error('matlab2tikz:translateMarkerSize', ... + 'Variable matlabMarker is not a string.'); + end + + if(~isnumeric(matlabMarkerSize)) + error('matlab2tikz:translateMarkerSize', ... + 'Variable matlabMarkerSize is not a numeral.'); + end + + % 6pt is the default MATLAB marker size for all markers + defaultMatlabMarkerSize = 6; + isDefault = abs(matlabMarkerSize(1)-defaultMatlabMarkerSize)<m2t.tol; + % matlabMarkerSize can be vector data, use first index to check the default + % marker size. When the script also handles different markers together with + % changing size and color, the test should be extended to a vector norm, e.g. + % sqrt(e^T*e) < tol, where e=matlabMarkerSize-defaultMatlabMarkerSize + + switch (matlabMarker) + case 'none' + tikzMarkerSize = []; + case {'+','o','x','*','p','pentagram','h','hexagram'} + % In MATLAB, the marker size refers to the edge length of a + % square (for example) (~diameter), whereas in TikZ the + % distance of an edge to the center is the measure (~radius). + % Hence divide by 2. + tikzMarkerSize = matlabMarkerSize(:) / 2; + case '.' + % as documented on the Matlab help pages: + % + % Note that MATLAB draws the point marker (specified by the '.' + % symbol) at one-third the specified size. + % The point (.) marker type does not change size when the + % specified value is less than 5. + % + tikzMarkerSize = matlabMarkerSize(:) / 2 / 3; + case {'s','square'} + % Matlab measures the diameter, TikZ half the edge length + tikzMarkerSize = matlabMarkerSize(:) / 2 / sqrt(2); + case {'d','diamond'} + % MATLAB measures the width, TikZ the height of the diamond; + % the acute angle (at the top and the bottom of the diamond) + % is a manually measured 75 degrees (in TikZ, and MATLAB + % probably very similar); use this as a base for calculations + tikzMarkerSize = matlabMarkerSize(:) / 2 / atan(75/2 *pi/180); + case {'^','v','<','>'} + % for triangles, matlab takes the height + % and tikz the circumcircle radius; + % the triangles are always equiangular + tikzMarkerSize = matlabMarkerSize(:) / 2 * (2/3); + otherwise + error('matlab2tikz:translateMarkerSize', ... + 'Unknown matlabMarker ''%s''.', matlabMarker); + end +end +% ============================================================================== +function [tikzMarker, markOptions] = ... + translateMarker(m2t, matlabMarker, markOptions, faceColorToggle) +% Translates MATLAB markers to their Tikz equivalents +% #COMPLEX: inherently large switch-case + if ~ischar(matlabMarker) + error('matlab2tikz:translateMarker:MarkerNotAString',... + 'matlabMarker is not a string.'); + end + + switch (matlabMarker) + case 'none' + tikzMarker = ''; + case '+' + tikzMarker = '+'; + case 'o' + if faceColorToggle + tikzMarker = '*'; + else + tikzMarker = 'o'; + end + case '.' + tikzMarker = '*'; + case 'x' + tikzMarker = 'x'; + otherwise % the following markers are only available with PGF's + % plotmarks library + userInfo(m2t, '\nMake sure to load \\usetikzlibrary{plotmarks} in the preamble.\n'); + hasFilledVariant = true; + switch (matlabMarker) + + case '*' + tikzMarker = 'asterisk'; + hasFilledVariant = false; + + case {'s','square'} + tikzMarker = 'square'; + + case {'d','diamond'} + tikzMarker = 'diamond'; + + case '^' + tikzMarker = 'triangle'; + + case 'v' + tikzMarker = 'triangle'; + markOptions{end+1} = 'rotate=180'; + + case '<' + tikzMarker = 'triangle'; + markOptions{end+1} = 'rotate=90'; + + case '>' + tikzMarker = 'triangle'; + markOptions{end+1} = 'rotate=270'; + + case {'p','pentagram'} + tikzMarker = 'star'; + + case {'h','hexagram'} + userWarning(m2t, 'MATLAB''s marker ''hexagram'' not available in TikZ. Replacing by ''star''.'); + tikzMarker = 'star'; + + otherwise + error('matlab2tikz:translateMarker:unknownMatlabMarker',... + 'Unknown matlabMarker ''%s''.',matlabMarker); + end + if faceColorToggle && hasFilledVariant + tikzMarker = [tikzMarker '*']; + end + end +end +% ============================================================================== +function [m2t, str] = drawPatch(m2t, handle) +% Draws a 'patch' graphics object (as found in contourf plots, for example). +% + str = ''; + + if ~isVisible(handle) + return + end + + % MATLAB's patch elements are matrices in which each column represents a a + % distinct graphical object. Usually there is only one column, but there may + % be more (-->hist plots, although they are now handled within the barplot + % framework). + XData = get(handle, 'XData'); + YData = get(handle, 'YData'); + ZData = get(handle, 'ZData'); + + % see if individual color values are present + CData = get(handle, 'CData'); + + % If the data points are given in three vectors, we are dealing with one + % single patch. If they are all matrices, then the columns of matrix + % represent one patch each. + if min(size(XData)) == 1 + % Make sure vectors are column vectors. + XData = XData(:); + YData = YData(:); + ZData = ZData(:); + CData = CData(:); + end + + numPatches = size(XData, 2); + + % Ensure that if we have multiple patches and only FaceColor is specified, + % that it doesn't error when creating each patch with cData = CData(:, k);; + if isempty(CData) + CData = zeros(1,numPatches); + end + if length(CData) == 1 + CData = CData(1,1) * ones(1,numPatches); + end + + for k = 1:numPatches + xData = XData(:, k); + yData = YData(:, k); + + if isempty(ZData) + columnNames = {'x', 'y'}; + data = [xData(:), yData(:)]; + plotType = 'addplot'; + else + zData = ZData(:, k); + columnNames = {'x', 'y', 'z'}; + data = applyHgTransform(m2t, [xData(:), yData(:), zData(:)]); + plotType = 'addplot3'; + m2t.currentAxesContain3dData = true; + end + + cData = CData(:, k); + % ----------------------------------------------------------------------- + % gather the draw options + % Make sure that legends are shown in area mode. + drawOptions = {'area legend'}; + + % Use the '\\' as a row separator to make sure that the generated figures + % work in subplot environments. + tableOptions = {'row sep=crcr'}; + + [m2t, markerOptions] = getMarkerOptions(m2t, handle); + drawOptions = [drawOptions, markerOptions]; + + % Add the proper color map even if the map data isn't directly used in + % the plot to make sure that we get correct color bars. + if ~all(cData == cData(1)) && length(cData) == length(xData) + % Add the color map. + m2t.axesContainers{end}.options = ... + opts_append(m2t.axesContainers{end}.options, ... + matlab2pgfplotsColormap(m2t, m2t.currentHandles.colormap), []); + end + % If full color data is provided, we can use point meta color data. + % For some reason, this only works for filled contours in Pgfplots, so + % fall back to explicit color specifications for line plots. + if ~all(cData == cData(1)) && length(cData) == length(xData) ... + && ~isNone(get(handle, 'FaceColor')) + data = [data, cData(:)]; + drawOptions{end+1} = 'patch'; + columnNames{end+1} = 'c'; + tableOptions{end+1} = 'point meta=\thisrow{c}'; + else + % Probably one color only, so things we're probably only dealing with + % one patch here. + % line width + lineStyle = get(handle, 'LineStyle'); + lineWidth = get(handle, 'LineWidth'); + lineOptions = getLineOptions(m2t, lineStyle, lineWidth); + drawOptions = [drawOptions, lineOptions]; + + % Find out color values. + % fill color + faceColor = get(handle, 'FaceColor'); + + % If it still has 'interp', then the CData for the patch is + % just an index into the colormap. Convert to RGB + if strcmpi(faceColor,'interp') + [m2t, index] = cdata2colorindex(m2t, cData(1),handle); + faceColor = m2t.currentHandles.colormap(index,:); + end + + if ~isNone(faceColor) + [m2t, xFaceColor] = getColor(m2t, handle, faceColor, 'patch'); + drawOptions{end+1} = sprintf('fill=%s', xFaceColor); + xFaceAlpha = get(handle, 'FaceAlpha'); + if abs(xFaceAlpha - 1.0) > m2t.tol + drawOptions{end+1} = sprintf('opacity=%s', xFaceAlpha); + end + end + + % draw color + edgeColor = get(handle, 'EdgeColor'); + lineStyle = get(handle, 'LineStyle'); + if isNone(lineStyle) || isNone(edgeColor) + drawOptions{end+1} = 'draw=none'; + else + [m2t, xEdgeColor] = getColor(m2t, handle, edgeColor, 'patch'); + if isempty(xEdgeColor) + % getColor() wasn't able to return a color. This is because + % cdata was an actual vector with different values in it, + % meaning that the color changes along the edge. This is the + % case, for example, with waterfall() plots. + % An actual color maps is needed here. + % + drawOptions{end+1} = 'mesh'; % or surf + m2t.axesContainers{end}.options = ... + opts_append(m2t.axesContainers{end}.options, ... + matlab2pgfplotsColormap(m2t, m2t.currentHandles.colormap), []); + % Append upper and lower limit of the color mapping. + clim = caxis; + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + 'point meta min', sprintf(m2t.ff, clim(1))); + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + 'point meta max', sprintf(m2t.ff, clim(2))); + % Note: + % Pgfplots can't currently use FaceColor and colormapped edge + % color in one go. The option 'surf' makes sure that + % colormapped edge colors are used. Face colors are not + % displayed. + else + % getColor() returned a reasonable color value. + drawOptions{end+1} = sprintf('draw=%s', xEdgeColor); + end + end + end + + if ~m2t.currentHandleHasLegend + % No legend entry found. Don't include plot in legend. + drawOptions{end+1} = 'forget plot'; + end + + drawOpts = join(m2t, drawOptions, ','); + % ----------------------------------------------------------------------- + if any(~isfinite(data(:))) + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + 'unbounded coords', 'jump'); + end + % Plot the actual data. + [m2t, table] = makeTable(m2t, columnNames, data); + + cycle = conditionallyCyclePath(data); + str = sprintf('%s\n\\%s[%s]\ntable[%s] {%s}%s;\n\n',... + str, plotType, drawOpts, join(m2t, tableOptions, ', '), table, cycle); +end +end +% ============================================================================== +function [cycle] = conditionallyCyclePath(data) +% returns "--cycle" when the path should be cyclic in pgfplots +% Mostly, this is the case UNLESS the data record starts or ends with a NaN +% record (i.e. a break in the path) + if any(~isfinite(data([1 end],:))) + cycle = ''; + else + cycle = '--cycle'; + end +end +% ============================================================================== +function [m2t, str] = drawImage(m2t, handle) + str = ''; + + if ~isVisible(handle) + return + end + + % read x-, y-, and color-data + xData = get(handle, 'XData'); + yData = get(handle, 'YData'); + cData = get(handle, 'CData'); + + % Flip the image over as the PNG gets written starting at (0,0), + % which is the top left corner. + cData = cData(end:-1:1,:,:); + + if (m2t.cmdOpts.Results.imagesAsPng) + [m2t, str] = imageAsPNG(m2t, handle, xData, yData, cData); + else + [m2t, str] = imageAsTikZ(m2t, handle, xData, yData, cData); + end + + % Make sure that the axes are still visible above the image. + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + 'axis on top', []); +end +% ============================================================================== +function [m2t, str] = imageAsPNG(m2t, handle, xData, yData, cData) + m2t.imageAsPngNo = m2t.imageAsPngNo + 1; + % ------------------------------------------------------------------------ + % draw a png image + [pngFileName, pngReferencePath] = externalFilename(m2t, m2t.imageAsPngNo, '.png'); + + % Get color indices for indexed images and truecolor values otherwise + if ndims(cData) == 2 %#ok don't use ismatrix (cfr. #143) + [m2t, colorData] = cdata2colorindex(m2t, cData, handle); + else + colorData = cData; + end + + m = size(cData, 1); + n = size(cData, 2); + + colorData = flipImageIfAxesReversed(m2t, colorData); + + % Write an indexed or a truecolor image + alpha = normalizedAlphaValues(m2t, get(handle,'AlphaData'), handle); + if numel(alpha)==1 + alpha = alpha(ones(size(colorData(:,:,1)))); + end + hasAlpha = ~all(alpha(:)==1); + if hasAlpha + alphaOpts = {'Alpha', alpha}; + else + alphaOpts = {}; + end + if (ndims(colorData) == 2) %#ok don't use ismatrix (cfr. #143) + if size(m2t.currentHandles.colormap, 1) <= 256 && ~hasAlpha + % imwrite supports maximum 256 values in a colormap (i.e. 8 bit) + % and no alpha channel for indexed PNG images. + imwrite(colorData, m2t.currentHandles.colormap, ... + pngFileName, 'png'); + else % use true-color instead + imwrite(ind2rgb(colorData, m2t.currentHandles.colormap), ... + pngFileName, 'png', alphaOpts{:}); + end + else + imwrite(colorData, pngFileName, 'png', alphaOpts{:}); + end + % ----------------------------------------------------------------------- + % dimensions of a pixel in axes units + if n == 1 + xLim = get(m2t.currentHandles.gca, 'XLim'); + xw = xLim(2) - xLim(1); + else + xw = (xData(end)-xData(1)) / (n-1); + end + if m == 1 + yLim = get(m2t.currentHandles.gca, 'YLim'); + yw = yLim(2) - yLim(1); + else + yw = (yData(end)-yData(1)) / (m-1); + end + + opts = opts_new(); + opts = opts_add(opts, 'xmin', sprintf(m2t.ff, xData(1 ) - xw/2)); + opts = opts_add(opts, 'xmax', sprintf(m2t.ff, xData(end) + xw/2)); + opts = opts_add(opts, 'ymin', sprintf(m2t.ff, yData(1 ) - yw/2)); + opts = opts_add(opts, 'ymax', sprintf(m2t.ff, yData(end) + yw/2)); + + str = sprintf('\\addplot [forget plot] graphics [%s] {%s};\n', ... + opts_print(m2t, opts, ','), pngReferencePath); + + userInfo(m2t, ... + ['\nA PNG file is stored at ''%s'' for which\n', ... + 'the TikZ file contains a reference to ''%s''.\n', ... + 'You may need to adapt this, depending on the relative\n', ... + 'locations of the master TeX file and the included TikZ file.\n'], ... + pngFileName, pngReferencePath); +end +function [m2t, str] = imageAsTikZ(m2t, handle, xData, yData, cData) +% writes an image as raw TikZ commands (STRONGLY DISCOURAGED) + str = ''; + + % Generate uniformly distributed X, Y, although xData and yData may be + % non-uniform. + % This is MATLAB(R) behavior. + switch length(xData) + case 2 % only the limits given; common for generic image plots + hX = 1; + case size(cData,1) % specific x-data is given + hX = (xData(end)-xData(1)) / (length(xData)-1); + otherwise + error('drawImage:arrayLengthMismatch', ... + 'Array lengths not matching (%d = size(cdata,1) ~= length(xData) = %d).', m, length(xData)); + end + X = xData(1):hX:xData(end); + + switch length(yData) + case 2 % only the limits given; common for generic image plots + hY = 1; + case size(cData,2) % specific y-data is given + hY = (yData(end)-yData(1)) / (length(yData)-1); + otherwise + error('drawImage:arrayLengthMismatch', ... + 'Array lengths not matching (%d = size(cdata,2) ~= length(yData) = %d).', n, length(yData)); + end + Y = yData(1):hY:yData(end); + + m = length(X); + n = length(Y); + [m2t, xcolor] = getColor(m2t, handle, cData, 'image'); + + % The following section takes pretty long to execute, although in + % principle it is discouraged to use TikZ for those; LaTeX will take + % forever to compile. + % Still, a bug has been filed on MathWorks to allow for one-line + % sprintf'ing with (string+num) cells (Request ID: 1-9WHK4W); + % <http://www.mathworks.de/support/service_requests/Service_Request_Detail.do?ID=183481&filter=&sort=&statusorder=0&dateorder=0>. + % An alternative approach could be to use 'surf' or 'patch' of pgfplots + % with inline tables. + + for i = 1:m + for j = 1:n + str = [str, ... + sprintf(['\t\\fill [%s] (axis cs:', m2t.ff,',', m2t.ff,') rectangle (axis cs:',m2t.ff,',',m2t.ff,');\n'], ... + xcolor{m-i+1,j}, Y(j)-hY/2, X(i)-hX/2, Y(j)+hY/2, X(i)+hX/2 )]; + end + end +end +% ============================================================================== +function [colorData] = flipImageIfAxesReversed(m2t, colorData) +% flip the image if reversed + if m2t.xAxisReversed + colorData = colorData(:, end:-1:1, :); + end + if m2t.yAxisReversed + colorData = colorData(end:-1:1, :, :); + end +end +% ============================================================================== +function alpha = normalizedAlphaValues(m2t, alpha, handle) + alphaDataMapping = getOrDefault(handle, 'AlphaDataMapping', 'none'); + switch lower(alphaDataMapping) + case 'none' % no rescaling needed + case 'scaled' + ALim = get(m2t.currentHandles.gca, 'ALim'); + AMax = ALim(2); + AMin = ALim(1); + if ~isfinite(AMax) + AMax = max(alpha(:)); %NOTE: is this right? + end + alpha = (alpha - AMin)./(AMax - AMin); + case 'direct' + alpha = ind2rgb(alpha, get(m2t.currentHandles.gcf, 'Alphamap')); + otherwise + error('matlab2tikz:UnknownAlphaMapping', ... + 'Unknown alpha mapping "%s"', alphaMapping); + end + alpha = min(1,max(alpha,0)); % clip at range [0, 1] +end +% ============================================================================== +function [m2t, str] = drawContour(m2t, h) +% draw a contour group (MATLAB R2014b and newer only) +plotoptions = opts_new(); +plotoptions = opts_add(plotoptions,'contour prepared'); +plotoptions = opts_add(plotoptions,'contour prepared format','matlab'); +if strcmpi(get(h,'ShowText'),'off') + plotoptions = opts_add(plotoptions,'contour/labels','false'); +end +if strcmpi(get(h,'Fill'),'on') + userWarning(m2t, 'Filled contour replaced by unfilled contour plot.'); + %FIXME: implement colored contour plots +end +%TODO: explicit color handling for contour plots + +contours = get(h,'ContourMatrix'); + +[m2t, table] = makeTable(m2t, {'',''}, contours.'); + +str = sprintf('\\addplot[%s] table[row sep=crcr] {%%\n%s};\n', ... + opts_print(m2t, plotoptions, ', '), table); + +end +% ============================================================================== +function [m2t, str] = drawHggroup(m2t, h) +% Octave doesn't have the handle() function, so there's no way to determine +% the nature of the plot anymore at this point. Set to 'unknown' to force +% fallback handling. This produces something for bar plots, for example. +% #COMPLEX: big switch-case + try + cl = class(handle(h)); + catch %#ok + cl = 'unknown'; + end + + switch(cl) + case {'specgraph.barseries', 'matlab.graphics.chart.primitive.Bar'} + % hist plots and friends + [m2t, str] = drawBarseries(m2t, h); + + case {'specgraph.stemseries', 'matlab.graphics.chart.primitive.Stem'} + % stem plots + [m2t, str] = drawStemSeries(m2t, h); + + case {'specgraph.stairseries', 'matlab.graphics.chart.primitive.Stair'} + % stair plots + [m2t, str] = drawStairSeries(m2t, h); + + case {'specgraph.areaseries', 'matlab.graphics.chart.primitive.Area'} + % scatter plots + [m2t,str] = drawAreaSeries(m2t, h); + + case {'specgraph.quivergroup', 'matlab.graphics.chart.primitive.Quiver'} + % quiver arrows + [m2t, str] = drawQuiverGroup(m2t, h); + + case {'specgraph.errorbarseries', 'matlab.graphics.chart.primitive.ErrorBar'} + % error bars + [m2t,str] = drawErrorBars(m2t, h); + + case {'specgraph.scattergroup','matlab.graphics.chart.primitive.Scatter'} + % scatter plots + [m2t,str] = drawScatterPlot(m2t, h); + + case {'specgraph.contourgroup', 'hggroup', 'matlab.graphics.primitive.Group'} + % handle all those the usual way + [m2t, str] = handleAllChildren(m2t, h); + + case 'scribe.scribeellipse' + % Annotation: ellipse + [m2t, str] = drawEllipse(m2t, h); + + case {'scribe.arrow', 'scribe.doublearrow', 'scribe.line'} + % Annotation: single and double Arrow, line + % These annotations are fully represented by their children + [m2t, str] = handleAllChildren(m2t, h); + + case 'scribe.textbox' + % Annotation: text box + [m2t, str] = drawText(m2t, h); + + case 'scribe.textarrow' + % Annotation: text arrow + [m2t, str] = drawTextarrow(m2t, h); + + case 'scribe.scriberect' + % Annotation: rectangle + [m2t, str] = drawRectangle(m2t, h); + + case 'unknown' + % Weird spurious class from Octave. + [m2t, str] = handleAllChildren(m2t, h); + + otherwise + userWarning(m2t, 'Don''t know class ''%s''. Default handling.', cl); + try + m2tBackup = m2t; + [m2t, str] = handleAllChildren(m2t, h); + catch ME + userWarning(m2t, 'Default handling for ''%s'' failed. Continuing as if it did not occur. \n Original Message:\n %s', cl, getReport(ME)); + [m2t, str] = deal(m2tBackup, ''); % roll-back + end + end +end +% ============================================================================== +function [m2t,env] = drawSurface(m2t, handle) + str = ''; + [m2t, opts, plotType] = surfaceOpts(m2t, handle); + + % Allow for empty surf + if isNone(plotType) + m2t.currentAxesContain3dData = true; + env = str; + return + end + + dx = get(handle, 'XData'); + dy = get(handle, 'YData'); + dz = get(handle, 'ZData'); + if any(~isfinite(dx(:))) || any(~isfinite(dy(:))) || any(~isfinite(dz(:))) + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + 'unbounded coords', 'jump'); + end + + [numcols, numrows] = size(dz); + + % If dx or dy are given as vectors, convert them to the (wasteful) matrix + % representation first. This makes sure we can treat the data with one + % single sprintf() command below. + if isvector(dx) + dx = ones(numcols,1) * dx(:)'; + end + if isvector(dy) + dy = dy(:) * ones(1,numrows); + end + + % Add 'z buffer=sort' to the options to make sphere plot and the like not + % overlap. There are different options here some of which may be more + % advantageous in other situations; check out Pgfplots' manual here. + % Since 'z buffer=sort' is computationally more expensive for LaTeX, try + % to avoid it for the most default situations, e.g., when dx and dy are + % rank-1-matrices. + if any(~isnan(dx(1,:)) & dx(1,:) ~= dx(2,:)) ... + || any(~isnan(dy(:,1)) & dy(:,1) ~= dy(:,2)) + opts{end+1} = 'z buffer=sort'; + end + + % There are several possibilities of how colors are specified for surface + % plots: + % * explicitly by RGB-values, + % * implicitly through a color map with a point-meta coordinate, + % * implicitly through a color map with a given coordinate (e.g., z). + % + + % Check if we need extra CData. + colors = get(handle, 'CData'); + if length(size(colors)) == 3 && size(colors, 3) == 3 + % Explicit RGB-coded colors. + opts{end+1} = 'mesh/color input=explicit'; + + formatType = 'table[row sep=crcr,header=false,meta index=3]'; + r = colors(:, :, 1); + g = colors(:, :, 2); + b = colors(:, :, 3); + colorFormat = join(m2t, repmat({m2t.ff},[3 1]),','); + color = arrayfun(@(r,g,b)(sprintf(colorFormat,r,g,b)), ... + r(:),g(:),b(:),'UniformOutput',false); + + %formatType = 'table[row sep=crcr,header=false]'; + %formatString = [m2t.ff, ' ', m2t.ff, ' ', m2t.ff, '\\\\\n']; + %data = applyHgTransform(m2t, [dx(:), dy(:), dz(:)]); + + %elseif length(size(colors)) > 2 || any(isnan(colors(:))) + % needsPointmeta = false; + else + opts{end+1} = matlab2pgfplotsColormap(m2t, ... + m2t.currentHandles.colormap); + % If NaNs are present in the color specifications, don't use them for + % Pgfplots; they may be interpreted as strings there. The option + % 'header=false' will be explicitly added. + % Note: + % Pgfplots actually does a better job than MATLAB in determining what + % colors to use for the patches. The circular test case on + % http://www.mathworks.de/de/help/matlab/ref/pcolor.html, for example + % yields a symmetric setup in Pgfplots (and doesn't in MATLAB). + needsPointmeta = any(xor(isnan(dz), isnan(colors)) ... + | (abs(colors - dz) > 1.0e-10)); + if needsPointmeta + % Get color map. + formatType = 'table[row sep=crcr,header=false,meta index=3]'; + opts{end+1} = 'point meta=explicit'; + color = colors(:); + else + formatType = 'table[row sep=crcr,header=false]'; + color = ''; + end + end + data = applyHgTransform(m2t, [dx(:), dy(:), dz(:)]); + + % Add mesh/rows=<num rows> for specifying the row data instead of empty + % lines in the data list below. This makes it possible to reduce the + % data writing to one single sprintf() call. + opts{end+1} = sprintf('mesh/rows=%d', numrows); + + opts = join(m2t, opts, ',\n'); + str = [str, sprintf(['\n\\addplot3[%%\n%s,\n', opts ,']'], plotType)]; + + % TODO Check if surf plot is 'spectrogram' or 'surf' and run corresponding + % algorithm. + % Spectrograms need to have the grid removed, + % m2t.axesContainers{end}.options{end+1} = 'grid=none'; + % Here is where everything is put together. + tabArgs = {'',data(:,1),'',data(:,2),'',data(:,3)}; + if ~isempty(color) + tabArgs(end+1:end+2) = {'',color}; + end + [m2t, table] = makeTable(m2t, tabArgs{:}); + + str = sprintf('%s\n%s {%%\n%s};\n', str, formatType, table); + env = str; + + % TODO: + % - remove grids in spectrogram by either removing grid command + % or adding: 'grid=none' from/in axis options + % - handling of huge data amounts in LaTeX. + + if m2t.cmdOpts.Results.automaticLabels + [m2t, label] = addLabel(m2t); + str = [str, label]; %#ok + end + + m2t.currentAxesContain3dData = true; +end +% ============================================================================== +function [m2t, str] = drawVisibleText(m2t, handle) +% Wrapper for drawText() that only draws visible text + + % There may be some text objects floating around a MATLAB figure which are + % handled by other subfunctions (labels etc.) or don't need to be handled at + % all. + % The HandleVisibility says something about whether the text handle is + % visible as a data structure or not. Typically, a handle is hidden if the + % graphics aren't supposed to be altered, e.g., axis labels. Most of those + % entities are captured by matlab2tikz one way or another, but sometimes they + % are not. This is the case, for example, with polar plots and the axis + % descriptions therein. Also, Matlab treats text objects with a NaN in the + % position as invisible. + if any(isnan(get(handle, 'Position')) | isnan(get(handle, 'Rotation'))) ... + || strcmp(get(handle, 'Visible'), 'off') ... + || (strcmp(get(handle, 'HandleVisibility'), 'off') && ... + ~m2t.cmdOpts.Results.showHiddenStrings) + + str = ''; + return; + end + + [m2t, str] = drawText(m2t, handle); + +end +% ============================================================================== +function [m2t, str] = drawText(m2t, handle) +% Adding text node anywhere in the axes environment. +% Not that, in Pgfplots, long texts get cut off at the axes. This is +% Different from the default MATLAB behavior. To fix this, one could use +% /pgfplots/after end axis/.code. + + str = ''; + + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % get required properties + color = get(handle, 'Color'); + [m2t, tcolor] = getColor(m2t, handle, color, 'patch'); + bgColor = get(handle,'BackgroundColor'); + EdgeColor = get(handle, 'EdgeColor'); + HorizontalAlignment = get(handle, 'HorizontalAlignment'); + String = get(handle, 'String'); + Interpreter = get(handle, 'Interpreter'); + String = prettyPrint(m2t, String, Interpreter); + % Concatenate multiple lines + String = join(m2t, String, '\\'); + VerticalAlignment = get(handle, 'VerticalAlignment'); + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % translate them to pgf style + style = opts_new(); + if ~isNone(bgColor) + [m2t, bcolor] = getColor(m2t, handle, bgColor, 'patch'); + style = opts_add(style, 'fill', bcolor); + end + switch VerticalAlignment + case {'top', 'cap'} + style = opts_add(style, 'below'); + case {'baseline', 'bottom'} + style = opts_add(style, 'above'); + end + switch HorizontalAlignment + case 'left' + style = opts_add(style, 'right'); + case 'right' + style = opts_add(style, 'left'); + end + % Add Horizontal alignment + style = opts_add(style, 'align', HorizontalAlignment); + + % remove invisible border around \node to make the text align precisely + style = opts_add(style, 'inner sep', '0mm'); + + % Add rotation, if existing + defaultRotation = 0.0; + rot = getOrDefault(handle, 'Rotation', defaultRotation); + if rot ~= defaultRotation + style = opts_add(style, 'rotate', sprintf(m2t.ff, rot)); + end + + style = opts_merge(style, getFontStyle(m2t, handle)); + + style = opts_add(style, 'text', tcolor); + if ~isNone(EdgeColor) + [m2t, ecolor] = getColor(m2t, handle, EdgeColor, 'patch'); + style = opts_add(style, 'draw', ecolor); + end + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % plot the thing + pos = get(handle, 'Position'); + units = get(handle, 'Units'); + switch length(pos) + case 2 % Text within a 2d plot + switch units + case 'normalized' + posString = sprintf(['(rel axis cs:', m2t.ff, ',', m2t.ff, ')'], pos); + case 'data' + posString = sprintf(['(axis cs:', m2t.ff, ',', m2t.ff, ')'], pos); + otherwise + defaultUnit = 'cm'; + pos = convertUnits(pos, units, defaultUnit); + posString = ['(' formatDim(pos(1), defaultUnit) ',' ... + formatDim(pos(2), defaultUnit) ')']; + end + + xlim = get(m2t.currentHandles.gca,'XLim'); + ylim = get(m2t.currentHandles.gca,'YLim'); + if pos(1) < xlim(1) || pos(1) > xlim(2) ... + || pos(2) < ylim(1) || pos(2) > ylim(2) + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + 'clip', 'false'); + end + case 3 % Text within a 3d plot + pos = applyHgTransform(m2t, pos); + if strcmp(units, 'normalized') + posString = sprintf(['(rel axis cs:',m2t.ff,',',m2t.ff,',',m2t.ff,')'], pos); + else + posString = sprintf(['(axis cs:',m2t.ff,',',m2t.ff,',',m2t.ff,')'], pos); + end + + xlim = get(m2t.currentHandles.gca, 'XLim'); + ylim = get(m2t.currentHandles.gca, 'YLim'); + zlim = get(m2t.currentHandles.gca, 'ZLim'); + if pos(1) < xlim(1) || pos(1) > xlim(2) ... + || pos(2) < ylim(1) || pos(2) > ylim(2) ... + || pos(3) < zlim(1) || pos(3) > zlim(2) + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + 'clip', 'false'); + end + case 4 % Textbox + % TODO: + % - size of the box (e.g. using node attributes minimum width / height) + % - Alignment of the resized box + switch units + case 'normalized' + posString = sprintf(['(rel axis cs:', m2t.ff, ',', m2t.ff, ')'], pos(1:2)); + case 'data' + posString = sprintf(['(axis cs:', m2t.ff, ',', m2t.ff, ')'], pos(1:2)); + otherwise + defaultUnit = 'cm'; + pos = convertUnits(pos, units, defaultUnit); + posString = ['(' formatDim(pos(1), defaultUnit) ',' ... + formatDim(pos(2), defaultUnit) ')']; + end + + xlim = get(m2t.currentHandles.gca,'XLim'); + ylim = get(m2t.currentHandles.gca,'YLim'); + if pos(1) < xlim(1) || pos(1) > xlim(2) ... + || pos(2) < ylim(1) || pos(2) > ylim(2) + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + 'clip', 'false'); + end + otherwise + error('matlab2tikz:drawText', ... + 'Illegal text position specification.'); + end + str = sprintf('\\node[%s]\nat %s {%s};\n', ... + opts_print(m2t, style, ', '), posString, String); +end +% ============================================================================== +function [m2t, str] = drawRectangle(m2t, handle) + str = ''; + + % there may be some text objects floating around a Matlab figure which + % are handled by other subfunctions (labels etc.) or don't need to be + % handled at all + if strcmp(get(handle, 'Visible'), 'off') ... + || strcmp(get(handle, 'HandleVisibility'), 'off') + return; + end + + % TODO handle Curvature = [0.8 0.4] + + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + lineStyle = get(handle, 'LineStyle'); + lineWidth = get(handle, 'LineWidth'); + if isNone(lineStyle) || lineWidth==0 + return + end + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % Get draw options. + lineOptions = getLineOptions(m2t, lineStyle, lineWidth); + + colorOptions = cell(0); + % fill color + faceColor = get(handle, 'FaceColor'); + if ~isNone(faceColor) + [m2t, xFaceColor] = getColor(m2t, handle, faceColor, 'patch'); + colorOptions{end+1} = sprintf('fill=%s', xFaceColor); + end + % draw color + edgeColor = get(handle, 'EdgeColor'); + lineStyle = get(handle, 'LineStyle'); + if isNone(lineStyle) || isNone(edgeColor) + colorOptions{end+1} = 'draw=none'; + else + [m2t, xEdgeColor] = getColor(m2t, handle, edgeColor, 'patch'); + colorOptions{end+1} = sprintf('draw=%s', xEdgeColor); + end + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + pos = pos2dims(get(handle, 'Position')); + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + drawOptions = [lineOptions, colorOptions]; + % plot the thing + str = sprintf(['\\draw[%s] (axis cs:',m2t.ff,',',m2t.ff, ')', ... + ' rectangle (axis cs:',m2t.ff,',',m2t.ff,');\n'], ... + join(m2t, drawOptions,', '), pos.left, pos.bottom, pos.right, pos.top); +end +% ============================================================================== +function [m2t,surfOptions,plotType] = surfaceOpts(m2t, handle) + faceColor = get(handle, 'FaceColor'); + edgeColor = get(handle, 'EdgeColor'); + + % Check for surf or mesh plot. Second argument in if-check corresponds to + % default values for mesh plot in MATLAB. + if isNone(faceColor) + plotType = 'mesh'; + else + plotType = 'surf'; + end + + surfOptions = cell(0); + + % Set opacity if FaceAlpha < 1 in MATLAB + faceAlpha = get(handle, 'FaceAlpha'); + if isnumeric(faceAlpha) && faceAlpha ~= 1.0 + surfOptions{end+1} = sprintf(['opacity=', m2t.ff], faceAlpha); + end + + % TODO Revisit this selection and create a bunch of test plots. + switch plotType + + % SURFACE + case 'surf' + + % Edge 'none' + if isNone(edgeColor) + if strcmpi(faceColor, 'flat') + surfOptions{end+1} = 'shader=flat'; + elseif strcmpi(faceColor, 'interp'); + surfOptions{end+1} = 'shader=interp'; + end + + % Edge 'interp' + elseif strcmpi(edgeColor, 'interp') + if strcmpi(faceColor, 'interp') + surfOptions{end+1} = 'shader=interp'; + else + surfOptions{end+1} = 'shader=faceted'; + [m2t,xFaceColor] = getColor(m2t, handle, faceColor, 'patch'); + surfOptions{end+1} = sprintf('color=%s',xFaceColor); + end + + % Edge 'flat' + elseif strcmpi(edgeColor, 'flat') + if strcmpi(faceColor, 'flat') + surfOptions{end+1} = 'shader=flat'; + elseif strcmpi(faceColor, 'interp') + surfOptions{end+1} = 'shader=faceted interp'; + elseif isnumeric(faceColor) + [m2t, xFaceColor] = getColor(m2t, handle, faceColor, 'patch'); + surfOptions{end+1} = sprintf('fill=%s',xFaceColor); + end + + % Edge RGB + else + [m2t, xEdgeColor] = getColor(m2t, handle, edgeColor, 'patch'); + surfOptions{end+1} = sprintf('faceted color=%s', xEdgeColor); + if isnumeric(faceColor) + [m2t, xFaceColor] = getColor(m2t, handle, faceColor, 'patch'); + surfOptions{end+1} = sprintf('color=%s', xFaceColor); + else + surfOptions{end+1} = 'shader=faceted'; + end + end + + % MESH + case 'mesh' + if ~isNone(edgeColor) + + % Edge 'interp' + if strcmpi(edgeColor, 'interp') + surfOptions{end+1} = 'shader=flat'; + + % Edge RGB + else + [m2t, xEdgeColor] = getColor(m2t, handle, edgeColor, 'patch'); + surfOptions{end+1} = sprintf('color=%s', xEdgeColor); + end + else + plotType = 'none'; + end + end +end +% ============================================================================== +function [m2t, str] = drawScatterPlot(m2t, h) + str = ''; + + xData = get(h, 'XData'); + yData = get(h, 'YData'); + zData = get(h, 'ZData'); + cData = get(h, 'CData'); + sData = get(h, 'SizeData'); + + matlabMarker = get(h, 'Marker'); + markerFaceColor = get(h, 'MarkerFaceColor'); + markerEdgeColor = get(h, 'MarkerEdgeColor'); + hasFaceColor = ~isNone(markerFaceColor); + hasEdgeColor = ~isNone(markerEdgeColor); + markOptions = cell(0); + [tikzMarker, markOptions] = translateMarker(m2t, matlabMarker, ... + markOptions, hasFaceColor); + + constMarkerkSize = length(sData) == 1; % constant marker size + + % Rescale marker size (not definitive, follow discussion on: + % https://github.com/matlab2tikz/matlab2tikz/pull/316) + sData = translateMarkerSize(m2t, matlabMarker, sqrt(sData)/2); + + if length(cData) == 3 + % No special treatment for the colors or markers are needed. + % All markers have the same color. + if hasFaceColor && ~strcmp(markerFaceColor,'flat'); + [m2t, xcolor] = getColor(m2t, h, markerFaceColor,'patch'); + else + [m2t, xcolor] = getColor(m2t, h, cData, 'patch'); + end + if hasEdgeColor && ~strcmp(markerEdgeColor,'flat'); + [m2t, ecolor] = getColor(m2t, h, markerEdgeColor,'patch'); + else + [m2t, ecolor] = getColor(m2t, h, cData, 'patch'); + end + if constMarkerkSize + drawOptions = { 'only marks', ... + ['mark=' tikzMarker], ... + ['mark options={', join(m2t, markOptions, ','), '}'],... + sprintf('mark size=%.4fpt', sData)}; + if hasFaceColor && hasEdgeColor + drawOptions{end+1} = { ['draw=' ecolor], ... + ['fill=' xcolor] }; + else + drawOptions{end+1} = ['color=' xcolor]; + end + else % if changing marker size but same color on all marks + markerOptions = { ['mark=', tikzMarker], ... + ['mark options={', join(m2t, markOptions, ','), '}'] }; + if hasEdgeColor + markerOptions{end+1} = ['draw=' ecolor]; + else + markerOptions{end+1} = ['draw=' xcolor]; + end + if hasFaceColor + markerOptions{end+1} = ['fill=' xcolor]; + end + % for changing marker size, the 'scatter' option has to be added + drawOptions = { 'scatter', ... + 'only marks', ... + ['color=' xcolor], ... + ['mark=' tikzMarker], ... + ['mark options={', join(m2t, markOptions, ','), '}'] }; + if ~hasFaceColor + drawOptions{end+1} = { ['scatter/use mapped color=' xcolor] }; + else + drawOptions{end+1} = { ['scatter/use mapped color={', join(m2t, markerOptions,','), '}'] }; + end + end + elseif size(cData,2) == 3 + drawOptions = { 'only marks' ... + % TODO Get this in order as soon as Pgfplots can do "scatter rgb". + % 'scatter rgb' ... + }; + else + markerOptions = { ['mark=', tikzMarker], ... + ['mark options={', join(m2t, markOptions, ','), '}'] }; + if hasEdgeColor && hasFaceColor + [m2t, ecolor] = getColor(m2t, h, markerEdgeColor,'patch'); + markerOptions{end+1} = ['draw=' ecolor]; + else + markerOptions{end+1} = 'draw=mapped color'; + end + if hasFaceColor + markerOptions{end+1} = 'fill=mapped color'; + end + drawOptions = { 'scatter', ... + 'only marks', ... + 'scatter src=explicit', ... + ['scatter/use mapped color={', join(m2t, markerOptions,','), '}'] }; + % Add color map. + m2t.axesContainers{end}.options = ... + opts_append(m2t.axesContainers{end}.options, ... + matlab2pgfplotsColormap(m2t, m2t.currentHandles.colormap), []); + end + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % Plot the thing. + if isempty(zData) + env = 'addplot'; + if length(sData) == 1 + nColumns = 2; + data = [xData(:), yData(:)]; + else + nColumns = 3; + sColumn = 2; + data = [xData(:), yData(:), sData(:)]; + end + else + env = 'addplot3'; + m2t.currentAxesContain3dData = true; + if length(sData) == 1 + nColumns = 3; + data = applyHgTransform(m2t, [xData(:),yData(:),zData(:)]); + else + nColumns = 4; + sColumn = 3; + data = applyHgTransform(m2t, [xData(:),yData(:),zData(:),sData(:)]); + end + end + if ~constMarkerkSize % + drawOptions{end+1} = { ['visualization depends on={\thisrowno{', num2str(sColumn), '} \as \perpointmarksize}'], ... + 'scatter/@pre marker code/.append style={/tikz/mark size=\perpointmarksize}' }; + end + drawOpts = join(m2t, drawOptions, ','); + + metaPart = ''; + if length(cData) == 3 + % If size(cData,1)==1, then all the colors are the same and have + % already been accounted for above. + + elseif size(cData,2) == 3 + %TODO Hm, can't deal with this? + %[m2t, col] = rgb2colorliteral(m2t, cData(k,:)); + %str = strcat(str, sprintf(' [%s]\n', col)); + else + metaPart = sprintf('meta index=%d',size(data,2)); + data = [data, cData(:)]; + nColumns = nColumns + 1; + end + + % The actual printing. + [m2t, table] = makeTable(m2t, repmat({''},1,nColumns), data); + str = sprintf('%s\\%s[%s] plot table[row sep=crcr,%s]{%s};\n', str, env, ... + drawOpts, metaPart, table); +end +% ============================================================================== +function [m2t, str] = drawBarseries(m2t, h) +% Takes care of plots like the ones produced by MATLAB's hist. +% The main pillar is Pgfplots's '{x,y}bar' plot. +% +% TODO Get rid of code duplication with 'drawAxes'. + + str = ''; + + if ~isVisible(h) + return; % don't bother drawing invisible things + end + + % drawAxes sets m2t.barplotId to 0, so all values are recomputed for subplots. + if m2t.barplotId == 0 + % 'barplotId' provides a consecutively numbered ID for each + % barseries plot. This allows for a proper handling of multiple bars. + m2t.barplotTotalNumber = []; + m2t.barShifts = []; + m2t.barAddedAxisOption = false; + end + + % Add 'log origin = infty' if BaseValue differs from zero (log origin=0 is + % the default behaviour since Pgfplots v1.5). + baseValue = get(h, 'BaseValue'); + if baseValue ~= 0.0 + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + 'log origin', 'infty'); + end + + [m2t, numBars] = countBarplotSiblings(m2t, h); + + xData = get(h, 'XData'); + yData = get(h, 'YData'); + + % init drawOptions + drawOptions = opts_new(); + + barlayout = get(h, 'BarLayout'); + isHoriz = strcmp(get(h, 'Horizontal'), 'on'); + if (isHoriz) + barType = 'xbar'; + else + barType = 'ybar'; + end + switch barlayout + case 'grouped' % grouped bar plots + m2t.barplotId = m2t.barplotId + 1; + + % Maximum group width relative to the minimum distance between two + % x-values. See <MATLAB>/toolbox/matlab/specgraph/makebars.m + maxGroupWidth = 0.8; + if numBars == 1 + groupWidth = 1.0; + else + groupWidth = min(maxGroupWidth, numBars/(numBars+1.5)); + end + + % Calculate the width of each bar and the center point shift as in + % makebars.m + if isempty(m2t.barShifts) + % Get the shifts of the bar centers. + % In case of numBars==1, this returns 0, + % In case of numBars==2, this returns [-1/4, 1/4], + % In case of numBars==3, this returns [-1/3, 0, 1/3], + % and so forth. + barWidth = groupWidth/numBars; % assumption + m2t.barShifts = ((1:numBars) - 0.5) * barWidth - groupWidth/2; + end + + % From http://www.mathworks.com/help/techdoc/ref/bar.html: + % bar(...,width) sets the relative bar width and controls the + % separation of bars within a group. The default width is 0.8, so if + % you do not specify X, the bars within a group have a slight + % separation. If width is 1, the bars within a group touch one + % another. The value of width must be a scalar. + barWidth = get(h, 'BarWidth') * groupWidth / numBars; + + if numel(xData) == 1 + dx = 1; + else + dx = min(diff(xData)); % used as scaling factor for all other lengths + end + + % MATLAB treats shift and width in normalized coordinate units, + % whereas Pgfplots requires physical units (pt,cm,...); hence + % have the units converted. + if (isHoriz) + physicalBarWidth = dx * barWidth * m2t.unitlength.y.value; + physicalBarShift = dx * m2t.barShifts(m2t.barplotId) * m2t.unitlength.y.value; + physicalBarUnit = m2t.unitlength.y.unit; + else + physicalBarWidth = dx * barWidth * m2t.unitlength.x.value; + physicalBarShift = dx * m2t.barShifts(m2t.barplotId) * m2t.unitlength.x.value; + physicalBarUnit = m2t.unitlength.x.unit; + end + drawOptions = opts_add(drawOptions, barType); + drawOptions = opts_add(drawOptions, 'bar width', ... + formatDim(physicalBarWidth, physicalBarUnit)); + if physicalBarShift ~= 0.0 + drawOptions = opts_add(drawOptions, 'bar shift', ... + formatDim(physicalBarShift, physicalBarUnit)); + end + + case 'stacked' % stacked plots + % Pass option to parent axis & disallow anything but stacked plots + % Make sure this happens exactly *once*. + + if ~m2t.barAddedAxisOption + bWFactor = get(h, 'BarWidth'); + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, ... + 'bar width', ... + formatDim(m2t.unitlength.x.value*bWFactor, m2t.unitlength.x.unit)); + m2t.barAddedAxisOption = true; + end + + % Somewhere between pgfplots 1.5 and 1.8 and starting + % again from 1.11, the option {x|y}bar stacked can be applied to + % \addplot instead of the figure and thus allows to combine stacked + % bar plots and other kinds of plots in the same axis. + % Thus, it is advisable to use pgfplots 1.11. In older versions, the + % plot will only contain a single bar series, but should compile fine. + m2t = needsPgfplotsVersion(m2t, [1,11]); + drawOptions = opts_add(drawOptions, [barType ' stacked']); + otherwise + error('matlab2tikz:drawBarseries', ... + 'Don''t know how to handle BarLayout ''%s''.', barlayout); + end + + % define edge color + edgeColor = get(h, 'EdgeColor'); + lineStyle = get(h, 'LineStyle'); + if isNone(lineStyle) || isNone(edgeColor) + drawOptions = opts_add(drawOptions, 'draw', 'none'); + else + [m2t, xEdgeColor] = getColor(m2t, h, edgeColor, 'patch'); + drawOptions = opts_add(drawOptions, 'draw', xEdgeColor); + end + + [m2t, drawOptions] = getFaceColorOfBar(m2t, h, drawOptions); + + % Add 'area legend' to the options as otherwise the legend indicators + % will just highlight the edges. + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, 'area legend'); + + % plot the thing + if isHoriz + [yDataPlot, xDataPlot] = deal(xData, yData); % swap values + else + [xDataPlot, yDataPlot] = deal(xData, yData); + end + + drawOpts = opts_print(m2t, drawOptions, ','); + [m2t, table ] = makeTable(m2t, '', xDataPlot, '', yDataPlot); + str = sprintf('\\addplot[%s] plot table[row sep=crcr] {%s};\n', drawOpts, table); +end +% ============================================================================== +function [m2t, numBars] = countBarplotSiblings(m2t, h) +% Count the number of sibling bar plots + if isempty(m2t.barplotTotalNumber) + m2t.barplotTotalNumber = 0; + siblings = get(get(h, 'Parent'), 'Children'); + for s = siblings(:)' + + if ~isVisible(s) + continue; % skip invisible objects + end + + if any(strcmpi(get(s, 'Type'), {'hggroup','Bar'})) + cl = class(handle(s)); + switch cl + case {'specgraph.barseries', 'matlab.graphics.chart.primitive.Bar'} + m2t.barplotTotalNumber = m2t.barplotTotalNumber + 1; + case 'specgraph.errorbarseries' + % TODO + % Unfortunately, MATLAB(R) treats error bars and + % corresponding bar plots as siblings of a common axes + % object. For error bars to work with bar plots -- which + % is trivially possible in Pgfplots -- one has to match + % errorbar and bar objects (probably by their values). + userWarning(m2t, 'Error bars discarded (to be implemented).'); + otherwise + error('matlab2tikz:drawBarseries', ... + 'Unknown class''%s''.', cl); + end + end + end + end + numBars = m2t.barplotTotalNumber; +end +% ============================================================================== +function [m2t, drawOptions] = getFaceColorOfBar(m2t, h, drawOptions) +% retrieve the FaceColor of a barseries object + if ~isempty(get(h,'Children')) + % quite oddly, before MATLAB R2014b this value is stored in a child + % patch and not in the object itself + obj = get(h, 'Children'); + else % R2014b and newer + obj = h; + end + faceColor = get(obj, 'FaceColor'); + if ~isNone(faceColor) + [m2t, xFaceColor] = getColor(m2t, h, faceColor, 'patch'); + drawOptions = opts_add(drawOptions, 'fill', xFaceColor); + end +end +% ============================================================================== +function [m2t, str] = drawStemSeries(m2t, h) + [m2t, str] = drawStemOrStairSeries_(m2t, h, 'ycomb'); +end +function [m2t, str] = drawStairSeries(m2t, h) + [m2t, str] = drawStemOrStairSeries_(m2t, h, 'const plot'); +end +function [m2t, str] = drawStemOrStairSeries_(m2t, h, plotType) + str = ''; + + lineStyle = get(h, 'LineStyle'); + lineWidth = get(h, 'LineWidth'); + marker = get(h, 'Marker'); + + if ((isNone(lineStyle) || lineWidth==0) && isNone(marker)) + return % nothing to plot! + end + + %% deal with draw options + color = get(h, 'Color'); + [m2t, plotColor] = getColor(m2t, h, color, 'patch'); + + lineOptions = getLineOptions(m2t, lineStyle, lineWidth); + [m2t, markerOptions] = getMarkerOptions(m2t, h); + + drawOptions = [plotType, ... + sprintf('color=%s', plotColor),... + lineOptions, ... + markerOptions]; + + %% insert draw options + drawOpts = join(m2t, drawOptions, ','); + + %% plot the thing + xData = get(h, 'XData'); + yData = get(h, 'YData'); + [m2t, table] = makeTable(m2t, '', xData, '', yData); + + str = sprintf('%s\\addplot[%s] plot table[row sep=crcr] {%s};\n', ... + str, drawOpts, table); +end +% ============================================================================== +function [m2t, str] = drawAreaSeries(m2t, h) +% Takes care of MATLAB's stem plots. +% +% TODO Get rid of code duplication with 'drawAxes'. + + str = ''; + + if ~isfield(m2t, 'addedAreaOption') || isempty(m2t.addedAreaOption) || ~m2t.addedAreaOption + % Add 'area style' to axes options. + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, 'area style', []); + m2t.axesContainers{end}.options = ... + opts_add(m2t.axesContainers{end}.options, 'stack plots', 'y'); + m2t.addedAreaOption = true; + end + + % Handle draw options. + % define edge color + drawOptions = {}; + edgeColor = get(h, 'EdgeColor'); + [m2t, xEdgeColor] = getColor(m2t, h, edgeColor, 'patch'); + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % define face color; + if ~isempty(get(h,'Children')) + % quite oddly, before MATLAB R2014b this value is stored in a child + % patch and not in the object itself + obj = get(h, 'Children'); + else % R2014b and newer + obj = h; + end + faceColor = get(obj, 'FaceColor'); + [m2t, xFaceColor] = getColor(m2t, h, faceColor, 'patch'); + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % gather the draw options + lineStyle = get(h, 'LineStyle'); + drawOptions{end+1} = sprintf('fill=%s', xFaceColor); + if isNone(lineStyle) + drawOptions{end+1} = 'draw=none'; + else + drawOptions{end+1} = sprintf('draw=%s', xEdgeColor); + end + drawOpts = join(m2t, drawOptions, ','); + + % plot the thing + xData = get(h, 'XData'); + yData = get(h, 'YData'); + [m2t, table] = makeTable(m2t, '', xData, '', yData); + str = sprintf('%s\\addplot[%s] plot table[row sep=crcr]{%s}\n\\closedcycle;\n',... + str, drawOpts, table); +end +% ============================================================================== +function [m2t, str] = drawQuiverGroup(m2t, h) +% Takes care of MATLAB's quiver plots. + + % used for arrow styles, in case there are more than one quiver fields + m2t.quiverId = m2t.quiverId + 1; + + str = ''; + + [x,y,z,u,v,w,is3D] = getAndRescaleQuivers(h); + + % prepare output + if is3D + name = 'addplot3'; + format = [m2t.ff,',',m2t.ff,',',m2t.ff]; + m2t.currentAxesContain3dData = true; + else % 2D plotting + name = 'addplot'; + format = [m2t.ff,',',m2t.ff]; + end + + data = NaN(6,numel(x)); + data(1,:) = x; + data(2,:) = y; + data(3,:) = z; + data(4,:) = x + u; + data(5,:) = y + v; + data(6,:) = z + w; + + if ~is3D + data([3 6],:) = []; % remove Z-direction + end + + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % gather the arrow options + showArrowHead = get(h, 'ShowArrowHead'); + lineStyle = get(h, 'LineStyle'); + lineWidth = get(h, 'LineWidth'); + + if (isNone(lineStyle) || lineWidth==0) && ~showArrowHead + return + end + + arrowOpts = cell(0); + if showArrowHead + arrowOpts = [arrowOpts, '->']; + else + arrowOpts = [arrowOpts, '-']; + end + + color = get(h, 'Color'); + [m2t, arrowcolor] = getColor(m2t, h, color, 'patch'); + arrowOpts = [arrowOpts, ... + sprintf('color=%s', arrowcolor), ... % color + getLineOptions(m2t, lineStyle, lineWidth), ... % line options + ]; + + % define arrow style + arrowOptions = join(m2t, arrowOpts, ','); + + % Append the arrow style to the TikZ options themselves. + % TODO: Look into replacing this by something more 'local', + % (see \pgfplotset{}). + m2t.content.options = opts_add(m2t.content.options,... + sprintf('arrow%d/.style', m2t.quiverId), ... + ['{', arrowOptions, '}']); + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % return the vector field code + str = [str, ... + sprintf(['\\',name,' [arrow',num2str(m2t.quiverId), '] ', ... + 'coordinates{(',format,') (',format,')};\n'],... + data)]; + %FIXME: external +end +% ============================================================================== +function [x,y,z,u,v,w,is3D] = getAndRescaleQuivers(h) +% get and rescale the arrows from a quivergroup object + x = get(h, 'XData'); + y = get(h, 'YData'); + z = getOrDefault(h, 'ZData', []); + + u = get(h, 'UData'); + v = get(h, 'VData'); + w = getOrDefault(h, 'WData', []); + + if isempty(z) + z = 0; + w = 0; + is3D = false; + else + is3D = true; + end + + % MATLAB uses a scaling algorithm to determine the size of the arrows. + % Before R2014b, the processed coordinates were available. This is no longer + % the case, so we have to re-implement it. In MATLAB it is implemented in + % the |quiver3| (and |quiver|) function. + if any(size(x)==1) + nX = sqrt(numel(x)); nY = nX; + else + [nY, nX] = size(x); + end + range = @(xyzData)(max(xyzData(:)) - min(xyzData(:))); + euclid = @(x,y,z)(sqrt(x.^2 + y.^2 + z.^2)); + dx = range(x)/nX; + dy = range(y)/nY; + dz = range(z)/max(nX,nY); + dd = euclid(dx, dy, dz); + if dd > 0 + vectorLength = euclid(u/dd,v/dd,w/dd); + maxLength = max(vectorLength(:)); + else + maxLength = 1; + end + if getOrDefault(h, 'AutoScale', true) + scaleFactor = getOrDefault(h,'AutoScaleFactor', 0.9) / maxLength; + else + scaleFactor = 1; + end + x = x(:).'; u = u(:).'*scaleFactor; + y = y(:).'; v = v(:).'*scaleFactor; + z = z(:).'; w = w(:).'*scaleFactor; +end +% ============================================================================== +function [m2t, str] = drawErrorBars(m2t, h) +% Takes care of MATLAB's error bar plots. + if isa(h,'matlab.graphics.chart.primitive.ErrorBar') % MATLAB R2014b+ + hData = h; + upDev = get(h, 'UData'); + loDev = get(h, 'LData'); + + yDeviations = [upDev(:), loDev(:)]; + + else % Legacy Handling (Octave and MATLAB R2014a and older): + % 'errorseries' plots have two line-plot children, one of which contains + % the information about the center points; 'XData' and 'YData' components + % are both of length n. + % The other contains the information about the deviations (errors), more + % more precisely: the lines to be drawn. Those are + % ___ + % | + % | + % X <-- (x0,y0) + % | + % _|_ + % + % X: x0, x0, x0-eps, x0+eps, x0-eps, x0+eps; + % Y: y0-dev, y0+dev, y0-dev, y0-dev, y0+dev, y0+dev. + % + % Hence, 'XData' and 'YData' are of length 6*n and contain redundant info. + % Some versions of MATLAB(R) insert more columns with NaNs (to be able to + % pass the entire X, Y arrays into plot()) such that the data is laid out as + % + % X: x0, x0, NaN, x0-eps, x0+eps, NaN, x0-eps, x0+eps; + % Y: y0-dev, y0+dev, NaN, y0-dev, y0-dev, NaN, y0+dev, y0+dev, + % + % or with another columns of NaNs added at the end. + c = get(h, 'Children'); + + % Find out which contains the data and which the deviations. + %TODO: this can be simplified using sort + n1 = length(get(c(1),'XData')); + n2 = length(get(c(2),'XData')); + if n2 == 6*n1 + % 1 contains centerpoint info + dataIdx = 1; + errorIdx = 2; + numDevData = 6; + elseif n1 == 6*n2 + % 2 contains centerpoint info + dataIdx = 2; + errorIdx = 1; + numDevData = 6; + elseif n2 == 9*n1-1 || n2 == 9*n1 + % 1 contains centerpoint info + dataIdx = 1; + errorIdx = 2; + numDevData = 9; + elseif n1 == 9*n2-1 || n1 == 9*n2 + % 2 contains centerpoint info + dataIdx = 2; + errorIdx = 1; + numDevData = 9; + else + error('drawErrorBars:errorMatch', ... + 'Sizes of and error data not matching (6*%d ~= %d and 6*%d ~= %d, 9*%d-1 ~= %d, 9*%d-1 ~= %d).', ... + n1, n2, n2, n1, n1, n2, n2, n1); + end + hData = c(dataIdx); + hError = c(errorIdx); + + % prepare error array (that is, gather the y-deviations) + yValues = get(hData , 'YData'); + yErrors = get(hError, 'YData'); + + n = length(yValues); + + yDeviations = zeros(n, 2); + + %TODO: this can be vectorized + for k = 1:n + % upper deviation + kk = numDevData*(k-1) + 1; + upDev = abs(yValues(k) - yErrors(kk)); + + % lower deviation + kk = numDevData*(k-1) + 2; + loDev = abs(yValues(k) - yErrors(kk)); + + yDeviations(k,:) = [upDev loDev]; + end + end + % Now run drawLine() with deviation information. + [m2t, str] = drawLine(m2t, hData, yDeviations); +end +% ============================================================================== +function [m2t, str] = drawEllipse(m2t, handle) +% Takes care of MATLAB's ellipse annotations. +% + +% c = get(h, 'Children'); + + p = get(handle,'position'); + radius = p([3 4]) / 2; + center = p([1 2]) + radius; + + str = ''; + + lineStyle = get(handle, 'LineStyle'); + lineWidth = get(handle, 'LineWidth'); + + color = get(handle, 'Color'); + [m2t, xcolor] = getColor(m2t, handle, color, 'patch'); + lineOptions = getLineOptions(m2t, lineStyle, lineWidth); + + filling = get(handle, 'FaceColor'); + + %% Has a filling? + if isNone(filling) + drawOptions = [{sprintf('%s', xcolor)}, ... % color + lineOptions]; + drawCommand = '\draw'; + else + [m2t, xcolorF] = getColor(m2t, handle, filling, 'patch'); + drawOptions = [{sprintf('draw=%s,fill=%s', xcolor,xcolorF)}, ... % color + lineOptions]; + drawCommand = '\filldraw'; + end + + opt = join(m2t, drawOptions, ','); + + str = sprintf('%s [%s] (axis cs:%g,%g) ellipse [x radius=%g, y radius=%g];\n', ... + drawCommand, opt, center, radius); +end +% ============================================================================== +function [m2t, str] = drawTextarrow(m2t, handle) +% Takes care of MATLAB's textarrow annotations. + + % handleAllChildren to draw the arrow + [m2t, str] = handleAllChildren(m2t, handle); + + % handleAllChildren ignores the text, unless hidden strings are shown + if ~m2t.cmdOpts.Results.showHiddenStrings + child = findobj(handle, 'type', 'text'); + [m2t, str{end+1}] = drawText(m2t, child); + end +end +% ============================================================================== +function out = linearFunction(X, Y) +% Return the linear function that goes through (X[1], Y[1]), (X[2], Y[2]). + out = @(x) (Y(2,:)*(x-X(1)) + Y(1,:)*(X(2)-x)) / (X(2)-X(1)); +end +% ============================================================================== +function matlabColormap = pgfplots2matlabColormap(points, rgb, numColors) +% Translates a Pgfplots colormap to a MATLAB color map. + matlabColormap = zeros(numColors, 3); + % Point indices between which to interpolate. + I = [1, 2]; + f = linearFunction(points(I), rgb(I,:)); + for k = 1:numColors + x = (k-1)/(numColors-1) * points(end); + if x > points(I(2)) + I = I + 1; + f = linearFunction(points(I), rgb(I,:)); + end + matlabColormap(k,:) = f(x); + end +end +% ============================================================================== +function pgfplotsColormap = matlab2pgfplotsColormap(m2t, matlabColormap) +% Translates a MATLAB color map into a Pgfplots colormap. + +% First check if we could use a default Pgfplots color map. +% Unfortunately, MATLAB and Pgfplots color maps will never exactly coincide +% except to the most simple cases such as blackwhite. This is because of a +% slight incompatibility of Pgfplots and MATLAB colormaps: +% In MATLAB, indexing goes from 1 through 64, whereas in Pgfplots you can +% specify any range, the default ones having something like +% (0: red, 1: yellow, 2: blue). +% To specify this exact color map in MATLAB, one would have to put 'red' at +% 1, blue at 64, and yellow in the middle of the two, 32.5 that is. +% Not really sure how MATLAB rounds here: 32, 33? Anyways, it will be +% slightly off and hence not match the Pgfplots color map. +% As a workaround, build the MATLAB-formatted colormaps of Pgfplots default +% color maps, and check if matlabColormap is close to it. If yes, take it. + +% For now, comment out the color maps which haven't landed yet in Pgfplots. + pgfmaps = { %struct('name', 'colormap/autumn', ... + % 'points', [0,1], ... + % 'values', [[1,0,0];[1,1,0]]), ... + %struct('name', 'colormap/bled', ... + % 'points', 0:6, ... + % 'values', [[0,0,0];[43,43,0];[0,85,0];[0,128,128];[0,0,170];[213,0,213];[255,0,0]]/255), ... + %struct('name', 'colormap/bright', ... + % 'points', 0:7, ... + % 'values', [[0,0,0];[78,3,100];[2,74,255];[255,21,181];[255,113,26];[147,213,114];[230,255,0];[255,255,255]]/255), ... + %struct('name', 'colormap/bone', ... + % 'points', [0,3,6,8], ... + % 'values', [[0,0,0];[84,84,116];[167,199,199];[255,255,255]]/255), ... + %struct('name', 'colormap/cold', ... + % 'points', 0:3, ... + % 'values', [[0,0,0];[0,0,1];[0,1,1];[1,1,1]]), ... + %struct('name', 'colormap/copper', ... + % 'points', [0,4,5], ... + % 'values', [[0,0,0];[255,159,101];[255,199,127]]/255), ... + %struct('name', 'colormap/copper2', ... + % 'points', 0:4, ... + % 'values', [[0,0,0];[68,62,63];[170,112,95];[207,194,138];[255,255,255]]/255), ... + %struct('name', 'colormap/hsv', ... + % 'points', 0:6, ... + % 'values', [[1,0,0];[1,1,0];[0,1,0];[0,1,1];[0,0,1];[1,0,1];[1,0,0]]), ... + struct('name', 'colormap/hot', ... + 'points', 0:3, ... + 'values', [[0,0,1];[1,1,0];[1,0.5,0];[1,0,0]]), ... % TODO check this + struct('name', 'colormap/hot2', ... + 'points', [0,3,6,8], ... + 'values', [[0,0,0];[1,0,0];[1,1,0];[1,1,1]]), ... + struct('name', 'colormap/jet', ... + 'points', [0,1,3,5,7,8], ... + 'values', [[0,0,128];[0,0,255];[0,255,255];[255,255,0];[255,0,0];[128,0,0]]/255), ... + struct('name', 'colormap/blackwhite', ... + 'points', [0,1], ... + 'values', [[0,0,0];[1,1,1]]), ... + struct('name', 'colormap/bluered', ... + 'points', 0:5, ... + 'values', [[0,0,180];[0,255,255];[100,255,0];[255,255,0];[255,0,0];[128,0,0]]/255), ... + struct('name', 'colormap/cool', ... + 'points', [0,1,2], ... + 'values', [[255,255,255];[0,128,255];[255,0,255]]/255), ... + struct('name', 'colormap/greenyellow', ... + 'points', [0,1], ... + 'values', [[0,128,0];[255,255,0]]/255), ... + struct('name', 'colormap/redyellow', ... + 'points', [0,1], ... + 'values', [[255,0,0];[255,255,0]]/255), ... + struct('name', 'colormap/violet', ... + 'points', [0,1,2], ... + 'values', [[25,25,122];[255,255,255];[238,140,238]]/255) ... + }; + + % The tolerance is a subjective matter of course. + % Some figures: + % * The norm-distance between MATLAB's gray and bone is 6.8e-2. + % * The norm-distance between MATLAB's jet and Pgfplots's jet is 2.8e-2. + % * The norm-distance between MATLAB's hot and Pgfplots's hot2 is 2.1e-2. + tol = 5.0e-2; + + for map = pgfmaps + numColors = size(matlabColormap, 1); + mmap = pgfplots2matlabColormap(map{1}.points, map{1}.values, numColors); + alpha = norm(matlabColormap - mmap) / sqrt(numColors); + if alpha < tol + userInfo(m2t, 'Found %s to be a pretty good match for your color map (||diff||=%g).', ... + map{1}.name, alpha); + pgfplotsColormap = map{1}.name; + return + end + end + + % Build a custom color map. + % Loop over the data, stop at each spot where the linear + % interpolation is interrupted, and set a color mark there. + m = size(matlabColormap, 1); + steps = [1, 2]; + % A colormap with a single color is valid in MATLAB but an error in + % pgfplots. Repeating the color produces the desired effect in this + % case. + if m==1 + colors=[matlabColormap(1,:);matlabColormap(1,:)]; + else + colors = [matlabColormap(1,:); matlabColormap(2,:)]; + f = linearFunction(steps, colors); + k = 3; + while k <= m + if norm(matlabColormap(k,:) - f(k)) > 1.0e-10 + % Add the previous step to the color list + steps(end) = k-1; + colors(end,:) = matlabColormap(k-1,:); + steps = [steps, k]; + colors = [colors; matlabColormap(k,:)]; + f = linearFunction(steps(end-1:end), colors(end-1:end,:)); + end + k = k+1; + end + steps(end) = m; + colors(end,:) = matlabColormap(m,:); + end + + % Get it in Pgfplots-readable form. + unit = 'pt'; + colSpecs = {}; + for k = 1:length(steps) + x = steps(k)-1; + sprintf('rgb(%d%s)=(%g, %g, %g)', x, unit, colors(k)); + colSpecs{k} = sprintf('rgb(%d%s)=(%g,%g,%g)', x, unit, colors(k,:)); + end + pgfplotsColormap = sprintf('colormap={mymap}{[1%s] %s}', unit, join(m2t, colSpecs, '; ')); +end +% ============================================================================== +function fontStyle = getFontStyle(m2t, handle) + fontStyle = ''; + if strcmpi(get(handle, 'FontWeight'),'Bold') + fontStyle = sprintf('%s\\bfseries',fontStyle); + end + if strcmpi(get(handle, 'FontAngle'), 'Italic') + fontStyle = sprintf('%s\\itshape',fontStyle); + end + if m2t.cmdOpts.Results.strictFontSize + fontSize = get(handle,'FontSize'); + fontUnits = matlab2texUnits(get(handle,'FontUnits'), 'pt'); + fontStyle = sprintf('\\fontsize{%d%s}{1em}%s\\selectfont',fontSize,fontUnits,fontStyle); + else + % don't try to be smart and "translate" MATLAB font sizes to proper LaTeX + % ones: it cannot be done. LaTeX uses semantic sizes (e.g. \small) + % whose actual dimensions depend on the document style, context, ... + end + + if ~isempty(fontStyle) + fontStyle = opts_add(opts_new, 'font', fontStyle); + else + fontStyle = opts_new(); + end +end +% ============================================================================== +function axisOptions = getColorbarOptions(m2t, handle) + + % begin collecting axes options + axisOptions = opts_new(); + cbarOptions = {}; + cbarStyleOptions = opts_new(); + + % set position, ticks etc. of the colorbar + loc = get(handle, 'Location'); + + switch lower(loc) % case insensitive (MATLAB: CamelCase, Octave: lower case) + case 'north' + cbarOptions{end+1} = 'horizontal'; + cbarStyleOptions = opts_add(cbarStyleOptions, 'at',... + '{(0.5,0.97)}'); + cbarStyleOptions = opts_add(cbarStyleOptions, 'anchor',... + 'north'); + cbarStyleOptions = opts_add(cbarStyleOptions,... + 'xticklabel pos', 'lower'); + cbarStyleOptions = opts_add(cbarStyleOptions, 'width',... + '0.97*\pgfkeysvalueof{/pgfplots/parent axis width}'); + case 'south' + cbarOptions{end+1} = 'horizontal'; + cbarStyleOptions = opts_add(cbarStyleOptions, 'at',... + '{(0.5,0.03)}'); + cbarStyleOptions = opts_add(cbarStyleOptions, 'anchor', ... + 'south'); + cbarStyleOptions = opts_add(cbarStyleOptions, ... + 'xticklabel pos','upper'); + cbarStyleOptions = opts_add(cbarStyleOptions, 'width',... + '0.97*\pgfkeysvalueof{/pgfplots/parent axis width}'); + case 'east' + cbarOptions{end+1} = 'right'; + cbarStyleOptions = opts_add(cbarStyleOptions, 'at',... + '{(0.97,0.5)}'); + cbarStyleOptions = opts_add(cbarStyleOptions, 'anchor', ... + 'east'); + cbarStyleOptions = opts_add(cbarStyleOptions, ... + 'xticklabel pos','left'); + cbarStyleOptions = opts_add(cbarStyleOptions, 'width',... + '0.97*\pgfkeysvalueof{/pgfplots/parent axis width}'); + case 'west' + cbarOptions{end+1} = 'left'; + cbarStyleOptions = opts_add(cbarStyleOptions, 'at',... + '{(0.03,0.5)}'); + cbarStyleOptions = opts_add(cbarStyleOptions, 'anchor',... + 'west'); + cbarStyleOptions = opts_add(cbarStyleOptions,... + 'xticklabel pos', 'right'); + cbarStyleOptions = opts_add(cbarStyleOptions, 'width',... + '0.97*\pgfkeysvalueof{/pgfplots/parent axis width}'); + case 'eastoutside' + %cbarOptions{end+1} = 'right'; + case 'westoutside' + cbarOptions{end+1} = 'left'; + case 'northoutside' + % TODO move to top + cbarOptions{end+1} = 'horizontal'; + cbarStyleOptions = opts_add(cbarStyleOptions, 'at',... + '{(0.5,1.03)}'); + cbarStyleOptions = opts_add(cbarStyleOptions, 'anchor',... + 'south'); + cbarStyleOptions = opts_add(cbarStyleOptions,... + 'xticklabel pos', 'upper'); + case 'southoutside' + + cbarOptions{end+1} = 'horizontal'; + otherwise + error('matlab2tikz:getColorOptions:unknownLocation',... + 'getColorbarOptions: Unknown ''Location'' %s.', loc) + end + + % axis label and direction + if isHG2(m2t) + % VERSION: Starting from R2014b there is only one field `label`. + % The colorbar's position determines, if it should be a x- or y-label. + + % label + % TODO: Move redundant interpreter and multiline code to a separate + % function. It is duplicated below in 'title' and in functions + % 'getAxisOptions' and 'drawTitleOfAxes'. + labelString = get(get(handle, 'Label'), 'String'); + if ~isempty(labelString) % add only, if not empty + labelInterpreter = get(get(handle, 'Label'), 'Interpreter'); + labelString = prettyPrint(m2t, labelString, labelInterpreter); + if length(labelString) > 1 % multiline + cbarStyleOptions = opts_add(cbarStyleOptions, 'label style', ... + '{align=center}'); + end + labelString = join(m2t, labelString, '\\[1ex]'); + + if ~isempty(cbarOptions) && strcmpi(cbarOptions{1}, 'horizontal') + labelOption = 'xlabel'; + else + labelOption = 'ylabel'; + end + + cbarStyleOptions = opts_add(cbarStyleOptions, labelOption, ... + sprintf('{%s}', labelString)); + end + + % direction + dirString = get(handle, 'Direction'); + if ~strcmpi(dirString, 'normal') % only if not 'normal' + if ~isempty(cbarOptions) && strcmpi(cbarOptions{1}, 'horizontal') + dirOption = 'x dir'; + else + dirOption = 'y dir'; + end + cbarStyleOptions = opts_add(cbarStyleOptions, dirOption, dirString); + end + + % TODO HG2: colorbar ticks and colorbar tick labels + + else + % VERSION: Up to MATLAB R2014a and OCTAVE + [m2t, xo] = getAxisOptions(m2t, handle, 'x'); + [m2t, yo] = getAxisOptions(m2t, handle, 'y'); + xyo = opts_merge(xo, yo); + xyo = opts_remove(xyo, 'xmin','xmax','xtick','ymin','ymax','ytick'); + + cbarStyleOptions = opts_merge(cbarStyleOptions, xyo); + end + + % title + title = get(get(handle, 'Title'), 'String'); + if ~isempty(title) + titleInterpreter = get(get(handle, 'Title'), 'Interpreter'); + title = prettyPrint(m2t, title, titleInterpreter); + if length(title) > 1 % multiline + cbarStyleOptions = opts_add(cbarStyleOptions, 'title style', ... + '{align=center}'); + end + title = join(m2t, title, '\\[1ex]'); + cbarStyleOptions = opts_add(cbarStyleOptions, 'title', ... + sprintf('{%s}', title)); + end + + if m2t.cmdOpts.Results.strict + % Sampled colors. + numColors = size(m2t.currentHandles.colormap, 1); + cbarOptions{end+1} = 'sampled'; + cbarStyleOptions = opts_add(cbarStyleOptions, 'samples', ... + sprintf('%d', numColors+1)); + + end + + % Merge them together in axisOptions. + if isempty(cbarOptions) + axisOptions = opts_add(axisOptions, 'colorbar', []); + else + if length(cbarOptions) > 1 + userWarning(m2t, ... + 'Pgfplots cannot deal with more than one colorbar option yet.'); + end + axisOptions = opts_add(axisOptions, ['colorbar ', cbarOptions{1}]); + end + + if ~isempty(cbarStyleOptions) + axisOptions = opts_add(axisOptions, ... + 'colorbar style', ... + ['{' opts_print(m2t, cbarStyleOptions, ',') '}']); + end + + % Append upper and lower limit of the colorbar. + % TODO Use caxis not only for color bars. + clim = caxis(get(handle, 'axes')); + axisOptions = opts_add(axisOptions, 'point meta min', sprintf(m2t.ff, clim(1))); + axisOptions = opts_add(axisOptions, 'point meta max', sprintf(m2t.ff, clim(2))); + + % do _not_ handle colorbar's children +end +% ============================================================================== +function [m2t, xcolor] = getColor(m2t, handle, color, mode) +% Handles MATLAB colors and makes them available to TikZ. +% This includes translation of the color value as well as explicit +% definition of the color if it is not available in TikZ by default. +% +% The variable 'mode' essentially determines what format 'color' can +% have. Possible values are (as strings) 'patch' and 'image'. + +% check if the color is straight given in rgb +% -- notice that we need the extra NaN test with respect to the QUIRK +% below + if isreal(color) && numel(color)==3 && ~any(isnan(color)) + % everything alright: rgb color here + [m2t, xcolor] = rgb2colorliteral(m2t, color); + else + switch lower(mode) + case 'patch' + [m2t, xcolor] = patchcolor2xcolor(m2t, color, handle); + case 'image' + [m2t, colorindex] = cdata2colorindex(m2t, color, handle); + m = size(colorindex, 1); + n = size(colorindex, 2); + xcolor = cell(m, n); + for i = 1:m + for j = 1:n + [m2t, xc] = rgb2colorliteral(m2t, m2t.currentHandles.colormap(colorindex(i,j), :)); + xcolor{i, j} = xc; + end + end + otherwise + error(['matlab2tikz:getColor', ... + 'Argument ''mode'' has illegal value ''%s''.'], ... + mode); + end + end +end +% ============================================================================== +function [m2t, xcolor] = patchcolor2xcolor(m2t, color, patchhandle) +% Transforms a color of the edge or the face of a patch to an xcolor literal. + if ~ischar(color) && ~isnumeric(color) + error('patchcolor2xcolor:illegalInput', ... + 'Input argument ''color'' not a string or numeric.'); + end + if isnumeric(color) + [m2t, xcolor] = rgb2colorliteral(m2t, color); + else + switch color + case 'flat' + cdata = getCDataWithFallbacks(patchhandle); + + col1 = cdata(1,1); + if all(isnan(cdata) | abs(cdata-col1)<1.0e-10) + [m2t, colorindex] = cdata2colorindex(m2t, col1, patchhandle); + [m2t, xcolor] = rgb2colorliteral(m2t, m2t.currentHandles.colormap(colorindex, :)); + else + % Don't return anything meaningful and count on the caller + % to make something of it. + xcolor = []; + end + + case 'auto' + color = get(patchhandle, 'Color'); + [m2t, xcolor] = rgb2colorliteral(m2t, color); + + case 'none' + error('matlab2tikz:anycolor2rgb:ColorModelNoneNotAllowed',... + ['Color model ''none'' not allowed here. ',... + 'Make sure this case gets intercepted before.']); + + otherwise + error('matlab2tikz:anycolor2rgb:UnknownColorModel',... + 'Don''t know how to handle the color model ''%s''.',color); + end + end +end +% ============================================================================== +function cdata = getCDataWithFallbacks(patchhandle) +% Looks for CData at different places + cdata = getOrDefault(patchhandle, 'CData', []); + + if isempty(cdata) || ~isnumeric(cdata) + child = get(patchhandle, 'Children'); + cdata = get(child, 'CData'); + end + if isempty(cdata) || ~isnumeric(cdata) + % R2014b+: CData is implicit by the ordering of the siblings + siblings = get(get(patchhandle, 'Parent'), 'Children'); + cdata = find(siblings(end:-1:1)==patchhandle); + end +end +% ============================================================================== +function [m2t, colorindex] = cdata2colorindex(m2t, cdata, imagehandle) +% Transforms a color in CData format to an index in the color map. +% Only does something if CDataMapping is 'scaled', really. + + if ~isnumeric(cdata) && ~islogical(cdata) + error('matlab2tikz:cdata2colorindex:unknownCDataType',... + 'Don''t know how to handle CData ''%s''.',cdata); + end + + axeshandle = m2t.currentHandles.gca; + + % ----------------------------------------------------------------------- + % For the following, see, for example, the MATLAB help page for 'image', + % section 'Image CDataMapping'. + switch get(imagehandle, 'CDataMapping') + case 'scaled' + % need to scale within clim + % see MATLAB's manual page for caxis for details + clim = get(axeshandle, 'clim'); + m = size(m2t.currentHandles.colormap, 1); + colorindex = zeros(size(cdata)); + idx1 = cdata <= clim(1); + idx2 = cdata >= clim(2); + idx3 = ~idx1 & ~idx2; + colorindex(idx1) = 1; + colorindex(idx2) = m; + colorindex(idx3) = fix((cdata(idx3)-clim(1)) / (clim(2)-clim(1)) *m) ... + + 1; + case 'direct' + % direct index + colorindex = cdata; + + otherwise + error('matlab2tikz:anycolor2rgb:unknownCDataMapping',... + 'Unknown CDataMapping ''%s''.',cdatamapping); + end +end +% ============================================================================== +function [m2t, key, lOpts] = getLegendOpts(m2t, handle) +% Need to check that there's nothing inside visible before we +% abandon this legend -- an invisible property of the parent just +% means the legend has no box. + children = get(handle, 'Children'); + if ~isVisible(handle) && ~any(isVisible(children)) + return + end + + lStyle = opts_new(); + + lStyle = legendPosition(m2t, handle, lStyle); + lStyle = legendOrientation(m2t, handle, lStyle); + lStyle = legendEntryAlignment(m2t, handle, lStyle); + + % If the plot has 'legend boxoff', we have the 'not visible' + % property, so turn off line and background fill. + if (~isVisible(handle)) + lStyle = opts_add(lStyle, 'fill', 'none'); + lStyle = opts_add(lStyle, 'draw', 'none'); + else + % handle colors + [edgeColor, isDfltEdge] = getAndCheckDefault('Legend', handle, ... + 'EdgeColor', [1 1 1]); + if isNone(edgeColor) + lStyle = opts_add(lStyle, 'draw', 'none'); + + elseif ~isDfltEdge + [m2t, col] = getColor(m2t, handle, edgeColor, 'patch'); + lStyle = opts_add(lStyle, 'draw', col); + end + + [fillColor, isDfltFill] = getAndCheckDefault('Legend', handle, ... + 'Color', [1 1 1]); + if isNone(fillColor) + lStyle = opts_add(lStyle, 'fill', 'none'); + + elseif ~isDfltFill + [m2t, col] = getColor(m2t, handle, fillColor, 'patch'); + lStyle = opts_add(lStyle, 'fill', col); + end + end + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + key = 'legend style'; + lOpts = opts_print(m2t, lStyle, ','); +end +% ============================================================================== +function [lStyle] = legendOrientation(m2t, handle, lStyle) +% handle legend orientation + ori = get(handle, 'Orientation'); + switch lower(ori) + case 'horizontal' + numLegendEntries = sprintf('%d',length(get(handle, 'String'))); + lStyle = opts_add(lStyle, 'legend columns', numLegendEntries); + + case 'vertical' + % Use default. + otherwise + userWarning(m2t, [' Unknown legend orientation ''',ori,'''' ... + '. Choosing default (vertical).']); + end +end +% ============================================================================== +function [lStyle] = legendPosition(m2t, handle, lStyle) +% handle legend location +% #COMPLEX: just a big switch-case + loc = get(handle, 'Location'); + dist = 0.03; % distance to to axes in normalized coordinates + % MATLAB(R)'s keywords are camel cased (e.g., 'NorthOutside'), in Octave + % small cased ('northoutside'). Hence, use lower() for uniformity. + switch lower(loc) + case 'northeast' + return % don't do anything in this (default) case + case 'northwest' + position = [dist, 1-dist]; + anchor = 'north west'; + case 'southwest' + position = [dist, dist]; + anchor = 'south west'; + case 'southeast' + position = [1-dist, dist]; + anchor = 'south east'; + case 'north' + position = [0.5, 1-dist]; + anchor = 'north'; + case 'east' + position = [1-dist, 0.5]; + anchor = 'east'; + case 'south' + position = [0.5, dist]; + anchor = 'south'; + case 'west' + position = [dist, 0.5]; + anchor = 'west'; + case 'northoutside' + position = [0.5, 1+dist]; + anchor = 'south'; + case 'southoutside' + position = [0.5, -dist]; + anchor = 'north'; + case 'eastoutside' + position = [1+dist, 0.5]; + anchor = 'west'; + case 'westoutside' + position = [-dist, 0.5]; + anchor = 'east'; + case 'northeastoutside' + position = [1+dist, 1]; + anchor = 'north west'; + case 'northwestoutside' + position = [-dist, 1]; + anchor = 'north east'; + case 'southeastoutside' + position = [1+dist, 0]; + anchor = 'south west'; + case 'southwestoutside' + position = [-dist, 0]; + anchor = 'south east'; + case 'none' + legendPos = get(handle, 'Position'); + unit = get(handle, 'Units'); + if isequal(unit, 'normalized') + position = legendPos(1:2); + else + % Calculate where the legend is located w.r.t. the axes. + axesPos = get(m2t.currentHandles.gca, 'Position'); + axesUnit = get(m2t.currentHandles.gca, 'Units'); + % Convert to legend unit + axesPos = convertUnits(axesPos, axesUnit, unit); + % By default, the axes position is given w.r.t. to the figure, + % and so is the legend. + position = (legendPos(1:2)-axesPos(1:2)) ./ axesPos(3:4); + end + anchor = 'south west'; + case {'best','bestoutside'} + % TODO: Implement these. + % The position could be determined by means of 'Position' and/or + % 'OuterPosition' of the legend handle; in fact, this could be made + % a general principle for all legend placements. + userWarning(m2t, [sprintf(' Option ''%s'' not yet implemented.',loc), ... + ' Choosing default.']); + return % use defaults + + otherwise + userWarning(m2t, [' Unknown legend location ''',loc,'''' ... + '. Choosing default.']); + return % use defaults + end + + % set legend position + %TODO: shouldn't this include units? + lStyle = opts_add(lStyle, 'at', sprintf('{(%s,%s)}', ... + formatDim(position(1)), formatDim(position(2)))); + lStyle = opts_add(lStyle, 'anchor', anchor); + +end +% ============================================================================== +function [lStyle] = legendEntryAlignment(m2t, handle, lStyle) +% determines the text and picture alignment inside a legend + textalign = ''; + pictalign = ''; + switch m2t.env + case 'Octave' + % Octave allows to change the alignment of legend text and + % pictograms using legend('left') and legend('right') + textpos = get(handle, 'textposition'); + switch lower(textpos) + case 'left' + % pictogram right of flush right text + textalign = 'left'; + pictalign = 'right'; + case 'right' + % pictogram left of flush left text (default) + textalign = 'right'; + pictalign = 'left'; + otherwise + userWarning(m2t, ... + ['Unknown legend text position ''',... + textpos, '''. Choosing default.']); + end + case 'MATLAB' + % does not specify text/pictogram alignment in legends + otherwise + errorUnknownEnvironment(); + end + + % set alignment of legend text and pictograms, if available + if ~isempty(textalign) && ~isempty(pictalign) + lStyle = opts_add(lStyle, 'legend cell align', textalign); + lStyle = opts_add(lStyle, 'align', textalign); + lStyle = opts_add(lStyle, 'legend plot pos', pictalign); + else + % Make sure the entries are flush left (default MATLAB behavior). + % This is also import for multiline legend entries: Without alignment + % specification, the TeX document won't compile. + % 'legend plot pos' is not set explicitly, since 'left' is default. + lStyle = opts_add(lStyle, 'legend cell align', 'left'); + lStyle = opts_add(lStyle, 'align', 'left'); + end +end +% ============================================================================== +function [pgfTicks, pgfTickLabels, hasMinorTicks, tickDirection] = getAxisTicks(m2t, handle, axis) +% Return axis tick marks Pgfplots style. Nice: Tick lengths and such +% details are taken care of by Pgfplots. + if ~strcmpi(axis,'x') && ~strcmpi(axis,'y') && ~strcmpi(axis,'z') + error('matlab2tikz:illegalAxisSpecifier',... + 'Illegal axis specifier ''%s''.', axis); + end + + keywordTickMode = [upper(axis), 'TickMode']; + tickMode = get(handle, keywordTickMode); + keywordTick = [upper(axis), 'Tick']; + ticks = get(handle, keywordTick); + if isempty(ticks) + % If no ticks are present, we need to enforce this in any case. + pgfTicks = '\empty'; + else + if strcmp(tickMode, 'auto') && ~m2t.cmdOpts.Results.strict + % If the ticks are set automatically, and strict conversion is + % not required, then let Pgfplots take care of the ticks. + % In most cases, this looks a lot better anyway. + pgfTicks = []; + else % strcmp(tickMode,'manual') || m2t.cmdOpts.Results.strict + pgfTicks = join(m2t, cellstr(num2str(ticks(:))), ', '); + end + end + + keywordTickLabelMode = [upper(axis), 'TickLabelMode']; + tickLabelMode = get(handle, keywordTickLabelMode); + keywordTickLabel = [upper(axis), 'TickLabel']; + tickLabels = cellstr(get(handle, keywordTickLabel)); + if strcmp(tickLabelMode, 'auto') && ~m2t.cmdOpts.Results.strict + pgfTickLabels = []; + else % strcmp(tickLabelMode,'manual') || m2t.cmdOpts.Results.strict + keywordScale = [upper(axis), 'Scale']; + isAxisLog = strcmp(getOrDefault(handle,keywordScale, 'lin'), 'log'); + [pgfTicks, pgfTickLabels] = ... + matlabTicks2pgfplotsTicks(m2t, ticks, tickLabels, isAxisLog, tickLabelMode); + end + + keywordMinorTick = [upper(axis), 'MinorTick']; + hasMinorTicks = strcmp(getOrDefault(handle, keywordMinorTick, 'off'), 'on'); + tickDirection = getOrDefault(handle, 'TickDir', 'in'); +end +% ============================================================================== +function [pTicks, pTickLabels] = ... + matlabTicks2pgfplotsTicks(m2t, ticks, tickLabels, isLogAxis, tickLabelMode) +% Converts MATLAB style ticks and tick labels to pgfplots style (if needed) + if isempty(ticks) + pTicks = '\empty'; + pTickLabels = []; + return + end + + % set ticks + labels + pTicks = join(m2t, num2cell(ticks), ','); + + % if there's no specific labels, return empty + if isempty(tickLabels) || (length(tickLabels)==1 && isempty(tickLabels{1})) + pTickLabels = '\empty'; + return + end + + % sometimes tickLabels are cells, sometimes plain arrays + % -- unify this to cells + if ischar(tickLabels) + tickLabels = strtrim(mat2cell(tickLabels, ... + ones(size(tickLabels,1), 1), ... + size(tickLabels, 2) ... + ) ... + ); + end + + % What MATLAB does when there the number of ticks and tick labels do not + % coincide is somewhat unclear. To fix bug + % https://github.com/matlab2tikz/matlab2tikz/issues/161, + % cut off the first entries in `ticks`. + m = length(ticks); + n = length(tickLabels); + if n < m + ticks = ticks(m-n+1:end); + end + + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + % Check if tickLabels are really necessary (and not already covered by + % the tick values themselves). + plotLabelsNecessary = false; + + k = find(ticks ~= 0.0, 1); % get an index with non-zero tick value + if isLogAxis || isempty(k) % only a 0-tick + scalingFactor = 1; + else + % When plotting axis, MATLAB might scale the axes by a factor of ten, + % say 10^n, and plot a 'x 10^k' next to the respective axis. This is + % common practice when the tick marks are really large or small + % numbers. + % Unfortunately, MATLAB doesn't contain the information about the + % scaling anywhere in the plot, and at the same time the {x,y}TickLabels + % are given as t*10^k, thus no longer corresponding to the actual + % value t. + % Try to find the scaling factor here. This is then used to check + % whether or not explicit {x,y}TickLabels are really necessary. + s = str2double(tickLabels{k}); + scalingFactor = ticks(k)/s; + % check if the factor is indeed a power of 10 + S = log10(scalingFactor); + if abs(round(S)-S) > m2t.tol + scalingFactor = 1.0; + end + end + + for k = 1:min(length(ticks),length(tickLabels)) + % Don't use str2num here as then, literal strings as 'pi' get + % legally transformed into 3.14... and the need for an explicit + % label will not be recognized. str2double returns a NaN for 'pi'. + if isLogAxis + s = 10^(str2double(tickLabels{k})); + else + s = str2double(tickLabels{k}); + end + if isnan(s) || abs(ticks(k)-s*scalingFactor) > m2t.tol + plotLabelsNecessary = true; + break; + end + end + % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + if plotLabelsNecessary + % if the axis is logscaled, MATLAB does not store the labels, + % but the exponents to 10 + if isLogAxis + for k = 1:length(tickLabels) + if isnumeric(tickLabels{k}) + str = num2str(tickLabels{k}); + else + str = tickLabels{k}; + end + if strcmpi(tickLabelMode,'auto') + tickLabels{k} = sprintf('$10^{%s}$', str); + end + end + end + tickLabels = cellfun(@(l)(sprintf('{%s}',l)), tickLabels, ... + 'UniformOutput', false); + pTickLabels = join(m2t, tickLabels, ','); + else + pTickLabels = []; + end +end +% ============================================================================== +function tikzLineStyle = translateLineStyle(matlabLineStyle) + if(~ischar(matlabLineStyle)) + error('matlab2tikz:translateLineStyle:NotAString',... + 'Variable matlabLineStyle is not a string.'); + end + + switch (matlabLineStyle) + case 'none' + tikzLineStyle = ''; + case '-' + tikzLineStyle = 'solid'; + case '--' + tikzLineStyle = 'dashed'; + case ':' + tikzLineStyle = 'dotted'; + case '-.' + tikzLineStyle = 'dash pattern=on 1pt off 3pt on 3pt off 3pt'; + otherwise + error('matlab2tikz:translateLineStyle:UnknownLineStyle',... + 'Unknown matlabLineStyle ''%s''.', matlabLineStyle); + end +end +% ============================================================================== +function [m2t, table] = makeTable(m2t, varargin) +% [m2t,table] = makeTable(m2t, 'name1', data1, 'name2', data2, ...) +% [m2t,table] = makeTable(m2t, {'name1','name2',...}, {data1, data2, ...}) +% [m2t,table] = makeTable(m2t, {'name1','name2',...}, [data1(:), data2(:), ...]) +% +% When all the names are empty, no header is printed + [variables, data] = parseInputsForTable_(varargin{:}); + + COLSEP = sprintf('\t'); + if m2t.cmdOpts.Results.externalData + ROWSEP = sprintf('\n'); + else + ROWSEP = sprintf('\\\\\n'); + end + + nColumns = numel(data); + nRows = cellfun(@numel, data); + if ~all(nRows==nRows(1)) + warning('matlab2tikz:makeTableDifferentNumberOfRows',... + 'Different data lengths [%s]. Only including the first %d ones.',... + num2str(nRows), min(nRows)); + end + nRows = min(nRows); + + FORMAT = repmat({m2t.ff}, 1, nColumns); + FORMAT(cellfun(@isCellOrChar, data)) = {'%s'}; + FORMAT = join(m2t, FORMAT, COLSEP); + if all(cellfun(@isempty, variables)) + header = {}; + else + header = {join(m2t, variables, COLSEP)}; + end + + table = cell(nRows,1); + for iRow = 1:nRows + thisData = cellfun(@(x)(x(iRow)), data, 'UniformOutput', false); + for jCol = 1:nColumns + if iscell(thisData{jCol}) %TODO: probably this can be done more clearly + thisData{jCol} = thisData{jCol}{1}; + end + end + table{iRow} = sprintf(FORMAT, thisData{:}); + end + table = lower(table); % convert NaN and Inf to lower case for TikZ + table = [join(m2t, [header;table], ROWSEP) ROWSEP]; + + if m2t.cmdOpts.Results.externalData + % output data to external file + m2t.dataFileNo = m2t.dataFileNo + 1; + [filename, latexFilename] = externalFilename(m2t, m2t.dataFileNo, '.tsv'); + + % write the data table to an external file + fid = fileOpenForWrite(m2t, filename); + fprintf(fid, '%s', table); + fclose(fid); + + % put the filename in the TikZ output + table = latexFilename; + else + % output data with "%newline" prepended for formatting consistency + % do NOT prepend another newline in the output: LaTeX will crash. + table = sprintf('%%\n%s', table); + end +end +% ============================================================================== +function [variables, data] = parseInputsForTable_(varargin) +% parse input arguments for |makeTable| + if numel(varargin) == 2 % cell syntax + variables = varargin{1}; + data = varargin{2}; + if ischar(variables) + % one variable, one data vector -> (cell, cell) + variables = {variables}; + data = {data}; + elseif iscellstr(variables) && ~iscell(data) + % multiple variables, one data matrix -> (cell, cell) by column + data = num2cell(data, 1); + end + else % key-value syntax + variables = varargin(1:2:end-1); + data = varargin(2:2:end); + end +end +% ============================================================================== +function [path, texpath] = externalFilename(m2t, counter, extension) +% generates a file name for an external data file and its relative TeX path + + [dummy, name] = fileparts(m2t.tikzFileName); %#ok + baseFilename = [name '-' num2str(counter) extension]; + path = fullfile(m2t.dataPath, baseFilename); + texpath = TeXpath(fullfile(m2t.relativeDataPath, baseFilename)); +end +% ============================================================================== +function [names,definitions] = dealColorDefinitions(mergedColorDefs) + if isempty(mergedColorDefs) + mergedColorDefs = {}; + end + [names,definitions] = cellfun(@(x)(deal(x{:})), mergedColorDefs, ... + 'UniformOutput', false); +end +% ============================================================================== +function [m2t, colorLiteral] = rgb2colorliteral(m2t, rgb) +% Translates an rgb value to an xcolor literal +% +% Possible outputs: +% - xcolor literal color, e.g. 'blue' +% - mixture of 2 previously defined colors, e.g. 'red!70!green' +% - a newly defined color, e.g. 'mycolor10' + +% Take a look at xcolor.sty for the color definitions. +% In xcolor.sty some colors are defined in CMYK space and approximated +% crudely for RGB color space. So it is better to redefine those colors +% instead of using xcolor's: +% 'cyan' , 'magenta', 'yellow', 'olive' +% [0,1,1], [1,0,1] , [1,1,0] , [0.5,0.5,0] + + xcolColorNames = {'white', 'black', 'red', 'green', 'blue', ... + 'brown', 'lime', 'orange', 'pink', ... + 'purple', 'teal', 'violet', ... + 'darkgray', 'gray', 'lightgray'}; + xcolColorSpecs = {[1,1,1], [0,0,0], [1,0,0], [0,1,0], [0,0,1], ... + [0.75,0.5,0.25], [0.75,1,0], [1,0.5,0], [1,0.75,0.75], ... + [0.75,0,0.25], [0,0.5,0.5], [0.5,0,0.5], ... + [0.25,0.25,0.25], [0.5,0.5,0.5], [0.75,0.75,0.75]}; + + colorNames = [xcolColorNames, m2t.extraRgbColorNames]; + colorSpecs = [xcolColorSpecs, m2t.extraRgbColorSpecs]; + + %% check if rgb is a predefined color + for kColor = 1:length(colorSpecs) + Ck = colorSpecs{kColor}(:); + if max(abs(Ck - rgb(:))) < m2t.colorPrecision + colorLiteral = colorNames{kColor}; + return % exact color was predefined + end + end + + %% check if the color is a linear combination of two already defined colors + for iColor = 1:length(colorSpecs) + for jColor = iColor+1:length(colorSpecs) + Ci = colorSpecs{iColor}(:); + Cj = colorSpecs{jColor}(:); + + % solve color mixing equation `Ck = p * Ci + (1-p) * Cj` for p + p = (Ci-Cj) \ (rgb(:)-Cj); + p = round(100*p)/100; % round to a percentage + Ck = p * Ci + (1-p)*Cj; % approximated mixed color + + if p <= 1 && p >= 0 && max(abs(Ck(:) - rgb(:))) < m2t.colorPrecision + colorLiteral = sprintf('%s!%d!%s', colorNames{iColor}, round(p*100), ... + colorNames{jColor}); + return % linear combination found + end + end + end + + %% Define colors that are not a linear combination of two known colors + colorLiteral = sprintf('mycolor%d', length(m2t.extraRgbColorNames)+1); + m2t.extraRgbColorNames{end+1} = colorLiteral; + m2t.extraRgbColorSpecs{end+1} = rgb; +end +% ============================================================================== +function newstr = join(m2t, cellstr, delimiter) +% This function joins a cell of strings to a single string (with a +% given delimiter in between two strings, if desired). +% +% Example of usage: +% join(m2t, cellstr, ',') + if isempty(cellstr) + newstr = ''; + return + end + + % convert all values to strings first + nElem = numel(cellstr); + for k = 1:nElem + if isnumeric(cellstr{k}) + cellstr{k} = sprintf(m2t.ff, cellstr{k}); + elseif iscell(cellstr{k}) + cellstr{k} = join(m2t, cellstr{k}, delimiter); + % this will fail for heavily nested cells + elseif ~ischar(cellstr{k}) + error('matlab2tikz:join:NotCellstrOrNumeric',... + 'Expected cellstr or numeric.'); + end + end + + % inspired by strjoin of recent versions of MATLAB + newstr = cell(2,nElem); + newstr(1,:) = reshape(cellstr, 1, nElem); + newstr(2,1:nElem-1) = {delimiter}; % put delimiters in-between the elements + newstr = [newstr{:}]; +end +% ============================================================================== +function [width, height, unit] = getNaturalFigureDimension(m2t) + % Returns the size of figure (in inch) + % To stay compatible with getNaturalAxesDimensions, the unit 'in' is + % also returned. + + % Get current figure size + figuresize = get(m2t.currentHandles.gcf, 'Position'); + figuresize = figuresize([3 4]); + figureunit = get(m2t.currentHandles.gcf, 'Units'); + + % Convert Figure Size + unit = 'in'; + figuresize = convertUnits(figuresize, figureunit, unit); + + % Split size into width and height + width = figuresize(1); + height = figuresize(2); + +end +% ============================================================================== +function dimension = getFigureDimensions(m2t, widthString, heightString) +% Returns the physical dimension of the figure. + + [width, height, unit] = getNaturalFigureDimension(m2t); + + % get the natural width-height ration of the plot + axesWidthHeightRatio = width / height; + % check matlab2tikz arguments + if ~isempty(widthString) + width = extractValueUnit(widthString); + end + if ~isempty(heightString) + height = extractValueUnit(heightString); + end + + % prepare the output + if ~isempty(widthString) && ~isempty(heightString) + dimension.x.unit = width.unit; + dimension.x.value = width.value; + dimension.y.unit = height.unit; + dimension.y.value = height.value; + elseif ~isempty(widthString) + dimension.x.unit = width.unit; + dimension.x.value = width.value; + dimension.y.unit = width.unit; + dimension.y.value = width.value / axesWidthHeightRatio; + elseif ~isempty(heightString) + dimension.y.unit = height.unit; + dimension.y.value = height.value; + dimension.x.unit = height.unit; + dimension.x.value = height.value * axesWidthHeightRatio; + else % neither width nor height given + dimension.x.unit = unit; + dimension.x.value = width; + dimension.y.unit = unit; + dimension.y.value = height; + end +end +% ============================================================================== +function position = getAxesPosition(m2t, handle, widthString, heightString, axesBoundingBox) +% Returns the physical position of the axes. This includes - in difference +% to the Dimension - also an offset to shift the axes inside the figure +% An optional bounding box can be used to omit empty borders. + + % Deal with optional parameter + if nargin < 4 + axesBoundingBox = [0 0 1 1]; + end + + % First get the whole figures size + figDim = getFigureDimensions(m2t, widthString, heightString); + + % Get the relative position of the axis + relPos = getRelativeAxesPosition(m2t, handle, axesBoundingBox); + + position.x.value = relPos(1) * figDim.x.value; + position.x.unit = figDim.x.unit; + position.y.value = relPos(2) * figDim.y.value; + position.y.unit = figDim.y.unit; + position.w.value = relPos(3) * figDim.x.value; + position.w.unit = figDim.x.unit; + position.h.value = relPos(4) * figDim.y.value; + position.h.unit = figDim.y.unit; +end +% ============================================================================== +function [position] = getRelativeAxesPosition(m2t, axesHandles, axesBoundingBox) +% Returns the relative position of axes within the figure. +% Position is an (n,4) matrix with [minX, minY, width, height] for each +% handle. All these values are relative to the figure size, which means +% that [0, 0, 1, 1] covers the whole figure. +% It is possible to add a second parameter with the relative coordinates of +% a bounding box around all axes of the figure (see getRelevantAxes()). In +% this case, relative positions are rescaled so that the bounding box is +% [0, 0, 1, 1] + + % Get Figure Dimension + [figWidth, figHeight, figUnits] = getNaturalFigureDimension(m2t); + + % Initialize position + position = zeros(numel(axesHandles), 4); + % Iterate over all handles + for i = 1:numel(axesHandles) + axesHandle = axesHandles(i); + axesPos = get(axesHandle, 'Position'); + axesUnits = get(axesHandle, 'Units'); + if isequal(lower(axesUnits), 'normalized') + % Position is already relative + position(i,:) = axesPos; + else + % Convert figure size into axes units + figureSize = convertUnits([figWidth, figHeight], figUnits, axesUnits); + % Figure size into axes units to get the relative size + position(i,:) = axesPos ./ [figureSize, figureSize]; + + end + + % Change size if DataAspectRatioMode is manual + if isequal(lower(get(axesHandle,'DataAspectRatioMode')),'manual') + % get limits + xLim = get(axesHandle, 'XLim'); + yLim = get(axesHandle, 'YLim'); + % Get Aspect Ratio between width and height + aspectRatio = get(axesHandle,'DataAspectRatio'); + % And Adjust it to the figure dimensions + aspectRatio = aspectRatio(1) * figWidth * (yLim(2) - yLim(1)) ... + / (aspectRatio(2) * figHeight * (xLim(2)-xLim(1))); + % Recompute height + newHeight = position(i,3) * aspectRatio; + % shrink width if newHeight is too large + if newHeight > position(i,4) + % Recompute width + newWidth = position(i,4) / aspectRatio; + % Center Axis + offset = (position(i,3) - newWidth) / 2; + position(i,1) = position(i,1) + offset; + % Store new width + position(i,3) = newWidth; + else + % Center Axis + offset = (position(i,4) - newHeight) / 2; + position(i,2) = position(i,2) + offset; + % Store new height + position(i,4) = newHeight; + end + end + end + + %% Rescale if axesBoundingBox is given + if exist('axesBoundingBox','var') + % shift position so that [0, 0] is the lower left corner of the + % bounding box + position(:,1) = position(:,1) - axesBoundingBox(1); + position(:,2) = position(:,2) - axesBoundingBox(2); + % Recale + position(:,[1 3]) = position(:,[1 3]) / max(axesBoundingBox([3 4])); + position(:,[2 4]) = position(:,[2 4]) / max(axesBoundingBox([3 4])); + end +end +% ============================================================================== +function texUnits = matlab2texUnits(matlabUnits, fallbackValue) + switch matlabUnits + case 'pixels' + texUnits = 'px'; % only in pdfTex/LuaTeX + case 'centimeters' + texUnits = 'cm'; + case 'characters' + texUnits = 'em'; + case 'points' + texUnits = 'pt'; + case 'inches' + texUnits = 'in'; + otherwise + texUnits = fallbackValue; + end +end +% ============================================================================== +function dstValue = convertUnits(srcValue, srcUnit, dstUnit) +% Converts values between different units. +% srcValue stores a length (or vector of lengths) in srcUnit. +% The resulting dstValue is the converted length into dstUnit. +% +% Currently supported units are: in, cm, px, pt + + % Use tex units, if possible (to make things simple) + srcUnit = matlab2texUnits(lower(srcUnit),lower(srcUnit)); + dstUnit = matlab2texUnits(lower(dstUnit),lower(dstUnit)); + + if isequal(srcUnit, dstUnit) + dstValue = srcValue; + return % conversion to the same unit => factor = 1 + end + + units = {srcUnit, dstUnit}; + factor = ones(1,2); + for ii = 1:numel(factor) % Same code for srcUnit and dstUnit + % Use inches as intermediate unit + % Compute the factor to convert an inch into another unit + switch units{ii} + case 'cm' + factor(ii) = 2.54; + case 'px' + factor(ii) = get(0, 'ScreenPixelsPerInch'); + case 'in' + factor(ii) = 1; + case 'pt' + factor(ii) = 72; + otherwise + warning('MATLAB2TIKZ:UnknownPhysicalUnit',... + 'Can not convert unit ''%s''. Using conversion factor 1.', units{ii}); + end + end + + dstValue = srcValue * factor(2) / factor(1); +end +% ============================================================================== +function out = extractValueUnit(str) +% Decompose m2t.cmdOpts.Results.width into value and unit. + + % Regular expression to match '4.12cm', '\figurewidth', ... + fp_regex = '[-+]?\d*\.?\d*(?:e[-+]?\d+)?'; + pattern = strcat('(', fp_regex, ')?', '(\\?[a-z]+)'); + + [dummy,dummy,dummy,dummy,t,dummy] = regexp(str, pattern, 'match'); %#ok + + if length(t)~=1 + error('getAxesDimensions:illegalLength', ... + 'The width string ''%s'' could not be decomposed into value-unit pair.', str); + end + + if length(t{1}) == 1 + out.value = 1.0; % such as in '1.0\figurewidth' + out.unit = strtrim(t{1}{1}); + elseif length(t{1}) == 2 && isempty(t{1}{1}) + % MATLAB(R) does this: + % length(t{1})==2 always, but the first field may be empty. + out.value = 1.0; + out.unit = strtrim(t{1}{2}); + elseif length(t{1}) == 2 + out.value = str2double(t{1}{1}); + out.unit = strtrim(t{1}{2}); + else + error('getAxesDimensions:illegalLength', ... + 'The width string ''%s'' could not be decomposed into value-unit pair.', str); + end +end +% ============================================================================== +function str = escapeCharacters(str) +% Replaces "%" and "\" with respectively "%%" and "\\" + str = strrep(str, '%' , '%%'); + str = strrep(str, '\' , '\\'); +end +% ============================================================================== +function bool = isNone(value) +% Checks whether a value is 'none' + bool = strcmpi(value, 'none'); +end +% ============================================================================== +function val = getOrDefault(handle, key, default) +% gets the value or returns the default value if no such property exists + if all(isprop(handle, key)) + val = get(handle, key); + else + val = default; + end +end +% ============================================================================== +function val = getFactoryOrDefault(type, key, fallback) +% get factory default value for a certain type of HG object +% this CANNOT be done using |getOrDefault| as |isprop| doesn't work for +% factory/default settings. Hence, we use a more expensive try-catch instead. + try + groot = 0; + val = get(groot, ['Factory' type key]); + catch + val = fallback; + end +end +% ============================================================================== +function [val, isDefault] = getAndCheckDefault(type, handle, key, default) +% gets the value from a handle of certain type and check the default values + default = getFactoryOrDefault(type, key, default); + val = getOrDefault(handle, key, default); + isDefault = isequal(val, default); +end +% ============================================================================== +function [m2t, opts] = addIfNotDefault(m2t, type, handle, key, default, pgfKey, opts) +% sets an option in the options array named `pgfKey` if the MATLAB option is +% not a default value + [value, isDefault] = getAndCheckDefault(type, handle, key, default); + if ~isDefault || m2t.cmdOpts.Results.strict + opts = opts_add(opts, pgfKey, value); + end +end +% ============================================================================== +function out = isVisible(handles) +% Determines whether an object is actually visible or not. + out = strcmp(get(handles,'Visible'), 'on'); + % There's another handle property, 'HandleVisibility', which may or may not + % determine the visibility of the object. Empirically, it seems to be 'off' + % whenever we're dealing with an object that's not user-created, such as + % automatic axis ticks, baselines in bar plots, axis lines for polar plots + % and so forth. For now, don't check 'HandleVisibility'. +end +% ============================================================================== +function [relevantAxesHandles, axesBoundingBox] = getRelevantAxes(m2t, axesHandles) +% Returns relevant axes. These are defines as visible axes that are no +% colorbars. In addition, a bounding box around all relevant Axes is +% computed. This can be used to avoid undesired borders. +% This function is the remaining code of alignSubPlots() in the alternative +% positioning system. + relevantAxesHandles = []; + for axesHandle = axesHandles(:)' + % Only handle visible non-colorbar handles. + if axisIsVisible(axesHandle) && ~strcmp(get(axesHandle,'Tag'), 'Colorbar') + relevantAxesHandles(end+1) = axesHandle; + end + end + + % Compute the bounding box if width or height of the figure are set by + % parameter + if ~isempty(m2t.cmdOpts.Results.width) || ~isempty(m2t.cmdOpts.Results.height) + % TODO: check if relevant Axes or all Axes are better. + axesBoundingBox = getRelativeAxesPosition(m2t, relevantAxesHandles); + % Compute second corner from width and height for each axes + axesBoundingBox(:,[3 4]) = axesBoundingBox(:,[1 2]) + axesBoundingBox(:,[3 4]); + % Combine axes corners to get the bounding box + axesBoundingBox = [min(axesBoundingBox(:,[1 2]),[],1), max(axesBoundingBox(:,[3 4]), [], 1)]; + % Compute width and height of the bounding box + axesBoundingBox(:,[3 4]) = axesBoundingBox(:,[3 4]) - axesBoundingBox(:,[1 2]); + else + % Otherwise take the whole figure as bounding box => lengths are + % not changed in tikz + axesBoundingBox = [0, 0, 1, 1]; + end +end +% ============================================================================== +function userInfo(m2t, message, varargin) +% Display usage information. + if m2t.cmdOpts.Results.showInfo + mess = sprintf(message, varargin{:}); + + mess = strrep(mess, sprintf('\n'), sprintf('\n *** ')); + fprintf(' *** %s\n', mess); + end +end +% ============================================================================== +function userWarning(m2t, message, varargin) +% Drop-in replacement for warning(). + if m2t.cmdOpts.Results.showWarnings + warning('matlab2tikz:userWarning', message, varargin{:}); + end +end +% ============================================================================== +function warnAboutParameter(m2t, parameter, isActive, message) +% warn the user about the use of a dangerous parameter + line = ['\n' repmat('=',1,80) '\n']; + if isActive(m2t.cmdOpts.Results.(parameter)) + userWarning(m2t, [line, 'You are using the "%s" parameter.\n', ... + message line], parameter); + end +end +% ============================================================================== +function parent = addChildren(parent, children) + if isempty(children) + return; + elseif iscell(children) + for k = 1:length(children) + parent = addChildren(parent, children{k}); + end + else + if isempty(parent.children) + parent.children = {children}; + else + parent.children = {parent.children{:} children}; + end + end +end +% ============================================================================== +function printAll(m2t, env, fid) + if isfield(env, 'colors') && ~isempty(env.colors) + fprintf(fid, '%s', env.colors); + end + + if isempty(env.options) + fprintf(fid, '\\begin{%s}\n', env.name); + else + fprintf(fid, '\\begin{%s}[%%\n%s\n]\n', env.name, ... + opts_print(m2t, env.options, sprintf(',\n'))); + end + + for item = env.content + fprintf(fid, '%s', char(item)); + end + + for k = 1:length(env.children) + if ischar(env.children{k}) + fprintf(fid, escapeCharacters(env.children{k})); + else + fprintf(fid, '\n'); + printAll(m2t, env.children{k}, fid); + end + end + + % End the tikzpicture environment with an empty comment and no newline + % so no additional space is generated after the tikzpicture in TeX. + if strcmp(env.name, 'tikzpicture') + fprintf(fid, '\\end{%s}%%', env.name); + else + fprintf(fid, '\\end{%s}\n', env.name); + end +end +% ============================================================================== +function c = prettyPrint(m2t, strings, interpreter) +% Some resources on how MATLAB handles rich (TeX) markup: +% http://www.mathworks.com/help/techdoc/ref/text_props.html#String +% http://www.mathworks.com/help/techdoc/creating_plots/f0-4741.html#f0-28104 +% http://www.mathworks.com/help/techdoc/ref/text_props.html#Interpreter +% http://www.mathworks.com/help/techdoc/ref/text.html#f68-481120 + + strings = cellstrOneLinePerCell(strings); + + % Now loop over the strings and return them pretty-printed in c. + c = {}; + for k = 1:length(strings) + % linear indexing for independence of cell array dimensions + s = strings{k}; + + % If the user set the matlab2tikz parameter 'parseStrings' to false, no + % parsing of strings takes place, thus making the user 100% responsible. + if ~m2t.cmdOpts.Results.parseStrings + c = strings; + return + end + + % Make sure we have a valid interpreter set up + if ~any(strcmpi(interpreter, {'latex', 'tex', 'none'})) + userWarning(m2t, 'Don''t know interpreter ''%s''. Default handling.', interpreter); + interpreter = 'tex'; + end + + % The interpreter property of the text element defines how the string + % is parsed + switch lower(interpreter) + case 'latex' % Basic subset of the LaTeX markup language + + % Replace $$...$$ with $...$ but otherwise leave untouched + string = regexprep(s, '^\$\$(.*)\$\$$', '$$1$'); + + case 'tex' % Subset of plain TeX markup language + + % Deal with UTF8 characters. + string = s; + + % degree symbol following "^" or "_" needs to be escaped + string = regexprep(string, '([\^\_])°', '$1{{}^\\circ}'); + string = strrep(string, '°', '^\circ'); + string = strrep(string, '∞', '\infty'); + + % Parse string piece-wise in a separate function. + string = parseTexString(m2t, string); + + case 'none' % Literal characters + % Make special characters TeX compatible + + string = strrep(s, '\', '\textbackslash{}'); + % Note: '{' and '}' can't be converted to '\{' and '\}', + % respectively, via strrep(...) as this would lead to + % backslashes converted to '\textbackslash\{\}' because + % the backslash was converted to '\textbackslash{}' in + % the previous step. Using regular expressions with + % negative look-behind makes sure any braces in 'string' + % were not introduced by escaped backslashes. + % Also keep in mind that escaping braces before backslashes + % would not remedy the issue -- in that case 'string' would + % contain backslashes introduced by brace escaping that are + % not supposed to be printable characters. + repl = switchMatOct(m2t, '\\{', '\{'); + string = regexprep(string, '(?<!\\textbackslash){', repl); + repl = switchMatOct(m2t, '\\}', '\}'); + string = regexprep(string, '(?<!\\textbackslash{)}', repl); + string = strrep(string, '$', '\$'); + string = strrep(string, '%', '\%'); + string = strrep(string, '_', '\_'); + string = strrep(string, '^', '\textasciicircum{}'); + string = strrep(string, '#', '\#'); + string = strrep(string, '&', '\&'); + string = strrep(string, '~', '\textasciitilde{}'); % or '\~{}' + % Clean up: remove superfluous '{}' if it's followed by a backslash + string = strrep(string, '{}\', '\'); + % Clean up: remove superfluous '{}' at the end of 'string' + string = regexprep(string, '\{\}$', ''); + + % Make sure to return a string and not a cellstr. + if iscellstr(string) + string = string{1}; + end + otherwise + error('matlab2tikz:prettyPrint', 'Unknown interpreter'); + end + c{end+1} = string; + end +end +% ============================================================================== +function strings = cellstrOneLinePerCell(strings) +% convert to cellstr that contains only one-line strings + if ischar(strings) + strings = cellstr(strings); + elseif iscellstr(strings) + cs = {}; + for s = strings + tmp = cellstr(s); + cs = {cs{:}, tmp{:}}; + end + strings = cs; + else + error('matlab2tikz:cellstrOneLinePerCell', ... + 'Data type not understood.'); + end +end +% ============================================================================== +function parsed = parseTexString(m2t, string) + if iscellstr(string) + % Convert cell string to regular string, otherwise MATLAB complains + string = string{:}; + end + + % Get the position of all braces + bracesPos = regexp(string, '\{|\}'); + + % Exclude braces that are part of any of these MATLAB-supported TeX commands: + % \color{...} \color[...]{...} \fontname{...} \fontsize{...} + [sCmd, eCmd] = regexp(string, '\\(color(\[[^\]]*\])?|fontname|fontsize)\{[^}]*\}'); + for i = 1:length(sCmd) + bracesPos(bracesPos >= sCmd(i) & bracesPos <= eCmd(i)) = []; + end + + % Exclude braces that are preceded by an odd number of backslashes which + % means the brace is escaped and thus to be printed, not a grouping brace + expr = '(?<!\\)(\\\\)*\\(\{|\})'; + escaped = regexp(string, expr, 'end'); + % It's necessary to go over 'string' with the same RegEx again to catch + % overlapping matches, e.g. string == '\{\}'. In such a case the simple + % regexp(...) above only finds the first brace. What we have to do is look + % only at the part of 'string' that starts with the first brace but doesn't + % encompass its escaping backslash. Iterating over all previously found + % matches makes sure all overlapping matches are found, too. That way even + % cases like string == '\{\} \{\}' are handled correctly. + % The call to unique(...) is not necessary to get the behavior described, but + % by removing duplicates in 'escaped' it's cleaner than without. + for i = escaped + escaped = unique([escaped, regexp(string(i:end), expr, 'end') + i-1]); + end + % Now do the actual removal of escaped braces + for i = 1:length(escaped) + bracesPos(bracesPos == escaped(i)) = []; + end + + parsed = ''; + % Have a virtual brace one character left of where the actual string + % begins (remember, MATLAB strings start counting at 1, not 0). This is + % to make sure substrings left of the first brace get parsed, too. + prevBracePos = 0; + % Iterate over all the brace positions in order to split up 'string' + % at those positions and then parse the substrings. A virtual brace is + % added right of where the actual string ends to make sure substrings + % right of the right-most brace get parsed as well. + for currBracePos = [bracesPos, length(string)+1] + if (prevBracePos + 1) < currBracePos + % Parse the substring between (but not including) prevBracePos + % and currBracePos, i.e. between the previous brace and the + % current one (but only if there actually is a non-empty + % substring). Then append it to the output string. + substring = string(prevBracePos+1 : currBracePos-1); + parsed = [parsed, parseTexSubstring(m2t, substring)]; + end + if currBracePos <= length(string) + % Append the brace itself to the output string, but only if the + % current brace position is within the limits of the string, i.e. + % don't append anything for the last, virtual brace that is only + % there to enable parsing of substrings beyond the right-most + % actual brace. + brace = string(currBracePos); + parsed = [parsed, brace]; + end + % The current brace position will be next iteration's previous one + prevBracePos = currBracePos; + end + + % Enclose everything in $...$ to use math mode + parsed = ['$' parsed '$']; + % ...except when everything is text + parsed = regexprep(parsed, '^\$\\text\{([^}]*)\}\$$', '$1'); + % start-> $ \text {(non-}) } $<-end + % ...or when the parsed string is empty + parsed = regexprep(parsed, '^\$\$$', ''); +end +% ============================================================================== +function string = parseTexSubstring(m2t, string) + origstr = string; % keep this for warning messages + + % Font families (italic, bold, etc.) get a trailing '{}' because they may be + % followed by a letter which would produce an error in (La)TeX. + for i = {'it', 'bf', 'rm', 'sl'} + string = strrep(string, ['\' i{:}], ['\' i{:} '{}']); + end + + % The same holds true for special characters like \alpha + % The list of MATLAB-supported TeX characters was taken from + % http://www.mathworks.com/help/techdoc/ref/text_props.html#String + named = {'alpha', 'angle', 'ast', 'beta', 'gamma', 'delta', ... + 'epsilon', 'zeta', 'eta', 'theta', 'vartheta', 'iota', ... + 'kappa', 'lambda', 'mu', 'nu', 'xi', 'pi', 'rho', ... + 'sigma', 'varsigma', 'tau', 'equiv', 'Im', 'otimes', ... + 'cap', 'int', 'rfloor', 'lfloor', 'perp', 'wedge', ... + 'rceil', 'vee', 'langle', 'upsilon', 'phi', 'chi', ... + 'psi', 'omega', 'Gamma', 'Delta', 'Theta', 'Lambda', ... + 'Xi', 'Pi', 'Sigma', 'Upsilon', 'Phi', 'Psi', 'Omega', ... + 'forall', 'exists', 'ni', 'cong', 'approx', 'Re', ... + 'oplus', 'cup', 'subseteq', 'lceil', 'cdot', 'neg', ... + 'times', 'surd', 'varpi', 'rangle', 'sim', 'leq', ... + 'infty', 'clubsuit', 'diamondsuit', 'heartsuit', ... + 'spadesuit', 'leftrightarrow', 'leftarrow', ... + 'Leftarrow', 'uparrow', 'rightarrow', 'Rightarrow', ... + 'downarrow', 'circ', 'pm', 'geq', 'propto', 'partial', ... + 'bullet', 'div', 'neq', 'aleph', 'wp', 'oslash', ... + 'supseteq', 'nabla', 'ldots', 'prime', '0', 'mid', ... + 'copyright' }; + for i = named + string = strrep(string, ['\' i{:}], ['\' i{:} '{}']); + % FIXME: Only append '{}' if there's an odd number of backslashes + % in front of the items from 'named'. If it's an even + % number instead, that means there's an escaped (printable) + % backslash and some text like "alpha" after that. + end + % Some special characters' names are subsets of others, e.g. '\o' is + % a subset of '\omega'. This would produce undesired double-escapes. + % For example if '\o' was converted to '\o{}' after '\omega' has been + % converted to '\omega{}' this would result in '\o{}mega{}' instead of + % '\omega{}'. Had '\o' been converted to '\o{}' _before_ '\omega' is + % converted then the result would be '\o{}mega' and thus also wrong. + % To circumvent the problem all those special character names that are + % subsets of others are now converted using a regular expression that + % uses negative lookahead. The special handling of the backslash is + % required for MATLAB/Octave compatibility. + string = regexprep(string, '(\\)o(?!mega|times|plus|slash)', '$1o{}'); + string = regexprep(string, '(\\)in(?!t|fty)', '$1in{}'); + string = regexprep(string, '(\\)subset(?!eq)', '$1subset{}'); + string = regexprep(string, '(\\)supset(?!eq)', '$1supset{}'); + + % Convert '\0{}' (TeX text mode) to '\emptyset{}' (TeX math mode) + string = strrep(string, '\0{}', '\emptyset{}'); + + % Add skip to \fontsize + % This is required for a successful LaTeX run on the output as in contrast + % to MATLAB/Octave it requires the skip parameter (even if it's zero) + string = regexprep(string, '(\\fontsize\{[^}]*\})', '$1{0}'); + + % Put '\o{}' inside \text{...} as it is a text mode symbol that does not + % exist in math mode (and LaTeX gives a warning if you use it in math mode) + string = strrep(string, '\o{}', '\text{\o{}}'); + + % Put everything that isn't a TeX command inside \text{...} + expr = '(\\[a-zA-Z]+(\[[^\]]*\])?(\{[^}]*\}){1,2})'; + % |( \cmd )( [...]? )( {...}{1,2} )| + % ( subset $1 ) + repl = '}$1\\text{'; + string = regexprep(string, expr, repl); + % ...\alpha{}... -> ...}\alpha{}\text{... + string = ['\text{' string '}']; + % ...}\alpha{}\text{... -> \text{...}\alpha{}\text{...} + + % '_' has to be in math mode so long as it's not escaped as '\_' in which + % case it remains as-is. Extra care has to be taken to make sure any + % backslashes in front of the underscore are not themselves escaped and + % thus printable backslashes. This is the case if there's an even number + % of backslashes in a row. + repl = '$1}_\\text{'; + string = regexprep(string, '(?<!\\)((\\\\)*)_', repl); + + % '^' has to be in math mode so long as it's not escaped as '\^' in which + % case it is expressed as '\textasciicircum{}' for compatibility with + % regular TeX. Same thing here regarding even/odd number of backslashes + % as in the case of underscores above. + repl = '$1\\textasciicircum{}'; + string = regexprep(string, '(?<!\\)((\\\\)*)\\\^', repl); + repl = '$1}^\\text{'; + string = regexprep(string, '(?<!\\)((\\\\)*)\^', repl); + + % '<' and '>' has to be either in math mode or needs to be typeset as + % '\textless' and '\textgreater' in textmode + % This is handled better, if 'parseStringsAsMath' is activated + if m2t.cmdOpts.Results.parseStringsAsMath == 0 + string = regexprep(string, '<', '\\textless'); + string = regexprep(string, '>', '\\textgreater'); + end + + % Move font styles like \bf into the \text{} command. + expr = '(\\bf|\\it|\\rm|\\fontname)({\w*})+(\\text{)'; + while regexp(string, expr) + string = regexprep(string, expr, '$3$1$2'); + end + + % Replace Fontnames + [~, ~, ~, ~, fonts, ~, subStrings] = regexp(string, '\\fontname{(\w*)}'); + fonts = fonts2tex(fonts); + subStrings = [subStrings; fonts, {''}]; + string = cell2mat(subStrings(:)'); + + % Merge adjacent \text fields: + string = mergeAdjacentTexCmds(string, '\text'); + + % '\\' has to be escaped to '\textbackslash{}' + % This cannot be done with strrep(...) as it would replace e.g. 4 backslashes + % with three times the replacement string because it finds overlapping matches + % (see http://www.mathworks.de/help/techdoc/ref/strrep.html) + % Note: Octave's backslash handling is broken. Even though its output does + % not resemble MATLAB's, the same m2t code is used for either software. That + % way MATLAB-compatible code produces the same matlab2tikz output no matter + % which software it's executed in. So long as this MATLAB incompatibility + % remains in Octave you're probably better off not using backslashes in TeX + % text anyway. + string = regexprep(string, '(\\)\\', '$1textbackslash{}'); + + % '_', '^', '{', and '}' are already escaped properly, even in MATLAB's TeX + % dialect (and if they're not, that's intentional) + + % Escape "$", "%", and "#" to make them compatible to true TeX while in + % MATLAB/Octave they are not escaped + string = strrep(string, '$', '\$'); + string = strrep(string, '%', '\%'); + string = strrep(string, '#', '\#'); + + % Escape "§" as "\S" since it can give UTF-8 problems otherwise. + % The TeX string 'a_§' in particular lead to problems in Octave 3.6.0. + % m2t transcoded that string into '$\text{a}_\text{*}\text{#}$' with + % * = 0xC2 and # = 0xA7 which corresponds with the two-byte UTF-8 + % encoding. Even though this looks like an Octave bug that shows + % during the '..._\text{abc}' to '..._\text{a}\text{bc}' conversion, + % it's best to include the workaround here. + string = strrep(string, '§', '\S{}'); + + % Escape plain "&" in MATLAB and replace it and the following character with + % a space in Octave unless the "&" is already escaped + switch m2t.env + case 'MATLAB' + string = strrep(string, '&', '\&'); + case 'Octave' + % Ampersands should already be escaped in Octave. + % Octave (tested with 3.6.0) handles un-escaped ampersands a little + % funny in that it removes the following character, if there is one: + % 'abc&def' -> 'abc ef' + % 'abc&\deltaef' -> 'abc ef' + % 'abc&$ef' -> 'abc ef' + % 'abcdef&' -> 'abcdef' + % Don't remove closing brace after '&' as this would result in + % unbalanced braces + string = regexprep(string, '(?<!\\)&(?!})', ' '); + string = regexprep(string, '(?<!\\)&}', '}'); + if regexp(string, '(?<!\\)&\\') + % If there's a backslash after the ampersand, that means not only + % the backslash should be removed but the whole escape sequence, + % e.g. '\delta' or '\$'. Actually the '\delta' case is the + % trickier one since by now 'string' would have been turned from + % 'abc&\deltaef' into '\text{abc&}\delta{}\text{ef}', i.e. after + % the ampersand first comes a closing brace and then '\delta'; + % the latter as well as the ampersand itself should be removed + % while the brace must remain in place to avoid unbalanced braces. + userWarning(m2t, ... + ['TeX string ''%s'' contains a special character ' ... + 'after an un-escaped ''&''. The output generated ' ... + 'by matlab2tikz will not precisely match that ' ... + 'which you see in Octave itself in that the ' ... + 'special character and the preceding ''&'' is ' ... + 'not replaced with a space.'], origstr) + end + otherwise + errorUnknownEnvironment(); + end + + % Escape plain "~" in MATLAB and replace escaped "\~" in Octave with a proper + % escape sequence. An un-escaped "~" produces weird output in Octave, thus + % give a warning in that case + switch m2t.env + case 'MATLAB' + string = strrep(string, '~', '\textasciitilde{}'); % or '\~{}' + case 'Octave' + string = strrep(string, '\~', '\textasciitilde{}'); % ditto + if regexp(string, '(?<!\\)~') + userWarning(m2t, ... + ['TeX string ''%s'' contains un-escaped ''~''. ' ... + 'For proper display in Octave you probably ' ... + 'want to escape it even though that''s ' ... + 'incompatible with MATLAB. ' ... + 'In the matlab2tikz output it will have its ' ... + 'usual TeX function as a non-breaking space.'], ... + origstr) + end + otherwise + errorUnknownEnvironment(); + end + + % Convert '..._\text{abc}' and '...^\text{abc}' to '..._\text{a}\text{bc}' + % and '...^\text{a}\text{bc}', respectively. + % Things get a little more complicated if instead of 'a' it's e.g. '$'. The + % latter has been converted to '\$' by now and simply extracting the first + % character from '\text{\$bc}' would result in '\text{$}\text{$bc}' which + % is syntactically wrong. Instead the whole command '\$' has to be moved in + % front of the \text{...} block, e.g. '..._\text{\$bc}' -> '..._\$\text{bc}'. + % Note that the problem does not occur for the majority of special characters + % like '\alpha' because they use math mode and therefore are never inside a + % \text{...} block to begin with. This means that the number of special + % characters affected by this issue is actually quite small: + % $ # % & _ { } \o § ~ \ ^ + expr = ['(_|\^)(\\text)\{([^}\\]|\\\$|\\#|\\%|\\&|\\_|\\\{|\\\}|', ... + ... % (_/^)(\text) {(non-}\| \$ | \#| \%| \&| \_| \{ | \} | + ... % ($1)( $2 ) ( $3 -> + '\\o\{\}|\\S\{\}|\\textasciitilde\{\}|\\textbackslash\{\}|', ... + ... % \o{} | \S{} | \textasciitilde{} | \textbackslash{} | + ... % <- $3 -> + '\\textasciicircum\{\})']; + % \textasciicircum{} ) + % <- $3 ) + string = regexprep(string, expr, '$1$2{$3}$2{'); + + % Some further processing makes the output behave more like TeX math mode, + % but only if the matlab2tikz parameter parseStringsAsMath=true. + if m2t.cmdOpts.Results.parseStringsAsMath + + % Some characters should be in math mode: =-+/,.()<>0-9 + expr = '(\\text)\{([^}=\-+/,.()<>0-9]*)([=\-+/,.()<>0-9]+)([^}]*)\}'; + % \text {(any non-"x"/'}'char)( any "x" char )(non-}) } + % ( $1 ) ( $2 )( $3 )( $4) + while regexp(string, expr) + % Iterating is necessary to catch all occurrences. See above. + string = regexprep(string, expr, '$1{$2}$3$1{$4}'); + end + + % \text{ } should be a math-mode space + string = regexprep(string, '\\text\{(\s+)}', '$1'); + + % '<<' probably means 'much smaller than', i.e. '\ll' + repl = switchMatOct(m2t, '$1\\ll{}$2', '$1\ll{}$2'); + string = regexprep(string, '([^<])<<([^<])', repl); + + % '>>' probably means 'much greater than', i.e. '\gg' + repl = switchMatOct(m2t, '$1\\gg{}$2', '$1\gg{}$2'); + string = regexprep(string, '([^>])>>([^>])', repl); + + % Single letters are most likely variables and thus should be in math mode + string = regexprep(string, '\\text\{([a-zA-Z])\}', '$1'); + + end % parseStringsAsMath + + % Clean up: remove empty \text{} + string = strrep(string, '\text{}', ''); + % \text{}\alpha{}\text{...} -> \alpha{}\text{...} + + % Clean up: convert '{}\' to '\' unless it's prefixed by a backslash which + % means the opening brace is escaped and thus a printable character instead + % of a grouping brace. + string = regexprep(string, '(?<!\\)\{\}(\\)', '$1'); + % \alpha{}\text{...} -> \alpha\text{...} + + % Clean up: convert '{}}' to '}' unless it's prefixed by a backslash + string = regexprep(string, '(?<!\\)\{\}\}', '}'); + + % Clean up: remove '{}' at the end of 'string' unless it's prefixed by a + % backslash + string = regexprep(string, '(?<!\\)\{\}$', ''); +end +% ============================================================================== +function tex = fonts2tex(fonts) +% Returns a tex command for each fontname in the cell array fonts. + if ~iscell(fonts) + error('matlab2tikz:fonts2tex', ... + 'Expecting a cell array as input.'); + end + tex = cell(size(fonts)); + + for ii = 1:numel(fonts) + font = fonts{ii}{1}; + + % List of known fonts. + switch lower(font) + case 'courier' + tex{ii} = '\ttfamily{}'; + case 'times' + tex{ii} = '\rmfamily{}'; + case {'arial', 'helvetica'} + tex{ii} = '\sffamily{}'; + otherwise + warning('matlab2tikz:fonts2tex', ... + 'Unknown font ''%s''. Using tex default font.',font); + % Unknown font -> Switch to standard font. + tex{ii} = '\rm{}'; + end + end +end +% ============================================================================== +function string = mergeAdjacentTexCmds(string, cmd) +% Merges adjacent tex commands like \text into one command + % If necessary, add a backslash + if cmd(1) ~= '\' + cmd = ['\' cmd]; + end + % Link each bracket to the corresponding bracket + link = zeros(size(string)); + pos = [regexp([' ' string], '([^\\]{)'), ... + regexp([' ' string], '([^\\]})')]; + pos = sort(pos); + ii = 1; + while ii <= numel(pos) + if string(pos(ii)) == '}' + link(pos(ii-1)) = pos(ii); + link(pos(ii)) = pos(ii - 1); + pos([ii-1, ii]) = []; + ii = ii - 1; + else + ii = ii + 1; + end + end + % Find dispensable commands + pos = regexp(string, ['}\' cmd '{']); + delete = zeros(0,1); + len = numel(cmd); + for p = pos + l = link(p); + if l > len && isequal(string(l-len:l-1), cmd) + delete(end+1,1) = p; + end + end + % 3. Remove these commands (starting from the back + delete = repmat(delete, 1, len+2) + repmat(0:len+1,numel(delete), 1); + string(delete(:)) = []; +end +function dims = pos2dims(pos) +% Position quadruplet [left, bottom, width, height] to dimension structure + dims = struct('left' , pos(1), 'bottom', pos(2)); + if numel(pos) == 4 + dims.width = pos(3); + dims.height = pos(4); + dims.right = dims.left + dims.width; + dims.top = dims.bottom + dims.height; + end +end +% OPTION ARRAYS ================================================================ +function opts = opts_new() +% create a new options array + opts = cell(0,2); +end +function opts = opts_add(opts, key, value) +% add a key-value pair to an options array (with duplication check) + if ~exist('value','var') + value = []; + end + value = char(value); + + % Check if the key already exists. + if opts_has(opts, key) + oldValue = opts_get(opts, key); + if isequal(value, oldValue) + return; % no action needed: value already present + else + error('matlab2tikz:opts_add', ... + ['Trying to add (%s, %s) to options, but it already ' ... + 'contains the conflicting key-value pair (%s, %s).'], ... + key, value, key, oldValue); + end + end + opts = opts_append(opts, key, value); +end +function bool = opts_has(opts, key) +% returns true if the options array contains the key + bool = ~isempty(opts) && ismember(key, opts(:,1)); +end +function value = opts_get(opts, key) +% returns the value(s) stored for a key in an options array + idx = find(ismember(opts(:,1), key)); + switch numel(idx) + case 1 + value = opts{idx,2}; % just the value + otherwise + value = opts(idx,2); % as cell array + end +end +function opts = opts_append(opts, key, value) +% append a key-value pair to an options array (duplicate keys allowed) + if ~exist('value','var') || isempty(value) + value = []; + end + if ~(opts_has(opts, key) && isequal(opts_get(opts, key), value)) + opts = cat(1, opts, {key, value}); + end +end +function opts = opts_append_userdefined(opts, userDefined) +% appends user-defined options to an options array +% the sserDefined options can come either as a single string or a cellstr that +% is already TikZ-formatted. The internal 2D cell format is NOT supported. + if ~isempty(userDefined) + if ischar(userDefined) + userDefined = {userDefined}; + end + for k = 1:length(userDefined) + opts = opts_append(opts, userDefined{k}); + end + end +end +function opts = opts_remove(opts, varargin) +% remove some key-value pairs from an options array + keysToDelete = varargin; + idxToDelete = ismember(opts(:,1), keysToDelete); + opts(idxToDelete, :) = []; +end +function opts = opts_merge(opts, varargin) +% merge multiple options arrays + for jArg = 1:numel(varargin) + opts2 = varargin{jArg}; + for k = 1:size(opts2, 1) + opts = opts_append(opts, opts2{k,1}, opts2{k,2}); + end + end +end +function str = opts_print(m2t, opts, sep) +% pretty print an options array + nOpts = size(opts,1); + c = cell(nOpts,1); + for k = 1:nOpts + if isempty(opts{k,2}) + c{k} = sprintf('%s', opts{k,1}); + else + c{k} = sprintf('%s=%s', opts{k,1}, opts{k,2}); + end + end + str = join(m2t, c, sep); +end +% DEPRECATED OPTION ARRAYS ===================================================== +% TODO: Remove deprecated functions for next release +function opts = addToOptions(opts, key, value) +% Adds a key-value pair to a structure and does some sanity-checking. + warning('m2t:Deprecated','Use "opts_add" instead!'); + if ~exist('value','var') || isempty(value) + value = []; + end + opts = opts_add(opts, key, value); +end +function opts = merge(opts, varargin) +% Merges multiple option lists + warning('m2t:Deprecated','Use "opts_merge" instead!'); + opts = opts_merge(opts, varargin{:}); +end +function str = prettyprintOpts(m2t, opts, sep) + warning('m2t:Deprecated','Use "opts_print" instead!'); + str = opts_print(m2t, opts, sep); +end +% ============================================================================== +function [env,versionString] = getEnvironment() +% Checks if we are in MATLAB or Octave. + alternatives = {'MATLAB','Octave'}; + for iCase = 1:numel(alternatives) + env = alternatives{iCase}; + vData = ver(env); + if ~isempty(vData) + versionString = vData.Version; + return; % found the right environment + end + end + % otherwise: + env = ''; + versionString = ''; +end +% ============================================================================== +function isHG2 = isHG2(m2t) +% Checks if graphics system is HG2 (true) or HG1 (false). +% HG1 : MATLAB up to R2014a and currently all OCTAVE versions +% HG2 : MATLAB starting from R2014b (version 8.4) + isHG2 = false; + if strcmpi(m2t.env,'MATLAB') && ... + ~isVersionBelow(m2t.env, m2t.envVersion, [8,4]) + isHG2 = true; + end +end +% ============================================================================== +function isBelow = isVersionBelow(env, versionA, versionB) +% Checks if versionA is smaller than versionB + vA = versionArray(env, versionA); + vB = versionArray(env, versionB); + n = min(length(vA), length(vB)); + deltaAB = vA(1:n) - vB(1:n); + difference = find(deltaAB, 1, 'first'); + if isempty(difference) + isBelow = false; % equal versions + else + isBelow = (deltaAB(difference) < 0); + end +end +% ============================================================================== +function str = formatDim(value, unit) +% format the value for use as a TeX dimension + if ~exist('unit','var') || isempty(unit) + unit = ''; + end + tolerance = 1e-7; + value = round(value/tolerance)*tolerance; + if value == 1 && ~isempty(unit) && unit(1) == '\' + str = unit; % just use the unit + else + str = sprintf('%.6f', value); + str = regexprep(str, '(\d*\.\d*?)0+$', '$1'); % remove trailing zeros + str = regexprep(str, '\.$', ''); % remove trailing period + str = [str unit]; + end +end +% ============================================================================== +function arr = versionArray(env, str) +% Converts a version string to an array. + if ischar(str) + % Translate version string from '2.62.8.1' to [2; 62; 8; 1]. + switch env + case 'MATLAB' + split = regexp(str, '\.', 'split'); % compatibility MATLAB < R2013a + case 'Octave' + split = strsplit(str, '.'); + otherwise + errorUnknownEnvironment(); + end + arr = str2num(char(split)); %#ok + else + arr = str; + end + arr = arr(:)'; +end +% ============================================================================== +function [retval] = switchMatOct(m2t, matlabValue, octaveValue) +% Returns a different value for MATLAB and Octave + switch m2t.env + case 'MATLAB' + retval = matlabValue; + case 'Octave' + retval = octaveValue; + otherwise + errorUnknownEnvironment(); + end +end +% ============================================================================== +function checkDeprecatedEnvironment(m2t, minimalVersions) + if isfield(minimalVersions, m2t.env) + minVersion = minimalVersions.(m2t.env); + envWithVersion = sprintf('%s %s', m2t.env, minVersion.name); + + if isVersionBelow(m2t.env, m2t.envVersion, minVersion.num) + ID = 'matlab2tikz:deprecatedEnvironment'; + + warningMessage = ['\n', repmat('=',1,80), '\n\n', ... + ' matlab2tikz is tested and developed on %s and newer.\n', ... + ' This script may still be able to handle your plots, but if you\n', ... + ' hit a bug, please consider upgrading your environment first.\n', ... + ' Type "warning off %s" to suppress this warning.\n', ... + '\n', repmat('=',1,80), ]; + warning(ID, warningMessage, envWithVersion, ID); + + end + else + errorUnknownEnvironment(); + end +end +% ============================================================================== +function errorUnknownEnvironment() + error('matlab2tikz:unknownEnvironment',... + 'Unknown environment. Need MATLAB(R) or Octave.') +end +% ============================================================================== +function m2t = needsPgfplotsVersion(m2t, minVersion) + if isVersionBelow(m2t, m2t.pgfplotsVersion, minVersion) + m2t.pgfplotsVersion = minVersion; + end +end +% ============================================================================== +function str = formatPgfplotsVersion(m2t, version) + version = versionArray(m2t, version); + if all(isfinite(version)) + str = sprintf('%d.',version); + str = str(1:end-1); % remove the last period + else + str = 'newest'; + end +end +% ============================================================================== +function [formatted,treeish] = VersionControlIdentifier() +% This function gives the (git) commit ID of matlab2tikz +% +% This assumes the standard directory structure as used by Nico's master branch: +% SOMEPATH/src/matlab2tikz.m with a .git directory in SOMEPATH. +% +% The HEAD of that repository is determined from file system information only +% by following dynamic references (e.g. ref:refs/heds/master) in branch files +% until an absolute commit hash (e.g. 1a3c9d1...) is found. +% NOTE: Packed branch references are NOT supported by this approach + MAXITER = 10; % stop following dynamic references after a while + formatted = ''; + REFPREFIX = 'ref:'; + isReference = @(treeish)(any(strfind(treeish, REFPREFIX))); + treeish = [REFPREFIX 'HEAD']; + try + % get the matlab2tikz directory + m2tDir = fileparts(mfilename('fullpath')); + gitDir = fullfile(m2tDir,'..','.git'); + + nIter = 1; + while isReference(treeish) + refName = treeish(numel(REFPREFIX)+1:end); + branchFile = fullfile(gitDir, refName); + + if exist(branchFile, 'file') && nIter < MAXITER + fid = fopen(branchFile,'r'); + treeish = fscanf(fid,'%s'); + fclose(fid); + nIter = nIter + 1; + else % no branch file or iteration limit reached + treeish = ''; + return; + end + end + catch %#ok + treeish = ''; + end + if ~isempty(treeish) + formatted = sprintf('(commit %s)',treeish); + end +end +% ============================================================================== diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/myfile b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/myfile new file mode 100644 index 0000000000000000000000000000000000000000..43166ea1f31273c48b157724c1de1ee4e5ca775d --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/myfile @@ -0,0 +1,43 @@ +% This file was created by matlab2tikz. +% Minimal pgfplots version: 1.3 +% +%The latest updates can be retrieved from +% http://www.mathworks.com/matlabcentral/fileexchange/22022-matlab2tikz +%where you can also make suggestions and rate matlab2tikz. +% +\begin{tikzpicture} + +\begin{axis}[% +width=5.25in, +height=2.586207in, +at={(0.991379in,0.603448in)}, +scale only axis, +separate axis lines, +every outer x axis line/.append style={black}, +every x tick label/.append style={font=\color{black}}, +xmin=0, +xmax=120, +xlabel={$\fontsize{18}{0}\text{Prétension [kN]}$}, +xmajorgrids, +every outer y axis line/.append style={black}, +every y tick label/.append style={font=\color{black}}, +ymin=0, +ymax=1500, +ylabel={$\fontsize{18}{0}\text{Surface de contacte [mm}^\text{2}\text{]}$}, +ymajorgrids +] +\addplot [color=blue,solid,line width=2.0pt,mark=asterisk,mark options={solid},forget plot] + table[row sep=crcr]{% +10 41.465236444\\ +14 887.294699403\\ +18 1185.146646\\ +22 1185.146646\\ +26 1185.146646\\ +30 1185.146646\\ +50 1185.146646\\ +70 1185.146646\\ +90 1185.146646\\ +110 1185.146646\\ +}; +\end{axis} +\end{tikzpicture}% \ No newline at end of file diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/private/m2tUpdater.m b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/private/m2tUpdater.m new file mode 100644 index 0000000000000000000000000000000000000000..ea7adcdc11665ad28b775849e92bbf45b7b9c29a --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/private/m2tUpdater.m @@ -0,0 +1,142 @@ +function updater(name, fileExchangeUrl, version, verbose, env) +%UPDATER Auto-update matlab2tikz. +% Only for internal usage. + +% Copyright (c) 2012--2014, Nico Schlömer <nico.schloemer@gmail.com> +% All rights reserved. +% +% Redistribution and use in source and binary forms, with or without +% modification, are permitted provided that the following conditions are +% met: +% +% * Redistributions of source code must retain the above copyright +% notice, this list of conditions and the following disclaimer. +% * Redistributions in binary form must reproduce the above copyright +% notice, this list of conditions and the following disclaimer in +% the documentation and/or other materials provided with the distribution +% +% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +% POSSIBILITY OF SUCH DAMAGE. +% ========================================================================= + try + html = urlread([fileExchangeUrl, '/all_files']); + catch %#ok + % Couldn't load the URL -- never mind. + html = ''; + end + % Search for a string "/version-1.6.3" in the HTML. This assumes + % that the package author has added a file by that name to + % to package. This is a rather dirty hack around FileExchange's + % lack of native versioning information. + mostRecentVersion = regexp(html, '/version-(\d+\.\d+\.\d+)', 'tokens'); + if ~isempty(mostRecentVersion) + if isVersionBelow(env, version, mostRecentVersion{1}{1}) + userInfo(verbose, '**********************************************\n'); + userInfo(verbose, 'New version available! (%s)\n', mostRecentVersion{1}{1}); + userInfo(verbose, '**********************************************\n'); + + reply = input([' *** Would you like ', name, ' to self-upgrade? y/n [n]:'],'s'); + if strcmp(reply, 'y') + % Download the files and unzip its contents into the folder + % above the folder that contains the current script. + % This assumes that the file structure is something like + % + % src/matlab2tikz.m + % src/[...] + % AUTHORS + % ChangeLog + % [...] + % + % on the hard drive and the zip file. In particular, this assumes + % that the folder on the hard drive is writable by the user + % and that matlab2tikz.m is not symlinked from some other place. + pathstr = fileparts(mfilename('fullpath')); + targetPath = [pathstr, filesep, '..', filesep]; + userInfo(verbose, ['Downloading and unzipping to ', targetPath, '...']); + upgradeSuccess = false; + try + unzippedFiles = unzip([fileExchangeUrl, '?download=true'], targetPath); + upgradeSuccess = true; %~isempty(unzippedFiles); + userInfo(verbose, 'done.'); + catch + userInfo(verbose, 'FAILED.'); + end + if upgradeSuccess + % TODO explicitly delete all of the old content + % Delete old version number file. + versionFile = [pathstr, filesep, 'version-', version]; + if exist(versionFile, 'file') == 2 + delete(versionFile); + end + % TODO anything better than error()? + error('Upgrade successful. Please re-execute.'); + else + error('Upgrade failed.'); + end + end + userInfo(verbose, ''); + end + end +end +% ========================================================================= +function isBelow = isVersionBelow(env, versionA, versionB) + % Checks if version string or vector versionA is smaller than + % version string or vector versionB. + + vA = versionArray(env, versionA); + vB = versionArray(env, versionB); + + isBelow = false; + for i = 1:min(length(vA), length(vB)) + if vA(i) > vB(i) + isBelow = false; + break; + elseif vA(i) < vB(i) + isBelow = true; + break + end + end + +end +% ========================================================================= +function arr = versionArray(env, str) + % Converts a version string to an array, e.g., + % '2.62.8.1' to [2, 62, 8, 1]. + + if ischar(str) + if strcmpi(env, 'MATLAB') + split = regexp(str, '\.', 'split'); + elseif strcmpi(env, 'Octave') + split = strsplit(str, '.'); + end + arr = str2num(char(split)); %#ok + else + arr = str; + end + +end +% ========================================================================= +function userInfo(verbose, message, varargin) + % Display usage information. + + if ~verbose + return + end + + mess = sprintf(message, varargin{:}); + + % Replace '\n' by '\n *** ' and print. + mess = strrep( mess, sprintf('\n'), sprintf('\n *** ') ); + fprintf( ' *** %s\n', mess ); + +end +% ========================================================================= diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/test.text b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/test.text new file mode 100644 index 0000000000000000000000000000000000000000..69bc0dcf9eda9f3edbaf3c95eb0983909eb441bc --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/src/test.text @@ -0,0 +1,322 @@ +% This file was created by matlab2tikz. +% Minimal pgfplots version: 1.3 +% +%The latest updates can be retrieved from +% http://www.mathworks.com/matlabcentral/fileexchange/22022-matlab2tikz +%where you can also make suggestions and rate matlab2tikz. +% +\begin{tikzpicture} + +\begin{axis}[% +width=9.6875in, +height=3.34375in, +at={(1.625in,0.510417in)}, +scale only axis, +separate axis lines, +every outer x axis line/.append style={black}, +every x tick label/.append style={font=\color{black}}, +xmin=1, +xmax=10, +xlabel={$n_{std}$}, +xmajorgrids, +every outer y axis line/.append style={black}, +every y tick label/.append style={font=\color{black}}, +ymode=log, +ymin=100000, +ymax=1e+15, +yminorticks=true, +ylabel={condition number}, +ymajorgrids, +yminorgrids, +legend style={legend cell align=left,align=left,draw=black} +] +\addplot [color=blue,solid,line width=2.0pt] + table[row sep=crcr]{% +1 215657237.21042\\ +1.04522613 136820225.413517\\ +1.09045226 89608942.44\\ +1.13567839 60417150.9517798\\ +1.18090452 41831190.7629315\\ +1.22613065 29675776.706432\\ +1.27135678 21527373.5999616\\ +1.31658291 15939625.8614052\\ +1.36180905 12026890.1355725\\ +1.40703518 9233775.48088384\\ +1.45226131 7204182.27073421\\ +1.49748744 5705025.83181377\\ +1.54271357 4580776.43354252\\ +1.5879397 3725776.0785063\\ +1.63316583 3067036.45370892\\ +1.67839196 2553345.35426966\\ +1.72361809 2148243.42393524\\ +1.76884422 1825419.54430157\\ +1.81407035 1565644.080049\\ +1.85929648 1354695.28727389\\ +1.90452261 1181937.9131113\\ +1.94974874 1039335.55560049\\ +1.99497487 920756.316696951\\ +2.04020101 821478.398098347\\ +2.08542714 737834.662831489\\ +2.13065327 666954.225424749\\ +2.1758794 606572.911837312\\ +2.22110553 554893.041524291\\ +2.26633166 510479.001106209\\ +2.31155779 472179.23166594\\ +2.35678392 439068.236918351\\ +2.40201005 410404.872449736\\ +2.44723618 385606.329107303\\ +2.49246231 364244.522273867\\ +2.53768844 346098.071307408\\ +2.58291457 331439.715080992\\ +2.6281407 323070.674066522\\ +2.67336683 342018.259472786\\ +2.71859296 404629.185545462\\ +2.7638191 490126.661984278\\ +2.80904523 596166.073119711\\ +2.85427136 725661.314455159\\ +2.89949749 882971.221820954\\ +2.94472362 1073523.04104558\\ +2.98994975 1303861.38755625\\ +3.03517588 1581802.72481281\\ +3.08040201 1916643.18533517\\ +3.12562814 2319409.96384725\\ +3.17085427 2803158.06652063\\ +3.2160804 3383316.09890573\\ +3.26130653 4078088.51824717\\ +3.30653266 4908921.33545744\\ +3.35175879 5901040.91592187\\ +3.39698492 7084075.27483846\\ +3.44221106 8492770.41457107\\ +3.48743719 10167813.939853\\ +3.53266332 12156781.5683035\\ +3.57788945 14515221.8082826\\ +3.62311558 17307898.9755472\\ +3.66834171 20610214.052099\\ +3.71356784 24509827.2407036\\ +3.75879397 29108508.1556598\\ +3.8040201 34524242.7528462\\ +3.84924623 40893629.2122888\\ +3.89447236 48374599.2188472\\ +3.93969849 57149503.4606085\\ +3.98492462 67428607.2710279\\ +4.03015075 79454046.263808\\ +4.07537688 93504292.4951583\\ +4.12060302 109899199.394868\\ +4.16582915 129005681.433262\\ +4.21105528 151244114.639717\\ +4.25628141 177095528.706355\\ +4.30150754 207109697.02042\\ +4.34673367 241914183.663127\\ +4.3919598 282224524.052152\\ +4.43718593 328855574.775\\ +4.48241206 382734264.974901\\ +4.52763819 444913758.875845\\ +4.57286432 516589353.420124\\ +4.61809045 599116112.491952\\ +4.66331658 694028575.782968\\ +4.70854271 803062641.821928\\ +4.75376884 928179891.848816\\ +4.79899497 1071594634.99544\\ +4.84422111 1235803870.6776\\ +4.88944724 1423620520.509\\ +4.93467337 1638210187.87137\\ +4.9798995 1883131892.00857\\ +5.02512563 2162383057.1469\\ +5.07035176 2480449143.7932\\ +5.11557789 2842358530.11134\\ +5.16080402 3253742909.86987\\ +5.20603015 3720903913.42031\\ +5.25125628 4250886324.98886\\ +5.29648241 4851558755.61754\\ +5.34170854 5531702163.04615\\ +5.38693467 6301107163.49668\\ +5.4321608 7170680688.06443\\ +5.47738693 8152563062.37041\\ +5.52261307 9260256184.30458\\ +5.5678392 10508763860.3566\\ +5.61306533 11914745257.4492\\ +5.65829146 13496682903.8006\\ +5.70351759 15275066506.6756\\ +5.74874372 17272591869.1043\\ +5.79396985 19514380668.2299\\ +5.83919598 22028218261.798\\ +5.88442211 24844812785.3959\\ +5.92964824 27998077620.2401\\ +5.97487437 31525439606.0782\\ +6.0201005 35468172326.9619\\ +6.06532663 39871760149.2145\\ +6.11055276 44786292718.9093\\ +6.15577889 50266892837.4064\\ +6.20100503 56374181609.2205\\ +6.24623116 63174782057.1755\\ +6.29145729 70741865465.9649\\ +6.33668342 79155740523.69\\ +6.38190955 88504495353.6966\\ +6.42713568 98884689720.5283\\ +6.47236181 110402100245.653\\ +6.51758794 123172532736.627\\ +6.56281407 137322691872.685\\ +6.6080402 152991125424.64\\ +6.65326633 170329241170.995\\ +6.69849246 189502401912.638\\ +6.74371859 210691108219.242\\ +6.78894472 234092270123.166\\ +6.83417085 259920577253.124\\ +6.87939698 288409974555.423\\ +6.92462312 319815247850.498\\ +6.96984925 354413729710.578\\ +7.01507538 392507129197.163\\ +7.06030151 434423501985.988\\ +7.10552764 480519366253.382\\ +7.15075377 531181966841.959\\ +7.1959799 586831706221.842\\ +7.24120603 647924757226.93\\ +7.28643216 714955854364.587\\ +7.33165829 788461293848.765\\ +7.37688442 869022130770.009\\ +7.42211055 957267616672.292\\ +7.46733668 1053878876991.16\\ +7.51256281 1159592828040.97\\ +7.55778894 1275206352975.12\\ +7.60301508 1401580875580.12\\ +7.64824121 1539647052872.52\\ +7.69346734 1690409888850.37\\ +7.73869347 1854954327003.73\\ +7.7839196 2034450930427.24\\ +7.82914573 2230162170442.56\\ +7.87437186 2443449020877.6\\ +7.91959799 2675778040473.91\\ +7.96482412 2928728919473.7\\ +8.01005025 3204002481542.02\\ +8.05527638 3503429120415.6\\ +8.10050251 3828978067099.6\\ +8.14572864 4182766836195.08\\ +8.19095477 4567071646954.06\\ +8.2361809 4984338352691.71\\ +8.28140704 5437193957739.14\\ +8.32663317 5928458925046.44\\ +8.3718593 6461160390776.81\\ +8.41708543 7038546107707.71\\ +8.46231156 7664098911238.81\\ +8.50753769 8341552808902.62\\ +8.55276382 9074909106182.64\\ +8.59798995 9868454526284.93\\ +8.64321608 10726779534067.6\\ +8.68844221 11654798216265\\ +8.73366834 12657769212309.8\\ +8.77889447 13741318162726.6\\ +8.8241206 14911460665449.6\\ +8.86934673 16174627900245.6\\ +8.91457286 17537692291687.8\\ +8.95979899 19007995815445\\ +9.00502513 20593379106651.1\\ +9.05025126 22302213001529.2\\ +9.09547739 24143431056171.9\\ +9.14070352 26126564528964.6\\ +9.18592965 28261779255201.2\\ +9.23115578 30559914044206.9\\ +9.27638191 33032522158326.2\\ +9.32160804 35691914339897.3\\ +9.36683417 38551204026095.3\\ +9.4120603 41624356372873.2\\ +9.45728643 44926238364588.5\\ +9.50251256 48472672472399.1\\ +9.54773869 52280493366340.5\\ +9.59296482 56367607259008.2\\ +9.63819095 60753054065642.7\\ +9.68341709 65457074706447.7\\ +9.72864322 70501179167793.9\\ +9.77386935 75908220995300.4\\ +9.81909548 81702473021700.5\\ +9.86432161 87909710160957.6\\ +9.90954774 94557293096419.3\\ +9.95477387 101674259806590\\ +10 109291416242262\\ +}; +\addlegendentry{$Z^{\mathrm{T}}WZ$}; + +\addplot [color=black,solid,line width=2.0pt] + table[row sep=crcr]{% +1 560454412409859\\ +1.18367347 42498932093520.3\\ +1.36734694 5123890528457.51\\ +1.55102041 898105464233.222\\ +1.73469388 211017639202.433\\ +1.91836735 62169676611.3565\\ +2.10204082 21907648647.9303\\ +2.28571429 8926402639.07259\\ +2.46938776 4099829681.95167\\ +2.65306122 2080990765.85216\\ +2.83673469 1149170154.28539\\ +3.02040816 681802436.93214\\ +3.20408163 430217654.276045\\ +3.3877551 286338901.782842\\ +3.57142857 199653116.003929\\ +3.75510204 145016493.147664\\ +3.93877551 109206268.302508\\ +4.12244898 84925264.6026608\\ +4.30612245 67971453.1086336\\ +4.48979592 55832260.7758454\\ +4.67346939 46954284.3116833\\ +4.85714286 40348335.8101153\\ +5.04081633 35368028.5023324\\ +5.2244898 31581611.3051586\\ +5.40816327 28695666.7537723\\ +5.59183673 26508608.7673693\\ +5.7755102 24881882.2485996\\ +5.95918367 23722098.5228357\\ +6.14285714 22970352.5858438\\ +6.32653061 22596848.7230199\\ +6.51020408 22600475.7811779\\ +6.69387755 23014954.4581165\\ +6.87755102 23927246.9235142\\ +7.06122449 25524016.4254314\\ +7.24489796 28202140.1298424\\ +7.42857143 32758502.5023493\\ +7.6122449 40383651.4423756\\ +7.79591837 52193820.5722562\\ +7.97959184 69216418.0492402\\ +8.16326531 92847067.5423836\\ +8.34693878 125078476.218031\\ +8.53061224 168621384.493642\\ +8.71428571 227064562.415315\\ +8.89795918 305097706.446344\\ +9.08163265 408802687.901804\\ +9.26530612 546022951.373956\\ +9.44897959 726825866.229147\\ +9.63265306 964077206.835893\\ +9.81632653 1274151329.46174\\ +10 1677805397.01432\\ +}; +\addlegendentry{$Z^{\mathrm{T}}Z$}; + +\addplot [color=blue,dashed,line width=2.0pt,forget plot] + table[row sep=crcr]{% +1 323070.674066522\\ +10 323070.674066522\\ +}; +\addplot [color=black,dashed,line width=2.0pt,forget plot] + table[row sep=crcr]{% +1 22596848.7230199\\ +10 22596848.7230199\\ +}; +\addplot [color=blue,dashed,line width=2.0pt,forget plot] + table[row sep=crcr]{% +2.6281407 100000\\ +2.6281407 1e+16\\ +}; +\addplot [color=black,dashed,line width=2.0pt,forget plot] + table[row sep=crcr]{% +6.32653061 100000\\ +6.32653061 1e+16\\ +}; +\addplot [color=black,only marks,mark=*,mark options={solid,fill=green},forget plot] + table[row sep=crcr]{% +2.6281407 323070.674066522\\ +}; +\addplot [color=black,only marks,mark=*,mark options={solid,fill=red},forget plot] + table[row sep=crcr]{% +6.32653061 22596848.7230199\\ +}; +\end{axis} +\end{tikzpicture}% \ No newline at end of file diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/ACID.m b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/ACID.m new file mode 100644 index 0000000000000000000000000000000000000000..cf35d471800ec03f4e5acb7a6afb5a6b08a6646c --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/ACID.m @@ -0,0 +1,2378 @@ +% ========================================================================= +% *** FUNCTION ACID +% *** +% *** MATLAB2TikZ ACID test functions +% *** +% ========================================================================= +% *** +% *** Copyright (c) 2008--2014, Nico Schlömer <nico.schloemer@gmail.com> +% *** All rights reserved. +% *** +% *** Redistribution and use in source and binary forms, with or without +% *** modification, are permitted provided that the following conditions are +% *** met: +% *** +% *** * Redistributions of source code must retain the above copyright +% *** notice, this list of conditions and the following disclaimer. +% *** * Redistributions in binary form must reproduce the above copyright +% *** notice, this list of conditions and the following disclaimer in +% *** the documentation and/or other materials provided with the distribution +% *** +% *** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +% *** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +% *** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +% *** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +% *** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +% *** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +% *** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +% *** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +% *** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +% *** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +% *** POSSIBILITY OF SUCH DAMAGE. +% *** +% ========================================================================= +function [status] = ACID(k) + + % assign the functions to test + testfunction_handles = { ... + @multiline_labels , ... + @plain_cos , ... + @sine_with_markers , ... + @markerSizes , ... + @markerSizes2 , ... + @sine_with_annotation, ... + @linesWithOutliers , ... + @peaks_contour , ... + @contourPenny , ... + @peaks_contourf , ... + @many_random_points , ... + @double_colorbar , ... + @randomWithLines , ... + @double_axes , ... + @double_axes2 , ... + @logplot , ... + @colorbarLogplot , ... + @legendplot , ... + @legendplotBoxoff , ... + @moreLegends , ... + @zoom , ... + @quiveroverlap , ... + @quiverplot , ... + @quiver3plot , ... + @logicalImage , ... + @imagescplot , ... + @imagescplot2 , ... + @stairsplot , ... + @polarplot , ... + @roseplot , ... + @compassplot , ... + @stemplot , ... + @stemplot2 , ... + @bars , ... + @xAxisReversed , ... + @errorBars , ... + @errorBars2 , ... + @subplot2x2b , ... + @manualAlignment , ... + @subplotCustom , ... + @legendsubplots , ... + @bodeplots , ... + @rlocusPlot , ... + @mandrillImage , ... + @besselImage , ... + @clownImage , ... + @zplanePlot1 , ... + @zplanePlot2 , ... + @freqResponsePlot , ... + @axesLocation , ... + @axesColors , ... + @multipleAxes , ... + @scatterPlotRandom , ... + @scatterPlot , ... + @scatter3Plot , ... + @spherePlot , ... + @surfPlot , ... + @surfPlot2 , ... + @superkohle , ... + @meshPlot , ... + @ylabels , ... + @spectro , ... % takes pretty long to LuaLaTeX-compile + @mixedBarLine , ... + @decayingharmonic , ... + @texcolor , ... + @textext , ... + @texrandom , ... + @latexmath1 , ... + @latexmath2 , ... + @parameterCurve3d , ... + @parameterSurf , ... + @fill3plot , ... + @rectanglePlot , ... + @herrorbarPlot , ... + @hist3d , ... + @myBoxplot , ... + @areaPlot , ... + @customLegend , ... + @pixelLegend , ... + @croppedImage , ... + @pColorPlot , ... + @hgTransformPlot , ... + @scatterPlotMarkers , ... + @multiplePatches , ... + @logbaseline , ... + @alphaImage , ... + @annotation1 , ... + @annotation2 , ... + @annotation3 , ... + @annotationText , ... + @annotationTextUnits , ... + @imageOrientation_PNG, ... + @imageOrientation_inline, ... + @texInterpreter , ... + @stackedBarsWithOther, ... + @colorbarLabelTitle + }; + + + numFunctions = length( testfunction_handles ); + + if (k<=0) + status = testfunction_handles; + return; % This is used for querying numFunctions. + + elseif (k<=numFunctions) + status = testfunction_handles{k}(); + status.function = func2str(testfunction_handles{k}); + + else + error('testfunctions:outOfBounds', ... + 'Out of bounds (number of testfunctions=%d)', numFunctions); + end + +end +% ========================================================================= +function [stat] = multiline_labels() + stat.description = 'Test multiline labels and plot some points.'; + stat.md5 = '2f08dbb3f961daa409c91ce0f5be65e4'; + + m = [0 1 1.5 1 -1]; + plot(m,'*-'); hold on; + plot(m(end:-1:1)-0.5,'x--'); + + title({'multline','title'}); + legend({sprintf('multi-line legends\ndo work 2^2=4'), ... + sprintf('second\nplot')}); + xlabel(sprintf('one\ntwo\nthree')); + ylabel({'one','° ∞', 'three'}); + + set(gca,'YTick', []); + set(gca,'XTickLabel',{}); +end +% ========================================================================= +function [stat] = plain_cos() + stat.description = 'Plain cosine function with minimumPointsDistance of $0.5$.'; + stat.extraCleanfigureOptions = {'minimumPointsDistance', 0.5}; + stat.md5 = '888ccfb8de61fe94ef1a4b21b515bbb2'; + + fplot( @cos, [0,2*pi] ); + + % add some minor ticks + set(gca, 'XMinorTick', 'on'); + set(gca, 'YTick', []); + + % Adjust the aspect ratio when in MATLAB(R) or Octave >= 3.4. + env = getEnvironment(); + if strcmpi(env,'Octave') && isVersionBelow(env, 3,4) + % Octave < 3.4 doesn't have daspect unfortunately. + else + daspect([ 1 2 1 ]) + end +end +% ========================================================================= +function [stat] = sine_with_markers () + % Standard example plot from MATLAB's help pages. + stat.description = [ 'Twisted plot of the sine function. ' ,... + 'Pay particular attention to how markers and Infs/NaNs are treated.' ]; + stat.md5 = '96317b8317f3eddee9ca01ca338f6c73'; + + x = -pi:pi/10:pi; + y = tan(sin(x)) - sin(tan(x)); + y(3) = NaN; + y(7) = Inf; + y(11) = -Inf; + plot(x,y,'--o', 'Color', [0.6,0.2,0.0], ... + 'LineWidth', 1*360/127,... + 'MarkerEdgeColor','k',... + 'MarkerFaceColor',[0.3,0.1,0.0],... + 'MarkerSize', 5*360/127 ); + + set( gca, 'Color', [0.9 0.9 1], ... + 'XTickLabel', [], ... + 'YTickLabel', [] ... + ); + + set(gca,'XTick',[0]); + set(gca,'XTickLabel',{'null'}); +end +% ========================================================================= +function [stat] = markerSizes() + stat.description = 'Marker sizes.'; + stat.md5 = '466116e445acacf20b4d712600a43a63'; + + hold on; + + h = fill([1 1 2 2],[1 2 2 1],'r'); + set(h,'LineWidth',10); + + plot([0],[0],'go','Markersize',14,'LineWidth',10) + plot([0],[0],'bo','Markersize',14,'LineWidth',1) +end +% ========================================================================= +function [stat] = markerSizes2() + stat.description = 'Line plot with with different marker sizes.'; + stat.md5 = '0392b76c0de39655f33710fbd6bd5ac8'; + + hold on; + grid on; + + n = 1:10; + d = 10; + s = round(linspace(6,25,10)); + e = d * ones(size(n)); + style = {'bx','rd','go','c.','m+','y*','bs','mv','k^','r<','g>','cp','bh'}; + nStyles = numel(style); + + for ii = 1:nStyles + for jj = 1:10 + plot(n(jj), ii * e(jj),style{ii},'MarkerSize',s(jj)); + end + end + xlim([min(n)-1 max(n)+1]); + ylim([0 d*(nStyles+1)]); + set(gca,'XTick',n,'XTickLabel',s,'XTickLabelMode','manual'); +end +% ========================================================================= +function [stat] = sine_with_annotation () + stat.description = [ 'Plot of the sine function. ',... + 'Pay particular attention to how titles and annotations are treated.' ]; + stat.md5 = 'a59a2a2295b5db533cc733feceda974b'; + + x = -pi:.1:pi; + y = sin(x); + h = plot(x,y); + set(gca,'XTick',-pi:pi/2:pi); + + set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'}); + + xlabel('-\pi \leq \Theta \leq \pi'); + ylabel('sin(\Theta)'); + title({'Plot of sin(\Theta)','subtitle','and here''s one really long subtitle' }); + text(-pi/4,sin(-pi/4),'\leftarrow sin(-\pi\div4)',... + 'HorizontalAlignment','left'); + + % Doesn't work in Octave + %set(findobj(gca,'Type','line','Color',[0 0 1]),... + % 'Color','red',... + % 'LineWidth',10); + +end +% ========================================================================= +function [stat] = linesWithOutliers() + stat.description = 'Lines with outliers.'; + stat.md5 = 'ea2084452c49d1a6e0379739371b2e0a'; + + far = 200; + x = [ -far, -1, -1, -far, -10, -0.5, 0.5, 10, far, 1, 1, far, 10, 0.5, -0.5, -10, -far ]; + y = [ -10, -0.5, 0.5, 10, far, 1, 1, far, 10, 0.5, -0.5, -10, -far, -1, -1, -far, -0.5 ]; + plot( x, y,'o-'); + axis( [-2,2,-2,2] ); +end +% ========================================================================= +function [stat] = peaks_contour() + stat.description = 'Test contour plots.'; + stat.md5 = 'fd564136304fa8e0dac8365abee077b5'; + + [C, h] = contour(peaks(20),10); + clabel(C, h); + + % remove y-ticks + set(gca,'YTickLabel',[]); + set(gca,'YTick',[]); + + colormap winter; + +end +% ========================================================================= +function [stat] = contourPenny() + stat.description = 'Contour plot of a US\$ Penny.'; + stat.md5 = '2bcbbf33b2b4a3de6fe3c282acdbf6ae'; + stat.issues = [49 404]; + + if ~exist('penny.mat','file') + fprintf( 'penny data set not found. Skipping.\n\n' ); + stat.skip = true; + return; + end + + load penny; + contour(flipud(P)); + axis square; + +end +% ========================================================================= +function [stat] = peaks_contourf () + stat.description = 'Test the contourfill plots.'; + stat.md5 = '515a8b6209314b8a6ef0051b49b69508'; + + contourf(peaks(20), 10); + colorbar(); + legend('my legend'); +% colorbar('NorthOutside'); +% colorbar('SouthOutside'); +% colorbar('WestOutside'); + +% colormap([0:0.1:1; 1:-0.1:0; 0:0.1:1]') + colormap hsv; + +end +% ========================================================================= +function [stat] = double_colorbar() + stat.description = 'Double colorbar.'; + stat.md5 = ''; + + vspace = linspace(-40,40,20); + speed_map = magic(20).'; + Q1_map = magic(20); + + subplot(1, 2, 1); + contour(vspace(9:17),vspace(9:17),speed_map(9:17,9:17),20) + colorbar + axis tight + axis square + xlabel('$v_{2d}$') + ylabel('$v_{2q}$') + + subplot(1, 2, 2) + contour(vspace(9:17),vspace(9:17),Q1_map(9:17,9:17),20) + colorbar + axis tight + axis square + xlabel('$v_{2d}$') + ylabel('$v_{2q}$') +end +% ========================================================================= +function [stat] = randomWithLines() + stat.description = 'Lissajous points with lines.'; + stat.md5 = '9ddd96d692c4262ec581bbddea5dc5c0'; + + beta = 42.42; + t = 1:150; + X = [sin(t); cos(beta * t)].'; + + %X = randn(150,2); + X(:,1) = (X(:,1) * 90) + 75; + plot(X(:,1),X(:,2),'o'); + hold on; + M(1)=min(X(:,1)); + M(2)=max(X(:,1)); + mn = mean(X(:,2)); + s = std(X(:,2)); + plot(M,[mean(X(:,2)) mean(X(:,2))],'k-'); + plot(M,mn + 1*[s s],'--'); + plot(M,mn - 2*[s s],'--'); + axis('tight'); +end +% ========================================================================= +function [stat] = many_random_points () + stat.description = 'Test the performance when drawing many points.'; + stat.md5 = '759011e36b98a371a628a67cc29ca81d'; + + n = 1e3; + alpha = 1024; + beta = 1; + gamma = 5.47; + + x = cos( (1:n) * alpha ); + y = sin( (1:n) * beta + gamma); + + plot ( x, y, '.r' ); + axis([ 0, 1, 0, 1 ]) +end +% ========================================================================= +function [stat] = double_axes() + stat.description = 'Double axes'; + stat.md5 = ''; + + dyb = 0.1; % normalized units, bottom offset + dyt = 0.1; % separation between subsequent axes bottoms + + x = [0; 24; 48; 72; 96;]; + y = [7.653 7.473 7.637 7.652 7.651]; + + grid on + h1 = plot(x,y,'Color','k'); + + % following code is taken from `floatAxisX.m' + + % get position of axes + allAxes = findobj(gcf,'type','axes'); + naxes = length(allAxes); + ax1Pos = get(allAxes(naxes),'position'); + + % rescale and reposition all axes to handle additional axes + for an=1:naxes-1 + if isequal(rem(an,2),0) + % even ones in array of axes handles represent axes on which lines are plotted + set(allAxes(an),'Position',[ax1Pos(1,1) ax1Pos(1,2)+dyb ax1Pos(1,3) ax1Pos(1,4)-dyt]) + else + % odd ones in array of axes handles represent axes on which floating x-axss exist + axPos = get(allAxes(an),'Position'); + set(allAxes(an),'Position',[axPos(1,1) axPos(1,2)+dyb axPos(1,3) axPos(1,4)]) + end + end + % first axis a special case (doesn't fall into even/odd scenario of figure children) + set(allAxes(naxes),'Position',[ax1Pos(1,1) ax1Pos(1,2)+dyb ax1Pos(1,3) ax1Pos(1,4)-dyt]) + ylimit1 = get(allAxes(naxes),'Ylim'); + + % get new position for plotting area of figure + ax1Pos = get(allAxes(naxes),'position'); + + % axis to which the floating axes will be referenced + ref_axis = allAxes(1); + refPosition = get(ref_axis,'position'); + + % overlay new axes on the existing one + ax2 = axes('Position',ax1Pos); + % plot data and return handle for the line + hl1 = plot(x,y,'k'); + % make the new axes invisible, leaving only the line visible + set(ax2,'visible','off','ylim',ylimit1) + + % set the axis limit mode so that it does not change if the + % user resizes the figure window + set(ax2,'xLimMode','manual') + + % set up another set of axes to act as floater + ax3 = axes('Position',[refPosition(1) refPosition(2)-dyb refPosition(3) 0.01]); + + set(ax3,'box','off','ycolor','w','yticklabel',[],'ytick',[]) + set(ax3,'XMinorTick','on','color','none','xcolor',get(hl1,'color')) + + xlabel('secondary axis') +end +% ========================================================================= +function [stat] = double_axes2() + stat.description = 'Double overlayed axes with a flip.' ; + stat.md5 = '245182a1593794038e5a601a5b7f6a42'; + + ah1=axes; + ph=plot([0 1],[0 1]); + + title('Title') + ylabel('y') + xlabel('x') + + % add a new set of axes + % to make a gray grid + ah2=axes; + % make the background transparent + set(ah1,'color','none') + % move these axes to the back + set(gcf,'Child',flipud(get(gcf,'Children'))) +end +% ========================================================================= +function [stat] = logplot() + stat.description = 'Test logscaled axes.'; + stat.md5 = '25d66c6fdd92aeb32ddaff72d310e6f5'; + + x = logspace(-1,2); + loglog(x,exp(x),'-s') + grid on; +end +% ========================================================================= +function [stat] = colorbarLogplot() + stat.description = 'Logscaled colorbar.'; + stat.md5 = '8c99ef632b10a219daa1f09083d18bf5'; + + imagesc([1 10 100]); + try + set(colorbar(), 'YScale', 'log'); + catch + warning('M2TAcid:LogColorBar',... + 'Logarithmic Colorbars are not documented in MATLAB R2014b and Octave'); + stat.skip = true; + end +end +% ========================================================================= +function [stat] = legendplot() + stat.description = 'Test inserting of legends.'; + stat.md5 = 'a9e097172b3d79183b8ecbebeb4d8bed'; + +% x = -pi:pi/20:pi; +% plot(x,cos(x),'-ro',x,sin(x),'-.b'); +% h = legend('one pretty long legend cos_x','sin_x',2); +% set(h,'Interpreter','none'); + + x = 0:0.01:2*pi; + plot( x, sin(x), 'b', ... + x, cos(x), 'r' ); + xlim( [0 2*pi] ) + ylim( [-0.9 0.9] ) + title( '{tikz test}' ) + xlabel( '{x-Values}' ) + ylabel( '{y-Values}' ) + legend( 'sin(x)', 'cos(x)', 'Location','NorthOutside', ... + 'Orientation', 'Horizontal' ); + grid on; +end +% ========================================================================= +function [stat] = legendplotBoxoff () + stat.description = 'Test inserting of legends.'; + stat.md5 = '7b378300e46c789401e388cf7501ccd8'; + + x = -pi:pi/20:pi; + plot( x, cos(x),'-ro',... + x, sin(x),'-.b' ... + ); + h = legend( 'cos_x', 'one pretty long legend sin_x', 2 ); + set( h, 'Interpreter', 'none' ); + legend boxoff; +end +% ========================================================================= +function [stat] = moreLegends() + stat.description = 'More legends.'; + + x = 0:.1:7; + y1 = sin(x); + y2 = cos(x); + [ax,h1,h2] = plotyy(x,y1,x,y2); + legend([h1;h2],'Sine','Cosine'); +end +% ========================================================================= +function [stat] = zoom() + stat.description = 'Plain cosine function, zoomed in.'; + + fplot( @sin, [0,2*pi], '-*' ); + hold on; + delta = pi/10; + + plot( [pi/2, pi/2], [1-2*delta, 1+2*delta], 'r' ); % vertical line + plot( [pi/2-2*delta, pi/2+2*delta], [1, 1], 'g' ); % horizontal line + + % diamond + plot( [ pi/2-delta, pi/2 , pi/2+delta, pi/2 , pi/2-delta ], ... + [ 1 , 1-delta, 1, 1+delta, 1 ], 'y' ); + + % boundary lines with markers + plot([ pi/2-delta, pi/2 , pi/2+delta, pi/2+delta pi/2+delta, pi/2, pi/2-delta, pi/2-delta ], ... + [ 1-delta, 1-delta, 1-delta, 1, 1+delta, 1+delta, 1+delta, 1 ], ... + 'ok', ... + 'MarkerSize', 20, ... + 'MarkerFaceColor', 'g' ... + ); + + hold off; + + axis([pi/2-delta, pi/2+delta, 1-delta, 1+delta] ); +end +% ========================================================================= +function [stat] = bars() + stat.description = '2x2 Subplot with different bars'; + + % dataset grouped + bins = 10 * (-0.5:0.1:0.5); + numEntries = length(bins); + + alpha = [13 11 7]; + numBars = numel(alpha); + plotData = zeros(numEntries, numBars); + for iBar = 1:numBars + plotData(:,iBar) = abs(round(100*sin(alpha(iBar)*(1:numEntries)))); + end + + % dataset stacked + [data,dummy,dummy] = svd(magic(7)); %#ok + Y = round(abs(data(2:6,2:4))*10); + + subplot(2,2,1); + b1 = bar(bins,plotData,'grouped','BarWidth',1.5); + set(gca,'XLim',[1.25*min(bins) 1.25*max(bins)]); + + subplot(2,2,2); + barh(bins, plotData, 'grouped', 'BarWidth', 1.3); + + subplot(2,2,3); + bar(Y, 'stacked'); + + subplot(2,2,4); + b2= barh(Y,'stacked','BarWidth', 0.75); + + set(b1(1),'FaceColor','m','EdgeColor','none') + set(b2(1),'FaceColor','c','EdgeColor','none') + +end +% ========================================================================= +function [stat] = stemplot() + stat.description = 'A simple stem plot.' ; + + x = 0:25; + y = [exp(-.07*x).*cos(x); + exp(.05*x).*cos(x)]'; + h = stem(x, y); + legend( 'exp(-.07x)*cos(x)', 'exp(.05*x)*cos(x)', 'Location', 'NorthWest'); + set(h(1),'MarkerFaceColor','blue') + set(h(2),'MarkerFaceColor','red','Marker','square') +end +% ========================================================================= +function [stat] = stemplot2() + stat.description = 'Another simple stem plot.'; + + x = 0:25; + y = [exp(-.07*x).*cos(x); + exp(.05*x).*cos(x)]'; + h = stem(x, y, 'filled'); + legend( 'exp(-.07x)*cos(x)', 'exp(.05*x)*cos(x)', 'Location', 'NorthWest'); +end +% ========================================================================= +function [stat] = stairsplot() + stat.description = 'A simple stairs plot.' ; + + x = linspace(-2*pi,2*pi,40); + stairs(x,sin(x)) +end +% ========================================================================= +function [stat] = quiverplot() + stat.description = 'A combined quiver/contour plot of $x\exp(-x^2-y^2)$.' ; + + [X,Y] = meshgrid(-2:.2:2); + Z = X.*exp(-X.^2 - Y.^2); + [DX,DY] = gradient(Z,.2,.2); + contour(X,Y,Z); + hold on + quiver(X,Y,DX,DY); + colormap hsv; + hold off +end +% ========================================================================= +function [stat] = quiver3plot() + stat.description = 'Three-dimensional quiver plot.' ; + + vz = 10; % Velocity + a = -32; % Acceleration + + t = 0:.1:1; + z = vz*t + 1/2*a*t.^2; + + vx = 2; + x = vx*t; + vy = 3; + y = vy*t; + + u = gradient(x); + v = gradient(y); + w = gradient(z); + scale = 0; + quiver3(x,y,z,u,v,w,scale) + view([70 18]) +end +% ========================================================================= +function [stat] = quiveroverlap () + stat.description = 'Quiver plot with avoided overlap.'; + + x = [0 1]; + y = [0 0]; + u = [1 -1]; + v = [1 1]; + + quiver(x,y,u,v); +end +% ========================================================================= +function [stat] = polarplot () + stat.description = 'A simple polar plot.' ; + stat.extraOptions = {'showHiddenStrings',true}; + + t = 0:.01:2*pi; + polar(t,sin(2*t).*cos(2*t),'--r') +end +% ========================================================================= +function [stat] = roseplot () + stat.description = 'A simple rose plot.' ; + stat.extraOptions = {'showHiddenStrings',true}; + + theta = 2*pi*sin(linspace(0,8,100)); + rose(theta); +end +% ========================================================================= +function [stat] = compassplot () + stat.description = 'A simple compass plot.' ; + stat.extraOptions = {'showHiddenStrings',true}; + + Z = (1:20).*exp(1i*2*pi*cos(1:20)); + compass(Z); +end +% ========================================================================= +function [stat] = logicalImage() + stat.description = 'An image plot of logical matrix values.' ; + + [plotData,dummy,dummy] = svd(magic(10)); %#ok + imagesc(plotData > mean(plotData(:))); +end +% ========================================================================= +function [stat] = imagescplot() + stat.description = 'An imagesc plot of $\sin(x)\cos(y)$.'; + + pointsX = 10; + pointsY = 20; + x = 0:1/pointsX:1; + y = 0:1/pointsY:1; + z = sin(x)'*cos(y); + imagesc(x,y,z); +end +% ========================================================================= +function [stat] = imagescplot2() + stat.description = 'A trimmed imagesc plot.'; + + a=magic(10); + x=-5:1:4; + y=10:19; + imagesc(x,y,a) + + xlim([-3,2]) + ylim([12,15]) + + grid on; +end +% ========================================================================= +function [stat] = xAxisReversed () + stat.description = 'Reversed axes with legend.' ; + + n = 100; + x = (0:1/n:1); + y = exp(x); + plot(x,y); + set(gca,'XDir','reverse'); + set(gca,'YDir','reverse'); + legend( 'Location', 'SouthWest' ); +end +% ========================================================================= +function [stat] = subplot2x2b () + stat.description = 'Three aligned subplots on a $2\times 2$ subplot grid.' ; + + x = (1:5); + + subplot(2,2,1); + y = sin(x.^3); + plot(x,y); + + subplot(2,2,2); + y = cos(x.^3); + plot(x,y); + + subplot(2,2,3:4); + y = tan(x); + plot(x,y); +end +% ========================================================================= +function [stat] = manualAlignment() + stat.description = 'Manually aligned figures.'; + + xrange = linspace(-3,4,2*1024); + + axes('Position', [0.1 0.1 0.85 0.15]); + plot(xrange); + ylabel('$n$'); + xlabel('$x$'); + + axes('Position', [0.1 0.25 0.85 0.6]); + plot(xrange); + set(gca,'XTick',[]); +end +% ========================================================================= +function [stat] = subplotCustom () + stat.description = 'Three customized aligned subplots.' ; + + x = (1:5); + + y = cos(sqrt(x)); + subplot( 'Position', [0.05 0.1 0.3 0.3] ) + plot(x,y); + + y = sin(sqrt(x)); + subplot( 'Position', [0.35 0.5 0.3 0.3] ) + plot(x,y); + + y = tan(sqrt(x)); + subplot( 'Position', [0.65 0.1 0.3 0.3] ) + plot(x,y); +end +% ========================================================================= +function [stat] = errorBars () + stat.description = 'Generic error bar plot.'; + + plotData = 1:10; + [u,s,v] = svd(magic(11)); + + eH = abs(u(1:10,5)); + eL = abs(v(1:10,9)); + + errorbar(1:10, plotData, eL, eH, '.') +end +% ========================================================================= +function [stat] = errorBars2 () + stat.description = 'Another error bar example.'; + + data = load( 'myCount.dat' ); + y = mean( data, 2 ); + e = std( data, 1, 2 ); + errorbar( y, e, 'xr' ); +end +% ========================================================================= +function [stat] = legendsubplots() + stat.description = [ 'Subplots with legends. ' , ... + 'Increase value of "length" in the code to stress-test your TeX installation.' ]; + + % size of upper subplot + rows = 4; + % number of points. A large number here (eg 1000) will stress-test + % matlab2tikz and your TeX installation. Be prepared for it to run out of + % memory + length = 100; + + % generate some spurious data + t = 0:(4*pi)/length:4*pi; + x = t; + a = t; + y = sin(t) + 0.1*sin(134*t.^2); + b = sin(t) + 0.1*cos(134*t.^2) + 0.05*cos(2*t); + + % plot the top figure + subplot(rows+2,1,1:rows); + + % first line + sigma1 = std(y); + tracey = mean(y,1); + plot123 = plot(x,tracey,'b-'); + + hold on + + % second line + sigma2 = std(b); + traceb = mean(b,1); + plot456 = plot(a,traceb,'r-'); + + spec0 = ['Mean V(t)_A (\sigma \approx ' num2str(sigma1,'%0.4f') ')']; + spec1 = ['Mean V(t)_B (\sigma \approx ' num2str(sigma2,'%0.4f') ')']; + + hold off + %plot123(1:2) + legend([plot123; plot456],spec0,spec1) + legend boxoff + xlabel('Time/s') + ylabel('Voltage/V') + title('Time traces'); + + % now plot a differential trace + subplot(rows+2,1,rows+1:rows+2) + plot7 = plot(a,traceb-tracey,'k'); + + legend(plot7,'\Delta V(t)') + legend boxoff + xlabel('Time/s') + ylabel('\Delta V') + title('Differential time traces'); +end +% ========================================================================= +function [stat] = bodeplots() + stat.description = 'Bode plots with legends.'; + + if isempty(which('tf')) + fprintf( 'function "tf" not found. Skipping.\n\n' ); + stat.skip = true; + return + end + + Rc=1; + C=1.5e-6; %F + + % Set inductors + L1=4e-3; + L2=0.8e-3; + + % Resistances of inductors + R1=4; + R2=2; + + % Transfer functions + % Building transfer functions + s=tf('s'); + Zc=1/(s*C)+Rc; + Z1=s*L1+R1; + Z2=s*L2+R2; + LCLd=(Z2+Zc)/(Z1+Zc); + LCL=(s^2*C*L2+1)/(s^2*C*L1+1); + + t=logspace(3,5,1000); + bode(LCL,t) + hold on + bode(LCLd,t) + title('Voltage transfer function of a LCL filter') + set(findall(gcf,'type','line'),'linewidth',1.5) + grid on + + legend('Perfect LCL',' Real LCL','Location','SW') +end +% ========================================================================= +function [stat] = rlocusPlot() + stat.description = 'rlocus plot.'; + + if isempty(which('tf')) + fprintf( 'function "tf" not found. Skipping.\n\n' ); + stat.skip = true; + return + end + + s=tf('s'); + rlocus(tf([1 1],[4 3 1])) +end +% ========================================================================= +function [stat] = mandrillImage() + stat.description = 'Picture of a mandrill.'; + + if ~exist('mandrill.mat','file') + fprintf( 'mandrill data set not found. Skipping.\n\n' ); + stat.skip = true; + return + end + + data = load( 'mandrill' ); + image( data.X ) % show image + colormap( data.map ) % adapt colormap + axis image % pixels should be square + axis off % disable axis +end +% ========================================================================= +function [stat] = besselImage() + stat.description = 'Bessel function.'; + + nu = -5:0.25:5; + beta = 0:0.05:2.5; + + m = length(beta); + n = length(nu); + trace = zeros(m,n); + for i=1:length(beta); + for j=1:length(nu) + if (floor(nu(j))==nu(j)) + trace(i,j)=abs(besselj(nu(j),beta(i))); + end + end + end + + imagesc(nu,beta,trace); + colorbar() + xlabel('Order') + ylabel('\beta') + set(gca,'YDir','normal') +end +% ========================================================================= +function [stat] = clownImage() + stat.description = 'Picture of a clown.'; + + if ~exist('clown.mat','file') + fprintf( 'clown data set not found. Skipping.\n\n' ); + stat.skip = true; + return + end + + data = load( 'clown' ); + imagesc( data.X ) + colormap( gray ) +end +% ========================================================================= +function [stat] = zplanePlot1() + stat.description = 'Representation of the complex plane with zplane.'; + + % check of the signal processing toolbox is installed + if length(ver('signal')) ~= 1 + fprintf( 'Signal toolbox not found. Skip.\n\n' ); + stat.skip = true; + + return + end + + [z,p] = ellip(4,3,30,200/500); + zplane(z,p); + title('4th-Order Elliptic Lowpass Digital Filter'); +end +% ========================================================================= +function [stat] = zplanePlot2() + stat.description = 'Representation of the complex plane with zplane.'; + stat.closeall = true; + + % check of the signal processing toolbox is installed + if length(ver('signal')) ~= 1 + fprintf( 'Signal toolbox not found. Skip.\n\n' ); + stat.skip = true; + return + end + + [b,a] = ellip(4,3,30,200/500); + Hd = dfilt.df1(b,a); + zplane(Hd) % FIXME: This opens a new figure that doesn't get closed automatically +end +% ========================================================================= +function [stat] = freqResponsePlot() + stat.description = 'Frequency response plot.'; + stat.closeall = true; + stat.issues = [409]; + + % check of the signal processing toolbox is installed + if length(ver('signal')) ~= 1 + fprintf( 'Signal toolbox not found. Skip.\n\n' ); + stat.skip = true; + return + end + + b = fir1(80,0.5,kaiser(81,8)); + hd = dfilt.dffir(b); + freqz(hd); % FIXME: This opens a new figure that doesn't get closed automatically +end +% ========================================================================= +function [stat] = axesLocation() + stat.description = 'Swapped axis locations.'; + + plot(cos(1:10)); + set(gca,'XAxisLocation','top'); + set(gca,'YAxisLocation','right'); +end +% ========================================================================= +function [stat] = axesColors() + stat.description = 'Custom axes colors.'; + + plot(sin(1:15)); + set(gca,'XColor','g','YColor','b'); +% set(gca,'XColor','b','YColor','k'); + box off; +end +% ========================================================================= +function [stat] = multipleAxes() + stat.description = 'Multiple axes.'; + + x1 = 0:.1:40; + y1 = 4.*cos(x1)./(x1+2); + x2 = 1:.2:20; + y2 = x2.^2./x2.^3; + + line(x1,y1,'Color','r'); + ax1 = gca; + set(ax1,'XColor','r','YColor','r') + + ax2 = axes('Position',get(ax1,'Position'),... + 'XAxisLocation','top',... + 'YAxisLocation','right',... + 'Color','none',... + 'XColor','k','YColor','k'); + + line(x2,y2,'Color','k','Parent',ax2); + + xlimits = get(ax1,'XLim'); + ylimits = get(ax1,'YLim'); + xinc = (xlimits(2)-xlimits(1))/5; + yinc = (ylimits(2)-ylimits(1))/5; + + % Now set the tick mark locations. + set(ax1,'XTick',xlimits(1):xinc:xlimits(2) ,... + 'YTick',ylimits(1):yinc:ylimits(2) ) +end +% ========================================================================= +function [stat] = scatterPlotRandom() + stat.description = 'Generic scatter plot.'; + + n = 1:100; + scatter(n, n, 1000*(1+cos(n.^1.5)), n.^8); + colormap autumn; +end +% ========================================================================= +function [stat] = scatterPlot() + stat.description = 'Scatter plot with MATLAB(R) stat.'; + if ~exist('seamount.mat','file') + fprintf( 'seamount data set not found. Skipping.\n\n' ); + stat.skip = true; + return + end + + data = load( 'seamount' ); + scatter( data.x, data.y, 5, data.z, '^' ); +end +% ========================================================================= +function [stat] = scatterPlotMarkers() + stat.description = 'Scatter plot with with different marker sizes and legend.'; + + n = 1:10; + d = 10; + s = d^2 * n; + e = d * ones(size(n)); + grid on; + hold on; + + style = {'bx','rd','go','c.','m+','y*','bs','mv','k^','r<','g>','cp','bh'}; + names = {'bx','rd','go','c.','m plus','y star','bs','mv',... + 'k up triangle','r left triangle','g right triangle','cp','bh'}; + + nStyles = numel(style); + for ii = 1:nStyles + scatter(n, ii * e, s, style{ii}); + end + xlim([min(n)-1 max(n)+1]); + ylim([0 d*(nStyles+1)]); + set(gca,'XTick',n,'XTickLabel',s,'XTickLabelMode','manual'); + +end +% ========================================================================= +function [stat] = scatter3Plot() + stat.description = 'Scatter3 plot with MATLAB(R) stat.'; + + [x,y,z] = sphere(16); + X = [x(:)*.5 x(:)*.75 x(:)]; + Y = [y(:)*.5 y(:)*.75 y(:)]; + Z = [z(:)*.5 z(:)*.75 z(:)]; + S = repmat([1 .75 .5]*10,numel(x),1); + C = repmat([1 2 3],numel(x),1); + scatter3(X(:),Y(:),Z(:),S(:),C(:),'filled'), view(-60,60) + view(40,35) +end +% ========================================================================= +function [stat] = spherePlot() + stat.description = 'Plot a sphere.'; + + sphere(30); + title('a sphere: x^2+y^2+z^2'); + xlabel('x'); + ylabel('y'); + zlabel('z'); + axis equal; +end +% ========================================================================= +function [stat] = surfPlot() + stat.description = 'Surface plot.'; + + [X,Y,Z] = peaks(30); + surf(X,Y,Z) + colormap hsv + axis([-3 3 -3 3 -10 5]) + set(gca,'View',[-37.5,36]); + + hc = colorbar('YTickLabel', ... + {'Freezing','Cold','Cool','Neutral',... + 'Warm','Hot','Burning','Nuclear'}); + set(get(hc,'Xlabel'),'String','Multitude'); + set(get(hc,'Ylabel'),'String','Magnitude'); + set(hc,'YTick',0:0.7:7); + set(hc,'YTickLabel',... + {'-0.8' '-0.6' '-0.4' '-0.2' '0.0' ... + '0.2' '0.4' '0.6' '0.8' '0.10' '0.12'}); + + set(get(hc,'Title'),... + 'String', 'k(u,v)', ... + 'FontSize', 12, ... + 'interpreter', 'tex'); + + xlabel( 'x' ) + ylabel( 'y' ) + zlabel( 'z' ) +end +% ========================================================================= +function [stat] = surfPlot2() + stat.description = 'Another surface plot.'; + + z = [ ones(15, 5) zeros(15,5); + zeros(5, 5) zeros( 5,5)]; + + surf(abs(fftshift(fft2(z))) + 1); + set(gca,'ZScale','log'); + + legend( 'legendary', 'Location', 'NorthEastOutside' ); +end +% ========================================================================= +function [stat] = superkohle() + + if ~exist('initmesh') + fprintf( 'initmesh() not found. Skipping.\n\n' ); + stat.skip = true; + return; + end + + stat.description = 'Superkohle plot.'; + + x1=0; + x2=pi; + y1=0; + y2=pi; + omegashape = [2 2 2 2 % 2 = line segment; 1 = circle segment; 4 = elipse segment + x1 x2 x2 x1 % start point x + x2 x2 x1 x1 % end point x + y1 y1 y2 y2 % start point y + y1 y2 y2 y1 % end point y + 1 1 1 1 + 0 0 0 0]; + [xy,edges,tri] = initmesh(omegashape,'Hgrad',1.05); + mmin = 1; + while size(xy,2) < mmin + [xy,edges,tri] = refinemesh(omegashape,xy,edges,tri); + end + m = size(xy,2); + x = xy(1,:)'; + y = xy(2,:)'; + y0 = cos(x).*cos(y); + + pdesurf(xy,tri,y0(:,1)); + title('y_0'); + xlabel('x1 axis'); + ylabel('x2 axis'); + axis([0 pi 0 pi -1 1]); + grid on; +end +% ========================================================================= +function [stat] = meshPlot() + stat.description = 'Mesh plot.'; + + [X,Y,Z] = peaks(30); + mesh(X,Y,Z) + colormap hsv + axis([-3 3 -3 3 -10 5]) + + xlabel( 'x' ) + ylabel( 'y' ) + zlabel( 'z' ) +end +% ========================================================================= +function [stat] = ylabels() + stat.description = 'Separate y-labels.'; + + x = 0:.01:2*pi; + H = plotyy(x,sin(x),x,3*cos(x)); + + ylabel(H(1),'sin(x)'); + ylabel(H(2),'3cos(x)'); + + xlabel(gca,'time') +end +% ========================================================================= +function [stat] = spectro() + stat.description = 'Spectrogram plot'; + + % In the original test case, this is 0:0.001:2, but that takes forever + % for LaTeX to process. + if isempty(which('chirp')) + fprintf( 'chirp() not found. Skipping.\n\n' ); + stat.description = []; + stat.skip = true; + return + end + + T = 0:0.005:2; + X = chirp(T,100,1,200,'q'); + spectrogram(X,128,120,128,1E3); + title('Quadratic Chirp'); +end +% ========================================================================= +function [stat] = mixedBarLine() + stat.description = 'Mixed bar/line plot.'; + + [x,s,v] = svd(magic(33)); + x = x(end:-1:end-1000); + hist(x,10) + y = ylim; + hold on; + plot([mean(x) mean(x)], y, '-r'); + hold off; +end +% ========================================================================= +function [stat] = decayingharmonic() + stat.description = 'Decaying harmonic oscillation with \TeX{} title.'; + + % Based on an example from + % http://www.mathworks.com/help/techdoc/creating_plots/f0-4741.html#f0-28104 + A = 0.25; + alpha = 0.007; + beta = 0.17; + t = 0:901; + y = A * exp(-alpha*t) .* sin(beta*t); + plot(t, y) + title('{\itAe}^{-\alpha\itt}sin\beta{\itt}, \alpha<<\beta, \beta>>\alpha, \alpha<\beta, \beta>\alpha') + xlabel('Time \musec.') + ylabel('Amplitude') +end +% ========================================================================= +function [stat] = texcolor() + stat.description = 'Multi-colored text using \TeX{} commands.'; + + % Taken from an example at + % http://www.mathworks.com/help/techdoc/creating_plots/f0-4741.html#f0-28104 + text(.1, .5, ['\fontsize{16}black {\color{magenta}magenta '... + '\color[rgb]{0 .5 .5}teal \color{red}red} black again']) +end +% ========================================================================= +function [stat] = textext() + stat.description = 'Formatted text and special characters using \TeX{}.'; + + % Taken from an example at + % http://www.mathworks.com/help/techdoc/creating_plots/f0-4741.html#f0-28303 + txstr(1) = { 'Each cell is a quoted string' }; + txstr(2) = { 'You can specify how the string is aligned' }; + txstr(3) = { 'You can use LaTeX symbols like \pi \chi \Xi' }; + txstr(4) = { '\bfOr use bold \rm\itor italic font\rm' }; + txstr(5) = { '\fontname{courier}Or even change fonts' }; + plot( 0:6, sin(0:6) ) + text( 5.75, sin(2.5), txstr, 'HorizontalAlignment', 'right' ) +end +% ========================================================================= +function [stat] = texrandom() + stat.description = 'Random TeX symbols'; + + try + rng(42); %fix seed + %TODO: fully test tex conversion instead of a random subsample! + catch + warning('testfuncs:texrandom','Cannot fix seed for random generator!'); + end + + num = 20; % number of symbols per line + symbols = {'\it', '\bf', '\rm', '\sl', ... + '\alpha', '\angle', '\ast', '\beta', '\gamma', '\delta', ... + '\epsilon', '\zeta', '\eta', '\theta', '\vartheta', ... + '\iota', '\kappa', '\lambda', '\mu', '\nu', '\xi', '\pi', ... + '\rho', '\sigma', '\varsigma', '\tau', '\equiv', '\Im', ... + '\otimes', '\cap', '{\int}', '\rfloor', '\lfloor', '\perp',... + '\wedge', '\rceil', '\vee', '\langle', '\upsilon', '\phi', ... + '\chi', '\psi', '\omega', '\Gamma', '\Delta', '\Theta', ... + '\Lambda', '\Xi', '\Pi', '\Sigma', '\Upsilon', '\Phi', ... + '\Psi', '\Omega', '\forall', '\exists', '\ni', '{\cong}', ... + '\approx', '\Re', '\oplus', '\cup', '\subseteq', '\lceil', ... + '\cdot', '\neg', '\times', '\surd', '\varpi', '\rangle', ... + '\sim', '\leq', '\infty', '\clubsuit', '\diamondsuit', ... + '\heartsuit', '\spadesuit', '\leftrightarrow', ... + '\leftarrow', '\Leftarrow', '\uparrow', '\rightarrow', ... + '\Rightarrow', '\downarrow', '\circ', '\pm', '\geq', ... + '\propto', '\partial', '\bullet', '\div', '\neq', ... + '\aleph', '\wp', '\oslash', '\supseteq', '\nabla', ... + '{\ldots}', '\prime', '\0', '\mid', '\copyright', ... + '\o', '\in', '\subset', '\supset', ... + '\_', '\^', '\{', '\}', '$', '%', '#', ... + '(', ')', '+', '-', '=', '/', ',', '.', '<', '>', ... + '!', '?', ':', ';', '*', '[', ']', '§', '"', '''', ... + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ... + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', ... + 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', ... + 'w', 'x', 'y', 'z', ... + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', ... + 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', ... + 'W', 'X', 'Y', 'Z' ... + }; + % Note: Instead of '\ldots' the list of symbols contains the entry + % '{\ldots}'. This is because TeX gives an error if it + % encounters the sequence '$a_\ldots$' or '$a^\ldots$'. It + % looks like that is a TeX bug. Nevertheless this sequence + % could appear in the random output, therefore \ldots is + % wrapped in braces since '$a_{\ldots}$' and '$a^{\ldots}$' + % don't crash TeX. + % Same thing with '\cong' and '\int'. + % \color{red} etc. isn't included + % \fontname{Times} etc. isn't included + % \fontsize{12} etc. isn't included + + switch getEnvironment() + case 'MATLAB' + % MATLAB expects tilde and ampersand to be un-escaped and backslashes + % to be escaped + symbols = [ symbols, {'~', '&', '\\'} ]; + case 'Octave' + % Octave expects tilde and ampersand to be escaped for regular + % output. If either are used un-escaped, that creates odd output in + % Octave itself, but since matlab2tikz should be able to handle + % those cases, let's include the un-escaped symbols in the list. + symbols = [ symbols, {'\~', '\&', '~', '&'} ]; + % Octave's backslash handling is weird to say the least. However, + % matlab2tikz treats backslashes the same in Octave as it does in + % MATLAB. Therefore, let's add an escaped backslash to the list + symbols = [ symbols, {'\\'} ]; + otherwise + error( 'Unknown environment. Need MATLAB(R) or Octave.' ) + end + + for ypos = [0.9:-.2:.1] + % Generate `num' random indices to the list of symbols + index = max(ceil(rand(1, num)*length(symbols)), 1); + % Assemble symbols into one cell string array + string = symbols(index); + + % Add random amount of balanced braces in random positions to `string'. + % By potentially generating more than one set of braces randomly, it's + % possible to create more complex patterns of nested braces. Increase + % `braceprob' to get more braces, but don't use values greater than or + % equal 1 which would result in an infinite loop. + braceprob = 0.6; + while rand(1,1) < braceprob + % Generate two random numbers ranging from 1 to n with n = number + % of symbols in `string' + bracepos = max(ceil(rand(1, 2)*length(string)), 1); + % Modify `string' so that an opening brace is inserted before + % min(bracepos) symbols and a closing brace after max(bracepos) + % symbols. That way any number of symbols from one to all in + % `string' are wrapped in braces for min(bracepos) == max(bracepos) + % and min(bracepos) == 1 && max(bracepos) == length(string), + % respectively. + string = [string(1:min(bracepos)-1), {'{'}, ... + string(min(bracepos):max(bracepos)), ... + {'}'}, string(max(bracepos)+1:end) ]; + end + % Clean up: remove '{}', '{{}}', etc. + clean = false; + while clean == false + clean = true; + for i = 1:length(string)-1 + if strcmp( string(i), '{' ) && strcmp( string(i+1), '}' ) + string = [string(1:i-1), string(i+2:end)]; + clean = false; + break + end + end + end + + % Subscripts '_' and superscripts '^' in TeX are tricky in that certain + % combinations are not allowed and there are some subtleties in regard + % to more complicated combinations of sub/superscripts: + % - ^a or _a at the beginning of a TeX math expression is permitted. + % - a^ or a_ at the end of a TeX math expression is not. + % - a__b, a_^b, a^_b, or a^^b is not allowed, as is any number of + % consecutive sub/superscript operators. Actually a^^b does not + % crash TeX, but it produces seemingly random output instead of `b', + % therefore it should be avoided, too. + % - a^b^c or a_b_c is not allowed as it results in a "double subscript/ + % superscript" error. + % - a^b_c or a_b^c, however, does work. + % - a^bc^d or a_bc_d also works. + % - a^b_c^d or a_b^c_d is not allowed and results in a "double + % subscript/superscript" error. + % - a{_}b, a{^}b, {a_}b or {a^}b is not permitted. + % - a{_b} or a{^b} is valid TeX code. + % - {a_b}_c produces the same output as a_{bc}. Likewise for '^'. + % - a_{b_c} results in "a index b sub-index c". Likewise for '^'. + % - a^{b}^c or a_{b}_c is not allowed as it results in a "double + % subscript/superscript" error. + % + % From this we can derive a number of rules: + % 1) The last symbol in a TeX string must not be '^' or '_'. + % 2a) There must be at least one non-brace symbol between any '^' and '_'. + % 2b) There must be at least one non-brace symbol between any '_' and '^'. + % 3a) There must either be at least two non-brace, non-'_' symbols or at + % least one non-brace, non-'_' symbol and one brace (opening or + % closing) between any two '^'. + % 3b) There must either be at least two non-brace, non-'^' symbols or at + % least one brace (opening or closing) between any two '_'. + % 4) '^' or '_' must not appear directly before '}'. + % 5) '^' or '_' must not appear directly after '}'. + % 6) Whenever braces were mentioned, that refers to non-empty braces, + % i.e. '{}' counts as nothing. Printable/escaped braces '\{' and '\}' + % also don't count as braces but as regular symbols. + % 7) '^' or '_' must not appear directly before '\it', '\bf', '\rm', or + % '\sl'. + % 8) '^' or '_' must not appear directly after '\it', '\bf', '\rm', or + % '\sl'. + % + % A few test cases: + % Permitted: ^a... _a... a^b_c a_b^c a^bc^d a_bc_d a{_b} a{^b} + % {a_b}_c a_{bc} {a^b}^c a^{bc} a_{b_c} a^{b^c} + % Forbidden: ...z^ ...z_ a__b a_^b a^_b [a^^b] a^b^c a_b_c + % a^b_c^d a_b^c_d a{_}b a{^}b {a_}b {a^}b + % a^{_b} a_{^b} a^{b}^c a_{b}_c + % + % Now add sub/superscripts according to these rules + subsupprob = 0.1; % Probability for insertion of a sub/superscript + caretdist = Inf; % Distance to the last caret + underscdist = Inf; % Distance to the last underscore + bracedist = Inf; % Distance to the last brace (opening or closing) + pos = 0; + % Making sure the post-update `pos' in the while loop is less than the + % number of symbols in `string' enforces rule 1: The last symbol in + % a TeX string must not be '^' or '_'. + while pos+1 < length(string) + % Move one symbol further + pos = pos + 1; + % Enforce rule 7: No sub/superscript directly before '\it', '\bf', + % '\rm', or '\sl'. + if strcmp( string(pos), '\it' ) || strcmp( string(pos), '\bf' ) ... + || strcmp( string(pos), '\rm' ) || strcmp( string(pos), '\sl' ) + continue + end + % Enforce rule 8: No sub/superscript directly after '\it', '\bf', + % '\rm', or '\sl'. + if (pos > 1) ... + && ( strcmp( string(pos-1), '\it' ) ... + || strcmp( string(pos-1), '\bf' ) ... + || strcmp( string(pos-1), '\rm' ) ... + || strcmp( string(pos-1), '\sl' ) ... + ) + continue + end + bracedist = bracedist + 1; + % Enforce rule 4: No sub/superscript directly before '}' + if strcmp( string(pos), '}' ) + bracedist = 0; % Also update braces distance + continue + end + % Enforce rule 5: No sub/superscript directly after '}' + if (pos > 1) && strcmp( string(pos-1), '}' ) + continue + end + % Update distances for either braces or caret/underscore depending + % on whether the symbol currently under scrutiny is a brace or not. + if strcmp( string(pos), '{' ) + bracedist = 0; + else + caretdist = caretdist + 1; + underscdist = underscdist + 1; + end + % Generate two random numbers, then check if any of them is low + % enough, so that with probability `subsupprob' a sub/superscript + % operator is inserted into `string' at the current position. In + % case both random numbers are below the threshold, whether a + % subscript or superscript operator is to be inserted depends on + % which of the two numbers is smaller. + randomnums = rand(1, 2); + if min(randomnums) < subsupprob + if randomnums(1) < randomnums(2) + % Enforce rule 2b: There must be at least one non-brace + % symbol between previous '_' and to-be-inserted '^'. + if underscdist < 1 + continue + end + % Enforce rule 3a: There must either be at least two + % non-brace, non-'_' symbols or at least one brace (opening + % or closing) between any two '^'. + if ~( ((caretdist >= 2) && (underscdist >= 2)) ... + || ((bracedist < 2) && (caretdist >= 2)) ) + continue + end + % Insert '^' before `pos'th symbol in `string' now that + % we've made sure all rules are honored. + string = [ string(1:pos-1), {'^'}, string(pos:end) ]; + caretdist = 0; + pos = pos + 1; + else + % Enforce rule 2a: There must be at least one non-brace + % symbol between previous '^' and to-be-inserted '_'. + if caretdist < 1 + continue + end + % Enforce rule 3b: There must either be at least two + % non-brace, non-'^' symbols or at least one brace (opening + % or closing) between any two '_'. + if ~( ((caretdist >= 2) && (underscdist >= 2)) ... + || ((bracedist < 2) && (underscdist >= 2)) ) + continue + end + % Insert '_' before `pos'th symbol in `string' now that + % we've made sure all rules are honored. + string = [ string(1:pos-1), {'_'}, string(pos:end) ]; + underscdist = 0; + pos = pos + 1; + end + end + end % while pos+1 < length(string) + + % Now convert the cell string array of symbols into one regular string + string = [string{:}]; + % Print the string in the figure to be converted by matlab2tikz + text( .05, ypos, string, 'interpreter', 'tex' ) + % And print it to the console, too, in order to enable analysis of + % failed tests + fprintf( 'Original string: %s\n', string ) + end + + title('Random TeX symbols \\\{\}\_\^$%#&') +end +% ========================================================================= +function [stat] = latexmath1() + stat.description = 'A formula typeset using the \LaTeX{} interpreter.'; + + % Adapted from an example at + % http://www.mathworks.com/help/techdoc/ref/text_props.html#Interpreter + axes + title( '\omega\subseteq\Omega' ); + text( 0.5, 0.5, '$$\int_0^x\!\int_{\Omega} dF(u,v) d\omega$$', ... + 'Interpreter', 'latex', ... + 'FontSize', 16 ) +end +% ========================================================================= +function [stat] = latexmath2() + stat.description = 'Some nice-looking formulas typeset using the \LaTeX{} interpreter.'; + + % Adapted from an example at + % http://www.mathworks.com/help/techdoc/creating_plots/f0-4741.html#bq558_t + set(gcf, 'color', 'white') + set(gcf, 'units', 'inches') + set(gcf, 'position', [2 2 4 6.5]) + set(gca, 'visible', 'off') + + % Note: Most likely due to a bug in matlab2tikz the pgfplots output will + % appear empty even though the LaTeX strings are contained in the + % output file. This is because the following (or something like it) + % is missing from the axis environment properties: + % xmin=0, xmax=4, ymin=-1, ymax=6 + % Note: The matrices in h(1) and h(2) cannot be compiled inside pgfplots. + % They are therefore disabled. +% h(1) = text( 'units', 'inch', 'position', [.2 5], ... +% 'fontsize', 14, 'interpreter', 'latex', 'string', ... +% [ '$$\hbox {magic(3) is } \left( {\matrix{ 8 & 1 & 6 \cr' ... +% '3 & 5 & 7 \cr 4 & 9 & 2 } } \right)$$' ]); +% h(2) = text( 'units', 'inch', 'position', [.2 4], ... +% 'fontsize', 14, 'interpreter', 'latex', 'string', ... +% [ '$$\left[ {\matrix{\cos(\phi) & -\sin(\phi) \cr' ... +% '\sin(\phi) & \cos(\phi) \cr}} \right]' ... +% '\left[ \matrix{x \cr y} \right]$$' ]); + h(3) = text( 'units', 'inch', 'position', [.2 3], ... + 'fontsize', 14, 'interpreter', 'latex', 'string', ... + [ '$$L\{f(t)\} \equiv F(s) = \int_0^\infty\!\!{e^{-st}' ... + 'f(t)dt}$$' ]); + h(4) = text( 'units', 'inch', 'position', [.2 2], ... + 'fontsize', 14, 'interpreter', 'latex', 'string', ... + '$$e = \sum_{k=0}^\infty {1 \over {k!} } $$' ); + h(5) = text( 'units', 'inch', 'position', [.2 1], ... + 'fontsize', 14, 'interpreter', 'latex', 'string', ... + [ '$$m \ddot y = -m g + C_D \cdot {1 \over 2}' ... + '\rho {\dot y}^2 \cdot A$$' ]); + h(6) = text( 'units', 'inch', 'position', [.2 0], ... + 'fontsize', 14, 'interpreter', 'latex', 'string', ... + '$$\int_{0}^{\infty} x^2 e^{-x^2} dx = \frac{\sqrt{\pi}}{4}$$' ); + + % TODO: On processing the matlab2tikz_acidtest output, LaTeX complains + % about the use of \over: + % Package amsmath Warning: Foreign command \over; + % (amsmath) \frac or \genfrac should be used instead +end +% ========================================================================= +function [stat] = parameterCurve3d() + stat.description = 'Parameter curve in 3D.'; + + ezplot3('sin(t)','cos(t)','t',[0,6*pi]); + text(0.5, 0.5, 10, 'abs'); +end +% ========================================================================= +function [stat] = parameterSurf() + stat.description = 'Parameter and surface plot.'; + + if ~exist('TriScatteredInterp') + fprintf( 'TriScatteredInterp() not found. Skipping.\n\n' ); + stat.skip = true; + return; + end + + t = (1:100).'; + t1 = cos(5.75352*t).^2; + t2 = abs(sin(t)); + + x = t1*4 - 2; + y = t2*4 - 2; + z = x.*exp(-x.^2 - y.^2); + + %TODO: do we really need this TriScatteredInterp? + % It will be removed from MATLAB + + % Construct the interpolant + F = TriScatteredInterp(x,y,z,'linear'); + + % Evaluate the interpolant at the locations (qx, qy), qz + % is the corresponding value at these locations. + ti = -2:.25:2; + [qx,qy] = meshgrid(ti,ti); + qz = F(qx,qy); + + hold on + surf(qx,qy,qz) + plot3(x,y,z,'o') + view(gca,[-69 14]); + hold off +end +% ========================================================================= +function [stat] = fill3plot() + stat.description = 'fill3 plot.'; + + if ~exist('fill3','builtin') + fprintf( 'fill3() not found. Skipping.\n\n' ); + stat.skip = true; + return + end + + x1 = -10:0.1:10; + x2 = -10:0.1:10; + p = sin(x1); + d = zeros(1,numel(p)); + d(2:2:end) = 1; + h = p.*d; + grid on; + fill3(x1,x2,h,'k'); + view(45,22.5); + box on; +end +% ========================================================================= +function [stat] = rectanglePlot() + stat.description = 'Rectangle handle.'; + + rectangle('Position', [0.59,0.35,3.75,1.37],... + 'Curvature', [0.8,0.4],... + 'LineWidth', 2, ... + 'LineStyle', '--' ... + ); + daspect([1,1,1]); +end +% ========================================================================= +function [stat] = herrorbarPlot() + stat.description = 'herrorbar plot.'; + + hold on; + X = 1:10; + Y = 1:10; + err = repmat(0.2, 1, 10); + h1 = errorbar(X, Y, err, 'r'); + h_vec = herrorbar(X, Y, err); + for h=h_vec + set(h, 'color', [1 0 0]); + end + h2 = errorbar(X, Y+1, err, 'g'); + h_vec = herrorbar(X, Y+1, err); + for h=h_vec + set(h, 'color', [0 1 0]); + end + legend([h1 h2], {'test1', 'test2'}) +end +% ========================================================================= +function [stat] = hist3d() + stat.description = '3D histogram plot.'; + + if ~exist('hist3','builtin') && isempty(which('hist3')) + fprintf( 'Statistics toolbox not found. Skipping.\n\n' ); + stat.skip = true; + return + end + +% load carbig +% X = [MPG,Weight]; +% hist3(X,[7 7]); +% xlabel('MPG'); ylabel('Weight'); +% set(get(gca,'child'),'FaceColor','interp','CDataMode','auto'); + + load carbig + X = [MPG,Weight]; + hist3(X,[7 7]); + xlabel('MPG'); ylabel('Weight'); + hist3(X,[7 7],'FaceAlpha',.65); + xlabel('MPG'); ylabel('Weight'); + % Linux crashed with OpenGL. + %%set(gcf,'renderer','opengl'); + +% load seamount +% dat = [-y,x]; % Grid corrected for negative y-values +% n = hist3(dat); % Extract histogram data; +% % default to 10x10 bins +% view([-37.5, 30]); +end +% ========================================================================= +function [stat] = myBoxplot() + stat.description = 'Boxplot.'; + + if ~exist('boxplot','builtin') && isempty(which('boxplot')) + fprintf( 'Statistics toolbox not found. Skipping.\n\n' ); + stat.skip = true; + return + end + + errors =[ + 0.810000 3.200000 0.059500 + 0.762500 -3.200000 0.455500 + 0.762500 4.000000 0.901000 + 0.762500 3.600000 0.406000 + 0.192500 3.600000 0.307000 + 0.810000 -3.600000 0.604000 + 1.000000 -2.400000 0.505000 + 0.430000 -2.400000 0.455500 + 1.000000 3.200000 0.158500 + ]; + + boxplot(errors); +end +% ========================================================================= +function [stat] = areaPlot() + stat.description = 'Area plot.'; + + M = magic(5); + M = M(1:3,2:4); + area(1:3, M); + legend('foo', 'bar', 'foobar'); +end +% ========================================================================= +function [stat] = customLegend() + stat.description = 'Custom legend.'; + + x = -pi:pi/10:pi; + y = tan(sin(x)) - sin(tan(x)); + plot(x,y,'--rs'); + + lh=legend('y',4); + set(lh,'color','g') + set(lh,'edgecolor','r') + set(lh, 'position',[.5 .6 .1 .05]) +end +% ========================================================================= +function [stat] = pixelLegend() + stat.description = 'Legend with pixel position.'; + + x = linspace(0,1); + plot(x, [x;x.^2]); + set(gca, 'units', 'pixels') + lh=legend('1', '2'); + set(lh, 'units','pixels','position', [100 200 65 42]) +end +% ========================================================================= +function [stat] = croppedImage() + stat.description = 'Custom legend.'; + + if ~exist('flujet.mat','file') + fprintf( 'flujet data set not found. Skipping.\n\n' ); + stat.skip = true; + return; + end + + load('flujet','X','map'); + image(X) + colormap(map) + %axis off + axis image + xlim([50 200]) + ylim([50 200]) + % colorbar at top + colorbar('north'); + set(gca,'Units','normalized'); +end +% ========================================================================= +function [stat] = pColorPlot() + stat.description = 'pcolor() plot.'; + + n = 6; + r = (0:n)'/n; + theta = pi*(-n:n)/n; + X = r*cos(theta); + Y = r*sin(theta); + C = r*cos(2*theta); + pcolor(X,Y,C) + axis equal tight +end +% ========================================================================= +function [stat] = multiplePatches() + stat.description = 'Multiple patches.'; + + xdata = [2 2 0 2 5; + 2 8 2 4 5; + 8 8 2 4 8]; + ydata = [4 4 4 2 0; + 8 4 6 2 2; + 4 0 4 0 0]; + cdata = [15 0 4 6 10; + 1 2 5 7 9; + 2 3 0 8 3]; + p = patch(xdata,ydata,cdata,'Marker','o',... + 'MarkerFaceColor','flat',... + 'FaceColor','none'); +end +% ========================================================================= +function [stat] = hgTransformPlot() + stat.description = 'hgtransform() plot.'; + + % Check out + % http://www.mathworks.de/de/help/matlab/ref/hgtransform.html. + + ax = axes('XLim',[-2 1],'YLim',[-2 1],'ZLim',[-1 1]); + view(3); + grid on; + axis equal; + + [x y z] = cylinder([.2 0]); + h(1) = surface(x,y,z,'FaceColor','red'); + h(2) = surface(x,y,-z,'FaceColor','green'); + h(3) = surface(z,x,y,'FaceColor','blue'); + h(4) = surface(-z,x,y,'FaceColor','cyan'); + h(5) = surface(y,z,x,'FaceColor','magenta'); + h(6) = surface(y,-z,x,'FaceColor','yellow'); + + t1 = hgtransform('Parent',ax); + t2 = hgtransform('Parent',ax); + + set(h,'Parent',t1); + h2 = copyobj(h,t2); + + Txy = makehgtform('translate',[-1.5 -1.5 0]); + set(t2,'Matrix',Txy) + drawnow +end +% ========================================================================= +function [stat] = logbaseline() + stat.description = 'Logplot with modified baseline.'; + + bar([0 1 2], [1 1e-2 1e-5],'basevalue', 1e-6); + set(gca,'YScale','log'); +end +% ========================================================================= +function [stat] = alphaImage() + stat.description = 'Image with alpha channel.'; + + N = 20; + h_imsc = imagesc(repmat(1:N, N, 1)); + mask = zeros(N); + mask(N/4:3*N/4, N/4:3*N/4) = 1; + set(h_imsc, 'AlphaData', double(~mask)); + set(h_imsc, 'AlphaDataMapping', 'scaled'); + set(gca, 'ALim', [-1,1]); +end +% ========================================================================= +function [stat] = annotation1() + + stat.description = 'Annotations only'; + + if ~exist('annotation') + fprintf( 'annotation() not found. Skipping.\n\n' ); + stat.skip = true; + return; + end + + annotation(gcf,'arrow',[0.192857142857143 0.55],... + [0.729952380952381 0.433333333333333]); + + annotation(gcf,'ellipse',... + [0.538499999999999 0.240476190476191 0.157928571428572 0.2452380952381]); + + annotation(gcf,'textbox',... + [0.3 0.348251748251748 0.0328486806677437 0.0517482517482517],... + 'String',{'y-x'},... + 'FontSize',16); +end +% ========================================================================= +function [stat] = annotation2() + stat.description = 'Annotations over plot'; + + if ~exist('annotation') + fprintf( 'annotation() not found. Skipping.\n\n' ); + stat.skip = true; + return; + end + + axes1 = axes('Parent',gcf); + hold(axes1,'all'); + + plot(0:pi/20:2*pi,sin(0:pi/20:2*pi)) + + annotation(gcf,'arrow',[0.192857142857143 0.55],... + [0.729952380952381 0.433333333333333]); + + annotation(gcf,'ellipse',... + [0.538499999999999 0.240476190476191 0.157928571428572 0.2452380952381]); + + annotation(gcf,'textbox',... + [0.3 0.348251748251748 0.0328486806677437 0.0517482517482517],... + 'String',{'y-x'},... + 'FontSize',16,... + 'FitBoxToText','off',... + 'LineStyle','none'); +end +% ========================================================================= +function [stat] = annotation3() + stat.description = 'Annotated and unaligned subplots'; + + if ~exist('annotation') + fprintf( 'annotation() not found. Skipping.\n\n' ); + stat.skip = true; + return; + end + + X1 = 0:0.01:1; + Y1 = X1.^2; + Y2 = Y1.^2; + Y3 = X1.^(1/4); + + set(gcf, 'Position', [100 100 1500 600]); + + axes1 = axes('Parent',gcf, 'Position',[0.07 0.4015 0.2488 0.5146]); + box(axes1,'on'); + hold(axes1,'all'); + + title('f(x)=x^2'); + + plot(X1,Y1,'Parent',axes1, 'DisplayName','(0:0.05:1).^2 vs 0:0.05:1'); + + axes2 = axes('Parent',gcf, 'OuterPosition',[0.4062 0 0.2765 0.6314]); + box(axes2,'on'); + hold(axes2,'all'); + + plot(X1,Y2,'Parent',axes2,'DisplayName','(0:0.05:1).^4 vs 0:0.05:1'); + + axes3 = axes('Parent',gcf, 'Position',[0.7421 0.3185 0.21 0.5480]); + box(axes3,'on'); + hold(axes3,'all'); + + plot(X1,Y3,'Parent',axes3,'DisplayName','(0:0.05:1).^(1/4) vs 0:0.05:1'); + + annotation(gcf,'textbox',[0.3667 0.5521 0.0124 0.0393], ... + 'String',{'f^2'}, 'FitBoxToText','off'); + + annotation(gcf,'arrow',[0.3263 0.4281], [0.6606 0.3519]); + + annotation(gcf,'textarrow',[0.6766 0.7229], [0.3108 0.6333],... + 'TextEdgeColor','none', 'HorizontalAlignment','center', ... + 'String',{'invert'}); +end +% ========================================================================= +function [stat] = annotationText() + stat.description = 'Variations of textual annotations'; + + if ~exist('annotation') + fprintf( 'annotation() not found. Skipping.\n\n' ); + stat.skip = true; + return; + end + + X1 = -5:0.1:5; + Y1 = log(X1.^2+1); + + % Resize figure to fit all text inside + set(gcf,'Position', [100 100 1000 700]); + + % Otherwise the axes is plotted wrongly + drawnow(); + + % Create axes + axes1 = axes('Parent',gcf); + hold(axes1,'all'); + + % Create plot + plot(X1,Y1); + + % Create text + text('Parent',axes1,'String',' \leftarrow some point on the curve',... + 'Position',[-2.01811125485123 1.5988219895288 7.105427357601e-15]); + + % Create text + text('Parent',axes1,'String','another point \rightarrow',... + 'Position',[1 0.693147180559945 0],... + 'HorizontalAlignment','right'); + + % Create textbox + annotation(gcf,'textbox',... + [0.305611222444885 0.292803442287824 0.122244488977956 0.0942562592047128],... + 'String',{'This boxes size','should adjust to','the text size'}); + + % Create textbox + annotation(gcf,'textbox',... + [0.71643086172344 0.195876288659794 0.10020240480962 0.209240982129118],... + 'String',{'Multiple Lines due to fixed width'},... + 'FitBoxToText','off'); + + % Create textbox + annotation(gcf,'textbox',... + [0.729456913827655 0.608247422680412 0.0851723446893787 0.104257797902974],... + 'String',{'Overlapping','and italic'},... + 'FontAngle','italic',... + 'FitBoxToText','off',... + 'BackgroundColor',[0.756862759590149 0.866666674613953 0.776470601558685]); + + % Create textbox + annotation(gcf,'textbox',... + [0.420000437011093 0.680170575692964 0.155149863590109 0.192171438527209],... + 'VerticalAlignment','middle',... + 'String',{'Text with a','thick and','dotted','border'},... + 'HorizontalAlignment','center',... + 'FitBoxToText','off',... + 'LineStyle',':',... + 'LineWidth',4); + + % Create textarrow + annotation(gcf,'textarrow',[0.21943887775551 0.2625250501002],... + [0.371002132196162 0.235640648011782],'TextEdgeColor','none',... + 'TextBackgroundColor',[0.678431391716003 0.921568632125854 1],... + 'TextRotation',30,... + 'VerticalAlignment','bottom',... + 'HorizontalAlignment','center',... + 'String',{'Rotated Text'}); + + % Create textarrow + annotation(gcf,'textarrow',[0.238436873747493 0.309619238476953],... + [0.604315828808828 0.524300441826215],'TextEdgeColor','none',... + 'TextColor',[1 1 1],... + 'TextBackgroundColor',[0 0 1],... + 'TextRotation',30,... + 'VerticalAlignment','bottom',... + 'HorizontalAlignment','center',... + 'String',{'Rotated Text 2'},... + 'HeadStyle','diamond',... + 'Color',[1 0 0]); +end +% ========================================================================= +function [stat] = annotationTextUnits() + stat.description = 'Text with changed Units'; + + if ~exist('annotation') + fprintf( 'annotation() not found. Skipping.\n\n' ); + stat.skip = true; + return; + end + + X1 = -5:0.1:5; + Y1 = log(X1.^2+1); + + % Resize figure to fit all text inside + set(gcf,'Units', 'inches'); + set(gcf,'Position', [1.03125, 1.03125, 10.416666666666666, 7.291666666666666 ]); + + % Otherwise the axes is plotted wrongly + drawnow(); + + % Create axes + axes1 = axes('Parent',gcf,'Units','centimeters',... + 'Position',[3.4369697916666664, 2.035743645833333 20.489627604166664 15.083009739583332]); + hold(axes1,'all'); + + % Create plot + plot(X1,Y1); + + % Create text + text('Parent',axes1,'Units','normalized',... + 'String',' \leftarrow some point on the curve',... + 'Position',[0.295865633074935 0.457364341085271 0]); + + % Create text + text('Parent',axes1,'Units','centimeters',... + 'String','another point \rightarrow',... + 'Position',[12.2673383333333 2.98751989583333 0],... + 'HorizontalAlignment','right'); + + % Create textbox + annotation(gcf,'textbox',... + [0.305611222444885 0.292803442287824 0.122244488977956 0.0942562592047128],... + 'String',{'This boxes size','should adjust to','the text size'},... + 'FitBoxToText','off',... + 'Units','pixels'); + + + % Create textarrow + annotation(gcf,'textarrow',[0.21943887775551 0.2625250501002],... + [0.371002132196162 0.235640648011782],'TextEdgeColor','none',... + 'TextBackgroundColor',[0.678431391716003 0.921568632125854 1],... + 'TextRotation',30,... + 'HorizontalAlignment','center',... + 'String',{'Rotated Text'},... + 'Units','points'); + + % Create textarrow + annotation(gcf,'textarrow',[0.238436873747493 0.309619238476953],... + [0.604315828808828 0.524300441826215],'TextEdgeColor','none',... + 'TextColor',[1 1 1],... + 'TextBackgroundColor',[0 0 1],... + 'TextRotation',30,... + 'HorizontalAlignment','center',... + 'String',{'Rotated Text 2'},... + 'HeadStyle','diamond',... + 'Color',[1 0 0]); + + % Create textbox + annotation(gcf,'textbox',... + [0.71643086172344 0.195876288659794 0.10020240480962 0.209240982129118],... + 'String',{'Multiple Lines due to fixed width'},... + 'FitBoxToText','off',... + 'Units','characters'); + + % Create textbox + annotation(gcf,'textbox',... + [0.420000437011093 0.680170575692964 0.155149863590109 0.192171438527209],... + 'VerticalAlignment','middle',... + 'String',{'Text with a','thick and','dotted','border'},... + 'HorizontalAlignment','center',... + 'FitBoxToText','off',... + 'LineStyle',':',... + 'LineWidth',4); + + % Create textbox + annotation(gcf,'textbox',... + [0.729456913827655 0.608247422680412 0.0851723446893787 0.104257797902974],... + 'String',{'Overlapping','and italic'},... + 'FontAngle','italic',... + 'FitBoxToText','off',... + 'BackgroundColor',[0.756862759590149 0.866666674613953 0.776470601558685]); +end +% ========================================================================= +function [stat] = imageOrientation_inline() +% Run test and save pictures as inline TikZ code + [stat] = imageOrientation(false); +end +function [stat] = imageOrientation_PNG() +% Run test and save pictures as external PNGs + [stat] = imageOrientation(true); +end +function [stat] = imageOrientation(imagesAsPng) +% Parameter 'imagesAsPng' is boolean + stat.description = ['Systematic test of different axis', ... + ' orientations and visibility (imagesAsPng = ', ... + num2str(imagesAsPng), ').']; + stat.extraOptions = {'imagesAsPng', imagesAsPng}; + + data = magic(3); + + subplot(3,2,1); + imagesc(data); + set(gca,'XDir','normal'); + xlabel('XDir normal'); + set(gca,'YDir','normal'); + ylabel('YDir normal'); + + subplot(3,2,2); + imagesc(data); + set(gca,'XDir','reverse'); + xlabel('XDir reverse'); + set(gca,'YDir','normal'); + ylabel('YDir normal'); + + subplot(3,2,3); + imagesc(data); + set(gca,'XDir','normal'); + xlabel('XDir normal'); + set(gca,'YDir','reverse'); + ylabel('YDir reverse'); + + subplot(3,2,4); + imagesc(data); + set(gca,'XDir','reverse'); + xlabel('XDir reverse'); + set(gca,'YDir','reverse'); + ylabel('YDir reverse'); + + subplot(3,2,5); + imagesc(data); + set(gca,'XDir','normal'); + xlabel('XDir normal'); + set(gca,'YDir','reverse'); + ylabel('YDir reverse'); + axis off; + title('like above, but axis off'); + + subplot(3,2,6); + imagesc(data); + set(gca,'XDir','reverse'); + xlabel('XDir reverse'); + set(gca,'YDir','reverse'); + ylabel('YDir reverse'); + axis off; + title('like above, but axis off'); +end +% ========================================================================= +function [stat] = texInterpreter() + stat.description = 'Combinations of tex commands'; + axes + text(0.1,0.9, {'\bfBold text before \alpha and also afterwards.', 'Even the next line is bold \itand a bit italic.'}); + text(0.1,0.75, {'Changing \bfthe\fontname{Courier} font or \color[rgb]{0,0.75,0}color doesn''t', 'change the style. Resetting \rmthe style', 'doesn''t change the font or color.'}); + text(0.1,0.6, 'Styles can be {\bflimited} using \{ and \}.'); + text(0.1,0.45, {'But what happens to the output if there is', '{\bfuse an \alpha inside} the limitted style.'}); + text(0.1,0.3, 'Or if the\fontsize{14} size\color{red} and color are \fontsize{10}changed at different\color{blue} points.'); + text(0.1,0.15, {'Also_{some \bf subscripts} and^{superscripts} are possible.', 'Without brackets, it l^o_oks like t_his.' }); +end +% ========================================================================= +function [stat] = stackedBarsWithOther() + stat.description = 'stacked bar plots and other plots'; + stat.issues = 442; + + % dataset stacked + [data,dummy,summy] = svd(magic(7)); %#ok + Y = round(abs(data(2:6,2:4))*10); + n = size(Y,1); + xVals = (1:n).'; + yVals = min((xVals).^2, sum(Y,2)); + + subplot(2,1,1); hold on; + bar(Y,'stack'); + plot(xVals, yVals, 'Color', 'r', 'LineWidth', 2); + legend('show'); + + subplot(2,1,2); hold on; + b2 = barh(Y,'stack','BarWidth', 0.75); + plot(yVals, xVals, 'Color', 'b', 'LineWidth', 2); + + set(b2(1),'FaceColor','c','EdgeColor','none') +end +% ========================================================================= +function [stat] = colorbarLabelTitle() + stat.description = 'colorbar with label and title'; + stat.issues = 429; + + % R2014b handles colorbars smart: `XLabel` and `YLabel` merged into `Label` + % Use colormap 'jet' to create comparable output with MATLAB R2014b + % * Check horizontal/vertical colorbar (subplots) + % * Check if 'direction' is respected + % * Check if multiline label and title works + % * Check if latex interpreter works in label and title + + subplot(1,2,1) + imagesc(magic(3)); + hc = colorbar; + colormap('jet'); + title(hc,'title $\beta$','Interpreter','latex'); + ylabel(hc,'label $a^2$','Interpreter','latex'); + set(hc,'YDir','reverse'); + + subplot(1,2,2) + label_multiline = {'first','second','third'}; + title_multiline = {'title 1','title 2'}; + imagesc(magic(3)); + hc = colorbar('southoutside'); + colormap('jet'); + title(hc,title_multiline); + xlabel(hc,label_multiline); +end +% ========================================================================= +function env = getEnvironment + if ~isempty(ver('MATLAB')) + env = 'MATLAB'; + elseif ~isempty(ver('Octave')) + env = 'Octave'; + else + env = []; + end +end +% ========================================================================= +function [below, noenv] = isVersionBelow ( env, threshMajor, threshMinor ) + % get version string for `env' by iterating over all toolboxes + versionData = ver; + versionString = ''; + for k = 1:max(size(versionData)) + if strcmp( versionData(k).Name, env ) + % found it: store and exit the loop + versionString = versionData(k).Version; + break + end + end + + if isempty( versionString ) + % couldn't find `env' + below = true; + noenv = true; + return + end + + majorVer = str2double(regexprep( versionString, '^(\d+)\..*', '$1' )); + minorVer = str2double(regexprep( versionString, '^\d+\.(\d+\.?\d*)[^\d]*.*', '$1' )); + + if (majorVer < threshMajor) || (majorVer == threshMajor && minorVer < threshMinor) + % version of `env' is below threshold + below = true; + else + % version of `env' is same as or above threshold + below = false; + end + noenv = false; +end +% ========================================================================= diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/README b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/README new file mode 100644 index 0000000000000000000000000000000000000000..0c2581a2b7a5424a6f7aa9b6b1bd2299c7f6a939 --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/README @@ -0,0 +1,27 @@ +This test module is part of matlab2tikz. + +It provides the means for easily comparing the results of a direct PDF print of +a figure in MATLAB as opposed to having it exported by matlab2tikz. As a matter +of fact, this test suite can take any matlab2xxx-converter as argument (see +step 2 below) with possibly minor modifications to the LaTeX file output. + + + USAGE: +======= + 1. Open MATLAB, make matlab2tikz and matlab2tikz_acidtest available for + calling (by putting in the MATLAB Path,for example). + + 2. Call the script by + + >> matlab2tikz_acidtest( 'testsuite', @ACID ); + + What happens is that MATLAB generates a number of figures as defined in + ACID.m, and exports them as PDF (using the print command) and by + matlab2tikz. + At the same time, a LaTeX file is created in the tex-subfolder. + + 3. You can compile 'tex/acid.tex' with 'make' (making use of 'tex/Makefile'). + +If all goes well, the result will be the file 'tex/acid.pdf' which contains a +list of the test figures, exported as PDF and right next to it the matlab2tikz +generated plot. diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/codeReport.m b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/codeReport.m new file mode 100644 index 0000000000000000000000000000000000000000..a97c09a0cf88eb6af626de58b409d0338fef0b12 --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/codeReport.m @@ -0,0 +1,268 @@ +function [ report ] = codeReport( varargin ) +%CODEREPORT Builds a report of the code health +% +% This function generates a Markdown report on the code health. At the moment +% this is limited to the McCabe (cyclomatic) complexity of a function and its +% subfunctions. +% +% This makes use of |checkcode| in MATLAB. +% +% Usage: +% +% CODEREPORT('function', functionName) to determine which function is +% analyzed. (default: matlab2tikz) +% +% CODEREPORT('complexityThreshold', integer ) to set above which complexity, a +% function is added to the report (default: 10) +% +% See also: checkcode, mlint, + + + %% input options + ipp = m2tInputParser(); + ipp = ipp.addParamValue(ipp, 'function', 'matlab2tikz', @ischar); + ipp = ipp.addParamValue(ipp, 'complexityThreshold', 10, @isnumeric); + ipp = ipp.parse(ipp, varargin{:}); + + %% generate report data + data = checkcode(ipp.Results.function,'-cyc','-struct'); + [complexityAll, mlintMessages] = splitCycloComplexity(data); + + %% analyze cyclomatic complexity + categorizeComplexity = @(x) categoryOfComplexity(x, ... + ipp.Results.complexityThreshold, ... + ipp.Results.function); + + complexityAll = arrayfun(@parseCycloComplexity, complexityAll); + complexityAll = arrayfun(categorizeComplexity, complexityAll); + + complexity = filter(complexityAll, @(x) strcmpi(x.category, 'Bad')); + complexity = sortBy(complexity, 'line', 'ascend'); + complexity = sortBy(complexity, 'complexity', 'descend'); + + [complexityStats] = complexityStatistics(complexityAll); + + %% analyze other messages + %TODO: handle all mlint messages and/or other metrics of the code + + %% format report + dataStr = complexity; + dataStr = arrayfun(@(d) mapField(d, 'function', @markdownInlineCode), dataStr); + if ~isempty(dataStr) + dataStr = addFooterRow(dataStr, 'complexity', @sum, {'line',0, 'function',bold('Total')}); + end + dataStr = arrayfun(@(d) mapField(d, 'line', @integerToString), dataStr); + dataStr = arrayfun(@(d) mapField(d, 'complexity', @integerToString), dataStr); + + report = makeTable(dataStr, {'function', 'complexity'}, ... + {'Function', 'Complexity'}); + + %% command line usage + if nargout == 0 + disp(codelinks(report, ipp.Results.function)); + + figure('name',sprintf('Complexity statistics of %s', ipp.Results.function)); + h = statisticsPlot(complexityStats, 'Complexity', 'Number of functions'); + for hh = h + plot(hh, [1 1]*ipp.Results.complexityThreshold, ylim(hh), ... + 'k--','DisplayName','Threshold'); + end + legend(h(1),'show','Location','NorthEast'); + + clear report + end + +end +%% CATEGORIZATION ============================================================== +function [complexity, others] = splitCycloComplexity(list) +% splits codereport into McCabe complexity and others + filter = @(l) ~isempty(strfind(l.message, 'McCabe complexity')); + idxComplexity = arrayfun(filter, list); + complexity = list( idxComplexity); + others = list(~idxComplexity); +end +function [data] = categoryOfComplexity(data, threshold, mainFunc) +% categorizes the complexity as "Good", "Bad" or "Accepted" + TOKEN = '#COMPLEX'; % token to signal allowed complexity + + try %#ok + helpStr = help(sprintf('%s>%s', mainFunc, data.function)); + if ~isempty(strfind(helpStr, TOKEN)) + data.category = 'Accepted'; + return; + end + end + if data.complexity > threshold + data.category = 'Bad'; + else + data.category = 'Good'; + end +end + +%% PARSING ===================================================================== +function [out] = parseCycloComplexity(in) +% converts McCabe complexity report strings into a better format + out = regexp(in.message, ... + 'The McCabe complexity of ''(?<function>[A-Za-z0-9_]+)'' is (?<complexity>[0-9]+).', ... + 'names'); + out.complexity = str2double(out.complexity); + out.line = in.line; +end + +%% DATA PROCESSING ============================================================= +function selected = filter(list, filterFunc) +% filters an array according to a binary function + idx = logical(arrayfun(filterFunc, list)); + selected = list(idx); +end +function [data] = mapField(data, field, mapping) + data.(field) = mapping(data.(field)); +end +function sorted = sortBy(list, fieldName, mode) +% sorts a struct array by a single field +% extra arguments are as for |sort| + values = arrayfun(@(m)m.(fieldName), list); + [dummy, idxSorted] = sort(values(:), 1, mode); %#ok + sorted = list(idxSorted); +end + +function [stat] = complexityStatistics(list) +% calculate some basic statistics of the complexities + + stat.values = arrayfun(@(c)(c.complexity), list); + stat.binCenter = sort(unique(stat.values)); + + categoryPerElem = {list.category}; + stat.categories = unique(categoryPerElem); + nCategories = numel(stat.categories); + + groupedHist = zeros(numel(stat.binCenter), nCategories); + for iCat = 1:nCategories + category = stat.categories{iCat}; + idxCat = ismember(categoryPerElem, category); + groupedHist(:,iCat) = hist(stat.values(idxCat), stat.binCenter); + end + + stat.histogram = groupedHist; + stat.median = median(stat.values); +end +function [data] = addFooterRow(data, column, func, otherFields) +% adds a footer row to data table based on calculations of a single column +footer = data(end); +for iField = 1:2:numel(otherFields) + field = otherFields{iField}; + value = otherFields{iField+1}; + footer.(field) = value; +end +footer.(column) = func([data(:).(column)]); +data(end+1) = footer; +end + +%% FORMATTING ================================================================== +function str = integerToString(value) +% convert integer to string + str = sprintf('%d',value); +end +function str = markdownInlineCode(str) +% format as inline code for markdown + str = sprintf('`%s`', str); +end +function str = makeTable(data, fields, header) +% make a markdown table from struct array + nData = numel(data); + str = ''; + if nData == 0 + return; % empty input + end + + % determine column sizes + nFields = numel(fields); + table = cell(nFields, nData); + columnWidth = zeros(1,nFields); + for iField = 1:nFields + field = fields{iField}; + table(iField, :) = {data(:).(field)}; + columnWidth(iField) = max(cellfun(@numel, table(iField, :))); + end + columnWidth = max(columnWidth, cellfun(@numel, header)); + columnWidth = columnWidth + 2; % empty space left and right + columnWidth([1,end]) = columnWidth([1,end]) - 1; % except at the edges + + % format table inside cell array + table = [header; table']; + for iField = 1:nFields + FORMAT = ['%' int2str(columnWidth(iField)) 's']; + + for jData = 1:size(table, 1) + table{jData, iField} = strjust(sprintf(FORMAT, ... + table{jData, iField}), 'center'); + end + end + + % insert separator + table = [table(1,:) + arrayfun(@(n) repmat('-',1,n), columnWidth, 'UniformOutput',false) + table(2:end,:)]'; + + % convert cell array to string + FORMAT = ['%s' repmat('|%s', 1,nFields-1) '\n']; + str = sprintf(FORMAT, table{:}); + +end + +function str = codelinks(str, functionName) +% replaces inline functions with clickable links in MATLAB +str = regexprep(str, '`([A-Za-z0-9_]+)`', ... + ['`<a href="matlab:edit ' functionName '>$1">$1</a>`']); +%NOTE: editing function>subfunction will focus on that particular subfunction +% in the editor (this also works for the main function) +end +function str = bold(str) +str = ['**' str '**']; +end + +%% PLOTTING ==================================================================== +function h = statisticsPlot(stat, xLabel, yLabel) +% plot a histogram and box plot + nCategories = numel(stat.categories); + colors = colorscheme; + + h(1) = subplot(5,1,1:4); + hold all; + hb = bar(stat.binCenter, stat.histogram, 'stacked'); + + for iCat = 1:nCategories + category = stat.categories{iCat}; + + set(hb(iCat), 'DisplayName', category, 'FaceColor', colors.(category), ... + 'LineStyle','none'); + end + + %xlabel(xLabel); + ylabel(yLabel); + + h(2) = subplot(5,1,5); + hold all; + + boxplot(stat.values,'orientation','horizontal',... + 'boxstyle', 'outline', ... + 'symbol', 'o', ... + 'colors', colors.All); + xlabel(xLabel); + + xlims = [min(stat.binCenter)-1 max(stat.binCenter)+1]; + c = 1; + ylims = (ylim(h(2)) - c)/3 + c; + + set(h,'XTickMode','manual','XTick',stat.binCenter,'XLim',xlims); + set(h(1),'XTickLabel',''); + set(h(2),'YTickLabel','','YLim',ylims); + linkaxes(h, 'x'); +end +function colors = colorscheme() +% recognizable color scheme for the categories + colors.All = [ 0 113 188]/255; + colors.Good = [118 171 47]/255; + colors.Bad = [161 19 46]/255; + colors.Accepted = [236 176 31]/255; +end diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/data/converted/Makefile b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/data/converted/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..2bab3eb52928ab795797d1583f5b2718bb81519e --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/data/converted/Makefile @@ -0,0 +1,23 @@ +# ./Makefile + +ECHOCMD:=/bin/echo -e +LATEX:=lualatex --shell-escape -interaction=batchmode + +TEST_SRCS:=$(wildcard test*-converted.tex) +TEST_PDFS:=$(TEST_SRCS:.tex=.pdf) + +default: $(TEST_PDFS) + +%.pdf: %.tex + @$(LATEX) $< + +.PHONY: clean + +clean: + rm -f test*-converted.aux \ + test*-converted.log \ + test*-converted.pdf + +distclean: clean + rm -f test*-converted.tex \ + test*-converted*.png diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/data/reference/Makefile b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/data/reference/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..1c39facf8e114337bfc42cc783f7a39f75fce46a --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/data/reference/Makefile @@ -0,0 +1,19 @@ +# ./Makefile + +EPSTOPDF:=epstopdf + +REFERENCE_EPSS:=$(wildcard test*-reference.eps) +REFERENCE_PDFS:=$(REFERENCE_EPSS:.eps=.pdf) + +default: $(REFERENCE_PDFS) + +%.pdf: %.eps + $(EPSTOPDF) $< + +.PHONY: clean + +clean: + rm -f test*-reference.pdf + +distclean: clean + rm -f test*-reference.eps diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/herrorbar.m b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/herrorbar.m new file mode 100644 index 0000000000000000000000000000000000000000..9da9db2f04b5456d644c82090c51ee8e1b1db8e5 --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/herrorbar.m @@ -0,0 +1,152 @@ +function hh = herrorbar(x, y, l, u, symbol) +%HERRORBAR Horizontal Error bar plot. +% HERRORBAR(X,Y,L,R) plots the graph of vector X vs. vector Y with +% horizontal error bars specified by the vectors L and R. L and R contain the +% left and right error ranges for each point in X. Each error bar +% is L(i) + R(i) long and is drawn a distance of L(i) to the right and R(i) +% to the right the points in (X,Y). The vectors X,Y,L and R must all be +% the same length. If X,Y,L and R are matrices then each column +% produces a separate line. +% +% HERRORBAR(X,Y,E) or HERRORBAR(Y,E) plots X with error bars [X-E X+E]. +% HERRORBAR(...,'LineSpec') uses the color and linestyle specified by +% the string 'LineSpec'. See PLOT for possibilities. +% +% H = HERRORBAR(...) returns a vector of line handles. +% +% Example: +% x = 1:10; +% y = sin(x); +% e = std(y)*ones(size(x)); +% herrorbar(x,y,e) +% draws symmetric horizontal error bars of unit standard deviation. +% +% This code is based on ERRORBAR provided in MATLAB. +% +% See also ERRORBAR + +% Jos van der Geest +% email: jos@jasen.nl +% +% File history: +% August 2006 (Jos): I have taken back ownership. I like to thank Greg Aloe from +% The MathWorks who originally introduced this piece of code to the +% Matlab File Exchange. +% September 2003 (Greg Aloe): This code was originally provided by Jos +% from the newsgroup comp.soft-sys.matlab: +% http://newsreader.mathworks.com/WebX?50@118.fdnxaJz9btF^1@.eea3ff9 +% After unsuccessfully attempting to contact the orignal author, I +% decided to take ownership so that others could benefit from finding it +% on the MATLAB Central File Exchange. + +if min(size(x))==1, + npt = length(x); + x = x(:); + y = y(:); + if nargin > 2, + if ~ischar(l), + l = l(:); + end + if nargin > 3 + if ~ischar(u) + u = u(:); + end + end + end +else + [npt,n] = size(x); +end + +if nargin == 3 + if ~ischar(l) + u = l; + symbol = '-'; + else + symbol = l; + l = y; + u = y; + y = x; + [m,n] = size(y); + x(:) = (1:npt)'*ones(1,n);; + end +end + +if nargin == 4 + if ischar(u), + symbol = u; + u = l; + else + symbol = '-'; + end +end + +if nargin == 2 + l = y; + u = y; + y = x; + [m,n] = size(y); + x(:) = (1:npt)'*ones(1,n);; + symbol = '-'; +end + +u = abs(u); +l = abs(l); + +if ischar(x) | ischar(y) | ischar(u) | ischar(l) + error('Arguments must be numeric.') +end + +if ~isequal(size(x),size(y)) | ~isequal(size(x),size(l)) | ~isequal(size(x),size(u)), + error('The sizes of X, Y, L and U must be the same.'); +end + +tee = (max(y(:))-min(y(:)))/100; % make tee .02 x-distance for error bars +% changed from errorbar.m +xl = x - l; +xr = x + u; +ytop = y + tee; +ybot = y - tee; +n = size(y,2); +% end change + +% Plot graph and bars +hold_state = ishold; +cax = newplot; +next = lower(get(cax,'NextPlot')); + +% build up nan-separated vector for bars +% changed from errorbar.m +xb = zeros(npt*9,n); +xb(1:9:end,:) = xl; +xb(2:9:end,:) = xl; +xb(3:9:end,:) = NaN; +xb(4:9:end,:) = xl; +xb(5:9:end,:) = xr; +xb(6:9:end,:) = NaN; +xb(7:9:end,:) = xr; +xb(8:9:end,:) = xr; +xb(9:9:end,:) = NaN; + +yb = zeros(npt*9,n); +yb(1:9:end,:) = ytop; +yb(2:9:end,:) = ybot; +yb(3:9:end,:) = NaN; +yb(4:9:end,:) = y; +yb(5:9:end,:) = y; +yb(6:9:end,:) = NaN; +yb(7:9:end,:) = ytop; +yb(8:9:end,:) = ybot; +yb(9:9:end,:) = NaN; +% end change + + +[ls,col,mark,msg] = colstyle(symbol); if ~isempty(msg), error(msg); end +symbol = [ls mark col]; % Use marker only on data part +esymbol = ['-' col]; % Make sure bars are solid + +h = plot(xb,yb,esymbol); hold on +h = [h;plot(x,y,symbol)]; + +if ~hold_state, hold off; end + +if nargout>0, hh = h; end diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/issues.m b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/issues.m new file mode 100644 index 0000000000000000000000000000000000000000..e6a9fd006cd63d013ee16547c15eca3baf396d6f --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/issues.m @@ -0,0 +1,43 @@ +function [ status ] = issues( k ) +%ISSUES M2T Test cases related to issues +% +% Issue-related test cases for matlab2tikz +% +% See also: ACID, matlab2tikz_acidtest + testfunction_handles = { + @scatter3Plot3 + }; + + numFunctions = length( testfunction_handles ); + + if (k<=0) + status = testfunction_handles; + return; % This is used for querying numFunctions. + + elseif (k<=numFunctions) + status = testfunction_handles{k}(); + status.function = func2str(testfunction_handles{k}); + + else + error('issues:outOfBounds', ... + 'Out of bounds (number of testfunctions=%d)', numFunctions); + end + +end + +% ========================================================================= +function [stat] = scatter3Plot3() + stat.description = 'Scatter3 plot with 2 colors'; + stat.issues = 292; + + hold on; + x = sin(1:5); + y = cos(3.4 *(1:5)); + z = x.*y; + scatter3(x,y,z,150,... + 'MarkerEdgeColor','none','MarkerFaceColor','k'); + scatter3(-x,y,z,150,... + 'MarkerEdgeColor','none','MarkerFaceColor','b'); +end + +% ========================================================================= diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/matlab2tikz_acidtest.m b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/matlab2tikz_acidtest.m new file mode 100644 index 0000000000000000000000000000000000000000..ae4324ff2231be9d25ab9534310c0d75d3761538 --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/matlab2tikz_acidtest.m @@ -0,0 +1,609 @@ +function matlab2tikz_acidtest(varargin) +%MATLAB2TIKZ_ACIDTEST unit test driver for matlab2tikz +% +% MATLAB2TIKZ_ACIDTEST('testFunctionIndices', INDICES, ...) or +% MATLAB2TIKZ_ACIDTEST(INDICES, ...) runs the test only for the specified +% indices. When empty, all tests are run. (Default: []). +% +% MATLAB2TIKZ_ACIDTEST('extraOptions', {'name',value, ...}, ...) +% passes the cell array of options to MATLAB2TIKZ. Default: {} +% +% MATLAB2TIKZ_ACIDTEST('figureVisible', LOGICAL, ...) +% plots the figure visibly during the test process. Default: false +% +% MATLAB2TIKZ_ACIDTEST('cleanBefore', LOGICAL, ...) +% tries to run "make clean" in the ./tex folder. Default: true +% +% MATLAB2TIKZ_ACIDTEST('testsuite', FUNCTION_HANDLE, ...) +% Determines which test suite is to be run. Default: @ACID +% A test suite is a function that takes a single integer argument, which: +% when 0: returns a cell array containing the N function handles to the tests +% when >=1 and <=N: runs the appropriate test function +% when >N: throws an error +% +% See also matlab2tikz, ACID + +% Copyright (c) 2008--2014, Nico Schlömer <nico.schloemer@gmail.com> +% All rights reserved. +% +% Redistribution and use in source and binary forms, with or without +% modification, are permitted provided that the following conditions are met: +% +% * Redistributions of source code must retain the above copyright +% notice, this list of conditions and the following disclaimer. +% * Redistributions in binary form must reproduce the above copyright +% notice, this list of conditions and the following disclaimer in +% the documentation and/or other materials provided with the distribution +% +% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +% POSSIBILITY OF SUCH DAMAGE. +% +% ========================================================================= + + % In which environment are we? + env = getEnvironment(); + if ~strcmp(env, 'MATLAB') && ~strcmp(env, 'Octave') + error('Unknown environment. Need MATLAB(R) or GNU Octave.') + end + + + % ----------------------------------------------------------------------- + ipp = m2tInputParser; + + ipp = ipp.addOptional(ipp, 'testFunctionIndices', [], @isfloat); + ipp = ipp.addParamValue(ipp, 'extraOptions', {}, @iscell); + ipp = ipp.addParamValue(ipp, 'figureVisible', false, @islogical); + ipp = ipp.addParamValue(ipp, 'testsuite', @ACID, @(x)(isa(x,'function_handle'))); + ipp = ipp.addParamValue(ipp, 'cleanBefore', true, @islogical); + + ipp = ipp.parse(ipp, varargin{:}); + % ----------------------------------------------------------------------- + + testsuite = ipp.Results.testsuite; + testsuiteName = func2str(testsuite); + + % try to clean the output + cleanFiles(ipp.Results.cleanBefore); + + % first, initialize the tex output + texfile = 'tex/acid.tex'; + fh = fopen(texfile, 'w'); + assert(fh ~= -1, 'Could not open TeX file ''%s'' for writing.', texfile); + texfile_init(fh); + + % output streams + stdout = 1; + if strcmp(env, 'Octave') && ~ipp.Results.figureVisible + % Use the gnuplot backend to work around an fltk bug, see + % <http://savannah.gnu.org/bugs/?43429>. + graphics_toolkit gnuplot + end + + % query the number of test functions + n = length(testsuite(0)); + + defaultStatus = emptyStatus(); + + if ~isempty(ipp.Results.testFunctionIndices) + indices = ipp.Results.testFunctionIndices; + % kick out the illegal stuff + I = find(indices>=1 & indices<=n); + indices = indices(I); %#ok + else + indices = 1:n; + end + + % start overall timing + elapsedTimeOverall = tic; + + errorHasOccurred = false; + + % cell array to accomodate different structure + status = cell(length(indices), 1); + + for k = 1:length(indices) + fprintf(stdout, 'Executing %s test no. %d...\n', testsuiteName, indices(k)); + + % open a window + fig_handle = figure('visible',onOffBoolean(ipp.Results.figureVisible)); + + % plot the figure + try + status{k} = testsuite(indices(k)); + + catch %#ok + e = lasterror('reset'); %#ok + + status{k}.description = '\textcolor{red}{Error during plot generation.}'; + if isempty(status{k}) || ~isfield(status{k}, 'function') ... + || isempty(status{k}.function) + status{k}.function = extractFunctionFromError(e, testsuite); + end + + [status{k}.plotStage, errorHasOccurred] = errorHandler(e, env); + end + + status{k} = fillStruct(status{k}, defaultStatus); + + % plot not successful + if status{k}.skip + close(fig_handle); + continue + end + + reference_eps = sprintf('data/reference/test%d-reference.eps', indices(k)); + reference_pdf = sprintf('data/reference/test%d-reference.pdf', indices(k)); + reference_fig = sprintf('data/reference/test%d-reference', indices(k)); + gen_tex = sprintf('data/converted/test%d-converted.tex', indices(k)); + gen_pdf = sprintf('data/converted/test%d-converted.pdf', indices(k)); + + elapsedTime = tic; + + % Save reference output as PDF + try + switch env + case 'MATLAB' + % MATLAB does not generate properly cropped PDF files. + % So, we generate EPS files that are converted later on. + print(gcf, '-depsc2', reference_eps); + + % On R2014b Win, line endings in .eps are Unix style + % https://github.com/matlab2tikz/matlab2tikz/issues/370 + ensureLineEndings(reference_eps); + + case 'Octave' + % In Octave, figures are properly cropped when using print(). + print(reference_pdf, '-dpdf', '-S415,311', '-r150'); + pause(1.0) + otherwise + error('Unknown environment. Need MATLAB(R) or GNU Octave.') + end + catch %#ok + e = lasterror('reset'); %#ok + [status{k}.saveStage, errorHasOccurred] = errorHandler(e, env); + end + % now, test matlab2tikz + try + cleanfigure(status{k}.extraCleanfigureOptions{:}); + matlab2tikz('filename', gen_tex, ... + 'showInfo', false, ... + 'checkForUpdates', false, ... + 'dataPath', 'data/converted/', ... + 'standalone', true, ... + ipp.Results.extraOptions{:}, ... + status{k}.extraOptions{:} ... + ); + catch %#ok + e = lasterror('reset'); %#ok + % Remove (corrupted) output file. This is necessary to avoid that the + % Makefile tries to compile it and fails. + delete(gen_tex) + [status{k}.tikzStage, errorHasOccurred] = errorHandler(e, env); + end + + % ...and finally write the bits to the LaTeX file + texfile_addtest(fh, reference_fig, gen_pdf, status{k}, indices(k), testsuiteName); + + if ~status{k}.closeall + close(fig_handle); + else + close all; + end + + elapsedTime = toc(elapsedTime); + fprintf(stdout, '%s ', status{k}.function); + fprintf(stdout, 'done (%4.2fs).\n\n', elapsedTime); + end + + % Write the summary table to the LaTeX file + texfile_tab_completion_init(fh) + for k = 1:length(indices) + stat = status{k}; + % Break table up into pieces if it gets too long for one page + if ~mod(k,35) + texfile_tab_completion_finish(fh); + texfile_tab_completion_init(fh); + end + + fprintf(fh, '%d & \\texttt{%s}', indices(k), name2tex(stat.function)); + if stat.skip + fprintf(fh, ' & --- & skipped & ---'); + else + for err = [stat.plotStage.error, ... + stat.saveStage.error, ... + stat.tikzStage.error] + if err + fprintf(fh, ' & \\textcolor{red}{failed}'); + else + fprintf(fh, ' & \\textcolor{green!50!black}{passed}'); + end + end + end + fprintf(fh, ' \\\\\n'); + end + texfile_tab_completion_finish(fh); + + % Write the error messages to the LaTeX file if there are any + if errorHasOccurred + fprintf(fh, '\\section*{Error messages}\n\\scriptsize\n'); + for k = 1:length(indices) + stat = status{k}; + if isempty(stat.plotStage.message) && ... + isempty(stat.saveStage.message) && ... + isempty(stat.tikzStage.message) + continue % No error messages for this test case + end + + fprintf(fh, '\n\\subsection*{Test case %d: \\texttt{%s}}\n', indices(k), name2tex(stat.function)); + print_verbatim_information(fh, 'Plot generation', stat.plotStage.message); + print_verbatim_information(fh, 'PDF generation' , stat.saveStage.message); + print_verbatim_information(fh, 'matlab2tikz' , stat.tikzStage.message); + end + fprintf(fh, '\n\\normalsize\n\n'); + end + + % now, finish off the file and close file and window + texfile_finish(fh, testsuite); + fclose(fh); + + % print out overall timing + elapsedTimeOverall = toc(elapsedTimeOverall); + fprintf(stdout, 'overall time: %4.2fs\n\n', elapsedTimeOverall); + +end +% ========================================================================= +function cleanFiles(cleanBefore) +% clean output files in ./tex using make + if cleanBefore && exist(fullfile('tex','Makefile'),'file') + fprintf(1, 'Cleaning output files...\n'); + cwd = pwd; + try + cd('tex'); + [exitCode, output] = system('make distclean'); + fprintf(1,'%s\n', output); + assert(exitCode==0, 'Exit code 0 means correct execution'); + catch + % This might happen when make is not present + fprintf(2, '\tNot completed succesfully\n\n'); + end + cd(cwd); + end +end +% ========================================================================= +function texfile_init(texfile_handle) + + fprintf(texfile_handle, ... + ['\\documentclass[landscape]{scrartcl}\n' , ... + '\\pdfminorversion=6\n\n' , ... + '\\usepackage{amsmath} %% required for $\\text{xyz}$\n\n', ... + '\\usepackage{hyperref}\n' , ... + '\\usepackage{graphicx}\n' , ... + '\\usepackage{epstopdf}\n' , ... + '\\usepackage{tikz}\n' , ... + '\\usetikzlibrary{plotmarks}\n\n' , ... + '\\usepackage{pgfplots}\n' , ... + '\\pgfplotsset{compat=newest}\n\n' , ... + '\\usepackage[margin=0.5in]{geometry}\n' , ... + '\\newlength\\figurewidth\n' , ... + '\\setlength\\figurewidth{0.4\\textwidth}\n\n' , ... + '\\begin{document}\n\n']); + +end +% ========================================================================= +function texfile_finish(texfile_handle, testsuite) + + [env,versionString] = getEnvironment(); + + + fprintf(texfile_handle, ... + [ + '\\newpage\n',... + '\\begin{tabular}{ll}\n',... + ' Suite & ' name2tex(func2str(testsuite)) ' \\\\ \n', ... + ' Created & ' datestr(now) ' \\\\ \n', ... + ' OS & ' OSVersion ' \\\\ \n',... + ' ' env ' & ' versionString ' \\\\ \n', ... + VersionControlIdentifier, ... + ' TikZ & \\expandafter\\csname ver@tikz.sty\\endcsname \\\\ \n',... + ' Pgfplots & \\expandafter\\csname ver@pgfplots.sty\\endcsname \\\\ \n',... + '\\end{tabular}\n',... + '\\end{document}']); + +end +% ========================================================================= +function print_verbatim_information(texfile_handle, title, contents) + if ~isempty(contents) + fprintf(texfile_handle, ... + ['\\subsubsection*{%s}\n', ... + '\\begin{verbatim}\n%s\\end{verbatim}\n'], ... + title, contents); + end +end +% ========================================================================= +function texfile_addtest(texfile_handle, ref_file, gen_tex, status, funcId, testsuiteName) + % Actually add the piece of LaTeX code that'll later be used to display + % the given test. + + ref_error = status.plotStage.error; + gen_error = status.tikzStage.error; + + fprintf(texfile_handle, ... + ['\\begin{figure}\n' , ... + ' \\centering\n' , ... + ' \\begin{tabular}{cc}\n' , ... + ' %s & %s \\\\\n' , ... + ' reference rendering & generated\n' , ... + ' \\end{tabular}\n' , ... + ' \\caption{%s \\texttt{%s}, \\texttt{%s(%d)}.%s}\n', ... + '\\end{figure}\n' , ... + '\\clearpage\n\n'],... + include_figure(ref_error, 'includegraphics', ref_file), ... + include_figure(gen_error, 'includegraphics', gen_tex), ... + status.description, ... + name2tex(status.function), name2tex(testsuiteName), funcId, ... + formatIssuesForTeX(status.issues)); + +end +% ========================================================================= +function str = include_figure(errorOccured, command, filename) + if errorOccured + str = sprintf(['\\tikz{\\draw[red,thick] ', ... + '(0,0) -- (\\figurewidth,\\figurewidth) ', ... + '(0,\\figurewidth) -- (\\figurewidth,0);}']); + else + switch command + case 'includegraphics' + strFormat = '\\includegraphics[width=\\figurewidth]{../%s}'; + case 'input' + strFormat = '\\input{../%s}'; + otherwise + error('Matlab2tikz_acidtest:UnknownFigureCommand', ... + 'Unknown figure command "%s"', command); + end + str = sprintf(strFormat, filename); + end +end +% ========================================================================= +function texfile_tab_completion_init(texfile_handle) + + fprintf(texfile_handle, ['\\clearpage\n\n' , ... + '\\begin{table}\n' , ... + '\\centering\n' , ... + '\\caption{Test case completion summary}\n' , ... + '\\begin{tabular}{rlccc}\n' , ... + 'No. & Test case & Plot & PDF & TikZ \\\\\n' , ... + '\\hline\n']); + +end +% ========================================================================= +function texfile_tab_completion_finish(texfile_handle) + + fprintf(texfile_handle, ['\\end{tabular}\n' , ... + '\\end{table}\n\n' ]); + +end +% ========================================================================= +function [env,versionString] = getEnvironment() + % Check if we are in MATLAB or Octave. + % Calling ver with an argument: iterating over all entries is very slow + alternatives = {'MATLAB','Octave'}; + for iCase = 1:numel(alternatives) + env = alternatives{iCase}; + vData = ver(env); + if ~isempty(vData) + versionString = vData.Version; + return; % found the right environment + end + end + % otherwise: + env = []; + versionString = []; +end +% ========================================================================= +function [formatted, OSType, OSVersion] = OSVersion() + if ismac + OSType = 'Mac OS'; + [dummy, OSVersion] = system('sw_vers -productVersion'); + elseif ispc + OSType = '';% will already contain Windows in the output of `ver` + [dummy, OSVersion] = system('ver'); + elseif isunix + OSType = 'Unix'; + [dummy, OSVersion] = system('uname -r'); + else + OSType = ''; + OSVersion = ''; + end + formatted = strtrim([OSType ' ' OSVersion]); +end +% ========================================================================= +function msg = format_error_message(e) + msg = ''; + if ~isempty(e.message) + msg = sprintf('%serror: %s\n', msg, e.message); + end + if ~isempty(e.identifier) + msg = sprintf('%serror: %s\n', msg, e.identifier); + end + if ~isempty(e.stack) + msg = sprintf('%serror: called from:\n', msg); + for ee = e.stack(:)' + msg = sprintf('%serror: %s at line %d, in function %s\n', ... + msg, ee.file, ee.line, ee.name); + end + end +end +% ========================================================================= +function disp_error_message(env, msg) + stderr = 2; + % When displaying the error message in MATLAB, all backslashes + % have to be replaced by two backslashes. This must not, however, + % be applied constantly as the string that's saved to the LaTeX + % output must have only one backslash. + if strcmp(env, 'MATLAB') + fprintf(stderr, strrep(msg, '\', '\\')); + else + fprintf(stderr, msg); + end +end +% ========================================================================= +function [formatted,treeish] = VersionControlIdentifier() +% This function gives the (git) commit ID of matlab2tikz +% +% This assumes the standard directory structure as used by Nico's master branch: +% SOMEPATH/src/matlab2tikz.m with a .git directory in SOMEPATH. +% +% The HEAD of that repository is determined from file system information only +% by following dynamic references (e.g. ref:refs/heds/master) in branch files +% until an absolute commit hash (e.g. 1a3c9d1...) is found. +% NOTE: Packed branch references are NOT supported by this approach + MAXITER = 10; % stop following dynamic references after a while + formatted = ''; + REFPREFIX = 'ref:'; + isReference = @(treeish)(any(strfind(treeish, REFPREFIX))); + treeish = [REFPREFIX 'HEAD']; + try + % get the matlab2tikz directory + m2tDir = fileparts(mfilename('fullpath')); + gitDir = fullfile(m2tDir,'..','.git'); + + nIter = 1; + while isReference(treeish) + refName = treeish(numel(REFPREFIX)+1:end); + branchFile = fullfile(gitDir, refName); + + if exist(branchFile, 'file') && nIter < MAXITER + fid = fopen(branchFile,'r'); + treeish = fscanf(fid,'%s'); + fclose(fid); + nIter = nIter + 1; + else % no branch file or iteration limit reached + treeish = ''; + return; + end + end + catch %#ok + treeish = ''; + end + if ~isempty(treeish) + formatted = [' Commit & ' treeish ' \\\\ \n']; + end +end +% ========================================================================= +function texName = name2tex(matlabIdentifier) +texName = strrep(matlabIdentifier, '_', '\_'); +end +% ========================================================================= +function str = formatIssuesForTeX(issues) +% make links to GitHub issues for the LaTeX output + issues = issues(:)'; + if isempty(issues) + str = ''; + return + end + BASEURL = 'https://github.com/matlab2tikz/matlab2tikz/issues/'; + SEPARATOR = sprintf(' \n'); + strs = arrayfun(@(n) sprintf(['\\href{' BASEURL '%d}{\\#%d}'], n,n), issues, ... + 'UniformOutput', false); + strs = [strs; repmat({SEPARATOR}, 1, numel(strs))]; + str = sprintf('{\\color{blue} \\texttt{%s}}', [strs{:}]); +end +% ========================================================================= +function onOff = onOffBoolean(bool) +if bool + onOff = 'on'; +else + onOff = 'off'; +end +end +% ========================================================================= +function ensureLineEndings(filename) +% Read in one line and test the ending +fid = fopen(filename,'r+'); +testline = fgets(fid); +if ispc && ~strcmpi(testline(end-1:end), sprintf('\r\n')) + % Rewind, read the whole + fseek(fid,0,'bof'); + str = fread(fid,'*char')'; + + % Replace, overwrite and close + str = strrep(str, testline(end), sprintf('\r\n')); + fseek(fid,0,'bof'); + fprintf(fid,'%s',str); + fclose(fid); +end +end +% ========================================================================= +function defaultStatus = emptyStatus() +% constructs an empty status struct +defaultStatus = struct('function', '', ... + 'description', '',... + 'issues', [],... + 'skip', false, ... % skipped this test? + 'closeall', false, ... % call close all after? + 'extraOptions', {cell(0)}, ... + 'extraCleanfigureOptions',{cell(0)}, ... + 'plotStage', emptyStage(), ... + 'saveStage', emptyStage(), ... + 'tikzStage', emptyStage()); +end +% ========================================================================= +function stage = emptyStage() +% constructs an empty (workflow) stage struct +stage = struct('message', '', 'error' , false); +end +% ========================================================================= +function [status] = fillStruct(status, defaultStatus) +% fills non-existant fields of |data| with those of |defaultData| + fields = fieldnames(defaultStatus); + for iField = 1:numel(fields) + field = fields{iField}; + if ~isfield(status,field) + status.(field) = defaultStatus.(field); + end + end +end +% ========================================================================= +function name = extractFunctionFromError(e, testsuite) +% extract function name from an error (using the stack) + name = ''; + if isa(testsuite, 'function_handle') + testsuite = func2str(testsuite); + end + for kError = 1:numel(e.stack); + ee = e.stack(kError); + if isempty(name) + name = ''; + if ~isempty(regexp(ee.name, ['^' testsuite '>'],'once')) + % extract function name + name = regexprep(ee.name, ['^' testsuite '>(.*)'], '$1'); + elseif ~isempty(regexp(ee.name, ['^' testsuite],'once')) && ... + kError < numel(e.stack) + % new stack trace format (R2014b) + if kError > 1 + name = e.stack(kError-1).name; + end + end + end + end +end +% ========================================================================= +function [stage, errorHasOccurred] = errorHandler(e,env) +% common error handler code: save and print to console +errorHasOccurred = true; +stage = emptyStage(); +stage.message = format_error_message(e); +stage.error = errorHasOccurred; + +disp_error_message(env, stage.message); +end +% ========================================================================= diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/myCount.dat b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/myCount.dat new file mode 100644 index 0000000000000000000000000000000000000000..69e029e2c50b8e00bb7628f1de5cfee5a5eb3580 --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/myCount.dat @@ -0,0 +1,24 @@ + 11 11 9 + 7 13 11 + 14 17 20 + 11 13 9 + 43 51 69 + 38 46 76 + 61 132 186 + 75 135 180 + 38 88 115 + 28 36 55 + 12 12 14 + 18 27 30 + 18 19 29 + 17 15 18 + 19 36 48 + 32 47 10 + 42 65 92 + 57 66 151 + 44 55 90 + 114 145 257 + 35 58 68 + 11 12 15 + 13 9 15 + 10 9 7 diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/pointReductionTest.m b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/pointReductionTest.m new file mode 100644 index 0000000000000000000000000000000000000000..6b6718fbe5d179f8adb00ac4a7019537caffc160 --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/pointReductionTest.m @@ -0,0 +1,34 @@ +% ============================================================================== +function pointReductionTest() + + breakTime = 5.0; + + testPlots = {@testPlot1, ... + }; + %@testPlot2}; + + for testPlot = testPlots + testPlot(); + 'a' + %pause(breakTime); + %pointReduction2d(0.1); + pause(breakTime); + 'b' + end + + close all; + +end +% ============================================================================== +function testPlot1() + x = -pi:pi/1000:pi; + y = tan(sin(x)) - sin(tan(x)); + plot(x,y,'--rs'); +end +% ============================================================================== +function testPlot2() + x = -pi:pi/1000:pi; + y = exp(tan(sin(x)) - sin(tan(x))); + semilogy(x,y,'--rs'); +end +% ============================================================================== diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/runtests b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/runtests new file mode 100644 index 0000000000000000000000000000000000000000..1135424cf8010602d9932fe3b29db06bbeafa85b --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/runtests @@ -0,0 +1,56 @@ +#!/usr/bin/octave -q + +# Create +# +template = [ ... + '%%!test\n', ... + '%%! display(''Test %d...'');\n', ... + '%%! graphics_toolkit gnuplot\n', ... + '%%! try\n', ... + '%%! out = ACID(%d);\n', ... + '%%! catch e\n', ... + '%%! error(''Exception in ACID:\\n%%s'', e.message);\n', ... + '%%! end\n', ... + '%%! if ~(isfield(out, ''skip'') && out.skip)\n', ... + '%%! outputFile = ''data/converted/test%d-converted.tex'';\n', ... + '%%! try\n', ... + '%%! matlab2tikz( ...\n', ... + '%%! ''filename'', outputFile, ...\n', ... + '%%! ''width'', ''5cm'', ...\n', ... + '%%! ''showInfo'', false, ...\n', ... + '%%! ''checkForUpdates'', false, ...\n', ... + '%%! ''dataPath'', ''data/converted/'', ...\n', ... + '%%! ''standalone'', true ...\n', ... + '%%! );\n', ... + '%%! catch e\n', ... + '%%! error(''Exception in matlab2tikz:\\n%%s'', e.message);\n', ... + '%%! end\n', ... + '%%! %%type(outputFile);\n', ... + '%%! assert(md5sum(outputFile), out.md5);\n', ... + '%%! end\n', ... + '%%!\n' ... + ]; + +# Create test entries for all tests +testfile = 'testlist.m'; +fh = fopen(testfile, 'w'); +testcases = ACID(0); +for k = 1:length(testcases) + fprintf(fh, template, k, k, k); +end +fclose(fh); + +# Actually run the tests. +# Can't use the [n, max] return arguments +# <https://www.gnu.org/software/octave/doc/interpreter/Test-Functions.html> +# since they don't account for exceptions in tests. +addpath('../src/'); +success = test(testfile); + +if success + printf('Tests successful.'); + ierr = 0; +else + ierr = 1; +end +exit(ierr); diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/testPatches.m b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/testPatches.m new file mode 100644 index 0000000000000000000000000000000000000000..d4e8cffefca8b1c8ef2cae6a9f3278aa8998282a --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/testPatches.m @@ -0,0 +1,121 @@ +function status = testPatches(k) +% TESTPATCHES Test suite for patches +% +% See also: ACID, matlab2tikz_acidtest + +testfunction_handles = { + @patch01; + @patch02; + @patch03; + @patch04; + @patch05; + @patch06; + @patch07; + @patch08; + }; + +numFunctions = length( testfunction_handles ); + +if nargin < 1 || isempty(k) || k <= 0 + status = testfunction_handles; + return; % This is used for querying numFunctions. + +elseif (k<=numFunctions) + status = testfunction_handles{k}(); + status.function = func2str(testfunction_handles{k}); + +else + error('patchTests:outOfBounds', ... + 'Out of bounds (number of testfunctions=%d)', numFunctions); +end + +end + +% ========================================================================= +function p = patch00() +% DO NOT INCLUDE IN ACID LIST +% Base patch plot for following tests +xdata = [2 2 0 2 5; 2 8 2 4 5; 8 8 2 4 8]; +ydata = [4 4 4 2 0; 8 4 6 2 2; 4 0 4 0 0]; +zdata = ones(3,5)*2; +p = patch(xdata,ydata,zdata); +end +% ========================================================================= +function stat = patch01() +stat.description = 'Set face color red'; + +p = patch00(); +set(p,'FaceColor','r') +end +% ========================================================================= +function stat = patch02() +stat.description = 'Flat face colors scaled in clim [0,40]'; + +p = patch00(); +set(gca,'CLim',[0 40]) +cdata = [15 30 25 2 60]; +set(p,'FaceColor','flat','CData',cdata,'CDataMapping','scaled') +end +% ========================================================================= +function stat = patch03() +stat.description = 'Flat face colors direct in clim [0,40]'; + +p = patch00(); +set(gca,'CLim',[0 40]) +cdata = [15 30 25 2 60]; +set(p,'FaceColor','flat','CData',cdata,'CDataMapping','direct') +end +% ========================================================================= +function stat = patch04() +stat.description = 'Flat face colors with 3D (truecolor) CData'; + +p = patch00(); +cdata(:,:,1) = [0 0 1 0 0.8]; +cdata(:,:,2) = [0 0 0 0 0.8]; +cdata(:,:,3) = [1 1 1 0 0.8]; +set(p,'FaceColor','flat','CData',cdata) +end +% ========================================================================= +function stat = patch05() +stat.description = 'Flat face color, scaled edge colors in clim [0,40]'; + +p = patch00(); +set(gca,'CLim',[0 40]) +cdata = [15 30 25 2 60; 12 23 40 13 26; 24 8 1 65 42]; +set(p,'FaceColor','flat','CData',cdata,'EdgeColor','flat','LineWidth',5,'CDataMapping','scaled') +end +% ========================================================================= +function stat = patch06() +stat.description = 'Flat face color, direct edge colors in clim [0,40]'; + +p = patch00(); +set(gca,'CLim',[0 40]) +cdata = [15 30 25 2 60; 12 23 40 13 26; 24 8 1 65 42]; +set(p,'FaceColor','flat','CData',cdata,'EdgeColor','flat','LineWidth',5,'CDataMapping','direct') +end +% ========================================================================= +function stat = patch07() +stat.description = 'Flat face color with 3D CData and interp edge colors'; + +p = patch00(); +cdata(:,:,1) = [0 0 1 0 0.8; + 0 0 1 0.2 0.6; + 0 1 0 0.4 1]; +cdata(:,:,2) = [0 0 0 0 0.8; + 1 1 1 0.2 0.6; + 1 0 0 0.4 0]; +cdata(:,:,3) = [1 1 1 0 0.8; + 0 1 0 0.2 0.6; + 1 0 1 0.4 0]; +set(p,'FaceColor','flat','CData',cdata,'EdgeColor','interp','LineWidth',5) +end +% ========================================================================= +function stat = patch08() +stat.description = 'Interp face colors, flat edges, scaled CData in clims [0,40]'; + +p = patch00(); +set(gca,'CLim',[0 40]) +cdata = [15 30 25 2 60; 12 23 40 13 26; 24 8 1 65 42]; +set(p,'FaceColor','interp','CData',cdata,'EdgeColor','flat','LineWidth',5,'CDataMapping','scaled') +end +% ========================================================================= \ No newline at end of file diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/testSurfshader.m b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/testSurfshader.m new file mode 100644 index 0000000000000000000000000000000000000000..e329d9cf4791992bd69d23596e9f73b755aaf3cb --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/testSurfshader.m @@ -0,0 +1,103 @@ +function status = testSurfshader(k) +% TESTSURFSHADER Test suite for Surf/mesh shaders (coloring) +% +% See also: ACID, matlab2tikz_acidtest + + testfunction_handles = { + @surfShader1; + @surfShader2; + @surfShader3; + @surfShader4; + @surfShader5; + @surfNoShader; + @surfNoPlot; + @surfMeshInterp; + @surfMeshRGB; + }; + + numFunctions = length( testfunction_handles ); + + if nargin < 1 || isempty(k) || k <= 0 + status = testfunction_handles; + return; % This is used for querying numFunctions. + + elseif (k<=numFunctions) + status = testfunction_handles{k}(); + status.function = func2str(testfunction_handles{k}); + + else + error('patchTests:outOfBounds', ... + 'Out of bounds (number of testfunctions=%d)', numFunctions); + end + +end + +% ========================================================================= +function [stat] = surfShader1() + stat.description = 'shader=flat/(flat mean) | Fc: flat | Ec: none'; + + [X,Y,Z] = peaks(5); + surf(X,Y,Z,'FaceColor','flat','EdgeColor','none') +end +% ========================================================================= +function [stat] = surfShader2() + stat.description = 'shader=interp | Fc: interp | Ec: none'; + + [X,Y,Z] = peaks(5); + surf(X,Y,Z,'FaceColor','interp','EdgeColor','none') +end +% ========================================================================= +function [stat] = surfShader3() + stat.description = 'shader=faceted | Fc: flat | Ec: RGB'; + + [X,Y,Z] = peaks(5); + surf(X,Y,Z,'FaceColor','flat','EdgeColor','green') +end +% ========================================================================= +function [stat] = surfShader4() +stat.description = 'shader=faceted | Fc: RGB | Ec: interp'; +env = getEnvironment(); +if strcmpi(env, 'MATLAB') && isVersionBelow(env, 8, 4) %R2014a and older + warning('m2t:ACID:surfShader4',... + 'The MATLAB EPS export may behave strangely for this case'); +end + +[X,Y,Z] = peaks(5); +surf(X,Y,Z,'FaceColor','blue','EdgeColor','interp') +end +% ========================================================================= +function [stat] = surfShader5() +stat.description = 'shader=faceted interp | Fc: interp | Ec: flat'; + +[X,Y,Z] = peaks(5); +surf(X,Y,Z,'FaceColor','interp','EdgeColor','flat') +end +% ========================================================================= +function [stat] = surfNoShader() +stat.description = 'no shader | Fc: RGB | Ec: RGB'; + +[X,Y,Z] = peaks(5); +surf(X,Y,Z,'FaceColor','blue','EdgeColor','yellow') +end +% ========================================================================= +function [stat] = surfNoPlot() +stat.description = 'no plot | Fc: none | Ec: none'; + +[X,Y,Z] = peaks(5); +surf(X,Y,Z,'FaceColor','none','EdgeColor','none') +end +% ========================================================================= +function [stat] = surfMeshInterp() +stat.description = 'mesh | Fc: none | Ec: interp'; + +[X,Y,Z] = peaks(5); +surf(X,Y,Z,'FaceColor','none','EdgeColor','interp') +end +% ========================================================================= +function [stat] = surfMeshRGB() +stat.description = 'mesh | Fc: none | Ec: RGB'; + +[X,Y,Z] = peaks(5); +surf(X,Y,Z,'FaceColor','none','EdgeColor','green') +end +% ========================================================================= \ No newline at end of file diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/tex/Makefile b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/tex/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..89809159151e79dbbe860142c6e1526372eeafb2 --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/test/tex/Makefile @@ -0,0 +1,33 @@ +# ./Makefile + +ECHOCMD:=/bin/echo -e +LATEX:=lualatex --shell-escape +TARGET:=acid + +main: + cd ../data/reference/ && $(MAKE) + cd ../data/converted/ && $(MAKE) + @$(LATEX) $(TARGET) + +.PHONY: clean + +clean: + @rm -f $(TARGET).aux \ + $(TARGET).log \ + $(TARGET).nav \ + $(TARGET).out \ + $(TARGET).snm \ + $(TARGET).toc \ + $(TARGET).vrb \ + $(TARGET).pdf \ + $(TARGET).dvi \ + $(TARGET).ps \ + missfont.log + @rm -f *~ + cd ../data/reference/ && $(MAKE) clean + cd ../data/converted/ && $(MAKE) clean + +distclean: clean + @rm -f $(TARGET).tex + cd ../data/reference/ && $(MAKE) distclean + cd ../data/converted/ && $(MAKE) distclean diff --git a/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/version-0.6.0 b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/version-0.6.0 new file mode 100644 index 0000000000000000000000000000000000000000..5e89b8a43b4255233cb4eccb979d41153b98d8e3 --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz-matlab2tikz-722609f/version-0.6.0 @@ -0,0 +1,6 @@ +This file is there to make sure that the HTML page + + http://www.mathworks.de/matlabcentral/fileexchange/22022-matlab2tikz/all_files + +contains the version number in clear text. This is used +by the automatic updater. diff --git a/katoptron/matlab/TPL/matlab2tikz2.m b/katoptron/matlab/TPL/matlab2tikz2.m new file mode 100644 index 0000000000000000000000000000000000000000..39c319769cb98c3afcfb2e6c43b6001875c468de --- /dev/null +++ b/katoptron/matlab/TPL/matlab2tikz2.m @@ -0,0 +1,29 @@ +function matlab2tikz2(filename,width_macro,height_macro) + + filename_tmp = [filename,'_tmp']; + matlab2tikz(filename_tmp); + + fid = fopen(filename_tmp); + fid2 = fopen(filename, 'w'); + tline = fgetl(fid); + while ischar(tline) + if((length(tline)>5) & (tline(1:5) == 'width')) + disp(tline) + clear tline + tline = ['width=',width_macro, ',']; + disp(tline) + elseif((length(tline)>6) & (tline(1:6) == 'height')) + disp(tline) + clear tline + tline = ['height=',height_macro, ',']; + disp(tline) + end + fwrite(fid2, tline); + fprintf(fid2,char(10)); + tline = fgetl(fid); + end + + fclose(fid); + fclose(fid2); + +end \ No newline at end of file diff --git a/katoptron/matlab/TPL/test.tex b/katoptron/matlab/TPL/test.tex new file mode 100644 index 0000000000000000000000000000000000000000..1c8f7cfdfdfb43b122d2240ab83fdccc62b38e2a --- /dev/null +++ b/katoptron/matlab/TPL/test.tex @@ -0,0 +1,130 @@ +% This file was created by matlab2tikz. +% Minimal pgfplots version: 1.3 +% +%The latest updates can be retrieved from +% http://www.mathworks.com/matlabcentral/fileexchange/22022-matlab2tikz +%where you can also make suggestions and rate matlab2tikz. +% +\definecolor{mycolor1}{rgb}{0.00000,0.44700,0.74100}% +% +\begin{tikzpicture} + +\begin{axis}[% +width=\hi, +height=\ho, +at={(1.011111in,0.641667in)}, +scale only axis, +xmin=-5, +xmax=5, +ymin=-80, +ymax=80 +] +\addplot [color=mycolor1,solid,forget plot] + table[row sep=crcr]{% +-5 -65\\ +-4.8989898989899 -58.7883786338026\\ +-4.7979797979798 -52.8766648218745\\ +-4.6969696969697 -47.258674903303\\ +-4.5959595959596 -41.9282252171753\\ +-4.49494949494949 -36.8791321025787\\ +-4.39393939393939 -32.1052118986003\\ +-4.29292929292929 -27.6002809443275\\ +-4.19191919191919 -23.3581555788474\\ +-4.09090909090909 -19.3726521412472\\ +-3.98989898989899 -15.6375869706142\\ +-3.88888888888889 -12.1467764060357\\ +-3.78787878787879 -8.89403678659878\\ +-3.68686868686869 -5.87318445139076\\ +-3.58585858585859 -3.07803573949884\\ +-3.48484848484848 -0.502406990010293\\ +-3.38383838383838 1.85988545798769\\ +-3.28282828282828 4.01502526540787\\ +-3.18181818181818 5.96919609316303\\ +-3.08080808080808 7.72858160216593\\ +-2.97979797979798 9.29936545332934\\ +-2.87878787878788 10.687731307566\\ +-2.77777777777778 11.8998628257887\\ +-2.67676767676768 12.9419436689103\\ +-2.57575757575758 13.8201574978434\\ +-2.47474747474747 14.540687973501\\ +-2.37373737373737 15.1097187567956\\ +-2.27272727272727 15.5334335086401\\ +-2.17171717171717 15.8180158899473\\ +-2.07070707070707 15.96964956163\\ +-1.96969696969697 15.9945181846008\\ +-1.86868686868687 15.8988054197727\\ +-1.76767676767677 15.6886949280583\\ +-1.66666666666667 15.3703703703704\\ +-1.56565656565657 14.9500154076218\\ +-1.46464646464646 14.4338137007252\\ +-1.36363636363636 13.8279489105935\\ +-1.26262626262626 13.1386046981394\\ +-1.16161616161616 12.3719647242757\\ +-1.06060606060606 11.5342126499151\\ +-0.959595959595959 10.6315321359705\\ +-0.858585858585859 9.67010684335447\\ +-0.757575757575758 8.65612043297994\\ +-0.656565656565657 7.59575656575963\\ +-0.555555555555555 6.49519890260631\\ +-0.454545454545454 5.36063110443275\\ +-0.353535353535354 4.19823683215174\\ +-0.252525252525253 3.01419974667603\\ +-0.151515151515151 1.81470350891838\\ +-0.0505050505050502 0.605931779791586\\ +0.0505050505050502 -0.605931779791586\\ +0.151515151515151 -1.81470350891838\\ +0.252525252525253 -3.01419974667603\\ +0.353535353535354 -4.19823683215174\\ +0.454545454545454 -5.36063110443275\\ +0.555555555555555 -6.49519890260631\\ +0.656565656565657 -7.59575656575963\\ +0.757575757575758 -8.65612043297994\\ +0.858585858585859 -9.67010684335447\\ +0.959595959595959 -10.6315321359705\\ +1.06060606060606 -11.5342126499151\\ +1.16161616161616 -12.3719647242757\\ +1.26262626262626 -13.1386046981394\\ +1.36363636363636 -13.8279489105935\\ +1.46464646464646 -14.4338137007252\\ +1.56565656565657 -14.9500154076218\\ +1.66666666666667 -15.3703703703704\\ +1.76767676767677 -15.6886949280583\\ +1.86868686868687 -15.8988054197727\\ +1.96969696969697 -15.9945181846008\\ +2.07070707070707 -15.96964956163\\ +2.17171717171717 -15.8180158899473\\ +2.27272727272727 -15.5334335086401\\ +2.37373737373737 -15.1097187567956\\ +2.47474747474747 -14.540687973501\\ +2.57575757575758 -13.8201574978434\\ +2.67676767676768 -12.9419436689103\\ +2.77777777777778 -11.8998628257887\\ +2.87878787878788 -10.687731307566\\ +2.97979797979798 -9.29936545332933\\ +3.08080808080808 -7.72858160216592\\ +3.18181818181818 -5.96919609316303\\ +3.28282828282828 -4.0150252654079\\ +3.38383838383838 -1.85988545798769\\ +3.48484848484848 0.502406990010286\\ +3.58585858585859 3.07803573949887\\ +3.68686868686869 5.87318445139076\\ +3.78787878787879 8.89403678659875\\ +3.88888888888889 12.1467764060357\\ +3.98989898989899 15.6375869706142\\ +4.09090909090909 19.3726521412472\\ +4.19191919191919 23.3581555788474\\ +4.29292929292929 27.6002809443274\\ +4.39393939393939 32.1052118986004\\ +4.49494949494949 36.8791321025787\\ +4.5959595959596 41.9282252171753\\ +4.6969696969697 47.258674903303\\ +4.7979797979798 52.8766648218745\\ +4.8989898989899 58.7883786338026\\ +5 65\\ +}; +\node[right, align=left, inner sep=0mm, text=black] +at (axis cs:-2,16,0) {dy/dx = 0}; +\node[right, align=left, inner sep=0mm, text=black] +at (axis cs:2,-16,0) {dy/dx = 0}; +\end{axis} +\end{tikzpicture}% diff --git a/katoptron/matlab/ensemble/eric_data.m b/katoptron/matlab/ensemble/eric_data.m new file mode 100644 index 0000000000000000000000000000000000000000..cfea0b6bdedb7ad902e03bf6efa0bbe69370d5f8 --- /dev/null +++ b/katoptron/matlab/ensemble/eric_data.m @@ -0,0 +1,571 @@ +% clear all +% close all +% clc +% +% throughput_haswell = ... +% [0.9119170984455955, 7.906111492602527; +% 3.979274611398962, 10.228603533304188; +% 7.792746113989635, 10.62563206192646; +% 11.772020725388602, 11.215931081840303; +% 15.917098445595853, 11.132030713527676; +% 19.813471502590673, 11.336537861289713; +% 23.875647668393782, 11.348773331668632; +% 27.689119170984455, 11.360259691616193; +% 31.751295336787564, 11.372495161995118]; +% +% throughput_haswell(:,1) = round(throughput_haswell(:,1)); +% +% throughput_cray = ... +% [1.0777202072538863, 2.3162494537736436; +% 4.145077720207253, 3.0965728197765117; +% 7.87564766839378, 3.204195018415625; +% 12.020725388601038, 3.2166801922716672; +% 15.999999999999998, 3.4214370435108137; +% 19.979274611398964, 3.3370372682439537; +% 23.875647668393782, 3.3487733316686317; +% 27.772020725388607, 3.5532804794306685; +% 31.834196891191716, 3.469130407640911]; +% +% throughput_cray(:,1) = round(throughput_cray(:,1)); +% +% throughput_nvidia = ... +% [0.9948186528497391, 17.159373244272423; +% 15.999999999999998, 34.168424995318055; +% 31.834196891191716, 35.08358823896622]; +% +% throughput_nvidia(:,1) = round(throughput_nvidia(:,1)); +% +% throughput_knc = ... +% [0.8290155440414484, 14.749235283101314; +% 7.626943005181348, 15.348024221237274; +% 15.917098445595853, 19.228416255696352; +% 23.875647668393782, 24.457207066608397; +% 31.751295336787564, 25.73394094512765]; +% +% throughput_knc(:,1) = round(throughput_knc(:,1)); +% +% %% +% matrix_speed_up_haswell = ... +% [0.8000000000000007, 0.9986486486486488; +% 3.9200000000000017, 1.307657657657658; +% 7.759999999999998, 1.3896396396396398; +% 11.84, 1.4211711711711714; +% 15.84, 1.4400900900900904; +% 19.759999999999998, 1.4495495495495496; +% 23.839999999999996, 1.4495495495495496; +% 27.839999999999996, 1.4590090090090093; +% 31.919999999999995, 1.4653153153153156]; +% +% matrix_speed_up_cray = ... +% [0.8000000000000007, 0.9954954954954955; +% 4.080000000000002, 1.307657657657658; +% 7.920000000000002, 1.326576576576577; +% 12, 1.392792792792793; +% 15.999999999999996, 1.4211711711711714; +% 19.92, 1.411711711711712; +% 23.919999999999995, 1.3833333333333335; +% 28, 1.4810810810810813; +% 32, 1.4211711711711714]; +% +% matrix_speed_up_nvidia = ... +% [0.8000000000000007, 1.001801801801802; +% 15.999999999999996, 1.9855855855855857; +% 32, 2.032882882882883]; +% +% matrix_speed_up_knc = ... +% [0.8000000000000007, 0.9986486486486488; +% 7.759999999999998, 1.0490990990990992; +% 15.84, 1.3234234234234237; +% 23.759999999999998, 1.6702702702702705; +% 31.83999999999999, 1.7585585585585588]; +% +% matrix_speed_up_haswell(:,1) = round(matrix_speed_up_haswell(:,1)); +% matrix_speed_up_cray(:,1) = round(matrix_speed_up_cray(:,1)); +% matrix_speed_up_nvidia(:,1) = round(matrix_speed_up_nvidia(:,1)); +% matrix_speed_up_knc(:,1) = round(matrix_speed_up_knc(:,1)); +% %% +% mrhs_assembly_time_haswell = ... +% [0.8226221079691509, 78.73303167420812; +% 3.86632390745501, 52.26244343891403; +% 7.814910025706938, 36.65158371040724; +% 15.87660668380463, 29.864253393665194; +% 31.835475578406168, 27.149321266968343]; +% +% mrhs_assembly_time_cray = ... +% [0.9871465295629829, 269.4570135746606; +% 4.030848329048842, 171.71945701357464; +% 7.97943444730077, 144.5701357466063; +% 16.041131105398456, 138.46153846153845; +% 31.917737789203088, 132.3529411764706]; +% +% mrhs_assembly_time_nvidia = ... +% [0.9871465295629829, 51.58371040723978; +% 15.958868894601542, 43.43891402714934; +% 32, 43.43891402714934]; +% +% mrhs_assembly_time_knc = ... +% [0.8226221079691509, 74.66063348416293; +% 7.814910025706938, 28.50678733031674; +% 15.87660668380463, 20.361990950226243; +% 31.835475578406168, 16.968325791855193]; +% +% +% mrhs_assembly_time_haswell(:,1) = round(mrhs_assembly_time_haswell(:,1)); +% mrhs_assembly_time_cray(:,1) = round(mrhs_assembly_time_cray(:,1)); +% mrhs_assembly_time_nvidia(:,1) = round(mrhs_assembly_time_nvidia(:,1)); +% mrhs_assembly_time_knc(:,1) = round(mrhs_assembly_time_knc(:,1)); +% +% %% +% mrhs_assembly_speed_up_haswell = ... +% [0.9663930062484223, 0.9955056179775283; +% 4.007778307041386, 1.501123595505618; +% 7.850575807671829, 2.1988764044943823; +% 15.918495895093729, 2.653932584269663; +% 31.96305864552103, 2.91685393258427]; +% +% mrhs_assembly_speed_up_cray = ... +% [0.9663930062484223, 0.9955056179775283; +% 4.08883409453893, 1.571910112359551; +% 8.0040796884194, 1.8550561797752811; +% 16.06536467819216, 1.9359550561797754; +% 32.027257698450505, 2.037078651685394]; +% +% mrhs_assembly_speed_up_nvidia = ... +% [0.9663930062484223, 0.9955056179775283; +% 16.051556502003415, 1.1573033707865177; +% 32.011656252626864, 1.1573033707865177]; +% +% mrhs_assembly_speed_up_knc = ... +% [0.9663930062484223, 0.9955056179775283; +% 7.860438790663787, 2.755056179775281; +% 15.937325226260194, 3.7157303370786523; +% 31.990674997898516, 4.474157303370787]; +% +% mrhs_assembly_speed_up_theoretical = ... +% [0.9663930062484223, 0.9955056179775283; +% 4.094572557370617, 1.8955056179775278; +% 8.010535459105045, 2.2191011235955065; +% 15.994351200650064, 2.4314606741573037; +% 32.116024545378124, 2.542696629213484]; +% +% mrhs_assembly_speed_up_haswell(:,1) = round(mrhs_assembly_speed_up_haswell(:,1)); +% mrhs_assembly_speed_up_cray(:,1) = round(mrhs_assembly_speed_up_cray(:,1)); +% mrhs_assembly_speed_up_nvidia(:,1) = round(mrhs_assembly_speed_up_nvidia(:,1)); +% mrhs_assembly_speed_up_knc(:,1) = round(mrhs_assembly_speed_up_knc(:,1)); +% mrhs_assembly_speed_up_theoretical(:,1) = round(mrhs_assembly_speed_up_theoretical(:,1)); +% %% +% halo_time = zeros(5,6); +% halo_time(:,1:2) = ... +% [1.079518072289158, 0.927835051546392; +% 4.086746987951807, 1.4536082474226788; +% 8.096385542168676, 2.195876288659793; +% 16.11566265060241, 3.9587628865979383; +% 31.999999999999996, 7.422680412371134]; +% +% halo_time(:,[1,3]) = ... +% [0.7710843373493983, 1.0515463917525736; +% 4.086746987951807, 1.6082474226804138; +% 7.865060240963853, 2.3505154639175245; +% 15.807228915662652, 3.9278350515463902; +% 31.922891566265054, 7.824742268041238]; +% +% halo_time(:,[1,4]) = ... +% [0.9253012048192772, 0.927835051546392; +% 3.9325301204819283, 1.4536082474226788; +% 7.942168674698795, 2.1030927835051543; +% 16.11566265060241, 3.8350515463917514; +% 31.999999999999996, 7.608247422680414]; +% +% halo_time(:,[1,5]) = ... +% [0.7710843373493983, 1.0824742268041234; +% 4.009638554216867, 1.731958762886599; +% 7.865060240963853, 2.5670103092783503; +% 16.038554216867468, 5.041237113402062; +% 31.922891566265054, 9.34020618556701]; +% +% halo_time(:,[1,6]) = ... +% [1.0024096385542158, 1.144329896907216; +% 4.009638554216867, 1.8247422680412377; +% 7.942168674698795, 2.7525773195876297; +% 16.038554216867468, 5.443298969072165; +% 31.999999999999996, 10.453608247422682]; +% +% halo_time(:,1) = round(halo_time(:,1)); +% +% %% +% halo_speed_up = zeros(5,6); +% halo_speed_up(:,1:2) = ... +% [0.9230769230769234, 1.0141388174807187; +% 4, 2.6079691516709502; +% 8.000000000000002, 3.4717223650385596; +% 16.07692307692308, 3.8213367609254494; +% 32.15384615384615, 4.088688946015424]; +% +% halo_speed_up(:,[1,3]) = ... +% [0.9230769230769234, 1.0141388174807187; +% 3.8461538461538467, 2.5874035989717212; +% 7.8461538461538485, 3.410025706940874; +% 16, 4.057840616966581; +% 31.846153846153847, 3.9858611825192796]; +% +% halo_speed_up(:,[1,4]) = ... +% [1, 0.9935732647814906; +% 4.153846153846155, 2.5874035989717212; +% 7.923076923076925, 3.5745501285347037; +% 16.07692307692308, 3.996143958868894; +% 32, 4.07840616966581]; +% +% halo_speed_up(:,[1,5]) = ... +% [0.9230769230769234, 1.0038560411311046; +% 3.9230769230769234, 2.597686375321336; +% 8.076923076923078, 3.3791773778920304; +% 16, 3.482005141388174; +% 32, 3.7596401028277633]; +% +% halo_speed_up(:,[1,6]) = ... +% [1, 1.0038560411311046; +% 4, 2.515424164524421; +% 8.000000000000002, 3.2763496143958863; +% 16.07692307692308, 3.30719794344473; +% 32, 3.451156812339331]; +% +% halo_speed_up(:,1) = round(halo_speed_up(:,1)); +% halo_speed_up(1,:) = round(halo_speed_up(1,:)); +% +% %% +% multigrid_time_haswell = ... +% [0.7346938775510221, 161.43497757847535; +% 3.8367346938775526, 115.69506726457405; +% 7.836734693877553, 108.96860986547085; +% 15.836734693877553, 108.96860986547085; +% 31.755102040816325, 107.62331838565024]; +% +% multigrid_time_cray = ... +% [0.9795918367346967, 516.5919282511211; +% 4.0000000000000036, 390.13452914798205; +% 7.918367346938776, 367.2645739910314; +% 15.918367346938776, 360.5381165919282; +% 31.91836734693878, 356.50224215246635]; +% +% multigrid_time_nvidia = ... +% [0.8979591836734713, 217.9372197309417; +% 16.000000000000004, 40.35874439461884; +% 32, 34.97757847533637]; +% +% multigrid_time_knc = ... +% [0.8163265306122458, 357.84753363228697; +% 7.836734693877553, 137.21973094170403; +% 15.836734693877553, 122.42152466367713; +% 31.836734693877553, 96.86098654708519]; +% +% multigrid_time_haswell(:,1) = round(multigrid_time_haswell(:,1)); +% multigrid_time_cray(:,1) = round(multigrid_time_cray(:,1)); +% multigrid_time_nvidia(:,1) = round(multigrid_time_nvidia(:,1)); +% multigrid_time_knc(:,1) = round(multigrid_time_knc(:,1)); +% +% %% +% +% multigrid_speed_up_haswell = ... +% [0.8256346233874332, 1.0224719101123583; +% 3.9409071993341662, 1.4157303370786511; +% 7.8678318768206434, 1.5101123595505612; +% 15.86799833541407, 1.525842696629213; +% 31.86799833541407, 1.525842696629213]; +% +% multigrid_speed_up_cray = ... +% [1.0476903870162317, 1.0067415730337075; +% 4.088056595921765, 1.321348314606741; +% 8.01498127340824, 1.4157303370786511; +% 16.015147732001665, 1.4314606741573028; +% 32.015147732001665, 1.4314606741573028]; +% +% multigrid_speed_up_nvidia = ... +% [1.1210986267166057, 0.9438202247191008; +% 15.98119017894299, 5.222471910112359; +% 32.135996670828135, 5.8516853932584265]; +% +% multigrid_speed_up_knc = ... +% [0.8998751560549323, 1.0382022471910108; +% 7.9542238868081565, 2.6741573033707864; +% 15.883478984602585, 2.988764044943819; +% 31.965709529754477, 3.7595505617977523]; +% +% multigrid_speed_up_haswell(:,1) = round(multigrid_speed_up_haswell(:,1)); +% multigrid_speed_up_cray(:,1) = round(multigrid_speed_up_cray(:,1)); +% multigrid_speed_up_nvidia(:,1) = round(multigrid_speed_up_nvidia(:,1)); +% multigrid_speed_up_knc(:,1) = round(multigrid_speed_up_knc(:,1)); +% +% %% +% multigrid_time = zeros(11,6); +% multigrid_time (:,1:2) = ... +% [1.004601335761512, 0.431561091324417; +% 2.0022310518627857, 0.4648076936073582; +% 3.9907541866293017, 0.5024579804956508; +% 8.067136920042914, 0.6656173335946528; +% 15.871378265692428, 0.6812451424979895; +% 31.611875431385002, 0.6528401603060142; +% 65.54680834192969, 0.8049984118080382; +% 128.93640540214113, 0.8052133245926456; +% 263.7529429587845, 0.8847067251481749; +% 512.2327024531801, 0.8827157406719066; +% 1034.5108168706413, 0.96000324396656]; +% +% multigrid_time (:,[1,3]) = ... +% [0.9898630039192093, 0.24219859833611546; +% 1.972163655048691, 0.24241756607892295; +% 3.781986290199016, 0.2514317381578326; +% 7.736449695170425, 0.3309251387133618; +% 15.41451655389125, 0.33554779106152055; +% 31.501006611194768, 0.3225638149046748; +% 62.81135245994453, 0.39764542093845257; +% 123.54105127778845, 0.38685112220968176; +% 252.4499560516854, 0.36726161914480926; +% 496.95223315463164, 0.4357336433123602; +% 1015.8300692705786, 0.4469699324849459]; +% +% multigrid_time (:,[1,4]) = ... +% [0.9896311818224733, 0.22018017530935952; +% 1.9968919285183184, 0.21379767110234038; +% 3.978621194896021, 0.21621848114782338; +% 8.034514473381059, 0.28469861523177475; +% 15.804975192978107, 0.28711537031905743; +% 31.891504605957156, 0.2807328661120385; +% 64.38430149678541, 0.3227908925638825; +% 128.2797245536246, 0.3252117026093655; +% 262.1025006692223, 0.294612988031115; +% 509.3374728580412, 0.34986990342441215; +% 1041.3420944190705, 0.37872093101840276]; +% +% multigrid_time (:,[1,5]) = ... +% [0.9895152911343404, 0.20917096379598155; +% 2.0481938350469275, 0.1983928849000116; +% 4.028979554277443, 0.198607797684619; +% 8.135828113905916, 0.2626842471632187; +% 16.004272808348748, 0.2651010022505018; +% 32.29213742842352, 0.25431481343813145; +% 66.03065729822492, 0.29637689484817553; +% 128.22565290964383, 0.28557854116120485; +% 258.69919460762884, 0.265984983138132; +% 522.4595100453286, 0.3410706441301099; +% 1041.1469872085095, 0.36110619259699783]; +% +% multigrid_time (:,[1,6]) = ... +% [1.0020632930844884, 0.19376212263545245; +% 2.0218829033820773, 0.18297593382308208; +% 3.9772236101291005, 0.18319084660768947; +% 8.030751609469974, 0.24066176917826287; +% 16.000899443790264, 0.24528442152642138; +% 32.287599599458105, 0.24110375962207797; +% 65.18090612879159, 0.2787581014685707; +% 128.2466780623628, 0.30099143727993405; +% 258.77797808513225, 0.2946089330729149; +% 515.7238781063681, 0.3212500084478296; +% 1040.6837540786007, 0.31927118884616146]; +% +% multigrid_time(:,1) = [1;2;4;8;16;32;64;128;256;512;1024]; +% +% %% +% multigrid_speed_up = zeros(11,5); +% multigrid_speed_up (:,1:2) = ... +% [0.9748386077230256, 1.8175824175824178; +% 1.939765632694965, 1.9593406593406595; +% 3.8598088750025874, 2.0186813186813186; +% 7.778860438260265, 2.0351648351648355; +% 15.282657491732875, 2.0615384615384618; +% 30.79988248222343, 2.0483516483516486; +% 62.86846815377844, 2.064835164835165; +% 123.51388400008273, 2.130769230769231; +% 248.92353402432835, 2.463736263736264; +% 495.3161606896037, 2.0615384615384618; +% 998.2347343083767, 2.173626373626374]; +% +% multigrid_speed_up (:,[1,3]) = ... +% [0.9873391553681163, 1.9791208791208796; +% 2.0153486066729274, 2.1472527472527476; +% 3.959433740543081, 2.2989010989010987; +% 7.979639272217277, 2.3450549450549456; +% 15.677115545750981, 2.384615384615385; +% 31.5948529717797, 2.338461538461539; +% 64.49115541353366, 2.5; +% 128.32660287856152, 2.5032967032967033; +% 258.6228403103788, 2.9714285714285715; +% 501.6676974640312, 2.565934065934066; +% 1023.9999999999993, 2.5758241758241756]; +% +% multigrid_speed_up (:,[1,4]) = ... +% [0.9873391553681163, 2.0813186813186815; +% 2.0153486066729274, 2.308791208791209; +% 4.010206339955046, 2.5; +% 7.979639272217277, 2.5626373626373624; +% 15.878146288957785, 2.6021978021978027; +% 31.5948529717797, 2.6054945054945056; +% 65.31813821309349, 2.753846153846154; +% 126.70187969737844, 2.757142857142857; +% 255.34845671095258, 3.301098901098901; +% 514.6161564485006, 2.5593406593406596; +% 1011.0352950969501, 2.6483516483516487]; +% +% multigrid_speed_up (:,[1,5]) = ... +% [1, 2.104395604395605; +% 1.9898325910847585, 2.374725274725275; +% 3.909303965123828, 2.565934065934066; +% 7.979639272217277, 2.651648351648352; +% 15.677115545750981, 2.6714285714285717; +% 32.4103423084332, 2.5791208791208793; +% 64.49115541353366, 2.803296703296703; +% 126.70187969737844, 2.6483516483516487; +% 255.34845671095258, 2.987912087912088; +% 501.6676974640312, 2.684615384615385; +% 1037.130953869863, 2.9450549450549453]; +% +% multigrid_speed_up(:,1) = [1;2;4;8;16;32;64;128;256;512;1024]; +%% +clear all +close all +clc +load('eric_paper.mat') +load('timers.mat') +s = linspace(1,32,100); + +figure(1); +hold on +plot(throughput_haswell(:,1),throughput_haswell(:,2),'-o','linewidth',2) +plot(throughput_cray(:,1),throughput_cray(:,2),'-o','linewidth',2) +plot(throughput_nvidia(:,1),throughput_nvidia(:,2),'-o','linewidth',2) +plot(throughput_knc(:,1),throughput_knc(:,2),'-o','linewidth',2) +xlim([1,32]) +title('throughput') +grid on +hold off + +figure(2); +hold on +plot(matrix_speed_up_haswell(:,1),matrix_speed_up_haswell(:,2),'-o','linewidth',2) +plot(matrix_speed_up_cray(:,1),matrix_speed_up_cray(:,2),'-o','linewidth',2) +plot(matrix_speed_up_nvidia(:,1),matrix_speed_up_nvidia(:,2),'-o','linewidth',2) +plot(matrix_speed_up_knc(:,1),matrix_speed_up_knc(:,2),'-o','linewidth',2) +%plot(E,E.*timers(6,1)./timers(6,:),'-o','linewidth',2); +xlim([1,32]) +title('matrix x vector speed up') +grid on +hold off + +figure(3); +hold on +plot(mrhs_assembly_time_haswell(:,1),mrhs_assembly_time_haswell(:,2),'-o','linewidth',2) +plot(mrhs_assembly_time_cray(:,1),mrhs_assembly_time_cray(:,2),'-o','linewidth',2) +plot(mrhs_assembly_time_nvidia(:,1),mrhs_assembly_time_nvidia(:,2),'-o','linewidth',2) +plot(mrhs_assembly_time_knc(:,1),mrhs_assembly_time_knc(:,2),'-o','linewidth',2) +xlim([1,32]) +title('matrix and rhs assembly time') +grid on +hold off + +figure(4); +hold on +plot(mrhs_assembly_speed_up_haswell(:,1),mrhs_assembly_speed_up_haswell(:,2),'-o','linewidth',2) +plot(mrhs_assembly_speed_up_cray(:,1),mrhs_assembly_speed_up_cray(:,2),'-o','linewidth',2) +plot(mrhs_assembly_speed_up_nvidia(:,1),mrhs_assembly_speed_up_nvidia(:,2),'-o','linewidth',2) +plot(mrhs_assembly_speed_up_knc(:,1),mrhs_assembly_speed_up_knc(:,2),'-o','linewidth',2) +plot(mrhs_assembly_speed_up_theoretical(:,1),mrhs_assembly_speed_up_theoretical(:,2),'ko','linewidth',2) +plot(s,(8368+4992).*s./(8368+4992.*s),'k','linewidth',2) +title('matrix and rhs speed up') +xlim([1,32]) +grid on +hold off + +figure(5); +hold on +plot(halo_time(:,1),halo_time(:,2),'-o','linewidth',2) +plot(halo_time(:,1),halo_time(:,3),'-o','linewidth',2) +plot(halo_time(:,1),halo_time(:,4),'-o','linewidth',2) +plot(halo_time(:,1),halo_time(:,5),'-o','linewidth',2) +plot(halo_time(:,1),halo_time(:,6),'-o','linewidth',2) +title('halo time') +xlim([1,32]) +grid on +hold off + +figure(6); +hold on +plot(halo_speed_up(:,1),halo_speed_up(:,2),'-o','linewidth',2) +plot(halo_speed_up(:,1),halo_speed_up(:,3),'-o','linewidth',2) +plot(halo_speed_up(:,1),halo_speed_up(:,4),'-o','linewidth',2) +plot(halo_speed_up(:,1),halo_speed_up(:,5),'-o','linewidth',2) +plot(halo_speed_up(:,1),halo_speed_up(:,6),'-o','linewidth',2) +title('halo speed up') +xlim([1,32]) +grid on +hold off + +figure(7); +hold on +plot(multigrid_time_haswell(:,1),multigrid_time_haswell(:,2),'-o','linewidth',2) +plot(multigrid_time_cray(:,1),multigrid_time_cray(:,2),'-o','linewidth',2) +plot(multigrid_time_nvidia(:,1),multigrid_time_nvidia(:,2),'-o','linewidth',2) +plot(multigrid_time_knc(:,1),multigrid_time_knc(:,2),'-o','linewidth',2) +title('multigrid time') +xlim([1,32]) +grid on +hold off + +figure(8); +hold on +plot(multigrid_speed_up_haswell(:,1),multigrid_speed_up_haswell(:,2),'-o','linewidth',2) +plot(multigrid_speed_up_cray(:,1),multigrid_speed_up_cray(:,2),'-o','linewidth',2) +plot(multigrid_speed_up_nvidia(:,1),multigrid_speed_up_nvidia(:,2),'-o','linewidth',2) +plot(multigrid_speed_up_knc(:,1),multigrid_speed_up_knc(:,2),'-o','linewidth',2) +xlim([1,32]) +title('multigrid speed up') +grid on +hold off + +figure(9); +semilogx(multigrid_time(:,1),multigrid_time(:,2),'k-o','linewidth',2) +hold on +plot(multigrid_time(:,1),multigrid_time(:,3),'-o','linewidth',2) +plot(multigrid_time(:,1),multigrid_time(:,4),'-o','linewidth',2) +plot(multigrid_time(:,1),multigrid_time(:,5),'-o','linewidth',2) +plot(multigrid_time(:,1),multigrid_time(:,6),'-o','linewidth',2) +xlim([1,1024]) +title('multigrid time') +grid on +hold off + +figure(10); +semilogx(multigrid_speed_up(:,1),multigrid_speed_up(:,2),'-o','linewidth',2) +hold on +plot(multigrid_speed_up(:,1),multigrid_speed_up(:,3),'-o','linewidth',2) +plot(multigrid_speed_up(:,1),multigrid_speed_up(:,4),'-o','linewidth',2) +plot(multigrid_speed_up(:,1),multigrid_speed_up(:,5),'-o','linewidth',2) +xlim([1,1024]) +title('multigrid speed up') +grid on +hold off + +%% +s = linspace(1,64,100); +%close all +p = polyfit(halo_time(1:3,1),halo_time(1:3,2),1); + +figure(11); +subplot(1,2,1) +hold on +plot(halo_time(:,1),halo_time(:,2),'-o','linewidth',2) +plot(s,polyval(p,s),'k','linewidth',2) +title('halo time') +%xlim([1,32]) +grid on +hold off +subplot(1,2,2) +hold on +%plot(halo_speed_up(:,1),halo_speed_up(:,2),'-o','linewidth',2) +plot(halo_time(:,1),(halo_time(:,1).*halo_time(1,2))./halo_time(:,2),'-o','linewidth',2) +plot(s,polyval(p,1).*s./polyval(p,s),'k','linewidth',2) +plot([min(s),max(s)],[(sum(p))/p(1),(sum(p))/p(1)],'k--','linewidth',2) +title('halo speed up') +%xlim([1,32]) +grid on +hold off + + diff --git a/katoptron/matlab/ensemble/eric_paper.mat b/katoptron/matlab/ensemble/eric_paper.mat new file mode 100644 index 0000000000000000000000000000000000000000..1fe2848fa6caa4f96ed19ac814a9e998508d919f Binary files /dev/null and b/katoptron/matlab/ensemble/eric_paper.mat differ diff --git a/katoptron/matlab/ensemble/timers.mat b/katoptron/matlab/ensemble/timers.mat new file mode 100644 index 0000000000000000000000000000000000000000..f2bd7eb04e3c5b3b36b8dc7af2a04128daf99749 Binary files /dev/null and b/katoptron/matlab/ensemble/timers.mat differ diff --git a/katoptron/matlab/gmsh/distancePointPlane.m b/katoptron/matlab/gmsh/distancePointPlane.m new file mode 100644 index 0000000000000000000000000000000000000000..356697c159c31835b9f050267a67d78206596b8b --- /dev/null +++ b/katoptron/matlab/gmsh/distancePointPlane.m @@ -0,0 +1,13 @@ +function d = distancePointPlane(point, plane) +%DISTANCEPOINTPLANE Signed distance betwen 3D point and plane +% +% D = distancePointPlane(POINT, PLANE) +% Returns the euclidean distance between point POINT and the plane PLANE, +% given by: +% POINT : [x0 y0 z0] +% PLANE : [a b c d] +% D : scalar + + +d = (plane(1)*point(1)+plane(2)*point(2)+plane(3)*point(3)+plane(4))... + /sqrt(plane(1)^2+plane(2)^2+plane(3)^2); \ No newline at end of file diff --git a/katoptron/matlab/gmsh/readMshFile.m b/katoptron/matlab/gmsh/readMshFile.m new file mode 100644 index 0000000000000000000000000000000000000000..bf89cf7e0a5d93074784f72d9c64d59667a746b1 --- /dev/null +++ b/katoptron/matlab/gmsh/readMshFile.m @@ -0,0 +1,68 @@ +function [Nodes,Elements] = readMshFile(filename) + + fileID = fopen(filename,'r'); + + tline = fgetl(fileID); + + stop = false; + while 1 + if strcmp(tline,'$Nodes') + disp('Start reading nodes'); + while 1 + tline = fgetl(fileID); + if strcmp(tline,'$EndNodes') + break + end + tmp = strread(tline); + if length(tmp) == 1 + Nodes = zeros(tmp,3); + else + Nodes(tmp(1),:) = tmp(2:4); + end + end + disp('Stop reading nodes'); + elseif strcmp(tline,'$Elements') + disp('Start reading elements'); + while 1 + tline = fgetl(fileID); + if strcmp(tline,'$EndElements') + stop = true; + break + end + tmp = strread(tline); + if length(tmp) == 1 + Elements = zeros(tmp,9); + else + Elements(tmp(1),1) = tmp(2); + + switch Elements(tmp(1),1) + case 1 + %segment + Elements(tmp(1),(end-1):end)= tmp((end-1):end); + case 2 + %triangle + Elements(tmp(1),(end-2):end)= tmp((end-2):end); + case 3 + %quadrangle + Elements(tmp(1),(end-3):end)= tmp((end-3):end); + case 4 + %tetrahedron + Elements(tmp(1),(end-3):end)= tmp((end-3):end); + case 5 + %hexahedron + Elements(tmp(1),(end-7):end)= tmp((end-7):end); + end + + end + end + disp('Stop reading elements'); + end + if stop + break + end + tline = fgetl(fileID); + end + + fclose(fileID); + +end diff --git a/katoptron/matlab/gmsh/showMsh.m b/katoptron/matlab/gmsh/showMsh.m new file mode 100644 index 0000000000000000000000000000000000000000..8c886c414b02642eb79f469e3a14a26a67fe25cd --- /dev/null +++ b/katoptron/matlab/gmsh/showMsh.m @@ -0,0 +1,129 @@ +function [fig] = showMsh(filename, plane, point, vec1, vec2, tol) + + [Nodes,Elements] = readMshFile(filename); + + fig = figure; + + hold on + for i=1:size(Nodes,1) + if distancePointPlane(Nodes(i,:), plane) < tol + x = (Nodes(i,:)-point)*vec1'; + y = (Nodes(i,:)-point)*vec2'; + plot(x,y,'k.','MarkerSize',10); + end + end + + for i=1:size(Elements,1) + switch Elements(i,1) + case 1 + %segment + if distancePointPlane(Nodes(Elements(i,end-1),:), plane) < tol && ... + distancePointPlane(Nodes(Elements(i,end),:), plane) < tol + + x1 = (Nodes(Elements(i,end-1),:)-point)*vec1'; + x2 = (Nodes(Elements(i,end),:)-point)*vec1'; + y1 = (Nodes(Elements(i,end-1),:)-point)*vec2'; + y2 = (Nodes(Elements(i,end),:)-point)*vec2'; + plot([x1,x2],[y1,y2],'k'); + + end + + case 2 + %triangle + for j=1:3 + index1 = size(Elements,2)-j; + if j==3 + index1 = size(Elements,2); + end + index2 = size(Elements,2)-j+1; + if distancePointPlane(Nodes(Elements(i,index1),:), plane) < tol && ... + distancePointPlane(Nodes(Elements(i,index2),:), plane) < tol + + x1 = (Nodes(Elements(i,index1),:)-point)*vec1'; + x2 = (Nodes(Elements(i,index2),:)-point)*vec1'; + y1 = (Nodes(Elements(i,index1),:)-point)*vec2'; + y2 = (Nodes(Elements(i,index2),:)-point)*vec2'; + plot([x1,x2],[y1,y2],'k'); + + end + end + case 3 + %quadrangle + for j=1:4 + index1 = size(Elements,2)-j; + if j==4 + index1 = size(Elements,2); + end + index2 = size(Elements,2)-j+1; + if distancePointPlane(Nodes(Elements(i,index1),:), plane) < tol && ... + distancePointPlane(Nodes(Elements(i,index2),:), plane) < tol + + x1 = (Nodes(Elements(i,index1),:)-point)*vec1'; + x2 = (Nodes(Elements(i,index2),:)-point)*vec1'; + y1 = (Nodes(Elements(i,index1),:)-point)*vec2'; + y2 = (Nodes(Elements(i,index2),:)-point)*vec2'; + plot([x1,x2],[y1,y2],'k'); + + end + end + case 5 + %hexahedron + for j=1:4 + index1 = size(Elements,2)-j; + if j==4 + index1 = size(Elements,2); + end + index2 = size(Elements,2)-j+1; + if distancePointPlane(Nodes(Elements(i,index1),:), plane) < tol && ... + distancePointPlane(Nodes(Elements(i,index2),:), plane) < tol + + x1 = (Nodes(Elements(i,index1),:)-point)*vec1'; + x2 = (Nodes(Elements(i,index2),:)-point)*vec1'; + y1 = (Nodes(Elements(i,index1),:)-point)*vec2'; + y2 = (Nodes(Elements(i,index2),:)-point)*vec2'; + plot([x1,x2],[y1,y2],'k'); + + end + end + for j=1:4 + index1 = size(Elements,2)-j-4; + if j==4 + index1 = size(Elements,2)-4; + end + index2 = size(Elements,2)-j-3; + if distancePointPlane(Nodes(Elements(i,index1),:), plane) < tol && ... + distancePointPlane(Nodes(Elements(i,index2),:), plane) < tol + + x1 = (Nodes(Elements(i,index1),:)-point)*vec1'; + x2 = (Nodes(Elements(i,index2),:)-point)*vec1'; + y1 = (Nodes(Elements(i,index1),:)-point)*vec2'; + y2 = (Nodes(Elements(i,index2),:)-point)*vec2'; + plot([x1,x2],[y1,y2],'k'); + + end + end + for j=1:4 + index1 = size(Elements,2)-j-4; + if j==4 + index1 = size(Elements,2)-4; + end + index2 = size(Elements,2)-j; + if j==4 + index2 = size(Elements,2); + end + if distancePointPlane(Nodes(Elements(i,index1),:), plane) < tol && ... + distancePointPlane(Nodes(Elements(i,index2),:), plane) < tol + + x1 = (Nodes(Elements(i,index1),:)-point)*vec1'; + x2 = (Nodes(Elements(i,index2),:)-point)*vec1'; + y1 = (Nodes(Elements(i,index1),:)-point)*vec2'; + y2 = (Nodes(Elements(i,index2),:)-point)*vec2'; + plot([x1,x2],[y1,y2],'k'); + + end + end + end + + end + axis equal +end \ No newline at end of file diff --git a/katoptron/matlab/gmsh/test_readMshFile.m b/katoptron/matlab/gmsh/test_readMshFile.m new file mode 100644 index 0000000000000000000000000000000000000000..d6b200498a68760a74259aba7a0bac929a21726d --- /dev/null +++ b/katoptron/matlab/gmsh/test_readMshFile.m @@ -0,0 +1,80 @@ +clear all +close all +clc + +filename = '../tests/aa.msh'; +[Nodes,Elements] = readMshFile(filename); + + +figure +hold on +for i=1:size(Nodes,1) + + +end + +for i=1:size(Elements,1) + switch Elements(i,1) + case 1 + %segment + plot3([Nodes(Elements(i,end-1),1),Nodes(Elements(i,end),1)],... + [Nodes(Elements(i,end-1),2),Nodes(Elements(i,end),2)],... + [Nodes(Elements(i,end-1),3),Nodes(Elements(i,end),3)],'k'); + case 2 + %triangle + for j=1:3 + plot3([Nodes(Elements(i,end-j),1),Nodes(Elements(i,end-j+1),1)],... + [Nodes(Elements(i,end-j),2),Nodes(Elements(i,end-j+1),2)],... + [Nodes(Elements(i,end-j),3),Nodes(Elements(i,end-j+1),3)],'k'); + end + case 3 + %quadrangle + for j=1:4 + index1 = size(Elements,2)-j; + if j==4 + index1 = size(Elements,2); + end + index2 = size(Elements,2)-j+1; + plot3([Nodes(Elements(i,index1),1),Nodes(Elements(i,index2),1)],... + [Nodes(Elements(i,index1),2),Nodes(Elements(i,index2),2)],... + [Nodes(Elements(i,index1),3),Nodes(Elements(i,index2),3)],'k'); + end + case 5 + %hexahedron + for j=1:4 + index1 = size(Elements,2)-j; + if j==4 + index1 = size(Elements,2); + end + index2 = size(Elements,2)-j+1; + plot3([Nodes(Elements(i,index1),1),Nodes(Elements(i,index2),1)],... + [Nodes(Elements(i,index1),2),Nodes(Elements(i,index2),2)],... + [Nodes(Elements(i,index1),3),Nodes(Elements(i,index2),3)],'k'); + end + for j=1:4 + index1 = size(Elements,2)-j-4; + if j==4 + index1 = size(Elements,2)-4; + end + index2 = size(Elements,2)-j-3; + plot3([Nodes(Elements(i,index1),1),Nodes(Elements(i,index2),1)],... + [Nodes(Elements(i,index1),2),Nodes(Elements(i,index2),2)],... + [Nodes(Elements(i,index1),3),Nodes(Elements(i,index2),3)],'k'); + end + for j=1:4 + index1 = size(Elements,2)-j-4; + if j==4 + index1 = size(Elements,2)-4; + end + index2 = size(Elements,2)-j; + if j==4 + index2 = size(Elements,2); + end + plot3([Nodes(Elements(i,index1),1),Nodes(Elements(i,index2),1)],... + [Nodes(Elements(i,index1),2),Nodes(Elements(i,index2),2)],... + [Nodes(Elements(i,index1),3),Nodes(Elements(i,index2),3)],'k'); + end + end + +end +axis equal \ No newline at end of file diff --git a/katoptron/matlab/gmsh/test_showMsh.m b/katoptron/matlab/gmsh/test_showMsh.m new file mode 100644 index 0000000000000000000000000000000000000000..c549d99c0ad95fda470210404f31aaf43bb6fe9f --- /dev/null +++ b/katoptron/matlab/gmsh/test_showMsh.m @@ -0,0 +1,12 @@ +clear all +close all +clc + +filename = '../tests/aa.msh'; +tol = 0.00001; +plane = [0,1,0,0]; +point = [0,0,0]; +vec1 = [1,0,0]; +vec2 = [0,0,1]; + +[fig] = showMsh(filename, plane, point, vec1, vec2, tol); \ No newline at end of file diff --git a/katoptron/matlab/matrix graph/load_crs_matrix.m b/katoptron/matlab/matrix graph/load_crs_matrix.m new file mode 100644 index 0000000000000000000000000000000000000000..04cf7ba70548ac6670768aa6cfaa234954e7037a --- /dev/null +++ b/katoptron/matlab/matrix graph/load_crs_matrix.m @@ -0,0 +1,42 @@ +function [ A ] = load_crs_matrix( file_name, ensemble_size, sample ) + + +crsA = []; + +fid = fopen(file_name); + +tline = fgets(fid); +while length(tline) >=2 + words = strsplit(tline); + if ensemble_size > 1 && length(words) >= 4+ensemble_size + if length(crsA) == 0 + crsA = zeros(1,3); + crsA(1) = str2num(char(words(1)))+1; + crsA(2) = str2num(char(words(2)))+1; + crsA(3) = str2num(char(words(3+sample))); + else + + crsA = [crsA; str2num(char(words(1)))+1, str2num(char(words(2)))+1, str2num(char(words(3+sample)))]; + end + + elseif ensemble_size == 1 && length(words) >= 3 + if length(crsA) == 0 + crsA = zeros(1,3); + crsA(1) = str2num(char(words(1)))+1; + crsA(2) = str2num(char(words(2)))+1; + crsA(3) = str2num(char(words(3))); + else + + crsA = [crsA; str2num(char(words(1)))+1, str2num(char(words(2)))+1, str2num(char(words(3)))]; + end + + end + tline = fgets(fid); +end + +fclose(fid); + +A = crsA; + +end + diff --git a/katoptron/matlab/matrix graph/show_graph.m b/katoptron/matlab/matrix graph/show_graph.m new file mode 100644 index 0000000000000000000000000000000000000000..b85cc5ad473a09ecf7e3e04396f39b6703dae105 --- /dev/null +++ b/katoptron/matlab/matrix graph/show_graph.m @@ -0,0 +1,52 @@ +function show_graph(A,type) + + figure; + xmax = size(A,2); + ymax = size(A,1); + if type == 'C' + imagesc([0.5 xmax-0.5],[0.5 ymax-0.5],A); + else + imagesc([1.5 xmax+0.5],[1.5 ymax+0.5],A); + end + axis equal + grid on + box on + %colorbar + + + if type == 'C' + xlim([0,xmax]); + ylim([0,ymax]); + + tmp = []; + for i=1:xmax + tmp = [tmp, i-1]; + end + set(gca,'XTick',tmp) + tmp = []; + for i=1:ymax + tmp = [tmp, i-1]; + end + set(gca,'YTick',tmp) + else + xlim([1,xmax+1]); + ylim([1,ymax+1]); + + tmp = []; + for i=1:xmax + tmp = [tmp, i]; + end + set(gca,'XTick',tmp) + tmp = []; + for i=1:ymax + tmp = [tmp, i]; + end + set(gca,'YTick',tmp) + end + caxis([0,1]); + + set(gca,'fontsize',18) + + colormap(gray); + colormap(flipud(colormap)); +end \ No newline at end of file diff --git a/katoptron/matlab/matrix graph/show_trilinos_graph.m b/katoptron/matlab/matrix graph/show_trilinos_graph.m new file mode 100644 index 0000000000000000000000000000000000000000..6d5f5b6743edf77631fecc59e15fe2f0ff007204 --- /dev/null +++ b/katoptron/matlab/matrix graph/show_trilinos_graph.m @@ -0,0 +1,31 @@ +function [H] = show_trilinos_graph(file_name) + +trilinos_out = load(file_name); + +matrix = trilinos_out; +matrix(:,1) = matrix(:,1)+1; +matrix(:,2) = matrix(:,2)+1; + +matrix(1,:) + +zero_indices = []; + +tol = 10^(-16); + +for i=1:size(matrix,1) + if abs(matrix(i,3)) < tol + zero_indices = [zero_indices, i]; + elseif matrix(i,1) < 1 || matrix(i,2) < 1 + zero_indices = [zero_indices, i]; + disp(strcat('Attention, file: ',file_name,' line: ', int2str(i))); + end + +end + +matrix = matrix(setdiff(1:size(matrix,1),zero_indices),1:3); + +H = spconvert(matrix); +%spy(H); + +end + diff --git a/katoptron/matlab/matrix graph/testSchur.m b/katoptron/matlab/matrix graph/testSchur.m new file mode 100644 index 0000000000000000000000000000000000000000..24747c8647a439ef8cffc74697a15536c2469c01 --- /dev/null +++ b/katoptron/matlab/matrix graph/testSchur.m @@ -0,0 +1,70 @@ +clear all +close all +clc + +ensemble_size = 2; + + +A = load_crs_matrix( 'Schur test input/A 1.txt', ensemble_size,1 ); +B_T = load_crs_matrix( 'Schur test input/B_T1.txt', ensemble_size,1 ); + +B1 = load_crs_matrix( 'Schur test input/B1.txt', ensemble_size,1 ); +C1 = load_crs_matrix( 'Schur test input/C1.txt', ensemble_size,1 ); + +B2 = load_crs_matrix( 'Schur test input/B1.txt', ensemble_size,2 ); +C2 = load_crs_matrix( 'Schur test input/C1.txt', ensemble_size,2 ); + +%load('schur_test.mat') + +%format longEng + +format long + +crsA = spconvert(A); +crsB_T = spconvert(B_T); +crsB1 = spconvert(B1); +crsB2 = spconvert(B2); +crsC1 = spconvert(C1); +crsC2 = spconvert(C2); + +n = size(crsA,1); +n_2 = size(crsB_T,1); +m = size(crsB_T,2); + +fullA = full(crsA); +fullB_T = zeros(n,m); +tmpfullB_T = full(crsB_T); +fullB_T(1:n_2,:) = tmpfullB_T; + +fullC1 = zeros(m,m); +fullC2 = zeros(m,m); + +tmpfullC1 = full(crsC1); +tmpfullC2 = full(crsC2); + +fullC1(1:size(crsC1,1),1:size(crsC1,2)) = tmpfullC1; +fullC2(1:size(crsC2,1),1:size(crsC2,2)) = tmpfullC2; + + +fullB1 = zeros(m,n); +fullB2 = zeros(m,n); + +tmpfullB1 = full(crsB1); +tmpfullB2 = full(crsB2); + +fullB1(1:size(crsB1,1),1:size(crsB1,2)) = tmpfullB1; +fullB2(1:size(crsB2,1),1:size(crsB2,2)) = tmpfullB2; + +invDiagA = diag(1./diag(fullA)); + +Schur1 = fullC1 - fullB1*invDiagA*fullB_T; +Schur2 = fullC2 - fullB2*invDiagA*fullB_T; + +crsSchur1 = sparse(Schur1); +crsSchur2 = sparse(Schur2); + +diagEnsemble = [full(diag(crsSchur1)),full( diag(crsSchur2))] + + + + diff --git a/katoptron/matlab/matrix graph/test_show_graph.m b/katoptron/matlab/matrix graph/test_show_graph.m new file mode 100644 index 0000000000000000000000000000000000000000..36f54c4249a7f57def064be77fbcfbbde514e2d7 --- /dev/null +++ b/katoptron/matlab/matrix graph/test_show_graph.m @@ -0,0 +1,42 @@ +close all +clear all + +XWO0 = [1,1,0,0,0; + 1,1,1,0,0; + 0,1,1,0,0; + 0,0,0,0,0; + 0,0,0,0,0]; +XWO1 = [0,0,0,0,0; + 0,0,0,0,0; + 0,0,1,1,0; + 0,0,1,1,1; + 0,0,0,1,1]; + +X0 = [1,1,0,0,0; + 1,1,1,0,0; + 0,1,1,1,0; + 0,0,0,0,0; + 0,0,0,0,0]; + +X1 = [0,0,0,0,0; + 0,0,0,0,0; + 0,0,0,0,0; + 0,0,1,1,1; + 0,0,0,1,1]; + +XG = [1,1,0,0,0; + 1,1,1,0,0; + 0,1,1,1,0; + 0,0,1,1,1; + 0,0,0,1,1]; + +show_graph(XWO0,'C') +%matlab2tikz('XWO0.txt') +show_graph(XWO1,'C') +%matlab2tikz('XWO1.txt') +show_graph(XG,'C') +%matlab2tikz('XG.txt') +show_graph(X0,'C') +%matlab2tikz('X0.txt') +show_graph(X1,'C') +%matlab2tikz('X1.txt') \ No newline at end of file diff --git a/katoptron/preconditioners/AMG_BGS_gs_gs.xml b/katoptron/preconditioners/AMG_BGS_gs_gs.xml new file mode 100644 index 0000000000000000000000000000000000000000..65889a5d40a4c1eaa2069cb9cc195c696cf8b3fa --- /dev/null +++ b/katoptron/preconditioners/AMG_BGS_gs_gs.xml @@ -0,0 +1,232 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Elasticity 3 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 3 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) Heat equation--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 1 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 1 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- It needs information about the coarse map for block 1 (myCoarseMap1 in this + example). It builds a new coarse map starting with GIDs from myCoarseMap1.maxGID + 1. + The number of GIDs is determined using the aggregation information. Since we are + reusing the aggregation from the first sub block for this sub block we have to + provide that information (myAggFact1). In fact, the information should also available + through the group "mySecondGroup", but it does not hurt here. --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="BlockedCoarseMapFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from elasticity block! --> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + <Parameter name="Striding info" type="string" value="{ 1 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from elasticity block! --> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from elasticity block! --> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="1."/> + </ParameterList> + </ParameterList> + + <ParameterList name="mySmooFact2"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="1."/> + </ParameterList> + </ParameterList> + + + <!-- Use Block GS: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="BlockedGaussSeidelSmoother"/> + <Parameter name="Sweeps" type="int" value="3"/> + <Parameter name="Damping factor" type="double" value="1.0"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Smoother" type="string" value="mySmooFact2"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/BraessSarazin_cheby.xml b/katoptron/preconditioners/BraessSarazin_cheby.xml new file mode 100644 index 0000000000000000000000000000000000000000..1b9d268fbc305836f30ebdc1070d1cadeed76768 --- /dev/null +++ b/katoptron/preconditioners/BraessSarazin_cheby.xml @@ -0,0 +1,243 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 4 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 4 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="CHEBYSHEV"/> + <ParameterList name="ParameterList"> + <Parameter name="degree" type="int" value="2"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory --> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="CHEBYSHEV"/> + <ParameterList name="ParameterList"> + <Parameter name="degree" type="int" value="2"/> + </ParameterList> + </ParameterList> + + <!-- Use Braess-Sarazin: --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="BraessSarazinSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/BraessSarazin_direct.xml b/katoptron/preconditioners/BraessSarazin_direct.xml new file mode 100644 index 0000000000000000000000000000000000000000..e41282045bee590a997002a72119351f2edc926f --- /dev/null +++ b/katoptron/preconditioners/BraessSarazin_direct.xml @@ -0,0 +1,237 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 4 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 4 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="DirectSolver"/> + <Parameter name="type" type="string" value="KLU"/> + </ParameterList> + + <!-- Build Schur Complement factory --> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="DirectSolver"/> + <Parameter name="type" type="string" value="KLU"/> + </ParameterList> + + <!-- Use Braess-Sarazin: --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="BraessSarazinSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/BraessSarazin_gs.xml b/katoptron/preconditioners/BraessSarazin_gs.xml new file mode 100644 index 0000000000000000000000000000000000000000..348a4f7c485f1383489a3dc4834215d75eaac780 --- /dev/null +++ b/katoptron/preconditioners/BraessSarazin_gs.xml @@ -0,0 +1,249 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 4 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 4 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Symmetric Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory --> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Symmetric Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Use Braess-Sarazin: --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="BraessSarazinSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/BraessSarazin_jacobi.xml b/katoptron/preconditioners/BraessSarazin_jacobi.xml new file mode 100644 index 0000000000000000000000000000000000000000..ba583b551854f043a35a3d2bed69e296f1fdf673 --- /dev/null +++ b/katoptron/preconditioners/BraessSarazin_jacobi.xml @@ -0,0 +1,249 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 4 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 4 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Jacobi"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory --> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Jacobi"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Use Braess-Sarazin: --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="BraessSarazinSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/BraessSarazin_mtgs.xml b/katoptron/preconditioners/BraessSarazin_mtgs.xml new file mode 100644 index 0000000000000000000000000000000000000000..aa57ebe1ed5381f982b5651e910d01353bfb7e30 --- /dev/null +++ b/katoptron/preconditioners/BraessSarazin_mtgs.xml @@ -0,0 +1,251 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 4 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 4 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Symmetric Gauss-Seidel"/> + <Parameter name="relaxation: symmetric matrix structure" type="bool" value="True"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory --> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Symmetric Gauss-Seidel"/> + <Parameter name="relaxation: symmetric matrix structure" type="bool" value="True"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Use Braess-Sarazin: --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="BraessSarazinSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/IndefiniteBlockDiagonal_cheby.xml b/katoptron/preconditioners/IndefiniteBlockDiagonal_cheby.xml new file mode 100644 index 0000000000000000000000000000000000000000..9994cda693853fabf8b2f9b76db18460114e438c --- /dev/null +++ b/katoptron/preconditioners/IndefiniteBlockDiagonal_cheby.xml @@ -0,0 +1,250 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 4 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 4 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="CHEBYSHEV"/> + <ParameterList name="ParameterList"> + <Parameter name="degree" type="int" value="2"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory --> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="CHEBYSHEV"/> + <ParameterList name="ParameterList"> + <Parameter name="degree" type="int" value="2"/> + </ParameterList> + </ParameterList> + + <!-- Use indefinite block diagonal smoother: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="IndefiniteBlockDiagonalSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/IndefiniteBlockDiagonal_direct.xml b/katoptron/preconditioners/IndefiniteBlockDiagonal_direct.xml new file mode 100644 index 0000000000000000000000000000000000000000..0eb1c647a1d9cb206c2aa3f938d27b1d45f49fae --- /dev/null +++ b/katoptron/preconditioners/IndefiniteBlockDiagonal_direct.xml @@ -0,0 +1,244 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 4 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 4 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="DirectSolver"/> + <Parameter name="type" type="string" value="KLU"/> + </ParameterList> + + <!-- Build Schur Complement factory --> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="DirectSolver"/> + <Parameter name="type" type="string" value="KLU"/> + </ParameterList> + + <!-- Use indefinite block diagonal smoother: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="IndefiniteBlockDiagonalSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/IndefiniteBlockDiagonal_gs.xml b/katoptron/preconditioners/IndefiniteBlockDiagonal_gs.xml new file mode 100644 index 0000000000000000000000000000000000000000..4860200f22b092fe8e637710190fbb5bef7c6dfa --- /dev/null +++ b/katoptron/preconditioners/IndefiniteBlockDiagonal_gs.xml @@ -0,0 +1,256 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 4 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 4 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Symmetric Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory --> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Symmetric Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Use indefinite block diagonal smoother: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="IndefiniteBlockDiagonalSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/IndefiniteBlockDiagonal_jacobi.xml b/katoptron/preconditioners/IndefiniteBlockDiagonal_jacobi.xml new file mode 100644 index 0000000000000000000000000000000000000000..b13e54b2025bcd1669ae3e728f372910873b869b --- /dev/null +++ b/katoptron/preconditioners/IndefiniteBlockDiagonal_jacobi.xml @@ -0,0 +1,256 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 4 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 4 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Jacobi"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory --> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Jacobi"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Use indefinite block diagonal smoother: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="IndefiniteBlockDiagonalSmoother"/> + <Parameter name="Sweeps" type="int" value="3"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/IndefiniteBlockDiagonal_mtgs.xml b/katoptron/preconditioners/IndefiniteBlockDiagonal_mtgs.xml new file mode 100644 index 0000000000000000000000000000000000000000..c6a9d26ed82d6671552d56be88230652b524413c --- /dev/null +++ b/katoptron/preconditioners/IndefiniteBlockDiagonal_mtgs.xml @@ -0,0 +1,258 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 4 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 4 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Symmetric Gauss-Seidel"/> + <Parameter name="relaxation: symmetric matrix structure" type="bool" value="True"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory --> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Symmetric Gauss-Seidel"/> + <Parameter name="relaxation: symmetric matrix structure" type="bool" value="True"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Use indefinite block diagonal smoother: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="IndefiniteBlockDiagonalSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/SIMPLEC_cheby.xml b/katoptron/preconditioners/SIMPLEC_cheby.xml new file mode 100644 index 0000000000000000000000000000000000000000..6a860ca049023cfce4fd425d0445514056b66f3a --- /dev/null +++ b/katoptron/preconditioners/SIMPLEC_cheby.xml @@ -0,0 +1,251 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="CHEBYSHEV"/> + <ParameterList name="ParameterList"> + <Parameter name="degree" type="int" value="2"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory (for being used in SIMPLE type block smoother)--> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <!--<Parameter name="lumping" type="bool" value="true"/>--> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="CHEBYSHEV"/> + <ParameterList name="ParameterList"> + <Parameter name="degree" type="int" value="2"/> + </ParameterList> + </ParameterList> + + <!-- Use SIMPLEC: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="SimpleSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <Parameter name="UseSIMPLEC" type="bool" value="true"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/SIMPLEC_direct.xml b/katoptron/preconditioners/SIMPLEC_direct.xml new file mode 100644 index 0000000000000000000000000000000000000000..181f71e6ff72b5de3ffba6f147cf9fbc93a5bd46 --- /dev/null +++ b/katoptron/preconditioners/SIMPLEC_direct.xml @@ -0,0 +1,245 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="DirectSolver"/> + <Parameter name="type" type="string" value="KLU"/> + </ParameterList> + + <!-- Build Schur Complement factory (for being used in SIMPLE type block smoother)--> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <!--<Parameter name="lumping" type="bool" value="true"/>--> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="DirectSolver"/> + <Parameter name="type" type="string" value="KLU"/> + </ParameterList> + + <!-- Use SIMPLEC: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="SimpleSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <Parameter name="UseSIMPLEC" type="bool" value="true"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/SIMPLEC_gs.xml b/katoptron/preconditioners/SIMPLEC_gs.xml new file mode 100644 index 0000000000000000000000000000000000000000..aa8574d4028a98a7e90fe210fef158c8f40ed043 --- /dev/null +++ b/katoptron/preconditioners/SIMPLEC_gs.xml @@ -0,0 +1,257 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 4 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 4 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Symmetric Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory (for being used in SIMPLE type block smoother)--> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <!--<Parameter name="lumping" type="bool" value="true"/>--> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Symmetric Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Use SIMPLEC: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="SimpleSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <Parameter name="UseSIMPLEC" type="bool" value="true"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/SIMPLEC_jacobi.xml b/katoptron/preconditioners/SIMPLEC_jacobi.xml new file mode 100644 index 0000000000000000000000000000000000000000..0748d6782fb3624b5c25dbde8142acf5e6045de7 --- /dev/null +++ b/katoptron/preconditioners/SIMPLEC_jacobi.xml @@ -0,0 +1,257 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Jacobi"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory (for being used in SIMPLE type block smoother)--> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <!--<Parameter name="lumping" type="bool" value="true"/>--> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Jacobi"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Use SIMPLEC: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="SimpleSmoother"/> + <Parameter name="Sweeps" type="int" value="3"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <Parameter name="UseSIMPLEC" type="bool" value="true"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/SIMPLEC_mtgs.xml b/katoptron/preconditioners/SIMPLEC_mtgs.xml new file mode 100644 index 0000000000000000000000000000000000000000..750a4c79f05c5281feb26a10ca22c0efd72da84e --- /dev/null +++ b/katoptron/preconditioners/SIMPLEC_mtgs.xml @@ -0,0 +1,259 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 4 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 4 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Symmetric Gauss-Seidel"/> + <Parameter name="relaxation: symmetric matrix structure" type="bool" value="True"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory (for being used in SIMPLE type block smoother)--> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <!--<Parameter name="lumping" type="bool" value="true"/>--> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Symmetric Gauss-Seidel"/> + <Parameter name="relaxation: symmetric matrix structure" type="bool" value="True"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Use SIMPLEC: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="SimpleSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <Parameter name="UseSIMPLEC" type="bool" value="true"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/SIMPLE_cheby.xml b/katoptron/preconditioners/SIMPLE_cheby.xml new file mode 100644 index 0000000000000000000000000000000000000000..27fc352bd32f4a21a2b3b7d4bcecf387e00b9a14 --- /dev/null +++ b/katoptron/preconditioners/SIMPLE_cheby.xml @@ -0,0 +1,251 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 4 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 4 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="CHEBYSHEV"/> + <ParameterList name="ParameterList"> + <Parameter name="degree" type="int" value="2"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory (for being used in SIMPLE type block smoother)--> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="CHEBYSHEV"/> + <ParameterList name="ParameterList"> + <Parameter name="degree" type="int" value="2"/> + </ParameterList> + </ParameterList> + + <!-- Use SIMPLE: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="SimpleSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <Parameter name="UseSIMPLEC" type="bool" value="false"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/SIMPLE_direct.xml b/katoptron/preconditioners/SIMPLE_direct.xml new file mode 100644 index 0000000000000000000000000000000000000000..bbb4f080a0a7eac5beafa609ca025404e55b1588 --- /dev/null +++ b/katoptron/preconditioners/SIMPLE_direct.xml @@ -0,0 +1,245 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="DirectSolver"/> + <Parameter name="type" type="string" value="KLU"/> + </ParameterList> + + <!-- Build Schur Complement factory (for being used in SIMPLE type block smoother)--> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="DirectSolver"/> + <Parameter name="type" type="string" value="KLU"/> + </ParameterList> + + <!-- Use SIMPLE: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="SimpleSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="1."/> + <Parameter name="UseSIMPLEC" type="bool" value="false"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/SIMPLE_direct_2_lvls.xml b/katoptron/preconditioners/SIMPLE_direct_2_lvls.xml new file mode 100644 index 0000000000000000000000000000000000000000..c1caa86a879d182d0f6ee2ae1d87e7310869f3c5 --- /dev/null +++ b/katoptron/preconditioners/SIMPLE_direct_2_lvls.xml @@ -0,0 +1,245 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 4 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 4 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="DirectSolver"/> + <Parameter name="type" type="string" value="KLU"/> + </ParameterList> + + <!-- Build Schur Complement factory (for being used in SIMPLE type block smoother)--> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="DirectSolver"/> + <Parameter name="type" type="string" value="KLU"/> + </ParameterList> + + <!-- Use SIMPLE: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="SimpleSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="1."/> + <Parameter name="UseSIMPLEC" type="bool" value="false"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="2"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/SIMPLE_gs.xml b/katoptron/preconditioners/SIMPLE_gs.xml new file mode 100644 index 0000000000000000000000000000000000000000..a2ec20ff8279f2310e03c65a75928c87760ec730 --- /dev/null +++ b/katoptron/preconditioners/SIMPLE_gs.xml @@ -0,0 +1,257 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="1."/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory (for being used in SIMPLE type block smoother)--> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="1."/> + </ParameterList> + </ParameterList> + + <!-- Use SIMPLE: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="SimpleSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="1."/> + <Parameter name="UseSIMPLEC" type="bool" value="false"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/SIMPLE_gs.xml.in b/katoptron/preconditioners/SIMPLE_gs.xml.in new file mode 100644 index 0000000000000000000000000000000000000000..8bed4cda291862fbaab49eb359fafc41bb25e683 --- /dev/null +++ b/katoptron/preconditioners/SIMPLE_gs.xml.in @@ -0,0 +1,257 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ $BLOCK_00_STRIDING_INFO }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ $BLOCK_00_STRIDING_INFO }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ $BLOCK_00_STRIDING_INFO }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ $BLOCK_11_STRIDING_INFO }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ $BLOCK_11_STRIDING_INFO }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ $BLOCK_11_STRIDING_INFO }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="$BLOCK_11_STRIDING_INFO"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="$BLOCK_00_GS_sweeps"/> + <Parameter name="relaxation: damping factor" type="double" value="$BLOCK_00_GS_damping"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory (for being used in SIMPLE type block smoother)--> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="$SCHUR_omega"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="$BLOCK_11_GS_sweeps"/> + <Parameter name="relaxation: damping factor" type="double" value="$BLOCK_11_GS_damping"/> + </ParameterList> + </ParameterList> + + <!-- Use SIMPLE: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="SimpleSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="$SimpleSmoother_damping"/> + <Parameter name="UseSIMPLEC" type="bool" value="false"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/SIMPLE_gs_2_lvls.xml b/katoptron/preconditioners/SIMPLE_gs_2_lvls.xml new file mode 100644 index 0000000000000000000000000000000000000000..be2fa416ae8115aa1d7402b68fdd7f9df0b12307 --- /dev/null +++ b/katoptron/preconditioners/SIMPLE_gs_2_lvls.xml @@ -0,0 +1,257 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="1."/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory (for being used in SIMPLE type block smoother)--> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="1."/> + </ParameterList> + </ParameterList> + + <!-- Use SIMPLE: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="SimpleSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="1."/> + <Parameter name="UseSIMPLEC" type="bool" value="false"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="2"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockDirectSolver"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/SIMPLE_gs_3_sweeps.xml b/katoptron/preconditioners/SIMPLE_gs_3_sweeps.xml new file mode 100644 index 0000000000000000000000000000000000000000..5cc5766797b2f458ad92fb8d15af575dcc20e68c --- /dev/null +++ b/katoptron/preconditioners/SIMPLE_gs_3_sweeps.xml @@ -0,0 +1,257 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 4 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 4 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="1."/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory (for being used in SIMPLE type block smoother)--> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="1."/> + </ParameterList> + </ParameterList> + + <!-- Use SIMPLE: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="SimpleSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="1."/> + <Parameter name="UseSIMPLEC" type="bool" value="false"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/SIMPLE_gs_direct.xml.in b/katoptron/preconditioners/SIMPLE_gs_direct.xml.in new file mode 100644 index 0000000000000000000000000000000000000000..60705f07a27d9b9e0507cbd0262e304522554950 --- /dev/null +++ b/katoptron/preconditioners/SIMPLE_gs_direct.xml.in @@ -0,0 +1,250 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ $BLOCK_00_STRIDING_INFO }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ $BLOCK_00_STRIDING_INFO }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ $BLOCK_00_STRIDING_INFO }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ $BLOCK_11_STRIDING_INFO }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ $BLOCK_11_STRIDING_INFO }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ $BLOCK_11_STRIDING_INFO }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="$BLOCK_11_STRIDING_INFO"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="$BLOCK_00_GS_sweeps"/> + <Parameter name="relaxation: damping factor" type="$BLOCK_00_GS_damping"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory (for being used in SIMPLE type block smoother)--> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="$SCHUR_omega"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="DirectSolver"/> + <Parameter name="type" type="string" value="KLU"/> + </ParameterList> + + <!-- Use SIMPLE: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="SimpleSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="$SimpleSmoother_damping"/> + <Parameter name="UseSIMPLEC" type="bool" value="false"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/SIMPLE_gs_direct_lvl.xml.in b/katoptron/preconditioners/SIMPLE_gs_direct_lvl.xml.in new file mode 100644 index 0000000000000000000000000000000000000000..802719777c4c9445b12eb70b4dfb8181bcf65659 --- /dev/null +++ b/katoptron/preconditioners/SIMPLE_gs_direct_lvl.xml.in @@ -0,0 +1,276 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ $BLOCK_00_STRIDING_INFO }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ $BLOCK_00_STRIDING_INFO }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ $BLOCK_00_STRIDING_INFO }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myCoalesceDropFact"> + <Parameter name="factory" type="string" value="CoalesceDropFactory"/> + <Parameter name="lightweight wrap" type="bool" value="true"/> + <!-- for aggregation dropping --> + <!--<Parameter name="aggregation: drop tol" type="double" value="1e-10"/>--> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <!--<Parameter name="aggregation: min agg size" type="int" value="7"/>--> + <!--<Parameter name="aggregation: max agg size" type="int" value="10"/>--> + <!--<Parameter name="aggregation: max selected neighbors" type="int" value="1"/>--> + <!--<Parameter name="Graph" type="string" value="myCoalesceDropFact"/> + <Parameter name="DofsPerNode" type="string" value="myCoalesceDropFact"/>--> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + <Parameter name="multigrid algorithm" type="string" value="unsmoothed"/> + <Parameter name="tentative: calculate qr" type="bool" value="false"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ $BLOCK_11_STRIDING_INFO }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ $BLOCK_11_STRIDING_INFO }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ $BLOCK_11_STRIDING_INFO }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="$BLOCK_11_STRIDING_INFO"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + <Parameter name="multigrid algorithm" type="string" value="unsmoothed"/> + <Parameter name="tentative: calculate qr" type="bool" value="false"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!--<ParameterList name="myAggExport"> + <Parameter name="factory" type="string" value="AggregationExportFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="aggregation: output filename" type="string" value="structured_aggs"/> + <Parameter name="aggregation: output file: agg style" type="string" value="Jacks"/> + <Parameter name="aggregation: output file: agg style" type="string" value="Convex Hulls"/> + </ParameterList> --> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + <!--<Parameter name="ExportVTK" type="string" value="myAggExport"/>--> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="$BLOCK_00_GS_sweeps"/> + <Parameter name="relaxation: damping factor" type="double" value="$BLOCK_00_GS_damping"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory (for being used in SIMPLE type block smoother)--> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="$SCHUR_omega"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="DirectSolver"/> + <Parameter name="type" type="string" value="BASKER"/> + </ParameterList> + + <!-- Use SIMPLE: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="SimpleSmoother"/> + <Parameter name="Sweeps" type="int" value="$SimpleSmoother_sweeps"/> + <Parameter name="Damping factor" type="double" value="$SimpleSmoother_damping"/> + <Parameter name="UseSIMPLEC" type="bool" value="false"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + <Parameter name="type" type="string" value="BASKER"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="$N_LVLS"/> + <Parameter name="coarse: max size" type="int" value="$N_SIZES"/> + <Parameter name="verbosity" type="string" value="High"/> + <Parameter name="aggregation: export visualization data" type="bool" value="$EXPORT_DATA"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockDirectSolver"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <Parameter name="Coordinates" type="string" value="myTransferCoordinatesFact"/> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/SIMPLE_gs_direct_lvl_MT.xml.in b/katoptron/preconditioners/SIMPLE_gs_direct_lvl_MT.xml.in new file mode 100644 index 0000000000000000000000000000000000000000..daa5b75ed0558b00ed6b875f4b1240ed2a1ec614 --- /dev/null +++ b/katoptron/preconditioners/SIMPLE_gs_direct_lvl_MT.xml.in @@ -0,0 +1,276 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ $BLOCK_00_STRIDING_INFO }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ $BLOCK_00_STRIDING_INFO }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ $BLOCK_00_STRIDING_INFO }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myCoalesceDropFact"> + <Parameter name="factory" type="string" value="CoalesceDropFactory"/> + <Parameter name="lightweight wrap" type="bool" value="true"/> + <!-- for aggregation dropping --> + <!--<Parameter name="aggregation: drop tol" type="double" value="1e-10"/>--> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <!--<Parameter name="aggregation: min agg size" type="int" value="7"/>--> + <!--<Parameter name="aggregation: max agg size" type="int" value="10"/>--> + <!--<Parameter name="aggregation: max selected neighbors" type="int" value="1"/>--> + <!--<Parameter name="Graph" type="string" value="myCoalesceDropFact"/> + <Parameter name="DofsPerNode" type="string" value="myCoalesceDropFact"/>--> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + <Parameter name="multigrid algorithm" type="string" value="unsmoothed"/> + <Parameter name="tentative: calculate qr" type="bool" value="false"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ $BLOCK_11_STRIDING_INFO }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ $BLOCK_11_STRIDING_INFO }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ $BLOCK_11_STRIDING_INFO }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="$BLOCK_11_STRIDING_INFO"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + <Parameter name="multigrid algorithm" type="string" value="unsmoothed"/> + <Parameter name="tentative: calculate qr" type="bool" value="false"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!--<ParameterList name="myAggExport"> + <Parameter name="factory" type="string" value="AggregationExportFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="aggregation: output filename" type="string" value="structured_aggs"/> + <Parameter name="aggregation: output file: agg style" type="string" value="Jacks"/> + <Parameter name="aggregation: output file: agg style" type="string" value="Convex Hulls"/> + </ParameterList> --> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + <!--<Parameter name="ExportVTK" type="string" value="myAggExport"/>--> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="$BLOCK_00_GS_sweeps"/> + <Parameter name="relaxation: damping factor" type="double" value="$BLOCK_00_GS_damping"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory (for being used in SIMPLE type block smoother)--> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="$SCHUR_omega"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="DirectSolver"/> + <Parameter name="type" type="string" value="KLU"/> + </ParameterList> + + <!-- Use SIMPLE: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="SimpleSmoother"/> + <Parameter name="Sweeps" type="int" value="$SimpleSmoother_sweeps"/> + <Parameter name="Damping factor" type="double" value="$SimpleSmoother_damping"/> + <Parameter name="UseSIMPLEC" type="bool" value="false"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + <Parameter name="type" type="string" value="BASKER"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="$N_LVLS"/> + <Parameter name="coarse: max size" type="int" value="$N_SIZES"/> + <Parameter name="verbosity" type="string" value="High"/> + <Parameter name="aggregation: export visualization data" type="bool" value="$EXPORT_DATA"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockDirectSolver"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <Parameter name="Coordinates" type="string" value="myTransferCoordinatesFact"/> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/SIMPLE_jacobi.xml b/katoptron/preconditioners/SIMPLE_jacobi.xml new file mode 100644 index 0000000000000000000000000000000000000000..8a9ca96c74f443a3cf7204cdb29d8658af5673b8 --- /dev/null +++ b/katoptron/preconditioners/SIMPLE_jacobi.xml @@ -0,0 +1,257 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Jacobi"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory (for being used in SIMPLE type block smoother)--> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Jacobi"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Use SIMPLE: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="SimpleSmoother"/> + <Parameter name="Sweeps" type="int" value="3"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <Parameter name="UseSIMPLEC" type="bool" value="false"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/SIMPLE_mtgs.xml b/katoptron/preconditioners/SIMPLE_mtgs.xml new file mode 100644 index 0000000000000000000000000000000000000000..0cba3b545281161c5169ab358eea82661b263aa7 --- /dev/null +++ b/katoptron/preconditioners/SIMPLE_mtgs.xml @@ -0,0 +1,257 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="1."/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory (for being used in SIMPLE type block smoother)--> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="1."/> + </ParameterList> + </ParameterList> + + <!-- Use SIMPLE: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="SimpleSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="1."/> + <Parameter name="UseSIMPLEC" type="bool" value="false"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/Uzawa_cheby.xml b/katoptron/preconditioners/Uzawa_cheby.xml new file mode 100644 index 0000000000000000000000000000000000000000..1c8d7bdff671a71fa6dc263f74bb2145710c6187 --- /dev/null +++ b/katoptron/preconditioners/Uzawa_cheby.xml @@ -0,0 +1,250 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="CHEBYSHEV"/> + <ParameterList name="ParameterList"> + <Parameter name="degree" type="int" value="2"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory --> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="CHEBYSHEV"/> + <ParameterList name="ParameterList"> + <Parameter name="degree" type="int" value="2"/> + </ParameterList> + </ParameterList> + + <!-- Use Uzawa: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="UzawaSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/Uzawa_direct.xml b/katoptron/preconditioners/Uzawa_direct.xml new file mode 100644 index 0000000000000000000000000000000000000000..0953891f90e5755c9c4f7ddb65a687994ed82460 --- /dev/null +++ b/katoptron/preconditioners/Uzawa_direct.xml @@ -0,0 +1,244 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="DirectSolver"/> + <Parameter name="type" type="string" value="KLU"/> + </ParameterList> + + <!-- Build Schur Complement factory --> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="DirectSolver"/> + <Parameter name="type" type="string" value="KLU"/> + </ParameterList> + + <!-- Use Uzawa: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="UzawaSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/Uzawa_gs.xml b/katoptron/preconditioners/Uzawa_gs.xml new file mode 100644 index 0000000000000000000000000000000000000000..920eaa7e4723e67e1506721955e6182b9324a665 --- /dev/null +++ b/katoptron/preconditioners/Uzawa_gs.xml @@ -0,0 +1,256 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Symmetric Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory --> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Symmetric Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Use Uzawa: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="UzawaSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/Uzawa_jacobi.xml b/katoptron/preconditioners/Uzawa_jacobi.xml new file mode 100644 index 0000000000000000000000000000000000000000..becd02d913b4f11ae27f0470ddf6c635c8b77173 --- /dev/null +++ b/katoptron/preconditioners/Uzawa_jacobi.xml @@ -0,0 +1,256 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Jacobi"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory --> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Jacobi"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Use Uzawa: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="UzawaSmoother"/> + <Parameter name="Sweeps" type="int" value="3"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/Uzawa_mtgs.xml b/katoptron/preconditioners/Uzawa_mtgs.xml new file mode 100644 index 0000000000000000000000000000000000000000..c1d21dca8244ec1925470c1bb31d02d1dd8ec359 --- /dev/null +++ b/katoptron/preconditioners/Uzawa_mtgs.xml @@ -0,0 +1,258 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 2 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="3"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Symmetric Gauss-Seidel"/> + <Parameter name="relaxation: symmetric matrix structure" type="bool" value="True"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory --> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="false"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Symmetric Gauss-Seidel"/> + <Parameter name="relaxation: symmetric matrix structure" type="bool" value="True"/> + <Parameter name="relaxation: sweeps" type="int" value="3"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Use Uzawa: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="UzawaSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/preconditioners/blockdirect.xml b/katoptron/preconditioners/blockdirect.xml new file mode 100644 index 0000000000000000000000000000000000000000..4a5b0a725a2d1e8dac22e6863a2397a672bdb440 --- /dev/null +++ b/katoptron/preconditioners/blockdirect.xml @@ -0,0 +1,30 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="CoarseSolver" type="string" value="myBlockDirectSolver"/> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> diff --git a/katoptron/preconditioners/gs_lvl.xml.in b/katoptron/preconditioners/gs_lvl.xml.in new file mode 100644 index 0000000000000000000000000000000000000000..2439cadc0668c278bed430289acdee9149595318 --- /dev/null +++ b/katoptron/preconditioners/gs_lvl.xml.in @@ -0,0 +1,95 @@ + +<ParameterList name="MueLu"> + + <ParameterList name="Matrix"> + <Parameter name="PDE equations" type="int" value="$BLOCK_00_STRIDING_INFO"/> <!-- Number of PDE equations at each grid node.--> + </ParameterList> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <ParameterList name="myCoalesceDropFact"> + <Parameter name="factory" type="string" value="CoalesceDropFactory"/> + <Parameter name="lightweight wrap" type="bool" value="true"/> + <!-- for aggregation dropping --> + <Parameter name="aggregation: drop tol" type="double" value="1e-10"/> + </ParameterList> + + <ParameterList name="mySmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: backward mode" type="bool" value="true"/> + <Parameter name="relaxation: sweeps" type="int" value="$BLOCK_00_GS_sweeps"/> + <Parameter name="relaxation: damping factor" type="double" value="$BLOCK_00_GS_damping"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myCoarseFact"> + <Parameter name="factory" type="string" value="DirectSolver"/> + <Parameter name="type" type="string" value="KLU"/> + </ParameterList> + + <ParameterList name="myAggFact"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <!-- <Parameter name="aggregation: min agg size" type="int" value="7"/> --> + <!-- <Parameter name="aggregation: max agg size" type="int" value="4"/> --> + <!-- <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> --> + <Parameter name="Graph" type="string" value="myCoalesceDropFact"/> + <Parameter name="DofsPerNode" type="string" value="myCoalesceDropFact"/> + </ParameterList> + + <ParameterList name="MyCoarseMap"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ $BLOCK_00_STRIDING_INFO }"/> + <Parameter name="Aggregates" type="string" value="myAggFact"/> + </ParameterList> + + <ParameterList name="myTentativePFact"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact"/> + <Parameter name="CoarseMap" type="string" value="MyCoarseMap"/> + </ParameterList> + + <ParameterList name="myRFact"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact"/> + </ParameterList> + + <ParameterList name="myAggExport"> + <Parameter name="factory" type="string" value="AggregationExportFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact"/> + <Parameter name="aggregation: output filename" type="string" value="structured_aggs"/> + <Parameter name="aggregation: output file: agg style" type="string" value="Jacks"/> + <Parameter name="aggregation: output file: agg style" type="string" value="Convex Hulls"/> + </ParameterList> + + <ParameterList name="myRAPFact"> + <Parameter name="factory" type="string" value="RAPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact"/> + <Parameter name="R" type="string" value="myRFact"/> + <ParameterList name="TransferFactories"> + <Parameter name="ExportVTK" type="string" value="myAggExport"/> + </ParameterList> + </ParameterList> + + </ParameterList> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + <Parameter name="max levels" type="int" value="$N_LVLS"/> + <Parameter name="coarse: max size" type="int" value="$N_SIZES"/> + <Parameter name="verbosity" type="string" value="High"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="mySmooFact"/> + <Parameter name="CoarseSolver" type="string" value="myCoarseFact"/> + <Parameter name="P" type="string" value="myTentativePFact"/> + <Parameter name="R" type="string" value="myRFact"/> + <Parameter name="A" type="string" value="myRAPFact"/> + </ParameterList> + </ParameterList> +</ParameterList> \ No newline at end of file diff --git a/katoptron/readers.py b/katoptron/readers.py new file mode 100644 index 0000000000000000000000000000000000000000..2d887e267b782850b9440d5b891ba812cb514aca --- /dev/null +++ b/katoptron/readers.py @@ -0,0 +1,124 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + +import numpy as np + + +def read_timers(filename, querylines): + file = open(filename, "r") + times = np.zeros((len(querylines),)) + for line in file: + words = line.split() + if len(words) == 0: + continue + for i in range(0, len(querylines)): + if times[i] == 0.: + if words[0] == querylines[i]: + times[i] = float(words[2]) + continue + file.close() + return times + + +def read_teuchos_timers(filename, querylines): + file = open(filename, "r") + times = np.zeros((len(querylines),)) + for line in file: + words = line.split() + if len(words) == 0: + continue + for i in range(0, len(querylines)): + if times[i] == 0.: + querylines_words = querylines[i].split() + has_to_be_read = True + for j in range(0, len(querylines_words)): + if words[j] != querylines_words[j]: + has_to_be_read = False + break + if has_to_be_read: + times[i] = float(words[len(querylines_words)]) + continue + file.close() + return times + + +def read_Belos(filename, ensemble_size): + active_set_number = 1 + + number_of_criterion = 0 + + previously_an_iter = False + + iter_indices = np.array([]) + + residuals = np.array([]) + + file = open(filename, "r") + for line in file: + words = line.split() + if len(words) == 0: + continue + if words[0] == "Iter": + previously_an_iter = True + word = words[1] + len_word = len(word) + if iter_indices.size != 0: + iter_indices = np.append( + iter_indices, [int(word[:(len_word-1)])], axis=0) + else: + iter_indices = np.array([int(word[:(len_word-1)])]) + + if number_of_criterion == 0: + word = words[3] + len_word = len(word) + + number_of_criterion = int(word[:(len_word-1)]) + if number_of_criterion == 1: + if ensemble_size > 1: + + residual = np.array([float(words[6])]) + for i in range(1, ensemble_size): + residual = np.append(residual, [float(words[6+i])]) + if residuals.size != 0: + residuals = np.append(residuals, [residual], axis=0) + else: + residuals = np.array([residual]) + + else: + if residuals.size != 0: + residuals = np.append( + residuals, [float(words[5])], axis=0) + else: + residuals = np.array([float(words[5])]) + elif previously_an_iter: + previously_an_iter = False + active_set_number = active_set_number + 1 + + file.close() + return iter_indices, residuals + + +def plot_Belos(iter_indices, residuals, ensemble_size=1, hold=False, color_offset=1): + import matplotlib.pyplot as plt + + col = {'c1': (0., 0.4470, 0.7410), 'c2': (0.8500, 0.3250, 0.0980), + 'c3': (0.9290, 0.6940, 0.1250), 'c4': (0.4940, 0.1840, 0.5560), + 'c5': (0.4660, 0.6740, 0.1880), 'c6': (0.3010, 0.7450, 0.9330), + 'c7': (0.6350, 0.0780, 0.1840), 'c8': (0, 0.4470, 0.7410)} + + plt_linewidth = 2 + plt.style.use('ggplot') + + if hold == False: + plt.figure(figsize=(8, 8)) + plt.grid(True) + + if ensemble_size > 1: + for i in range(0, ensemble_size): + plt.semilogy(iter_indices, residuals[:, i], '-', color=col['c'+str( + color_offset+i)], zorder=2, linewidth=plt_linewidth) + else: + plt.semilogy(iter_indices, residuals, '-', + color=col['c'+str(color_offset)], zorder=2, linewidth=plt_linewidth) diff --git a/katoptron/speedup.py b/katoptron/speedup.py new file mode 100644 index 0000000000000000000000000000000000000000..16750d4b85841bc27de59f94f03e1a109b904fbb --- /dev/null +++ b/katoptron/speedup.py @@ -0,0 +1,172 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import numpy as np + +from katoptron.readers import * + + +def read_iter_all_ensemble_sizes(n_samples, ensemble_sizes, file_base_dir, reduction=False): + iter = np.zeros((len(ensemble_sizes), n_samples)) + for i in range(0, len(ensemble_sizes)): + file_base_dir_2 = file_base_dir + '/' + str(ensemble_sizes[i])+'/' + for j in range(0, int((n_samples // ensemble_sizes[i]))): + input_MC_file_dir = file_base_dir_2 + str(j)+'/' + es = ensemble_sizes[i] + if reduction: + es = 1 + iter_indices, residuals = read_Belos( + input_MC_file_dir + 'belos_out.txt', es) + for k in range(0, ensemble_sizes[i]): + iter[i][j*ensemble_sizes[i]+k] = iter_indices[-1] + return iter + + +def read_timers_all_ensemble_sizes(n_samples, ensemble_sizes, file_base_dir, querylines, use_waves_timers, use_teuchos_timers): + timers = np.zeros((len(ensemble_sizes), n_samples, len(querylines))) + timers_s = np.zeros((len(querylines),)) + for i in range(0, len(ensemble_sizes)): + file_base_dir_2 = file_base_dir + '/' + str(ensemble_sizes[i])+'/' + for j in range(0, int((n_samples // ensemble_sizes[i]))): + input_MC_file_dir = file_base_dir_2 + str(j)+'/' + for k in use_waves_timers: + timers_s[int(k)] = read_timers(input_MC_file_dir + + 'timers.txt', [querylines[int(k)]])[0] + for k in use_teuchos_timers: + timers_s[int(k)] = read_teuchos_timers( + input_MC_file_dir + 'teuchos_timers.txt', [querylines[int(k)]])[0] + for k in range(0, ensemble_sizes[i]): + timers[i][j*ensemble_sizes[i]+k][:] = timers_s[:] + + return timers + + +def compute_speedup(n_samples, ensemble_sizes, file_base_dir, querylines, per_iteration, quantiles, use_waves_timers, use_teuchos_timers, reduction=False): + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_base_dir, reduction) + timers = read_timers_all_ensemble_sizes( + n_samples, ensemble_sizes, file_base_dir, querylines, use_waves_timers, use_teuchos_timers) + + n_quantiles = len(quantiles) + + speedup = np.zeros((len(ensemble_sizes), len(querylines), n_quantiles)) + + i_no_ep = 0 + + for i in range(0, len(ensemble_sizes)): + if i == i_no_ep: + speedup[i][:][:] = np.ones((1, len(querylines), n_quantiles)) + else: + cum_timers = np.zeros( + (2, int((n_samples // ensemble_sizes[i])), len(querylines))) + for j in range(0, int((n_samples // ensemble_sizes[i]))): + for l in range(0, len(querylines)): + if per_iteration[l]: + sum_iter = 0 + else: + sum_iter = 1 + for k in range(0, ensemble_sizes[i]): + cum_timers[0][j][l] = cum_timers[0][j][l] + \ + timers[i_no_ep][j*ensemble_sizes[i]+k][l] + if per_iteration[l]: + sum_iter = sum_iter + \ + iter[i_no_ep][j*ensemble_sizes[i]+k] + cum_timers[0][j][l] = ( + cum_timers[0][j][l] / sum_iter) + if cum_timers[0][j][l] == 0: + print('Warning! The cumulated cpu cost of ' + querylines[l] + ' is zero and is replaced by ' + str( + (0.01 / sum_iter)) + ', the precision of the timers has to be increased or the test is too small.') + cum_timers[0][j][l] = (0.01 / sum_iter) + if per_iteration[l]: + cum_timers[1][j][l] = ( + timers[i][j*ensemble_sizes[i]][l] / (iter[i][j*ensemble_sizes[i]]*ensemble_sizes[i])) + else: + cum_timers[1][j][l] = timers[i][j*ensemble_sizes[i]][l] + for l in range(0, len(querylines)): + speedup[i][l] = np.quantile( + (cum_timers[0, :, l] / cum_timers[1, :, l]), quantiles, axis=0) + return speedup + + +def plot_speedup(speedup, ensemble_sizes, which_l=[0], title=None, querylines=None, per_iteration=None): + import matplotlib.pyplot as plt + + plt.figure(figsize=(8, 8)) + + col = {'c1': (0., 0.4470, 0.7410), 'c2': (0.8500, 0.3250, 0.0980), + 'c3': (0.9290, 0.6940, 0.1250), 'c4': (0.4940, 0.1840, 0.5560), + 'c5': (0.4660, 0.6740, 0.1880), 'c6': (0.3010, 0.7450, 0.9330), + 'c7': (0.6350, 0.0780, 0.1840), 'c8': (0, 0.4470, 0.7410)} + + plt_linewidth = 2 + plt.style.use('ggplot') + + for i in range(0, len(which_l)): + color = col['c'+str(i+1)] + for j in range(0, speedup.shape[2]): + if j == 0 and querylines is not None: + plt.plot(ensemble_sizes, speedup[:, which_l[i], j], color=color, + label=querylines[which_l[i]]+'_'+str(per_iteration[which_l[i]])) + else: + plt.plot(ensemble_sizes, + speedup[:, which_l[i], j], color=color) + + plt.xlabel('ensemble size') + plt.ylabel('speedup') + plt.xlim(min(ensemble_sizes), max(ensemble_sizes)) + if title is not None: + plt.title(title) + if querylines is not None: + plt.legend() + + +def save_speedup(speedup, ensemble_sizes, querylines, filename): + tmp = np.zeros((speedup.shape[0], speedup.shape[2]+1)) + tmp[:, 0] = ensemble_sizes + for l in range(0, len(querylines)): + for i in range(1, speedup.shape[2]+1): + tmp[:, i] = speedup[:, l, i-1] + name = filename + '_' + querylines[l] + '.txt' + name = name.replace(" ", "_") + name = name.replace(":", "") + name = name.replace("[", "") + name = name.replace("]", "") + name = name.replace("(", "") + name = name.replace(")", "") + name = name.replace("*", "") + np.savetxt(name, tmp, delimiter=' ') + + +def compute_R(n_samples, ensemble_sizes, file_base_dir, quantiles, reduction=False): + iter = read_iter_all_ensemble_sizes( + n_samples, ensemble_sizes, file_base_dir, reduction) + n_quantiles = len(quantiles) + + R = np.ones((len(ensemble_sizes), n_quantiles)) + + i_no_ep = 0 + + for i in range(0, len(ensemble_sizes)): + if i != i_no_ep: + cum_iter = np.zeros( + (2, int((n_samples // ensemble_sizes[i])))) + for j in range(0, int((n_samples // ensemble_sizes[i]))): + for k in range(0, ensemble_sizes[i]): + cum_iter[0][j] = cum_iter[0][j] + \ + iter[i_no_ep][j*ensemble_sizes[i]+k] + cum_iter[1][j] = iter[i][j*ensemble_sizes[i]]*ensemble_sizes[i] + R[i, :] = np.quantile( + (cum_iter[1, :] / cum_iter[0, :]), quantiles, axis=0) + return R + + +def save_R(R, filename): + name = filename + '.txt' + name = name.replace(" ", "_") + name = name.replace(":", "") + name = name.replace("[", "") + name = name.replace("]", "") + name = name.replace("(", "") + name = name.replace(")", "") + name = name.replace("*", "") + np.savetxt(name, R, delimiter=' ') diff --git a/katoptron/src/Algebraic.h b/katoptron/src/Algebraic.h new file mode 100644 index 0000000000000000000000000000000000000000..dffadb954257f3b986be93e3c4239c2ffd0899cd --- /dev/null +++ b/katoptron/src/Algebraic.h @@ -0,0 +1,48 @@ +#ifndef KATOPTRON_ALGEBRAIC_H +#define KATOPTRON_ALGEBRAIC_H + +#include "katoptron.h" +#include "Map.h" +#include "Domain.h" +#include "Loads.h" +#include "Graph.h" +#include "Matrices.h" +#include "Vectors.h" + +#include "LinearSolver.h" + +#include "EnsembleTraits.h" + +#include <limits> + +namespace katoptron +{ + +/** + * @brief Class which is used to store Teuchos::RCP to the algebraic information of the problem: + * <ul> + * <li> map: an object that stores all the maps, + * <li> graph: an object that stores all the graphs (the sparsity patterns of the matrices), + * <li> matrices: an object that stores all the matrices, + * <li> vectors: an object that stores all the vectors. + * </ul> + */ +template <typename scalar> +class Algebraic +{ + typedef Map::local_ordinal_type local_ordinal_type; + typedef Map::global_ordinal_type global_ordinal_type; + +public: + Teuchos::RCP<Map> map; + Teuchos::RCP<Graph> graph; + Teuchos::RCP<Matrices<scalar>> matrices; + Teuchos::RCP<Vectors<scalar>> vectors; + + Algebraic(Teuchos::RCP<Map> map, Teuchos::RCP<Domain<scalar>> domain); + + Teuchos::RCP<Tpetra::Vector<scalar, local_ordinal_type, global_ordinal_type>> readVectorFromFile(std::string &name, size_t myRank); +}; +}; // namespace katoptron + +#endif //KATOPTRON_ALGEBRAIC_H diff --git a/katoptron/src/Algebraic.hpp b/katoptron/src/Algebraic.hpp new file mode 100644 index 0000000000000000000000000000000000000000..1ad56e35fb335a42e106ca8a9d8edf0a43fa2a27 --- /dev/null +++ b/katoptron/src/Algebraic.hpp @@ -0,0 +1,79 @@ +namespace katoptron +{ + +/** + * @brief Algebraic constructor + * + * This contrusctor calls the constructor of the katoptron::Graph, katoptron::Matrices, and katoptron::Vectors classes. + * To do so, we need information regarding the distributions of the nodes and elements over the MPI processes (information + * included in the katoptron::Map class) and information regarding the connectivity between the degrees of freedom (or, + * equivalently, between the nodes) (information included in katoptron::Domain::elementsList). + * + * Arguments: + * <ul> + * <li> map: an RCP to a Map object, + * <li> domain: an RCP to a Domain object. + * </ul> + */ +template <typename scalar> +Algebraic<scalar>::Algebraic(Teuchos::RCP<Map> _map, Teuchos::RCP<Domain<scalar>> domain) +{ + map = _map; + + LinearSolver::getTimers()["graph"].start(); + graph = Teuchos::rcp(new Graph(_map, domain->elementsList)); + LinearSolver::getTimers()["graph"].stop(); + matrices = Teuchos::rcp(new Matrices<scalar>(graph)); + vectors = Teuchos::rcp(new Vectors<scalar>(map)); +} + +/** + * @brief Function to read a vector from file and distribute it to the MPI processes. + * + * Arguments: + * <ul> + * <li> name: the name of input file, + * <li> myRank: rank of the process. + * </ul> + */ +template <typename scalar> +Teuchos::RCP<Tpetra::Vector<scalar, Map::local_ordinal_type, Map::global_ordinal_type>> +Algebraic<scalar>::readVectorFromFile(std::string &name, size_t myRank) +{ + using Teuchos::RCP; + using Teuchos::rcp; + + std::ifstream inputfile; + if (myRank == 0) + inputfile.open(name); + + RCP<Tpetra::Vector<scalar, Map::local_ordinal_type, Map::global_ordinal_type>> x_0 = + rcp(new Tpetra::Vector<scalar, Map::local_ordinal_type, Map::global_ordinal_type>(map->mapOutput, true)); + RCP<Tpetra::Vector<scalar, Map::local_ordinal_type, Map::global_ordinal_type>> x = + rcp(new Tpetra::Vector<scalar, Map::local_ordinal_type, Map::global_ordinal_type>(map->mapDofs, true)); + + if (myRank == 0) + { + auto line_size = map->mapOutput->getGlobalNumElements(); + + typedef EnsembleTraits<scalar> ET; + const int ensemble_size = ET::size; + + for (Map::global_ordinal_type global_index = 0; global_index < line_size; ++global_index) + { + scalar tmp; + for (auto j = 0; j < ensemble_size; ++j) + inputfile >> ET::coeff(tmp, j); + + x_0->replaceGlobalValue(global_index, tmp); + } + inputfile.close(); + } + + Tpetra::Export<> exportDof(map->mapOutput, map->mapDofs); + + x->doExport(*x_0, exportDof, Tpetra::ADD); + return x; +} + +}; // namespace katoptron diff --git a/katoptron/src/AlgebraicETI.cpp b/katoptron/src/AlgebraicETI.cpp new file mode 100644 index 0000000000000000000000000000000000000000..2bef1983e77343e17ea78e66e82ff56abc405180 --- /dev/null +++ b/katoptron/src/AlgebraicETI.cpp @@ -0,0 +1,10 @@ +#include "Algebraic.h" +#include "Algebraic.hpp" + +using namespace katoptron; + +template class Algebraic<double>; +template class Algebraic<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 8, Kokkos::OpenMP>>>; +template class Algebraic<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 16, Kokkos::OpenMP>>>; +template class Algebraic<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 24, Kokkos::OpenMP>>>; +template class Algebraic<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 32, Kokkos::OpenMP>>>; \ No newline at end of file diff --git a/katoptron/src/BelosStatusTestWeightedGenResNorm_MP_Vector.hpp b/katoptron/src/BelosStatusTestWeightedGenResNorm_MP_Vector.hpp new file mode 100644 index 0000000000000000000000000000000000000000..2011eb80bddb046603f1500466e5c684777c50c5 --- /dev/null +++ b/katoptron/src/BelosStatusTestWeightedGenResNorm_MP_Vector.hpp @@ -0,0 +1,769 @@ +//@HEADER +// ************************************************************************ +// +// Belos: Block Linear Solvers Package +// Copyright 2004 Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Michael A. Heroux (maherou@sandia.gov) +// +// ************************************************************************ +//@HEADER + +#ifndef BELOS_STATUS_TEST_WEIGHTED_GEN_RESNORM_MP_VECTORH +#define BELOS_STATUS_TEST_WEIGHTED_GEN_RESNORM_MP_VECTORH + +/*! + \file BelosStatusTestWeightedGenResNorm.hpp + \brief Belos::StatusTestResNorm for specifying general residual norm stopping criteria. +*/ + +#include "BelosStatusTestResNorm.hpp" +#include "BelosLinearProblem.hpp" +#include "BelosMultiVecTraits.hpp" + +#include "EnsembleTraits.h" + +/*! + \class Belos::StatusTestWeightedGenResNorm + \brief An implementation of StatusTestResNorm using a family of weighted residual norms. + + StatusTestWeightedGenResNorm is an implementation of StatusTestResNorm that allows a user to construct + one of a family of residual tests for use as a status/convergence test for Belos. + The form of the test is + \f[ + \frac{\|w\odot r_i\|}{\sigma_i} \le \tau + \f] + where + <ul> + <li> \f$w\f$ is a vector of weights, + <li> \f$\odot\f$ is the Hadamard product, + <li> \f$r_i\f$ is the i-th residual std::vector, implicitly or explicitly computed (determined by enum ResType), + <li> \f$\|r_i\|\f$ is the i-th residual norm determined by the enum NormType (1-norm, 2-norm or inf-norm), + <li> \f$\sigma_i\f$ is the i-th scale factor that can be passed in as a precomputed number of the templated type, + or can be selected from by the enum ScaleType (norm of RHS, norm of initial residual). + <li> \f$\tau\f$ is the tolerance that is passed in as a number of the templated type to the constructor. + The value of \f$\tau\f$ can be reset using the setTolerance() method. + </ul> + +*/ + +namespace Belos +{ + +template <class ScalarType, class MV, class OP> +class StatusTestWeightedGenResNorm : public StatusTestResNorm<ScalarType, MV, OP> +{ + +public: + // Convenience typedefs + typedef Teuchos::ScalarTraits<ScalarType> SCT; + typedef typename SCT::magnitudeType MagnitudeType; + typedef MultiVecTraits<ScalarType, MV> MVT; + + //! @name Enums. + //@{ + + /*! + \brief Select how the residual std::vector is produced. + */ + enum ResType + { + Implicit, /*!< Use the residual std::vector produced by the iterative solver. */ + Explicit /*!< Explicitly compute the residual std::vector r = b - A*x using the + linear problem. */ + }; + + //@} + + //! @name Constructors/destructors. + //@{ + //! Constructor + /*! The constructor takes a single argument specifying the tolerance (\f$\tau\f$). + If none of the form definition methods are called, we use \f$\|r\|_2/\|r^{(0)}\|_2 \le \tau\f$ + as the stopping criterion, where \f$\|r\|_2\f$ uses the least costly form of the 2-norm of + residual available from the iterative method and \f$\|r^{(0)}\|_2\f$ is the corresponding norm + of the initial residual. The least costly form of the 2-norm depends on the chosen iterative + method. Most Krylov methods produce the preconditioned residual std::vector in a form that would be + exact in infinite precision arithmetic. This std::vector may be different from the true residual + either because left preconditioning was used, or because round-off error has + introduced significant error, or both. + + You can also state the number of vectors that must pass the convergence criteria before the + status test passes by using the \c quorum argument. + */ + StatusTestWeightedGenResNorm(MagnitudeType Tolerance, Teuchos::RCP<MV> weights, int quorum = -1, bool showMaxResNormOnly = false); + + //! Destructor + virtual ~StatusTestWeightedGenResNorm(); + //@} + + //! @name Form and parameter definition methods. + //@{ + + //! Define form of the residual, its norm and optional weighting std::vector. + /*! This method defines the form of \f$\|r\|\f$. We specify: + <ul> + <li> Whether the residual std::vector should be explicitly computed, or taken from the iterative method. + <li> The norm to be used on the residual (this may be different than the norm used in + DefineScaleForm()). + </ul> + */ + int defineResForm(ResType TypeOfResidual, NormType TypeOfNorm); + + //! Define form of the scaling, its norm, its optional weighting std::vector, or, alternatively, define an explicit value. + /*! This method defines the form of how the residual is scaled (if at all). It operates in two modes: + <ol> + <li> User-provided scaling value: + <ul> + <li> Set argument TypeOfScaling to UserProvided. + <li> Set ScaleValue to a non-zero value that the residual norm will be divided by. + <li> TypeOfNorm argument will be ignored. + <li> Sample use: Define ScaleValue = \f$\|A\|_{\infty}\f$ where \f$ A \f$ is the matrix + of the linear problem. + </ul> + + <li> Use a supported Scaling Form: + <ul> + <li> Define TypeOfScaling to be the norm of the right hand side, the initial residual std::vector, + or to none. + <li> Define norm to be used on the scaling std::vector (this may be different than the norm used + in DefineResForm()). + </ul> + </ol> + */ + int defineScaleForm(ScaleType TypeOfScaling, NormType TypeOfNorm, MagnitudeType ScaleValue = Teuchos::ScalarTraits<MagnitudeType>::one()); + + NormType getResNormType() { return resnormtype_; } + + //! Set the value of the tolerance + /*! We allow the tolerance to be reset for cases where, in the process of testing the residual, + we find that the initial tolerance was too tight or too lax. + */ + int setTolerance(MagnitudeType tolerance) + { + tolerance_ = tolerance; + return (0); + } + + //! Sets the number of residuals that must pass the convergence test before Passed is returned. + //! \note If \c quorum=-1 then all residuals must pass the convergence test before Passed is returned. + int setQuorum(int quorum) + { + quorum_ = quorum; + return (0); + } + + //! Set whether the only maximum residual norm is displayed when the print() method is called + int setShowMaxResNormOnly(bool showMaxResNormOnly) + { + showMaxResNormOnly_ = showMaxResNormOnly; + return (0); + } + + //@} + + //! @name Status methods + //@{ + //! Check convergence status: Passed, Failed, or Undefined. + /*! This method checks to see if the convergence criteria are met. + Depending on how the residual test is constructed this method will return + the appropriate status type. + + \return StatusType: Passed, Failed, or Undefined. + */ + StatusType checkStatus(Iteration<ScalarType, MV, OP> *iSolver); + + //! Return the result of the most recent CheckStatus call. + StatusType getStatus() const { return (status_); }; + //@} + + //! @name Reset methods + //@{ + + //! Resets the internal configuration to the initial state. + void reset(); + + //@} + + //! @name Print methods + //@{ + + //! Output formatted description of stopping test to output stream. + void print(std::ostream &os, int indent = 0) const; + + //! Print message for each status specific to this stopping test. + void printStatus(std::ostream &os, StatusType type) const; + //@} + + //! @name Methods to access data members. + //@{ + + //! Returns the current solution estimate that was computed for the most recent residual test. + //! \note This is useful for explicit residual tests, if this test is an implicit residual test + //! a null pointer will be returned. + Teuchos::RCP<MV> getSolution() { return curSoln_; } + + //! Returns the number of residuals that must pass the convergence test before Passed is returned. + //! \note If \c quorum=-1 then all residuals must pass the convergence test before Passed is returned. + int getQuorum() const { return quorum_; } + + //! Returns whether the only maximum residual norm is displayed when the print() method is called + bool getShowMaxResNormOnly() { return showMaxResNormOnly_; } + + //! Returns the std::vector containing the indices of the residuals that passed the test. + std::vector<int> convIndices() { return ind_; } + + //! Returns the value of the tolerance, \f$ \tau \f$, set in the constructor. + MagnitudeType getTolerance() const { return (tolerance_); }; + + //! Returns the test value, \f$ \frac{\|r\|}{\sigma} \f$, computed in most recent call to CheckStatus. + const std::vector<MagnitudeType> *getTestValue() const { return (&testvector_); }; + + //! Returns the residual norm value, \f$ \|r\| \f$, computed in most recent call to CheckStatus. + const std::vector<MagnitudeType> *getResNormValue() const { return (&resvector_); }; + + //! Returns the scaled norm value, \f$ \sigma \f$. + const std::vector<MagnitudeType> *getScaledNormValue() const { return (&scalevector_); }; + + //! Returns a boolean indicating a loss of accuracy has been detected in computing the residual. + //! \note This status test does not check for loss of accuracy, so this method will always return false. + bool getLOADetected() const { return false; } + + //! Returns number of ensemble iterations + const std::vector<int> getEnsembleIterations() const { return ensemble_iterations; } + //@} + + /** @name Misc. */ + //@{ + + /** \brief Call to setup initial scaling std::vector. + * + * After this function is called <tt>getScaledNormValue()</tt> can be called + * to get the scaling std::vector. + */ + StatusType firstCallCheckStatusSetup(Iteration<ScalarType, MV, OP> *iSolver); + //@} + + /** \name Overridden from Teuchos::Describable */ + //@{ + + /** \brief Method to return description of the maximum iteration status test */ + std::string description() const + { + std::ostringstream oss; + oss << "Belos::StatusTestWeightedGenResNorm<>: " << resFormStr(); + oss << ", tol = " << tolerance_; + return oss.str(); + } + //@} + +protected: +private: + //! @name Private methods. + //@{ + /** \brief Description of current residual form */ + std::string resFormStr() const + { + std::ostringstream oss; + oss << "("; + oss << ((resnormtype_ == OneNorm) ? "1-Norm" : (resnormtype_ == TwoNorm) ? "2-Norm" : "Inf-Norm"); + oss << " Exp"; + oss << " Res Vec) "; + + // If there is no residual scaling, return current string. + if (scaletype_ != None) + { + // Insert division sign. + oss << "/ "; + + // Determine output string for scaling, if there is any. + if (scaletype_ == UserProvided) + oss << " (User Scale)"; + else + { + oss << "("; + oss << ((scalenormtype_ == OneNorm) ? "1-Norm" : (resnormtype_ == TwoNorm) ? "2-Norm" : "Inf-Norm"); + if (scaletype_ == NormOfInitRes || scaletype_ == NormOfFullInitRes || scaletype_ == NormOfFullScaledInitRes) + oss << " Res0"; + else if (scaletype_ == NormOfPrecInitRes || scaletype_ == NormOfFullPrecInitRes || scaletype_ == NormOfFullScaledPrecInitRes) + oss << " Prec Res0"; + else + oss << " RHS "; + oss << ")"; + } + } + + return oss.str(); + } + + //@} + + //! @name Private helper functions + //@{ + + // calculate weighted norm + void MvWNorm(const MV &mv, const MV &w, std::vector<typename Teuchos::ScalarTraits<ScalarType>::magnitudeType> &normVec, NormType type = TwoNorm) + { + + Teuchos::RCP<MV> wmv = MVT::CloneCopy(mv); + + Teuchos::ArrayRCP<typename MV::scalar_type> wmv_entries; + Teuchos::ArrayRCP<const typename MV::scalar_type> w_entries; + + for (size_t j = 0; j < MVT::GetNumberVecs(mv); ++j) + { + wmv_entries = wmv->getDataNonConst(j); + w_entries = w.getData(j); + for (size_t i = 0; i < wmv_entries.size(); ++i) + wmv_entries[i] *= w_entries[i]; + } + MVT::MvNorm(*wmv, normVec, type); + } + //@} + + //! @name Private data members. + //@{ + + //! Tolerance used to determine convergence + MagnitudeType tolerance_; + + //! Number of residuals that must pass the convergence test before Passed is returned. + int quorum_; + + //! Determines if the entries for all of the residuals are shown or just the max. + bool showMaxResNormOnly_; + + //! Type of norm to use on residual (OneNorm, TwoNorm, or InfNorm). + NormType resnormtype_; + + //! Type of scaling to use (Norm of RHS, Norm of Initial Residual, None or User provided) + ScaleType scaletype_; + + //! Type of norm to use on the scaling (OneNorm, TwoNorm, or InfNorm) + NormType scalenormtype_; + + //! Scaling value. + MagnitudeType scalevalue_; + + //! Scaling std::vector. + std::vector<MagnitudeType> scalevector_; + + //! Residual norm std::vector. + std::vector<MagnitudeType> resvector_; + + //! Test std::vector = resvector_ / scalevector_ + std::vector<MagnitudeType> testvector_; + + //! Vector containing the indices for the vectors that passed the test. + std::vector<int> ind_; + + //! Most recent solution vector used by this status test. + Teuchos::RCP<MV> curSoln_; + + //! Status + StatusType status_; + + //! The current blocksize of the linear system being solved. + int curBlksz_; + + //! The current number of right-hand sides being solved for. + int curNumRHS_; + + //! The indices of the current number of right-hand sides being solved for. + std::vector<int> curLSIdx_; + + //! The current number of linear systems that have been loaded into the linear problem. + int curLSNum_; + + //! The total number of right-hand sides being solved for. + int numrhs_; + + //! Is this the first time CheckStatus is called? + bool firstcallCheckStatus_; + + //! Is this the first time DefineResForm is called? + bool firstcallDefineResForm_; + + //! Is this the first time DefineScaleForm is called? + bool firstcallDefineScaleForm_; + + //! Weights of the used norm: + Teuchos::RCP<MV> weights_; + + //! The number of iterations at which point each ensemble component converges + std::vector<int> ensemble_iterations; + + //@} +}; + +template <class ScalarType, class MV, class OP> +StatusTestWeightedGenResNorm<ScalarType, MV, OP>:: + StatusTestWeightedGenResNorm(MagnitudeType Tolerance, Teuchos::RCP<MV> weights, int quorum, bool showMaxResNormOnly) + : tolerance_(Tolerance), + quorum_(quorum), + showMaxResNormOnly_(showMaxResNormOnly), + resnormtype_(TwoNorm), + scaletype_(NormOfInitRes), + scalenormtype_(TwoNorm), + scalevalue_(Teuchos::ScalarTraits<MagnitudeType>::one()), + status_(Undefined), + curBlksz_(0), + curNumRHS_(0), + curLSNum_(0), + numrhs_(0), + firstcallCheckStatus_(true), + firstcallDefineResForm_(true), + firstcallDefineScaleForm_(true), + weights_(weights), + ensemble_iterations(EnsembleTraits<ScalarType>::size, 0) +{ + // This constructor will compute the residual ||r_i||/||r0_i|| <= tolerance using the 2-norm of + // the explicit residual std::vector. +} + +template <class ScalarType, class MV, class OP> +StatusTestWeightedGenResNorm<ScalarType, MV, OP>::~StatusTestWeightedGenResNorm() +{ +} + +template <class ScalarType, class MV, class OP> +void StatusTestWeightedGenResNorm<ScalarType, MV, OP>::reset() +{ + status_ = Undefined; + curBlksz_ = 0; + curLSNum_ = 0; + curLSIdx_.resize(0); + numrhs_ = 0; + ind_.resize(0); + firstcallCheckStatus_ = true; + curSoln_ = Teuchos::null; +} + +template <class ScalarType, class MV, class OP> +int StatusTestWeightedGenResNorm<ScalarType, MV, OP>::defineResForm(ResType TypeOfResidual, NormType TypeOfNorm) +{ + TEUCHOS_TEST_FOR_EXCEPTION(firstcallDefineResForm_ == false, StatusTestError, + "StatusTestWeightedGenResNorm::defineResForm(): The residual form has already been defined."); + firstcallDefineResForm_ = false; + + resnormtype_ = TypeOfNorm; + + return (0); +} + +template <class ScalarType, class MV, class OP> +int StatusTestWeightedGenResNorm<ScalarType, MV, OP>::defineScaleForm(ScaleType TypeOfScaling, NormType TypeOfNorm, + MagnitudeType ScaleValue) +{ + TEUCHOS_TEST_FOR_EXCEPTION(firstcallDefineScaleForm_ == false, StatusTestError, + "StatusTestWeightedGenResNorm::defineScaleForm(): The scaling type has already been defined."); + firstcallDefineScaleForm_ = false; + + scaletype_ = TypeOfScaling; + scalenormtype_ = TypeOfNorm; + scalevalue_ = ScaleValue; + + return (0); +} + +template <class ScalarType, class MV, class OP> +StatusType StatusTestWeightedGenResNorm<ScalarType, MV, OP>::checkStatus(Iteration<ScalarType, MV, OP> *iSolver) +{ + typedef EnsembleTraits<ScalarType> ET; + const int ensemble_size = ET::size; + MagnitudeType zero = Teuchos::ScalarTraits<MagnitudeType>::zero(); + const LinearProblem<ScalarType, MV, OP> &lp = iSolver->getProblem(); + // Compute scaling term (done once for each block that's being solved) + if (firstcallCheckStatus_) + { + StatusType status = firstCallCheckStatusSetup(iSolver); + if (status == Failed) + { + status_ = Failed; + return (status_); + } + } + // + // This section computes the norm of the residual std::vector + // + if (curLSNum_ != lp.getLSNumber()) + { + // + // We have moved on to the next rhs block + // + curLSNum_ = lp.getLSNumber(); + curLSIdx_ = lp.getLSIndex(); + curBlksz_ = (int)curLSIdx_.size(); + int validLS = 0; + for (int i = 0; i < curBlksz_; ++i) + { + if (curLSIdx_[i] > -1 && curLSIdx_[i] < numrhs_) + validLS++; + } + curNumRHS_ = validLS; + curSoln_ = Teuchos::null; + // + } + else + { + // + // We are in the same rhs block, return if we are converged + // + if (status_ == Passed) + { + return status_; + } + } + { + // + // Request the true residual for this block of right-hand sides. + // + Teuchos::RCP<MV> cur_update = iSolver->getCurrentUpdate(); + curSoln_ = lp.updateSolution(cur_update); + Teuchos::RCP<MV> cur_res = MVT::Clone(*curSoln_, MVT::GetNumberVecs(*curSoln_)); + lp.computeCurrResVec(&*cur_res, &*curSoln_); + std::vector<MagnitudeType> tmp_resvector(MVT::GetNumberVecs(*cur_res)); + MvWNorm(*cur_res, *weights_, tmp_resvector, resnormtype_); + typename std::vector<int>::iterator p = curLSIdx_.begin(); + for (int i = 0; p < curLSIdx_.end(); ++p, ++i) + { + // Check if this index is valid + if (*p != -1) + resvector_[*p] = tmp_resvector[i]; + } + } + // + // Compute the new linear system residuals for testing. + // (if any of them don't meet the tolerance or are NaN, then we exit with that status) + // + if (scalevector_.size() > 0) + { + typename std::vector<int>::iterator p = curLSIdx_.begin(); + for (; p < curLSIdx_.end(); ++p) + { + // Check if this index is valid + if (*p != -1) + { + // Scale the std::vector accordingly + if (scalevector_[*p] != zero) + { + // Don't intentionally divide by zero. + testvector_[*p] = resvector_[*p] / scalevector_[*p] / scalevalue_; + } + else + { + testvector_[*p] = resvector_[*p] / scalevalue_; + } + } + } + } + else + { + typename std::vector<int>::iterator p = curLSIdx_.begin(); + for (; p < curLSIdx_.end(); ++p) + { + // Check if this index is valid + if (*p != -1) + testvector_[*p] = resvector_[*p] / scalevalue_; + } + } + + // Check status of new linear system residuals and see if we have the quorum. + int have = 0; + ind_.resize(curLSIdx_.size()); + typename std::vector<int>::iterator p = curLSIdx_.begin(); + for (; p < curLSIdx_.end(); ++p) + { + // Check if this index is valid + if (*p != -1) + { + // Check if any of the residuals are larger than the tolerance. + bool all_converged = true; + for (int ii = 0; ii < ensemble_size; ++ii) + { + if (ET::coeff(testvector_[*p], ii) > ET::coeff(tolerance_, ii)) + { + ++ensemble_iterations[ii]; + all_converged = false; + } + else if (!(ET::coeff(testvector_[*p], ii) <= ET::coeff(tolerance_, ii))) + { + // Throw an std::exception if a NaN is found. + status_ = Failed; + TEUCHOS_TEST_FOR_EXCEPTION(true, StatusTestError, "StatusTestWeightedGenResNorm::checkStatus(): NaN has been detected."); + } + } + if (all_converged) + { + ind_[have] = *p; + have++; + } + } + } + ind_.resize(have); + int need = (quorum_ == -1) ? curNumRHS_ : quorum_; + status_ = (have >= need) ? Passed : Failed; + + // Return the current status + return status_; +} + +template <class ScalarType, class MV, class OP> +void StatusTestWeightedGenResNorm<ScalarType, MV, OP>::print(std::ostream &os, int indent) const +{ + for (int j = 0; j < indent; j++) + os << ' '; + printStatus(os, status_); + os << resFormStr(); + if (status_ == Undefined) + os << ", tol = " << tolerance_ << std::endl; + else + { + os << std::endl; + if (showMaxResNormOnly_ && curBlksz_ > 1) + { + const MagnitudeType maxRelRes = *std::max_element( + testvector_.begin() + curLSIdx_[0], testvector_.begin() + curLSIdx_[curBlksz_ - 1]); + for (int j = 0; j < indent + 13; j++) + os << ' '; + os << "max{residual[" << curLSIdx_[0] << "..." << curLSIdx_[curBlksz_ - 1] << "]} = " << maxRelRes + << (maxRelRes <= tolerance_ ? " <= " : " > ") << tolerance_ << std::endl; + } + else + { + for (int i = 0; i < numrhs_; i++) + { + for (int j = 0; j < indent + 13; j++) + os << ' '; + os << "residual [ " << i << " ] = " << testvector_[i]; + os << ((testvector_[i] < tolerance_) ? " < " : (testvector_[i] == tolerance_) ? " == " : (testvector_[i] > tolerance_) ? " > " : " ") << tolerance_ << std::endl; + } + } + } + os << std::endl; +} + +template <class ScalarType, class MV, class OP> +void StatusTestWeightedGenResNorm<ScalarType, MV, OP>::printStatus(std::ostream &os, StatusType type) const +{ + os << std::left << std::setw(13) << std::setfill('.'); + switch (type) + { + case Passed: + os << "Converged"; + break; + case Failed: + os << "Unconverged"; + break; + case Undefined: + default: + os << "**"; + break; + } + os << std::left << std::setfill(' '); + return; +} + +template <class ScalarType, class MV, class OP> +StatusType StatusTestWeightedGenResNorm<ScalarType, MV, OP>::firstCallCheckStatusSetup(Iteration<ScalarType, MV, OP> *iSolver) +{ + int i; + MagnitudeType zero = Teuchos::ScalarTraits<MagnitudeType>::zero(); + MagnitudeType one = Teuchos::ScalarTraits<MagnitudeType>::one(); + const LinearProblem<ScalarType, MV, OP> &lp = iSolver->getProblem(); + // Compute scaling term (done once for each block that's being solved) + if (firstcallCheckStatus_) + { + // + // Get some current solver information. + // + firstcallCheckStatus_ = false; + + if (scaletype_ == NormOfRHS) + { + Teuchos::RCP<const MV> rhs = lp.getRHS(); + numrhs_ = MVT::GetNumberVecs(*rhs); + scalevector_.resize(numrhs_); + MvWNorm(*rhs, *weights_, scalevector_, scalenormtype_); + } + else if (scaletype_ == NormOfInitRes || scaletype_ == NormOfFullInitRes || scaletype_ == NormOfFullScaledInitRes) + { + Teuchos::RCP<const MV> init_res = lp.getInitResVec(); + numrhs_ = MVT::GetNumberVecs(*init_res); + scalevector_.resize(numrhs_); + MvWNorm(*init_res, *weights_, scalevector_, scalenormtype_); + } + else if (scaletype_ == NormOfPrecInitRes || scaletype_ == NormOfFullPrecInitRes || scaletype_ == NormOfFullScaledPrecInitRes) + { + Teuchos::RCP<const MV> init_res = lp.getInitPrecResVec(); + numrhs_ = MVT::GetNumberVecs(*init_res); + scalevector_.resize(numrhs_); + MvWNorm(*init_res, *weights_, scalevector_, scalenormtype_); + } + else + { + numrhs_ = MVT::GetNumberVecs(*(lp.getRHS())); + } + + resvector_.resize(numrhs_); + testvector_.resize(numrhs_); + + curLSNum_ = lp.getLSNumber(); + curLSIdx_ = lp.getLSIndex(); + curBlksz_ = (int)curLSIdx_.size(); + int validLS = 0; + for (i = 0; i < curBlksz_; ++i) + { + if (curLSIdx_[i] > -1 && curLSIdx_[i] < numrhs_) + validLS++; + } + curNumRHS_ = validLS; + // + // Initialize the testvector. + for (i = 0; i < numrhs_; i++) + { + testvector_[i] = one; + } + + // Return an error if the scaling is zero. + if (scalevalue_ == zero) + { + return Failed; + } + } + return Undefined; +} + +} // end namespace Belos + +#endif /* BELOS_STATUS_TEST_RESNORM_H */ diff --git a/katoptron/src/BelosXpetraStatusTestGenResSubNorm_MP_Vector.hpp b/katoptron/src/BelosXpetraStatusTestGenResSubNorm_MP_Vector.hpp new file mode 100644 index 0000000000000000000000000000000000000000..c06459d54ffbc7f75b579abf4b2f3fe95d53db5b --- /dev/null +++ b/katoptron/src/BelosXpetraStatusTestGenResSubNorm_MP_Vector.hpp @@ -0,0 +1,1537 @@ +// @HEADER +// +// *********************************************************************** +// +// MueLu: A package for multigrid based preconditioning +// Copyright 2012 Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact +// Jonathan Hu (jhu@sandia.gov) +// Andrey Prokopenko (aprokop@sandia.gov) +// Ray Tuminaro (rstumin@sandia.gov) +// Tobias Wiesner (tawiesn@sandia.gov) +// +// *********************************************************************** +// +// @HEADER +#ifndef BELOS_XPETRA_STATUS_TEST_GEN_RES_SUB_NORM_MP_VECTORHPP +#define BELOS_XPETRA_STATUS_TEST_GEN_RES_SUB_NORM_MP_VECTORHPP + +#include "Stokhos_config.h" + +#ifdef HAVE_STOKHOS_ENSEMBLE_REDUCT + +#include "Xpetra_ConfigDefs.hpp" + +#include "Xpetra_BlockedCrsMatrix.hpp" + +#include "MueLu_Exceptions.hpp" + +#include <BelosConfigDefs.hpp> +#include <BelosTypes.hpp> +#include <BelosOperatorT.hpp> +#include <BelosXpetraAdapterOperator.hpp> +#include <BelosStatusTestGenResSubNorm.hpp> +#include <BelosXpetraStatusTestGenResSubNorm.hpp> +#include "EnsembleTraits.h" + +namespace Belos +{ + +/*! \brief Template specialization of Belos::StatusTestGenResSubNorm class using the + * Xpetra::MultiVector and Belos::OperatorT MueLu adapter class. + */ +template <class Storage, class LocalOrdinal, class GlobalOrdinal, class Node> +class StatusTestGenResSubNorm<typename Teuchos::ScalarTraits<Sacado::MP::Vector<Storage>>::magnitudeType, Xpetra::MultiVector<Sacado::MP::Vector<Storage>, LocalOrdinal, GlobalOrdinal, Node>, Belos::OperatorT<Xpetra::MultiVector<Sacado::MP::Vector<Storage>, LocalOrdinal, GlobalOrdinal, Node>>> + : public StatusTestResNorm<typename Teuchos::ScalarTraits<Sacado::MP::Vector<Storage>>::magnitudeType, Xpetra::MultiVector<Sacado::MP::Vector<Storage>, LocalOrdinal, GlobalOrdinal, Node>, Belos::OperatorT<Xpetra::MultiVector<Sacado::MP::Vector<Storage>, LocalOrdinal, GlobalOrdinal, Node>>> +{ + +public: + // Convenience typedefs + typedef Sacado::MP::Vector<Storage> ScalarType; + + typedef Xpetra::MultiVector<ScalarType, LocalOrdinal, GlobalOrdinal, Node> MV; + typedef Xpetra::BlockedCrsMatrix<ScalarType, LocalOrdinal, GlobalOrdinal, Node> BCRS; + typedef Xpetra::MapExtractor<ScalarType, LocalOrdinal, GlobalOrdinal, Node> ME; + typedef Belos::OperatorT<MV> OP; + + typedef Teuchos::ScalarTraits<ScalarType> SCT; + typedef typename SCT::magnitudeType MagnitudeType; + typedef MultiVecTraits<ScalarType, MV> MVT; + typedef OperatorTraits<ScalarType, MV, OP> OT; + + //! @name Constructors/destructors. + //@{ + //! Constructor + /*! The constructor takes a single argument specifying the tolerance (\f$\tau\f$). + If none of the form definition methods are called, we use \f$\|r\|/\|r^{(0)}\| \le \tau\f$ + as the stopping criterion, where \f$\|r\|\f$ always uses the true residual and + \f$\|r^{(0)}\|\f$ is the corresponding norm of the initial residual. + The used norm can be specified by defineResForm and defineScaleForm. + + @param Tolerance: Specifies tolerance \f$\tau\f + @param subIdx: index of block row in the n x n block system we want to check the residual of + @param quorum: Number of residual (sub-)vectors which are needed to be within the tolerance before check is considered to be passed + @param showMaxResNormOnly: for output only + + */ + StatusTestGenResSubNorm(MagnitudeType Tolerance, size_t subIdx, int quorum = -1, bool showMaxResNormOnly = false) + : tolerance_(Tolerance), + subIdx_(subIdx), + quorum_(quorum), + showMaxResNormOnly_(showMaxResNormOnly), + resnormtype_(TwoNorm), + scaletype_(NormOfInitRes), + scalenormtype_(TwoNorm), + scalevalue_(Teuchos::ScalarTraits<MagnitudeType>::one()), + status_(Undefined), + curBlksz_(0), + curNumRHS_(0), + curLSNum_(0), + numrhs_(0), + firstcallCheckStatus_(true), + firstcallDefineResForm_(true), + firstcallDefineScaleForm_(true), + mapExtractor_(Teuchos::null), + ensemble_iterations(EnsembleTraits<MagnitudeType>::size, 0) {} + + //! Destructor + virtual ~StatusTestGenResSubNorm(){}; + //@} + + //! @name Form and parameter definition methods. + //@{ + + //! Define form of the residual, its norm and optional weighting std::vector. + /*! This method defines the form of \f$\|r\|\f$. We specify: + <ul> + <li> The norm to be used on the residual (this may be different than the norm used in + DefineScaleForm()). + </ul> + */ + int defineResForm(NormType TypeOfNorm) + { + TEUCHOS_TEST_FOR_EXCEPTION(firstcallDefineResForm_ == false, StatusTestError, + "StatusTestGenResSubNorm::defineResForm(): The residual form has already been defined."); + firstcallDefineResForm_ = false; + + resnormtype_ = TypeOfNorm; + + return (0); + } + + //! Define form of the scaling, its norm, its optional weighting std::vector, or, alternatively, define an explicit value. + /*! This method defines the form of how the residual is scaled (if at all). It operates in two modes: + <ol> + <li> User-provided scaling value: + <ul> + <li> Set argument TypeOfScaling to UserProvided. + <li> Set ScaleValue to a non-zero value that the residual norm will be divided by. + <li> TypeOfNorm argument will be ignored. + <li> Sample use: Define ScaleValue = \f$\|A\|_{\infty}\f$ where \f$ A \f$ is the matrix + of the linear problem. + </ul> + + <li> Use a supported Scaling Form: + <ul> + <li> Define TypeOfScaling to be the norm of the right hand side, the initial residual std::vector, + or to none. + <li> Define norm to be used on the scaling std::vector (this may be different than the norm used + in DefineResForm()). + </ul> + </ol> + */ + int defineScaleForm(ScaleType TypeOfScaling, NormType TypeOfNorm, MagnitudeType ScaleValue = Teuchos::ScalarTraits<MagnitudeType>::one()) + { + TEUCHOS_TEST_FOR_EXCEPTION(firstcallDefineScaleForm_ == false, StatusTestError, + "StatusTestGenResSubNorm::defineScaleForm(): The scaling type has already been defined."); + firstcallDefineScaleForm_ = false; + + scaletype_ = TypeOfScaling; + scalenormtype_ = TypeOfNorm; + scalevalue_ = ScaleValue; + + return (0); + } + + //! Set the value of the tolerance + /*! We allow the tolerance to be reset for cases where, in the process of testing the residual, + we find that the initial tolerance was too tight or too lax. + */ + int setTolerance(MagnitudeType tolerance) + { + tolerance_ = tolerance; + return (0); + } + + //! Set the block index of which we want to check the norm of the sub-residuals + /*! It does not really make sense to change/reset the index during the solution process + */ + int setSubIdx(size_t subIdx) + { + subIdx_ = subIdx; + return (0); + } + + //! Sets the number of residuals that must pass the convergence test before Passed is returned. + //! \note If \c quorum=-1 then all residuals must pass the convergence test before Passed is returned. + int setQuorum(int quorum) + { + quorum_ = quorum; + return (0); + } + + //! Set whether the only maximum residual norm is displayed when the print() method is called + int setShowMaxResNormOnly(bool showMaxResNormOnly) + { + showMaxResNormOnly_ = showMaxResNormOnly; + return (0); + } + + //@} + + //! @name Status methods + //@{ + //! Check convergence status: Passed, Failed, or Undefined. + /*! This method checks to see if the convergence criteria are met. + Depending on how the residual test is constructed this method will return + the appropriate status type. + + \return StatusType: Passed, Failed, or Undefined. + */ + StatusType checkStatus(Iteration<MagnitudeType, MV, OP> *iSolver) + { + typedef EnsembleTraits<MagnitudeType> ET; + const int ensemble_size = ET::size; + MagnitudeType zero = Teuchos::ScalarTraits<MagnitudeType>::zero(); + const LinearProblem<MagnitudeType, MV, OP> &lp = iSolver->getProblem(); + // Compute scaling term (done once for each block that's being solved) + if (firstcallCheckStatus_) + { + StatusType status = firstCallCheckStatusSetup(iSolver); + if (status == Failed) + { + status_ = Failed; + return (status_); + } + } + + // + // This section computes the norm of the residual std::vector + // + if (curLSNum_ != lp.getLSNumber()) + { + // + // We have moved on to the next rhs block + // + curLSNum_ = lp.getLSNumber(); + curLSIdx_ = lp.getLSIndex(); + curBlksz_ = (int)curLSIdx_.size(); + int validLS = 0; + for (int i = 0; i < curBlksz_; ++i) + { + if (curLSIdx_[i] > -1 && curLSIdx_[i] < numrhs_) + validLS++; + } + curNumRHS_ = validLS; + curSoln_ = Teuchos::null; + // + } + else + { + // + // We are in the same rhs block, return if we are converged + // + if (status_ == Passed) + { + return status_; + } + } + + // + // Request the true residual for this block of right-hand sides. + // + Teuchos::RCP<MV> cur_update = iSolver->getCurrentUpdate(); + curSoln_ = lp.updateSolution(cur_update); + Teuchos::RCP<MV> cur_res = MVT::Clone(*curSoln_, MVT::GetNumberVecs(*curSoln_)); + lp.computeCurrResVec(&*cur_res, &*curSoln_); + std::vector<MagnitudeType> tmp_resvector(MVT::GetNumberVecs(*cur_res)); + MvSubNorm(*cur_res, subIdx_, tmp_resvector, resnormtype_); + + typename std::vector<int>::iterator p = curLSIdx_.begin(); + for (int i = 0; p < curLSIdx_.end(); ++p, ++i) + { + // Check if this index is valid + if (*p != -1) + resvector_[*p] = tmp_resvector[i]; + } + + // + // Compute the new linear system residuals for testing. + // (if any of them don't meet the tolerance or are NaN, then we exit with that status) + // + if (scalevector_.size() > 0) + { + typename std::vector<int>::iterator pp = curLSIdx_.begin(); + for (; pp < curLSIdx_.end(); ++pp) + { + // Check if this index is valid + if (*pp != -1) + { + // Scale the std::vector accordingly + if (scalevector_[*pp] != zero) + { + // Don't intentionally divide by zero. + testvector_[*pp] = resvector_[*pp] / scalevector_[*pp] / scalevalue_; + } + else + { + testvector_[*pp] = resvector_[*pp] / scalevalue_; + } + } + } + } + else + { + typename std::vector<int>::iterator pp = curLSIdx_.begin(); + for (; pp < curLSIdx_.end(); ++pp) + { + // Check if this index is valid + if (*pp != -1) + testvector_[*pp] = resvector_[*pp] / scalevalue_; + } + } + // Check status of new linear system residuals and see if we have the quorum. + int have = 0; + ind_.resize(curLSIdx_.size()); + typename std::vector<int>::iterator p2 = curLSIdx_.begin(); + for (; p2 < curLSIdx_.end(); ++p2) + { + // Check if this index is valid + if (*p2 != -1) + { + // Check if any of the residuals are larger than the tolerance. + bool all_converged = true; + for (int ii = 0; ii < ensemble_size; ++ii) + { + if (ET::coeff(testvector_[*p2], ii) > ET::coeff(tolerance_, ii)) + { + ++ensemble_iterations[ii]; + all_converged = false; + } + else if (!(ET::coeff(testvector_[*p2], ii) <= ET::coeff(tolerance_, ii))) + { + // Throw an std::exception if the current residual norm is + // NaN. We know that it's NaN because it is not less than, + // equal to, or greater than the current tolerance. This is + // only possible if either the residual norm or the current + // tolerance is NaN; we assume the former. We also mark the + // test as failed, in case you want to catch the exception. + status_ = Failed; + TEUCHOS_TEST_FOR_EXCEPTION(true, StatusTestError, "StatusTestGenResSubNorm::checkStatus(): NaN has been detected."); + } + } + if (all_converged) + { + ind_[have] = *p2; + have++; + } + } + } + ind_.resize(have); + int need = (quorum_ == -1) ? curNumRHS_ : quorum_; + status_ = (have >= need) ? Passed : Failed; + // Return the current status + return status_; + } + + //! Return the result of the most recent CheckStatus call. + StatusType getStatus() const { return (status_); }; + //@} + + //! @name Reset methods + //@{ + + //! Resets the internal configuration to the initial state. + void reset() + { + status_ = Undefined; + curBlksz_ = 0; + curLSNum_ = 0; + curLSIdx_.resize(0); + numrhs_ = 0; + ind_.resize(0); + firstcallCheckStatus_ = true; + curSoln_ = Teuchos::null; + } + + //@} + + //! @name Print methods + //@{ + + //! Output formatted description of stopping test to output stream. + void print(std::ostream &os, int indent = 0) const + { + os.setf(std::ios_base::scientific); + for (int j = 0; j < indent; j++) + os << ' '; + printStatus(os, status_); + os << resFormStr(); + if (status_ == Undefined) + os << ", tol = " << tolerance_ << std::endl; + else + { + os << std::endl; + if (showMaxResNormOnly_ && curBlksz_ > 1) + { + const MagnitudeType maxRelRes = *std::max_element( + testvector_.begin() + curLSIdx_[0], testvector_.begin() + curLSIdx_[curBlksz_ - 1]); + for (int j = 0; j < indent + 13; j++) + os << ' '; + os << "max{residual[" << curLSIdx_[0] << "..." << curLSIdx_[curBlksz_ - 1] << "]} = " << maxRelRes + << (maxRelRes <= tolerance_ ? " <= " : " > ") << tolerance_ << std::endl; + } + else + { + for (int i = 0; i < numrhs_; i++) + { + for (int j = 0; j < indent + 13; j++) + os << ' '; + os << "residual [ " << i << " ] = " << testvector_[i]; + os << ((testvector_[i] < tolerance_) ? " < " : (testvector_[i] == tolerance_) ? " == " : (testvector_[i] > tolerance_) ? " > " : " ") << tolerance_ << std::endl; + } + } + } + os << std::endl; + } + + //! Print message for each status specific to this stopping test. + void printStatus(std::ostream &os, StatusType type) const + { + os << std::left << std::setw(13) << std::setfill('.'); + switch (type) + { + case Passed: + os << "Converged"; + break; + case Failed: + os << "Unconverged"; + break; + case Undefined: + default: + os << "**"; + break; + } + os << std::left << std::setfill(' '); + return; + } + //@} + + //! @name Methods to access data members. + //@{ + + //! Returns the current solution estimate that was computed for the most recent residual test. + Teuchos::RCP<MV> getSolution() { return curSoln_; } + + //! Returns the number of residuals that must pass the convergence test before Passed is returned. + //! \note If \c quorum=-1 then all residuals must pass the convergence test before Passed is returned. + int getQuorum() const { return quorum_; } + + //! Returns the index of the block row the norms are calculated for + size_t getSubIdx() const { return subIdx_; } + + //! Returns whether the only maximum residual norm is displayed when the print() method is called + bool getShowMaxResNormOnly() { return showMaxResNormOnly_; } + + //! Returns the std::vector containing the indices of the residuals that passed the test. + std::vector<int> convIndices() { return ind_; } + + //! Returns the value of the tolerance, \f$ \tau \f$, set in the constructor. + MagnitudeType getTolerance() const { return (tolerance_); }; + + //! Returns the test value, \f$ \frac{\|r\|}{\sigma} \f$, computed in most recent call to CheckStatus. + const std::vector<MagnitudeType> *getTestValue() const { return (&testvector_); }; + + //! Returns the residual norm value, \f$ \|r\| \f$, computed in most recent call to CheckStatus. + const std::vector<MagnitudeType> *getResNormValue() const { return (&resvector_); }; + + //! Returns the scaled norm value, \f$ \sigma \f$. + const std::vector<MagnitudeType> *getScaledNormValue() const { return (&scalevector_); }; + + //! Returns a boolean indicating a loss of accuracy has been detected in computing the residual. + //! \note This status test does not check for loss of accuracy, so this method will always return false. + bool getLOADetected() const { return false; } + + const std::vector<int> getEnsembleIterations() const { return ensemble_iterations; } + + //@} + + /** @name Misc. */ + //@{ + + /** \brief Call to setup initial scaling std::vector. + * + * After this function is called <tt>getScaledNormValue()</tt> can be called + * to get the scaling std::vector. + */ + StatusType firstCallCheckStatusSetup(Iteration<MagnitudeType, MV, OP> *iSolver) + { + int i; + MagnitudeType zero = Teuchos::ScalarTraits<MagnitudeType>::zero(); + MagnitudeType one = Teuchos::ScalarTraits<MagnitudeType>::one(); + const LinearProblem<MagnitudeType, MV, OP> &lp = iSolver->getProblem(); + // Compute scaling term (done once for each block that's being solved) + if (firstcallCheckStatus_) + { + // + // Get some current solver information. + // + firstcallCheckStatus_ = false; + + // try to access the underlying blocked operator + Teuchos::RCP<const OP> Op = lp.getOperator(); + Teuchos::RCP<const Belos::XpetraOp<ScalarType, LocalOrdinal, GlobalOrdinal, Node>> xOp = + Teuchos::rcp_dynamic_cast<const Belos::XpetraOp<ScalarType, LocalOrdinal, GlobalOrdinal, Node>>(Op); + TEUCHOS_TEST_FOR_EXCEPTION(xOp.is_null(), MueLu::Exceptions::BadCast, "Bad cast from \'const Belos::OperatorT\' to \'const Belos::XpetraOp\'. The origin type is " << typeid(const OP).name() << "."); + Teuchos::RCP<const Xpetra::Operator<ScalarType, LocalOrdinal, GlobalOrdinal, Node>> xIntOp = + xOp->getOperator(); + TEUCHOS_TEST_FOR_EXCEPTION(xIntOp.is_null(), MueLu::Exceptions::BadCast, "Cannot access Xpetra::Operator stored in Belos::XpetraOperator."); + Teuchos::RCP<const Xpetra::Matrix<ScalarType, LocalOrdinal, GlobalOrdinal, Node>> xMat = + Teuchos::rcp_dynamic_cast<const Xpetra::Matrix<ScalarType, LocalOrdinal, GlobalOrdinal, Node>>(xIntOp); + TEUCHOS_TEST_FOR_EXCEPTION(xMat.is_null(), MueLu::Exceptions::RuntimeError, "Cannot access Xpetra::Matrix stored in Belos::XpetraOp. Error."); + Teuchos::RCP<const Xpetra::BlockedCrsMatrix<ScalarType, LocalOrdinal, GlobalOrdinal, Node>> bMat = Teuchos::rcp_dynamic_cast<const Xpetra::BlockedCrsMatrix<ScalarType, LocalOrdinal, GlobalOrdinal, Node>>(xMat); + TEUCHOS_TEST_FOR_EXCEPTION(bMat.is_null(), MueLu::Exceptions::BadCast, "Bad cast from \'const Xpetra::Matrix\' to \'const Xpetra::BlockedCrsMatrix\'. The origin type is " << typeid(const Xpetra::Matrix<ScalarType, LocalOrdinal, GlobalOrdinal, Node>).name() << ". Note: you need a BlockedCrsMatrix object for the StatusTestGenResSubNorm to work!"); + mapExtractor_ = bMat->getRangeMapExtractor(); + TEUCHOS_TEST_FOR_EXCEPTION(mapExtractor_.is_null(), MueLu::Exceptions::RuntimeError, "Could not extract map extractor from BlockedCrsMatrix. Error."); + TEUCHOS_TEST_FOR_EXCEPTION(mapExtractor_->NumMaps() <= subIdx_, MueLu::Exceptions::RuntimeError, "The multivector is only split into " << mapExtractor_->NumMaps() << " sub parts. Cannot access sub-block " << subIdx_ << "."); + + // calculate initial norms + if (scaletype_ == NormOfRHS) + { + Teuchos::RCP<const MV> rhs = lp.getRHS(); + numrhs_ = MVT::GetNumberVecs(*rhs); + scalevector_.resize(numrhs_); + MvSubNorm(*rhs, subIdx_, scalevector_, scalenormtype_); + } + else if (scaletype_ == NormOfInitRes) + { + Teuchos::RCP<const MV> init_res = lp.getInitResVec(); + numrhs_ = MVT::GetNumberVecs(*init_res); + scalevector_.resize(numrhs_); + MvSubNorm(*init_res, subIdx_, scalevector_, scalenormtype_); + } + else if (scaletype_ == NormOfPrecInitRes) + { + Teuchos::RCP<const MV> init_res = lp.getInitPrecResVec(); + numrhs_ = MVT::GetNumberVecs(*init_res); + scalevector_.resize(numrhs_); + MvSubNorm(*init_res, subIdx_, scalevector_, scalenormtype_); + } + else if (scaletype_ == NormOfFullInitRes) + { + Teuchos::RCP<const MV> init_res = lp.getInitResVec(); + numrhs_ = MVT::GetNumberVecs(*init_res); + scalevector_.resize(numrhs_); + MVT::MvNorm(*init_res, scalevector_, scalenormtype_); + scalevalue_ = one; + } + else if (scaletype_ == NormOfFullPrecInitRes) + { + Teuchos::RCP<const MV> init_res = lp.getInitPrecResVec(); + numrhs_ = MVT::GetNumberVecs(*init_res); + scalevector_.resize(numrhs_); + MVT::MvNorm(*init_res, scalevector_, scalenormtype_); + scalevalue_ = one; + } + else if (scaletype_ == NormOfFullScaledInitRes) + { + Teuchos::RCP<const MV> init_res = lp.getInitResVec(); + numrhs_ = MVT::GetNumberVecs(*init_res); + scalevector_.resize(numrhs_); + MVT::MvNorm(*init_res, scalevector_, scalenormtype_); + MvScalingRatio(*init_res, subIdx_, scalevalue_); + } + else if (scaletype_ == NormOfFullScaledPrecInitRes) + { + Teuchos::RCP<const MV> init_res = lp.getInitPrecResVec(); + numrhs_ = MVT::GetNumberVecs(*init_res); + scalevector_.resize(numrhs_); + MVT::MvNorm(*init_res, scalevector_, scalenormtype_); + MvScalingRatio(*init_res, subIdx_, scalevalue_); + } + else + { + numrhs_ = MVT::GetNumberVecs(*(lp.getRHS())); + } + + resvector_.resize(numrhs_); + testvector_.resize(numrhs_); + + curLSNum_ = lp.getLSNumber(); + curLSIdx_ = lp.getLSIndex(); + curBlksz_ = (int)curLSIdx_.size(); + int validLS = 0; + for (i = 0; i < curBlksz_; ++i) + { + if (curLSIdx_[i] > -1 && curLSIdx_[i] < numrhs_) + validLS++; + } + curNumRHS_ = validLS; + // + // Initialize the testvector. + for (i = 0; i < numrhs_; i++) + { + testvector_[i] = one; + } + + // Return an error if the scaling is zero. + if (scalevalue_ == zero) + { + return Failed; + } + } + return Undefined; + } + //@} + + /** \name Overridden from Teuchos::Describable */ + //@{ + + /** \brief Method to return description of the maximum iteration status test */ + std::string description() const + { + std::ostringstream oss; + oss << "Belos::StatusTestGenResSubNorm<>: " << resFormStr(); + oss << ", tol = " << tolerance_; + return oss.str(); + } + //@} + +protected: +private: + //! @name Private methods. + //@{ + /** \brief Description of current residual form */ + std::string resFormStr() const + { + std::ostringstream oss; + oss << "("; + oss << ((resnormtype_ == OneNorm) ? "1-Norm" : (resnormtype_ == TwoNorm) ? "2-Norm" : "Inf-Norm"); + oss << " Exp"; + oss << " Res Vec [" << subIdx_ << "]) "; + + // If there is no residual scaling, return current string. + if (scaletype_ != None) + { + // Insert division sign. + oss << "/ "; + + // Determine output string for scaling, if there is any. + if (scaletype_ == UserProvided) + oss << " (User Scale)"; + else + { + oss << "("; + oss << ((scalenormtype_ == OneNorm) ? "1-Norm" : (resnormtype_ == TwoNorm) ? "2-Norm" : "Inf-Norm"); + if (scaletype_ == NormOfInitRes) + oss << " Res0 [" << subIdx_ << "]"; + else if (scaletype_ == NormOfPrecInitRes) + oss << " Prec Res0 [" << subIdx_ << "]"; + else if (scaletype_ == NormOfFullInitRes) + oss << " Full Res0 [" << subIdx_ << "]"; + else if (scaletype_ == NormOfFullPrecInitRes) + oss << " Full Prec Res0 [" << subIdx_ << "]"; + else if (scaletype_ == NormOfFullScaledInitRes) + oss << " scaled Full Res0 [" << subIdx_ << "]"; + else if (scaletype_ == NormOfFullScaledPrecInitRes) + oss << " scaled Full Prec Res0 [" << subIdx_ << "]"; + else + oss << " RHS [" << subIdx_ << "]"; + oss << ")"; + } + } + + // TODO add a tagging name + + return oss.str(); + } + + //@} + + //! @name Private helper functions + //@{ + + // calculate norm of partial multivector + void MvSubNorm(const MV &mv, size_t block, std::vector<MagnitudeType> &normVec, NormType type = TwoNorm) + { + + Teuchos::RCP<const MV> input = Teuchos::rcpFromRef(mv); + + Teuchos::RCP<const MV> SubVec = mapExtractor_->ExtractVector(input, block); + typedef MultiVecTraits<ScalarType, MV> MVT; + MVT::MvNorm(*SubVec, normVec, type); + } + + // calculate ration of sub-vector length to full vector length (for scalevalue_) + void MvScalingRatio(const MV &mv, size_t block, MagnitudeType &lengthRatio) + { + Teuchos::RCP<const MV> input = Teuchos::rcpFromRef(mv); + + Teuchos::RCP<const MV> SubVec = mapExtractor_->ExtractVector(input, block); + + lengthRatio = Teuchos::as<MagnitudeType>(SubVec->getGlobalLength()) / Teuchos::as<MagnitudeType>(input->getGlobalLength()); + } + //@} + + //! @name Private data members. + //@{ + + //! Tolerance used to determine convergence + MagnitudeType tolerance_; + + //! Index of block row in n x n block system of which we want to check the sub-residuals + size_t subIdx_; + + //! Number of residuals that must pass the convergence test before Passed is returned. + int quorum_; + + //! Determines if the entries for all of the residuals are shown or just the max. + bool showMaxResNormOnly_; + + //! Type of norm to use on residual (OneNorm, TwoNorm, or InfNorm). + NormType resnormtype_; + + //! Type of scaling to use (Norm of RHS, Norm of Initial Residual, None or User provided) + ScaleType scaletype_; + + //! Type of norm to use on the scaling (OneNorm, TwoNorm, or InfNorm) + NormType scalenormtype_; + + //! Scaling value. + MagnitudeType scalevalue_; + + //! Scaling std::vector. + std::vector<MagnitudeType> scalevector_; + + //! Residual norm std::vector. + std::vector<MagnitudeType> resvector_; + + //! Test std::vector = resvector_ / scalevector_ + std::vector<MagnitudeType> testvector_; + + //! Vector containing the indices for the vectors that passed the test. + std::vector<int> ind_; + + //! Most recent solution vector used by this status test. + Teuchos::RCP<MV> curSoln_; + + //! Status + StatusType status_; + + //! The current blocksize of the linear system being solved. + int curBlksz_; + + //! The current number of right-hand sides being solved for. + int curNumRHS_; + + //! The indices of the current number of right-hand sides being solved for. + std::vector<int> curLSIdx_; + + //! The current number of linear systems that have been loaded into the linear problem. + int curLSNum_; + + //! The total number of right-hand sides being solved for. + int numrhs_; + + //! Is this the first time CheckStatus is called? + bool firstcallCheckStatus_; + + //! Is this the first time DefineResForm is called? + bool firstcallDefineResForm_; + + //! Is this the first time DefineScaleForm is called? + bool firstcallDefineScaleForm_; + + //! MapExtractor for range space + Teuchos::RCP<const ME> mapExtractor_; + + //! The number of iterations at which point each ensemble component converges + std::vector<int> ensemble_iterations; + + //@} +}; + +} // namespace Belos + +#else + +#include "Xpetra_ConfigDefs.hpp" + +#include "Xpetra_BlockedCrsMatrix.hpp" + +#include "MueLu_Exceptions.hpp" + +#include <BelosConfigDefs.hpp> +#include <BelosTypes.hpp> +#include <BelosOperatorT.hpp> +#include <BelosXpetraAdapterOperator.hpp> +#include <BelosStatusTestGenResSubNorm.hpp> +#include "EnsembleTraits.h" + +namespace Belos +{ + +/*! \brief Template specialization of Belos::StatusTestGenResSubNorm class using the + * Xpetra::MultiVector and Belos::OperatorT MueLu adapter class. + */ +template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node> +class StatusTestGenResSubNorm<Scalar, Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>, Belos::OperatorT<Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>>> + : public StatusTestResNorm<Scalar, Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>, Belos::OperatorT<Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>>> +{ + +public: + // Convenience typedefs + typedef Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> MV; + typedef Xpetra::BlockedCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> BCRS; + typedef Xpetra::MapExtractor<Scalar, LocalOrdinal, GlobalOrdinal, Node> ME; + typedef Belos::OperatorT<MV> OP; + + typedef Teuchos::ScalarTraits<Scalar> SCT; + typedef typename SCT::magnitudeType MagnitudeType; + typedef MultiVecTraits<Scalar, MV> MVT; + typedef OperatorTraits<Scalar, MV, OP> OT; + + //! @name Constructors/destructors. + //@{ + //! Constructor + /*! The constructor takes a single argument specifying the tolerance (\f$\tau\f$). + If none of the form definition methods are called, we use \f$\|r\|/\|r^{(0)}\| \le \tau\f$ + as the stopping criterion, where \f$\|r\|\f$ always uses the true residual and + \f$\|r^{(0)}\|\f$ is the corresponding norm of the initial residual. + The used norm can be specified by defineResForm and defineScaleForm. + @param Tolerance: Specifies tolerance \f$\tau\f + @param subIdx: index of block row in the n x n block system we want to check the residual of + @param quorum: Number of residual (sub-)vectors which are needed to be within the tolerance before check is considered to be passed + @param showMaxResNormOnly: for output only + */ + StatusTestGenResSubNorm(MagnitudeType Tolerance, size_t subIdx, int quorum = -1, bool showMaxResNormOnly = false) + : tolerance_(Tolerance), + subIdx_(subIdx), + quorum_(quorum), + showMaxResNormOnly_(showMaxResNormOnly), + resnormtype_(TwoNorm), + scaletype_(NormOfInitRes), + scalenormtype_(TwoNorm), + scalevalue_(Teuchos::ScalarTraits<MagnitudeType>::one()), + status_(Undefined), + curBlksz_(0), + curNumRHS_(0), + curLSNum_(0), + numrhs_(0), + firstcallCheckStatus_(true), + firstcallDefineResForm_(true), + firstcallDefineScaleForm_(true), + mapExtractor_(Teuchos::null), + ensemble_iterations(EnsembleTraits<Scalar>::size, 0) {} + + //! Destructor + virtual ~StatusTestGenResSubNorm(){}; + //@} + + //! @name Form and parameter definition methods. + //@{ + + //! Define form of the residual, its norm and optional weighting std::vector. + /*! This method defines the form of \f$\|r\|\f$. We specify: + <ul> + <li> The norm to be used on the residual (this may be different than the norm used in + DefineScaleForm()). + </ul> + */ + int defineResForm(NormType TypeOfNorm) + { + TEUCHOS_TEST_FOR_EXCEPTION(firstcallDefineResForm_ == false, StatusTestError, + "StatusTestGenResSubNorm::defineResForm(): The residual form has already been defined."); + firstcallDefineResForm_ = false; + + resnormtype_ = TypeOfNorm; + + return (0); + } + + //! Define form of the scaling, its norm, its optional weighting std::vector, or, alternatively, define an explicit value. + /*! This method defines the form of how the residual is scaled (if at all). It operates in two modes: + <ol> + <li> User-provided scaling value: + <ul> + <li> Set argument TypeOfScaling to UserProvided. + <li> Set ScaleValue to a non-zero value that the residual norm will be divided by. + <li> TypeOfNorm argument will be ignored. + <li> Sample use: Define ScaleValue = \f$\|A\|_{\infty}\f$ where \f$ A \f$ is the matrix + of the linear problem. + </ul> + <li> Use a supported Scaling Form: + <ul> + <li> Define TypeOfScaling to be the norm of the right hand side, the initial residual std::vector, + or to none. + <li> Define norm to be used on the scaling std::vector (this may be different than the norm used + in DefineResForm()). + </ul> + </ol> + */ + int defineScaleForm(ScaleType TypeOfScaling, NormType TypeOfNorm, MagnitudeType ScaleValue = Teuchos::ScalarTraits<MagnitudeType>::one()) + { + TEUCHOS_TEST_FOR_EXCEPTION(firstcallDefineScaleForm_ == false, StatusTestError, + "StatusTestGenResSubNorm::defineScaleForm(): The scaling type has already been defined."); + firstcallDefineScaleForm_ = false; + + scaletype_ = TypeOfScaling; + scalenormtype_ = TypeOfNorm; + scalevalue_ = ScaleValue; + + return (0); + } + + //! Set the value of the tolerance + /*! We allow the tolerance to be reset for cases where, in the process of testing the residual, + we find that the initial tolerance was too tight or too lax. + */ + int setTolerance(MagnitudeType tolerance) + { + tolerance_ = tolerance; + return (0); + } + + //! Set the block index of which we want to check the norm of the sub-residuals + /*! It does not really make sense to change/reset the index during the solution process + */ + int setSubIdx(size_t subIdx) + { + subIdx_ = subIdx; + return (0); + } + + //! Sets the number of residuals that must pass the convergence test before Passed is returned. + //! \note If \c quorum=-1 then all residuals must pass the convergence test before Passed is returned. + int setQuorum(int quorum) + { + quorum_ = quorum; + return (0); + } + + //! Set whether the only maximum residual norm is displayed when the print() method is called + int setShowMaxResNormOnly(bool showMaxResNormOnly) + { + showMaxResNormOnly_ = showMaxResNormOnly; + return (0); + } + + //@} + + //! @name Status methods + //@{ + //! Check convergence status: Passed, Failed, or Undefined. + /*! This method checks to see if the convergence criteria are met. + Depending on how the residual test is constructed this method will return + the appropriate status type. + \return StatusType: Passed, Failed, or Undefined. + */ + StatusType checkStatus(Iteration<Scalar, MV, OP> *iSolver) + { + typedef EnsembleTraits<Scalar> ET; + const int ensemble_size = ET::size; + MagnitudeType zero = Teuchos::ScalarTraits<MagnitudeType>::zero(); + const LinearProblem<Scalar, MV, OP> &lp = iSolver->getProblem(); + // Compute scaling term (done once for each block that's being solved) + if (firstcallCheckStatus_) + { + StatusType status = firstCallCheckStatusSetup(iSolver); + if (status == Failed) + { + status_ = Failed; + return (status_); + } + } + + // + // This section computes the norm of the residual std::vector + // + if (curLSNum_ != lp.getLSNumber()) + { + // + // We have moved on to the next rhs block + // + curLSNum_ = lp.getLSNumber(); + curLSIdx_ = lp.getLSIndex(); + curBlksz_ = (int)curLSIdx_.size(); + int validLS = 0; + for (int i = 0; i < curBlksz_; ++i) + { + if (curLSIdx_[i] > -1 && curLSIdx_[i] < numrhs_) + validLS++; + } + curNumRHS_ = validLS; + curSoln_ = Teuchos::null; + // + } + else + { + // + // We are in the same rhs block, return if we are converged + // + if (status_ == Passed) + { + return status_; + } + } + + // + // Request the true residual for this block of right-hand sides. + // + Teuchos::RCP<MV> cur_update = iSolver->getCurrentUpdate(); + curSoln_ = lp.updateSolution(cur_update); + Teuchos::RCP<MV> cur_res = MVT::Clone(*curSoln_, MVT::GetNumberVecs(*curSoln_)); + lp.computeCurrResVec(&*cur_res, &*curSoln_); + std::vector<MagnitudeType> tmp_resvector(MVT::GetNumberVecs(*cur_res)); + MvSubNorm(*cur_res, subIdx_, tmp_resvector, resnormtype_); + + typename std::vector<int>::iterator p = curLSIdx_.begin(); + for (int i = 0; p < curLSIdx_.end(); ++p, ++i) + { + // Check if this index is valid + if (*p != -1) + resvector_[*p] = tmp_resvector[i]; + } + + // + // Compute the new linear system residuals for testing. + // (if any of them don't meet the tolerance or are NaN, then we exit with that status) + // + if (scalevector_.size() > 0) + { + typename std::vector<int>::iterator pp = curLSIdx_.begin(); + for (; pp < curLSIdx_.end(); ++pp) + { + // Check if this index is valid + if (*pp != -1) + { + // Scale the std::vector accordingly + if (scalevector_[*pp] != zero) + { + // Don't intentionally divide by zero. + testvector_[*pp] = resvector_[*pp] / scalevector_[*pp] / scalevalue_; + } + else + { + testvector_[*pp] = resvector_[*pp] / scalevalue_; + } + } + } + } + else + { + typename std::vector<int>::iterator pp = curLSIdx_.begin(); + for (; pp < curLSIdx_.end(); ++pp) + { + // Check if this index is valid + if (*pp != -1) + testvector_[*pp] = resvector_[*pp] / scalevalue_; + } + } + // Check status of new linear system residuals and see if we have the quorum. + int have = 0; + ind_.resize(curLSIdx_.size()); + typename std::vector<int>::iterator p2 = curLSIdx_.begin(); + for (; p2 < curLSIdx_.end(); ++p2) + { + // Check if this index is valid + if (*p2 != -1) + { + // Check if any of the residuals are larger than the tolerance. + bool all_converged = true; + for (int ii = 0; ii < ensemble_size; ++ii) + { + if (ET::coeff(testvector_[*p2], ii) > ET::coeff(tolerance_, ii)) + { + ++ensemble_iterations[ii]; + all_converged = false; + } + else if (!(ET::coeff(testvector_[*p2], ii) <= ET::coeff(tolerance_, ii))) + { + // Throw an std::exception if the current residual norm is + // NaN. We know that it's NaN because it is not less than, + // equal to, or greater than the current tolerance. This is + // only possible if either the residual norm or the current + // tolerance is NaN; we assume the former. We also mark the + // test as failed, in case you want to catch the exception. + status_ = Failed; + TEUCHOS_TEST_FOR_EXCEPTION(true, StatusTestError, "StatusTestGenResSubNorm::checkStatus(): NaN has been detected."); + } + } + if (all_converged) + { + ind_[have] = *p2; + have++; + } + } + } + ind_.resize(have); + int need = (quorum_ == -1) ? curNumRHS_ : quorum_; + status_ = (have >= need) ? Passed : Failed; + // Return the current status + return status_; + } + + //! Return the result of the most recent CheckStatus call. + StatusType getStatus() const { return (status_); }; + //@} + + //! @name Reset methods + //@{ + + //! Resets the internal configuration to the initial state. + void reset() + { + status_ = Undefined; + curBlksz_ = 0; + curLSNum_ = 0; + curLSIdx_.resize(0); + numrhs_ = 0; + ind_.resize(0); + firstcallCheckStatus_ = true; + curSoln_ = Teuchos::null; + } + + //@} + + //! @name Print methods + //@{ + + //! Output formatted description of stopping test to output stream. + void print(std::ostream &os, int indent = 0) const + { + os.setf(std::ios_base::scientific); + for (int j = 0; j < indent; j++) + os << ' '; + printStatus(os, status_); + os << resFormStr(); + if (status_ == Undefined) + os << ", tol = " << tolerance_ << std::endl; + else + { + os << std::endl; + if (showMaxResNormOnly_ && curBlksz_ > 1) + { + const MagnitudeType maxRelRes = *std::max_element( + testvector_.begin() + curLSIdx_[0], testvector_.begin() + curLSIdx_[curBlksz_ - 1]); + for (int j = 0; j < indent + 13; j++) + os << ' '; + os << "max{residual[" << curLSIdx_[0] << "..." << curLSIdx_[curBlksz_ - 1] << "]} = " << maxRelRes + << (maxRelRes <= tolerance_ ? " <= " : " > ") << tolerance_ << std::endl; + } + else + { + for (int i = 0; i < numrhs_; i++) + { + for (int j = 0; j < indent + 13; j++) + os << ' '; + os << "residual [ " << i << " ] = " << testvector_[i]; + os << ((testvector_[i] < tolerance_) ? " < " : (testvector_[i] == tolerance_) ? " == " : (testvector_[i] > tolerance_) ? " > " : " ") << tolerance_ << std::endl; + } + } + } + os << std::endl; + } + + //! Print message for each status specific to this stopping test. + void printStatus(std::ostream &os, StatusType type) const + { + os << std::left << std::setw(13) << std::setfill('.'); + switch (type) + { + case Passed: + os << "Converged"; + break; + case Failed: + os << "Unconverged"; + break; + case Undefined: + default: + os << "**"; + break; + } + os << std::left << std::setfill(' '); + return; + } + //@} + + //! @name Methods to access data members. + //@{ + + //! Returns the current solution estimate that was computed for the most recent residual test. + Teuchos::RCP<MV> getSolution() { return curSoln_; } + + //! Returns the number of residuals that must pass the convergence test before Passed is returned. + //! \note If \c quorum=-1 then all residuals must pass the convergence test before Passed is returned. + int getQuorum() const { return quorum_; } + + //! Returns the index of the block row the norms are calculated for + size_t getSubIdx() const { return subIdx_; } + + //! Returns whether the only maximum residual norm is displayed when the print() method is called + bool getShowMaxResNormOnly() { return showMaxResNormOnly_; } + + //! Returns the std::vector containing the indices of the residuals that passed the test. + std::vector<int> convIndices() { return ind_; } + + //! Returns the value of the tolerance, \f$ \tau \f$, set in the constructor. + MagnitudeType getTolerance() const { return (tolerance_); }; + + //! Returns the test value, \f$ \frac{\|r\|}{\sigma} \f$, computed in most recent call to CheckStatus. + const std::vector<MagnitudeType> *getTestValue() const { return (&testvector_); }; + + //! Returns the residual norm value, \f$ \|r\| \f$, computed in most recent call to CheckStatus. + const std::vector<MagnitudeType> *getResNormValue() const { return (&resvector_); }; + + //! Returns the scaled norm value, \f$ \sigma \f$. + const std::vector<MagnitudeType> *getScaledNormValue() const { return (&scalevector_); }; + + //! Returns a boolean indicating a loss of accuracy has been detected in computing the residual. + //! \note This status test does not check for loss of accuracy, so this method will always return false. + bool getLOADetected() const { return false; } + + const std::vector<int> getEnsembleIterations() const { return ensemble_iterations; } + + //@} + + /** @name Misc. */ + //@{ + + /** \brief Call to setup initial scaling std::vector. + * + * After this function is called <tt>getScaledNormValue()</tt> can be called + * to get the scaling std::vector. + */ + StatusType firstCallCheckStatusSetup(Iteration<Scalar, MV, OP> *iSolver) + { + int i; + MagnitudeType zero = Teuchos::ScalarTraits<MagnitudeType>::zero(); + MagnitudeType one = Teuchos::ScalarTraits<MagnitudeType>::one(); + const LinearProblem<Scalar, MV, OP> &lp = iSolver->getProblem(); + // Compute scaling term (done once for each block that's being solved) + if (firstcallCheckStatus_) + { + // + // Get some current solver information. + // + firstcallCheckStatus_ = false; + + // try to access the underlying blocked operator + Teuchos::RCP<const OP> Op = lp.getOperator(); + Teuchos::RCP<const Belos::XpetraOp<Scalar, LocalOrdinal, GlobalOrdinal, Node>> xOp = + Teuchos::rcp_dynamic_cast<const Belos::XpetraOp<Scalar, LocalOrdinal, GlobalOrdinal, Node>>(Op); + TEUCHOS_TEST_FOR_EXCEPTION(xOp.is_null(), MueLu::Exceptions::BadCast, "Bad cast from \'const Belos::OperatorT\' to \'const Belos::XpetraOp\'. The origin type is " << typeid(const OP).name() << "."); + Teuchos::RCP<const Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal, Node>> xIntOp = + xOp->getOperator(); + TEUCHOS_TEST_FOR_EXCEPTION(xIntOp.is_null(), MueLu::Exceptions::BadCast, "Cannot access Xpetra::Operator stored in Belos::XpetraOperator."); + Teuchos::RCP<const Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> xMat = + Teuchos::rcp_dynamic_cast<const Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>(xIntOp); + TEUCHOS_TEST_FOR_EXCEPTION(xMat.is_null(), MueLu::Exceptions::RuntimeError, "Cannot access Xpetra::Matrix stored in Belos::XpetraOp. Error."); + Teuchos::RCP<const Xpetra::BlockedCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>> bMat = Teuchos::rcp_dynamic_cast<const Xpetra::BlockedCrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>>(xMat); + TEUCHOS_TEST_FOR_EXCEPTION(bMat.is_null(), MueLu::Exceptions::BadCast, "Bad cast from \'const Xpetra::Matrix\' to \'const Xpetra::BlockedCrsMatrix\'. The origin type is " << typeid(const Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>).name() << ". Note: you need a BlockedCrsMatrix object for the StatusTestGenResSubNorm to work!"); + mapExtractor_ = bMat->getRangeMapExtractor(); + TEUCHOS_TEST_FOR_EXCEPTION(mapExtractor_.is_null(), MueLu::Exceptions::RuntimeError, "Could not extract map extractor from BlockedCrsMatrix. Error."); + TEUCHOS_TEST_FOR_EXCEPTION(mapExtractor_->NumMaps() <= subIdx_, MueLu::Exceptions::RuntimeError, "The multivector is only split into " << mapExtractor_->NumMaps() << " sub parts. Cannot access sub-block " << subIdx_ << "."); + + // calculate initial norms + if (scaletype_ == NormOfRHS) + { + Teuchos::RCP<const MV> rhs = lp.getRHS(); + numrhs_ = MVT::GetNumberVecs(*rhs); + scalevector_.resize(numrhs_); + MvSubNorm(*rhs, subIdx_, scalevector_, scalenormtype_); + } + else if (scaletype_ == NormOfInitRes) + { + Teuchos::RCP<const MV> init_res = lp.getInitResVec(); + numrhs_ = MVT::GetNumberVecs(*init_res); + scalevector_.resize(numrhs_); + MvSubNorm(*init_res, subIdx_, scalevector_, scalenormtype_); + } + else if (scaletype_ == NormOfPrecInitRes) + { + Teuchos::RCP<const MV> init_res = lp.getInitPrecResVec(); + numrhs_ = MVT::GetNumberVecs(*init_res); + scalevector_.resize(numrhs_); + MvSubNorm(*init_res, subIdx_, scalevector_, scalenormtype_); + } + else if (scaletype_ == NormOfFullInitRes) + { + Teuchos::RCP<const MV> init_res = lp.getInitResVec(); + numrhs_ = MVT::GetNumberVecs(*init_res); + scalevector_.resize(numrhs_); + MVT::MvNorm(*init_res, scalevector_, scalenormtype_); + scalevalue_ = one; + } + else if (scaletype_ == NormOfFullPrecInitRes) + { + Teuchos::RCP<const MV> init_res = lp.getInitPrecResVec(); + numrhs_ = MVT::GetNumberVecs(*init_res); + scalevector_.resize(numrhs_); + MVT::MvNorm(*init_res, scalevector_, scalenormtype_); + scalevalue_ = one; + } + else if (scaletype_ == NormOfFullScaledInitRes) + { + Teuchos::RCP<const MV> init_res = lp.getInitResVec(); + numrhs_ = MVT::GetNumberVecs(*init_res); + scalevector_.resize(numrhs_); + MVT::MvNorm(*init_res, scalevector_, scalenormtype_); + MvScalingRatio(*init_res, subIdx_, scalevalue_); + } + else if (scaletype_ == NormOfFullScaledPrecInitRes) + { + Teuchos::RCP<const MV> init_res = lp.getInitPrecResVec(); + numrhs_ = MVT::GetNumberVecs(*init_res); + scalevector_.resize(numrhs_); + MVT::MvNorm(*init_res, scalevector_, scalenormtype_); + MvScalingRatio(*init_res, subIdx_, scalevalue_); + } + else + { + numrhs_ = MVT::GetNumberVecs(*(lp.getRHS())); + } + + resvector_.resize(numrhs_); + testvector_.resize(numrhs_); + + curLSNum_ = lp.getLSNumber(); + curLSIdx_ = lp.getLSIndex(); + curBlksz_ = (int)curLSIdx_.size(); + int validLS = 0; + for (i = 0; i < curBlksz_; ++i) + { + if (curLSIdx_[i] > -1 && curLSIdx_[i] < numrhs_) + validLS++; + } + curNumRHS_ = validLS; + // + // Initialize the testvector. + for (i = 0; i < numrhs_; i++) + { + testvector_[i] = one; + } + + // Return an error if the scaling is zero. + if (scalevalue_ == zero) + { + return Failed; + } + } + return Undefined; + } + //@} + + /** \name Overridden from Teuchos::Describable */ + //@{ + + /** \brief Method to return description of the maximum iteration status test */ + std::string description() const + { + std::ostringstream oss; + oss << "Belos::StatusTestGenResSubNorm<>: " << resFormStr(); + oss << ", tol = " << tolerance_; + return oss.str(); + } + //@} + +protected: +private: + //! @name Private methods. + //@{ + /** \brief Description of current residual form */ + std::string resFormStr() const + { + std::ostringstream oss; + oss << "("; + oss << ((resnormtype_ == OneNorm) ? "1-Norm" : (resnormtype_ == TwoNorm) ? "2-Norm" : "Inf-Norm"); + oss << " Exp"; + oss << " Res Vec [" << subIdx_ << "]) "; + + // If there is no residual scaling, return current string. + if (scaletype_ != None) + { + // Insert division sign. + oss << "/ "; + + // Determine output string for scaling, if there is any. + if (scaletype_ == UserProvided) + oss << " (User Scale)"; + else + { + oss << "("; + oss << ((scalenormtype_ == OneNorm) ? "1-Norm" : (resnormtype_ == TwoNorm) ? "2-Norm" : "Inf-Norm"); + if (scaletype_ == NormOfInitRes) + oss << " Res0 [" << subIdx_ << "]"; + else if (scaletype_ == NormOfPrecInitRes) + oss << " Prec Res0 [" << subIdx_ << "]"; + else if (scaletype_ == NormOfFullInitRes) + oss << " Full Res0 [" << subIdx_ << "]"; + else if (scaletype_ == NormOfFullPrecInitRes) + oss << " Full Prec Res0 [" << subIdx_ << "]"; + else if (scaletype_ == NormOfFullScaledInitRes) + oss << " scaled Full Res0 [" << subIdx_ << "]"; + else if (scaletype_ == NormOfFullScaledPrecInitRes) + oss << " scaled Full Prec Res0 [" << subIdx_ << "]"; + else + oss << " RHS [" << subIdx_ << "]"; + oss << ")"; + } + } + + // TODO add a tagging name + + return oss.str(); + } + + //@} + + //! @name Private helper functions + //@{ + + // calculate norm of partial multivector + void MvSubNorm(const MV &mv, size_t block, std::vector<typename Teuchos::ScalarTraits<Scalar>::magnitudeType> &normVec, NormType type = TwoNorm) + { + + Teuchos::RCP<const MV> input = Teuchos::rcpFromRef(mv); + + Teuchos::RCP<const MV> SubVec = mapExtractor_->ExtractVector(input, block); + typedef MultiVecTraits<Scalar, MV> MVT; + MVT::MvNorm(*SubVec, normVec, type); + } + + // calculate ration of sub-vector length to full vector length (for scalevalue_) + void MvScalingRatio(const MV &mv, size_t block, MagnitudeType &lengthRatio) + { + Teuchos::RCP<const MV> input = Teuchos::rcpFromRef(mv); + + Teuchos::RCP<const MV> SubVec = mapExtractor_->ExtractVector(input, block); + + lengthRatio = Teuchos::as<MagnitudeType>(SubVec->getGlobalLength()) / Teuchos::as<MagnitudeType>(input->getGlobalLength()); + } + //@} + + //! @name Private data members. + //@{ + + //! Tolerance used to determine convergence + MagnitudeType tolerance_; + + //! Index of block row in n x n block system of which we want to check the sub-residuals + size_t subIdx_; + + //! Number of residuals that must pass the convergence test before Passed is returned. + int quorum_; + + //! Determines if the entries for all of the residuals are shown or just the max. + bool showMaxResNormOnly_; + + //! Type of norm to use on residual (OneNorm, TwoNorm, or InfNorm). + NormType resnormtype_; + + //! Type of scaling to use (Norm of RHS, Norm of Initial Residual, None or User provided) + ScaleType scaletype_; + + //! Type of norm to use on the scaling (OneNorm, TwoNorm, or InfNorm) + NormType scalenormtype_; + + //! Scaling value. + MagnitudeType scalevalue_; + + //! Scaling std::vector. + std::vector<MagnitudeType> scalevector_; + + //! Residual norm std::vector. + std::vector<MagnitudeType> resvector_; + + //! Test std::vector = resvector_ / scalevector_ + std::vector<MagnitudeType> testvector_; + + //! Vector containing the indices for the vectors that passed the test. + std::vector<int> ind_; + + //! Most recent solution vector used by this status test. + Teuchos::RCP<MV> curSoln_; + + //! Status + StatusType status_; + + //! The current blocksize of the linear system being solved. + int curBlksz_; + + //! The current number of right-hand sides being solved for. + int curNumRHS_; + + //! The indices of the current number of right-hand sides being solved for. + std::vector<int> curLSIdx_; + + //! The current number of linear systems that have been loaded into the linear problem. + int curLSNum_; + + //! The total number of right-hand sides being solved for. + int numrhs_; + + //! Is this the first time CheckStatus is called? + bool firstcallCheckStatus_; + + //! Is this the first time DefineResForm is called? + bool firstcallDefineResForm_; + + //! Is this the first time DefineScaleForm is called? + bool firstcallDefineScaleForm_; + + //! MapExtractor for range space + Teuchos::RCP<const ME> mapExtractor_; + + //! The number of iterations at which point each ensemble component converges + std::vector<int> ensemble_iterations; + + //@} +}; + +} // namespace Belos + +#endif + +#endif /* BELOS_XPETRA_STATUS_TEST_GEN_RES_SUB_NORM_HPP */ diff --git a/katoptron/src/CMakeLists.txt b/katoptron/src/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..5c97361a05d53eeabf449e8d7a09b8e27fe6fd51 --- /dev/null +++ b/katoptron/src/CMakeLists.txt @@ -0,0 +1,97 @@ +# CMake input file of katoptron.so + +FILE(GLOB SRCS *.h *.cpp *.inl *.hpp) + +#ADD_EXECUTABLE(katoptron2 main.cpp) + +ADD_LIBRARY(katoptron SHARED ${SRCS}) +MACRO_DebugPostfix(katoptron) +TARGET_INCLUDE_DIRECTORIES(katoptron PUBLIC ${PROJECT_SOURCE_DIR}/katoptron/src) + +target_compile_definitions(katoptron PUBLIC WAVES_USE_TBOXVTK) + +# -- Search for Trilinos +FIND_PACKAGE(Trilinos REQUIRED) + +set (_VERB 0) # set to 1 for debugging +IF(_VERB) + MESSAGE("\nFound Trilinos! Here are the details: ") + MESSAGE(" Trilinos_DIR = ${Trilinos_DIR}") + MESSAGE(" Trilinos_VERSION = ${Trilinos_VERSION}") + MESSAGE(" Trilinos_PACKAGE_LIST = ${Trilinos_PACKAGE_LIST}") + MESSAGE(" Trilinos_LIBRARIES = ${Trilinos_LIBRARIES}") + MESSAGE(" Trilinos_INCLUDE_DIRS = ${Trilinos_INCLUDE_DIRS}") + MESSAGE(" Trilinos_LIBRARY_DIRS = ${Trilinos_LIBRARY_DIRS}") + MESSAGE(" Trilinos_TPL_LIST = ${Trilinos_TPL_LIST}") + MESSAGE(" Trilinos_TPL_INCLUDE_DIRS = ${Trilinos_TPL_INCLUDE_DIRS}") + MESSAGE(" Trilinos_TPL_LIBRARIES = ${Trilinos_TPL_LIBRARIES}") + MESSAGE(" Trilinos_TPL_LIBRARY_DIRS = ${Trilinos_TPL_LIBRARY_DIRS}") + MESSAGE(" Trilinos_BUILD_SHARED_LIBS = ${Trilinos_BUILD_SHARED_LIBS}") + MESSAGE(" Trilinos_CXX_COMPILER_FLAGS = ${Trilinos_CXX_COMPILER_FLAGS}") + MESSAGE("End of Trilinos details\n") +ENDIF() + +# MPI check +LIST(FIND Trilinos_TPL_LIST MPI MPI_List_ID) +IF (MPI_List_ID GREATER -1) + MESSAGE("-- Checking if MPI is enabled in Trilinos: MPI ENABLED") + SET(MYAPP_MPI TRUE) + ADD_DEFINITIONS(-DMYAPP_MPI) +ELSE() + MESSAGE("-- Checking if MPI is enabled in Trilinos: MPI NOT ENABLED") + SET(MYAPP_MPI FALSE) +ENDIF() + +# Set optional dependency in MyApp on Epetra package: +# this toggles code within #ifdef MYAPP_EPETRA +LIST(FIND Trilinos_PACKAGE_LIST Epetra Epetra_List_ID) +IF (Epetra_List_ID GREATER -1) + ADD_DEFINITIONS(-DMYAPP_EPETRA) + MESSAGE("-- Looking for Epetra: -- found, compiling with -DMYAPP_EPETRA") + SET(MYAPP_EPETRA TRUE) +ELSE() + MESSAGE("-- Looking for Epetra: -- not found.") + SET(MYAPP_EPETRA FALSE) +ENDIF() + +# -------------------------------------------------------------- +# Finds MPI (including MSMPI) +# -------------------------------------------------------------- +if(WIN32) + FIND_PATH(MPI_INCLUDE_PATH NAMES mpi.h HINTS "$ENV{MSMPI_INC}") + if("${CMAKE_SIZEOF_VOID_P}" EQUAL 8) + set(MS_MPI_ARCH_DIR x64) + find_library(MPI_LIBRARIES msmpi PATHS "$ENV{MSMPI_LIB64}") + else() + set(MS_MPI_ARCH_DIR x86) + find_library(MPI_LIBRARIES msmpi PATHS "$ENV{MSMPI_LIB32}") + endif() +else() + find_package(MPI REQUIRED) + # intel mpi (mpi.h doit etre inclus avant stdio.h) + # ou definir ces 2 macros + ADD_DEFINITIONS(-DMPICH_IGNORE_CXX_SEEK -DMPICH_SKIP_MPICXX) +endif() +# -------------------------------------------------------------- + +IF(_VERB) +MESSAGE(" Trilinos_LIBRARIES = ${Trilinos_LIBRARIES}") +ENDIF() + +list(REMOVE_ITEM Trilinos_LIBRARIES pytrilinos) + +IF(_VERB) +MESSAGE(" Trilinos_LIBRARIES = ${Trilinos_LIBRARIES}") +ENDIF() + +INCLUDE_DIRECTORIES ( ${PROJECT_SOURCE_DIR}/ext/amfe/tbox/src + ${PROJECT_SOURCE_DIR}/ext/amfe/fwk/src + ${Trilinos_INCLUDE_DIRS} + ${Trilinos_TPL_INCLUDE_DIRS} + ${MPI_INCLUDE_PATH}) + +LINK_DIRECTORIES (${Trilinos_LIBRARY_DIRS} ${Trilinos_TPL_LIBRARY_DIRS}) + +TARGET_LINK_LIBRARIES(katoptron tbox tboxVtk fwk ${Trilinos_LIBRARIES} ${Trilinos_TPL_LIBRARIES} ${MPI_LIBRARIES}) + +INSTALL(TARGETS katoptron DESTINATION ${CMAKE_INSTALL_PREFIX}) diff --git a/katoptron/src/ContactsList.cpp b/katoptron/src/ContactsList.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ed239f19b29ea6e5be3856d8a00f360204649e76 --- /dev/null +++ b/katoptron/src/ContactsList.cpp @@ -0,0 +1,284 @@ +#include "ContactsList.h" + +#include "NodesList.h" + +#include "wProblem.h" +#include "wTag.h" +#include "wMshData.h" +#include "wElement.h" +#include "wNode.h" +#include "wMedium.h" +#include "wDirichlet.h" +#include "wContact.h" + +using namespace katoptron; +using namespace tbox; + +/** + * @brief ContactsList constructor + * + * This constructor allocates 11 Kokkos::View which store all the required information related to each contact interface, including: + * <ul> + * <li> all the slaves and master nodes and elements IDs, + * <li> all the normal of the surfaces, + * <li> type of Lagrange multiplier shape functions, + * <li> type of the interface (contact, Signorini, sticking contact, mesh tying), + * <li> initial status of the Lagrange multipliers and whether they should be updated. + * </ul> + * + * To do so, we need the information regarding the contact interfaces (stored into the katoptron::Problem object), the information on the + * distribution of the nodes (stored into the katoptron::Map object), and the information on the nodes and elements (stored into the + * katoptron::NodesList and katoptron::ElementList objects). + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> map: an RCP to a Map object, + * <li> elementsList: an RCP to an ElementList object, + * <li> nodesList: an RCP to a NodesList object. + * </ul> + */ +ContactsList::ContactsList(Problem &pbl, Teuchos::RCP<Map> map, Teuchos::RCP<ElementsList> elementsList, Teuchos::RCP<NodesList> nodesList) +{ + typedef Map::local_ordinal_type local_ordinal_type; + typedef Map::global_ordinal_type global_ordinal_type; + + contacts_number = pbl.Contacts.size(); + local_ordinal_type maxNumSlaveNodesPerContactFace = 0; + local_ordinal_type maxNumMasterNodesPerContactFace = 0; + local_ordinal_type maxNumSlaveElemsPerContactFace = 0; + local_ordinal_type maxNumMasterElemsPerContactFace = 0; + local_ordinal_type maxNumSlaveDirichletNodesPerContactFace = 0; + + for (auto i = 0; i < contacts_number; ++i) + { + std::vector<global_ordinal_type> myContactSlaveNodes; + std::vector<global_ordinal_type> myContactSlaveElems; + for (auto j = 0; j < pbl.Contacts[i]->slave_elems.size(); ++j) + { + local_ordinal_type e = map->mapElems->getLocalElement(pbl.Contacts[i]->slave_elems[j]->no - 1); + if (elementsList->getElementType(e) == static_cast<int>(ElType::QUAD4)) + ; + else if (elementsList->getElementType(e) == static_cast<int>(ElType::TRI3)) + ; + else + continue; + myContactSlaveElems.push_back(e); + for (auto n1 = 0; n1 < elementsList->getElementSize(e); ++n1) + { + global_ordinal_type i_global = map->mapNodesWO->getGlobalElement(elementsList->getElementNode(e, n1)); + + if (std::find(myContactSlaveNodes.begin(), myContactSlaveNodes.end(), i_global) == myContactSlaveNodes.end()) + myContactSlaveNodes.push_back(i_global); + } + } + + int myNumContactSlaveNodes = myContactSlaveNodes.size(); + int myNumContactSlaveElems = myContactSlaveElems.size(); + + int myNumContactSlaveDirichletNodes = pbl.Contacts[i]->slave_dirichlet_nodes.size(); + + std::vector<global_ordinal_type> myContactMasterNodes; + std::vector<global_ordinal_type> myContactMasterElems; + for (auto j = 0; j < pbl.Contacts[i]->master_elems.size(); ++j) + { + local_ordinal_type e = map->mapElems->getLocalElement(pbl.Contacts[i]->master_elems[j]->no - 1); + if (elementsList->getElementType(e) == static_cast<int>(ElType::QUAD4)) + ; + else if (elementsList->getElementType(e) == static_cast<int>(ElType::TRI3)) + ; + else if (elementsList->getElementType(e) == static_cast<int>(ElType::LINE2)) + ; + else + continue; + myContactMasterElems.push_back(e); + for (auto n1 = 0; n1 < elementsList->getElementSize(e); ++n1) + { + global_ordinal_type i_global = map->mapNodesWO->getGlobalElement(elementsList->getElementNode(e, n1)); + if (std::find(myContactMasterNodes.begin(), myContactMasterNodes.end(), i_global) == myContactMasterNodes.end()) + myContactMasterNodes.push_back(i_global); + } + } + + int myNumContactMasterNodes = myContactMasterNodes.size(); + int myNumContactMasterElems = myContactMasterElems.size(); + + if (maxNumSlaveNodesPerContactFace < myNumContactSlaveNodes) + maxNumSlaveNodesPerContactFace = myNumContactSlaveNodes; + if (maxNumSlaveElemsPerContactFace < myNumContactSlaveElems) + maxNumSlaveElemsPerContactFace = myNumContactSlaveElems; + + if (maxNumSlaveDirichletNodesPerContactFace < myNumContactSlaveDirichletNodes) + maxNumSlaveDirichletNodesPerContactFace = myNumContactSlaveDirichletNodes; + + if (maxNumMasterNodesPerContactFace < myNumContactMasterNodes) + maxNumMasterNodesPerContactFace = myNumContactMasterNodes; + if (maxNumMasterElemsPerContactFace < myNumContactMasterElems) + maxNumMasterElemsPerContactFace = myNumContactMasterElems; + } + + contacts_slave_nodes_size = 0; + contacts_slave_elems_size = 1; + contacts_master_nodes_size = 2; + contacts_master_elems_size = 3; + contacts_slave_normal = 4; + contacts_master_normal = 7; + contacts_slave_nodes = 10; + contacts_slave_elems = contacts_slave_nodes + maxNumSlaveNodesPerContactFace; + contacts_master_nodes = contacts_slave_elems + maxNumSlaveElemsPerContactFace; + contacts_master_elems = contacts_master_nodes + maxNumMasterNodesPerContactFace; + + size_t numMaxDirichletSlaveNode = 1; + for (auto i = 0; i < contacts_number; ++i) + if (numMaxDirichletSlaveNode < pbl.Contacts[i]->slave_dirichlet_nodes.size()) + numMaxDirichletSlaveNode = pbl.Contacts[i]->slave_dirichlet_nodes.size(); + + size_t numMaxClosedNode = 1; + for (auto i = 0; i < contacts_number; ++i) + if (numMaxClosedNode < pbl.Contacts[i]->initially_closed_nodes.size()) + numMaxClosedNode = pbl.Contacts[i]->initially_closed_nodes.size(); + + Kokkos::resize(contacts, contacts_number, contacts_master_elems + maxNumMasterElemsPerContactFace); + Kokkos::resize(contacts_normal, contacts_number, 6); + Kokkos::resize(shape_function, contacts_number); + Kokkos::resize(signorini, contacts_number); + Kokkos::resize(initially_open, contacts_number); + Kokkos::resize(no_update, contacts_number); + Kokkos::resize(sticking, contacts_number); + Kokkos::resize(mesh_tying, contacts_number); + Kokkos::resize(contacts_scale, contacts_number); + Kokkos::resize(contacts_dirichlet, contacts_number, numMaxDirichletSlaveNode + 1); + Kokkos::resize(initially_closed_nodes, contacts_number, numMaxClosedNode + 1); + + for (auto i = 0; i < contacts_number; ++i) + { + contacts_dirichlet(i, 0) = pbl.Contacts[i]->slave_dirichlet_nodes.size(); + for (auto j = 0; j < contacts_dirichlet(i, 0); ++j) + contacts_dirichlet(i, j + 1) = pbl.Contacts[i]->slave_dirichlet_nodes[j]; + } + + for (auto i = 0; i < contacts_number; ++i) + { + initially_closed_nodes(i, 0) = pbl.Contacts[i]->initially_closed_nodes.size(); + for (auto j = 0; j < initially_closed_nodes(i, 0); ++j) + initially_closed_nodes(i, j + 1) = pbl.Contacts[i]->initially_closed_nodes[j]; + } + + for (auto i = 0; i < contacts_number; ++i) + { + int myContactSlaveNodes_id = 0; + int myContactSlaveElems_id = 0; + + std::vector<global_ordinal_type> myContactSlaveNodes; + + for (auto j = 0; j < pbl.Contacts[i]->slave_elems.size(); ++j) + { + local_ordinal_type e = map->mapElems->getLocalElement(pbl.Contacts[i]->slave_elems[j]->no - 1); + if (elementsList->getElementType(e) == static_cast<int>(ElType::QUAD4)) + ; + else if (elementsList->getElementType(e) == static_cast<int>(ElType::TRI3)) + ; + else + continue; + contacts(i, contacts_slave_elems + myContactSlaveElems_id) = e; + ++myContactSlaveElems_id; + for (auto n1 = 0; n1 < elementsList->getElementSize(e); ++n1) + { + global_ordinal_type i_global = map->mapNodesWO->getGlobalElement(elementsList->getElementNode(e, n1)); + if (std::find(myContactSlaveNodes.begin(), myContactSlaveNodes.end(), i_global) == myContactSlaveNodes.end()) + { + myContactSlaveNodes.push_back(i_global); + ++myContactSlaveNodes_id; + } + } + } + for (auto j = 0; j < myContactSlaveNodes.size(); ++j) + contacts(i, contacts_slave_nodes + j) = myContactSlaveNodes[j]; + + contacts(i, contacts_slave_nodes_size) = myContactSlaveNodes_id; + contacts(i, contacts_slave_elems_size) = myContactSlaveElems_id; + + int myContactMasterNodes_id = 0; + int myContactMasterElems_id = 0; + + std::vector<global_ordinal_type> myContactMasterNodes; + + for (auto j = 0; j < pbl.Contacts[i]->master_elems.size(); ++j) + { + local_ordinal_type e = map->mapElems->getLocalElement(pbl.Contacts[i]->master_elems[j]->no - 1); + if (elementsList->getElementType(e) == static_cast<int>(ElType::QUAD4)) + ; + else if (elementsList->getElementType(e) == static_cast<int>(ElType::TRI3)) + ; + else if (elementsList->getElementType(e) == static_cast<int>(ElType::LINE2)) + ; + else + continue; + contacts(i, contacts_master_elems + myContactMasterElems_id) = e; + ++myContactMasterElems_id; + for (auto n1 = 0; n1 < elementsList->getElementSize(e); ++n1) + { + global_ordinal_type i_global = map->mapNodesWO->getGlobalElement(elementsList->getElementNode(e, n1)); + if (std::find(myContactMasterNodes.begin(), myContactMasterNodes.end(), i_global) == myContactMasterNodes.end()) + { + myContactMasterNodes.push_back(i_global); + ++myContactMasterNodes_id; + } + } + } + + for (auto j = 0; j < myContactMasterNodes.size(); ++j) + contacts(i, contacts_master_nodes + j) = myContactMasterNodes[j]; + + contacts(i, contacts_master_nodes_size) = myContactMasterNodes_id; + contacts(i, contacts_master_elems_size) = myContactMasterElems_id; + } + + for (auto i = 0; i < contacts_number; ++i) + { + + for (auto j = 0; j < 3; ++j) + { + contacts(i, contacts_slave_normal + j) = pbl.Contacts[i]->slave_normal(j); + contacts(i, contacts_master_normal + j) = pbl.Contacts[i]->master_normal(j); + + contacts_normal(i, j) = pbl.Contacts[i]->slave_normal(j); + contacts_normal(i, j + 3) = pbl.Contacts[i]->master_normal(j); + } + + if (pbl.Contacts[i]->standard_shape_functions) + shape_function(i) = 1; + else + shape_function(i) = 0; + + if (pbl.Contacts[i]->is_Signorini) + signorini(i) = 1; + else + signorini(i) = 0; + + if (pbl.Contacts[i]->mesh_tying) + mesh_tying(i) = 1; + else + mesh_tying(i) = 0; + + if (pbl.Contacts[i]->no_Update) + no_update(i) = 1; + else + no_update(i) = 0; + + if (pbl.Contacts[i]->sticking) + { + sticking(i) = true; + at_least_one_sticking = true; + } + else + sticking(i) = false; + + if (pbl.Contacts[i]->initial_closed) + initially_open(i) = 0; + else + initially_open(i) = 1; + + contacts_scale(i) = pbl.Contacts[i]->scale; + } +} diff --git a/katoptron/src/ContactsList.h b/katoptron/src/ContactsList.h new file mode 100644 index 0000000000000000000000000000000000000000..4f6bf1f2b51945c32560fa5802f7afd504eaafa7 --- /dev/null +++ b/katoptron/src/ContactsList.h @@ -0,0 +1,500 @@ +#ifndef KATOPTRON_CONTACTSLIST_H +#define KATOPTRON_CONTACTSLIST_H + +#include "katoptron.h" + +#include "Map.h" +#include "NodesList.h" +#include "ElementsList.h" + +#include <Tpetra_Map.hpp> +#include <Tpetra_Vector.hpp> +#include <Teuchos_RCP.hpp> +#include <Kokkos_ViewFactory.hpp> + +namespace katoptron +{ + +/** + * @brief Class which is used to store the list of the contact interfaces. + */ +class ContactsList +{ +private: + bool at_least_one_sticking = false; + + typedef typename Map::local_ordinal_type local_ordinal_type; + typedef typename Map::global_ordinal_type global_ordinal_type; + + Kokkos::View<global_ordinal_type **, Kokkos::LayoutRight> contacts; + Kokkos::View<global_ordinal_type **, Kokkos::LayoutRight> contacts_dirichlet; + + Kokkos::View<local_ordinal_type *, Kokkos::LayoutRight> shape_function; + + Kokkos::View<local_ordinal_type *, Kokkos::LayoutRight> signorini; + + Kokkos::View<local_ordinal_type *, Kokkos::LayoutRight> initially_open; + + Kokkos::View<local_ordinal_type *, Kokkos::LayoutRight> no_update; + Kokkos::View<local_ordinal_type *, Kokkos::LayoutRight> sticking; + Kokkos::View<local_ordinal_type *, Kokkos::LayoutRight> mesh_tying; + + Kokkos::View<double *, Kokkos::LayoutRight> contacts_scale; + + Kokkos::View<local_ordinal_type **, Kokkos::LayoutRight> initially_closed_nodes; + + Kokkos::View<double **, Kokkos::LayoutRight> contacts_normal; + + local_ordinal_type contacts_number; + local_ordinal_type contacts_slave_nodes_size; + local_ordinal_type contacts_slave_elems_size; + local_ordinal_type contacts_master_nodes_size; + local_ordinal_type contacts_master_elems_size; + local_ordinal_type contacts_slave_normal; + local_ordinal_type contacts_master_normal; + local_ordinal_type contacts_slave_nodes; + local_ordinal_type contacts_slave_elems; + local_ordinal_type contacts_master_nodes; + local_ordinal_type contacts_master_elems; + +public: + ContactsList(Problem &pbl, Teuchos::RCP<Map> map, Teuchos::RCP<ElementsList> elementsList, + Teuchos::RCP<NodesList> nodesList); + + ~ContactsList() + { + Kokkos::resize(contacts, 0, 0); + Kokkos::resize(contacts_normal, 0, 0); + Kokkos::resize(shape_function, 0); + Kokkos::resize(signorini, 0); + Kokkos::resize(initially_open, 0); + Kokkos::resize(no_update, 0); + Kokkos::resize(sticking, 0); + Kokkos::resize(mesh_tying, 0); + Kokkos::resize(contacts_scale, 0); + Kokkos::resize(contacts_dirichlet, 0, 0); + Kokkos::resize(initially_closed_nodes, 0, 0); + } + + /** + * @brief Return the number of contact interfaces. + * + */ + inline local_ordinal_type getContactNumber() { return contacts_number; } + + /** + * @brief Return the number of slave nodes for a + * given interface. + * + * Argument: + * <ul> + * <li> i: the interface ID. + * </ul> + */ + inline local_ordinal_type getSlaveNodesSize(local_ordinal_type i) + { + return contacts(i, contacts_slave_nodes_size); + } + + /** + * @brief Return the number of slave elements for a + * given interface. + * + * Argument: + * <ul> + * <li> i: the interface ID. + * </ul> + */ + inline local_ordinal_type getSlaveElementsSize(local_ordinal_type i) + { + return contacts(i, contacts_slave_elems_size); + } + + /** + * @brief Return the number of master nodes for a + * given interface. + * + * Argument: + * <ul> + * <li> i: the interface ID. + * </ul> + */ + inline local_ordinal_type getMasterNodesSize(local_ordinal_type i) + { + return contacts(i, contacts_master_nodes_size); + } + + /** + * @brief Return the number of master elements for a + * given interface. + * + * Argument: + * <ul> + * <li> i: the interface ID. + * </ul> + */ + inline local_ordinal_type getMasterElementsSize(local_ordinal_type i) + { + return contacts(i, contacts_master_elems_size); + } + + /** + * @brief Return the global ID of the slave node n1 of + * a given interface. + * + * Arguments: + * <ul> + * <li> i: the interface ID, + * <li> n1: the ID of the node on the current interface. + * </ul> + */ + inline global_ordinal_type getSlaveNode(local_ordinal_type i, local_ordinal_type n1) + { + return contacts(i, contacts_slave_nodes + n1); + } + + /** + * @brief Return the local ID of the slave element e1 of + * a given interface. + * + * Arguments: + * <ul> + * <li> i: the interface ID, + * <li> e1: the ID of the element on the current interface. + * </ul> + */ + inline local_ordinal_type getSlaveElement(local_ordinal_type i, local_ordinal_type e1) + { + return contacts(i, contacts_slave_elems + e1); + } + + /** + * @brief Return the global ID of the master node n1 of + * a given interface. + * + * Argument: + * <ul> + * <li> i: the interface ID, + * <li> n1: the ID of the node on the current interface. + * </ul> + */ + inline global_ordinal_type getMasterNode(local_ordinal_type i, local_ordinal_type n1) + { + return contacts(i, contacts_master_nodes + n1); + } + + /** + * @brief Return the local ID of the master element e1 of + * a given interface. + * + * Arguments: + * <ul> + * <li> i: the interface ID, + * <li> e1: the ID of the element on the current interface. + * </ul> + */ + inline local_ordinal_type getMasterElement(local_ordinal_type i, local_ordinal_type e1) + { + return contacts(i, contacts_master_elems + e1); + } + + /** + * @brief Return the jth component of the normal vector to the slave + * side of a given interface. + * + * Arguments: + * <ul> + * <li> i: the interface ID, + * <li> j: the index of the component of the normal vector. + * </ul> + */ + inline double getSlaveNormal(local_ordinal_type i, local_ordinal_type j) + { + return contacts_normal(i, j); + } + + /** + * @brief Return the jth component of the normal vector to the master + * side of a given interface. + * + * Arguments: + * <ul> + * <li> i: the interface ID, + * <li> j: the index of the component of the normal vector. + * </ul> + */ + inline double getMasterNormal(local_ordinal_type i, local_ordinal_type j) + { + return contacts_normal(i, j + 3); + } + + /** + * @brief Return true if the shape functions of the Lagrange + * multipliers are the standard shape function for a given interface. + * + * Argument: + * <ul> + * <li> i: the interface ID. + * </ul> + */ + inline bool isStandardShapeFunction(local_ordinal_type i) + { + return shape_function(i) == 1; + } + + /** + * @brief Return true if contact of the given interface is + * initially open. + * + * Argument: + * <ul> + * <li> i: the interface ID. + * </ul> + */ + inline bool isInitiallyOpen(local_ordinal_type i) + { + return initially_open(i) == 1; + } + + /** + * @brief Return true if contact of the given interface is + * initially close. + * + * Argument: + * <ul> + * <li> i: the interface ID. + * </ul> + */ + inline bool isInitiallyClose(local_ordinal_type i) + { + return initially_open(i) == 0; + } + + /** + * @brief Return true if the contact status of the given interface + * should be checked and potentially updated. + * + * Argument: + * <ul> + * <li> i: the interface ID. + * </ul> + */ + inline bool isUpdated(local_ordinal_type i) + { + return no_update(i) == 0; + } + + /** + * @brief Return true if the contact status of the given interface + * should not be checked. + * + * Argument: + * <ul> + * <li> i: the interface ID. + * </ul> + */ + inline bool isNotUpdated(local_ordinal_type i) + { + return no_update(i) == 1; + } + + /** + * @brief Return true if the given interface is a sticking contact + * interface. + * + * Argument: + * <ul> + * <li> i: the interface ID. + * </ul> + */ + inline bool isSticking(local_ordinal_type i) + { + return sticking(i); + } + + /** + * @brief Return true if the given interface is a mesh tying + * interface. + * + * Argument: + * <ul> + * <li> i: the interface ID. + * </ul> + */ + inline bool isTying(local_ordinal_type i) + { + return mesh_tying(i); + } + + /** + * @brief Return true if at least one contact interface is sticking. + */ + inline bool hasAtLeastOneSticking(void) + { + return at_least_one_sticking; + } + + /** + * @brief Return true if the given interface is a Signorini + * contact interface. + * + * Argument: + * <ul> + * <li> i: the interface ID. + * </ul> + */ + inline bool isSignorini(local_ordinal_type i) + { + return signorini(i) == 1; + } + + /** + * @brief Return true if the given interface is not a Signorini + * contact interface. + * + * Argument: + * <ul> + * <li> i: the interface ID. + * </ul> + */ + inline bool isNotSignorini(local_ordinal_type i) + { + return signorini(i) == 0; + } + + /** + * @brief Return true if at least one contact interface is a + * Signorini contact interface. + */ + inline bool isSignorini() + { + for (local_ordinal_type i = 0; i < contacts_number; ++i) + if (isSignorini(i)) + return true; + return false; + } + + /** + * @brief Return true if all the contact interfaces are not + * Signorini contact interfaces. + */ + inline bool isNotSignorini() + { + for (local_ordinal_type i = 0; i < contacts_number; ++i) + if (isSignorini(i)) + return false; + return true; + } + + /** + * @brief Return the number of Dirichlet nodes on the slave + * side for a given interface. + * + * Argument: + * <ul> + * <li> i: the interface ID. + * </ul> + */ + inline local_ordinal_type slaveDirichletSize(local_ordinal_type i) + { + return contacts_dirichlet(i, 0); + } + + /** + * @brief Return the multiplicative scale used to multiply + * the normals of a given interface. + * + * Argument: + * <ul> + * <li> i: the interface ID. + * </ul> + */ + inline double getMortarScale(local_ordinal_type i) + { + return contacts_scale(i); + } + + /** + * @brief Return true if the node of global ID j is + * a slave node of the interface i. + * + * Arguments: + * <ul> + * <li> i: the interface ID, + * <li> j: the global ID of the tested node. + * </ul> + */ + bool isASlaveNode(local_ordinal_type i, global_ordinal_type j) + { + local_ordinal_type size = getSlaveNodesSize(i); + if (size == 0) + return false; + for (auto j2 = 0; j2 < size; ++j2) + if (j == getSlaveNode(i, j2)) + return true; + return false; + } + + /** + * @brief Return the interface ID associated to a slave node + * of global ID j. + * + * Argument: + * <ul> + * <li> j: the global ID of the node. + * </ul> + */ + local_ordinal_type getInterfaceOfSlaveNode(local_ordinal_type j) + { + for (local_ordinal_type i = 0; i < contacts_number; ++i) + if (isASlaveNode(i, j)) + return i; + return 0; + } + + /** + * @brief Return true if the slave node of global ID j + * is a Dirichlet node on the interface i. + * + * Arguments: + * <ul> + * <li> i: the interface ID, + * <li> j: the global ID of the node. + * </ul> + */ + bool isASlaveDirichletNode(local_ordinal_type i, local_ordinal_type j) + { + local_ordinal_type size = slaveDirichletSize(i); + if (size == 0) + return false; + for (auto j2 = 0; j2 < size; ++j2) + if (j == contacts_dirichlet(i, j2 + 1)) + return true; + return false; + } + + /** + * @brief Return true if the Lagrange multiplier associated to the + * slave node of global ID j on the interface i is initially active (closed contact). + * + * Arguments: + * <ul> + * <li> i: the interface ID, + * <li> j: the global ID of the node. + * </ul> + */ + bool isNodeInitiallyClosed(local_ordinal_type i, local_ordinal_type j) + { + local_ordinal_type size = initially_closed_nodes(i, 0); + if (size == 0) + return false; + for (auto j2 = 0; j2 < size; ++j2) + if (j == initially_closed_nodes(i, j2 + 1)) + return true; + return false; + } +}; + +}; // namespace katoptron + +#endif //KATOPTRON_CONTACTSLIST_H diff --git a/katoptron/src/DirichletList.h b/katoptron/src/DirichletList.h new file mode 100644 index 0000000000000000000000000000000000000000..8f5627e935e27dee42df851fc3f522fe76cd1005 --- /dev/null +++ b/katoptron/src/DirichletList.h @@ -0,0 +1,112 @@ +#ifndef KATOPTRON_DIRICHLETLIST_H +#define KATOPTRON_DIRICHLETLIST_H + +#include "katoptron.h" + +#include "Map.h" +#include "wDirichlet.h" +#include "wProblem.h" +#include "wTag.h" +#include "wNode.h" + +#include "ElementsList.h" + +#include <Tpetra_Map.hpp> +#include <Tpetra_Vector.hpp> +#include <Teuchos_RCP.hpp> +#include <Kokkos_ViewFactory.hpp> + +#include "EnsembleTraits.h" + +namespace katoptron +{ + +/** + * @brief Class which is used to store the list of the Dirichlet boundary conditions (BC). + */ +template <typename scalar> +class DirichletList +{ + typedef Map::local_ordinal_type local_ordinal_type; + typedef Map::global_ordinal_type global_ordinal_type; + +private: + Kokkos::View<global_ordinal_type **, Kokkos::LayoutRight> dirichlet_nodesList; + Kokkos::View<scalar ***, Kokkos::LayoutRight> dirichlet_values_list; + + local_ordinal_type dirichlet_number; + local_ordinal_type dirichlet_size; + local_ordinal_type dirichlet_nodes; + + local_ordinal_type dirichlet_time; + local_ordinal_type dirichlet_dofs; + local_ordinal_type dirichlet_values; + +public: + DirichletList(Problem &pbl, Teuchos::RCP<Map> map, Teuchos::RCP<ElementsList> elementsList); + + /** + * @brief Return the number of Dirichlet BC. + */ + inline local_ordinal_type getDirichletNumber() { return dirichlet_number; } + + /** + * @brief Return the number of nodes for a + * given Dirichlet BC. + * + * Argument: + * <ul> + * <li> i: the BC ID. + * </ul> + */ + inline local_ordinal_type getDirichletSize(local_ordinal_type i) + { + return dirichlet_nodesList(i, dirichlet_size); + } + + /** + * @brief Return the global ID of the node n1 of + * a given BC. + * + * Arguments: + * <ul> + * <li> i: the BC ID, + * <li> n1: the ID of the node on the current BC. + * </ul> + */ + inline global_ordinal_type getDirichletNode(local_ordinal_type i, local_ordinal_type n1) + { + return dirichlet_nodesList(i, dirichlet_nodes + n1); + } + + /** + * @brief Return whether the DOF j is fixed for a given BC. + * + * Arguments: + * <ul> + * <li> i: the BC ID, + * <li> j: the index of the DOF (0-3 if thermomechanical problems). + * </ul> + */ + inline scalar getDirichletDof(local_ordinal_type i, local_ordinal_type j) + { + return dirichlet_values_list(i, 0, dirichlet_dofs + j); + } + + /** + * @brief Return the value of the fixed DOF for a given BC. + * + * Arguments: + * <ul> + * <li> i: the BC ID, + * <li> j: the index of the DOF (0-3 if thermomechanical problems). + * </ul> + */ + inline scalar getDirichletValue(local_ordinal_type i, local_ordinal_type j) + { + return dirichlet_values_list(i, 0, dirichlet_values + j); + } +}; +}; // namespace katoptron + +#endif //KATOPTRON_DIRICHLETLIST_H diff --git a/katoptron/src/DirichletList.hpp b/katoptron/src/DirichletList.hpp new file mode 100644 index 0000000000000000000000000000000000000000..c26eabc868c8a2a62407bdfec2a86e539611db2f --- /dev/null +++ b/katoptron/src/DirichletList.hpp @@ -0,0 +1,93 @@ +namespace katoptron +{ + +/** + * @brief DirichletList constructor + * + * This constructor allocates 2 Kokkos::View which store all the required information related to each Dirichlet BC, including: + * <ul> + * <li> all the Dirichlet nodes, + * <li> all the values of the Dirichlet BC. + * </ul> + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> map: an RCP to a Map object, + * <li> elementsList: an RCP to an ElementList object. + * </ul> + */ +template <typename scalar> +DirichletList<scalar>::DirichletList(Problem &pbl, Teuchos::RCP<Map> map, Teuchos::RCP<ElementsList> elementsList) +{ + typedef Map::local_ordinal_type local_ordinal_type; + typedef Map::global_ordinal_type global_ordinal_type; + + typedef EnsembleTraits<scalar> ET; + const int ensemble_size = ET::size; + + local_ordinal_type numDPN = map->numPrimalDPN; + dirichlet_number = pbl.duBCs.size(); + local_ordinal_type maxNumNodesPerBC = 0; + + std::vector<std::vector<global_ordinal_type>> bcNodes = {}; + + for (auto i = 0; i < dirichlet_number; ++i) + { + std::vector<global_ordinal_type> tmpMyBcNodes = {}; + std::vector<global_ordinal_type> myBcNodes = {}; + + for (auto j = 0; j < pbl.duBCs[i]->nodes.size(); ++j) + tmpMyBcNodes.push_back(pbl.duBCs[i]->nodes[j]->row); + + std::sort(tmpMyBcNodes.begin(), tmpMyBcNodes.end()); + + if (tmpMyBcNodes.size() >= 1) + myBcNodes.push_back(tmpMyBcNodes[0]); + + for (auto ii = 1; ii < tmpMyBcNodes.size(); ++ii) + if (tmpMyBcNodes[ii] != tmpMyBcNodes[ii - 1]) + myBcNodes.push_back(tmpMyBcNodes[ii]); + + bcNodes.push_back(myBcNodes); + if (maxNumNodesPerBC < myBcNodes.size()) + maxNumNodesPerBC = myBcNodes.size(); + } + + dirichlet_size = 0; + dirichlet_nodes = 1; + dirichlet_nodesList = Kokkos::View<int **, Kokkos::LayoutRight>("R", dirichlet_number, dirichlet_nodes + maxNumNodesPerBC); + + for (auto i = 0; i < dirichlet_number; ++i) + { + dirichlet_nodesList(i, dirichlet_size) = bcNodes[i].size(); + for (auto j = 0; j < bcNodes[i].size(); ++j) + { + dirichlet_nodesList(i, dirichlet_nodes + j) = bcNodes[i][j]; + } + } + + dirichlet_time = 0; + dirichlet_dofs = 1; + dirichlet_values = 1 + numDPN; + dirichlet_values_list = Kokkos::View<scalar ***, Kokkos::LayoutRight>("R", dirichlet_number, 1, 1 + 2 * numDPN); + for (auto i = 0; i < dirichlet_number; ++i) + { + dirichlet_values_list(i, 0, dirichlet_time) = 0.; //to change latter + for (auto j = 0; j < numDPN; ++j) + if (pbl.duBCs[i]->which_dof[j]) + dirichlet_values_list(i, 0, dirichlet_dofs + j) = 1; + else + dirichlet_values_list(i, 0, dirichlet_dofs + j) = 0; + + for (int j = 0; j < ensemble_size; ++j) + { + ET::coeff(dirichlet_values_list(i, 0, dirichlet_values + 0), j) = pbl.duBCs[i]->x_values[j]; + ET::coeff(dirichlet_values_list(i, 0, dirichlet_values + 1), j) = pbl.duBCs[i]->y_values[j]; + ET::coeff(dirichlet_values_list(i, 0, dirichlet_values + 2), j) = pbl.duBCs[i]->z_values[j]; + if (numDPN == 4) + ET::coeff(dirichlet_values_list(i, 0, dirichlet_values + 3), j) = pbl.duBCs[i]->T_values[j]; + } + } +} +}; // namespace katoptron diff --git a/katoptron/src/DirichletListETI.cpp b/katoptron/src/DirichletListETI.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ea0ea71e5c9ebccfdd1cb6381e2122c02009c118 --- /dev/null +++ b/katoptron/src/DirichletListETI.cpp @@ -0,0 +1,10 @@ +#include "DirichletList.h" +#include "DirichletList.hpp" + +using namespace katoptron; + +template class DirichletList<double>; +template class DirichletList<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 8, Kokkos::OpenMP>>>; +template class DirichletList<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 16, Kokkos::OpenMP>>>; +template class DirichletList<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 24, Kokkos::OpenMP>>>; +template class DirichletList<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 32, Kokkos::OpenMP>>>; \ No newline at end of file diff --git a/katoptron/src/DiscreteProblem.h b/katoptron/src/DiscreteProblem.h new file mode 100644 index 0000000000000000000000000000000000000000..54a9c7d4cfd78d49c02cf17c4a0eb6053e501a93 --- /dev/null +++ b/katoptron/src/DiscreteProblem.h @@ -0,0 +1,99 @@ +#ifndef KATOPTRON_DISCRETEPROBLEM_H +#define KATOPTRON_DISCRETEPROBLEM_H + +#include "katoptron.h" +#include "Map.h" +#include "Domain.h" +#include "Loads.h" +#include "Algebraic.h" +#include "ElementMatrices.h" +#include "ElementVectors.h" + +#include <Xpetra_Map.hpp> +#include <Xpetra_TpetraMap.hpp> +#include <Xpetra_BlockedMap.hpp> +#include <Xpetra_BlockedCrsMatrix.hpp> +#include <Xpetra_BlockedMultiVector.hpp> +#include <Xpetra_TpetraCrsMatrix.hpp> +#include <Xpetra_TpetraMultiVector.hpp> +#include <Xpetra_CrsMatrixWrap.hpp> +//#include <Xpetra_UseShortNames.hpp> + +#include "LinearSolver.h" + +#include "Mortar.h" + +#include <mpi.h> + +namespace katoptron +{ + +/** + * @brief Class which is used to store all the information related to the discretized problem: + * <ul> + * <li> the information related to the activity of the Lagrange multipliers, + * <li> the discretized domain, + * <li> the algebraic information. + * </ul> + */ +template <typename scalar> +class DiscreteProblem +{ +private: + Kokkos::View<scalar *, Kokkos::LayoutRight> old_old_activity; + Kokkos::View<scalar *, Kokkos::LayoutRight> old_activity; + +public: + // + // Convenience typedefs + // + typedef Map::local_ordinal_type local_ordinal_type; + typedef Map::global_ordinal_type global_ordinal_type; + typedef Map::node_type node_type; + typedef Tpetra::Export<local_ordinal_type, global_ordinal_type> export_type; + + typedef Map::tpetra_map_type tpetra_map_type; + typedef Map::xpetra_map_type xpetra_map_type; + typedef Map::xpetra_tmap_type xpetra_tmap_type; + typedef Map::xpetra_bmap_type xpetra_bmap_type; + + typedef typename Vectors<scalar>::tpetra_vector_type tpetra_vector_type; + typedef typename Vectors<scalar>::tpetra_mvector_type tpetra_mvector_type; + typedef typename Vectors<scalar>::xpetra_bmvector_type xpetra_bmvector_type; + typedef typename Vectors<scalar>::xpetra_mvector_type xpetra_mvector_type; + typedef typename Vectors<scalar>::xpetra_tmvector_type xpetra_tmvector_type; + + typedef typename Matrices<scalar>::tpetra_crs_type tpetra_crs_type; + typedef typename Matrices<scalar>::xpetra_crs_type xpetra_crs_type; + typedef typename Matrices<scalar>::xpetra_wcrs_type xpetra_wcrs_type; + typedef typename Matrices<scalar>::xpetra_bcrs_type xpetra_bcrs_type; + typedef typename Matrices<scalar>::xpetra_tcrs_type xpetra_tcrs_type; +#ifndef SWIG + Teuchos::RCP<Domain<scalar>> domain; + Teuchos::RCP<Loads<scalar>> loads; + Teuchos::RCP<Algebraic<scalar>> algebraic; +#endif + size_t numPrimalDPN; + + DiscreteProblem(Problem &pbl, size_t _numPrimalDPN, + Teuchos::RCP<Teuchos::ParameterList> randomParams, + Kokkos::View<scalar *, Kokkos::LayoutLeft> m_rv_values); + + ~DiscreteProblem() + { + std::cout << "~DiscreteProblem()\n"; + } + +#ifndef SWIG + void createBlockMatrix(scalar gamma, bool write, bool merge); + void createBlockMVector(bool write); + void computeMatrices(void); + void computeContactMatrices(MPI_Comm comm); + void computeLoads(bool scaled = false); + Mask<scalar> updateActivity(int active_set_iteration); + +#endif +}; +}; // namespace katoptron + +#endif //KATOPTRON_DISCRETEPROBLEM_H diff --git a/katoptron/src/DiscreteProblem.hpp b/katoptron/src/DiscreteProblem.hpp new file mode 100644 index 0000000000000000000000000000000000000000..3a0332c08711851225803afd5533e46705dff4aa --- /dev/null +++ b/katoptron/src/DiscreteProblem.hpp @@ -0,0 +1,1424 @@ +#include <Xpetra_MatrixFactory.hpp> +#include <Xpetra_Matrix.hpp> +#include <Xpetra_MatrixMatrix.hpp> +#include <Xpetra_CrsMatrixWrap.hpp> +#include <Xpetra_BlockedCrsMatrix.hpp> +#include <Xpetra_CrsMatrix.hpp> +#include <MueLu_Utilities_decl.hpp> + +namespace katoptron +{ + +/** + * @brief DiscreteProblem constructor + * + * This constructor constructs a katoptron::Map, a katoptron::Domain, a katoptron::Loads, and a katoptron::Algebraic. + * The last three objects are stored as member data of the katoptron::DiscreteProblem object and include all + * the information related to the problem to solve. See the documentation of the member data for more information on + * the purpose of each class. + * + * Arguments: + * <ul> + * <li> A problem object, + * <li> An RCP to a ParameterList object which describes the random fields, + * <li> A Kokkos View of the values used in the discretization of the random fields. + * </ul> + */ +template <typename scalar> +DiscreteProblem<scalar>::DiscreteProblem(Problem &pbl, size_t _numPrimalDPN, + Teuchos::RCP<Teuchos::ParameterList> randomParams, + Kokkos::View<scalar *, Kokkos::LayoutLeft> m_rv_values) +{ + numPrimalDPN = _numPrimalDPN; + + LinearSolver::getTimers()["map"].start(); + Teuchos::RCP<Map> map = Teuchos::rcp(new Map(pbl, numPrimalDPN)); + LinearSolver::getTimers()["map"].stop(); + LinearSolver::getTimers()["domain"].start(); + domain = Teuchos::rcp(new Domain<scalar>(pbl, map, randomParams, m_rv_values)); + LinearSolver::getTimers()["domain"].stop(); + LinearSolver::getTimers()["loads"].start(); + loads = Teuchos::rcp(new Loads<scalar>(pbl, map, domain)); + LinearSolver::getTimers()["loads"].stop(); + algebraic = Teuchos::rcp(new Algebraic<scalar>(map, domain)); +} + +/** + * @brief Update the activity of the Lagrange multipliers + * and return a Mask which stores true for the converged samples. + * + * Argument: + * <ul> + * <li> active_set_iteration: ID of the current active set iteration. + * </ul> + */ +template <typename scalar> +Mask<scalar> DiscreteProblem<scalar>::updateActivity(int active_set_iteration) +{ + using Teuchos::Array; + using Teuchos::RCP; + using Teuchos::rcp; + + const size_t myRank = algebraic->map->mapDofs->getComm()->getRank(); + + // First, get the displacement solution, + + RCP<tpetra_mvector_type> mx = + (Teuchos::rcp_dynamic_cast<xpetra_tmvector_type>(algebraic->vectors->solutionMultiVector))->getTpetra_MultiVector(); + RCP<tpetra_vector_type> xl = mx->getVectorNonConst(0); + + RCP<tpetra_vector_type> x = rcp(new tpetra_vector_type(algebraic->map->mapDofs, false)); + + RCP<xpetra_bmvector_type> blockedSol = + rcp(new xpetra_bmvector_type(algebraic->map->blockedMap, algebraic->vectors->solutionMultiVector)); + + RCP<tpetra_vector_type> l = + (Teuchos::rcp_dynamic_cast<xpetra_tmvector_type>(blockedSol->getMultiVector(1, true)))->getTpetra_MultiVector()->getVectorNonConst(0); + + RCP<tpetra_vector_type> gap = rcp(new tpetra_vector_type(*algebraic->vectors->initialGap, Teuchos::Copy)); + + RCP<export_type> exportx = rcp(new export_type(algebraic->map->fullmap, algebraic->map->mapDofs)); + + x->doExport(*xl, *exportx, Tpetra::INSERT); + + // Multiply it with B_G and remove initial gap + + // gap = 1 * B_G * x - 1 * gap + + algebraic->matrices->B_G->apply(*x, *gap, Teuchos::NO_TRANS, ((scalar)1.), ((scalar)-1.)); + + // sum lambda + c * the previously computed vector + double c = 1.; + l->update((scalar)c, *gap, (scalar)1.); // l = l + c*gap + + // loop on the local lagrange and create the new activity + + l->template sync<Kokkos::HostSpace>(); + auto l_2d = l->template getLocalView<Kokkos::HostSpace>(); + + Mask<scalar> hasConverged; + const size_t ensemble_size = hasConverged.getSize(); + + for (size_t l = 0; l < ensemble_size; ++l) + hasConverged.set(l, true); + + bool hasConverged_old = false; + if (active_set_iteration > 1) + hasConverged_old = true; + + algebraic->matrices->B_2->resumeFill(); + algebraic->matrices->C->resumeFill(); + algebraic->matrices->Cb->resumeFill(); + + const size_t numDPN = algebraic->map->numPrimalDPN; + + size_t numLMPN; + if (domain->contactsList->hasAtLeastOneSticking() && numDPN == 4) + numLMPN = 4; + else if (domain->contactsList->hasAtLeastOneSticking()) + numLMPN = 3; + else if (numDPN == 4) + numLMPN = 2; + else + numLMPN = 1; + + const int numMyLagrangeNum = algebraic->map->mapLagrangeDofs->getNodeNumElements(); + + const int numMyMechLagrangeNum = numMyLagrangeNum / numLMPN; + + for (auto local_index = 0; local_index < numMyMechLagrangeNum; ++local_index) + { + global_ordinal_type lagrange_id = algebraic->map->mapLagrangeDofs->getGlobalElement(local_index); + global_ordinal_type node_id = algebraic->map->lm_to_dof[lagrange_id]; + lagrange_id = lagrange_id * numLMPN; + local_ordinal_type interface_id = domain->contactsList->getInterfaceOfSlaveNode(node_id); + + if (domain->contactsList->isNotUpdated(interface_id)) + continue; + + scalar old_mask = old_activity(local_index); + scalar old_old_mask = old_old_activity(local_index); + Mask<scalar> current_mask = (l_2d(local_index * numLMPN, 0) >= 0.); + + scalar oneMask, oneNotMask; + mask_assign<scalar>(current_mask, oneMask) = {1., 0.}; + mask_assign<scalar>(current_mask, oneNotMask) = {0., 1.}; + + if (active_set_iteration > 1) + if (!MaskLogic::AND(oneMask == old_old_mask)) + hasConverged_old = false; + + hasConverged = hasConverged && (oneMask == old_mask); + + if (!MaskLogic::AND(oneMask == old_mask)) + { + global_ordinal_type lagrange_id = algebraic->map->mapLagrangeDofs->getGlobalElement(local_index); + + lagrange_id = lagrange_id * numLMPN; + + // If the current Lagrange multiplier is active for every sample of the current ensemble, + // we can do the update without using the mask entries. + if (MaskLogic::AND(current_mask)) + { + Teuchos::ArrayView<const local_ordinal_type> local_indices; + Teuchos::ArrayView<const scalar> values; + + if (domain->contactsList->isSticking(interface_id)) + { + for (size_t j = 0; j < numLMPN; ++j) + { + algebraic->matrices->B->getLocalRowView(local_index * numLMPN + j, local_indices, values); + + for (auto k = 0; k < local_indices.size(); ++k) + { + global_ordinal_type column_index = algebraic->matrices->B->getColMap()->getGlobalElement(local_indices[k]); + + algebraic->matrices->B_2->replaceGlobalValues(lagrange_id + j, + Teuchos::tuple<global_ordinal_type>(column_index), + Teuchos::tuple<scalar>(values[k])); + } + + algebraic->matrices->C->replaceGlobalValues(lagrange_id + j, + Teuchos::tuple<global_ordinal_type>(lagrange_id + j), + Teuchos::tuple<scalar>((scalar)0.)); + + algebraic->matrices->Cb->replaceGlobalValues(lagrange_id + j, + Teuchos::tuple<global_ordinal_type>(lagrange_id + j), + Teuchos::tuple<scalar>((scalar)1.)); + } + } + else + { + algebraic->matrices->B->getLocalRowView(local_index * numLMPN, local_indices, values); + + for (auto k = 0; k < local_indices.size(); ++k) + { + global_ordinal_type column_index = algebraic->matrices->B->getColMap()->getGlobalElement(local_indices[k]); + + algebraic->matrices->B_2->replaceGlobalValues(lagrange_id, + Teuchos::tuple<global_ordinal_type>(column_index), + Teuchos::tuple<scalar>(values[k])); + } + + algebraic->matrices->C->replaceGlobalValues(lagrange_id, + Teuchos::tuple<global_ordinal_type>(lagrange_id), + Teuchos::tuple<scalar>((scalar)0.)); + + algebraic->matrices->Cb->replaceGlobalValues(lagrange_id, + Teuchos::tuple<global_ordinal_type>(lagrange_id), + Teuchos::tuple<scalar>((scalar)1.)); + + if (numLMPN == 2 || numLMPN == 4) + { + algebraic->matrices->B->getLocalRowView(local_index * numLMPN + numLMPN - 1, local_indices, values); + + for (auto k = 0; k < local_indices.size(); ++k) + { + global_ordinal_type column_index = algebraic->matrices->B->getColMap()->getGlobalElement(local_indices[k]); + + algebraic->matrices->B_2->replaceGlobalValues(lagrange_id + numLMPN - 1, + Teuchos::tuple<global_ordinal_type>(column_index), + Teuchos::tuple<scalar>(values[k])); + } + + algebraic->matrices->C->replaceGlobalValues(lagrange_id + numLMPN - 1, + Teuchos::tuple<global_ordinal_type>(lagrange_id + numLMPN - 1), + Teuchos::tuple<scalar>((scalar)0.)); + + algebraic->matrices->Cb->replaceGlobalValues(lagrange_id + numLMPN - 1, + Teuchos::tuple<global_ordinal_type>(lagrange_id + numLMPN - 1), + Teuchos::tuple<scalar>((scalar)1.)); + } + } + } + // If the current Lagrange multiplier is inactive for every sample of the current ensemble, + // we can do the update without using the mask entries. + else if (!MaskLogic::AND(current_mask)) + { + Teuchos::ArrayView<const local_ordinal_type> local_indices; + Teuchos::ArrayView<const scalar> values; + + if (domain->contactsList->isSticking(interface_id)) + { + for (size_t j = 0; j < numLMPN; ++j) + { + algebraic->matrices->B->getLocalRowView(local_index * numLMPN + j, local_indices, values); + + for (auto k = 0; k < local_indices.size(); ++k) + { + global_ordinal_type column_index = algebraic->matrices->B->getColMap()->getGlobalElement(local_indices[k]); + + algebraic->matrices->B_2->replaceGlobalValues(lagrange_id + j, + Teuchos::tuple<global_ordinal_type>(column_index), + Teuchos::tuple<scalar>((scalar)0.)); + } + + algebraic->matrices->C->replaceGlobalValues(lagrange_id + j, + Teuchos::tuple<global_ordinal_type>(lagrange_id + j), + Teuchos::tuple<scalar>((scalar)1.)); + + algebraic->matrices->Cb->replaceGlobalValues(lagrange_id + j, + Teuchos::tuple<global_ordinal_type>(lagrange_id + j), + Teuchos::tuple<scalar>((scalar)0.)); + } + } + else + { + algebraic->matrices->B->getLocalRowView(local_index * numLMPN, local_indices, values); + + for (auto k = 0; k < local_indices.size(); ++k) + { + global_ordinal_type column_index = algebraic->matrices->B->getColMap()->getGlobalElement(local_indices[k]); + + algebraic->matrices->B_2->replaceGlobalValues(lagrange_id, + Teuchos::tuple<global_ordinal_type>(column_index), + Teuchos::tuple<scalar>((scalar)0.)); + } + + algebraic->matrices->C->replaceGlobalValues(lagrange_id, + Teuchos::tuple<global_ordinal_type>(lagrange_id), + Teuchos::tuple<scalar>((scalar)1.)); + + algebraic->matrices->Cb->replaceGlobalValues(lagrange_id, + Teuchos::tuple<global_ordinal_type>(lagrange_id), + Teuchos::tuple<scalar>((scalar)0.)); + + if (numLMPN == 2 || numLMPN == 4) + { + algebraic->matrices->B->getLocalRowView(local_index * numLMPN + numLMPN - 1, local_indices, values); + + for (auto k = 0; k < local_indices.size(); ++k) + { + global_ordinal_type column_index = algebraic->matrices->B->getColMap()->getGlobalElement(local_indices[k]); + + algebraic->matrices->B_2->replaceGlobalValues(lagrange_id + numLMPN - 1, + Teuchos::tuple<global_ordinal_type>(column_index), + Teuchos::tuple<scalar>((scalar)0.)); + } + + algebraic->matrices->C->replaceGlobalValues(lagrange_id + numLMPN - 1, + Teuchos::tuple<global_ordinal_type>(lagrange_id + numLMPN - 1), + Teuchos::tuple<scalar>((scalar)1.)); + + algebraic->matrices->Cb->replaceGlobalValues(lagrange_id + numLMPN - 1, + Teuchos::tuple<global_ordinal_type>(lagrange_id + numLMPN - 1), + Teuchos::tuple<scalar>((scalar)0.)); + } + } + } + // Else, if the activity of the current Lagrange multiplier depends on the samples, we use the mask to do the update. + else + { + + Teuchos::ArrayView<const local_ordinal_type> local_indices; + Teuchos::ArrayView<const scalar> values; + + if (domain->contactsList->isSticking(interface_id)) + { + for (size_t j = 0; j < numLMPN; ++j) + { + algebraic->matrices->B->getLocalRowView(local_index * numLMPN + j, local_indices, values); + + for (auto k = 0; k < local_indices.size(); ++k) + { + global_ordinal_type column_index = algebraic->matrices->B->getColMap()->getGlobalElement(local_indices[k]); + + algebraic->matrices->B_2->replaceGlobalValues(lagrange_id + j, + Teuchos::tuple<global_ordinal_type>(column_index), + Teuchos::tuple<scalar>(oneMask * values[k])); + } + + algebraic->matrices->C->replaceGlobalValues(lagrange_id + j, + Teuchos::tuple<global_ordinal_type>(lagrange_id + j), + Teuchos::tuple<scalar>(oneNotMask)); + + algebraic->matrices->Cb->replaceGlobalValues(lagrange_id + j, + Teuchos::tuple<global_ordinal_type>(lagrange_id + j), + Teuchos::tuple<scalar>(oneMask)); + } + } + else + { + algebraic->matrices->B->getLocalRowView(local_index * numLMPN, local_indices, values); + + for (auto k = 0; k < local_indices.size(); ++k) + { + global_ordinal_type column_index = algebraic->matrices->B->getColMap()->getGlobalElement(local_indices[k]); + + algebraic->matrices->B_2->replaceGlobalValues(lagrange_id, + Teuchos::tuple<global_ordinal_type>(column_index), + Teuchos::tuple<scalar>(oneMask * values[k])); + } + + algebraic->matrices->C->replaceGlobalValues(lagrange_id, + Teuchos::tuple<global_ordinal_type>(lagrange_id), + Teuchos::tuple<scalar>(oneNotMask)); + + algebraic->matrices->Cb->replaceGlobalValues(lagrange_id, + Teuchos::tuple<global_ordinal_type>(lagrange_id), + Teuchos::tuple<scalar>(oneMask)); + + if (numLMPN == 2 || numLMPN == 4) + { + algebraic->matrices->B->getLocalRowView(local_index * numLMPN + numLMPN - 1, local_indices, values); + + for (auto k = 0; k < local_indices.size(); ++k) + { + global_ordinal_type column_index = algebraic->matrices->B->getColMap()->getGlobalElement(local_indices[k]); + + algebraic->matrices->B_2->replaceGlobalValues(lagrange_id + numLMPN - 1, + Teuchos::tuple<global_ordinal_type>(column_index), + Teuchos::tuple<scalar>(oneMask * values[k])); + } + + algebraic->matrices->C->replaceGlobalValues(lagrange_id + numLMPN - 1, + Teuchos::tuple<global_ordinal_type>(lagrange_id + numLMPN - 1), + Teuchos::tuple<scalar>(oneNotMask)); + + algebraic->matrices->Cb->replaceGlobalValues(lagrange_id + numLMPN - 1, + Teuchos::tuple<global_ordinal_type>(lagrange_id + numLMPN - 1), + Teuchos::tuple<scalar>(oneMask)); + } + } + } + } + + old_old_activity(local_index) = old_activity(local_index); + old_activity(local_index) = oneMask; + } + + algebraic->matrices->B_2->fillComplete(algebraic->map->mapDofs, algebraic->map->mapLagrangeDofs); + algebraic->matrices->C->fillComplete(); + algebraic->matrices->Cb->fillComplete(); + + RCP<tpetra_vector_type> initialActiveGap(new tpetra_vector_type(algebraic->map->mapLagrangeDofs, true)); + algebraic->matrices->Cb->apply(*algebraic->vectors->initialGap, *initialActiveGap); + + RCP<xpetra_mvector_type> xg = + rcp(new xpetra_tmvector_type(initialActiveGap)); + algebraic->vectors->rhsBlockedMultiVector->setMultiVector(1, xg, true); + algebraic->vectors->rhsMultiVector = algebraic->vectors->rhsBlockedMultiVector->Merge(); + + size_t numtasks = algebraic->map->mapDofs->getComm()->getSize(); + + double tmp; + + if (myRank == 0) + { + Mask<scalar> globalHasConverged = hasConverged; + bool globalHasConverged_old = hasConverged_old; + + for (size_t i = 1; i < numtasks; ++i) + { + for (size_t l = 0; l < ensemble_size; ++l) + { + MPI_Recv(&tmp, 1, MPI_DOUBLE, i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); + if (tmp < 0.) + globalHasConverged.set(l, false); + } + MPI_Recv(&tmp, 1, MPI_DOUBLE, i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); + if (tmp < 0.) + globalHasConverged_old = false; + } + hasConverged = globalHasConverged; + hasConverged_old = globalHasConverged_old; + + for (size_t i = 1; i < numtasks; ++i) + { + for (size_t l = 0; l < ensemble_size; ++l) + { + tmp = hasConverged.get(l) ? 1. : -1.; + MPI_Send(&tmp, 1, MPI_DOUBLE, i, 0, MPI_COMM_WORLD); + } + tmp = hasConverged_old ? 1. : -1.; + MPI_Send(&tmp, 1, MPI_DOUBLE, i, 0, MPI_COMM_WORLD); + } + } + else + { + for (size_t l = 0; l < ensemble_size; ++l) + { + tmp = hasConverged.get(l) ? 1. : -1.; + MPI_Send(&tmp, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD); + } + tmp = hasConverged_old ? 1. : -1.; + MPI_Send(&tmp, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD); + for (size_t l = 0; l < ensemble_size; ++l) + { + MPI_Recv(&tmp, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); + hasConverged.set(l, tmp > 0.); + } + MPI_Recv(&tmp, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); + hasConverged_old = (tmp > 0.); + } + + if (hasConverged_old) + { + if (myRank == 0) + { + std::cout << "-----------------------" << std::endl; + std::cout << "---Has not converged---" << std::endl; + std::cout << "-----------------------" << std::endl; + } + return true; + } + + return hasConverged; +} + +/** + * @brief Create the block matrix. + * + * Arguments: + * <ul> + * <li> gamma: the value used for the Augmented Lagrangian formulation, + * <li> write: a boolean which is used to write matrices on disk or not. + * </ul> + */ +template <typename scalar> +void DiscreteProblem<scalar>::createBlockMatrix(scalar gamma, bool write, bool merge) +{ + using Teuchos::Array; + using Teuchos::RCP; + using Teuchos::rcp; + + const std::vector<RCP<const tpetra_map_type>> maps = {algebraic->map->mapDofs, algebraic->map->mapLagrangeDofs}; + + const size_t numDofs = algebraic->map->mapDofs->getGlobalNumElements(); + const size_t numMyDofs = algebraic->map->mapDofs->getNodeNumElements(); + const size_t numMyDofsWO = algebraic->map->mapDofsWO->getNodeNumElements(); + Teuchos::ArrayView<const global_ordinal_type> myDofs = algebraic->map->mapDofs->getNodeElementList(); + Teuchos::ArrayView<const global_ordinal_type> myDofsWO = algebraic->map->mapDofsWO->getNodeElementList(); + + const size_t numLagrangeDofs = algebraic->map->mapLagrangeDofs->getGlobalNumElements(); + const size_t numMyLagrangeDofs = algebraic->map->mapLagrangeDofs->getNodeNumElements(); + Teuchos::ArrayView<const global_ordinal_type> myLagrangeDofs = algebraic->map->mapLagrangeDofs->getNodeElementList(); + + Array<global_ordinal_type> myFullDofs(numMyDofs + numMyLagrangeDofs); + for (auto i = 0; i < numMyDofs; ++i) + myFullDofs[i] = myDofs[i]; + for (auto i = 0; i < numMyLagrangeDofs; ++i) + myFullDofs[numMyDofs + i] = numDofs + myLagrangeDofs[i]; + + Array<global_ordinal_type> myFullDofsWO(numMyDofsWO + numMyLagrangeDofs); + for (auto i = 0; i < numMyDofsWO; ++i) + myFullDofsWO[i] = myDofsWO[i]; + for (auto i = 0; i < numMyLagrangeDofs; ++i) + myFullDofsWO[numMyDofsWO + i] = numDofs + myLagrangeDofs[i]; + + algebraic->map->fullmap = + rcp(new tpetra_map_type(numDofs + numLagrangeDofs, + myFullDofs, + algebraic->map->mapDofs->getIndexBase(), + algebraic->map->mapDofs->getComm())); + algebraic->map->fullmapWO = + rcp(new tpetra_map_type(numDofs + numLagrangeDofs, + myFullDofsWO, + algebraic->map->mapDofs->getIndexBase(), + algebraic->map->mapDofs->getComm())); + + RCP<xpetra_map_type> xfullmap = rcp(new xpetra_tmap_type(algebraic->map->fullmap)); + + const size_t myRank = algebraic->map->mapDofs->getComm()->getRank(); + const size_t numLclIndices = (myRank == 0) ? numDofs + numLagrangeDofs : 0; + + algebraic->map->fullmapOutput = + rcp(new tpetra_map_type(numDofs + numLagrangeDofs, + numLclIndices, + algebraic->map->mapDofs->getIndexBase(), + algebraic->map->mapDofs->getComm())); + + std::vector<RCP<const xpetra_map_type>> xsubmaps = {rcp(new xpetra_tmap_type(algebraic->map->mapDofs)), //algebraic->map->thermomecBlockedMap, + rcp(new xpetra_tmap_type(algebraic->map->mapLagrangeDofs))}; + + algebraic->map->blockedMap = + rcp(new xpetra_bmap_type(xfullmap, xsubmaps, true)); + + algebraic->matrices->blockedMatrix = + rcp(new xpetra_bcrs_type(algebraic->map->blockedMap, algebraic->map->blockedMap, 8)); + + //Update B based on the initial activity + + algebraic->matrices->B_2->resumeFill(); + algebraic->matrices->C->resumeFill(); + algebraic->matrices->Cb->resumeFill(); + + const size_t numDPN = algebraic->map->numPrimalDPN; + + size_t numLMPN; + if (domain->contactsList->hasAtLeastOneSticking() && numDPN == 4) + numLMPN = 4; + else if (domain->contactsList->hasAtLeastOneSticking()) + numLMPN = 3; + else if (numDPN == 4) + numLMPN = 2; + else + numLMPN = 1; + + const int numMyLagrangeNum = algebraic->map->mapLagrangeDofs->getNodeNumElements(); + + const int numMyMechLagrangeNum = numMyLagrangeNum / numLMPN; + + old_activity = Kokkos::View<scalar *, Kokkos::LayoutRight>("R", numMyMechLagrangeNum); + old_old_activity = Kokkos::View<scalar *, Kokkos::LayoutRight>("R", numMyMechLagrangeNum); + + for (auto local_index = 0; local_index < numMyMechLagrangeNum; ++local_index) + { + global_ordinal_type lagrange_id = algebraic->map->mapLagrangeDofs->getGlobalElement(local_index); + global_ordinal_type node_id = algebraic->map->lm_to_dof[lagrange_id]; + lagrange_id = lagrange_id * numLMPN; + local_ordinal_type interface_id = domain->contactsList->getInterfaceOfSlaveNode(node_id); + if (domain->contactsList->isInitiallyOpen(interface_id)) + { + if (domain->contactsList->isNodeInitiallyClosed(interface_id, node_id)) + { + old_activity(local_index) = (scalar)1.; + continue; + } + old_activity(local_index) = (scalar)0.; + + Teuchos::ArrayView<const local_ordinal_type> local_indices; + Teuchos::ArrayView<const scalar> values; + + for (size_t j = 0; j < numLMPN; ++j) + { + algebraic->matrices->B_2->getLocalRowView(local_index * numLMPN + j, local_indices, values); + + for (auto k = 0; k < local_indices.size(); ++k) + { + global_ordinal_type column_index = algebraic->matrices->B->getColMap()->getGlobalElement(local_indices[k]); + + algebraic->matrices->B_2->replaceGlobalValues(lagrange_id + j, + Teuchos::tuple<global_ordinal_type>(column_index), + Teuchos::tuple<scalar>((scalar)0.)); + } + + algebraic->matrices->C->replaceGlobalValues(lagrange_id + j, + Teuchos::tuple<global_ordinal_type>(lagrange_id + j), + Teuchos::tuple<scalar>((scalar)1.)); + + algebraic->matrices->Cb->replaceGlobalValues(lagrange_id + j, + Teuchos::tuple<global_ordinal_type>(lagrange_id + j), + Teuchos::tuple<scalar>((scalar)0.)); + } + } + else + { + old_activity(local_index) = (scalar)1.; + if (domain->contactsList->isSticking(interface_id) == false && domain->contactsList->hasAtLeastOneSticking() == true) + { + Teuchos::ArrayView<const local_ordinal_type> local_indices; + Teuchos::ArrayView<const scalar> values; + + for (size_t j = 1; j < numLMPN; ++j) + { + algebraic->matrices->B_2->getLocalRowView(local_index * numLMPN + j, local_indices, values); + + for (auto k = 0; k < local_indices.size(); ++k) + { + global_ordinal_type column_index = algebraic->matrices->B->getColMap()->getGlobalElement(local_indices[k]); + + algebraic->matrices->B_2->replaceGlobalValues(lagrange_id + j, + Teuchos::tuple<global_ordinal_type>(column_index), + Teuchos::tuple<scalar>((scalar)0.)); + } + + algebraic->matrices->C->replaceGlobalValues(lagrange_id + j, + Teuchos::tuple<global_ordinal_type>(lagrange_id + j), + Teuchos::tuple<scalar>((scalar)1.)); + + algebraic->matrices->Cb->replaceGlobalValues(lagrange_id + j, + Teuchos::tuple<global_ordinal_type>(lagrange_id + j), + Teuchos::tuple<scalar>((scalar)0.)); + } + } + } + } + algebraic->matrices->B_2->fillComplete(algebraic->map->mapDofs, algebraic->map->mapLagrangeDofs); + algebraic->matrices->C->fillComplete(); + algebraic->matrices->Cb->fillComplete(); + + algebraic->matrices->xB = rcp(new xpetra_tcrs_type(algebraic->matrices->B_2)); + algebraic->matrices->xB_T = rcp(new xpetra_tcrs_type(algebraic->matrices->B_T)); + algebraic->matrices->xC = rcp(new xpetra_tcrs_type(algebraic->matrices->C)); + + algebraic->matrices->xwB = rcp(new xpetra_wcrs_type(algebraic->matrices->xB)); + algebraic->matrices->xwB_T = rcp(new xpetra_wcrs_type(algebraic->matrices->xB_T)); + algebraic->matrices->xwC = rcp(new xpetra_wcrs_type(algebraic->matrices->xC)); + + RCP<Xpetra::Matrix<scalar, local_ordinal_type, global_ordinal_type, node_type>> CTC = Teuchos::null; + RCP<Xpetra::Matrix<scalar, local_ordinal_type, global_ordinal_type, node_type>> ApCTC = Teuchos::null; + std::string MatrixMatrix_output_file = "MatrixMatrix_out.txt"; + std::ofstream MatrixMatrix_ofstream(MatrixMatrix_output_file); + RCP<Teuchos::FancyOStream> verbOut = Teuchos::getFancyOStream(Teuchos::rcpFromRef(MatrixMatrix_ofstream)); + CTC = + Xpetra::MatrixMatrix<scalar, local_ordinal_type, global_ordinal_type, node_type>::Multiply(*(algebraic->matrices->xwB_T), + false, + *(algebraic->matrices->xwB), + false, + *verbOut); + RCP<xpetra_bcrs_type> bA = Teuchos::rcp_dynamic_cast<xpetra_bcrs_type>(algebraic->matrices->A); + + if (gamma > 0.) + { + if (bA != Teuchos::null && merge) + Xpetra::MatrixMatrix<scalar, local_ordinal_type, global_ordinal_type, node_type>::TwoMatrixAdd(*CTC, + false, + gamma, + *(bA->Merge()), + false, + (scalar)1., + ApCTC, + *verbOut); + else + Xpetra::MatrixMatrix<scalar, local_ordinal_type, global_ordinal_type, node_type>::TwoMatrixAdd(*CTC, + false, + gamma, + *(algebraic->matrices->A), + false, + (scalar)1., + ApCTC, + *verbOut); + } + else + { + if (bA != Teuchos::null && merge) + ApCTC = bA->Merge(); + else + ApCTC = algebraic->matrices->A; + } + + algebraic->matrices->blockedMatrix->setMatrix(0, 0, ApCTC); + algebraic->matrices->blockedMatrix->setMatrix(0, 1, algebraic->matrices->xwB_T); + algebraic->matrices->blockedMatrix->setMatrix(1, 0, algebraic->matrices->xwB); + algebraic->matrices->blockedMatrix->setMatrix(1, 1, algebraic->matrices->xwC); + + algebraic->matrices->blockedMatrix->fillComplete(); + RCP<const xpetra_wcrs_type> tmpOp = Teuchos::rcp_dynamic_cast<const xpetra_wcrs_type>(ApCTC); + const RCP<const xpetra_tcrs_type> &tmp_ECrsMtx = Teuchos::rcp_dynamic_cast<const xpetra_tcrs_type>(tmpOp->getCrsMatrix()); + RCP<const tpetra_crs_type> tpetra_ApCTC = tmp_ECrsMtx->getTpetra_CrsMatrix(); + + if (write) + Tpetra::MatrixMarket::Writer<tpetra_crs_type>::writeSparseFile(std::string("ApCTC_mm.txt"), tpetra_ApCTC); +} + +/** + * @brief Create the block vectors. + * + * Argument: + * <ul> + * <li> write: a boolean which is used to write vectors on disk or not. + * </ul> + */ +template <typename scalar> +void DiscreteProblem<scalar>::createBlockMVector(bool write) +{ + using Teuchos::Array; + using Teuchos::RCP; + using Teuchos::rcp; + + RCP<tpetra_vector_type> intialContactPosition(new tpetra_vector_type(algebraic->map->mapDofs, true)); + algebraic->vectors->initialGap = rcp(new tpetra_vector_type(algebraic->map->mapLagrangeDofs, true)); + RCP<tpetra_vector_type> initialActiveGap(new tpetra_vector_type(algebraic->map->mapLagrangeDofs, true)); + + algebraic->vectors->lagrange = rcp(new tpetra_vector_type(algebraic->map->mapLagrangeDofs, true)); + + { + size_t numMyContacts = domain->contactsList->getContactNumber(); + size_t numPrimalDPN = algebraic->map->numPrimalDPN; + size_t numMPrimalDPN = 3; + size_t offSet = 0; + if (numPrimalDPN == 4) + offSet = algebraic->map->mapNodes->getGlobalNumElements(); + + for (auto i = 0; i < numMyContacts; ++i) + { + size_t numMySlaveNodes = domain->contactsList->getSlaveNodesSize(i); + for (auto j = 0; j < numMySlaveNodes; ++j) + { + // get unique node id + auto global_nodeid = domain->contactsList->getSlaveNode(i, j); + if (algebraic->map->mapNodes->isNodeGlobalElement(global_nodeid)) + { + auto local_nodeid = algebraic->map->mapNodesWO->getLocalElement(global_nodeid); + for (auto k = 0; k < 3; ++k) + { + scalar tmp = domain->nodesList->nodes(local_nodeid, k) + + domain->contactsList->getSlaveNormal(i, k) * + loads->preloadList->getPreloadValue(i); + intialContactPosition->replaceGlobalValue(offSet + global_nodeid * numMPrimalDPN + k, tmp); + } + } + } + + size_t numMyMasterNodes = domain->contactsList->getMasterNodesSize(i); + for (auto j = 0; j < numMyMasterNodes; ++j) + { + // get unique node id + auto global_nodeid = domain->contactsList->getMasterNode(i, j); + if (algebraic->map->mapNodes->isNodeGlobalElement(global_nodeid)) + { + auto local_nodeid = algebraic->map->mapNodesWO->getLocalElement(global_nodeid); + for (auto k = 0; k < 3; ++k) + intialContactPosition->replaceGlobalValue(offSet + global_nodeid * numMPrimalDPN + k, + ((scalar)domain->nodesList->nodes(local_nodeid, k))); + } + } + } + } + + algebraic->matrices->B_G->apply(*intialContactPosition, *algebraic->vectors->initialGap, Teuchos::NO_TRANS, ((scalar)-1.)); + + algebraic->matrices->Cb->apply(*algebraic->vectors->initialGap, *initialActiveGap); + + // TODO: fix me when there is mesh tying and contact together! + if (domain->contactsList->isTying(0)) + initialActiveGap->scale((scalar)0.); + + if (write) + Tpetra::MatrixMarket::Writer<tpetra_crs_type>::writeDenseFile(std::string("initialActiveGap_mm.txt"), initialActiveGap); + + RCP<xpetra_mvector_type> xb = + rcp(new xpetra_tmvector_type(algebraic->vectors->b)); + + RCP<xpetra_mvector_type> xg = + rcp(new xpetra_tmvector_type(initialActiveGap)); + + RCP<xpetra_mvector_type> xx = + rcp(new xpetra_tmvector_type(algebraic->vectors->x)); + + RCP<xpetra_mvector_type> xlagrange = + rcp(new xpetra_tmvector_type(algebraic->vectors->lagrange)); + + algebraic->vectors->rhsBlockedMultiVector = + rcp(new xpetra_bmvector_type(algebraic->map->blockedMap, 1, true)); + + algebraic->vectors->solutionBlockedMultiVector = + rcp(new xpetra_bmvector_type(algebraic->map->blockedMap, 1, true)); + + algebraic->vectors->rhsBlockedMultiVector->setMultiVector(0, xb, true); + algebraic->vectors->rhsBlockedMultiVector->setMultiVector(1, xg, true); + + algebraic->vectors->solutionBlockedMultiVector->setMultiVector(0, xx, true); + algebraic->vectors->solutionBlockedMultiVector->setMultiVector(1, xlagrange, true); + + algebraic->vectors->rhsMultiVector = algebraic->vectors->rhsBlockedMultiVector->Merge(); + algebraic->vectors->solutionMultiVector = algebraic->vectors->solutionBlockedMultiVector->Merge(); +} + +/** + * @brief Compute the contacts matrices. + * + * Argument: + * <ul> + * <li> comm: the used MPI communicator. + * </ul> + */ +template <typename scalar> +void DiscreteProblem<scalar>::computeContactMatrices(MPI_Comm comm) +{ + compute_B<scalar>(algebraic->matrices, + domain->elementsList, + domain->nodesList, + domain->contactsList, + algebraic->map, comm); +} + +/** + * @brief Compute the primal matrix. + */ +template <typename scalar> +void DiscreteProblem<scalar>::computeMatrices(void) +{ + using Teuchos::RCP; + using Teuchos::rcp; + + typedef KokkosSparse::CrsMatrix<scalar, local_ordinal_type, typename tpetra_crs_type::execution_space> local_matrix_type; + + typedef Kokkos::View<scalar ***, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace> elem_matrix_view_type; + + local_matrix_type local_L, local_K, local_S; + + if (numPrimalDPN == 4 || numPrimalDPN == 1) + { + algebraic->matrices->L->resumeFill(); + algebraic->matrices->L->setAllToScalar((scalar)0.0); + + local_L = algebraic->matrices->L->getLocalMatrix(); + } + if (numPrimalDPN == 4 || numPrimalDPN == 3) + { + algebraic->matrices->K->resumeFill(); + algebraic->matrices->K->setAllToScalar((scalar)0.0); + + local_K = algebraic->matrices->K->getLocalMatrix(); + } + if (numPrimalDPN == 4) + { + algebraic->matrices->S->resumeFill(); + algebraic->matrices->S->setAllToScalar((scalar)0.0); + + local_S = algebraic->matrices->S->getLocalMatrix(); + } + + auto numMyElems = domain->elementsList->getElementNumber(); + + elem_matrix_view_type K, L, S; + +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + int pool_size = Kokkos::DefaultExecutionSpace::thread_pool_size(); +#else + int pool_size = Kokkos::DefaultExecutionSpace::impl_thread_pool_size(); +#endif + int max_element_size = 1; + + for (int i_elem = 0; i_elem < numMyElems; ++i_elem) + { + if (domain->elementsList->getElementType(i_elem) == static_cast<int>(tbox::ElType::HEX8)) + { + max_element_size = 8; + break; + } + if (domain->elementsList->getElementType(i_elem) == static_cast<int>(tbox::ElType::TETRA4)) + { + max_element_size = 4; + break; + } + } + + K = Kokkos::View<scalar ***, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace>("A", + pool_size, + 3 * max_element_size, + 3 * max_element_size); + L = Kokkos::View<scalar ***, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace>("A", + pool_size, + max_element_size, + max_element_size); + S = Kokkos::View<scalar ***, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace>("A", + pool_size, + 3 * max_element_size, + max_element_size); + + ElementMatrices<scalar, static_cast<int>(tbox::ElType::HEX8), 8> *elementMatrices_HEX8 = + new ElementMatrices<scalar, static_cast<int>(tbox::ElType::HEX8), 8>(domain, numPrimalDPN, pool_size); + ElementMatrices<scalar, static_cast<int>(tbox::ElType::TETRA4), 4> *elementMatrices_TETRA4 = + new ElementMatrices<scalar, static_cast<int>(tbox::ElType::TETRA4), 4>(domain, numPrimalDPN, pool_size); + + Kokkos::parallel_for( + numMyElems, KOKKOS_LAMBDA(const int i_elem) { + bool bContinue = true; + +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + int i_thread = Kokkos::DefaultExecutionSpace::thread_pool_rank(); +#else + int i_thread = Kokkos::DefaultExecutionSpace::impl_thread_pool_rank(); +#endif + const int e_size = domain->elementsList->getElementSize(i_elem); + + auto K_e = subview(K, i_thread, make_pair(0, 3 * e_size), make_pair(0, 3 * e_size)); + auto L_e = subview(L, i_thread, make_pair(0, e_size), make_pair(0, e_size)); + auto S_e = subview(S, i_thread, make_pair(0, 3 * e_size), make_pair(0, e_size)); + + if (domain->elementsList->getElementType(i_elem) == static_cast<int>(tbox::ElType::HEX8)) + { + elementMatrices_HEX8->compute(i_elem, i_thread); + Kokkos::deep_copy(K_e, elementMatrices_HEX8->getK(i_thread)); + Kokkos::deep_copy(L_e, elementMatrices_HEX8->getL(i_thread)); + Kokkos::deep_copy(S_e, elementMatrices_HEX8->getS(i_thread)); + } + + else if (domain->elementsList->getElementType(i_elem) == static_cast<int>(tbox::ElType::TETRA4)) + { + elementMatrices_TETRA4->compute(i_elem, i_thread); + Kokkos::deep_copy(K_e, elementMatrices_TETRA4->getK(i_thread)); + Kokkos::deep_copy(L_e, elementMatrices_TETRA4->getL(i_thread)); + Kokkos::deep_copy(S_e, elementMatrices_TETRA4->getS(i_thread)); + } + else + bContinue = false; + + if (bContinue) + for (auto i = 0; i < e_size; ++i) + { + local_ordinal_type node_i = domain->elementsList->getElementNode(i_elem, i); + global_ordinal_type global_node_id_i = algebraic->map->mapNodesWO->getGlobalElement(node_i); + // Test if mapNodes ownes global_node_id_i + if (algebraic->map->mapNodes->isNodeGlobalElement(global_node_id_i)) + { + local_ordinal_type local_node_id_i = algebraic->map->mapNodes->getLocalElement(global_node_id_i); + for (auto j = 0; j < e_size; ++j) + { + local_ordinal_type node_j = domain->elementsList->getElementNode(i_elem, j); + + if (numPrimalDPN == 4 || numPrimalDPN == 1) + { + local_ordinal_type cols = node_j; + scalar vals = L_e(i, j); + + local_L.sumIntoValues(local_node_id_i, &cols, 1, &vals, false, true); + } + if (numPrimalDPN == 4 || numPrimalDPN == 3) + { + for (auto k = 0; k < 3; ++k) + for (auto l = 0; l < 3; ++l) + { + local_ordinal_type cols = 3 * node_j + l; + scalar vals = K_e(3 * i + k, 3 * j + l); + local_K.sumIntoValues(3 * local_node_id_i + k, &cols, 1, &vals, false, true); + } + } + if (numPrimalDPN == 4) + { + for (auto k = 0; k < 3; ++k) + { + local_ordinal_type cols = node_j; + scalar vals = S_e(3 * i + k, j); + local_S.sumIntoValues(3 * local_node_id_i + k, &cols, 1, &vals, false, true); + } + } + } + } + } + }); + + if (numPrimalDPN == 4 || numPrimalDPN == 1) + { + algebraic->matrices->L->fillComplete(); + } + if (numPrimalDPN == 4 || numPrimalDPN == 3) + { + algebraic->matrices->K->fillComplete(); + } + if (numPrimalDPN == 4) + { + algebraic->matrices->S->fillComplete(); + } + + delete elementMatrices_HEX8; + delete elementMatrices_TETRA4; + + if (numPrimalDPN == 4) + { + RCP<xpetra_bcrs_type> bA = rcp(new xpetra_bcrs_type(algebraic->map->thermomecBlockedMap, algebraic->map->thermomecBlockedMap, 8)); + + RCP<xpetra_crs_type> xL = rcp(new xpetra_tcrs_type(algebraic->matrices->L)); + RCP<xpetra_crs_type> xK = rcp(new xpetra_tcrs_type(algebraic->matrices->K)); + RCP<xpetra_crs_type> xS = rcp(new xpetra_tcrs_type(algebraic->matrices->S)); + + RCP<xpetra_wcrs_type> xwL = rcp(new xpetra_wcrs_type(xL)); + RCP<xpetra_wcrs_type> xwK = rcp(new xpetra_wcrs_type(xK)); + RCP<xpetra_wcrs_type> xwS = rcp(new xpetra_wcrs_type(xS)); + + bA->setMatrix(0, 0, xwL); + bA->setMatrix(1, 0, xwS); + bA->setMatrix(1, 1, xwK); + + bA->fillComplete(); + + algebraic->matrices->A = bA; + } + else if (numPrimalDPN == 3) + { + RCP<xpetra_crs_type> xK = rcp(new xpetra_tcrs_type(algebraic->matrices->K)); + algebraic->matrices->A = rcp(new xpetra_wcrs_type(xK)); + } + else + { + RCP<xpetra_crs_type> xL = rcp(new xpetra_tcrs_type(algebraic->matrices->L)); + algebraic->matrices->A = rcp(new xpetra_wcrs_type(xL)); + } +} + +/** + * @brief Compute the rhs. + * + * Argument: + * <ul> + * <li> scaled: a boolean which describes whether the system is scaled or not. + * </ul> + */ +template <typename scalar> +void DiscreteProblem<scalar>::computeLoads(bool scaled) +{ + + using Teuchos::RCP; + using Teuchos::rcp; + using Teuchos::tuple; + + typedef Kokkos::View<scalar ***, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace> elem_matrix_view_type; + + elem_matrix_view_type N, N_S; + + auto numMyElems = domain->elementsList->getElementNumber(); + +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + int pool_size = Kokkos::DefaultExecutionSpace::thread_pool_size(); +#else + int pool_size = Kokkos::DefaultExecutionSpace::impl_thread_pool_size(); +#endif + int max_element_size = 1; + int max_element_size_S = 1; + + for (int i_elem = 0; i_elem < numMyElems; ++i_elem) + { + if (domain->elementsList->getElementType(i_elem) == static_cast<int>(tbox::ElType::HEX8)) + { + max_element_size = 8; + max_element_size_S = 4; + break; + } + if (domain->elementsList->getElementType(i_elem) == static_cast<int>(tbox::ElType::TETRA4)) + { + max_element_size = 4; + max_element_size_S = 3; + break; + } + } + N = elem_matrix_view_type("A", pool_size, max_element_size, max_element_size); + N_S = elem_matrix_view_type("A", pool_size, max_element_size_S, max_element_size_S); + + ElementVectors<scalar, static_cast<int>(tbox::ElType::TRI3), 3> *elementVectors_TRI3 = + new ElementVectors<scalar, static_cast<int>(tbox::ElType::TRI3), 3>(domain, numPrimalDPN, pool_size); + ElementVectors<scalar, static_cast<int>(tbox::ElType::QUAD4), 4> *elementVectors_QUAD4 = + new ElementVectors<scalar, static_cast<int>(tbox::ElType::QUAD4), 4>(domain, numPrimalDPN, pool_size); + ElementVectors<scalar, static_cast<int>(tbox::ElType::TETRA4), 4> *elementVectors_TETRA4 = + new ElementVectors<scalar, static_cast<int>(tbox::ElType::TETRA4), 4>(domain, numPrimalDPN, pool_size); + ElementVectors<scalar, static_cast<int>(tbox::ElType::HEX8), 8> *elementVectors_HEX8 = + new ElementVectors<scalar, static_cast<int>(tbox::ElType::HEX8), 8>(domain, numPrimalDPN, pool_size); + + RCP<tpetra_vector_type> bWO = rcp(new tpetra_vector_type(algebraic->map->mapDofsWO, true)); + + auto bWO_view = bWO->getLocalViewHost(); + + // ------------------------------------------ + // + // volumetric heat sources + // + // ------------------------------------------ + + auto numMySources = loads->sourcesList->getSourceNumber(); + + for (auto i = 0; i < numMySources; ++i) + { + auto currentSourceSize = loads->sourcesList->getSourceSize(i); + Kokkos::parallel_for( + currentSourceSize, KOKKOS_LAMBDA(const int e1) { + local_ordinal_type i_elem = loads->sourcesList->getSourceElement(i, e1); +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + int i_thread = Kokkos::DefaultExecutionSpace::thread_pool_rank(); +#else + int i_thread = Kokkos::DefaultExecutionSpace::impl_thread_pool_rank(); +#endif + const int e_size = domain->elementsList->getElementSize(i_elem); + + auto N_e = subview(N, i_thread, make_pair(0, e_size), make_pair(0, e_size)); + + bool bContinue = true; + + if (domain->elementsList->getElementType(i_elem) == static_cast<int>(tbox::ElType::HEX8)) + { + elementVectors_HEX8->compute(i_elem, i_thread); + Kokkos::deep_copy(N_e, elementVectors_HEX8->getN(i_thread)); + } + else if (domain->elementsList->getElementType(i_elem) == static_cast<int>(tbox::ElType::TETRA4)) + { + elementVectors_TETRA4->compute(i_elem, i_thread); + Kokkos::deep_copy(N_e, elementVectors_TETRA4->getN(i_thread)); + } + else + bContinue = false; + + if (bContinue) + { + for (auto ii = 0; ii < e_size; ++ii) + { + local_ordinal_type local_i = domain->elementsList->getElementNode(i_elem, ii); + global_ordinal_type global_i = algebraic->map->mapNodesWO->getGlobalElement(local_i); + + // Test if mapDofs ownes global_i + if (algebraic->map->mapNodes->isNodeGlobalElement(global_i)) + { + scalar tmp = 0.; + + for (auto jj = 0; jj < e_size; ++jj) + tmp += N_e(ii, jj); + + tmp *= loads->sourcesList->getSourceValue(i); + + Kokkos::atomic_fetch_add(&bWO_view(local_i, 0), tmp); + } + } + } + }); + } + + // ------------------------------------------ + // + // von Neumann boundary conditions + // + // ------------------------------------------ + + auto numMynBCs = loads->neumannList->getNeumannNumber(); + + const size_t numNodes = algebraic->map->mapNodes->getGlobalNumElements(); + //const size_t numMyNodes = algebraic->map->mapNodes->getNodeNumElements(); + const size_t numMyNodesWO = algebraic->map->mapNodesWO->getNodeNumElements(); + + for (auto i = 0; i < numMynBCs; ++i) + { + auto currentBCSize = loads->neumannList->getNeumannSize(i); + Kokkos::parallel_for( + currentBCSize, KOKKOS_LAMBDA(const int e1) { + local_ordinal_type i_elem = loads->neumannList->getNeumannElement(i, e1); + +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + int i_thread = Kokkos::DefaultExecutionSpace::thread_pool_rank(); +#else + int i_thread = Kokkos::DefaultExecutionSpace::impl_thread_pool_rank(); +#endif + const int e_size = domain->elementsList->getElementSize(i_elem); + + auto N_e = subview(N_S, i_thread, make_pair(0, e_size), make_pair(0, e_size)); + + bool bContinue = true; + + if (domain->elementsList->getElementType(i_elem) == static_cast<int>(tbox::ElType::TRI3)) + { + elementVectors_TRI3->compute(i_elem, i_thread); + Kokkos::deep_copy(N_e, elementVectors_TRI3->getN(i_thread)); + } + else if (domain->elementsList->getElementType(i_elem) == static_cast<int>(tbox::ElType::QUAD4)) + { + elementVectors_QUAD4->compute(i_elem, i_thread); + Kokkos::deep_copy(N_e, elementVectors_QUAD4->getN(i_thread)); + } + else + bContinue = false; + + if (bContinue) + { + for (auto j = 0; j < numPrimalDPN; ++j) + { + scalar which_dof = loads->neumannList->getNeumannDof(i, j); + scalar value = loads->neumannList->getNeumannValue(i, j); + if (which_dof == (scalar)1) + { + for (auto ii = 0; ii < e_size; ++ii) + { + local_ordinal_type local_i; + if (j == 3) + local_i = domain->elementsList->getElementNode(i_elem, ii); + else + { + if (numPrimalDPN == 4) + local_i = numMyNodesWO + 3 * domain->elementsList->getElementNode(i_elem, ii) + j; + else + local_i = 3 * domain->elementsList->getElementNode(i_elem, ii) + j; + } + + scalar tmp = 0.; + + for (auto jj = 0; jj < e_size; ++jj) + tmp += N_e(ii, jj); + + tmp *= value; + + Kokkos::atomic_fetch_add(&bWO_view(local_i, 0), tmp); + } + } + } + } + }); + } + + // ------------------------------------------ + // + // Dirichlet boundary conditions + // + // ------------------------------------------ + + Tpetra::Export<> exportBWO(algebraic->map->mapDofsWO, algebraic->map->mapDofs); + algebraic->vectors->b->doExport(*bWO, exportBWO, Tpetra::ADD); + + if (numPrimalDPN == 4 || numPrimalDPN == 3) + algebraic->matrices->K->resumeFill(); + if (numPrimalDPN == 4 || numPrimalDPN == 1) + algebraic->matrices->L->resumeFill(); + if (numPrimalDPN == 4) + algebraic->matrices->S->resumeFill(); + + auto numMyBCs = loads->dirichletList->getDirichletNumber(); + for (auto i = 0; i < numMyBCs; ++i) + { + auto currentBCSize = loads->dirichletList->getDirichletSize(i); + for (int i_node = 0; i_node < currentBCSize; ++i_node) + { + global_ordinal_type n1 = loads->dirichletList->getDirichletNode(i, i_node); + + if (algebraic->map->mapNodes->isNodeGlobalElement(n1)) + for (auto j = 0; j < numPrimalDPN; ++j) + { + scalar which_dof = loads->dirichletList->getDirichletDof(i, j); + + if (which_dof == (scalar)1) + { + global_ordinal_type global_index, global_index_0, global_index_r0; + + bool thermo = false; + + if (j == 3) + { + global_index_0 = 0; + global_index_r0 = n1; + + thermo = true; + } + else + { + if (numPrimalDPN == 4) + global_index_0 = numNodes; + else + global_index_0 = 0; + global_index_r0 = 3 * n1 + j; + } + + global_index = global_index_0 + global_index_r0; + + Teuchos::Array<global_ordinal_type> global_indices; + + if (thermo) + { + size_t numColInds = algebraic->graph->L->getNumEntriesInGlobalRow(global_index); + global_indices.resize(numColInds); + algebraic->graph->L->getGlobalRowCopy(global_index, global_indices(), numColInds); + + // Replace the initialized elements by zero + for (auto k = 0; k < numColInds; ++k) + algebraic->matrices->L->replaceGlobalValues(global_index, + tuple<global_ordinal_type>(global_indices[k]), + tuple<scalar>(scalar(0.0))); + + // Put one on the diagonal element + algebraic->matrices->L->replaceGlobalValues(global_index, + tuple<global_ordinal_type>(global_index), + tuple<scalar>(scalar(1.0))); + } + else + { + size_t numColInds = algebraic->graph->K->getNumEntriesInGlobalRow(global_index_r0); + global_indices.resize(numColInds); + algebraic->graph->K->getGlobalRowCopy(global_index_r0, global_indices(), numColInds); + + // Replace the initialized elements by zero + for (auto k = 0; k < numColInds; ++k) + algebraic->matrices->K->replaceGlobalValues(global_index_r0, + tuple<global_ordinal_type>(global_indices[k]), + tuple<scalar>(scalar(0.0))); + + // Put one on the diagonal element + algebraic->matrices->K->replaceGlobalValues(global_index_r0, + tuple<global_ordinal_type>(global_index_r0), + tuple<scalar>(scalar(1.0))); + + if (numPrimalDPN == 4) + { + size_t numColInds = algebraic->graph->S->getNumEntriesInGlobalRow(global_index_r0); + global_indices.resize(numColInds); + algebraic->graph->S->getGlobalRowCopy(global_index_r0, global_indices(), numColInds); + + // Replace the initialized elements by zero + for (auto k = 0; k < numColInds; ++k) + algebraic->matrices->S->replaceGlobalValues(global_index_r0, + tuple<global_ordinal_type>(global_indices[k]), + tuple<scalar>(scalar(0.0))); + } + } + + // Put the corresponding value in the right hand side + algebraic->vectors->b->replaceGlobalValue(global_index, + (scalar(loads->dirichletList->getDirichletValue(i, j)))); + algebraic->vectors->x->replaceGlobalValue(global_index, + (scalar(loads->dirichletList->getDirichletValue(i, j)))); + } + } + } + } + if (numPrimalDPN == 4 || numPrimalDPN == 3) + algebraic->matrices->K->fillComplete(); + if (numPrimalDPN == 4 || numPrimalDPN == 1) + algebraic->matrices->L->fillComplete(); + if (numPrimalDPN == 4) + algebraic->matrices->S->fillComplete(); + + /* + if (scaled) + { + tpetra_vector_type diag(algebraic->matrices->A->getRowMap()); + algebraic->matrices->A->getLocalDiagCopy(diag); + + Teuchos::ArrayRCP<scalar> diag_entries; + diag_entries = diag.getDataNonConst(); + for (size_t i = 0; i < diag_entries.size(); ++i) + diag_entries[i] = 1. / diag_entries[i]; + + Teuchos::ArrayRCP<scalar> rhs_entries; + rhs_entries = algebraic->vectors->b->getDataNonConst(); + for (size_t i = 0; i < rhs_entries.size(); ++i) + rhs_entries[i] = rhs_entries[i] * diag_entries[i]; + + algebraic->matrices->A->leftScale(diag); + + if (domain->contactsList->getContactNumber() >= 1) + algebraic->matrices->B_T->leftScale(diag); + } + */ + // ------------------------------------------ + // + // weights computation + // + // ------------------------------------------ + + auto numMyWeightRegions = loads->weightsList->getWeightRegionsNumber(); + + for (auto i = 0; i < numMyWeightRegions; ++i) + { + auto currentWeightRegionSize = loads->weightsList->getWeightRegionSize(i); + Kokkos::parallel_for( + currentWeightRegionSize, KOKKOS_LAMBDA(const int i_node) { + global_ordinal_type n1 = loads->weightsList->getNode(i, i_node); + + if (algebraic->map->mapNodes->isNodeGlobalElement(n1)) + { + for (auto j = 0; j < numPrimalDPN; ++j) + { + if (loads->weightsList->getWeightDof(i, j)) + { + global_ordinal_type global_index; + + if (j == 3) + { + global_index = n1; + } + else + { + if (numPrimalDPN == 4) + global_index = numNodes + 3 * n1 + j; + else + global_index = 3 * n1 + j; + } + + algebraic->vectors->weights->sumIntoGlobalValue(global_index, + (scalar(loads->weightsList->getWeightValue(i, j))), + true); + } + } + } + }); + } + + delete elementVectors_TRI3; + delete elementVectors_QUAD4; + delete elementVectors_TETRA4; + delete elementVectors_HEX8; +} +}; // namespace katoptron diff --git a/katoptron/src/DiscreteProblemETI.cpp b/katoptron/src/DiscreteProblemETI.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9cb9118030d559e2d41a1b6b6fbd466c5f807010 --- /dev/null +++ b/katoptron/src/DiscreteProblemETI.cpp @@ -0,0 +1,10 @@ +#include "DiscreteProblem.h" +#include "DiscreteProblem.hpp" + +using namespace katoptron; + +template class DiscreteProblem<double>; +template class DiscreteProblem<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 8, Kokkos::OpenMP>>>; +template class DiscreteProblem<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 16, Kokkos::OpenMP>>>; +template class DiscreteProblem<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 24, Kokkos::OpenMP>>>; +template class DiscreteProblem<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 32, Kokkos::OpenMP>>>; \ No newline at end of file diff --git a/katoptron/src/Domain.h b/katoptron/src/Domain.h new file mode 100644 index 0000000000000000000000000000000000000000..43fdf2f8875d0c73456dc8a2600b365b5f58feed --- /dev/null +++ b/katoptron/src/Domain.h @@ -0,0 +1,74 @@ +#ifndef KATOPTRON_DOMAIN_H +#define KATOPTRON_DOMAIN_H + +#include "katoptron.h" +#include "Map.h" +#include "ElementsList.h" +#include "NodesList.h" +#include "MaterialsList.h" +#include "ContactsList.h" +#include "wRandomField.h" + +namespace katoptron +{ + +/** + * @brief Class which is used to store all the information related to the discretized domain: + * <ul> + * <li> the list of the local elements, + * <li> the list of the nodes, + * <li> the list of the materials, + * <li> the list of the contact interfaces, + * <li> the list of the random fields. + * </ul> + */ +template <typename scalar> +class Domain +{ +public: + Teuchos::RCP<ElementsList> elementsList; + Teuchos::RCP<NodesList> nodesList; + Teuchos::RCP<MaterialsList<scalar>> materialsList; + Teuchos::RCP<ContactsList> contactsList; + Teuchos::RCP<RandomField<scalar, Kokkos::DefaultExecutionSpace>> random_field; + + Domain(Problem &pbl, + Teuchos::RCP<Map> map, + Teuchos::RCP<Teuchos::ParameterList> randomParams, + Kokkos::View<scalar *, Kokkos::LayoutLeft> m_rv_values); + + ~Domain() + { + std::cout << "~Domain()\n"; + } +}; + +/** + * @brief Domain constructor + * + * This constructor initializes the lists of elements, nodes, materials, contact interfaces, and random fields. + * + * Arguments: + * <ul> + * <li> A problem object, + * <li> An RCP to a Map object, + * <li> An RCP to a ParameterList object which describes the random fields, + * <li> A Kokkos View of the values used in the discretization of the random fields. + * </ul> + */ +template <typename scalar> +Domain<scalar>::Domain(Problem &pbl, + Teuchos::RCP<Map> map, + Teuchos::RCP<Teuchos::ParameterList> randomParams, + Kokkos::View<scalar *, Kokkos::LayoutLeft> m_rv_values) +{ + elementsList = Teuchos::rcp(new ElementsList(pbl, map)); + nodesList = Teuchos::rcp(new NodesList(pbl, map)); + materialsList = Teuchos::rcp(new MaterialsList<scalar>(pbl, map)); + contactsList = Teuchos::rcp(new ContactsList(pbl, map, elementsList, nodesList)); + random_field = Teuchos::rcp(new RandomField<scalar, Kokkos::DefaultExecutionSpace>(randomParams, m_rv_values)); +} + +}; // namespace katoptron + +#endif //KATOPTRON_DOMAIN_H diff --git a/katoptron/src/ElementComputation.cpp b/katoptron/src/ElementComputation.cpp new file mode 100644 index 0000000000000000000000000000000000000000..5ffb9b91e70b4c1892b873aef903f231d37d322a --- /dev/null +++ b/katoptron/src/ElementComputation.cpp @@ -0,0 +1,27 @@ +#include "ElementComputation.h" +#include "ElementComputation.hpp" +using namespace tbox; + +template class ElementComputation<double, 2>; +template class ElementComputation<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 8, Kokkos::OpenMP>>, 2>; +template class ElementComputation<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 16, Kokkos::OpenMP>>, 2>; +template class ElementComputation<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 24, Kokkos::OpenMP>>, 2>; +template class ElementComputation<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 32, Kokkos::OpenMP>>, 2>; + +template class ElementComputation<double, 3>; +template class ElementComputation<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 8, Kokkos::OpenMP>>, 3>; +template class ElementComputation<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 16, Kokkos::OpenMP>>, 3>; +template class ElementComputation<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 24, Kokkos::OpenMP>>, 3>; +template class ElementComputation<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 32, Kokkos::OpenMP>>, 3>; + +template class ElementComputation<double, 4>; +template class ElementComputation<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 8, Kokkos::OpenMP>>, 4>; +template class ElementComputation<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 16, Kokkos::OpenMP>>, 4>; +template class ElementComputation<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 24, Kokkos::OpenMP>>, 4>; +template class ElementComputation<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 32, Kokkos::OpenMP>>, 4>; + +template class ElementComputation<double, 5>; +template class ElementComputation<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 8, Kokkos::OpenMP>>, 5>; +template class ElementComputation<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 16, Kokkos::OpenMP>>, 5>; +template class ElementComputation<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 24, Kokkos::OpenMP>>, 5>; +template class ElementComputation<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 32, Kokkos::OpenMP>>, 5>; \ No newline at end of file diff --git a/katoptron/src/ElementComputation.h b/katoptron/src/ElementComputation.h new file mode 100644 index 0000000000000000000000000000000000000000..1e069a2b688392c72478551442ad6cf15651db23 --- /dev/null +++ b/katoptron/src/ElementComputation.h @@ -0,0 +1,46 @@ +#ifndef KATOPTRON_ELEMENTCOMPUTATION_H +#define KATOPTRON_ELEMENTCOMPUTATION_H + +#include "Stokhos_Sacado_Kokkos_MP_Vector.hpp" + +#include <Kokkos_Core.hpp> +#include "Kokkos_ViewFactory.hpp" +#include "wCacheHex8.h" +#include "wCacheQuad4.h" +#include "wCacheTetra4.h" +#include "wCacheTri3.h" +#include "tMatrix.h" +#include "Sacado.hpp" +#include "Domain.h" + +#include "MaterialsList.h" +#include "Material.h" + +#include "Map.h" + +#include "wElement.h" + +#include "wLazy.h" +#include "tMatrix.h" + +/** + * @brief Base class for the element computations + */ +template <typename scalar, int element_type> +class ElementComputation +{ + typedef katoptron::Map::local_ordinal_type local_ordinal_type; + +protected: + tbox::CacheHex8 &trilinosHex8GetCache(); + tbox::CacheTetra4 &trilinosTetra4GetCache(); + tbox::CacheTri3 &trilinosTri3GetCache(); + tbox::CacheQuad4 &trilinosQuad4GetCache(); + + double buildJ(int k, tMatrix<double, 3, 3> &J, + local_ordinal_type e, + const katoptron::ElementsList &elementsList, + const katoptron::NodesList &nodesList); +}; + +#endif //KATOPTRON_ELEMENTCOMPUTATION_H diff --git a/katoptron/src/ElementComputation.hpp b/katoptron/src/ElementComputation.hpp new file mode 100644 index 0000000000000000000000000000000000000000..e1062eb1f8fc49349d327e661adf08e1d71e1aa6 --- /dev/null +++ b/katoptron/src/ElementComputation.hpp @@ -0,0 +1,142 @@ + +/** + * @brief Compute the Jacobian matrix \f$\boldsymbol{J}\f$ of an element. + */ +template <typename scalar, int element_type> +double ElementComputation<scalar, element_type>::buildJ(int k, + tMatrix<double, 3, 3> &J, local_ordinal_type e, + const katoptron::ElementsList &elementsList, + const katoptron::NodesList &nodesList) +{ + tbox::Cache *cache; + size_t element_size; + + if (element_type == static_cast<int>(tbox::ElType::HEX8)) + { + tbox::CacheHex8 &cachehex8 = trilinosHex8GetCache(); + cache = &cachehex8; + element_size = 8; + } + else if (element_type == static_cast<int>(tbox::ElType::TETRA4)) + { + tbox::CacheTetra4 &cachetetra4 = trilinosTetra4GetCache(); + cache = &cachetetra4; + element_size = 4; + } + else if (element_type == static_cast<int>(tbox::ElType::TRI3)) + { + tbox::CacheTri3 &cachetri3 = trilinosTri3GetCache(); + cache = &cachetri3; + element_size = 3; + + tVector<double, 3> tg1, tg2, n; + + int i = 0; + for (auto n1 = 0; n1 < element_size; ++n1, ++i) + { + for (auto j = 0; j < 3; ++j) + { + tg1(j) += (static_cast<tbox::CacheTri3 *>(cache)->getDsf(k))(0, i) * + nodesList.nodes(elementsList.getElementNode(e, n1), j); + tg2(j) += (static_cast<tbox::CacheTri3 *>(cache)->getDsf(k))(1, i) * + nodesList.nodes(elementsList.getElementNode(e, n1), j); + } + } + + n(0) = tg1(1) * tg2(2) - tg1(2) * tg2(1); + n(1) = tg1(2) * tg2(0) - tg1(0) * tg2(2); + n(2) = tg1(0) * tg2(1) - tg1(1) * tg2(0); + double detJ = sqrt(pow(n(0), 2) + pow(n(1), 2) + pow(n(2), 2)); + return detJ; + } + else if (element_type == static_cast<int>(tbox::ElType::QUAD4)) + { + tbox::CacheQuad4 &cachequad4 = trilinosQuad4GetCache(); + cache = &cachequad4; + element_size = 4; + + tVector<double, 3> tg1, tg2, n; + + int i = 0; + for (auto n1 = 0; n1 < element_size; ++n1, ++i) + { + for (auto j = 0; j < 3; ++j) + { + tg1(j) += (static_cast<tbox::CacheQuad4 *>(cache)->getDsf(k))(0, i) * + nodesList.nodes(elementsList.getElementNode(e, n1), j); + tg2(j) += (static_cast<tbox::CacheQuad4 *>(cache)->getDsf(k))(1, i) * + nodesList.nodes(elementsList.getElementNode(e, n1), j); + } + } + + n(0) = tg1(1) * tg2(2) - tg1(2) * tg2(1); + n(1) = tg1(2) * tg2(0) - tg1(0) * tg2(2); + n(2) = tg1(0) * tg2(1) - tg1(1) * tg2(0); + double detJ = sqrt(pow(n(0), 2) + pow(n(1), 2) + pow(n(2), 2)); + return detJ; + } + + tMatrix<double, 3, 3> Jn; + J.clean(); + + tVector<double, 3> tmp, tmp2; + + int i = 0; + for (auto n1 = 0; n1 < elementsList.getElementSize(e); ++n1, ++i) + { + for (auto j = 0; j < 3; ++j) + { + tmp(j) = nodesList.nodes(elementsList.getElementNode(e, n1), j); + if (element_type == static_cast<int>(tbox::ElType::HEX8)) + tmp2(j) = (static_cast<tbox::CacheHex8 *>(cache)->getDsf(k))(j, i); + else if (element_type == static_cast<int>(tbox::ElType::TETRA4)) + tmp2(j) = (static_cast<tbox::CacheTetra4 *>(cache)->getDsf(k))(j, i); + } + + Jn = tmp2.ddotproduct(tmp); + J += Jn; + } + + double detJ = J.det(); + return detJ; +} + +/** + * @brief Return the tbox cache of the hexahedron elements. + */ +template <typename scalar, int element_type> +tbox::CacheHex8 &ElementComputation<scalar, element_type>::trilinosHex8GetCache() +{ + static tbox::Lazy<tbox::CacheHex8> cache(2); + return cache.get(); +} + +/** + * @brief Return the tbox cache of the tetrahedron elements. + */ +template <typename scalar, int element_type> +tbox::CacheTetra4 &ElementComputation<scalar, element_type>::trilinosTetra4GetCache() +{ + static tbox::Lazy<tbox::CacheTetra4> cache(2); + return cache.get(); +} + +/** + * @brief Return the tbox cache of the triangular elements. + */ +template <typename scalar, int element_type> +tbox::CacheTri3 &ElementComputation<scalar, element_type>::trilinosTri3GetCache() +{ + static tbox::Lazy<tbox::CacheTri3> cache(2); + return cache.get(); +} + +/** + * @brief Return the tbox cache of the quadrangular elements. + */ +template <typename scalar, int element_type> +tbox::CacheQuad4 &ElementComputation<scalar, element_type>::trilinosQuad4GetCache() +{ + static tbox::Lazy<tbox::CacheQuad4> cache(2); + return cache.get(); +} diff --git a/katoptron/src/ElementMatrices.h b/katoptron/src/ElementMatrices.h new file mode 100644 index 0000000000000000000000000000000000000000..ad7b227ba8041505933d410f6e83d5e41f79f7af --- /dev/null +++ b/katoptron/src/ElementMatrices.h @@ -0,0 +1,69 @@ +#ifndef KATOPTRON_ELEMENTMATRICES_H +#define KATOPTRON_ELEMENTMATRICES_H + +#include "Stokhos_Sacado_Kokkos_MP_Vector.hpp" +#include "EnsembleTraits.h" + +/* +#include "Stokhos_Tpetra_MP_Vector.hpp" +#include "Stokhos_Tpetra_Utilities_MP_Vector.hpp" +#include "Stokhos_Sacado_Kokkos_MP_Vector.hpp" +*/ + +#include <Kokkos_Core.hpp> +#include "Kokkos_ViewFactory.hpp" +#include "wCacheHex8.h" +#include "wCacheQuad4.h" +#include "wCacheTetra4.h" +#include "wCacheTri3.h" +#include "tMatrix.h" + +//#include "Sacado_Fad_MP_Vector.hpp" +//#include "Sacado.hpp" +#include "Domain.h" + +#include "MaterialsList.h" +#include "Material.h" + +#include "wLazy.h" +#include "tMatrix.h" + +#include "ElementComputation.h" + +#include "EnsembleTraits.h" + +#include <iostream> + +/** + * @brief Class used to compute the element matrices: + * <ul> + * <li> The element stifness matrix \f$\boldsymbol{K}\f$, + * <li> The thermal element matrix \f$\boldsymbol{L}\f$, + * <li> The coupling element matrix \f$\boldsymbol{S}\f$. + * </ul> + */ +template <typename scalar, int element_type, int element_size> +class ElementMatrices : public ElementComputation<scalar, element_type> +{ +public: + typedef Kokkos::View<scalar ***, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace> view_type_3D; + typedef Kokkos::View<scalar **, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace> view_type_2D; + + view_type_3D K, L, S; + + view_type_2D material; + + Teuchos::RCP<katoptron::Domain<scalar>> domain; + + size_t numPrimalDPN; + + ElementMatrices(Teuchos::RCP<katoptron::Domain<scalar>> domain, size_t numPrimalDPN, size_t pool_size); + ~ElementMatrices(){}; + + void compute(int e, int i_thread); + view_type_2D getK(size_t i_thread) const; + view_type_2D getL(size_t i_thread) const; + view_type_2D getS(size_t i_thread) const; +}; + +#endif //KATOPTRON_ELEMENTMATRICES_H diff --git a/katoptron/src/ElementMatrices.hpp b/katoptron/src/ElementMatrices.hpp new file mode 100644 index 0000000000000000000000000000000000000000..208932ccdbd32fe0bd3ab5bd373f8acefab6317e --- /dev/null +++ b/katoptron/src/ElementMatrices.hpp @@ -0,0 +1,300 @@ +//#define ElementMatrices_DEBUG + +/** + * @brief ElementMatrices constructor + * + * Arguments: + * <ul> + * <li> domain: an RCP to a Domain object, + * <li> numPrimalDPN: the number of degrees of freedom per node (without taking into account the Lagrange multipliers), + * <li> pool_size: the number of threads that will be used to compute the element matrices. + * </ul> + * + * The number of used threads is specify to allocate distinct memory for each thread to ensure that the threads + * do not use the same memory addresses. + */ +template <typename scalar, int element_type, int element_size> +ElementMatrices<scalar, element_type, element_size>::ElementMatrices(Teuchos::RCP<katoptron::Domain<scalar>> _domain, + size_t _numPrimalDPN, + size_t pool_size) : domain(_domain), numPrimalDPN(_numPrimalDPN) +{ + + K = Kokkos::View<scalar ***, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace>("A", pool_size, 3 * element_size, 3 * element_size); + L = Kokkos::View<scalar ***, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace>("A", pool_size, element_size, element_size); + S = Kokkos::View<scalar ***, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace>("A", pool_size, 3 * element_size, element_size); + + material = Kokkos::View<scalar **, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace>("A", pool_size, 3 * element_size); +} + +/** + * @brief Compute all the matrices and store them as member data. + * This function must be called before getK, getL, or getS. + * + * The computations have been gathered into one function to reuse reusable data such as Jacobian + * computations. + * + * Arguments: + * <ul> + * <li> e: the local ID of the element for which the matrices have to be computed, + * <li> i_thread: the ID of the thread used to compute the element matrices. + * </ul> + */ +template <typename scalar, int element_type, int element_size> +void ElementMatrices<scalar, element_type, element_size>::compute(int e, int i_thread) +{ + + tbox::Cache *cache; + + /* @todo could probably be refactored into cache = element->getVCache(); */ + if (element_type == static_cast<int>(tbox::ElType::HEX8)) + { + tbox::CacheHex8 &cachehex8 = this->trilinosHex8GetCache(); + cache = &cachehex8; + } + else if (element_type == static_cast<int>(tbox::ElType::TETRA4)) + { + tbox::CacheTetra4 &cachetetra4 = this->trilinosTetra4GetCache(); + cache = &cachetetra4; + } + + std::vector<Eigen::Vector3d> gauss_p; + std::vector<double> gauss_w; + for (size_t a = 0; a < cache->getVGauss().getN(); ++a) + { + gauss_p.push_back(cache->getVGauss().getP(a)); + gauss_w.push_back(cache->getVGauss().getW(a)); + } + + tVector<scalar, element_size * 4> tValues; + + auto K_current = subview(K, i_thread, Kokkos::ALL(), Kokkos::ALL()); + auto L_current = subview(L, i_thread, Kokkos::ALL(), Kokkos::ALL()); + auto S_current = subview(S, i_thread, Kokkos::ALL(), Kokkos::ALL()); + + Kokkos::deep_copy(K_current, 0); + Kokkos::deep_copy(L_current, 0); + Kokkos::deep_copy(S_current, 0); + + auto element_material = domain->elementsList->getElementMaterial(e); + + tVector<double, 3> factor1, factor2, dffi, dffj; + tVector<scalar, 3> factor3; + tMatrix<double, 3, 3> J, Jinv; + tMatrix<scalar, 3, 3> TMP1; + tMatrix<scalar, 9, 9> H; + tVector<double, element_size> ff; + scalar E, nu, lambda, G, conductivity, beta; + tMatrix<scalar, 3, 3> K_conductivity; + tMatrix<scalar, 3, 3> D; + + katoptron::Material<scalar> material = domain->materialsList->getMaterial(element_material, i_thread); + if (domain->random_field->isRandom) + { + double x = 0., y = 0., z = 0.; + for (auto j = 0; j < element_size; ++j) + { + x += domain->nodesList->nodes(domain->elementsList->getElementNode(e, j), 0) / element_size; + y += domain->nodesList->nodes(domain->elementsList->getElementNode(e, j), 1) / element_size; + z += domain->nodesList->nodes(domain->elementsList->getElementNode(e, j), 2) / element_size; + } + + G = domain->random_field->operator()(x, y, z); +#ifdef ElementMatrices_DEBUG + printf("G_0 = %f\n", EnsembleTraits<scalar>::coeff(G, 0)); +#endif + + //E = material.getE(); + nu = material.getNu(); + lambda = 2. * G * nu / (1. - 2. * nu); + //lambda = (nu*E)/((1+nu)*(1-2*nu)); + } + else + { + E = material.getE(); + nu = material.getNu(); + lambda = (nu * E) / ((1 + nu) * (1 - 2 * nu)); + G = E / (2 * (1 + nu)); + } + + // Machine epsilon + + double epsilon = 2e-16; + // Looping on gauss points + for (auto a = 0; a < gauss_p.size(); ++a) + { + for (auto j = 0; j < element_size; ++j) + if (element_size == 8) + ff(j) = (static_cast<tbox::CacheHex8 *>(cache)->getSf(a))(j); + else if (element_size == 4) + ff(j) = (static_cast<tbox::CacheTetra4 *>(cache)->getSf(a))(j); + + // H matrix + H.clean(); + + for (auto i = 0; i < 3; ++i) + for (auto j = 0; j < 3; ++j) + for (auto k = 0; k < 3; ++k) + for (auto l = 0; l < 3; ++l) + { + if (i == j && k == l) + H(i * 3 + j, k * 3 + l) = lambda; + if (i == k && j == l) + H(i * 3 + j, k * 3 + l) = H(i * 3 + j, k * 3 + l) + G; + if (i == l && j == k) + H(i * 3 + j, k * 3 + l) = H(i * 3 + j, k * 3 + l) + G; + } + + conductivity = material.getK(); + K_conductivity.clean(); + for (auto i = 0; i < 3; ++i) + K_conductivity(i, i) = conductivity; + + beta = material.getBeta(); + D.clean(); + for (auto i = 0; i < 3; ++i) + D(i, i) = -3 * (lambda + (2. / 3.) * G) * beta; + + double detJ = this->buildJ(a, J, e, *(domain->elementsList), *(domain->nodesList)); + +#ifdef ElementMatrices_DEBUG + printf("detJ = %f\n", detJ); +#endif + + Jinv = J.inv(); + + for (auto i = 0; i < element_size; ++i) + { + + for (auto k = 0; k < 3; ++k) + if (element_size == 8) + dffi(k) = (static_cast<tbox::CacheHex8 *>(cache)->getDsf(a))(k, i); + else if (element_size == 4) + dffi(k) = (static_cast<tbox::CacheTetra4 *>(cache)->getDsf(a))(k, i); + factor1 = Jinv * dffi; +#ifdef ElementMatrices_DEBUG + printf("dffi = [%f, %f, %f]\n", dffi(0), dffi(1), dffi(2)); + printf("factor1 = [%f, %f, %f]\n", factor1(0), factor1(1), factor1(2)); +#endif + // K + for (auto j = i; j < element_size; ++j) + { + for (auto k = 0; k < 3; ++k) + if (element_size == 8) + dffj(k) = (static_cast<tbox::CacheHex8 *>(cache)->getDsf(a))(k, j); + else if (element_size == 4) + dffj(k) = (static_cast<tbox::CacheTetra4 *>(cache)->getDsf(a))(k, j); + factor2 = Jinv * dffj; + + TMP1.clean(); + for (auto k = 0; k < 3; ++k) + for (auto m = 0; m < 3; ++m) + { + for (auto l = 0; l < 3; ++l) + for (auto n = 0; n < 3; ++n) + TMP1(l, n) = H(k * 3 + l, m * 3 + n); + + factor3 = TMP1 * factor2; + + scalar dotProduct = factor1.dotproduct(factor3); +#ifdef ElementMatrices_DEBUG + printf("dotProduct_0 = %f\n", EnsembleTraits<scalar>::coeff(dotProduct, 0)); +#endif + K_current(i * 3 + k, j * 3 + m) += dotProduct * gauss_w[a] * detJ; + } + } + + // L + factor3 = K_conductivity * factor1; + for (auto j = i; j < element_size; ++j) + { + for (auto k = 0; k < 3; ++k) + if (element_size == 8) + dffj(k) = (static_cast<tbox::CacheHex8 *>(cache)->getDsf(a))(k, j); + else if (element_size == 4) + dffj(k) = (static_cast<tbox::CacheTetra4 *>(cache)->getDsf(a))(k, j); + + factor2 = Jinv * dffj; + scalar dotProduct = factor3.dotproduct(factor2); + L_current(i, j) += dotProduct * gauss_w[a] * detJ; + } + + // S + factor3 = D * factor1; + + for (auto j = 0; j < element_size; ++j) + for (auto k = 0; k < 3; ++k) + S_current(i * 3 + k, j) += factor3(k) * ff(j) * gauss_w[a] * detJ; + } + } + + for (auto i = 0; i < 3 * element_size; ++i) + for (auto j = i; j < 3 * element_size; ++j) + { + if (fabs(K_current(i, j)) < epsilon) + K_current(i, j) = 0; + if (i != j) + K_current(j, i) = K_current(i, j); + } + + for (auto i = 0; i < element_size; ++i) + for (auto j = i; j < element_size; ++j) + { + if (fabs(L_current(i, j)) < epsilon) + L_current(i, j) = 0; + if (i != j) + L_current(j, i) = L_current(i, j); + } + + for (auto i = 0; i < 3 * element_size; ++i) + for (auto j = 0; j < element_size; ++j) + if (fabs(S_current(i, j)) < epsilon) + S_current(i, j) = 0; +} + +/** + * @brief Return the element stifness matrix \f$\boldsymbol{K}\f$ computed + * by the thread i_thread. + * + * Argument: + * <ul> + * <li> i_thread: the ID of the thread used to compute the element matrices. + * </ul> + */ +template <typename scalar, int element_type, int element_size> +Kokkos::View<scalar **, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace> ElementMatrices<scalar, element_type, element_size>::getK(size_t i_thread) const +{ + Kokkos::View<scalar **, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace> K_current = subview(K, i_thread, Kokkos::ALL(), Kokkos::ALL()); + return K_current; +} + +/** + * @brief Return the thermal element matrix \f$\boldsymbol{L}\f$ computed + * by the thread i_thread. + * + * Argument: + * <ul> + * <li> i_thread: the ID of the thread used to compute the element matrices. + * </ul> + */ +template <typename scalar, int element_type, int element_size> +Kokkos::View<scalar **, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace> ElementMatrices<scalar, element_type, element_size>::getL(size_t i_thread) const +{ + Kokkos::View<scalar **, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace> L_current = subview(L, i_thread, Kokkos::ALL(), Kokkos::ALL()); + return L_current; +} + +/** + * @brief Return the coupling element matrix \f$\boldsymbol{S}\f$ computed + * by the thread i_thread. + * + * Argument: + * <ul> + * <li> i_thread: the ID of the thread used to compute the element matrices. + * </ul> + */ +template <typename scalar, int element_type, int element_size> +Kokkos::View<scalar **, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace> ElementMatrices<scalar, element_type, element_size>::getS(size_t i_thread) const +{ + Kokkos::View<scalar **, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace> S_current = subview(S, i_thread, Kokkos::ALL(), Kokkos::ALL()); + return S_current; +} \ No newline at end of file diff --git a/katoptron/src/ElementMatricesETI.cpp b/katoptron/src/ElementMatricesETI.cpp new file mode 100644 index 0000000000000000000000000000000000000000..0df65d212a0018323990714d3ecb15df663fd967 --- /dev/null +++ b/katoptron/src/ElementMatricesETI.cpp @@ -0,0 +1,14 @@ +#include "ElementMatrices.h" +#include "ElementMatrices.hpp" + +template class ElementMatrices<double, 4, 4>; +template class ElementMatrices<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 8, Kokkos::OpenMP>>, 4, 4>; +template class ElementMatrices<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 16, Kokkos::OpenMP>>, 4, 4>; +template class ElementMatrices<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 24, Kokkos::OpenMP>>, 4, 4>; +template class ElementMatrices<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 32, Kokkos::OpenMP>>, 4, 4>; + +template class ElementMatrices<double, 5, 8>; +template class ElementMatrices<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 8, Kokkos::OpenMP>>, 5, 8>; +template class ElementMatrices<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 16, Kokkos::OpenMP>>, 5, 8>; +template class ElementMatrices<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 24, Kokkos::OpenMP>>, 5, 8>; +template class ElementMatrices<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 32, Kokkos::OpenMP>>, 5, 8>; diff --git a/katoptron/src/ElementVectors.h b/katoptron/src/ElementVectors.h new file mode 100644 index 0000000000000000000000000000000000000000..3c7474ffb9b479445b258d80e834e6745e5365d8 --- /dev/null +++ b/katoptron/src/ElementVectors.h @@ -0,0 +1,42 @@ +#ifndef KATOPTRON_ELEMENTVECTORS_H +#define KATOPTRON_ELEMENTVECTORS_H + +#include <Kokkos_Core.hpp> +#include "Kokkos_ViewFactory.hpp" +#include "wCacheHex8.h" +#include "wCacheQuad4.h" +#include "wCacheTetra4.h" +#include "wCacheTri3.h" +#include "tMatrix.h" +#include "Domain.h" +#include "Loads.h" + +#include "ElementComputation.h" + +#include "MaterialsList.h" +#include "Material.h" + +#include "wLazy.h" +#include "tMatrix.h" + +/** + * @brief Class used to compute the matrix associated to the + * integration of load on surface \f$\boldsymbol{N}\f$. + */ +template <typename scalar, int element_type, int element_size> +class ElementVectors : public ElementComputation<scalar, element_type> +{ +public: + Kokkos::View<scalar ***, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace> N; + + Teuchos::RCP<katoptron::Domain<scalar>> domain; + + size_t numPrimalDPN; + + ElementVectors(Teuchos::RCP<katoptron::Domain<scalar>> domain, size_t numPrimalDPN, size_t pool_size); + + void compute(int e, int i_thread); + Kokkos::View<scalar **, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace> getN(size_t i_thread) const; +}; + +#endif //KATOPTRON_ELEMENTVECTORS_H diff --git a/katoptron/src/ElementVectors.hpp b/katoptron/src/ElementVectors.hpp new file mode 100644 index 0000000000000000000000000000000000000000..f89101de86bd50b00f9085b2ebf1be71c9072900 --- /dev/null +++ b/katoptron/src/ElementVectors.hpp @@ -0,0 +1,108 @@ +/** + * @brief ElementVectors constructor + * + * Arguments: + * <ul> + * <li> domain: an RCP to a Domain object, + * <li> numPrimalDPN: the number of degrees of freedom per node (without taking into account the Lagrange multipliers), + * <li> pool_size: the number of threads that will be used to compute \f$\boldsymbol{N}\f$. + * </ul> + * + * The number of used threads is specify to allocate distinct memory for each thread to ensure that the threads + * do not use the same memory addresses. + */ +template <typename scalar, int element_type, int element_size> +ElementVectors<scalar, element_type, element_size>::ElementVectors(Teuchos::RCP<katoptron::Domain<scalar>> _domain, + size_t _numPrimalDPN, + size_t pool_size) : domain(_domain), numPrimalDPN(_numPrimalDPN) +{ + N = Kokkos::View<scalar ***, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace>("A", pool_size, element_size, element_size); +} + +/** + * @brief Compute the \f$\boldsymbol{N}\f$ matrix. + * Arguments: + * <ul> + * <li> e: the local ID of the element for which \f$\boldsymbol{N}\f$ has to be computed, + * <li> i_thread: the ID of the thread used to compute \f$\boldsymbol{N}\f$. + * </ul> + */ +template <typename scalar, int element_type, int element_size> +void ElementVectors<scalar, element_type, element_size>::compute(int e, int i_thread) +{ + tbox::Cache *cache; + + std::vector<Eigen::Vector3d> gauss_p; + std::vector<double> gauss_w; + + /* @todo could probably be refactored into cache = element->getVCache(); */ + if (element_type == static_cast<int>(tbox::ElType::HEX8)) + { + tbox::CacheHex8 &cachehex8 = this->trilinosHex8GetCache(); + cache = &cachehex8; + } + else if (element_type == static_cast<int>(tbox::ElType::TETRA4)) + { + tbox::CacheTetra4 &cachetetra4 = this->trilinosTetra4GetCache(); + cache = &cachetetra4; + } + else if (element_type == static_cast<int>(tbox::ElType::TRI3)) + { + tbox::CacheTri3 &cachetri3 = this->trilinosTri3GetCache(); + cache = &cachetri3; + } + else if (element_type == static_cast<int>(tbox::ElType::QUAD4)) + { + tbox::CacheQuad4 &cachequad4 = this->trilinosQuad4GetCache(); + cache = &cachequad4; + } + + for (size_t a = 0; a < cache->getVGauss().getN(); ++a) + { + gauss_p.push_back(cache->getVGauss().getP(a)); + gauss_w.push_back(cache->getVGauss().getW(a)); + } + + tVector<double, element_size> ff; + tMatrix<double, 3, 3> J; + + auto N_current = subview(N, i_thread, Kokkos::ALL(), Kokkos::ALL()); + + Kokkos::deep_copy(N_current, 0); + + // Looping on gauss points + for (auto a = 0; a < gauss_p.size(); ++a) + { + for (auto j = 0; j < element_size; ++j) + if (element_type == static_cast<int>(tbox::ElType::HEX8)) + ff(j) = (static_cast<tbox::CacheHex8 *>(cache)->getSf(a))(j); + else if (element_type == static_cast<int>(tbox::ElType::TETRA4)) + ff(j) = (static_cast<tbox::CacheTetra4 *>(cache)->getSf(a))(j); + else if (element_type == static_cast<int>(tbox::ElType::TRI3)) + ff(j) = (static_cast<tbox::CacheTri3 *>(cache)->getSf(a))(j); + else if (element_type == static_cast<int>(tbox::ElType::QUAD4)) + ff(j) = (static_cast<tbox::CacheQuad4 *>(cache)->getSf(a))(j); + + double detJ = this->buildJ(a, J, e, *(domain->elementsList), *(domain->nodesList)); + + for (auto i = 0; i < element_size; ++i) + for (auto j = 0; j < element_size; ++j) + N_current(i, j) += ff(i) * ff(j) * gauss_w[a] * detJ; + } +} + +/** + * @brief Return the \f$\boldsymbol{N}\f$. + * + * Argument: + * <ul> + * <li> i_thread: the ID of the thread used to compute \f$\boldsymbol{N}\f$. + * </ul> + */ +template <typename scalar, int element_type, int element_size> +Kokkos::View<scalar **, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace> ElementVectors<scalar, element_type, element_size>::getN(size_t i_thread) const +{ + Kokkos::View<scalar **, Kokkos::LayoutRight, Kokkos::DefaultExecutionSpace> N_current = + subview(N, i_thread, Kokkos::ALL(), Kokkos::ALL()); + return N_current; +} \ No newline at end of file diff --git a/katoptron/src/ElementVectorsETI.cpp b/katoptron/src/ElementVectorsETI.cpp new file mode 100644 index 0000000000000000000000000000000000000000..445a934ba9e1902ed13bad86420cf9bf6212522f --- /dev/null +++ b/katoptron/src/ElementVectorsETI.cpp @@ -0,0 +1,43 @@ +#include "ElementVectors.h" +#include "ElementVectors.hpp" +using namespace tbox; + +template class ElementVectors<double, static_cast<int>(ElType::TRI3), 3>; +template class ElementVectors<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 8, Kokkos::OpenMP>>, + static_cast<int>(ElType::TRI3), 3>; +template class ElementVectors<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 16, Kokkos::OpenMP>>, + static_cast<int>(ElType::TRI3), 3>; +template class ElementVectors<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 24, Kokkos::OpenMP>>, + static_cast<int>(ElType::TRI3), 3>; +template class ElementVectors<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 32, Kokkos::OpenMP>>, + static_cast<int>(ElType::TRI3), 3>; + +template class ElementVectors<double, static_cast<int>(ElType::QUAD4), 4>; +template class ElementVectors<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 8, Kokkos::OpenMP>>, + static_cast<int>(ElType::QUAD4), 4>; +template class ElementVectors<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 16, Kokkos::OpenMP>>, + static_cast<int>(ElType::QUAD4), 4>; +template class ElementVectors<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 24, Kokkos::OpenMP>>, + static_cast<int>(ElType::QUAD4), 4>; +template class ElementVectors<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 32, Kokkos::OpenMP>>, + static_cast<int>(ElType::QUAD4), 4>; + +template class ElementVectors<double, static_cast<int>(ElType::TETRA4), 4>; +template class ElementVectors<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 8, Kokkos::OpenMP>>, + static_cast<int>(ElType::TETRA4), 4>; +template class ElementVectors<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 16, Kokkos::OpenMP>>, + static_cast<int>(ElType::TETRA4), 4>; +template class ElementVectors<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 24, Kokkos::OpenMP>>, + static_cast<int>(ElType::TETRA4), 4>; +template class ElementVectors<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 32, Kokkos::OpenMP>>, + static_cast<int>(ElType::TETRA4), 4>; + +template class ElementVectors<double, static_cast<int>(ElType::HEX8), 8>; +template class ElementVectors<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 8, Kokkos::OpenMP>>, + static_cast<int>(ElType::HEX8), 8>; +template class ElementVectors<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 16, Kokkos::OpenMP>>, + static_cast<int>(ElType::HEX8), 8>; +template class ElementVectors<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 24, Kokkos::OpenMP>>, + static_cast<int>(ElType::HEX8), 8>; +template class ElementVectors<Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 32, Kokkos::OpenMP>>, + static_cast<int>(ElType::HEX8), 8>; diff --git a/katoptron/src/ElementsList.cpp b/katoptron/src/ElementsList.cpp new file mode 100644 index 0000000000000000000000000000000000000000..fd78fd7529c5239655013bc7803f592d5c053ee5 --- /dev/null +++ b/katoptron/src/ElementsList.cpp @@ -0,0 +1,85 @@ +#include "ElementsList.h" + +#include "wProblem.h" +#include "wTag.h" +#include "wMshData.h" +#include "wElement.h" +#include "wNode.h" +#include "wMedium.h" + +using namespace katoptron; + +/** + * @brief ElementsList constructor + * + * This constructor allocates 1 Kokkos::View which stores all the required information related to the elements, including: + * <ul> + * <li> all their local node IDs, + * <li> their size, type, and material (at most one material per element). + * </ul> + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> map: an RCP to a Map object. + * </ul> + */ +ElementsList::ElementsList(Problem &pbl, Teuchos::RCP<Map> map) +{ + typedef Map::local_ordinal_type local_ordinal_type; + + elements_number = map->mapElems->getNodeNumElements(); + + local_ordinal_type materials_number = pbl.media.size(); + elements_type = 0; + elements_size = 1; + elements_material = 2; + elements_owned = 3; + elements_nodes = 4; + + elements = Kokkos::View<int **, Kokkos::LayoutRight>("R", elements_number, elements_nodes + 8); + + const int n_procs = map->mapElems->getComm()->getSize(); + const int rank = map->mapElems->getComm()->getRank(); + + int i1 = 0; + int i2 = 0; + while (i1 < elements_number) + { + tbox::Element *e = pbl.msh->elems[i2++]; + if (map->mapElems->isNodeGlobalElement(e->no - 1)) + { + elements(i1, elements_type) = static_cast<int>(e->type()); + elements(i1, elements_size) = e->nodes.size(); + for (int j = 0; j < materials_number; ++j) + if (e->ptag == (pbl.media[j]->tag)) + { + elements(i1, elements_material) = j; + break; + } + for (int j = 0; j < e->nodes.size(); ++j) + elements(i1, elements_nodes + j) = map->mapNodesWO->getLocalElement(e->nodes[j]->row); + ++i1; + } + } + + for (int i = 0; i < elements_number; ++i) + elements(i, elements_owned) = 0; + + int p_key; + if (n_procs != 1) + for (auto const &p : pbl.msh->parts) + if (p.second->no == (rank + 1)) + p_key = p.first; + + if (n_procs != 1) + for (int i = 0; i < pbl.msh->parts[p_key]->elems.size(); ++i) + { + local_ordinal_type local_i = map->mapElems->getLocalElement(pbl.msh->parts[p_key]->elems[i]->no - 1); + elements(local_i, elements_owned) = 1; + } + + else + for (int i = 0; i < elements_number; ++i) + elements(i, elements_owned) = 1; +} diff --git a/katoptron/src/ElementsList.h b/katoptron/src/ElementsList.h new file mode 100644 index 0000000000000000000000000000000000000000..08f902a8bdc35a4cc0f286c1492c4d8d21281b29 --- /dev/null +++ b/katoptron/src/ElementsList.h @@ -0,0 +1,112 @@ +#ifndef KATOPTRON_ELEMENTLISTS_H +#define KATOPTRON_ELEMENTLISTS_H + +#include "katoptron.h" + +#include "Map.h" + +#include <Tpetra_Map.hpp> +#include <Tpetra_Vector.hpp> +#include <Kokkos_ViewFactory.hpp> + +namespace katoptron +{ + +/** + * @brief Class used to store the element information including: + * <ul> + * <li> The number of local elements, + * <li> The type of every elements, + * <li> The size of each elements, + * <li> The material ID of each elements, + * <li> The local node ID of each elements. + * </ul> + */ +class ElementsList +{ + typedef Map::local_ordinal_type local_ordinal_type; + +private: + Kokkos::View<int **, Kokkos::LayoutRight> elements; + + local_ordinal_type elements_number; + local_ordinal_type elements_type; + local_ordinal_type elements_size; + local_ordinal_type elements_material; + local_ordinal_type elements_owned; + local_ordinal_type elements_nodes; + +public: + ElementsList(Problem &pbl, Teuchos::RCP<Map> map); + + /** + * @brief Return the number of local elements i.e. the number + * of elements owned by the calling process. + */ + inline local_ordinal_type getElementNumber(void) const { return elements_number; } + + /** + * @brief Return the type of the local element of local ID e. + * Argument: + * <ul> + * <li> e: local ID of the element. + * </ul> + */ + inline local_ordinal_type getElementType(const local_ordinal_type e) const + { + return elements(e, elements_type); + } + + /** + * @brief Return the size of the local element of local ID e. + * Argument: + * <ul> + * <li> e: local ID of the element. + * </ul> + */ + inline local_ordinal_type getElementSize(const local_ordinal_type e) const + { + return elements(e, elements_size); + } + + /** + * @brief Return the material ID of the local element of ID e. + * Argument: + * <ul> + * <li> e: local ID of the element. + * </ul> + */ + inline local_ordinal_type getElementMaterial(const local_ordinal_type e) const + { + return elements(e, elements_material); + } + + /** + * @brief Return the local ID of the ith node of the local element of ID e. + * Argument: + * <ul> + * <li> e: local ID of the element, + * <li> i: element local ID of the node. + * </ul> + */ + inline local_ordinal_type getElementNode(const local_ordinal_type e, local_ordinal_type i) const + { + return elements(e, elements_nodes + i); + } + + /** + * @brief Return whether local element of ID e is owned by this MPI process (i.e whether it + * is not a ghost element). + * Argument: + * <ul> + * <li> e: local ID of the element. + * </ul> + */ + inline local_ordinal_type isLocal(const local_ordinal_type e) const + { + return elements(e, elements_owned); + } +}; +}; // namespace katoptron + +#endif //KATOPTRON_ELEMENTLISTS_H diff --git a/katoptron/src/EnsembleReduction.h b/katoptron/src/EnsembleReduction.h new file mode 100644 index 0000000000000000000000000000000000000000..9d6f393ead2878200afa418abce2b45732d433c0 --- /dev/null +++ b/katoptron/src/EnsembleReduction.h @@ -0,0 +1,14 @@ +#ifndef KATOPTRON_ENSEMBLEREDUCTION_H +#define KATOPTRON_ENSEMBLEREDUCTION_H + +#include <Stokhos_config.h> + +bool UseEnsembleReduction() +{ +#ifdef HAVE_STOKHOS_ENSEMBLE_REDUCT + return true; +#else + return false; +#endif +} +#endif //KATOPTRON_ENSEMBLEREDUCTION_H \ No newline at end of file diff --git a/katoptron/src/EnsembleTraits.h b/katoptron/src/EnsembleTraits.h new file mode 100644 index 0000000000000000000000000000000000000000..d107df17884388aca0d6bc1dc9325fd1c9de1ba4 --- /dev/null +++ b/katoptron/src/EnsembleTraits.h @@ -0,0 +1,30 @@ +#ifndef KATOPTRON_ENSEMBLETRAITS_H +#define KATOPTRON_ENSEMBLETRAITS_H + +#include "Sacado.hpp" +#include "Stokhos_Tpetra_Utilities_MP_Vector.hpp" + +template <typename T> +struct EnsembleTraits +{ + static const int size = 1; + typedef T value_type; + static const value_type &coeff(const T &x, int i) { return x; } + static value_type &coeff(T &x, int i) { return x; } +}; + +template <typename S> +struct EnsembleTraits<Sacado::MP::Vector<S>> +{ + static const int size = S::static_size; + typedef typename S::value_type value_type; + static const value_type &coeff(const Sacado::MP::Vector<S> &x, int i) + { + return x.fastAccessCoeff(i); + } + static value_type &coeff(Sacado::MP::Vector<S> &x, int i) + { + return x.fastAccessCoeff(i); + } +}; +#endif // KATOPTRON_ENSEMBLETRAITS_H diff --git a/katoptron/src/Graph.cpp b/katoptron/src/Graph.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b5859366888f0e6778e36552c3f894d7493b3cb0 --- /dev/null +++ b/katoptron/src/Graph.cpp @@ -0,0 +1,335 @@ +#include "Graph.h" + +#include "wProblem.h" +#include "wMshData.h" +#include "wElement.h" +#include "wNode.h" + +#include <utility> + +#include <Kokkos_UnorderedMap.hpp> +#include <Kokkos_Sort.hpp> + +#include "Tpetra_CrsMatrix.hpp" +#include <MatrixMarket_Tpetra.hpp> + +#include "LinearSolver.h" + +using namespace katoptron; + +int min(int a, int b) +{ + return (a <= b) ? a : b; +} + +int max(int a, int b) +{ + return (a >= b) ? a : b; +} + +/** + * @brief Graph constructor + * + * This constructor computes the sparsity pattern of the primal matrix. + * + * Arguments: + * <ul> + * <li> map: an RCP to a Map object, + * <li> elementsList: an RCP to a ElementsList object. + * </ul> + */ +Graph::Graph(Teuchos::RCP<Map> map, Teuchos::RCP<ElementsList> elementsList) +{ + using std::pair; + using Teuchos::RCP; + using Teuchos::rcp; + using Teuchos::tuple; + typedef Map::local_ordinal_type local_ordinal_type; + typedef Map::global_ordinal_type global_ordinal_type; + typedef Tpetra::CrsGraph<local_ordinal_type, global_ordinal_type> crs_graph_type; + typedef local_ordinal_type LO; + typedef global_ordinal_type GO; + + auto numMyElems = elementsList->getElementNumber(); + + auto numPrimalDPN = map->numPrimalDPN; + + int numLclNodes = map->mapNodes->getNodeNumElements(); + + int numLclRowsK = 3 * numLclNodes; + int numLclRowsL = numLclNodes; + + Kokkos::View<size_t *> rowCountsK("row counts", numLclRowsK); + Kokkos::View<size_t *> rowCountsS("row counts", numLclRowsK); + Kokkos::View<size_t *> rowCountsL("row counts", numLclRowsL); + + const int maxConnections = 30; + Kokkos::UnorderedMap<pair<GO, GO>, bool> nodenode(numLclNodes * maxConnections); + + size_t numLclEntries = 0; + + Kokkos::parallel_reduce( + numMyElems, + KOKKOS_LAMBDA(const LO e, size_t &curNumLclEntries) { + const int element_size = elementsList->getElementSize(e); + + for (auto n1 = 0; n1 < element_size; ++n1) + for (auto n2 = n1; n2 < element_size; ++n2) + { + const LO lclNodeWO1 = elementsList->getElementNode(e, n1); + const LO lclNodeWO2 = elementsList->getElementNode(e, n2); + + const GO globalTmpNode1 = map->mapNodesWO->getGlobalElement(lclNodeWO1); + const GO globalTmpNode2 = map->mapNodesWO->getGlobalElement(lclNodeWO2); + + const GO globalNode1 = min(globalTmpNode1, globalTmpNode2); + const GO globalNode2 = max(globalTmpNode1, globalTmpNode2); + + const pair<GO, GO> key(globalNode1, globalNode2); + + auto result = nodenode.insert(key); + + if (result.success()) + { + const bool isDiffNodes = (globalNode1 != globalNode2); + const bool isLocalNode1 = map->mapNodes->isNodeGlobalElement(globalNode1); + const bool isLocalNode2 = map->mapNodes->isNodeGlobalElement(globalNode2); + + const LO lclNode1 = map->mapNodes->getLocalElement(globalNode1); + const LO lclNode2 = map->mapNodes->getLocalElement(globalNode2); + + if (numPrimalDPN == 4 || numPrimalDPN == 1) + { + if (isLocalNode1) + Kokkos::atomic_fetch_add(&rowCountsL(lclNode1), 1); + if (isDiffNodes && isLocalNode2) + Kokkos::atomic_fetch_add(&rowCountsL(lclNode2), 1); + } + if (numPrimalDPN == 4 || numPrimalDPN == 3) + { + for (auto i = 0; i < 3; ++i) + for (auto j = 0; j < 3; ++j) + { + const LO lclRow = 3 * lclNode1 + i; + const LO lclCol = 3 * lclNode2 + j; + + if (isLocalNode1) + Kokkos::atomic_fetch_add(&rowCountsK(lclRow), 1); + if (isDiffNodes && isLocalNode2) + Kokkos::atomic_fetch_add(&rowCountsK(lclCol), 1); + } + } + if (numPrimalDPN == 4) + { + if (isLocalNode1) + for (auto i = 0; i < 3; ++i) + { + const LO lclRow = 3 * lclNode1 + i; + Kokkos::atomic_fetch_add(&rowCountsS(lclRow), 1); + } + + if (isDiffNodes && isLocalNode2) + for (auto i = 0; i < 3; ++i) + { + const LO lclRow = 3 * lclNode2 + i; + + Kokkos::atomic_fetch_add(&rowCountsS(lclRow), 1); + } + } + } + } + }, + numLclEntries); + + Kokkos::View<size_t *> rowOffsetsK("row offsets", numLclRowsK + 1); + Kokkos::View<size_t *> rowOffsetsS("row offsets", numLclRowsK + 1); + Kokkos::View<size_t *> rowOffsetsL("row offsets", numLclRowsL + 1); + + if (numPrimalDPN == 4 || numPrimalDPN == 1) + Kokkos::parallel_scan( + numLclRowsL, + KOKKOS_LAMBDA(int irow, int &update, bool final) { + // parallel scan is a multi-pass parallel pattern + // In the ‘final’ pass ‘update’ has the prefix value + if (final) + rowOffsetsL(irow) = update; + update += rowCountsL(irow); + if (final && numLclRowsL == irow + 1) + rowOffsetsL(irow + 1) = update; // total non-zeros + }); + + if (numPrimalDPN == 4 || numPrimalDPN == 3) + Kokkos::parallel_scan( + numLclRowsK, + KOKKOS_LAMBDA(int irow, int &update, bool final) { + // parallel scan is a multi-pass parallel pattern + // In the ‘final’ pass ‘update’ has the prefix value + if (final) + rowOffsetsK(irow) = update; + update += rowCountsK(irow); + if (final && numLclRowsK == irow + 1) + rowOffsetsK(irow + 1) = update; // total non-zeros + }); + + if (numPrimalDPN == 4) + Kokkos::parallel_scan( + numLclRowsK, + KOKKOS_LAMBDA(int irow, int &update, bool final) { + // parallel scan is a multi-pass parallel pattern + // In the ‘final’ pass ‘update’ has the prefix value + if (final) + rowOffsetsS(irow) = update; + update += rowCountsS(irow); + if (final && numLclRowsK == irow + 1) + rowOffsetsS(irow + 1) = update; // total non-zeros + }); + + Kokkos::deep_copy(rowCountsK, static_cast<size_t>(0)); + Kokkos::deep_copy(rowCountsS, static_cast<size_t>(0)); + Kokkos::deep_copy(rowCountsL, static_cast<size_t>(0)); + + Kokkos::View<LO *> colIndicesK("column indices", rowOffsetsK(numLclRowsK)); + Kokkos::View<LO *> colIndicesS("column indices", rowOffsetsS(numLclRowsK)); + Kokkos::View<LO *> colIndicesL("column indices", rowOffsetsL(numLclRowsL)); + + Kokkos::parallel_for( + nodenode.capacity(), + KOKKOS_LAMBDA(int ientry) { + if (nodenode.valid_at(ientry)) + { + const pair<GO, GO> key = nodenode.key_at(ientry); + const GO globalNode1 = key.first; + const GO globalNode2 = key.second; + + const bool isDiffNodes = (globalNode1 != globalNode2); + const bool isLocalNode1 = map->mapNodes->isNodeGlobalElement(globalNode1); + const bool isLocalNode2 = map->mapNodes->isNodeGlobalElement(globalNode2); + + const LO lclNode1 = map->mapNodes->getLocalElement(globalNode1); + const LO lclNode2 = map->mapNodes->getLocalElement(globalNode2); + + const LO lclNodeWO1 = map->mapNodesWO->getLocalElement(globalNode1); + const LO lclNodeWO2 = map->mapNodesWO->getLocalElement(globalNode2); + + if (numPrimalDPN == 4 || numPrimalDPN == 1) + { + + if (isLocalNode1) + { + const LO lclRow = lclNode1; + const LO lclCol = lclNodeWO2; + + const size_t count = Kokkos::atomic_fetch_add(&rowCountsL(lclRow), 1); + colIndicesL(rowOffsetsL(lclRow) + count) = lclCol; + } + if (isDiffNodes && isLocalNode2) + { + const LO lclRow = lclNode2; + const LO lclCol = lclNodeWO1; + + const size_t count = Kokkos::atomic_fetch_add(&rowCountsL(lclRow), 1); + colIndicesL(rowOffsetsL(lclRow) + count) = lclCol; + } + } + if (numPrimalDPN == 4 || numPrimalDPN == 3) + { + if (isLocalNode1) + { + for (auto i = 0; i < 3; ++i) + for (auto j = 0; j < 3; ++j) + { + const LO lclRow = 3 * lclNode1 + i; + const LO lclCol = 3 * lclNodeWO2 + j; + + const size_t count = Kokkos::atomic_fetch_add(&rowCountsK(lclRow), 1); + colIndicesK(rowOffsetsK(lclRow) + count) = lclCol; + } + } + if (isDiffNodes && isLocalNode2) + { + for (auto i = 0; i < 3; ++i) + for (auto j = 0; j < 3; ++j) + { + const LO lclRow = 3 * lclNode2 + i; + const LO lclCol = 3 * lclNodeWO1 + j; + + const size_t count = Kokkos::atomic_fetch_add(&rowCountsK(lclRow), 1); + colIndicesK(rowOffsetsK(lclRow) + count) = lclCol; + } + } + } + if (numPrimalDPN == 4) + { + if (isLocalNode1) + for (auto i = 0; i < 3; ++i) + { + const LO lclRow = 3 * lclNode1 + i; + const LO lclCol = lclNodeWO2; + + const size_t count = Kokkos::atomic_fetch_add(&rowCountsS(lclRow), 1); + colIndicesS(rowOffsetsS(lclRow) + count) = lclCol; + } + if (isDiffNodes && isLocalNode2) + for (auto i = 0; i < 3; ++i) + { + const LO lclRow = 3 * lclNode2 + i; + const LO lclCol = lclNodeWO1; + + const size_t count = Kokkos::atomic_fetch_add(&rowCountsS(lclRow), 1); + colIndicesS(rowOffsetsS(lclRow) + count) = lclCol; + } + } + } + }); + + LinearSolver::getTimers()["graph: sort"].start(); + + if (numPrimalDPN == 4 || numPrimalDPN == 1) + Kokkos::parallel_for( + numLclRowsL, + KOKKOS_LAMBDA(int lclRow) { + auto currentColIndices = subview(colIndicesL, Kokkos::make_pair(rowOffsetsL(lclRow), rowOffsetsL(lclRow + 1))); + LO *const lclColIndsRaw = currentColIndices.data(); + std::sort(lclColIndsRaw, lclColIndsRaw + rowOffsetsL(lclRow + 1) - rowOffsetsL(lclRow)); + }); + + if (numPrimalDPN == 4 || numPrimalDPN == 3) + Kokkos::parallel_for( + numLclRowsK, + KOKKOS_LAMBDA(int lclRow) { + auto currentColIndices = subview(colIndicesK, Kokkos::make_pair(rowOffsetsK(lclRow), rowOffsetsK(lclRow + 1))); + LO *const lclColIndsRaw = currentColIndices.data(); + std::sort(lclColIndsRaw, lclColIndsRaw + rowOffsetsK(lclRow + 1) - rowOffsetsK(lclRow)); + }); + + if (numPrimalDPN == 4) + Kokkos::parallel_for( + numLclRowsK, + KOKKOS_LAMBDA(int lclRow) { + auto currentColIndices = subview(colIndicesS, Kokkos::make_pair(rowOffsetsS(lclRow), rowOffsetsS(lclRow + 1))); + LO *const lclColIndsRaw = currentColIndices.data(); + std::sort(lclColIndsRaw, lclColIndsRaw + rowOffsetsS(lclRow + 1) - rowOffsetsS(lclRow)); + }); + + LinearSolver::getTimers()["graph: sort"].stop(); + + if (numPrimalDPN == 4 || numPrimalDPN == 1) + { + L = rcp(new crs_graph_type(map->thermoMap, map->thermoMapWO, rowOffsetsL, colIndicesL)); + L->fillComplete(map->thermoMap, map->thermoMap); + } + + if (numPrimalDPN == 4 || numPrimalDPN == 3) + { + K = rcp(new crs_graph_type(map->mechaMap, map->mechaMapWO, rowOffsetsK, colIndicesK)); + K->fillComplete(map->mechaMap, map->mechaMap); + } + + if (numPrimalDPN == 4) + { + S = rcp(new crs_graph_type(map->mechaMap, map->thermoMapWO, rowOffsetsS, colIndicesS)); + S->fillComplete(map->thermoMap, map->mechaMap); + + Tpetra::MatrixMarket::Writer<Tpetra::CrsMatrix<>>::writeSparseGraphFile(std::string("S_graph.txt"), S); + } +} diff --git a/katoptron/src/Graph.h b/katoptron/src/Graph.h new file mode 100644 index 0000000000000000000000000000000000000000..f3f0fd52b8d349ce0e447c3fed14d5766e794002 --- /dev/null +++ b/katoptron/src/Graph.h @@ -0,0 +1,36 @@ +#ifndef KATOPTRON_GRAPH_H +#define KATOPTRON_GRAPH_H + +#include "katoptron.h" + +#include "Map.h" +#include "ElementsList.h" + +#include <Tpetra_Map.hpp> +#include <Tpetra_Vector.hpp> +#include <Tpetra_CrsGraph.hpp> + +#include <Teuchos_RCP.hpp> + +namespace katoptron +{ + +/** + * @brief Class used to compute and store the graph of the primal matrices with and without overlaps. + */ +class Graph +{ + typedef Map::local_ordinal_type local_ordinal_type; + typedef Map::global_ordinal_type global_ordinal_type; + typedef Tpetra::CrsGraph<local_ordinal_type, global_ordinal_type> crs_graph_type; + +public: + Teuchos::RCP<crs_graph_type> K; + Teuchos::RCP<crs_graph_type> S; + Teuchos::RCP<crs_graph_type> L; + + Graph(Teuchos::RCP<Map> map, Teuchos::RCP<ElementsList> elementsList); +}; +}; // namespace katoptron + +#endif //KATOPTRON_GRAPH_H diff --git a/katoptron/src/IterativeSolver.cpp b/katoptron/src/IterativeSolver.cpp new file mode 100644 index 0000000000000000000000000000000000000000..cf429c7f8fcea0424f0b0b57651fafd5bc476502 --- /dev/null +++ b/katoptron/src/IterativeSolver.cpp @@ -0,0 +1,868 @@ +#include "IterativeSolver.h" +#include "wTimer.h" +#include "wProblem.h" +#include "wTag.h" +#include "wMshData.h" +#include "wElement.h" +#include "wNode.h" +#include "wMedium.h" +#include "wDirichlet.h" +#include "wContact.h" +#include <map> +#include "wTag.h" +#include <math.h> +#include "wHex8.h" +#include "wQuad4.h" +#include "wTri3.h" +#include "wCacheHex8.h" +#include "wGaussHex8.h" +#include "wResults.h" + +#include "wRandomVariable.h" + +//#include "wElemMatrix.h" + +#include "wDisplayHook.h" + +#include <math.h> + +#include <mpi.h> + +//#include <tbb/tbb.h> +//#include <tbb/parallel_for.h> +//#include <tbb/blocked_range.h> +//#include <tbb/task_scheduler_init.h> +//#include <tbb/spin_mutex.h> + +#include <cstring> +#include <sstream> +#include <iostream> +#include <locale> // std::locale + +// Tpetra +#include "Stokhos_Tpetra_MP_Vector.hpp" +#include "Stokhos_Tpetra_Utilities_MP_Vector.hpp" +#include "Tpetra_ConfigDefs.hpp" + +#include "Tpetra_Map.hpp" +#include "Tpetra_MultiVector.hpp" +#include "Tpetra_Vector.hpp" +#include "Tpetra_CrsGraph.hpp" +#include "Tpetra_CrsMatrix.hpp" +#include "Stokhos_Tpetra_CG.hpp" +//#include "Sacado_Fad_MP_Vector.hpp" + +#include "Teuchos_XMLParameterListCoreHelpers.hpp" +#include <Teuchos_Array.hpp> +#include <Teuchos_GlobalMPISession.hpp> +#include <Teuchos_oblackholestream.hpp> +#include <Teuchos_ScalarTraits.hpp> +#include <Teuchos_RCP.hpp> +#include "Teuchos_ParameterList.hpp" + +#include "Stokhos_Amesos2_MP_Vector.hpp" +#include "Amesos2_Factory.hpp" + +#include "Stokhos_Ifpack2_MP_Vector.hpp" +#include "Ifpack2_Factory.hpp" + +#include "Belos_Tpetra_MP_Vector.hpp" +#include "BelosStatusTestCombo.hpp" + +#include <Xpetra_BlockedCrsMatrix.hpp> +#include <Xpetra_Matrix.hpp> +#include <BelosXpetraAdapter.hpp> // => This header defines Belos::XpetraOp +#include <BelosMueLuAdapter.hpp> // => This header defines Belos::MueLuOp +#include <Xpetra_TpetraMultiVector.hpp> + +#include <Xpetra_MapExtractorFactory.hpp> +#include <Xpetra_MatrixUtils.hpp> +//#include "BelosGmresSolMgr.hpp" + +#include "Kokkos_ViewFactory.hpp" +#include "Kokkos_Vector.hpp" + +#include <Epetra_Map.h> +#include "Epetra_MpiComm.h" + +#include "BelosConfigDefs.hpp" + +#include "Map.h" +#include "DiscreteProblem.h" + +#include <fstream> + +#include <MueLu.hpp> + +#include <MueLu_Exceptions.hpp> +#include <MueLu_Hierarchy.hpp> +#include <MueLu_MasterList.hpp> +#include <MueLu_MLParameterListInterpreter.hpp> +#include <MueLu_ParameterListInterpreter.hpp> +#include <MueLu_Utilities.hpp> +#include <MueLu_HierarchyUtils.hpp> + +#include <BelosXpetraStatusTestGenResSubNorm_MP_Vector.hpp> +#include <BelosStatusTestWeightedGenResNorm_MP_Vector.hpp> + +#include "ElementMatrices.h" + +#include "NodesList.h" + +#ifdef max +#undef max // pour std::numeric_limits<std::streamsize>::max() +#endif + +using namespace katoptron; +using namespace fwk; + +#define HAVE_BELOS_TPETRA_TIMERS + +template <typename scalar> +Teuchos::ParameterList convertParamList(Teuchos::ParameterList ¶mList) +{ + for (Teuchos::ParameterList::ConstIterator i = paramList.begin(); i != paramList.end(); ++i) + { + const std::string &name_i = paramList.name(i); + + if (Teuchos::isParameterType<double>(paramList, name_i)) + { + double value = Teuchos::getParameter<double>(paramList, name_i); + std::string name_ii = name_i; + + paramList.set<scalar>(name_ii, ((scalar)value)); + } + else if (Teuchos::isParameterType<Teuchos::ParameterList>(paramList, name_i)) + { + Teuchos::ParameterList subparamList = Teuchos::getParameter<Teuchos::ParameterList>(paramList, name_i); + subparamList = convertParamList<scalar>(subparamList); + paramList.set(name_i, subparamList); + } + } + + return paramList; +} + +/** + * @brief Display IterativeSolver information. + */ +void IterativeSolver::write(std::ostream &out) const +{ + out << "katoptron::Solver:\n"; + out << pbl; // wProblem.h +} + +/** + * @brief Launch the solver. + */ +void IterativeSolver::start() +{ + std::locale::global(std::locale::classic()); + { + if (minimum_ensemble_size <= 1) + { + IterativeSolver::tstart<double>(); + } + else if (minimum_ensemble_size <= 8) + { + typedef Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 8, Kokkos::OpenMP>> ensemble_scalar; + IterativeSolver::tstart<ensemble_scalar>(); + } + else if (minimum_ensemble_size <= 16) + { + typedef Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 16, Kokkos::OpenMP>> ensemble_scalar; + IterativeSolver::tstart<ensemble_scalar>(); + } + else if (minimum_ensemble_size <= 24) + { + typedef Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 24, Kokkos::OpenMP>> ensemble_scalar; + IterativeSolver::tstart<ensemble_scalar>(); + } + else if (minimum_ensemble_size <= 32) + { + typedef Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 32, Kokkos::OpenMP>> ensemble_scalar; + IterativeSolver::tstart<ensemble_scalar>(); + } + } +} + +/** + * @brief Launch the solver with a templated scalar type. + */ +template <typename scalar> +void IterativeSolver::tstart() +{ + LinearSolver::getTimers().reset(); + // ------------------------------------------ + // + // Trilinos initialization + // + // ------------------------------------------ + using std::cerr; + using std::cout; + using std::endl; + using Teuchos::arcp; + using Teuchos::Array; + using Teuchos::ArrayRCP; + using Teuchos::ArrayView; + using Teuchos::RCP; + using Teuchos::rcp; + using Teuchos::tuple; + + using Kokkos::ALL; + using Kokkos::subview; + + typedef Map::local_ordinal_type local_ordinal_type; + typedef Map::global_ordinal_type global_ordinal_type; + typedef Map::node_type node_type; + + typedef typename Vectors<scalar>::tpetra_vector_type tpetra_vector_type; + typedef typename Vectors<scalar>::tpetra_mvector_type tpetra_mvector_type; + typedef typename Vectors<scalar>::xpetra_mvector_type xpetra_mvector_type; + typedef typename Vectors<scalar>::xpetra_tmvector_type xpetra_tmvector_type; + + typedef typename Matrices<scalar>::tpetra_crs_type tpetra_crs_type; + + typedef typename Matrices<scalar>::xpetra_bcrs_type xpetra_bcrs_type; + typedef typename Matrices<scalar>::xpetra_mat_type xpetra_mat_type; + + typedef Tpetra::Export<local_ordinal_type, global_ordinal_type, node_type> export_type; + typedef Tpetra::Import<local_ordinal_type, global_ordinal_type, node_type> import_type; + + typedef MueLu::Hierarchy<scalar, local_ordinal_type, global_ordinal_type, node_type> Hierarchy; + typedef MueLu::ParameterListInterpreter<scalar, local_ordinal_type, global_ordinal_type, node_type> ParameterListInterpreter; + + typedef Teuchos::ScalarTraits<scalar> STS; + typedef typename STS::magnitudeType magnitude_type; + + Teuchos::oblackholestream blackhole; + + RCP<const Teuchos::Comm<int>> comm = rcp(new Teuchos::MpiComm<int>(pbl.comm)); + + const size_t myRank = comm->getRank(); + + // Make an output stream (for verbose output) that only prints on + // Proc 0 of the communicator. + Teuchos::oblackholestream blackHole; + std::ostream &out = (myRank == 0) ? std::cout : blackHole; + + // Create some timers used by Belos so we can access them + Teuchos::RCP<Teuchos::Time> time_mat_vec = + Teuchos::TimeMonitor::getNewTimer("Belos: Operation Op*x"); + Teuchos::RCP<Teuchos::Time> time_prec_apply = + Teuchos::TimeMonitor::getNewTimer("Belos: Operation Prec*x"); + Teuchos::RCP<Teuchos::Time> time_prec_setup = + Teuchos::TimeMonitor::getNewTimer("Total MueLu setup time"); + + std::string ortho_strategy = solverList->get("Orthogonalization", "DGKS"); + std::string belos_ortho_timer_name = "Belos: " + ortho_strategy; + + if (ortho_strategy == "IMGS") + belos_ortho_timer_name = belos_ortho_timer_name + "[1]"; + else + belos_ortho_timer_name = belos_ortho_timer_name + "[2]"; + + Teuchos::RCP<Teuchos::Time> time_ortho = + Teuchos::TimeMonitor::getNewTimer(belos_ortho_timer_name + ": Orthogonalization"); + Teuchos::RCP<Teuchos::Time> time_ortho_inner = + Teuchos::TimeMonitor::getNewTimer(belos_ortho_timer_name + ": Ortho (Inner Product)"); + Teuchos::RCP<Teuchos::Time> time_ortho_norm = + Teuchos::TimeMonitor::getNewTimer(belos_ortho_timer_name + ": Ortho (Norm)"); + Teuchos::RCP<Teuchos::Time> time_ortho_update = + Teuchos::TimeMonitor::getNewTimer(belos_ortho_timer_name + ": Ortho (Update)"); + + Teuchos::RCP<Teuchos::Time> time_belos_total = + Teuchos::TimeMonitor::getNewTimer("Belos: PseudoBlockGmresSolMgr total solve time"); + + bool write_intermediate_files = solverList->get("Write intermediate files", false); + bool write_txt_files = solverList->get("Write txt files", false); + bool write_vtk_files = solverList->get("Write vtk files", true); + { + LinearSolver::getTimers()["total"].start(); + auto msh = pbl.msh; + + auto numNodes = msh->nodes.size(); + + RCP<Teuchos::ParameterList> randomParams = + rcp(new Teuchos::ParameterList(solverList->get("randomParams", Teuchos::ParameterList()))); + const int n_rv = pbl.RandomVariables.size(); + + typedef Kokkos::View<scalar *, Kokkos::LayoutLeft> RandomVariableView; + + RandomVariableView m_rv_values = RandomVariableView("KL Random Variables", n_rv); + + typedef EnsembleTraits<scalar> ET; + const int ensemble_size = ET::size; + + for (int i = 0; i < n_rv; ++i) + for (int j = 0; j < ensemble_size; ++j) + ET::coeff(m_rv_values(i), j) = (double)pbl.RandomVariables[i]->values[j]; + + LinearSolver::getTimers()["dp"].start(); + Teuchos::RCP<DiscreteProblem<scalar>> discreteProblem = + Teuchos::rcp(new DiscreteProblem<scalar>(pbl, numPrimalDPN, randomParams, m_rv_values)); + LinearSolver::getTimers()["dp"].stop(); + LinearSolver::getTimers()["computeMatrices"].start(); + + const bool contactProblem = (discreteProblem->domain->contactsList->getContactNumber() >= 1); + + if (contactProblem) + { + LinearSolver::getTimers()["compute contact matrices"].start(); + discreteProblem->computeContactMatrices(pbl.comm); + LinearSolver::getTimers()["compute contact matrices"].stop(); + } + LinearSolver::getTimers()["compute block 00 matrix"].start(); + discreteProblem->computeMatrices(); + LinearSolver::getTimers()["compute block 00 matrix"].stop(); + LinearSolver::getTimers()["computeMatrices"].stop(); + + LinearSolver::getTimers()["computeMatrices"].start(); + + const bool mergeMatrix = solverList->get("Merge block matrix", true); + const bool writeMatrixAndVectors = solverList->get("Write matrix and vectors", false); + + if (writeMatrixAndVectors) + { + LinearSolver::getTimers()["write"].start(); + Tpetra::MatrixMarket::Writer<tpetra_crs_type>::writeSparseFile(std::string("A_mm.txt"), + discreteProblem->algebraic->matrices->K); + if (contactProblem) + { + Tpetra::MatrixMarket::Writer<tpetra_crs_type>::writeSparseFile(std::string("B_mm.txt"), + discreteProblem->algebraic->matrices->B); + Tpetra::MatrixMarket::Writer<tpetra_crs_type>::writeSparseFile(std::string("B_T_mm.txt"), + discreteProblem->algebraic->matrices->B_T); + } + LinearSolver::getTimers()["write"].stop(); + } + + LinearSolver::getTimers()["computeLoads"].start(); + bool is_scaled = solverList->get("Scaled Block 0", false); + discreteProblem->computeLoads(is_scaled); + LinearSolver::getTimers()["computeLoads"].stop(); + + if (contactProblem) + { + scalar gamma; + if (solverList->isType<std::string>("gamma")) + { + Teuchos::Array<double> array_gamma_double = Teuchos::getArrayFromStringParameter<double>(*solverList, "gamma"); + for (int j = 0; j < ensemble_size; ++j) + ET::coeff(gamma, j) = (double)array_gamma_double[j]; + } + else + gamma = solverList->get("gamma", 0.); + discreteProblem->createBlockMatrix(gamma, writeMatrixAndVectors, mergeMatrix); + } + + LinearSolver::getTimers()["computeMatrices"].stop(); + + LinearSolver::getTimers()["computeLoads"].start(); + if (contactProblem) + { + discreteProblem->createBlockMVector(writeMatrixAndVectors); + } + LinearSolver::getTimers()["computeLoads"].stop(); + + if (writeMatrixAndVectors) + { + std::string name_1, name_2, name_3; + name_1 = "matrix_after_bc.text"; + name_2 = "matrix_after_bc"; + name_3 = "vector_after_bc.text"; + + LinearSolver::getTimers()["write"].start(); + Tpetra::MatrixMarket::Writer<tpetra_crs_type>::writeSparseFile(std::string("A_mm_after_bc.txt"), + discreteProblem->algebraic->matrices->K); + Tpetra::MatrixMarket::Writer<tpetra_crs_type>::writeDenseFile(std::string("b_mm_after_bc.txt"), + discreteProblem->algebraic->vectors->b); + LinearSolver::getTimers()["write"].stop(); + } + + std::string name_4, defaultName, name_x; + defaultName = "none"; + name_4 = solverList->get("Initial guess", defaultName); + name_x = "solution"; + + RCP<export_type> exportOutput; + RCP<import_type> importOutput; + RCP<tpetra_vector_type> xPost, xPost2; + if (contactProblem) + { + importOutput = rcp(new import_type(discreteProblem->algebraic->map->fullmap, discreteProblem->algebraic->map->fullmapWO)); + exportOutput = rcp(new export_type(discreteProblem->algebraic->map->fullmapWO, discreteProblem->algebraic->map->fullmapOutput)); + xPost = rcp(new tpetra_vector_type(discreteProblem->algebraic->map->fullmapWO, false)); + xPost2 = rcp(new tpetra_vector_type(discreteProblem->algebraic->map->fullmapOutput, false)); + } + else + { + importOutput = rcp(new import_type(discreteProblem->algebraic->map->mapDofs, discreteProblem->algebraic->map->mapDofsWO)); + exportOutput = rcp(new export_type(discreteProblem->algebraic->map->mapDofsWO, discreteProblem->algebraic->map->mapOutput)); + xPost = rcp(new tpetra_vector_type(discreteProblem->algebraic->map->mapDofsWO, false)); + xPost2 = rcp(new tpetra_vector_type(discreteProblem->algebraic->map->mapOutput, false)); + } + + if (name_4.compare(defaultName) != 0) + discreteProblem->algebraic->vectors->x = discreteProblem->algebraic->readVectorFromFile(name_4, myRank); + + RCP<tpetra_vector_type> r(new tpetra_vector_type(discreteProblem->algebraic->map->mapDofs, true)); + + discreteProblem->algebraic->matrices->K->apply(*(discreteProblem->algebraic->vectors->x), *r, Teuchos::NO_TRANS, (scalar)-1., (scalar)1.); + + if (writeMatrixAndVectors) + { + LinearSolver::getTimers()["write"].start(); + std::string name_5 = "x_0.text"; + Tpetra::MatrixMarket::Writer<tpetra_crs_type>::writeDenseFile(std::string(name_5), discreteProblem->algebraic->vectors->x); + std::string name_6 = "r_0.text"; + Tpetra::MatrixMarket::Writer<tpetra_crs_type>::writeDenseFile(std::string(name_6), r); + LinearSolver::getTimers()["write"].stop(); + } + + bool usePrec = solverList->get("Use preconditioner", contactProblem); + + std::string belos_output_file = solverList->get("Output Stream file name belos", "belos_out.txt"); + + std::ofstream belos_ofstream(belos_output_file); + + RCP<Teuchos::FancyOStream> verbOut = Teuchos::getFancyOStream(Teuchos::rcpFromRef(belos_ofstream)); + solverList->set("Output Stream", verbOut->getOStream()); + + magnitude_type GMRES_tol = solverList->get("Ensemble Convergence Tolerance", 1E-08); + solverList->set("Convergence Tolerance", GMRES_tol); + + active_set_iteration = 0; + size_t max_active_set_iteration = solverList->get("Maximum active set iteration", 1); + + bool blockedStatusTest = solverList->get("Use blocked status test", !mergeMatrix); + bool blockedStatusTest_x = solverList->get("Use blocked status test: x", blockedStatusTest); + bool blockedStatusTest_T = solverList->get("Use blocked status test: T", blockedStatusTest); + + LinearSolver::getTimers()["solver"].start(); + while (true) + { + // Solve + RCP<tpetra_vector_type> xx; + + const bool blockedMatrix = (numPrimalDPN == 4); + + RCP<xpetra_mat_type> A; + if (contactProblem) + A = discreteProblem->algebraic->matrices->blockedMatrix; + else if (mergeMatrix && blockedMatrix) + A = Teuchos::rcp_dynamic_cast<xpetra_bcrs_type>(discreteProblem->algebraic->matrices->A)->Merge(); + else + A = discreteProblem->algebraic->matrices->A; + + typedef xpetra_mvector_type MV; + typedef typename tpetra_mvector_type::dot_type belos_scalar; + typedef Belos::OperatorT<MV> OP; + + typedef Belos::LinearProblem<belos_scalar, MV, OP> BLinProb; + // Turns a Xpetra::Matrix object into a Belos operator + RCP<OP> belosOp = rcp(new Belos::XpetraOp<scalar, local_ordinal_type, global_ordinal_type, node_type>(A)); + RCP<OP> belosPrec; + + if (usePrec) + { + LinearSolver::getTimers()["preconditioner setup"].start(); + RCP<xpetra_mvector_type> nullspace1 = Teuchos::null; + RCP<xpetra_mvector_type> nullspace2 = Teuchos::null; + + bool useXML = solverList->get("use xml file", false); + string xmlFileName = solverList->get("MueLu xml file name", " "); + RCP<Teuchos::ParameterList> mueluParams; + + if (useXML || contactProblem) + { + bool doIconver = solverList->get("convert MueLu xml file", false); + + RCP<Teuchos::ParameterList> paramList = Teuchos::getParametersFromXmlFile(xmlFileName); + + Teuchos::ParameterList paramList2; + + if (contactProblem) + { + RCP<std::map<local_ordinal_type, local_ordinal_type>> lagr2dof = + Teuchos::rcpFromRef(discreteProblem->algebraic->map->lm_to_dof); + + RCP<Teuchos::ParameterList> paramsF, paramsI; + paramsF = sublist(paramList, "Factories"); + paramsI = sublist(paramsF, "myInterfaceAggs2"); + paramsI->set<RCP<std::map<local_ordinal_type, local_ordinal_type>>>("DualNodeID2PrimalNodeID - level 0", lagr2dof); + } + + if (doIconver) + paramList2 = convertParamList<scalar>(*paramList); + else + paramList2 = (*paramList); + + mueluParams = rcp(new Teuchos::ParameterList(paramList2)); + } + else + mueluParams = rcp(new Teuchos::ParameterList(solverList->get("mueluParams", Teuchos::ParameterList()))); + + ParameterListInterpreter mueLuFactory(*mueluParams, comm); + RCP<Hierarchy> H = mueLuFactory.CreateHierarchy(); + H->GetLevel(0)->Set("A", A); + + H->IsPreconditioner(true); + H->SetDefaultVerbLevel(MueLu::Extreme); + mueLuFactory.SetupHierarchy(*H); + LinearSolver::getTimers()["preconditioner setup"].stop(); + + // Turns a MueLu::Hierarchy object into a Belos operator + belosPrec = rcp(new Belos::MueLuOp<scalar, local_ordinal_type, global_ordinal_type, node_type>(H)); + } + + RCP<MV> xMV; + RCP<MV> bMV; + RCP<MV> weightsMV; + + if (contactProblem) + { + xMV = discreteProblem->algebraic->vectors->solutionMultiVector; + bMV = discreteProblem->algebraic->vectors->rhsMultiVector; + } + else + { + xMV = rcp(new xpetra_tmvector_type(discreteProblem->algebraic->vectors->x)); + bMV = rcp(new xpetra_tmvector_type(discreteProblem->algebraic->vectors->b)); + weightsMV = rcp(new xpetra_tmvector_type(discreteProblem->algebraic->vectors->weights)); + } + + RCP<BLinProb> blinproblem = rcp(new BLinProb(belosOp, xMV, bMV)); + + if (usePrec) + blinproblem->setRightPrec(belosPrec); + blinproblem->setProblem(); + RCP<Teuchos::ParameterList> belosParams = solverList; + RCP<Belos::SolverManager<belos_scalar, MV, OP>> blinsolver = + rcp(new Belos::PseudoBlockGmresSolMgr<belos_scalar, MV, OP>(blinproblem, belosParams)); + out << "Belos informations are written in file " << belos_output_file << endl; + + if (writeMatrixAndVectors) + { + LinearSolver::getTimers()["write"].start(); + if (contactProblem) + { + RCP<tpetra_mvector_type> mxx = + (Teuchos::rcp_dynamic_cast<xpetra_tmvector_type>(discreteProblem->algebraic->vectors->solutionMultiVector))->getTpetra_MultiVector(); + RCP<tpetra_mvector_type> mbb = + (Teuchos::rcp_dynamic_cast<xpetra_tmvector_type>(discreteProblem->algebraic->vectors->rhsMultiVector))->getTpetra_MultiVector(); + Tpetra::MatrixMarket::Writer<tpetra_crs_type>::writeDenseFile(std::string("blocked_x_0_mm.txt"), mxx->getVectorNonConst(0)); + Tpetra::MatrixMarket::Writer<tpetra_crs_type>::writeDenseFile(std::string("blocked_b_mm.txt"), mbb->getVectorNonConst(0)); + } + LinearSolver::getTimers()["write"].stop(); + } + + if (contactProblem && solverList->get("Create Preconditioned Matrix", false)) + { + LinearSolver::getTimers()["create AM^{-1}"].start(); + typedef xpetra_tmvector_type TMV; + + Teuchos::RCP<const Xpetra::Map<local_ordinal_type, global_ordinal_type, node_type>> merged_map = + discreteProblem->algebraic->vectors->rhsMultiVector->getMap(); + + Teuchos::RCP<TMV> MVx1 = Teuchos::rcp(new TMV(merged_map, merged_map->getGlobalNumElements(), true)); + Teuchos::RCP<TMV> MVx2 = Teuchos::rcp(new TMV(merged_map, merged_map->getGlobalNumElements(), true)); + Teuchos::RCP<TMV> MVy1 = Teuchos::rcp(new TMV(merged_map, merged_map->getGlobalNumElements(), true)); + Teuchos::RCP<TMV> MVy2 = Teuchos::rcp(new TMV(merged_map, merged_map->getGlobalNumElements(), true)); + + for (size_t local_i = 0; local_i < merged_map->getNodeNumElements(); ++local_i) + MVx1->sumIntoGlobalValue(merged_map->getGlobalElement(local_i), merged_map->getGlobalElement(local_i), ((scalar)1.)); + + belosPrec->Apply(*MVx1, *MVx2); + belosOp->Apply(*MVx2, *MVy2); + belosOp->Apply(*MVx1, *MVy1); + + Tpetra::MatrixMarket::Writer<tpetra_crs_type>::writeDenseFile(std::string("Applied_Matrix_mm.txt"), + MVy1->getTpetra_MultiVector()); + Tpetra::MatrixMarket::Writer<tpetra_crs_type>::writeDenseFile(std::string("Applied_Preconditioner_mm.txt"), + MVx2->getTpetra_MultiVector()); + Tpetra::MatrixMarket::Writer<tpetra_crs_type>::writeDenseFile(std::string("Applied_Preconditioned_Matrix_mm.txt"), + MVy2->getTpetra_MultiVector()); + + LinearSolver::getTimers()["create AM^{-1}"].stop(); + } + + if (blockedMatrix && blockedStatusTest) + { + typedef Belos::StatusTestGenResSubNorm<belos_scalar, MV, OP> blockStatusTestClass; + typedef Belos::StatusTestWeightedGenResNorm<belos_scalar, MV, OP> weightedStatusTestClass; + typedef Belos::StatusTestCombo<belos_scalar, MV, OP> StatusTestComboClass; + + magnitude_type GMRES_tol_x = solverList->get("Ensemble Convergence Tolerance: x", 1E-08); + magnitude_type GMRES_tol_T = solverList->get("Ensemble Convergence Tolerance: T", 1E-08); + magnitude_type GMRES_tol_w = solverList->get("Ensemble Convergence Tolerance: weights", 1E-08); + + bool x_rel = solverList->get("Ensemble Convergence Tolerance: x - relative", true); + bool x_rel_full_rhs = solverList->get("Ensemble Convergence Tolerance: x - relative full rhs", false); + bool T_rel = solverList->get("Ensemble Convergence Tolerance: T - relative", true); + bool T_rel_full_rhs = solverList->get("Ensemble Convergence Tolerance: T - relative full rhs", false); + + bool weightStatusTest = solverList->get("Use weighted status test", false); + bool w_rel = solverList->get("Ensemble Convergence Tolerance: weights - relative", true); + + RCP<blockStatusTestClass> blockStatusTest_T = Teuchos::rcp(new blockStatusTestClass(GMRES_tol_T, 0)); + RCP<blockStatusTestClass> blockStatusTest_x = Teuchos::rcp(new blockStatusTestClass(GMRES_tol_x, 1)); + RCP<weightedStatusTestClass> weightedStatusTest = Teuchos::rcp(new weightedStatusTestClass(GMRES_tol_w, weightsMV)); + + if (x_rel && x_rel_full_rhs) + blockStatusTest_x->defineScaleForm(Belos::NormOfFullInitRes, Belos::TwoNorm); + else if (!x_rel) + blockStatusTest_x->defineScaleForm(Belos::None, Belos::TwoNorm); + if (T_rel && T_rel_full_rhs) + blockStatusTest_T->defineScaleForm(Belos::NormOfFullInitRes, Belos::TwoNorm); + else if (!T_rel) + blockStatusTest_T->defineScaleForm(Belos::None, Belos::TwoNorm); + if (!w_rel) + weightedStatusTest->defineScaleForm(Belos::None, Belos::TwoNorm); + + RCP<StatusTestComboClass> statusTestCombo = Teuchos::rcp(new StatusTestComboClass(StatusTestComboClass::SEQ)); + + if (blockedStatusTest_T) + statusTestCombo->addStatusTest(blockStatusTest_T); + if (blockedStatusTest_x) + statusTestCombo->addStatusTest(blockStatusTest_x); + if (weightStatusTest) + statusTestCombo->addStatusTest(weightedStatusTest); + + blinsolver->setUserConvStatusTest(statusTestCombo); + } + out << "--------- Belos start" << endl; + blinsolver->solve(); + out << "--------- Belos stop" << endl; + + if (contactProblem) + { + RCP<tpetra_mvector_type> mxx = + (Teuchos::rcp_dynamic_cast<xpetra_tmvector_type>(discreteProblem->algebraic->vectors->solutionMultiVector))->getTpetra_MultiVector(); + xx = mxx->getVectorNonConst(0); + + if (write_intermediate_files) + { + LinearSolver::getTimers()["solver"].stop(); + LinearSolver::getTimers()["write results"].start(); + + std::string name_5 = "x_sol" + std::to_string(active_set_iteration) + ".txt"; + Tpetra::MatrixMarket::Writer<tpetra_crs_type>::writeDenseFile(std::string(name_5), xx); + LinearSolver::getTimers()["write results"].stop(); + LinearSolver::getTimers()["solver"].start(); + } + + xPost->doImport(*xx, *importOutput, Tpetra::INSERT); + } + else + { + xPost->doImport(*(discreteProblem->algebraic->vectors->x), *importOutput, Tpetra::INSERT); + } + ++active_set_iteration; + + if (write_intermediate_files) + { + LinearSolver::getTimers()["solver"].stop(); + LinearSolver::getTimers()["write results"].start(); + if (write_txt_files) + { + xPost2->doExport(*(xPost), *exportOutput, Tpetra::INSERT); + Tpetra::MatrixMarket::Writer<tpetra_crs_type>::writeDenseFile(std::string("x_mm.txt"), xPost2); + } + if (write_vtk_files) + { + this->writeResults<scalar>(xPost, numNodes, name_x, active_set_iteration, + false, false, discreteProblem->algebraic->map, + discreteProblem->domain->random_field); + } + LinearSolver::getTimers()["write results"].stop(); + LinearSolver::getTimers()["solver"].start(); + } + + Mask<scalar> hasConverged; + const size_t ensemble_size = hasConverged.getSize(); + + for (size_t l = 0; l < ensemble_size; ++l) + hasConverged.set(l, true); + + if (active_set_iteration == max_active_set_iteration) + { + if (contactProblem) + { + LinearSolver::getTimers()["update"].start(); + hasConverged = discreteProblem->updateActivity(active_set_iteration); + LinearSolver::getTimers()["update"].stop(); + + if (MaskLogic::AND(hasConverged) == false) + { + out << "---------------------------------------------------------" << std::endl; + out << "---Has not converged before reaching maximum iteration---" << std::endl; + out << "---------------------------------------------------------" << std::endl; + } + } + break; + } + else if (contactProblem) + { + LinearSolver::getTimers()["update"].start(); + hasConverged = discreteProblem->updateActivity(active_set_iteration); + LinearSolver::getTimers()["update"].stop(); + } + if (MaskLogic::AND(hasConverged)) + break; + else + { +#ifndef HAVE_STOKHOS_ENSEMBLE_REDUCT + mask_assign(hasConverged, GMRES_tol) = {1., GMRES_tol}; + solverList->set("Convergence Tolerance", GMRES_tol); +#else + ; +#endif + } + } + + LinearSolver::getTimers()["solver"].stop(); + + LinearSolver::getTimers()["write results"].start(); + if (write_txt_files) + { + xPost2->doExport(*(xPost), *exportOutput, Tpetra::INSERT); + Tpetra::MatrixMarket::Writer<tpetra_crs_type>::writeDenseFile(std::string("x_mm.txt"), xPost2); + } + if (write_vtk_files) + { + this->writeResults<scalar>(xPost, numNodes, name_x, active_set_iteration, true, false, + discreteProblem->algebraic->map, discreteProblem->domain->random_field); + } + LinearSolver::getTimers()["write results"].stop(); + // ------------------------------------------ + // + // End of the timers and print + // + // ------------------------------------------ + LinearSolver::getTimers()["total"].stop(); + + discreteProblem->domain->elementsList = Teuchos::null; + discreteProblem->domain->nodesList = Teuchos::null; + discreteProblem->domain->materialsList = Teuchos::null; + discreteProblem->domain->contactsList = Teuchos::null; + discreteProblem->domain->random_field = Teuchos::null; + discreteProblem->domain->~Domain(); + discreteProblem = Teuchos::null; + + double time_mat_vec_sec = time_mat_vec->totalElapsedTime(); + double time_prec_setup_sec = time_prec_setup->totalElapsedTime(); + double time_prec_apply_sec = time_prec_apply->totalElapsedTime(); + double time_ortho_sec = time_ortho->totalElapsedTime(); + + double time_belos_total_sec = time_belos_total->totalElapsedTime(); + + double time_ortho_inner_sec = time_ortho_inner->totalElapsedTime(); + double time_ortho_norm_sec = time_ortho_norm->totalElapsedTime(); + double time_ortho_update_sec = time_ortho_update->totalElapsedTime(); + + static clock_t freq = CLOCKS_PER_SEC; + + UnixClockTime zero_time = UnixClockTime(0); + UnixClockTime time_mat_vec_time = UnixClockTime(time_mat_vec_sec * static_cast<double>(freq) / 10000); + UnixClockTime time_prec_setup_time = UnixClockTime(time_prec_setup_sec * static_cast<double>(freq) / 10000); + UnixClockTime time_prec_apply_time = UnixClockTime(time_prec_apply_sec * static_cast<double>(freq) / 10000); + UnixClockTime time_ortho_time = UnixClockTime(time_ortho_sec * static_cast<double>(freq) / 10000); + UnixClockTime time_ortho_inner_time = UnixClockTime(time_ortho_inner_sec * static_cast<double>(freq) / 10000); + UnixClockTime time_ortho_norm_time = UnixClockTime(time_ortho_norm_sec * static_cast<double>(freq) / 10000); + UnixClockTime time_ortho_update_time = UnixClockTime(time_ortho_update_sec * static_cast<double>(freq) / 10000); + + UnixClockTime time_belos_total_time = UnixClockTime(time_belos_total_sec * static_cast<double>(freq) / 10000); + + Times time_mat_vec_times, time_prec_setup_times, time_prec_apply_times, time_ortho_times, + time_ortho_inner_times, time_ortho_norm_times, time_ortho_update_times; + Times zero_times; + + Times time_belos_total_times; + + time_mat_vec_times.setUser(zero_time); + time_mat_vec_times.setReal(time_mat_vec_time); + time_mat_vec_times.setKernel(zero_time); + + time_prec_setup_times.setUser(zero_time); + time_prec_setup_times.setReal(time_prec_setup_time); + time_prec_setup_times.setKernel(zero_time); + + time_prec_apply_times.setUser(zero_time); + time_prec_apply_times.setReal(time_prec_apply_time); + time_prec_apply_times.setKernel(zero_time); + + time_ortho_times.setUser(zero_time); + time_ortho_times.setReal(time_ortho_time); + time_ortho_times.setKernel(zero_time); + + time_ortho_inner_times.setUser(zero_time); + time_ortho_inner_times.setReal(time_ortho_inner_time); + time_ortho_inner_times.setKernel(zero_time); + + time_ortho_norm_times.setUser(zero_time); + time_ortho_norm_times.setReal(time_ortho_norm_time); + time_ortho_norm_times.setKernel(zero_time); + + time_ortho_update_times.setUser(zero_time); + time_ortho_update_times.setReal(time_ortho_update_time); + time_ortho_update_times.setKernel(zero_time); + + zero_times.setUser(zero_time); + zero_times.setReal(zero_time); + zero_times.setKernel(zero_time); + + time_belos_total_times.setUser(zero_time); + time_belos_total_times.setReal(time_belos_total_time); + time_belos_total_times.setKernel(zero_time); + + LinearSolver::getTimers()["time_belos_total"].setTStart(zero_times); + LinearSolver::getTimers()["time_belos_total"].setTElaps(time_belos_total_times); + + LinearSolver::getTimers()["time_mat_vec"].setTStart(zero_times); + LinearSolver::getTimers()["time_mat_vec"].setTElaps(time_mat_vec_times); + + LinearSolver::getTimers()["time_prec_setup"].setTStart(zero_times); + LinearSolver::getTimers()["time_prec_setup"].setTElaps(time_prec_setup_times); + + LinearSolver::getTimers()["time_prec_apply"].setTStart(zero_times); + LinearSolver::getTimers()["time_prec_apply"].setTElaps(time_prec_apply_times); + + LinearSolver::getTimers()["time_ortho"].setTStart(zero_times); + LinearSolver::getTimers()["time_ortho"].setTElaps(time_ortho_times); + + LinearSolver::getTimers()["time_ortho_inner"].setTStart(zero_times); + LinearSolver::getTimers()["time_ortho_inner"].setTElaps(time_ortho_inner_times); + + LinearSolver::getTimers()["time_ortho_norm"].setTStart(zero_times); + LinearSolver::getTimers()["time_ortho_norm"].setTElaps(time_ortho_norm_times); + + LinearSolver::getTimers()["time_ortho_update"].setTStart(zero_times); + LinearSolver::getTimers()["time_ortho_update"].setTElaps(time_ortho_update_times); + + out << "\n---CPU statistics of proc " << myRank << "---\n"; + out << LinearSolver::getTimers(); + out << "---------------------------\n"; + + bool print_teuchos_timers = solverList->get("Print Teuchos timers", false); + if (print_teuchos_timers) + { + std::streambuf *psbuf, *backup; + std::ofstream filestr; + filestr.open("teuchos_timers.txt"); + + backup = std::cout.rdbuf(); // back up cout's streambuf + + psbuf = filestr.rdbuf(); // get file's streambuf + std::cout.rdbuf(psbuf); // assign streambuf to cout + + Teuchos::TimeMonitor::summarize(); + + std::cout.rdbuf(backup); // restore cout's original streambuf + + filestr.close(); + } + + Teuchos::TimeMonitor::zeroOutTimers(); + } +} diff --git a/katoptron/src/IterativeSolver.h b/katoptron/src/IterativeSolver.h new file mode 100644 index 0000000000000000000000000000000000000000..57e1df273f3132edb59f444a3b911f0aedea2f8a --- /dev/null +++ b/katoptron/src/IterativeSolver.h @@ -0,0 +1,37 @@ +#ifndef KATOPTRON_ITERATIVESOLVER_H +#define KATOPTRON_ITERATIVESOLVER_H + +#include "katoptron.h" +#include "wObject.h" +#include "wTimer.h" +#include "wTimers.h" +#include "Teuchos_ParameterList.hpp" + +#include "LinearSolver.h" + +namespace katoptron +{ + +/** + * @brief Solver class where the active set strategy is implemented. + */ +class KATOPTRON_API IterativeSolver : public LinearSolver +{ +public: + IterativeSolver(Problem &pbl, Teuchos::RCP<Teuchos::ParameterList> solverList, + int numPrimalDPN = 3, + size_t minimum_ensemble_size = 1) + : LinearSolver(pbl, solverList, numPrimalDPN, minimum_ensemble_size){}; +#ifndef SWIG + virtual void write(std::ostream &out) const; +#endif + void start(); + +private: + template <typename scalar> + void tstart(); +}; + +} // namespace katoptron + +#endif //KATOPTRON_ITERATIVESOLVER_H diff --git a/katoptron/src/Kokkos_Init.h b/katoptron/src/Kokkos_Init.h new file mode 100644 index 0000000000000000000000000000000000000000..70164ab00d9f72ba96b341d37086108ae697f9f9 --- /dev/null +++ b/katoptron/src/Kokkos_Init.h @@ -0,0 +1,20 @@ +#ifndef KATOPTRON_KOKKOSINIT_H +#define KATOPTRON_KOKKOSINIT_H + +#include <Kokkos_Core.hpp> + +void Kokkos_Initialize(int nThreads) +{ +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE + Kokkos::OpenMP::initialize(nThreads); +#else + Kokkos::OpenMP::impl_initialize(nThreads); +#endif +} + +void Kokkos_Finalize() +{ + Kokkos::finalize(); +} + +#endif //KATOPTRON_KOKKOSINIT_H \ No newline at end of file diff --git a/katoptron/src/LinearSolver.h b/katoptron/src/LinearSolver.h new file mode 100644 index 0000000000000000000000000000000000000000..0fe02a2f7abee9daca881b2a74049d7a73ee7e48 --- /dev/null +++ b/katoptron/src/LinearSolver.h @@ -0,0 +1,162 @@ +#ifndef KATOPTRON_LINEARSOLVER_H +#define KATOPTRON_LINEARSOLVER_H + +#include "katoptron.h" +#include "wObject.h" +#include "wTimer.h" +#include "wTimers.h" +#include "wTag.h" +#include "wMedium.h" +#include "wNode.h" + +#include "Teuchos_ParameterList.hpp" + +#include "wProblem.h" +#include "wContact.h" +#include "wMshData.h" +#include "wDisplayHook.h" +#include "wElement.h" + +// Tpetra +#include "Stokhos_Tpetra_MP_Vector.hpp" +#include "Stokhos_Tpetra_Utilities_MP_Vector.hpp" +#include "Tpetra_ConfigDefs.hpp" +#include "Tpetra_Map.hpp" +#include "Tpetra_MultiVector.hpp" +#include "Tpetra_Vector.hpp" +#include "Tpetra_CrsGraph.hpp" +#include "Tpetra_CrsMatrix.hpp" +#include "Stokhos_Tpetra_CG.hpp" + +#include <Teuchos_Array.hpp> +#include <Teuchos_GlobalMPISession.hpp> +#include <Teuchos_oblackholestream.hpp> +#include <Teuchos_ScalarTraits.hpp> +#include <Teuchos_RCP.hpp> +#include "Teuchos_ParameterList.hpp" + +#include "Stokhos_Amesos2_MP_Vector.hpp" +#include "Amesos2_Factory.hpp" + +#include "Stokhos_Ifpack2_MP_Vector.hpp" +#include "Ifpack2_Factory.hpp" + +#include "Belos_Tpetra_MP_Vector.hpp" +#include "BelosLinearProblem.hpp" +#include "BelosPseudoBlockGmresSolMgr.hpp" +#include "BelosPseudoBlockCGSolMgr.hpp" +#include "BelosBlockGmresSolMgr.hpp" + +#include "Kokkos_ViewFactory.hpp" +#include "Kokkos_Vector.hpp" + +#include <Epetra_Map.h> +#include "Epetra_MpiComm.h" + +#include "BelosConfigDefs.hpp" + +#include "wRandomField.h" + +#include "wResults.h" +#include "wLazy.h" +#include "Map.h" + +#include <map> + +#include <limits> + +#include "EnsembleTraits.h" + +#include "ResultsDecl.hpp" + +namespace katoptron +{ + +/** + * @brief Solver class which includes utilities such as timers and VTK writers. + */ +class KATOPTRON_API LinearSolver +{ +public: +#ifndef SWIG + Problem &pbl; +#endif + Teuchos::RCP<Teuchos::ParameterList> solverList; + const int numPrimalDPN; + const size_t minimum_ensemble_size; + size_t active_set_iteration; +#ifndef SWIG + DisplayHook *dhook; + +#endif +public: + /** + * @brief LinearSolver constructor + * + * Arguments: + * <ul> + * <li> _pbl: A Problem object, + * <li> _solverList: an RCP to a ParameterList object which describes the solver, + * <li> _numPrimalDPN: the number of degrees of freedom per node (without taking into account the Lagrange multipliers), + * <li> _minimum_ensemble_size: the used ensemble size (1, 8, 16, 24, or 32), + * </ul> + */ + LinearSolver(Problem &_pbl, Teuchos::RCP<Teuchos::ParameterList> _solverList, + int _numPrimalDPN, + size_t _minimum_ensemble_size) : pbl(_pbl), + solverList(_solverList), + numPrimalDPN(_numPrimalDPN), + minimum_ensemble_size(_minimum_ensemble_size) + { + dhook = NULL; + } + + virtual ~LinearSolver() {} + + /** + * @brief Manage timers. + */ + static fwk::Timers &getTimers() + { + static fwk::Timers tms; + return tms; + } + + /** + * @brief Set the GUI. + */ + void setGUI(DisplayHook &hook) + { + dhook = &hook; + } + +protected: + /** + * @brief Write results on disk in VTK format. + */ + template <typename scalar> + void writeResults( + Teuchos::RCP<Tpetra::Vector<scalar, Map::local_ordinal_type, Map::global_ordinal_type>> xPost, + size_t numNodes, + std::string name, + size_t ast, + bool final_result, + bool write_txt, + Teuchos::RCP<Map> map, + Teuchos::RCP<RandomField<scalar, Kokkos::DefaultExecutionSpace>> random_field) + { + LinearSolver::getTimers()["write results"].start(); + + typedef Map::local_ordinal_type LocalOrdinal; + typedef Map::global_ordinal_type GlobalOrdinal; + + writeResultsVTK<scalar, LocalOrdinal, GlobalOrdinal>(pbl, xPost, map, + random_field, + name, ast, final_result, write_txt); + + LinearSolver::getTimers()["write results"].stop(); + } +}; +} // namespace katoptron + +#endif //KATOPTRON_LINEARSOLVER_H diff --git a/katoptron/src/Loads.h b/katoptron/src/Loads.h new file mode 100644 index 0000000000000000000000000000000000000000..aa8ab46d84209cb4fa2a101d7cc4abc4331f5d92 --- /dev/null +++ b/katoptron/src/Loads.h @@ -0,0 +1,58 @@ +#ifndef KATOPTRON_LOADS_H +#define KATOPTRON_LOADS_H + +#include "katoptron.h" +#include "Map.h" +#include "Domain.h" +#include "DirichletList.h" +#include "NeumannList.h" +#include "SourcesList.h" +#include "ElementsList.h" +#include "PreloadList.h" +#include "WeightsList.h" + +namespace katoptron +{ + +/** + * @brief Class which includes all the loads, boundary conditions, preloads, and weights. + */ +template <typename scalar> +class Loads +{ +public: + Teuchos::RCP<DirichletList<scalar>> dirichletList; + Teuchos::RCP<NeumannList<scalar>> neumannList; + Teuchos::RCP<SourcesList<scalar>> sourcesList; + Teuchos::RCP<PreloadList<scalar>> preloadList; + Teuchos::RCP<WeightsList<scalar>> weightsList; + + Loads(); + Loads(Problem &pbl, Teuchos::RCP<Map> map, Teuchos::RCP<Domain<scalar>> domain); +}; + +/** + * @brief Loads constructor + * + * This constructor initializes the lists of Dirichlet BC, Neumann BC, sources, preloads, and weights. + * + * Arguments: + * <ul> + * <li> pbl: A Problem object, + * <li> map: an RCP to a Map object, + * <li> domain: an RCP to a Domain object. + * </ul> + */ +template <typename scalar> +Loads<scalar>::Loads(Problem &pbl, Teuchos::RCP<Map> map, Teuchos::RCP<Domain<scalar>> domain) +{ + dirichletList = Teuchos::rcp(new DirichletList<scalar>(pbl, map, domain->elementsList)); + neumannList = Teuchos::rcp(new NeumannList<scalar>(pbl, map, domain->elementsList)); + sourcesList = Teuchos::rcp(new SourcesList<scalar>(pbl, map, domain->elementsList)); + preloadList = Teuchos::rcp(new PreloadList<scalar>(pbl, map, domain->elementsList)); + weightsList = Teuchos::rcp(new WeightsList<scalar>(pbl, map, domain->elementsList)); +} + +}; // namespace katoptron + +#endif //KATOPTRON_LOADS_H diff --git a/katoptron/src/Map.cpp b/katoptron/src/Map.cpp new file mode 100644 index 0000000000000000000000000000000000000000..50321d349d9bafebbb1fae746b39b982b26130f8 --- /dev/null +++ b/katoptron/src/Map.cpp @@ -0,0 +1,328 @@ +#include "Map.h" + +#include "wProblem.h" +#include "wMshData.h" +#include "wElement.h" +#include "wNode.h" +#include "wGroup.h" +#include "wTag.h" + +#include <mpi.h> + +#include "wContact.h" + +#include <Teuchos_Array.hpp> + +using namespace katoptron; +using namespace tbox; + +void std_vector_intersection(std::vector<Map::global_ordinal_type> vec1, + std::vector<int> vec2, std::vector<int> &vec3) +{ + std::sort(vec2.begin(), vec2.end()); + for (auto i = 0; i < vec1.size(); ++i) + { + if (std::find(vec2.begin(), vec2.end(), vec1[i]) != vec2.end()) + vec3.push_back(vec1[i]); + } +} + +/** + * @brief Map constructor + * + * This constructor initializes the maps used to describe the distributed matrices and vectors. + * + * Arguments: + * <ul> + * <li> pbl: A Problem object, + * <li> numPrimalDPN: the number of degrees of freedom per node (without taking into account the Lagrange multipliers). + * </ul> + */ +Map::Map(Problem &pbl, size_t _numPrimalDPN) +{ + using Teuchos::Array; + using Teuchos::ArrayRCP; + using Teuchos::ArrayView; + using Teuchos::RCP; + using Teuchos::rcp; + + numPrimalDPN = _numPrimalDPN; + + RCP<const Teuchos::Comm<int>> comm = rcp(new Teuchos::MpiComm<int>(pbl.comm)); + + const size_t myRank = comm->getRank(); + const size_t numtasks = comm->getSize(); + + auto msh = pbl.msh; + + const Tpetra::global_size_t numNodes = msh->nodes.size(); + const Tpetra::global_size_t numPrimalDOFs = numNodes * numPrimalDPN; + const Tpetra::global_size_t numThermalDOFs = numNodes; + const Tpetra::global_size_t numMechanicalDOFs = numNodes * 3; + + // ------------------------------------------------------------- // + // Node and elements maps + // ------------------------------------------------------------- // + + // Nodes map with overlaps + // Create a map which associates to each mpi process the nodes included + // in their elements partition. This map has overlaps associated to the + // interfaces of the partitions. + std::vector<global_ordinal_type> myNodesWO1 = {}; + std::vector<global_ordinal_type> myNodesWO2 = {}; + std::vector<global_ordinal_type> tmpMyNodesWO1 = {}; + std::vector<global_ordinal_type> tmpMyNodesWO2 = {}; + std::vector<global_ordinal_type> myElems = {}; + + if (numtasks == 1) + { + for (auto e : msh->elems) + if (e->type() != ElType::POINT1) + myElems.push_back(e->no - 1); + + for (auto n : msh->nodes) + { + myNodesWO1.push_back(n->row); + myNodesWO2.push_back(n->row); + } + } + else + { + for (auto const &p : msh->parts) + { + if (p.second->no == (myRank + 1)) + { + for (auto e : p.second->elems) + { + if (e->type() == ElType::HEX8 || e->type() == ElType::TETRA4) + for (auto n1 : e->nodes) + { + tmpMyNodesWO1.push_back(n1->row); + tmpMyNodesWO2.push_back(n1->row); + } + if (e->type() != ElType::POINT1) + myElems.push_back(e->no - 1); + } + } + else if (p.second->no == -(myRank + 1)) + { + for (auto e : p.second->elems) + { + if (e->type() == ElType::HEX8 || e->type() == ElType::TETRA4) + for (auto n1 : e->nodes) + tmpMyNodesWO1.push_back(n1->row); + + if (e->type() != ElType::POINT1) + myElems.push_back(e->no - 1); + } + } + } + + std::sort(tmpMyNodesWO1.begin(), tmpMyNodesWO1.end()); + std::sort(tmpMyNodesWO2.begin(), tmpMyNodesWO2.end()); + std::sort(myElems.begin(), myElems.end()); + + myNodesWO1.push_back(tmpMyNodesWO1[0]); + + for (auto i = 1; i < tmpMyNodesWO1.size(); ++i) + if (tmpMyNodesWO1[i] != tmpMyNodesWO1[i - 1]) + myNodesWO1.push_back(tmpMyNodesWO1[i]); + + myNodesWO2.push_back(tmpMyNodesWO2[0]); + + for (auto i = 1; i < tmpMyNodesWO2.size(); ++i) + if (tmpMyNodesWO2[i] != tmpMyNodesWO2[i - 1]) + myNodesWO2.push_back(tmpMyNodesWO2[i]); + } + + mapNodesWO = rcp(new tpetra_map_type(numNodes, myNodesWO1, indexBase, comm)); + mapElems = rcp(new tpetra_map_type(Teuchos::OrdinalTraits<Tpetra::global_size_t>::invalid(), myElems, indexBase, comm)); + + // Loop on the contact and remove from myNodesWO2 any nodes included in a contact boundary for which the + // current mpi process has no contact element. + // This prevent Moertel of not finding the nodes. + int contacts_number = pbl.Contacts.size(); + if (numtasks != 1) + for (auto i = 0; i < contacts_number; ++i) + { + { + std::vector<int> v3; + std_vector_intersection(myNodesWO2, pbl.Contacts[i]->slave_boundary_nodes, v3); + for (auto j = 0; j < pbl.Contacts[i]->slave_elems.size(); ++j) + for (auto jj = 0; jj < pbl.Contacts[i]->slave_elems[j]->nodes.size(); ++jj) + { + auto no = pbl.Contacts[i]->slave_elems[j]->nodes[jj]->row; + + auto p = std::find(v3.begin(), v3.end(), no); + if (p != v3.end()) + { + v3.erase(p); + } + } + + for (auto j = 0; j < v3.size(); ++j) + { + auto p = std::find(myNodesWO2.begin(), myNodesWO2.end(), v3[j]); + if (p != myNodesWO2.end()) + { + myNodesWO2.erase(p); + } + } + } + { + std::vector<int> v3; + std_vector_intersection(myNodesWO2, pbl.Contacts[i]->master_boundary_nodes, v3); + + for (auto j = 0; j < pbl.Contacts[i]->master_elems.size(); ++j) + for (auto jj = 0; jj < pbl.Contacts[i]->master_elems[j]->nodes.size(); ++jj) + { + auto no = pbl.Contacts[i]->master_elems[j]->nodes[jj]->row; + auto p = std::find(v3.begin(), v3.end(), no); + if (p != v3.end()) + { + v3.erase(p); + } + } + for (auto j = 0; j < v3.size(); ++j) + { + auto p = std::find(myNodesWO2.begin(), myNodesWO2.end(), v3[j]); + if (p != myNodesWO2.end()) + { + myNodesWO2.erase(p); + } + } + } + } + RCP<const Tpetra::Map<>> mapNodesWO_contact = rcp(new tpetra_map_type(numNodes, myNodesWO2, indexBase, comm)); + + // Create a map of nodes without overlaps. Each node is owned by one and + // only mpi process. + mapNodes = Tpetra::createOneToOne(mapNodesWO_contact); + + // Create a map of the degrees of fredom associated to the nodes of the + // previous map. + const size_t numMyNodes = mapNodes->getNodeNumElements(); + const size_t numMyNodesWO = mapNodesWO->getNodeNumElements(); + Teuchos::ArrayView<const global_ordinal_type> myNodes = mapNodes->getNodeElementList(); + + // ------------------------------------------------------------- // + // Dofs maps + // ------------------------------------------------------------- // + + // Create a map of the degrees of fredom associated to the nodes of the + // previous map. + Array<global_ordinal_type> myDofsWO(numMyNodesWO * numPrimalDPN); + Array<global_ordinal_type> myThermalDofsWO(numMyNodesWO); + Array<global_ordinal_type> myMechanicalDofsWO(numMyNodesWO * 3); + + for (auto i = 0; i < numMyNodesWO; ++i) + { + if (numPrimalDPN == 4) + { + myThermalDofsWO[i] = myNodesWO1[i]; + myDofsWO[i] = myNodesWO1[i]; + + for (auto j = 0; j < 3; ++j) + { + myDofsWO[numMyNodesWO + 3 * i + j] = 3 * myNodesWO1[i] + j + numNodes; + myMechanicalDofsWO[3 * i + j] = 3 * myNodesWO1[i] + j; + } + } + else if (numPrimalDPN == 3) + { + for (auto j = 0; j < 3; ++j) + { + myMechanicalDofsWO[3 * i + j] = 3 * myNodesWO1[i] + j; + myDofsWO[3 * i + j] = 3 * myNodesWO1[i] + j; + } + } + else if (numPrimalDPN == 1) + { + myThermalDofsWO[i] = myNodesWO1[i]; + myDofsWO[i] = myNodesWO1[i]; + } + } + + mapDofsWO = rcp(new tpetra_map_type(numPrimalDOFs, myDofsWO, indexBase, comm)); + if (numPrimalDPN == 4 || numPrimalDPN == 1) + thermoMapWO = rcp(new tpetra_map_type(numThermalDOFs, myThermalDofsWO, indexBase, comm)); + if (numPrimalDPN == 4 || numPrimalDPN == 3) + mechaMapWO = rcp(new tpetra_map_type(numMechanicalDOFs, myMechanicalDofsWO, indexBase, comm)); + + Array<global_ordinal_type> myDofs(numMyNodes * numPrimalDPN); + Array<global_ordinal_type> myThermalDofs(numMyNodes); + Array<global_ordinal_type> myMechanicalDofs(numMyNodes * 3); + Array<global_ordinal_type> myThermomechanicalDofs(numMyNodes * numPrimalDPN); + + for (auto i = 0; i < numMyNodes; ++i) + { + if (numPrimalDPN == 4) + { + myThermalDofs[i] = myNodes[i]; + myDofs[i] = myNodes[i]; + + for (auto j = 0; j < 3; ++j) + { + myMechanicalDofs[3 * i + j] = 3 * myNodes[i] + j; + myDofs[numMyNodes + 3 * i + j] = 3 * myNodes[i] + j + numNodes; + } + } + else if (numPrimalDPN == 3) + { + for (auto j = 0; j < 3; ++j) + { + myMechanicalDofs[3 * i + j] = 3 * myNodes[i] + j; + myDofs[3 * i + j] = 3 * myNodes[i] + j; + } + } + else if (numPrimalDPN == 1) + { + myThermalDofs[i] = myNodes[i]; + myDofs[i] = myNodes[i]; + } + } + + mapDofs = rcp(new tpetra_map_type(numPrimalDOFs, myDofs, indexBase, comm)); + if (numPrimalDPN == 4 || numPrimalDPN == 1) + thermoMap = rcp(new tpetra_map_type(numThermalDOFs, myThermalDofs, indexBase, comm)); + if (numPrimalDPN == 4 || numPrimalDPN == 3) + mechaMap = rcp(new tpetra_map_type(numMechanicalDOFs, myMechanicalDofs, indexBase, comm)); + + if (numPrimalDPN == 4) + { + thermoMap = rcp(new tpetra_map_type(numThermalDOFs, myThermalDofs, indexBase, comm)); + mechaMap = rcp(new tpetra_map_type(numMechanicalDOFs, myMechanicalDofs, indexBase, comm)); + + thermomecFullmap = rcp(new tpetra_map_type(numPrimalDOFs, myThermomechanicalDofs, indexBase, comm)); + RCP<xpetra_map_type> xthermomecFullmap = rcp(new xpetra_tmap_type(thermomecFullmap)); + std::vector<RCP<const xpetra_map_type>> xsubmaps = {rcp(new xpetra_tmap_type(thermoMap)), + rcp(new xpetra_tmap_type(mechaMap))}; + + thermomecBlockedMap = rcp(new xpetra_bmap_type(xthermomecFullmap, xsubmaps, true)); + } + else if (numPrimalDPN == 3) + { + mechaMap = rcp(new tpetra_map_type(numMechanicalDOFs, myMechanicalDofs, indexBase, comm)); + + thermomecFullmap = rcp(new tpetra_map_type(numPrimalDOFs, myThermomechanicalDofs, indexBase, comm)); + RCP<xpetra_map_type> xthermomecFullmap = rcp(new xpetra_tmap_type(thermomecFullmap)); + std::vector<RCP<const xpetra_map_type>> xsubmaps = {rcp(new xpetra_tmap_type(mechaMap))}; + + thermomecBlockedMap = rcp(new xpetra_bmap_type(xthermomecFullmap, xsubmaps, true)); + } + else + { + thermoMap = rcp(new tpetra_map_type(numThermalDOFs, myThermalDofs, indexBase, comm)); + + thermomecFullmap = rcp(new tpetra_map_type(numPrimalDOFs, myThermomechanicalDofs, indexBase, comm)); + RCP<xpetra_map_type> xthermomecFullmap = rcp(new xpetra_tmap_type(thermomecFullmap)); + std::vector<RCP<const xpetra_map_type>> xsubmaps = {rcp(new xpetra_tmap_type(thermoMap))}; + + thermomecBlockedMap = rcp(new xpetra_bmap_type(xthermomecFullmap, xsubmaps, true)); + } + + // Construct a Map that puts all the equations on processor 0 (for outputs). + const size_t numLclIndices = (myRank == 0) ? numPrimalDOFs : 0; + + mapOutput = rcp(new tpetra_map_type(numPrimalDOFs, numLclIndices, indexBase, comm)); +} \ No newline at end of file diff --git a/katoptron/src/Map.h b/katoptron/src/Map.h new file mode 100644 index 0000000000000000000000000000000000000000..39e95abedbf00ffa9c624ead0cced60768cded11 --- /dev/null +++ b/katoptron/src/Map.h @@ -0,0 +1,73 @@ +#ifndef KATOPTRON_MAP_H +#define KATOPTRON_MAP_H + +#include "katoptron.h" + +#include <Tpetra_Map.hpp> +#include <Tpetra_Vector.hpp> +#include <Teuchos_RCP.hpp> + +#include <Xpetra_Map.hpp> +#include <Xpetra_TpetraMap.hpp> +#include <Xpetra_BlockedMap.hpp> + +namespace katoptron +{ + +/** + * @brief Class which includes all the Trilinos maps (Tpetra maps and Xpetra maps) used + * in the simulation. + */ +class Map +{ +public: + // + // Convenience typedefs + // + typedef int local_ordinal_type; + typedef int global_ordinal_type; + typedef KokkosClassic::DefaultNode::DefaultNodeType node_type; + typedef Tpetra::Map<local_ordinal_type, global_ordinal_type, node_type> tpetra_map_type; + typedef Xpetra::Map<local_ordinal_type, global_ordinal_type, node_type> xpetra_map_type; + typedef Xpetra::TpetraMap<local_ordinal_type, global_ordinal_type, node_type> xpetra_tmap_type; + typedef Xpetra::BlockedMap<local_ordinal_type, global_ordinal_type, node_type> xpetra_bmap_type; + + Teuchos::RCP<const tpetra_map_type> mapNodesWO; + Teuchos::RCP<const tpetra_map_type> mapNodes; + Teuchos::RCP<const tpetra_map_type> mapElems; + Teuchos::RCP<const tpetra_map_type> mapDofsWO; + Teuchos::RCP<const tpetra_map_type> mapDofs; + Teuchos::RCP<const tpetra_map_type> mapOutput; + Teuchos::RCP<const tpetra_map_type> mapLagrangeDofs; + Teuchos::RCP<const tpetra_map_type> fullmap; + Teuchos::RCP<const tpetra_map_type> fullmapWO; + Teuchos::RCP<const tpetra_map_type> fullmapOutput; + + Teuchos::RCP<const tpetra_map_type> thermoMap; + Teuchos::RCP<const tpetra_map_type> mechaMap; + + Teuchos::RCP<const tpetra_map_type> thermoMapWO; + Teuchos::RCP<const tpetra_map_type> mechaMapWO; + + Teuchos::RCP<const tpetra_map_type> thermomecFullmap; + Teuchos::RCP<const tpetra_map_type> thermomecFullmapWO; + + Teuchos::RCP<const xpetra_bmap_type> thermomecBlockedMap; + + Teuchos::RCP<const xpetra_bmap_type> blockedMap; + + std::map<int, int> lm_to_dof; //to change + std::map<int, int> lm_to_dof_global; //to change + std::map<int, int> lagrange_to_dof; + std::map<int, int> dof_to_lm; + + const global_ordinal_type indexBase = 0; + size_t numPrimalDPN; + size_t numDualDPN = 1; + + Map(Problem &pbl, size_t _numPrimalDPN); +}; + +}; // namespace katoptron + +#endif //KATOPTRON_MAP_H diff --git a/katoptron/src/Material.h b/katoptron/src/Material.h new file mode 100644 index 0000000000000000000000000000000000000000..af6b2b183187542fcddd9942eb1e3910afaae43f --- /dev/null +++ b/katoptron/src/Material.h @@ -0,0 +1,77 @@ +#ifndef KATOPTRON_MATERIAL_H +#define KATOPTRON_MATERIAL_H + +#include "katoptron.h" + +#include "Map.h" +#include "wProblem.h" +#include "wTag.h" +#include "wMshData.h" +#include "wElement.h" +#include "wNode.h" +#include "wMedium.h" + +#include <Tpetra_Map.hpp> +#include <Tpetra_Vector.hpp> +#include <Teuchos_RCP.hpp> +#include <Kokkos_ViewFactory.hpp> + +namespace katoptron +{ + +/** + * @brief Class which includes all constitutive values of a given material. + */ +template <typename scalar> +class Material +{ +private: + scalar E; + scalar nu; + scalar k; + scalar beta; + +public: + Material(scalar _E, scalar _nu, scalar _k, scalar _beta); + + /** + * @brief Return \f$E\f$ + */ + inline scalar getE() { return E; } + + /** + * @brief Return \f$\nu\f$ + */ + inline scalar getNu() { return nu; } + + /** + * @brief Return \f$k\f$ + */ + inline scalar getK() { return k; } + + /** + * @brief Return \f$\beta\f$ + */ + inline scalar getBeta() { return beta; } +}; + +/** + * @brief Material constructor + * + * This constructor creates a new katoptron::Material which store the constitutive parameters. + * + * Arguments: + * <ul> + * <li> _E: the Young modulus \f$E\f$, + * <li> _nu: the Poisson coefficient \f$\nu\f$, + * <li> _k: the heat conductivity \f$k\f$, + * <li> _beta: the coefficient of thermal expansion \f$\beta\f$. + * </ul> + */ +template <typename scalar> +Material<scalar>::Material(scalar _E, scalar _nu, scalar _k, scalar _beta) : E(_E), nu(_nu), k(_k), beta(_beta) +{ +} +}; // namespace katoptron + +#endif //KATOPTRON_MATERIAL_H diff --git a/katoptron/src/MaterialsList.h b/katoptron/src/MaterialsList.h new file mode 100644 index 0000000000000000000000000000000000000000..4ca101081873bed2a4bd0fbf76a87c5c00d97645 --- /dev/null +++ b/katoptron/src/MaterialsList.h @@ -0,0 +1,170 @@ +#ifndef KATOPTRON_MATERIALSLIST_H +#define KATOPTRON_MATERIALSLIST_H + +#include "Stokhos_Sacado_Kokkos_MP_Vector.hpp" + +#include "katoptron.h" + +#include "Map.h" +#include "wProblem.h" +#include "wTag.h" +#include "wMshData.h" +#include "wElement.h" +#include "wNode.h" +#include "wMedium.h" + +#include "Material.h" + +#include <Kokkos_Core.hpp> +//#include "Sacado.hpp" + +#include <Tpetra_Map.hpp> +#include <Tpetra_Vector.hpp> +#include <Teuchos_RCP.hpp> +#include <Kokkos_ViewFactory.hpp> +#include <vector> + +#include "EnsembleTraits.h" + +namespace katoptron +{ + +/** + * @brief Class which stores the list of the used materials. + */ +template <typename scalar> +class MaterialsList +{ +private: + Kokkos::View<scalar ***, Kokkos::LayoutRight> materials; + + Map::local_ordinal_type materials_number; + +public: + Map::local_ordinal_type materials_T; + Map::local_ordinal_type materials_E; + Map::local_ordinal_type materials_nu; + Map::local_ordinal_type materials_k; + Map::local_ordinal_type materials_beta; + + MaterialsList(Problem &pbl, Teuchos::RCP<Map> map); + + Material<scalar> getMaterial(int current_material, int i_thread); +}; + +/** + * @brief MaterialsList constructor + * + * This constructor allocates 1 Kokkos::View which stores all the constitutive parameters of each material. + * + * Arguments: + * <ul> + * <li> pbl: A Problem object, + * <li> map: an RCP to a Map object.. + * </ul> + */ +template <typename scalar> +MaterialsList<scalar>::MaterialsList(Problem &pbl, Teuchos::RCP<Map> map) +{ + materials_number = pbl.media.size(); + + materials_T = 0; + materials_E = 1; + materials_nu = 2; + materials_k = 3; + materials_beta = 4; + + typedef EnsembleTraits<scalar> ET; + const int ensemble_size = ET::size; + + materials = Kokkos::View<scalar ***, Kokkos::LayoutRight>("R", materials_number, 1, 5); + for (auto i = 0; i < materials_number; ++i) + { + materials(i, 0, materials_T) = (scalar)0; // !!! needed to be changed latter on !!! + for (int j = 0; j < ensemble_size; ++j) + { + ET::coeff(materials(i, 0, materials_E), j) = (double)pbl.media[i]->E_vector[j]; + ET::coeff(materials(i, 0, materials_nu), j) = (double)pbl.media[i]->nu_vector[j]; + ET::coeff(materials(i, 0, materials_k), j) = (double)pbl.media[i]->k_vector[j]; + ET::coeff(materials(i, 0, materials_beta), j) = (double)pbl.media[i]->beta_vector[j]; + } + materials(i, 0, materials_k) = (scalar)pbl.media[i]->k; + materials(i, 0, materials_beta) = (scalar)pbl.media[i]->beta; + } +} + +/** + * @brief Return a Material + * + * Arguments: + * <ul> + * <li> current_material: current material ID, + * <li> i_thread: thread ID. + * </ul> + */ +template <typename scalar> +Material<scalar> MaterialsList<scalar>::getMaterial(int current_material, int i_thread) +{ + scalar E; + scalar nu; + scalar k; + scalar beta; + + size_t materials_T = 0; + + typedef EnsembleTraits<scalar> ET; + const int ensemble_size = ET::size; + + for (int j = 0; j < ensemble_size; ++j) + { + typename ET::value_type Tj = 0.; + + size_t index_0 = 0; + size_t index_1 = materials.extent(1) - 1; + + if (Tj <= ET::coeff(materials(current_material, index_0, materials_T), j)) + { + ET::coeff(E, j) = ET::coeff(materials(current_material, index_0, 1), j); + ET::coeff(nu, j) = ET::coeff(materials(current_material, index_0, 2), j); + ET::coeff(k, j) = ET::coeff(materials(current_material, index_0, 3), j); + ET::coeff(beta, j) = ET::coeff(materials(current_material, index_0, 4), j); + } + else if (Tj > ET::coeff(materials(current_material, index_1, materials_T), j)) + { + ET::coeff(E, j) = ET::coeff(materials(current_material, index_1, 1), j); + ET::coeff(nu, j) = ET::coeff(materials(current_material, index_1, 2), j); + ET::coeff(k, j) = ET::coeff(materials(current_material, index_1, 3), j); + ET::coeff(beta, j) = ET::coeff(materials(current_material, index_1, 4), j); + } + else + { + while (index_1 != index_0 + 1) + { + size_t index_c = index_0 + (index_1 - index_0) / 2; + + if (Tj == ET::coeff(materials(current_material, index_c, materials_T), j)) + { + index_1 = index_c; + index_0 = index_1 - 1; + } + else if (Tj < ET::coeff(materials(current_material, index_c, materials_T), j)) + index_1 = index_c; + else + index_0 = index_c; + } + + double coeff = (Tj - ET::coeff(materials(current_material, index_0, materials_T), j)) / (ET::coeff(materials(current_material, index_1, materials_T), j) - ET::coeff(materials(current_material, index_0, materials_T), j)); + + ET::coeff(E, j) = ET::coeff(materials(current_material, index_0, 1), j) + coeff * (ET::coeff(materials(current_material, index_1, 1), j) - ET::coeff(materials(current_material, index_0, 1), j)); + ET::coeff(nu, j) = ET::coeff(materials(current_material, index_0, 2), j) + coeff * (ET::coeff(materials(current_material, index_1, 2), j) - ET::coeff(materials(current_material, index_0, 2), j)); + ET::coeff(k, j) = ET::coeff(materials(current_material, index_0, 3), j) + coeff * (ET::coeff(materials(current_material, index_1, 3), j) - ET::coeff(materials(current_material, index_0, 3), j)); + ET::coeff(beta, j) = ET::coeff(materials(current_material, index_0, 4), j) + coeff * (ET::coeff(materials(current_material, index_1, 4), j) - ET::coeff(materials(current_material, index_0, 4), j)); + } + } + + Material<scalar> material(E, nu, k, beta); + return material; +} +}; // namespace katoptron + +#endif //KATOPTRON_MATERIALSLIST_H diff --git a/katoptron/src/Matrices.h b/katoptron/src/Matrices.h new file mode 100644 index 0000000000000000000000000000000000000000..be2936604b006b5fa743748480fc1ff68d4ee621 --- /dev/null +++ b/katoptron/src/Matrices.h @@ -0,0 +1,126 @@ +#ifndef KATOPTRON_MATRICES_H +#define KATOPTRON_MATRICES_H + +#include "katoptron.h" + +#include "Map.h" +#include "Graph.h" + +#include <Tpetra_Map.hpp> +#include <Tpetra_Vector.hpp> +#include <Tpetra_CrsGraph.hpp> +#include <Tpetra_CrsMatrix.hpp> +#include <Teuchos_RCP.hpp> + +#include <Xpetra_BlockedMap.hpp> +#include <Xpetra_BlockedCrsMatrix.hpp> +#include <Stokhos_MueLu_MP_Vector.hpp> + +namespace katoptron +{ + +/** + * @brief Class which includes all the Trilinos matrices (Tpetra matrices and Xpetra matrices) used + * in the simulation. + * + * In the case of the saddle point matrix arising from the Mortar FEM, the block matrix is stored as follows: + * \f[ + * \begin{bmatrix} \boldsymbol{A} & \boldsymbol{B}_1 \\ \boldsymbol{B}_2 & \boldsymbol{C} \end{bmatrix}. + * \f] + */ +template <typename scalar> +class Matrices +{ + /* + 2x2 block matrix: + ---------------- + + *-----*-----* + | A | B_1 | + *-----*-----* + | B_2 | C | + *-----*-----* + + B includes the values of B_2 if the contact is fully closed. + B_T includes the values of B_1 if the contact is fully closed. + B_G includes the values of B with the M matrix included regardless if we have a Signorini problem or not. + */ +public: + // + // Convenience typedefs + // + typedef Map::local_ordinal_type local_ordinal_type; + typedef Map::global_ordinal_type global_ordinal_type; + typedef Map::node_type node_type; + typedef Map::tpetra_map_type tpetra_map_type; + typedef Map::xpetra_bmap_type xpetra_bmap_type; + typedef Tpetra::CrsGraph<local_ordinal_type, global_ordinal_type, node_type> tpetra_graph_type; + typedef Tpetra::CrsMatrix<scalar, local_ordinal_type, global_ordinal_type, node_type> tpetra_crs_type; + + typedef Xpetra::Matrix<scalar, local_ordinal_type, global_ordinal_type, node_type> xpetra_mat_type; + typedef Xpetra::CrsMatrix<scalar, local_ordinal_type, global_ordinal_type, node_type> xpetra_crs_type; + typedef Xpetra::CrsMatrixWrap<scalar, local_ordinal_type, global_ordinal_type, node_type> xpetra_wcrs_type; + typedef Xpetra::BlockedCrsMatrix<scalar, local_ordinal_type, global_ordinal_type, node_type> xpetra_bcrs_type; + typedef Xpetra::TpetraCrsMatrix<scalar, local_ordinal_type, global_ordinal_type, node_type> xpetra_tcrs_type; + + Teuchos::RCP<tpetra_crs_type> K; + Teuchos::RCP<tpetra_crs_type> S; + Teuchos::RCP<tpetra_crs_type> L; + Teuchos::RCP<tpetra_crs_type> B; + Teuchos::RCP<tpetra_crs_type> B_T; + Teuchos::RCP<tpetra_crs_type> B_1; + Teuchos::RCP<tpetra_crs_type> B_2; + Teuchos::RCP<tpetra_crs_type> B_G; + Teuchos::RCP<tpetra_crs_type> C; + Teuchos::RCP<tpetra_crs_type> Cb; + + Teuchos::RCP<xpetra_crs_type> xA; + Teuchos::RCP<xpetra_crs_type> xB; + Teuchos::RCP<xpetra_crs_type> xB_T; + Teuchos::RCP<xpetra_crs_type> xC; + + Teuchos::RCP<xpetra_wcrs_type> xwA; + Teuchos::RCP<xpetra_wcrs_type> xwB; + Teuchos::RCP<xpetra_wcrs_type> xwB_T; + Teuchos::RCP<xpetra_wcrs_type> xwC; + + Teuchos::RCP<xpetra_bcrs_type> blockedMatrix; + + Teuchos::RCP<xpetra_mat_type> A; + + Matrices(Teuchos::RCP<Graph> graph); +}; + +/** + * @brief Matrices constructor + * + * This constructor allocates the memory for the matrix \f$\boldsymbol{A}\f$. + * The other matrices and the filling of the entries are done later. + * + * Argument: + * <ul> + * <li> graph: an RCP to a Graph object. + * </ul> + */ +template <typename scalar> +Matrices<scalar>::Matrices(Teuchos::RCP<Graph> graph) +{ + if (graph->K != Teuchos::null) + { + K = Teuchos::rcp(new tpetra_crs_type(graph->K)); + K->fillComplete(); + } + if (graph->S != Teuchos::null) + { + S = Teuchos::rcp(new tpetra_crs_type(graph->S)); + S->fillComplete(graph->S->getDomainMap(), graph->S->getRangeMap()); + } + if (graph->L != Teuchos::null) + { + L = Teuchos::rcp(new tpetra_crs_type(graph->L)); + L->fillComplete(); + } +} +}; // namespace katoptron + +#endif //KATOPTRON_MATRICES_H diff --git a/katoptron/src/Mortar.cpp b/katoptron/src/Mortar.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ae171421e7fb2eb88c991e548a5a1e0a313dc248 --- /dev/null +++ b/katoptron/src/Mortar.cpp @@ -0,0 +1,1059 @@ +#include "Mortar.h" +//#include "wElement.h" + +#include <MatrixMarket_Tpetra.hpp> + +#include "Epetra_MpiComm.h" +#include "Epetra_SerialComm.h" +#include "Teuchos_ParameterList.hpp" + +// MOERTEL headers +#include "mrtr_manager.H" +#include "mrtr_segment_bilinearquad.H" +#include "mrtr_segment_bilineartri.H" + +/** + * @brief Compute the Mortar matrices using Moertel and returns a Tpetra CrsMatrix + * with double scalar type. + */ +Teuchos::RCP<Tpetra::CrsMatrix<>> compute_B(Teuchos::RCP<katoptron::ElementsList> elementsList, + Teuchos::RCP<katoptron::NodesList> nodesList, + Teuchos::RCP<katoptron::ContactsList> contactsList, + Teuchos::RCP<katoptron::Map> map, MPI_Comm comm, bool SignoriniCheck) +{ + Epetra_MpiComm Comm(comm); + Teuchos::RCP<const Teuchos::Comm<int>> Tcomm = Teuchos::rcp(new Teuchos::MpiComm<int>(comm)); + + typedef katoptron::Map::local_ordinal_type local_ordinal_type; + typedef katoptron::Map::global_ordinal_type global_ordinal_type; + + typedef Tpetra::CrsMatrix<> crs_matrix_type; + + const local_ordinal_type numMyContacts = contactsList->getContactNumber(); + + // ------------------------------------------------------------- // + // create numMyContacts empty MOERTEL::Interface instances + // ------------------------------------------------------------- // + int printlevel = 0; + std::vector<Teuchos::RCP<MOERTEL::Interface>> interfaces(numMyContacts); + for (auto i = 0; i < numMyContacts; ++i) + interfaces[i] = Teuchos::rcp(new MOERTEL::Interface(i, false, Comm, printlevel)); + + // ------------------------------------------------------------- // + // Add nodes on both sides of interface to interfaces + // loop all nodes in the maps add them + // to the interface with unique ids + // ------------------------------------------------------------- // + for (auto i = 0; i < numMyContacts; ++i) + { + const local_ordinal_type numMySlaveNodes = contactsList->getSlaveNodesSize(i); + + for (auto j = 0; j < numMySlaveNodes; ++j) + { + // get unique node id + auto global_nodeid = contactsList->getSlaveNode(i, j); + + if (map->mapNodes->isNodeGlobalElement(global_nodeid)) + { + // get node coordinates + auto local_nodeid = map->mapNodesWO->getLocalElement(global_nodeid); + double coord[3]; + for (auto k = 0; k < 3; ++k) + coord[k] = nodesList->nodes(local_nodeid, k); + + // create a moertel node + MOERTEL::Node node(global_nodeid, coord, 1, &global_nodeid, contactsList->isASlaveDirichletNode(i, global_nodeid), printlevel); + // add node to interface i on side j + interfaces[i]->AddNode(node, 0); + } + } + + const local_ordinal_type numMyMasterNodes = contactsList->getMasterNodesSize(i); + + for (auto j = 0; j < numMyMasterNodes; ++j) + { + // get unique node id + auto global_nodeid = contactsList->getMasterNode(i, j); + + if (map->mapNodes->isNodeGlobalElement(global_nodeid)) + { + // get node coordinates + auto local_nodeid = map->mapNodesWO->getLocalElement(global_nodeid); + double coord[3]; + for (auto k = 0; k < 3; ++k) + coord[k] = nodesList->nodes(local_nodeid, k); + + // create a moertel node + MOERTEL::Node node(global_nodeid, coord, 1, &global_nodeid, false, printlevel); + // add node to interface i on side j + interfaces[i]->AddNode(node, 1); + } + } + } + + // ------------------------------------------------------------- // + // add segments on both sides of the interface to the interface + // ------------------------------------------------------------- // + + auto i_index = 0; + + for (auto i = 0; i < numMyContacts; ++i) + { + const local_ordinal_type numMySlaveElems = contactsList->getSlaveElementsSize(i); + + for (auto j = 0; j < numMySlaveElems; ++j) + { + auto elem_local_index = contactsList->getSlaveElement(i, j); + + if (elementsList->getElementSize(elem_local_index) == 4) + { + i_index = map->mapElems->getGlobalElement(elem_local_index); + + global_ordinal_type nodeids[4]; + for (auto k = 0; k < 4; ++k) + nodeids[k] = + map->mapNodesWO->getGlobalElement(elementsList->getElementNode(elem_local_index, k)); + + MOERTEL::Segment_BiLinearQuad segment(i_index, 4, nodeids, printlevel); + interfaces[i]->AddSegment(segment, 0); + } + else if (elementsList->getElementSize(elem_local_index) == 3) + { + i_index = map->mapElems->getGlobalElement(elem_local_index); + + global_ordinal_type nodeids[3]; + for (auto k = 0; k < 3; ++k) + nodeids[k] = + map->mapNodesWO->getGlobalElement(elementsList->getElementNode(elem_local_index, k)); + MOERTEL::Segment_BiLinearTri segment(i_index++, 3, nodeids, printlevel); + interfaces[i]->AddSegment(segment, 0); + } + } + + const local_ordinal_type numMyMasterElems = contactsList->getMasterElementsSize(i); + + for (auto j = 0; j < numMyMasterElems; ++j) + { + auto elem_local_index = contactsList->getMasterElement(i, j); + + if (elementsList->getElementSize(elem_local_index) == 4) + { + i_index = map->mapElems->getGlobalElement(elem_local_index); + + global_ordinal_type nodeids[4]; + for (auto k = 0; k < 4; ++k) + nodeids[k] = + map->mapNodesWO->getGlobalElement(elementsList->getElementNode(elem_local_index, k)); + + MOERTEL::Segment_BiLinearQuad segment(i_index, 4, nodeids, printlevel); + interfaces[i]->AddSegment(segment, 1); + } + else if (elementsList->getElementSize(elem_local_index) == 3) + { + i_index = map->mapElems->getGlobalElement(elem_local_index); + + global_ordinal_type nodeids[3]; + for (auto k = 0; k < 3; ++k) + nodeids[k] = + map->mapNodesWO->getGlobalElement(elementsList->getElementNode(elem_local_index, k)); + MOERTEL::Segment_BiLinearTri segment(i_index++, 3, nodeids, printlevel); + interfaces[i]->AddSegment(segment, 1); + } + } + } + + // ------------------------------------------------------------- // + // choose the mortar side of the interface (0 or 1) + // + // ------------------------------------------------------------- // + for (auto i = 0; i < numMyContacts; ++i) + interfaces[i]->SetMortarSide(1); + + // ------------------------------------------------------------- // + // As we do not know the mortar side yet (we decided to le the + // package choose it), we can not set a dual trace function (mortar space) + // as we don't know the side to set it to + // so we just give orders for the function type + // ------------------------------------------------------------- // + for (auto i = 0; i < numMyContacts; ++i) + { + if (contactsList->getSlaveElementsSize(i) >= 1) + { + if (elementsList->getElementSize(contactsList->getSlaveElement(i, 0)) == 4) + { + if (contactsList->isStandardShapeFunction(i)) + { + interfaces[i]->SetFunctionTypes(MOERTEL::Function::func_BiLinearQuad, + MOERTEL::Function::func_BiLinearQuad); + } + else + { + interfaces[i]->SetFunctionTypes(MOERTEL::Function::func_BiLinearQuad, + MOERTEL::Function::func_DualBiLinearQuad); + } + } + else if (elementsList->getElementSize(contactsList->getSlaveElement(i, 0)) == 3) + { + if (contactsList->isStandardShapeFunction(i)) + { + interfaces[i]->SetFunctionTypes(MOERTEL::Function::func_LinearTri, + MOERTEL::Function::func_LinearTri); + } + else + { + interfaces[i]->SetFunctionTypes(MOERTEL::Function::func_LinearTri, + MOERTEL::Function::func_DualLinearTri); + } + } + } + + else if (contactsList->getMasterElementsSize(i) >= 1) + { + if (elementsList->getElementSize(contactsList->getMasterElement(i, 0)) == 4) + { + if (contactsList->isStandardShapeFunction(i)) + { + interfaces[i]->SetFunctionTypes(MOERTEL::Function::func_BiLinearQuad, + MOERTEL::Function::func_BiLinearQuad); + } + else + { + interfaces[i]->SetFunctionTypes(MOERTEL::Function::func_BiLinearQuad, + MOERTEL::Function::func_DualBiLinearQuad); + } + } + else if (elementsList->getElementSize(contactsList->getMasterElement(i, 0)) == 3) + { + if (contactsList->isStandardShapeFunction(i)) + { + interfaces[i]->SetFunctionTypes(MOERTEL::Function::func_LinearTri, + MOERTEL::Function::func_LinearTri); + } + else + { + interfaces[i]->SetFunctionTypes(MOERTEL::Function::func_LinearTri, + MOERTEL::Function::func_DualLinearTri); + } + } + } + } + // ------------------------------------------------------------- // + // complete the interfaces + // ------------------------------------------------------------- // + for (auto i = 0; i < numMyContacts; ++i) + if (!interfaces[i]->Complete()) + { + exit(EXIT_FAILURE); + } + // ------------------------------------------------------------- // + // create an empty MOERTEL::Manager for 3D problems + // It organizes everything from integration to solution + // ------------------------------------------------------------- // + MOERTEL::Manager manager(Comm, MOERTEL::Manager::manager_3D, printlevel); + + // ------------------------------------------------------------- // + // Add the interfaces to the manager + // ------------------------------------------------------------- // + for (auto i = 0; i < numMyContacts; ++i) + manager.AddInterface(*(interfaces[i])); + + // ------------------------------------------------------------- // + // for mortar integration, the mortar manager needs to know about + // the rowmap of the original (uncoupled) problem because it will + // create coupling matrices D and M matching that rowmap + // ------------------------------------------------------------- // + Teuchos::ArrayView<const global_ordinal_type> myNodes = map->mapNodes->getNodeElementList(); + + int numMyNodes = map->mapNodes->getNodeNumElements(); + int numNodes = map->mapNodes->getGlobalNumElements(); + + int myNodesArray[numMyNodes]; + + for (auto i = 0; i < numMyNodes; ++i) + myNodesArray[i] = (int)myNodes[i]; + + Epetra_Map map00((int)numNodes, (int)numMyNodes, myNodesArray, (int)map->mapNodes->getIndexBase(), Comm); + manager.SetProblemMap(&map00); + + // ============================================================= // + // choose integration parameters + // ============================================================= // + Teuchos::ParameterList &moertelparams = manager.Default_Parameters(); + // this does affect this 3D case only + moertelparams.set("exact values at gauss points", true); + // 1D interface possible values are 1,2,3,4,5,6,7,8,10 (2 recommended with linear shape functions) + moertelparams.set("number gaussian points 1D", 2); + // 2D interface possible values are 3,6,12,13,16,19,27 (12 recommended with linear functions) + moertelparams.set("number gaussian points 2D", 12); + + // ============================================================= // + // Here we are done with the construction phase of the interface + // so we can integrate the mortar integrals + // (Note we have not yet evaluated the PDE at all!) + // ============================================================= // + + bool do_integrate = true; + int n_integration = 0; + int n_integration_max = 10; + + while (do_integrate) + { + try + { + do_integrate = false; + ++n_integration; + manager.Mortar_Integrate(); + } + catch (...) + { + do_integrate = true; + } + + if (n_integration >= n_integration_max) + break; + } + + if (n_integration != 1) + std::cout << "Has integrate " << n_integration << " times" << std::endl; + + const Epetra_CrsMatrix *D = manager.D(); + const Epetra_CrsMatrix *M = manager.M(); + + std::map<int, int> lm_to_dof = manager.lm_to_dof(); + + const size_t numDPN = map->numPrimalDPN; + const size_t numMDPN = 3; + const bool isThermo = (numDPN == 4); + const size_t numMechanicalLagrangeMultipliers = (D->NumGlobalCols() - numNodes); + + size_t numLMPN; + if (contactsList->hasAtLeastOneSticking() && isThermo) + numLMPN = 4; + else if (contactsList->hasAtLeastOneSticking()) + numLMPN = 3; + else if (isThermo) + numLMPN = 2; + else + numLMPN = 1; + + map->numDualDPN = numLMPN; + + const size_t numTotalLagrangeMultipliers = numLMPN * numMechanicalLagrangeMultipliers; + + int indexBase = 0; + + // --------------- + + { + Teuchos::ArrayView<const global_ordinal_type> myNodes = map->mapNodes->getNodeElementList(); + + std::vector<global_ordinal_type> myLagrangeDofs = {}; + + size_t numMyRows = D->NumMyRows(); + for (auto i = 0; i < numMyRows; ++i) + { + size_t global_id = D->GRID(i); + if (global_id < numNodes) + continue; + size_t lagrange_id = global_id - numNodes; + for (auto j = 0; j < numLMPN; ++j) + myLagrangeDofs.push_back(lagrange_id * numLMPN + j); + } + + map->mapLagrangeDofs = rcp(new Tpetra::Map<>(numTotalLagrangeMultipliers, myLagrangeDofs, indexBase, Tcomm)); + } + + // --------------- + for (auto i = lm_to_dof.begin(); i != lm_to_dof.end(); ++i) + map->lm_to_dof_global[i->first - numNodes] = i->second; + + for (auto i = lm_to_dof.begin(); i != lm_to_dof.end(); ++i) + if (map->mapNodes->isNodeGlobalElement(i->second)) + { + map->lm_to_dof[i->first - numNodes] = i->second; + } + + for (auto i = map->lm_to_dof.begin(); i != map->lm_to_dof.end(); ++i) + map->lagrange_to_dof[i->first - numNodes] = (i->second) * map->numPrimalDPN; + + // As lm_to_dof is one to one, we can create dof_to_lm as follows + for (auto i = map->lm_to_dof.begin(); i != map->lm_to_dof.end(); ++i) + map->dof_to_lm[i->second] = i->first; + + // --------------- + + // Compute the outward normal + typedef Tpetra::MultiVector<double, local_ordinal_type, global_ordinal_type> double_multivector_type; + + Teuchos::RCP<double_multivector_type> normalWO = Teuchos::rcp(new double_multivector_type(map->mapNodesWO, 3 * numMyContacts, true)); + Teuchos::RCP<double_multivector_type> normalSUM = Teuchos::rcp(new double_multivector_type(map->mapNodes, 3 * numMyContacts, true)); + + std::vector<global_ordinal_type> myNodes2 = {}; + + for (auto i = 0; i < numNodes; ++i) + myNodes2.push_back(i); + + Teuchos::RCP<Tpetra::Map<>> fullNodeMap = rcp(new Tpetra::Map<>(numNodes, myNodes2, indexBase, Tcomm)); + Teuchos::RCP<double_multivector_type> normal = Teuchos::rcp(new double_multivector_type(fullNodeMap, 3 * numMyContacts, true)); + + { + for (auto i = 0; i < numMyContacts; ++i) + { + const local_ordinal_type numMySlaveElems = contactsList->getSlaveElementsSize(i); + + for (auto j = 0; j < numMySlaveElems; ++j) + { + auto elem_local_index = contactsList->getSlaveElement(i, j); + + if (elementsList->getElementSize(elem_local_index) == 4) + { + i_index = map->mapElems->getGlobalElement(elem_local_index); + + global_ordinal_type node_id[4]; + double coordinates[4 * 3]; + for (auto k = 0; k < 4; ++k) + { + node_id[k] = map->mapNodesWO->getGlobalElement(elementsList->getElementNode(elem_local_index, k)); + auto local_nodeid = map->mapNodesWO->getLocalElement(node_id[k]); + + for (auto l = 0; l < 3; ++l) + coordinates[k * 3 + l] = nodesList->nodes(local_nodeid, l); + } + + double vec1[3]; + double vec2[3]; + double vec3[3]; + double current_normal[3]; + double current_normal2[3]; + double norm1; + double norm2; + double current_area; + + vec1[0] = coordinates[3] - coordinates[0]; + vec1[1] = coordinates[4] - coordinates[1]; + vec1[2] = coordinates[5] - coordinates[2]; + + vec2[0] = coordinates[6] - coordinates[0]; + vec2[1] = coordinates[7] - coordinates[1]; + vec2[2] = coordinates[8] - coordinates[2]; + + vec3[0] = coordinates[9] - coordinates[0]; + vec3[1] = coordinates[10] - coordinates[1]; + vec3[2] = coordinates[11] - coordinates[2]; + + current_normal[0] = vec1[1] * vec2[2] - vec1[2] * vec2[1]; + current_normal[1] = vec1[2] * vec2[0] - vec1[0] * vec2[2]; + current_normal[2] = vec1[0] * vec2[1] - vec1[1] * vec2[0]; + + current_normal2[0] = vec2[1] * vec3[2] - vec2[2] * vec3[1]; + current_normal2[1] = vec2[2] * vec3[0] - vec2[0] * vec3[2]; + current_normal2[2] = vec2[0] * vec3[1] - vec2[1] * vec3[0]; + + norm1 = sqrt(pow(current_normal[0], 2) + pow(current_normal[1], 2) + pow(current_normal[2], 2)); + norm2 = sqrt(pow(current_normal2[0], 2) + pow(current_normal2[1], 2) + pow(current_normal2[2], 2)); + + if (norm1 > 0.) + { + current_normal[0] = current_normal[0] / norm1; + current_normal[1] = current_normal[1] / norm1; + current_normal[2] = current_normal[2] / norm1; + + for (auto l = 0; l < 3; ++l) + if (abs(current_normal[l]) <= 1e-10) + current_normal[l] = 0.; + } + else + { + current_normal[0] = 0.; + current_normal[1] = 0.; + current_normal[2] = 0.; + } + + current_area = (norm1 + norm2) / 2.; + + for (auto k = 0; k < 4; ++k) + { + auto local_nodeid = map->mapNodesWO->getLocalElement(node_id[k]); + + for (auto l = 0; l < 3; ++l) + normalWO->sumIntoLocalValue(local_nodeid, i * 3 + l, current_area * current_normal[l]); + } + } + else if (elementsList->getElementSize(elem_local_index) == 3) + { + i_index = map->mapElems->getGlobalElement(elem_local_index); + + global_ordinal_type node_id[3]; + double coordinates[3 * 3]; + for (auto k = 0; k < 3; ++k) + { + node_id[k] = map->mapNodesWO->getGlobalElement(elementsList->getElementNode(elem_local_index, k)); + auto local_nodeid = map->mapNodesWO->getLocalElement(node_id[k]); + + for (auto l = 0; l < 3; ++l) + coordinates[k * 3 + l] = nodesList->nodes(local_nodeid, l); + } + + double vec1[3]; + double vec2[3]; + double current_normal[3]; + double norm; + double current_area; + + vec1[0] = coordinates[3] - coordinates[0]; + vec1[1] = coordinates[4] - coordinates[1]; + vec1[2] = coordinates[5] - coordinates[2]; + + vec2[0] = coordinates[6] - coordinates[0]; + vec2[1] = coordinates[7] - coordinates[1]; + vec2[2] = coordinates[8] - coordinates[2]; + + current_normal[0] = vec1[1] * vec2[2] - vec1[2] * vec2[1]; + current_normal[1] = vec1[2] * vec2[0] - vec1[0] * vec2[2]; + current_normal[2] = vec1[0] * vec2[1] - vec1[1] * vec2[0]; + + norm = sqrt(pow(current_normal[0], 2) + pow(current_normal[1], 2) + pow(current_normal[2], 2)); + + current_area = norm / 2.; + + if (norm > 0.) + { + current_normal[0] = current_normal[0] / norm; + current_normal[1] = current_normal[1] / norm; + current_normal[2] = current_normal[2] / norm; + + for (auto l = 0; l < 3; ++l) + if (abs(current_normal[l]) <= 1e-10) + current_normal[l] = 0.; + } + else + { + current_normal[0] = 0.; + current_normal[1] = 0.; + current_normal[2] = 0.; + } + + for (auto k = 0; k < 3; ++k) + { + auto local_nodeid = map->mapNodesWO->getLocalElement(node_id[k]); + + for (auto l = 0; l < 3; ++l) + normalWO->sumIntoLocalValue(local_nodeid, i * 3 + l, current_area * current_normal[l]); + } + } + } + + const local_ordinal_type numMyMasterElems = contactsList->getMasterElementsSize(i); + + for (auto j = 0; j < numMyMasterElems; ++j) + { + auto elem_local_index = contactsList->getMasterElement(i, j); + + if (elementsList->getElementSize(elem_local_index) == 4) + { + i_index = map->mapElems->getGlobalElement(elem_local_index); + + global_ordinal_type node_id[4]; + double coordinates[4 * 3]; + for (auto k = 0; k < 4; ++k) + { + node_id[k] = map->mapNodesWO->getGlobalElement(elementsList->getElementNode(elem_local_index, k)); + auto local_nodeid = map->mapNodesWO->getLocalElement(node_id[k]); + + for (auto l = 0; l < 3; ++l) + coordinates[k * 3 + l] = nodesList->nodes(local_nodeid, l); + } + + double vec1[3]; + double vec2[3]; + double vec3[3]; + double current_normal[3]; + double current_normal2[3]; + double norm1; + double norm2; + double current_area; + + vec1[0] = coordinates[3] - coordinates[0]; + vec1[1] = coordinates[4] - coordinates[1]; + vec1[2] = coordinates[5] - coordinates[2]; + + vec2[0] = coordinates[6] - coordinates[0]; + vec2[1] = coordinates[7] - coordinates[1]; + vec2[2] = coordinates[8] - coordinates[2]; + + vec3[0] = coordinates[9] - coordinates[0]; + vec3[1] = coordinates[10] - coordinates[1]; + vec3[2] = coordinates[11] - coordinates[2]; + + current_normal[0] = vec1[1] * vec2[2] - vec1[2] * vec2[1]; + current_normal[1] = vec1[2] * vec2[0] - vec1[0] * vec2[2]; + current_normal[2] = vec1[0] * vec2[1] - vec1[1] * vec2[0]; + + current_normal2[0] = vec2[1] * vec3[2] - vec2[2] * vec3[1]; + current_normal2[1] = vec2[2] * vec3[0] - vec2[0] * vec3[2]; + current_normal2[2] = vec2[0] * vec3[1] - vec2[1] * vec3[0]; + + norm1 = sqrt(pow(current_normal[0], 2) + pow(current_normal[1], 2) + pow(current_normal[2], 2)); + norm2 = sqrt(pow(current_normal2[0], 2) + pow(current_normal2[1], 2) + pow(current_normal2[2], 2)); + + if (norm1 > 0.) + { + current_normal[0] = current_normal[0] / norm1; + current_normal[1] = current_normal[1] / norm1; + current_normal[2] = current_normal[2] / norm1; + + for (auto l = 0; l < 3; ++l) + if (abs(current_normal[l]) <= 1e-10) + current_normal[l] = 0.; + } + else + { + current_normal[0] = 0.; + current_normal[1] = 0.; + current_normal[2] = 0.; + } + + current_area = (norm1 + norm2) / 2.; + + for (auto k = 0; k < 4; ++k) + { + auto local_nodeid = map->mapNodesWO->getLocalElement(node_id[k]); + + for (auto l = 0; l < 3; ++l) + normalWO->sumIntoLocalValue(local_nodeid, i * 3 + l, current_area * current_normal[l]); + } + } + else if (elementsList->getElementSize(elem_local_index) == 3) + { + i_index = map->mapElems->getGlobalElement(elem_local_index); + + global_ordinal_type node_id[3]; + double coordinates[3 * 3]; + for (auto k = 0; k < 3; ++k) + { + node_id[k] = map->mapNodesWO->getGlobalElement(elementsList->getElementNode(elem_local_index, k)); + auto local_nodeid = map->mapNodesWO->getLocalElement(node_id[k]); + + for (auto l = 0; l < 3; ++l) + coordinates[k * 3 + l] = nodesList->nodes(local_nodeid, l); + } + + double vec1[3]; + double vec2[3]; + double current_normal[3]; + double norm; + double current_area; + + vec1[0] = coordinates[3] - coordinates[0]; + vec1[1] = coordinates[4] - coordinates[1]; + vec1[2] = coordinates[5] - coordinates[2]; + + vec2[0] = coordinates[6] - coordinates[0]; + vec2[1] = coordinates[7] - coordinates[1]; + vec2[2] = coordinates[8] - coordinates[2]; + + current_normal[0] = vec1[1] * vec2[2] - vec1[2] * vec2[1]; + current_normal[1] = vec1[2] * vec2[0] - vec1[0] * vec2[2]; + current_normal[2] = vec1[0] * vec2[1] - vec1[1] * vec2[0]; + + norm = sqrt(pow(current_normal[0], 2) + pow(current_normal[1], 2) + pow(current_normal[2], 2)); + + current_area = norm / 2.; + + if (norm > 0.) + { + current_normal[0] = current_normal[0] / norm; + current_normal[1] = current_normal[1] / norm; + current_normal[2] = current_normal[2] / norm; + + for (auto l = 0; l < 3; ++l) + if (abs(current_normal[l]) <= 1e-10) + current_normal[l] = 0.; + } + else + { + current_normal[0] = 0.; + current_normal[1] = 0.; + current_normal[2] = 0.; + } + + for (auto k = 0; k < 3; ++k) + { + auto local_nodeid = map->mapNodesWO->getLocalElement(node_id[k]); + + for (auto l = 0; l < 3; ++l) + normalWO->sumIntoLocalValue(local_nodeid, i * 3 + l, current_area * current_normal[l]); + } + } + } + } + } + Tpetra::Export<> export1(map->mapNodesWO, map->mapNodes); + Tpetra::Export<> export2(map->mapNodes, normal->getMap()); + Tpetra::Import<> import1(map->mapNodes, normal->getMap()); + + normalSUM->doExport(*normalWO, export1, Tpetra::ADD); + normal->doImport(*normalSUM, import1, Tpetra::INSERT); + + normal->template sync<Kokkos::HostSpace>(); + auto normal_2d = normal->template getLocalView<Kokkos::HostSpace>(); + + size_t maxNumEntPerRow = 3 * (D->MaxNumEntries() + M->MaxNumEntries()); + Teuchos::RCP<crs_matrix_type> B(new crs_matrix_type(map->mapLagrangeDofs, maxNumEntPerRow)); + { + int DNumMyRow = D->NumMyRows(); + int DMaxNumIndices = D->MaxNumEntries(); + double *values = new double[DMaxNumIndices]; + int DNumIndices; + int *Indices_int = new int[DMaxNumIndices]; + + const Epetra_Map DrowMap = D->RowMap(); + const Epetra_Map DcolMap = D->ColMap(); + + for (size_t i = 0; i < DNumMyRow; ++i) + { + size_t global_id = D->GRID(i); + if (global_id < numNodes) + continue; + + D->ExtractGlobalRowCopy(global_id, DMaxNumIndices, DNumIndices, values, Indices_int); + + // find which interface interface_j is related to the current Lagrange multiplier + size_t interface_j = 0; // 0 by default + if (contactsList->getContactNumber() > 1) + { + bool doIStop = false; + for (auto k = 0; k < DNumIndices; ++k) + { + for (auto j = 0; j < numMyContacts; ++j) + { + const local_ordinal_type numMySlaveNodes = contactsList->getSlaveNodesSize(j); + + for (auto l = 0; l < numMySlaveNodes; ++l) + { + auto global_nodeid = contactsList->getSlaveNode(j, l); + + if (global_nodeid == Indices_int[k]) + { + interface_j = j; + doIStop = true; + } + if (doIStop) + break; + } + if (doIStop) + break; + } + if (doIStop) + break; + } + } + + global_ordinal_type row = (global_id - numNodes) * numLMPN; + + for (auto k = 0; k < DNumIndices; ++k) + { + global_ordinal_type col1 = Indices_int[k] * numMDPN; + global_ordinal_type col2 = Indices_int[k] * numMDPN + 1; + global_ordinal_type col3 = Indices_int[k] * numMDPN + 2; + + if (isThermo) + { + col1 += numNodes; + col2 += numNodes; + col3 += numNodes; + } + + global_ordinal_type global_node_id = Indices_int[k]; + local_ordinal_type local_node_id = normal->getMap()->getLocalElement(global_node_id); + + double current_normal[3]; + current_normal[0] = normal_2d(local_node_id, interface_j * 3 + 0); + current_normal[1] = normal_2d(local_node_id, interface_j * 3 + 1); + current_normal[2] = normal_2d(local_node_id, interface_j * 3 + 2); + + double norm = sqrt(pow(current_normal[0], 2) + pow(current_normal[1], 2) + pow(current_normal[2], 2)); + + if (norm > 0.) + { + current_normal[0] = current_normal[0] / norm; + current_normal[1] = current_normal[1] / norm; + current_normal[2] = current_normal[2] / norm; + } + else + { + current_normal[0] = 0.; + current_normal[1] = 0.; + current_normal[2] = 0.; + } + + double current_tangential_1[3]; + double current_tangential_2[3]; + + current_tangential_1[0] = 0.; + current_tangential_1[1] = 0.; + current_tangential_1[2] = 1.; + + current_tangential_2[0] = 0.; + current_tangential_2[1] = 0.; + current_tangential_2[2] = 0.; + + if (contactsList->hasAtLeastOneSticking()) + { + double dot_n_z = current_normal[0] * current_tangential_1[0] + current_normal[1] * current_tangential_1[1] + current_normal[2] * current_tangential_1[2]; + + if (acos(abs(dot_n_z)) <= 1e-6 || contactsList->isTying(interface_j)) + { + if (contactsList->isTying(interface_j)) + { + current_normal[0] = 0.; + current_normal[1] = 0.; + current_normal[2] = 1.; + } + current_tangential_1[0] = 1.; + current_tangential_1[1] = 0.; + current_tangential_1[2] = 0.; + + current_tangential_2[0] = 0.; + current_tangential_2[1] = 1.; + current_tangential_2[2] = 0.; + } + else + { + current_tangential_1[0] = current_tangential_1[0] - dot_n_z * current_normal[0]; + current_tangential_1[1] = current_tangential_1[1] - dot_n_z * current_normal[1]; + current_tangential_1[2] = current_tangential_1[2] - dot_n_z * current_normal[2]; + + double norm = sqrt(pow(current_tangential_1[0], 2) + pow(current_tangential_1[1], 2) + pow(current_tangential_1[2], 2)); + + current_tangential_1[0] = current_tangential_1[0] / norm; + current_tangential_1[1] = current_tangential_1[1] / norm; + current_tangential_1[2] = current_tangential_1[2] / norm; + + current_tangential_2[0] = -(current_normal[1] * current_tangential_1[2] - current_normal[2] * current_tangential_1[1]); + current_tangential_2[1] = -(current_normal[2] * current_tangential_1[0] - current_normal[0] * current_tangential_1[2]); + current_tangential_2[2] = -(current_normal[0] * current_tangential_1[1] - current_normal[1] * current_tangential_1[0]); + } + } + + double value1 = values[k] * current_normal[0] * contactsList->getMortarScale(interface_j); + double value2 = values[k] * current_normal[1] * contactsList->getMortarScale(interface_j); + double value3 = values[k] * current_normal[2] * contactsList->getMortarScale(interface_j); + + B->insertGlobalValues(row, + Teuchos::tuple<global_ordinal_type>(col1), + Teuchos::tuple<double>(value1)); + B->insertGlobalValues(row, + Teuchos::tuple<global_ordinal_type>(col2), + Teuchos::tuple<double>(value2)); + B->insertGlobalValues(row, + Teuchos::tuple<global_ordinal_type>(col3), + Teuchos::tuple<double>(value3)); + + if (contactsList->isSticking(interface_j)) + { + value1 = values[k] * current_tangential_1[0] * contactsList->getMortarScale(interface_j); + value2 = values[k] * current_tangential_1[1] * contactsList->getMortarScale(interface_j); + value3 = values[k] * current_tangential_1[2] * contactsList->getMortarScale(interface_j); + + B->insertGlobalValues(row + 1, + Teuchos::tuple<global_ordinal_type>(col1), + Teuchos::tuple<double>(value1)); + B->insertGlobalValues(row + 1, + Teuchos::tuple<global_ordinal_type>(col2), + Teuchos::tuple<double>(value2)); + B->insertGlobalValues(row + 1, + Teuchos::tuple<global_ordinal_type>(col3), + Teuchos::tuple<double>(value3)); + + value1 = values[k] * current_tangential_2[0] * contactsList->getMortarScale(interface_j); + value2 = values[k] * current_tangential_2[1] * contactsList->getMortarScale(interface_j); + value3 = values[k] * current_tangential_2[2] * contactsList->getMortarScale(interface_j); + + B->insertGlobalValues(row + 2, + Teuchos::tuple<global_ordinal_type>(col1), + Teuchos::tuple<double>(value1)); + B->insertGlobalValues(row + 2, + Teuchos::tuple<global_ordinal_type>(col2), + Teuchos::tuple<double>(value2)); + B->insertGlobalValues(row + 2, + Teuchos::tuple<global_ordinal_type>(col3), + Teuchos::tuple<double>(value3)); + } + if (numDPN == 4) + { + global_ordinal_type row2 = row + numLMPN - 1; + global_ordinal_type col4 = Indices_int[k]; + B->insertGlobalValues(row2, + Teuchos::tuple<global_ordinal_type>(col4), + Teuchos::tuple<double>(values[k])); + } + } + + if (SignoriniCheck) + if (contactsList->isNotSignorini(interface_j) == false) + continue; + { + int MMaxNumIndices = M->MaxNumEntries(); + double *values = new double[MMaxNumIndices]; + int MNumIndices; + int *Indices_int = new int[MMaxNumIndices]; + + M->ExtractGlobalRowCopy(global_id, MMaxNumIndices, MNumIndices, values, Indices_int); + + for (auto k = 0; k < MNumIndices; ++k) + { + global_ordinal_type col1 = Indices_int[k] * numMDPN; + global_ordinal_type col2 = Indices_int[k] * numMDPN + 1; + global_ordinal_type col3 = Indices_int[k] * numMDPN + 2; + + if (isThermo) + { + col1 += numNodes; + col2 += numNodes; + col3 += numNodes; + } + + global_ordinal_type global_node_id = Indices_int[k]; + local_ordinal_type local_node_id = normal->getMap()->getLocalElement(global_node_id); + + double current_normal[3]; + current_normal[0] = normal_2d(local_node_id, interface_j * 3 + 0); + current_normal[1] = normal_2d(local_node_id, interface_j * 3 + 1); + current_normal[2] = normal_2d(local_node_id, interface_j * 3 + 2); + + double norm = sqrt(pow(current_normal[0], 2) + pow(current_normal[1], 2) + pow(current_normal[2], 2)); + + if (norm > 0.) + { + current_normal[0] = current_normal[0] / norm; + current_normal[1] = current_normal[1] / norm; + current_normal[2] = current_normal[2] / norm; + } + else + { + current_normal[0] = 0.; + current_normal[1] = 0.; + current_normal[2] = 0.; + } + + double current_tangential_1[3]; + double current_tangential_2[3]; + + current_tangential_1[0] = 0.; + current_tangential_1[1] = 0.; + current_tangential_1[2] = 1.; + + current_tangential_2[0] = 0.; + current_tangential_2[1] = 0.; + current_tangential_2[2] = 0.; + + if (contactsList->hasAtLeastOneSticking()) + { + current_tangential_1[0] = 0.; + current_tangential_1[1] = 0.; + current_tangential_1[2] = 1.; + + double dot_n_z = current_normal[0] * current_tangential_1[0] + current_normal[1] * current_tangential_1[1] + current_normal[2] * current_tangential_1[2]; + + if (acos(abs(dot_n_z)) <= 1e-6 || contactsList->isTying(interface_j)) + { + if (contactsList->isTying(interface_j)) + { + current_normal[0] = 0.; + current_normal[1] = 0.; + current_normal[2] = -1.; + } + current_tangential_1[0] = 1.; + current_tangential_1[1] = 0.; + current_tangential_1[2] = 0.; + + current_tangential_2[0] = 0.; + current_tangential_2[1] = 1.; + current_tangential_2[2] = 0.; + } + else + { + current_tangential_1[0] = current_tangential_1[0] - dot_n_z * current_normal[0]; + current_tangential_1[1] = current_tangential_1[1] - dot_n_z * current_normal[1]; + current_tangential_1[2] = current_tangential_1[2] - dot_n_z * current_normal[2]; + + double norm = sqrt(pow(current_tangential_1[0], 2) + pow(current_tangential_1[1], 2) + pow(current_tangential_1[2], 2)); + + current_tangential_1[0] = current_tangential_1[0] / norm; + current_tangential_1[1] = current_tangential_1[1] / norm; + current_tangential_1[2] = current_tangential_1[2] / norm; + + current_tangential_2[0] = current_normal[1] * current_tangential_1[2] - current_normal[2] * current_tangential_1[1]; + current_tangential_2[1] = current_normal[2] * current_tangential_1[0] - current_normal[0] * current_tangential_1[2]; + current_tangential_2[2] = current_normal[0] * current_tangential_1[1] - current_normal[1] * current_tangential_1[0]; + } + } + + double value1 = -values[k] * current_normal[0] * contactsList->getMortarScale(interface_j); + double value2 = -values[k] * current_normal[1] * contactsList->getMortarScale(interface_j); + double value3 = -values[k] * current_normal[2] * contactsList->getMortarScale(interface_j); + + B->insertGlobalValues(row, + Teuchos::tuple<global_ordinal_type>(col1), + Teuchos::tuple<double>(value1)); + B->insertGlobalValues(row, + Teuchos::tuple<global_ordinal_type>(col2), + Teuchos::tuple<double>(value2)); + B->insertGlobalValues(row, + Teuchos::tuple<global_ordinal_type>(col3), + Teuchos::tuple<double>(value3)); + + if (contactsList->isSticking(interface_j)) + { + value1 = values[k] * current_tangential_1[0] * contactsList->getMortarScale(interface_j); + value2 = values[k] * current_tangential_1[1] * contactsList->getMortarScale(interface_j); + value3 = values[k] * current_tangential_1[2] * contactsList->getMortarScale(interface_j); + + B->insertGlobalValues(row + 1, + Teuchos::tuple<global_ordinal_type>(col1), + Teuchos::tuple<double>(value1)); + B->insertGlobalValues(row + 1, + Teuchos::tuple<global_ordinal_type>(col2), + Teuchos::tuple<double>(value2)); + B->insertGlobalValues(row + 1, + Teuchos::tuple<global_ordinal_type>(col3), + Teuchos::tuple<double>(value3)); + + value1 = values[k] * current_tangential_2[0] * contactsList->getMortarScale(interface_j); + value2 = values[k] * current_tangential_2[1] * contactsList->getMortarScale(interface_j); + value3 = values[k] * current_tangential_2[2] * contactsList->getMortarScale(interface_j); + + B->insertGlobalValues(row + 2, + Teuchos::tuple<global_ordinal_type>(col1), + Teuchos::tuple<double>(value1)); + B->insertGlobalValues(row + 2, + Teuchos::tuple<global_ordinal_type>(col2), + Teuchos::tuple<double>(value2)); + B->insertGlobalValues(row + 2, + Teuchos::tuple<global_ordinal_type>(col3), + Teuchos::tuple<double>(value3)); + } + if (numDPN == 4) + { + global_ordinal_type row2 = row + numLMPN - 1; + global_ordinal_type col4 = Indices_int[k]; + B->insertGlobalValues(row2, + Teuchos::tuple<global_ordinal_type>(col4), + Teuchos::tuple<double>(values[k])); + } + } + + delete values; + delete Indices_int; + } + } + + delete values; + delete Indices_int; + } + + B->fillComplete(map->mapDofs, map->mapLagrangeDofs); + + return B; +} diff --git a/katoptron/src/Mortar.h b/katoptron/src/Mortar.h new file mode 100644 index 0000000000000000000000000000000000000000..80540be292b9dc06cd70cfc2bb0156e4ca312206 --- /dev/null +++ b/katoptron/src/Mortar.h @@ -0,0 +1,109 @@ +#ifndef KATOPTRON_MORTAR_H +#define KATOPTRON_MORTAR_H + +#include "Tpetra_Vector.hpp" +#include "Kokkos_ViewFactory.hpp" +#include "Tpetra_Map.hpp" +#include <mpi.h> +#include "Tpetra_CrsGraph.hpp" +#include <Epetra_Map.h> + +#include "Tpetra_ConfigDefs.hpp" + +#include "Tpetra_Map.hpp" +#include "Tpetra_MultiVector.hpp" +#include "Tpetra_Vector.hpp" +#include "Tpetra_CrsGraph.hpp" +#include "Tpetra_CrsMatrix.hpp" + +#include "ElementsList.h" +#include "NodesList.h" +#include "ContactsList.h" +#include "Map.h" +#include "Matrices.h" + +Teuchos::RCP<Tpetra::CrsMatrix<>> compute_B(Teuchos::RCP<katoptron::ElementsList> elementsList, + Teuchos::RCP<katoptron::NodesList> nodesList, + Teuchos::RCP<katoptron::ContactsList> contactsList, + Teuchos::RCP<katoptron::Map> map, MPI_Comm comm, bool SignoriniCheck); + +template <typename scalar> +void compute_B(Teuchos::RCP<katoptron::Matrices<scalar>> matrices, + Teuchos::RCP<katoptron::ElementsList> elementsList, + Teuchos::RCP<katoptron::NodesList> nodesList, + Teuchos::RCP<katoptron::ContactsList> contactsList, + Teuchos::RCP<katoptron::Map> map, MPI_Comm comm) +{ + Teuchos::RCP<Tpetra::CrsMatrix<>> B_double = compute_B(elementsList, nodesList, contactsList, map, comm, true); + Teuchos::RCP<Tpetra::CrsMatrix<>> B_G_double; + if (contactsList->isSignorini()) + B_G_double = compute_B(elementsList, nodesList, contactsList, map, comm, false); + else + B_G_double = B_double; + + typedef katoptron::Map::local_ordinal_type local_ordinal_type; + typedef katoptron::Map::global_ordinal_type global_ordinal_type; + + size_t maxNumEntPerRow = B_G_double->getNodeMaxNumRowEntries(); + size_t maxNumEntPerRowT = 200; // Temporary fix + + matrices->B = rcp(new Tpetra::CrsMatrix<scalar, local_ordinal_type, global_ordinal_type>(map->mapLagrangeDofs, maxNumEntPerRow)); + matrices->B_2 = rcp(new Tpetra::CrsMatrix<scalar, local_ordinal_type, global_ordinal_type>(map->mapLagrangeDofs, maxNumEntPerRow)); + matrices->B_G = rcp(new Tpetra::CrsMatrix<scalar, local_ordinal_type, global_ordinal_type>(map->mapLagrangeDofs, maxNumEntPerRow)); + matrices->B_T = rcp(new Tpetra::CrsMatrix<scalar, local_ordinal_type, global_ordinal_type>(map->mapDofs, maxNumEntPerRowT)); + matrices->C = rcp(new Tpetra::CrsMatrix<scalar, local_ordinal_type, global_ordinal_type>(map->mapLagrangeDofs, 1)); + matrices->Cb = rcp(new Tpetra::CrsMatrix<scalar, local_ordinal_type, global_ordinal_type>(map->mapLagrangeDofs, 1)); + + for (auto i = 0; i < map->mapLagrangeDofs->getNodeNumElements(); ++i) + { + if (map->mapLagrangeDofs->isNodeLocalElement(i)) + { + local_ordinal_type local_index = i; + global_ordinal_type global_index = map->mapLagrangeDofs->getGlobalElement(local_index); + + Teuchos::ArrayView<const local_ordinal_type> local_indices; + Teuchos::ArrayView<const double> values; + + B_double->getLocalRowView(local_index, local_indices, values); + + for (auto k = 0; k < local_indices.size(); ++k) + { + global_ordinal_type column_index = B_double->getColMap()->getGlobalElement(local_indices[k]); + + matrices->B->insertGlobalValues(global_index, + Teuchos::tuple<global_ordinal_type>(column_index), + Teuchos::tuple<scalar>((scalar)values[k])); + + matrices->B_2->insertGlobalValues(global_index, + Teuchos::tuple<global_ordinal_type>(column_index), + Teuchos::tuple<scalar>((scalar)values[k])); + + matrices->B_T->insertGlobalValues(column_index, + Teuchos::tuple<global_ordinal_type>(global_index), + Teuchos::tuple<scalar>((scalar)values[k])); + } + + B_G_double->getLocalRowView(local_index, local_indices, values); + + for (auto k = 0; k < local_indices.size(); ++k) + { + global_ordinal_type column_index = B_G_double->getColMap()->getGlobalElement(local_indices[k]); + + matrices->B_G->insertGlobalValues(global_index, + Teuchos::tuple<global_ordinal_type>(column_index), + Teuchos::tuple<scalar>((scalar)values[k])); + } + + matrices->C->insertGlobalValues(global_index, Teuchos::tuple<global_ordinal_type>(global_index), Teuchos::tuple<scalar>((scalar)0.)); + matrices->Cb->insertGlobalValues(global_index, Teuchos::tuple<global_ordinal_type>(global_index), Teuchos::tuple<scalar>((scalar)1.)); + } + } + + matrices->B->fillComplete(map->mapDofs, map->mapLagrangeDofs); + matrices->B_2->fillComplete(map->mapDofs, map->mapLagrangeDofs); + matrices->B_G->fillComplete(map->mapDofs, map->mapLagrangeDofs); + matrices->B_T->fillComplete(map->mapLagrangeDofs, map->mapDofs); + matrices->C->fillComplete(); + matrices->Cb->fillComplete(); +}; +#endif //KATOPTRON_MORTAR_H \ No newline at end of file diff --git a/katoptron/src/NeumannList.h b/katoptron/src/NeumannList.h new file mode 100644 index 0000000000000000000000000000000000000000..08aaf001da45b3d0a4276cf9461a019171f11aa1 --- /dev/null +++ b/katoptron/src/NeumannList.h @@ -0,0 +1,196 @@ +#ifndef KATOPTRON_NEUMANNLIST_H +#define KATOPTRON_NEUMANNLIST_H + +#include "katoptron.h" + +#include "Map.h" +#include "wNeumann.h" +#include "wTag.h" + +#include <Tpetra_Map.hpp> +#include <Tpetra_Vector.hpp> +#include <Teuchos_RCP.hpp> +#include <Kokkos_ViewFactory.hpp> + +#include "EnsembleTraits.h" + +namespace katoptron +{ + +/** + * @brief Class which is used to store the list of the Neumann boundary conditions (BC). + */ +template <typename scalar> +class NeumannList +{ + typedef Map::local_ordinal_type local_ordinal_type; + typedef Map::global_ordinal_type global_ordinal_type; + +private: + Kokkos::View<int **, Kokkos::LayoutRight> neumann_elementsList; + Kokkos::View<scalar ***, Kokkos::LayoutRight> neumann_values_list; + + local_ordinal_type neumann_number; + local_ordinal_type neumann_size; + local_ordinal_type neumann_elements; + + local_ordinal_type neumann_time; + local_ordinal_type neumann_dofs; + local_ordinal_type neumann_values; + +public: + NeumannList(Problem &pbl, Teuchos::RCP<Map> map, Teuchos::RCP<ElementsList> elementsList); + + /** + * @brief Return the number of Neumann BC. + */ + inline local_ordinal_type getNeumannNumber() { return neumann_number; } + + /** + * @brief Return the number of elements for a + * given Neumann BC. + * + * Argument: + * <ul> + * <li> i: the BC ID. + * </ul> + */ + inline local_ordinal_type getNeumannSize(local_ordinal_type i) + { + return neumann_elementsList(i, neumann_size); + } + + /** + * @brief Return the local ID of the element e1 of + * a given BC. + * + * Arguments: + * <ul> + * <li> i: the BC ID, + * <li> e1: the ID of the element on the current BC. + * </ul> + */ + inline local_ordinal_type getNeumannElement(local_ordinal_type i, local_ordinal_type e1) + { + return neumann_elementsList(i, neumann_elements + e1); + } + + /** + * @brief Return whether there is a surface + * load for the given BC for a given DOF index. + * + * Arguments: + * <ul> + * <li> i: the BC ID, + * <li> j: the index of the DOF (0-3 if thermomechanical problems). + * </ul> + */ + inline scalar getNeumannDof(local_ordinal_type i, local_ordinal_type j) + { + return neumann_values_list(i, 0, neumann_dofs + j); + } + + /** + * @brief Return the value of the surface + * load for the given BC for a given DOF index. + * + * Arguments: + * <ul> + * <li> i: the BC ID, + * <li> j: the index of the DOF (0-3 if thermomechanical problems). + * </ul> + */ + inline scalar getNeumannValue(local_ordinal_type i, local_ordinal_type j) + { + return neumann_values_list(i, 0, neumann_values + j); + } +}; + +/** + * @brief NeumannList constructor + * + * This constructor allocates 2 Kokkos::View which store all the required information related to each Neumann BC, including: + * <ul> + * <li> all the Neumann elements, + * <li> all the values of the Neumann BC. + * </ul> + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> map: an RCP to a Map object, + * <li> elementsList: an RCP to an ElementList object. + * </ul> + */ +template <typename scalar> +NeumannList<scalar>::NeumannList(Problem &pbl, Teuchos::RCP<Map> map, Teuchos::RCP<ElementsList> elementsList) +{ + typedef local_ordinal_type local_ordinal_type; + typedef global_ordinal_type global_ordinal_type; + + typedef EnsembleTraits<scalar> ET; + const int ensemble_size = ET::size; + + local_ordinal_type numDPN = map->numPrimalDPN; + + neumann_number = pbl.nBCs.size(); + local_ordinal_type maxNumElemsPernBC = 0; + + std::vector<std::vector<global_ordinal_type>> nbcElems = {}; + + for (auto i = 0; i < neumann_number; ++i) + { + std::vector<global_ordinal_type> mynBcElems = {}; + for (auto j = 0; j < pbl.nBCs[i]->tag->elems.size(); ++j) + { + local_ordinal_type e = map->mapElems->getLocalElement(pbl.nBCs[i]->tag->elems[j]->no - 1); + + if (elementsList->getElementType(e) == static_cast<int>(tbox::ElType::QUAD4)) + ; + else if (elementsList->getElementType(e) == static_cast<int>(tbox::ElType::TRI3)) + ; + else + continue; + + mynBcElems.push_back(e); + } + nbcElems.push_back(mynBcElems); + if (maxNumElemsPernBC < mynBcElems.size()) + maxNumElemsPernBC = mynBcElems.size(); + } + + neumann_size = 0; + neumann_elements = 1; + neumann_elementsList = Kokkos::View<int **, Kokkos::LayoutRight>("R", neumann_number, neumann_elements + maxNumElemsPernBC); + + for (auto i = 0; i < neumann_number; ++i) + { + neumann_elementsList(i, neumann_size) = nbcElems[i].size(); + + for (auto j = 0; j < nbcElems[i].size(); ++j) + neumann_elementsList(i, neumann_elements + j) = nbcElems[i][j]; + } + + neumann_time = 0; + neumann_dofs = 1; + neumann_values = 1 + numDPN; + neumann_values_list = Kokkos::View<scalar ***, Kokkos::LayoutRight>("R", neumann_number, 1, 1 + 2 * numDPN); + for (auto i = 0; i < neumann_number; ++i) + { + neumann_values_list(i, 0, neumann_time) = 0.; //to change latter + for (auto j = 0; j < numDPN; ++j) + if (pbl.nBCs[i]->which_dof[j]) + neumann_values_list(i, 0, neumann_dofs + j) = 1; + else + neumann_values_list(i, 0, neumann_dofs + j) = 0; + + for (auto j = 0; j < numDPN; ++j) + for (int s = 0; s < ensemble_size; ++s) + { + ET::coeff(neumann_values_list(i, 0, neumann_values + j), s) = pbl.nBCs[i]->values[j * ensemble_size + s]; + } + } +} +}; // namespace katoptron + +#endif //KATOPTRON_NEUMANNLIST_H diff --git a/katoptron/src/NodesList.cpp b/katoptron/src/NodesList.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7bd363ba76c5d53571f2bea297a308bc157c4152 --- /dev/null +++ b/katoptron/src/NodesList.cpp @@ -0,0 +1,28 @@ +#include "NodesList.h" + +#include "wProblem.h" +#include "wMshData.h" +#include "wNode.h" + +using namespace katoptron; + +/** + * @brief NodesList constructor + * + * This constructor allocates 1 Kokkos::View which stores all the nodes positions. + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> map: an RCP to a Map object. + * </ul> + */ +NodesList::NodesList(Problem &pbl, Teuchos::RCP<Map> map) +{ + nodes_number = map->mapNodesWO->getNodeNumElements(); + + nodes = Kokkos::View<double **, Kokkos::LayoutRight>("R", nodes_number, 3); + for (auto i = 0; i < nodes_number; ++i) + for (auto j = 0; j < 3; ++j) + nodes(i, j) = pbl.msh->nodes[map->mapNodesWO->getGlobalElement(i)]->pos(j); +} diff --git a/katoptron/src/NodesList.h b/katoptron/src/NodesList.h new file mode 100644 index 0000000000000000000000000000000000000000..9b2d2cae9310244b84b48a66e411315f9530f985 --- /dev/null +++ b/katoptron/src/NodesList.h @@ -0,0 +1,31 @@ +#ifndef KATOPTRON_NODESLIST_H +#define KATOPTRON_NODESLIST_H + +#include "katoptron.h" + +#include "Map.h" + +#include <Tpetra_Map.hpp> +#include <Tpetra_Vector.hpp> +#include <Teuchos_RCP.hpp> +#include <Kokkos_ViewFactory.hpp> + +namespace katoptron +{ + +/** + * @brief Class used to store the node information. + */ +class NodesList +{ +public: + Kokkos::View<double **, Kokkos::LayoutRight> nodes; + + Map::local_ordinal_type nodes_number; + + NodesList(Problem &pbl, Teuchos::RCP<Map> map); +}; + +}; // namespace katoptron + +#endif //KATOPTRON_NODESLIST_H diff --git a/katoptron/src/PreloadList.h b/katoptron/src/PreloadList.h new file mode 100644 index 0000000000000000000000000000000000000000..6d86a2798640931882282b04213e61b263bec03e --- /dev/null +++ b/katoptron/src/PreloadList.h @@ -0,0 +1,77 @@ +#ifndef KATOPTRON_PRELOADLIST_H +#define KATOPTRON_PRELOADLIST_H + +#include "katoptron.h" + +#include "Map.h" +#include "wContact.h" +#include "wTag.h" + +#include <Tpetra_Map.hpp> +#include <Tpetra_Vector.hpp> +#include <Teuchos_RCP.hpp> +#include <Kokkos_ViewFactory.hpp> + +#include "EnsembleTraits.h" + +namespace katoptron +{ + +/** + * @brief Class which is used to store the list of the preloads. + */ +template <typename scalar> +class PreloadList +{ + typedef Map::local_ordinal_type local_ordinal_type; + typedef Map::global_ordinal_type global_ordinal_type; + +private: + Kokkos::View<scalar *, Kokkos::LayoutRight> contacts_dg; + +public: + PreloadList(Problem &pbl, Teuchos::RCP<Map> map, Teuchos::RCP<ElementsList> elementsList); + + /** + * @brief Return the value of the preload for + * a given contact interface. + * + * Argument: + * <ul> + * <li> i: the contact interface ID. + * </ul> + */ + inline scalar getPreloadValue(local_ordinal_type i) + { + return contacts_dg(i); + } +}; + +/** + * @brief NeumannList constructor + * + * This constructor allocates 1 Kokkos::View which stores all the preload related to each contact interface. + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> map: an RCP to a Map object, + * <li> elementsList: an RCP to an ElementList object. + * </ul> + */ +template <typename scalar> +PreloadList<scalar>::PreloadList(Problem &pbl, Teuchos::RCP<Map> map, Teuchos::RCP<ElementsList> elementsList) +{ + int contacts_number = pbl.Contacts.size(); + + typedef EnsembleTraits<scalar> ET; + const int ensemble_size = ET::size; + + contacts_dg = Kokkos::View<scalar *, Kokkos::LayoutRight>("R", contacts_number); + for (auto i = 0; i < contacts_number; ++i) + for (int j = 0; j < ensemble_size; ++j) + ET::coeff(contacts_dg(i), j) = pbl.Contacts[i]->dg_vector[j]; +} +}; // namespace katoptron + +#endif //KATOPTRON_PRELOADLIST_H diff --git a/katoptron/src/ResultsDecl.hpp b/katoptron/src/ResultsDecl.hpp new file mode 100644 index 0000000000000000000000000000000000000000..9fac353203749ce64ad6867142c4912a433a5e81 --- /dev/null +++ b/katoptron/src/ResultsDecl.hpp @@ -0,0 +1,62 @@ +#ifndef KATOPTRON_RESULTSDECL_HPP +#define KATOPTRON_RESULTSDECL_HPP + +#include "katoptron.h" +#include "wObject.h" +#include "wTimer.h" +#include "wTimers.h" +#include "wTag.h" +#include "wMedium.h" +#include "wNode.h" + +#include "Teuchos_ParameterList.hpp" + +#include "wProblem.h" +#include "wContact.h" +#include "wMshData.h" +#include "wDisplayHook.h" +#include "wElement.h" + +// Tpetra +#include "Stokhos_Tpetra_MP_Vector.hpp" +#include "Stokhos_Tpetra_Utilities_MP_Vector.hpp" +#include "Tpetra_ConfigDefs.hpp" + +#include "Tpetra_Map.hpp" +#include "Tpetra_MultiVector.hpp" +#include "Tpetra_Vector.hpp" +#include "Tpetra_CrsGraph.hpp" +#include "Tpetra_CrsMatrix.hpp" + +#include <Teuchos_Array.hpp> +#include <Teuchos_GlobalMPISession.hpp> +#include <Teuchos_oblackholestream.hpp> +#include <Teuchos_ScalarTraits.hpp> +#include <Teuchos_RCP.hpp> +#include "Teuchos_ParameterList.hpp" + +#include "Kokkos_ViewFactory.hpp" +#include "Kokkos_Vector.hpp" + +#include "wRandomField.h" +#include "wResults.h" +#include "wLazy.h" +#include "Map.h" +#include <map> +#include "EnsembleTraits.h" + +/** + * @brief Function to write results on disk using VTK formats. + */ +template <class Scalar, class LocalOrdinal, class GlobalOrdinal> +void writeResultsVTK( + const katoptron::Problem &pbl, + Teuchos::RCP<Tpetra::Vector<Scalar, LocalOrdinal, GlobalOrdinal>> xPost, + Teuchos::RCP<katoptron::Map> map, + Teuchos::RCP<RandomField<Scalar, Kokkos::DefaultExecutionSpace>> random_field, + std::string name, + size_t ast, + bool final_result, + bool write_txt); + +#endif //KATOPTRON_RESULTSDECL_HPP diff --git a/katoptron/src/ResultsDef.hpp b/katoptron/src/ResultsDef.hpp new file mode 100644 index 0000000000000000000000000000000000000000..28b6389b0adc667e1216e8c4201cdf931d7bb1fc --- /dev/null +++ b/katoptron/src/ResultsDef.hpp @@ -0,0 +1,366 @@ +#ifndef KATOPTRON_RESULTSDEF_HPP +#define KATOPTRON_RESULTSDEF_HPP + +#include "ResultsDecl.hpp" +#include "StressComputation.h" + +/* @todo should be removed */ +#ifdef WAVES_USE_TBOXVTK +#include "tboxVtk.h" +#include "wVtkExport_KIM2CLEAN.h" +#endif + +template <class Scalar, class LocalOrdinal, class GlobalOrdinal> +void writeResultsVTK( + const katoptron::Problem &pbl, + Teuchos::RCP<Tpetra::Vector<Scalar, LocalOrdinal, GlobalOrdinal>> xPost, + Teuchos::RCP<katoptron::Map> map, + Teuchos::RCP<RandomField<Scalar, Kokkos::DefaultExecutionSpace>> random_field, + std::string name, + size_t ast, + bool final_result, + bool write_txt) +{ + /* @todo [AC] temporary fix for initializing Mem in katoptron */ + for (auto e : pbl.msh->elems) + { + if (e->type() == tbox::ElType::HEX8 || e->type() == tbox::ElType::TETRA4) // 3D + e->initValues(true); + //else // 2D + // e->initValues(false); + } + /* end temporary fix*/ + + // Extraction of types and ensemble format + + xPost->template sync<Kokkos::HostSpace>(); + auto x_2d = xPost->template getLocalView<Kokkos::HostSpace>(); + auto X = Kokkos::subview(x_2d, Kokkos::ALL(), 0); + + typedef EnsembleTraits<Scalar> ET; + + const size_t ensemble_size = ET::size; + + typedef decltype(X) X_View; + typename Kokkos::FlatArrayType<X_View>::type X_flat = X; + + size_t numPrimalDPN = map->numPrimalDPN; + + // Construction of the maps + + std::map<LocalOrdinal, GlobalOrdinal> nodesWO_LO_to_GO; + std::map<GlobalOrdinal, LocalOrdinal> nodesWO_GO_to_LO; + std::map<GlobalOrdinal, LocalOrdinal> elements_GO_to_LO; + std::vector<GlobalOrdinal> contactElementID; + std::map<LocalOrdinal, GlobalOrdinal> lagrange_LO_to_nodes_GO; + std::map<GlobalOrdinal, LocalOrdinal> nodes_GO_to_lagrange_LO; + + LocalOrdinal index = 0; + + for (LocalOrdinal i = 0; i < map->mapElems->getNodeNumElements(); ++i) + { + if (pbl.msh->elems[i]->type() == tbox::ElType::HEX8 || pbl.msh->elems[i]->type() == tbox::ElType::TETRA4) + { + GlobalOrdinal global_i = map->mapElems->getGlobalElement(i); + elements_GO_to_LO[global_i] = index; + ++index; + } + } + + for (LocalOrdinal i = 0; i < map->mapNodesWO->getNodeNumElements(); ++i) + { + GlobalOrdinal global_i = map->mapNodesWO->getGlobalElement(i); + nodesWO_LO_to_GO[i] = global_i; + nodesWO_GO_to_LO[global_i] = i; + } + + LocalOrdinal numNodes = nodesWO_LO_to_GO.size(); + LocalOrdinal numMechanicalDualDOFs = map->lagrange_to_dof.size(); + LocalOrdinal numPrimalDOFs = numPrimalDPN * numNodes; + + std::map<LocalOrdinal, GlobalOrdinal> elems_LO_to_GO; + std::map<GlobalOrdinal, LocalOrdinal> elems_GO_to_LO; + + for (GlobalOrdinal i = 0; i < pbl.msh->elems.size(); ++i) + { + if (pbl.msh->elems[i]->type() == tbox::ElType::HEX8 || pbl.msh->elems[i]->type() == tbox::ElType::TETRA4) + { + LocalOrdinal local_i = pbl.msh->elems[i]->no - 1; + elems_LO_to_GO[local_i] = i; + elems_GO_to_LO[i] = local_i; + } + } + + if (pbl.Contacts.size() >= 1) + { + std::vector<GlobalOrdinal> tmpcontactElementID; + for (size_t i = 0; i < pbl.Contacts.size(); ++i) + for (LocalOrdinal j = 0; j < pbl.Contacts[i]->slave_elems.size(); ++j) + tmpcontactElementID.push_back(pbl.Contacts[i]->slave_elems[j]->no - 1); + + if (tmpcontactElementID.size() > 1) + { + std::sort(tmpcontactElementID.begin(), tmpcontactElementID.end()); + + if (tmpcontactElementID.size() >= 1) + { + contactElementID.push_back(tmpcontactElementID[0]); + if (tmpcontactElementID.size() > 1) + for (LocalOrdinal i = 1; i < tmpcontactElementID.size(); ++i) + if (tmpcontactElementID[i] != tmpcontactElementID[i - 1]) + contactElementID.push_back(tmpcontactElementID[i]); + } + } + } + + // Values in which we are interested + + std::vector<double> displacement_x(numNodes); + std::vector<double> displacement_y(numNodes); + std::vector<double> displacement_z(numNodes); + std::vector<double> shear_modulus_per_node(numNodes); + + std::vector<double> sigma_vm_nodes(numNodes); + std::vector<size_t> adjacent_elems(numNodes); + std::vector<Eigen::MatrixXd> stress_at_nodes(numNodes); + std::vector<Eigen::MatrixXd> strain_at_nodes(numNodes); + + std::vector<Eigen::MatrixXd> stress(pbl.msh->elems.size()); + std::vector<Eigen::MatrixXd> strain(pbl.msh->elems.size()); + + std::vector<double> sigma_vm(pbl.msh->elems.size()); + + std::vector<double> G_vector(pbl.msh->elems.size()); + + std::vector<Eigen::Vector3d> displacement(numNodes); + + std::vector<double> displacement_u(numNodes); + std::vector<double> T(numNodes); + std::vector<double> pressure(numMechanicalDualDOFs); + + std::vector<double> h_fluxes(numMechanicalDualDOFs); + std::vector<double> t_x(numMechanicalDualDOFs); + std::vector<double> t_y(numMechanicalDualDOFs); + + for (auto &k : stress) + k = Eigen::Matrix3d::Zero(); + + for (auto &k : strain) + k = Eigen::Matrix3d::Zero(); + + for (auto &k : stress_at_nodes) + k = Eigen::Matrix3d::Zero(); + + for (auto &k : strain_at_nodes) + k = Eigen::Matrix3d::Zero(); + + // Fill the result vectors + + for (size_t ell = 0; ell < ensemble_size; ++ell) + { + + tbox::Results *results = new tbox::Results(); + tbox::Results *results_contact = new tbox::Results(); + + results->scalars_at_nodes["x"] = &displacement_x; + results->scalars_at_nodes["y"] = &displacement_y; + results->scalars_at_nodes["z"] = &displacement_z; + results->scalars_at_nodes["u"] = &displacement_u; + results->scalars_at_nodes["G"] = &shear_modulus_per_node; + results->scalars_at_nodes["von Mises"] = &sigma_vm_nodes; + results->tensors_at_nodes["sigma"] = &stress_at_nodes; + results->tensors_at_nodes["epsilon"] = &strain_at_nodes; + + if (numPrimalDPN == 4) + results->scalars_at_nodes["T"] = &T; + + results->tensors_at_elems["sigma"] = &stress; + results->tensors_at_elems["epsilon"] = &strain; + + results->scalars_at_elems["von Mises"] = &sigma_vm; + + results->scalars_at_elems["G"] = &G_vector; + + results->vectors_at_nodes["displacement"] = &displacement; + + if (pbl.Contacts.size() > 0) + { + results_contact->scalars_at_nodes["p"] = &pressure; + if (numPrimalDPN == 4) + results_contact->scalars_at_nodes["heat fluxes"] = &h_fluxes; + if (map->numDualDPN == 3 || map->numDualDPN == 4) + { + results_contact->scalars_at_nodes["tangential stress 1"] = &t_x; + results_contact->scalars_at_nodes["tangential stress 2"] = &t_y; + } + } + + for (LocalOrdinal i = 0; i < numNodes; ++i) + { + double dx, dy, dz; + if (numPrimalDPN == 4) + { + dx = X_flat[ensemble_size * (numNodes + 3 * i) + ell]; + dy = X_flat[ensemble_size * (numNodes + 3 * i + 1) + ell]; + dz = X_flat[ensemble_size * (numNodes + 3 * i + 2) + ell]; + } + else + { + dx = X_flat[ensemble_size * (3 * i) + ell]; + dy = X_flat[ensemble_size * (3 * i + 1) + ell]; + dz = X_flat[ensemble_size * (3 * i + 2) + ell]; + } + + displacement_x[i] = dx; + displacement_y[i] = dy; + displacement_z[i] = dz; + displacement_u[i] = sqrt(dx * dx + dy * dy + dz * dz); + strain_at_nodes[i].setZero(); + stress_at_nodes[i].setZero(); + shear_modulus_per_node[i] = ET::coeff(random_field->operator()(pbl.msh->nodes[nodesWO_LO_to_GO[i]]->pos(0), pbl.msh->nodes[nodesWO_LO_to_GO[i]]->pos(1), pbl.msh->nodes[nodesWO_LO_to_GO[i]]->pos(2)), ell); + displacement[i] = Eigen::Vector3d(dx, dy, dz); + if (numPrimalDPN == 4 || numPrimalDPN == 1) + T[i] = X_flat[ensemble_size * i + ell]; + } + if (pbl.Contacts.size() > 0) + { + for (LocalOrdinal i = 0; i < numMechanicalDualDOFs; ++i) + { + int i_node = map->lm_to_dof_global[i]; + lagrange_LO_to_nodes_GO[i] = i_node; + nodes_GO_to_lagrange_LO[i_node] = i; + pressure[i] = X_flat[ensemble_size * (i * map->numDualDPN + numPrimalDOFs) + ell]; + } + if (map->numDualDPN == 2 || map->numDualDPN == 4) + for (LocalOrdinal i = 0; i < numMechanicalDualDOFs; ++i) + h_fluxes[i] = X_flat[ensemble_size * (i * map->numDualDPN + map->numDualDPN - 1 + numPrimalDOFs) + ell]; + if (map->numDualDPN == 3 || map->numDualDPN == 4) + for (LocalOrdinal i = 0; i < numMechanicalDualDOFs; ++i) + { + t_x[i] = X_flat[ensemble_size * (i * map->numDualDPN + 1 + numPrimalDOFs) + ell]; + t_y[i] = X_flat[ensemble_size * (i * map->numDualDPN + 2 + numPrimalDOFs) + ell]; + } + } + + for (auto m : pbl.media) + { + tbox::Tag *current_tag = m->tag; + + double E = ET::coeff(m->E, ell); + double nu = ET::coeff(m->nu, ell); + + double lambda = (nu * E) / ((1 + nu) * (1 - 2 * nu)); + double G = E / (2 * (1 + nu)); + + for (LocalOrdinal i_elem = 0; i_elem < current_tag->elems.size(); ++i_elem) + { + if (random_field->isRandom) + { + double x = 0., y = 0., z = 0.; + size_t element_size = current_tag->elems[i_elem]->nodes.size(); + for (size_t j = 0; j < element_size; ++j) + { + x += current_tag->elems[i_elem]->nodes[j]->pos(0) / element_size; + y += current_tag->elems[i_elem]->nodes[j]->pos(1) / element_size; + z += current_tag->elems[i_elem]->nodes[j]->pos(2) / element_size; + } + G = ET::coeff(random_field->operator()(x, y, z), ell); + } + Eigen::MatrixXd H = Eigen::MatrixXd::Zero(9, 9); + Eigen::MatrixXd D = Eigen::MatrixXd::Zero(3, 3); + + for (auto i = 0; i < 3; ++i) + for (auto j = 0; j < 3; ++j) + for (auto k = 0; k < 3; ++k) + for (auto l = 0; l < 3; ++l) + { + if (i == j && k == l) + H(i * 3 + j, k * 3 + l) = lambda; + if (i == k && j == l) + H(i * 3 + j, k * 3 + l) = H(i * 3 + j, k * 3 + l) + G; + if (i == l && j == k) + H(i * 3 + j, k * 3 + l) = H(i * 3 + j, k * 3 + l) + G; + } + if (numPrimalDPN == 4) + { + double kappa = lambda + (2. / 3.) * G; + double beta = ET::coeff(m->beta, ell); + + for (auto i = 0; i < 3; ++i) + D(i, i) = -3. * kappa * beta; + } + std::vector<double> x_tmp(8), y_tmp(8), z_tmp(8), T_tmp(8); + Eigen::MatrixXd Strain(3, 3); + Eigen::MatrixXd Sigma(3, 3); + + auto e = current_tag->elems[i_elem]; + std::vector<Eigen::MatrixXd> Strain_at_node(e->nodes.size()); + std::vector<Eigen::MatrixXd> Sigma_at_node(e->nodes.size()); + + for (auto &k : Strain_at_node) + k = Eigen::MatrixXd::Zero(3, 3); + for (auto &k : Sigma_at_node) + k = Eigen::MatrixXd::Zero(3, 3); + + if (e->type() == tbox::ElType::HEX8 || e->type() == tbox::ElType::TETRA4) + { + for (size_t i = 0; i < e->nodes.size(); ++i) + { + int node_i = nodesWO_GO_to_LO[e->nodes[i]->row]; + x_tmp[i] = displacement_x[node_i]; + y_tmp[i] = displacement_y[node_i]; + z_tmp[i] = displacement_z[node_i]; + if (numPrimalDPN == 4) + T_tmp[i] = T[node_i]; + else + T_tmp[i] = 0.; + } + + strain_stress_x_y_z(e, Strain, Sigma, H, D, x_tmp, y_tmp, z_tmp, T_tmp, numPrimalDPN == 4); + + strain[elems_LO_to_GO[e->no - 1]] = Strain; + stress[elems_LO_to_GO[e->no - 1]] = Sigma; + + G_vector[elems_LO_to_GO[e->no - 1]] = G; + + sigma_vm[elems_LO_to_GO[e->no - 1]] = sqrt((pow(Sigma(0, 0) - Sigma(1, 1), 2.) + pow(Sigma(1, 1) - Sigma(2, 2), 2.) + pow(Sigma(2, 2) - Sigma(0, 0), 2.) + 6 * (pow(Sigma(0, 1), 2.) + pow(Sigma(1, 2), 2.) + pow(Sigma(2, 0), 2.))) / 2); + + strain_stress_x_y_z_at_node(e, Strain_at_node, Sigma_at_node, H, D, x_tmp, y_tmp, z_tmp, T_tmp, numPrimalDPN == 4); + + for (size_t i = 0; i < e->nodes.size(); ++i) + { + LocalOrdinal node_i = nodesWO_GO_to_LO[e->nodes[i]->row]; + if (ell == 0) + ++adjacent_elems[node_i]; // Increases the number of adjacent elements by one only for the first sample + + strain_at_nodes[node_i] += Strain_at_node[i]; + stress_at_nodes[node_i] += Sigma_at_node[i]; + } + } + } + } + for (LocalOrdinal i = 0; i < numNodes; ++i) + { + strain_at_nodes[i] /= adjacent_elems[i]; + stress_at_nodes[i] /= adjacent_elems[i]; + + Eigen::MatrixXd Sigma = stress_at_nodes[i]; + + sigma_vm_nodes[i] = sqrt((pow(Sigma(0, 0) - Sigma(1, 1), 2.) + pow(Sigma(1, 1) - Sigma(2, 2), 2.) + pow(Sigma(2, 2) - Sigma(0, 0), 2.) + 6 * (pow(Sigma(0, 1), 2.) + pow(Sigma(1, 2), 2.) + pow(Sigma(2, 0), 2.))) / 2); + } + + /* @todo temporary fix to output Kim's data */ + // All the post-processing related to katoptron should be done here, + // then tbox::MshExport should be used, either by passing tbox::GmshExport or tboxVtk::VtkExport + + tboxVtk::VtkExport_KIM2CLEAN vtkWriter(pbl.msh); + vtkWriter.save_MPI(pbl.msh->name + "_ast" + std::to_string(ast) + "_s" + std::to_string(ell) + ".pvtu", *results, nodesWO_LO_to_GO, nodesWO_GO_to_LO, elements_GO_to_LO); + if (pbl.Contacts.size() >= 1) + vtkWriter.save_MPI(pbl.msh->name + "_ast" + std::to_string(ast) + "_s" + std::to_string(ell) + "_contact.vtu", *results_contact, contactElementID, lagrange_LO_to_nodes_GO, nodes_GO_to_lagrange_LO); + + delete results; + delete results_contact; + } +} + +#endif //KATOPTRON_RESULTSDEF_HPP diff --git a/katoptron/src/ResultsETI.cpp b/katoptron/src/ResultsETI.cpp new file mode 100644 index 0000000000000000000000000000000000000000..aa362ebfb080ffbc9c4833acddf201a9cde0136e --- /dev/null +++ b/katoptron/src/ResultsETI.cpp @@ -0,0 +1,75 @@ +#include "ResultsDecl.hpp" +#include "ResultsDef.hpp" + +typedef katoptron::Map::local_ordinal_type local_ordinal_type; +typedef katoptron::Map::global_ordinal_type global_ordinal_type; + +#define SCALAR double + +template void writeResultsVTK<SCALAR, local_ordinal_type, global_ordinal_type>( + const katoptron::Problem &, + Teuchos::RCP<Tpetra::Vector<SCALAR, local_ordinal_type, global_ordinal_type>>, + Teuchos::RCP<katoptron::Map>, + Teuchos::RCP<RandomField<SCALAR, Kokkos::DefaultExecutionSpace>>, + std::string, + size_t, + bool, + bool); + +#undef SCALAR + +#define SCALAR Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 8, Kokkos::OpenMP>> + +template void writeResultsVTK<SCALAR, local_ordinal_type, global_ordinal_type>( + const katoptron::Problem &, + Teuchos::RCP<Tpetra::Vector<SCALAR, local_ordinal_type, global_ordinal_type>>, + Teuchos::RCP<katoptron::Map>, + Teuchos::RCP<RandomField<SCALAR, Kokkos::DefaultExecutionSpace>>, + std::string, + size_t, + bool, + bool); + +#undef SCALAR + +#define SCALAR Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 16, Kokkos::OpenMP>> + +template void writeResultsVTK<SCALAR, local_ordinal_type, global_ordinal_type>( + const katoptron::Problem &, + Teuchos::RCP<Tpetra::Vector<SCALAR, local_ordinal_type, global_ordinal_type>>, + Teuchos::RCP<katoptron::Map>, + Teuchos::RCP<RandomField<SCALAR, Kokkos::DefaultExecutionSpace>>, + std::string, + size_t, + bool, + bool); + +#undef SCALAR + +#define SCALAR Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 24, Kokkos::OpenMP>> + +template void writeResultsVTK<SCALAR, local_ordinal_type, global_ordinal_type>( + const katoptron::Problem &, + Teuchos::RCP<Tpetra::Vector<SCALAR, local_ordinal_type, global_ordinal_type>>, + Teuchos::RCP<katoptron::Map>, + Teuchos::RCP<RandomField<SCALAR, Kokkos::DefaultExecutionSpace>>, + std::string, + size_t, + bool, + bool); + +#undef SCALAR + +#define SCALAR Sacado::MP::Vector<Stokhos::StaticFixedStorage<int, double, 32, Kokkos::OpenMP>> + +template void writeResultsVTK<SCALAR, local_ordinal_type, global_ordinal_type>( + const katoptron::Problem &, + Teuchos::RCP<Tpetra::Vector<SCALAR, local_ordinal_type, global_ordinal_type>>, + Teuchos::RCP<katoptron::Map>, + Teuchos::RCP<RandomField<SCALAR, Kokkos::DefaultExecutionSpace>>, + std::string, + size_t, + bool, + bool); + +#undef SCALAR diff --git a/katoptron/src/SourcesList.h b/katoptron/src/SourcesList.h new file mode 100644 index 0000000000000000000000000000000000000000..2c262ff63f1f3919c8f465b9bd3b3ccbb181aa8c --- /dev/null +++ b/katoptron/src/SourcesList.h @@ -0,0 +1,164 @@ +#ifndef KATOPTRON_SOURCESLIST_H +#define KATOPTRON_SOURCESLIST_H + +#include "katoptron.h" + +#include "Map.h" +#include "wSource.h" +#include "wTag.h" + +#include <Tpetra_Map.hpp> +#include <Tpetra_Vector.hpp> +#include <Teuchos_RCP.hpp> +#include <Kokkos_ViewFactory.hpp> + +namespace katoptron +{ + +/** + * @brief Class which is used to store the list of the volumetric heat sources. + */ +template <typename scalar> +class SourcesList +{ + typedef Map::local_ordinal_type local_ordinal_type; + typedef Map::global_ordinal_type global_ordinal_type; + +private: + Kokkos::View<int **, Kokkos::LayoutRight> sources_elementsList; + Kokkos::View<scalar ***, Kokkos::LayoutRight> sources_values_list; + + local_ordinal_type sources_number; + local_ordinal_type sources_size; + local_ordinal_type sources_elements; + + local_ordinal_type sources_time; + local_ordinal_type sources_values; + +public: + SourcesList(); + SourcesList(Problem &pbl, Teuchos::RCP<Map> map, Teuchos::RCP<ElementsList> elementsList); + + /** + * @brief Return the number of sources. + */ + inline local_ordinal_type getSourceNumber() { return sources_number; } + + /** + * @brief Return the number of elements for a + * given source. + * + * Argument: + * <ul> + * <li> i: the source ID. + * </ul> + */ + inline local_ordinal_type getSourceSize(local_ordinal_type i) + { + return sources_elementsList(i, sources_size); + } + + /** + * @brief Return the local ID of the element e1 of + * a source. + * + * Arguments: + * <ul> + * <li> i: the source ID, + * <li> e1: the ID of the element on the current BC. + * </ul> + */ + inline local_ordinal_type getSourceElement(local_ordinal_type i, local_ordinal_type ea) + { + return sources_elementsList(i, sources_elements + ea); + } + + /** + * @brief Return the value of the source. + * + * Argument: + * <ul> + * <li> i: the source ID. + * </ul> + */ + inline scalar getSourceValue(local_ordinal_type i) + { + return sources_values_list(i, 0, sources_values); + } +}; + +/** + * @brief SourcesList constructor + * + * This constructor allocates 2 Kokkos::View which store all the required information related to source, including: + * <ul> + * <li> all the source elements, + * <li> all the values of the heat source. + * </ul> + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> map: an RCP to a Map object, + * <li> elementsList: an RCP to an ElementList object. + * </ul> + */ +template <typename scalar> +SourcesList<scalar>::SourcesList(Problem &pbl, Teuchos::RCP<Map> map, Teuchos::RCP<ElementsList> elementsList) +{ + typedef local_ordinal_type local_ordinal_type; + typedef global_ordinal_type global_ordinal_type; + + sources_number = pbl.Sources.size(); + local_ordinal_type maxNumElemsPerSource = 0; + + std::vector<std::vector<global_ordinal_type>> SourceElems = {}; + + for (auto i = 0; i < sources_number; ++i) + { + std::vector<global_ordinal_type> mySourceElems = {}; + + for (auto j = 0; j < pbl.Sources[i]->tag->elems.size(); ++j) + { + local_ordinal_type e = map->mapElems->getLocalElement(pbl.Sources[i]->tag->elems[j]->no - 1); + + if (elementsList->getElementType(e) == static_cast<int>(tbox::ElType::TETRA4)) + ; + else if (elementsList->getElementType(e) == static_cast<int>(tbox::ElType::HEX8)) + ; + else + continue; + + mySourceElems.push_back(e); + } + + SourceElems.push_back(mySourceElems); + if (maxNumElemsPerSource < mySourceElems.size()) + maxNumElemsPerSource = mySourceElems.size(); + } + + sources_size = 0; + sources_elements = 1; + sources_elementsList = Kokkos::View<int **, Kokkos::LayoutRight>("R", sources_number, sources_elements + maxNumElemsPerSource); + + for (auto i = 0; i < sources_number; ++i) + { + sources_elementsList(i, sources_size) = SourceElems[i].size(); + + for (auto j = 0; j < SourceElems[i].size(); ++j) + sources_elementsList(i, sources_elements + j) = SourceElems[i][j]; + } + + sources_time = 0; + sources_values = 1; + sources_values_list = Kokkos::View<scalar ***, Kokkos::LayoutRight>("R", sources_number, 1, 2); + for (auto i = 0; i < sources_number; ++i) + { + sources_values_list(i, 0, sources_time) = 0.; //to change latter + + sources_values_list(i, 0, sources_values) = pbl.Sources[i]->value; + } +} +}; // namespace katoptron + +#endif //KATOPTRON_SOURCESLIST_H diff --git a/katoptron/src/StressComputation.h b/katoptron/src/StressComputation.h new file mode 100644 index 0000000000000000000000000000000000000000..ec6c1e817215c04e83e718422b7c4a96f86b1d54 --- /dev/null +++ b/katoptron/src/StressComputation.h @@ -0,0 +1,133 @@ +#ifndef KATOPTRON_STRESSCOMPUTATION_H +#define KATOPTRON_STRESSCOMPUTATION_H + +#include "wHex8.h" +#include "wSfHex8.h" +#include "wGaussHex8.h" +#include "wCacheHex8.h" + +#include "wTetra4.h" +#include "wSfTetra4.h" +#include "wGaussTetra4.h" +#include "wCacheTetra4.h" + +/** + * @brief Those functions compute the stress and strain at nodes and in average per element. + * They are currently implemented using Eigen data structure but should be refactored using Kokkos:view + * such that it will be possible to use parallel for in the future. + */ + +void strain_at_gp(size_t n_n, tbox::Element &el, tbox::Cache &cache, size_t a, const Eigen::MatrixXd &u_e, Eigen::MatrixXd &Strain) +{ + Eigen::MatrixXd const &J = el.getJinv(a); + Eigen::MatrixXd const &dffi = cache.getDsf(a); + Eigen::Matrix3d du_d_Phi = Eigen::Matrix3d::Zero(); + for (size_t i = 0; i < n_n; ++i) + { + for (auto k = 0; k < 3; ++k) + for (auto j = 0; j < 3; ++j) + du_d_Phi(j, k) += dffi(j, i) * u_e(k, i); + } + Strain += (J * du_d_Phi).transpose() * (J * du_d_Phi) * 0.5; +} + +void compute_stress(size_t n_n, const Eigen::MatrixXd &Strain, Eigen::MatrixXd &Stress, const Eigen::MatrixXd &H, const Eigen::MatrixXd &D, const std::vector<double> &T, bool thermal) +{ + Stress = Eigen::Matrix3d::Zero(); + for (size_t i = 0; i < 3; ++i) + for (size_t j = 0; j < 3; ++j) + for (size_t k = 0; k < 3; ++k) + for (size_t l = 0; l < 3; ++l) + Stress(i, j) += H(i * 3 + j, k * 3 + l) * Strain(k, l); + + if (thermal) + for (size_t i = 0; i < 3; ++i) + for (size_t j = 0; j < 3; ++j) + { + double tmp = 0.; + for (size_t k = 0; k < n_n; ++k) + tmp += D(i, j) * T[k]; + tmp /= n_n; + Stress(i, j) += tmp; + } +} + +void strain_stress_x_y_z(tbox::Element *elem, Eigen::MatrixXd &Strain, Eigen::MatrixXd &Stress, const Eigen::MatrixXd &H, const Eigen::MatrixXd &D, const std::vector<double> &x, const std::vector<double> &y, const std::vector<double> &z, const std::vector<double> &T, bool thermal = false) +{ + tbox::Cache &cache = elem->getVCache(); + + size_t n_gp = cache.getVGauss().getN(); + size_t n_n = elem->nodes.size(); + + Eigen::MatrixXd u_e(3, n_n); + + for (size_t i = 0; i < n_n; ++i) + { + u_e(0, i) = x[i]; + u_e(1, i) = y[i]; + u_e(2, i) = z[i]; + } + + Strain = Eigen::Matrix3d::Zero(); + for (size_t a = 0; a < n_gp; ++a) + { + strain_at_gp(n_n, *elem, cache, a, u_e, Strain); + } + Strain /= n_n; + + compute_stress(n_n, Strain, Stress, H, D, T, thermal); +} + +void strain_stress_x_y_z_at_node(tbox::Element *elem, std::vector<Eigen::MatrixXd> &Strain_at_node, std::vector<Eigen::MatrixXd> &Stress_at_node, const Eigen::MatrixXd &H, const Eigen::MatrixXd &D, const std::vector<double> &x, const std::vector<double> &y, const std::vector<double> &z, const std::vector<double> &T, bool thermal = false) +{ + tbox::Cache &cache = elem->getVCache(); + + size_t n_gp = cache.getVGauss().getN(); + size_t n_n = elem->nodes.size(); + + std::vector<Eigen::MatrixXd> Strain_at_gp(n_gp); + std::vector<Eigen::MatrixXd> Stress_at_gp(n_gp); + Eigen::MatrixXd u_e(3, n_n); + Eigen::MatrixXd Strain(3, 3); + + for (auto &k : Strain_at_gp) + k.resize(3, 3); + for (auto &k : Stress_at_gp) + k.resize(3, 3); + + for (size_t i = 0; i < n_n; ++i) + { + u_e(0, i) = x[i]; + u_e(1, i) = y[i]; + u_e(2, i) = z[i]; + } + + for (size_t a = 0; a < n_gp; ++a) + { + Strain = Eigen::Matrix3d::Zero(); + strain_at_gp(n_n, *elem, cache, a, u_e, Strain); + Strain_at_gp[a] = Strain; + compute_stress(n_n, Strain, Stress_at_gp[a], H, D, T, thermal); + } + + // Extrapolation at node points + Eigen::MatrixXd values_at_gp(n_gp, 18); + for (size_t i = 0; i < 3; ++i) + for (size_t j = 0; j < 3; ++j) + for (size_t a = 0; a < n_gp; ++a) + { + values_at_gp(a, i * 3 + j) = Strain_at_gp[a](i, j); + values_at_gp(a, 9 + i * 3 + j) = Stress_at_gp[a](i, j); + } + + Eigen::MatrixXd values_at_node = elem->gp2node(values_at_gp); + for (size_t k = 0; k < n_n; ++k) + for (size_t i = 0; i < 3; ++i) + for (size_t j = 0; j < 3; ++j) + { + Strain_at_node[k](i, j) = values_at_node(k, i * 3 + j); + Stress_at_node[k](i, j) = values_at_node(k, 9 + i * 3 + j); + } +} + +#endif //KATOPTRON_STRESSCOMPUTATION_H \ No newline at end of file diff --git a/katoptron/src/Vectors.h b/katoptron/src/Vectors.h new file mode 100644 index 0000000000000000000000000000000000000000..5a5069f1e8abbe042d526252afb306f740171927 --- /dev/null +++ b/katoptron/src/Vectors.h @@ -0,0 +1,78 @@ +#ifndef KATOPTRON_VECTORS_H +#define KATOPTRON_VECTORS_H + +#include "katoptron.h" + +#include "Map.h" + +#include <Tpetra_Map.hpp> +#include <Tpetra_Vector.hpp> +#include <Teuchos_RCP.hpp> +#include <Xpetra_BlockedMultiVector.hpp> +#include <Xpetra_MultiVector.hpp> + +namespace katoptron +{ + +/** + * @brief Class which includes all the Trilinos vectors (Tpetra vectors and Xpetra vectors) used + * in the simulation. + */ +template <typename scalar> +class Vectors +{ +public: + // + // Convenience typedefs + // + typedef Map::local_ordinal_type local_ordinal_type; + typedef Map::global_ordinal_type global_ordinal_type; + typedef Map::node_type node_type; + typedef Map::tpetra_map_type tpetra_map_type; + typedef Map::xpetra_bmap_type xpetra_bmap_type; + + typedef Tpetra::Vector<scalar, local_ordinal_type, global_ordinal_type, node_type> tpetra_vector_type; + typedef Tpetra::MultiVector<scalar, local_ordinal_type, global_ordinal_type, node_type> tpetra_mvector_type; + + typedef Xpetra::BlockedMultiVector<scalar, local_ordinal_type, global_ordinal_type, node_type> xpetra_bmvector_type; + typedef Xpetra::MultiVector<scalar, local_ordinal_type, global_ordinal_type, node_type> xpetra_mvector_type; + typedef Xpetra::TpetraMultiVector<scalar, local_ordinal_type, global_ordinal_type, node_type> xpetra_tmvector_type; + + Teuchos::RCP<tpetra_vector_type> bWO; + Teuchos::RCP<tpetra_vector_type> b; + + Teuchos::RCP<tpetra_vector_type> weights; + + Teuchos::RCP<tpetra_vector_type> x; + Teuchos::RCP<tpetra_vector_type> lagrange; + + Teuchos::RCP<tpetra_vector_type> initialGap; + + Teuchos::RCP<xpetra_bmvector_type> rhsBlockedMultiVector; + Teuchos::RCP<xpetra_bmvector_type> solutionBlockedMultiVector; + + Teuchos::RCP<xpetra_mvector_type> rhsMultiVector; + Teuchos::RCP<xpetra_mvector_type> solutionMultiVector; + + Vectors(Teuchos::RCP<Map> map); +}; + +/** + * @brief Vectors constructor + * + * Argument: + * <ul> + * <li> graph: an RCP to a Map object. + * </ul> + */ +template <typename scalar> +Vectors<scalar>::Vectors(Teuchos::RCP<Map> map) +{ + bWO = rcp(new tpetra_vector_type(map->mapDofsWO, true)); + b = rcp(new tpetra_vector_type(map->mapDofs, true)); + x = rcp(new tpetra_vector_type(map->mapDofs, true)); + weights = rcp(new tpetra_vector_type(map->mapDofs, true)); +} +}; // namespace katoptron + +#endif //KATOPTRON_VECTORS_H diff --git a/katoptron/src/WeightsList.h b/katoptron/src/WeightsList.h new file mode 100644 index 0000000000000000000000000000000000000000..bf1cbe4d802271266b349d8e37cf8e87680b7243 --- /dev/null +++ b/katoptron/src/WeightsList.h @@ -0,0 +1,200 @@ +#ifndef KATOPTRON_WEIGHTSLIST_H +#define KATOPTRON_WEIGHTSLIST_H + +#include "katoptron.h" + +#include "Map.h" +#include "wWeight.h" +#include "wTag.h" + +#include <Tpetra_Map.hpp> +#include <Tpetra_Vector.hpp> +#include <Teuchos_RCP.hpp> +#include <Kokkos_ViewFactory.hpp> + +#include "EnsembleTraits.h" + +using Teuchos::RCP; + +namespace katoptron +{ + +/** + * @brief Class which is used to store the list of the weights used + * for the residual computation. + */ +template <typename scalar> +class WeightsList +{ + typedef Map::local_ordinal_type local_ordinal_type; + typedef Map::global_ordinal_type global_ordinal_type; + +private: + Kokkos::View<int **, Kokkos::LayoutRight> weights_nodesList; + Kokkos::View<scalar **, Kokkos::LayoutRight> weights_values_list; + + local_ordinal_type weights_number; + local_ordinal_type weights_size; + local_ordinal_type weights_nodes; + + local_ordinal_type weights_dofs; + local_ordinal_type weights_values; + +public: + WeightsList(Problem &pbl, Teuchos::RCP<Map> map, Teuchos::RCP<ElementsList> elementsList); + + /** + * @brief Return the number of weighted regions. + */ + inline local_ordinal_type getWeightRegionsNumber() + { + return weights_number; + } + + /** + * @brief Return the number of nodes for a + * given weighted region. + * + * Argument: + * <ul> + * <li> i: the weighted region ID. + * </ul> + */ + inline local_ordinal_type getWeightRegionSize(local_ordinal_type i) + { + return weights_nodesList(i, weights_size); + } + + /** + * @brief Return the global ID of the node n1 of + * a given weighted region. + * + * Arguments: + * <ul> + * <li> i: the weighted region ID, + * <li> n1: the ID of the node on the current BC. + * </ul> + */ + inline local_ordinal_type getNode(local_ordinal_type i, local_ordinal_type n1) + { + return weights_nodesList(i, weights_nodes + n1); + } + + /** + * @brief Return whether the DOF j is weighted for + * a given weighted region. + * + * Arguments: + * <ul> + * <li> i: the weighted region ID, + * <li> j: the index of the DOF (0-3 if thermomechanical problems). + * </ul> + */ + inline bool getWeightDof(local_ordinal_type i, local_ordinal_type j) + { + return (weights_values_list(i, weights_dofs + j) == scalar(1.)); + } + + /** + * @brief Return the value of weight for the + * DOF for a given weighted region. + * + * Arguments: + * <ul> + * <li> i: the weighted region ID, + * <li> j: the index of the DOF (0-3 if thermomechanical problems). + * </ul> + */ + inline scalar getWeightValue(local_ordinal_type i, local_ordinal_type j) + { + return weights_values_list(i, weights_values + j); + } +}; + +/** + * @brief WeightsList constructor + * + * This constructor allocates 2 Kokkos::View which store all the required information related to each weighted region, including: + * <ul> + * <li> all the weighted nodes, + * <li> all the values of the weights. + * </ul> + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> map: an RCP to a Map object, + * <li> elementsList: an RCP to an ElementList object. + * </ul> + */ +template <typename scalar> +WeightsList<scalar>::WeightsList(Problem &pbl, Teuchos::RCP<Map> map, Teuchos::RCP<ElementsList> elementsList) +{ + typedef EnsembleTraits<scalar> ET; + const int ensemble_size = ET::size; + + local_ordinal_type numDPN = map->numPrimalDPN; + + weights_number = pbl.Weights.size(); + local_ordinal_type maxNumNodesPerWeight = 0; + + std::vector<std::vector<global_ordinal_type>> WeightNodes = {}; + + for (auto i = 0; i < weights_number; ++i) + { + std::vector<global_ordinal_type> tmpMyWeightNodes = {}; + std::vector<global_ordinal_type> myWeightNodes = {}; + + for (auto j = 0; j < pbl.Weights[i]->nodes.size(); ++j) + tmpMyWeightNodes.push_back(pbl.Weights[i]->nodes[j]->row); + + std::sort(tmpMyWeightNodes.begin(), tmpMyWeightNodes.end()); + + if (tmpMyWeightNodes.size() >= 1) + myWeightNodes.push_back(tmpMyWeightNodes[0]); + + for (auto ii = 1; ii < tmpMyWeightNodes.size(); ++ii) + if (tmpMyWeightNodes[ii] != tmpMyWeightNodes[ii - 1]) + myWeightNodes.push_back(tmpMyWeightNodes[ii]); + + WeightNodes.push_back(myWeightNodes); + if (maxNumNodesPerWeight < myWeightNodes.size()) + maxNumNodesPerWeight = myWeightNodes.size(); + } + + weights_size = 0; + weights_nodes = 1; + weights_nodesList = Kokkos::View<int **, Kokkos::LayoutRight>("R", weights_number, weights_nodes + maxNumNodesPerWeight); + + for (auto i = 0; i < weights_number; ++i) + { + weights_nodesList(i, weights_size) = WeightNodes[i].size(); + + for (auto j = 0; j < WeightNodes[i].size(); ++j) + weights_nodesList(i, weights_nodes + j) = WeightNodes[i][j]; + } + + weights_dofs = 0; + weights_values = weights_dofs + numDPN; + weights_values_list = Kokkos::View<scalar **, Kokkos::LayoutRight>("R", weights_number, 2 * numDPN); + for (auto i = 0; i < weights_number; ++i) + { + for (auto j = 0; j < numDPN; ++j) + if (pbl.Weights[i]->which_dof[j]) + weights_values_list(i, weights_dofs + j) = 1; + else + weights_values_list(i, weights_dofs + j) = 0; + + for (int s = 0; s < ensemble_size; ++s) + { + ET::coeff(weights_values_list(i, weights_values + 0), s) = pbl.Weights[i]->x_values[s]; + ET::coeff(weights_values_list(i, weights_values + 1), s) = pbl.Weights[i]->y_values[s]; + ET::coeff(weights_values_list(i, weights_values + 2), s) = pbl.Weights[i]->z_values[s]; + if (numDPN == 4) + ET::coeff(weights_values_list(i, weights_values + 3), s) = pbl.Weights[i]->T_values[s]; + } + } +} +}; // namespace katoptron + +#endif //KATOPTRON_WEIGHTSLIST_H \ No newline at end of file diff --git a/katoptron/src/katoptron.h b/katoptron/src/katoptron.h new file mode 100644 index 0000000000000000000000000000000000000000..b59bf330eda5468dbc00a8e6dfc4ba6c1591828e --- /dev/null +++ b/katoptron/src/katoptron.h @@ -0,0 +1,37 @@ +// global header of the "katoptron" module + +#ifndef KATOPTRON_H +#define KATOPTRON_H + +#if defined(WIN32) +#ifdef tlnos_EXPORTS +#define KATOPTRON_API __declspec(dllexport) +#else +#define KATOPTRON_API __declspec(dllimport) +#endif +#else +#define KATOPTRON_API +#endif + +#include "tbox.h" + +/** + * @brief katoptron namespace + */ + +namespace katoptron +{ +class Problem; +class Solver; +class Dirichlet; +class Neumann; +class Medium; +class Contact; +class Source; +class RandomVariable; +class Weight; +}; // namespace katoptron + +class DisplayHook; + +#endif //KATOPTRON_H diff --git a/katoptron/src/tMatrix.h b/katoptron/src/tMatrix.h new file mode 100644 index 0000000000000000000000000000000000000000..333655232f6baa8fb875ae5e76198d4fadf47888 --- /dev/null +++ b/katoptron/src/tMatrix.h @@ -0,0 +1,223 @@ +#ifndef KATOPTRON_TMATRIX_H +#define KATOPTRON_TMATRIX_H + +#include "Stokhos_Tpetra_MP_Vector.hpp" + +template <class T, int rows> +class tVector; + +template <class T, int rows, int cols> +class tMatrix +{ +public: + tMatrix() + { + for (auto i = 0; i < rows; ++i) + for (auto j = 0; j < cols; ++j) + data[i * cols + j] = (T)0; + } + T &operator()(int row, int col); + tMatrix operator+(tMatrix rhs); + void operator+=(tMatrix rhs); + T det(); //only for 3x3 + tMatrix inv(); //only for 3x3 + tMatrix operator*(tMatrix rhs); + tVector<T, rows> operator*(tVector<T, cols> rhs); + template <class U> + tVector<typename Sacado::Promote<T, U>::type, rows> operator*(tVector<U, cols> rhs); + void print(); + void clean() + { + for (auto i = 0; i < rows; ++i) + for (auto j = 0; j < cols; ++j) + data[i * cols + j] = (T)0; + } + +private: + T data[rows * cols]; + int numRows = rows; + int numCols = cols; + int getRows() { return numRows; } + int getCols() { return numCols; } +}; + +template <class T, int rows, int cols> +template <class U> +tVector<typename Sacado::Promote<T, U>::type, rows> tMatrix<T, rows, cols>::operator*(tVector<U, cols> rhs) +{ + tVector<typename Sacado::Promote<T, U>::type, rows> results; + for (auto i = 0; i < rows; ++i) + for (auto j = 0; j < cols; ++j) + results(i) += data[i * cols + j] * rhs(j); + return results; +} + +template <class T, int rows, int cols> +tMatrix<T, rows, cols> tMatrix<T, rows, cols>::operator+(tMatrix<T, rows, cols> rhs) +{ + tMatrix<T, rows, cols> results; + for (auto i = 0; i < rows; ++i) + for (auto j = 0; j < cols; ++j) + results(i, j) = data[i * cols + j] + rhs(i, j); + return results; +} + +template <class T, int rows, int cols> +void tMatrix<T, rows, cols>::operator+=(tMatrix<T, rows, cols> rhs) +{ + for (auto i = 0; i < rows; ++i) + for (auto j = 0; j < cols; ++j) + data[i * cols + j] += rhs(i, j); +} + +template <class T, int rows, int cols> +tMatrix<T, rows, cols> tMatrix<T, rows, cols>::operator*(tMatrix<T, rows, cols> rhs) +{ + tMatrix<T, rows, cols> results; + for (auto i = 0; i < rows; ++i) + for (auto j = 0; j < rows; ++j) + for (auto k = 0; k < rows; ++k) + results(i, j) += data[i * cols + k] * rhs(k, j); + return results; +} + +template <class T, int rows, int cols> +T &tMatrix<T, rows, cols>::operator()(int row, int col) +{ + return data[row * cols + col]; +} + +template <class T, int rows, int cols> +T tMatrix<T, rows, cols>::det() +{ + return data[0 * cols + 0] * (data[1 * cols + 1] * data[2 * cols + 2] - data[1 * cols + 2] * data[2 * cols + 1]) - data[0 * cols + 1] * (data[1 * cols + 0] * data[2 * cols + 2] - data[1 * cols + 2] * data[2 * cols + 0]) + data[0 * cols + 2] * (data[1 * cols + 0] * data[2 * cols + 1] - data[1 * cols + 1] * data[2 * cols + 0]); +} + +template <class T, int rows, int cols> +tMatrix<T, rows, cols> tMatrix<T, rows, cols>::inv() +{ + tMatrix<T, rows, cols> results; + T det = this->det(); + results(0, 0) = (1. / det) * (data[1 * cols + 1] * data[2 * cols + 2] - data[1 * cols + 2] * data[2 * cols + 1]); + results(0, 1) = (1. / det) * (data[0 * cols + 2] * data[2 * cols + 1] - data[2 * cols + 2] * data[0 * cols + 1]); + results(0, 2) = (1. / det) * (data[0 * cols + 1] * data[1 * cols + 2] - data[1 * cols + 1] * data[0 * cols + 2]); + + results(1, 0) = (1. / det) * (data[1 * cols + 2] * data[2 * cols + 0] - data[2 * cols + 2] * data[1 * cols + 0]); + results(1, 1) = (1. / det) * (data[0 * cols + 0] * data[2 * cols + 2] - data[2 * cols + 0] * data[0 * cols + 2]); + results(1, 2) = (1. / det) * (data[0 * cols + 2] * data[1 * cols + 0] - data[1 * cols + 2] * data[0 * cols + 0]); + + results(2, 0) = (1. / det) * (data[1 * cols + 0] * data[2 * cols + 1] - data[2 * cols + 0] * data[1 * cols + 1]); + results(2, 1) = (1. / det) * (data[0 * cols + 1] * data[2 * cols + 0] - data[2 * cols + 1] * data[0 * cols + 0]); + results(2, 2) = (1. / det) * (data[0 * cols + 0] * data[1 * cols + 1] - data[1 * cols + 0] * data[0 * cols + 1]); + return results; +} + +template <class T, int rows, int cols> +tVector<T, rows> tMatrix<T, rows, cols>::operator*(tVector<T, cols> rhs) +{ + tVector<T, rows> results; + for (auto i = 0; i < rows; ++i) + for (auto j = 0; j < cols; ++j) + results(i) += data[i * cols + j] * rhs(j); + return results; +} + +template <class T, int rows, int cols> +void tMatrix<T, rows, cols>::print() +{ + for (auto i = 0; i < rows; ++i) + { + for (auto j = 0; j < cols; ++j) + std::cout << data[i * cols + j] << " "; + std::cout << std::endl; + } +} + +template <class T, int rows> +class tVector +{ +public: + tVector() + { + for (auto i = 0; i < rows; ++i) + data[i] = (T)0; + } + T &operator()(int row); + tVector operator+(tVector rhs); + void operator+=(tVector rhs); + T dotproduct(tVector rhs); + template <class U> + typename Sacado::Promote<T, U>::type dotproduct(tVector<U, rows> rhs); + tMatrix<T, rows, rows> ddotproduct(tVector rhs); + void print(); + void clean() + { + for (auto i = 0; i < rows; ++i) + data[i] = (T)0; + } + +private: + T data[rows]; + int numRows = rows; + int getRows() { return numRows; } +}; + +template <class T, int rows> +T &tVector<T, rows>::operator()(int row) +{ + return data[row]; +} + +template <class T, int rows> +tVector<T, rows> tVector<T, rows>::operator+(tVector<T, rows> rhs) +{ + tVector<T, rows> results; + for (auto i = 0; i < rows; ++i) + results(i) = data[i] + rhs(i); + return results; +} + +template <class T, int rows> +void tVector<T, rows>::operator+=(tVector<T, rows> rhs) +{ + for (auto i = 0; i < rows; ++i) + data[i] += rhs(i); +} + +template <class T, int rows> +T tVector<T, rows>::dotproduct(tVector<T, rows> rhs) +{ + T result = (T)0; + for (auto i = 0; i < rows; ++i) + result += data[i] * rhs(i); + return result; +} + +template <class T, int rows> +template <class U> +typename Sacado::Promote<T, U>::type tVector<T, rows>::dotproduct(tVector<U, rows> rhs) +{ + typename Sacado::Promote<T, U>::type result = 0; + for (auto i = 0; i < rows; ++i) + result += data[i] * rhs(i); + return result; +} + +template <class T, int rows> +tMatrix<T, rows, rows> tVector<T, rows>::ddotproduct(tVector<T, rows> rhs) +{ + tMatrix<T, rows, rows> results; + for (auto i = 0; i < rows; ++i) + for (auto j = 0; j < rows; ++j) + results(i, j) = data[i] * rhs(j); + return results; +} + +template <class T, int rows> +void tVector<T, rows>::print() +{ + for (auto i = 0; i < rows; ++i) + std::cout << data[i] << std::endl; +} + +#endif //KATOPTRON_TMATRIX_H diff --git a/katoptron/src/wContact.cpp b/katoptron/src/wContact.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b6b7881735234ee35ea23c63d2bfbcd8df2e8b59 --- /dev/null +++ b/katoptron/src/wContact.cpp @@ -0,0 +1,443 @@ +#include "wContact.h" +#include "wProblem.h" +#include "wTag.h" +#include "wElement.h" +#include "wNode.h" +#include <algorithm> + +#include <fstream> +#include <sstream> +#include <string> + +using namespace katoptron; +using namespace tbox; + +bool searchCode(char const *code, char const *line) +{ + return !(strncmp(code, line, strlen(code))); +} + +bool searchCode(char const *code, std::string const line) +{ + return !(strncmp(code, line.c_str(), strlen(code))); +} + +bool searchCode(std::string const code, std::string const line) +{ + return line.find(code) != std::string::npos; +} + +void readGMSH(std::string const &file_name, std::string const &name, std::vector<int> &nodes) +{ + std::cout << file_name << ": start " << std::endl; + std::vector<int> nodes_tmp; + std::ifstream infile(file_name); + int tag = 0; + std::string line; + bool reading_physical_names = false; + while (std::getline(infile, line)) + { + if (reading_physical_names) + { + if (searchCode("$EndPhysicalNames", line)) + break; + + if (searchCode(name, line)) + { + std::istringstream line_stream(line); + int dim = 0, no = 0; + line_stream >> dim >> no; + tag = no; + std::cout << "tag: " << tag << std::endl; + reading_physical_names = false; + } + } + else if (searchCode("$Elements", line)) + { + std::getline(infile, line); + std::istringstream line_stream(line); + // read number of elements + int nbelm = 0; + + line_stream >> nbelm; + + for (int i = 0; i < nbelm; ++i) + { + std::getline(infile, line); + std::istringstream line_stream(line); + + // read number, type and nb of tags + int no = 0, type = 0, nbtags = 0; + int tmp; + + line_stream >> no >> type >> nbtags; + // read/create/link tags + + bool do_I_continue = true; + for (int j = 0; j < nbtags; ++j) + { + line_stream >> tmp; + if (tag == tmp) + do_I_continue = false; + } + if (do_I_continue) + continue; + + int n = 0; + // read nodes + if (type == static_cast<int>(ElType::HEX8)) // 8-node hexa + n = 8; + else if (type == static_cast<int>(ElType::QUAD4)) // 4-node quad + n = 4; + else if (type == static_cast<int>(ElType::TETRA4)) // 4-node tetra + n = 4; + else if (type == static_cast<int>(ElType::LINE2)) // 2-node line + n = 2; + else if (type == static_cast<int>(ElType::POINT1)) // 1-node point + n = 1; + else if (type == static_cast<int>(ElType::TRI3)) // 3-node triangle + n = 3; + else + { + continue; + } + int nn; + for (int j = 0; j < n; ++j) + { + line_stream >> nn; + nodes_tmp.push_back(nn - 1); + } + } + } + else if (searchCode("$EndElements", line)) + { + std::cout << "nodes_tmp.size(): " << nodes_tmp.size() << std::endl; + if (nodes_tmp.size() > 0) + { + std::sort(nodes_tmp.begin(), nodes_tmp.end()); + + nodes.push_back(nodes_tmp[0]); + + for (auto i = 1; i < nodes_tmp.size(); ++i) + if (nodes_tmp[i] != nodes_tmp[i - 1]) + nodes.push_back(nodes_tmp[i]); + } + std::cout << "nodes.size(): " << nodes.size() << std::endl; + break; + } + else if (searchCode("$PhysicalNames", line)) + { + reading_physical_names = true; + } + } +} + +/** + * @brief Contact constructor + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> no: the ID of the slave surface of the msh, + * <li> _Contact_name: the name of new contact interface (does not have to be a nametag of the msh), + * <li> _slave_normal: the slave normal, + * <li> dg: the initial displacement along the slave normal. + * </ul> + */ +Contact::Contact(katoptron::Problem &pbl, int no, std::string _Contact_name, Eigen::Vector3d _slave_normal, double _dg) : Group(pbl.msh, no), Contact_name(_Contact_name), slave_normal(_slave_normal), dg(_dg) +{ + dg_vector = {dg}; + for (auto e : tag->elems) + slave_elems.push_back(e); +} + +/** + * @brief Contact constructor + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> name: the name of the slave surface of the msh, + * <li> _Contact_name: the name of new contact interface (does not have to be a nametag of the msh), + * <li> _slave_normal: the slave normal, + * <li> dg: the initial displacement along the slave normal. + * </ul> + */ +Contact::Contact(katoptron::Problem &pbl, std::string const &name, std::string _Contact_name, Eigen::Vector3d _slave_normal, double _dg) : Group(pbl.msh, name), Contact_name(_Contact_name), slave_normal(_slave_normal), dg(_dg) +{ + dg_vector = {dg}; + for (auto e : tag->elems) + slave_elems.push_back(e); +} + +/** + * @brief Contact constructor + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> no: the ID of the slave surface of the msh, + * <li> _Contact_name: the name of new contact interface (does not have to be a nametag of the msh), + * <li> _slave_normal: the slave normal, + * <li> _dg: the initial displacement along the slave normal (value can be different for the different samples). + * </ul> + */ +Contact::Contact(katoptron::Problem &pbl, int no, std::string _Contact_name, Eigen::Vector3d _slave_normal, std::vector<double> _dg) : Group(pbl.msh, no), Contact_name(_Contact_name), slave_normal(_slave_normal) +{ + dg = _dg[0]; + dg_vector = _dg; + + for (auto e : tag->elems) + slave_elems.push_back(e); +} + +/** + * @brief Contact constructor + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> name: the name of the slave surface of the msh, + * <li> _Contact_name: the name of new contact interface (does not have to be a nametag of the msh), + * <li> _slave_normal: the slave normal, + * <li> _dg: the initial displacement along the slave normal (value can be different for the different samples). + * </ul> + */ +Contact::Contact(katoptron::Problem &pbl, std::string const &name, std::string _Contact_name, Eigen::Vector3d _slave_normal, std::vector<double> _dg) : Group(pbl.msh, name), Contact_name(_Contact_name), slave_normal(_slave_normal) +{ + dg = _dg[0]; + dg_vector = _dg; + + for (auto e : tag->elems) + slave_elems.push_back(e); +} + +/** + * @brief Set the master surface + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> no: the ID of the master surface of the msh, + * <li> _master_normal: the master normal. + * </ul> + */ +void Contact::setMaster(katoptron::Problem &pbl, int no, Eigen::Vector3d _master_normal) +{ + master_normal = _master_normal; + Group master_group(pbl.msh, no); + Tag *master_tag = master_group.tag; + for (auto e : master_tag->elems) + master_elems.push_back(e); + + pbl.Contacts.push_back(this); +} + +/** + * @brief Set the master surface + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> name: the name of the master surface of the msh, + * <li> _master_normal: the master normal. + * </ul> + */ +void Contact::setMaster(katoptron::Problem &pbl, std::string const &name, Eigen::Vector3d _master_normal) +{ + master_normal = _master_normal; + Group master_group(pbl.msh, name); + Tag *master_tag = master_group.tag; + for (auto e : master_tag->elems) + master_elems.push_back(e); + + pbl.Contacts.push_back(this); +} + +/** + * @brief Set slave boundary (optional) + * + * Arguments: + * <ul> + * <li> file_name: name of the msh file to use, + * <li> name: the name of the slave boundary of the msh. + * </ul> + */ +void Contact::setSlaveBoundary(std::string const &file_name, std::string const &name) +{ + readGMSH(file_name, name, slave_boundary_nodes); + + std::cout << "slave_boundary_nodes.size(): " << slave_boundary_nodes.size() << std::endl; +} + +/** + * @brief Set master boundary (optional) + * + * Arguments: + * <ul> + * <li> file_name: name of the msh file to use, + * <li> name: the name of the master boundary of the msh. + * </ul> + */ +void Contact::setMasterBoundary(std::string const &file_name, std::string const &name) +{ + readGMSH(file_name, name, master_boundary_nodes); + + std::cout << "master_boundary_nodes.size(): " << master_boundary_nodes.size() << std::endl; +} + +/** + * @brief Set slave Dirichlet boundary (optional) + * + * Arguments: + * <ul> + * <li> file_name: name of the msh file to use, + * <li> name: the name of the slave Dirichlet boundary of the msh. + * </ul> + */ +void Contact::setSlaveDirichlet(std::string const &file_name, std::string const &name) +{ + readGMSH(file_name, name, slave_dirichlet_nodes); + + std::cout << "slave_dirichlet_nodes.size(): " << slave_dirichlet_nodes.size() << std::endl; + for (auto i = 0; i < slave_dirichlet_nodes.size(); ++i) + std::cout << slave_dirichlet_nodes[i] << std::endl; +} + +/** + * @brief Set master Dirichlet boundary (optional) + * + * Arguments: + * <ul> + * <li> file_name: name of the msh file to use, + * <li> name: the name of the master Dirichlet boundary of the msh. + * </ul> + */ +void Contact::setMasterDirichlet(std::string const &file_name, std::string const &name) +{ + readGMSH(file_name, name, master_dirichlet_nodes); + + std::cout << "master_dirichlet_nodes.size(): " << master_dirichlet_nodes.size() << std::endl; +} + +/** + * @brief Activate all the Lagrange multipliers associated to + * the current contact interface. + */ +void Contact::setInitialyClosed() +{ + initial_closed = true; +} + +/** + * @brief Inactivate all the Lagrange multipliers associated to + * the current contact interface. + */ +void Contact::setInitialyOpen() +{ + initial_closed = false; +} + +/** + * @brief Specify to the active set strategy that this interface + * should not be updated. + */ +void Contact::setNoUpdate() +{ + no_Update = true; +} + +/** + * @brief Specify to the active set strategy that this interface + * should be updated if required. + */ +void Contact::setUpdate() +{ + no_Update = false; +} + +/** + * @brief Replace this contact interface by a mesh tying interface. + */ +void Contact::setMeshTying() +{ + mesh_tying = true; + sticking = true; + no_Update = true; +} + +/** + * @brief Specify that this interface is sticking. + */ +void Contact::setSticking() +{ + sticking = true; +} + +/** + * @brief Specify that this interface is not sticking (default). + */ +void Contact::setNoSticking() +{ + sticking = false; +} + +/** + * @brief Specify that the discretization of the Lagrange multipliers + * use standard shape functions (default). + */ +void Contact::setStandardShapeFunctions() +{ + standard_shape_functions = true; +} + +/** + * @brief Specify that the discretization of the Lagrange multipliers + * use dual shape functions. + */ +void Contact::setDualShapeFunctions() +{ + standard_shape_functions = false; +} + +/** + * @brief Specify that this interface is a Signorini contact. + */ +void Contact::setSignoriniContact() +{ + is_Signorini = true; +} + +/** + * @brief Specify that this interface is a not Signorini contact (default). + */ +void Contact::setTwoBodyContact() +{ + is_Signorini = false; +} + +/** + * @brief Specify a list of slave nodes where the Lagrange multipliers should + * be initially closed. + */ +void Contact::setInitiallyClosedNodes(std::vector<double> _initially_closed_nodes) +{ + for (auto i = 0; i < _initially_closed_nodes.size(); ++i) + initially_closed_nodes.push_back(((int)_initially_closed_nodes[i])); +} + +/** + * @brief Specify the scale. + */ +void Contact::setScale(double a) +{ + scale = a; +} + +/** + * @brief Display information. + */ +void Contact::write(std::ostream &out) const +{ + out << "Contact interface named ''" << Contact_name << "'' on " << *tag << "\n"; +} \ No newline at end of file diff --git a/katoptron/src/wContact.h b/katoptron/src/wContact.h new file mode 100644 index 0000000000000000000000000000000000000000..97f2ee3e561f3995a2e5210206df4fc683f12ac6 --- /dev/null +++ b/katoptron/src/wContact.h @@ -0,0 +1,84 @@ +#ifndef KATOPTRON_CONTACT_H +#define KATOPTRON_CONTACT_H + +#include "katoptron.h" +#include "wGroup.h" +#include <vector> +#include <string> +#include <Eigen/Dense> + +namespace katoptron +{ + +/** + * @brief Class used to specify in Python the different contact interfaces. + */ +class KATOPTRON_API Contact : public tbox::Group +{ +public: + std::string Contact_name; + std::vector<tbox::Element *> slave_elems; + std::vector<tbox::Element *> master_elems; + + std::vector<int> slave_boundary_nodes; + std::vector<int> master_boundary_nodes; + + std::vector<int> slave_dirichlet_nodes; + std::vector<int> master_dirichlet_nodes; + + std::vector<int> initially_closed_nodes = {}; + + bool initial_closed = true; + bool standard_shape_functions = true; + bool is_Signorini = false; + bool no_Update = false; + bool sticking = false; + bool mesh_tying = false; + + int nb_Lagrange_multipliers = 1; + + Eigen::Vector3d slave_normal; + Eigen::Vector3d master_normal; + + double dg; + + double scale = 1.; + + std::vector<double> dg_vector; + + Contact(Problem &pbl, int no, std::string _Contact_name, Eigen::Vector3d _slave_normal, double dg = 0.); + Contact(Problem &pbl, std::string const &name, std::string _Contact_name, Eigen::Vector3d _slave_normal, double dg = 0.); + Contact(Problem &pbl, int no, std::string _Contact_name, Eigen::Vector3d _slave_normal, std::vector<double> _dg); + Contact(Problem &pbl, std::string const &name, std::string _Contact_name, Eigen::Vector3d _slave_normal, std::vector<double> _dg); + + void setMaster(katoptron::Problem &pbl, int no, Eigen::Vector3d _master_normal); + void setMaster(katoptron::Problem &pbl, std::string const &name, Eigen::Vector3d _master_normal); + + void setSlaveBoundary(std::string const &file_name, std::string const &name); + void setMasterBoundary(std::string const &file_name, std::string const &name); + + void setSlaveDirichlet(std::string const &file_name, std::string const &name); + void setMasterDirichlet(std::string const &file_name, std::string const &name); + + void setInitialyClosed(); + void setInitialyOpen(); + void setNoUpdate(); + void setUpdate(); + void setMeshTying(); + void setSticking(); + void setNoSticking(); + void setStandardShapeFunctions(); + void setDualShapeFunctions(); + void setSignoriniContact(); + void setTwoBodyContact(); + void setInitiallyClosedNodes(std::vector<double> _initially_closed_nodes); + void setScale(double a); + +#ifndef SWIG + virtual void write(std::ostream &out) const; +#endif +}; + +} // namespace katoptron + +#endif //KATOPTRON_CONTACT_H diff --git a/katoptron/src/wDirichlet.cpp b/katoptron/src/wDirichlet.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a9d6c984bcdeec87aeebe524b9c121dd5c802d86 --- /dev/null +++ b/katoptron/src/wDirichlet.cpp @@ -0,0 +1,200 @@ +#include "wDirichlet.h" +#include "wProblem.h" +#include "wTag.h" +#include "wElement.h" +#include "wNode.h" +#include <algorithm> +using namespace katoptron; +using namespace tbox; + +/** + * @brief Dirichlet constructor + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> name: the name of the constrained surface of the msh, + * <li> _BC_name: the name of new Dirichlet BC (does not have to be a nametag of the msh), + * <li> _which_dof: a vector that specify which degree(s) of freedom are constrained, + * <li> _values: a vector that specify the values of the constrained degree(s) of freedom + * if they are constrained (the length of _which_dof and _values must be the same), + * <li> ensemble_size: the ensemble size. + * </ul> + */ +Dirichlet::Dirichlet(katoptron::Problem &pbl, + std::string const &name, + std::string const &_BC_name, + std::vector<int> _which_dof, + std::vector<double> _values, + size_t ensemble_size) : Group(pbl.msh, name), BC_name(_BC_name), which_dof(_which_dof), values(_values) +{ + for (auto e : tag->elems) + for (auto n : e->nodes) + nodes.push_back(n); + + x_values = {}; + y_values = {}; + z_values = {}; + T_values = {}; + for (auto i = 0; i < ensemble_size; ++i) + { + x_values.push_back(values[0]); + y_values.push_back(values[1]); + z_values.push_back(values[2]); + T_values.push_back(values[3]); + } + pbl.duBCs.push_back(this); +} + +/** + * @brief Dirichlet constructor + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> name: the name of the constrained surface of the msh, + * <li> _BC_name: the name of new Dirichlet BC (does not have to be a nametag of the msh), + * <li> x: a int which specify whether the x displacement component is constrained, + * <li> v_x: value of the constrained degree of freedom, + * <li> y: a int which specify whether the y displacement component is constrained, + * <li> v_y: value of the constrained degree of freedom, + * <li> z: a int which specify whether the z displacement component is constrained, + * <li> v_z: value of the constrained degree of freedom, + * <li> T: a int which specify whether the temperature is constrained, + * <li> v_T: value of the constrained degree of freedom, + * <li> ensemble_size: the ensemble size. + * </ul> + */ +Dirichlet::Dirichlet(Problem &pbl, + std::string const &name, + std::string const &_BC_name, + int x, + double v_x, + int y, + double v_y, + int z, + double v_z, + int T, + double v_T, + size_t ensemble_size) : Group(pbl.msh, name), BC_name(_BC_name) +{ + for (auto e : tag->elems) + for (auto n : e->nodes) + nodes.push_back(n); + + which_dof = {}; + which_dof.push_back(x); + which_dof.push_back(y); + which_dof.push_back(z); + which_dof.push_back(T); + + values = {}; + values.push_back(v_x); + values.push_back(v_y); + values.push_back(v_z); + values.push_back(v_T); + + x_values = {}; + y_values = {}; + z_values = {}; + T_values = {}; + for (auto i = 0; i < ensemble_size; ++i) + { + x_values.push_back(v_x); + y_values.push_back(v_y); + z_values.push_back(v_z); + T_values.push_back(v_T); + } + + pbl.duBCs.push_back(this); +} + +/** + * @brief Dirichlet constructor + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> name: the name of the constrained surface of the msh, + * <li> _BC_name: the name of new Dirichlet BC (does not have to be a nametag of the msh), + * <li> x: a int which specify whether the x displacement component is constrained, + * <li> v_x: vector of values of the constrained degree of freedom (one per sample), + * <li> y: a int which specify whether the y displacement component is constrained, + * <li> v_y: vector of values of the constrained degree of freedom (one per sample), + * <li> z: a int which specify whether the z displacement component is constrained, + * <li> v_z: vector of values of the constrained degree of freedom (one per sample), + * <li> T: a int which specify whether the temperature is constrained, + * <li> v_T: vector of values of the constrained degree of freedom (one per sample). + * </ul> + */ +Dirichlet::Dirichlet(Problem &pbl, + std::string const &name, + std::string const &_BC_name, + int x, + std::vector<double> v_x, + int y, + std::vector<double> v_y, + int z, + std::vector<double> v_z, + int T, + std::vector<double> v_T) : Group(pbl.msh, name), BC_name(_BC_name) +{ + for (auto e : tag->elems) + for (auto n : e->nodes) + nodes.push_back(n); + + std::cout << v_x[0] << std::endl; + + which_dof = {}; + which_dof.push_back(x); + which_dof.push_back(y); + which_dof.push_back(z); + which_dof.push_back(T); + + values = {}; + values.push_back(v_x[0]); + values.push_back(v_y[0]); + values.push_back(v_z[0]); + values.push_back(v_T[0]); + + x_values = {}; + y_values = {}; + z_values = {}; + T_values = {}; + for (auto i = 0; i < v_x.size(); ++i) + x_values.push_back(v_x[i]); + + for (auto i = 0; i < v_y.size(); ++i) + y_values.push_back(v_y[i]); + + for (auto i = 0; i < v_z.size(); ++i) + z_values.push_back(v_z[i]); + + for (auto i = 0; i < v_T.size(); ++i) + T_values.push_back(v_T[i]); + + pbl.duBCs.push_back(this); +} + +/** + * @brief Display information. + */ +void Dirichlet::write(std::ostream &out) const +{ + out << "Dirichlet BC on " << *tag << "\n"; + out << "With fixed values of ("; + for (auto i = 0; i < (which_dof.size() - 1); ++i) + { + if (which_dof[i] == 1) + out << values[i] << ", "; + else + out << "-, "; + } + + if (which_dof[which_dof.size() - 1] == 1) + out << values[which_dof.size() - 1] << ")\n"; + else + out << "-)\n"; + + out << "a '-' represents an unconstrained dof.\n"; +} diff --git a/katoptron/src/wDirichlet.h b/katoptron/src/wDirichlet.h new file mode 100644 index 0000000000000000000000000000000000000000..bf20ad029fdc270f00b0910c0908e38c91d3fce5 --- /dev/null +++ b/katoptron/src/wDirichlet.h @@ -0,0 +1,70 @@ +#ifndef KATOPTRON_DIRICHLET_H +#define KATOPTRON_DIRICHLET_H + +#include "katoptron.h" +#include "wGroup.h" +#include <vector> +#include <string> + +#include <Teuchos_RCP.hpp> + +namespace katoptron +{ + +/** + * @brief Class used to specify in Python the different Dirichlet boundary conditions + * (both mechanical and thermal). + */ +class KATOPTRON_API Dirichlet : public tbox::Group +{ +public: + std::string const &BC_name; + std::vector<tbox::Node *> nodes; + std::vector<int> which_dof; + std::vector<double> values; + + std::vector<double> x_values; + std::vector<double> y_values; + std::vector<double> z_values; + std::vector<double> T_values; + + Dirichlet(Problem &pbl, + std::string const &name, + std::string const &_BC_name, + std::vector<int> _which_dof, + std::vector<double> _values, + size_t ensemble_size = 1); + + Dirichlet(Problem &pbl, + std::string const &name, + std::string const &_BC_name, + int x, + double v_x, + int y, + double v_y, + int z, + double v_z, + int T = 0, + double v_T = 0, + size_t ensemble_size = 1); + + Dirichlet(Problem &pbl, + std::string const &name, + std::string const &_BC_name, + int x, + std::vector<double> v_x, + int y, + std::vector<double> v_y, + int z, + std::vector<double> v_z, + int T = 0, + std::vector<double> v_T = {}); + +#ifndef SWIG + virtual void write(std::ostream &out) const; +#endif +}; + +} // namespace katoptron + +#endif //KATOPTRON_DIRICHLET_H diff --git a/katoptron/src/wDisplayHook.cpp b/katoptron/src/wDisplayHook.cpp new file mode 100644 index 0000000000000000000000000000000000000000..40ed53998fcc49f5fa61dbb0491b518cdd44c86c --- /dev/null +++ b/katoptron/src/wDisplayHook.cpp @@ -0,0 +1,25 @@ +#include "wDisplayHook.h" + +DisplayHook::DisplayHook() +{ +} + +void DisplayHook::display(int nt, double t, std::vector<double> &u) +{ + std::cout << "DisplayHook::display()\n"; +} + +void DisplayHook::display(int nt, + double t, + std::vector<double> &u_x, + std::vector<double> &u_y, + std::vector<double> &u_z, + std::vector<double> &u_norm) +{ + std::cout << "DisplayHook::display()\n"; +} + +void DisplayHook::refresh() +{ + std::cout << "DisplayHook::refresh()\n"; +} diff --git a/katoptron/src/wDisplayHook.h b/katoptron/src/wDisplayHook.h new file mode 100644 index 0000000000000000000000000000000000000000..623d746b9cd45e577d19931436a898bca8bb68db --- /dev/null +++ b/katoptron/src/wDisplayHook.h @@ -0,0 +1,22 @@ +#ifndef KATOPTRON_DISPLAYHOOK_H +#define KATOPTRON_DISPLAYHOOK_H + +#include "katoptron.h" +#include "wObject.h" +#include <vector> + +class KATOPTRON_API DisplayHook : public fwk::wObject +{ +public: + DisplayHook(); + virtual void display(int nt, double t, std::vector<double> &u); + virtual void display(int nt, + double t, + std::vector<double> &u_x, + std::vector<double> &u_y, + std::vector<double> &u_z, + std::vector<double> &u_norm); + virtual void refresh(); +}; + +#endif //KATOPTRON_DISPLAYHOOK_H diff --git a/katoptron/src/wMedium.cpp b/katoptron/src/wMedium.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e39d8fd31991a6fe0fe729ca93febfb5bc545921 --- /dev/null +++ b/katoptron/src/wMedium.cpp @@ -0,0 +1,150 @@ +#include "wMedium.h" +#include "wProblem.h" +#include "wTag.h" +using namespace katoptron; +using namespace tbox; + +/** + * @brief Medium constructor + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> no: the ID of the body of the msh, + * <li> _medium_name: the name of new medium (does not have to be a nametag of the msh), + * <li> _E: a vector of values of the Young modulus \f$E\f$ (one per sample), + * <li> _nu: a vector of values of the Poisson coefficients \f$\nu\f$ (one per sample), + * <li> _k: the heat conductivity \f$k\f$ equal to zero by default, + * <li> _beta: the coefficient of thermal expansion \f$\beta\f$ equal to zero by default. + * </ul> + */ +Medium::Medium(Problem &pbl, + int no, + std::string _medium_name, + std::vector<double> _E, + std::vector<double> _nu, + std::vector<double> _k, + std::vector<double> _beta) : Group(pbl.msh, no), medium_name(_medium_name) +{ + E = _E[0]; + nu = _nu[0]; + k = _k[0]; + beta = _beta[0]; + E_vector = _E; + nu_vector = _nu; + k_vector = _k; + beta_vector = _beta; + pbl.media.push_back(this); +} + +/** + * @brief Medium constructor + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> name: the name of the body of the msh, + * <li> _medium_name: the name of new medium (does not have to be a nametag of the msh), + * <li> _E: a vector of values of the Young modulus \f$E\f$ (one per sample), + * <li> _nu: a vector of values of the Poisson coefficients \f$\nu\f$ (one per sample), + * <li> _k: the heat conductivity \f$k\f$ equal to zero by default, + * <li> _beta: the coefficient of thermal expansion \f$\beta\f$ equal to zero by default. + * </ul> + */ +Medium::Medium(Problem &pbl, + std::string const &name, + std::string _medium_name, + std::vector<double> _E, + std::vector<double> _nu, + std::vector<double> _k, + std::vector<double> _beta) : Group(pbl.msh, name), medium_name(_medium_name) +{ + E = _E[0]; + nu = _nu[0]; + k = _k[0]; + beta = _beta[0]; + E_vector = _E; + nu_vector = _nu; + k_vector = _k; + beta_vector = _beta; + pbl.media.push_back(this); +} + +/** + * @brief Medium constructor + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> no: the ID of the body of the msh, + * <li> _medium_name: the name of new medium (does not have to be a nametag of the msh), + * <li> _E: a vector of values of the Young modulus \f$E\f$ (one per sample), + * <li> _nu: a vector of values of the Poisson coefficients \f$\nu\f$ (one per sample), + * <li> _k: a vector of values of the heat conductivity \f$k\f$ (one per sample), + * <li> _beta: a vector of values of the coefficient of thermal expansion \f$\beta\f$ (one per sample). + * </ul> + */ +Medium::Medium(Problem &pbl, + int no, + std::string _medium_name, + std::vector<double> _E, + std::vector<double> _nu, + double _k, + double _beta) : Group(pbl.msh, no), medium_name(_medium_name) +{ + E = _E[0]; + nu = _nu[0]; + k = _k; + beta = _beta; + E_vector = _E; + nu_vector = _nu; + std::vector<double> vect_k(E_vector.size(), _k); + k_vector = vect_k; + std::vector<double> vect_beta(E_vector.size(), _beta); + beta_vector = vect_beta; + pbl.media.push_back(this); +} + +/** + * @brief Medium constructor + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> name: the name of the body of the msh, + * <li> _medium_name: the name of new medium (does not have to be a nametag of the msh), + * <li> _E: a vector of values of the Young modulus \f$E\f$ (one per sample), + * <li> _nu: a vector of values of the Poisson coefficients \f$\nu\f$ (one per sample), + * <li> _k: a vector of values of the heat conductivity \f$k\f$ (one per sample), + * <li> _beta: a vector of values of the coefficient of thermal expansion \f$\beta\f$ (one per sample). + * </ul> + */ +Medium::Medium(Problem &pbl, + std::string const &name, + std::string _medium_name, + std::vector<double> _E, + std::vector<double> _nu, + double _k, + double _beta) : Group(pbl.msh, name), medium_name(_medium_name) +{ + E = _E[0]; + nu = _nu[0]; + k = _k; + beta = _beta; + E_vector = _E; + nu_vector = _nu; + std::vector<double> vect_k(E_vector.size(), _k); + k_vector = vect_k; + std::vector<double> vect_beta(E_vector.size(), _beta); + beta_vector = vect_beta; + pbl.media.push_back(this); +} + +/** + * @brief Display information. + */ +void Medium::write(std::ostream &out) const +{ + out << "Medium " << medium_name << " on " << *tag << " with E=" << this->E + << ", nu=" << this->nu << ", k=" << this->k << " and beta=" << this->beta; +} diff --git a/katoptron/src/wMedium.h b/katoptron/src/wMedium.h new file mode 100644 index 0000000000000000000000000000000000000000..ec41f8fa590f9f3787f4446985a8565402ee18eb --- /dev/null +++ b/katoptron/src/wMedium.h @@ -0,0 +1,67 @@ +#ifndef KATOPTRON_MEDIUM_H +#define KATOPTRON_MEDIUM_H + +#include "katoptron.h" +#include "wGroup.h" +#include <string> +#include <vector> + +namespace katoptron +{ + +/** + * @brief Class used to specify in Python the different media. + */ +class KATOPTRON_API Medium : public tbox::Group +{ +public: + std::string medium_name; + double E; + double nu; + double k; + double beta; + std::vector<double> E_vector; + std::vector<double> nu_vector; + std::vector<double> k_vector; + std::vector<double> beta_vector; + + Medium(Problem &pbl, + int no, + std::string _medium_name, + std::vector<double> _E, + std::vector<double> _nu, + double _k = 0., + double _beta = 0.); + + Medium(Problem &pbl, + std::string const &name, + std::string _medium_name, + std::vector<double> _E, + std::vector<double> _nu, + double _k = 0., + double _beta = 0.); + + Medium(Problem &pbl, + int no, + std::string _medium_name, + std::vector<double> _E, + std::vector<double> _nu, + std::vector<double> _k, + std::vector<double> _beta); + + Medium(Problem &pbl, + std::string const &name, + std::string _medium_name, + std::vector<double> _E, + std::vector<double> _nu, + std::vector<double> _k, + std::vector<double> _beta); + +#ifndef SWIG + virtual void write(std::ostream &out) const; +#endif +}; + +} // namespace katoptron + +#endif //KATOPTRON_MEDIUM_H diff --git a/katoptron/src/wNeumann.cpp b/katoptron/src/wNeumann.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7673235ae29144da7200e77053e54775c00bf0bc --- /dev/null +++ b/katoptron/src/wNeumann.cpp @@ -0,0 +1,109 @@ +#include "wNeumann.h" +#include "wProblem.h" +#include "wTag.h" +#include "wElement.h" +#include "wNode.h" +#include <algorithm> +using namespace katoptron; +using namespace tbox; + +/** + * @brief Neumann constructor + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> name: the name of the loaded surface of the msh, + * <li> _BC_name: the name of new Neumann BC (does not have to be a nametag of the msh), + * <li> _which_dof: a vector that specify which degree(s) of freedom are loaded, + * <li> _values: a vector that specify the values of the loads. + * </ul> + */ +Neumann::Neumann(katoptron::Problem &pbl, + std::string const &name, + std::string const &_BC_name, + std::vector<int> _which_dof, + std::vector<double> _values) : Group(pbl.msh, name), BC_name(_BC_name), which_dof(_which_dof), values(_values) +{ + for (auto e : tag->elems) + for (auto n : e->nodes) + nodes.push_back(n); + + pbl.nBCs.push_back(this); +} + +/** + * @brief Neumann constructor + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> name: the name of the loaded surface of the msh, + * <li> _BC_name: the name of new Neumann BC (does not have to be a nametag of the msh), + * <li> x: a int which specify whether the x displacement component is loaded, + * <li> v_x: value of the load, + * <li> y: a int which specify whether the y displacement component is loaded, + * <li> v_y: value of the load, + * <li> z: a int which specify whether the z displacement component is loaded, + * <li> v_z: value of the load, + * <li> T: a int which specify whether the temperature is loaded, + * <li> v_T: value of the load, + * <li> ensemble_size: the ensemble size. + * </ul> + */ +Neumann::Neumann(Problem &pbl, + std::string const &name, + std::string const &_BC_name, + int x, + std::vector<double> v_x, + int y, + std::vector<double> v_y, + int z, + std::vector<double> v_z, + int T, + std::vector<double> v_T, + size_t ensemble_size) : Group(pbl.msh, name), BC_name(_BC_name) +{ + for (auto e : tag->elems) + for (auto n : e->nodes) + nodes.push_back(n); + + which_dof = {}; + which_dof.push_back(x); + which_dof.push_back(y); + which_dof.push_back(z); + which_dof.push_back(T); + + values = {}; + for (auto i = 0; i < ensemble_size; ++i) + values.push_back(v_x[i]); + for (auto i = 0; i < ensemble_size; ++i) + values.push_back(v_y[i]); + for (auto i = 0; i < ensemble_size; ++i) + values.push_back(v_z[i]); + for (auto i = 0; i < ensemble_size; ++i) + values.push_back(v_T[i]); + + pbl.nBCs.push_back(this); +} + +/** + * @brief Display information. + */ +void Neumann::write(std::ostream &out) const +{ + out << "Neumann BC on " << *tag << "\n"; + out << "With applied load of ("; + for (auto i = 0; i < (which_dof.size() - 1); ++i) + { + if (which_dof[i] == 1) + out << values[i] << ", "; + else + out << "0, "; + } + + if (which_dof[which_dof.size() - 1] == 1) + out << values[which_dof.size() - 1] << ")\n"; + else + out << "0)\n"; +} diff --git a/katoptron/src/wNeumann.h b/katoptron/src/wNeumann.h new file mode 100644 index 0000000000000000000000000000000000000000..7b7af949ab3beb11b45227bc1c86c30d00072763 --- /dev/null +++ b/katoptron/src/wNeumann.h @@ -0,0 +1,50 @@ +#ifndef KATOPTRON_NEUMANN_H +#define KATOPTRON_NEUMANN_H + +#include "katoptron.h" +#include "wGroup.h" +#include <vector> +#include <string> + +namespace katoptron +{ + +/** + * @brief Class used to specify in Python the different Neumann boundary conditions + * (both mechanical and thermal). + */ +class KATOPTRON_API Neumann : public tbox::Group +{ +public: + std::string const &BC_name; + std::vector<tbox::Node *> nodes; + std::vector<int> which_dof; + std::vector<double> values; + + Neumann(Problem &pbl, + std::string const &name, + std::string const &_BC_name, + std::vector<int> _which_dof, + std::vector<double> _values); + + Neumann(Problem &pbl, + std::string const &name, + std::string const &_BC_name, + int x, + std::vector<double> v_x, + int y, + std::vector<double> v_y, + int z, + std::vector<double> v_z, + int T, + std::vector<double> v_T, + size_t ensemble_size); + +#ifndef SWIG + virtual void write(std::ostream &out) const; +#endif +}; + +} // namespace katoptron + +#endif //KATOPTRON_NEUMANN_H diff --git a/katoptron/src/wProblem.cpp b/katoptron/src/wProblem.cpp new file mode 100644 index 0000000000000000000000000000000000000000..420d77313ea3380b6fb286765c987ae2d0282855 --- /dev/null +++ b/katoptron/src/wProblem.cpp @@ -0,0 +1,49 @@ +#include "wProblem.h" +#include "wMshData.h" + +#include "wDirichlet.h" +#include "wNeumann.h" +#include "wSource.h" +using namespace katoptron; +using namespace tbox; + +/** + * @brief Problem constructor + * + * Arguments: + * <ul> + * <li> _msh: a shared pointer to the mesh, + * <li> _comm: the used MPI communicator. + * </ul> + */ +Problem::Problem(std::shared_ptr<MshData> _msh, MPI_Comm _comm) : msh(_msh), comm(_comm) +{ +} + +/** + * @brief Add a random variable. + */ +void Problem::add(std::shared_ptr<RandomVariable> r) +{ + RandomVariables.push_back(r); +} + +/** + * @brief Display information. + */ +void Problem::write(std::ostream &out) const +{ + out << "katoptron::Problem:\n"; + out << " + mesh:\n"; + out << *msh; //wMshData.h + + out << " + dBC:\n"; + for (auto b : duBCs) + out << *b << '\n'; + out << " + nBC:\n"; + for (auto b : nBCs) + out << *b << '\n'; + out << " + Source:\n"; + for (auto b : Sources) + out << *b << '\n'; +} \ No newline at end of file diff --git a/katoptron/src/wProblem.h b/katoptron/src/wProblem.h new file mode 100644 index 0000000000000000000000000000000000000000..9fd940b3da9ab7cdcbb763405f6e297dbc8b95f0 --- /dev/null +++ b/katoptron/src/wProblem.h @@ -0,0 +1,45 @@ +#ifndef KATOPTRON_PROBLEM_H +#define KATOPTRON_PROBLEM_H + +#include "katoptron.h" +#include "wObject.h" +#include <iostream> +#include <vector> +#include <string> +#include <memory> + +#include <mpi.h> + +namespace katoptron +{ + +/** + * @brief Class which is used to specify in Python the thermomechanical to solve. + */ +class KATOPTRON_API Problem : public fwk::wSharedObject +{ +public: + std::shared_ptr<tbox::MshData> msh; ///< Mesh structure + + MPI_Comm comm; +#ifndef SWIG + std::vector<Medium *> media = {}; ///< Materials + std::vector<Dirichlet *> duBCs = {}; ///< mechanical Dirichlet boundary conditions + std::vector<Neumann *> nBCs = {}; + std::vector<Contact *> Contacts = {}; + std::vector<Source *> Sources = {}; + std::vector<std::shared_ptr<RandomVariable>> RandomVariables = {}; + std::vector<Weight *> Weights = {}; +#endif + Problem(std::shared_ptr<tbox::MshData> _msh, MPI_Comm _comm); + ~Problem() { std::cout << "~Problem()\n"; } + + void add(std::shared_ptr<RandomVariable> r); +#ifndef SWIG + virtual void write(std::ostream &out) const; +#endif +}; + +} // namespace katoptron + +#endif //KATOPTRON_PROBLEM_H diff --git a/katoptron/src/wRandomField.h b/katoptron/src/wRandomField.h new file mode 100644 index 0000000000000000000000000000000000000000..cfa85ee2d0fbae1117dc8a8fc8154ba9cd6f1771 --- /dev/null +++ b/katoptron/src/wRandomField.h @@ -0,0 +1,177 @@ +#ifndef KATOPTRON_RANDOMFIELD_H +#define KATOPTRON_RANDOMFIELD_H + +#include "Stokhos_Sacado_Kokkos_MP_Vector.hpp" +#include "Stokhos_KL_ExponentialRandomField.hpp" +#include "EnsembleTraits.h" +#include "wSpectralApproach.h" + +template <typename Scalar, typename Device> +class RandomField +{ +public: + typedef Kokkos::View<Scalar *, Kokkos::LayoutLeft, Device> RandomVariableView; + typedef typename RandomVariableView::size_type size_type; + + typedef typename Teuchos::ScalarTraits<Scalar>::coordinateType MeshScalar; + typedef Stokhos::KL::ExponentialRandomField<MeshScalar, Device> rf_type; + typedef Teuchos::ScalarTraits<MeshScalar> MST; + typedef typename EnsembleTraits<Scalar>::value_type mean_type; + + bool isRandom = false; + bool isExpRandom = true; + rf_type m_rf; // Exponential random field + RandomVariableView m_rv; // KL random variables + mean_type g; // Mean + mean_type delta; // Dispersion level + mean_type a, b; + int num_rv; + int ndim = 3; // Dimension of the physical domain + Teuchos::RCP<SpectralApproach<Scalar, Device>> sa; + + RandomField(Teuchos::RCP<Teuchos::ParameterList> randomParams, Kokkos::View<Scalar *, Kokkos::LayoutLeft, Device> _m_rv) + { + isRandom = randomParams->get("Is random", false); + if (isRandom) + { + g = randomParams->get("Mean", MST::one()); + delta = randomParams->get("Dispersion level", MST::zero()); + a = log(g / (sqrt(1 + delta * delta))); + b = sqrt(log(1 + delta * delta)); + + isExpRandom = randomParams->get("Is exp", true); + if (isExpRandom) + { + const MeshScalar BeginX = randomParams->get("Begin X", MST::zero()); + const MeshScalar BeginY = randomParams->get("Begin Y", MST::zero()); + const MeshScalar BeginZ = randomParams->get("Begin Z", MST::zero()); + const MeshScalar EndX = randomParams->get("End X", MST::one()); + const MeshScalar EndY = randomParams->get("End Y", MST::one()); + const MeshScalar EndZ = randomParams->get("End Z", MST::one()); + num_rv = randomParams->get("Number random variables", 0); + const MeshScalar correlation_lengthX = randomParams->get("Correlation length X", MST::one()); + const MeshScalar correlation_lengthY = randomParams->get("Correlation length Y", MST::one()); + const MeshScalar correlation_lengthZ = randomParams->get("Correlation length Z", MST::one()); + + if (correlation_lengthZ == 0) + ndim = 2; + + const int num_KL_X = randomParams->get("Number of KL Terms X", 0); + const int num_KL_Y = randomParams->get("Number of KL Terms Y", 0); + const int num_KL_Z = randomParams->get("Number of KL Terms Z", 0); + + mean_type eps = randomParams->get("Bound Perturbation Size", 1e-6); + mean_type tol = randomParams->get("Nonlinear Solver Tolerance", 1e-10); + int max_it = randomParams->get("Maximum Nonlinear Solver Iterations", 100); + + Teuchos::ParameterList solverParams; + solverParams.set("Number of KL Terms", num_rv); + solverParams.set("Mean", MST::zero()); + solverParams.set("Standard Deviation", MST::one()); + solverParams.set("Bound Perturbation Size", eps); + solverParams.set("Nonlinear Solver Tolerance", tol); + solverParams.set("Maximum Nonlinear Solver Iterations", max_it); + Teuchos::Array<MeshScalar> domain_upper(ndim, 1.0), + domain_lower(ndim, 0.0), + correlation_lengths(ndim, correlation_lengthX); + Teuchos::Array<int> num_KL_per_dim(ndim, 1.0); + + domain_upper[0] = EndX; + domain_upper[1] = EndY; + if (ndim == 3) + domain_upper[2] = EndZ; + + domain_lower[0] = BeginX; + domain_lower[1] = BeginY; + if (ndim == 3) + domain_lower[2] = BeginZ; + + correlation_lengths[0] = correlation_lengthX; + correlation_lengths[1] = correlation_lengthY; + if (ndim == 3) + correlation_lengths[2] = correlation_lengthZ; + + if (num_KL_X != 0 && num_KL_Y != 0 && num_KL_Z != 0) + { + num_KL_per_dim[0] = num_KL_X; + num_KL_per_dim[1] = num_KL_Y; + if (ndim == 3) + num_KL_per_dim[2] = num_KL_Z; + solverParams.set("Number of KL Terms per dimension", num_KL_per_dim); + } + + solverParams.set("Domain Upper Bounds", domain_upper); + solverParams.set("Domain Lower Bounds", domain_lower); + solverParams.set("Correlation Lengths", correlation_lengths); + + m_rf = rf_type(solverParams); + m_rv = _m_rv; + + std::ofstream outputfile_solverParams; + std::ofstream outputfile_m_rv; + + outputfile_solverParams.open("RandomFieldParams.txt"); + outputfile_m_rv.open("RandomVariables.txt"); + + outputfile_solverParams << solverParams << std::endl; + + for (size_t i = 0; i < m_rv.extent(0); ++i) + outputfile_m_rv << m_rv(i) << std::endl; + + outputfile_solverParams.close(); + outputfile_m_rv.close(); + } + else + { + MeshScalar a = randomParams->get("Correlation length", MST::one()); + MeshScalar r = randomParams->get("Wavenumber cutoff", MST::one()); + size_t muw = randomParams->get("Wavenumber discretization points", 40); + bool gauss = randomParams->get("Gaussian field", true); + + unsigned long seed_Z = randomParams->get("Z seed", 42); + unsigned long seed_Phi = randomParams->get("Phi seed", 186); + + size_t wait_Z = randomParams->get("Number Z of previously drawn samples", 0); + size_t wait_Phi = randomParams->get("Number Phi of previously drawn samples", 0); + + Kokkos::View<Scalar **, Kokkos::LayoutLeft, Device> Z; + Kokkos::View<Scalar **, Kokkos::LayoutLeft, Device> Phi; + + Z = construct_Z<Scalar, Device>(muw, seed_Z, wait_Z); + Phi = construct_Phi<Scalar, Device>(muw, seed_Phi, wait_Phi); + + sa = Teuchos::rcp(new SpectralApproach<Scalar, Device>(Z, Phi, a, r, muw, gauss)); + } + } + } + + KOKKOS_INLINE_FUNCTION + Scalar operator()(const MeshScalar x, const MeshScalar y, const MeshScalar z) const + { + if (isRandom) + { + Scalar Xi = 0.; + if (isExpRandom) + { + if (ndim == 3) + { + const MeshScalar point[3] = {x, y, z}; + Xi = m_rf.evaluate(point, m_rv); + } + else + { + const MeshScalar point[2] = {x, y}; + Xi = m_rf.evaluate(point, m_rv); + } + } + else + Xi = sa->operator()(x, y); + + return exp(a + b * Xi); + } + else + return Teuchos::ScalarTraits<Scalar>::one(); + } +}; + +#endif //KATOPTRON_RANDOMFIELD_H diff --git a/katoptron/src/wRandomVariable.h b/katoptron/src/wRandomVariable.h new file mode 100644 index 0000000000000000000000000000000000000000..5c73febdc8a4c5afe30042995604b8eb8b4493d7 --- /dev/null +++ b/katoptron/src/wRandomVariable.h @@ -0,0 +1,25 @@ +#ifndef KATOPTRON_RANDOMVARIABLE_H +#define KATOPTRON_RANDOMVARIABLE_H + +#include "katoptron.h" +#include <vector> + +namespace katoptron +{ + +/** + * @brief Class containing the realisations of the random Gaussian variables. + */ +class KATOPTRON_API RandomVariable +{ +public: + std::vector<double> values; + size_t sizex; + size_t sizey; + double *arr; + + RandomVariable(std::vector<double> const &_values) : values(_values){}; +}; +} // namespace katoptron + +#endif //KATOPTRON_RANDOMVARIABLE_H diff --git a/katoptron/src/wSource.cpp b/katoptron/src/wSource.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7b2d35b99f72ecaae5f80875166dc5d7ea9f9eba --- /dev/null +++ b/katoptron/src/wSource.cpp @@ -0,0 +1,40 @@ +#include "wSource.h" +#include "wProblem.h" +#include "wTag.h" +#include "wElement.h" +#include "wNode.h" +#include <algorithm> +using namespace katoptron; +using namespace tbox; + +/** + * @brief Source constructor + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> name: the name of the constrained surface of the msh, + * <li> _Source_name: the name of new Source (does not have to be a nametag of the msh), + * <li> v_T: value of the volumetric heat source. + * </ul> + */ +Source::Source(Problem &pbl, + std::string const &name, + std::string const &_Source_name, + double v_T) : Group(pbl.msh, name), Source_name(_Source_name), value(v_T) +{ + for (auto e : tag->elems) + for (auto n : e->nodes) + nodes.push_back(n); + + pbl.Sources.push_back(this); +} + +/** + * @brief Display information. + */ +void Source::write(std::ostream &out) const +{ + out << "Source on " << *tag << "\n"; + out << "Value " << value << "\n"; +} diff --git a/katoptron/src/wSource.h b/katoptron/src/wSource.h new file mode 100644 index 0000000000000000000000000000000000000000..11f74950399b2d9cd9eb677e81a41d0ce71d5d0e --- /dev/null +++ b/katoptron/src/wSource.h @@ -0,0 +1,33 @@ +#ifndef KATOPTRON_SOURCE_H +#define KATOPTRON_SOURCE_H + +#include "katoptron.h" +#include "wGroup.h" +#include <vector> +#include <string> + +namespace katoptron +{ + +/** + * @brief Class used to specify in Python the different volumetric heat sources. + */ +class KATOPTRON_API Source : public tbox::Group +{ +public: + std::string const &Source_name; + std::vector<tbox::Node *> nodes; + double value; + + Source(Problem &pbl, + std::string const &name, + std::string const &_Source_name, + double v_T); +#ifndef SWIG + virtual void write(std::ostream &out) const; +#endif +}; + +} // namespace katoptron + +#endif //KATOPTRON_SOURCE_H diff --git a/katoptron/src/wSpectralApproach.h b/katoptron/src/wSpectralApproach.h new file mode 100644 index 0000000000000000000000000000000000000000..d52e70beadea2b0ea7c63a3a6ac4901afd4bde53 --- /dev/null +++ b/katoptron/src/wSpectralApproach.h @@ -0,0 +1,115 @@ +#ifndef KATOPTRON_SPECTRALAPPROACH_H +#define KATOPTRON_SPECTRALAPPROACH_H + +#include "EnsembleTraits.h" +#include <cmath> +#include <random> + +/** + * @brief A function which computes a random matrix \f$\boldsymbol{Z}\f$ starting at a given seed. + * + * This matrix is used to generate a random field based on the spectral approach + */ +template <typename Scalar, typename Device> +Kokkos::View<Scalar **, Kokkos::LayoutLeft, Device> construct_Z(size_t muw, unsigned long seed_Z, size_t wait = 0) +{ + Kokkos::View<Scalar **, Kokkos::LayoutLeft, Device> Z = Kokkos::View<Scalar **, Kokkos::LayoutLeft, Device>("Z", muw, muw); + + std::default_random_engine generator; + generator.seed(seed_Z); + std::uniform_real_distribution<double> distribution(0.0, 1.0); + // Redraw the data related to the previous samples to start at the good place + for (size_t i = 0; i < wait; ++i) + distribution(generator); + + for (size_t ell = 0; ell < EnsembleTraits<Scalar>::size; ++ell) + for (size_t i = 0; i < muw; ++i) + for (size_t j = 0; j < muw; ++j) + EnsembleTraits<Scalar>::coeff(Z(i, j), ell) = sqrt(-log(distribution(generator))); + + return Z; +} + +/** + * @brief A function which computes a random matrix \f$\boldsymbol{\Phi}\f$ starting at a given seed. + * + * This matrix is used to generate a random field based on the spectral approach + */ +template <typename Scalar, typename Device> +Kokkos::View<Scalar **, Kokkos::LayoutLeft, Device> construct_Phi(size_t muw, unsigned long seed_Phi, size_t wait = 0) +{ + Kokkos::View<Scalar **, Kokkos::LayoutLeft, Device> Phi = Kokkos::View<Scalar **, Kokkos::LayoutLeft, Device>("Phi", muw, muw); + + std::default_random_engine generator; + generator.seed(seed_Phi); + std::uniform_real_distribution<double> distribution(0.0, 1.0); + // Redraw the data related to the previous samples to start at the good place + for (size_t i = 0; i < wait; ++i) + distribution(generator); + + for (size_t ell = 0; ell < EnsembleTraits<Scalar>::size; ++ell) + for (size_t i = 0; i < muw; ++i) + for (size_t j = 0; j < muw; ++j) + EnsembleTraits<Scalar>::coeff(Phi(i, j), ell) = 2. * M_PI * distribution(generator); + + return Phi; +} + +/** + * @brief A class that constructs realization(s) of Gaussian or exponential + * scalar random field based on the spectral approach. + */ +template <typename Scalar, typename Device> +class SpectralApproach +{ +public: + typedef typename Teuchos::ScalarTraits<Scalar>::coordinateType MeshScalar; + + Kokkos::View<Scalar **, Kokkos::LayoutLeft, Device> Z; // Z=sqrt(-log(rand(muw,muw))); + Kokkos::View<Scalar **, Kokkos::LayoutLeft, Device> Phi; // Phi=2*pi*rand(muw,muw); + Kokkos::View<MeshScalar *, Kokkos::LayoutLeft, Device> w; + Kokkos::View<MeshScalar *, Kokkos::LayoutLeft, Device> S; + + MeshScalar a, r, Dw; + size_t muw; + + SpectralApproach(Kokkos::View<Scalar **, Kokkos::LayoutLeft, Device> _Z, + Kokkos::View<Scalar **, Kokkos::LayoutLeft, Device> _Phi, + MeshScalar _a = 20, MeshScalar _r = 8, size_t _muw = 512, + bool Gaussian = true) : Z(_Z), Phi(_Phi), a(_a), r(_r), muw(_muw) + { + MeshScalar wL = M_PI / a * r; + Dw = 2 * wL / muw; + + w = Kokkos::View<MeshScalar *, Kokkos::LayoutLeft, Device>("w", muw); + S = Kokkos::View<MeshScalar *, Kokkos::LayoutLeft, Device>("w", muw); + + for (size_t i = 0; i < muw; ++i) + w(i) = -wL + (i + 0.5) * Dw; + + if (Gaussian) + for (size_t i = 0; i < muw; ++i) + S(i) = a / sqrt(2. * M_PI) * exp(-pow(a * w(i), 2) / 2.); + else + for (size_t i = 0; i < muw; ++i) + S(i) = a / (M_PI * (1 + pow(a, 2) * pow(w(i), 2))); + } + + KOKKOS_INLINE_FUNCTION + Scalar operator()(const MeshScalar x, const MeshScalar y) const + { + //Teuchos::TimeMonitor LocalTimer (*Random_field_eval); + + Scalar output = 0.; + + for (size_t i = 0; i < muw; ++i) + for (size_t j = 0; j < muw; ++j) + output += sqrt(S(i) * S(j)) * Z(i, j) * cos(Phi(i, j) + w(i) * x + w(j) * y); + + output *= sqrt(2) * Dw; + + return output; + } +}; + +#endif //KATOPTRON_SPECTRALAPPROACH_H diff --git a/katoptron/src/wVtkExport_KIM2CLEAN.cpp b/katoptron/src/wVtkExport_KIM2CLEAN.cpp new file mode 100644 index 0000000000000000000000000000000000000000..dcba910be8fa9c39272389c269ecc0bcd7e89152 --- /dev/null +++ b/katoptron/src/wVtkExport_KIM2CLEAN.cpp @@ -0,0 +1,400 @@ +/* + * Copyright 2022 University of Liège + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "wVtkExport_KIM2CLEAN.h" +#include "wMshData.h" +#include "wTag.h" +#include "wElement.h" +#include "wNode.h" +#include "wResults.h" + +#include <vtkVersion.h> +#include <vtkSmartPointer.h> +#include <vtkTetra.h> +#include <vtkHexahedron.h> +#include <vtkCellArray.h> +#include <vtkXMLUnstructuredGridReader.h> + +#include <vtkXMLUnstructuredGridWriter.h> +#include "vtkXMLPUnstructuredGridWriter.h" +#include <vtkUnstructuredGrid.h> +#include <vtkPointData.h> +#include <vtkDoubleArray.h> +#include "vtkCellArray.h" +#include "vtkCellData.h" +#include <vtkVertexGlyphFilter.h> + +#ifdef VTK_HAS_MPI +#include <mpi.h> +#include "vtkMPIController.h" +#endif + +using namespace tbox; +using namespace tboxVtk; + +VtkExport_KIM2CLEAN::VtkExport_KIM2CLEAN(std::shared_ptr<MshData> _msh) : msh(_msh) +{ +} + +/** + * @brief Save results defined at all the slave contact nodes ONLY. + * Those datas are Lagrange multipliers and can only be scalar or vectors. + */ + +void VtkExport_KIM2CLEAN::save_MPI(std::string const &fname, Results const &r, std::vector<int> contactElementID, std::map<int, int> lagrange_LO_to_nodes_GO, std::map<int, int> nodes_GO_to_lagrange_LO) const +{ +#ifdef VTK_HAS_MPI + vtkSmartPointer<vtkPoints> points = + vtkSmartPointer<vtkPoints>::New(); + + points->SetNumberOfPoints(lagrange_LO_to_nodes_GO.size()); + + for (int ii = 0; ii < lagrange_LO_to_nodes_GO.size(); ++ii) + points->InsertPoint(ii, msh->nodes[lagrange_LO_to_nodes_GO[ii]]->pos(0), msh->nodes[lagrange_LO_to_nodes_GO[ii]]->pos(1), msh->nodes[lagrange_LO_to_nodes_GO[ii]]->pos(2)); + + int CellArraySize = 0; + int numberOfCells = 0; + int numberOfElems = contactElementID.size(); + bool isQuad = true; + for (int ii = 0; ii < numberOfElems; ++ii) + { + int elemID = contactElementID[ii]; + if (msh->elems[elemID]->type() == ElType::QUAD4) + { + CellArraySize += ((msh->elems[elemID]->nodes.size()) + 1); + ++numberOfCells; + } + else if (msh->elems[elemID]->type() == ElType::TRI3) + { + CellArraySize += ((msh->elems[elemID]->nodes.size()) + 1); + ++numberOfCells; + isQuad = false; + } + } + + vtkIdType *vtkCells = NULL; + vtkCells = new vtkIdType[CellArraySize]; + + int CellOffset = 0; + for (int ii = 0; ii < numberOfElems; ++ii) + { + int elemID = contactElementID[ii]; + if (msh->elems[elemID]->type() == ElType::QUAD4) + { + vtkCells[CellOffset++] = msh->elems[elemID]->nodes.size(); + for (int jj = 0; jj < msh->elems[elemID]->nodes.size(); ++jj) + vtkCells[CellOffset++] = nodes_GO_to_lagrange_LO[msh->elems[elemID]->nodes[jj]->row]; + } + else if (msh->elems[elemID]->type() == ElType::TRI3) + { + vtkCells[CellOffset++] = msh->elems[elemID]->nodes.size(); + for (int jj = 0; jj < msh->elems[elemID]->nodes.size(); ++jj) + vtkCells[CellOffset++] = nodes_GO_to_lagrange_LO[msh->elems[elemID]->nodes[jj]->row]; + } + } + vtkSmartPointer<vtkIdTypeArray> Conn = vtkSmartPointer<vtkIdTypeArray>::New(); + Conn->SetArray(vtkCells, CellArraySize, 1); + + vtkSmartPointer<vtkCellArray> cellArray = + vtkSmartPointer<vtkCellArray>::New(); + cellArray->SetCells(numberOfCells, Conn); + + vtkSmartPointer<vtkUnstructuredGrid> unstructuredGrid = + vtkSmartPointer<vtkUnstructuredGrid>::New(); + unstructuredGrid->SetPoints(points); + if (isQuad) + unstructuredGrid->SetCells(VTK_QUAD, cellArray); + else + unstructuredGrid->SetCells(VTK_TRIANGLE, cellArray); + + for (auto &p : r.scalars_at_nodes) + { + vtkSmartPointer<vtkDoubleArray> scalar = + vtkSmartPointer<vtkDoubleArray>::New(); + + scalar->SetNumberOfComponents(1); + scalar->SetNumberOfTuples(lagrange_LO_to_nodes_GO.size()); + scalar->SetName(p.first.c_str()); + + for (int ii = 0; ii < lagrange_LO_to_nodes_GO.size(); ++ii) + { + scalar->SetValue(ii, (*(p.second))[ii]); + } + + unstructuredGrid->GetPointData()->AddArray(scalar); + } + for (auto &p : r.vectors_at_nodes) + { + vtkSmartPointer<vtkDoubleArray> vector = + vtkSmartPointer<vtkDoubleArray>::New(); + + vector->SetNumberOfComponents(3); + vector->SetNumberOfTuples(lagrange_LO_to_nodes_GO.size()); + vector->SetName(p.first.c_str()); + + for (int ii = 0; ii < lagrange_LO_to_nodes_GO.size(); ++ii) + { + Eigen::Vector3d const &v = (*(p.second))[ii]; + vector->SetTuple3(ii, v(0), v(1), v(2)); + } + + unstructuredGrid->GetPointData()->AddArray(vector); + } + + vtkSmartPointer<vtkXMLUnstructuredGridWriter> writer = + vtkSmartPointer<vtkXMLUnstructuredGridWriter>::New(); + writer->SetFileName(fname.c_str()); + writer->SetInputData(unstructuredGrid); + writer->Write(); + + delete[] vtkCells; +#endif +} + +/** + * @brief Save results defined at all nodes and 3D elements, those values can scalar, vector or tensors. + */ + +void VtkExport_KIM2CLEAN::save_MPI(std::string const &fname, Results const &r, std::map<int, int> nodesWO_LO_to_GO, std::map<int, int> nodesWO_GO_to_LO, std::map<int, int> elements_GO_to_LO) const +{ +#ifdef VTK_HAS_MPI + + int n_procs = 0, rank = 0; + MPI_Comm_size(MPI_COMM_WORLD, &n_procs); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + vtkMPIController *controller = vtkMPIController::New(); + controller->Initialize(0, 0, 1); + controller->SetGlobalController(controller); + + vtkSmartPointer<vtkPoints> points = + vtkSmartPointer<vtkPoints>::New(); + + points->SetNumberOfPoints(nodesWO_LO_to_GO.size()); + + for (int ii = 0; ii < nodesWO_LO_to_GO.size(); ++ii) + points->InsertPoint(ii, msh->nodes[nodesWO_LO_to_GO[ii]]->pos(0), msh->nodes[nodesWO_LO_to_GO[ii]]->pos(1), msh->nodes[nodesWO_LO_to_GO[ii]]->pos(2)); + + int CellArraySize = 0; + int numberOfCells = 0; + int numberOfElems = msh->elems.size(); + bool isAHexahedron = true; + + std::map<int, int> elems_GO_to_3D; + std::map<int, int> elems_3D_to_LO; + + for (int ii = 0; ii < numberOfElems; ++ii) + { + if (msh->elems[ii]->type() == ElType::HEX8) + { + CellArraySize += ((msh->elems[ii]->nodes.size()) + 1); + + elems_GO_to_3D[msh->elems[ii]->no - 1] = numberOfCells; + elems_3D_to_LO[numberOfCells] = ii; + + ++numberOfCells; + } + else if (msh->elems[ii]->type() == ElType::TETRA4) + { + CellArraySize += ((msh->elems[ii]->nodes.size()) + 1); + + elems_GO_to_3D[msh->elems[ii]->no - 1] = numberOfCells; + elems_3D_to_LO[numberOfCells] = ii; + + ++numberOfCells; + + isAHexahedron = false; + } + } + + vtkIdType *vtkCells = NULL; + vtkCells = new vtkIdType[CellArraySize]; + + int CellOffset = 0; + for (int ii = 0; ii < numberOfElems; ++ii) + { + if (msh->elems[ii]->type() == ElType::HEX8) + { + vtkCells[CellOffset++] = msh->elems[ii]->nodes.size(); + for (int jj = 0; jj < msh->elems[ii]->nodes.size(); ++jj) + vtkCells[CellOffset++] = nodesWO_GO_to_LO[msh->elems[ii]->nodes[jj]->row]; + } + else if (msh->elems[ii]->type() == ElType::TETRA4) + { + vtkCells[CellOffset++] = msh->elems[ii]->nodes.size(); + for (int jj = 0; jj < msh->elems[ii]->nodes.size(); ++jj) + vtkCells[CellOffset++] = nodesWO_GO_to_LO[msh->elems[ii]->nodes[jj]->row]; + } + } + vtkSmartPointer<vtkIdTypeArray> Conn = vtkSmartPointer<vtkIdTypeArray>::New(); + Conn->SetArray(vtkCells, CellArraySize, 1); + + vtkSmartPointer<vtkCellArray> cellArray = + vtkSmartPointer<vtkCellArray>::New(); + + cellArray->SetCells(numberOfCells, Conn); + + vtkSmartPointer<vtkUnstructuredGrid> unstructuredGrid = + vtkSmartPointer<vtkUnstructuredGrid>::New(); + unstructuredGrid->SetPoints(points); + if (isAHexahedron) + unstructuredGrid->SetCells(VTK_HEXAHEDRON, cellArray); + else + unstructuredGrid->SetCells(VTK_TETRA, cellArray); + + for (auto &p : r.scalars_at_nodes) + { + vtkSmartPointer<vtkDoubleArray> scalar = + vtkSmartPointer<vtkDoubleArray>::New(); + + scalar->SetNumberOfComponents(1); + scalar->SetNumberOfTuples(nodesWO_LO_to_GO.size()); + scalar->SetName(p.first.c_str()); + + for (int ii = 0; ii < nodesWO_LO_to_GO.size(); ++ii) + scalar->SetValue(ii, (*(p.second))[ii]); + + unstructuredGrid->GetPointData()->AddArray(scalar); + } + for (auto &p : r.vectors_at_nodes) + { + vtkSmartPointer<vtkDoubleArray> vector = + vtkSmartPointer<vtkDoubleArray>::New(); + + vector->SetNumberOfComponents(3); + vector->SetNumberOfTuples(nodesWO_LO_to_GO.size()); + vector->SetName(p.first.c_str()); + + for (int ii = 0; ii < nodesWO_LO_to_GO.size(); ++ii) + { + Eigen::Vector3d const &v = (*(p.second))[ii]; + vector->SetTuple3(ii, v(0), v(1), v(2)); + } + + unstructuredGrid->GetPointData()->AddArray(vector); + } + for (auto &p : r.tensors_at_nodes) + { + vtkSmartPointer<vtkDoubleArray> tensors = + vtkSmartPointer<vtkDoubleArray>::New(); + + tensors->SetNumberOfComponents(9); + tensors->SetNumberOfTuples(nodesWO_LO_to_GO.size()); + tensors->SetName(p.first.c_str()); + + for (int ii = 0; ii < nodesWO_LO_to_GO.size(); ++ii) + { + Eigen::MatrixXd const &v = (*(p.second))[ii]; + tensors->SetTuple9(ii, v(0, 0), v(0, 1), v(0, 2), v(1, 0), v(1, 1), v(1, 2), v(2, 0), v(2, 1), v(2, 2)); + } + + unstructuredGrid->GetPointData()->AddArray(tensors); + } + + for (auto &p : r.scalars_at_elems) + { + vtkSmartPointer<vtkDoubleArray> scalar = + vtkSmartPointer<vtkDoubleArray>::New(); + + scalar->SetNumberOfComponents(1); + scalar->SetNumberOfTuples(numberOfCells); + scalar->SetName(p.first.c_str()); + + for (int ii = 0; ii < numberOfCells; ++ii) + { + scalar->SetValue(ii, (*(p.second))[elems_3D_to_LO[ii]]); + } + + unstructuredGrid->GetCellData()->AddArray(scalar); + } + for (auto &p : r.vectors_at_elems) + { + vtkSmartPointer<vtkDoubleArray> vector = + vtkSmartPointer<vtkDoubleArray>::New(); + + vector->SetNumberOfComponents(3); + vector->SetNumberOfTuples(numberOfCells); + vector->SetName(p.first.c_str()); + + for (int ii = 0; ii < numberOfCells; ++ii) + { + Eigen::Vector3d const &v = (*(p.second))[ii]; + vector->SetTuple3(ii, v(0), v(1), v(2)); + } + + unstructuredGrid->GetCellData()->AddArray(vector); + } + for (auto &p : r.tensors_at_elems) + { + vtkSmartPointer<vtkDoubleArray> tensors = + vtkSmartPointer<vtkDoubleArray>::New(); + + tensors->SetNumberOfComponents(9); + tensors->SetNumberOfTuples(numberOfCells); + tensors->SetName(p.first.c_str()); + + for (int ii = 0; ii < numberOfCells; ++ii) + { + Eigen::MatrixXd const &v = (*(p.second))[elems_3D_to_LO[ii]]; + tensors->SetTuple9(ii, v(0, 0), v(0, 1), v(0, 2), v(1, 0), v(1, 1), v(1, 2), v(2, 0), v(2, 1), v(2, 2)); + } + + unstructuredGrid->GetCellData()->AddArray(tensors); + } + + vtkSmartPointer<vtkIntArray> elem_proc_id = vtkSmartPointer<vtkIntArray>::New(); + elem_proc_id->SetName("processor_id"); + elem_proc_id->SetNumberOfComponents(1); + elem_proc_id->SetNumberOfTuples(numberOfCells); + + for (int ii = 0; ii < numberOfCells; ++ii) + elem_proc_id->SetValue(ii, rank); + + unstructuredGrid->GetCellData()->AddArray(elem_proc_id); + + vtkSmartPointer<vtkIntArray> volume_id = vtkSmartPointer<vtkIntArray>::New(); + volume_id->SetName("volume_id"); + volume_id->SetNumberOfComponents(1); + volume_id->SetNumberOfTuples(numberOfElems); + + for (auto &ptag : msh->ptags) + { + if (ptag.second->dim == 3) + { + for (int ii = 0; ii < ptag.second->elems.size(); ++ii) + { + volume_id->SetValue(elems_GO_to_3D[ptag.second->elems[ii]->no - 1], ptag.second->no); + } + } + } + unstructuredGrid->GetCellData()->AddArray(volume_id); + + vtkSmartPointer<vtkXMLPUnstructuredGridWriter> writer = + vtkSmartPointer<vtkXMLPUnstructuredGridWriter>::New(); + + writer->SetGhostLevel(1); + writer->SetNumberOfPieces(n_procs); + writer->SetStartPiece(rank); + writer->SetEndPiece(rank); + + writer->SetFileName(fname.c_str()); + writer->SetInputData(unstructuredGrid); + writer->Write(); + + delete[] vtkCells; + + controller->Finalize(1); +#endif +} diff --git a/katoptron/src/wVtkExport_KIM2CLEAN.h b/katoptron/src/wVtkExport_KIM2CLEAN.h new file mode 100644 index 0000000000000000000000000000000000000000..8dbfcbe0e1226df04557c77cb43da41456e8635d --- /dev/null +++ b/katoptron/src/wVtkExport_KIM2CLEAN.h @@ -0,0 +1,69 @@ +/* + * Copyright 2022 University of Liège + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef WVTKEXPORT_KIM2CLEAN_H +#define WVTKEXPORT_KIM2CLEAN_H + +#include "katoptron.h" +#include <string> +#include <memory> +#include <vector> +#include <map> + +#ifndef SWIG + +namespace tboxVtk +{ + +/** + * @brief Save routines of Kim + * @authors Kim Liegeois + * @todo those functions have to be removed and wVtkExport has to be used instead. + * However, there are currently two difficulties. + * - Each save_MPI function save on different meshes, a contact mesh has to be created and given to one of the + * VtkExport. + * - wVtkExport do not support MPI for now and some #ifdef VTK_HAS_MPI are currently unwanted in wVtkExport. + * At the end of the day, instead of using element[i]->no-1 it will be required to use a map to translate + * the global mesh id to local ones, those map will be trivial for one proc cases, and more complex when MPI + * is used. This will allow each proc to write only the data that it has computed. Moreover, Vtk MPI initialization + * and finalization will have to be used. Those can be done using some unwanted #ifdef VTK_HAS_MPI or using more + * elegant strategies or requiring VTK binaries that support MPI. + */ +class KATOPTRON_API VtkExport_KIM2CLEAN +{ +public: + std::shared_ptr<tbox::MshData> msh; + + VtkExport_KIM2CLEAN(std::shared_ptr<tbox::MshData> _msh); + virtual ~VtkExport_KIM2CLEAN() {} + + void save_MPI(std::string const &fname, + tbox::Results const &r, + std::map<int, int> nodeWO_LO_to_GO, + std::map<int, int> nodeWO_GO_to_LO, + std::map<int, int> elements_GO_to_LO) const; + void save_MPI(std::string const &fname, + tbox::Results const &r, + std::vector<int> contactElementID, + std::map<int, int> nodeWO_LO_to_GO, + std::map<int, int> nodeWO_GO_to_LO) const; +}; + +} // namespace tboxVtk + +#endif + +#endif //WVTKUTILS_KIMTOCLEAN_H diff --git a/katoptron/src/wWeight.cpp b/katoptron/src/wWeight.cpp new file mode 100644 index 0000000000000000000000000000000000000000..cd5ab844d1e84d34384794c20b1b5c410dd68965 --- /dev/null +++ b/katoptron/src/wWeight.cpp @@ -0,0 +1,177 @@ +#include "wWeight.h" +#include "wProblem.h" +#include "wTag.h" +#include "wElement.h" +#include "wNode.h" +#include <algorithm> +using namespace katoptron; + +/** + * @brief Weight constructor + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> name: the name of the weighted domain of the msh, + * <li> _which_dof: a vector that specify which degree(s) of freedom are weighted, + * <li> _values: a vector that specify the values of the weights + * (the length of _which_dof and _values must be the same), + * <li> ensemble_size: the ensemble size. + * </ul> + */ +Weight::Weight(katoptron::Problem &pbl, + std::string const &name, + std::vector<int> _which_dof, + std::vector<double> _values, + size_t ensemble_size) : Group(pbl.msh, name), which_dof(_which_dof), values(_values) +{ + for (auto e : tag->elems) + for (auto n : e->nodes) + nodes.push_back(n); + + x_values = {}; + y_values = {}; + z_values = {}; + T_values = {}; + for (auto i = 0; i < ensemble_size; ++i) + { + x_values.push_back(values[0]); + y_values.push_back(values[1]); + z_values.push_back(values[2]); + T_values.push_back(values[3]); + } + pbl.Weights.push_back(this); +} + +/** + * @brief Weight constructor + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> name: the name of the weighted domain of the msh, + * <li> x: a int which specify whether the x displacement component is weighted, + * <li> v_x: value of the weight, + * <li> y: a int which specify whether the y displacement component is weighted, + * <li> v_y: value of the weight, + * <li> z: a int which specify whether the z displacement component is weighted, + * <li> v_z: value of the weight, + * <li> T: a int which specify whether the temperature is constrained, + * <li> v_T: value of the weight, + * <li> ensemble_size: the ensemble size. + * </ul> + */ +Weight::Weight(Problem &pbl, + std::string const &name, + int x, + double v_x, + int y, + double v_y, + int z, + double v_z, + int T, + double v_T, + size_t ensemble_size) : Group(pbl.msh, name) +{ + for (auto e : tag->elems) + for (auto n : e->nodes) + nodes.push_back(n); + + which_dof = {}; + which_dof.push_back(x); + which_dof.push_back(y); + which_dof.push_back(z); + which_dof.push_back(T); + + values = {}; + values.push_back(v_x); + values.push_back(v_y); + values.push_back(v_z); + values.push_back(v_T); + + x_values = {}; + y_values = {}; + z_values = {}; + T_values = {}; + for (auto i = 0; i < ensemble_size; ++i) + { + x_values.push_back(v_x); + y_values.push_back(v_y); + z_values.push_back(v_z); + T_values.push_back(v_T); + } + + pbl.Weights.push_back(this); +} + +/** + * @brief Weight constructor + * + * Arguments: + * <ul> + * <li> pbl: a Problem object, + * <li> name: the name of the weighted domain of the msh, + * <li> x: a int which specify whether the x displacement component is weighted, + * <li> v_x: vector of values of the weight (one per sample), + * <li> y: a int which specify whether the y displacement component is weighted, + * <li> v_y: vector of values of the weight (one per sample), + * <li> z: a int which specify whether the z displacement component is weighted, + * <li> v_z: vector of values of the weight (one per sample), + * <li> T: a int which specify whether the temperature is constrained, + * <li> v_T: vector of values of the weight (one per sample), + * <li> ensemble_size: the ensemble size. + * </ul> + */ +Weight::Weight(Problem &pbl, + std::string const &name, + int x, + std::vector<double> v_x, + int y, + std::vector<double> v_y, + int z, + std::vector<double> v_z, + int T, + std::vector<double> v_T) : Group(pbl.msh, name) +{ + for (auto e : tag->elems) + for (auto n : e->nodes) + nodes.push_back(n); + + which_dof = {}; + which_dof.push_back(x); + which_dof.push_back(y); + which_dof.push_back(z); + which_dof.push_back(T); + + values = {}; + values.push_back(v_x[0]); + values.push_back(v_y[0]); + values.push_back(v_z[0]); + values.push_back(v_T[0]); + + x_values = {}; + y_values = {}; + z_values = {}; + T_values = {}; + for (auto i = 0; i < v_x.size(); ++i) + x_values.push_back(v_x[i]); + + for (auto i = 0; i < v_y.size(); ++i) + y_values.push_back(v_y[i]); + + for (auto i = 0; i < v_z.size(); ++i) + z_values.push_back(v_z[i]); + + for (auto i = 0; i < v_T.size(); ++i) + T_values.push_back(v_T[i]); + + pbl.Weights.push_back(this); +} + +/** + * @brief Display information. + */ +void Weight::write(std::ostream &out) const +{ + out << "Weights on " << *tag << "\n"; +} diff --git a/katoptron/src/wWeight.h b/katoptron/src/wWeight.h new file mode 100644 index 0000000000000000000000000000000000000000..b1009a8406628a324bb967cb39a8e39fb96528f7 --- /dev/null +++ b/katoptron/src/wWeight.h @@ -0,0 +1,67 @@ +#ifndef KATOPTRON_WEIGHT_H +#define KATOPTRON_WEIGHT_H + +#include "katoptron.h" +#include "wGroup.h" +#include <vector> +#include <string> + +#include <Teuchos_RCP.hpp> +using namespace tbox; + +namespace katoptron +{ + +/** + * @brief Class used to specify in Python the different weights used for + * the computation of the weighted residual of the GMRES. + */ +class KATOPTRON_API Weight : public Group +{ +public: + std::vector<Node *> nodes; + std::vector<int> which_dof; + std::vector<double> values; + + std::vector<double> x_values; + std::vector<double> y_values; + std::vector<double> z_values; + std::vector<double> T_values; + + Weight(Problem &pbl, + std::string const &name, + std::vector<int> _which_dof, + std::vector<double> _values, + size_t ensemble_size = 1); + + Weight(Problem &pbl, + std::string const &name, + int x, + double v_x, + int y, + double v_y, + int z, + double v_z, + int T = 0, + double v_T = 0, + size_t ensemble_size = 1); + + Weight(Problem &pbl, + std::string const &name, + int x, + std::vector<double> v_x, + int y, + std::vector<double> v_y, + int z, + std::vector<double> v_z, + int T = 0, + std::vector<double> v_T = {}); + +#ifndef SWIG + virtual void write(std::ostream &out) const; +#endif +}; + +} // namespace katoptron + +#endif //KATOPTRON_WEIGHT_H diff --git a/katoptron/tests/1_cube.geo b/katoptron/tests/1_cube.geo new file mode 100644 index 0000000000000000000000000000000000000000..99d074747f84e1c2f9d51c0f2cba9f92e4798552 --- /dev/null +++ b/katoptron/tests/1_cube.geo @@ -0,0 +1,39 @@ +// $Id$ +// fichier de donnees gmsh + +C1 = 10; +nC1 = 4; + +lc = 1; + +Point(1) = { 0, 0, 0, lc}; +Point(2) = { C1, 0, 0, lc}; +Point(3) = { C1, 0, C1, lc}; +Point(4) = { 0, 0, C1, lc}; + +Line(1) = {1, 2}; +Line(2) = {2, 3}; +Line(3) = {3, 4}; +Line(4) = {4, 1}; + +Transfinite Line {1,2,3,4} = nC1+1 Using Progression 1; + +Line Loop(11) = {1,2,3,4}; +Plane Surface(12) = {11}; +Transfinite Surface {12}; +Recombine Surface {12}; + +Extrude {0, C1, 0} +{ + Surface{12}; Layers{nC1}; Recombine; +} + +// physical entities + +Physical Volume("Body 1") = {1}; + +Physical Surface("Surf 1 1") = {-21}; +Physical Surface("Surf 1 2") = {-29}; + +Physical Point("Measure point 1") = {4}; +Physical Point("Measure point 2") = {1}; diff --git a/katoptron/tests/1_cube.py b/katoptron/tests/1_cube.py new file mode 100644 index 0000000000000000000000000000000000000000..a5951ffb8dbb0febc79b320483840d06002a717a --- /dev/null +++ b/katoptron/tests/1_cube.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +from fwk.testing import * + + +def main(): + comm, rank, size = u.import_MPI() + + from PyTrilinos import Teuchos + + import shlex + import subprocess + import os + import numpy as np + + geo_name = '1_cube.geo' + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size) + + ensemble_size = 1 + + pbl = m.Problem(msh, comm) + + E = 1. * np.ones(ensemble_size) + nu = 0.2 * np.ones(ensemble_size) + k = 0.114 + d = 0. + + hf = 1 * np.ones(ensemble_size) + zero = np.zeros(ensemble_size) + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Surf 1 1", "Clamped", 1, 0., + 1, 0., 1, 0., 1, 10., ensemble_size) + m.Neumann(pbl, "Surf 1 2", "heat fluxes", 0, zero, + 0, zero, 0, zero, 1, hf, ensemble_size) + + dx = np.zeros(ensemble_size) + dy = 2. * np.ones(ensemble_size) + dz = np.zeros(ensemble_size) + dT = 10. * np.ones(ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 1000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + + mueluParams = Teuchos.ParameterList() + mueluParams['number of equations'] = 4 + mueluParams['max levels'] = 1 + mueluParams['smoother: type'] = "RELAXATION" + + mueluParamsSub2 = Teuchos.ParameterList() + mueluParamsSub2['relaxation: type'] = "Symmetric Gauss-Seidel" + mueluParamsSub2['relaxation: sweeps'] = 1 + mueluParamsSub2['relaxation: damping factor'] = 0.9 + + mueluParams['verbosity'] = "low" + + mueluParams['smoother: params'] = mueluParamsSub2 + + solverList['mueluParams'] = mueluParams + solverList['Write txt files'] = True + + slv = m.IterativeSolver(pbl, solverList, 4, ensemble_size) + + nThreads = u.Initialize_Kokkos() + + slv.start() + + u.Finalize_Kokkos() + + tag_name = "Measure point 1" + which_pos = 0 + which_dof = 3 + DOFperNode = 4 + name_sol = "x_mm.txt" + + pos_1, sol_1 = u.extract(msh, tag_name, DOFperNode, + which_pos, which_dof, ensemble_size, name_sol) + + tag_name = "Measure point 2" + + pos_2, sol_2 = u.extract(msh, tag_name, DOFperNode, + which_pos, which_dof, ensemble_size, name_sol) + + tests = CTests() + measured_T_1 = sol_1[0] + tests.add(CTest('Temperature 1', measured_T_1, 97.7193, 5e-5)) + + measured_T_2 = sol_2[0] + tests.add(CTest('Temperature 2', measured_T_2, 10., 5e-5)) + tests.run() + + +if __name__ == "__main__": + main() diff --git a/katoptron/tests/1_cube_conv.py b/katoptron/tests/1_cube_conv.py new file mode 100644 index 0000000000000000000000000000000000000000..f853b4f110e076b841c329a45e912d7d1a64ef9b --- /dev/null +++ b/katoptron/tests/1_cube_conv.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +from PyTrilinos import Teuchos +import shlex +import subprocess +import os +import numpy as np +import tarfile +import glob +from fwk.wutils import parseargs +from fwk.testing import * +from katoptron.readers import read_Belos + + +def model(msh, + E, + p, + ensemble_size): + comm, rank, size = m.utilities.import_MPI() + + pbl = m.Problem(msh, comm) + + nu = 0.2 * np.ones(ensemble_size) + k = 0.114 + d = 0. + + zero = np.zeros(ensemble_size) + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Surf 1 1", "Clamped", 1, 0., 1, 0., 1, 0., 1, 0., + ensemble_size) + m.Neumann(pbl, "Surf 1 2", "heat fluxes", 0, zero, 0, zero, 1, p, 0, zero, + ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 100 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['Use preconditioner'] = False + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + solverList['Write txt files'] = True + solverList['Write matrix and vectors'] = True + + slv = m.IterativeSolver(pbl, solverList, 3, ensemble_size) + + slv.start() + + +def main(): + comm, rank, size = u.import_MPI() + + useER = m.UseEnsembleReduction() + + geo_name = '1_cube.geo' + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size) + + E_mean = 1. + E_min = 0.75 + E_max = 1.25 + + E_min_2 = 0.95 + E_max_2 = 1.05 + + E_min_3 = 1.2 + E_max_3 = 1.3 + + p_mean = 0.1 + p_min = 0.075 + p_max = 0.125 + + ensemble_size = 8 + E = np.linspace(E_min, E_max, ensemble_size) + p = p_mean * np.ones(ensemble_size) + + nThreads = u.Initialize_Kokkos() + model(msh, E, p, ensemble_size) + + u.Finalize_Kokkos() + + if rank == 0: + if useER: + iter_indices, residuals = read_Belos(work_dir+'/belos_out.txt', 1) + + tests = CTests() + nIterations = iter_indices[-1] + nExpectedIterations = 75 + tests.add(CTest('Number of iterations with ensemble reduction', + nIterations, nExpectedIterations, 0.)) + tests.run() + else: + iter_indices, residuals = read_Belos( + work_dir+'/belos_out.txt', ensemble_size) + + tests = CTests() + nIterations = iter_indices[-1] + nExpectedIterations = 35 + tests.add(CTest('Number of iterations without ensemble reduction', + nIterations, nExpectedIterations, 0.)) + tests.run() + + +if __name__ == "__main__": + main() diff --git a/katoptron/tests/1_cube_k.py b/katoptron/tests/1_cube_k.py new file mode 100644 index 0000000000000000000000000000000000000000..05105c359dee4b933209f73fdab14d8e572ebf44 --- /dev/null +++ b/katoptron/tests/1_cube_k.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +from fwk.testing import * + + +def main(): + comm, rank, size = u.import_MPI() + + from PyTrilinos import Teuchos + import shlex + import subprocess + import os + import numpy as np + + geo_name = '1_cube.geo' + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size) + + ensemble_size = 1 + + pbl = m.Problem(msh, comm) + + E = 1. * np.ones(ensemble_size) + nu = 0.2 * np.ones(ensemble_size) + k = 0.114 + d = 0. + + hf = 1 * np.ones(ensemble_size) + zero = np.zeros(ensemble_size) + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Surf 1 1", "Clamped", 1, 0., + 1, 0., 1, 0., 1, 10., ensemble_size) + m.Neumann(pbl, "Surf 1 2", "heat fluxes", 0, zero, + 0, zero, 0, zero, 1, hf, ensemble_size) + + dx = np.zeros(ensemble_size) + dy = 2. * np.ones(ensemble_size) + dz = np.zeros(ensemble_size) + dT = 10. * np.ones(ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 2 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + + mueluParams = Teuchos.ParameterList() + mueluParams['number of equations'] = 4 + mueluParams['max levels'] = 1 + mueluParams['coarse: type'] = "RELAXATION" + + mueluParamsSub2 = Teuchos.ParameterList() + mueluParamsSub2['relaxation: type'] = "MT Symmetric Gauss-Seidel" + mueluParamsSub2['relaxation: sweeps'] = 1 + mueluParamsSub2['relaxation: damping factor'] = 0.9 + + mueluParams['verbosity'] = "low" + + mueluParams['coarse: params'] = mueluParamsSub2 + + solverList['mueluParams'] = mueluParams + solverList['Write txt files'] = True + + m.Kokkos_Initialize(2) + slv = m.IterativeSolver( + pbl, solverList, 4, ensemble_size) + slv.start() + + m.Kokkos_Finalize() + + +if __name__ == "__main__": + main() diff --git a/katoptron/tests/1_cube_rf.py b/katoptron/tests/1_cube_rf.py new file mode 100644 index 0000000000000000000000000000000000000000..310170c5b1f1eae8befaffd80cc63b706fc06fb6 --- /dev/null +++ b/katoptron/tests/1_cube_rf.py @@ -0,0 +1,140 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +from fwk.testing import * + + +def main(): + comm, rank, size = u.import_MPI() + + from PyTrilinos import Teuchos + + import shlex + import subprocess + import os + import numpy as np + + geo_name = '1_cube.geo' + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size) + + ensemble_size = 1 + + pbl = m.Problem(msh, comm) + + E = 1. * np.ones(ensemble_size) + nu = 0.2 * np.ones(ensemble_size) + k = 0.114 + d = 0. + + hf = 1 * np.ones(ensemble_size) + zero = np.zeros(ensemble_size) + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + + num_random_variables = 10 + + rand = np.random.normal(0, 1, 10*ensemble_size) + + for i in range(0, num_random_variables): + pbl.add(m.RandomVariable(rand[i*ensemble_size:(i+1)*ensemble_size])) + + randomParams = Teuchos.ParameterList() + + randomParams['Is random'] = True + randomParams['Begin X'] = 0. + randomParams['Begin Y'] = 0. + randomParams['Begin Z'] = 0. + randomParams['End X'] = 10. + randomParams['End Y'] = 10. + randomParams['End Z'] = 10. + randomParams['Number random variables'] = num_random_variables + randomParams['Correlation length X'] = 1. + randomParams['Correlation length Y'] = 2. + randomParams['Correlation length Z'] = 1. + + randomParams['Mean'] = (1. / (2.*(1.+0.2))) + randomParams['Dispersion level'] = 0.1 + + m.Dirichlet(pbl, "Surf 1 1", "Clamped", 1, 0., + 1, 0., 1, 0., 1, 10., ensemble_size) + m.Neumann(pbl, "Surf 1 2", "heat fluxes", 0, zero, + 0, zero, 0, zero, 1, hf, ensemble_size) + + dx = np.zeros(ensemble_size) + dy = 2. * np.ones(ensemble_size) + dz = np.zeros(ensemble_size) + dT = 10. * np.ones(ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 1000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['randomParams'] = randomParams + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + + mueluParams = Teuchos.ParameterList() + mueluParams['number of equations'] = 4 + mueluParams['max levels'] = 1 + mueluParams['smoother: type'] = "RELAXATION" + + mueluParamsSub2 = Teuchos.ParameterList() + mueluParamsSub2['relaxation: type'] = "Symmetric Gauss-Seidel" + mueluParamsSub2['relaxation: sweeps'] = 1 + mueluParamsSub2['relaxation: damping factor'] = 0.9 + + mueluParams['verbosity'] = "low" + + mueluParams['smoother: params'] = mueluParamsSub2 + + solverList['mueluParams'] = mueluParams + solverList['Write txt files'] = True + + nThreads = u.Initialize_Kokkos() + + slv = m.IterativeSolver(pbl, solverList, 4, ensemble_size) + + slv.start() + + u.Finalize_Kokkos() + + tag_name = "Measure point 1" + which_pos = 0 + which_dof = 3 + DOFperNode = 4 + name_sol = "x_mm.txt" + + pos_1, sol_1 = u.extract(msh, tag_name, DOFperNode, + which_pos, which_dof, ensemble_size, name_sol) + + tag_name = "Measure point 2" + + pos_2, sol_2 = u.extract(msh, tag_name, DOFperNode, + which_pos, which_dof, ensemble_size, name_sol) + + tests = CTests() + measured_T_1 = sol_1[0] + measured_T_2 = sol_2[0] + tests.add(CTest('Temperature 1', measured_T_1, 97.7193, 5e-5)) + tests.add(CTest('Temperature 2', measured_T_2, 10., 5e-5)) + tests.run() + + +if __name__ == "__main__": + main() diff --git a/katoptron/tests/1_cube_tet.geo b/katoptron/tests/1_cube_tet.geo new file mode 100644 index 0000000000000000000000000000000000000000..1b4fe8a1695b0d50844787a01d3695f70e118140 --- /dev/null +++ b/katoptron/tests/1_cube_tet.geo @@ -0,0 +1,38 @@ +// $Id$ +// fichier de donnees gmsh + +C1 = 10; +nC1 = 4; + +lc = 1; + +Point(1) = { 0, 0, 0, lc}; +Point(2) = { C1, 0, 0, lc}; +Point(3) = { C1, 0, C1, lc}; +Point(4) = { 0, 0, C1, lc}; + +Line(1) = {1, 2}; +Line(2) = {2, 3}; +Line(3) = {3, 4}; +Line(4) = {4, 1}; + +Transfinite Line {1,2,3,4} = nC1+1 Using Progression 1; + +Line Loop(11) = {1,2,3,4}; +Plane Surface(12) = {11}; +Transfinite Surface {12}; + +Extrude {0, C1, 0} +{ + Surface{12}; Layers{nC1}; //Recombine; +} + +// physical entities + +Physical Volume("Body 1") = {1}; + +Physical Surface("Surf 1 1") = {-21}; +Physical Surface("Surf 1 2") = {-29}; + +Physical Point("Measure point 1") = {4}; +Physical Point("Measure point 2") = {1}; diff --git a/katoptron/tests/1_cube_tet.py b/katoptron/tests/1_cube_tet.py new file mode 100644 index 0000000000000000000000000000000000000000..ec36a4ca312060dd9f01028f336cbf335fc1dbae --- /dev/null +++ b/katoptron/tests/1_cube_tet.py @@ -0,0 +1,117 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +from fwk.testing import * + + +def main(): + comm, rank, size = u.import_MPI() + + from PyTrilinos import Teuchos + + import shlex + import subprocess + import os + import numpy as np + + geo_name = '1_cube.geo' + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size) + + ensemble_size = 1 + + pbl = m.Problem(msh, comm) + + E = 1. * np.ones(ensemble_size) + nu = 0.2 * np.ones(ensemble_size) + k = 0.114 + d = 0. + + hf = 1 * np.ones(ensemble_size) + zero = np.zeros(ensemble_size) + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Surf 1 1", "Clamped", 1, 0., + 1, 0., 1, 0., 1, 10., ensemble_size) + m.Neumann(pbl, "Surf 1 2", "heat fluxes", 0, zero, + 0, zero, 0, zero, 1, hf, ensemble_size) + + dx = np.zeros(ensemble_size) + dy = 2. * np.ones(ensemble_size) + dz = np.zeros(ensemble_size) + dT = 10. * np.ones(ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 1000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + + mueluParams = Teuchos.ParameterList() + mueluParams['number of equations'] = 4 + mueluParams['max levels'] = 1 + mueluParams['smoother: type'] = "RELAXATION" + + mueluParamsSub2 = Teuchos.ParameterList() + mueluParamsSub2['relaxation: type'] = "Symmetric Gauss-Seidel" + mueluParamsSub2['relaxation: sweeps'] = 1 + mueluParamsSub2['relaxation: damping factor'] = 0.9 + + mueluParams['verbosity'] = "low" + + mueluParams['smoother: params'] = mueluParamsSub2 + + solverList['mueluParams'] = mueluParams + solverList['Write txt files'] = True + + slv = m.IterativeSolver(pbl, solverList, 4, ensemble_size) + + nThreads = u.Initialize_Kokkos() + + slv.start() + + u.Finalize_Kokkos() + + tag_name = "Measure point 1" + which_pos = 0 + which_dof = 3 + DOFperNode = 4 + name_sol = "x_mm.txt" + + pos_1, sol_1 = u.extract(msh, tag_name, DOFperNode, + which_pos, which_dof, ensemble_size, name_sol) + + tag_name = "Measure point 2" + + pos_2, sol_2 = u.extract(msh, tag_name, DOFperNode, + which_pos, which_dof, ensemble_size, name_sol) + + tests = CTests() + measured_T_1 = sol_1[0] + measured_T_2 = sol_2[0] + tests.add(CTest('Temperature 1', measured_T_1, 97.7193, 5e-5)) + tests.add(CTest('Temperature 2', measured_T_2, 10., 5e-5)) + tests.run() + + +if __name__ == "__main__": + main() diff --git a/katoptron/tests/1_cube_tet_block.py b/katoptron/tests/1_cube_tet_block.py new file mode 100644 index 0000000000000000000000000000000000000000..1275b43b197cb26d3a3b938ce61b69ef2358d8c9 --- /dev/null +++ b/katoptron/tests/1_cube_tet_block.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +from fwk.testing import * +import os + + +def test(msh, xml_file_name, rank, nThreads): + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + ensemble_size = 1 + + pbl = m.Problem(msh, comm) + + E = 1. * np.ones(ensemble_size) + nu = 0.2 * np.ones(ensemble_size) + k = 0.114 + d = 0. + + hf = 1 * np.ones(ensemble_size) + zero = np.zeros(ensemble_size) + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Surf 1 1", "Clamped", 1, 0., 1, 0., 1, 0., 1, 10., + ensemble_size) + m.Neumann(pbl, "Surf 1 2", "heat fluxes", 0, zero, 0, zero, 0, zero, 1, hf, + ensemble_size) + + m.Weight(pbl, "Surf 1 2", 1, 1., 1, 1., 1, 1., 1, 2.5, ensemble_size) + + dx = np.zeros(ensemble_size) + dy = 2. * np.ones(ensemble_size) + dz = np.zeros(ensemble_size) + dT = 10. * np.ones(ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Ensemble Convergence Tolerance'] = 10**(-4) + + solverList['Maximum Iterations'] = 1000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['Merge block matrix'] = False + solverList['Use blocked status test'] = True + solverList['Use blocked status test: x'] = True + solverList['Use blocked status test: T'] = True + solverList['Ensemble Convergence Tolerance: x'] = 10**(-7) + solverList['Ensemble Convergence Tolerance: T'] = 10**(-7) + solverList['Use weighted status test'] = True + solverList['Ensemble Convergence Tolerance: weights'] = 10**(-7) + + solverList['Write txt files'] = True + solverList['Write matrix and vectors'] = True + + solverList["use xml file"] = True + solverList[ + "MueLu xml file name"] = file_dir + '/../preconditioners/' + xml_file_name + solverList["convert MueLu xml file"] = True + + solverList['Use preconditioner'] = True + + slv = m.IterativeSolver(pbl, solverList, 4, ensemble_size) + + slv.start() + + tag_name = "Measure point 1" + which_pos = 0 + which_dof = 3 + DOFperNode = 4 + name_sol = "x_mm.txt" + + pos_1, sol_1 = u.extract(msh, tag_name, DOFperNode, which_pos, which_dof, + ensemble_size, name_sol) + + tag_name = "Measure point 2" + + pos_2, sol_2 = u.extract(msh, tag_name, DOFperNode, which_pos, which_dof, + ensemble_size, name_sol) + + tests = CTests() + measured_T_1 = sol_1[0] + measured_T_2 = sol_2[0] + tests.add(CTest('Temperature 1', measured_T_1, 97.7193, 5e-5)) + tests.add(CTest('Temperature 2', measured_T_2, 10., 5e-5)) + tests.run() + + +if __name__ == "__main__": + comm, rank, size = u.import_MPI() + + from PyTrilinos import Teuchos + + import shlex + import subprocess + import numpy as np + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + geo_name = '1_cube_tet.geo' + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size) + + nThreads = u.Initialize_Kokkos() + directory = '1' + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + test(msh, 'AMG_BGS_gs_gs.xml', rank, nThreads) + os.chdir('..') + + directory = '2' + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + test(msh, 'blockdirect.xml', rank, nThreads) + + u.Finalize_Kokkos() diff --git a/katoptron/tests/2_cubes.geo b/katoptron/tests/2_cubes.geo new file mode 100644 index 0000000000000000000000000000000000000000..58dcf0b426c4339af40b34b851fa23faf789c082 --- /dev/null +++ b/katoptron/tests/2_cubes.geo @@ -0,0 +1,77 @@ +// $Id$ +// fichier de donnees gmsh + +C1 = 10; +C2 = 9; +nC1 = 4; +nC2 = 5; + +theta = 0*Pi/4; +dx = 0; +dy = 0; +dz = 0.1; +lc = 1; + +Point(1) = { 0, 0, 0, lc}; +Point(2) = { C1, 0, 0, lc}; +Point(3) = { C1, 0, C1, lc}; +Point(4) = { 0, 0, C1, lc}; + +Point(5) = { 0, 0, C1+dz, lc}; +Point(6) = { C2, 0, C1+dz, lc}; +Point(7) = { C2, 0, C1+C2+dz, lc}; +Point(8) = { 0, 0, C1+C2+dz, lc}; + +Line(1) = {1, 2}; +Line(2) = {2, 3}; +Line(3) = {3, 4}; +Line(4) = {4, 1}; + +Line(5) = {5, 6}; +Line(6) = {6, 7}; +Line(7) = {7, 8}; +Line(8) = {8, 5}; + +Transfinite Line {1,2,3,4} = nC1+1 Using Progression 1; +Transfinite Line {5,6,7,8} = nC2+1 Using Progression 1; + +Line Loop(11) = {1,2,3,4}; +Plane Surface(12) = {11}; +Transfinite Surface {12}; +Recombine Surface {12}; + +Extrude {0, C1, 0} +{ + Surface{12}; Layers{nC1}; Recombine; +} + +Line Loop(13) = {5,6,7,8}; +Plane Surface(14) = {13}; +Transfinite Surface {14}; +Recombine Surface {14}; + +Rotate {{0,0,1}, {0,0,0}, theta}{Surface{14};} + +Extrude {-C2*Sin(theta), C2*Cos(theta), 0} +{ + Surface{14}; Layers{nC2}; Recombine; +} + +Translate {dx,dy,0} { Volume{2};} + +// physical entities + +Physical Volume("Body 1") = {1}; +Physical Volume("Body 2") = {2}; + +Physical Surface("Surf 1 1") = {-21}; +Physical Surface("Surf 1 2") = {-29}; + +Physical Surface("Surf 2 1") = {-43}; +Physical Surface("Surf 2 2") = {-51}; + +Physical Point("T measure") = {20}; + +Mesh.Partitioner = 2; +Mesh.MetisAlgorithm = 2; +Mesh.MshFilePartitioned = 0; diff --git a/katoptron/tests/2_cubes.py b/katoptron/tests/2_cubes.py new file mode 100644 index 0000000000000000000000000000000000000000..6a16393cc477fdd5328d7056dc1f7038c71db751 --- /dev/null +++ b/katoptron/tests/2_cubes.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +#import matplotlib.pyplot as plt + + +def main(): + comm, rank, size = u.import_MPI() + + from PyTrilinos import Teuchos + + import shlex + import subprocess + import os + import numpy as np + + geo_name = '2_cubes.geo' + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size) + + ensemble_size = 1 + + pbl = m.Problem(msh, comm) + + #E = np.linspace(0.5,1.5,ensemble_size) + E = 1. * np.ones(ensemble_size) + nu = 0.2 * np.ones(ensemble_size) + k = 0.114 + d = 0. + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + m.Medium(pbl, "Body 2", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Surf 1 1", "Clamped", 1, 0., + 1, 0., 1, 0., 1, 10., ensemble_size) + m.Dirichlet(pbl, "Surf 2 2", "Clamped", 1, 0., + 1, 0., 1, 2., 1, 20., ensemble_size) + + norm = tbox.Vector3d(0, 0, -1) + cont = m.Contact(pbl, "Surf 1 2", "contact", norm) + # cont.setInitialyOpen() + cont.setNoUpdate() + cont.setSticking() + cont.setMaster(pbl, "Surf 2 1", norm) + + dx = np.zeros(ensemble_size) + dy = 2. * np.ones(ensemble_size) + dz = np.zeros(ensemble_size) + dT = 10. * np.ones(ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 1000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList["MueLu xml file name"] = file_dir + '/multigrid_2_lvls_3_1.xml' + solverList["convert MueLu xml file"] = True + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + + slv = m.IterativeSolver(pbl, solverList, 3, ensemble_size) + + nThreads = u.Initialize_Kokkos() + + slv.start() + + u.Finalize_Kokkos() + + +if __name__ == "__main__": + main() diff --git a/katoptron/tests/2_cubes_fused.geo b/katoptron/tests/2_cubes_fused.geo new file mode 100644 index 0000000000000000000000000000000000000000..bb37ea4b07eec9b878c26b8437ead6b5635128d1 --- /dev/null +++ b/katoptron/tests/2_cubes_fused.geo @@ -0,0 +1,72 @@ +// $Id$ +// fichier de donnees gmsh + +SetFactory("OpenCASCADE"); + +C1 = 10; +C2 = 10; +nC1 = 4; +nC2 = 4; + +theta = 0*Pi/4; +dx = 0; +dy = 0; +dz = 0.; +lc = 1; + +Point(1) = { 0, 0, 0, lc}; +Point(2) = { C1, 0, 0, lc}; +Point(3) = { C1, 0, C1, lc}; +Point(4) = { 0, 0, C1, lc}; + +Point(5) = { 0, 0, C1+dz, lc}; +Point(6) = { C2, 0, C1+dz, lc}; +Point(7) = { C2, 0, C1+C2+dz, lc}; +Point(8) = { 0, 0, C1+C2+dz, lc}; + +Line(1) = {1, 2}; +Line(2) = {2, 3}; +Line(3) = {3, 4}; +Line(4) = {4, 1}; + +Line(5) = {5, 6}; +Line(6) = {6, 7}; +Line(7) = {7, 8}; +Line(8) = {8, 5}; + +Transfinite Line {1,2,3,4} = nC1+1 Using Progression 1; +Transfinite Line {5,6,7,8} = nC2+1 Using Progression 1; + +Line Loop(11) = {1,2,3,4}; +Plane Surface(12) = {11}; +Transfinite Surface {12}; +//Recombine Surface {12}; + +Line Loop(13) = {5,6,7,8}; +Plane Surface(14) = {13}; +Transfinite Surface {14}; +//Recombine Surface {14}; + +Extrude {0, C1, 0} +{ + Surface{12}; Layers{nC1}; //Recombine; +} + +Extrude {0, C2, 0} +{ + Surface{14}; Layers{nC2}; //Recombine; +} + +BooleanFragments{ Volume{1,2}; Delete; }{} + +// physical entities + +Physical Volume("Body 1") = {1}; +Physical Volume("Body 2") = {2}; + +Physical Surface("Surf 1 1") = {1}; + +Physical Surface("Surf 2 2") = {8}; + +Physical Point("Pts 1 x") = {1,3}; +Physical Point("Pts 1 y") = {1,2}; diff --git a/katoptron/tests/2_cubes_heat.py b/katoptron/tests/2_cubes_heat.py new file mode 100644 index 0000000000000000000000000000000000000000..979fc56ca058c4c69b11f4c271a0409f8cc48e6c --- /dev/null +++ b/katoptron/tests/2_cubes_heat.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +from fwk.testing import * +from katoptron.readers import read_Belos + + +def main(): + comm, rank, size = u.import_MPI() + + from PyTrilinos import Teuchos + + import shlex + import subprocess + import os + import numpy as np + + geo_name = '2_cubes.geo' + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size) + + ensemble_size = 1 + + pbl = m.Problem(msh, comm) + + #E = np.linspace(0.5,1.5,ensemble_size) + E = 1. * np.ones(ensemble_size) + nu = 0.2 * np.ones(ensemble_size) + k = 0.114 + d = 0. + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + m.Medium(pbl, "Body 2", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Surf 1 1", "Clamped", 1, 0., 1, 0., 1, 0., 1, 10., + ensemble_size) + m.Dirichlet(pbl, "Surf 2 2", "Clamped", 1, 0., 1, 0., 1, -2., 1, 20., + ensemble_size) + + norm = tbox.Vector3d(0, 0, -1) + cont = m.Contact(pbl, "Surf 1 2", "contact", norm) + cont.setInitialyOpen() + cont.setMaster(pbl, "Surf 2 1", norm) + + dx = np.zeros(ensemble_size) + dy = 2. * np.ones(ensemble_size) + dz = np.zeros(ensemble_size) + dT = 10. * np.ones(ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 1000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList["MueLu xml file name"] = file_dir + '/direct_solver.xml' + solverList["convert MueLu xml file"] = True + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 3 + + solverList['Write matrix and vectors'] = True + solverList['Write txt files'] = True + + slv = m.IterativeSolver(pbl, solverList, 4, ensemble_size) + + nThreads = u.Initialize_Kokkos() + + slv.start() + + u.Finalize_Kokkos() + + tests = CTests() + measured_total_CPU_cost = slv.getTimers()["total"].read().getReal().sec() + + non_zero_CPU_cost = (measured_total_CPU_cost > 0.) + tests.add(CTest('non zero total CPU cost', non_zero_CPU_cost, True)) + + iter_indices, residuals = read_Belos(work_dir + '/belos_out.txt', 1) + + nIterations = iter_indices[-1] + has_converged = (solverList['Maximum Iterations'] > nIterations) + tests.add(CTest('Has converged', has_converged, True)) + + tag_name = "T measure" + which_pos = 0 + which_dof = 3 + DOFperNode = 4 + name_sol = "x_mm.txt" + + pos_1, sol_1 = u.extract(msh, tag_name, DOFperNode, which_pos, which_dof, + ensemble_size, name_sol) + + measured_T_1 = sol_1[0] + tests.add(CTest('Temperature 1', measured_T_1, 14.170731, 5e-5)) + + tests.run() + + +if __name__ == "__main__": + main() diff --git a/katoptron/tests/2_cubes_no_contact.py b/katoptron/tests/2_cubes_no_contact.py new file mode 100644 index 0000000000000000000000000000000000000000..1d121172f7f3f54d6dd68dd6154c242d40004439 --- /dev/null +++ b/katoptron/tests/2_cubes_no_contact.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u + + +def main(): + comm, rank, size = u.import_MPI() + + from PyTrilinos import Teuchos + + import shlex + import subprocess + import os + import numpy as np + + geo_name = '2_cubes.geo' + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size) + + ensemble_size = 1 + + pbl = m.Problem(msh, comm) + + E = 1. * np.ones(ensemble_size) + nu = 0.2 * np.ones(ensemble_size) + k = 0.114 + d = 0. + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + m.Medium(pbl, "Body 2", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Surf 1 1", "Clamped", 1, 0., + 1, 0., 1, 0., 1, 10., ensemble_size) + m.Dirichlet(pbl, "Surf 2 2", "Clamped", 1, 0., + 1, 0., 1, 2., 1, 20., ensemble_size) + + dx = np.zeros(ensemble_size) + dy = 2. * np.ones(ensemble_size) + dz = np.zeros(ensemble_size) + dT = 10. * np.ones(ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 1000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + + mueluParams = Teuchos.ParameterList() + mueluParams['number of equations'] = 4 + mueluParams['max levels'] = 1 + mueluParams['smoother: type'] = "RELAXATION" + + mueluParamsSub2 = Teuchos.ParameterList() + mueluParamsSub2['relaxation: type'] = "Symmetric Gauss-Seidel" + mueluParamsSub2['relaxation: sweeps'] = 1 + mueluParamsSub2['relaxation: damping factor'] = 0.9 + + mueluParams['verbosity'] = "low" + + mueluParams['smoother: params'] = mueluParamsSub2 + + solverList['mueluParams'] = mueluParams + + slv = m.IterativeSolver(pbl, solverList, 4, ensemble_size) + + nThreads = u.Initialize_Kokkos() + + slv.start() + + u.Finalize_Kokkos() + + +if __name__ == "__main__": + main() diff --git a/katoptron/tests/2_cubes_patch.geo b/katoptron/tests/2_cubes_patch.geo new file mode 100644 index 0000000000000000000000000000000000000000..5e03a0f534b61865ebe85e9be91ca80a813fe663 --- /dev/null +++ b/katoptron/tests/2_cubes_patch.geo @@ -0,0 +1,149 @@ +C = 10; +dC = 2; +nC1 = 4; +nC2 = 5; + +dz = 0; + +lc = 1; + +Point(1) = { 0, 0, 0, lc}; +Point(2) = { C, 0, 0, lc}; +Point(3) = { C, 0, C, lc}; +Point(4) = { 0, 0, C-dC, lc}; + +Point(5) = { 0, C, 0, lc}; +Point(6) = { C, C, 0, lc}; +Point(7) = { C, C, C+dC, lc}; +Point(8) = { 0, C, C, lc}; + +Point(9) = { 0, 0, 2*C+dz, lc}; +Point(10) = { C, 0, 2*C+dz, lc}; +Point(11) = { C, 0, C+dz, lc}; +Point(12) = { 0, 0, C-dC+dz, lc}; + +Point(13) = { 0, C, 2*C+dz, lc}; +Point(14) = { C, C, 2*C+dz, lc}; +Point(15) = { C, C, C+dC+dz, lc}; +Point(16) = { 0, C, C+dz, lc}; + + +Line(1) = {1, 2}; +Line(2) = {2, 3}; +Line(3) = {3, 4}; +Line(4) = {4, 1}; + +Line(5) = {5, 6}; +Line(6) = {6, 7}; +Line(7) = {7, 8}; +Line(8) = {8, 5}; + +Line(9) = {1, 5}; +Line(10) = {2, 6}; + +Line(11) = {3, 7}; +Line(12) = {4, 8}; + +Transfinite Line {1,2,3,4,5,6,7,8,9,10,11,12} = nC1+1 Using Progression 1; + +Line Loop(11) = {1,2,3,4}; +Plane Surface(12) = {11}; +Transfinite Surface {12}; +Recombine Surface {12}; + +Line Loop(13) = {-8,-7,-6,-5}; +Plane Surface(14) = {13}; +Transfinite Surface {14}; +Recombine Surface {14}; + +Line Loop(15) = {-9,-4,12,8}; +Plane Surface(16) = {15}; +Transfinite Surface {16}; +Recombine Surface {16}; + +Line Loop(17) = {10,6,-11,-2}; +Plane Surface(18) = {17}; +Transfinite Surface {18}; +Recombine Surface {18}; + +Line Loop(19) = {9,5,-10,-1}; +Plane Surface(20) = {19}; +Transfinite Surface {20}; +Recombine Surface {20}; + +Line Loop(21) = {-12,-3,11,7}; +Plane Surface(22) = {21}; +Transfinite Surface {22}; +Recombine Surface {22}; + +Surface Loop(1) = {22, 16, 20, 14, 18, 12}; +Volume(1) = {1}; + +Line(23) = {9, 10}; +Line(24) = {10, 11}; +Line(25) = {11, 12}; +Line(26) = {12, 9}; + +Line(27) = {13, 14}; +Line(28) = {14, 15}; +Line(29) = {15, 16}; +Line(30) = {16, 13}; + +Line(31) = {9, 13}; +Line(32) = {10, 14}; + +Line(33) = {11, 15}; +Line(34) = {12, 16}; + +Transfinite Line {23,24,25,26,27,28,29,30,31,32,33,34} = nC2+1 Using Progression 1; + +Line Loop(35) = {-26,-25,-24,-23}; +Plane Surface(36) = {35}; +Transfinite Surface {36}; +Recombine Surface {36}; + +Line Loop(37) = {27,28,29,30}; +Plane Surface(38) = {37}; +Transfinite Surface {38}; +Recombine Surface {38}; + +Line Loop(39) = {24,33,-28,-32}; +Plane Surface(40) = {39}; +Transfinite Surface {40}; +Recombine Surface {40}; + +Line Loop(41) = {-33,25,34,-29}; +Plane Surface(42) = {41}; +Transfinite Surface {42}; +Recombine Surface {42}; + +Line Loop(43) = {-34,26,31,-30}; +Plane Surface(44) = {43}; +Transfinite Surface {44}; +Recombine Surface {44}; + +Line Loop(45) = {-31,-27,32,23}; +Plane Surface(46) = {45}; +Transfinite Surface {46}; +Recombine Surface {46}; + +Surface Loop(2) = {36, 38, 40, 42, 44, 46}; +Volume(2) = {2}; +Recombine Volume {1}; +Recombine Volume {2}; + +Transfinite Volume{1,2}; +//+ +Physical Volume("Body 1") = {1}; +//+ +Physical Volume("Body 2") = {2}; +//+ +Physical Surface("Clamped") = {20}; +//+ +Physical Surface("Contact 1") = {22}; +//+ +Physical Surface("Contact 2") = {42}; +//+ +Physical Surface("Load") = {46}; +//+ +Physical Point("Clamped xy") = {1}; diff --git a/katoptron/tests/2_cubes_patch.py b/katoptron/tests/2_cubes_patch.py new file mode 100644 index 0000000000000000000000000000000000000000..5d2a8e6b0b3437ec8bd89f80bb36b182273c0221 --- /dev/null +++ b/katoptron/tests/2_cubes_patch.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +#import matplotlib.pyplot as plt + +from katoptron.eigenvalues import * +from katoptron.convergence import * +from katoptron.readers import read_Belos +from fwk.testing import * + + +def main(): + comm, rank, size = u.import_MPI() + + from PyTrilinos import Teuchos + + import shlex + import subprocess + import os + import numpy as np + + geo_name = '2_cubes_patch.geo' + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size) + + ensemble_size = 1 + + pbl = m.Problem(msh, comm) + + #E = np.linspace(0.5,1.5,ensemble_size) + E = 10. * np.ones(ensemble_size) + nu = 0.4 * np.ones(ensemble_size) + k = 0.114 + d = 0. + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + m.Medium(pbl, "Body 2", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Clamped", "Clamped", 1, 0., 1, 0., 1, 0., 0, 0., + ensemble_size) + #m.Dirichlet(pbl, "Clamped xy", "Clamped",1,0.,1,0.,1,0.,0,0.,ensemble_size) + + norm = tbox.Vector3d(0, 0, -1) + cont = m.Contact(pbl, "Contact 2", "contact", norm) + cont.setMeshTying() + cont.setMaster(pbl, "Contact 1", norm) + + zero = np.zeros(ensemble_size) + p = -0.2 * np.ones(ensemble_size) + + m.Neumann(pbl, "Load", "Load 1", 0, zero, 0, zero, 1, p, 0, zero, + ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 1000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList["MueLu xml file name"] = file_dir + '/direct_solver.xml' + solverList["convert MueLu xml file"] = True + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + solverList['Write matrix and vectors'] = True + solverList['Write txt files'] = True + solverList['Create Preconditioned Matrix'] = True + + if ensemble_size > 1: + slv = m.IterativeSolver(pbl, solverList, 3, True, ensemble_size) + else: + slv = m.IterativeSolver(pbl, solverList, 3, ensemble_size) + + nThreads = u.Initialize_Kokkos() + + slv.start() + + u.Finalize_Kokkos() + + iter_indices, residuals = read_Belos(work_dir + '/belos_out.txt', 1) + + tests = CTests() + nIterations = iter_indices[-1] + has_converged = (solverList['Maximum Iterations'] > nIterations) + tests.add(CTest('Has converged', has_converged, True)) + tests.run() + + +if __name__ == "__main__": + main() diff --git a/katoptron/tests/2_cubes_patch_2_lvls.py b/katoptron/tests/2_cubes_patch_2_lvls.py new file mode 100644 index 0000000000000000000000000000000000000000..c1c9082d9f538b9fc26ee89ab798a220ba720038 --- /dev/null +++ b/katoptron/tests/2_cubes_patch_2_lvls.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +#import matplotlib.pyplot as plt + + +def main(): + comm, rank, size = u.import_MPI() + + from PyTrilinos import Teuchos + + import shlex + import subprocess + import os + import numpy as np + + geo_name = '2_cubes_patch.geo' + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size) + + ensemble_size = 1 + + pbl = m.Problem(msh, comm) + + #E = np.linspace(0.5,1.5,ensemble_size) + E = 10. * np.ones(ensemble_size) + nu = 0.4 * np.ones(ensemble_size) + k = 0.114 + d = 0. + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + m.Medium(pbl, "Body 2", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Clamped", "Clamped", 1, 0., + 1, 0., 1, 0., 0, 0., ensemble_size) + #m.Dirichlet(pbl, "Clamped xy", "Clamped",1,0.,1,0.,1,0.,0,0.,ensemble_size) + + norm = tbox.Vector3d(0, 0, -1) + cont = m.Contact(pbl, "Contact 2", "contact", norm) + cont.setMeshTying() + cont.setMaster(pbl, "Contact 1", norm) + + zero = np.zeros(ensemble_size) + p = -0.2 * np.ones(ensemble_size) + + m.Neumann(pbl, "Load", "Load 1", 0, zero, 0, + zero, 1, p, 0, zero, ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 1000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList["MueLu xml file name"] = file_dir + \ + '/../preconditioners/SIMPLE_direct_2_lvls.xml' + solverList["convert MueLu xml file"] = True + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + solverList['Write matrix and vectors'] = True + solverList['Write txt files'] = True + + if ensemble_size > 1: + slv = m.IterativeSolver(pbl, solverList, + 3, True, ensemble_size) + else: + slv = m.IterativeSolver(pbl, solverList, + 3, ensemble_size) + + nThreads = u.Initialize_Kokkos() + + slv.start() + + u.Finalize_Kokkos() + + +if __name__ == "__main__": + main() diff --git a/katoptron/tests/2_cubes_patch_BraessSarazin.py b/katoptron/tests/2_cubes_patch_BraessSarazin.py new file mode 100644 index 0000000000000000000000000000000000000000..a1d6d2061c6952ca394d13df45eed5d39fa9a207 --- /dev/null +++ b/katoptron/tests/2_cubes_patch_BraessSarazin.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +#import matplotlib.pyplot as plt +from katoptron.readers import read_Belos +from fwk.testing import * + + +def main(): + comm, rank, size = u.import_MPI() + + from PyTrilinos import Teuchos + + import shlex + import subprocess + import os + import numpy as np + + geo_name = '2_cubes_patch.geo' + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size) + + ensemble_size = 1 + + pbl = m.Problem(msh, comm) + + #E = np.linspace(0.5,1.5,ensemble_size) + E = 10. * np.ones(ensemble_size) + nu = 0.4 * np.ones(ensemble_size) + k = 0.114 + d = 0. + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + m.Medium(pbl, "Body 2", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Clamped", "Clamped", 1, 0., 1, 0., 1, 0., 0, 0., + ensemble_size) + #m.Dirichlet(pbl, "Clamped xy", "Clamped",1,0.,1,0.,1,0.,0,0.,ensemble_size) + + norm = tbox.Vector3d(0, 0, -1) + cont = m.Contact(pbl, "Contact 2", "contact", norm) + cont.setMeshTying() + cont.setMaster(pbl, "Contact 1", norm) + + zero = np.zeros(ensemble_size) + p = -0.2 * np.ones(ensemble_size) + + m.Neumann(pbl, "Load", "Load 1", 0, zero, 0, zero, 1, p, 0, zero, + ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 5000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList["MueLu xml file name"] = file_dir + \ + '/../preconditioners/BraessSarazin_mtgs.xml' + solverList["convert MueLu xml file"] = True + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + solverList['gamma'] = 1. + #solverList['Write matrix and vectors'] = True + solverList['Write txt files'] = True + + if ensemble_size > 1: + slv = m.IterativeSolver(pbl, solverList, 3, True, ensemble_size) + else: + slv = m.IterativeSolver(pbl, solverList, 3, ensemble_size) + + nThreads = u.Initialize_Kokkos() + + slv.start() + + u.Finalize_Kokkos() + + iter_indices, residuals = read_Belos(work_dir + '/belos_out.txt', 1) + + tests = CTests() + nIterations = iter_indices[-1] + has_converged = (solverList['Maximum Iterations'] > nIterations) + tests.add(CTest('Has converged', has_converged, True)) + tests.run() + + +if __name__ == "__main__": + main() diff --git a/katoptron/tests/2_cubes_patch_IndefBlockDiagonal.py b/katoptron/tests/2_cubes_patch_IndefBlockDiagonal.py new file mode 100644 index 0000000000000000000000000000000000000000..925d9d81852a5b77746a79f71e4cd90a6276d729 --- /dev/null +++ b/katoptron/tests/2_cubes_patch_IndefBlockDiagonal.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +#import matplotlib.pyplot as plt +from katoptron.readers import read_Belos +from fwk.testing import * + + +def main(): + comm, rank, size = u.import_MPI() + + from PyTrilinos import Teuchos + + import shlex + import subprocess + import os + import numpy as np + + geo_name = '2_cubes_patch.geo' + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size) + + ensemble_size = 1 + + pbl = m.Problem(msh, comm) + + #E = np.linspace(0.5,1.5,ensemble_size) + E = 10. * np.ones(ensemble_size) + nu = 0.4 * np.ones(ensemble_size) + k = 0.114 + d = 0. + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + m.Medium(pbl, "Body 2", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Clamped", "Clamped", 1, 0., 1, 0., 1, 0., 0, 0., + ensemble_size) + #m.Dirichlet(pbl, "Clamped xy", "Clamped",1,0.,1,0.,1,0.,0,0.,ensemble_size) + + norm = tbox.Vector3d(0, 0, -1) + cont = m.Contact(pbl, "Contact 2", "contact", norm) + cont.setMeshTying() + cont.setMaster(pbl, "Contact 1", norm) + + zero = np.zeros(ensemble_size) + p = -0.2 * np.ones(ensemble_size) + + m.Neumann(pbl, "Load", "Load 1", 0, zero, 0, zero, 1, p, 0, zero, + ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 5000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList["MueLu xml file name"] = file_dir + \ + '/../preconditioners/IndefiniteBlockDiagonal_mtgs.xml' + solverList["convert MueLu xml file"] = True + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + solverList['gamma'] = 1. + #solverList['Write matrix and vectors'] = True + solverList['Write txt files'] = True + + if ensemble_size > 1: + slv = m.IterativeSolver(pbl, solverList, 3, True, ensemble_size) + else: + slv = m.IterativeSolver(pbl, solverList, 3, ensemble_size) + + nThreads = u.Initialize_Kokkos() + + slv.start() + + u.Finalize_Kokkos() + + iter_indices, residuals = read_Belos(work_dir + '/belos_out.txt', 1) + + tests = CTests() + nIterations = iter_indices[-1] + has_converged = (solverList['Maximum Iterations'] > nIterations) + tests.add(CTest('Has converged', has_converged, True)) + tests.run() + + +if __name__ == "__main__": + main() diff --git a/katoptron/tests/2_cubes_patch_SIMPLE.py b/katoptron/tests/2_cubes_patch_SIMPLE.py new file mode 100644 index 0000000000000000000000000000000000000000..95b1aeaaeee844b115483d554d7fdc1fc4117584 --- /dev/null +++ b/katoptron/tests/2_cubes_patch_SIMPLE.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +#import matplotlib.pyplot as plt +from katoptron.readers import read_Belos +from fwk.testing import * + + +def main(): + comm, rank, size = u.import_MPI() + + from PyTrilinos import Teuchos + + import shlex + import subprocess + import os + import numpy as np + + geo_name = '2_cubes_patch.geo' + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size) + + ensemble_size = 1 + + pbl = m.Problem(msh, comm) + + #E = np.linspace(0.5,1.5,ensemble_size) + E = 10. * np.ones(ensemble_size) + nu = 0.4 * np.ones(ensemble_size) + k = 0.114 + d = 0. + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + m.Medium(pbl, "Body 2", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Clamped", "Clamped", 1, 0., 1, 0., 1, 0., 0, 0., + ensemble_size) + #m.Dirichlet(pbl, "Clamped xy", "Clamped",1,0.,1,0.,1,0.,0,0.,ensemble_size) + + norm = tbox.Vector3d(0, 0, -1) + cont = m.Contact(pbl, "Contact 2", "contact", norm) + cont.setMeshTying() + cont.setMaster(pbl, "Contact 1", norm) + + zero = np.zeros(ensemble_size) + p = -0.2 * np.ones(ensemble_size) + + m.Neumann(pbl, "Load", "Load 1", 0, zero, 0, zero, 1, p, 0, zero, + ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 5000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['gamma'] = 1. + + solverList["MueLu xml file name"] = file_dir + \ + '/../preconditioners/SIMPLE_direct.xml' + solverList["Create Preconditioned Matrix"] = True + solverList["convert MueLu xml file"] = True + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + solverList['gamma'] = 1. + #solverList['Write matrix and vectors'] = True + solverList['Write txt files'] = True + + if ensemble_size > 1: + slv = m.IterativeSolver(pbl, solverList, 3, True, ensemble_size) + else: + slv = m.IterativeSolver(pbl, solverList, 3, ensemble_size) + + nThreads = u.Initialize_Kokkos() + + slv.start() + + u.Finalize_Kokkos() + + iter_indices, residuals = read_Belos(work_dir + '/belos_out.txt', 1) + + tests = CTests() + nIterations = iter_indices[-1] + has_converged = (solverList['Maximum Iterations'] > nIterations) + tests.add(CTest('Has converged', has_converged, True)) + tests.run() + + +if __name__ == "__main__": + main() diff --git a/katoptron/tests/2_cubes_patch_SIMPLEC.py b/katoptron/tests/2_cubes_patch_SIMPLEC.py new file mode 100644 index 0000000000000000000000000000000000000000..b2e47b1b7579a41c2700646e9558babc5942c516 --- /dev/null +++ b/katoptron/tests/2_cubes_patch_SIMPLEC.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +#import matplotlib.pyplot as plt +from katoptron.readers import read_Belos +from fwk.testing import * + + +def main(): + comm, rank, size = u.import_MPI() + + from PyTrilinos import Teuchos + + import shlex + import subprocess + import os + import numpy as np + + geo_name = '2_cubes_patch.geo' + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size) + + ensemble_size = 1 + + pbl = m.Problem(msh, comm) + + #E = np.linspace(0.5,1.5,ensemble_size) + E = 10. * np.ones(ensemble_size) + nu = 0.4 * np.ones(ensemble_size) + k = 0.114 + d = 0. + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + m.Medium(pbl, "Body 2", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Clamped", "Clamped", 1, 0., 1, 0., 1, 0., 0, 0., + ensemble_size) + #m.Dirichlet(pbl, "Clamped xy", "Clamped",1,0.,1,0.,1,0.,0,0.,ensemble_size) + + norm = tbox.Vector3d(0, 0, -1) + cont = m.Contact(pbl, "Contact 2", "contact", norm) + cont.setMeshTying() + cont.setMaster(pbl, "Contact 1", norm) + + zero = np.zeros(ensemble_size) + p = -0.2 * np.ones(ensemble_size) + + m.Neumann(pbl, "Load", "Load 1", 0, zero, 0, zero, 1, p, 0, zero, + ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 5000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList["MueLu xml file name"] = file_dir + \ + '/../preconditioners/SIMPLEC_mtgs.xml' + solverList["convert MueLu xml file"] = True + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + solverList['gamma'] = 1. + #solverList['Write matrix and vectors'] = True + solverList['Write txt files'] = True + + if ensemble_size > 1: + slv = m.IterativeSolver(pbl, solverList, 3, True, ensemble_size) + else: + slv = m.IterativeSolver(pbl, solverList, 3, ensemble_size) + + nThreads = u.Initialize_Kokkos() + + slv.start() + + u.Finalize_Kokkos() + + iter_indices, residuals = read_Belos(work_dir + '/belos_out.txt', 1) + + tests = CTests() + nIterations = iter_indices[-1] + has_converged = (solverList['Maximum Iterations'] > nIterations) + tests.add(CTest('Has converged', has_converged, True)) + tests.run() + + +if __name__ == "__main__": + main() diff --git a/katoptron/tests/2_cubes_patch_Uzawa.py b/katoptron/tests/2_cubes_patch_Uzawa.py new file mode 100644 index 0000000000000000000000000000000000000000..1af732945797e5fbe6a59eca95aebc90e360d127 --- /dev/null +++ b/katoptron/tests/2_cubes_patch_Uzawa.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +#import matplotlib.pyplot as plt +from katoptron.readers import read_Belos +from fwk.testing import * + + +def main(): + comm, rank, size = u.import_MPI() + + from PyTrilinos import Teuchos + + import shlex + import subprocess + import os + import numpy as np + + geo_name = '2_cubes_patch.geo' + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size) + + ensemble_size = 1 + + pbl = m.Problem(msh, comm) + + #E = np.linspace(0.5,1.5,ensemble_size) + E = 10. * np.ones(ensemble_size) + nu = 0.4 * np.ones(ensemble_size) + k = 0.114 + d = 0. + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + m.Medium(pbl, "Body 2", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Clamped", "Clamped", 1, 0., 1, 0., 1, 0., 0, 0., + ensemble_size) + #m.Dirichlet(pbl, "Clamped xy", "Clamped",1,0.,1,0.,1,0.,0,0.,ensemble_size) + + norm = tbox.Vector3d(0, 0, -1) + cont = m.Contact(pbl, "Contact 2", "contact", norm) + cont.setMeshTying() + cont.setMaster(pbl, "Contact 1", norm) + + zero = np.zeros(ensemble_size) + p = -0.2 * np.ones(ensemble_size) + + m.Neumann(pbl, "Load", "Load 1", 0, zero, 0, zero, 1, p, 0, zero, + ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 5000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList["MueLu xml file name"] = file_dir + \ + '/../preconditioners/Uzawa_mtgs.xml' + solverList["convert MueLu xml file"] = True + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + solverList['gamma'] = 1. + #solverList['Write matrix and vectors'] = True + solverList['Write txt files'] = True + + if ensemble_size > 1: + slv = m.IterativeSolver(pbl, solverList, 3, True, ensemble_size) + else: + slv = m.IterativeSolver(pbl, solverList, 3, ensemble_size) + + nThreads = u.Initialize_Kokkos() + + slv.start() + + u.Finalize_Kokkos() + + iter_indices, residuals = read_Belos(work_dir + '/belos_out.txt', 1) + + tests = CTests() + nIterations = iter_indices[-1] + has_converged = (solverList['Maximum Iterations'] > nIterations) + tests.add(CTest('Has converged', has_converged, True)) + tests.run() + + +if __name__ == "__main__": + main() diff --git a/katoptron/tests/2_cubes_sticking.geo b/katoptron/tests/2_cubes_sticking.geo new file mode 100644 index 0000000000000000000000000000000000000000..aa71ad54e54a404a0859069bebb55873eb5688ea --- /dev/null +++ b/katoptron/tests/2_cubes_sticking.geo @@ -0,0 +1,72 @@ +// $Id$ +// fichier de donnees gmsh + +SetFactory("OpenCASCADE"); + +C1 = 10; +C2 = 10; +nC1 = 4; +nC2 = 4; + +theta = 0*Pi/4; +dx = 0; +dy = 0; +dz = 0.; +lc = 1; + +Point(1) = { 0, 0, 0, lc}; +Point(2) = { C1, 0, 0, lc}; +Point(3) = { C1, 0, C1, lc}; +Point(4) = { 0, 0, C1, lc}; + +Point(5) = { 0, 0, C1+dz, lc}; +Point(6) = { C2, 0, C1+dz, lc}; +Point(7) = { C2, 0, C1+C2+dz, lc}; +Point(8) = { 0, 0, C1+C2+dz, lc}; + +Line(1) = {1, 2}; +Line(2) = {2, 3}; +Line(3) = {3, 4}; +Line(4) = {4, 1}; + +Line(5) = {5, 6}; +Line(6) = {6, 7}; +Line(7) = {7, 8}; +Line(8) = {8, 5}; + +Transfinite Line {1,2,3,4} = nC1+1 Using Progression 1; +Transfinite Line {5,6,7,8} = nC2+1 Using Progression 1; + +Line Loop(11) = {1,2,3,4}; +Plane Surface(12) = {11}; +Transfinite Surface {12}; +Recombine Surface {12}; + +Line Loop(13) = {5,6,7,8}; +Plane Surface(14) = {13}; +Transfinite Surface {14}; +Recombine Surface {14}; + +Extrude {0, C1, 0} +{ + Surface{12}; Layers{nC1}; Recombine; +} + +Extrude {0, C2, 0} +{ + Surface{14}; Layers{nC2}; Recombine; +} + +// physical entities + +Physical Volume("Body 1") = {1}; +Physical Volume("Body 2") = {2}; + +Physical Surface("Surf 1 1") = {15}; +Physical Surface("Surf 1 2") = {17}; + +Physical Surface("Surf 2 1") = {20}; +Physical Surface("Surf 2 2") = {22}; + +Physical Point("Pts 1 x") = {1,3}; +Physical Point("Pts 1 y") = {1,2}; diff --git a/katoptron/tests/2_cubes_sticking.py b/katoptron/tests/2_cubes_sticking.py new file mode 100644 index 0000000000000000000000000000000000000000..93ed3fbf390e29e65e166b470e23d684fed739b9 --- /dev/null +++ b/katoptron/tests/2_cubes_sticking.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +#import matplotlib.pyplot as plt + + +def main(): + comm, rank, size = u.import_MPI() + + from PyTrilinos import Teuchos + + import shlex + import subprocess + import os + import numpy as np + + geo_name = '2_cubes.geo' + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size) + + ensemble_size = 1 + + pbl = m.Problem(msh, comm) + + E = 1. * np.ones(ensemble_size) + nu = 0.2 * np.ones(ensemble_size) + k = 0.114 + d = 0. + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + m.Medium(pbl, "Body 2", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Surf 1 1", "Clamped", 1, 0., + 1, 0., 1, 0., 1, 10., ensemble_size) + m.Dirichlet(pbl, "Surf 2 2", "Clamped", 1, 2., + 1, 2., 1, -2., 1, 20., ensemble_size) + + norm = tbox.Vector3d(0, 0, -1) + cont = m.Contact(pbl, "Surf 1 2", "contact", norm) + # cont.setInitialyOpen() + cont.setNoUpdate() + cont.setSticking() + cont.setMaster(pbl, "Surf 2 1", norm) + + dx = np.zeros(ensemble_size) + dy = 2. * np.ones(ensemble_size) + dz = np.zeros(ensemble_size) + dT = 10. * np.ones(ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 1000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList["MueLu xml file name"] = file_dir + '/direct_solver.xml' + solverList["convert MueLu xml file"] = True + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + #solverList['Write matrix and vectors'] = True + solverList['Write txt files'] = True + + slv = m.IterativeSolver(pbl, solverList, 3, ensemble_size) + + nThreads = u.Initialize_Kokkos() + + slv.start() + + u.Finalize_Kokkos() + + +if __name__ == "__main__": + main() diff --git a/katoptron/tests/2_cubes_tet.geo b/katoptron/tests/2_cubes_tet.geo new file mode 100644 index 0000000000000000000000000000000000000000..5bde791cd85ee1633b5749b48a781152ae09f4be --- /dev/null +++ b/katoptron/tests/2_cubes_tet.geo @@ -0,0 +1,75 @@ +// $Id$ +// fichier de donnees gmsh + +C1 = 10; +C2 = 10; +nC1 = 4; +nC2 = 4; + +theta = 0.1*Pi/4; +dx = 0; +dy = 0; +dz = 0.1; +lc = 1; + +Point(1) = { 0, 0, 0, lc}; +Point(2) = { C1, 0, 0, lc}; +Point(3) = { C1, 0, C1, lc}; +Point(4) = { 0, 0, C1, lc}; + +Point(5) = { 0, 0, C1+dz, lc}; +Point(6) = { C2, 0, C1+dz, lc}; +Point(7) = { C2, 0, C1+C2+dz, lc}; +Point(8) = { 0, 0, C1+C2+dz, lc}; + +Line(1) = {1, 2}; +Line(2) = {2, 3}; +Line(3) = {3, 4}; +Line(4) = {4, 1}; + +Line(5) = {5, 6}; +Line(6) = {6, 7}; +Line(7) = {7, 8}; +Line(8) = {8, 5}; + +Transfinite Line {1,2,3,4} = nC1+1 Using Progression 1; +Transfinite Line {5,6,7,8} = nC2+1 Using Progression 1; + +Line Loop(11) = {1,2,3,4}; +Plane Surface(12) = {11}; +Transfinite Surface {12}; +//Recombine Surface {12}; + +Extrude {0, C1, 0} +{ + Surface{12}; Layers{nC1}; //Recombine; +} + +Line Loop(13) = {5,6,7,8}; +Plane Surface(14) = {13}; +Transfinite Surface {14}; +//Recombine Surface {14}; + +Rotate {{0,0,1}, {0,0,0}, theta}{Surface{14};} + +Extrude {-C2*Sin(theta), C2*Cos(theta), 0} +{ + Surface{14}; Layers{nC2}; //Recombine; +} + +Translate {dx,dy,0} { Volume{2};} + +// physical entities + +Physical Volume("Body 1") = {1}; +Physical Volume("Body 2") = {2}; + +Physical Surface("Surf 1 1") = {-21}; +Physical Surface("Surf 1 2") = {-29}; + +Physical Surface("Surf 2 1") = {-43}; +Physical Surface("Surf 2 2") = {-51}; + +//Mesh.Partitioner = 2; +//Mesh.MetisAlgorithm = 2; +//Mesh.MshFilePartitioned = 0; diff --git a/katoptron/tests/2_cubes_tet.py b/katoptron/tests/2_cubes_tet.py new file mode 100644 index 0000000000000000000000000000000000000000..acb1c29353d4f95d0f1ccd973df704c9b76d2a15 --- /dev/null +++ b/katoptron/tests/2_cubes_tet.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +#import matplotlib.pyplot as plt + + +def main(): + comm, rank, size = u.import_MPI() + + from PyTrilinos import Teuchos + + import shlex + import subprocess + import os + import numpy as np + + geo_name = '2_cubes_tet.geo' + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size) + + ensemble_size = 1 + + pbl = m.Problem(msh, comm) + + #E = np.linspace(0.5,1.5,ensemble_size) + E = 1. * np.ones(ensemble_size) + nu = 0.2 * np.ones(ensemble_size) + k = 0.114 + d = 0. + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + m.Medium(pbl, "Body 2", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Surf 1 1", "Clamped", 1, 0., + 1, 0., 1, 0., 1, 10., ensemble_size) + m.Dirichlet(pbl, "Surf 2 2", "Clamped", 1, 0., + 1, 0., 1, 2., 1, 20., ensemble_size) + + norm = tbox.Vector3d(0, 0, -1) + cont = m.Contact(pbl, "Surf 1 2", "contact", norm) + # cont.setInitialyOpen() + cont.setNoUpdate() + cont.setSticking() + cont.setMaster(pbl, "Surf 2 1", norm) + + dx = np.zeros(ensemble_size) + dy = 2. * np.ones(ensemble_size) + dz = np.zeros(ensemble_size) + dT = 10. * np.ones(ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 1000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList["MueLu xml file name"] = file_dir + '/multigrid_2_lvls_3_1.xml' + solverList["convert MueLu xml file"] = True + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + + slv = m.IterativeSolver(pbl, solverList, 3, ensemble_size) + + nThreads = u.Initialize_Kokkos() + + slv.start() + + u.Finalize_Kokkos() + + +if __name__ == "__main__": + main() diff --git a/katoptron/tests/3_cubes.geo b/katoptron/tests/3_cubes.geo new file mode 100644 index 0000000000000000000000000000000000000000..30d5eecd69c002794cae3151b0549075521bf9c0 --- /dev/null +++ b/katoptron/tests/3_cubes.geo @@ -0,0 +1,107 @@ +// $Id$ +// fichier de donnees gmsh + +C1 = 10; +C2 = 9; +C3 = 10; +nC1 = 4; +nC2 = 5; +nC3 = 6; + +theta1 = 0.1*Pi/4; +theta2 = -0.1*Pi/4; + +dx1 = 0; +dy1 = 0; +dz1 = 0.1; +dx2 = 0; +dy2 = 0; +dz2 = 0.1; +lc = 1; + +Point(1) = { 0, 0, 0, lc}; +Point(2) = { C1, 0, 0, lc}; +Point(3) = { C1, 0, C1, lc}; +Point(4) = { 0, 0, C1, lc}; + +Point(5) = { 0, 0, C1+dz1, lc}; +Point(6) = { C2, 0, C1+dz1, lc}; +Point(7) = { C2, 0, C1+C2+dz1, lc}; +Point(8) = { 0, 0, C1+C2+dz1, lc}; + +Point(9) = { 0, 0, C1+C2+dz1+dz2, lc}; +Point(10) = { C3, 0, C1+C2+dz1+dz2, lc}; +Point(11) = { C3, 0, C1+C2+C3+dz1+dz2, lc}; +Point(12) = { 0, 0, C1+C2+C3+dz1+dz2, lc}; + +Line(1) = {1, 2}; +Line(2) = {2, 3}; +Line(3) = {3, 4}; +Line(4) = {4, 1}; + +Line(5) = {5, 6}; +Line(6) = {6, 7}; +Line(7) = {7, 8}; +Line(8) = {8, 5}; + +Line(9) = {9, 10}; +Line(10) = {10, 11}; +Line(11) = {11, 12}; +Line(12) = {12, 9}; + +Transfinite Line {1,2,3,4} = nC1+1 Using Progression 1; +Transfinite Line {5,6,7,8} = nC2+1 Using Progression 1; +Transfinite Line {9,10,11,12} = nC3+1 Using Progression 1; + +Line Loop(13) = {1,2,3,4}; +Plane Surface(14) = {13}; +Transfinite Surface {14}; +Recombine Surface {14}; + +Extrude {0, C1, 0} +{ + Surface{14}; Layers{nC1}; Recombine; +} + +Line Loop(15) = {5,6,7,8}; +Plane Surface(16) = {15}; +Transfinite Surface {16}; +Recombine Surface {16}; + +Rotate {{0,0,1}, {0,0,0}, theta1}{Surface{16};} + +Extrude {-C2*Sin(theta1), C2*Cos(theta1), 0} +{ + Surface{16}; Layers{nC2}; Recombine; +} + +Translate {dx1,dy1,0} { Volume{2};} + +Line Loop(17) = {9,10,11,12}; +Plane Surface(18) = {17}; +Transfinite Surface {18}; +Recombine Surface {18}; + +Rotate {{0,0,1}, {0,0,0}, theta2}{Surface{18};} + +Extrude {-C3*Sin(theta2), C3*Cos(theta2), 0} +{ + Surface{18}; Layers{nC3}; Recombine; +} + +Translate {dx2,dy2,0} { Volume{3};} + +// physical entities + +Physical Volume("Body 1") = {1}; +Physical Volume("Body 2") = {2}; +Physical Volume("Body 3") = {3}; + +Physical Surface("Surf 1 1") = {-23}; +Physical Surface("Surf 1 2") = {-31}; + +Physical Surface("Surf 2 1") = {-45}; +Physical Surface("Surf 2 2") = {-53}; + +Physical Surface("Surf 3 1") = {-67}; +Physical Surface("Surf 3 2") = {-75}; diff --git a/katoptron/tests/3_cubes_partial_sticking.py b/katoptron/tests/3_cubes_partial_sticking.py new file mode 100644 index 0000000000000000000000000000000000000000..7e05beac9a6f8b0b6cca7b2edf613d743a45f8dc --- /dev/null +++ b/katoptron/tests/3_cubes_partial_sticking.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +#import matplotlib.pyplot as plt + + +def main(): + comm, rank, size = u.import_MPI() + + nThreads = u.Initialize_Kokkos() + + from PyTrilinos import Teuchos + + import shlex + import subprocess + import os + import numpy as np + + geo_name = '3_cubes.geo' + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size) + + ensemble_size = 1 + + pbl = m.Problem(msh, comm) + + #E = np.linspace(0.5,1.5,ensemble_size) + E = 1. * np.ones(ensemble_size) + nu = 0.2 * np.ones(ensemble_size) + k = 0.114 + d = 0. + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + m.Medium(pbl, "Body 2", "test", E, nu, k, d) + m.Medium(pbl, "Body 3", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Surf 1 1", "Clamped", 1, 0., + 1, 0., 1, 0., 1, 10., ensemble_size) + m.Dirichlet(pbl, "Surf 3 2", "Clamped", 1, 2., + 1, 2., 1, -2., 1, 20., ensemble_size) + + norm = tbox.Vector3d(0, 0, -1) + cont = m.Contact(pbl, "Surf 1 2", "contact", norm) + # cont.setInitialyOpen() + # cont.setNoUpdate() + # cont.setSticking() + cont.setMaster(pbl, "Surf 2 1", norm) + + norm = tbox.Vector3d(0, 0, -1) + cont = m.Contact(pbl, "Surf 2 2", "contact", norm) + # cont.setInitialyOpen() + cont.setNoUpdate() + cont.setSticking() + cont.setMaster(pbl, "Surf 3 1", norm) + + dx = np.zeros(ensemble_size) + dy = 2. * np.ones(ensemble_size) + #dy = np.linspace(0.5,1.5,ensemble_size) + dz = np.zeros(ensemble_size) + dT = 10. * np.ones(ensemble_size) + #m.Dirichlet(pbl, "Surf 2", "Moved",0,dx,1,dy,0,dz,1,dT) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 1000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList["MueLu xml file name"] = file_dir + '/direct_solver.xml' + solverList["convert MueLu xml file"] = True + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 5 + + #solverList['Print Teuchos timers'] = True + solverList['Write matrix and vectors'] = True + solverList['Write txt files'] = True + + if ensemble_size > 1: + slv = m.IterativeSolver(pbl, solverList, + 3, True, ensemble_size) + else: + slv = m.IterativeSolver(pbl, solverList, + 3, ensemble_size) + + slv.start() + + u.Finalize_Kokkos() + + +if __name__ == "__main__": + main() diff --git a/katoptron/tests/L_shape.py b/katoptron/tests/L_shape.py new file mode 100644 index 0000000000000000000000000000000000000000..6a80366f5a161067b7b9388bfdd012ca7b00e14d --- /dev/null +++ b/katoptron/tests/L_shape.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +#import matplotlib.pyplot as plt + +import katoptron.utilities as u + + +def main(): + comm, rank, size = u.import_MPI() + + from fwk.wutils import parseargs + args = parseargs() + + from PyTrilinos import Teuchos + import os + import numpy as np + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh = u.fuse_meshes('L_shape_1.geo', 'L_shape_1', 'L_shape_2.geo', + 'L_shape_2', 'L_shape_fused', file_dir, work_dir, comm, rank, size) + + ensemble_size = 1 + + pbl = m.Problem(msh, comm) + + E = 10. * np.ones(ensemble_size) + nu = 0.4 * np.ones(ensemble_size) + k = 0.114 + d = 0. + m.Medium(pbl, "body", "test", E, nu, k, d) + + m.Dirichlet(pbl, "clamping", "Clamped", 1, 0., + 1, 0., 1, 0., 0, 0., ensemble_size) + #m.Dirichlet(pbl, "load", "Clamped",1,0.,1,2.,1,0.,0,0.,ensemble_size) + + norm = tbox.Vector3d(0, 0, -1) + cont = m.Contact(pbl, "outer part boundary 1", "contact", norm) + cont.setMeshTying() + cont.setMaster(pbl, "inner edge boundary 1", norm) + cont1 = m.Contact(pbl, "inner edge boundary 2", "contact", norm) + cont1.setMeshTying() + cont1.setMaster(pbl, "outer part boundary 2", norm) + cont2 = m.Contact(pbl, "outer part boundary 3", "contact", norm) + cont2.setMeshTying() + cont2.setMaster(pbl, "inner edge boundary 3", norm) + cont3 = m.Contact(pbl, "inner edge boundary 4", "contact", norm) + cont3.setMeshTying() + cont3.setMaster(pbl, "outer part boundary 4", norm) + f = -0.002 * np.ones(ensemble_size) + zero = np.zeros(ensemble_size) + + m.Neumann(pbl, "load", "load", 0, zero, 1, + f, 0, zero, 0, zero, ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 10 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList["MueLu xml file name"] = file_dir + '/direct_solver.xml' + solverList["convert MueLu xml file"] = True + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + #solverList['Write matrix and vectors'] = True + solverList['Write txt files'] = True + + nThreads = u.Initialize_Kokkos() + + slv = m.IterativeSolver(pbl, solverList, 3, ensemble_size) + + slv.start() + + u.Finalize_Kokkos() + + +if __name__ == "__main__": + main() diff --git a/katoptron/tests/L_shape_1.geo b/katoptron/tests/L_shape_1.geo new file mode 100644 index 0000000000000000000000000000000000000000..faef02eac78b1be3d51742ae5ed49b131f03ff21 --- /dev/null +++ b/katoptron/tests/L_shape_1.geo @@ -0,0 +1,95 @@ +SetFactory("OpenCASCADE"); + +LX = 10; +lx = 2; +LY = 10; +ly = 2; +LZ = 2; +lix = 1; +liy = 1; + +nlix = 11; +nliy = 11; + +nloiy = 4; +nloix = 4; +nloey = 4; +nloex = 4; + +nLX = 8; +nLY = 8; + +nZ1 = 8; +nZ2 = 5; + +lc = 1; + +Point(1) = { lx, ly, 0., lc}; +Point(2) = { lx+lix, ly, 0., lc}; +Point(3) = { lx+lix, ly-liy, 0., lc}; +Point(4) = { lx, ly-liy, 0., lc}; +Point(5) = { lx-lix, ly-liy, 0., lc}; +Point(6) = { lx-lix, ly, 0., lc}; +Point(7) = { lx-lix, ly+liy, 0., lc}; +Point(8) = { lx, ly+liy, 0., lc}; +//+ +Line(1) = {1, 2}; +//+ +Line(2) = {2, 3}; +//+ +Line(3) = {3, 4}; +//+ +Line(4) = {4, 5}; +//+ +Line(5) = {5, 6}; +//+ +Line(6) = {6, 7}; +//+ +Line(7) = {7, 8}; +//+ +Line(8) = {8, 1}; +//+ +Line(9) = {1, 6}; +//+ +Line(10) = {1, 4}; +//+ +Line Loop(1) = {1, 2, 3, -10}; +//+ +Plane Surface(1) = {1}; +//+ +Line Loop(2) = {10, 4, 5, -9}; +//+ +Plane Surface(2) = {2}; +//+ +Line Loop(3) = {9, 6, 7, 8}; +//+ +Plane Surface(3) = {3}; +//+ +Transfinite Line {7, 9, 4, 3, 1} = nlix Using Progression 1; +//+ +Transfinite Line {6, 5, 8, 10, 2} = nliy Using Progression 1; +//+ +Transfinite Surface {2}; +Recombine Surface {2}; +//+ +Transfinite Surface {3}; +Recombine Surface {3}; +//+ +Transfinite Surface {1}; +Recombine Surface {1}; + + +Extrude {0, 0, LZ} +{ + Surface{1,2,3}; Layers{nZ1}; Recombine; +} + + +Physical Volume("body") = {1,2,3}; +//+ +Physical Surface("inner edge boundary 1") = {14}; +Physical Surface("inner edge boundary 2") = {13,10}; +Physical Surface("inner edge boundary 3") = {9,6}; +Physical Surface("inner edge boundary 4") = {5}; +//+ +Physical Line("slave Dirichlet") = {24, 19, 14}; diff --git a/katoptron/tests/L_shape_2.geo b/katoptron/tests/L_shape_2.geo new file mode 100644 index 0000000000000000000000000000000000000000..8edb92cd6de18e2b218fed4f5aaed4d13ebffe06 --- /dev/null +++ b/katoptron/tests/L_shape_2.geo @@ -0,0 +1,167 @@ +SetFactory("OpenCASCADE"); + +LX = 10; +lx = 2; +LY = 10; +ly = 2; +LZ = 2; +lix = 1; +liy = 1; + +nlix = 10; +nliy = 10; + +nloiy = 4; +nloix = 4; +nloey = 4; +nloex = 4; + +nLX = 16; +nLY = 16; + +nZ1 = 8; +nZ2 = 5; + +lc = 1; + +dx = 0.; + +Point(9) = { lx+lix+dx, ly, 0., lc}; +Point(10) = { LX, ly, 0., lc}; +Point(11) = { LX, 0, 0., lc}; +Point(12) = { lx+lix+dx, 0, 0., lc}; +Point(13) = { 0, 0, 0., lc}; +Point(14) = { 0, ly-liy-dx, 0., lc}; +Point(15) = { 0, ly+liy+dx, 0., lc}; +Point(16) = { 0, LY, 0., lc}; +Point(17) = { lx, LY, 0., lc}; +Point(18) = { lx, ly+liy+dx, 0., lc}; +Point(19) = { lx-lix-dx, ly+liy+dx, 0., lc}; +Point(20) = { lx-lix-dx, ly-liy-dx, 0., lc}; +Point(21) = { lx+lix+dx, ly-liy-dx, 0., lc}; + +Point(22) = { LX, ly-liy-dx, 0., lc}; +Point(23) = { lx-lix-dx, 0, 0., lc}; +Point(24) = { lx-lix-dx, LY, 0., lc}; +//+ +Line(11) = {21, 9}; +//+ +Line(12) = {21, 12}; +//+ +Line(13) = {11, 22}; +//+ +Line(14) = {22, 10}; +//+ +Line(15) = {23, 20}; +//+ +Line(16) = {13, 14}; +//+ +Line(17) = {18, 17}; +//+ +Line(18) = {24, 19}; +//+ +Line(19) = {15, 16}; +//+ +Line(20) = {18, 19}; +//+ +Line(21) = {19, 15}; +//+ +Line(22) = {15, 14}; +//+ +Line(23) = {14, 20}; +//+ +Line(24) = {20, 19}; +//+ +Line(25) = {13, 23}; +//+ +Line(26) = {23, 12}; +//+ +Line(27) = {21, 20}; +//+ +Line(28) = {9, 10}; +//+ +Line(29) = {22, 21}; +//+ +Line(30) = {12, 11}; +//+ +Line(31) = {24, 17}; +//+ +Line(32) = {24, 16}; +//+ +Line Loop(4) = {19, -32, 18, 21}; +//+ +Plane Surface(4) = {4}; +//+ +Line Loop(5) = {17, -31, 18, -20}; +//+ +Plane Surface(5) = {5}; +//+ +Line Loop(6) = {24, 21, 22, 23}; +//+ +Plane Surface(6) = {6}; +//+ +Line Loop(7) = {16, 23, -15, -25}; +//+ +Plane Surface(7) = {7}; +//+ +Line Loop(8) = {26, -12, 27, -15}; +//+ +Plane Surface(8) = {8}; +//+ +Line Loop(9) = {12, 30, 13, 29}; +//+ +Plane Surface(9) = {9}; +//+ +Line Loop(10) = {11, 28, -14, 29}; +//+ +Plane Surface(10) = {10}; +//+ +Transfinite Line {19, 18, 17} = nLY Using Progression 1; +//+ +Transfinite Line {28, 29, 30} = nLX Using Progression 1; +//+ +Transfinite Line {11, 14} = nloiy Using Progression 1; +//+ +Transfinite Line {13, 12, 15, 16} = nloey Using Progression 1; +//+ +Transfinite Line {25, 23, 21, 32} = nloex Using Progression 1; +//+ +Transfinite Line {20, 31} = nloix Using Progression 1; +//+ +Transfinite Line {27, 26} = 2*nloix Using Progression 1; +//+ +Transfinite Line {24, 22} = 2*nloiy Using Progression 1; + + +Transfinite Surface {4}; +Transfinite Surface {5}; +Transfinite Surface {6}; +Transfinite Surface {7}; +Transfinite Surface {8}; +Transfinite Surface {9}; +Transfinite Surface {10}; + +Recombine Surface {4}; +Recombine Surface {5}; +Recombine Surface {6}; +Recombine Surface {7}; +Recombine Surface {8}; +Recombine Surface {9}; +Recombine Surface {10}; + + +Extrude {0, 0, LZ} +{ + Surface{4,5,6,7,8,9,10}; Layers{nZ2}; Recombine; +} + +Physical Volume("body") = {1,2,3,4,5,6,7}; +//+ +Physical Surface("outer part boundary 1") = {18}; +Physical Surface("outer part boundary 2") = {20}; +Physical Surface("outer part boundary 3") = {30}; +Physical Surface("outer part boundary 4") = {36}; +//+ +Physical Surface("clamping") = {12, 17}; +//+ +Physical Surface("load") = {38, 33}; diff --git a/katoptron/tests/L_shape_curv_1.geo b/katoptron/tests/L_shape_curv_1.geo new file mode 100644 index 0000000000000000000000000000000000000000..3d9aa49eb0c78805bbb1361afb44aaa4bd8803b1 --- /dev/null +++ b/katoptron/tests/L_shape_curv_1.geo @@ -0,0 +1,134 @@ +SetFactory("OpenCASCADE"); + +LX = 10; +lx = 2; +LY = 10; +ly = 2; +LZ = 2; + +nR1 = 5; + +R = 0.999; +R2 = 1.; +R_in_1 = 0.4; +R_in_2 = 0.5; + +nR = 14; +nT1 = 9; + +nZ1 = 5; + +nZ2 = 4; +nl = 7; +nLX=5; +nLY=10; +nR2=5; + +PI = Acos (-1.); + +dtheta = 0.001*PI; + +lc = 1; + +Point(1) = { lx, ly, 0., lc}; +Point(2) = { lx+R*Cos(0*PI+dtheta), ly+R*Sin(0*PI+dtheta), 0., lc}; +Point(3) = { lx+R*Cos(-1*PI/4+dtheta), ly+R*Sin(-1*PI/4+dtheta), 0., lc}; +Point(4) = { lx+R*Cos(-2*PI/4+dtheta), ly+R*Sin(-2*PI/4+dtheta), 0., lc}; +Point(5) = { lx+R*Cos(-3*PI/4+dtheta), ly+R*Sin(-3*PI/4+dtheta), 0., lc}; +Point(6) = { lx+R*Cos(-4*PI/4+dtheta), ly+R*Sin(-4*PI/4+dtheta), 0., lc}; +Point(7) = { lx+R*Cos(-5*PI/4+dtheta), ly+R*Sin(-5*PI/4+dtheta), 0., lc}; +Point(8) = { lx+R*Cos(-6*PI/4+dtheta), ly+R*Sin(-6*PI/4+dtheta), 0., lc}; + +Point(9) = { lx+R_in_1*Cos(0*PI+dtheta), ly+R_in_1*Sin(0*PI+dtheta), 0., lc}; +Point(10) = { lx+R_in_2*Cos(-1*PI/4+dtheta), ly+R_in_2*Sin(-1*PI/4+dtheta), 0., lc}; +Point(11) = { lx+R_in_1*Cos(-2*PI/4+dtheta), ly+R_in_1*Sin(-2*PI/4+dtheta), 0., lc}; +Point(12) = { lx+R_in_2*Cos(-3*PI/4+dtheta), ly+R_in_2*Sin(-3*PI/4+dtheta), 0., lc}; +Point(13) = { lx+R_in_1*Cos(-4*PI/4+dtheta), ly+R_in_1*Sin(-4*PI/4+dtheta), 0., lc}; +Point(14) = { lx+R_in_2*Cos(-5*PI/4+dtheta), ly+R_in_2*Sin(-5*PI/4+dtheta), 0., lc}; +Point(15) = { lx+R_in_1*Cos(-6*PI/4+dtheta), ly+R_in_1*Sin(-6*PI/4+dtheta), 0., lc}; + +Circle(101) = {2, 1, 3}; +Circle(102) = {3, 1, 4}; +Circle(103) = {4, 1, 5}; +Circle(104) = {5, 1, 6}; +Circle(105) = {6, 1, 7}; +Circle(106) = {7, 1, 8}; + +Line(201) = {9, 10}; +Line(202) = {10,11}; +Line(203) = {11,12}; +Line(204) = {12,13}; +Line(205) = {13,14}; +Line(206) = {14,15}; + + +Line(151) = {2, 9}; +Line(152) = {3,10}; +Line(153) = {4,11}; +Line(154) = {5,12}; +Line(155) = {6,13}; +Line(156) = {7,14}; +Line(157) = {8,15}; + +Line(251) = {9, 1}; +Line(252) = {11,1}; +Line(253) = {13,1}; +Line(254) = {15,1}; + +Transfinite Line {204, 203, 253, 205, 206, 254, 252, 251, 202, 201, 101, 102, 103, 104, 105, 106} = nT1 Using Progression 1; +Transfinite Line {157, 156, 155, 154, 153, 152, 151} = nR Using Progression 1; + +Line Loop(1) = {151, 201, -152, -101}; +Plane Surface(1) = {1}; +Transfinite Surface {1}; +Recombine Surface {1}; + +Line Loop(2) = {152, 202, -153, -102}; +Plane Surface(2) = {2}; +Transfinite Surface {2}; +Recombine Surface {2}; + +Line Loop(3) = {153, 203, -154, -103}; +Plane Surface(3) = {3}; +Transfinite Surface {3}; +Recombine Surface {3}; + +Line Loop(4) = {154, 204, -155, -104}; +Plane Surface(4) = {4}; +Transfinite Surface {4}; +Recombine Surface {4}; + +Line Loop(5) = {155, 205, -156, -105}; +Plane Surface(5) = {5}; +Transfinite Surface {5}; +Recombine Surface {5}; + +Line Loop(6) = {156, 206, -157, -106}; +Plane Surface(6) = {6}; +Transfinite Surface {6}; +Recombine Surface {6}; + +Line Loop(7) = {251, -252, -202, -201}; +Plane Surface(7) = {7}; +Transfinite Surface {7}; +Recombine Surface {7}; + +Line Loop(8) = {252, -253, -204, -203}; +Plane Surface(8) = {8}; +Transfinite Surface {8}; +Recombine Surface {8}; + +Line Loop(9) = {254, -253, 205, 206}; +Plane Surface(9) = {9}; +Transfinite Surface {9}; +Recombine Surface {9}; + +Extrude {0, 0, LZ} +{ + Surface{1,2,3,4,5,6,7,8,9}; Layers{nZ1}; Recombine; +} + +Physical Volume("body") = {1,2,3,4,5,6,7,8,9}; +//+ +Physical Surface("inner edge boundary") = {33, 29, 25, 21, 17, 13}; +//Physical Surface("inner edge boundary") = {33}; diff --git a/katoptron/tests/L_shape_curv_2.geo b/katoptron/tests/L_shape_curv_2.geo new file mode 100644 index 0000000000000000000000000000000000000000..68fa8cda95c0ab68dfa47defe34c3339c2ca3f33 --- /dev/null +++ b/katoptron/tests/L_shape_curv_2.geo @@ -0,0 +1,163 @@ +SetFactory("OpenCASCADE"); + +LX = 10; +lx = 2; +LY = 10; +ly = 2; +LZ = 2; + +nR1 = 5; + +R = 1.; +R2 = 1.; +R_in_1 = 0.4; +R_in_2 = 0.5; + +nR = 14; +nT1 = 7; + +nZ1 = 5; + +nZ2 = 4; +nl = 5; +nLX=5; +nLY=10; +nR2=5; + +PI = Acos (-1.); + +dtheta = 0.1*PI; + +lc = 1; +Point(1) = { lx, ly, 0., lc}; +Point(16) = { 0, 0, 0, lc}; +Point(17) = { lx, 0, 0, lc}; +Point(18) = { 2*lx, 0, 0, lc}; +Point(19) = { LX, 0, 0, lc}; +Point(20) = { LX, ly, 0, lc}; +Point(21) = { 2*lx, ly, 0, lc}; +Point(22) = { lx+R2*Cos(0*PI), ly+R2*Sin(0*PI), 0, lc}; +Point(23) = { lx+R2*Cos(-1*PI/4+dtheta), ly+R2*Sin(-1*PI/4+dtheta), 0, lc}; +Point(24) = { lx+R2*Cos(-2*PI/4+dtheta), ly+R2*Sin(-2*PI/4+dtheta), 0, lc}; +Point(25) = { lx+R2*Cos(-3*PI/4+dtheta), ly+R2*Sin(-3*PI/4+dtheta), 0, lc}; +Point(26) = { lx+R2*Cos(-4*PI/4-dtheta), ly+R2*Sin(-4*PI/4-dtheta), 0, lc}; +Point(27) = { lx+R2*Cos(-5*PI/4-dtheta), ly+R2*Sin(-5*PI/4-dtheta), 0, lc}; +Point(28) = { lx+R2*Cos(-6*PI/4), ly+R2*Sin(-6*PI/4), 0, lc}; +Point(29) = { lx, 2*ly, 0, lc}; +Point(30) = { lx, LY, 0, lc}; +Point(31) = { 0, LY, 0, lc}; +Point(32) = { 0, 2*ly, 0, lc}; +Point(33) = { 0, ly, 0, lc}; + + +//+ +Line(255) = {16, 17}; +//+ +Line(256) = {17, 18}; +//+ +Line(257) = {18, 19}; +//+ +Line(258) = {19, 20}; +//+ +Line(259) = {20, 21}; +//+ +Line(260) = {16, 33}; +//+ +Line(261) = {33, 32}; +//+ +Line(262) = {32, 31}; +//+ +Line(263) = {31, 30}; +//+ +Line(264) = {30, 29}; +//+ +Line(265) = {17, 24}; +//+ +Line(266) = {16, 25}; +//+ +Line(267) = {18, 23}; +//+ +Line(268) = {22, 21}; +//+ +Line(269) = {26, 33}; +//+ +Line(270) = {27, 32}; +//+ +Line(271) = {28, 29}; +//+ +Circle(272) = {22, 1, 23}; +//+ +Circle(273) = {23, 1, 24}; +//+ +Circle(274) = {24, 1, 25}; +//+ +Circle(275) = {25, 1, 26}; +//+ +Circle(276) = {26, 1, 27}; +//+ +Circle(277) = {27, 1, 28}; +//+ +Line(278) = {18, 21}; +//+ +Line(279) = {29, 32}; + +Transfinite Line {263, 279, 277, 258, 278, 272, 273, 256, 255, 274, 260, 275, 276, 261} = nl Using Progression 1; +Transfinite Line {271, 270, 269, 266, 265, 267, 268} = nR2 Using Progression 1; +Transfinite Line {257, 259} = nLX Using Progression 1; +Transfinite Line {264, 262} = nLY Using Progression 1; + + +Line Loop(10) = {277, 271, 279, -270}; +Plane Surface(10) = {10}; + +Transfinite Surface {10}; +Recombine Surface {10}; + +Line Loop(11) = {276, 270, -261, -269}; +Plane Surface(11) = {11}; +Transfinite Surface {11}; +Recombine Surface {11}; + +Line Loop(12) = {266, 275, 269, -260}; +Plane Surface(12) = {12}; +Transfinite Surface {12}; +Recombine Surface {12}; + +Line Loop(13) = {266, -274, -265, -255}; +Plane Surface(13) = {13}; +Transfinite Surface {13}; +Recombine Surface {13}; + +Line Loop(14) = {265, -273, -267, -256}; +Plane Surface(14) = {14}; +Transfinite Surface {14}; +Recombine Surface {14}; + +Line Loop(15) = {267, -272, 268, -278}; +Plane Surface(15) = {15}; +Transfinite Surface {15}; +Recombine Surface {15}; + +Line Loop(16) = {278, -259, -258, -257}; +Plane Surface(16) = {16}; +Transfinite Surface {16}; +Recombine Surface {16}; + +Line Loop(17) = {279, 262, 263, 264}; +Plane Surface(17) = {17}; +Transfinite Surface {17}; +Recombine Surface {17}; + +Extrude {0, 0, LZ} +{ + Surface{10,11,12,13,14,15,16,17}; Layers{nZ2}; Recombine; +} + +Physical Volume("body") = {1,2,3,4,5,6,7,8}; +//+ +Physical Surface("clamping") = {48}; +//+ +Physical Surface("load") = {44}; +//+ +Physical Surface("outer part boundary") = {18, 23, 28, 31, 39, 35}; +//Physical Surface("outer part boundary") = {18}; diff --git a/katoptron/tests/M1_optic_test.py b/katoptron/tests/M1_optic_test.py new file mode 100644 index 0000000000000000000000000000000000000000..156c5c0a40850e6bd4dfe363fa44ccf2ecbebc7a --- /dev/null +++ b/katoptron/tests/M1_optic_test.py @@ -0,0 +1,124 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron.utilities as u +import numpy as np +import os +from fwk.testing import * + + +def rigid_body_mode(dz, theta_x, theta_y, x, y, x_c, y_c): + dz_test = np.zeros(x.shape) + dz_test = -np.sin(theta_x)*(y-y_c)+np.cos(theta_x)*dz_test + dz_test = -np.sin(theta_y)*(x-x_c)+np.cos(theta_y)*dz_test + dz_test = dz_test + dz + return dz_test + + +def main(): + file_dir = os.path.dirname(__file__) + + npzfile = np.load(file_dir+'/mirror_data.npz') + x = npzfile['x'] + y = npzfile['y'] + z = np.zeros(x.shape) + tri = npzfile['tri'] + dz = npzfile['dz'] + + dz_1 = 0 + dz_2 = (0.5 / 1000) + dz_3 = (0.87 / 1000) + dz_4 = (-2.1 / 1000) + + theta_x_1 = 0 + theta_x_2 = 0.0015 + theta_x_3 = -0.0005 + theta_x_4 = -0.0002 + + theta_y_1 = -0.2 + theta_y_2 = -0.0005 + theta_y_3 = 0.0015 + theta_y_4 = 0.0008 + + passed_1 = 0 + passed_2 = 1 + passed_3 = 1 + passed_4 = 0 + + dz_test_1 = rigid_body_mode(dz_1, theta_x_1, theta_y_1, x, y, 0.069, 0.04) + dz_test_2 = rigid_body_mode(dz_2, theta_x_2, theta_y_2, x, y, 0.069, 0.04) + dz_test_3 = rigid_body_mode(dz_3, theta_x_3, theta_y_3, x, y, 0.069, 0.04) + dz_test_4 = rigid_body_mode(dz_4, theta_x_4, theta_y_4, x, y, 0.069, 0.04) + + optical_coefficients_1, dz_residual_1 = u.compute_RBM_Curvature_Irreg( + x, y, z, tri, dz_test_1, "m", np.array([0.069, 0.04])) + + optical_coefficients_2, dz_residual_2 = u.compute_RBM_Curvature_Irreg( + x, y, z, tri, dz_test_2, "m", np.array([0.069, 0.04])) + + optical_coefficients_3, dz_residual_3 = u.compute_RBM_Curvature_Irreg( + x, y, z, tri, dz_test_3, "m", np.array([0.069, 0.04])) + + optical_coefficients_4, dz_residual_4 = u.compute_RBM_Curvature_Irreg( + x, y, z, tri, dz_test_4, "m", np.array([0.069, 0.04])) + + tests = CTests() + measured_dz_1 = optical_coefficients_1[0] + tests.add(CTest('piston mode test 1', measured_dz_1, dz_1*1000, 0.05)) + measured_dz_2 = optical_coefficients_2[0] + tests.add(CTest('piston mode test 2', measured_dz_2, dz_2*1000, 0.05)) + measured_dz_3 = optical_coefficients_3[0] + tests.add(CTest('piston mode test 3', measured_dz_3, dz_3*1000, 0.05)) + measured_dz_4 = optical_coefficients_4[0] + tests.add(CTest('piston mode test 4', measured_dz_4, dz_4*1000, 0.05)) + + measured_ry_1 = optical_coefficients_1[1] + tests.add(CTest('y rotation test 1', measured_ry_1, theta_y_1, 0.05)) + measured_ry_2 = optical_coefficients_2[1] + tests.add(CTest('y rotation test 2', measured_ry_2, theta_y_2, 0.05)) + measured_ry_3 = optical_coefficients_3[1] + tests.add(CTest('y rotation test 3', measured_ry_3, theta_y_3, 0.05)) + measured_ry_4 = optical_coefficients_4[1] + tests.add(CTest('y rotation test 4', measured_ry_4, theta_y_4, 0.05)) + + measured_rx_1 = optical_coefficients_1[2] + tests.add(CTest('x rotation test 1', measured_rx_1, theta_x_1, 0.05)) + measured_rx_2 = optical_coefficients_2[2] + tests.add(CTest('x rotation test 2', measured_rx_2, theta_x_2, 0.05)) + measured_rx_3 = optical_coefficients_3[2] + tests.add(CTest('x rotation test 3', measured_rx_3, theta_x_3, 0.05)) + measured_rx_4 = optical_coefficients_4[2] + tests.add(CTest('x rotation test 4', measured_rx_4, theta_x_4, 0.05)) + + measured_cur_1 = optical_coefficients_1[3] + tests.add(CTest('curvature change test 1', measured_cur_1, 0., 1e-10)) + measured_cur_2 = optical_coefficients_2[3] + tests.add(CTest('curvature change test 2', measured_cur_2, 0., 1e-10)) + measured_cur_3 = optical_coefficients_3[3] + tests.add(CTest('curvature change test 3', measured_cur_3, 0., 1e-10)) + measured_cur_4 = optical_coefficients_4[3] + tests.add(CTest('curvature change test 4', measured_cur_4, 0., 1e-10)) + + measured_irr_1 = optical_coefficients_1[4] + tests.add(CTest('irregularity change test 1', measured_irr_1, 0., 1e-10)) + measured_irr_2 = optical_coefficients_2[4] + tests.add(CTest('irregularity change test 2', measured_irr_2, 0., 1e-10)) + measured_irr_3 = optical_coefficients_3[4] + tests.add(CTest('irregularity change test 3', measured_irr_3, 0., 1e-10)) + measured_irr_4 = optical_coefficients_4[4] + tests.add(CTest('irregularity change test 4', measured_irr_4, 0., 1e-10)) + + blurred_1 = u.check_optical_tolerance(optical_coefficients_1, 'mm') + blurred_2 = u.check_optical_tolerance(optical_coefficients_2, 'mm') + blurred_3 = u.check_optical_tolerance(optical_coefficients_3, 'mm') + blurred_4 = u.check_optical_tolerance(optical_coefficients_4, 'mm') + tests.add(CTest('checl optical tolerance test 1', blurred_1, passed_1)) + tests.add(CTest('checl optical tolerance test 2', blurred_2, passed_2)) + tests.add(CTest('checl optical tolerance test 3', blurred_3, passed_3)) + tests.add(CTest('checl optical tolerance test 4', blurred_4, passed_4)) + + tests.run() + + +if __name__ == "__main__": + main() diff --git a/katoptron/tests/beam.geo b/katoptron/tests/beam.geo new file mode 100644 index 0000000000000000000000000000000000000000..71c4c0a7d917856e1d9791929e06c9347b4e036a --- /dev/null +++ b/katoptron/tests/beam.geo @@ -0,0 +1,114 @@ +// $Id$ +// fichier de donnees gmsh + + +//L = 50.; +//W = 1.; +//H = 5.; +//d = 1.; + +//L = 50.; +//W = 5.; +//H = 5.; +H_rigid = 1.; +//d = 1.; + +hW = W/2; +hH = H/2; + +//n_L = 60; +//n_hW = 3; +//n_hH = 3; + +n_L_rigid = 1; +n_W_rigid = 1; +n_H_rigid = 1; + + +lc = 1; + +delta_H = hH+d; + +Point(101) = { 0, -hW, d, lc}; +Point(102) = { 0, 0, d, lc}; +Point(103) = { 0, hW, d, lc}; +Point(104) = { L, hW, d, lc}; +Point(105) = { L, 0, d, lc}; +Point(106) = { L, -hW, d, lc}; + +Point(205) = { 0, -hW, 0, lc}; +Point(206) = { 0, hW, 0, lc}; +Point(207) = { L, hW, 0, lc}; +Point(208) = { L, -hW, 0, lc}; + +Line(101) = {101, 102}; +Line(102) = {102, 103}; +Line(103) = {103, 104}; +Line(104) = {104, 105}; +Line(105) = {105, 106}; +Line(106) = {106, 101}; +Line(107) = {105, 102}; + +Line(205) = {205, 206}; +Line(206) = {206, 207}; +Line(207) = {207, 208}; +Line(208) = {208, 205}; + +Transfinite Line {101,102,104,105} = n_hW+1 Using Progression 1; +Transfinite Line {103,106,107} = n_L+1 Using Progression 1; + +Transfinite Line {205,207} = n_W_rigid+1 Using Progression 1; +Transfinite Line {206,208} = n_L_rigid+1 Using Progression 1; + +Line Loop(101) = {101,-107,105,106}; +Plane Surface(101) = {101}; +Transfinite Surface {101}; +Recombine Surface {101}; + +Line Loop(102) = {102,103,104,107}; +Plane Surface(102) = {102}; +Transfinite Surface {102}; +Recombine Surface {102}; + +Line Loop(202) = {-208,-207,-206,-205}; +Plane Surface(202) = {202}; +Transfinite Surface {202}; +Recombine Surface {202}; + +Extrude {0, 0, hH} +{ + Surface{101,102}; Layers{n_hH}; Recombine; +} + +Extrude {0, 0, hH} +{ + Surface{230,252}; Layers{n_hH}; Recombine; +} + +Extrude {0, 0, -H_rigid} +{ + Surface{202}; Layers{n_H_rigid}; Recombine; +} + + + +Physical Volume("Rigid body") = {5}; +Physical Surface("Rigid surface") = {202}; +Physical Surface("Rigid clamped surface") = {309}; +Physical Line("Rigid surface boundary") = {205, 206, 207, 208}; + +Physical Volume("Beam") = {1,2,3,4}; +Physical Surface("Clamped end") = {217,239,261,283,317}; +Physical Surface("Loaded surface") = {274,296}; +Physical Surface("Beam contact zone") = {101,102}; +Physical Surface("Free end") = {269,247,225,291}; +Physical Line("Beam contact boundary") = {104,105,106,101,102,103}; +Physical Line("Beam contact Dirichlet") = {101,102}; + +Physical Line("Center of cross section") = {211}; + +Physical Line("Center of contact surface") = {107}; + +Mesh.Partitioner = 2; +Mesh.MetisAlgorithm = 2; +Mesh.MshFilePartitioned = 0; diff --git a/katoptron/tests/beam.py b/katoptron/tests/beam.py new file mode 100644 index 0000000000000000000000000000000000000000..e2086c7accdb738539b2bcc55e2f97cfd059ddf1 --- /dev/null +++ b/katoptron/tests/beam.py @@ -0,0 +1,222 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +#import matplotlib2tikz +# import katoptron.viewer as katv # Error occurs after that + + +def analytical(E, nu, L, W, H, d, p, x): + + EI = ((E * W * H**3) / 12.) + q = p * W + q_1 = 24*EI*d/L**4 + q_2 = 72*EI*d/L**4 + a = (72*EI*d/q)**(0.25) + + print(a) + + print(E) + print(nu) + print(L) + print(W) + print(H) + print(d) + print(p) + + if q < q_1: + case_id = 1 + sol = -((q / (24.*EI)))*(x**4-4.*L*x**3+4.*L**2*x**2) + if q >= q_1: + case_id = 2 + sol = -((q / (24.*EI)))*(x**4-2.*L*x**3+L**2*x**2) + \ + 2.*d*x**3/(L**3)-3.*d*x**2/(L**2) + if q >= q_2: + case_id = 3 + sol = -((q / (24.*EI))) * \ + (x**4-((8. / 3.))*a*x**3+2.*a**2*x**2) + for i in range(0, len(x)): + if x[i] >= a: + sol[i] = -d + + print("q") + print(q) + print(q_1) + print(q_2) + + return case_id, sol + + +def analytical_ensemble(E, nu, L, W, H, d, p, x, ensemble_size): + + import numpy as np + + case_id = np.empty([ensemble_size, 1]) + sol = np.empty([len(x), ensemble_size]) + + for i in range(0, ensemble_size): + case_id[i], sol[:, i] = analytical(E[i], nu[i], L, W, H, d, p[i], x) + + return case_id, sol + + +def main(): + comm, rank, size = u.import_MPI() + + from fwk.wutils import parseargs + args = parseargs() + + from PyTrilinos import Teuchos + import numpy as np + #import matplotlib.pyplot as plt + + DOFperNode = 3 + + display = True + + # Mesh + + geo_name = 'beam.geo' + mesh_name = 'beam.msh' + partitioned_mesh_name = 'beam_k.msh' + + par = {} + par['L'] = 50. + par['W'] = 5. + par['H'] = 5. + par['d'] = 1. + par['n_L'] = 20 + par['n_hW'] = 2 + par['n_hH'] = 2 + + ensemble_size = 8 + + import shlex + import subprocess + import os + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + pars = {'L': par['L'], 'W': par['W'], 'H': par['H'], 'd': par['d'], + 'n_L': par['n_L'], 'n_hW': par['n_hW'], 'n_hH': par['n_hH']} + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size, pars) + + for n1 in msh.nodes: + n1.row = n1.no-1 + + # Problem + + #msh = gmsh.MeshLoader(mesh_name,work_dir).execute() + + pbl = m.Problem(msh, comm) + + E = 21000 * np.ones(ensemble_size) + nu = 0.29 * np.ones(ensemble_size) + k = 0 + d = 0 + + # for i in range(0,ensemble_size): + # E[i] = 21000+i*5000 + + m.Medium(pbl, "Beam", "Mat 1", E, nu, k, d) + m.Medium(pbl, "Rigid body", "Mat 1", E, nu, k, d) + + dx = np.zeros(ensemble_size) + dy = np.zeros(ensemble_size) + dy2 = np.linspace(0, -2., ensemble_size) + dz = 0*np.linspace(0, -2., ensemble_size) + dz2 = np.zeros(ensemble_size) + dT = np.zeros(ensemble_size) + m.Dirichlet(pbl, "Rigid clamped surface", + "Clamped 1", 1, dx, 1, dy, 1, dz, 0, dT) + m.Dirichlet(pbl, "Clamped end", "Clamped 1", 1, dx, 1, dy, 1, dz2, 0, dT) + m.Dirichlet(pbl, "Free end", "Clamped 1", 1, 0., + 0, 0., 0, 0., 0, 0., ensemble_size) + + #p = 0.82* np.ones(ensemble_size) + + #p = np.linspace(0.1, 0.835, num=ensemble_size) + # np.linspace(1.2, 0., num=ensemble_size) # 3.6 * np.ones(ensemble_size) #np.linspace(1.5, 2., num=ensemble_size) + p = 0.9 * np.ones(ensemble_size) + for i in range(0, ensemble_size): + p[i] = 1.7+(7-i)*0.025 + + p[0] = 2.5 + + zero = np.zeros(ensemble_size) + + m.Neumann(pbl, "Loaded surface", "Load 1", 0, zero, + 0, zero, 1, -p, 0, zero, ensemble_size) + + norm1 = tbox.Vector3d(0, 0, -1) + norm2 = tbox.Vector3d(0, 0, 1) + dg = 0*np.linspace(0., 1., num=ensemble_size) + + dg[0] = 0. + + a = 49.5 + initiallyClosedNodesList = np.array([], dtype=np.float) + #tag_name = "Center of cross section" + for el in msh.ntags["Beam contact zone"].elems: + for n1 in el.nodes: + node_id = n1.no-1 + if msh.nodes[node_id].pos[0] >= a: + initiallyClosedNodesList = np.append( + initiallyClosedNodesList, node_id) + + cont1 = m.Contact(pbl, "Beam contact zone", "contact", norm1, dg) + #cont1.setSlaveBoundary(work_dir+"/"+partitioned_mesh_name, "Beam contact boundary") + #cont1.setMasterBoundary(work_dir+"/"+partitioned_mesh_name, "Rigid surface boundary") + cont1.setInitialyOpen() + cont1.setInitiallyClosedNodes(initiallyClosedNodesList) + cont1.setDualShapeFunctions() + cont1.setSlaveDirichlet( + work_dir+"/"+partitioned_mesh_name, "Beam contact Dirichlet") + cont1.setSignoriniContact() + cont1.setMaster(pbl, "Rigid surface", norm2) + + # Solver + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 100000 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList["MueLu xml file name"] = file_dir + '/multigrid_2_lvls_3_1.xml' + solverList["convert MueLu xml file"] = True + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 4 + solverList['Write txt files'] = True + slv = m.IterativeSolver(pbl, solverList, + DOFperNode, ensemble_size) + + nThreads = u.Initialize_Kokkos() + + slv.start() + + active_set_iteration = slv.active_set_iteration + + u.Finalize_Kokkos() + + if rank == 0: + import fwk.testing as tst + tests = tst.CTests() + tests.add(tst.CTest('Number of active set iterations', + active_set_iteration, 3)) + tests.run() + + +if __name__ == "__main__": + main() diff --git a/katoptron/tests/direct_solver.xml b/katoptron/tests/direct_solver.xml new file mode 100644 index 0000000000000000000000000000000000000000..7375e732f5be4fc58cb238d4c347b7563bad2218 --- /dev/null +++ b/katoptron/tests/direct_solver.xml @@ -0,0 +1,116 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 4 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 4 }"/> + </ParameterList> + + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 4 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 4 }"/> + </ParameterList> + + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + </ParameterList> + + + <!-- BLOCK SMOOTHERS --> + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Symmetric Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="1"/> + <!--<Parameter name="relaxation: damping factor" type="double" value="0.9"/>--> + </ParameterList> + </ParameterList> + + + <!-- block smoother for block A_{00} --> + + <ParameterList name="mySmooFact2"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <Parameter name="overlap" type="int" value="0"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Symmetric Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="1"/> + <!--<Parameter name="relaxation: damping factor" type="double" value="0.9"/>--> + </ParameterList> + </ParameterList> + + <!-- Use BGS --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="BlockedGaussSeidelSmoother"/> + <Parameter name="Sweeps" type="int" value="1"/> + <!--<Parameter name="Damping factor" type="double" value="1.0"/> --> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Smoother" type="string" value="mySmooFact2"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="verbosity" type="string" value="Extreme"/> + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockDirectSolver"/> + <!--<Parameter name="CoarseSolver" type="string" value="myBlockSmoother"/>--> + <Parameter name="A" type="string" value="NoFactory"/> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/tests/mirror_data.npz b/katoptron/tests/mirror_data.npz new file mode 100644 index 0000000000000000000000000000000000000000..73e77d11b405902a973af9e39464026fb9c34c9d Binary files /dev/null and b/katoptron/tests/mirror_data.npz differ diff --git a/katoptron/tests/multigrid_2_lvls_3_1.xml b/katoptron/tests/multigrid_2_lvls_3_1.xml new file mode 100644 index 0000000000000000000000000000000000000000..2d82c0a12dc7d053b0603608908f7c57dcca3664 --- /dev/null +++ b/katoptron/tests/multigrid_2_lvls_3_1.xml @@ -0,0 +1,257 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + + <!-- Factory collection --> + <ParameterList name="Factories"> + + <!-- Note that ParameterLists must be defined prior to being used --> + + <!-- sub block factories --> + + + <!-- BLOCK 1 (for submatrix A_{00}) Navier Stokes 4 DOFs per node --> + <ParameterList name="mySubBlockAFactory1"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="0"/> + <Parameter name="block col" type="int" value="0"/> + <Parameter name="Range map: Striding info" type="string" value="{ 3 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 3 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 4 DOFs per node on the coarse levels --> + <ParameterList name="myCoarseMap1"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myAggFact1"> + <Parameter name="factory" type="string" value="UncoupledAggregationFactory"/> + <Parameter name="aggregation: min agg size" type="int" value="5"/> + <Parameter name="aggregation: max selected neighbors" type="int" value="1"/> + </ParameterList> + + <ParameterList name="myTentativePFact1"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <ParameterList name="myRFact1"> + <Parameter name="factory" type="string" value="TransPFactory"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- We have to use Nullspace1 here. If "Nullspace1" is not set the + Factory creates the default null space containing of constant + vectors --> + <ParameterList name="myNspFact1"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace1"/> + <Parameter name="Nullspace1" type="string" value="myTentativePFact1"/> + </ParameterList> + + <!-- BLOCK 2 (for submatrix A_{22}) MAXWELL PART--> + <ParameterList name="mySubBlockAFactory2"> + <Parameter name="factory" type="string" value="SubBlockAFactory"/> + <Parameter name="block row" type="int" value="1"/> + <Parameter name="block col" type="int" value="1"/> + <Parameter name="Range map: Striding info" type="string" value="{ 1 }"/> + <Parameter name="Domain map: Striding info" type="string" value="{ 1 }"/> + </ParameterList> + + <!-- tell the tenative prolongator that we have 1 DOF per node on the coarse levels --> + <!-- We use the factory "CoarseMapFactory" which always creates a standard coarse + level map starting with GIDs at 0. This is ok as we use Thyra like numbering + for the block operators. To obtain unique GIDs one would use the + BlockedCoarseMapFactory (see below) --> + <ParameterList name="myCoarseMap2"> + <Parameter name="factory" type="string" value="CoarseMapFactory"/> + <Parameter name="Striding info" type="string" value="{ 3 }"/> + <Parameter name="Strided block id" type="int" value="-1"/> + </ParameterList> + + <ParameterList name="myInterfaceMappingFact"> + <Parameter name="factory" type="string" value="InterfaceMappingTransferFactory"/> + </ParameterList> + + <ParameterList name="myInterfaceAggs2"> + <Parameter name="factory" type="string" value="InterfaceAggregationFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> <!-- use aggregates from velocity block! --> + <Parameter name="number of DOFs per dual node" type="int" value="1"/> + <Parameter name="DualNodeID2PrimalNodeID" type="string" value="myInterfaceMappingFact" /> + </ParameterList> + + <ParameterList name="myInterfaceMappingFactDeps" > + <Parameter name="dependency for" type="string" value="myInterfaceMappingFact" /> + <Parameter name="CoarseDualNodeID2PrimalNodeID" type="string" value="myInterfaceAggs2" /> + </ParameterList> + + <ParameterList name="myTentativePFact2"> + <Parameter name="factory" type="string" value="TentativePFactory"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- We have to use Nullspace2 here. If "Nullspace2" is not set the + Factory creates the default null space containing of constant + vectors (here only one constant vector) --> + <ParameterList name="myNspFact2"> + <Parameter name="factory" type="string" value="NullspaceFactory"/> + <Parameter name="Fine level nullspace" type="string" value="Nullspace2"/> + <Parameter name="Nullspace2" type="string" value="myTentativePFact2"/> + </ParameterList> + + <!-- FACTORY MANAGERS --> + + <!-- Multigrid setup for velocity block (A_{00}) --> + <ParameterList name="myFirstGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="P" type="string" value="myTentativePFact1"/> + <Parameter name="R" type="string" value="myRFact1"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="Nullspace" type="string" value="myNspFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList> + + <!-- Multigrid setup for pressure block (A_{11}) --> + <ParameterList name="mySecondGroup"> + <Parameter name="group" type="string" value="FactoryManager"/> + <Parameter name="A" type="string" value="mySubBlockAFactory2"/> + <Parameter name="P" type="string" value="myTentativePFact2"/> + <Parameter name="Aggregates" type="string" value="myInterfaceAggs2"/> + <Parameter name="Nullspace" type="string" value="myNspFact2"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap2"/> + </ParameterList> + + <!-- BLOCK TRANSFER operators --> + + <!-- define block prolongation operator using above blocks --> + <ParameterList name="myBlockedPFact"> + <Parameter name="factory" type="string" value="BlockedPFactory"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="group" type="string" value="myFirstGroup"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="group" type="string" value="mySecondGroup"/> + </ParameterList> + </ParameterList> + + <!-- define block restriction operator using above blocks --> + <!-- The block restriction operator is usually always of type + GenericRFactory since we want to be able to combine, e.g., + SmoothedAggregation for block A_{00} with e.g. tentative + prolongation for block A_{11} (or any other kind of transfer + strategy for the subblocks --> + <ParameterList name="myBlockedRFact"> + <Parameter name="factory" type="string" value="GenericRFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + </ParameterList> + + <!--<ParameterList name="myTransferCoordinatesFact"> + <Parameter name="factory" type="string" value="CoordinatesTransferFactory"/> + <Parameter name="Aggregates" type="string" value="myAggFact1"/> + <Parameter name="CoarseMap" type="string" value="myCoarseMap1"/> + </ParameterList>--> + + <ParameterList name="myBlockedRAPFact"> + <Parameter name="factory" type="string" value="BlockedRAPFactory"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <ParameterList name="TransferFactories"> + <!--<Parameter name="For Coordinates" type="string" value="myTransferCoordinatesFact"/>--> + <Parameter name="DoTransferSpecialMappingForAggregates" type="string" value="myInterfaceMappingFact"/> + </ParameterList> + </ParameterList> + + <!-- REBALANCING --> + + + <!-- BLOCK SMOOTHERS --> + + + <ParameterList name="mySmooFact1"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Symmetric Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="1"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Build Schur Complement factory (for being used in SIMPLE type block smoother)--> + <ParameterList name="mySchurCompFact"> + <Parameter name="factory" type="string" value="SchurComplementFactory"/> + <Parameter name="omega" type="double" value="1.0"/> + <Parameter name="lumping" type="bool" value="true"/> + </ParameterList> + + <!-- block smoother for block A_{11} respective the Schur complement operator --> + <ParameterList name="mySchurSmooFact"> + <Parameter name="factory" type="string" value="TrilinosSmoother"/> + <Parameter name="type" type="string" value="RELAXATION"/> + <ParameterList name="ParameterList"> + <Parameter name="relaxation: type" type="string" value="Symmetric Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="1"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + </ParameterList> + + <!-- Use SIMPLE: --> + <!-- User has to define two blocks with each containing a smoother for + the corresponding sub-block matrix (see above) --> + <ParameterList name="myBlockSmoother"> + <Parameter name="factory" type="string" value="SimpleSmoother"/> + <Parameter name="Sweeps" type="int" value="2"/> + <Parameter name="Damping factor" type="double" value="0.9"/> + <Parameter name="UseSIMPLEC" type="bool" value="false"/> + <!-- factory manager for block 1 --> + <ParameterList name="block1"> + <Parameter name="A" type="string" value="mySubBlockAFactory1"/> + <Parameter name="Smoother" type="string" value="mySmooFact1"/> + </ParameterList> + <!-- factory manager for block 2 --> + <ParameterList name="block2"> + <Parameter name="A" type="string" value="mySchurCompFact"/> + <Parameter name="Smoother" type="string" value="mySchurSmooFact"/> + </ParameterList> + </ParameterList> + + <ParameterList name="myBlockDirectSolver"> + <Parameter name="factory" type="string" value="BlockedDirectSolver"/> + </ParameterList> + + </ParameterList> + <!-- end Factories --> + + <!-- Definition of the multigrid preconditioner --> + <ParameterList name="Hierarchy"> + + <Parameter name="max levels" type="int" value="2"/> + <Parameter name="coarse: max size" type="int" value="2500"/> + <Parameter name="verbosity" type="string" value="High"/> + <Parameter name="aggregation: export visualization data" type="bool" value="true"/> + + <ParameterList name="AllLevel"> + <Parameter name="startLevel" type="int" value="0"/> + <Parameter name="Smoother" type="string" value="myBlockSmoother"/> + <Parameter name="CoarseSolver" type="string" value="myBlockDirectSolver"/> + <Parameter name="P" type="string" value="myBlockedPFact"/> + <Parameter name="R" type="string" value="myBlockedRFact"/> + <Parameter name="A" type="string" value="myBlockedRAPFact"/> + <!--<Parameter name="Coordinates" type="string" value="myRebBlockedPFact"/>--> + </ParameterList> + + </ParameterList> + +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/tests/plate.py b/katoptron/tests/plate.py new file mode 100644 index 0000000000000000000000000000000000000000..8e5c971ca8f86c1981809a02371f99762e5facd6 --- /dev/null +++ b/katoptron/tests/plate.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + + + +from katoptron.CMAME import model + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np + +from fwk.wutils import parseargs + +from PyTrilinos import Teuchos + +import katoptron.utilities as u + +from katoptron.readers import read_Belos +from fwk.testing import * + + +def main(): + """ + This loads the mesh and define the case ids and ensemble sizes + """ + comm, rank, size = m.utilities.import_MPI() + + if size == 1: + args = parseargs() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + # Units in the meshes are in mm + msh = u.fuse_meshes('plate_1.geo', 'plate_1_tmp', 'plate_2.geo', + 'plate_2_tmp', 'plate_fused', + file_dir + '/../CMAME/mesh', work_dir, comm, rank, + size) + + np.random.seed(42) + N = 1 + num_random_variables = 20 + randomVariable = np.zeros((N, num_random_variables)) + + p = model.get_parameters(0, 0) + p['Write txt files'] = True + p['MueLu xml template file name'] = '/../preconditioners/SIMPLE_gs_direct_lvl.xml.in' + + ensemble_size = 1 + + pm = model.plate_model(ensemble_size, randomVariable, msh, comm, + file_dir, work_dir, p) + + nThreads = u.Initialize_Kokkos() + pm.run() + u.Finalize_Kokkos() + + iter_indices, residuals = read_Belos(work_dir + '/belos_out.txt', 1) + + tests = CTests() + nIterations = iter_indices[-1] + tests.add(CTest('Has converged', nIterations, 97, 1e-2)) + tests.run() + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/katoptron/thesis/test_1/1_cube.geo b/katoptron/thesis/test_1/1_cube.geo new file mode 100644 index 0000000000000000000000000000000000000000..99d074747f84e1c2f9d51c0f2cba9f92e4798552 --- /dev/null +++ b/katoptron/thesis/test_1/1_cube.geo @@ -0,0 +1,39 @@ +// $Id$ +// fichier de donnees gmsh + +C1 = 10; +nC1 = 4; + +lc = 1; + +Point(1) = { 0, 0, 0, lc}; +Point(2) = { C1, 0, 0, lc}; +Point(3) = { C1, 0, C1, lc}; +Point(4) = { 0, 0, C1, lc}; + +Line(1) = {1, 2}; +Line(2) = {2, 3}; +Line(3) = {3, 4}; +Line(4) = {4, 1}; + +Transfinite Line {1,2,3,4} = nC1+1 Using Progression 1; + +Line Loop(11) = {1,2,3,4}; +Plane Surface(12) = {11}; +Transfinite Surface {12}; +Recombine Surface {12}; + +Extrude {0, C1, 0} +{ + Surface{12}; Layers{nC1}; Recombine; +} + +// physical entities + +Physical Volume("Body 1") = {1}; + +Physical Surface("Surf 1 1") = {-21}; +Physical Surface("Surf 1 2") = {-29}; + +Physical Point("Measure point 1") = {4}; +Physical Point("Measure point 2") = {1}; diff --git a/katoptron/thesis/test_1/1_cube.py b/katoptron/thesis/test_1/1_cube.py new file mode 100644 index 0000000000000000000000000000000000000000..3610603270972ad26e659af2046d91fae477466b --- /dev/null +++ b/katoptron/thesis/test_1/1_cube.py @@ -0,0 +1,198 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +from PyTrilinos import Teuchos +import shlex +import subprocess +import os +import numpy as np +import tarfile +import glob +from fwk.wutils import parseargs + + +def tar_results(directory, filename, rank): + os.chdir(directory) + if rank == 0: + tf = tarfile.open(filename + ".tar.gz", mode="w:gz") + for file in glob.glob('*'): + if file.endswith(".tar.gz"): + print(file + ' is not included') + else: + tf.add(file) + tf.close() + + +def model(msh, + E, + p, + ensemble_size, + case_name, + zero_initial_guess=True, + prec=False): + comm, rank, size = m.utilities.import_MPI() + + pbl = m.Problem(msh, comm) + + nu = 0.2 * np.ones(ensemble_size) + k = 0.114 + d = 0. + + zero = np.zeros(ensemble_size) + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Surf 1 1", "Clamped", 1, 0., 1, 0., 1, 0., 1, 0., + ensemble_size) + m.Neumann(pbl, "Surf 1 2", "heat fluxes", 0, zero, 0, zero, 1, p, 0, zero, + ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 100 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + if prec: + mueluParams = Teuchos.ParameterList() + mueluParams['number of equations'] = 3 + mueluParams['max levels'] = 1 + mueluParams['coarse: type'] = "RELAXATION" + + mueluParamsSub2 = Teuchos.ParameterList() + mueluParamsSub2['relaxation: type'] = "Jacobi" + mueluParamsSub2['relaxation: sweeps'] = 1 + mueluParamsSub2['relaxation: damping factor'] = 1. + + mueluParams['verbosity'] = "low" + + mueluParams['coarse: params'] = mueluParamsSub2 + + solverList['mueluParams'] = mueluParams + solverList['Use preconditioner'] = True + else: + solverList['Use preconditioner'] = False + + if not zero_initial_guess: + file_dir = os.path.dirname(__file__) + solverList['Initial guess'] = file_dir + '/initial_guess.txt' + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + solverList['Write txt files'] = True + solverList['Write matrix and vectors'] = True + + slv = m.IterativeSolver(pbl, solverList, 3, ensemble_size) + + if not os.path.exists(case_name): + os.makedirs(case_name) + os.chdir(case_name) + + if rank == 0: + np.savetxt('E.txt', E) + np.savetxt('p.txt', p) + + slv.start() + + os.chdir('..') + + +def main(): + comm, rank, size = u.import_MPI() + + useER = m.UseEnsembleReduction() + + geo_name = '1_cube.geo' + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size) + + E_mean = 1. + E_min = 0.75 + E_max = 1.25 + + E_min_2 = 0.95 + E_max_2 = 1.05 + + E_min_3 = 1.2 + E_max_3 = 1.3 + + p_mean = 0.1 + p_min = 0.075 + p_max = 0.125 + + ensemble_size = 1 + E = E_mean * np.ones(ensemble_size) + p = p_mean * np.ones(ensemble_size) + directory_case_id = 'mean' + + nThreads = u.Initialize_Kokkos() + model(msh, E, p, ensemble_size, directory_case_id) + + ensemble_sizes = [8, 16, 32] + + for ensemble_size in ensemble_sizes: + E = np.linspace(E_min, E_max, ensemble_size) + p = p_mean * np.ones(ensemble_size) + directory_case_id = 'test_1_s_' + str(ensemble_size) + + model(msh, E, p, ensemble_size, directory_case_id) + + E = np.linspace(E_min_2, E_max_2, ensemble_size) + p = p_mean * np.ones(ensemble_size) + directory_case_id = 'test_6_s_' + str(ensemble_size) + + model(msh, E, p, ensemble_size, directory_case_id) + + E = np.linspace(E_min_3, E_max_3, ensemble_size) + p = p_mean * np.ones(ensemble_size) + directory_case_id = 'test_7_s_' + str(ensemble_size) + + model(msh, E, p, ensemble_size, directory_case_id) + + E = E_mean * np.ones(ensemble_size) + p = np.linspace(p_min, p_max, ensemble_size) + directory_case_id = 'test_2_s_' + str(ensemble_size) + + model(msh, E, p, ensemble_size, directory_case_id) + + E = np.linspace(E_min, E_max, ensemble_size) + p = np.linspace(p_min, p_max, ensemble_size) + directory_case_id = 'test_3_s_' + str(ensemble_size) + + model(msh, E, p, ensemble_size, directory_case_id) + + E = np.linspace(E_min, E_max, ensemble_size) + p = np.linspace(p_min, p_max, ensemble_size) + directory_case_id = 'test_4_s_' + str(ensemble_size) + + model(msh, E, p, ensemble_size, directory_case_id, True, True) + + E = np.linspace(E_min, E_max, ensemble_size) + p = np.linspace(p_min, p_max, ensemble_size) + directory_case_id = 'test_5_s_' + str(ensemble_size) + + model(msh, E, p, ensemble_size, directory_case_id, False, False) + + u.Finalize_Kokkos() + + if useER: + tar_results(work_dir, 'all_results_ER', rank) + else: + tar_results(work_dir, 'all_results_NER', rank) + + +if __name__ == "__main__": + main() diff --git a/katoptron/thesis/test_1/blake.slurm.sh b/katoptron/thesis/test_1/blake.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..43508ca54f77ed629f695b3d1d73e7bba32272a4 --- /dev/null +++ b/katoptron/thesis/test_1/blake.slurm.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=test_1 +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/test_1.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_HW_SUBSET=24c,1t +export KMP_AFFINITY=compact + +export MKL_NUM_THREADS=${OMP_NUM_THREADS} + +python run.py -k ${OMP_NUM_THREADS} katoptron/thesis/test_1/1_cube.py diff --git a/katoptron/thesis/test_1/initial_guess.txt b/katoptron/thesis/test_1/initial_guess.txt new file mode 100644 index 0000000000000000000000000000000000000000..a3d5bf4d0b180139af309a1953c6f1ffe53b934f --- /dev/null +++ b/katoptron/thesis/test_1/initial_guess.txt @@ -0,0 +1,375 @@ +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +1.03389366873617355e-01 +1.03389366873706354e-01 +9.88909850986351091e-01 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +0.00000000000000000e+00 +-1.03389366873873748e-01 +1.03389366873748376e-01 +9.88909850986497641e-01 +-1.03389366873874095e-01 +-1.03389366873748056e-01 +9.88909850986497196e-01 +1.03389366873616564e-01 +-1.03389366873706368e-01 +9.88909850986350536e-01 +-5.27296546408627456e-02 +1.03300075007310380e-01 +9.86005241933825549e-01 +-1.72648546726014513e-13 +1.03165915332760733e-01 +9.83998313600647156e-01 +5.27296546407599667e-02 +1.03300075007326381e-01 +9.86005241933630372e-01 +-5.27296546408623015e-02 +-1.03300075007309727e-01 +9.86005241933826104e-01 +-1.73766147860502091e-13 +-1.03165915332760275e-01 +9.83998313600647267e-01 +5.27296546407599598e-02 +-1.03300075007326450e-01 +9.86005241933629373e-01 +-1.03300075007559222e-01 +5.27296546408203490e-02 +9.86005241933823440e-01 +-1.03165915333046532e-01 +3.03730987743003057e-16 +9.83998313600758512e-01 +-1.03300075007560152e-01 +-5.27296546408204739e-02 +9.86005241933823551e-01 +1.03300075007261086e-01 +5.27296546408151864e-02 +9.86005241933572529e-01 +1.03165915332737959e-01 +-1.50785363550943402e-16 +9.83998313600441432e-01 +1.03300075007260045e-01 +-5.27296546408148326e-02 +9.86005241933572085e-01 +-5.26878113525478114e-02 +5.26878113526379893e-02 +9.83361152577813646e-01 +-5.26718377856561157e-02 +4.59250629122190593e-16 +9.81523476744442736e-01 +-5.26878113525460490e-02 +-5.26878113526386971e-02 +9.83361152577813757e-01 +-5.79473484698294784e-13 +5.26718377860720885e-02 +9.81523476743921708e-01 +-9.13420568557926768e-13 +1.73058135287993529e-16 +9.79652571577124376e-01 +-5.81996096482450406e-13 +-5.26718377860717554e-02 +9.81523476743922374e-01 +5.26878113528938263e-02 +5.26878113529958003e-02 +9.83361152577015840e-01 +5.26718377863194739e-02 +-7.11399507950741881e-17 +9.81523476743163203e-01 +5.26878113528952974e-02 +-5.26878113529944958e-02 +9.83361152577014952e-01 +-8.25498591021375377e-02 +8.25498591021505412e-02 +2.71696757483461837e-01 +-9.70753326394316052e-02 +9.70753326393827692e-02 +5.02410726903524729e-01 +-1.01586615502965605e-01 +1.01586615502849836e-01 +7.41394325273555310e-01 +1.01586615502623739e-01 +1.01586615502625460e-01 +7.41394325273904697e-01 +9.70753326393432869e-02 +9.70753326392596871e-02 +5.02410726904001459e-01 +8.25498591023276773e-02 +8.25498591022339884e-02 +2.71696757483956830e-01 +-8.25498591021385231e-02 +-8.25498591021505551e-02 +2.71696757483462170e-01 +-9.70753326394329930e-02 +-9.70753326393827276e-02 +5.02410726903525173e-01 +-1.01586615502966812e-01 +-1.01586615502849628e-01 +7.41394325273555421e-01 +1.01586615502622532e-01 +-1.01586615502625405e-01 +7.41394325273903809e-01 +9.70753326393420934e-02 +-9.70753326392593680e-02 +5.02410726904001237e-01 +8.25498591023268447e-02 +-8.25498591022338357e-02 +2.71696757483956663e-01 +3.30748424499299962e-02 +8.29264144897700478e-02 +2.48089635635204142e-01 +4.97277796449807838e-02 +9.85915368840958040e-02 +4.91357562219044863e-01 +5.15867656326637405e-02 +1.01848850896934545e-01 +7.36712754118903246e-01 +3.39915264163419894e-13 +8.41148355803972708e-02 +2.46660235067398870e-01 +3.44793504862767467e-13 +9.92705012130368630e-02 +4.85740960262001420e-01 +-9.26442092970955842e-14 +1.02210065241999007e-01 +7.33706284948368648e-01 +-3.30748424502770866e-02 +8.29264144900013628e-02 +2.48089635634937633e-01 +-4.97277796452340604e-02 +9.85915368846882190e-02 +4.91357562219005006e-01 +-5.15867656324931825e-02 +1.01848850897280407e-01 +7.36712754118272084e-01 +-8.29264144898249206e-02 +3.30748424500673238e-02 +2.48089635634770489e-01 +-8.41148355803735398e-02 +1.12038455825991370e-15 +2.46660235067105327e-01 +-8.29264144898272382e-02 +-3.30748424500678234e-02 +2.48089635634771016e-01 +-9.85915368848912788e-02 +4.97277796452564799e-02 +4.91357562219088828e-01 +-9.92705012138074966e-02 +1.77847510590181174e-15 +4.85740960262223742e-01 +-9.85915368848947760e-02 +-4.97277796452573403e-02 +4.91357562219089217e-01 +-1.01848850897806736e-01 +5.15867656327469587e-02 +7.36712754118169610e-01 +-1.02210065242970882e-01 +1.60844849378749812e-15 +7.33706284947798659e-01 +-1.01848850897809526e-01 +-5.15867656327476248e-02 +7.36712754118169388e-01 +1.01848850897163098e-01 +5.15867656327591156e-02 +7.36712754118855950e-01 +1.02210065242353931e-01 +-1.26226634544528276e-15 +7.33706284948549947e-01 +1.01848850897160420e-01 +-5.15867656327581858e-02 +7.36712754118856061e-01 +9.85915368847834067e-02 +4.97277796453790832e-02 +4.91357562219043253e-01 +9.92705012138538484e-02 +-1.48995477504196741e-15 +4.85740960262005916e-01 +9.85915368847802009e-02 +-4.97277796453780771e-02 +4.91357562219042754e-01 +8.29264144904164197e-02 +3.30748424502912627e-02 +2.48089635635469125e-01 +8.41148355811928566e-02 +-8.52956823945958511e-16 +2.46660235067932360e-01 +8.29264144904144351e-02 +-3.30748424502907284e-02 +2.48089635635468736e-01 +3.30748424499322097e-02 +-8.29264144897712829e-02 +2.48089635635204614e-01 +4.97277796449838785e-02 +-9.85915368840976081e-02 +4.91357562219044808e-01 +5.15867656326660096e-02 +-1.01848850896935739e-01 +7.36712754118903246e-01 +3.36557671758980498e-13 +-8.41148355803970488e-02 +2.46660235067398648e-01 +3.39868792045555024e-13 +-9.92705012130363079e-02 +4.85740960262001420e-01 +-9.64588056534605612e-14 +-1.02210065241998813e-01 +7.33706284948368426e-01 +-3.30748424502747482e-02 +-8.29264144899998085e-02 +2.48089635634936967e-01 +-4.97277796452307505e-02 +-9.85915368846858459e-02 +4.91357562219005006e-01 +-5.15867656324907956e-02 +-1.01848850897278298e-01 +7.36712754118272195e-01 +3.30537858775551557e-02 +3.30537858791016825e-02 +2.24168574765167633e-01 +3.33577827719228476e-02 +-2.71054088782021333e-16 +2.22720568574055949e-01 +3.30537858775624624e-02 +-3.30537858790991221e-02 +2.24168574765168827e-01 +4.96925794685787528e-02 +4.96925794703856893e-02 +4.80358805864844085e-01 +5.01102262788138339e-02 +-1.06469913134349292e-15 +4.74827900883885989e-01 +4.96925794685891473e-02 +-4.96925794703812901e-02 +4.80358805864843086e-01 +5.16178568703299506e-02 +5.16178568710437061e-02 +7.32425308234624817e-01 +5.17653261816935217e-02 +-1.30296575160951638e-15 +7.29481147248424056e-01 +5.16178568703381455e-02 +-5.16178568710397509e-02 +7.32425308234624151e-01 +1.01269713738389127e-12 +3.33577827731780935e-02 +2.22720568573127664e-01 +7.44830245625321753e-13 +-3.98111993231309839e-17 +2.21326420342750990e-01 +1.00285227461946099e-12 +-3.33577827731781559e-02 +2.22720568573127276e-01 +8.90476060506571976e-13 +5.01102262798669984e-02 +4.74827900884014553e-01 +1.47109838361844396e-13 +-3.26513381238924380e-16 +4.69212258129147353e-01 +8.76708436884517458e-13 +-5.01102262798666584e-02 +4.74827900884014553e-01 +-8.94808599265584483e-13 +5.17653261812182283e-02 +7.29481147247702411e-01 +-2.06767959228923246e-12 +1.40470294138712692e-17 +7.26509893878956814e-01 +-9.04715419262577115e-13 +-5.17653261812177634e-02 +7.29481147247702966e-01 +-3.30537858791589423e-02 +3.30537858785096769e-02 +2.24168574764613937e-01 +-3.33577827736174296e-02 +6.96497542114492182e-16 +2.22720568572950001e-01 +-3.30537858791508030e-02 +-3.30537858785124108e-02 +2.24168574764612383e-01 +-4.96925794692624490e-02 +4.96925794695352099e-02 +4.80358805865632010e-01 +-5.01102262790585895e-02 +1.39022753198995386e-15 +4.74827900884764453e-01 +-4.96925794692506945e-02 +-4.96925794695394635e-02 +4.80358805865633343e-01 +-5.16178568688406211e-02 +5.16178568698689305e-02 +7.32425308232371952e-01 +-5.17653261791708452e-02 +1.80179954679740054e-15 +7.29481147245931938e-01 +-5.16178568688317740e-02 +-5.16178568698726012e-02 +7.32425308232372840e-01 diff --git a/katoptron/thesis/test_1/post_process.py b/katoptron/thesis/test_1/post_process.py new file mode 100644 index 0000000000000000000000000000000000000000..67ff5c3e014498f389c0e9d0e4997240e1bbe54e --- /dev/null +++ b/katoptron/thesis/test_1/post_process.py @@ -0,0 +1,341 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +import katoptron.eigenvalues as e +import katoptron.readers as r +import katoptron.convergence as c +from PyTrilinos import Teuchos +import shlex +import subprocess +import os +import numpy as np +import tarfile +import glob +from fwk.wutils import parseargs +import matplotlib.pyplot as plt + + +def read_mm_vector(filename, ensemble_size): + with open(filename, 'r') as my_file: + text = my_file.read().splitlines(True) + if ensemble_size > 1: + for i in range(2, len(text)): + text[i] = text[i].replace("[", "") + text[i] = text[i].replace("]", "") + + X = np.genfromtxt(text[2:]) + return X + + +def read_mm_sparse_matrix(filename, ensemble_size): + with open(filename, 'r') as my_file: + text = my_file.read().splitlines(True) + if ensemble_size > 1: + for i in range(2, len(text)): + text[i] = text[i].replace("[", "") + text[i] = text[i].replace("]", "") + + sizes = [375, 375] # np.genfromtxt(text[1]) + data = np.genfromtxt(text[2:]) + A = np.zeros((int(sizes[0]), int(sizes[1]), ensemble_size)) + for i in range(0, data.shape[0]): + A[int(data[i, 0]) - 1, int(data[i, 1]) - 1, :] = data[i, 2:] + return A + + +def extract_values(filename, node_id, which_dof, dof_per_node, ensemble_size): + output = np.zeros((ensemble_size, )) + X = read_mm_vector(filename, ensemble_size) + output = X[dof_per_node * node_id + which_dof, :] + return output + + +def compare_QoI(base_dir_NER, base_dir_ER, case_ids, ensemble_sizes): + node_id = 46 + which_dof = 2 + dof_per_node = 3 + + for case_id in case_ids: + for ensemble_size in ensemble_sizes: + if case_id == 2: + param_min = 0.075 + param_max = 0.125 + elif case_id == 6: + param_min = 0.95 + param_max = 1.05 + elif case_id == 7: + param_min = 1.2 + param_max = 1.3 + else: + param_min = 0.75 + param_max = 1.25 + + param = np.linspace(param_min, param_max, ensemble_size) + solution_file_name = base_dir_NER + 'test_' + str( + case_id) + '_s_' + str(ensemble_size) + '/x_mm.txt' + output_NER = extract_values(solution_file_name, node_id, which_dof, + dof_per_node, ensemble_size) + solution_file_name = base_dir_ER + 'test_' + str( + case_id) + '_s_' + str(ensemble_size) + '/x_mm.txt' + output_ER = extract_values(solution_file_name, node_id, which_dof, + dof_per_node, ensemble_size) + plt.figure() + plt.plot(output_NER, 'o-') + plt.plot(output_ER, 'o-') + plt.savefig('QoI_case_' + str(case_id) + '_s_' + + str(ensemble_size) + '.pdf') + + f = open( + 'QoI_case_' + str(case_id) + '_s_' + str(ensemble_size) + + '.txt', 'w') + for l in range(0, ensemble_size): + print(str(param[l]) + ' ' + str( + output_NER[l]) + ' ' + str( + output_ER[l]) + ' ' + str(output_NER[l] - output_ER[l]), file=f) + f.closed + + +def read_Belos(base_dir_NER, base_dir_ER, case_ids, ensemble_sizes): + for case_id in case_ids: + for ensemble_size in ensemble_sizes: + filename_NER = base_dir_NER + 'test_' + str(case_id) + '_s_' + str( + ensemble_size) + '/belos_out.txt' + iter_indices_NER, residuals_NER = r.read_Belos( + filename_NER, ensemble_size) + + filename_ER = base_dir_ER + 'test_' + str(case_id) + '_s_' + str( + ensemble_size) + '/belos_out.txt' + iter_indices_ER, residuals_ER = r.read_Belos(filename_ER, 1) + + f = open( + 'Belos_NER_' + str(case_id) + '_s_' + str(ensemble_size) + + '.txt', 'w') + for i in range(0, len(iter_indices_NER)): + tmp = str(i) + ' ' + for l in range(0, ensemble_size): + tmp = tmp + str(residuals_NER[i, l]) + ' ' + print(tmp, file=f) + f.closed + + f = open( + 'Belos_ER_' + str(case_id) + '_s_' + str(ensemble_size) + + '.txt', 'w') + for i in range(0, len(iter_indices_ER)): + print(str(i) + ' ' + str(residuals_ER[i]), file=f) + f.closed + + plt.figure() + plt.semilogy(iter_indices_NER, residuals_NER[:, 0], 'o-') + plt.semilogy(iter_indices_ER, residuals_ER, 'o-') + plt.savefig('Belos_ER_' + str(case_id) + '_s_' + + str(ensemble_size) + '.pdf') + + +def compute_cum_delta_normal(lambdas, + omegas, + lambda_min=None, + lambda_max=None, + n=200): + + indices = np.argsort(lambdas) + lambdas = lambdas[indices] + omegas = omegas[indices] + + if lambda_min is None: + lambda_min = lambdas[0] + if lambda_max is None: + lambda_max = lambdas[-1] + + lambda_discrete = np.linspace(lambda_min, lambda_max, n) + dlambda = ((lambda_max - lambda_min) / (n - 1)) + + cum_delta = np.zeros((n, )) + deriv_delta = np.zeros((n, )) + cum_delta_omega = np.zeros((n, )) + deriv_delta_omega = np.zeros((n, )) + + n_lambdas = len(lambdas) + + first_index = 0 + second_index = 0 + for i in range(1, n): + for j in range(second_index, n_lambdas): + if lambda_discrete[i] < lambdas[j]: + second_index = j + break + cum_delta[i] = cum_delta[i - 1] + second_index - first_index + cum_delta_omega[i] = cum_delta_omega[i - 1] + np.sum( + omegas[first_index:second_index]) + deriv_delta[i] = ((second_index - first_index) / dlambda) + deriv_delta_omega[i] = (np.sum( + omegas[first_index:second_index]) / dlambda) + first_index = second_index + + percent_delta = (cum_delta / cum_delta[n - 1]) + percent_delta_omega = (cum_delta_omega / cum_delta_omega[n - 1]) + + return lambda_discrete, cum_delta, deriv_delta, cum_delta_omega, deriv_delta_omega, percent_delta, percent_delta_omega + + +def compute_deltas_omegas(base_dir, case_ids, ensemble_sizes): + for case_id in case_ids: + for ensemble_size in ensemble_sizes: + + filename_b = base_dir + 'test_' + str(case_id) + '_s_' + str( + ensemble_size) + '/b_mm_after_bc.txt' + filename_A = base_dir + 'test_' + str(case_id) + '_s_' + str( + ensemble_size) + '/A_mm_after_bc.txt' + + b = read_mm_vector(filename_b, ensemble_size) + A = read_mm_sparse_matrix(filename_A, ensemble_size) + + for l in range(0, ensemble_size): + b_l = b[:, l] + A_l = e.get_symmetrical_part(A[:, :, l]) + deltas, omegas = e.compute_deltas_omegas_normal(A_l, b_l) + indices = np.argsort(np.real(deltas)) + f = open( + 'deltas_omegas_' + str(case_id) + '_s_' + + str(ensemble_size) + '_l_' + str(l) + '.txt', 'w') + for i in range(0, len(deltas)): + print(str(np.real(deltas[indices[i]])) + ' ' + str( + np.imag(deltas[indices[i]])) + ' ' + str( + omegas[indices[i]]) + ' ' + str(i), file=f) + f.closed + + lambda_discrete, cum_delta, deriv_delta, cum_delta_omega, deriv_delta_omega, percent_delta, percent_delta_omega = compute_cum_delta_normal( + np.real(deltas), + omegas, + lambda_min=0., + lambda_max=12., + n=300) + + plt.figure() + plt.plot(lambda_discrete, cum_delta) + plt.savefig('cum_delta_' + str(case_id) + '_s_' + + str(ensemble_size) + '_l_' + str(l) + '.pdf') + plt.close() + plt.figure() + plt.plot(lambda_discrete, deriv_delta) + plt.savefig('deriv_delta_' + str(case_id) + '_s_' + + str(ensemble_size) + '_l_' + str(l) + '.pdf') + plt.close() + plt.figure() + plt.plot(lambda_discrete, cum_delta_omega) + plt.savefig('cum_delta_omega_' + str(case_id) + '_s_' + + str(ensemble_size) + '_l_' + str(l) + '.pdf') + plt.close() + plt.figure() + plt.plot(lambda_discrete, deriv_delta_omega) + plt.savefig('deriv_delta_omega_' + str(case_id) + '_s_' + + str(ensemble_size) + '_l_' + str(l) + '.pdf') + plt.close() + + if l == 0: + deltas_total = np.real(deltas) + omegas_total = omegas + else: + deltas_total = np.append(deltas_total, np.real(deltas)) + omegas_total = np.append(omegas_total, omegas) + + lambda_discrete, cum_delta, deriv_delta, cum_delta_omega, deriv_delta_omega, percent_delta, percent_delta_omega = compute_cum_delta_normal( + deltas_total, + omegas_total, + lambda_min=0., + lambda_max=12., + n=300) + + plt.figure() + plt.plot(lambda_discrete, cum_delta) + plt.savefig('cum_delta_' + str(case_id) + '_s_' + + str(ensemble_size) + '_all.pdf') + plt.close() + plt.figure() + plt.plot(lambda_discrete, deriv_delta) + plt.savefig('deriv_delta_' + str(case_id) + '_s_' + + str(ensemble_size) + '_all.pdf') + plt.close() + plt.figure() + plt.plot(lambda_discrete, cum_delta_omega) + plt.savefig('cum_delta_omega_' + str(case_id) + '_s_' + + str(ensemble_size) + '_all.pdf') + plt.close() + plt.figure() + plt.plot(lambda_discrete, deriv_delta_omega) + plt.savefig('deriv_delta_omega_' + str(case_id) + '_s_' + + str(ensemble_size) + '_all.pdf') + plt.close() + ''' + n_per_l = len(b_l) + n_total = n_per_l*ensemble_size + b_total = np.zeros((n_total,)) + A_total = np.zeros((n_total,n_total)) + for l in range(0,ensemble_size): + b_total[n_per_l*l:n_per_l*(l+1)] = b[:,l] + A_total[n_per_l*l:n_per_l*(l+1),n_per_l*l:n_per_l*(l+1)] = e.get_symmetrical_part(A[:,:,l]) + deltas_total, omegas_total = e.compute_deltas_omegas_normal(A_total,b_total) + + lambda_discrete, cum_delta, deriv_delta, cum_delta_omega, deriv_delta_omega, percent_delta, percent_delta_omega = compute_cum_delta_normal(deltas_total,omegas_total, lambda_min=0., lambda_max=12., n = 300 ) + + plt.figure() + plt.plot(lambda_discrete, cum_delta) + plt.savefig('cum_delta_' + str(case_id) + '_s_' + str(ensemble_size) + '_all_2.pdf') + plt.close() + plt.figure() + plt.plot(lambda_discrete, deriv_delta) + plt.savefig('deriv_delta_' + str(case_id) + '_s_' + str(ensemble_size) + '_all_2.pdf') + plt.close() + plt.figure() + plt.plot(lambda_discrete, cum_delta_omega) + plt.savefig('cum_delta_omega_' + str(case_id) + '_s_' + str(ensemble_size) + '_all_2.pdf') + plt.close() + plt.figure() + plt.plot(lambda_discrete, deriv_delta_omega) + plt.savefig('deriv_delta_omega_' + str(case_id) + '_s_' + str(ensemble_size) + '_all_2.pdf') + plt.close() + ''' + + +def compute_convergence(base_dir, case_ids, ensemble_sizes, k_max): + for case_id in case_ids: + for ensemble_size in ensemble_sizes: + for l in range(0, ensemble_size): + data = np.genfromtxt('deltas_omegas_' + str(case_id) + '_s_' + + str(ensemble_size) + '_l_' + str(l) + + '.txt') + deltas = data[:, 0] + omegas = data[:, 2] + + n = len(deltas) + + convergence = c.compute_convergence_serial_normal(k_max, + n, + omegas, + deltas, + verbose=True) + + +def main(): + base_dir_NER = '/Volumes/HD_SONY/Thesis/Test_1/all_results_NER_thesis1/' + base_dir_ER = '/Volumes/HD_SONY/Thesis/Test_1/all_results_ER_thesis1/' + + case_ids = [1, 2, 3, 4, 5, 6, 7] + ensemble_sizes = [8, 16, 32] + + compare_QoI(base_dir_NER, base_dir_ER, case_ids, ensemble_sizes) + read_Belos(base_dir_NER, base_dir_ER, case_ids, ensemble_sizes) + #compute_deltas_omegas(base_dir_NER, case_ids, ensemble_sizes) + + k_max = 3 + case_ids = [1] + ensemble_sizes = [8] + + #compute_convergence(base_dir_NER, case_ids, ensemble_sizes, k_max) + + +if __name__ == "__main__": + main() diff --git a/katoptron/thesis/test_2/1_cube.geo b/katoptron/thesis/test_2/1_cube.geo new file mode 100644 index 0000000000000000000000000000000000000000..f3bd653dc53caf13979ed4c07cc1a4d9847530d4 --- /dev/null +++ b/katoptron/thesis/test_2/1_cube.geo @@ -0,0 +1,42 @@ +// $Id$ +// fichier de donnees gmsh + +C1 = 10; +//nCx = 3; +//nCy = 4; +//nCz = 5; + +lc = 1; + +Point(1) = { 0, 0, 0, lc}; +Point(2) = { C1, 0, 0, lc}; +Point(3) = { C1, 0, C1, lc}; +Point(4) = { 0, 0, C1, lc}; + +Line(1) = {1, 2}; +Line(2) = {2, 3}; +Line(3) = {3, 4}; +Line(4) = {4, 1}; + +Transfinite Line {1,3} = nCx+1 Using Progression 1; +Transfinite Line {2,4} = nCz+1 Using Progression 1; + +Line Loop(11) = {1,2,3,4}; +Plane Surface(12) = {11}; +Transfinite Surface {12}; +Recombine Surface {12}; + +Extrude {0, C1, 0} +{ + Surface{12}; Layers{nCy}; Recombine; +} + +// physical entities + +Physical Volume("Body 1") = {1}; + +Physical Surface("Surf 1 1") = {-21}; +Physical Surface("Surf 1 2") = {-29}; + +Physical Point("Measure point 1") = {4}; +Physical Point("Measure point 2") = {1}; diff --git a/katoptron/thesis/test_2/1_cube.py b/katoptron/thesis/test_2/1_cube.py new file mode 100644 index 0000000000000000000000000000000000000000..a5fcf8369d5d0b7a2ee2d744ea248fb4b1c45099 --- /dev/null +++ b/katoptron/thesis/test_2/1_cube.py @@ -0,0 +1,159 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +from PyTrilinos import Teuchos +import shlex +import subprocess +import os +import numpy as np +import tarfile +import glob +from fwk.wutils import parseargs + + +def tar_results(directory, filename, rank): + os.chdir(directory) + if rank == 0: + tf = tarfile.open(filename + ".tar.gz", mode="w:gz") + for file in glob.glob('*'): + if file.endswith(".tar.gz"): + print(file + ' is not included') + else: + tf.add(file) + tf.close() + + +def model(msh, E, p, ensemble_size, case_name, max_iter, use_Prec=False): + comm, rank, size = m.utilities.import_MPI() + file_dir = os.path.dirname(__file__) + + pbl = m.Problem(msh, comm) + + nu = 0.2 * np.ones(ensemble_size) + k = 0.114 + d = 0. + + zero = np.zeros(ensemble_size) + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Surf 1 1", "Clamped", 1, 0., 1, 0., 1, 0., 1, 0., + ensemble_size) + m.Neumann(pbl, "Surf 1 2", "heat fluxes", 0, zero, 0, zero, 1, p, 0, zero, + ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Ensemble Convergence Tolerance'] = 0. # 10**(-8) + solverList['Maximum Iterations'] = int(max_iter) + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['Use preconditioner'] = use_Prec + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + solverList['Write vtk files'] = False + + if use_Prec: + solverList['convert MueLu xml file'] = True + solverList["use xml file"] = True + solverList["MueLu xml file name"] = file_dir + '/prec.xml' + + slv = m.IterativeSolver(pbl, solverList, 3, ensemble_size) + + u.mkdir_MPI(case_name, comm, rank, size) + os.chdir(case_name) + + if rank == 0: + f = open('msh_size.txt', 'w') + print(len(msh.nodes), file=f) + f.closed + + np.savetxt('E.txt', E) + np.savetxt('p.txt', p) + + slv.start() + + if rank == 0: + f = open('timers.txt', 'w') + print(slv.getTimers(), file=f) + f.closed + + os.chdir('..') + + +def read_msh(nCx, nCy, nCz, file_dir, work_dir, i=0, load=True): + comm, rank, size = m.utilities.import_MPI() + + geo_name = '1_cube.geo' + mesh_name = '1_cube.msh' + mesh_2_name = str('1_cube_'+str(i)+'.msh') + + pars = {'nCx': nCx, 'nCy': nCy, 'nCz': nCz} + + if load: + msh = gmsh.MeshLoader(mesh_2_name, work_dir).execute() + else: + old_name = str(work_dir+'/'+mesh_name) + new_name = str(work_dir+'/'+mesh_2_name) + msh = gmsh.MeshLoader(geo_name, file_dir).execute(**pars) + os.rename(old_name, new_name) + + return msh + + +def main(): + comm, rank, size = m.utilities.import_MPI() + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + E_mean = 1. + p_mean = 0.1 + + ensemble_sizes = [1, 8, 16, 24, 32] + + nCx = 9 + nCy = 9 + + N = 100 + N_i = 10 + tmp = np.logspace(1, 5, N, endpoint=True, dtype=int) + nCzs = tmp - 1 + max_iter = 100 + + # Compute all the meshes BEFORE initialing Kokkos. + + for i in range(0, N_i): + nCz = nCzs[i] + msh = read_msh(nCx, nCy, nCz, file_dir, work_dir, i, False) + + # Now that all the meshes are computed, we can initialize Kokkos. + nThreads = u.Initialize_Kokkos() + for i in range(0, N_i): + nCz = nCzs[i] + msh = read_msh(nCx, nCy, nCz, file_dir, work_dir, i, True) + for ensemble_size in ensemble_sizes: + E = E_mean * np.ones(ensemble_size) + p = p_mean * np.ones(ensemble_size) + + directory_case_id = str('test_' + + str(i) + '_s_' + str(ensemble_size) + '_no_prec_m_' + str(max_iter)) + model(msh, E, p, ensemble_size, directory_case_id, + max_iter, use_Prec=False) + directory_case_id = str('test_' + + str(i) + '_s_' + str(ensemble_size) + '_prec_m_' + str(max_iter)) + model(msh, E, p, ensemble_size, directory_case_id, + max_iter, use_Prec=True) + u.Finalize_Kokkos() + + +if __name__ == "__main__": + main() diff --git a/katoptron/thesis/test_2/blake.slurm.sh b/katoptron/thesis/test_2/blake.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..7f64a62eaeb01c0d1cc3e80f8b87f315726041a9 --- /dev/null +++ b/katoptron/thesis/test_2/blake.slurm.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=test_2 +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/test_2.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_HW_SUBSET=24c,1t +export KMP_AFFINITY=compact + +export MKL_NUM_THREADS=${OMP_NUM_THREADS} + +python run.py -k ${OMP_NUM_THREADS} katoptron/thesis/test_2/1_cube.py \ No newline at end of file diff --git a/katoptron/thesis/test_2/post_process.py b/katoptron/thesis/test_2/post_process.py new file mode 100644 index 0000000000000000000000000000000000000000..e6aa56bd58ccbaf8dad52aca5de84b99730f298b --- /dev/null +++ b/katoptron/thesis/test_2/post_process.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +import katoptron.eigenvalues as e +import katoptron.readers as r +import katoptron.convergence as c +from PyTrilinos import Teuchos +import shlex +import subprocess +import os +import numpy as np +import tarfile +import glob +from fwk.wutils import parseargs +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import axes3d +from katoptron.speedup import * + + +def CPU_time_all_cases(base_dir, n_cases, ensemble_sizes, + querylines, use_waves_timers, use_teuchos_timers, m, + use_prec=False): + + CPUs = np.zeros((n_cases, len(ensemble_sizes), len(querylines))) + msh_size = np.zeros((n_cases,)) + + for i in range(0, n_cases): + msh_size[i] = np.loadtxt( + base_dir + 'test_'+str(i)+'_s_1_no_prec_m_' + str(m) + '/msh_size.txt') + for j in range(0, len(ensemble_sizes)): + ensemble_size = ensemble_sizes[j] + + input_MC_file_dir = base_dir + 'test_' + \ + str(i)+'_s_'+str(ensemble_size) + + if use_prec: + input_MC_file_dir = input_MC_file_dir + \ + '_prec_m_' + str(m) + '/' + else: + input_MC_file_dir = input_MC_file_dir + \ + '_no_prec_m_' + str(m) + '/' + + for k in use_waves_timers: + CPUs[i, j, int(k)] = read_timers( + input_MC_file_dir + 'timers.txt', [querylines[int(k)]])[0] + for k in use_teuchos_timers: + CPUs[i, j, int(k)] = read_teuchos_timers( + input_MC_file_dir + 'teuchos_timers.txt', + [querylines[int(k)]])[0] + + return CPUs, msh_size + + +def plot_CPU_and_speedup(CPUs, msh_size, ensemble_sizes, index, querylines): + plt.figure() + for i in range(0, len(ensemble_sizes)): + plt.loglog(3*msh_size, CPUs[:, i, index], '*-') + + plt.ylabel('CPU time [sec]') + plt.xlabel('# dofs') + plt.title(querylines[index]) + plt.grid(True, which="both") + tmp_name = querylines[index].replace(": ", "_") + tmp_name = tmp_name.replace(" ", "_") + plt.savefig(tmp_name+'_CPU.png') + + np.savetxt(tmp_name+'_CPU.txt', CPUs[:, :, index]) + + mc_all = np.zeros((len(ensemble_sizes), 2)) + for i in range(0, len(ensemble_sizes)): + logX = np.log(3*msh_size) + logY = np.log(CPUs[:, i, index]) + m, c = np.polyfit(logX, logY, 1) + mc_all[i, 0] = m + mc_all[i, 1] = c + + np.savetxt(tmp_name+'_CPU_mc.txt', mc_all) + + plt.figure() + for i in range(1, len(ensemble_sizes)): + plt.loglog( + 3*msh_size, (ensemble_sizes[i]*CPUs[:, 0, index] / CPUs[:, i, index]), '*-') + + x = 3*np.array([msh_size[0], msh_size[-1]]) + y = np.array([1., 1.]) + plt.grid(True, which="both") + + plt.ylabel('Speed-up') + plt.xlabel('# dofs') + plt.title(querylines[index]) + plt.savefig(tmp_name+'_speedup.png') + for i in range(1, len(ensemble_sizes)): + np.savetxt(tmp_name+'_speedup_'+str( + ensemble_sizes[i])+'.txt', (ensemble_sizes[i]*CPUs[:, 0, index] / CPUs[:, i, index])) + + +def main(): + base_dir = '/Users/kimliegeois/Desktop/results/' + n_cases = 50 + + ensemble_sizes = [1, 8, 16, 24, 32] + + querylines = [ + 'total', 'write results', 'computeMatrices', + 'Belos: Operation Op*x', 'Belos: Operation Prec*x', + 'Belos: DGKS[2]: Orthogonalization', + 'Belos: DGKS[2]: Ortho (Inner Product)', + 'Belos: DGKS[2]: Ortho (Norm)', 'Belos: DGKS[2]: Ortho (Update)', + 'Belos: PseudoBlockGmresSolMgr total solve time' + ] + use_waves_timers = np.array([0, 1, 2], dtype=int) + use_teuchos_timers = np.array( + [3, 4, 5, 6, 7, 8, 9], + dtype=int) + + m = 100 + + CPUs, msh_size = CPU_time_all_cases(base_dir, n_cases, ensemble_sizes, + querylines, use_waves_timers, use_teuchos_timers, m, + use_prec=False) + + CPUs[:, :, 0] = CPUs[:, :, 0] - CPUs[:, :, 1] + + np.savetxt('N_dofs.txt', 3*msh_size) + #print CPUs + #print msh_size + + for i in range(0, 10): + plot_CPU_and_speedup(CPUs, msh_size, ensemble_sizes, i, querylines) + + +if __name__ == "__main__": + main() diff --git a/katoptron/thesis/test_2/prec.xml b/katoptron/thesis/test_2/prec.xml new file mode 100644 index 0000000000000000000000000000000000000000..7fcef90cbfcbb994e980439167e31c4e5d441a8f --- /dev/null +++ b/katoptron/thesis/test_2/prec.xml @@ -0,0 +1,20 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + <Parameter name="max levels" type="int" value="5"/> + <Parameter name="smoother: type" type="string" value="RELAXATION"/> + <ParameterList name="smoother: params"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="5"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + <!-- <Parameter name="relaxation: backward mode" type="bool" value="true"/> --> + </ParameterList> + <Parameter name="coarse: type" type="string" value="Klu"/> + <Parameter name="verbosity" type="string" value="extreme"/> + <Parameter name="multigrid algorithm" type="string" value="unsmoothed"/> + <Parameter name="tentative: calculate qr" type="bool" value="false"/> + <Parameter name="number of equations" type="int" value="3"/> +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/thesis/test_2/prec_1.xml b/katoptron/thesis/test_2/prec_1.xml new file mode 100644 index 0000000000000000000000000000000000000000..b2bd91f1eda70e1a3617aa725ae9d1a75ff0720a --- /dev/null +++ b/katoptron/thesis/test_2/prec_1.xml @@ -0,0 +1,16 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="coarse: type" type="string" value="RELAXATION"/> + <ParameterList name="coarse: params"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="5"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + <Parameter name="verbosity" type="string" value="extreme"/> + <Parameter name="number of equations" type="int" value="3"/> +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/thesis/test_3/beam.geo b/katoptron/thesis/test_3/beam.geo new file mode 100644 index 0000000000000000000000000000000000000000..71c4c0a7d917856e1d9791929e06c9347b4e036a --- /dev/null +++ b/katoptron/thesis/test_3/beam.geo @@ -0,0 +1,114 @@ +// $Id$ +// fichier de donnees gmsh + + +//L = 50.; +//W = 1.; +//H = 5.; +//d = 1.; + +//L = 50.; +//W = 5.; +//H = 5.; +H_rigid = 1.; +//d = 1.; + +hW = W/2; +hH = H/2; + +//n_L = 60; +//n_hW = 3; +//n_hH = 3; + +n_L_rigid = 1; +n_W_rigid = 1; +n_H_rigid = 1; + + +lc = 1; + +delta_H = hH+d; + +Point(101) = { 0, -hW, d, lc}; +Point(102) = { 0, 0, d, lc}; +Point(103) = { 0, hW, d, lc}; +Point(104) = { L, hW, d, lc}; +Point(105) = { L, 0, d, lc}; +Point(106) = { L, -hW, d, lc}; + +Point(205) = { 0, -hW, 0, lc}; +Point(206) = { 0, hW, 0, lc}; +Point(207) = { L, hW, 0, lc}; +Point(208) = { L, -hW, 0, lc}; + +Line(101) = {101, 102}; +Line(102) = {102, 103}; +Line(103) = {103, 104}; +Line(104) = {104, 105}; +Line(105) = {105, 106}; +Line(106) = {106, 101}; +Line(107) = {105, 102}; + +Line(205) = {205, 206}; +Line(206) = {206, 207}; +Line(207) = {207, 208}; +Line(208) = {208, 205}; + +Transfinite Line {101,102,104,105} = n_hW+1 Using Progression 1; +Transfinite Line {103,106,107} = n_L+1 Using Progression 1; + +Transfinite Line {205,207} = n_W_rigid+1 Using Progression 1; +Transfinite Line {206,208} = n_L_rigid+1 Using Progression 1; + +Line Loop(101) = {101,-107,105,106}; +Plane Surface(101) = {101}; +Transfinite Surface {101}; +Recombine Surface {101}; + +Line Loop(102) = {102,103,104,107}; +Plane Surface(102) = {102}; +Transfinite Surface {102}; +Recombine Surface {102}; + +Line Loop(202) = {-208,-207,-206,-205}; +Plane Surface(202) = {202}; +Transfinite Surface {202}; +Recombine Surface {202}; + +Extrude {0, 0, hH} +{ + Surface{101,102}; Layers{n_hH}; Recombine; +} + +Extrude {0, 0, hH} +{ + Surface{230,252}; Layers{n_hH}; Recombine; +} + +Extrude {0, 0, -H_rigid} +{ + Surface{202}; Layers{n_H_rigid}; Recombine; +} + + + +Physical Volume("Rigid body") = {5}; +Physical Surface("Rigid surface") = {202}; +Physical Surface("Rigid clamped surface") = {309}; +Physical Line("Rigid surface boundary") = {205, 206, 207, 208}; + +Physical Volume("Beam") = {1,2,3,4}; +Physical Surface("Clamped end") = {217,239,261,283,317}; +Physical Surface("Loaded surface") = {274,296}; +Physical Surface("Beam contact zone") = {101,102}; +Physical Surface("Free end") = {269,247,225,291}; +Physical Line("Beam contact boundary") = {104,105,106,101,102,103}; +Physical Line("Beam contact Dirichlet") = {101,102}; + +Physical Line("Center of cross section") = {211}; + +Physical Line("Center of contact surface") = {107}; + +Mesh.Partitioner = 2; +Mesh.MetisAlgorithm = 2; +Mesh.MshFilePartitioned = 0; diff --git a/katoptron/thesis/test_3/beam.py b/katoptron/thesis/test_3/beam.py new file mode 100644 index 0000000000000000000000000000000000000000..cd5bb997cf8d4b79b0cd3ea88a885f8e8fcf93a1 --- /dev/null +++ b/katoptron/thesis/test_3/beam.py @@ -0,0 +1,238 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + + + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +from PyTrilinos import Teuchos +import shlex +import subprocess +import os +import numpy as np +import tarfile +import glob +from fwk.wutils import parseargs +from katoptron.Juelich.UQ.halton import * + + +def tar_results(directory, filename, rank): + os.chdir(directory) + if rank == 0: + tf = tarfile.open(filename + ".tar.gz", mode="w:gz") + for file in glob.glob('*'): + if file.endswith(".tar.gz"): + print(file + ' is not included') + else: + tf.add(file) + tf.close() + + +def model(msh, E, p, ensemble_size, work_dir): + comm, rank, size = m.utilities.import_MPI() + + partitioned_mesh_name = 'beam_k.msh' + file_dir = os.path.dirname(__file__) + current_dir = os.getcwd() + + pbl = m.Problem(msh, comm) + + nu = 0.29 * np.ones(ensemble_size) + k = 0 + d = 0 + + m.Medium(pbl, "Beam", "Mat 1", E, nu, k, d) + m.Medium(pbl, "Rigid body", "Mat 1", E, nu, k, d) + + dx = np.zeros(ensemble_size) + dy = np.zeros(ensemble_size) + dz = np.zeros(ensemble_size) + dT = np.zeros(ensemble_size) + zero = np.zeros(ensemble_size) + m.Dirichlet(pbl, "Rigid clamped surface", + "Clamped 1", 1, dx, 1, dy, 1, dz, 0, dT) + m.Dirichlet(pbl, "Clamped end", "Clamped 1", 1, dx, 1, dy, 1, dz, 0, dT) + m.Dirichlet(pbl, "Free end", "Clamped 1", 1, 0., + 0, 0., 0, 0., 0, 0., ensemble_size) + + m.Neumann(pbl, "Loaded surface", "Load 1", 0, zero, + 0, zero, 1, -p, 0, zero, ensemble_size) + + norm1 = tbox.Vector3d(0, 0, -1) + norm2 = tbox.Vector3d(0, 0, 1) + dg = np.zeros(ensemble_size) + + a = 49.95 + initiallyClosedNodesList = np.array([], dtype=np.float) + for el in msh.ntags["Beam contact zone"].elems: + for n1 in el.nodes: + node_id = n1.no-1 + if msh.nodes[node_id].pos[0] >= a: + initiallyClosedNodesList = np.append( + initiallyClosedNodesList, node_id) + + cont1 = m.Contact(pbl, "Beam contact zone", "contact", norm1, dg) + cont1.setInitialyOpen() + cont1.setInitiallyClosedNodes(initiallyClosedNodesList) + cont1.setDualShapeFunctions() + cont1.setSlaveDirichlet( + work_dir+"/"+partitioned_mesh_name, "Beam contact Dirichlet") + cont1.setSignoriniContact() + cont1.setMaster(pbl, "Rigid surface", norm2) + + solverList = Teuchos.ParameterList() + solverList['Convergence Tolerance'] = 10**(-8) + solverList['Maximum Iterations'] = 500 + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + muelu_xml_in = file_dir + '/../../preconditioners/SIMPLE_gs_direct_lvl_MT.xml.in' + old_strings = ['$BLOCK_00_STRIDING_INFO', '$BLOCK_11_STRIDING_INFO', + '$BLOCK_00_GS_sweeps', '$BLOCK_00_GS_damping', + '$SCHUR_omega', '$SimpleSmoother_damping', "$N_LVLS", "$N_SIZES", "$EXPORT_DATA", "$SimpleSmoother_sweeps"] + new_strings = ['3', '1', '3', '0.8', '0.8', '1', '2', '18', "true", '1'] + + u.replace_strings(muelu_xml_in, current_dir + + '/SIMPLE_MG.xml', old_strings, new_strings) + + solverList["MueLu xml file name"] = current_dir+'/SIMPLE_MG.xml' + solverList["convert MueLu xml file"] = True + + solverList['Use preconditioner'] = True + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 10 + solverList['Write txt files'] = True + solverList['Print Teuchos timers'] = True + + slv = m.IterativeSolver(pbl, solverList, 3, ensemble_size) + + if rank == 0: + np.savetxt('E.txt', E) + np.savetxt('p.txt', p) + + slv.start() + + f = open('timers.txt', 'w') + print(slv.getTimers(), file=f) + f.closed + + +def evaluate_all_ensembles(ensemble_sizes, N, msh, comm, rank, size, + file_dir, work_dir, E_vec, p_vec): + """ + This function loop over the ensemble sizes, + and the ensembles + """ + for ensemble_size in ensemble_sizes: + directory = str(ensemble_size) + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + + N_ensemble = N // ensemble_size + + ensemble_index_min = 0 + for ensemble_index in range(ensemble_index_min, N_ensemble): + directory = str(ensemble_index) + u.mkdir_MPI(directory, comm, rank, size) + os.chdir(directory) + + ensemble_index_start = ensemble_index * ensemble_size + ensemble_index_end = ensemble_index_start + ensemble_size + + E = E_vec[ensemble_index_start:ensemble_index_end] + + p = p_vec[ensemble_index_start:ensemble_index_end] + + model(msh, E, p, ensemble_size, work_dir) + + os.chdir('..') + os.chdir('..') + + +def main(): + comm, rank, size = m.utilities.import_MPI() + + args = parseargs() + + geo_name = 'beam.geo' + + larger_mesh = True + + par = {} + par['L'] = 50. + par['W'] = 5. + par['H'] = 5. + par['d'] = 1. + if larger_mesh: + par['n_L'] = 200 + par['n_hW'] = 5 + par['n_hH'] = 5 + else: + par['n_L'] = 60 + par['n_hW'] = 3 + par['n_hH'] = 3 + + import shlex + import subprocess + import os + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + pars = {'L': par['L'], 'W': par['W'], 'H': par['H'], 'd': par['d'], + 'n_L': par['n_L'], 'n_hW': par['n_hW'], 'n_hH': par['n_hH']} + + msh, mesh_name, partitioned_mesh_name = u.read_mesh_MPI( + geo_name, file_dir, work_dir, comm, rank, size, pars) + + for n1 in msh.nodes: + n1.row = n1.no-1 + + N = 640 + p_min = 0.5 + p_max = 2.5 + E_min = 20500 + E_max = 21500 + + n_rand = 2 + halton_points = np.zeros((n_rand, N)) + E_vec = np.zeros((N, )) + p_vec = np.zeros((N, )) + for i in range(0, N): + halton_points[:, i] = halton(i, n_rand) + + E_vec = E_min + halton_points[0, :] * (E_max-E_min) + p_vec = p_min + halton_points[1, :] * (p_max-p_min) + + grouped = False + + if grouped: + order = np.loadtxt(file_dir+'/ordering.txt', dtype=int) + E_vec = E_vec[order[0:N]] + p_vec = p_vec[order[0:N]] + + if rank == 0: + np.savetxt('E_vec.txt', E_vec) + np.savetxt('p_vec.txt', p_vec) + + ensemble_sizes = [1, 8, 16, 32] + + nThreads = u.Initialize_Kokkos() + evaluate_all_ensembles(ensemble_sizes, N, msh, comm, rank, size, + file_dir, work_dir, E_vec, p_vec) + + u.Finalize_Kokkos() + + tar_results(work_dir, 'all_results', rank) + + +if __name__ == "__main__": + main() diff --git a/katoptron/thesis/test_3/blake.slurm.sh b/katoptron/thesis/test_3/blake.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..bbc346f3217cd155e8a60ba9baffc6a9e32ed67a --- /dev/null +++ b/katoptron/thesis/test_3/blake.slurm.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=test_3 +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/test_3.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_HW_SUBSET=24c,1t +export KMP_AFFINITY=compact + +export MKL_NUM_THREADS=${OMP_NUM_THREADS} + +python run.py -k ${OMP_NUM_THREADS} katoptron/thesis/test_3/beam.py diff --git a/katoptron/thesis/test_3/ordering.txt b/katoptron/thesis/test_3/ordering.txt new file mode 100644 index 0000000000000000000000000000000000000000..7680c69939af659e75ff9f3d47b6afaa8f2161ad --- /dev/null +++ b/katoptron/thesis/test_3/ordering.txt @@ -0,0 +1,640 @@ +318 +561 +453 +210 +588 +264 +129 +372 +615 +48 +426 +399 +534 +75 +108 +27 +486 +351 +405 +0 +81 +513 +567 +270 +243 +189 +162 +324 +339 +285 +222 +177 +123 +501 +384 +393 +609 +555 +204 +582 +42 +96 +258 +231 +420 +528 +366 +69 +447 +216 +345 +552 +228 +291 +183 +237 +102 +21 +390 +156 +249 +87 +411 +621 +573 +6 +252 +519 +255 +408 +219 +18 +387 +435 +504 +279 +84 +30 +480 +261 +543 +9 +381 +516 +273 +111 +90 +597 +570 +192 +297 +558 +327 +549 +354 +360 +612 +144 +153 +468 +441 +57 +207 +489 +432 +225 +594 +414 +288 +531 +540 +171 +99 +378 +165 +126 +1 +495 +135 +217 +63 +396 +45 +36 +198 +333 +379 +423 +622 +450 +492 +306 +639 +117 +91 +3 +522 +72 +330 +234 +315 +369 +342 +180 +603 +246 +352 +630 +477 +406 +253 +465 +415 +244 +55 +33 +60 +54 +459 +195 +585 +109 +568 +136 +576 +240 +595 +28 +433 +186 +82 +168 +298 +145 +357 +325 +510 +159 +114 +213 +600 +312 +163 +15 +469 +546 +564 +303 +271 +537 +636 +166 +348 +51 +429 +618 +19 +105 +343 +505 +375 +591 +321 +294 +474 +24 +280 +267 +559 +451 +181 +150 +64 +127 +139 +604 +226 +517 +442 +154 +388 +193 +31 +73 +550 +85 +478 +613 +328 +262 +274 +235 +100 +247 +46 +424 +586 +301 +490 +571 +397 +316 +4 +463 +355 +532 +289 +208 +370 +409 +502 +466 +444 +633 +471 +507 +309 +120 +525 +66 +138 +147 +201 +579 +462 +300 +336 +12 +627 +282 +417 +174 +498 +39 +363 +624 +93 +141 +190 +276 +514 +541 +438 +460 +487 +37 +456 +334 +483 +118 +172 +496 +631 +67 +10 +523 +78 +132 +577 +307 +121 +199 +361 +445 +229 +202 +220 +402 +94 +103 +607 +499 +337 +598 +391 +580 +526 +13 +175 +436 +40 +634 +22 +283 +553 +382 +544 +475 +196 +256 +58 +625 +148 +25 +373 +151 +340 +385 +178 +205 +346 +49 +589 +112 +304 +418 +295 +265 +508 +211 +412 +637 +130 +70 +124 +601 +349 +535 +16 +43 +367 +319 +421 +520 +400 +142 +628 +157 +472 +439 +493 +292 +187 +115 +511 +169 +7 +97 +529 +583 +610 +61 +394 +616 +574 +238 +547 +250 +259 +268 +286 +88 +313 +79 +331 +562 +556 +481 +430 +454 +133 +76 +184 +223 +173 +619 +605 +232 +92 +106 +164 +29 +448 +443 +623 +434 +38 +326 +380 +218 +277 +119 +461 +322 +335 +160 +542 +353 +2 +191 +515 +254 +551 +376 +484 +272 +65 +299 +488 +137 +110 +263 +497 +569 +11 +227 +281 +362 +572 +596 +389 +248 +221 +578 +518 +56 +606 +310 +427 +407 +358 +364 +34 +83 +524 +241 +457 +245 +52 +565 +214 +422 +470 +587 +592 +566 +538 +32 +479 +98 +403 +77 +512 +410 +305 +485 +317 +416 +395 +224 +236 +629 +179 +161 +320 +530 +278 +20 +260 +212 +548 +233 +206 +188 +113 +44 +50 +431 +155 +341 +458 +374 +68 +128 +602 +134 +8 +182 +392 +125 +503 +71 +89 +116 +332 +329 +449 +74 +557 +17 +59 +107 +170 +560 +563 +365 +452 +359 +428 +62 +371 +143 +131 +239 +266 +302 +269 +167 +47 +611 +95 +467 +308 +608 +455 +200 +533 +86 +536 +287 +494 +632 +209 +590 +626 +5 +575 +614 +581 +617 +176 +185 +401 +41 +293 +290 +506 +491 +527 +437 +311 +35 +104 +545 +419 +635 +344 +338 +413 +14 +23 +158 +425 +398 +140 +251 +257 +356 +203 +230 +554 +599 +194 +101 +275 +383 +593 +404 +539 +377 +368 +476 +314 +482 +584 +26 +80 +53 +323 +296 +350 +521 +440 +242 +500 +620 +152 +215 +638 +122 +197 +386 +509 +446 +347 +473 +284 +149 +146 +464 diff --git a/katoptron/thesis/test_3/post_process.py b/katoptron/thesis/test_3/post_process.py new file mode 100644 index 0000000000000000000000000000000000000000..f8a356faa4fe30e7cefbb5a680369585c5c12be8 --- /dev/null +++ b/katoptron/thesis/test_3/post_process.py @@ -0,0 +1,485 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +import katoptron.eigenvalues as e +import katoptron.readers as r +import katoptron.convergence as c +from PyTrilinos import Teuchos +import shlex +import subprocess +import os +import numpy as np +import tarfile +import glob +from fwk.wutils import parseargs +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import axes3d +from katoptron.speedup import * + + +def read_mm_vector(filename, ensemble_size): + with open(filename, 'r') as my_file: + text = my_file.read().splitlines(True) + if ensemble_size > 1: + for i in range(2, len(text)): + text[i] = text[i].replace("[", "") + text[i] = text[i].replace("]", "") + + X = np.genfromtxt(text[2:]) + return X + + +def extract_values(filename, node_id, which_dof, dof_per_node, ensemble_size): + output = np.zeros((ensemble_size, )) + X = read_mm_vector(filename, ensemble_size) + output = X[dof_per_node * node_id + which_dof, :] + return output + + +def write_tex(n_samples, iter, filename): + f = open(filename, 'w') + print('\\addplot [c1, mark=*, mark size=2pt, mark options={solid}, only marks]', file=f) + print('table [row sep=crcr] {%', file=f) + for i in range(0, n_samples): + print(str(i) + ' ' + str(iter[0][i]) + '\\\\', file=f) + print('};', file=f) + print('\\label{pgfplots:noEP}', file=f) + ensemble_size = 8 + for i in range(0, int(np.ceil(n_samples * 1. / ensemble_size))): + print('\\addplot [line width=2pt, c2]', file=f) + print('table [row sep=crcr] {%', file=f) + print(str(ensemble_size * i) + ' ' + str( + iter[1][ensemble_size * i]) + '\\\\', file=f) + print(str(ensemble_size * + (i + 1)) + ' ' + str(iter[1][ensemble_size * + (i + 1) - 1]) + '\\\\', file=f) + print('};', file=f) + print('\\label{pgfplots:s8}', file=f) + ensemble_size = 16 + for i in range(0, int(np.ceil(n_samples * 1. / ensemble_size))): + print('\\addplot [line width=1.5pt, c3]', file=f) + print('table [row sep=crcr] {%', file=f) + print(str(ensemble_size * i) + ' ' + str( + iter[2][ensemble_size * i]) + '\\\\', file=f) + print(str(ensemble_size * + (i + 1)) + ' ' + str(iter[2][ensemble_size * + (i + 1) - 1]) + '\\\\', file=f) + print('};', file=f) + print('\\label{pgfplots:s16}', file=f) + ensemble_size = 32 + for i in range(0, int(np.ceil(n_samples * 1. / ensemble_size))): + print('\\addplot [line width=1.pt, c4]', file=f) + print('table [row sep=crcr] {%', file=f) + print(str(ensemble_size * i) + ' ' + str( + iter[3][ensemble_size * i]) + '\\\\', file=f) + print(str(ensemble_size * + (i + 1)) + ' ' + str(iter[3][ensemble_size * + (i + 1) - 1]) + '\\\\', file=f) + print('};', file=f) + print('\\label{pgfplots:s32}', file=f) + f.closed + + +def CPU_time_per_one_case(base_dir, + n_samples, + ensemble_sizes, + quantiles, + querylines, + use_waves_timers, + use_teuchos_timers, + per_iteration, + filename_CPU, + filename_speed_up, + per_ensemble=True): + + timers = read_timers_all_ensemble_sizes(n_samples, ensemble_sizes, + base_dir, querylines, + use_waves_timers, + use_teuchos_timers) + + f = open(filename_CPU, 'w') + print(timers.shape, file=f) + + for i in range(0, timers.shape[2]): + print(querylines[i], file=f) + string = '' + for e in range(0, timers.shape[0]): + if per_ensemble: + current_timer = (np.sum(timers[e, :, i]) / n_samples) + else: + current_timer = (np.sum( + timers[e, :, i]) / (n_samples * ensemble_sizes[e])) + string = string + str(round(current_timer, 3)) + ' & ' + print(string, file=f) + print(' ', file=f) + f.closed + + f = open(filename_speed_up, 'w') + print(timers.shape, file=f) + + for i in range(0, timers.shape[2]): + print(querylines[i], file=f) + string = '' + for e in range(0, timers.shape[0]): + if e == 0: + current_timer_s1 = np.sum(timers[0, :, i]) + current_timer = (np.sum(timers[e, :, i]) / ensemble_sizes[e]) + string = string + str(round((current_timer_s1 / current_timer), + 3)) + ' & ' + print(string, file=f) + print(' ', file=f) + f.closed + + +def load_qoi(base_dir, N, ensemble_size): + node_id = 68 + #node_id = 227 + which_dof = 2 + dof_per_node = 3 + + qoi = np.zeros((N, )) + N_ensemble = N // ensemble_size + + ensemble_index_min = 0 + for ensemble_index in range(ensemble_index_min, N_ensemble): + solution_file_name = base_dir + '/' + str(ensemble_size) + '/' + str( + ensemble_index) + '/x_mm.txt' + output = extract_values(solution_file_name, node_id, which_dof, + dof_per_node, ensemble_size) + + ensemble_index_start = ensemble_index * ensemble_size + ensemble_index_end = ensemble_index_start + ensemble_size + + qoi[ensemble_index_start:ensemble_index_end] = output + + return qoi + + +def speedup(base_dir, + n_samples, + ensemble_sizes, + quantiles, + querylines, + use_waves_timers, + use_teuchos_timers, + per_iteration, + ensemble_reduction=False): + import matplotlib.pyplot as plt + + if ensemble_reduction: + case_id = 'ER' + else: + case_id = 'NER' + + speedup = compute_speedup(n_samples, + ensemble_sizes, + base_dir, + querylines, + per_iteration, + quantiles, + use_waves_timers, + use_teuchos_timers, + reduction=ensemble_reduction, + remove_write=True) + + plot_speedup(speedup, ensemble_sizes, np.arange(0, len(querylines)), + 'beam_' + case_id, querylines, per_iteration) + plt.savefig('beam_' + case_id + '.png', dpi=400) + + save_speedup(speedup, ensemble_sizes, querylines, 'beam_' + case_id) + + R = compute_R(n_samples, ensemble_sizes, base_dir, quantiles, + ensemble_reduction) + save_R(R, 'beam_R_' + case_id) + + +def speedup_ensemble_reduction(base_dir_ER, base_dir_NER, n_samples): + ensemble_sizes = [1, 8, 16, 32] + quantiles = [0, 0.33, 0.5, 0.66, 1.] + + querylines = [ + 'computeMatrices', 'Belos: Operation Op*x', 'Belos: Operation Prec*x', + 'Belos: DGKS[2]: Orthogonalization', + 'Belos: DGKS[2]: Ortho (Inner Product)', + 'Belos: DGKS[2]: Ortho (Norm)', 'Belos: DGKS[2]: Ortho (Update)', + 'total', 'write results', 'MueLu: Hierarchy: Solve (level=0)', + 'MueLu: Hierarchy: Solve (level=1)', + 'MueLu: Hierarchy: Solve : smoothing (level=0)', + 'MueLu: Hierarchy: Solve : prolongation (level=0)', + 'MueLu: Hierarchy: Solve : residual calculation (level=0)', + 'MueLu: Hierarchy: Solve : restriction (level=0)', + 'MueLu: SIMPLE: Apply: Update step - level 0', + 'MueLu: SIMPLE: Apply: Prediction step: Solve block 00 - level 0', + 'MueLu: SIMPLE: Apply: Prediction step: Compute RHS - level 0', + 'MueLu: SIMPLE: Apply: Correction step: Solve block 11 - level 0', + 'MueLu: SIMPLE: Apply: Correction step: Compute RHS - level 0' + ] + use_waves_timers = np.array([0, 7, 8], dtype=int) + use_teuchos_timers = np.array( + [1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], + dtype=int) + per_iteration = [ + False, True, True, False, False, False, False, False, False, True, + True, True, True, True, True, True, True, True, True, True + ] + + speedup(base_dir_NER, n_samples, ensemble_sizes, quantiles, querylines, + use_waves_timers, use_teuchos_timers, per_iteration, False) + speedup(base_dir_ER, n_samples, ensemble_sizes, quantiles, querylines, + use_waves_timers, use_teuchos_timers, per_iteration, True) + + querylines = [ + 'domain', 'Belos: Operation Op*x', 'Belos: Operation Prec*x', + 'Belos: DGKS[2]: Orthogonalization', + 'Belos: PseudoBlockGmresSolMgr total solve time', + 'MueLu: Hierarchy: Setup (total)', 'Belos: DGKS[2]: Ortho (Update)', + 'total', 'write results', 'MueLu: Hierarchy: Solve (level=0)', + 'MueLu: Hierarchy: Solve (level=1)', + 'MueLu: Hierarchy: Solve : smoothing (level=0)', + 'MueLu: Hierarchy: Solve : prolongation (level=0)', + 'MueLu: Hierarchy: Solve : residual calculation (level=0)', + 'MueLu: Hierarchy: Solve : restriction (level=0)', + 'MueLu: SIMPLE: Apply: Update step - level 0', + 'MueLu: SIMPLE: Apply: Prediction step: Solve block 00 - level 0', + 'MueLu: SIMPLE: Apply: Prediction step: Compute RHS - level 0', + 'MueLu: SIMPLE: Apply: Correction step: Solve block 11 - level 0', + 'MueLu: SIMPLE: Apply: Correction step: Compute RHS - level 0', + 'compute contact matrices', 'compute block 00 matrix', 'dp', + 'computeMatrices' + ] + use_waves_timers = np.array([0, 7, 8, 20, 21, 22, 23], dtype=int) + use_teuchos_timers = np.array( + [1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], + dtype=int) + per_iteration = [ + False, True, True, False, False, False, False, False, False, True, + True, True, True, True, True, True, True, True, True, True, False + ] + + CPU_time_per_one_case(base_dir_NER, n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, use_teuchos_timers, + per_iteration, 'average_CPU_NER.txt', + 'average_speed_up_NER.txt') + + CPU_time_per_one_case(base_dir_ER, n_samples, ensemble_sizes, quantiles, + querylines, use_waves_timers, use_teuchos_timers, + per_iteration, 'average_CPU_ER.txt', + 'average_speed_up_ER.txt') + + +def plot_iter_all_ensemble_sizes(n_samples, iter, print_all=True): + import matplotlib.pyplot as plt + plt.figure() + plt.plot(list(range(0, n_samples)), + iter[0][:], 'bo', markersize=8, zorder=1) + ensemble_size = 8 + for i in range(0, int(np.ceil(n_samples * 1. / ensemble_size))): + plt.plot(list(range(ensemble_size * i, ensemble_size * (i + 1))), + iter[1][ensemble_size * i:ensemble_size * (i + 1)], + '-ro', + linewidth=3, + markersize=6, + zorder=2) + if print_all: + ensemble_size = 16 + for i in range(0, int(np.ceil(n_samples * 1. / ensemble_size))): + plt.plot(list(range(ensemble_size * i, ensemble_size * (i + 1))), + iter[2][ensemble_size * i:ensemble_size * (i + 1)], + '-go', + linewidth=2, + markersize=4, + zorder=2) + ensemble_size = 32 + for i in range(0, int(np.ceil(n_samples * 1. / ensemble_size))): + plt.plot(list(range(ensemble_size * i, ensemble_size * (i + 1))), + iter[3][ensemble_size * i:ensemble_size * (i + 1)], + '-ko', + linewidth=1, + markersize=2, + zorder=3) + plt.xlabel('sample') + plt.ylabel('Number of iterations to converge') + + +def plot_iter_all(base_dir_ER, base_dir_NER, ensemble_sizes, n_samples): + + iter_NER = read_iter_all_ensemble_sizes(n_samples, ensemble_sizes, + base_dir_NER, False) + iter_ER = read_iter_all_ensemble_sizes(n_samples, ensemble_sizes, + base_dir_ER, True) + plot_iter_all_ensemble_sizes(n_samples, iter_NER) + write_tex(n_samples, iter_NER, 'NER_conv.tex') + np.savetxt('NER_conv.txt', iter_NER) + np.savetxt('ordering_1.txt', + np.argsort(iter_NER[0, :]).astype(int), + fmt='%i') + np.savetxt('ordering_2.txt', + np.argsort(iter_NER[0][:]).astype(int), + fmt='%i') + plot_iter_all_ensemble_sizes(n_samples, iter_ER) + write_tex(n_samples, iter_ER, 'ER_conv.tex') + np.savetxt('ER_conv.txt', iter_ER) + + order = np.argsort(iter_NER[0, :]) + + tmp = iter_NER[0][order] + + plt.figure() + plt.plot(iter_NER[0][:]) + plt.savefig('no_order_1.png', dpi=400) + + iter_NER[0][:] = tmp + + plt.figure() + plt.plot(tmp) + plt.savefig('order_1.png', dpi=400) + + tmp = iter_ER[0][order] + + plt.figure() + plt.plot(iter_ER[0][:]) + plt.savefig('no_order_2.png', dpi=400) + + iter_ER[0][:] = tmp + + write_tex(n_samples, iter_NER, 'NER_conv_2.tex') + write_tex(n_samples, iter_ER, 'ER_conv_2.tex') + + plt.figure() + plt.plot(tmp) + plt.savefig('order_2.png', dpi=400) + + +def plot_AS_iter_all(base_dir_ER, base_dir_NER, ensemble_sizes, n_samples): + + iter_NER = read_AS_iter_all_ensemble_sizes(n_samples, ensemble_sizes, + base_dir_NER, False) + iter_ER = read_AS_iter_all_ensemble_sizes(n_samples, ensemble_sizes, + base_dir_ER, True) + plot_iter_all_ensemble_sizes(n_samples, iter_NER) + write_tex(n_samples, iter_NER, 'AS_NER_conv.tex') + np.savetxt('AS_NER_conv.txt', iter_NER) + np.savetxt('AS_ordering_1.txt', + np.argsort(iter_NER[0, :]).astype(int), + fmt='%i') + np.savetxt('AS_ordering_2.txt', + np.argsort(iter_NER[0][:]).astype(int), + fmt='%i') + plot_iter_all_ensemble_sizes(n_samples, iter_ER) + write_tex(n_samples, iter_ER, 'AS_ER_conv.tex') + np.savetxt('AS_ER_conv.txt', iter_ER) + + order = np.argsort(iter_NER[0, :]) + + tmp = iter_NER[0][order] + + plt.figure() + plt.plot(iter_NER[0][:]) + plt.savefig('AS_no_order_1.png', dpi=400) + + iter_NER[0][:] = tmp + + plt.figure() + plt.plot(tmp) + plt.savefig('AS_order_1.png', dpi=400) + + tmp = iter_ER[0][order] + + plt.figure() + plt.plot(iter_ER[0][:]) + plt.savefig('AS_no_order_2.png', dpi=400) + + iter_ER[0][:] = tmp + + write_tex(n_samples, iter_NER, 'AS_NER_conv_2.tex') + write_tex(n_samples, iter_ER, 'AS_ER_conv_2.tex') + + plt.figure() + plt.plot(tmp) + plt.savefig('AS_order_2.png', dpi=400) + + +def all_post_process(grouped): + if grouped: + base_dir_NER = '/Volumes/HD_SONY/Thesis/Test_3/all_results_NER_grouped_2' + base_dir_ER = '/Volumes/HD_SONY/Thesis/Test_3/all_results_ER_grouped_2' + directory = 'grouped' + else: + base_dir_NER = '/Volumes/HD_SONY/Thesis/Test_3/all_results_NER_beam' + base_dir_ER = '/Volumes/HD_SONY/Thesis/Test_3/all_results_ER_beam' + directory = 'not_grouped' + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + N = 640 + ensemble_sizes = [1, 8, 16, 32] + + #compare_QoI(base_dir_NER, base_dir_ER, N, ensemble_sizes) + speedup_ensemble_reduction(base_dir_ER, base_dir_NER, N) + + E = np.loadtxt(base_dir_NER + '/E_vec.txt') + p = np.loadtxt(base_dir_NER + '/p_vec.txt') + + qoi_NER_8 = load_qoi(base_dir_NER, N, 8) + qoi_NER_16 = load_qoi(base_dir_NER, N, 16) + qoi_NER_32 = load_qoi(base_dir_NER, N, 32) + + qoi_ER_8 = load_qoi(base_dir_ER, N, 8) + qoi_ER_16 = load_qoi(base_dir_ER, N, 16) + qoi_ER_32 = load_qoi(base_dir_ER, N, 32) + + np.savetxt('qoi_NER_8.tex', qoi_NER_8) + ''' + fig = plt.figure() + ax = fig.gca(projection='3d') + ax.scatter(E,p,qoi_ER_8) + + fig = plt.figure() + ax = fig.gca(projection='3d') + ax.scatter(E,p,qoi_ER_16) + + fig = plt.figure() + ax = fig.gca(projection='3d') + ax.scatter(E,p,qoi_ER_32) + ''' + + plot_iter_all(base_dir_ER, base_dir_NER, ensemble_sizes, N) + plot_AS_iter_all(base_dir_ER, base_dir_NER, ensemble_sizes, N) + + plt.figure() + for i in range(0, 8): + iter_indices, residuals = read_Belos( + base_dir_NER + '/1/' + str(i) + '/belos_out.txt', 1) + plt.semilogy(residuals) + + x = np.array([0, 180]) + y = np.array([1e-6, 1e-6]) + plt.semilogy(x, y, 'k--') + + plt.figure() + iter_indices, residuals = read_Belos(base_dir_NER + '/8/0/belos_out.txt', + 8) + for i in range(0, 8): + plt.semilogy(residuals[:, i]) + + plt.semilogy(x, y, 'k--') + + plt.figure() + iter_indices, residuals = read_Belos(base_dir_ER + '/8/0/belos_out.txt', 1) + plt.semilogy(residuals) + plt.semilogy(x, y, 'k--') + os.chdir('..') + + +def main(): + all_post_process(False) + all_post_process(True) + + +if __name__ == "__main__": + main() diff --git a/katoptron/thesis/test_4/1_cube.geo b/katoptron/thesis/test_4/1_cube.geo new file mode 100644 index 0000000000000000000000000000000000000000..f3bd653dc53caf13979ed4c07cc1a4d9847530d4 --- /dev/null +++ b/katoptron/thesis/test_4/1_cube.geo @@ -0,0 +1,42 @@ +// $Id$ +// fichier de donnees gmsh + +C1 = 10; +//nCx = 3; +//nCy = 4; +//nCz = 5; + +lc = 1; + +Point(1) = { 0, 0, 0, lc}; +Point(2) = { C1, 0, 0, lc}; +Point(3) = { C1, 0, C1, lc}; +Point(4) = { 0, 0, C1, lc}; + +Line(1) = {1, 2}; +Line(2) = {2, 3}; +Line(3) = {3, 4}; +Line(4) = {4, 1}; + +Transfinite Line {1,3} = nCx+1 Using Progression 1; +Transfinite Line {2,4} = nCz+1 Using Progression 1; + +Line Loop(11) = {1,2,3,4}; +Plane Surface(12) = {11}; +Transfinite Surface {12}; +Recombine Surface {12}; + +Extrude {0, C1, 0} +{ + Surface{12}; Layers{nCy}; Recombine; +} + +// physical entities + +Physical Volume("Body 1") = {1}; + +Physical Surface("Surf 1 1") = {-21}; +Physical Surface("Surf 1 2") = {-29}; + +Physical Point("Measure point 1") = {4}; +Physical Point("Measure point 2") = {1}; diff --git a/katoptron/thesis/test_4/1_cube.py b/katoptron/thesis/test_4/1_cube.py new file mode 100644 index 0000000000000000000000000000000000000000..f3a7b39a291e4e759471538ea165119ceb3d28d6 --- /dev/null +++ b/katoptron/thesis/test_4/1_cube.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +from PyTrilinos import Teuchos +import shlex +import subprocess +import os +import numpy as np +import tarfile +import glob +from fwk.wutils import parseargs + + +def model(msh, E, p, ensemble_size, case_name, max_iter, use_Prec=False): + comm, rank, size = m.utilities.import_MPI() + file_dir = os.path.dirname(__file__) + + pbl = m.Problem(msh, comm) + + nu = 0.2 * np.ones(ensemble_size) + k = 0.114 + d = 0. + + zero = np.zeros(ensemble_size) + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Surf 1 1", "Clamped", 1, 0., 1, 0., 1, 0., 1, 0., + ensemble_size) + m.Neumann(pbl, "Surf 1 2", "heat fluxes", 0, zero, 0, zero, 1, p, 0, zero, + ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Ensemble Convergence Tolerance'] = 0. # 10**(-8) + solverList['Maximum Iterations'] = int(max_iter) + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['Use preconditioner'] = use_Prec + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + solverList['Write vtk files'] = False + + if use_Prec: + solverList['convert MueLu xml file'] = True + solverList["use xml file"] = True + solverList["MueLu xml file name"] = file_dir + '/prec_1.xml' + + slv = m.IterativeSolver(pbl, solverList, 3, ensemble_size) + + u.mkdir_MPI(case_name, comm, rank, size) + os.chdir(case_name) + + if rank == 0: + f = open('msh_size.txt', 'w') + print(len(msh.nodes), file=f) + f.closed + + np.savetxt('E.txt', E) + np.savetxt('p.txt', p) + + slv.start() + + if rank == 0: + f = open('timers.txt', 'w') + print(slv.getTimers(), file=f) + f.closed + + os.chdir('..') + + +def read_msh(i=1): + comm, rank, size = m.utilities.import_MPI() + + mesh_name = str('1_cube_' + str(i) + '.msh') + + file_dir = os.path.dirname(__file__) + work_dir = os.getcwd() + + if size != 1: + msh = gmsh.MeshLoader(mesh_name, work_dir).execute(myrank=rank) + else: + msh = gmsh.MeshLoader(mesh_name, work_dir).execute() + + return msh + + +def main(): + comm, rank, size = m.utilities.import_MPI() + + args = parseargs() + + os.chdir('MPI_' + str(size)) + work_dir = os.getcwd() + + E_mean = 1. + p_mean = 0.1 + + ensemble_sizes = [1, 8, 16, 32] + + nCx = 9 + nCy = 9 + + N = 100 + tmp = np.logspace(1, 5, N, endpoint=True, dtype=int) + nCzs = tmp - 1 + + i = np.loadtxt(work_dir + '/i.txt', dtype=int) + max_iter = np.loadtxt(work_dir + '/m.txt', dtype=int) + nCz = nCzs[i] + msh = read_msh(i) + nThreads = u.Initialize_Kokkos() + for ensemble_size in ensemble_sizes: + E = E_mean * np.ones(ensemble_size) + p = p_mean * np.ones(ensemble_size) + + directory_case_id = 'test_' + str(i) + '_s_' + str( + ensemble_size) + '_no_prec_m_' + str(max_iter) + model(msh, + E, + p, + ensemble_size, + directory_case_id, + max_iter, + use_Prec=False) + directory_case_id = 'test_' + str(i) + '_s_' + str( + ensemble_size) + '_prec_m_' + str(max_iter) + model(msh, + E, + p, + ensemble_size, + directory_case_id, + max_iter, + use_Prec=True) + + u.Finalize_Kokkos() + + +if __name__ == "__main__": + main() diff --git a/katoptron/thesis/test_4/blake.slurm.sh b/katoptron/thesis/test_4/blake.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..0a9ac5cf7fa3f1e1e6a5f44080e95ade37d6539b --- /dev/null +++ b/katoptron/thesis/test_4/blake.slurm.sh @@ -0,0 +1,61 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=test_4 +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/test_4.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_HW_SUBSET=24c,1t +export KMP_AFFINITY=compact + +export MKL_NUM_THREADS=${OMP_NUM_THREADS} + +n_MPI=1 + +i_min=1 +i_max=201 + +m_1=10 +m_2=100 +m_3=200 + +nCx=100 +nCy=100 + +base_dir=$(pwd) +geo_file=${base_dir}/katoptron/thesis/test_4/1_cube.geo +workspace_dir_0=${base_dir}/workspace/katoptron_thesis_test_4_1_cube +workspace_dir=${workspace_dir_0}/MPI_${n_MPI} + +if [ ! -d ${workspace_dir_0} ] +then + mkdir ${workspace_dir_0} + mkdir ${workspace_dir} +fi + +if [ ! -d ${workspace_dir} ] +then + mkdir ${workspace_dir} +fi + +for (( i = $i_min; i < $i_max; ++i )); do + nCz=$(( 5*i )) + msh_file=${workspace_dir}/1_cube_${i}.msh + gmsh -3 ${geo_file} -setnumber nCx ${nCx} -setnumber nCy ${nCy} -setnumber nCz ${nCz} -o ${msh_file} -part ${n_MPI} -format msh22 + echo $i &> ${workspace_dir}/i.txt + echo $m_1 &> ${workspace_dir}/m.txt + mpirun -np ${n_MPI} python run.py -k ${OMP_NUM_THREADS} katoptron/thesis/test_4/1_cube.py + echo $m_2 &> ${workspace_dir}/m.txt + mpirun -np ${n_MPI} python run.py -k ${OMP_NUM_THREADS} katoptron/thesis/test_4/1_cube.py + echo $m_3 &> ${workspace_dir}/m.txt + mpirun -np ${n_MPI} python run.py -k ${OMP_NUM_THREADS} katoptron/thesis/test_4/1_cube.py +done \ No newline at end of file diff --git a/katoptron/thesis/test_4/blake_N_1.slurm.sh b/katoptron/thesis/test_4/blake_N_1.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..337bfeeb70ebe41e0a58a614f5721e4c73eb9220 --- /dev/null +++ b/katoptron/thesis/test_4/blake_N_1.slurm.sh @@ -0,0 +1,61 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=test_4 +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/test_4.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_HW_SUBSET=24c,1t +export KMP_AFFINITY=compact + +export MKL_NUM_THREADS=${OMP_NUM_THREADS} + +n_MPI=2 + +i_min=1 +i_max=201 + +m_1=10 +m_2=100 +m_3=200 + +nCx=100 +nCy=100 + +base_dir=$(pwd) +geo_file=${base_dir}/katoptron/thesis/test_4/1_cube.geo +workspace_dir_0=${base_dir}/workspace/katoptron_thesis_test_4_1_cube +workspace_dir=${workspace_dir_0}/MPI_${n_MPI} + +if [ ! -d ${workspace_dir_0} ] +then + mkdir ${workspace_dir_0} + mkdir ${workspace_dir} +fi + +if [ ! -d ${workspace_dir} ] +then + mkdir ${workspace_dir} +fi + +for (( i = $i_min; i < $i_max; ++i )); do + nCz=$(( 5*i )) + msh_file=${workspace_dir}/1_cube_${i}.msh + gmsh -3 ${geo_file} -setnumber nCx ${nCx} -setnumber nCy ${nCy} -setnumber nCz ${nCz} -o ${msh_file} -part ${n_MPI} -format msh22 + echo $i &> ${workspace_dir}/i.txt + echo $m_1 &> ${workspace_dir}/m.txt + mpirun -npersocket 1 python run.py -k ${OMP_NUM_THREADS} katoptron/thesis/test_4/1_cube.py + echo $m_2 &> ${workspace_dir}/m.txt + mpirun -npersocket 1 python run.py -k ${OMP_NUM_THREADS} katoptron/thesis/test_4/1_cube.py + echo $m_3 &> ${workspace_dir}/m.txt + mpirun -npersocket 1 python run.py -k ${OMP_NUM_THREADS} katoptron/thesis/test_4/1_cube.py +done diff --git a/katoptron/thesis/test_4/blake_N_2.slurm.sh b/katoptron/thesis/test_4/blake_N_2.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..96d5b76524a2aefb5004d37ad35557943de7b472 --- /dev/null +++ b/katoptron/thesis/test_4/blake_N_2.slurm.sh @@ -0,0 +1,61 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=test_4 +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 2 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/test_4.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_HW_SUBSET=24c,1t +export KMP_AFFINITY=compact + +export MKL_NUM_THREADS=${OMP_NUM_THREADS} + +n_MPI=4 + +i_min=1 +i_max=201 + +m_1=10 +m_2=100 +m_3=200 + +nCx=100 +nCy=100 + +base_dir=$(pwd) +geo_file=${base_dir}/katoptron/thesis/test_4/1_cube.geo +workspace_dir_0=${base_dir}/workspace/katoptron_thesis_test_4_1_cube +workspace_dir=${workspace_dir_0}/MPI_${n_MPI} + +if [ ! -d ${workspace_dir_0} ] +then + mkdir ${workspace_dir_0} + mkdir ${workspace_dir} +fi + +if [ ! -d ${workspace_dir} ] +then + mkdir ${workspace_dir} +fi + +for (( i = $i_min; i < $i_max; ++i )); do + nCz=$(( 5*i )) + msh_file=${workspace_dir}/1_cube_${i}.msh + gmsh -3 ${geo_file} -setnumber nCx ${nCx} -setnumber nCy ${nCy} -setnumber nCz ${nCz} -o ${msh_file} -part ${n_MPI} -format msh22 + echo $i &> ${workspace_dir}/i.txt + echo $m_1 &> ${workspace_dir}/m.txt + mpirun -npersocket 1 python run.py -k ${OMP_NUM_THREADS} katoptron/thesis/test_4/1_cube.py + echo $m_2 &> ${workspace_dir}/m.txt + mpirun -npersocket 1 python run.py -k ${OMP_NUM_THREADS} katoptron/thesis/test_4/1_cube.py + echo $m_3 &> ${workspace_dir}/m.txt + mpirun -npersocket 1 python run.py -k ${OMP_NUM_THREADS} katoptron/thesis/test_4/1_cube.py +done diff --git a/katoptron/thesis/test_4/blake_N_4.slurm.sh b/katoptron/thesis/test_4/blake_N_4.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..ae301ecc46cb470853d21d55d3bab3e125aab310 --- /dev/null +++ b/katoptron/thesis/test_4/blake_N_4.slurm.sh @@ -0,0 +1,61 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=test_4 +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 4 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/test_4.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_HW_SUBSET=24c,1t +export KMP_AFFINITY=compact + +export MKL_NUM_THREADS=${OMP_NUM_THREADS} + +n_MPI=8 + +i_min=1 +i_max=201 + +m_1=10 +m_2=100 +m_3=200 + +nCx=100 +nCy=100 + +base_dir=$(pwd) +geo_file=${base_dir}/katoptron/thesis/test_4/1_cube.geo +workspace_dir_0=${base_dir}/workspace/katoptron_thesis_test_4_1_cube +workspace_dir=${workspace_dir_0}/MPI_${n_MPI} + +if [ ! -d ${workspace_dir_0} ] +then + mkdir ${workspace_dir_0} + mkdir ${workspace_dir} +fi + +if [ ! -d ${workspace_dir} ] +then + mkdir ${workspace_dir} +fi + +for (( i = $i_min; i < $i_max; ++i )); do + nCz=$(( 5*i )) + msh_file=${workspace_dir}/1_cube_${i}.msh + gmsh -3 ${geo_file} -setnumber nCx ${nCx} -setnumber nCy ${nCy} -setnumber nCz ${nCz} -o ${msh_file} -part ${n_MPI} -format msh22 + echo $i &> ${workspace_dir}/i.txt + echo $m_1 &> ${workspace_dir}/m.txt + mpirun -npersocket 1 python run.py -k ${OMP_NUM_THREADS} katoptron/thesis/test_4/1_cube.py + echo $m_2 &> ${workspace_dir}/m.txt + mpirun -npersocket 1 python run.py -k ${OMP_NUM_THREADS} katoptron/thesis/test_4/1_cube.py + echo $m_3 &> ${workspace_dir}/m.txt + mpirun -npersocket 1 python run.py -k ${OMP_NUM_THREADS} katoptron/thesis/test_4/1_cube.py +done diff --git a/katoptron/thesis/test_4/blake_N_8.slurm.sh b/katoptron/thesis/test_4/blake_N_8.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..c361eec1dfc54321b7643bb9d7c7a85bd7abebab --- /dev/null +++ b/katoptron/thesis/test_4/blake_N_8.slurm.sh @@ -0,0 +1,61 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=test_4 +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 8 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/test_4.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_HW_SUBSET=24c,1t +export KMP_AFFINITY=compact + +export MKL_NUM_THREADS=${OMP_NUM_THREADS} + +n_MPI=16 + +i_min=1 +i_max=201 + +m_1=10 +m_2=100 +m_3=200 + +nCx=100 +nCy=100 + +base_dir=$(pwd) +geo_file=${base_dir}/katoptron/thesis/test_4/1_cube.geo +workspace_dir_0=${base_dir}/workspace/katoptron_thesis_test_4_1_cube +workspace_dir=${workspace_dir_0}/MPI_${n_MPI} + +if [ ! -d ${workspace_dir_0} ] +then + mkdir ${workspace_dir_0} + mkdir ${workspace_dir} +fi + +if [ ! -d ${workspace_dir} ] +then + mkdir ${workspace_dir} +fi + +for (( i = $i_min; i < $i_max; ++i )); do + nCz=$(( 5*i )) + msh_file=${workspace_dir}/1_cube_${i}.msh + gmsh -3 ${geo_file} -setnumber nCx ${nCx} -setnumber nCy ${nCy} -setnumber nCz ${nCz} -o ${msh_file} -part ${n_MPI} -format msh22 + echo $i &> ${workspace_dir}/i.txt + echo $m_1 &> ${workspace_dir}/m.txt + mpirun -npersocket 1 python run.py -k ${OMP_NUM_THREADS} katoptron/thesis/test_4/1_cube.py + echo $m_2 &> ${workspace_dir}/m.txt + mpirun -npersocket 1 python run.py -k ${OMP_NUM_THREADS} katoptron/thesis/test_4/1_cube.py + echo $m_3 &> ${workspace_dir}/m.txt + mpirun -npersocket 1 python run.py -k ${OMP_NUM_THREADS} katoptron/thesis/test_4/1_cube.py +done diff --git a/katoptron/thesis/test_4/prec.xml b/katoptron/thesis/test_4/prec.xml new file mode 100644 index 0000000000000000000000000000000000000000..7fcef90cbfcbb994e980439167e31c4e5d441a8f --- /dev/null +++ b/katoptron/thesis/test_4/prec.xml @@ -0,0 +1,20 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + <Parameter name="max levels" type="int" value="5"/> + <Parameter name="smoother: type" type="string" value="RELAXATION"/> + <ParameterList name="smoother: params"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="5"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + <!-- <Parameter name="relaxation: backward mode" type="bool" value="true"/> --> + </ParameterList> + <Parameter name="coarse: type" type="string" value="Klu"/> + <Parameter name="verbosity" type="string" value="extreme"/> + <Parameter name="multigrid algorithm" type="string" value="unsmoothed"/> + <Parameter name="tentative: calculate qr" type="bool" value="false"/> + <Parameter name="number of equations" type="int" value="3"/> +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/thesis/test_4/prec_1.xml b/katoptron/thesis/test_4/prec_1.xml new file mode 100644 index 0000000000000000000000000000000000000000..b2bd91f1eda70e1a3617aa725ae9d1a75ff0720a --- /dev/null +++ b/katoptron/thesis/test_4/prec_1.xml @@ -0,0 +1,16 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="coarse: type" type="string" value="RELAXATION"/> + <ParameterList name="coarse: params"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="5"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + <Parameter name="verbosity" type="string" value="extreme"/> + <Parameter name="number of equations" type="int" value="3"/> +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/thesis/test_5/1_bar.py b/katoptron/thesis/test_5/1_bar.py new file mode 100644 index 0000000000000000000000000000000000000000..f33abe96dbbc51e12d9f611d1660f1f97fd816e8 --- /dev/null +++ b/katoptron/thesis/test_5/1_bar.py @@ -0,0 +1,220 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +from scipy.sparse.linalg import spsolve +from scipy.sparse.linalg import eigs +from scipy.linalg import eig +from scipy.sparse import spdiags +import numpy as np +import matplotlib.pyplot as plt +import katoptron.convergence as c + + +def build_K(n, L, E, A, sym=True): + h = (L / (n - 1)) + diag_data = A * E * ((1 / h**2)) * 2. * np.ones((n, )) + diag_data[0] = 1. + diag_data[-1] = A * E * ((1 / h**2)) * 1. + off_data_1 = A * E * ((1 / h**2)) * (-1) * np.ones((n, )) + if sym: + off_data_1[0:1] = 0. + off_data_2 = A * E * ((1 / h**2)) * (-1) * np.ones((n, )) + off_data_2[0:2] = 0. + + data = np.array([diag_data, off_data_1, off_data_2]) + diags = np.array([0, -1, 1]) + K = spdiags(data, diags, n, n).tocsr() + return K + + +def analytical_eigenfunctions(n, L, E, A, n_eigenfunctions=5): + if n < n_eigenfunctions + 1: + n_eigenfunctions = n - 1 + values = np.zeros((n, )) + vecs = np.zeros((n, n_eigenfunctions)) + + h = (L / (n - 1)) + x = np.linspace(0, L, n) + + c = np.arange(0, n_eigenfunctions, 1) + 0.5 + values = A * E * (c * 3.14 / L)**2 + + for i in range(0, n_eigenfunctions): + vecs[:, i] = np.sin((c[i] * np.pi * x / L)) + norm = np.linalg.norm(vecs[:, i]) + vecs[:, i] /= norm + return values, vecs + + +def numerical_eigenfunctions(n, L, E, A, n_eigenfunctions=5): + if n < n_eigenfunctions + 1: + n_eigenfunctions = n - 1 + K = build_K(n, L, E, A) + + vals, vecs = eig(K.toarray()) + return np.real(vals[0:n_eigenfunctions]), vecs[:, 0:n_eigenfunctions] + + +def omegas_lambdas_nf(n, L, nE, A, nf): + N = len(nE) + norm = 0. + for i in range(0, N): + norm += np.linalg.norm(nf[i])**2 + norm = np.sqrt(norm) + lambdas_all = np.array([]) + omegas_all = np.array([]) + for i in range(0, N): + nf_tmp = (nf[i] / norm) + lambdas, vecs = analytical_eigenfunctions(n, L, nE[i], A, n - 1) + print(vecs) + c = np.dot(vecs.T, nf_tmp) + + omegas = np.zeros((len(c), )) + for i in range(0, len(omegas)): + omegas[i] = np.linalg.norm(c[i])**2 + + lambdas_all = np.append(lambdas_all, lambdas) + omegas_all = np.append(omegas_all, omegas) + + indices = np.argsort(lambdas_all) + lambdas = lambdas_all[indices] + omegas = omegas_all[indices] + + return lambdas, omegas + + +def omegas_lambdas_f(n, L, E, A, f): + lambdas, vecs = analytical_eigenfunctions(n, L, E, A, n - 1) + norm = np.linalg.norm(f) + f_tmp = (f / norm) + c = np.dot(vecs.T, f_tmp) + + omegas = np.zeros((len(c), )) + for i in range(0, len(omegas)): + omegas[i] = np.linalg.norm(c[i])**2 + + return lambdas, omegas + + +def build_f(n, L, lF, F): + h = (L / (n - 1)) + iF = int(np.round((lF / h)) + 1) + f = np.zeros((n, )) + f[iF] = (F / h) + return f + + +def solve_Kf(n, L, lF, F, E, A): + sym = True + + K = build_K(n, L, E, A, sym) + f = build_f(n, L, lF, F) + + u = spsolve(K, f) + return u + + +def write_on_disk(name, res): + i_max = len(res) + for i in range(0, i_max): + if res[i] == 0.: + i_max = i + 1 + break + tmp = np.zeros((i_max, 2)) + tmp[:, 1] = res[0:i_max] + tmp[:, 0] = np.arange(0, i_max) + np.savetxt(name, tmp) + + +def main(): + n = 7 + L = 1. + E_1 = 1. + E_2 = 1.5 + A = 1. + F = 1. + + x = np.linspace(0, L, n) + + f_1 = build_f(n, L, 0.5, F) + f_2 = build_f(n, L, 0.8, F) + + print(f_1) + print(f_2) + + lambdas_11, omegas_11 = omegas_lambdas_f(n, L, E_1, A, f_1) + lambdas_12, omegas_12 = omegas_lambdas_f(n, L, E_1, A, f_2) + + lambdas_21, omegas_21 = omegas_lambdas_f(n, L, E_2, A, f_1) + lambdas_22, omegas_22 = omegas_lambdas_f(n, L, E_2, A, f_2) + + residual_11 = c.compute_convergence_serial_normal(20, n - 1, omegas_11, + lambdas_11) + residual_12 = c.compute_convergence_serial_normal(20, n - 1, omegas_12, + lambdas_12) + residual_21 = c.compute_convergence_serial_normal(20, n - 1, omegas_21, + lambdas_21) + residual_22 = c.compute_convergence_serial_normal(20, n - 1, omegas_22, + lambdas_22) + + lambdas_1, omegas_1 = omegas_lambdas_nf(n, L, [E_1, E_1], A, [f_1, f_2]) + lambdas_2, omegas_2 = omegas_lambdas_nf(n, L, [E_2, E_2], A, [f_1, f_2]) + lambdas_3, omegas_3 = omegas_lambdas_nf(n, L, [E_1, E_2], A, [f_1, f_1]) + lambdas_4, omegas_4 = omegas_lambdas_nf(n, L, [E_1, E_2], A, [f_2, f_2]) + lambdas_5, omegas_5 = omegas_lambdas_nf(n, L, [E_1, E_2], A, [f_1, f_2]) + + residual_1 = c.compute_convergence_serial_normal(20, 2 * (n - 1), omegas_1, + lambdas_1) + residual_2 = c.compute_convergence_serial_normal(20, 2 * (n - 1), omegas_2, + lambdas_2) + residual_3 = c.compute_convergence_serial_normal(20, 2 * (n - 1), omegas_3, + lambdas_3) + residual_4 = c.compute_convergence_serial_normal(20, 2 * (n - 1), omegas_4, + lambdas_4) + residual_5 = c.compute_convergence_serial_normal(20, 2 * (n - 1), omegas_5, + lambdas_5) + + write_on_disk('res_11.txt', residual_11) + write_on_disk('res_12.txt', residual_12) + write_on_disk('res_21.txt', residual_21) + write_on_disk('res_22.txt', residual_22) + write_on_disk('res_1.txt', residual_1) + write_on_disk('res_2.txt', residual_2) + write_on_disk('res_3.txt', residual_3) + write_on_disk('res_4.txt', residual_4) + write_on_disk('res_5.txt', residual_5) + + plt.figure() + plt.semilogy(residual_11) + plt.semilogy(residual_22) + plt.semilogy(residual_1) + ''' + plt.figure() + plt.subplot(221) + plt.plot(lambdas_11, '-*') + plt.subplot(222) + plt.plot(lambdas_12, '-*') + plt.subplot(223) + plt.plot(lambdas_21, '-*') + plt.subplot(224) + plt.plot(lambdas_22, '-*') + plt.figure() + plt.subplot(221) + plt.plot(omegas_11, '-*') + plt.subplot(222) + plt.plot(omegas_12, '-*') + plt.subplot(223) + plt.plot(omegas_21, '-*') + plt.subplot(224) + plt.plot(omegas_22, '-*') + + plt.figure() + plt.plot(lambdas_44, '-*') + plt.figure() + plt.plot(omegas_44, '-*') + ''' + plt.show() + + +if __name__ == "__main__": + main() diff --git a/katoptron/thesis/test_5/laplacian.py b/katoptron/thesis/test_5/laplacian.py new file mode 100644 index 0000000000000000000000000000000000000000..d64a9e21e63e10c13bedd6ee21b93f2d3c2040e0 --- /dev/null +++ b/katoptron/thesis/test_5/laplacian.py @@ -0,0 +1,164 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +from scipy.sparse.linalg import spsolve +from scipy.sparse.linalg import eigs +from scipy.linalg import eig +from scipy.sparse import spdiags +import numpy as np +import matplotlib.pyplot as plt +import katoptron.convergence as c + + +def analytical_eigenvectors(n, kappa): + values = np.zeros((n, )) + vecs = np.zeros((n, n)) + + h = 1. / (n + 1) + + k = np.arange(1, n + 1, 1) + values = 2 * kappa * (1 - np.cos(k * h * np.pi)) + + for i in range(0, n): + vecs[i, :] = np.sin((i + 1) * k * h * np.pi) + + for i in range(0, n): + norm = np.linalg.norm(vecs[:, i]) + vecs[:, i] /= norm + return values, vecs + + +def omegas_lambdas_nf(n, nkappa, nf): + N = len(nkappa) + norm = 0. + for i in range(0, N): + norm += np.linalg.norm(nf[i])**2 + norm = np.sqrt(norm) + lambdas_all = np.array([]) + omegas_all = np.array([]) + for i in range(0, N): + nf_tmp = (nf[i] / norm) + lambdas, vecs = analytical_eigenvectors(n, nkappa[i]) + c = np.dot(vecs.T, nf_tmp) + + omegas = np.zeros((len(c), )) + for i in range(0, len(omegas)): + omegas[i] = np.linalg.norm(c[i])**2 + + lambdas_all = np.append(lambdas_all, lambdas) + omegas_all = np.append(omegas_all, omegas) + + indices = np.argsort(lambdas_all) + lambdas = lambdas_all[indices] + omegas = omegas_all[indices] + + return lambdas, omegas + + +def omegas_lambdas_f(n, kappa, f): + lambdas, vecs = analytical_eigenvectors(n, kappa) + norm = np.linalg.norm(f) + f_tmp = (f / norm) + c = np.dot(vecs.T, f_tmp) + + omegas = np.zeros((len(c), )) + for i in range(0, len(omegas)): + omegas[i] = np.linalg.norm(c[i])**2 + + return lambdas, omegas + + +def write_on_disk(name, res): + i_max = len(res) + for i in range(0, i_max): + if res[i] == 0.: + i_max = i + 1 + break + tmp = np.zeros((i_max, 2)) + tmp[:, 1] = res[0:i_max] + tmp[:, 0] = np.arange(0, i_max) + np.savetxt(name, tmp) + + +def main(): + n = 6 + kappa_1 = 1. + kappa_2 = 1.5 + + f_1 = np.zeros((n, )) + f_2 = np.zeros((n, )) + + f_1[3] = 1. + f_2[-1] = 1. + + print(f_1) + print(f_2) + + lambdas_11, omegas_11 = omegas_lambdas_f(n, kappa_1, f_1) + lambdas_12, omegas_12 = omegas_lambdas_f(n, kappa_1, f_2) + + lambdas_21, omegas_21 = omegas_lambdas_f(n, kappa_2, f_1) + lambdas_22, omegas_22 = omegas_lambdas_f(n, kappa_2, f_2) + + print(np.round(lambdas_11, 3)) + print(np.round(omegas_11, 3)) + + print(np.round(lambdas_12, 3)) + print(np.round(omegas_12, 3)) + + print(np.round(lambdas_21, 3)) + print(np.round(omegas_21, 3)) + + print(np.round(lambdas_22, 3)) + print(np.round(omegas_22, 3)) + + residual_11 = c.compute_convergence_serial_normal(20, n, omegas_11, + lambdas_11) + residual_12 = c.compute_convergence_serial_normal(20, n, omegas_12, + lambdas_12) + residual_21 = c.compute_convergence_serial_normal(20, n, omegas_21, + lambdas_21) + residual_22 = c.compute_convergence_serial_normal(20, n, omegas_22, + lambdas_22) + + lambdas_1, omegas_1 = omegas_lambdas_nf(n, [kappa_1, kappa_1], [f_1, f_2]) + lambdas_2, omegas_2 = omegas_lambdas_nf(n, [kappa_2, kappa_2], [f_1, f_2]) + lambdas_3, omegas_3 = omegas_lambdas_nf(n, [kappa_1, kappa_2], [f_1, f_1]) + lambdas_4, omegas_4 = omegas_lambdas_nf(n, [kappa_1, kappa_2], [f_2, f_2]) + lambdas_5, omegas_5 = omegas_lambdas_nf(n, [kappa_1, kappa_2], [f_1, f_2]) + + residual_1 = c.compute_convergence_serial_normal(20, 2 * n, omegas_1, + lambdas_1) + residual_2 = c.compute_convergence_serial_normal(20, 2 * n, omegas_2, + lambdas_2) + residual_3 = c.compute_convergence_serial_normal(20, 2 * n, omegas_3, + lambdas_3) + residual_4 = c.compute_convergence_serial_normal(20, 2 * n, omegas_4, + lambdas_4) + residual_5 = c.compute_convergence_serial_normal(20, 2 * n, omegas_5, + lambdas_5) + + write_on_disk('res_11.txt', residual_11) + write_on_disk('res_12.txt', residual_12) + write_on_disk('res_21.txt', residual_21) + write_on_disk('res_22.txt', residual_22) + write_on_disk('res_1.txt', residual_1) + write_on_disk('res_2.txt', residual_2) + write_on_disk('res_3.txt', residual_3) + write_on_disk('res_4.txt', residual_4) + write_on_disk('res_5.txt', residual_5) + + print(np.round(lambdas_1, 3)) + print(np.round(omegas_1, 3)) + print(np.round(lambdas_2, 3)) + print(np.round(omegas_2, 3)) + print(np.round(lambdas_3, 3)) + print(np.round(omegas_3, 3)) + print(np.round(lambdas_4, 3)) + print(np.round(omegas_4, 3)) + print(np.round(lambdas_5, 3)) + print(np.round(omegas_5, 3)) + + +if __name__ == "__main__": + main() diff --git a/katoptron/thesis/test_6/1_cube.geo b/katoptron/thesis/test_6/1_cube.geo new file mode 100644 index 0000000000000000000000000000000000000000..f3bd653dc53caf13979ed4c07cc1a4d9847530d4 --- /dev/null +++ b/katoptron/thesis/test_6/1_cube.geo @@ -0,0 +1,42 @@ +// $Id$ +// fichier de donnees gmsh + +C1 = 10; +//nCx = 3; +//nCy = 4; +//nCz = 5; + +lc = 1; + +Point(1) = { 0, 0, 0, lc}; +Point(2) = { C1, 0, 0, lc}; +Point(3) = { C1, 0, C1, lc}; +Point(4) = { 0, 0, C1, lc}; + +Line(1) = {1, 2}; +Line(2) = {2, 3}; +Line(3) = {3, 4}; +Line(4) = {4, 1}; + +Transfinite Line {1,3} = nCx+1 Using Progression 1; +Transfinite Line {2,4} = nCz+1 Using Progression 1; + +Line Loop(11) = {1,2,3,4}; +Plane Surface(12) = {11}; +Transfinite Surface {12}; +Recombine Surface {12}; + +Extrude {0, C1, 0} +{ + Surface{12}; Layers{nCy}; Recombine; +} + +// physical entities + +Physical Volume("Body 1") = {1}; + +Physical Surface("Surf 1 1") = {-21}; +Physical Surface("Surf 1 2") = {-29}; + +Physical Point("Measure point 1") = {4}; +Physical Point("Measure point 2") = {1}; diff --git a/katoptron/thesis/test_6/1_cube.py b/katoptron/thesis/test_6/1_cube.py new file mode 100644 index 0000000000000000000000000000000000000000..32062406b3fafe7eb91589004a73af152201feb3 --- /dev/null +++ b/katoptron/thesis/test_6/1_cube.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import threading +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import katoptron.utilities as u +from PyTrilinos import Teuchos +import shlex +import subprocess +import os +import numpy as np +import tarfile +import glob +from fwk.wutils import parseargs + + +def model(msh, + E, + p, + ensemble_size, + case_name, + work_dir, + max_iter, + comm, + use_Prec=False): + rank = comm.rank + siz = comm.size + file_dir = os.path.dirname(__file__) + + pbl = m.Problem(msh, comm) + + nu = 0.2 * np.ones(ensemble_size) + k = 0.114 + d = 0. + + zero = np.zeros(ensemble_size) + m.Medium(pbl, "Body 1", "test", E, nu, k, d) + + m.Dirichlet(pbl, "Surf 1 1", "Clamped", 1, 0., 1, 0., 1, 0., 1, 0., + ensemble_size) + m.Neumann(pbl, "Surf 1 2", "heat fluxes", 0, zero, 0, zero, 1, p, 0, zero, + ensemble_size) + + solverList = Teuchos.ParameterList() + solverList['Ensemble Convergence Tolerance'] = 0. # 10**(-8) + solverList['Maximum Iterations'] = max_iter + solverList['Verbosity'] = 33 + solverList['Flexible Gmres'] = False + solverList['Output Style'] = 1 + solverList['Output Frequency'] = 1 + + solverList['Use preconditioner'] = use_Prec + + solverList['type'] = "BlockGmres" + solverList['Maximum active set iteration'] = 1 + + solverList['Print Teuchos timers'] = True + solverList['Write vtk files'] = False + + if use_Prec: + solverList['convert MueLu xml file'] = True + solverList["use xml file"] = True + solverList["MueLu xml file name"] = file_dir + '/prec.xml' + + slv = m.IterativeSolver(pbl, solverList, 3, ensemble_size) + + if not os.path.exists(case_name): + os.makedirs(case_name) + os.chdir(case_name) + + if rank == 0: + f = open('msh_size.txt', 'w') + print(len(msh.nodes), file=f) + f.closed + + np.savetxt('E.txt', E) + np.savetxt('p.txt', p) + + slv.start() + + if rank == 0: + f = open('timers.txt', 'w') + print(slv.getTimers(), file=f) + f.closed + + os.chdir(work_dir) + + +def one_model(test_id, ensemble_size, rank, work_dir, msh, E, p, k, max_iter, + comm): + directory_case_id = work_dir + '/test_' + str(test_id) + '_s_' + str( + ensemble_size) + '_rank_' + str(rank) + model(msh, + E, + p, + ensemble_size, + directory_case_id, + work_dir, + k, + max_iter, + comm, + use_Prec=True) + + +def main(): + comm, rank, size = m.utilities.import_MPI() + + group_size = 1 + color = int(np.floor((rank / group_size))) + key = rank + + newcomm = comm.Split(color, key) + + args = parseargs() + work_dir = os.getcwd() + + msh_name = '1_cube.msh' + + E_mean = 1. + p_mean = 0.1 + + ensemble_size = int(os.getenv('ensemble_size', 1)) + test_id = int(os.getenv('test_id', 1)) + max_iter = int(os.getenv('max_iter', 100)) + + msh = gmsh.MeshLoader(msh_name, work_dir).execute() + + E = E_mean * np.ones(ensemble_size) + p = p_mean * np.ones(ensemble_size) + + directory_case_id = 'test_' + str(test_id) + '_s_' + str( + ensemble_size) + '_rank_' + str(rank) + + nThreads = u.Initialize_Kokkos() + model(msh, + E, + p, + ensemble_size, + directory_case_id, + work_dir, + max_iter, + newcomm, + use_Prec=True) + + u.Finalize_Kokkos() + + +if __name__ == "__main__": + main() diff --git a/katoptron/thesis/test_6/blake.slurm.sh b/katoptron/thesis/test_6/blake.slurm.sh new file mode 100755 index 0000000000000000000000000000000000000000..803f3cf1a9564fcb38c93c7e91d17f9bb4db9c16 --- /dev/null +++ b/katoptron/thesis/test_6/blake.slurm.sh @@ -0,0 +1,59 @@ +#!/bin/bash +# Submission script for Blake +#SBATCH --job-name=test_6 +#SBATCH --time=41:00:00 # hh:mm:ss +# +#SBATCH -N 1 +#SBATCH -p blake +# +#SBATCH --comment=test +#SBATCH --output=workspace/test_6.%j.out + +. ~/.bash_profile $SLURM_SUBMIT_HOST + +export MKL_DYNAMIC=TRUE +export OMP_DYNAMIC=FALSE +export OMP_NUM_THREADS=24 +export KMP_HW_SUBSET=24c,1t +export KMP_AFFINITY=compact + +base_dir=$(pwd) +geo_file=${base_dir}/katoptron/thesis/test_6/1_cube.geo +msh_file=${base_dir}/workspace/katoptron_thesis_test_6_1_cube/1_cube.msh + +if [ ! -d ${base_dir}/workspace/katoptron_thesis_test_6_1_cube ] +then + mkdir ${base_dir}/workspace/katoptron_thesis_test_6_1_cube +fi + +workspace/thesis_tests_test_6_1_cube + +gmsh -3 -format msh2 -setnumber nCx 49 -setnumber nCy 49 -setnumber nCz 49 -o ${msh_file} ${geo_file} -format msh22 + +export max_iter=200 + +export test_id=1 +export ensemble_size=1 +export MKL_NUM_THREADS=1 +export OMP_NUM_THREADS=1 +python run.py -k 1 katoptron/thesis/test_6/1_cube.py + +export test_id=2 +export ensemble_size=1 +export MKL_NUM_THREADS=24 +export OMP_NUM_THREADS=24 +python run.py -k 24 katoptron/thesis/test_6/1_cube.py + +export test_id=3 +export ensemble_size=8 +export MKL_NUM_THREADS=24 +export OMP_NUM_THREADS=24 +python run.py -k 24 katoptron/thesis/test_6/1_cube.py + +export test_id=4 +export ensemble_size=1 +export MKL_NUM_THREADS=1 +export OMP_NUM_THREADS=1 +#mpirun -npersocket 1 python run.py -k 1 katoptron/thesis/test_6/1_cube.py +#mpirun --report-bindings --bind-to core --map-by ppr:24:socket:pe=1 python run.py -k 1 katoptron/thesis/test_6/1_cube.py &> log.txt +mpirun --bind-to core --map-by ppr:24:socket:pe=1 python run.py -k 1 katoptron/thesis/test_6/1_cube.py diff --git a/katoptron/thesis/test_6/prec.xml b/katoptron/thesis/test_6/prec.xml new file mode 100644 index 0000000000000000000000000000000000000000..7fcef90cbfcbb994e980439167e31c4e5d441a8f --- /dev/null +++ b/katoptron/thesis/test_6/prec.xml @@ -0,0 +1,20 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + <Parameter name="max levels" type="int" value="5"/> + <Parameter name="smoother: type" type="string" value="RELAXATION"/> + <ParameterList name="smoother: params"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="5"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + <!-- <Parameter name="relaxation: backward mode" type="bool" value="true"/> --> + </ParameterList> + <Parameter name="coarse: type" type="string" value="Klu"/> + <Parameter name="verbosity" type="string" value="extreme"/> + <Parameter name="multigrid algorithm" type="string" value="unsmoothed"/> + <Parameter name="tentative: calculate qr" type="bool" value="false"/> + <Parameter name="number of equations" type="int" value="3"/> +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/thesis/test_6/prec_1.xml b/katoptron/thesis/test_6/prec_1.xml new file mode 100644 index 0000000000000000000000000000000000000000..b2bd91f1eda70e1a3617aa725ae9d1a75ff0720a --- /dev/null +++ b/katoptron/thesis/test_6/prec_1.xml @@ -0,0 +1,16 @@ +<!-- Define MueLu preconditioner --> +<!-- Note: if you use Tpetra you may have to change it to MueLu-Tpetra --> +<!-- here and above where you set the preconditioner --> +<ParameterList name="MueLu"> + <Parameter name="max levels" type="int" value="1"/> + <Parameter name="coarse: type" type="string" value="RELAXATION"/> + <ParameterList name="coarse: params"> + <Parameter name="relaxation: type" type="string" value="MT Gauss-Seidel"/> + <Parameter name="relaxation: sweeps" type="int" value="5"/> + <Parameter name="relaxation: damping factor" type="double" value="0.9"/> + </ParameterList> + <Parameter name="verbosity" type="string" value="extreme"/> + <Parameter name="number of equations" type="int" value="3"/> +</ParameterList> +<!-- end "MueLu" --> + diff --git a/katoptron/thesis/test_6/speedup.py b/katoptron/thesis/test_6/speedup.py new file mode 100644 index 0000000000000000000000000000000000000000..6e1bbaf1ff4ffa81e5df75b750fd019095bacb9f --- /dev/null +++ b/katoptron/thesis/test_6/speedup.py @@ -0,0 +1,170 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + + + + +from katoptron.speedup import * +import matplotlib.pyplot as plt +import os + + +def read_timers_all(file_base_dir, querylines, use_waves_timers, + use_teuchos_timers): + + timers = np.zeros((len(querylines), )) + + for k in use_waves_timers: + timers[int(k)] = read_timers(file_base_dir + 'timers.txt', + [querylines[int(k)]])[0] + for k in use_teuchos_timers: + timers[int(k)] = read_teuchos_timers( + file_base_dir + 'teuchos_timers.txt', [querylines[int(k)]])[0] + + return timers + + +def CPU_time_per_one_case(base_dir, + quantiles, + querylines, + use_waves_timers, + use_teuchos_timers, + filename_CPU, + filename_speed_up, + total_id, + write_id, + block_id, + mult=1.): + + timers = read_timers_all(base_dir, querylines, use_waves_timers, + use_teuchos_timers) + + current_timer = timers*mult + + f = open(filename_CPU, 'w') + print(timers.shape, file=f) + + for i in range(0, len(timers)): + print(querylines[i], file=f) + string = '' + if i == total_id: + current_timer[i] -= timers[write_id] + current_timer[i] -= timers[block_id] + + string = string + str(round(current_timer[i], 3)) + ' & ' + print(string, file=f) + print(' ', file=f) + f.closed + + return current_timer + + +def analysis_one_case(directory, + base_dir, + quantiles, + querylines, + use_waves_timers, + use_teuchos_timers, + mult=1.): + if not os.path.exists(directory): + os.makedirs(directory) + os.chdir(directory) + + current_timer = CPU_time_per_one_case(base_dir, + quantiles, + querylines, + use_waves_timers, + use_teuchos_timers, + 'average_CPU.txt', + 'average_speed_up.txt', + 7, + 8, + 9, + mult=mult) + + os.chdir('..') + return current_timer + + +def main(): + import matplotlib.pyplot as plt + + file_dir = os.path.dirname(__file__) + + quantiles = [0, 0.33, 0.5, 0.66, 1.] + + querylines = [ + 'computeMatrices', + 'MueLu: Hierarchy: Setup (total)', + 'Belos: DGKS[2]: Orthogonalization', + 'Belos: Operation Op*x', + 'Belos: Operation Prec*x', + 'MueLu: Hierarchy: Solve : coarse (level=0)', + 'Belos: PseudoBlockGmresSolMgr total solve time', + 'total', + 'write results', + 'create the block matrix' + ] + use_waves_timers = np.array([0, 7, 8, 9], dtype=int) + use_teuchos_timers = np.array( + [1, 2, 3, 4, 5, 6], + dtype=int) + + base_dir = file_dir + \ + '/../../../workspace/katoptron_thesis_test_6_1_cube/test_1_s_1_rank_0/' + mult = 24 + + directory = 'option_1' + current_timer_1 = analysis_one_case(directory, base_dir, + quantiles, querylines, use_waves_timers, + use_teuchos_timers, mult=mult) + + base_dir = file_dir + \ + '/../../../workspace/katoptron_thesis_test_6_1_cube/test_2_s_1_rank_0/' + mult = 24 + + directory = 'option_2' + current_timer_2 = analysis_one_case(directory, base_dir, + quantiles, querylines, use_waves_timers, + use_teuchos_timers, mult=mult) + + base_dir = file_dir + \ + '/../../../workspace/katoptron_thesis_test_6_1_cube/test_4_s_1_rank_0/' + mult = 1 + + directory = 'option_3' + current_timer_3 = analysis_one_case(directory, base_dir, + quantiles, querylines, use_waves_timers, + use_teuchos_timers, mult=mult) + + base_dir = file_dir + \ + '/../../../workspace/katoptron_thesis_test_6_1_cube/test_3_s_8_rank_0/' + mult = 3 + + directory = 'option_4' + current_timer_4 = analysis_one_case(directory, base_dir, + quantiles, querylines, use_waves_timers, + use_teuchos_timers, mult=mult) + + tmp = np.zeros((len(current_timer_1), 4)) + tmp[:, 0] = current_timer_1 + tmp[:, 1] = current_timer_2 + tmp[:, 2] = current_timer_3 + tmp[:, 3] = current_timer_4 + + np.savetxt('all.txt', tmp, fmt='%1.3f') + + tmp_2 = np.copy(tmp) + + tmp_2[:, 0] /= tmp_2[:, 1] + tmp_2[:, 2] /= tmp_2[:, 1] + tmp_2[:, 3] /= tmp_2[:, 1] + tmp_2[:, 1] /= tmp_2[:, 1] + + speed_up = 1./tmp_2 + + np.savetxt('speed_up.txt', speed_up, fmt='%1.3f') + + +if __name__ == "__main__": + main() diff --git a/katoptron/utilities.py b/katoptron/utilities.py new file mode 100644 index 0000000000000000000000000000000000000000..fce0a04b0127805505586c7e1842f9db58550950 --- /dev/null +++ b/katoptron/utilities.py @@ -0,0 +1,786 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- + +import katoptron as m +import tbox +import tbox.gmsh as gmsh +import shlex +import subprocess +import os +import numpy as np +from katoptron.eigenvalues import * + + +def get_gmsh_version(): + tmp = subprocess.check_output(["gmsh", "--version"], + stderr=subprocess.STDOUT) + tmp2 = tmp.decode().split('.') + return int(tmp2[0]), int(tmp2[1]), int(tmp2[2]) + + +def import_MPI(): + try: + import mpi4py.MPI as mpi + comm = mpi.COMM_WORLD + rank = comm.rank + size = comm.size + name = mpi.Get_processor_name() + status = mpi.Status() + print('info: MPI found') + except: + comm = None + rank = 0 + size = 1 + name = "noname" + print('info: MPI not found => MPI disabled') + return comm, rank, size + + +def Initialize_Kokkos(): + from fwk.wutils import parseargs + args = parseargs() + + m.Kokkos_Initialize(args.k) + return args.k + + +def Finalize_Kokkos(): + m.Kokkos_Finalize() + + +def mkdir_MPI(directory, comm, rank, size): + # Create a new directory if rank == 0 + if rank == 0: + if not os.path.exists(directory): + os.makedirs(directory) + + comm.Barrier() + + +def read_mesh_MPI(geo_name, file_dir, work_dir, comm, rank, size, params=None): + base_name = geo_name.partition(".")[0] + geo_type = geo_name.partition(".")[2] + + mesh_name = base_name + '.msh' + partitioned_mesh_name = str(base_name + '_' + str(size) + '.msh') + + if geo_type == "geo" and rank == 0: + if params is not None: + gmsh.MeshLoader(geo_name, file_dir).execute(**params) + else: + gmsh.MeshLoader(geo_name, file_dir).execute() + + if size > 1: + comm.Barrier() + + msh_dir = work_dir + if geo_type == "msh": + msh_dir = file_dir + + if size == 1: + msh = gmsh.MeshLoader(mesh_name, msh_dir).execute() + else: + if rank == 0: + # Get gmsh version: + gmsh_major_version, gmsh_minor_version, gmsh_patch_version = get_gmsh_version() + + command_line = 'gmsh -3 ' + msh_dir + '/' + mesh_name + ' -o ' + \ + work_dir + '/' + partitioned_mesh_name + \ + ' -part ' + str(size) + ' -format msh22' + + # If gmsh is newer than gmsh 4, we have to specify that we want the ghost elements. + if gmsh_major_version >= 4: + command_line += ' -part_ghosts' + print(command_line) + tmp = shlex.split(command_line) + fileout = open('gmsh.log', 'w') + p = subprocess.Popen(tmp, + stdin=subprocess.PIPE, + stdout=fileout, + stderr=fileout, + env=os.environ, + shell=False, + close_fds=True) + retcode = p.wait() + + comm.Barrier() + + msh = gmsh.MeshLoader(partitioned_mesh_name, + work_dir).execute(myrank=rank) + + return msh, mesh_name, partitioned_mesh_name + + +def read_mesh_to_fuse(filename, + filename_output, + file_dir, + work_dir, + comm, + rank, + size, + index_nodes=0, + index_elements=0, + index_tags=0): + msh, mesh_name, partitioned_mesh_name = read_mesh_MPI( + filename, file_dir, work_dir, comm, rank, size) + + gmshWriter = tbox.GmshExport(msh) + n_nodes = index_nodes + len(msh.nodes) + if index_nodes != 0: + for n in msh.nodes: + n.no = n.no + index_nodes + n_elems = index_elements + len(msh.elems) + if index_elements != 0: + for e in msh.elems: + e.no = e.no + index_elements + n_ptags = index_tags + len(msh.ptags) + if index_tags != 0: + for p in msh.ptags: + if msh.ptags[p].no > 1: + msh.ptags[p].no = msh.ptags[p].no + index_tags + gmshWriter.save(filename_output) + + return n_nodes, n_elems, n_ptags + + +def fuse_meshes(filename1, filename12, filename2, filename22, filename_output, + file_dir, work_dir, comm, rank, size): + + if rank == 0: + n_nodes, n_elems, n_ptags = read_mesh_to_fuse(filename1, filename12, + file_dir, work_dir, None, + 0, 1) + n_nodes, n_elems, n_ptags = read_mesh_to_fuse(filename2, filename22, + file_dir, work_dir, None, + 0, 1, n_nodes, n_elems, + n_ptags) + + command_line = 'gmsh -3 ' + work_dir + '/' + filename12 + '.msh' + ' ' + work_dir + \ + '/' + filename22 + '.msh' + ' -o ' + work_dir + '/' + \ + filename_output + '.msh' + ' -format msh22' + tmp = shlex.split(command_line) + fileout = open('gmsh.log', 'w') + p = subprocess.Popen(tmp, + stdin=subprocess.PIPE, + stdout=fileout, + stderr=fileout, + env=os.environ, + shell=False, + close_fds=True) + retcode = p.wait() + + if size > 1: + partitioned_mesh_name = str(filename_output + '_' + str(size) + + '.msh') + if rank == 0: + command_line = 'gmsh -3 ' + work_dir + '/' + filename_output + '.msh' + ' -o ' + work_dir + '/' + \ + partitioned_mesh_name + ' -part ' + \ + str(size) + ' -format msh22' + tmp = shlex.split(command_line) + fileout = open('gmsh.log', 'w') + p = subprocess.Popen(tmp, + stdin=subprocess.PIPE, + stdout=fileout, + stderr=fileout, + env=os.environ, + shell=False, + close_fds=True) + retcode = p.wait() + comm.Barrier() + msh = gmsh.MeshLoader(partitioned_mesh_name, + work_dir).execute(myrank=rank) + else: + msh = gmsh.MeshLoader(filename_output + '.msh', work_dir).execute() + + return msh + + +def replace_strings(file_in, file_out, old_strings, new_strings): + with open(file_in, 'r') as file: + filedata = file.read() + + for i in range(0, len(old_strings)): + filedata = filedata.replace(old_strings[i], new_strings[i]) + + with open(file_out, 'w') as file: + file.write(filedata) + + +def print_nodes(msh, tag_names, rank): + + for tag_name in tag_names: + print('Rank ' + str(rank) + ' Name tag: ' + tag_name + ' Elements: ' + + str(len(msh.ntags[tag_name].elems))) + for el in msh.ntags[tag_name].elems: + print(el) + print('Nodes: ') + print('{0:2s} {1:3s}'.format('no', 'row')) + for el in msh.ntags[tag_name].elems: + for n1 in el.nodes: + print('{0:2d} {1:3d}'.format(n1.no, n1.row)) + + +def extract(msh, + tag_name, + DOFperNode, + which_pos, + which_dof, + ensemble_size, + name_sol="x_mm.txt", + lot_of_data=False): + import numpy as np + + nodeslist = [] + #tag_name = "Center of cross section" + for el in msh.ntags[tag_name].elems: + for n1 in el.nodes: + nodeslist.append(n1.no) + + nodes = list(set(nodeslist)) + + x = np.empty(np.shape(nodes)) + x_sorted = np.empty(np.shape(nodes)) + nodes_sorted = np.empty(np.shape(nodes), dtype=int) + sol = np.empty([len(nodes), ensemble_size]) + for i in range(0, len(x)): + pos = msh.nodes[int(nodes[i])-1].pos + x[i] = pos[which_pos] + + indices = np.argsort(x) + for i in range(0, len(x)): + x_sorted[i] = x[indices[i]] + nodes_sorted[i] = nodes[indices[i]] + + with open(name_sol) as fp: + for i, line in enumerate(fp): + if i == 1: + tmp = np.array(line.split()) + break + ndofs = tmp[0] + + x = x_sorted + nodes = nodes_sorted + + if which_dof == 3: + indices = nodes - 1 + elif DOFperNode == 4: + indices = (ndofs / 4) + 3 * (nodes - 1) + int(which_dof) + else: + indices = 3 * (nodes - 1) + int(which_dof) + + if lot_of_data: + sol_all = m.eigenvalues.read_mm(name_sol, is_sparse=False) + if ensemble_size == 1: + sol = sol_all[indices] + else: + sol = sol_all[indices, :] + + else: + with open(name_sol) as fp: + for i, line in enumerate(fp): + for j in range(0, len(indices)): + if i - 2 == indices[j]: + sol[j, :] = np.array(line.split()) + + return x, sol + + +def extract_2D(msh, tag_name, DOFperNode, which_dof, ensemble_size, name_sol): + # work only with triangel 2D now + comm, rank, size = import_MPI() + + from PyTrilinos import Teuchos + import numpy as np + + nodeslist = [] + #tag_name = "Center of cross section" + for el in msh.ntags[tag_name].elems: + for n1 in el.nodes: + nodeslist.append(n1.no - 1) + nodes = np.array(nodeslist) + nodes = np.sort(nodes) + + i = 1 + while i < len(nodes): + if nodes[i] == nodes[i - 1]: + nodes = np.delete(nodes, i) + else: + i = i + 1 + + nnodes = len(msh.nodes) + global_to_local = -1 * np.ones((nnodes, ), dtype='int32') + + for i in range(0, len(nodes)): + global_to_local[nodes[i]] = i + + ntri = len(msh.ntags[tag_name].elems) + tri = np.zeros((ntri, 3), dtype='uint32') + + for i in range(0, ntri): + tri[i, 0] = global_to_local[msh.ntags[tag_name].elems[i].nodes[0].no - + 1] + tri[i, 1] = global_to_local[msh.ntags[tag_name].elems[i].nodes[1].no - + 1] + tri[i, 2] = global_to_local[msh.ntags[tag_name].elems[i].nodes[2].no - + 1] + + x = np.empty(np.shape(nodes)) + y = np.empty(np.shape(nodes)) + z = np.empty(np.shape(nodes)) + + sol = np.empty(np.shape(nodes)) + + x_sorted = np.empty(np.shape(nodes)) + nodes_sorted = np.empty(np.shape(nodes)) + + #sol = np.empty([len(nodes), ensemble_size]) + + for i in range(0, len(x)): + pos = msh.nodes[nodes[i]].pos + x[i] = pos[0] + y[i] = pos[1] + z[i] = pos[2] + + from scipy import io + + #sol = x + if ensemble_size == 1: + sol_full = io.mmread(name_sol) + for j in range(0, len(x)): + sol[j] = sol_full[DOFperNode * (nodes[j]) + which_dof] + + return x, y, z, tri, sol + + +def extract_2D_all(msh, tag_name, DOFperNode, ensemble_size, name_sol): + # work only with triangel 2D now + comm, rank, size = import_MPI() + + from PyTrilinos import Teuchos + import numpy as np + + nodeslist = [] + for el in msh.ntags[tag_name].elems: + for n1 in el.nodes: + nodeslist.append(n1.no - 1) + nodes = np.array(nodeslist) + nodes = np.sort(nodes) + + ntri = len(msh.ntags[tag_name].elems) + tri = np.zeros((ntri, 3), dtype='uint32') + + for i in range(0, ntri): + tri[i, 0] = msh.ntags[tag_name].elems[i].nodes[0].no - 1 + tri[i, 1] = msh.ntags[tag_name].elems[i].nodes[1].no - 1 + tri[i, 2] = msh.ntags[tag_name].elems[i].nodes[2].no - 1 + + i = 0 + while i < len(nodes): + if nodes[i] == nodes[i - 1]: + nodes = np.delete(nodes, i) + else: + i = i + 1 + + x = np.empty(np.shape(nodes)) + y = np.empty(np.shape(nodes)) + z = np.empty(np.shape(nodes)) + + x_sorted = np.empty(np.shape(nodes)) + nodes_sorted = np.empty(np.shape(nodes)) + + sol = np.empty([len(nodes), DOFperNode]) + + for i in range(0, len(x)): + pos = msh.nodes[nodes[i]].pos + x[i] = pos[0] + y[i] = pos[1] + z[i] = pos[2] + + from scipy import io + + if ensemble_size == 1: + sol_full = io.mmread(name_sol) + for j in range(0, len(x)): + for k in range(0, DOFperNode): + sol[j, k] = sol_full[DOFperNode * (nodes[j]) + k] + + return x, y, z, tri, sol + + +def compute_cross_and_theta(vec1, vec2): + from numpy import linalg as LA + + norm1 = LA.norm(vec1) + norm2 = LA.norm(vec2) + cross = np.cross(vec1, vec2) + dot = np.dot(vec1, vec2) + theta = np.arccos((dot / (norm1 * norm2))) + + return cross, theta + + +def rotation_matrix(axis, theta): + """ + Return the rotation matrix associated with counterclockwise rotation about + the given axis by theta radians. + """ + axis = np.asarray(axis) + axis = (axis / np.sqrt(np.dot(axis, axis))) + a = np.cos((theta / 2.0)) + b, c, d = -axis * np.sin((theta / 2.0)) + aa, bb, cc, dd = a * a, b * b, c * c, d * d + bc, ad, ac, ab, bd, cd = b * c, a * d, a * c, a * b, b * d, c * d + return np.array([[aa + bb - cc - dd, 2 * (bc + ad), 2 * (bd - ac)], + [2 * (bc - ad), aa + cc - bb - dd, 2 * (cd + ab)], + [2 * (bd + ac), 2 * (cd - ab), aa + dd - bb - cc]]) + + +def extract_2D_all_rotated(msh, tag_name, DOFperNode, ensemble_size, name_sol, + axis_nodes_id): + + x, y, z, tri, sol = extract_2D_all(msh, tag_name, DOFperNode, + ensemble_size, name_sol) + + x_r = np.empty(np.shape(x)) + y_r = np.empty(np.shape(x)) + z_r = np.empty(np.shape(x)) + sol_r = np.empty(np.shape(sol)) + + pos_OX_1 = msh.nodes[axis_nodes_id[0]].pos + pos_OX_2 = msh.nodes[axis_nodes_id[1]].pos + + vec_OX = np.array([pos_OX_2[0]-pos_OX_1[0], pos_OX_2[1] - + pos_OX_1[1], pos_OX_2[2]-pos_OX_1[2]]) + + OX_ref = np.array([1, 0, 0]) + OY_ref = np.array([0, 1, 0]) + + cross_prod_OX, theta_X = compute_cross_and_theta(vec_OX, OX_ref) + rot_X = rotation_matrix(cross_prod_OX, theta_X) + + for i in range(0, len(x)): + tmp = np.dot(rot_X, [x[i], y[i], z[i]]) + x_r[i] = tmp[0] + y_r[i] = tmp[1] + z_r[i] = tmp[2] + + tmp = np.dot(rot_X, [sol[i, 0], sol[i, 1], sol[i, 2]]) + + sol_r[i, 0] = tmp[0] + sol_r[i, 1] = tmp[1] + sol_r[i, 2] = tmp[2] + + sol_r[:, 3] = sol[:, 3] + + if cross_prod_OX[1] != 0: + ''' + vec_OY = np.dot(rot_X, vec_OY) + print vec_OY + vec_OY[0] = 0 + print vec_OY + cross_prod_OY, theta_Y = compute_cross_and_theta(vec_OY, OY_ref) + ''' + cross_prod_OY = np.array([1, 0, 0]) + max_i_z = np.argmax(z_r) + min_i_z = np.argmin(z_r) + + dz = z_r[max_i_z] - z_r[min_i_z] + dy = y_r[max_i_z] - y_r[min_i_z] + + theta_Y = np.arctan((-dz / dy)) + + rot_Y = rotation_matrix(cross_prod_OY, theta_Y) + + for i in range(0, len(x)): + tmp = np.dot(rot_Y, [x_r[i], y_r[i], z_r[i]]) + x_r[i] = tmp[0] + y_r[i] = tmp[1] + z_r[i] = tmp[2] + + tmp = np.dot(rot_Y, [sol_r[i, 0], sol_r[i, 1], sol_r[i, 2]]) + + sol_r[i, 0] = tmp[0] + sol_r[i, 1] = tmp[1] + sol_r[i, 2] = tmp[2] + + return x_r, y_r, z_r, tri, sol_r + + +def compute_Zernike(x, y, z, tri, dz, n_Zernike, center_pos): + from numpy import linalg as LA + + n_nodes = len(x) + n_tri = np.size(tri, 0) + + Zernike_coeff = np.zeros((n_Zernike, )) + + Zernike_functions = np.zeros((n_nodes, n_Zernike)) + + rho = np.empty(np.shape(x)) + theta = np.empty(np.shape(x)) + + for i in range(0, len(x)): + rho[i] = LA.norm(np.array([x[i], y[i]]) - center_pos) + if x[i] >= center_pos[0] and y[i] >= center_pos[1]: + theta[i] = np.arctan( + ((y[i] - center_pos[1]) / (x[i] - center_pos[0]))) + elif y[i] >= center_pos[1] or x[i] < center_pos[0]: + theta[i] = np.arctan( + ((y[i] - center_pos[1]) / + (x[i] - center_pos[0]))) + np.pi + else: + theta[i] = np.arctan( + ((y[i] - center_pos[1]) / + (x[i] - center_pos[0]))) + 2 * np.pi + + max_rho = max(rho) + rho = (rho / max_rho) + + if n_Zernike >= 1: + Zernike_functions[:, 0] = 1. + if n_Zernike >= 2: + v_max = np.amax(2 * rho * np.cos(theta)) + Zernike_functions[:, 1] = 2 * rho * np.cos(theta) / v_max + if n_Zernike >= 3: + v_max = np.amax(2 * rho * np.sin(theta)) + Zernike_functions[:, 2] = 2 * rho * np.sin(theta) / v_max + if n_Zernike >= 4: + v_max = np.amax(np.sqrt(3) * (2 * np.power(rho, 2) - 1)) + Zernike_functions[:, 3] = np.sqrt(3) * (2 * np.power(rho, 2) - + 1) / v_max + if n_Zernike >= 5: + Zernike_functions[:, 4] = np.sqrt(6) * np.power(rho, 2) * np.sin( + 2 * theta) + if n_Zernike >= 6: + Zernike_functions[:, 5] = np.sqrt(6) * np.power(rho, 2) * np.cos( + 2 * theta) + if n_Zernike >= 7: + Zernike_functions[:, 6] = np.sqrt(8) * (3 * np.power(rho, 3) - + 2 * rho) * np.sin(theta) + if n_Zernike >= 8: + Zernike_functions[:, 7] = np.sqrt(8) * (3 * np.power(rho, 3) - + 2 * rho) * np.cos(theta) + if n_Zernike >= 9: + Zernike_functions[:, 8] = np.sqrt(8) * np.power(rho, 3) * np.sin( + 3 * theta) + if n_Zernike >= 10: + Zernike_functions[:, 9] = np.sqrt(8) * np.power(rho, 3) * np.cos( + 3 * theta) + + W = np.zeros((n_nodes, n_nodes)) + + for i in range(0, n_tri): + cross = np.cross( + np.array([ + x[tri[i, 1]] - x[tri[i, 0]], y[tri[i, 1]] - y[tri[i, 0]], + z[tri[i, 1]] - z[tri[i, 0]] + ]), + np.array([ + x[tri[i, 2]] - x[tri[i, 0]], y[tri[i, 2]] - y[tri[i, 0]], + z[tri[i, 2]] - z[tri[i, 0]] + ])) + area = (LA.norm(cross) / 6) # area per node of the triangle + + for j in range(0, 3): + W[tri[i, j], tri[i, j]] = W[tri[i, j], tri[i, j]] + area + + TMP_Z = np.dot(np.transpose(Zernike_functions), W) + rhs_Z = np.dot(TMP_Z, dz) + + A_Z = np.dot(TMP_Z, Zernike_functions) + + Zernike_coeff = np.linalg.solve(A_Z, rhs_Z) + + return Zernike_coeff, Zernike_functions, theta, rho + + +def compute_RBM_Curvature_Irreg(x, y, z, tri, dz, unit, center_pos): + from numpy import linalg as LA + + n_nodes = len(x) + n_tri = np.size(tri, 0) + + RBM_Curvature_Irreg_coeff = np.zeros((4, )) + + RBM_Curvature_Irreg_functions = np.zeros((n_nodes, 4)) + + if unit == "m": + x = x * 1000 + y = y * 1000 + z = z * 1000 + dz = dz * 1000 + center_pos = center_pos * 1000 + + Zernike_coeff, Zernike_functions, theta, rho = compute_Zernike( + x, y, z, tri, dz, 4, center_pos) + dz_residual = dz - Zernike_coeff[ + 0] * Zernike_functions[:, 0] - Zernike_coeff[ + 1] * Zernike_functions[:, 1] - Zernike_coeff[ + 2] * Zernike_functions[:, 2] - Zernike_coeff[ + 3] * Zernike_functions[:, 3] + + optical_coefficients = np.zeros((5, 1)).flatten() + # piston [mm] + optical_coefficients[0] = Zernike_coeff[0] + index = np.argmax(Zernike_functions[:, 1]) + optical_coefficients[1] = np.arctan( + -Zernike_coeff[1] * + ((Zernike_functions[index, 1] / + (x[index] - center_pos[0])))) # rot y [rad] + index = np.argmax(Zernike_functions[:, 2]) + optical_coefficients[2] = np.arctan( + -Zernike_coeff[2] * + ((Zernike_functions[index, 2] / + (y[index] - center_pos[1])))) # rot x [rad] + optical_coefficients[3] = Zernike_coeff[3] * \ + (np.amax(Zernike_functions[:, 3])-np.amin(Zernike_functions[:, 3])) + optical_coefficients[4] = np.amax(dz_residual) - np.amin(dz_residual) + + return optical_coefficients, dz_residual + + +def compute_RBM_Curvature_Irreg_Sequential(x, y, z, tri, dz, unit, center_pos): + from numpy import linalg as LA + + n_nodes = len(x) + n_tri = np.size(tri, 0) + + RBM_Curvature_Irreg_coeff = np.zeros((4, )) + + RBM_Curvature_Irreg_functions = np.zeros((n_nodes, 4)) + + if unit == "m": + x = x * 1000 + y = y * 1000 + z = z * 1000 + dz = dz * 1000 + center_pos = center_pos * 1000 + + rho = np.empty(np.shape(x)) + + for i in range(0, len(x)): + rho[i] = LA.norm(np.array([x[i], y[i]]) - center_pos) + + RBM_Curvature_Irreg_functions[:, 0] = 1. + RBM_Curvature_Irreg_functions[:, 1] = y - center_pos[1] + RBM_Curvature_Irreg_functions[:, 2] = x - center_pos[0] + RBM_Curvature_Irreg_functions[:, 3] = np.power(rho, 2) + + W = np.zeros((n_nodes, n_nodes)) + + print("mean dz") + print(np.mean(dz)) + + for i in range(0, n_tri): + cross = np.cross( + np.array([ + x[tri[i, 1]] - x[tri[i, 0]], y[tri[i, 1]] - y[tri[i, 0]], + z[tri[i, 1]] - z[tri[i, 0]] + ]), + np.array([ + x[tri[i, 2]] - x[tri[i, 0]], y[tri[i, 2]] - y[tri[i, 0]], + z[tri[i, 2]] - z[tri[i, 0]] + ])) + area = (LA.norm(cross) / 6) # area per node of the triangle + + for j in range(0, 3): + W[tri[i, j], tri[i, j]] = W[tri[i, j], tri[i, j]] + area + + for i in range(0, 4): + TMP_Z = np.dot(np.transpose(RBM_Curvature_Irreg_functions[:, i]), W) + rhs_Z = np.dot(TMP_Z, dz) + + A_Z = np.dot(TMP_Z, RBM_Curvature_Irreg_functions[:, i]) + + RBM_Curvature_Irreg_coeff[i] = (rhs_Z / A_Z) + dz = dz - RBM_Curvature_Irreg_coeff[i] * \ + RBM_Curvature_Irreg_functions[:, i] + + optical_coefficients = np.zeros((5, )) + optical_coefficients[0] = RBM_Curvature_Irreg_coeff[0] # piston + optical_coefficients[1] = np.arctan(RBM_Curvature_Irreg_coeff[1]) + optical_coefficients[2] = np.arctan(RBM_Curvature_Irreg_coeff[2]) + optical_coefficients[3] = RBM_Curvature_Irreg_coeff[3] * \ + np.amax(RBM_Curvature_Irreg_functions[:, 3]) + optical_coefficients[4] = np.amax(dz) - np.amin(dz) + + print("optical_coefficients") + print(optical_coefficients) + + return RBM_Curvature_Irreg_coeff, RBM_Curvature_Irreg_functions, dz + + +def check_optical_tolerance(optical_tolerance, unit): + passed = 1 + max_angle = 0.00175 + if unit == "mm": + max_fringe = 0.0316 + max_translation = 2 + elif unit == "m": + max_fringe = 0.0000316 + max_translation = 0.002 + + if np.absolute(optical_tolerance[0]) >= max_translation: + print("translation") + passed = 0 + + if np.absolute(optical_tolerance[1]) >= max_angle: + print("rotation x") + passed = 0 + + if np.absolute(optical_tolerance[2]) >= max_angle: + print("rotation y") + passed = 0 + + if optical_tolerance[3] >= max_fringe: + print("curvature") + passed = 0 + + if optical_tolerance[4] >= max_fringe: + print("irregularity") + passed = 0 + + return passed + + +def check_optical_tolerance_Zernike(Zernike_coeff, Zernike_functions, dz, + unit): + + passed = 1 + max_angle = 0.00175 + if unit == "mm": + max_fringe = 0.0316 + max_translation = 2 + elif unit == "m": + max_fringe = 0.0000316 + max_translation = 0.002 + + if np.absolute(Zernike_coeff[0]) >= max_translation: + print("translation") + passed = 0 + + if np.absolute(Zernike_coeff[1]) >= max_angle: + print("rotation x") + passed = 0 + + if np.absolute(Zernike_coeff[2]) >= max_angle: + print("rotation y") + passed = 0 + + tmp = np.dot(Zernike_coeff[3], Zernike_functions[:, 3]) + + if np.absolute(max(tmp) - min(tmp)) >= max_fringe: + print("curvature") + passed = 0 + + tmp = dz - np.dot(Zernike_coeff[0], Zernike_functions[:, 0]) - np.dot(Zernike_coeff[1], Zernike_functions[:, 1]) - \ + np.dot(Zernike_coeff[2], Zernike_functions[:, 2]) - \ + np.dot(Zernike_coeff[3], Zernike_functions[:, 3]) + + if np.absolute(max(tmp) - min(tmp)) >= max_fringe: + print(max(tmp)) + print(min(tmp)) + print("irregularity") + passed = 0 + + return passed diff --git a/katoptron/viewer.py b/katoptron/viewer.py new file mode 100644 index 0000000000000000000000000000000000000000..13211f6e8a99ffe0df592aa44375b07cb0eeb5c6 --- /dev/null +++ b/katoptron/viewer.py @@ -0,0 +1,689 @@ +# -*- coding: utf-8; -*- + +import sys +import katoptron as m +import tbox as tb +import vtk +from PyQt4 import QtCore, QtGui +from vtk.qt4.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor + + +class MeshViewer(QtGui.QWidget, m.DisplayHook): + + app = QtGui.QApplication(sys.argv) + + """ + Qt GUI for visu. the output + """ + + def __init__(self, pbl, slv, msh, elev=-90., azim=0.): + # super(MeshViewer, self).__init__() # a eclaircir... marche p� + m.DisplayHook.__init__(self) + QtGui.QWidget.__init__(self) + + slv.setGUI(self) + + self.ensemble_size = slv.minimum_ensemble_size + + self.msh = msh + self.solver = slv + + self.running = 'init' + self.vmin = 0.0 + self.vmax = 0.0 + + self.elev = elev + self.azim = azim + + print(" ") + print("starting MeshViewer init...") + + self.__setupGUI() + self.__setupVTK() + + self.app.connect(self.app, QtCore.SIGNAL( + "lastWindowClosed()"), self.app, QtCore.SLOT("quit()")) + self.show() + # [Linux] faire ca le plus tard possible (apres self.show!!) + self.vtkwidget.Initialize() + print("MeshViewer ready.") + + def closeEvent(self, event): + # self.scheme.stopit=True + self.running = 'running' # sort de "while self.running=='pause'" + print("GUI killed!") + QtGui.QWidget.closeEvent(self, event) + + def start(self): + self.app.exec_() + + def __setupGUI(self): + + self.setWindowTitle("MeshViewer") + self.resize(800, 600) + + # vtk window + + self.vtkwidget = QVTKRenderWindowInteractor( + self) # "self" sinon, rien ne s'affiche + + self.vtkwidget.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, + QtGui.QSizePolicy.Expanding)) + self.vtkwidget.setMinimumSize(QtCore.QSize(300, 300)) + self.vtkwidget.setSizePolicy( + QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) + + # self.vtkwidget.Initialize() # plante sous Linux!! + + self.renderer = vtk.vtkRenderer() + self.renderer.SetBackground(1.0, 1.0, 1.0) + self.vtkwidget.GetRenderWindow().AddRenderer(self.renderer) + + style = vtk.vtkInteractorStyleTrackballCamera() + self.vtkwidget.SetInteractorStyle(style) + + hbox = QtGui.QHBoxLayout() + self.setLayout(hbox) + hbox.addWidget(self.vtkwidget) + + pan = QtGui.QFrame() + pan.setMaximumSize(QtCore.QSize(200, 999999)) + hbox.addWidget(pan) + # hbox.setMargin(0) # sinon vtkwidget degouline en bas + # hbox.setSpacing(0) # sinon vtkwidget clignote sur le c�t� + + vbox = QtGui.QVBoxLayout() + pan.setLayout(vbox) + + self.startBut = QtGui.QPushButton(self.tr("Start")) + #self.connect(self.startBut, QtCore.SIGNAL("clicked()"), self.disableStart) + self.connect(self.startBut, QtCore.SIGNAL("clicked()"), self.startSlot) + vbox.addWidget(self.startBut) + + groupBox = QtGui.QGroupBox("Range") + gbox = QtGui.QGridLayout() + label = QtGui.QLabel("min") + gbox.addWidget(label, 0, 0) + self.vminlinedt = QtGui.QLineEdit('%f' % self.vmin) + self.connect(self.vminlinedt, QtCore.SIGNAL( + "editingFinished()"), self.updateTCoords) + + gbox.addWidget(self.vminlinedt, 0, 1) + label = QtGui.QLabel("max") + gbox.addWidget(label, 1, 0) + self.vmaxlinedt = QtGui.QLineEdit('%f' % self.vmax) + self.connect(self.vmaxlinedt, QtCore.SIGNAL( + "editingFinished()"), self.updateTCoords) + gbox.addWidget(self.vmaxlinedt, 1, 1) + groupBox.setLayout(gbox) + vbox.addWidget(groupBox) + + groupBox = QtGui.QGroupBox("Samples") + self.samplesList = QtGui.QListWidget() + for i in range(self.ensemble_size): + item = QtGui.QListWidgetItem("Sample %i" % i) + self.samplesList.addItem(item) + gbox = QtGui.QVBoxLayout() + groupBox.setLayout(gbox) + gbox.addWidget(self.samplesList) + self.samplesList.currentItemChanged.connect(self.on_item_changed) + self.samplesList.itemClicked.connect(self.Clicked) + vbox.addWidget(groupBox) + + groupBox = QtGui.QGroupBox("Infos") + self.steplabel = QtGui.QLabel("Active set iteration #") + #self.timelabel = QtGui.QLabel("Time step = 0") + gbox = QtGui.QVBoxLayout() + groupBox.setLayout(gbox) + gbox.addWidget(self.steplabel) + # gbox.addWidget(self.timelabel) + vbox.addWidget(groupBox) + + verbchk = QtGui.QCheckBox("verbose") + self.connect(verbchk, QtCore.SIGNAL( + "stateChanged(int)"), self.verboseSlot) + vbox.addWidget(verbchk) + + vbox.addStretch(1) + + def verboseSlot(self, state): + self.scheme.verbose = state + if not state: + print("<verbose=OFF>") + + def startSlot(self): + if self.running == 'init': + self.startBut.setText("Pause") # on demarre et on affiche "pause" + self.running = 'running' + self.solver.start() + # for j in range(0,101): + # self.updatePos2(j) + self.startBut.setText("Quit") + self.running = 'quit' + elif self.running == 'running': # on stoppe et on affiche 'continue" + self.running = 'pause' + self.startBut.setText("Continue") + while self.running == 'pause': + self.app.processEvents(QtCore.QEventLoop.WaitForMoreEvents) + elif self.running == 'pause': + self.running = 'running' + self.startBut.setText("Pause") + elif self.running == 'quit': + self.app.quit() + """ + def disableStart(self): + self.startBut.setDisabled(True) + """ + + def __setupVTK(self): + + self.__createUgrid() + + # mesh + self.mesh = Mesh(self.ugrid) + self.renderer.AddActor(self.mesh.actor) + + # grid + self.grid = Grid(self.ugrid) + self.renderer.AddViewProp(self.grid.actor) + + # scalarbar + self.scalarbar = ScalarBar(self.mesh.lut) + self.renderer.AddViewProp(self.scalarbar.actor) + + self.resetCamera() + + def resetCamera(self): + self.renderer.ResetCamera() + cam1 = self.renderer.GetActiveCamera() + # 3D + if 1: + elev = self.elev + cam1.Elevation(elev) + if elev > 90: + cam1.SetViewUp(0, -1, 0) + else: + cam1.SetViewUp(0, 1, 0) + cam1.Azimuth(self.azim) + # 2D + else: + cam1.Elevation(0) + cam1.SetViewUp(0, 1, 0) + cam1.Azimuth(0) + self.renderer.ResetCameraClippingRange() + + def display(self, nt, t, u): + """ C++ => python callback + """ + print("[GUI] nt=", nt, "t=", t) + + # update data at points + for i in range(self.msh.nodes.size()): + self.scalars.SetValue(i, u[i]) + self.scalars.Modified() + + # update texture coords + #vmin, vmax = self.scalars.GetValueRange() + # vmin=-0.01 + # vmax=0.01 + + self.updateTCoords() + + def on_item_changed(self, curr, prev): + str_list = str(curr.text()) + for s in str_list.split(): + if s.isdigit(): + nt = int(s) + self.display_sample(nt, 0) + + def Clicked(self, item): + str_list = str(item.text()) + for s in str_list.split(): + if s.isdigit(): + nt = int(s) + self.display_sample(nt, 0) + + def display_sample(self, nt, t): + if None == self.polydata.GetPointData().GetArray("Values "+str(nt)): + print("Please, before selecting solution to display, run the simulation.") + else: + pos_x = self.polydata.GetPointData().GetArray("Positions x "+str(nt)) + pos_y = self.polydata.GetPointData().GetArray("Positions y "+str(nt)) + pos_z = self.polydata.GetPointData().GetArray("Positions z "+str(nt)) + + values = self.polydata.GetPointData().GetArray("Values "+str(nt)) + + current_min = self.vmin + current_max = self.vmax + for i in range(self.msh.nodes.size()): + self.points.SetPoint(i, pos_x.GetValue( + i), pos_y.GetValue(i), pos_z.GetValue(i)) + value = values.GetValue(i) + self.scalars.SetValue(i, value) + if value < current_min: + current_min = value + elif value > current_max: + current_max = value + + # mesh + self.renderer.RemoveViewProp(self.mesh.actor) + self.mesh = Mesh(self.ugrid) + self.renderer.AddActor(self.mesh.actor) + + # grid + self.renderer.RemoveViewProp(self.grid.actor) + self.grid = Grid(self.ugrid) + self.renderer.AddViewProp(self.grid.actor) + + self.vmin = current_min + self.vmax = current_max + current_max = self.scalars.GetRange() + + self.mesh.updateTcoords(self.vmin, self.vmax) + + # scalarbar + self.renderer.RemoveViewProp(self.scalarbar.actor) + self.scalarbar = ScalarBar(self.mesh.lut) + self.renderer.AddViewProp(self.scalarbar.actor) + + self.render() + + def display(self, nt, ast, u_x, u_y, u_z, u_norm): + """ C++ => python callback + """ + self.steplabel.setText("Active set iteration # "+str(int(ast))) + + if True: # None == self.polydata.GetPointData().GetArray("Values "+str(nt)): + + pos_x = vtk.vtkDoubleArray() + pos_y = vtk.vtkDoubleArray() + pos_z = vtk.vtkDoubleArray() + + values = vtk.vtkDoubleArray() + + pos_x.SetName("Positions x "+str(nt)) + pos_y.SetName("Positions y "+str(nt)) + pos_z.SetName("Positions z "+str(nt)) + + values.SetName("Values "+str(nt)) + + current_min = self.vmin + current_max = self.vmax + for i in range(self.msh.nodes.size()): + p = self.msh.nodes[i].pos + self.points.SetPoint( + i, p[0]+u_x[i], p[1]+u_y[i], p[2]+u_z[i]) + + pos_x.InsertNextValue(p[0]+u_x[i]) + pos_y.InsertNextValue(p[1]+u_y[i]) + pos_z.InsertNextValue(p[2]+u_z[i]) + values.InsertNextValue(u_norm[i]) + + self.polydata.GetPointData().AddArray(pos_x) + self.polydata.GetPointData().AddArray(pos_y) + self.polydata.GetPointData().AddArray(pos_z) + + self.polydata.GetPointData().AddArray(values) + + value = u_norm[i] + self.scalars.SetValue(i, value) + if value < current_min: + current_min = value + elif value > current_max: + current_max = value + + else: + pos_x = self.polydata.GetPointData().GetArray("Positions x "+str(nt)) + pos_y = self.polydata.GetPointData().GetArray("Positions y "+str(nt)) + pos_z = self.polydata.GetPointData().GetArray("Positions z "+str(nt)) + + values = self.polydata.GetPointData().GetArray("Values "+str(nt)) + + current_min = self.vmin + current_max = self.vmax + for i in range(self.msh.nodes.size()): + self.points.SetPoint(i, pos_x.GetValue( + i), pos_y.GetValue(i), pos_z.GetValue(i)) + value = values.GetValue(i) + self.scalars.SetValue(i, value) + if value < current_min: + current_min = value + elif value > current_max: + current_max = value + + # mesh + self.renderer.RemoveViewProp(self.mesh.actor) + self.mesh = Mesh(self.ugrid) + self.renderer.AddActor(self.mesh.actor) + + # grid + self.renderer.RemoveViewProp(self.grid.actor) + self.grid = Grid(self.ugrid) + self.renderer.AddViewProp(self.grid.actor) + + self.vmin = current_min + self.vmax = current_max + current_max = self.scalars.GetRange() + + self.mesh.updateTcoords(self.vmin, self.vmax) + + # scalarbar + self.renderer.RemoveViewProp(self.scalarbar.actor) + self.scalarbar = ScalarBar(self.mesh.lut) + self.renderer.AddViewProp(self.scalarbar.actor) + + self.render() + + def updateTCoords(self): + try: + self.vmin = float(self.vminlinedt.text()) + self.vmax = float(self.vmaxlinedt.text()) + except: + pass + + self.mesh.updateTcoords(self.vmin, self.vmax) + self.render() + + def ragequit(self): + print("rage quit!") + self.scheme.stopit = True + self.app.quit() + + #raise Exception('GUI killed!') + + def render(self): + # draw the scene + self.vtkwidget.Render() + self.app.processEvents() + + def refresh(self): + #print "[GUI] refresh" + self.app.processEvents() + + def __createUgrid(self): + print('creating vtkUnstructuredGrid...') + self.ugrid = vtk.vtkUnstructuredGrid() + self.points = vtk.vtkPoints() + self.ugrid.SetPoints(self.points) + + self.polydata = vtk.vtkPolyData() + + self.scalars = vtk.vtkFloatArray() + self.scalars.SetNumberOfComponents(1) + self.ugrid.GetPointData().SetScalars(self.scalars) + + # points / data + for i in range(self.msh.nodes.size()): + p = self.msh.nodes[i].pos + self.points.InsertPoint(i, p[0], p[1], p[2]) + #val = p.x()*p.x()+p.y()*p.y()+p.z()*p.z() + val = 0.0 + self.scalars.InsertNextValue(val) + + for i in range(self.msh.elems.size()): + e = self.msh.elems[i] + n = e.nodes + # hexa + if e.type() == tb.EL_HEX8: + hexa = vtk.vtkHexahedron() + ids = hexa.GetPointIds() + for j in range(8): + ids.SetId(j, n[j].no-1) + self.ugrid.InsertNextCell(hexa.GetCellType(), ids) + # tetra + elif e.type() == tb.EL_TETRA4: + tetra = vtk.vtkTetra() + ids = tetra.GetPointIds() + for j in range(4): + ids.SetId(j, n[j].no-1) + self.ugrid.InsertNextCell(tetra.GetCellType(), ids) + print(self.ugrid.GetNumberOfPoints(), 'points and', + self.ugrid.GetNumberOfCells(), 'cells converted') + + def writeXML(self, name='mesh.vtu'): + writer = vtk.vtkXMLUnstructuredGridWriter() + compressor = vtk.vtkZLibDataCompressor() + writer.SetCompressor(compressor) + writer.SetDataModeToAscii() + # writer.SetInputConnection(self.producer.GetOutputPort()) + # if vtk.VTK_MAJOR_VERSION <= 5: + # writer.SetInput(self.ugrid) + # else: + writer.SetInputData(self.ugrid) + writer.SetFileName(name) + writer.Write() + + def write(self, name='mesh.vtk'): + writer = vtk.vtkUnstructuredGridWriter() + writer.SetFileName(name) + writer.SetFileTypeToASCII() + if vtk.VTK_MAJOR_VERSION <= 5: + writer.SetInput(self.ugrid) + else: + writer.SetInputData(self.ugrid) + writer.Write() + + def updatePos(self): + #print self.points.GetPoint(1) + #print self.scalars.GetValue(1) + + current_min = 1000 + current_max = -1000 + for i in range(self.msh.nodes.size()): + p = self.msh.nodes[i].pos + self.points.SetPoint(i, p[0]+p[2], p[1], p[2]) + value = p[0] + self.scalars.SetValue(i, value) + if value < current_min: + current_min = value + elif value > current_max: + current_max = value + #print self.points.GetPoint(1) + #print self.scalars.GetValue(1) + #print self.ugrid.GetPoint(1) + + # mesh + self.mesh = Mesh(self.ugrid) + self.renderer.AddActor(self.mesh.actor) + + # grid + self.grid = Grid(self.ugrid) + self.renderer.AddViewProp(self.grid.actor) + + self.vmin = current_min + self.vmax = current_max + current_max = self.scalars.GetRange() + + print(self.vmin) + print(self.vmax) + + self.mesh.updateTcoords(self.vmin, self.vmax) + + # scalarbar + self.renderer.RemoveViewProp(self.scalarbar.actor) + self.scalarbar = ScalarBar(self.mesh.lut) + self.renderer.AddViewProp(self.scalarbar.actor) + + self.render() + + def updatePos2(self, j): + import numpy as np + + current_min = self.vmin + current_max = self.vmax + for i in range(self.msh.nodes.size()): + p = self.msh.nodes[i].pos + value = 100*np.sin(2*np.pi*j/25)*np.sin(0.5*np.pi*p[0]/500) + self.points.SetPoint(i, p[0], p[1], p[2]+value) + self.scalars.SetValue(i, value) + if value < current_min: + current_min = value + elif value > current_max: + current_max = value + + # mesh + self.renderer.RemoveViewProp(self.mesh.actor) + self.mesh = Mesh(self.ugrid) + self.renderer.AddActor(self.mesh.actor) + + # grid + self.renderer.RemoveViewProp(self.grid.actor) + self.grid = Grid(self.ugrid) + self.renderer.AddViewProp(self.grid.actor) + + self.vmin = current_min + self.vmax = current_max + current_max = self.scalars.GetRange() + + self.mesh.updateTcoords(self.vmin, self.vmax) + + # scalarbar + self.renderer.RemoveViewProp(self.scalarbar.actor) + self.scalarbar = ScalarBar(self.mesh.lut) + self.renderer.AddViewProp(self.scalarbar.actor) + + self.render() + + +class Mesh: + def __init__(self, ugrid): + + self.ugrid = ugrid + + # compatibility vtk 5/6 => use a trivial producer + #self.producer = vtk.vtkTrivialProducer() + # self.producer.SetOutput(self.ugrid) # le double producer (dans Mesh/Grid) ne marche pas sous Qt 4 => faire un objet dataset + + self.__createTexture() + self.__createTcoords() + vmin, vmax = self.ugrid.GetPointData().GetScalars().GetValueRange() + self.updateTcoords(vmin, vmax) + + self.mapper = vtk.vtkDataSetMapper() + # self.mapper.SetInputConnection(self.producer.GetOutputPort()) + if vtk.VTK_MAJOR_VERSION <= 5: + self.mapper.SetInput(ugrid) + else: + self.mapper.SetInputData(ugrid) + if vtk.VTK_MAJOR_VERSION <= 7: + self.mapper.ImmediateModeRenderingOff() + self.mapper.SetResolveCoincidentTopologyToPolygonOffset() + self.mapper.ScalarVisibilityOff() + + self.actor = vtk.vtkActor() + self.actor.SetMapper(self.mapper) + self.actor.SetTexture(self.texture) + + def __createTcoords(self): + self.tcoords = vtk.vtkFloatArray() + self.tcoords.SetNumberOfComponents(2) + self.tcoords.Resize( + self.ugrid.GetPointData().GetScalars().GetNumberOfTuples()) + self.ugrid.GetPointData().SetTCoords(self.tcoords) + + def updateTcoords(self, vmin, vmax): + #print 'vmin=',vmin,' vmax=',vmax + if vmin == vmax: + dist = 1.0 + else: + dist = vmax-vmin + thr = 1. / 256. + scalars = self.ugrid.GetPointData().GetScalars() + for i in range(scalars.GetNumberOfTuples()): + val = scalars.GetTuple1(i) + tc = (val-vmin) / dist + if(tc < thr): + tc = thr + if(tc > 1.0-thr): + tc = 1.0-thr + self.tcoords.InsertTuple2(i, tc, tc) + + self.lut.SetTableRange(vmin, vmax) # utile pour la scalarbar seulement + self.lut.Build() + + def __createTexture(self): + # lookup table + # (utilisée 1x au demarrage pour la texture) + # (puis pour la scalarbar) + self.lut = vtk.vtkLookupTable() + self.lut.SetNumberOfColors(16) + self.lut.SetHueRange(0.667, 0.) + # valeurs bidons -> pas d'infl sur la texture + self.lut.SetTableRange(0.0, 1.0) + self.lut.Build() + + self.texture = vtk.vtkTexture() + dim = self.lut.GetNumberOfTableValues() + img = vtk.vtkImageData() + img.SetDimensions(dim, dim, 1) + + if vtk.VTK_MAJOR_VERSION <= 5: + img.SetScalarTypeToUnsignedChar() + img.SetNumberOfScalarComponents(3) + img.AllocateScalars() + else: + img.AllocateScalars(vtk.VTK_UNSIGNED_CHAR, 3) + + for i in range(dim): + ci = self.lut.GetTableValue(i) + for k in range(3): + img.SetScalarComponentFromDouble(i, i, 0, k, ci[k]*255) + if vtk.VTK_MAJOR_VERSION <= 5: + self.texture.SetInput(img) + else: + self.texture.SetInputData(img) + + if 0: # --display texture using vtkImageViewer2 (DEBUG) + imageViewer = vtk.vtkImageViewer2() + if vtk.VTK_MAJOR_VERSION <= 5: + imageViewer.SetInput(img) + else: + imageViewer.SetInputData(img) + renderWindowInteractor = vtk.vtkRenderWindowInteractor() + imageViewer.SetupInteractor(renderWindowInteractor) + imageViewer.Render() + imageViewer.GetRenderer().ResetCamera() + imageViewer.Render() + renderWindowInteractor.Start() + + +class ScalarBar: + def __init__(self, lut): + tprop = vtk.vtkTextProperty() + tprop.SetColor(0, 0, 0) + tprop.SetFontFamilyToTimes() + + self.actor = vtk.vtkScalarBarActor() + self.actor.SetLookupTable(lut) + self.actor.GetPositionCoordinate().SetCoordinateSystemToNormalizedViewport() + self.actor.GetPositionCoordinate().SetValue(0.1, 0.05) + self.actor.SetOrientationToHorizontal() + self.actor.SetWidth(0.8) + self.actor.SetHeight(0.1) + self.actor.SetLabelTextProperty(tprop) + + +class Grid: + def __init__(self, ugrid): + # compatibility vtk 5/6 => use a trivial producer + #self.producer = vtk.vtkTrivialProducer() + # self.producer.SetOutput(ugrid) # le double producer (dans Mesh/Grid) ne marche pas sous Qt 4 => faire un objet dataset + + self.mapper = vtk.vtkDataSetMapper() + if vtk.VTK_MAJOR_VERSION <= 7: + self.mapper.ImmediateModeRenderingOff() + self.mapper.SetResolveCoincidentTopologyToPolygonOffset() + self.mapper.ScalarVisibilityOff() + # self.mapper.SetInputConnection(self.producer.GetOutputPort()) + if vtk.VTK_MAJOR_VERSION <= 5: + self.mapper.SetInput(ugrid) + else: + self.mapper.SetInputData(ugrid) + self.actor = vtk.vtkActor() + + self.actor.GetProperty().SetRepresentationToWireframe() + self.actor.GetProperty().SetColor(0., 0., 0.) + self.actor.GetProperty().SetAmbient(1.0) + self.actor.GetProperty().SetDiffuse(0.0) + self.actor.GetProperty().SetSpecular(0.0) + self.actor.SetMapper(self.mapper) diff --git a/run.py b/run.py new file mode 100644 index 0000000000000000000000000000000000000000..e2ca260b01b589c1efcd3c7b7b233f166cae5f6e --- /dev/null +++ b/run.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +# -*- coding: utf8 -*- +# test encoding: à -é-è-ô-ï-€ + +# Copyright 2022 University of Liège +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Calls fwk.wutils.run to execute a script as if waves was installed + +def main(): + import os.path, sys + # adds fwk/tbox to the python path + thisdir = os.path.split(os.path.abspath(__file__))[0] + fwkdir = os.path.abspath(os.path.join(thisdir, 'ext', 'amfe')) + if not os.path.isdir(fwkdir): + raise Exception('waves/ext/amfe not found!\n') + sys.path.append(fwkdir) + # adds "." to the pythonpath + sys.path.append(thisdir) + + import fwk.wutils as wu + wu.run() + +if __name__ == "__main__": + main() diff --git a/tlnos/CMakeLists.txt b/tlnos/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..0ba56acac439366df5a09cf198dab7af3e6b3038 --- /dev/null +++ b/tlnos/CMakeLists.txt @@ -0,0 +1,8 @@ + + +ADD_SUBDIRECTORY( src ) +ADD_SUBDIRECTORY( _src ) + +MACRO_AddTest(${CMAKE_CURRENT_SOURCE_DIR}/tests) + + diff --git a/tlnos/__init__.py b/tlnos/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..099551fb8a96edb8b6ff9e11fc6ed0e597731600 --- /dev/null +++ b/tlnos/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# tlnos MODULE initialization file + +import fwk +import tbox +from tlnosw import * diff --git a/tlnos/_src/CMakeLists.txt b/tlnos/_src/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..32cc07907a3c58c362d3fd32967ebbcbc793b670 --- /dev/null +++ b/tlnos/_src/CMakeLists.txt @@ -0,0 +1,46 @@ +# CMake input file of the SWIG wrapper around "tlnosw.so" + +INCLUDE(${SWIG_USE_FILE}) + +INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH}) + +FILE(GLOB SRCS *.h *.cpp *.inl *.swg) +FILE(GLOB ISRCS *.i) + +SET(CMAKE_SWIG_FLAGS "") +SET_SOURCE_FILES_PROPERTIES(${ISRCS} PROPERTIES CPLUSPLUS ON) + +SET(SWINCFLAGS +-I${PROJECT_SOURCE_DIR}/tlnos/src +-I${PROJECT_SOURCE_DIR}/ext/amfe/tbox/src +-I${PROJECT_SOURCE_DIR}/ext/amfe/tbox/_src +-I${PROJECT_SOURCE_DIR}/ext/amfe/fwk/src +-I${PROJECT_SOURCE_DIR}/ext/amfe/fwk/_src +) +SET_SOURCE_FILES_PROPERTIES(${ISRCS} PROPERTIES SWIG_FLAGS "${SWINCFLAGS}") + +if (${CMAKE_VERSION} VERSION_LESS "3.8.0") + SWIG_ADD_MODULE(tlnosw python ${ISRCS} ${SRCS}) +else() + SWIG_ADD_LIBRARY(tlnosw LANGUAGE python SOURCES ${ISRCS} ${SRCS}) +endif() +MACRO_DebugPostfix(_tlnosw) + +# -- Search for Trilinos +FIND_PACKAGE(Trilinos REQUIRED) + +INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/tlnos/src + ${PROJECT_SOURCE_DIR}/ext/amfe/tbox/src + ${PROJECT_SOURCE_DIR}/ext/amfe/fwk/src + ${PROJECT_SOURCE_DIR}/ext/amfe/fwk/_src + ${PROJECT_SOURCE_DIR}/ext/amfe/tbox/_src + ${Trilinos_INCLUDE_DIRS} + ${Trilinos_TPL_INCLUDE_DIRS} + ${MPI_INCLUDE_PATH}) + +SWIG_LINK_LIBRARIES(tlnosw + tlnos tbox fwk ${Trilinos_LIBRARIES} ${Trilinos_TPL_LIBRARIES} ${PYTHON_LIBRARIES} +) + +INSTALL(FILES ${CMAKE_SWIG_OUTDIR}/tlnosw.py DESTINATION ${CMAKE_INSTALL_PREFIX}) +INSTALL(TARGETS _tlnosw DESTINATION ${CMAKE_INSTALL_PREFIX}) diff --git a/tlnos/_src/tlnosw.i b/tlnos/_src/tlnosw.i new file mode 100644 index 0000000000000000000000000000000000000000..abba5b89965d6a58bbdc1290753db307c8c5b853 --- /dev/null +++ b/tlnos/_src/tlnosw.i @@ -0,0 +1,53 @@ +// SWIG input file of the 'tlnos' module + +%feature("autodoc","1"); + +%module(docstring= +"'tlnosw' module: tests of Trilinos library +(c) ULg - A&M", +directors="1", +threads="1" +) tlnosw +%{ + +#include <string> +#include <sstream> +#include <typeinfo> +#include "tlnos.h" + +#include "wExample1.h" +#include "wExample2.h" +//#include "wExample3.h" +#include "wExample4.h" +#include "wExample5.h" +#include "wExample6.h" +//#include "wExample7.h" +#include "wExample8.h" +#include "wExample9.h" +#include "wExample10.h" + +#include "fwkw.h" +#include "tboxw.h" + +%} + +%include "fwkw.swg" + +// ----------- MODULES UTILISES ------------ +%import "fwkw.i" +%import "tboxw.i" + +// ----------- TLNOS CLASSES ---------------- +%include "tlnos.h" + + +%include "wExample1.h" +%include "wExample2.h" +//%include "wExample3.h" +%include "wExample4.h" +%include "wExample5.h" +%include "wExample6.h" +//%include "wExample7.h" +%include "wExample8.h" +%include "wExample9.h" +%include "wExample10.h" diff --git a/tlnos/broken/example3.py b/tlnos/broken/example3.py new file mode 100644 index 0000000000000000000000000000000000000000..d887609b8980b9d9350aa3cf604b45c8e0b1f1a6 --- /dev/null +++ b/tlnos/broken/example3.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- +# runs the basic demo of Trilinos +# trilinos-12.6.1-Source/demos/buildAgainstTrilinos + +import fwk.wutils as wu +import tlnos + +def main(**d): + expl = tlnos.Example3() + expl.execute() + +if __name__ == "__main__": + main() + diff --git a/tlnos/broken/example5.py b/tlnos/broken/example5.py new file mode 100644 index 0000000000000000000000000000000000000000..69d6d7cb7214826449060903b0b71052abc7e04c --- /dev/null +++ b/tlnos/broken/example5.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- +# runs the basic demo of Trilinos +# trilinos-12.6.1-Source/demos/buildAgainstTrilinos + +import fwk.wutils as wu +import tlnos + +def main(**d): + expl = tlnos.Example5() # [RB] missing file "TwoSquares.grid" + expl.execute() + +if __name__ == "__main__": + main() + diff --git a/tlnos/broken/example6.py b/tlnos/broken/example6.py new file mode 100644 index 0000000000000000000000000000000000000000..8816b0ce870d3d8d8c847827efd8a2519b85fe43 --- /dev/null +++ b/tlnos/broken/example6.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- +# runs the basic demo of Trilinos +# trilinos-12.6.1-Source/demos/buildAgainstTrilinos + +import fwk.wutils as wu +import tlnos + +def main(**d): + expl = tlnos.Example6() # [RB] missing file "TwoSquares.grid" + expl.execute() + +if __name__ == "__main__": + main() + diff --git a/tlnos/broken/example7.py b/tlnos/broken/example7.py new file mode 100644 index 0000000000000000000000000000000000000000..c011606a5aa1c34e09cadfda9d370b49a972b970 --- /dev/null +++ b/tlnos/broken/example7.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- +# runs the basic demo of Trilinos +# trilinos-12.6.1-Source/demos/buildAgainstTrilinos + +import fwk.wutils as wu +import tlnos + +def main(**d): + expl = tlnos.Example7() + expl.execute() + +if __name__ == "__main__": + main() + diff --git a/tlnos/broken/example8.py b/tlnos/broken/example8.py new file mode 100644 index 0000000000000000000000000000000000000000..f1f175e0dc036cbca2a3ee858ca4b5fd0bcab36e --- /dev/null +++ b/tlnos/broken/example8.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- +# runs the basic demo of Trilinos +# trilinos-12.6.1-Source/demos/buildAgainstTrilinos + +import fwk.wutils as wu +import tlnos + +def main(**d): + expl = tlnos.Example8() # [RB] missing file "TwoSquaresDirichlet.grid" + expl.execute() + +if __name__ == "__main__": + main() + diff --git a/tlnos/broken/example9.py b/tlnos/broken/example9.py new file mode 100644 index 0000000000000000000000000000000000000000..dbb9b08e8b56d10afd2e65b7edee15129c96d88e --- /dev/null +++ b/tlnos/broken/example9.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- +# runs the basic demo of Trilinos +# trilinos-12.6.1-Source/demos/buildAgainstTrilinos + +import fwk.wutils as wu +import tlnos + +def main(**d): + expl = tlnos.Example9() # [RB] missing file "TwoSquaresDirichlet.grid" + expl.execute() + +if __name__ == "__main__": + main() + diff --git a/tlnos/src/CMakeLists.txt b/tlnos/src/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..ca02962e161cbea0ed0d69edf8e680e23934e5ad --- /dev/null +++ b/tlnos/src/CMakeLists.txt @@ -0,0 +1,80 @@ +# CMake input file of tlnos.so + +FILE(GLOB SRCS *.h *.cpp *.inl *.hpp) +ADD_LIBRARY(tlnos SHARED ${SRCS}) +MACRO_DebugPostfix(tlnos) + +# -- Search for Trilinos +FIND_PACKAGE(Trilinos REQUIRED) + +set (_VERB 1) # set to 1 for debugging +IF(_VERB) + MESSAGE("\nFound Trilinos! Here are the details: ") + MESSAGE(" Trilinos_DIR = ${Trilinos_DIR}") + MESSAGE(" Trilinos_VERSION = ${Trilinos_VERSION}") + MESSAGE(" Trilinos_PACKAGE_LIST = ${Trilinos_PACKAGE_LIST}") + MESSAGE(" Trilinos_LIBRARIES = ${Trilinos_LIBRARIES}") + MESSAGE(" Trilinos_INCLUDE_DIRS = ${Trilinos_INCLUDE_DIRS}") + MESSAGE(" Trilinos_LIBRARY_DIRS = ${Trilinos_LIBRARY_DIRS}") + MESSAGE(" Trilinos_TPL_LIST = ${Trilinos_TPL_LIST}") + MESSAGE(" Trilinos_TPL_INCLUDE_DIRS = ${Trilinos_TPL_INCLUDE_DIRS}") + MESSAGE(" Trilinos_TPL_LIBRARIES = ${Trilinos_TPL_LIBRARIES}") + MESSAGE(" Trilinos_TPL_LIBRARY_DIRS = ${Trilinos_TPL_LIBRARY_DIRS}") + MESSAGE(" Trilinos_BUILD_SHARED_LIBS = ${Trilinos_BUILD_SHARED_LIBS}") + MESSAGE("End of Trilinos details\n") +ENDIF() + +# MPI check +LIST(FIND Trilinos_TPL_LIST MPI MPI_List_ID) +IF (MPI_List_ID GREATER -1) + MESSAGE("-- Checking if MPI is enabled in Trilinos: MPI ENABLED") + SET(MYAPP_MPI TRUE) + ADD_DEFINITIONS(-DMYAPP_MPI) +ELSE() + MESSAGE("-- Checking if MPI is enabled in Trilinos: MPI NOT ENABLED") + SET(MYAPP_MPI FALSE) +ENDIF() + +# Set optional dependency in MyApp on Epetra package: +# this toggles code within #ifdef MYAPP_EPETRA +LIST(FIND Trilinos_PACKAGE_LIST Epetra Epetra_List_ID) +IF (Epetra_List_ID GREATER -1) + ADD_DEFINITIONS(-DMYAPP_EPETRA) + MESSAGE("-- Looking for Epetra: -- found, compiling with -DMYAPP_EPETRA") + SET(MYAPP_EPETRA TRUE) +ELSE() + MESSAGE("-- Looking for Epetra: -- not found.") + SET(MYAPP_EPETRA FALSE) +ENDIF() + +# -------------------------------------------------------------- +# Finds MPI (including MSMPI) +# -------------------------------------------------------------- +if(WIN32) + FIND_PATH(MPI_INCLUDE_PATH NAMES mpi.h HINTS "$ENV{MSMPI_INC}") + if("${CMAKE_SIZEOF_VOID_P}" EQUAL 8) + set(MS_MPI_ARCH_DIR x64) + find_library(MPI_LIBRARIES msmpi PATHS "$ENV{MSMPI_LIB64}") + else() + set(MS_MPI_ARCH_DIR x86) + find_library(MPI_LIBRARIES msmpi PATHS "$ENV{MSMPI_LIB32}") + endif() +else() + find_package(MPI REQUIRED) + # intel mpi (mpi.h doit etre inclus avant stdio.h) + # ou definir ces 2 macros + ADD_DEFINITIONS(-DMPICH_IGNORE_CXX_SEEK -DMPICH_SKIP_MPICXX) +endif() +# -------------------------------------------------------------- + +INCLUDE_DIRECTORIES ( ${PROJECT_SOURCE_DIR}/tbox/src + ${PROJECT_SOURCE_DIR}/fwk/src + ${Trilinos_INCLUDE_DIRS} + ${Trilinos_TPL_INCLUDE_DIRS} + ${MPI_INCLUDE_PATH}) + +LINK_DIRECTORIES (${Trilinos_LIBRARY_DIRS} ${Trilinos_TPL_LIBRARY_DIRS}) + +TARGET_LINK_LIBRARIES(tlnos tbox fwk ${Trilinos_LIBRARIES} ${Trilinos_TPL_LIBRARIES} ${MPI_LIBRARIES}) + +INSTALL(TARGETS tlnos DESTINATION ${CMAKE_INSTALL_PREFIX}) diff --git a/tlnos/src/Example_BCStrategy_Dirichlet_Constant.hpp b/tlnos/src/Example_BCStrategy_Dirichlet_Constant.hpp new file mode 100644 index 0000000000000000000000000000000000000000..dded2612a22c54747b8be0c289673053772b2b77 --- /dev/null +++ b/tlnos/src/Example_BCStrategy_Dirichlet_Constant.hpp @@ -0,0 +1,81 @@ +// @HEADER +// *********************************************************************** +// +// Panzer: A partial differential equation assembly +// engine for strongly coupled complex multiphysics systems +// Copyright (2011) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Roger P. Pawlowski (rppawlo@sandia.gov) and +// Eric C. Cyr (eccyr@sandia.gov) +// *********************************************************************** +// @HEADER + +#ifndef __Example_BC_Dirichlet_Constant_hpp__ +#define __Example_BC_Dirichlet_Constant_hpp__ + +#include <vector> +#include <string> + +#include "Teuchos_RCP.hpp" +#include "Panzer_BCStrategy_Dirichlet_DefaultImpl.hpp" +#include "Panzer_Traits.hpp" +#include "Panzer_PureBasis.hpp" +#include "Phalanx_FieldManager.hpp" + +namespace Example +{ + +template <typename EvalT> +class BCStrategy_Dirichlet_Constant : public panzer::BCStrategy_Dirichlet_DefaultImpl<EvalT> +{ +public: + BCStrategy_Dirichlet_Constant(const panzer::BC &bc, const Teuchos::RCP<panzer::GlobalData> &global_data); + + void setup(const panzer::PhysicsBlock &side_pb, + const Teuchos::ParameterList &user_data); + + void buildAndRegisterEvaluators(PHX::FieldManager<panzer::Traits> &fm, + const panzer::PhysicsBlock &pb, + const panzer::ClosureModelFactory_TemplateManager<panzer::Traits> &factory, + const Teuchos::ParameterList &models, + const Teuchos::ParameterList &user_data) const; + + std::string residual_name; + Teuchos::RCP<panzer::PureBasis> basis; +}; + +} // namespace Example + +#include "Example_BCStrategy_Dirichlet_Constant_impl.hpp" + +#endif diff --git a/tlnos/src/Example_BCStrategy_Dirichlet_Constant_impl.hpp b/tlnos/src/Example_BCStrategy_Dirichlet_Constant_impl.hpp new file mode 100644 index 0000000000000000000000000000000000000000..7a8207e3fa571ff7cf64befabd3a55158e1b86b1 --- /dev/null +++ b/tlnos/src/Example_BCStrategy_Dirichlet_Constant_impl.hpp @@ -0,0 +1,132 @@ +// @HEADER +// *********************************************************************** +// +// Panzer: A partial differential equation assembly +// engine for strongly coupled complex multiphysics systems +// Copyright (2011) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Roger P. Pawlowski (rppawlo@sandia.gov) and +// Eric C. Cyr (eccyr@sandia.gov) +// *********************************************************************** +// @HEADER + +#include "Teuchos_ParameterList.hpp" +#include "Teuchos_RCP.hpp" +#include "Teuchos_Assert.hpp" +#include "Phalanx_DataLayout_MDALayout.hpp" +#include "Phalanx_FieldManager.hpp" +#include "Panzer_PhysicsBlock.hpp" + +#include "Panzer_PureBasis.hpp" + +// Evaluators +#include "Panzer_Constant.hpp" + +#include "Phalanx_MDField.hpp" +#include "Phalanx_DataLayout.hpp" +#include "Phalanx_DataLayout_MDALayout.hpp" + +// *********************************************************************** +template <typename EvalT> +Example::BCStrategy_Dirichlet_Constant<EvalT>:: + BCStrategy_Dirichlet_Constant(const panzer::BC &bc, const Teuchos::RCP<panzer::GlobalData> &global_data) : panzer::BCStrategy_Dirichlet_DefaultImpl<EvalT>(bc, global_data) +{ + TEUCHOS_ASSERT(this->m_bc.strategy() == "Constant"); +} + +// *********************************************************************** +template <typename EvalT> +void Example::BCStrategy_Dirichlet_Constant<EvalT>:: + setup(const panzer::PhysicsBlock &side_pb, + const Teuchos::ParameterList &user_data) +{ + using std::pair; + using std::string; + using std::vector; + using Teuchos::RCP; + + // need the dof value to form the residual + this->required_dof_names.push_back(this->m_bc.equationSetName()); + + // unique residual name + this->residual_name = "Residual_" + this->m_bc.identifier(); + + // map residual to dof + this->residual_to_dof_names_map[residual_name] = this->m_bc.equationSetName(); + + // map residual to target field + this->residual_to_target_field_map[residual_name] = "Constant_" + this->m_bc.equationSetName(); + + // find the basis for this dof + const vector<pair<string, RCP<panzer::PureBasis>>> &dofs = side_pb.getProvidedDOFs(); + + for (vector<pair<string, RCP<panzer::PureBasis>>>::const_iterator dof_it = + dofs.begin(); + dof_it != dofs.end(); ++dof_it) + { + if (dof_it->first == this->m_bc.equationSetName()) + this->basis = dof_it->second; + } + + TEUCHOS_TEST_FOR_EXCEPTION(Teuchos::is_null(this->basis), std::runtime_error, + "Error the name \"" << this->m_bc.equationSetName() + << "\" is not a valid DOF for the boundary condition:\n" + << this->m_bc << "\n"); +} + +// *********************************************************************** +template <typename EvalT> +void Example::BCStrategy_Dirichlet_Constant<EvalT>:: + buildAndRegisterEvaluators(PHX::FieldManager<panzer::Traits> &fm, + const panzer::PhysicsBlock &pb, + const panzer::ClosureModelFactory_TemplateManager<panzer::Traits> &factory, + const Teuchos::ParameterList &models, + const Teuchos::ParameterList &user_data) const +{ + using Teuchos::ParameterList; + using Teuchos::RCP; + using Teuchos::rcp; + + // provide a constant target value to map into residual + { + ParameterList p("BC Constant Dirichlet"); + p.set("Name", "Constant_" + this->m_bc.equationSetName()); + p.set("Data Layout", basis->functional); + p.set("Value", this->m_bc.params()->template get<double>("Value")); + + RCP<PHX::Evaluator<panzer::Traits>> op = + rcp(new panzer::Constant<EvalT, panzer::Traits>(p)); + + this->template registerEvaluator<EvalT>(fm, op); + } +} diff --git a/tlnos/src/Example_BCStrategy_Factory.hpp b/tlnos/src/Example_BCStrategy_Factory.hpp new file mode 100644 index 0000000000000000000000000000000000000000..3cf912be87ccdbb6741febedb0fd182fbd81b18b --- /dev/null +++ b/tlnos/src/Example_BCStrategy_Factory.hpp @@ -0,0 +1,90 @@ +// @HEADER +// *********************************************************************** +// +// Panzer: A partial differential equation assembly +// engine for strongly coupled complex multiphysics systems +// Copyright (2011) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Roger P. Pawlowski (rppawlo@sandia.gov) and +// Eric C. Cyr (eccyr@sandia.gov) +// *********************************************************************** +// @HEADER + +#ifndef __Example_BCStrategyFactory_hpp__ +#define __Example_BCStrategyFactory_hpp__ + +#include "Teuchos_RCP.hpp" +#include "Panzer_Traits.hpp" +#include "Panzer_BCStrategy_TemplateManager.hpp" +#include "Panzer_BCStrategy_Factory.hpp" +#include "Panzer_BCStrategy_Factory_Defines.hpp" + +// Add my bcstrategies here +#include "Example_BCStrategy_Dirichlet_Constant.hpp" + +namespace Example +{ + +PANZER_DECLARE_BCSTRATEGY_TEMPLATE_BUILDER("Constant", + BCStrategy_Dirichlet_Constant, + BCStrategy_Dirichlet_Constant) + +struct BCStrategyFactory : public panzer::BCStrategyFactory +{ + + Teuchos::RCP<panzer::BCStrategy_TemplateManager<panzer::Traits>> + buildBCStrategy(const panzer::BC &bc, const Teuchos::RCP<panzer::GlobalData> &global_data) const + { + + Teuchos::RCP<panzer::BCStrategy_TemplateManager<panzer::Traits>> bcs_tm = + Teuchos::rcp(new panzer::BCStrategy_TemplateManager<panzer::Traits>); + + bool found = false; + + PANZER_BUILD_BCSTRATEGY_OBJECTS("Constant", + Example::BCStrategy_Dirichlet_Constant, + BCStrategy_Dirichlet_Constant) + + TEUCHOS_TEST_FOR_EXCEPTION(!found, std::logic_error, + "Error - the BC Strategy called \"" << bc.strategy() << "\" is not a valid identifier in the BCStrategyFactory. Either add a " + "valid implementation to your factory or fix your input file. The " + "relevant boundary condition is:\n\n" + << bc << std::endl); + + return bcs_tm; + } +}; + +} // namespace Example + +#endif diff --git a/tlnos/src/Example_ClosureModel_Factory.hpp b/tlnos/src/Example_ClosureModel_Factory.hpp new file mode 100644 index 0000000000000000000000000000000000000000..9a8d7e51dec6c7fafda06d41792bb29f0ea0dbd9 --- /dev/null +++ b/tlnos/src/Example_ClosureModel_Factory.hpp @@ -0,0 +1,76 @@ +// @HEADER +// *********************************************************************** +// +// Panzer: A partial differential equation assembly +// engine for strongly coupled complex multiphysics systems +// Copyright (2011) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Roger P. Pawlowski (rppawlo@sandia.gov) and +// Eric C. Cyr (eccyr@sandia.gov) +// *********************************************************************** +// @HEADER + +#ifndef __Example_ClosureModelFactory_hpp__ +#define __Example_ClosureModelFactory_hpp__ + +#include "Panzer_ClosureModel_Factory.hpp" + +namespace panzer +{ +class InputEquationSet; +} + +namespace Example +{ + +template <typename EvalT> +class ModelFactory : public panzer::ClosureModelFactory<EvalT> +{ + +public: + Teuchos::RCP<std::vector<Teuchos::RCP<PHX::Evaluator<panzer::Traits>>>> + buildClosureModels(const std::string &model_id, + const Teuchos::ParameterList &models, + const panzer::FieldLayoutLibrary &fl, + const Teuchos::RCP<panzer::IntegrationRule> &ir, + const Teuchos::ParameterList &default_params, + const Teuchos::ParameterList &user_data, + const Teuchos::RCP<panzer::GlobalData> &global_data, + PHX::FieldManager<panzer::Traits> &fm) const; +}; + +} // namespace Example + +#include "Example_ClosureModel_Factory_impl.hpp" + +#endif diff --git a/tlnos/src/Example_ClosureModel_Factory_TemplateBuilder.hpp b/tlnos/src/Example_ClosureModel_Factory_TemplateBuilder.hpp new file mode 100644 index 0000000000000000000000000000000000000000..8b039db50b9db934743c3781fbc28617b55524c1 --- /dev/null +++ b/tlnos/src/Example_ClosureModel_Factory_TemplateBuilder.hpp @@ -0,0 +1,66 @@ +// @HEADER +// *********************************************************************** +// +// Panzer: A partial differential equation assembly +// engine for strongly coupled complex multiphysics systems +// Copyright (2011) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Roger P. Pawlowski (rppawlo@sandia.gov) and +// Eric C. Cyr (eccyr@sandia.gov) +// *********************************************************************** +// @HEADER + +#ifndef __Example_ClosureModel_Factory_TemplateBuilder_hpp__ +#define __Example_ClosureModel_Factory_TemplateBuilder_hpp__ + +#include <string> +#include "Sacado_mpl_apply.hpp" +#include "Teuchos_RCP.hpp" +#include "Example_ClosureModel_Factory.hpp" + +namespace Example +{ + +class ClosureModelFactory_TemplateBuilder +{ +public: + template <typename EvalT> + Teuchos::RCP<panzer::ClosureModelFactoryBase> build() const + { + return Teuchos::rcp(static_cast<panzer::ClosureModelFactoryBase *>(new Example::ModelFactory<EvalT>)); + } +}; + +} // namespace Example + +#endif diff --git a/tlnos/src/Example_ClosureModel_Factory_impl.hpp b/tlnos/src/Example_ClosureModel_Factory_impl.hpp new file mode 100644 index 0000000000000000000000000000000000000000..8965ef16d067772943976d996544567d927285e0 --- /dev/null +++ b/tlnos/src/Example_ClosureModel_Factory_impl.hpp @@ -0,0 +1,144 @@ +// @HEADER +// *********************************************************************** +// +// Panzer: A partial differential equation assembly +// engine for strongly coupled complex multiphysics systems +// Copyright (2011) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Roger P. Pawlowski (rppawlo@sandia.gov) and +// Eric C. Cyr (eccyr@sandia.gov) +// *********************************************************************** +// @HEADER + +#ifndef __Example_ClosureModelFactoryT_hpp__ +#define __Example_ClosureModelFactoryT_hpp__ + +#include <iostream> +#include <sstream> +#include <typeinfo> +#include "Panzer_IntegrationRule.hpp" +#include "Panzer_BasisIRLayout.hpp" +#include "Panzer_Integrator_Scalar.hpp" +#include "Phalanx_FieldTag_Tag.hpp" +#include "Teuchos_ParameterEntry.hpp" +#include "Teuchos_TypeNameTraits.hpp" + +// ******************************************************************** +// ******************************************************************** +template <typename EvalT> +Teuchos::RCP<std::vector<Teuchos::RCP<PHX::Evaluator<panzer::Traits>>>> +Example::ModelFactory<EvalT>:: + buildClosureModels(const std::string &model_id, + const Teuchos::ParameterList &models, + const panzer::FieldLayoutLibrary &fl, + const Teuchos::RCP<panzer::IntegrationRule> &ir, + const Teuchos::ParameterList &default_params, + const Teuchos::ParameterList &user_data, + const Teuchos::RCP<panzer::GlobalData> &global_data, + PHX::FieldManager<panzer::Traits> &fm) const +{ + using PHX::Evaluator; + using std::string; + using std::vector; + using Teuchos::ParameterList; + using Teuchos::RCP; + using Teuchos::rcp; + + RCP<vector<RCP<Evaluator<panzer::Traits>>>> evaluators = + rcp(new vector<RCP<Evaluator<panzer::Traits>>>); + + if (!models.isSublist(model_id)) + { + models.print(std::cout); + std::stringstream msg; + msg << "Falied to find requested model, \"" << model_id + << "\", for equation set:\n" + << std::endl; + TEUCHOS_TEST_FOR_EXCEPTION(!models.isSublist(model_id), std::logic_error, msg.str()); + } + + std::vector<Teuchos::RCP<const panzer::PureBasis>> bases; + fl.uniqueBases(bases); + + const ParameterList &my_models = models.sublist(model_id); + + for (ParameterList::ConstIterator model_it = my_models.begin(); + model_it != my_models.end(); ++model_it) + { + + bool found = false; + + const std::string key = model_it->first; + ParameterList input; + const Teuchos::ParameterEntry &entry = model_it->second; + const ParameterList &plist = Teuchos::getValue<Teuchos::ParameterList>(entry); + + if (plist.isType<double>("Value")) + { + { // at IP + input.set("Name", key); + input.set("Value", plist.get<double>("Value")); + input.set("Data Layout", ir->dl_scalar); + RCP<Evaluator<panzer::Traits>> e = + rcp(new panzer::Constant<EvalT, panzer::Traits>(input)); + evaluators->push_back(e); + } + + for (std::vector<Teuchos::RCP<const panzer::PureBasis>>::const_iterator basis_itr = bases.begin(); + basis_itr != bases.end(); ++basis_itr) + { // at BASIS + input.set("Name", key); + input.set("Value", plist.get<double>("Value")); + Teuchos::RCP<const panzer::BasisIRLayout> basis = basisIRLayout(*basis_itr, *ir); + input.set("Data Layout", basis->functional); + RCP<Evaluator<panzer::Traits>> e = + rcp(new panzer::Constant<EvalT, panzer::Traits>(input)); + evaluators->push_back(e); + } + found = true; + } + + if (!found) + { + std::stringstream msg; + msg << "ClosureModelFactory failed to build evaluator for key \"" << key + << "\"\nin model \"" << model_id + << "\". Please correct the type or add support to the \nfactory." << std::endl; + TEUCHOS_TEST_FOR_EXCEPTION(!found, std::logic_error, msg.str()); + } + } + + return evaluators; +} + +#endif diff --git a/tlnos/src/Example_EquationSetFactory.hpp b/tlnos/src/Example_EquationSetFactory.hpp new file mode 100644 index 0000000000000000000000000000000000000000..f06c01d195c9392d83cfde6b3c96e20ed8753b69 --- /dev/null +++ b/tlnos/src/Example_EquationSetFactory.hpp @@ -0,0 +1,94 @@ +// @HEADER +// *********************************************************************** +// +// Panzer: A partial differential equation assembly +// engine for strongly coupled complex multiphysics systems +// Copyright (2011) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Roger P. Pawlowski (rppawlo@sandia.gov) and +// Eric C. Cyr (eccyr@sandia.gov) +// *********************************************************************** +// @HEADER + +#ifndef __PoissonExample_EquationSetFactory_hpp__ +#define __PoissonExample_EquationSetFactory_hpp__ + +#include "Panzer_EquationSet_Factory.hpp" +#include "Panzer_EquationSet_Factory_Defines.hpp" +#include "Panzer_CellData.hpp" + +// Add my equation sets here +#include "Example_PoissonEquationSet.hpp" + +namespace Example +{ + +// A macro that defines a class to make construction of the equation sets easier +// - The equation set is constructed over a list of automatic differention types +PANZER_DECLARE_EQSET_TEMPLATE_BUILDER("Poisson", PoissonEquationSet, PoissonEquationSet) + +// A user written factory that creates each equation set. The key member here +// is buildEquationSet +class EquationSetFactory : public panzer::EquationSetFactory +{ +public: + Teuchos::RCP<panzer::EquationSet_TemplateManager<panzer::Traits>> + buildEquationSet(const Teuchos::RCP<Teuchos::ParameterList> ¶ms, + const int &default_integration_order, + const panzer::CellData &cell_data, + const Teuchos::RCP<panzer::GlobalData> &global_data, + const bool build_transient_support) const + { + Teuchos::RCP<panzer::EquationSet_TemplateManager<panzer::Traits>> eq_set = + Teuchos::rcp(new panzer::EquationSet_TemplateManager<panzer::Traits>); + + bool found = false; // this is used by PANZER_BUILD_EQSET_OBJECTS + + // macro checks if(ies.name=="Poisson") then an EquationSet_Energy object is constructed + PANZER_BUILD_EQSET_OBJECTS("Poisson", PoissonEquationSet, PoissonEquationSet) + + // make sure your equation set has been found + if (!found) + { + std::string msg = "Error - the \"Equation Set\" called \"" + params->get<std::string>("Type") + + "\" is not a valid equation set identifier. Please supply the correct factory.\n"; + TEUCHOS_TEST_FOR_EXCEPTION(true, std::logic_error, msg); + } + + return eq_set; + } +}; + +} // namespace Example + +#endif diff --git a/tlnos/src/Example_PoissonEquationSet.hpp b/tlnos/src/Example_PoissonEquationSet.hpp new file mode 100644 index 0000000000000000000000000000000000000000..f3cfbe59447c0c6ecfe959002fe3cf4fae6720e9 --- /dev/null +++ b/tlnos/src/Example_PoissonEquationSet.hpp @@ -0,0 +1,94 @@ +// @HEADER +// *********************************************************************** +// +// Panzer: A partial differential equation assembly +// engine for strongly coupled complex multiphysics systems +// Copyright (2011) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Roger P. Pawlowski (rppawlo@sandia.gov) and +// Eric C. Cyr (eccyr@sandia.gov) +// *********************************************************************** +// @HEADER + +#ifndef __PoissonExample_EquationSet_Energy_hpp__ +#define __PoissonExample_EquationSet_Energy_hpp__ + +#include <vector> +#include <string> + +#include "Teuchos_RCP.hpp" +#include "Panzer_EquationSet_DefaultImpl.hpp" +#include "Panzer_Traits.hpp" +#include "Phalanx_FieldManager.hpp" + +namespace Example +{ + +/** The equation set serves two roles. The first is to let the panzer library + * know which fields this equation set defines and their names. It registers + * the evaluators required for a particular equation set. The level of the + * granularity is largely up to a user. For instance this could be the momentum + * or continuity equation in Navier-Stokes, or it could simply be the Navier-Stokes + * equations. + * + * Generally, this inherits from the panzer::EquationSet_DefaultImpl which takes + * care of adding the gather (extract basis coefficients from solution vector) and + * scatter (using element matrices and vectors distribute and sum their values + * to a global linear system) evaluators. These use data members that must be set by + * the user. + */ +template <typename EvalT> +class PoissonEquationSet : public panzer::EquationSet_DefaultImpl<EvalT> +{ +public: + /** In the constructor you set all the fields provided by this + * equation set. + */ + PoissonEquationSet(const Teuchos::RCP<Teuchos::ParameterList> ¶ms, + const int &default_integration_order, + const panzer::CellData &cell_data, + const Teuchos::RCP<panzer::GlobalData> &global_data, + const bool build_transient_support); + + /** The specific evaluators are registered with the field manager argument. + */ + void buildAndRegisterEquationSetEvaluators(PHX::FieldManager<panzer::Traits> &fm, + const panzer::FieldLibrary &field_library, + const Teuchos::ParameterList &user_data) const; +}; + +} // namespace Example + +#include "Example_PoissonEquationSet_impl.hpp" + +#endif diff --git a/tlnos/src/Example_PoissonEquationSet_impl.hpp b/tlnos/src/Example_PoissonEquationSet_impl.hpp new file mode 100644 index 0000000000000000000000000000000000000000..8990248e61c259aa17e439fe9c4e3a43c1e46416 --- /dev/null +++ b/tlnos/src/Example_PoissonEquationSet_impl.hpp @@ -0,0 +1,213 @@ +// @HEADER +// *********************************************************************** +// +// Panzer: A partial differential equation assembly +// engine for strongly coupled complex multiphysics systems +// Copyright (2011) Sandia Corporation +// +// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, +// the U.S. Government retains certain rights in this software. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact Roger P. Pawlowski (rppawlo@sandia.gov) and +// Eric C. Cyr (eccyr@sandia.gov) +// *********************************************************************** +// @HEADER + +#ifndef USER_APP_EQUATIONSET_ENERGY_T_HPP +#define USER_APP_EQUATIONSET_ENERGY_T_HPP + +#include "Teuchos_ParameterList.hpp" +#include "Teuchos_StandardParameterEntryValidators.hpp" +#include "Teuchos_RCP.hpp" +#include "Teuchos_Assert.hpp" +#include "Phalanx_DataLayout_MDALayout.hpp" +#include "Phalanx_FieldManager.hpp" + +#include "Panzer_IntegrationRule.hpp" +#include "Panzer_BasisIRLayout.hpp" + +// include evaluators here +#include "Panzer_Integrator_BasisTimesScalar.hpp" +#include "Panzer_Integrator_GradBasisDotVector.hpp" +#include "Panzer_ScalarToVector.hpp" +#include "Panzer_Sum.hpp" +#include "Panzer_Constant.hpp" + +// *********************************************************************** +template <typename EvalT> +Example::PoissonEquationSet<EvalT>:: + PoissonEquationSet(const Teuchos::RCP<Teuchos::ParameterList> ¶ms, + const int &default_integration_order, + const panzer::CellData &cell_data, + const Teuchos::RCP<panzer::GlobalData> &global_data, + const bool build_transient_support) : panzer::EquationSet_DefaultImpl<EvalT>(params, default_integration_order, cell_data, global_data, build_transient_support) +{ + // ******************** + // Validate and parse parameter list + // ******************** + { + Teuchos::ParameterList valid_parameters; + this->setDefaultValidParameters(valid_parameters); + + valid_parameters.set("Model ID", "", "Closure model id associated with this equaiton set"); + valid_parameters.set("Basis Type", "HGrad", "Type of Basis to use"); + valid_parameters.set("Basis Order", 1, "Order of the basis"); + valid_parameters.set("Integration Order", -1, "Order of the integration rule"); + + params->validateParametersAndSetDefaults(valid_parameters); + } + + std::string basis_type = params->get<std::string>("Basis Type"); + int basis_order = params->get<int>("Basis Order"); + int integration_order = params->get<int>("Integration Order"); + std::string model_id = params->get<std::string>("Model ID"); + + // ******************** + // Panzer uses strings to match fields. In this section we define the + // name of the fields provided by this equation set. This is a bit strange + // in that this is not the fields necessarily required by this equation set. + // For instance for the momentum equations in Navier-Stokes only the velocity + // fields are added, the pressure field is added by continuity. + // + // In this case "TEMPERATURE" is the lone field. We also name the gradient + // for this field. These names automatically generate evaluators for "TEMPERATURE" + // and "GRAD_TEMPERATURE" gathering the basis coefficients of "TEMPERATURE" and + // the values of the TEMPERATURE and GRAD_TEMPERATURE fields at quadrature points. + // + // After all the equation set evaluators are added to a given field manager, the + // panzer code adds in appropriate scatter evaluators to distribute the + // entries into the residual and the Jacobian operator. These operators will be + // "required" by the field manager and will serve as roots of evaluation tree. + // The leaves of this tree will include the gather evaluators whose job it is to + // gather the solution from a vector. + // ******************** + + // ******************** + // Assemble DOF names and Residual names + // ******************** + + this->addDOF("TEMPERATURE", basis_type, basis_order, integration_order); + this->addDOFGrad("TEMPERATURE"); + if (this->buildTransientSupport()) + this->addDOFTimeDerivative("TEMPERATURE"); + + // ******************** + // Build Basis Functions and Integration Rules + // ******************** + + this->addClosureModel(model_id); + + this->setupDOFs(); +} + +// *********************************************************************** +template <typename EvalT> +void Example::PoissonEquationSet<EvalT>:: + buildAndRegisterEquationSetEvaluators(PHX::FieldManager<panzer::Traits> &fm, + const panzer::FieldLibrary &fl, + const Teuchos::ParameterList &user_data) const +{ + using Teuchos::ParameterList; + using Teuchos::RCP; + using Teuchos::rcp; + + Teuchos::RCP<panzer::IntegrationRule> ir = this->getIntRuleForDOF("TEMPERATURE"); + Teuchos::RCP<panzer::BasisIRLayout> basis = this->getBasisIRLayoutForDOF("TEMPERATURE"); + + // ******************** + // Energy Equation + // ******************** + + // Transient Operator: Assembles \int \dot{T} v + if (this->buildTransientSupport()) + { + ParameterList p("Transient Residual"); + p.set("Residual Name", "RESIDUAL_TEMPERATURE_TRANSIENT_OP"); // we are defining the name of this operator + p.set("Value Name", "DXDT_TEMPERATURE"); // this field is constructed by the panzer library + p.set("Basis", basis); + p.set("IR", ir); + p.set("Multiplier", 1.0); + + RCP<PHX::Evaluator<panzer::Traits>> op = + rcp(new panzer::Integrator_BasisTimesScalar<EvalT, panzer::Traits>(p)); + + this->template registerEvaluator<EvalT>(fm, op); + } + + // Diffusion Operator: Assembles \int \nabla T \cdot \nabla v + { + double thermal_conductivity = 1.0; + + ParameterList p("Diffusion Residual"); + p.set("Residual Name", "RESIDUAL_TEMPERATURE_DIFFUSION_OP"); + p.set("Flux Name", "GRAD_TEMPERATURE"); // this field is constructed by the panzer library + p.set("Basis", basis); + p.set("IR", ir); + p.set("Multiplier", thermal_conductivity); + + RCP<PHX::Evaluator<panzer::Traits>> op = + rcp(new panzer::Integrator_GradBasisDotVector<EvalT, panzer::Traits>(p)); + + this->template registerEvaluator<EvalT>(fm, op); + } + + // Source Operator + { + ParameterList p("Source Residual"); + p.set("Residual Name", "RESIDUAL_TEMPERATURE_SOURCE_OP"); + p.set("Value Name", "SOURCE_TEMPERATURE"); // this field must be provided by the closure model factory + // and specified by the user + p.set("Basis", basis); + p.set("IR", ir); + p.set("Multiplier", -1.0); + + RCP<PHX::Evaluator<panzer::Traits>> op = + rcp(new panzer::Integrator_BasisTimesScalar<EvalT, panzer::Traits>(p)); + + this->template registerEvaluator<EvalT>(fm, op); + } + + // Use a sum operator to form the overall residual for the equation + { + std::vector<std::string> sum_names; + + // these are the names of the residual values to sum together + sum_names.push_back("RESIDUAL_TEMPERATURE_DIFFUSION_OP"); + sum_names.push_back("RESIDUAL_TEMPERATURE_SOURCE_OP"); + if (this->buildTransientSupport()) + sum_names.push_back("RESIDUAL_TEMPERATURE_TRANSIENT_OP"); + + this->buildAndRegisterResidualSummationEvalautor(fm, "TEMPERATURE", sum_names); + } +} + +// *********************************************************************** + +#endif diff --git a/tlnos/src/ExodusInterface.h b/tlnos/src/ExodusInterface.h new file mode 100644 index 0000000000000000000000000000000000000000..e0847ac7a1489b092fae83722cd51e7a1d5771eb --- /dev/null +++ b/tlnos/src/ExodusInterface.h @@ -0,0 +1,231 @@ +/* +#@HEADER +# ************************************************************************ +# +# Moertel FE Package +# Copyright (2006) Sandia Corporation +# +# Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +# license for use of this work by or on behalf of the U.S. Government. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# 3. Neither the name of the Corporation nor the names of the +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Questions? Contact Glen Hansen (gahanse@sandia.gov) +# +# ************************************************************************ +#@HEADER +*/ + +#ifndef MOERTEL_EXODUS_H +#define MOERTEL_EXODUS_H + +#include <iostream> +#include <iomanip> +#include "Epetra_Map.h" +#include "Epetra_MultiVector.h" +#include "Epetra_Import.h" +#include "Galeri_AbstractGrid.h" + +// Exodus stuff + +#include "exodusII.h" + +using namespace std; + +class ExodusInterface +{ + +public: + ExodusInterface(Epetra_Comm &Comm) : Comm_(Comm) {} + + ~ExodusInterface() {} + + const Epetra_Comm &Comm() const + { + return (Comm_); + } + + void Write(const Galeri::FiniteElements::AbstractGrid &data, const string &BaseName, + const Epetra_MultiVector &Field) + { + + int comp_ws = sizeof(double); // = 8 + int io_ws = sizeof(double); // = 8 + + string FileName = BaseName + ".exo"; + int ex_id = ex_create(FileName.c_str(), EX_CLOBBER, &comp_ws, &io_ws); + + int num_dim = data.NumDimensions(); + int num_nodes = data.NumGlobalVertices(); + int num_elem = data.NumGlobalElements(); + int num_elem_blk = 1; + int num_node_sets = 0; + int num_side_sets = 0; + + int ex_err = ex_put_init(ex_id, FileName.c_str(), num_dim, + num_nodes, num_elem, num_elem_blk, + num_node_sets, num_side_sets); + + vector<double> coord(3); + vector<int> vertices(data.NumVerticesPerElement()); + + const Epetra_Map &RowMap = data.RowMap(); + // const Epetra_Map& VertexMap = data.VertexMap(); + + std::vector<double> x(data.NumMyVertices()); + std::vector<double> y(data.NumMyVertices()); + std::vector<double> z(data.NumMyVertices()); + + for (int i = 0; i < data.NumMyVertices(); ++i) + { + data.VertexCoord(i, &coord[0]); + x[i] = coord[0]; + y[i] = coord[1]; + z[i] = coord[2]; + } + + int n = 0; + if (Field.Comm().MyPID() == 0) + n = RowMap.NumGlobalElements(); + + Epetra_Map SingleProcMap(-1, n, 0, Field.Comm()); + Epetra_MultiVector SingleProcField(SingleProcMap, 1); + + Epetra_Import FieldImporter(SingleProcMap, RowMap); + SingleProcField.Import(Field, FieldImporter, Insert); + + if (Comm().MyPID() == 0) + { + switch (data.NumDimensions()) + { + case 2: + { + const char *coord_names[] = {"x", "y"}; + ex_err = ex_put_coord_names(ex_id, (char **)coord_names); + ex_err = ex_put_coord(ex_id, &x[0], &y[0], NULL); + } + break; + case 3: + { + const char *coord_names[] = {"x", "y", "z"}; + ex_err = ex_put_coord_names(ex_id, (char **)coord_names); + ex_err = ex_put_coord(ex_id, &x[0], &y[0], &z[0]); + } + break; + default: + throw(-1); + } + } + Comm().Barrier(); + + for (int ProcID = 0; ProcID < Comm().NumProc(); ++ProcID) + { + + if (Comm().MyPID() == ProcID) + { + + if (ProcID == 0) + { + string type = data.ElementType(); + + if (type == "GALERI_TRIANGLE") + { + const char *elem_type = "TRIANGLE"; + ex_err = ex_put_elem_block(ex_id, 1, (char *)elem_type, data.NumGlobalElements(), 3, 0); + } + else if (type == "GALERI_QUAD") + { + const char *elem_type = "QUAD4"; + ex_err = ex_put_elem_block(ex_id, 1, (char *)elem_type, data.NumGlobalElements(), 4, 0); + } + else if (type == "GALERI_TET") + { + const char *elem_type = "TETRA"; + ex_err = ex_put_elem_block(ex_id, 1, (char *)elem_type, data.NumGlobalElements(), 4, 0); + } + else if (type == "GALERI_HEX") + { + const char *elem_type = "HEX"; + ex_err = ex_put_elem_block(ex_id, 1, (char *)elem_type, data.NumGlobalElements(), 8, 0); + } + else + { + cerr << "Incorrect element type (" << type << ")" << endl; + throw(-1); + } + } + + std::vector<int> connect_tmp(data.NumMyElements() * data.NumVerticesPerElement()); + int cnt = 0; + + for (int i = 0; i < data.NumMyElements(); ++i) + { + data.ElementVertices(i, &vertices[0]); + for (int j = 0; j < data.NumVerticesPerElement(); ++j) + connect_tmp[cnt++] = data.VertexMap().GID(vertices[j]) + 1; + } + + ex_err = ex_put_elem_conn(ex_id, 1, &connect_tmp[0]); + } + + /* Write the field data out + + ex_err = ex_put_nodal_var(int exodus_file_id, int time_step, + int nodal_var_index, // which field set is being written + int num_nodes, // number of nodes worth of data + void *nodal_var_vals // the data + ); + */ + + int num_nodal_fields = 1; + std::vector<double> field(data.NumMyVertices()); + + ex_err = ex_put_var_param(ex_id, "N", num_nodal_fields); + + const char *var_names[] = {"u"}; + ex_err = ex_put_var_names(ex_id, "N", num_nodal_fields, (char **)var_names); + + // for(int i = 0; i < data.NumMyVertices(); i++) + // field[i] = SingleProcField[0][i]; + for (int i = 0; i < data.NumMyVertices(); i++) + field[i] = Field[0][i]; + + ex_err = ex_put_nodal_var(ex_id, 1, 1, data.NumMyVertices(), &field[0]); + + ex_err = ex_close(ex_id); + + Comm().Barrier(); + + } // for Procs, write elements + } + +private: + const Epetra_Comm &Comm_; +}; + +#endif diff --git a/tlnos/src/TOOLS/PDE_FEM.hpp b/tlnos/src/TOOLS/PDE_FEM.hpp new file mode 100644 index 0000000000000000000000000000000000000000..362d5338a4ad1a9ba7db64915b927471051b221d --- /dev/null +++ b/tlnos/src/TOOLS/PDE_FEM.hpp @@ -0,0 +1,1055 @@ +// @HEADER +// ************************************************************************ +// +// Rapid Optimization Library (ROL) Package +// Copyright (2014) Sandia Corporation +// +// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +// license for use of this work by or on behalf of the U.S. Government. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact lead developers: +// Drew Kouri (dpkouri@sandia.gov) and +// Denis Ridzal (dridzal@sandia.gov) +// +// ************************************************************************ +// @HEADER + +/*! \file data.hpp + \brief Generates and manages data for the Poisson example, including + all mesh and discretization data, matrices, etc. +*/ + +#ifndef ROL_PDEOPT_PDE_FEM_H +#define ROL_PDEOPT_PDE_FEM_H + +#include "Teuchos_GlobalMPISession.hpp" +#include "Teuchos_TimeMonitor.hpp" + +#include "Tpetra_DefaultPlatform.hpp" +#include "Tpetra_MultiVector.hpp" +#include "Tpetra_Vector.hpp" +#include "Tpetra_CrsGraph.hpp" +#include "Tpetra_CrsMatrix.hpp" +#include "Tpetra_Version.hpp" +#include "Tpetra_RowMatrixTransposer.hpp" +#include "MatrixMarket_Tpetra.hpp" + +#include "Intrepid_HGRAD_QUAD_C2_FEM.hpp" +#include "Intrepid_HGRAD_QUAD_C1_FEM.hpp" +#include "Intrepid_DefaultCubatureFactory.hpp" +#include "Intrepid_FunctionSpaceTools.hpp" +#include "Intrepid_CellTools.hpp" + +#include "Amesos2.hpp" +#include "./dofmanager.hpp" + +template <class Real> +class PDE_FEM +{ + +protected: + Teuchos::RCP<MeshManager<Real>> meshMgr_; + Teuchos::RCP<DofManager<Real>> dofMgr_; + std::vector<Teuchos::RCP<Intrepid::Basis<Real, Intrepid::FieldContainer<Real>>>> basisPtrs_; + Teuchos::RCP<Intrepid::DofCoordsInterface<Intrepid::FieldContainer<Real>>> coord_iface_; + Intrepid::FieldContainer<int> cellDofs_; + + Teuchos::RCP<Teuchos::ParameterList> parlist_; + Teuchos::RCP<const Teuchos::Comm<int>> commPtr_; + Teuchos::RCP<std::ostream> outStream_; + + int numLocalDofs_; + Intrepid::FieldContainer<int> ctn_; + Intrepid::FieldContainer<int> cte_; + + int myRank_; + int numProcs_; + + Real alpha_; + int basisOrder_; + + Teuchos::RCP<const Tpetra::Map<>> myCellMap_; + Teuchos::RCP<const Tpetra::Map<>> myOverlapMap_; + Teuchos::RCP<const Tpetra::Map<>> myUniqueMap_; + Teuchos::RCP<Tpetra::CrsGraph<>> matGraph_; + Teuchos::RCP<Tpetra::CrsMatrix<>> matA_; + Teuchos::RCP<Tpetra::CrsMatrix<>> matA_dirichlet_; + // Teuchos::RCP<Tpetra::CrsMatrix<> > matA_dirichlet_trans_; + Teuchos::RCP<Tpetra::CrsMatrix<>> matM_; + Teuchos::RCP<Tpetra::CrsMatrix<>> matM_dirichlet_; + // Teuchos::RCP<Tpetra::CrsMatrix<> > matM_dirichlet_trans_; + Teuchos::RCP<Tpetra::MultiVector<>> vecUd_; + Teuchos::RCP<Tpetra::MultiVector<>> vecF_; + Teuchos::RCP<Tpetra::MultiVector<>> vecF_overlap_; + Teuchos::RCP<Tpetra::MultiVector<>> vecF_dirichlet_; + + Teuchos::Array<Real> myCellMeasure_; + Teuchos::Array<int> myCellIds_; + // Elements on Boundary + std::vector<Teuchos::Array<int>> myBoundaryCellIds_; + // DBC + Teuchos::Array<int> myDirichletDofs_; + // BC Sides + std::vector<int> my_dbc_; + std::vector<int> my_nbc_; + + //Point load on Bundary! + std::vector<int> myPointLoadDofs_; + std::vector<Real> myPointLoadVals_; + + Teuchos::RCP<Amesos2::Solver<Tpetra::CrsMatrix<>, Tpetra::MultiVector<>>> solverA_; + // Teuchos::RCP<Amesos2::Solver< Tpetra::CrsMatrix<>, Tpetra::MultiVector<> > > solverA_trans_; + + shards::CellTopology cellType_; + + int sideDim_; + int spaceDim_; + int numNodesPerCell_; + int numCubPoints_; + int lfs_; + + int totalNumCells_; + int totalNumDofs_; + int numCells_; + + Teuchos::RCP<Intrepid::FieldContainer<Real>> cubPoints_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> cubWeights_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> cellNodes_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> cellJac_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> cellJacInv_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> cellJacDet_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> cellWeightedMeasure_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> valReference_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> gradReference_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> valPhysical_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> gradPhysical_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> valPhysicalWeighted_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> gradPhysicalWeighted_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> gradgradMats_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> valvalMats_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> cubPointsPhysical_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> dataF_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> datavalVecF_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> dofPoints_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> dofPointsPhysical_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> dataUd_; + + bool verbose_; + +protected: +public: + // constructor + PDE_FEM() {} + // destructor + virtual ~PDE_FEM() {} + + virtual void Initialize(const Teuchos::RCP<const Teuchos::Comm<int>> &comm, + const Teuchos::RCP<Teuchos::ParameterList> &parlist, + const Teuchos::RCP<std::ostream> &outStream) + { + commPtr_ = comm; + parlist_ = parlist; + outStream_ = outStream; + myRank_ = comm->getRank(); + numProcs_ = comm->getSize(); + + verbose_ = parlist->sublist("PDE FEM").get("Verbose Output", false); + if (verbose_) + { + *outStream_ << "Total number of processors: " << numProcs_ << std::endl; + } + + basisOrder_ = parlist->sublist("PDE FEM").get<int>("Order of FE Discretization"); + } + + void SetDiscretization(const Teuchos::RCP<MeshManager<Real>> &meshMgr, + const std::vector<Teuchos::RCP<Intrepid::Basis<Real, Intrepid::FieldContainer<Real>>>> &basisPtrs) + { + meshMgr_ = meshMgr; + totalNumCells_ = meshMgr_->getNumCells(); + + basisPtrs_ = basisPtrs; + + // Retrieve some basic cell information. + cellType_ = (basisPtrs_[0])->getBaseCellTopology(); // get the cell type from any basis + spaceDim_ = cellType_.getDimension(); // retrieve spatial dimension + numNodesPerCell_ = cellType_.getNodeCount(); // retrieve number of nodes per cell + + sideDim_ = spaceDim_ - 1; + + coord_iface_ = Teuchos::rcp_dynamic_cast<Intrepid::DofCoordsInterface<Intrepid::FieldContainer<Real>>>(basisPtrs_[0]); + dofMgr_ = Teuchos::rcp(new DofManager<Real>(meshMgr_, basisPtrs_)); + } + + virtual void SetParallelStructure(void) + { + int cellSplit = parlist_->sublist("Geometry").get<int>("Partition type"); + /****************************************************/ + /*** Build parallel communication infrastructure. ***/ + /****************************************************/ + // Partition the cells in the mesh. We use a basic quasi-equinumerous partitioning, + // where the remainder, if any, is assigned to the last processor. + Teuchos::Array<int> myGlobIds_; + Teuchos::Array<int> cellOffsets_(numProcs_, 0); + int cellsPerProc = totalNumCells_ / numProcs_; + numCells_ = cellsPerProc; + switch (cellSplit) + { + case 0: + if (myRank_ == 0) + { // remainder in the first + numCells_ += totalNumCells_ % numProcs_; + } + for (int i = 1; i < numProcs_; ++i) + { + cellOffsets_[i] = cellOffsets_[i - 1] + cellsPerProc + (static_cast<int>(i == 1)) * (totalNumCells_ % numProcs_); + } + break; + case 1: + if (myRank_ == numProcs_ - 1) + { // remainder in the last + numCells_ += totalNumCells_ % numProcs_; + } + for (int i = 1; i < numProcs_; ++i) + { + cellOffsets_[i] = cellOffsets_[i - 1] + cellsPerProc; + } + break; + case 2: + if (myRank_ < (totalNumCells_ % numProcs_)) + { // spread remainder, starting from the first + numCells_++; + } + for (int i = 1; i < numProcs_; ++i) + { + cellOffsets_[i] = cellOffsets_[i - 1] + cellsPerProc + (static_cast<int>(i - 1 < (totalNumCells_ % numProcs_))); + } + break; + } + + cellDofs_ = *(dofMgr_->getCellDofs()); + numLocalDofs_ = cellDofs_.dimension(1); + if (verbose_) + { + *outStream_ << "Cell offsets across processors: " << cellOffsets_ + << std::endl; + } + for (int i = 0; i < numCells_; ++i) + { + myCellIds_.push_back(cellOffsets_[myRank_] + i); + for (int j = 0; j < numLocalDofs_; ++j) + { + myGlobIds_.push_back(cellDofs_(cellOffsets_[myRank_] + i, j)); + } + } + std::sort(myGlobIds_.begin(), myGlobIds_.end()); + myGlobIds_.erase(std::unique(myGlobIds_.begin(), myGlobIds_.end()), myGlobIds_.end()); + + // Build maps. + myOverlapMap_ = Teuchos::rcp(new Tpetra::Map<>(Teuchos::OrdinalTraits<Tpetra::global_size_t>::invalid(), + myGlobIds_, 0, commPtr_)); + //std::cout << std::endl << myOverlapMap_->getNodeElementList()<<std::endl; + /** One can also use the non-member function: + myOverlapMap_ = Tpetra::createNonContigMap<int,int>(myGlobIds_, commPtr_); + to build the overlap map. + **/ + myUniqueMap_ = Tpetra::createOneToOne<int, int>(myOverlapMap_); + //std::cout << std::endl << myUniqueMap_->getNodeElementList() << std::endl; + myCellMap_ = Teuchos::rcp(new Tpetra::Map<>(Teuchos::OrdinalTraits<Tpetra::global_size_t>::invalid(), + this->myCellIds_, 0, this->commPtr_)); + } + + virtual void SetUpLocalIntrepidArrays(void) + { + /****************************************************/ + /*** Set up local discretization data and arrays. ***/ + /****************************************************/ + // Cubature data. + Intrepid::DefaultCubatureFactory<Real> cubFactory; // create cubature factory + int cubDegree = 4; // set cubature degree, e.g., 2 + Teuchos::RCP<Intrepid::Cubature<Real>> cellCub = cubFactory.create(cellType_, cubDegree); // create default cubature + numCubPoints_ = cellCub->getNumPoints(); // retrieve number of cubature points + + lfs_ = dofMgr_->getLocalFieldSize(0); + // Discretization data. + cubPoints_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCubPoints_, spaceDim_)); + cubWeights_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCubPoints_)); + cubPointsPhysical_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, numCubPoints_, spaceDim_)); + dofPoints_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(lfs_, spaceDim_)); + dofPointsPhysical_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, lfs_, spaceDim_)); + cellNodes_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, numNodesPerCell_, spaceDim_)); + cellJac_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, numCubPoints_, spaceDim_, spaceDim_)); + cellJacInv_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, numCubPoints_, spaceDim_, spaceDim_)); + cellJacDet_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, numCubPoints_)); + cellWeightedMeasure_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, numCubPoints_)); + valReference_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(lfs_, numCubPoints_)); + gradReference_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(lfs_, numCubPoints_, spaceDim_)); + valPhysical_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, lfs_, numCubPoints_)); + gradPhysical_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, lfs_, numCubPoints_, spaceDim_)); + valPhysicalWeighted_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, lfs_, numCubPoints_)); + gradPhysicalWeighted_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, lfs_, numCubPoints_, spaceDim_)); + + // Geometric definition of the cells in the mesh, based on the cell-to-node map and the domain partition. + Intrepid::FieldContainer<Real> &nodes = *meshMgr_->getNodes(); + ctn_ = *meshMgr_->getCellToNodeMap(); + for (int i = 0; i < numCells_; ++i) + { + for (int j = 0; j < numNodesPerCell_; ++j) + { + for (int k = 0; k < spaceDim_; ++k) + { + (*cellNodes_)(i, j, k) = nodes(ctn_(myCellIds_[i], j), k); + } + } + } + + //Compute Intrepid Arrays + cellCub->getCubature(*cubPoints_, *cubWeights_); // retrieve cubature points and weights + (*basisPtrs_[0]).getValues(*gradReference_, *cubPoints_, Intrepid::OPERATOR_GRAD); // evaluate grad operator at cubature points + (*basisPtrs_[0]).getValues(*valReference_, *cubPoints_, Intrepid::OPERATOR_VALUE); // evaluate value operator at cubature points + + Intrepid::CellTools<Real>::setJacobian(*cellJac_, *cubPoints_, *cellNodes_, cellType_); // compute cell Jacobians + Intrepid::CellTools<Real>::setJacobianInv(*cellJacInv_, *cellJac_); // compute inverses of cell Jacobians + Intrepid::CellTools<Real>::setJacobianDet(*cellJacDet_, *cellJac_); // compute determinants of cell Jacobians + + Intrepid::FunctionSpaceTools::computeCellMeasure<Real>(*cellWeightedMeasure_, // compute weighted cell measure + *cellJacDet_, + *cubWeights_); + + Intrepid::FunctionSpaceTools::HGRADtransformGRAD<Real>(*gradPhysical_, // transform reference gradients into physical space + *cellJacInv_, + *gradReference_); + Intrepid::FunctionSpaceTools::multiplyMeasure<Real>(*gradPhysicalWeighted_, // multiply with weighted measure + *cellWeightedMeasure_, + *gradPhysical_); + + Intrepid::FunctionSpaceTools::HGRADtransformVALUE<Real>(*valPhysical_, // transform reference values into physical space + *valReference_); + Intrepid::FunctionSpaceTools::multiplyMeasure<Real>(*valPhysicalWeighted_, // multiply with weighted measure + *cellWeightedMeasure_, + *valPhysical_); + Intrepid::CellTools<Real>::mapToPhysicalFrame(*cubPointsPhysical_, // map reference cubature points to physical space + *cubPoints_, + *cellNodes_, + cellType_); + + ComputeCellTotalMeasures(); + } + + virtual void ComputeCellTotalMeasures(void) + { + for (int i = 0; i < numCells_; ++i) + { + Real temp = 0.0; + for (int j = 0; j < numCubPoints_; ++j) + { + temp += (*cellWeightedMeasure_)(i, j); + } + myCellMeasure_.push_back(temp); + } + std::cout << "First cell total measure: " << myCellMeasure_[0] << std::endl; + } + + virtual void ComputeLocalSystemMats(void) {} + + virtual void ComputeLocalForceVec(void) {} + + virtual void SetUpTrueDataOnNodes(void) {} + + virtual void AssembleSystemMats(void) + { + /****************************************/ + /*** Assemble global data structures. ***/ + /****************************************/ + // Assemble graph. + matGraph_ = Teuchos::rcp(new Tpetra::CrsGraph<>(myUniqueMap_, 0)); + Teuchos::ArrayRCP<const int> cellDofsArrayRCP = cellDofs_.getData(); + for (int i = 0; i < numCells_; ++i) + { + for (int j = 0; j < numLocalDofs_; ++j) + { + matGraph_->insertGlobalIndices(cellDofs_(myCellIds_[i], j), cellDofsArrayRCP(myCellIds_[i] * numLocalDofs_, numLocalDofs_)); + } + } + matGraph_->fillComplete(); + // Assemble matrices. + // Stiffness matrix A. + matA_ = Teuchos::rcp(new Tpetra::CrsMatrix<>(matGraph_)); + int numLocalMatEntries = numLocalDofs_ * numLocalDofs_; + Teuchos::ArrayRCP<const Real> gradgradArrayRCP = gradgradMats_->getData(); + for (int i = 0; i < numCells_; ++i) + { + for (int j = 0; j < numLocalDofs_; ++j) + { + matA_->sumIntoGlobalValues(cellDofs_(myCellIds_[i], j), + cellDofsArrayRCP(myCellIds_[i] * numLocalDofs_, numLocalDofs_), + gradgradArrayRCP(i * numLocalMatEntries + j * numLocalDofs_, numLocalDofs_)); + } + } + matA_->fillComplete(); + // Mass matrix M. + matM_ = Teuchos::rcp(new Tpetra::CrsMatrix<>(matGraph_)); + Teuchos::ArrayRCP<const Real> valvalArrayRCP = valvalMats_->getData(); + for (int i = 0; i < numCells_; ++i) + { + for (int j = 0; j < numLocalDofs_; ++j) + { + matM_->sumIntoGlobalValues(cellDofs_(myCellIds_[i], j), + cellDofsArrayRCP(myCellIds_[i] * numLocalDofs_, numLocalDofs_), + valvalArrayRCP(i * numLocalMatEntries + j * numLocalDofs_, numLocalDofs_)); + } + } + matM_->fillComplete(); + } + + virtual void AssembleRHSVector(void) + { + // Assemble vectors. + // vecF_ requires assembly using vecF_overlap_ and redistribution + vecF_ = Teuchos::rcp(new Tpetra::MultiVector<>(matA_->getRangeMap(), 1, true)); + vecF_overlap_ = Teuchos::rcp(new Tpetra::MultiVector<>(myOverlapMap_, 1, true)); + // assembly on the overlap map + for (int i = 0; i < numCells_; ++i) + { + for (int j = 0; j < numLocalDofs_; ++j) + { + vecF_overlap_->sumIntoGlobalValue(cellDofs_(myCellIds_[i], j), + 0, + (*datavalVecF_)[i * numLocalDofs_ + j]); + } + } + + //Assemble the point loads! + for (unsigned i = 0; i < myPointLoadDofs_.size(); ++i) + { + vecF_overlap_->sumIntoGlobalValue(myPointLoadDofs_[i], + 0, + myPointLoadVals_[i]); + } + + // change map + Tpetra::Export<> exporter(vecF_overlap_->getMap(), vecF_->getMap()); // redistribution + vecF_->doExport(*vecF_overlap_, exporter, Tpetra::ADD); // from the overlap map to the unique map + } + + virtual void AssembleDataVector(void) + { + // vecUd_ does not require assembly + vecUd_ = Teuchos::rcp(new Tpetra::MultiVector<>(matA_->getDomainMap(), 1, true)); + for (int i = 0; i < numCells_; ++i) + { + for (int j = 0; j < numLocalDofs_; ++j) + { + if (vecUd_->getMap()->isNodeGlobalElement(cellDofs_(myCellIds_[i], j))) + { + vecUd_->replaceGlobalValue(cellDofs_(myCellIds_[i], j), + 0, + (*dataUd_)[i * numLocalDofs_ + j]); + } + } + } + } + + // find the local index of a global cell + virtual int find_local_index(int globalCell) + { + return myCellMap_->getLocalElement(globalCell); + /* + for(int i=0; i<numCells_; i++) + { + if(myCellIds_[i] == globalCell) + return i; + } + return -1; +*/ + } + + // check to see if a globaldof is on dirichlet boundary + virtual bool check_myGlobalDof_on_boundary(int globalDof) + { + if (std::binary_search(myDirichletDofs_.begin(), myDirichletDofs_.end(), globalDof)) + { + return true; + } + return false; + } + + //create myBoundaryCellIds_ and myDirichletDofs_ + virtual void SetUpMyDBCInfo(bool ifUseCoordsToSpecifyBC, std::vector<int> dbc_side) + { + if (ifUseCoordsToSpecifyBC) + { + my_dbc_.resize(4); + my_dbc_ = {0, 1, 2, 3}; + } + else + { + my_dbc_ = dbc_side; + } + //Print to check my BC info + if (verbose_) + { + *outStream_ << "My dbc numbers: "; + for (unsigned i = 0; i < my_dbc_.size(); ++i) + { + *outStream_ << my_dbc_[i]; + } + *outStream_ << std::endl; + } + // + Teuchos::RCP<std::vector<std::vector<Intrepid::FieldContainer<int>>>> dirichletSideSets = meshMgr_->getSideSets(); + std::vector<std::vector<Intrepid::FieldContainer<int>>> &dss = *dirichletSideSets; + Teuchos::Array<int> mySortedCellIds_(myCellIds_); + std::sort(mySortedCellIds_.begin(), mySortedCellIds_.end()); + mySortedCellIds_.erase(std::unique(mySortedCellIds_.begin(), mySortedCellIds_.end()), mySortedCellIds_.end()); + + myBoundaryCellIds_.resize(dss[0].size()); + for (int i = 0; i < static_cast<int>(dss[0].size()); ++i) + { + for (int j = 0; j < dss[0][i].dimension(0); ++j) + { + if (std::binary_search(mySortedCellIds_.begin(), mySortedCellIds_.end(), dss[0][i](j))) + { + myBoundaryCellIds_[i].push_back(dss[0][i](j)); + } + } + } + + cte_ = *(meshMgr_->getCellToEdgeMap()); + Intrepid::FieldContainer<int> &nodeDofs = *(dofMgr_->getNodeDofs()); + //Intrepid::FieldContainer<int> &edgeDofs = *(dofMgr_->getEdgeDofs()); + std::vector<std::vector<int>> dofTags = (basisPtrs_[0])->getAllDofTags(); + int numDofsPerNode = 0; + int numDofsPerEdge = 0; + for (int j = 0; j < (basisPtrs_[0])->getCardinality(); ++j) + { + if (dofTags[j][0] == 0) + { + numDofsPerNode = dofTags[j][3]; + } + if (dofTags[j][0] == 1) + { + numDofsPerEdge = dofTags[j][3]; + } + } + // vector field + int nfields = basisPtrs_.size(); + numDofsPerNode = numDofsPerNode * nfields; + numDofsPerEdge = numDofsPerEdge * nfields; + + Intrepid::FieldContainer<Real> &nodes = *meshMgr_->getNodes(); + int n_dbc = my_dbc_.size(); + for (int i = 0; i < static_cast<int>(myBoundaryCellIds_.size()); ++i) + { + bool isdbc = false; + for (int i_dbc = 0; i_dbc < n_dbc; i_dbc++) + { + if (i == my_dbc_[i_dbc]) + { + isdbc = true; + break; + } + } + if (!isdbc) + continue; + + for (int j = 0; j < myBoundaryCellIds_[i].size(); ++j) + { + /* + int ifDBCCell = check_DBC_By_Coords(myBoundaryCellIds_[i][j], i); + if(ifDBCCell < 1) + continue; +*/ + std::vector<Real> x(spaceDim_); + const CellTopologyData *ctd = cellType_.getCellTopologyData(); + Teuchos::ArrayView<unsigned> locNodes(const_cast<unsigned *>(ctd->subcell[spaceDim_ - 1][i].node), cellType_.getVertexCount(spaceDim_ - 1, i)); + for (int l = 0; l < static_cast<int>(cellType_.getVertexCount(spaceDim_ - 1, i)); ++l) + { + x[0] = nodes(ctn_(myBoundaryCellIds_[i][j], locNodes[l]), 0); + x[1] = nodes(ctn_(myBoundaryCellIds_[i][j], locNodes[l]), 1); + // use coordinates to check if a DOF is DBC DOF + int ifDBCNode = check_DBC_Coords_Range(x); + if (ifDBCNode < 0) + { + continue; + } + else if (ifDBCNode == 0) + { + if (verbose_) + { + *outStream_ << "DBC node: " + << ctn_(myBoundaryCellIds_[i][j], locNodes[l]) + << ", fixing X direction" << std::endl; + } + myDirichletDofs_.push_back(nodeDofs(ctn_(myBoundaryCellIds_[i][j], locNodes[l]), 0)); + } + else if (ifDBCNode == 1 && numDofsPerNode >= 2) + { + if (verbose_) + { + *outStream_ << "DBC node: " + << ctn_(myBoundaryCellIds_[i][j], locNodes[l]) + << ", fixing Y direction" << std::endl; + } + myDirichletDofs_.push_back(nodeDofs(ctn_(myBoundaryCellIds_[i][j], locNodes[l]), 1)); + } + else + { + if (verbose_) + { + *outStream_ << "DBC node: " + << ctn_(myBoundaryCellIds_[i][j], locNodes[l]) + << ", fixing ALL direction" << std::endl; + } + for (int k = 0; k < numDofsPerNode; ++k) + { + myDirichletDofs_.push_back(nodeDofs(ctn_(myBoundaryCellIds_[i][j], locNodes[l]), k)); + } + } + } + // edge dofs are NOT in use + /* + for (int k=0; k<numDofsPerEdge; ++k) { + myDirichletDofs_.push_back(edgeDofs(cte_(myBoundaryCellIds_[i][j], i), k)); + } + */ + } + } + std::sort(myDirichletDofs_.begin(), myDirichletDofs_.end()); + myDirichletDofs_.erase(std::unique(myDirichletDofs_.begin(), myDirichletDofs_.end()), myDirichletDofs_.end()); + } + + virtual int check_DBC_Coords_Range(const std::vector<Real> &x) const + { + // return value : + // -1: not a DBC node + // 0: x direction fixed + // 1: y direction fixed + // 5: both x, y direction are fixed + return 5; + } + // + // + // + virtual void process_loading_information(const Teuchos::RCP<Teuchos::ParameterList> &parlist) {} + // + //note that the point load is only allowed to applied on the boundary, not inside the body! 2D only + virtual void check_and_Apply_PointLoad_By_Coords(int globalCellNum, int pointload_bc) + { + Intrepid::FieldContainer<Real> &nodes = *meshMgr_->getNodes(); + const CellTopologyData *ctd = cellType_.getCellTopologyData(); + Teuchos::ArrayView<unsigned> locNodes(const_cast<unsigned *>(ctd->subcell[spaceDim_ - 1][pointload_bc].node), cellType_.getVertexCount(spaceDim_ - 1, pointload_bc)); + std::vector<Real> x1(spaceDim_); + std::vector<Real> x2(spaceDim_); + std::vector<int> localNodeNum(2); + x1[0] = nodes(ctn_(globalCellNum, locNodes[0]), 0); + x1[1] = nodes(ctn_(globalCellNum, locNodes[0]), 1); + x2[0] = nodes(ctn_(globalCellNum, locNodes[1]), 0); + x2[1] = nodes(ctn_(globalCellNum, locNodes[1]), 1); + ApplyPointLoad(pointload_bc, globalCellNum, localNodeNum, x1, x2); + } + + virtual void ApplyPointLoad(const int pointload_bc, + const int globalCellNum, + const std::vector<int> &localNodeNum, + const std::vector<Real> &coord1, + const std::vector<Real> &coord2) + { + //Intrepid::FieldContainer<int> &nodeDofs = *(dofMgr_->getNodeDofs()); + //bool isLoadPosContainedInCurrentSegment = false; + //int whichNodeIsCloserToPos = -1; + return; + } + // + // + // + virtual void EnforceDBC(void) + { + // Apply Dirichlet conditions. + // zero out row and column, make matrix symmetric + Teuchos::RCP<Tpetra::Details::DefaultTypes::node_type> node = matA_->getNode(); + matA_dirichlet_ = matA_->clone(node); + matM_dirichlet_ = matM_->clone(node); + vecF_dirichlet_ = Teuchos::rcp(new Tpetra::MultiVector<>(matA_->getRangeMap(), 1, true)); + Tpetra::deep_copy(*vecF_dirichlet_, *vecF_); + + matA_dirichlet_->resumeFill(); + matM_dirichlet_->resumeFill(); + + int gDof; + for (int i = 0; i < numCells_; i++) + { + for (int j = 0; j < numLocalDofs_; j++) + { + gDof = cellDofs_(myCellIds_[i], j); + if (myUniqueMap_->isNodeGlobalElement(gDof) && check_myGlobalDof_on_boundary(gDof)) + { + size_t numRowEntries = matA_dirichlet_->getNumEntriesInGlobalRow(gDof); + Teuchos::Array<int> indices(numRowEntries, 0); + Teuchos::Array<Real> values(numRowEntries, 0); + Teuchos::Array<Real> canonicalValues(numRowEntries, 0); + Teuchos::Array<Real> zeroValues(numRowEntries, 0); + matA_dirichlet_->getGlobalRowCopy(gDof, indices, values, numRowEntries); + matM_dirichlet_->getGlobalRowCopy(gDof, indices, values, numRowEntries); + for (int k = 0; k < indices.size(); k++) + { + if (indices[k] == gDof) + { + canonicalValues[k] = 1.0; + } + } + matA_dirichlet_->replaceGlobalValues(gDof, indices, canonicalValues); + matM_dirichlet_->replaceGlobalValues(gDof, indices, zeroValues); + vecF_dirichlet_->replaceGlobalValue(gDof, 0, 0); + } + + if (!check_myGlobalDof_on_boundary(gDof)) + { + size_t numDBCDofs = myDirichletDofs_.size(); + Teuchos::Array<int> indices(numDBCDofs, 0); + Teuchos::Array<Real> zeroValues(numDBCDofs, 0); + for (int k = 0; k < indices.size(); k++) + { + indices[k] = myDirichletDofs_[k]; + } + matA_dirichlet_->replaceGlobalValues(gDof, indices, zeroValues); + matM_dirichlet_->replaceGlobalValues(gDof, indices, zeroValues); + } + } + } + matA_dirichlet_->fillComplete(); + matM_dirichlet_->fillComplete(); + } + + virtual void MatrixRemoveDBC(void) + { + // Apply Dirichlet conditions. + // zero out row and column, make matrix symmetric + Teuchos::RCP<Tpetra::Details::DefaultTypes::node_type> node = matA_->getNode(); + matA_dirichlet_ = matA_->clone(node); + matM_dirichlet_ = matM_->clone(node); + + matA_dirichlet_->resumeFill(); + matM_dirichlet_->resumeFill(); + + int gDof; + for (int i = 0; i < numCells_; i++) + { + for (int j = 0; j < numLocalDofs_; j++) + { + gDof = cellDofs_(myCellIds_[i], j); + if (myUniqueMap_->isNodeGlobalElement(gDof) && check_myGlobalDof_on_boundary(gDof)) + { + size_t numRowEntries = matA_dirichlet_->getNumEntriesInGlobalRow(gDof); + Teuchos::Array<int> indices(numRowEntries, 0); + Teuchos::Array<Real> values(numRowEntries, 0); + Teuchos::Array<Real> canonicalValues(numRowEntries, 0); + Teuchos::Array<Real> zeroValues(numRowEntries, 0); + matA_dirichlet_->getGlobalRowCopy(gDof, indices, values, numRowEntries); + matM_dirichlet_->getGlobalRowCopy(gDof, indices, values, numRowEntries); + for (int k = 0; k < indices.size(); k++) + { + if (indices[k] == gDof) + { + canonicalValues[k] = 1.0; + } + } + matA_dirichlet_->replaceGlobalValues(gDof, indices, canonicalValues); + matM_dirichlet_->replaceGlobalValues(gDof, indices, zeroValues); + } + + if (!check_myGlobalDof_on_boundary(gDof)) + { + size_t numDBCDofs = myDirichletDofs_.size(); + Teuchos::Array<int> indices(numDBCDofs, 0); + Teuchos::Array<Real> zeroValues(numDBCDofs, 0); + for (int k = 0; k < indices.size(); k++) + { + indices[k] = myDirichletDofs_[k]; + } + matA_dirichlet_->replaceGlobalValues(gDof, indices, zeroValues); + matM_dirichlet_->replaceGlobalValues(gDof, indices, zeroValues); + } + } + } + matA_dirichlet_->fillComplete(); + matM_dirichlet_->fillComplete(); + } + + virtual void VectorRemoveDBC(void) + { + // Apply Dirichlet conditions. + vecF_dirichlet_ = Teuchos::rcp(new Tpetra::MultiVector<>(matA_->getRangeMap(), 1, true)); + Tpetra::deep_copy(*vecF_dirichlet_, *vecF_); + + int gDof(0); + for (int i = 0; i < numCells_; i++) + { + for (int j = 0; j < numLocalDofs_; j++) + { + gDof = cellDofs_(myCellIds_[i], j); + if (myUniqueMap_->isNodeGlobalElement(gDof) && check_myGlobalDof_on_boundary(gDof)) + { + vecF_dirichlet_->replaceGlobalValue(gDof, 0, 0); + } + } + } + } + /* + virtual void GenerateTransposedMats() { + // Create matrix transposes. + Tpetra::RowMatrixTransposer<> transposerA(matA_dirichlet_); + Tpetra::RowMatrixTransposer<> transposerM(matM_dirichlet_); + matA_dirichlet_trans_ = transposerA.createTranspose(); + matM_dirichlet_trans_ = transposerM.createTranspose(); + } +*/ + + virtual void ConstructSolvers(void) + { + // Construct solver using Amesos2 factory. + try + { + solverA_ = Amesos2::create<Tpetra::CrsMatrix<>, Tpetra::MultiVector<>>("KLU2", matA_dirichlet_); + } + catch (std::invalid_argument e) + { + std::cout << e.what() << std::endl; + } + solverA_->numericFactorization(); + } + + /* + virtual void ConstructAdjointSolvers() { + // Construct solver using Amesos2 factory. + try{ + solverA_trans_ = Amesos2::create< Tpetra::CrsMatrix<>,Tpetra::MultiVector<> >("KLU2", matA_dirichlet_trans_); + } catch (std::invalid_argument e) { + std::cout << e.what() << std::endl; + } + solverA_trans_->numericFactorization(); + } +*/ + + Teuchos::RCP<Tpetra::CrsMatrix<>> getMatA(const bool &transpose = false) const + { + if (transpose) + { + //return matA_dirichlet_trans_; + return matA_dirichlet_; + } + else + { + return matA_dirichlet_; + } + } + + Teuchos::RCP<Tpetra::CrsMatrix<>> getMatB(const bool &transpose = false) const + { + if (transpose) + { + //return matM_dirichlet_trans_; + return matM_dirichlet_; + } + else + { + return matM_dirichlet_; + } + } + + Teuchos::RCP<Tpetra::CrsMatrix<>> getMatM() const + { + return matM_; + } + + Teuchos::RCP<Tpetra::CrsMatrix<>> getMatR() const + { + return matM_; + } + + Teuchos::RCP<Tpetra::MultiVector<>> getVecUd() const + { + return vecUd_; + } + + Teuchos::RCP<Tpetra::MultiVector<>> getVecF() const + { + return vecF_dirichlet_; + } + + Teuchos::RCP<Amesos2::Solver<Tpetra::CrsMatrix<>, Tpetra::MultiVector<>>> getSolver(const bool &transpose = false) const + { + if (transpose) + { + //return solverA_trans_; + return solverA_; + } + else + { + return solverA_; + } + } + + virtual Real funcTarget(const Real &x1, const Real &x2) const { return 0.0; } + + void printMeshData(std::ostream &outStream) const + { + + Teuchos::RCP<Intrepid::FieldContainer<Real>> nodesPtr = meshMgr_->getNodes(); + Teuchos::RCP<Intrepid::FieldContainer<int>> cellToNodeMapPtr = meshMgr_->getCellToNodeMap(); + Intrepid::FieldContainer<Real> &nodes = *nodesPtr; + Intrepid::FieldContainer<int> &cellToNodeMap = *cellToNodeMapPtr; + outStream << "Number of nodes = " << meshMgr_->getNumNodes() << std::endl; + outStream << "Number of cells = " << meshMgr_->getNumCells() << std::endl; + outStream << "Number of edges = " << meshMgr_->getNumEdges() << std::endl; + // Print mesh to file. + if ((myRank_ == 0)) + { + std::ofstream meshfile; + meshfile.open("cell_to_node_quad.txt"); + for (int i = 0; i < cellToNodeMap.dimension(0); ++i) + { + for (int j = 0; j < cellToNodeMap.dimension(1); ++j) + { + meshfile << cellToNodeMap(i, j) << " "; + } + meshfile << std::endl; + } + meshfile.close(); + + meshfile.open("cell_to_node_tri.txt"); + for (int i = 0; i < cellToNodeMap.dimension(0); ++i) + { + for (int j = 0; j < 3; ++j) + { + meshfile << cellToNodeMap(i, j) << " "; + } + meshfile << std::endl; + for (int j = 2; j < 5; ++j) + { + meshfile << cellToNodeMap(i, j % 4) << " "; + } + meshfile << std::endl; + } + meshfile.close(); + + meshfile.open("nodes.txt"); + meshfile.precision(16); + for (int i = 0; i < nodes.dimension(0); ++i) + { + for (int j = 0; j < nodes.dimension(1); ++j) + { + meshfile << std::scientific << nodes(i, j) << " "; + } + meshfile << std::endl; + } + meshfile.close(); + /* This somewhat clunky output is for gnuplot. + meshfile.open("mesh.txt"); + for (int i=0; i<cellToNodeMap.dimension(0); ++i) { + meshfile << nodes(cellToNodeMap(i,0), 0) << " " << nodes(cellToNodeMap(i,0), 1) << std::endl; + meshfile << nodes(cellToNodeMap(i,1), 0) << " " << nodes(cellToNodeMap(i,1), 1) << std::endl; + meshfile << nodes(cellToNodeMap(i,2), 0) << " " << nodes(cellToNodeMap(i,2), 1) << std::endl; + meshfile << nodes(cellToNodeMap(i,3), 0) << " " << nodes(cellToNodeMap(i,3), 1) << std::endl; + meshfile << nodes(cellToNodeMap(i,0), 0) << " " << nodes(cellToNodeMap(i,0), 1) << std::endl; + meshfile << nodes(cellToNodeMap(i,1), 0) << " " << nodes(cellToNodeMap(i,1), 1) << std::endl; + meshfile << nodes(cellToNodeMap(i,2), 0) << " " << nodes(cellToNodeMap(i,2), 1) << std::endl; + } + meshfile.close(); + */ + } //myRank 0 print + } // prinf function end + + void outputTpetraData() const + { + Tpetra::MatrixMarket::Writer<Tpetra::CrsMatrix<>> matWriter; + matWriter.writeSparseFile("stiffness_mat", matA_); + matWriter.writeSparseFile("dirichlet_mat", matA_dirichlet_); + matWriter.writeSparseFile("mass_mat", matM_); + matWriter.writeDenseFile("Ud_vec", vecUd_); + } + + void outputTpetraVector(const Teuchos::RCP<const Tpetra::MultiVector<>> &vec, + const std::string &filename) const + { + Tpetra::MatrixMarket::Writer<Tpetra::CrsMatrix<>> vecWriter; + vecWriter.writeDenseFile(filename, vec); + } + + // ACCESSOR FUNCTIONS + Teuchos::RCP<MeshManager<Real>> &GetMeshManager(void) + { + TEUCHOS_TEST_FOR_EXCEPTION(meshMgr_ == Teuchos::null, std::logic_error, + ">>> (PDE_FEM::GetMeshManager): MeshManager not initialized!"); + return meshMgr_; + } + + Teuchos::RCP<Intrepid::Basis<Real, Intrepid::FieldContainer<Real>>> &GetBasisPtr(const int ind) + { + TEUCHOS_TEST_FOR_EXCEPTION(ind > spaceDim_ - 1 || ind < 0, std::logic_error, + ">>> (PDE_FEM::GetBasisPtr): ind out of bounds!"); + TEUCHOS_TEST_FOR_EXCEPTION(basisPtrs_.size() == 0, std::logic_error, + ">>> (PDE_FEM::GetBasisPtr): BasisPntrs not initialized!"); + return basisPtrs_[ind]; + } + + int GetBasisOrder(void) const + { + return basisOrder_; + } + + int GetSpaceDim(void) const + { + return spaceDim_; + } + + int GetNumCells(void) const + { + return numCells_; + } + + int GetNumLocalDofs(void) const + { + return numLocalDofs_; + } + + int GetNumCubPoints(void) const + { + return numCubPoints_; + } + + int GetLocalFieldSize(void) const + { + return lfs_; + } + +}; // class PDE_FEM + +#endif diff --git a/tlnos/src/TOOLS/bfsc_dof_mesh.hpp b/tlnos/src/TOOLS/bfsc_dof_mesh.hpp new file mode 100644 index 0000000000000000000000000000000000000000..29089d28664b6968c9f497f884b887cbfb76ebdd --- /dev/null +++ b/tlnos/src/TOOLS/bfsc_dof_mesh.hpp @@ -0,0 +1,554 @@ +// @HEADER +// ************************************************************************ +// +// Rapid Optimization Library (ROL) Package +// Copyright (2014) Sandia Corporation +// +// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +// license for use of this work by or on behalf of the U.S. Government. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact lead developers: +// Drew Kouri (dpkouri@sandia.gov) and +// Denis Ridzal (dridzal@sandia.gov) +// +// ************************************************************************ +// @HEADER + +/*! \file DofManager.hpp + \brief Sets up data structures for the indexing of the global degrees + of freedom (Dof's). +*/ + +#include "Teuchos_ParameterList.hpp" +#include "Intrepid_FieldContainer.hpp" + +template <class Real> +class DofManager +{ + + typedef Intrepid::FieldContainer<Real> FCR; + typedef Intrepid::FieldContainer<int> FCI; + + enum FieldType + { + VELX, + VELY, + PRES + }; + + /* Backward-facing step geometry. + + *************************************************** + * * * * + * 3 * 4 * 5 * + * * * * + ********** * * * * * * * * * * * * * * * * * * * ** + * 1 * 2 * + * * * + ****************************************** +*/ + +private: + Real channelH_; // channel height (height of regions 1+4) + Real channelW_; // channel width (width of regions 3+4+5) + Real stepH_; // step height (height of region 1) + Real stepW_; // step width (width of region 3) + Real observeW_; // width of observation region (width of region 1) + + int nx1_; + int nx2_; + int nx3_; + int nx4_; + int nx5_; + int ny1_; + int ny2_; + int ny3_; + int ny4_; + int ny5_; + + int ref_; + + int numCells_; + int numNodes_; + int numEdges_; + int numMeshEntities_; + + FCR meshNodes_; + FCI meshCellToNodeMap_; + FCI meshCellToEdgeMap_; + + int numDofs_; + int numPres_; + int numVelX_; + int numVelY_; + int numLocalDofs_; + int numLocalPres_; + int numLocalVelX_; + int numLocalVelY_; + + FCI dofArray_; + FCI cellDofs_; + FCI cellPres_; + FCI cellVelX_; + FCI cellVelY_; + +public: + DofManager(Teuchos::ParameterList &parlist) + { + // Geometry data. + channelH_ = parlist.sublist("Navier Stokes").get("Channel height", 1.0); + channelW_ = parlist.sublist("Navier Stokes").get("Channel width", 8.0); + stepH_ = parlist.sublist("Navier Stokes").get("Step height", 0.5); + stepW_ = parlist.sublist("Navier Stokes").get("Step width", 1.0); + observeW_ = parlist.sublist("Navier Stokes").get("Observation width", 3.0); + // Mesh data. + ref_ = parlist.sublist("Navier Stokes").get("Refinement level", 1); + nx1_ = parlist.sublist("Navier Stokes").get("Observation region NX", 4 * ref_); + ny1_ = parlist.sublist("Navier Stokes").get("Observation region NY", 5 * ref_); + nx2_ = parlist.sublist("Navier Stokes").get("Laminar flow region NX", 2 * ref_); + ny2_ = ny1_; + nx3_ = parlist.sublist("Navier Stokes").get("Inflow region NX", 1 * ref_); + ny3_ = parlist.sublist("Navier Stokes").get("Inflow region NY", 2 * ref_); + nx4_ = nx1_; + ny4_ = ny3_; + nx5_ = nx2_; + ny5_ = ny3_; + numCells_ = (nx1_ + nx2_) * ny1_ + (nx3_ + nx1_ + nx2_) * ny3_; + numNodes_ = (nx1_ + nx2_ + 1) * ny1_ + (nx3_ + nx1_ + nx2_ + 1) * (ny3_ + 1); + numEdges_ = (2 * (nx1_ + nx2_) + 1) * ny1_ + (2 * (nx3_ + nx1_ + nx2_) + 1) * ny3_ + (nx3_ + nx1_ + nx2_); + numMeshEntities_ = numCells_ + numNodes_ + numEdges_; + // Mesh and Dof data structures. + numLocalPres_ = 4; + numLocalVelX_ = 9; + numLocalVelY_ = 9; + numLocalDofs_ = numLocalPres_ + numLocalVelX_ + numLocalVelY_; + computeMeshNodes(meshNodes_); + computeMeshCellToNodeMap(meshCellToNodeMap_); + computeMeshCellToEdgeMap(meshCellToEdgeMap_); + computeDofArray(dofArray_, numDofs_); + computeCellDofs(cellDofs_, dofArray_, meshCellToNodeMap_, meshCellToEdgeMap_); + computeCellPres(cellPres_, cellDofs_); + computeCellVelX(cellVelX_, cellDofs_); + computeCellVelY(cellVelY_, cellDofs_); + } + + void computeMeshNodes(FCR &nodes) const + { + + Real dy1 = stepH_ / ny1_; + Real dy3 = (channelH_ - stepH_) / ny3_; + Real dx1 = observeW_ / nx1_; + Real dx2 = (channelW_ - stepW_ - observeW_) / nx2_; + Real dx3 = stepW_ / nx3_; + int nodeCt = 0; + nodes.resize(numNodes_, 2); + + // bottom region + for (int j = 0; j < ny1_; ++j) + { + for (int i = 0; i <= nx1_; ++i) + { + nodes(nodeCt, 0) = stepW_ + i * dx1; + nodes(nodeCt, 1) = j * dy1; + ++nodeCt; + } + for (int i = 0; i < nx2_; ++i) + { + nodes(nodeCt, 0) = stepW_ + observeW_ + (i + 1) * dx2; + nodes(nodeCt, 1) = j * dy1; + ++nodeCt; + } + } + + // top region + for (int j = 0; j <= ny3_; ++j) + { + for (int i = 0; i <= nx3_; ++i) + { + nodes(nodeCt, 0) = i * dx3; + nodes(nodeCt, 1) = stepH_ + j * dy3; + ++nodeCt; + } + for (int i = 0; i < nx1_; ++i) + { + nodes(nodeCt, 0) = stepW_ + (i + 1) * dx1; + nodes(nodeCt, 1) = stepH_ + j * dy3; + ++nodeCt; + } + for (int i = 0; i < nx2_; ++i) + { + nodes(nodeCt, 0) = stepW_ + observeW_ + (i + 1) * dx2; + nodes(nodeCt, 1) = stepH_ + j * dy3; + ++nodeCt; + } + } + + } // computeMeshNodes + + void computeMeshCellToNodeMap(FCI &ctn) + { + + int cellCt = 0; + ctn.resize(numCells_, 4); + + // bottom region + for (int j = 0; j < ny1_ - 1; ++j) + { + for (int i = 0; i < nx1_ + nx2_; ++i) + { + ctn(cellCt, 0) = j * (nx1_ + nx2_ + 1) + i; + ctn(cellCt, 1) = j * (nx1_ + nx2_ + 1) + (i + 1); + ctn(cellCt, 2) = (j + 1) * (nx1_ + nx2_ + 1) + (i + 1); + ctn(cellCt, 3) = (j + 1) * (nx1_ + nx2_ + 1) + i; + ++cellCt; + } + } + + // transition region + for (int i = 0; i < nx1_ + nx2_; ++i) + { + ctn(cellCt, 0) = (ny1_ - 1) * (nx1_ + nx2_ + 1) + i; + ctn(cellCt, 1) = (ny1_ - 1) * (nx1_ + nx2_ + 1) + (i + 1); + ctn(cellCt, 2) = ny1_ * (nx1_ + nx2_ + 1) + nx3_ + (i + 1); + ctn(cellCt, 3) = ny1_ * (nx1_ + nx2_ + 1) + nx3_ + i; + ++cellCt; + } + + // top region + for (int j = 0; j < ny3_; ++j) + { + for (int i = 0; i < nx3_ + nx1_ + nx2_; ++i) + { + ctn(cellCt, 0) = ny1_ * (nx1_ + nx2_ + 1) + j * (nx3_ + nx1_ + nx2_ + 1) + i; + ctn(cellCt, 1) = ny1_ * (nx1_ + nx2_ + 1) + j * (nx3_ + nx1_ + nx2_ + 1) + (i + 1); + ctn(cellCt, 2) = ny1_ * (nx1_ + nx2_ + 1) + (j + 1) * (nx3_ + nx1_ + nx2_ + 1) + (i + 1); + ctn(cellCt, 3) = ny1_ * (nx1_ + nx2_ + 1) + (j + 1) * (nx3_ + nx1_ + nx2_ + 1) + i; + ++cellCt; + } + } + + } // computeMeshCellToNodeMap + + void computeMeshCellToEdgeMap(FCI &cte) + { + + int cellCt = 0; + cte.resize(numCells_, 4); + + // bottom region + for (int j = 0; j < ny1_ - 1; ++j) + { + for (int i = 0; i < nx1_ + nx2_; ++i) + { + cte(cellCt, 0) = j * (2 * (nx1_ + nx2_) + 1) + i; + cte(cellCt, 1) = j * (2 * (nx1_ + nx2_) + 1) + (nx1_ + nx2_) + (i + 1); + cte(cellCt, 2) = (j + 1) * (2 * (nx1_ + nx2_) + 1) + i; + cte(cellCt, 3) = j * (2 * (nx1_ + nx2_) + 1) + (nx1_ + nx2_) + i; + ++cellCt; + } + } + + // transition region + for (int i = 0; i < nx1_ + nx2_; ++i) + { + cte(cellCt, 0) = (ny1_ - 1) * (2 * (nx1_ + nx2_) + 1) + i; + cte(cellCt, 1) = (ny1_ - 1) * (2 * (nx1_ + nx2_) + 1) + (nx1_ + nx2_) + (i + 1); + cte(cellCt, 2) = ny1_ * (2 * (nx1_ + nx2_) + 1) + nx3_ + i; + cte(cellCt, 3) = (ny1_ - 1) * (2 * (nx1_ + nx2_) + 1) + (nx1_ + nx2_) + i; + ++cellCt; + } + + // top region + for (int j = 0; j < ny3_; ++j) + { + for (int i = 0; i < nx3_ + nx1_ + nx2_; ++i) + { + cte(cellCt, 0) = ny1_ * (2 * (nx1_ + nx2_) + 1) + j * (2 * (nx3_ + nx1_ + nx2_) + 1) + i; + cte(cellCt, 1) = ny1_ * (2 * (nx1_ + nx2_) + 1) + j * (2 * (nx3_ + nx1_ + nx2_) + 1) + (nx3_ + nx1_ + nx2_) + (i + 1); + cte(cellCt, 2) = ny1_ * (2 * (nx1_ + nx2_) + 1) + (j + 1) * (2 * (nx3_ + nx1_ + nx2_) + 1) + i; + cte(cellCt, 3) = ny1_ * (2 * (nx1_ + nx2_) + 1) + j * (2 * (nx3_ + nx1_ + nx2_) + 1) + (nx3_ + nx1_ + nx2_) + i; + ++cellCt; + } + } + + } // computeMeshCellToEdgeMap + + void computeDofArray(FCI &dof, int &numDofs, const int &globOrder = 1) + { + + dof.resize(numMeshEntities_, 3); + int dofCt = -1; + + if (globOrder == 1) + { + // + // This is the independent node id --> edge id --> cell id ordering: + // + // VelX VelY Pres + // -------------- + // n1 1 1 1 + // n2 1 1 1 + // ... + // e1 1 1 0 + // e2 1 1 0 + // ... + // c1 1 1 0 + // c2 1 1 0 + // ... + // + for (int i = 0; i < numNodes_; ++i) + { + // dof(i, 1) --> 1 Velocity X + // dof(i, 1) --> 1 Velocity Y + // dof(i, 2) --> 1 Pressure + dof(i, 0) = ++dofCt; // VelX + dof(i, 1) = ++dofCt; // VelY + dof(i, 2) = ++dofCt; // Pres + } + for (int i = numNodes_; i < numNodes_ + numEdges_; ++i) + { + // dof(i, 1) --> 1 Velocity X + // dof(i, 1) --> 1 Velocity Y + // dof(i, 2) --> 0 Pressure + dof(i, 0) = ++dofCt; // VelX + dof(i, 1) = ++dofCt; // VelY + dof(i, 2) = -1; + } + for (int i = numNodes_ + numEdges_; i < numMeshEntities_; ++i) + { + // dof(i, 1) --> 1 Velocity X + // dof(i, 1) --> 1 Velocity Y + // dof(i, 2) --> 0 Pressure + dof(i, 0) = ++dofCt; // VelX + dof(i, 1) = ++dofCt; // VelY + dof(i, 2) = -1; + } + } + else if (globOrder == 2) + { + // + // This is the cell-driven cell node id --> cell edge id --> cell id ordering: + // + // VelX VelY Pres + // -------------- + // cell 1 + // n1 1 1 1 + // n2 1 1 1 + // ... + // e1 1 1 0 + // e2 1 1 0 + // ... + // c1 1 1 0 + // c2 1 1 0 + // ... + // cell 2 + // ... + // (unique ids only, of course) + // + // TO BE IMPLEMENTED!!! + } + numDofs = dofCt + 1; + } // computeDofArray + + void computeCellDofs(FCI &cdofs, const FCI &dofs, const FCI &ctn, const FCI &cte) + { + + cdofs.resize(numCells_, numLocalDofs_); + + for (int i = 0; i < numCells_; ++i) + { + int ct = -1; + int gid0 = ctn(i, 0); + int gid1 = ctn(i, 1); + int gid2 = ctn(i, 2); + int gid3 = ctn(i, 3); + int gid4 = numNodes_ + cte(i, 0); + int gid5 = numNodes_ + cte(i, 1); + int gid6 = numNodes_ + cte(i, 2); + int gid7 = numNodes_ + cte(i, 3); + int gid8 = numNodes_ + numEdges_ + i; + cdofs(i, ++ct) = dofs(gid0, 0); + cdofs(i, ++ct) = dofs(gid0, 1); + cdofs(i, ++ct) = dofs(gid0, 2); + cdofs(i, ++ct) = dofs(gid1, 0); + cdofs(i, ++ct) = dofs(gid1, 1); + cdofs(i, ++ct) = dofs(gid1, 2); + cdofs(i, ++ct) = dofs(gid2, 0); + cdofs(i, ++ct) = dofs(gid2, 1); + cdofs(i, ++ct) = dofs(gid2, 2); + cdofs(i, ++ct) = dofs(gid3, 0); + cdofs(i, ++ct) = dofs(gid3, 1); + cdofs(i, ++ct) = dofs(gid3, 2); + cdofs(i, ++ct) = dofs(gid4, 0); + cdofs(i, ++ct) = dofs(gid4, 1); + cdofs(i, ++ct) = dofs(gid5, 0); + cdofs(i, ++ct) = dofs(gid5, 1); + cdofs(i, ++ct) = dofs(gid6, 0); + cdofs(i, ++ct) = dofs(gid6, 1); + cdofs(i, ++ct) = dofs(gid7, 0); + cdofs(i, ++ct) = dofs(gid7, 1); + cdofs(i, ++ct) = dofs(gid8, 0); + cdofs(i, ++ct) = dofs(gid8, 1); + } + } // computeCellDofs + + void computeCellPres(FCI &cpres, const FCI &cdofs) + { + cpres.resize(numCells_, numLocalPres_); + for (int i = 0; i < numCells_; ++i) + { + for (int j = 0; j < numLocalPres_; ++j) + { + cpres(i, j) = cdofs(i, j * 3 + 2); + } + } + } // computeCellPres + + void computeCellVelX(FCI &cvelx, const FCI &cdofs) + { + cvelx.resize(numCells_, numLocalVelX_); + for (int i = 0; i < numCells_; ++i) + { + for (int j = 0; j < numLocalPres_; ++j) + { + cvelx(i, j) = cdofs(i, j * 3); + } + for (int k = 0; k < numLocalVelX_ - numLocalPres_; ++k) + { + cvelx(i, k + numLocalPres_) = cdofs(i, 4 * 3 + k * 2); + } + } + } // computeCellVelX + + void computeCellVelY(FCI &cvely, const FCI &cdofs) + { + cvely.resize(numCells_, numLocalVelY_); + for (int i = 0; i < numCells_; ++i) + { + for (int j = 0; j < numLocalPres_; ++j) + { + cvely(i, j) = cdofs(i, j * 3 + 1); + } + for (int k = 0; k < numLocalVelY_ - numLocalPres_; ++k) + { + cvely(i, k + numLocalPres_) = cdofs(i, 4 * 3 + k * 2 + 1); + } + } + } // computeCellVelY + + std::vector<int> &getCellDofs(const int &cid, const FieldType &ft) const + { + std::vector<int> dofVec; + int nPres = 4; + int nVelX = 9; + int nVelY = 9; + switch (ft) + { + case VELX: + break; + + case VELY: + break; + + case PRES: + for (int i = 0; i < nPres; ++i) + { + dofVec.push_back(cellDofs_(cid)); + } + break; + } + return dofVec; + } // getDofArray + + void setRefinementLevel(const int &refLevel) + { + ref_ = refLevel; + } // setRefinementLevel + + int getNumCells() const + { + return numCells_; + } // getNumCells + + int getNumNodes() const + { + return numNodes_; + } // getNumNodes + + int getNumEdges() const + { + return numEdges_; + } // getNumEdges + + const FCR &getMeshNodes() const + { + return meshNodes_; + } // getMeshNodes + + const FCI &getMeshCellToNodeMap() const + { + return meshCellToNodeMap_; + } // getMeshCellToNodeMap + + const FCI &getMeshCellToEdgeMap() const + { + return meshCellToEdgeMap_; + } // getMeshCellToEdgeMap + + int getNumDofs() const + { + return numDofs_; + } // getNumDofs + + const FCI &getDofArray() const + { + return dofArray_; + } // getDofArray + + const FCI &getCellDofs() const + { + return cellDofs_; + } // getCellDofs + + const FCI &getCellPres() const + { + return cellPres_; + } // getCellPres + + const FCI &getCellVelX() const + { + return cellVelX_; + } // getCellVelX + + const FCI &getCellVelY() const + { + return cellVelY_; + } // getCellVelY +}; diff --git a/tlnos/src/TOOLS/dofmanager.hpp b/tlnos/src/TOOLS/dofmanager.hpp new file mode 100644 index 0000000000000000000000000000000000000000..6fb62a8967444bfbb884299f7b82bf55c830be90 --- /dev/null +++ b/tlnos/src/TOOLS/dofmanager.hpp @@ -0,0 +1,419 @@ +// @HEADER +// ************************************************************************ +// +// Rapid Optimization Library (ROL) Package +// Copyright (2014) Sandia Corporation +// +// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +// license for use of this work by or on behalf of the U.S. Government. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact lead developers: +// Drew Kouri (dpkouri@sandia.gov) and +// Denis Ridzal (dridzal@sandia.gov) +// +// ************************************************************************ +// @HEADER + +/*! \file dofmanager.hpp + \brief Given a mesh with connectivity information, sets up data + structures for the indexing of the global degrees of + freedom (Dofs). +*/ + +#ifndef DOFMANAGER_HPP +#define DOFMANAGER_HPP + +#include "Teuchos_ParameterList.hpp" +#include "Intrepid_FieldContainer.hpp" +#include "Intrepid_Basis.hpp" +#include "meshmanager.hpp" + +template <class Real> +class DofManager +{ + +private: + Teuchos::RCP<MeshManager<Real>> meshManager_; + std::vector<Teuchos::RCP<Intrepid::Basis<Real, Intrepid::FieldContainer<Real>>>> intrepidBasis_; + + int numCells_; // number of mesh cells + int numNodes_; // number of mesh nodes + int numEdges_; // number of mesh edges + + Teuchos::RCP<Intrepid::FieldContainer<int>> meshCellToNodeMap_; + Teuchos::RCP<Intrepid::FieldContainer<int>> meshCellToEdgeMap_; + + // Local dof information. + int numBases_; // number of bases (fields) + int numLocalNodes_; // number of nodes in the basic cell topology + int numLocalEdges_; // number of edges in the basic cell topology + int numLocalFaces_; // number of faces in the basic cell topology + int numLocalNodeDofs_; // number of local (single-cell) node dofs for all bases + int numLocalEdgeDofs_; // number of local (single-cell) edge dofs for all bases + int numLocalFaceDofs_; // number of local (single-cell) face dofs for all bases + int numLocalDofs_; // total number of local (single-cell) face dofs for all bases + std::vector<int> numDofsPerNode_; // number of dofs per node in a cell (assumed constant), per basis + std::vector<int> numDofsPerEdge_; // number of dofs per edge in a cell (assumed constant), per basis + std::vector<int> numDofsPerFace_; // number of dofs per face in a cell (assumed constant), per basis + std::vector<std::vector<int>> fieldPattern_; // local indexing of fields into the array [0,1,...,numLocalDofs-1]; + // contains [number of bases] index vectors, where each index vector + // is of size [basis cardinality] + // Global dof information. + int numNodeDofs_; // number of global node dofs + int numEdgeDofs_; // number of global edge dofs + int numFaceDofs_; // number of global face dofs + int numDofs_; // total number of global dofs + + Teuchos::RCP<Intrepid::FieldContainer<int>> nodeDofs_; // global node dofs, of size [numNodes_ x numLocalNodeDofs_] + Teuchos::RCP<Intrepid::FieldContainer<int>> edgeDofs_; // global edge dofs, of size [numEdges_ x numLocalEdgeDofs_] + Teuchos::RCP<Intrepid::FieldContainer<int>> faceDofs_; // global face dofs, of size [numFaces_ x numLocalFaceDofs_] + Teuchos::RCP<Intrepid::FieldContainer<int>> cellDofs_; // global cell dofs, of size [numCells_ x numLocalDofs_]; + // ordered by subcell (node, then edge, then face) and basis index + + std::vector<Teuchos::RCP<Intrepid::FieldContainer<int>>> fieldDofs_; // global cell dofs, indexed by field/basis, of size [numCells_ x basis cardinality]; + // ordered by subcell (node, then edge, then face) + +public: + DofManager(Teuchos::RCP<MeshManager<Real>> &meshManager, + std::vector<Teuchos::RCP<Intrepid::Basis<Real, Intrepid::FieldContainer<Real>>>> &intrepidBasis) + { + + meshManager_ = meshManager; + intrepidBasis_ = intrepidBasis; + numCells_ = meshManager_->getNumCells(); + numNodes_ = meshManager_->getNumNodes(); + numEdges_ = meshManager_->getNumEdges(); + + // Mesh data structures. + meshCellToNodeMap_ = meshManager_->getCellToNodeMap(); + meshCellToEdgeMap_ = meshManager_->getCellToEdgeMap(); + + // Local degree-of-freedom footprint. + numBases_ = static_cast<int>(intrepidBasis_.size()); + numDofsPerNode_.resize(numBases_, 0); + numDofsPerEdge_.resize(numBases_, 0); + numDofsPerFace_.resize(numBases_, 0); + numLocalDofs_ = 0; + for (int i = 0; i < numBases_; ++i) + { + std::vector<std::vector<int>> dofTags = (intrepidBasis_[i])->getAllDofTags(); + for (int j = 0; j < (intrepidBasis_[i])->getCardinality(); j++) + { + if (dofTags[j][0] == 0) + { + numDofsPerNode_[i] = dofTags[j][3]; + } + else if (dofTags[j][0] == 1) + { + numDofsPerEdge_[i] = dofTags[j][3]; + } + else if (dofTags[j][0] == 2) + { + numDofsPerFace_[i] = dofTags[j][3]; + } + } + numLocalDofs_ += (intrepidBasis_[i])->getCardinality(); + } + numLocalNodeDofs_ = 0; + numLocalEdgeDofs_ = 0; + numLocalFaceDofs_ = 0; + for (int i = 0; i < numBases_; ++i) + { + numLocalNodeDofs_ += numDofsPerNode_[i]; + numLocalEdgeDofs_ += numDofsPerEdge_[i]; + numLocalFaceDofs_ += numDofsPerFace_[i]; + } + numLocalNodes_ = static_cast<int>((intrepidBasis_[0])->getBaseCellTopology().getVertexCount()); + numLocalEdges_ = static_cast<int>((intrepidBasis_[0])->getBaseCellTopology().getEdgeCount()); + numLocalFaces_ = 1; + computeFieldPattern(); + + // Global data structures. + computeDofArrays(); + computeCellDofs(); + computeFieldDofs(); + } + + Teuchos::RCP<Intrepid::FieldContainer<int>> getNodeDofs() const + { + return nodeDofs_; + } + + Teuchos::RCP<Intrepid::FieldContainer<int>> getEdgeDofs() const + { + return edgeDofs_; + } + + Teuchos::RCP<Intrepid::FieldContainer<int>> getFaceDofs() const + { + return faceDofs_; + } + + Teuchos::RCP<Intrepid::FieldContainer<int>> getCellDofs() const + { + return cellDofs_; + } + + std::vector<Teuchos::RCP<Intrepid::FieldContainer<int>>> getFieldDofs() const + { + return fieldDofs_; + } + + Teuchos::RCP<Intrepid::FieldContainer<int>> getFieldDofs(const int &fieldNumber) const + { + return fieldDofs_[fieldNumber]; + } + + int getNumNodeDofs() const + { + return numNodeDofs_; + } + + int getNumEdgeDofs() const + { + return numEdgeDofs_; + } + + int getNumFaceDofs() const + { + return numFaceDofs_; + } + + int getNumDofs() const + { + return numDofs_; + } + + int getNumFields() const + { + return numBases_; + } + + int getLocalFieldSize(const int &fieldNumber) const + { + return (intrepidBasis_[fieldNumber])->getCardinality(); + } + + std::vector<std::vector<int>> getFieldPattern() const + { + return fieldPattern_; + } + + std::vector<int> getFieldPattern(const int &fieldNumber) const + { + return fieldPattern_[fieldNumber]; + } + +private: + void computeDofArrays() + { + + nodeDofs_ = Teuchos::rcp(new Intrepid::FieldContainer<int>(numNodes_, numLocalNodeDofs_)); + edgeDofs_ = Teuchos::rcp(new Intrepid::FieldContainer<int>(numEdges_, numLocalEdgeDofs_)); + faceDofs_ = Teuchos::rcp(new Intrepid::FieldContainer<int>(numCells_, numLocalFaceDofs_)); + + Intrepid::FieldContainer<int> &nodeDofs = *nodeDofs_; + Intrepid::FieldContainer<int> &edgeDofs = *edgeDofs_; + Intrepid::FieldContainer<int> &faceDofs = *faceDofs_; + + int dofCt = -1; + + // + // This is the independent node id --> edge id --> cell id ordering. + // For example, for a Q2-Q2-Q1 basis (Taylor-Hood), we would have: + // + // Q2 Q2 Q1 + // -------------- + // n1 1 1 1 + // n2 1 1 1 + // ... + // e1 1 1 0 + // e2 1 1 0 + // ... + // c1 1 1 0 + // c2 1 1 0 + // ... + // + + // count node dofs + for (int i = 0; i < numNodes_; ++i) + { + int locNodeCt = -1; + for (int j = 0; j < numBases_; ++j) + { + for (int k = 0; k < numDofsPerNode_[j]; ++k) + { + nodeDofs(i, ++locNodeCt) = ++dofCt; + } + } + } + numNodeDofs_ = dofCt + 1; + + // count edge dofs + for (int i = 0; i < numEdges_; ++i) + { + int locEdgeCt = -1; + for (int j = 0; j < numBases_; ++j) + { + for (int k = 0; k < numDofsPerEdge_[j]; ++k) + { + edgeDofs(i, ++locEdgeCt) = ++dofCt; + } + } + } + numEdgeDofs_ = dofCt + 1 - numNodeDofs_; + + // count face dofs + for (int i = 0; i < numCells_; ++i) + { + int locFaceCt = -1; + for (int j = 0; j < numBases_; ++j) + { + for (int k = 0; k < numDofsPerFace_[j]; ++k) + { + faceDofs(i, ++locFaceCt) = ++dofCt; + } + } + } + numFaceDofs_ = dofCt + 1 - numNodeDofs_ - numEdgeDofs_; + + numDofs_ = numNodeDofs_ + numEdgeDofs_ + numFaceDofs_; + + } // computeDofArrays + + void computeCellDofs() + { + + cellDofs_ = Teuchos::rcp(new Intrepid::FieldContainer<int>(numCells_, numLocalDofs_)); + + // Grab object references, for easier indexing. + Intrepid::FieldContainer<int> &cdofs = *cellDofs_; + Intrepid::FieldContainer<int> &nodeDofs = *nodeDofs_; + Intrepid::FieldContainer<int> &edgeDofs = *edgeDofs_; + Intrepid::FieldContainer<int> &faceDofs = *faceDofs_; + Intrepid::FieldContainer<int> &ctn = *meshCellToNodeMap_; + Intrepid::FieldContainer<int> &cte = *meshCellToEdgeMap_; + + for (int i = 0; i < numCells_; ++i) + { + int ct = -1; + for (int j = 0; j < numLocalNodes_; ++j) + { + for (int k = 0; k < numLocalNodeDofs_; ++k) + { + cdofs(i, ++ct) = nodeDofs(ctn(i, j), k); + } + } + for (int j = 0; j < numLocalEdges_; ++j) + { + for (int k = 0; k < numLocalEdgeDofs_; ++k) + { + cdofs(i, ++ct) = edgeDofs(cte(i, j), k); + } + } + for (int j = 0; j < numLocalFaces_; ++j) + { + for (int k = 0; k < numLocalFaceDofs_; ++k) + { + cdofs(i, ++ct) = faceDofs(i, k); + } + } + } + } // computeCellDofs + + void computeFieldPattern() + { + + fieldPattern_.resize(numBases_); + + int dofCt = -1; + + // count node dofs + for (int i = 0; i < numLocalNodes_; ++i) + { + for (int j = 0; j < numBases_; ++j) + { + for (int k = 0; k < numDofsPerNode_[j]; ++k) + { + fieldPattern_[j].push_back(++dofCt); + } + } + } + + // count edge dofs + for (int i = 0; i < numLocalEdges_; ++i) + { + for (int j = 0; j < numBases_; ++j) + { + for (int k = 0; k < numDofsPerEdge_[j]; ++k) + { + fieldPattern_[j].push_back(++dofCt); + } + } + } + + // count face dofs + for (int i = 0; i < numLocalFaces_; ++i) + { + for (int j = 0; j < numBases_; ++j) + { + for (int k = 0; k < numDofsPerFace_[j]; ++k) + { + fieldPattern_[j].push_back(++dofCt); + } + } + } + + } // computeFieldPattern + + void computeFieldDofs() + { + + fieldDofs_.resize(numBases_); + + Intrepid::FieldContainer<int> &cdofs = *cellDofs_; + + for (int fieldNum = 0; fieldNum < numBases_; ++fieldNum) + { + int basisCard = intrepidBasis_[fieldNum]->getCardinality(); + fieldDofs_[fieldNum] = Teuchos::rcp(new Intrepid::FieldContainer<int>(numCells_, basisCard)); + Intrepid::FieldContainer<int> &fdofs = *(fieldDofs_[fieldNum]); + for (int i = 0; i < numCells_; ++i) + { + for (int j = 0; j < basisCard; ++j) + { + fdofs(i, j) = cdofs(i, fieldPattern_[fieldNum][j]); + } + } + } + } // computeFieldDofs +}; + +#endif diff --git a/tlnos/src/TOOLS/elasticity.hpp b/tlnos/src/TOOLS/elasticity.hpp new file mode 100644 index 0000000000000000000000000000000000000000..47c7c4f4f988c8496cd4111a0a06b2a1053aa813 --- /dev/null +++ b/tlnos/src/TOOLS/elasticity.hpp @@ -0,0 +1,947 @@ +// @HEADER +// ************************************************************************ +// +// Rapid Optimization Library (ROL) Package +// Copyright (2014) Sandia Corporation +// +// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +// license for use of this work by or on behalf of the U.S. Government. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact lead developers: +// Drew Kouri (dpkouri@sandia.gov) and +// Denis Ridzal (dridzal@sandia.gov) +// +// ************************************************************************ +// @HEADER + +#ifndef ROL_PDEOPT_ELASTICITY_H +#define ROL_PDEOPT_ELASTICITY_H + +#include "Intrepid_DefaultCubatureFactory.hpp" +#include "Intrepid_HGRAD_QUAD_C2_FEM.hpp" +#include "Intrepid_HGRAD_QUAD_C1_FEM.hpp" +#include "../TOOLS/PDE_FEM.hpp" +#include "../TOOLS/materials.hpp" + +#include "ROL_Types.hpp" + +template <class Real> +class Elasticity : public PDE_FEM<Real> +{ +protected: + Real E_; + Real poissonR_; + bool planeStrain_; + + // dbc cases + int DBC_Case_; + // parametrized loads + std::vector<Real> param_; + // geometry and loads information + Real xmin_; + Real ymin_; + Real xmax_; + Real ymax_; + // body force + Real bodyforce_Magnitude_; + Real bodyforce_Angle_; + // traction + int traction_Side_; + Real traction_Magnitude_; + Real traction_Angle_; + // point load + Real pointload_loc_x_; + Real pointload_loc_y_; + Real pointload_Magnitude_; + Real pointload_Angle_; + std::vector<int> my_pointload_bc_; + // + + std::vector<Teuchos::RCP<Material<Real>>> material_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> BMat_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> BMatWeighted_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> CBMat_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> NMat_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> NMatWeighted_; + int materialTensorDim_; + + // for boundary integration of traction force + Teuchos::RCP<Intrepid::FieldContainer<Real>> NMatWeighted_Side; + Teuchos::RCP<Intrepid::FieldContainer<Real>> cub_points_side; + Teuchos::RCP<Intrepid::FieldContainer<Real>> cub_weights_side; + Teuchos::RCP<Intrepid::FieldContainer<Real>> cub_points_side_refcell; + Teuchos::RCP<Intrepid::FieldContainer<Real>> cub_points_side_physical; + Teuchos::RCP<Intrepid::FieldContainer<Real>> jacobian_side_refcell; + Teuchos::RCP<Intrepid::FieldContainer<Real>> jacobian_det_side_refcell; + Teuchos::RCP<Intrepid::FieldContainer<Real>> weighted_measure_side_refcell; + Teuchos::RCP<Intrepid::FieldContainer<Real>> value_of_basis_at_cub_points_side_refcell; + Teuchos::RCP<Intrepid::FieldContainer<Real>> transformed_value_of_basis_at_cub_points_side_refcell; + Teuchos::RCP<Intrepid::FieldContainer<Real>> weighted_transformed_value_of_basis_at_cub_points_side_refcell; + Teuchos::RCP<Intrepid::FieldContainer<Real>> tractions; + Teuchos::RCP<Intrepid::FieldContainer<Real>> tractions_on_dofs; + + bool verbose_; + + Real DegreesToRadians(const Real deg) const + { + return deg * static_cast<Real>(M_PI) / static_cast<Real>(180); + } + + void PrintLoadingInformation(void) + { + if (verbose_) + { + *this->outStream_ << std::endl + << std::string(80, '-') << std::endl; + *this->outStream_ << std::string(20, ' ') << "LOADING INFORMATION" << std::endl; + *this->outStream_ << std::string(80, '-') << std::endl; + *this->outStream_ << " Volumetric Force Magnitude: " << param_[0] << std::endl; + *this->outStream_ << " Volumetric Force Angle: " << param_[1] << std::endl; + *this->outStream_ << " Traction Side: " << traction_Side_ << std::endl; + *this->outStream_ << " Traction Force Magnitude: " << param_[2] << std::endl; + *this->outStream_ << " Traction Force Angle: " << param_[3] << std::endl; + *this->outStream_ << " Point Force Location: " + << "(" << pointload_loc_x_ + << ", " << pointload_loc_y_ << ")" << std::endl; + *this->outStream_ << " Point Force Magnitude: " << param_[4] << std::endl; + *this->outStream_ << " Point Force Angle: " << param_[5] << std::endl; + *this->outStream_ << std::string(80, '-') << std::endl + << std::endl; + } + } + // +public: + Elasticity() {} + virtual ~Elasticity() {} + + virtual void Initialize(const Teuchos::RCP<const Teuchos::Comm<int>> &comm, + const Teuchos::RCP<Teuchos::ParameterList> &parlist, + const Teuchos::RCP<std::ostream> &outStream) + { + /****************************************************************************/ + /*** Initialize the base PDE_FEM class. *************************************/ + /****************************************************************************/ + PDE_FEM<Real>::Initialize(comm, parlist, outStream); + + /****************************************************************************/ + /*** Grab the elasticity information. ***************************************/ + /****************************************************************************/ + Teuchos::ParameterList &Elist = parlist->sublist("Elasticity"); + planeStrain_ = Elist.get<bool>("Plane Strain"); + E_ = Elist.get<Real>("Young's Modulus"); + poissonR_ = Elist.get<Real>("Poisson Ratio"); + Teuchos::ParameterList &Glist = parlist->sublist("Geometry"); + xmin_ = Glist.get<Real>("X0"); + ymin_ = Glist.get<Real>("Y0"); + xmax_ = Glist.get<Real>("Width"); + ymax_ = Glist.get<Real>("Height"); + // DBC cases + DBC_Case_ = Elist.get<int>("DBC Case"); + + /****************************************************************************/ + /*** Initialize mesh / finite element fields / degree-of-freedom manager. ***/ + /****************************************************************************/ + Teuchos::ParameterList &Plist = parlist->sublist("PDE FEM"); + verbose_ = Plist.get("Verbose Output", false); + int basisOrder = Plist.get<int>("Order of FE Discretization"); + Teuchos::RCP<MeshManager<Real>> meshMgr = Teuchos::rcp(new MeshManager_Rectangle<Real>(*parlist)); + int spaceDim = 2; + std::vector<Teuchos::RCP<Intrepid::Basis<Real, Intrepid::FieldContainer<Real>>>> basisPtrs(spaceDim, Teuchos::null); + for (int k = 0; k < spaceDim; ++k) + { + if (basisOrder == 1) + { + basisPtrs[k] = Teuchos::rcp(new Intrepid::Basis_HGRAD_QUAD_C1_FEM<Real, Intrepid::FieldContainer<Real>>); + } + else if (basisOrder == 2) + { + basisPtrs[k] = Teuchos::rcp(new Intrepid::Basis_HGRAD_QUAD_C2_FEM<Real, Intrepid::FieldContainer<Real>>); + } + else + { + TEUCHOS_TEST_FOR_EXCEPTION(true, std::logic_error, + ">>> (Elasticity::Initialize): Basis Order is out of bounds!"); + } + } + PDE_FEM<Real>::SetDiscretization(meshMgr, basisPtrs); + PDE_FEM<Real>::printMeshData(*outStream); + } + + // for rectangular domain + virtual void process_loading_information(const Teuchos::RCP<Teuchos::ParameterList> &parlist) + { + Teuchos::ParameterList &Elist = parlist->sublist("Elasticity"); + bodyforce_Magnitude_ = Elist.get<Real>("Bodyforce Magnitude"); + bodyforce_Angle_ = Elist.get<Real>("Bodyforce Angle"); + traction_Side_ = Elist.get<int>("Traction Side"); + traction_Magnitude_ = Elist.get<Real>("Traction Magnitude"); + traction_Angle_ = Elist.get<Real>("Traction Angle"); + pointload_loc_x_ = Elist.get<Real>("Pointload Location X"); + pointload_loc_y_ = Elist.get<Real>("Pointload Location Y"); + pointload_Magnitude_ = Elist.get<Real>("Pointload Magnitude"); + pointload_Angle_ = Elist.get<Real>("Pointload Angle"); + + param_.clear(); + param_.resize(6); + param_[0] = bodyforce_Magnitude_; + param_[1] = bodyforce_Angle_; + param_[2] = traction_Magnitude_; + param_[3] = traction_Angle_; + param_[4] = pointload_Magnitude_; + param_[5] = pointload_Angle_; + + PrintLoadingInformation(); + + this->my_nbc_.push_back(traction_Side_); + + // calculate the distance of the point load to the boundary + // and move it to the closesd boundary point only works for + // rectangular domain first make sure the point load is in + // the domain + TEUCHOS_TEST_FOR_EXCEPTION(pointload_loc_x_ < xmin_, std::invalid_argument, + ">>> (elasticity::process_loading_information): x location of point load is less than xmin!"); + TEUCHOS_TEST_FOR_EXCEPTION(pointload_loc_x_ > xmax_, std::invalid_argument, + ">>> (elasticity::process_loading_information): x location of point load is greater than xmax!"); + TEUCHOS_TEST_FOR_EXCEPTION(pointload_loc_y_ < ymin_, std::invalid_argument, + ">>> (elasticity::process_loading_information): y location of point load is less than ymin!"); + TEUCHOS_TEST_FOR_EXCEPTION(pointload_loc_y_ > ymax_, std::invalid_argument, + ">>> (elasticity::process_loading_information): y location of point load is greater than ymax!"); + // + Real distx1 = std::abs(pointload_loc_x_ - xmin_); + Real distx2 = std::abs(pointload_loc_x_ - xmax_); + Real movx = std::min(distx1, distx2); + Real disty1 = std::abs(pointload_loc_y_ - ymin_); + Real disty2 = std::abs(pointload_loc_y_ - ymax_); + Real movy = std::min(disty1, disty2); + // slight perturbation + // pointload will be moved to the closest boundary node eventually + // perturbation trick to avoid parrallel issues + Real eps = 1e-8 * (std::min((xmax_ - xmin_), (ymax_ - ymin_))); + if (movx <= movy && distx1 <= distx2) + { + // mov load to the left boundary + pointload_loc_x_ = xmin_ + eps; + my_pointload_bc_.push_back(3); + // perturb y + if (disty1 <= disty2) + { + pointload_loc_y_ = pointload_loc_y_ + eps; + } + else + { + pointload_loc_y_ = pointload_loc_y_ - eps; + } + } + else if (movx <= movy && distx1 > distx2) + { + // mov load to the right boundary + pointload_loc_x_ = xmax_ - eps; + my_pointload_bc_.push_back(1); + //perturb y + if (disty1 <= disty2) + { + pointload_loc_y_ = pointload_loc_y_ + eps; + } + else + { + pointload_loc_y_ = pointload_loc_y_ - eps; + } + } + else if (movx > movy && disty1 <= disty2) + { + // mov load to the bottom boundary + pointload_loc_y_ = ymin_ + eps; + my_pointload_bc_.push_back(0); + // perturb x + if (distx1 <= distx2) + { + pointload_loc_x_ = pointload_loc_x_ + eps; + } + else + { + pointload_loc_x_ = pointload_loc_x_ - eps; + } + } + else + { + // mov load to the top boundary + pointload_loc_y_ = ymax_ - eps; + my_pointload_bc_.push_back(2); + // perturb x + if (distx1 <= distx2) + { + pointload_loc_x_ = pointload_loc_x_ + eps; + } + else + { + pointload_loc_x_ = pointload_loc_x_ - eps; + } + } + + // print to check + if (verbose_) + { + *this->outStream_ << "Load processing finished." << std::endl; + *this->outStream_ << "My nbc numbers: "; + for (unsigned i = 0; i < this->my_nbc_.size(); i++) + { + *this->outStream_ << this->my_nbc_[i]; + } + *this->outStream_ << std::endl; + *this->outStream_ << "My pbc numbers: "; + for (unsigned i = 0; i < my_pointload_bc_.size(); i++) + { + *this->outStream_ << my_pointload_bc_[i]; + } + *this->outStream_ << std::endl; + *this->outStream_ << "My pointload location: " << pointload_loc_x_ + << ", " << pointload_loc_y_ << std::endl; + } + } + + virtual void CreateMaterial(void) + { + int numCells = PDE_FEM<Real>::GetNumCells(); + int spaceDim = PDE_FEM<Real>::GetSpaceDim(); + for (int i = 0; i < numCells; ++i) + { + Teuchos::RCP<Material<Real>> CellMaterial = Teuchos::rcp(new Material<Real>()); + CellMaterial->InitializeMaterial(spaceDim, planeStrain_, E_, poissonR_); + materialTensorDim_ = CellMaterial->GetMaterialTensorDim(); + material_.push_back(CellMaterial); + } + } + + virtual void ComputeLocalSystemMats(void) + { + int spaceDim = PDE_FEM<Real>::GetSpaceDim(); + int numCells = PDE_FEM<Real>::GetNumCells(); + int numCubPoints = PDE_FEM<Real>::GetNumCubPoints(); + int lfs = PDE_FEM<Real>::GetLocalFieldSize(); + int full_lfs = lfs * spaceDim; + + this->gradgradMats_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells, full_lfs, full_lfs)); + this->valvalMats_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells, full_lfs, full_lfs)); + + // construct mats + CreateMaterial(); + + BMat_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells, full_lfs, numCubPoints, materialTensorDim_)); + BMatWeighted_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells, full_lfs, numCubPoints, materialTensorDim_)); + CBMat_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells, full_lfs, numCubPoints, materialTensorDim_)); + NMat_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells, full_lfs, numCubPoints, spaceDim)); + NMatWeighted_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells, full_lfs, numCubPoints, spaceDim)); + Construct_N_B_mats(); + Construct_CBmats(); + + // compute local grad.grad (stiffness) matrices + Intrepid::FunctionSpaceTools::integrate<Real>(*this->gradgradMats_, + *CBMat_, + *BMatWeighted_, + Intrepid::COMP_CPP); + // compute local val.val (mass) matrices + Intrepid::FunctionSpaceTools::integrate<Real>(*this->valvalMats_, + *NMat_, + *NMatWeighted_, + Intrepid::COMP_CPP); + } + + // new + // constructing Nmat on side + void Construct_Nmat_on_Side(int numCub) + { + int spaceDim = PDE_FEM<Real>::GetSpaceDim(); + int lfs = PDE_FEM<Real>::GetLocalFieldSize(); + int full_lfs = lfs * spaceDim; + NMatWeighted_Side = Teuchos::rcp(new Intrepid::FieldContainer<Real>(1, full_lfs, numCub, spaceDim)); + NMatWeighted_Side->initialize(0.0); + + if (spaceDim == 2) + { + for (int j = 0; j < numCub; ++j) + { + for (int k = 0; k < lfs; ++k) + { + (*NMatWeighted_Side)(0, k * spaceDim + 0, j, 0) = (*weighted_transformed_value_of_basis_at_cub_points_side_refcell)(0, k, j); + (*NMatWeighted_Side)(0, k * spaceDim + 1, j, 1) = (*weighted_transformed_value_of_basis_at_cub_points_side_refcell)(0, k, j); + } + } + } + + if (spaceDim == 3) + { + for (int j = 0; j < numCub; ++j) + { + for (int k = 0; k < lfs; ++k) + { + (*NMatWeighted_Side)(0, k * spaceDim + 0, j, 0) = (*weighted_transformed_value_of_basis_at_cub_points_side_refcell)(0, k, j); + (*NMatWeighted_Side)(0, k * spaceDim + 1, j, 1) = (*weighted_transformed_value_of_basis_at_cub_points_side_refcell)(0, k, j); + (*NMatWeighted_Side)(0, k * spaceDim + 2, j, 2) = (*weighted_transformed_value_of_basis_at_cub_points_side_refcell)(0, k, j); + } + } + } + } + + // adding point load to right hand side vector + virtual void AddPointLoadToRHS(void) + { + int n_pbc = my_pointload_bc_.size(); + for (int i = 0; i < n_pbc; ++i) + { + int pbc_num = my_pointload_bc_[i]; + for (int j = 0; j < this->myBoundaryCellIds_[pbc_num].size(); ++j) + { + int myGlobalCellId = this->myBoundaryCellIds_[pbc_num][j]; + // apply possible point loads + this->check_and_Apply_PointLoad_By_Coords(myGlobalCellId, pbc_num); + } + } + } + + // adding traction boundary data into right hand side vector + virtual void ModifyLocalForceVecWithSideTractions(void) + { + + int cellDim = PDE_FEM<Real>::GetSpaceDim(); + int lfs = PDE_FEM<Real>::GetLocalFieldSize(); //number of dof each dimension + int full_lfs = lfs * cellDim; + int numNodesPerCell = this->numNodesPerCell_; + + shards::CellTopology sideType(shards::getCellTopologyData<shards::Line<>>()); + int cubDegree = 10; + Intrepid::DefaultCubatureFactory<Real> cubFactory; // create cubature factory + Teuchos::RCP<Intrepid::Cubature<Real>> sideCub = cubFactory.create(sideType, cubDegree); + int numCubPointsSide = sideCub->getNumPoints(); + if (verbose_) + { + *this->outStream_ << "numCubPointsSide: " << numCubPointsSide << std::endl; + } + + int sideDim = this->sideDim_; + int n_nbc = this->my_nbc_.size(); + Teuchos::RCP<Intrepid::FieldContainer<Real>> thiscellNodes; + thiscellNodes = Teuchos::rcp(new Intrepid::FieldContainer<Real>(1, numNodesPerCell, cellDim)); + Intrepid::FieldContainer<Real> &nodes = *(this->meshMgr_)->getNodes(); + + if (verbose_) + { + *this->outStream_ << "n_nbc: " << n_nbc << std::endl; + } + for (int i = 0; i < n_nbc; i++) + { + int nbc_num = this->my_nbc_[i]; + //std::cout << "nbc_num: " << nbc_num << std::endl; + for (int j = 0; j < this->myBoundaryCellIds_[nbc_num].size(); ++j) + { + int myGlobalCellId = this->myBoundaryCellIds_[nbc_num][j]; + //*this->outStream_ << "myGlobalCellId: " << myGlobalCellId << std::endl; + + // apply traction + for (int m = 0; m < numNodesPerCell; ++m) + { + for (int n = 0; n < cellDim; ++n) + { + (*thiscellNodes)(0, m, n) = nodes(this->ctn_(myGlobalCellId, m), n); + } + } + //std::cout << "first node coords: " << (*thiscellNodes)(0, 0, 0) + // << ", " << (*thiscellNodes)(0, 0, 1) << std::endl; + cub_points_side = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCubPointsSide, sideDim)); + cub_weights_side = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCubPointsSide)); + cub_points_side_refcell = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCubPointsSide, cellDim)); + cub_points_side_physical = Teuchos::rcp(new Intrepid::FieldContainer<Real>(1, numCubPointsSide, cellDim)); + jacobian_side_refcell = Teuchos::rcp(new Intrepid::FieldContainer<Real>(1, numCubPointsSide, cellDim, cellDim)); + jacobian_det_side_refcell = Teuchos::rcp(new Intrepid::FieldContainer<Real>(1, numCubPointsSide)); + weighted_measure_side_refcell = Teuchos::rcp(new Intrepid::FieldContainer<Real>(1, numCubPointsSide)); + value_of_basis_at_cub_points_side_refcell = Teuchos::rcp(new Intrepid::FieldContainer<Real>(lfs, numCubPointsSide)); + transformed_value_of_basis_at_cub_points_side_refcell = Teuchos::rcp(new Intrepid::FieldContainer<Real>(1, lfs, numCubPointsSide)); + weighted_transformed_value_of_basis_at_cub_points_side_refcell = Teuchos::rcp(new Intrepid::FieldContainer<Real>(1, lfs, numCubPointsSide)); + tractions = Teuchos::rcp(new Intrepid::FieldContainer<Real>(1, numCubPointsSide, cellDim)); + tractions_on_dofs = Teuchos::rcp(new Intrepid::FieldContainer<Real>(1, full_lfs)); + + // compute traction b.c. contributions and adjust rhs + sideCub->getCubature(*cub_points_side, *cub_weights_side); + + // compute geometric cell information + Intrepid::CellTools<Real>::mapToReferenceSubcell(*cub_points_side_refcell, + *cub_points_side, + sideDim, + nbc_num, + this->cellType_); + + Intrepid::CellTools<Real>::setJacobian(*jacobian_side_refcell, + *cub_points_side_refcell, + *thiscellNodes, + this->cellType_); + + Intrepid::CellTools<Real>::setJacobianDet(*jacobian_det_side_refcell, + *jacobian_side_refcell); + + // compute weighted edge measure + Intrepid::FunctionSpaceTools::computeEdgeMeasure<Real>(*weighted_measure_side_refcell, + *jacobian_side_refcell, + *cub_weights_side, + nbc_num, + this->cellType_); + + // tabulate values of basis functions at side cubature points, in the reference parent cell domain + (*this->basisPtrs_[0]).getValues(*value_of_basis_at_cub_points_side_refcell, *cub_points_side_refcell, Intrepid::OPERATOR_VALUE); + // transform + Intrepid::FunctionSpaceTools::HGRADtransformVALUE<Real>( + *transformed_value_of_basis_at_cub_points_side_refcell, + *value_of_basis_at_cub_points_side_refcell); + + // multiply with weighted measure + Intrepid::FunctionSpaceTools::multiplyMeasure<Real>( + *weighted_transformed_value_of_basis_at_cub_points_side_refcell, + *weighted_measure_side_refcell, + *transformed_value_of_basis_at_cub_points_side_refcell); + + Construct_Nmat_on_Side(numCubPointsSide); + + // compute Neumann data + // map side cubature points in reference parent cell domain to physical space + Intrepid::CellTools<Real>::mapToPhysicalFrame(*cub_points_side_physical, + *cub_points_side_refcell, + *thiscellNodes, + this->cellType_); + //std::cout << "cub_points_side_physical:" << (*cub_points_side_physical)(0,0,0) + // << ", " << (*cub_points_side_physical)(0,0,1) << std::endl; + // now compute data + std::vector<Real> x(cellDim), F(cellDim); + for (int m = 0; m < numCubPointsSide; ++m) + { + for (int n = 0; n < cellDim; ++n) + { + x[n] = (*cub_points_side_physical)(0, m, n); + } + funcRHS_NBC(F, x); + for (int n = 0; n < cellDim; ++n) + { + (*tractions)(0, m, n) = F[n]; + } + } + Intrepid::FunctionSpaceTools::integrate<Real>(*tractions_on_dofs, + *tractions, + *NMatWeighted_Side, + Intrepid::COMP_CPP); + + // adjust RHS + for (int m = 0; m < full_lfs; ++m) + { + (*this->datavalVecF_)(this->find_local_index(myGlobalCellId), m) += (*tractions_on_dofs)(0, m); + } + + //check tractions on dofs + //*this->outStream_<<"tractions_on_dofs: "; + //for(int m=0; m<full_lfs; ++m) + // *this->outStream_<<(*tractions_on_dofs)(0, m)<<", "; + //*this->outStream_<<std::endl; + } + } + } + + virtual void ComputeLocalForceVec(void) + { + int spaceDim = PDE_FEM<Real>::GetSpaceDim(); + int numCells = PDE_FEM<Real>::GetNumCells(); + int numCubPoints = PDE_FEM<Real>::GetNumCubPoints(); + int lfs = PDE_FEM<Real>::GetLocalFieldSize(); + int full_lfs = lfs * spaceDim; + this->dataF_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells, numCubPoints, spaceDim)); + this->datavalVecF_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells, full_lfs)); + + std::vector<Real> x(spaceDim), F(spaceDim); + for (int i = 0; i < numCells; ++i) + { // evaluate functions at these points + for (int j = 0; j < numCubPoints; ++j) + { + for (int k = 0; k < spaceDim; ++k) + { + x[k] = (*this->cubPointsPhysical_)(i, j, k); + } + funcRHS_BodyForce(F, x); + for (int k = 0; k < spaceDim; ++k) + { + (*this->dataF_)(i, j, k) = F[k]; + } + } + } + Intrepid::FunctionSpaceTools::integrate<Real>(*this->datavalVecF_, // compute local data.val vectors for RHS F + *this->dataF_, + *NMatWeighted_, + Intrepid::COMP_CPP); + + // new + if (verbose_) + { + *this->outStream_ << "Modifying local force vectors using boundary tractions" << std::endl; + } + ModifyLocalForceVecWithSideTractions(); + AddPointLoadToRHS(); + if (verbose_) + { + *this->outStream_ << "Modifying Done!" << std::endl; + } + } + + virtual void updateF(const std::vector<Real> ¶m) + { + //Real diff = std::sqrt(std::pow(param_[0]-param[0],2) + // + std::pow(param_[1]-param[1],2) + // + std::pow(param_[2]-param[2],2) + // + std::pow(param_[3]-param[3],2) + // + std::pow(param_[4]-param[4],2) + // + std::pow(param_[5]-param[5],2)); + //if (diff > ROL::ROL_EPSILON<Real>()) { + param_ = param; + + ComputeLocalForceVec(); + PDE_FEM<Real>::AssembleRHSVector(); + PDE_FEM<Real>::VectorRemoveDBC(); + + PrintLoadingInformation(); + //} + } + + void Construct_N_B_mats(void) + { + //std::cout<<"Computing N and B mats."<<std::endl; + BMat_->initialize(0.0); + NMat_->initialize(0.0); + BMatWeighted_->initialize(0.0); + NMatWeighted_->initialize(0.0); + + if (this->spaceDim_ == 2) + { + for (int i = 0; i < this->numCells_; ++i) + { // evaluate functions at these points + for (int j = 0; j < this->numCubPoints_; ++j) + { + for (int k = 0; k < this->lfs_; ++k) + { + (*NMat_)(i, k * this->spaceDim_ + 0, j, 0) = (*this->valPhysical_)(i, k, j); + (*NMat_)(i, k * this->spaceDim_ + 1, j, 1) = (*this->valPhysical_)(i, k, j); + (*NMatWeighted_)(i, k * this->spaceDim_ + 0, j, 0) = (*this->valPhysicalWeighted_)(i, k, j); + (*NMatWeighted_)(i, k * this->spaceDim_ + 1, j, 1) = (*this->valPhysicalWeighted_)(i, k, j); + + (*BMat_)(i, k * this->spaceDim_ + 0, j, 0) = (*this->gradPhysical_)(i, k, j, 0); + (*BMat_)(i, k * this->spaceDim_ + 1, j, 1) = (*this->gradPhysical_)(i, k, j, 1); + (*BMat_)(i, k * this->spaceDim_ + 0, j, 2) = (*this->gradPhysical_)(i, k, j, 1); + (*BMat_)(i, k * this->spaceDim_ + 1, j, 2) = (*this->gradPhysical_)(i, k, j, 0); + + (*BMatWeighted_)(i, k * this->spaceDim_ + 0, j, 0) = (*this->gradPhysicalWeighted_)(i, k, j, 0); + (*BMatWeighted_)(i, k * this->spaceDim_ + 1, j, 1) = (*this->gradPhysicalWeighted_)(i, k, j, 1); + (*BMatWeighted_)(i, k * this->spaceDim_ + 0, j, 2) = (*this->gradPhysicalWeighted_)(i, k, j, 1); + (*BMatWeighted_)(i, k * this->spaceDim_ + 1, j, 2) = (*this->gradPhysicalWeighted_)(i, k, j, 0); + } + } + } + } + + if (this->spaceDim_ == 3) + { + for (int i = 0; i < this->numCells_; ++i) + { // evaluate functions at these points + for (int j = 0; j < this->numCubPoints_; ++j) + { + for (int k = 0; k < this->lfs_; ++k) + { + (*NMat_)(i, k * this->spaceDim_ + 0, j, 0) = (*this->valPhysical_)(i, k, j); + (*NMat_)(i, k * this->spaceDim_ + 1, j, 1) = (*this->valPhysical_)(i, k, j); + (*NMat_)(i, k * this->spaceDim_ + 2, j, 2) = (*this->valPhysical_)(i, k, j); + (*NMatWeighted_)(i, k * this->spaceDim_ + 0, j, 0) = (*this->valPhysicalWeighted_)(i, k, j); + (*NMatWeighted_)(i, k * this->spaceDim_ + 1, j, 1) = (*this->valPhysicalWeighted_)(i, k, j); + (*NMatWeighted_)(i, k * this->spaceDim_ + 2, j, 2) = (*this->valPhysicalWeighted_)(i, k, j); + + (*BMat_)(i, k * this->spaceDim_ + 0, j, 0) = (*this->gradPhysical_)(i, k, j, 0); + (*BMat_)(i, k * this->spaceDim_ + 1, j, 1) = (*this->gradPhysical_)(i, k, j, 1); + (*BMat_)(i, k * this->spaceDim_ + 2, j, 2) = (*this->gradPhysical_)(i, k, j, 2); + (*BMat_)(i, k * this->spaceDim_ + 1, j, 3) = (*this->gradPhysical_)(i, k, j, 2); + (*BMat_)(i, k * this->spaceDim_ + 2, j, 3) = (*this->gradPhysical_)(i, k, j, 1); + (*BMat_)(i, k * this->spaceDim_ + 0, j, 4) = (*this->gradPhysical_)(i, k, j, 2); + (*BMat_)(i, k * this->spaceDim_ + 2, j, 4) = (*this->gradPhysical_)(i, k, j, 0); + (*BMat_)(i, k * this->spaceDim_ + 0, j, 5) = (*this->gradPhysical_)(i, k, j, 1); + (*BMat_)(i, k * this->spaceDim_ + 1, j, 5) = (*this->gradPhysical_)(i, k, j, 0); + + (*BMatWeighted_)(i, k * this->spaceDim_ + 0, j, 0) = (*this->gradPhysicalWeighted_)(i, k, j, 0); + (*BMatWeighted_)(i, k * this->spaceDim_ + 1, j, 1) = (*this->gradPhysicalWeighted_)(i, k, j, 1); + (*BMatWeighted_)(i, k * this->spaceDim_ + 2, j, 2) = (*this->gradPhysicalWeighted_)(i, k, j, 2); + (*BMatWeighted_)(i, k * this->spaceDim_ + 1, j, 3) = (*this->gradPhysicalWeighted_)(i, k, j, 2); + (*BMatWeighted_)(i, k * this->spaceDim_ + 2, j, 3) = (*this->gradPhysicalWeighted_)(i, k, j, 1); + (*BMatWeighted_)(i, k * this->spaceDim_ + 0, j, 4) = (*this->gradPhysicalWeighted_)(i, k, j, 2); + (*BMatWeighted_)(i, k * this->spaceDim_ + 2, j, 4) = (*this->gradPhysicalWeighted_)(i, k, j, 0); + (*BMatWeighted_)(i, k * this->spaceDim_ + 0, j, 5) = (*this->gradPhysicalWeighted_)(i, k, j, 1); + (*BMatWeighted_)(i, k * this->spaceDim_ + 1, j, 5) = (*this->gradPhysicalWeighted_)(i, k, j, 0); + } + } + } + } + } + + // test matrices + virtual void test_mats(void) + { + Teuchos::RCP<Intrepid::FieldContainer<Real>> test_Jaco_Mat; + Teuchos::RCP<Intrepid::FieldContainer<Real>> test_Grad_Mat; + Teuchos::RCP<Intrepid::FieldContainer<Real>> test_N_Mat; + Teuchos::RCP<Intrepid::FieldContainer<Real>> test_B_Mat; + Teuchos::RCP<Intrepid::FieldContainer<Real>> test_K_Mat; + Teuchos::RCP<Intrepid::FieldContainer<Real>> test_M_Mat; + Teuchos::RCP<Intrepid::FieldContainer<Real>> test_F_Vec; + + test_Jaco_Mat = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->spaceDim_, this->spaceDim_)); + test_Grad_Mat = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->lfs_, this->spaceDim_)); + test_N_Mat = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->numLocalDofs_, this->spaceDim_)); + test_B_Mat = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->numLocalDofs_, materialTensorDim_)); + test_K_Mat = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->numLocalDofs_, this->numLocalDofs_)); + test_M_Mat = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->numLocalDofs_, this->numLocalDofs_)); + test_F_Vec = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->numLocalDofs_, 1)); + + for (int i = 0; i < this->spaceDim_; i++) + { + for (int j = 0; j < this->spaceDim_; j++) + { + (*test_Jaco_Mat)(i, j) = (*this->cellJac_)(0, 0, i, j); + } + } + for (int i = 0; i < this->numLocalDofs_; i++) + { + for (int j = 0; j < this->spaceDim_; j++) + { + if (i < this->lfs_) + { + (*test_Grad_Mat)(i, j) = (*this->gradReference_)(i, 0, j); + } + (*test_N_Mat)(i, j) = (*NMat_)(0, i, 0, j); + } + for (int j = 0; j < materialTensorDim_; j++) + { + (*test_B_Mat)(i, j) = (*BMat_)(0, i, 0, j); + } + for (int j = 0; j < this->numLocalDofs_; j++) + { + (*test_K_Mat)(i, j) = (*this->gradgradMats_)(0, i, j); + (*test_M_Mat)(i, j) = (*this->valvalMats_)(0, i, j); + } + (*test_F_Vec)(i, 0) = (*this->datavalVecF_)(0, i); + } + std::cout << *test_Jaco_Mat << std::endl; + std::cout << *test_Grad_Mat << std::endl; + std::cout << *test_N_Mat << std::endl; + std::cout << *test_B_Mat << std::endl; + std::cout << *test_K_Mat << std::endl; + std::cout << *test_M_Mat << std::endl; + std::cout << *test_F_Vec << std::endl; + } + + virtual void Construct_CBmats(void) + { + //std::cout<<"Computing CB mats."<<std::endl; + CBMat_->initialize(0.0); + for (int i = 0; i < this->numCells_; ++i) + { + Teuchos::RCP<Intrepid::FieldContainer<Real>> materialMat = material_[i]->GetMaterialTensor(); + for (int j = 0; j < this->numCubPoints_; ++j) + { + for (int m = 0; m < this->lfs_ * this->spaceDim_; m++) + { + for (int n = 0; n < materialTensorDim_; n++) + { + for (int k = 0; k < materialTensorDim_; k++) + { + (*CBMat_)(i, m, j, n) += (*BMat_)(i, m, j, k) * (*materialMat)(k, n); + } + } + } + } + } + } + + // load functions, can be parametrized + // modification for stochastic loads should be made here + virtual void funcRHS_BodyForce(std::vector<Real> &F, + const std::vector<Real> &x) const + { + Real theta = DegreesToRadians(param_[1]); + F.clear(); + F.resize(this->spaceDim_); + F[0] = param_[0] * std::cos(theta); + F[1] = param_[0] * std::sin(theta); + } + + virtual void funcRHS_NBC(std::vector<Real> &F, + const std::vector<Real> &x) const + { + Real theta = DegreesToRadians(param_[3]); + F.clear(); + F.resize(this->spaceDim_); + F[0] = param_[2] * std::cos(theta); + F[1] = param_[2] * std::sin(theta); + } + + virtual void funcRHS_PtLoad(std::vector<Real> &F) const + { + Real theta = DegreesToRadians(param_[5]); + F.clear(); + F.resize(this->spaceDim_); + F[0] = param_[4] * std::cos(theta); + F[1] = param_[4] * std::sin(theta); + } + // + // + + virtual void ApplyPointLoad(const int pointload_bc, + const int globalCellNum, + const std::vector<int> &localNodeNum, + const std::vector<Real> &coord1, + const std::vector<Real> &coord2) + { + Teuchos::RCP<Intrepid::FieldContainer<int>> nodeDofs = this->dofMgr_->getNodeDofs(); + bool isLoadPosContainedInCurrentSegment = false; + int whichNodeIsCloser = -1; + // if update F, provides parametrized computation of F[0] and F[1] + std::vector<Real> F; + funcRHS_PtLoad(F); + // + Real x11 = coord1[0], x12 = coord1[1]; + Real x21 = coord2[0], x22 = coord2[1]; + Real fx = pointload_loc_x_; + Real fy = pointload_loc_y_; + int pbc_num = pointload_bc; + + if (pbc_num == 0 || pbc_num == 2) + { + if (((x11 - fx) * (x21 - fx) < 0) && ((x12 - fy) * (x22 - fy) > 0)) + { + isLoadPosContainedInCurrentSegment = true; + if (std::abs(x11 - fx) <= std::abs(x21 - fx)) + { + whichNodeIsCloser = 1; + } + else + { + whichNodeIsCloser = 2; + } + } + } + if (pbc_num == 1 || pbc_num == 3) + { + if (((x11 - fx) * (x21 - fx) > 0) && ((x12 - fy) * (x22 - fy) < 0)) + { + isLoadPosContainedInCurrentSegment = true; + if (std::abs(x12 - fy) <= std::abs(x22 - fy)) + { + whichNodeIsCloser = 1; + } + else + { + whichNodeIsCloser = 2; + } + } + } + if (isLoadPosContainedInCurrentSegment) + { + int ctn = this->ctn_(globalCellNum, localNodeNum[whichNodeIsCloser - 1]); + this->myPointLoadDofs_.resize(2); + this->myPointLoadVals_.resize(2); + this->myPointLoadDofs_[0] = (*nodeDofs)(ctn, 0); + this->myPointLoadDofs_[1] = (*nodeDofs)(ctn, 1); + this->myPointLoadVals_[0] = F[0]; + this->myPointLoadVals_[1] = F[1]; + // print to check + if (verbose_) + { + *this->outStream_ << "Point load applied, at cell: " << globalCellNum << std::endl; + *this->outStream_ << "Point load values: " << F[0] << ", " << F[1] << std::endl; + if (whichNodeIsCloser == 1) + { + *this->outStream_ << "Point load position: " << x11 << ", " << x12 << std::endl; + } + else + { + *this->outStream_ << "Point load position: " << x21 << ", " << x22 << std::endl; + } + } + } + } + // ApplyPointLoad + + // DBC cases, add more to extend + virtual int check_DBC_Coords_Range(const std::vector<Real> &x) const + { + // return value : + // -1: not a DBC node + // 0: x direction fixed + // 1: y direction fixed + // 5: both x, y direction are fixed + // + Real x1 = x[0], x2 = x[1], eps(1e-6); + switch (DBC_Case_) + { + case 0: + { // Fix bottom two corners, left corner x, y, right corner only y + if ((x2 < ymin_ + eps) && (x1 < xmin_ + eps)) + return 5; + if ((x2 < ymin_ + eps) && (x1 > xmax_ - eps)) + return 1; + break; + } + case 1: + { // Fix bottom two corners, both x, y + if ((x2 < ymin_ + eps) && + ((x1 < xmin_ + eps) || (x1 > xmax_ - eps))) + return 5; + break; + } + case 2: + { // Fix left boundary, both x, y + if (x1 < xmin_ + eps) + return 5; + break; + } + case 3: + { // Fix bottom boundary, both x, y + if (x2 < ymin_ + eps) + return 5; + break; + } + case 4: + { // Fix ALL boundary, both x, y + return 5; + break; + } + } + return -1; + } + +}; // class Elasticity + +#endif diff --git a/tlnos/src/TOOLS/elasticitySIMP.hpp b/tlnos/src/TOOLS/elasticitySIMP.hpp new file mode 100644 index 0000000000000000000000000000000000000000..dd3f5f1db0717e9897a42ddc87eb6f2be3564f92 --- /dev/null +++ b/tlnos/src/TOOLS/elasticitySIMP.hpp @@ -0,0 +1,296 @@ +// @HEADER +// ************************************************************************ +// +// Rapid Optimization Library (ROL) Package +// Copyright (2014) Sandia Corporation +// +// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +// license for use of this work by or on behalf of the U.S. Government. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact lead developers: +// Drew Kouri (dpkouri@sandia.gov) and +// Denis Ridzal (dridzal@sandia.gov) +// +// ************************************************************************ +// @HEADER + +#ifndef ROL_PDEOPT_ELASTICITYSIMP_H +#define ROL_PDEOPT_ELASTICITYSIMP_H + +#include "Intrepid_HGRAD_QUAD_C2_FEM.hpp" +#include "Intrepid_HGRAD_QUAD_C1_FEM.hpp" +#include "../TOOLS/elasticity.hpp" +#include "../TOOLS/materials.hpp" + +template <class Real> +class ElasticitySIMP : public Elasticity<Real> +{ +protected: + Real initDensity_; + Real minDensity_; + int powerP_; + + std::vector<Teuchos::RCP<Material_SIMP<Real>>> SIMPmaterial_; + Teuchos::RCP<Tpetra::MultiVector<>> myDensity_; + Teuchos::RCP<Tpetra::MultiVector<>> myCellArea_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> CBMat0_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> gradgradMats0_; + +public: + ElasticitySIMP() {} + ~ElasticitySIMP() {} + + virtual void ElasticitySIMP_Initialize(const Teuchos::RCP<const Teuchos::Comm<int>> &comm, + const Teuchos::RCP<Teuchos::ParameterList> &parlist, + const Teuchos::RCP<std::ostream> &outStream) + { + this->Initialize(comm, parlist, outStream); + // new material parameters + Teuchos::ParameterList &list = this->parlist_->sublist("ElasticitySIMP"); + powerP_ = list.get<int>("SIMP Power"); + initDensity_ = list.get<Real>("Initial Density"); + minDensity_ = list.get<Real>("Minimum Density"); + } + + virtual void SetSIMPParallelStructure() + { + PDE_FEM<Real>::SetParallelStructure(); + this->myCellMap_ = Teuchos::rcp(new Tpetra::Map<>(Teuchos::OrdinalTraits<Tpetra::global_size_t>::invalid(), + this->myCellIds_, 0, this->commPtr_)); + } + + Teuchos::RCP<const Tpetra::Map<>> getDomainMapA() const + { + return this->matA_->getDomainMap(); + } + + Teuchos::RCP<const Tpetra::Map<>> getCellMap() const + { + return this->myCellMap_; + } + + Teuchos::RCP<Tpetra::MultiVector<>> getMaterialDensity() const + { + return myDensity_; + } + + // return cell measures + Teuchos::RCP<Tpetra::MultiVector<>> getCellAreas() + { + myCellArea_ = Teuchos::rcp(new Tpetra::MultiVector<>(this->myCellMap_, 1, true)); + for (int i = 0; i < this->numCells_; i++) + { + myCellArea_->replaceGlobalValue(this->myCellIds_[i], 0, this->myCellMeasure_[i]); + } + return myCellArea_; + } + // + void ApplyBCToVec(const Teuchos::RCP<Tpetra::MultiVector<>> &u) + { + Real zero(0.0); + // u is myOverlapMap_ + for (int i = 0; i < this->myDirichletDofs_.size(); ++i) + { + if (this->myOverlapMap_->isNodeGlobalElement(this->myDirichletDofs_[i])) + u->replaceGlobalValue(this->myDirichletDofs_[i], 0, zero); + } + } + + void resetMaterialDensity(const Real val) + { + myDensity_ = Teuchos::rcp(new Tpetra::MultiVector<>(this->myCellMap_, 1, true)); + myDensity_->putScalar(val); + renewMaterialVector(); + } + + void updateMaterialDensity(const Teuchos::RCP<const Tpetra::MultiVector<>> &newDensity) + { + myDensity_ = Teuchos::rcp(new Tpetra::MultiVector<>(this->myCellMap_, 1, true)); + Tpetra::deep_copy(*myDensity_, *newDensity); + renewMaterialVector(); + } + + void renewMaterialVector() + { + Teuchos::ArrayRCP<const Real> densData = myDensity_->get1dView(); + for (int i = 0; i < this->numCells_; i++) + { + Real dens = densData[myDensity_->getMap()->getLocalElement(this->myCellIds_[i])]; + SIMPmaterial_[i]->setDensity(dens); + } + } + + virtual void CreateMaterial() + { + for (int i = 0; i < this->numCells_; i++) + { + Teuchos::RCP<Material_SIMP<Real>> CellMaterial = Teuchos::rcp(new Material_SIMP<Real>()); + CellMaterial->InitializeSIMP(this->spaceDim_, this->planeStrain_, this->E_, + this->poissonR_, initDensity_, powerP_, minDensity_); + this->materialTensorDim_ = CellMaterial->GetMaterialTensorDim(); + SIMPmaterial_.push_back(CellMaterial); + } + resetMaterialDensity(initDensity_); + } + + virtual void ComputeLocalSystemMats(bool ifInitial) + { + int full_lfs = this->lfs_ * this->spaceDim_; + if (!ifInitial) + { + renewMaterialVector(); + this->gradgradMats_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->numCells_, full_lfs, full_lfs)); + Construct_CBmats(ifInitial); + Intrepid::FunctionSpaceTools::integrate<Real>(*this->gradgradMats_, // compute local grad.grad (stiffness) matrices + *this->CBMat_, + *this->BMatWeighted_, + Intrepid::COMP_CPP); + return; + } + CreateMaterial(); + this->gradgradMats0_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->numCells_, full_lfs, full_lfs)); + this->gradgradMats_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->numCells_, full_lfs, full_lfs)); + this->valvalMats_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->numCells_, full_lfs, full_lfs)); + + this->BMat_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->numCells_, full_lfs, this->numCubPoints_, this->materialTensorDim_)); + this->BMatWeighted_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->numCells_, full_lfs, this->numCubPoints_, this->materialTensorDim_)); + CBMat0_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->numCells_, full_lfs, this->numCubPoints_, this->materialTensorDim_)); + this->CBMat_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->numCells_, full_lfs, this->numCubPoints_, this->materialTensorDim_)); + this->NMat_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->numCells_, full_lfs, this->numCubPoints_, this->spaceDim_)); + this->NMatWeighted_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->numCells_, full_lfs, this->numCubPoints_, this->spaceDim_)); + this->Construct_N_B_mats(); + Construct_CBmats(ifInitial); + Intrepid::FunctionSpaceTools::integrate<Real>(*this->gradgradMats0_, // compute local grad.grad (stiffness) matrices + *CBMat0_, + *this->BMatWeighted_, + Intrepid::COMP_CPP); + Intrepid::FunctionSpaceTools::integrate<Real>(*this->gradgradMats_, // compute local grad.grad (stiffness) matrices + *this->CBMat_, + *this->BMatWeighted_, + Intrepid::COMP_CPP); + Intrepid::FunctionSpaceTools::integrate<Real>(*this->valvalMats_, // compute local val.val (mass) matrices + *this->NMat_, + *this->NMatWeighted_, + Intrepid::COMP_CPP); + } + + // test matrices + virtual void test_mats() + { + Teuchos::RCP<Intrepid::FieldContainer<Real>> test_Jaco_Mat; + Teuchos::RCP<Intrepid::FieldContainer<Real>> test_Grad_Mat; + Teuchos::RCP<Intrepid::FieldContainer<Real>> test_N_Mat; + Teuchos::RCP<Intrepid::FieldContainer<Real>> test_B_Mat; + Teuchos::RCP<Intrepid::FieldContainer<Real>> test_K0_Mat; + Teuchos::RCP<Intrepid::FieldContainer<Real>> test_K_Mat; + Teuchos::RCP<Intrepid::FieldContainer<Real>> test_M_Mat; + Teuchos::RCP<Intrepid::FieldContainer<Real>> test_F_Vec; + + test_Jaco_Mat = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->spaceDim_, this->spaceDim_)); + test_Grad_Mat = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->lfs_, this->spaceDim_)); + test_N_Mat = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->numLocalDofs_, this->spaceDim_)); + test_B_Mat = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->numLocalDofs_, this->materialTensorDim_)); + test_K0_Mat = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->numLocalDofs_, this->numLocalDofs_)); + test_K_Mat = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->numLocalDofs_, this->numLocalDofs_)); + test_M_Mat = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->numLocalDofs_, this->numLocalDofs_)); + test_F_Vec = Teuchos::rcp(new Intrepid::FieldContainer<Real>(this->numLocalDofs_, 1)); + + for (int i = 0; i < this->spaceDim_; i++) + { + for (int j = 0; j < this->spaceDim_; j++) + { + (*test_Jaco_Mat)(i, j) = (*this->cellJac_)(0, 0, i, j); + } + } + for (int i = 0; i < this->numLocalDofs_; i++) + { + for (int j = 0; j < this->spaceDim_; j++) + { + if (i < this->lfs_) + (*test_Grad_Mat)(i, j) = (*this->gradReference_)(i, 0, j); + + (*test_N_Mat)(i, j) = (*this->NMat_)(0, i, 0, j); + } + for (int j = 0; j < this->materialTensorDim_; j++) + { + (*test_B_Mat)(i, j) = (*this->BMat_)(0, i, 0, j); + } + for (int j = 0; j < this->numLocalDofs_; j++) + { + (*test_K0_Mat)(i, j) = (*this->gradgradMats0_)(0, i, j); + (*test_K_Mat)(i, j) = (*this->gradgradMats_)(0, i, j); + (*test_M_Mat)(i, j) = (*this->valvalMats_)(0, i, j); + } + (*test_F_Vec)(i, 0) = (*this->datavalVecF_)(0, i); + } + std::cout << *(SIMPmaterial_[0]->GetMaterialTensor()) << std::endl; + std::cout << *test_Jaco_Mat << std::endl; + std::cout << *test_Grad_Mat << std::endl; + std::cout << *test_N_Mat << std::endl; + std::cout << *test_B_Mat << std::endl; + std::cout << *test_M_Mat << std::endl; + std::cout << *test_F_Vec << std::endl; + std::cout << *test_K0_Mat << std::endl; + std::cout << *test_K_Mat << std::endl; + } + + void Construct_CBmats(const bool ifInitial) + { + if (ifInitial) + CBMat0_->initialize(0.0); + + this->CBMat_->initialize(0.0); + Real SIMPScale; + for (int i = 0; i < this->numCells_; ++i) + { + + SIMPScale = SIMPmaterial_[i]->getSIMPScaleFactor(); + Teuchos::RCP<Intrepid::FieldContainer<Real>> materialMat = SIMPmaterial_[i]->GetMaterialTensor(); + for (int j = 0; j < this->numCubPoints_; ++j) + { + for (int m = 0; m < this->lfs_ * this->spaceDim_; m++) + { + for (int n = 0; n < this->materialTensorDim_; n++) + { + for (int k = 0; k < this->materialTensorDim_; k++) + { + if (ifInitial) + (*CBMat0_)(i, m, j, n) += (*this->BMat_)(i, m, j, k) * (*materialMat)(k, n); + (*this->CBMat_)(i, m, j, n) += SIMPScale * (*this->BMat_)(i, m, j, k) * (*materialMat)(k, n); + } + } + } + } + } + } + +}; // class ElasticitySIMPData + +#endif diff --git a/tlnos/src/TOOLS/materials.hpp b/tlnos/src/TOOLS/materials.hpp new file mode 100644 index 0000000000000000000000000000000000000000..2b8aeba77b6a24b9fd245681506a4f3c22d3bf5c --- /dev/null +++ b/tlnos/src/TOOLS/materials.hpp @@ -0,0 +1,252 @@ +// @HEADER +// ************************************************************************ +// +// Rapid Optimization Library (ROL) Package +// Copyright (2014) Sandia Corporation +// +// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +// license for use of this work by or on behalf of the U.S. Government. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact lead developers: +// Drew Kouri (dpkouri@sandia.gov) and +// Denis Ridzal (dridzal@sandia.gov) +// +// ************************************************************************ +// @HEADER + +/*! \file materials.hpp +*/ + +#ifndef MATERIALS_HPP +#define MATERIALS_HPP + +#include "Intrepid_FieldContainer.hpp" + +/** \class Materials +*/ + +template <class Real> +class Material +{ +private: + int dim_; + int tensorMatSize_; + + bool planeStrain_; + Real modulus_; + Real poissonRatio_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> materialTensor_; + +public: + Material() {} + virtual ~Material() {} + + virtual void InitializeMaterial(const int dim, const bool planeStrain, + const Real modulus, const Real poissonRatio) + { + TEUCHOS_TEST_FOR_EXCEPTION(dim > 3 || dim < 1, std::invalid_argument, + ">>> ERROR (InitializeMaterial): dim less than one or greater than three!"); + dim_ = dim; + planeStrain_ = planeStrain; + modulus_ = modulus; + poissonRatio_ = poissonRatio; + if (dim_ == 1) + { + tensorMatSize_ = 1; + } + else if (dim_ == 2) + { + tensorMatSize_ = 3; + } + else + { + tensorMatSize_ = 6; + } + + ComputeMaterialTensor(); + } + + void ComputeMaterialTensor(void) + { + materialTensor_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(tensorMatSize_, tensorMatSize_)); + materialTensor_->initialize(0.0); + if (dim_ == 1) + { + (*materialTensor_)(0, 0) = modulus_; + } + else if (dim_ == 2 && !planeStrain_) + { + Real one(1), half(0.5); + Real factor1 = modulus_ / (one - poissonRatio_ * poissonRatio_); + (*materialTensor_)(0, 0) = factor1; + (*materialTensor_)(0, 1) = factor1 * poissonRatio_; + (*materialTensor_)(1, 0) = factor1 * poissonRatio_; + (*materialTensor_)(1, 1) = factor1; + (*materialTensor_)(2, 2) = factor1 * half * (one - poissonRatio_); + } + else if (dim_ == 2 && planeStrain_) + { + Real one(1), two(2), half(0.5); + Real factor2 = modulus_ / (one + poissonRatio_) / (one - two * poissonRatio_); + (*materialTensor_)(0, 0) = factor2 * (one - poissonRatio_); + (*materialTensor_)(0, 1) = factor2 * poissonRatio_; + (*materialTensor_)(1, 0) = factor2 * poissonRatio_; + (*materialTensor_)(1, 1) = factor2 * (one - poissonRatio_); + (*materialTensor_)(2, 2) = factor2 * half * (one - two * poissonRatio_); + } + else + { + Real one(1), two(2), half(0.5); + Real lam = modulus_ * poissonRatio_ / (one + poissonRatio_) / (one - two * poissonRatio_); + Real mu = half * modulus_ / (one + poissonRatio_); + (*materialTensor_)(0, 0) = lam + two * mu; + (*materialTensor_)(0, 1) = lam; + (*materialTensor_)(0, 2) = lam; + (*materialTensor_)(1, 0) = lam; + (*materialTensor_)(1, 1) = lam + two * mu; + (*materialTensor_)(1, 2) = lam; + (*materialTensor_)(2, 0) = lam; + (*materialTensor_)(2, 1) = lam; + (*materialTensor_)(2, 2) = lam + two * mu; + (*materialTensor_)(3, 3) = mu; + (*materialTensor_)(4, 4) = mu; + (*materialTensor_)(5, 5) = mu; + } + } + + const Teuchos::RCP<Intrepid::FieldContainer<Real>> GetMaterialTensor(void) const + { + return materialTensor_; + } + + int GetMaterialTensorDim(void) const + { + return tensorMatSize_; + } + + Real GetYoungsModulus(void) const + { + return modulus_; + } + + Real GetPoissonRatio(void) const + { + return poissonRatio_; + } + + Real GetBulkModulus(void) const {} + + Real GetShearModulus(void) const + { + Real half(0.5), one(1); + return half * modulus_ / (one + poissonRatio_); + } + + void CheckMaterialTensor(void) + { + std::cout << *materialTensor_ << std::endl; + } +}; + +// new class for topology optimization +template <class Real> +class Material_SIMP : public Material<Real> +{ +private: + Real density_; + int powerP_; + Real minDensity_; + +public: + virtual void InitializeSIMP(const int dim, const bool planeStrain, + const Real modulus, const Real poissonRatio, + const Real density, const int powerP, const Real minDensity) + { + TEUCHOS_TEST_FOR_EXCEPTION(powerP < 1, std::invalid_argument, + ">>> ERROR (InitializeSIMP): SIMP power is less than one!"); + Material<Real>::InitializeMaterial(dim, planeStrain, modulus, poissonRatio); + density_ = density; + powerP_ = powerP; + minDensity_ = minDensity; + } + + Real getSIMPScaleFactor(void) const + { + TEUCHOS_TEST_FOR_EXCEPTION(powerP_ < 1, std::invalid_argument, + ">>> ERROR (getSIMPScaleFactor): SIMP power is less than one!"); + Real one(1); + return minDensity_ + (one - minDensity_) * std::pow(density_, powerP_); + } + + Real getSIMPFirstDerivativeScaleFactor(void) const + { + TEUCHOS_TEST_FOR_EXCEPTION(powerP_ < 1, std::invalid_argument, + ">>> ERROR (getSIMPFirstDerivativeScaleFactor): SIMP power is less than one!"); + Real one(1); + return (one - minDensity_) * powerP_ * (std::pow(density_, powerP_ - 1)); + } + + Real getSIMPSecondDerivativeScaleFactor(void) const + { + TEUCHOS_TEST_FOR_EXCEPTION(powerP_ < 1, std::invalid_argument, + ">>> ERROR (getSIMPSecondDerivativeScaleFactor): SIMP power is less than one!"); + Real one(1), scale(0); + if (powerP_ > 1) + { + scale = (one - minDensity_) * powerP_ * (powerP_ - 1) * (std::pow(density_, powerP_ - 2)); + } + return scale; + } + + void setDensity(const Real dens) + { + density_ = dens; + } + + // the following function is not in use + Teuchos::RCP<Intrepid::FieldContainer<Real>> computeScaledMaterialTensor(const Real scale) const + { + Real zero(0); + int TMS = Material<Real>::getMaterialTensorDim(); + Teuchos::RCP<Intrepid::FieldContainer<Real>> scaledMaterialTensor = Teuchos::rcp(new Intrepid::FieldContainer<Real>(TMS, TMS)); + scaledMaterialTensor->initialize(zero); + + for (int i = 0; i < TMS; i++) + { + for (int j = 0; j < TMS; j++) + { + (*scaledMaterialTensor)(i, j) = scale * (*Material<Real>::gerMaterialTensor())(i, j); + } + } + return scaledMaterialTensor; + } +}; + +#endif diff --git a/tlnos/src/TOOLS/meshmanager.hpp b/tlnos/src/TOOLS/meshmanager.hpp new file mode 100644 index 0000000000000000000000000000000000000000..1ce27a78a485cae668142d03f56736945eeafbb4 --- /dev/null +++ b/tlnos/src/TOOLS/meshmanager.hpp @@ -0,0 +1,711 @@ +// @HEADER +// ************************************************************************ +// +// Rapid Optimization Library (ROL) Package +// Copyright (2014) Sandia Corporation +// +// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +// license for use of this work by or on behalf of the U.S. Government. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact lead developers: +// Drew Kouri (dpkouri@sandia.gov) and +// Denis Ridzal (dridzal@sandia.gov) +// +// ************************************************************************ +// @HEADER + +/*! \file meshmanager.hpp + \brief Defines the MeshManger classes. +*/ + +#ifndef MESHMANAGER_HPP +#define MESHMANAGER_HPP + +#include "Teuchos_ParameterList.hpp" +#include "Intrepid_FieldContainer.hpp" + +/** \class MeshManager + \brief This is the pure virtual parent class for mesh construction + and management; it enables the generation of a few select + meshes and the setup of data structures for computing + cell/subcell adjacencies, for example, the cell-to-node + adjacency map and the cell-to-edge adjacency map. +*/ +template <class Real> +class MeshManager +{ + +public: + /** \brief Destructor + */ + virtual ~MeshManager() {} + + /** \brief Returns node coordinates. + Format: number_of_nodes x 2 (Real) + (node_index) x, y coordinates + */ + virtual Teuchos::RCP<Intrepid::FieldContainer<Real>> getNodes() const = 0; + + /** \brief Returns cell to node adjacencies. + Format: number_of_cells x number_of_nodes_per_cell (int) + (cell_index) node_index1 node_index2 ... + */ + virtual Teuchos::RCP<Intrepid::FieldContainer<int>> getCellToNodeMap() const = 0; + + /** \brief Returns cell to edge adjacencies. + Format: number_of_cells x number_of_edges_per_cell (int) + (cell_index) edge_index1 edge_index2 ... + */ + virtual Teuchos::RCP<Intrepid::FieldContainer<int>> getCellToEdgeMap() const = 0; + + /** \brief Returns sideset information. + Format: The std::vector components are indexed by the local side number (0, 1, 2, ...); + the FieldConTainer is a 1D array of cell indices. + Input: Sideset number. Its meaning is context-dependent. + */ + virtual Teuchos::RCP<std::vector<std::vector<Intrepid::FieldContainer<int>>>> getSideSets() const = 0; + + /** \brief Returns number of cells. + */ + virtual int getNumCells() const = 0; + + /** \brief Returns number of nodes. + */ + virtual int getNumNodes() const = 0; + + /** \brief Returns number of edges. + */ + virtual int getNumEdges() const = 0; + +}; // MeshManager + +/** \class MeshManager_BackwardFacingStepChannel + \brief Mesh construction and mesh management for the + backward-facing step channel geometry, on + quadrilateral grids. +*/ +template <class Real> +class MeshManager_BackwardFacingStepChannel : public MeshManager<Real> +{ + + /* Backward-facing step geometry. + + *************************************************** + * * * * + * 3 * 4 * 5 * + * * * * + ********** * * * * * * * * * * * * * * * * * * * ** + * 1 * 2 * + * * * + ****************************************** + +*/ + +private: + Real channelH_; // channel height (height of regions 1+4) + Real channelW_; // channel width (width of regions 3+4+5) + Real stepH_; // step height (height of region 1) + Real stepW_; // step width (width of region 3) + Real observeW_; // width of observation region (width of region 1) + + int ref_; // mesh refinement level + + int nx1_; + int nx2_; + int nx3_; + int nx4_; + int nx5_; + int ny1_; + int ny2_; + int ny3_; + int ny4_; + int ny5_; + + int numCells_; + int numNodes_; + int numEdges_; + + Teuchos::RCP<Intrepid::FieldContainer<Real>> meshNodes_; + Teuchos::RCP<Intrepid::FieldContainer<int>> meshCellToNodeMap_; + Teuchos::RCP<Intrepid::FieldContainer<int>> meshCellToEdgeMap_; + +public: + MeshManager_BackwardFacingStepChannel(Teuchos::ParameterList &parlist) + { + // Geometry data. + channelH_ = parlist.sublist("Geometry").get("Channel height", 1.0); + channelW_ = parlist.sublist("Geometry").get("Channel width", 8.0); + stepH_ = parlist.sublist("Geometry").get("Step height", 0.5); + stepW_ = parlist.sublist("Geometry").get("Step width", 1.0); + observeW_ = parlist.sublist("Geometry").get("Observation width", 3.0); + // Mesh data. + ref_ = parlist.sublist("Geometry").get("Refinement level", 1); + nx1_ = parlist.sublist("Geometry").get("Observation region NX", 4 * ref_); + ny1_ = parlist.sublist("Geometry").get("Observation region NY", 5 * ref_); + nx2_ = parlist.sublist("Geometry").get("Laminar flow region NX", 2 * ref_); + ny2_ = ny1_; + nx3_ = parlist.sublist("Geometry").get("Inflow region NX", 1 * ref_); + ny3_ = parlist.sublist("Geometry").get("Inflow region NY", 2 * ref_); + nx4_ = nx1_; + ny4_ = ny3_; + nx5_ = nx2_; + ny5_ = ny3_; + numCells_ = (nx1_ + nx2_) * ny1_ + (nx3_ + nx1_ + nx2_) * ny3_; + numNodes_ = (nx1_ + nx2_ + 1) * ny1_ + (nx3_ + nx1_ + nx2_ + 1) * (ny3_ + 1); + numEdges_ = (2 * (nx1_ + nx2_) + 1) * ny1_ + (2 * (nx3_ + nx1_ + nx2_) + 1) * ny3_ + (nx3_ + nx1_ + nx2_); + // Compute mesh data structures. + computeNodes(); + computeCellToNodeMap(); + computeCellToEdgeMap(); + } + + Teuchos::RCP<Intrepid::FieldContainer<Real>> getNodes() const + { + return meshNodes_; + } + + Teuchos::RCP<Intrepid::FieldContainer<int>> getCellToNodeMap() const + { + return meshCellToNodeMap_; + } + + Teuchos::RCP<Intrepid::FieldContainer<int>> getCellToEdgeMap() const + { + return meshCellToEdgeMap_; + } + + int getNumCells() const + { + return numCells_; + } // getNumCells + + int getNumNodes() const + { + return numNodes_; + } // getNumNodes + + int getNumEdges() const + { + return numEdges_; + } // getNumEdges + +private: + void computeNodes() + { + + meshNodes_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numNodes_, 2)); + Intrepid::FieldContainer<Real> &nodes = *meshNodes_; + + Real dy1 = stepH_ / ny1_; + Real dy3 = (channelH_ - stepH_) / ny3_; + Real dx1 = observeW_ / nx1_; + Real dx2 = (channelW_ - stepW_ - observeW_) / nx2_; + Real dx3 = stepW_ / nx3_; + int nodeCt = 0; + + // bottom region + for (int j = 0; j < ny1_; ++j) + { + for (int i = 0; i <= nx1_; ++i) + { + nodes(nodeCt, 0) = stepW_ + i * dx1; + nodes(nodeCt, 1) = j * dy1; + ++nodeCt; + } + for (int i = 0; i < nx2_; ++i) + { + nodes(nodeCt, 0) = stepW_ + observeW_ + (i + 1) * dx2; + nodes(nodeCt, 1) = j * dy1; + ++nodeCt; + } + } + + // top region + for (int j = 0; j <= ny3_; ++j) + { + for (int i = 0; i <= nx3_; ++i) + { + nodes(nodeCt, 0) = i * dx3; + nodes(nodeCt, 1) = stepH_ + j * dy3; + ++nodeCt; + } + for (int i = 0; i < nx1_; ++i) + { + nodes(nodeCt, 0) = stepW_ + (i + 1) * dx1; + nodes(nodeCt, 1) = stepH_ + j * dy3; + ++nodeCt; + } + for (int i = 0; i < nx2_; ++i) + { + nodes(nodeCt, 0) = stepW_ + observeW_ + (i + 1) * dx2; + nodes(nodeCt, 1) = stepH_ + j * dy3; + ++nodeCt; + } + } + + } // computeNodes + + void computeCellToNodeMap() + { + + meshCellToNodeMap_ = Teuchos::rcp(new Intrepid::FieldContainer<int>(numCells_, 4)); + Intrepid::FieldContainer<int> &ctn = *meshCellToNodeMap_; + + int cellCt = 0; + + // bottom region + for (int j = 0; j < ny1_ - 1; ++j) + { + for (int i = 0; i < nx1_ + nx2_; ++i) + { + ctn(cellCt, 0) = j * (nx1_ + nx2_ + 1) + i; + ctn(cellCt, 1) = j * (nx1_ + nx2_ + 1) + (i + 1); + ctn(cellCt, 2) = (j + 1) * (nx1_ + nx2_ + 1) + (i + 1); + ctn(cellCt, 3) = (j + 1) * (nx1_ + nx2_ + 1) + i; + ++cellCt; + } + } + + // transition region + for (int i = 0; i < nx1_ + nx2_; ++i) + { + ctn(cellCt, 0) = (ny1_ - 1) * (nx1_ + nx2_ + 1) + i; + ctn(cellCt, 1) = (ny1_ - 1) * (nx1_ + nx2_ + 1) + (i + 1); + ctn(cellCt, 2) = ny1_ * (nx1_ + nx2_ + 1) + nx3_ + (i + 1); + ctn(cellCt, 3) = ny1_ * (nx1_ + nx2_ + 1) + nx3_ + i; + ++cellCt; + } + + // top region + for (int j = 0; j < ny3_; ++j) + { + for (int i = 0; i < nx3_ + nx1_ + nx2_; ++i) + { + ctn(cellCt, 0) = ny1_ * (nx1_ + nx2_ + 1) + j * (nx3_ + nx1_ + nx2_ + 1) + i; + ctn(cellCt, 1) = ny1_ * (nx1_ + nx2_ + 1) + j * (nx3_ + nx1_ + nx2_ + 1) + (i + 1); + ctn(cellCt, 2) = ny1_ * (nx1_ + nx2_ + 1) + (j + 1) * (nx3_ + nx1_ + nx2_ + 1) + (i + 1); + ctn(cellCt, 3) = ny1_ * (nx1_ + nx2_ + 1) + (j + 1) * (nx3_ + nx1_ + nx2_ + 1) + i; + ++cellCt; + } + } + + } // computeCellToNodeMap + + void computeCellToEdgeMap() + { + + meshCellToEdgeMap_ = Teuchos::rcp(new Intrepid::FieldContainer<int>(numCells_, 4)); + Intrepid::FieldContainer<int> &cte = *meshCellToEdgeMap_; + + int cellCt = 0; + + // bottom region + for (int j = 0; j < ny1_ - 1; ++j) + { + for (int i = 0; i < nx1_ + nx2_; ++i) + { + cte(cellCt, 0) = j * (2 * (nx1_ + nx2_) + 1) + i; + cte(cellCt, 1) = j * (2 * (nx1_ + nx2_) + 1) + (nx1_ + nx2_) + (i + 1); + cte(cellCt, 2) = (j + 1) * (2 * (nx1_ + nx2_) + 1) + i; + cte(cellCt, 3) = j * (2 * (nx1_ + nx2_) + 1) + (nx1_ + nx2_) + i; + ++cellCt; + } + } + + // transition region + for (int i = 0; i < nx1_ + nx2_; ++i) + { + cte(cellCt, 0) = (ny1_ - 1) * (2 * (nx1_ + nx2_) + 1) + i; + cte(cellCt, 1) = (ny1_ - 1) * (2 * (nx1_ + nx2_) + 1) + (nx1_ + nx2_) + (i + 1); + cte(cellCt, 2) = ny1_ * (2 * (nx1_ + nx2_) + 1) + nx3_ + i; + cte(cellCt, 3) = (ny1_ - 1) * (2 * (nx1_ + nx2_) + 1) + (nx1_ + nx2_) + i; + ++cellCt; + } + + // top region + for (int j = 0; j < ny3_; ++j) + { + for (int i = 0; i < nx3_ + nx1_ + nx2_; ++i) + { + cte(cellCt, 0) = ny1_ * (2 * (nx1_ + nx2_) + 1) + j * (2 * (nx3_ + nx1_ + nx2_) + 1) + i; + cte(cellCt, 1) = ny1_ * (2 * (nx1_ + nx2_) + 1) + j * (2 * (nx3_ + nx1_ + nx2_) + 1) + (nx3_ + nx1_ + nx2_) + (i + 1); + cte(cellCt, 2) = ny1_ * (2 * (nx1_ + nx2_) + 1) + (j + 1) * (2 * (nx3_ + nx1_ + nx2_) + 1) + i; + cte(cellCt, 3) = ny1_ * (2 * (nx1_ + nx2_) + 1) + j * (2 * (nx3_ + nx1_ + nx2_) + 1) + (nx3_ + nx1_ + nx2_) + i; + ++cellCt; + } + } + + } // computeCellToEdgeMap + + void setRefinementLevel(const int &refLevel) + { + ref_ = refLevel; + computeNodes(); + computeCellToNodeMap(); + computeCellToEdgeMap(); + } // setRefinementLevel + +}; // MeshManager_BackwardFacingStepChannel + +/** \class MeshManager_Rectangle + \brief Mesh construction and mesh management for the + backward-facing step channel geometry, on + quadrilateral grids. +*/ +template <class Real> +class MeshManager_Rectangle : public MeshManager<Real> +{ + + /* Rectangle geometry. + + *********************** + * * : + * * | + * * height + * * | + * * : + * * + *********************** + (X0,Y0) :--width--: + +*/ + +private: + Real width_; // rectangle height + Real height_; // rectangle width + Real X0_; // x coordinate of bottom left corner + Real Y0_; // y coordinate of bottom left corner + + int nx_; + int ny_; + + int numCells_; + int numNodes_; + int numEdges_; + + Teuchos::RCP<Intrepid::FieldContainer<Real>> meshNodes_; + Teuchos::RCP<Intrepid::FieldContainer<int>> meshCellToNodeMap_; + Teuchos::RCP<Intrepid::FieldContainer<int>> meshCellToEdgeMap_; + + Teuchos::RCP<std::vector<std::vector<Intrepid::FieldContainer<int>>>> meshSideSets_; + +public: + MeshManager_Rectangle(Teuchos::ParameterList &parlist) + { + // Geometry data. + width_ = parlist.sublist("Geometry").get("Width", 3.0); + height_ = parlist.sublist("Geometry").get("Height", 1.0); + X0_ = parlist.sublist("Geometry").get("X0", 0.0); + Y0_ = parlist.sublist("Geometry").get("Y0", 0.0); + // Mesh data. + nx_ = parlist.sublist("Geometry").get("NX", 3); + ny_ = parlist.sublist("Geometry").get("NY", 1); + numCells_ = nx_ * ny_; + numNodes_ = (nx_ + 1) * (ny_ + 1); + numEdges_ = (nx_ + 1) * ny_ + (ny_ + 1) * nx_; + // Compute and store mesh data structures. + computeNodes(); + computeCellToNodeMap(); + computeCellToEdgeMap(); + computeSideSets(); + } + + Teuchos::RCP<Intrepid::FieldContainer<Real>> getNodes() const + { + return meshNodes_; + } + + Teuchos::RCP<Intrepid::FieldContainer<int>> getCellToNodeMap() const + { + return meshCellToNodeMap_; + } + + Teuchos::RCP<Intrepid::FieldContainer<int>> getCellToEdgeMap() const + { + return meshCellToEdgeMap_; + } + + Teuchos::RCP<std::vector<std::vector<Intrepid::FieldContainer<int>>>> getSideSets() const + { + return meshSideSets_; + } + + int getNumCells() const + { + return numCells_; + } // getNumCells + + int getNumNodes() const + { + return numNodes_; + } // getNumNodes + + int getNumEdges() const + { + return numEdges_; + } // getNumEdges + +private: + void computeNodes() + { + + meshNodes_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numNodes_, 2)); + Intrepid::FieldContainer<Real> &nodes = *meshNodes_; + + Real dx = width_ / nx_; + Real dy = height_ / ny_; + int nodeCt = 0; + + for (int j = 0; j <= ny_; ++j) + { + Real ycoord = Y0_ + j * dy; + for (int i = 0; i <= nx_; ++i) + { + nodes(nodeCt, 0) = X0_ + i * dx; + nodes(nodeCt, 1) = ycoord; + ++nodeCt; + } + } + + } // computeNodes + + void computeCellToNodeMap() + { + + meshCellToNodeMap_ = Teuchos::rcp(new Intrepid::FieldContainer<int>(numCells_, 4)); + Intrepid::FieldContainer<int> &ctn = *meshCellToNodeMap_; + + int cellCt = 0; + + for (int j = 0; j < ny_; ++j) + { + for (int i = 0; i < nx_; ++i) + { + ctn(cellCt, 0) = j * (nx_ + 1) + i; + ctn(cellCt, 1) = j * (nx_ + 1) + (i + 1); + ctn(cellCt, 2) = (j + 1) * (nx_ + 1) + (i + 1); + ctn(cellCt, 3) = (j + 1) * (nx_ + 1) + i; + ++cellCt; + } + } + + } // computeCellToNodeMap + + void computeCellToEdgeMap() + { + + meshCellToEdgeMap_ = Teuchos::rcp(new Intrepid::FieldContainer<int>(numCells_, 4)); + Intrepid::FieldContainer<int> &cte = *meshCellToEdgeMap_; + + int cellCt = 0; + + for (int j = 0; j < ny_; ++j) + { + for (int i = 0; i < nx_; ++i) + { + cte(cellCt, 0) = j * (2 * nx_ + 1) + i; + cte(cellCt, 1) = j * (2 * nx_ + 1) + nx_ + (i + 1); + cte(cellCt, 2) = (j + 1) * (2 * nx_ + 1) + i; + cte(cellCt, 3) = j * (2 * nx_ + 1) + nx_ + i; + ++cellCt; + } + } + + } // computeCellToEdgeMap + + void computeSideSets() + { + + meshSideSets_ = Teuchos::rcp(new std::vector<std::vector<Intrepid::FieldContainer<int>>>(1)); + int numSides = 4; + (*meshSideSets_)[0].resize(numSides); + (*meshSideSets_)[0][0].resize(nx_); + (*meshSideSets_)[0][1].resize(ny_); + (*meshSideSets_)[0][2].resize(nx_); + (*meshSideSets_)[0][3].resize(ny_); + + for (int i = 0; i < nx_; ++i) + { + (*meshSideSets_)[0][0](i) = i; + } + for (int i = 0; i < ny_; ++i) + { + (*meshSideSets_)[0][1](i) = (i + 1) * nx_ - 1; + } + for (int i = 0; i < nx_; ++i) + { + (*meshSideSets_)[0][2](i) = i + nx_ * (ny_ - 1); + } + for (int i = 0; i < ny_; ++i) + { + (*meshSideSets_)[0][3](i) = i * nx_; + } + + } // computeSideSets + +}; // MeshManager_Rectangle + +template <class Real> +class MeshManager_Interval : public MeshManager<Real> +{ + + /* Interval geometry [X0,X0+width] */ + +private: + Real width_; // Interval width + Real X0_; // x coordinate left corner + + int nx_; + + int numCells_; + int numNodes_; + int numEdges_; + + Teuchos::RCP<Intrepid::FieldContainer<Real>> meshNodes_; + Teuchos::RCP<Intrepid::FieldContainer<int>> meshCellToNodeMap_; + Teuchos::RCP<Intrepid::FieldContainer<int>> meshCellToEdgeMap_; + + Teuchos::RCP<std::vector<std::vector<Intrepid::FieldContainer<int>>>> meshSideSets_; + +public: + MeshManager_Interval(Teuchos::ParameterList &parlist) + { + + // Geometry data + width_ = parlist.sublist("Geometry").get("Width", 1.0); + X0_ = parlist.sublist("Geometry").get("X0", 0.0); + + // Mesh data + nx_ = parlist.sublist("Geometry").get("NX", 10); + + numCells_ = nx_; + numNodes_ = nx_ + 1; + numEdges_ = 2; + + // Compute and store mesh data structures + computeNodes(); + computeCellToNodeMap(); + computeCellToEdgeMap(); + computeSideSets(); + } + + Teuchos::RCP<Intrepid::FieldContainer<Real>> getNodes() const + { + return meshNodes_; + } + + Teuchos::RCP<Intrepid::FieldContainer<int>> getCellToNodeMap() const + { + return meshCellToNodeMap_; + } + + Teuchos::RCP<Intrepid::FieldContainer<int>> getCellToEdgeMap() const + { + return meshCellToEdgeMap_; + } + + Teuchos::RCP<std::vector<std::vector<Intrepid::FieldContainer<int>>>> getSideSets() const + { + return meshSideSets_; + } + + int getNumCells() const + { + return numCells_; + } + + int getNumNodes() const + { + return numNodes_; + } // getNumNodes + + int getNumEdges() const + { + return numEdges_; + } // getNumEdges + +private: + void computeNodes() + { + + meshNodes_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numNodes_, 1)); + Intrepid::FieldContainer<Real> &nodes = *meshNodes_; + + Real dx = width_ / nx_; + + for (int i = 0; i < nx_; ++i) + { + nodes(i, 0) = X0_ + i * dx; + } + } // computeNodes + + void computeCellToNodeMap() + { + + meshCellToNodeMap_ = Teuchos::rcp(new Intrepid::FieldContainer<int>(numCells_, 2)); + Intrepid::FieldContainer<int> &ctn = *meshCellToNodeMap_; + + for (int i = 0; i < nx_; ++i) + { + ctn(i, 0) = i; + ctn(i, 1) = i + 1; + } + } // computeCellToNodeMap + + void computeCellToEdgeMap() + { + + meshCellToEdgeMap_ = Teuchos::rcp(new Intrepid::FieldContainer<int>(numCells_, 1)); + Intrepid::FieldContainer<int> &cte = *meshCellToEdgeMap_; + + for (int i = 0; i < nx_; ++i) + { + cte(i, 0) = i; + } + } + + void computeSideSets() + { + + using Intrepid::FieldContainer; + using std::vector; + + meshSideSets_ = Teuchos::rcp(new vector<vector<FieldContainer<int>>>(1)); + int numSides = 2; + + (*meshSideSets_)[0].resize(numSides); + (*meshSideSets_)[0][0](0) = 0; + (*meshSideSets_)[0][1](0) = numCells_ + 1; + + } // computeSideSets + +}; // MeshManager_Interval + +#endif diff --git a/tlnos/src/constraint.hpp b/tlnos/src/constraint.hpp new file mode 100644 index 0000000000000000000000000000000000000000..538c89fb57623fa67fe831b9015f21d2373f6cdf --- /dev/null +++ b/tlnos/src/constraint.hpp @@ -0,0 +1,218 @@ +// @HEADER +// ************************************************************************ +// +// Rapid Optimization Library (ROL) Package +// Copyright (2014) Sandia Corporation +// +// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +// license for use of this work by or on behalf of the U.S. Government. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact lead developers: +// Drew Kouri (dpkouri@sandia.gov) and +// Denis Ridzal (dridzal@sandia.gov) +// +// ************************************************************************ +// @HEADER + +/*! \file constraint.hpp + \brief Defines the SimOpt constraint for the 'poisson' example. +*/ + +#ifndef ROL_PDEOPT_POISSON_CONSTRAINT_H +#define ROL_PDEOPT_POISSON_CONSTRAINT_H + +#include "ROL_EqualityConstraint_SimOpt.hpp" +#include "ROL_TpetraMultiVector.hpp" +#include "Amesos2.hpp" +#include "data.hpp" + +template <class Real> +class EqualityConstraint_PDEOPT_Poisson : public ROL::EqualityConstraint_SimOpt<Real> +{ +private: + Teuchos::RCP<PoissonData<Real>> data_; + +public: + EqualityConstraint_PDEOPT_Poisson(const Teuchos::RCP<PoissonData<Real>> &data, + const Teuchos::RCP<Teuchos::ParameterList> &parlist) + { + data_ = data; + } + + using ROL::EqualityConstraint_SimOpt<Real>::value; + void value(ROL::Vector<Real> &c, const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) + { + Teuchos::RCP<Tpetra::MultiVector<>> cp = + (Teuchos::dyn_cast<ROL::TpetraMultiVector<Real>>(c)).getVector(); + Teuchos::RCP<const Tpetra::MultiVector<>> up = + (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real>>(u)).getVector(); + Teuchos::RCP<const Tpetra::MultiVector<>> zp = + (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real>>(z)).getVector(); + + Real one(1); + + // A*u + data_->getMatA()->apply(*up, *cp); + + // B*z + A*u + data_->getMatB()->apply(*zp, *cp, Teuchos::NO_TRANS, one, one); + + // A*u + B*z - f + cp->update(-one, *(data_->getVecF()), one); + } + + void applyJacobian_1(ROL::Vector<Real> &jv, const ROL::Vector<Real> &v, const ROL::Vector<Real> &u, + const ROL::Vector<Real> &z, Real &tol) + { + Teuchos::RCP<Tpetra::MultiVector<>> jvp = + (Teuchos::dyn_cast<ROL::TpetraMultiVector<Real>>(jv)).getVector(); + Teuchos::RCP<const Tpetra::MultiVector<>> vp = + (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real>>(v)).getVector(); + + // A*v + data_->getMatA()->apply(*vp, *jvp); + } + + void applyJacobian_2(ROL::Vector<Real> &jv, const ROL::Vector<Real> &v, const ROL::Vector<Real> &u, + const ROL::Vector<Real> &z, Real &tol) + { + Teuchos::RCP<Tpetra::MultiVector<>> jvp = + (Teuchos::dyn_cast<ROL::TpetraMultiVector<Real>>(jv)).getVector(); + Teuchos::RCP<const Tpetra::MultiVector<>> vp = + (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real>>(v)).getVector(); + + // B*v + data_->getMatB()->apply(*vp, *jvp); + } + + void applyAdjointJacobian_1(ROL::Vector<Real> &ajv, const ROL::Vector<Real> &v, const ROL::Vector<Real> &u, + const ROL::Vector<Real> &z, Real &tol) + { + Teuchos::RCP<Tpetra::MultiVector<>> ajvp = + (Teuchos::dyn_cast<ROL::TpetraMultiVector<Real>>(ajv)).getVector(); + Teuchos::RCP<const Tpetra::MultiVector<>> vp = + (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real>>(v)).getVector(); + + // A'*v + bool transpose = true; + data_->getMatA(transpose)->apply(*vp, *ajvp); + } + + void applyAdjointJacobian_2(ROL::Vector<Real> &ajv, const ROL::Vector<Real> &v, const ROL::Vector<Real> &u, + const ROL::Vector<Real> &z, Real &tol) + { + Teuchos::RCP<Tpetra::MultiVector<>> ajvp = + (Teuchos::dyn_cast<ROL::TpetraMultiVector<Real>>(ajv)).getVector(); + Teuchos::RCP<const Tpetra::MultiVector<>> vp = + (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real>>(v)).getVector(); + + // B'*v + bool transpose = true; + data_->getMatB(transpose)->apply(*vp, *ajvp); + } + + void applyAdjointHessian_11(ROL::Vector<Real> &ahwv, const ROL::Vector<Real> &w, const ROL::Vector<Real> &v, + const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) + { + ahwv.zero(); + } + + void applyAdjointHessian_12(ROL::Vector<Real> &ahwv, const ROL::Vector<Real> &w, const ROL::Vector<Real> &v, + const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) + { + ahwv.zero(); + } + + void applyAdjointHessian_21(ROL::Vector<Real> &ahwv, const ROL::Vector<Real> &w, const ROL::Vector<Real> &v, + const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) + { + ahwv.zero(); + } + + void applyAdjointHessian_22(ROL::Vector<Real> &ahwv, const ROL::Vector<Real> &w, const ROL::Vector<Real> &v, + const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) + { + ahwv.zero(); + } + + void applyInverseJacobian_1(ROL::Vector<Real> &ijv, const ROL::Vector<Real> &v, const ROL::Vector<Real> &u, + const ROL::Vector<Real> &z, Real &tol) + { + Teuchos::RCP<Tpetra::MultiVector<>> ijvp = + (Teuchos::dyn_cast<ROL::TpetraMultiVector<Real>>(ijv)).getVector(); + Teuchos::RCP<const Tpetra::MultiVector<>> vp = + (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real>>(v)).getVector(); + + data_->getSolver()->setX(ijvp); + data_->getSolver()->setB(vp); + data_->getSolver()->solve(); + + /* + // Construct solver using Amesos2 factory. + Teuchos::RCP<Amesos2::Solver< Tpetra::CrsMatrix<>, Tpetra::MultiVector<> > > solver; + try{ + solver = Amesos2::create< Tpetra::CrsMatrix<>,Tpetra::MultiVector<> >("KLU2", data_->getMatA(), ijvp, vp); + } catch (std::invalid_argument e) { + std::cout << e.what() << std::endl; + } + solver->numericFactorization(); + solver->solve(); + */ + } + + void applyInverseAdjointJacobian_1(ROL::Vector<Real> &iajv, const ROL::Vector<Real> &v, const ROL::Vector<Real> &u, + const ROL::Vector<Real> &z, Real &tol) + { + Teuchos::RCP<Tpetra::MultiVector<>> iajvp = + (Teuchos::dyn_cast<ROL::TpetraMultiVector<Real>>(iajv)).getVector(); + Teuchos::RCP<const Tpetra::MultiVector<>> vp = + (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real>>(v)).getVector(); + + bool transpose = true; + data_->getSolver(transpose)->setX(iajvp); + data_->getSolver(transpose)->setB(vp); + data_->getSolver(transpose)->solve(); + + /* + bool transpose = true; + // Construct solver using Amesos2 factory. + Teuchos::RCP<Amesos2::Solver< Tpetra::CrsMatrix<>, Tpetra::MultiVector<> > > solver; + try{ + solver = Amesos2::create< Tpetra::CrsMatrix<>,Tpetra::MultiVector<> >("KLU2", data_->getMatA(transpose), iajvp, vp); + } catch (std::invalid_argument e) { + std::cout << e.what() << std::endl; + } + solver->numericFactorization(); + solver->solve(); + */ + } +}; + +#endif diff --git a/tlnos/src/data.hpp b/tlnos/src/data.hpp new file mode 100644 index 0000000000000000000000000000000000000000..b1c080a0a90d570407ad88a1a4ff4a1cdfe52a85 --- /dev/null +++ b/tlnos/src/data.hpp @@ -0,0 +1,843 @@ +// @HEADER +// ************************************************************************ +// +// Rapid Optimization Library (ROL) Package +// Copyright (2014) Sandia Corporation +// +// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +// license for use of this work by or on behalf of the U.S. Government. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact lead developers: +// Drew Kouri (dpkouri@sandia.gov) and +// Denis Ridzal (dridzal@sandia.gov) +// +// ************************************************************************ +// @HEADER + +/*! \file data.hpp + \brief Generates and manages data for the Poisson example, including + all mesh and discretization data, matrices, etc. +*/ + +#ifndef ROL_PDEOPT_POISSON_DATA_H +#define ROL_PDEOPT_POISSON_DATA_H + +#include "Teuchos_GlobalMPISession.hpp" +#include "Teuchos_TimeMonitor.hpp" + +#include "Tpetra_DefaultPlatform.hpp" +#include "Tpetra_MultiVector.hpp" +#include "Tpetra_Vector.hpp" +#include "Tpetra_CrsGraph.hpp" +#include "Tpetra_CrsMatrix.hpp" +#include "Tpetra_Version.hpp" +#include "Tpetra_RowMatrixTransposer.hpp" +#include "MatrixMarket_Tpetra.hpp" + +#include "Intrepid_HGRAD_QUAD_C2_FEM.hpp" +#include "Intrepid_HGRAD_QUAD_C1_FEM.hpp" +#include "Intrepid_DefaultCubatureFactory.hpp" +#include "Intrepid_FunctionSpaceTools.hpp" +#include "Intrepid_CellTools.hpp" + +#include "Amesos2.hpp" + +#include "TOOLS/dofmanager.hpp" + +template <class Real> +class PoissonData +{ + +private: + Teuchos::RCP<MeshManager<Real>> meshMgr_; + Teuchos::RCP<DofManager<Real>> dofMgr_; + std::vector<Teuchos::RCP<Intrepid::Basis<Real, Intrepid::FieldContainer<Real>>>> basisPtrs_; + + Teuchos::RCP<const Teuchos::Comm<int>> commPtr_; + int myRank_; + int numProcs_; + + Real alpha_; + int basisOrder_; + + Teuchos::RCP<const Tpetra::Map<>> myOverlapMap_; + Teuchos::RCP<const Tpetra::Map<>> myUniqueMap_; + Teuchos::RCP<Tpetra::CrsGraph<>> matGraph_; + Teuchos::RCP<Tpetra::CrsMatrix<>> matA_; + Teuchos::RCP<Tpetra::CrsMatrix<>> matA_dirichlet_; + Teuchos::RCP<Tpetra::CrsMatrix<>> matA_dirichlet_trans_; + Teuchos::RCP<Tpetra::CrsMatrix<>> matM_; + Teuchos::RCP<Tpetra::CrsMatrix<>> matM_dirichlet_; + Teuchos::RCP<Tpetra::CrsMatrix<>> matM_dirichlet_trans_; + Teuchos::RCP<Tpetra::MultiVector<>> vecUd_; + Teuchos::RCP<Tpetra::MultiVector<>> vecF_; + Teuchos::RCP<Tpetra::MultiVector<>> vecF_overlap_; + Teuchos::RCP<Tpetra::MultiVector<>> vecF_dirichlet_; + + Teuchos::Array<int> myCellIds_; + + Teuchos::RCP<Amesos2::Solver<Tpetra::CrsMatrix<>, Tpetra::MultiVector<>>> solverA_; + Teuchos::RCP<Amesos2::Solver<Tpetra::CrsMatrix<>, Tpetra::MultiVector<>>> solverA_trans_; + + shards::CellTopology cellType_; + int spaceDim_; + int numNodesPerCell_; + int numCubPoints_; + + int totalNumCells_; + int totalNumDofs_; + int numCells_; + + Teuchos::RCP<Intrepid::FieldContainer<Real>> cubPoints_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> cubWeights_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> cellNodes_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> cellJac_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> cellJacInv_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> cellJacDet_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> cellWeightedMeasure_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> valReference_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> gradReference_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> valPhysical_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> gradPhysical_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> valPhysicalWeighted_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> gradPhysicalWeighted_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> gradgradMats_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> valvalMats_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> cubPointsPhysical_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> dataF_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> datavalVecF_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> dofPoints_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> dofPointsPhysical_; + Teuchos::RCP<Intrepid::FieldContainer<Real>> dataUd_; + +public: + PoissonData(const Teuchos::RCP<const Teuchos::Comm<int>> &comm, + const Teuchos::RCP<Teuchos::ParameterList> &parlist, + const Teuchos::RCP<std::ostream> &outStream) + { + + /************************************/ + /*** Retrieve communication data. ***/ + /************************************/ + commPtr_ = comm; + myRank_ = commPtr_->getRank(); + numProcs_ = commPtr_->getSize(); + *outStream << "Total number of processors: " << numProcs_ << std::endl; + /************************************/ + /************************************/ + + /*************************************/ + /*** Retrieve parameter list data. ***/ + /*************************************/ + alpha_ = parlist->sublist("Problem").get("Penalty", 1e-2); + basisOrder_ = parlist->sublist("Problem").get("Order of FE discretization", 1); + int cellSplit = parlist->sublist("Geometry").get("Partition type", 1); + /*************************************/ + /*************************************/ + + /****************************************************************************/ + /*** Initialize mesh / finite element fields / degree-of-freedom manager. ***/ + /****************************************************************************/ + + // Mesh manager. + meshMgr_ = Teuchos::rcp(new MeshManager_Rectangle<Real>(*parlist)); + printMeshData(*outStream); + // Finite element fields. + Teuchos::RCP<Intrepid::Basis<Real, Intrepid::FieldContainer<Real>>> basisPtr; + if (basisOrder_ == 1) + { + basisPtr = Teuchos::rcp(new Intrepid::Basis_HGRAD_QUAD_C1_FEM<Real, Intrepid::FieldContainer<Real>>); + } + else if (basisOrder_ == 2) + { + basisPtr = Teuchos::rcp(new Intrepid::Basis_HGRAD_QUAD_C2_FEM<Real, Intrepid::FieldContainer<Real>>); + } + basisPtrs_.resize(1, Teuchos::null); + basisPtrs_[0] = basisPtr; + // DOF coordinate interface. + Teuchos::RCP<Intrepid::DofCoordsInterface<Intrepid::FieldContainer<Real>>> coord_iface = + Teuchos::rcp_dynamic_cast<Intrepid::DofCoordsInterface<Intrepid::FieldContainer<Real>>>(basisPtrs_[0]); + // Degree-of-freedom manager. + dofMgr_ = Teuchos::rcp(new DofManager<Real>(meshMgr_, basisPtrs_)); + // Retrieve total number of cells in the mesh. + totalNumCells_ = meshMgr_->getNumCells(); + // Retrieve total number of degrees of freedom in the mesh. + totalNumDofs_ = dofMgr_->getNumDofs(); + + /****************************************************************************/ + /****************************************************************************/ + + /****************************************************/ + /*** Build parallel communication infrastructure. ***/ + /****************************************************/ + + // Partition the cells in the mesh. We use a basic quasi-equinumerous partitioning, + // where the remainder, if any, is assigned to the last processor. + Teuchos::Array<int> myGlobIds_; + Teuchos::Array<int> cellOffsets_(numProcs_, 0); + int cellsPerProc = totalNumCells_ / numProcs_; + numCells_ = cellsPerProc; + switch (cellSplit) + { + case 0: + if (myRank_ == 0) + { // remainder in the first + numCells_ += totalNumCells_ % numProcs_; + } + for (int i = 1; i < numProcs_; ++i) + { + cellOffsets_[i] = cellOffsets_[i - 1] + cellsPerProc + (static_cast<int>(i == 1)) * (totalNumCells_ % numProcs_); + } + break; + case 1: + if (myRank_ == numProcs_ - 1) + { // remainder in the last + numCells_ += totalNumCells_ % numProcs_; + } + for (int i = 1; i < numProcs_; ++i) + { + cellOffsets_[i] = cellOffsets_[i - 1] + cellsPerProc; + } + break; + case 2: + if (myRank_ < (totalNumCells_ % numProcs_)) + { // spread remainder, starting from the first + numCells_++; + } + for (int i = 1; i < numProcs_; ++i) + { + cellOffsets_[i] = cellOffsets_[i - 1] + cellsPerProc + (static_cast<int>(i - 1 < (totalNumCells_ % numProcs_))); + } + break; + } + Intrepid::FieldContainer<int> &cellDofs = *(dofMgr_->getCellDofs()); + int numLocalDofs = cellDofs.dimension(1); + *outStream << "Cell offsets across processors: " << cellOffsets_ << std::endl; + for (int i = 0; i < numCells_; ++i) + { + myCellIds_.push_back(cellOffsets_[myRank_] + i); + for (int j = 0; j < numLocalDofs; ++j) + { + myGlobIds_.push_back(cellDofs(cellOffsets_[myRank_] + i, j)); + } + } + std::sort(myGlobIds_.begin(), myGlobIds_.end()); + myGlobIds_.erase(std::unique(myGlobIds_.begin(), myGlobIds_.end()), myGlobIds_.end()); + + // Build maps. + myOverlapMap_ = Teuchos::rcp(new Tpetra::Map<>(Teuchos::OrdinalTraits<Tpetra::global_size_t>::invalid(), + myGlobIds_, 0, comm)); + //std::cout << std::endl << myOverlapMap_->getNodeElementList(); + /** One can also use the non-member function: + myOverlapMap_ = Tpetra::createNonContigMap<int,int>(myGlobIds_, comm); + to build the overlap map. + **/ + myUniqueMap_ = Tpetra::createOneToOne<int, int>(myOverlapMap_); + //std::cout << std::endl << myUniqueMap_->getNodeElementList() << std::endl; + + /****************************************************/ + /****************************************************/ + + /****************************************************/ + /*** Set up local discretization data and arrays. ***/ + /****************************************************/ + + // Retrieve some basic cell information. + cellType_ = (basisPtrs_[0])->getBaseCellTopology(); // get the cell type from any basis + spaceDim_ = cellType_.getDimension(); // retrieve spatial dimension + numNodesPerCell_ = cellType_.getNodeCount(); // retrieve number of nodes per cell + + // Cubature data. + Intrepid::DefaultCubatureFactory<Real> cubFactory; // create cubature factory + int cubDegree = 4; // set cubature degree, e.g., 2 + Teuchos::RCP<Intrepid::Cubature<Real>> cellCub = cubFactory.create(cellType_, cubDegree); // create default cubature + numCubPoints_ = cellCub->getNumPoints(); // retrieve number of cubature points + + int lfs = dofMgr_->getLocalFieldSize(0); + + // Discretization data. + cubPoints_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCubPoints_, spaceDim_)); + cubWeights_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCubPoints_)); + cubPointsPhysical_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, numCubPoints_, spaceDim_)); + dofPoints_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(lfs, spaceDim_)); + dofPointsPhysical_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, lfs, spaceDim_)); + cellNodes_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, numNodesPerCell_, spaceDim_)); + cellJac_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, numCubPoints_, spaceDim_, spaceDim_)); + cellJacInv_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, numCubPoints_, spaceDim_, spaceDim_)); + cellJacDet_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, numCubPoints_)); + cellWeightedMeasure_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, numCubPoints_)); + valReference_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(lfs, numCubPoints_)); + gradReference_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(lfs, numCubPoints_, spaceDim_)); + valPhysical_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, lfs, numCubPoints_)); + gradPhysical_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, lfs, numCubPoints_, spaceDim_)); + valPhysicalWeighted_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, lfs, numCubPoints_)); + gradPhysicalWeighted_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, lfs, numCubPoints_, spaceDim_)); + gradgradMats_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, lfs, lfs)); + valvalMats_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, lfs, lfs)); + dataF_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, numCubPoints_)); + datavalVecF_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, lfs)); + dataUd_ = Teuchos::rcp(new Intrepid::FieldContainer<Real>(numCells_, lfs)); + + // Geometric definition of the cells in the mesh, based on the cell-to-node map and the domain partition. + Intrepid::FieldContainer<Real> &nodes = *meshMgr_->getNodes(); + Intrepid::FieldContainer<int> &ctn = *meshMgr_->getCellToNodeMap(); + for (int i = 0; i < numCells_; ++i) + { + for (int j = 0; j < numNodesPerCell_; ++j) + { + for (int k = 0; k < spaceDim_; ++k) + { + (*cellNodes_)(i, j, k) = nodes(ctn(myCellIds_[i], j), k); + } + } + } + + /****************************************************/ + /****************************************************/ + + /****************************************************************/ + /*** Assemble cellwise contributions to vectors and matrices. ***/ + /****************************************************************/ + + cellCub->getCubature(*cubPoints_, *cubWeights_); // retrieve cubature points and weights + (*basisPtrs_[0]).getValues(*gradReference_, *cubPoints_, Intrepid::OPERATOR_GRAD); // evaluate grad operator at cubature points + (*basisPtrs_[0]).getValues(*valReference_, *cubPoints_, Intrepid::OPERATOR_VALUE); // evaluate value operator at cubature points + + Intrepid::CellTools<Real>::setJacobian(*cellJac_, *cubPoints_, *cellNodes_, cellType_); // compute cell Jacobians + Intrepid::CellTools<Real>::setJacobianInv(*cellJacInv_, *cellJac_); // compute inverses of cell Jacobians + Intrepid::CellTools<Real>::setJacobianDet(*cellJacDet_, *cellJac_); // compute determinants of cell Jacobians + + Intrepid::FunctionSpaceTools::computeCellMeasure<Real>(*cellWeightedMeasure_, // compute weighted cell measure + *cellJacDet_, + *cubWeights_); + + Intrepid::FunctionSpaceTools::HGRADtransformGRAD<Real>(*gradPhysical_, // transform reference gradients into physical space + *cellJacInv_, + *gradReference_); + Intrepid::FunctionSpaceTools::multiplyMeasure<Real>(*gradPhysicalWeighted_, // multiply with weighted measure + *cellWeightedMeasure_, + *gradPhysical_); + Intrepid::FunctionSpaceTools::integrate<Real>(*gradgradMats_, // compute local grad.grad (stiffness) matrices + *gradPhysical_, + *gradPhysicalWeighted_, + Intrepid::COMP_CPP); + + Intrepid::FunctionSpaceTools::HGRADtransformVALUE<Real>(*valPhysical_, // transform reference values into physical space + *valReference_); + Intrepid::FunctionSpaceTools::multiplyMeasure<Real>(*valPhysicalWeighted_, // multiply with weighted measure + *cellWeightedMeasure_, + *valPhysical_); + Intrepid::FunctionSpaceTools::integrate<Real>(*valvalMats_, // compute local val.val (mass) matrices + *valPhysical_, + *valPhysicalWeighted_, + Intrepid::COMP_CPP); + + Intrepid::CellTools<Real>::mapToPhysicalFrame(*cubPointsPhysical_, // map reference cubature points to physical space + *cubPoints_, + *cellNodes_, + cellType_); + for (int i = 0; i < numCells_; ++i) + { // evaluate functions at these points + for (int j = 0; j < numCubPoints_; ++j) + { + (*dataF_)(i, j) = funcRHS((*cubPointsPhysical_)(i, j, 0), (*cubPointsPhysical_)(i, j, 1)); + } + } + Intrepid::FunctionSpaceTools::integrate<Real>(*datavalVecF_, // compute local data.val vectors for RHS F + *dataF_, + *valPhysicalWeighted_, + Intrepid::COMP_CPP); + + coord_iface->getDofCoords(*dofPoints_); // get coordinates of DOFs in reference cell + Intrepid::CellTools<Real>::mapToPhysicalFrame(*dofPointsPhysical_, // map reference DOF locations to physical space + *dofPoints_, + *cellNodes_, + cellType_); + for (int i = 0; i < numCells_; ++i) + { // evaluate functions at these points + for (int j = 0; j < lfs; ++j) + { + (*dataUd_)(i, j) = funcTarget((*dofPointsPhysical_)(i, j, 0), (*dofPointsPhysical_)(i, j, 1)); + } + } + + /****************************************************************/ + /****************************************************************/ + + /****************************************/ + /*** Assemble global data structures. ***/ + /****************************************/ + + // Assemble graph. + matGraph_ = Teuchos::rcp(new Tpetra::CrsGraph<>(myUniqueMap_, 0)); + Teuchos::ArrayRCP<const int> cellDofsArrayRCP = cellDofs.getData(); + for (int i = 0; i < numCells_; ++i) + { + for (int j = 0; j < numLocalDofs; ++j) + { + matGraph_->insertGlobalIndices(cellDofs(myCellIds_[i], j), cellDofsArrayRCP(myCellIds_[i] * numLocalDofs, numLocalDofs)); + } + } + matGraph_->fillComplete(); + + // Assemble matrices. + // Stiffness matrix A. + matA_ = Tpetra::rcp(new Tpetra::CrsMatrix<>(matGraph_)); + int numLocalMatEntries = numLocalDofs * numLocalDofs; + Teuchos::ArrayRCP<const Real> gradgradArrayRCP = gradgradMats_->getData(); + for (int i = 0; i < numCells_; ++i) + { + for (int j = 0; j < numLocalDofs; ++j) + { + matA_->sumIntoGlobalValues(cellDofs(myCellIds_[i], j), + cellDofsArrayRCP(myCellIds_[i] * numLocalDofs, numLocalDofs), + gradgradArrayRCP(i * numLocalMatEntries + j * numLocalDofs, numLocalDofs)); + } + } + matA_->fillComplete(); + + // Mass matrix M. + matM_ = Tpetra::rcp(new Tpetra::CrsMatrix<>(matGraph_)); + Teuchos::ArrayRCP<const Real> valvalArrayRCP = valvalMats_->getData(); + for (int i = 0; i < numCells_; ++i) + { + for (int j = 0; j < numLocalDofs; ++j) + { + matM_->sumIntoGlobalValues(cellDofs(myCellIds_[i], j), + cellDofsArrayRCP(myCellIds_[i] * numLocalDofs, numLocalDofs), + valvalArrayRCP(i * numLocalMatEntries + j * numLocalDofs, numLocalDofs)); + } + } + matM_->fillComplete(); + + // Assemble vectors. + // vecF_ requires assembly using vecF_overlap_ and redistribution + vecF_ = Tpetra::rcp(new Tpetra::MultiVector<>(matA_->getRangeMap(), 1, true)); + vecF_overlap_ = Tpetra::rcp(new Tpetra::MultiVector<>(myOverlapMap_, 1, true)); + for (int i = 0; i < numCells_; ++i) + { // assembly on the overlap map + for (int j = 0; j < numLocalDofs; ++j) + { + vecF_overlap_->sumIntoGlobalValue(cellDofs(myCellIds_[i], j), + 0, + (*datavalVecF_)[i * numLocalDofs + j]); + } + } + Tpetra::Export<> exporter(vecF_overlap_->getMap(), vecF_->getMap()); // redistribution: + vecF_->doExport(*vecF_overlap_, exporter, Tpetra::ADD); // from the overlap map to the unique map + // vecUd_ does not require assembly + vecUd_ = Tpetra::rcp(new Tpetra::MultiVector<>(matA_->getDomainMap(), 1, true)); + for (int i = 0; i < numCells_; ++i) + { + for (int j = 0; j < numLocalDofs; ++j) + { + if (vecUd_->getMap()->isNodeGlobalElement(cellDofs(myCellIds_[i], j))) + { + vecUd_->replaceGlobalValue(cellDofs(myCellIds_[i], j), + 0, + (*dataUd_)[i * numLocalDofs + j]); + } + } + } + + // Apply Dirichlet conditions. + // Stiffness matrix with Dirichlet conditions: + // AD = [ A11 A12 ] where A = [ A11 A12 ] + // [ 0 I ] [ A21 A22 ] + // Mass matrix with Dirichlet conditions: + // MD = [ M11 M12 ] where M = [ M11 M12 ] + // [ 0 0 ] [ M21 M22 ] + // Vector F with Dirichlet conditions G: + // FD = [ F1 ] where F = [ F1 ] + // [ G ] [ F2 ] + Teuchos::RCP<Tpetra::Details::DefaultTypes::node_type> node = matA_->getNode(); + matA_dirichlet_ = matA_->clone(node); + matM_dirichlet_ = matM_->clone(node); + vecF_dirichlet_ = Tpetra::rcp(new Tpetra::MultiVector<>(matA_->getRangeMap(), 1, true)); + Tpetra::deep_copy(*vecF_dirichlet_, *vecF_); + Teuchos::RCP<std::vector<std::vector<Intrepid::FieldContainer<int>>>> dirichletSideSets = meshMgr_->getSideSets(); + std::vector<std::vector<Intrepid::FieldContainer<int>>> &dss = *dirichletSideSets; + Teuchos::Array<int> mySortedCellIds_(myCellIds_); + std::sort(mySortedCellIds_.begin(), mySortedCellIds_.end()); + mySortedCellIds_.erase(std::unique(mySortedCellIds_.begin(), mySortedCellIds_.end()), mySortedCellIds_.end()); + std::vector<Teuchos::Array<int>> myDirichletCellIds_(dss[0].size()); + for (int i = 0; i < static_cast<int>(dss[0].size()); ++i) + { + for (int j = 0; j < dss[0][i].dimension(0); ++j) + { + if (std::binary_search(mySortedCellIds_.begin(), mySortedCellIds_.end(), dss[0][i](j))) + { + myDirichletCellIds_[i].push_back(dss[0][i](j)); + } + } + } + Intrepid::FieldContainer<int> &cte = *(meshMgr_->getCellToEdgeMap()); + Intrepid::FieldContainer<int> &nodeDofs = *(dofMgr_->getNodeDofs()); + Intrepid::FieldContainer<int> &edgeDofs = *(dofMgr_->getEdgeDofs()); + std::vector<std::vector<int>> dofTags = (basisPtrs_[0])->getAllDofTags(); + int numDofsPerNode = 0; + int numDofsPerEdge = 0; + for (int j = 0; j < (basisPtrs_[0])->getCardinality(); ++j) + { + if (dofTags[j][0] == 0) + { + numDofsPerNode = dofTags[j][3]; + } + if (dofTags[j][0] == 1) + { + numDofsPerEdge = dofTags[j][3]; + } + } + Teuchos::Array<int> myDirichletDofs_; + for (int i = 0; i < static_cast<int>(myDirichletCellIds_.size()); ++i) + { + for (int j = 0; j < myDirichletCellIds_[i].size(); ++j) + { + for (int k = 0; k < numDofsPerNode; ++k) + { + const CellTopologyData *ctd = cellType_.getCellTopologyData(); + Teuchos::ArrayView<unsigned> locNodes(const_cast<unsigned *>(ctd->subcell[spaceDim_ - 1][i].node), cellType_.getVertexCount(spaceDim_ - 1, i)); + for (int l = 0; l < static_cast<int>(cellType_.getVertexCount(spaceDim_ - 1, i)); ++l) + { + myDirichletDofs_.push_back(nodeDofs(ctn(myDirichletCellIds_[i][j], locNodes[l]), k)); + } + } + for (int k = 0; k < numDofsPerEdge; ++k) + { + myDirichletDofs_.push_back(edgeDofs(cte(myDirichletCellIds_[i][j], i), k)); + } + } + } + std::sort(myDirichletDofs_.begin(), myDirichletDofs_.end()); + myDirichletDofs_.erase(std::unique(myDirichletDofs_.begin(), myDirichletDofs_.end()), myDirichletDofs_.end()); + matA_dirichlet_->resumeFill(); + matM_dirichlet_->resumeFill(); + for (int i = 0; i < myDirichletDofs_.size(); ++i) + { + if (myUniqueMap_->isNodeGlobalElement(myDirichletDofs_[i])) + { + size_t numRowEntries = matA_dirichlet_->getNumEntriesInGlobalRow(myDirichletDofs_[i]); + Teuchos::Array<int> indices(numRowEntries, 0); + Teuchos::Array<Real> values(numRowEntries, 0); + Teuchos::Array<Real> canonicalValues(numRowEntries, 0); + Teuchos::Array<Real> zeroValues(numRowEntries, 0); + matA_dirichlet_->getGlobalRowCopy(myDirichletDofs_[i], indices, values, numRowEntries); + matM_dirichlet_->getGlobalRowCopy(myDirichletDofs_[i], indices, values, numRowEntries); + for (int j = 0; j < indices.size(); ++j) + { + if (myDirichletDofs_[i] == indices[j]) + { + canonicalValues[j] = 1.0; + } + } + matA_dirichlet_->replaceGlobalValues(myDirichletDofs_[i], indices, canonicalValues); + matM_dirichlet_->replaceGlobalValues(myDirichletDofs_[i], indices, zeroValues); + vecF_dirichlet_->replaceGlobalValue(myDirichletDofs_[i], 0, 0); + } + } + matA_dirichlet_->fillComplete(); + matM_dirichlet_->fillComplete(); + + // Create matrix transposes. + Tpetra::RowMatrixTransposer<> transposerA(matA_dirichlet_); + Tpetra::RowMatrixTransposer<> transposerM(matM_dirichlet_); + matA_dirichlet_trans_ = transposerA.createTranspose(); + matM_dirichlet_trans_ = transposerM.createTranspose(); + + /*********************************/ + /*** Construct solver objects. ***/ + /*********************************/ + + // Construct solver using Amesos2 factory. + try + { + solverA_ = Amesos2::create<Tpetra::CrsMatrix<>, Tpetra::MultiVector<>>("KLU2", matA_dirichlet_); + } + catch (std::invalid_argument e) + { + std::cout << e.what() << std::endl; + } + try + { + solverA_trans_ = Amesos2::create<Tpetra::CrsMatrix<>, Tpetra::MultiVector<>>("KLU2", matA_dirichlet_trans_); + } + catch (std::invalid_argument e) + { + std::cout << e.what() << std::endl; + } + solverA_->numericFactorization(); + solverA_trans_->numericFactorization(); + + /****************************************/ + /****************************************/ + + //outputTpetraData(); + } + + Teuchos::RCP<Tpetra::CrsMatrix<>> getMatA(const bool &transpose = false) const + { + if (transpose) + { + return matA_dirichlet_trans_; + } + else + { + return matA_dirichlet_; + } + } + + Teuchos::RCP<Tpetra::CrsMatrix<>> getMatB(const bool &transpose = false) const + { + if (transpose) + { + return matM_dirichlet_trans_; + } + else + { + return matM_dirichlet_; + } + } + + Teuchos::RCP<Tpetra::CrsMatrix<>> getMatM() const + { + return matM_; + } + + Teuchos::RCP<Tpetra::CrsMatrix<>> getMatR() const + { + return matM_; + } + + Teuchos::RCP<Tpetra::MultiVector<>> getVecUd() const + { + return vecUd_; + } + + Teuchos::RCP<Tpetra::MultiVector<>> getVecF() const + { + return vecF_dirichlet_; + } + + Teuchos::RCP<Amesos2::Solver<Tpetra::CrsMatrix<>, Tpetra::MultiVector<>>> getSolver(const bool &transpose = false) const + { + if (transpose) + { + return solverA_trans_; + } + else + { + return solverA_; + } + } + + Real funcRHS(const Real &x1, const Real &x2) const + { + return 2.0 * M_PI * M_PI * std::sin(M_PI * x1) * std::sin(M_PI * x2) + (1.0 / (alpha_ * 128.0 * M_PI * M_PI)) * std::sin(8.0 * M_PI * x1) * std::sin(8.0 * M_PI * x2); + } + + Real funcTarget(const Real &x1, const Real &x2) const + { + return std::sin(M_PI * x1) * std::sin(M_PI * x2) - std::sin(8.0 * M_PI * x1) * std::sin(8.0 * M_PI * x2); + } + + Real funcStateSolution(const Real &x1, const Real &x2) const + { + return std::sin(M_PI * x1) * std::sin(M_PI * x2); + } + + Real computeStateError(const Teuchos::RCP<const Tpetra::MultiVector<>> &soln) const + { + + Teuchos::RCP<Tpetra::MultiVector<>> soln_overlap = + Tpetra::rcp(new Tpetra::MultiVector<>(vecF_overlap_->getMap(), 1, true)); + Tpetra::Import<> importer(vecUd_->getMap(), soln_overlap->getMap()); // redistribution: + soln_overlap->doImport(*soln, importer, Tpetra::REPLACE); // from the unique map to the overlap map + + Intrepid::DefaultCubatureFactory<Real> cubFactory; // create cubature factory + int cubDeg = 6; // set cubature degree, e.g., 6 + Teuchos::RCP<Intrepid::Cubature<Real>> cellCub = cubFactory.create(cellType_, cubDeg); // create cubature for error computation + int numCubPts = cellCub->getNumPoints(); // retrieve number of cubature points + int lfs = dofMgr_->getLocalFieldSize(0); + Intrepid::FieldContainer<Real> cubPts(numCubPts, spaceDim_); + Intrepid::FieldContainer<Real> cubWts(numCubPts); + Intrepid::FieldContainer<Real> cubPtsPhys(numCells_, numCubPts, spaceDim_); + Intrepid::FieldContainer<Real> jac(numCells_, numCubPts, spaceDim_, spaceDim_); + Intrepid::FieldContainer<Real> jacDet(numCells_, numCubPts); + Intrepid::FieldContainer<Real> valRef(lfs, numCubPts); + Intrepid::FieldContainer<Real> valPhys(numCells_, lfs, numCubPts); + Intrepid::FieldContainer<Real> wtMeas(numCells_, numCubPts); + Intrepid::FieldContainer<Real> inCoeffs(numCells_, lfs); + Intrepid::FieldContainer<Real> funcVals(numCells_, numCubPts); + Intrepid::FieldContainer<Real> funcValsWt(numCells_, numCubPts); + Intrepid::FieldContainer<Real> normSquaredError(numCells_); + + cellCub->getCubature(cubPts, cubWts); // retrieve cubature points and weights + (*basisPtrs_[0]).getValues(valRef, cubPts, Intrepid::OPERATOR_VALUE); // evaluate value operator at cubature points + + Intrepid::CellTools<Real>::setJacobian(jac, cubPts, *cellNodes_, cellType_); // compute cell Jacobians + Intrepid::CellTools<Real>::setJacobianDet(jacDet, jac); // compute determinants of cell Jacobians + + Intrepid::FunctionSpaceTools::HGRADtransformVALUE<Real>(valPhys, // transform reference values into physical space + valRef); + + Intrepid::FunctionSpaceTools::computeCellMeasure<Real>(wtMeas, // compute weighted cell measure + jacDet, + cubWts); + + Intrepid::CellTools<Real>::mapToPhysicalFrame(cubPtsPhys, // map reference cubature points to physical space + cubPts, + *cellNodes_, + cellType_); + + Intrepid::FieldContainer<int> &cellDofs = *(dofMgr_->getCellDofs()); + Teuchos::ArrayRCP<const Real> soln_data = soln_overlap->get1dView(); // populate inCoeffs + for (int i = 0; i < numCells_; ++i) + { + for (int j = 0; j < lfs; ++j) + { + inCoeffs(i, j) = soln_data[soln_overlap->getMap()->getLocalElement(cellDofs(myCellIds_[i], j))]; + } + } + + Intrepid::FunctionSpaceTools::evaluate<Real>(funcVals, inCoeffs, valPhys); + + for (int i = 0; i < numCells_; ++i) + { // compute error + for (int j = 0; j < numCubPts; ++j) + { + funcVals(i, j) -= funcStateSolution(cubPtsPhys(i, j, 0), cubPtsPhys(i, j, 1)); + } + } + + Intrepid::FunctionSpaceTools::scalarMultiplyDataData<Real>(funcValsWt, // multiply with weighted measure + wtMeas, + funcVals); + + Intrepid::FunctionSpaceTools::integrate<Real>(normSquaredError, // compute norm squared of local error + funcVals, + funcValsWt, + Intrepid::COMP_CPP); + + Real localErrorSum(0); + Real globalErrorSum(0); + for (int i = 0; i < numCells_; ++i) + { + localErrorSum += normSquaredError(i); + } + Teuchos::RCP<const Teuchos::Comm<int>> comm = soln_overlap->getMap()->getComm(); + Teuchos::reduceAll<int, Real>(*comm, Teuchos::REDUCE_SUM, 1, &localErrorSum, &globalErrorSum); + + return globalErrorSum; + } + + void printMeshData(std::ostream &outStream) const + { + Teuchos::RCP<Intrepid::FieldContainer<Real>> nodesPtr = meshMgr_->getNodes(); + Teuchos::RCP<Intrepid::FieldContainer<int>> cellToNodeMapPtr = meshMgr_->getCellToNodeMap(); + Intrepid::FieldContainer<Real> &nodes = *nodesPtr; + Intrepid::FieldContainer<int> &cellToNodeMap = *cellToNodeMapPtr; + outStream << "Number of nodes = " << meshMgr_->getNumNodes() << std::endl; + outStream << "Number of cells = " << meshMgr_->getNumCells() << std::endl; + outStream << "Number of edges = " << meshMgr_->getNumEdges() << std::endl; + // Print mesh to file. + if ((myRank_ == 0)) + { + std::ofstream meshfile; + meshfile.open("cell_to_node_quad.txt"); + for (int i = 0; i < cellToNodeMap.dimension(0); ++i) + { + for (int j = 0; j < cellToNodeMap.dimension(1); ++j) + { + meshfile << cellToNodeMap(i, j) << " "; + } + meshfile << std::endl; + } + meshfile.close(); + meshfile.open("cell_to_node_tri.txt"); + for (int i = 0; i < cellToNodeMap.dimension(0); ++i) + { + for (int j = 0; j < 3; ++j) + { + meshfile << cellToNodeMap(i, j) << " "; + } + meshfile << std::endl; + for (int j = 2; j < 5; ++j) + { + meshfile << cellToNodeMap(i, j % 4) << " "; + } + meshfile << std::endl; + } + meshfile.close(); + meshfile.open("nodes.txt"); + meshfile.precision(16); + for (int i = 0; i < nodes.dimension(0); ++i) + { + for (int j = 0; j < nodes.dimension(1); ++j) + { + meshfile << std::scientific << nodes(i, j) << " "; + } + meshfile << std::endl; + } + meshfile.close(); + /* This somewhat clunky output is for gnuplot. + meshfile.open("mesh.txt"); + for (int i=0; i<cellToNodeMap.dimension(0); ++i) { + meshfile << nodes(cellToNodeMap(i,0), 0) << " " << nodes(cellToNodeMap(i,0), 1) << std::endl; + meshfile << nodes(cellToNodeMap(i,1), 0) << " " << nodes(cellToNodeMap(i,1), 1) << std::endl; + meshfile << nodes(cellToNodeMap(i,2), 0) << " " << nodes(cellToNodeMap(i,2), 1) << std::endl; + meshfile << nodes(cellToNodeMap(i,3), 0) << " " << nodes(cellToNodeMap(i,3), 1) << std::endl; + meshfile << nodes(cellToNodeMap(i,0), 0) << " " << nodes(cellToNodeMap(i,0), 1) << std::endl; + meshfile << nodes(cellToNodeMap(i,1), 0) << " " << nodes(cellToNodeMap(i,1), 1) << std::endl; + meshfile << nodes(cellToNodeMap(i,2), 0) << " " << nodes(cellToNodeMap(i,2), 1) << std::endl; + } + meshfile.close(); + */ + } + } + + void outputTpetraData() const + { + Tpetra::MatrixMarket::Writer<Tpetra::CrsMatrix<>> matWriter; + matWriter.writeSparseFile("stiffness_mat", matA_); + matWriter.writeSparseFile("dirichlet_mat", matA_dirichlet_); + matWriter.writeSparseFile("mass_mat", matM_); + matWriter.writeDenseFile("Ud_vec", vecUd_); + } + + void outputTpetraVector(const Teuchos::RCP<const Tpetra::MultiVector<>> &vec, + const std::string &filename) const + { + Tpetra::MatrixMarket::Writer<Tpetra::CrsMatrix<>> vecWriter; + vecWriter.writeDenseFile(filename, vec); + } + +}; // class PoissonData + +#endif diff --git a/tlnos/src/objective.hpp b/tlnos/src/objective.hpp new file mode 100644 index 0000000000000000000000000000000000000000..42c4e5b5ff3e577dd7bde4062ab45a6017fc73ec --- /dev/null +++ b/tlnos/src/objective.hpp @@ -0,0 +1,177 @@ +// @HEADER +// ************************************************************************ +// +// Rapid Optimization Library (ROL) Package +// Copyright (2014) Sandia Corporation +// +// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +// license for use of this work by or on behalf of the U.S. Government. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions? Contact lead developers: +// Drew Kouri (dpkouri@sandia.gov) and +// Denis Ridzal (dridzal@sandia.gov) +// +// ************************************************************************ +// @HEADER + +/*! \file objective.hpp + \brief Defines the SimOpt objective function for the 'poisson' example. +*/ + +#ifndef ROL_PDEOPT_POISSON_OBJECTIVE_H +#define ROL_PDEOPT_POISSON_OBJECTIVE_H + +#include "ROL_Objective_SimOpt.hpp" +#include "ROL_TpetraMultiVector.hpp" +#include "data.hpp" + +template <class Real> +class Objective_PDEOPT_Poisson : public ROL::Objective_SimOpt<Real> +{ +private: + Teuchos::RCP<PoissonData<Real>> data_; + Real alpha_; + +public: + Objective_PDEOPT_Poisson(const Teuchos::RCP<PoissonData<Real>> &data, + const Teuchos::RCP<Teuchos::ParameterList> &parlist) + { + data_ = data; + alpha_ = parlist->sublist("Problem").get("Penalty parameter", 1e-2); + } + + Real value(const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) + { + Teuchos::RCP<const Tpetra::MultiVector<>> up = + (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real>>(u)).getVector(); + Teuchos::RCP<const Tpetra::MultiVector<>> zp = + (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real>>(z)).getVector(); + + Teuchos::Array<Real> dotvalU(1, 0); + Teuchos::Array<Real> dotvalZ(1, 0); + + // Set difference vector diffp to up. + Teuchos::RCP<Tpetra::MultiVector<>> diffp = + Teuchos::rcp(new Tpetra::MultiVector<>(*up, Teuchos::Copy)); + // Temporary matvec vector. + Teuchos::RCP<Tpetra::MultiVector<>> matvecp = + Teuchos::rcp(new Tpetra::MultiVector<>(*up, Teuchos::Copy)); + + // (u-ud) + diffp->update(-1.0, *(data_->getVecUd()), 1.0); + // M*(u-ud) + data_->getMatM()->apply(*diffp, *matvecp); + // (u-ud)'*M*(u-ud) + diffp->dot(*matvecp, dotvalU); + + // R*z + data_->getMatR()->apply(*zp, *matvecp); + // z'*R*z + zp->dot(*matvecp, dotvalZ); + + // 1/2 * (u-ud)'*M*(u-ud) + alpha/2 * z'*R*z + return (0.5 * dotvalU[0] + 0.5 * alpha_ * dotvalZ[0]); + } + + void gradient_1(ROL::Vector<Real> &g, const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) + { + Teuchos::RCP<Tpetra::MultiVector<>> gp = + (Teuchos::dyn_cast<ROL::TpetraMultiVector<Real>>(g)).getVector(); + Teuchos::RCP<const Tpetra::MultiVector<>> up = + (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real>>(u)).getVector(); + + // Set difference vector diffp to up. + Teuchos::RCP<Tpetra::MultiVector<>> diffp = + Teuchos::rcp(new Tpetra::MultiVector<>(*up, Teuchos::Copy)); + // (u-ud) + diffp->update(-1.0, *(data_->getVecUd()), 1.0); + // M*(u-ud) + data_->getMatM()->apply(*diffp, *gp); + } + + void gradient_2(ROL::Vector<Real> &g, const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) + { + Teuchos::RCP<Tpetra::MultiVector<>> gp = + (Teuchos::dyn_cast<ROL::TpetraMultiVector<Real>>(g)).getVector(); + Teuchos::RCP<const Tpetra::MultiVector<>> zp = + (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real>>(z)).getVector(); + + // alpha * R*z + data_->getMatR()->apply(*zp, *gp); + gp->scale(alpha_); + } + + void hessVec_11(ROL::Vector<Real> &hv, const ROL::Vector<Real> &v, + const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) + { + Teuchos::RCP<Tpetra::MultiVector<>> hvp = + (Teuchos::dyn_cast<ROL::TpetraMultiVector<Real>>(hv)).getVector(); + Teuchos::RCP<const Tpetra::MultiVector<>> vp = + (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real>>(v)).getVector(); + + // M*v + data_->getMatM()->apply(*vp, *hvp); + } + + void hessVec_12(ROL::Vector<Real> &hv, const ROL::Vector<Real> &v, + const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) + { + Teuchos::RCP<Tpetra::MultiVector<>> hvp = + (Teuchos::dyn_cast<ROL::TpetraMultiVector<Real>>(hv)).getVector(); + + // zero + hvp->scale(0); + } + + void hessVec_21(ROL::Vector<Real> &hv, const ROL::Vector<Real> &v, + const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) + { + Teuchos::RCP<Tpetra::MultiVector<>> hvp = + (Teuchos::dyn_cast<ROL::TpetraMultiVector<Real>>(hv)).getVector(); + + // zero + hvp->scale(0); + } + + void hessVec_22(ROL::Vector<Real> &hv, const ROL::Vector<Real> &v, + const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) + { + Teuchos::RCP<Tpetra::MultiVector<>> hvp = + (Teuchos::dyn_cast<ROL::TpetraMultiVector<Real>>(hv)).getVector(); + Teuchos::RCP<const Tpetra::MultiVector<>> vp = + (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real>>(v)).getVector(); + + // alpha * R*v + data_->getMatR()->apply(*vp, *hvp); + hvp->scale(alpha_); + } +}; + +#endif diff --git a/tlnos/src/tlnos.h b/tlnos/src/tlnos.h new file mode 100644 index 0000000000000000000000000000000000000000..208f1e938df4ec5f175067cea53d217cc3f65662 --- /dev/null +++ b/tlnos/src/tlnos.h @@ -0,0 +1,36 @@ +// global header of the "tlnos" module + +#ifndef TLNOS_H +#define TLNOS_H + +#if defined(WIN32) +#ifdef tlnos_EXPORTS +#define TLNOS_API __declspec(dllexport) +#else +#define TLNOS_API __declspec(dllimport) +#endif +#else +#define TLNOS_API +#endif + +#include "tbox.h" + +/** + * @brief this namespace avoids conflicts with similar names in other modules + */ + +namespace tlnos +{ +class Example1; +class Example2; +class Example3; +class Example4; +class Example5; +class Example6; +class Example7; +class Example8; +class Example9; +class Example10; +}; // namespace tlnos + +#endif //TLNOS_H diff --git a/tlnos/src/wExample1.cpp b/tlnos/src/wExample1.cpp new file mode 100644 index 0000000000000000000000000000000000000000..34bae2df1af02d41d4298438a99abc32d73c006b --- /dev/null +++ b/tlnos/src/wExample1.cpp @@ -0,0 +1,98 @@ +#include "wExample1.h" + +#ifdef MYAPP_MPI +#include "Teuchos_DefaultMpiComm.hpp" +#else +#include "Teuchos_DefaultSerialComm.hpp" +#endif + +#ifdef MYAPP_EPETRA +#include "Epetra_SerialDenseVector.h" +#endif + +using namespace tlnos; + +Example1::Example1() +{ +} + +int Example1::src_file(std::string const &infile, Teuchos::Comm<int> &comm) +{ + Teuchos::ParameterList p; + Teuchos::Ptr<Teuchos::ParameterList> pref(&p); + Teuchos::updateParametersFromXmlFileAndBroadcast(infile, pref, comm); + + std::cout << "\nProcessor " << comm.getRank() + << " has param list : \n" + << p << std::endl; + + return 0; +} + +void Example1::write(std::ostream &out) const +{ + out << "tlnos::Example1:\n"; +} + +int Example1::execute(std::string const &infile) +{ + /* + int *argc = new int(1);// mem leak volontaire + // ATTENTION: argv doit rester alloué pdt toute la durée de vie d'appli! + char **argv = new char*[2];// mem leak volontaire + argv[0] = new char[6]; strcpy(argv[0], "MyApp"); // mem leak volontaire + argv[1] = new char[1]; strcpy(argv[1], ""); // mem leak volontaire + */ + int status = 0; + + // Initialize MPI and timer + //Teuchos::GlobalMPISession mpiSession(argc,&argv); // [RB] does not work anymore... (MPI already initialised?) + Teuchos::GlobalMPISession mpiSession(); // [RB] from https://trilinos.org/pipermail/trilinos-users/2016-July/005597.html + + // Use of flag set in CMakeLists.txt by how Trilinos was configured +#ifdef MYAPP_MPI + Teuchos::MpiComm<int> comm = + Teuchos::MpiComm<int>(Teuchos::opaqueWrapper((MPI_Comm)MPI_COMM_WORLD)); +#else + Teuchos::SerialComm<int> comm = Teuchos::SerialComm<int>(); +#endif + + try + { + // Function from another file + status = src_file(infile, comm); + + // Flag set in CMakeLists.txt that detects if Epetra was enabled in Trilinos +#ifdef MYAPP_EPETRA + const int len = 10; + Epetra_SerialDenseVector vec(len); + if (vec.Length() != len) + status += 1000; + std::cout << "\nEpetra called for vec of length " << len << std::endl; +#endif + } + + catch (std::exception &e) + { + std::cout << e.what() << std::endl; + status = 10; + } + catch (std::string &s) + { + std::cout << s << std::endl; + status = 20; + } + catch (char *s) + { + std::cout << s << std::endl; + status = 30; + } + catch (...) + { + std::cout << "Caught unknown exception!" << std::endl; + status = 40; + } + + // Status=0 signals to ctest that the test passed. + return status; +} diff --git a/tlnos/src/wExample1.h b/tlnos/src/wExample1.h new file mode 100644 index 0000000000000000000000000000000000000000..8d066618afe65bc44495441e6c8c2c4fc5f1631d --- /dev/null +++ b/tlnos/src/wExample1.h @@ -0,0 +1,37 @@ +#ifndef WEXAMPLE1_H +#define WEXAMPLE1_H + +#include "tlnos.h" +#include "wObject.h" +#include <iostream> +#include <vector> +#include <string> +#ifndef SWIG +#include "Teuchos_Comm.hpp" +#include "Teuchos_XMLParameterListHelpers.hpp" +#endif + +namespace tlnos +{ + +/** + * @brief a class containing the "build-against-trilinos" example of trilinos + */ + +class TLNOS_API Example1 : public fwk::wObject +{ +public: + Example1(); + int execute(std::string const &infile); + +#ifndef SWIG + virtual void write(std::ostream &out) const; +#endif + +private: + int src_file(std::string const &infile, Teuchos::Comm<int> &comm); +}; + +} // namespace tlnos + +#endif //WEXAMPLE1_H diff --git a/tlnos/src/wExample10.cpp b/tlnos/src/wExample10.cpp new file mode 100644 index 0000000000000000000000000000000000000000..92aaf7e9df50a49a90f7a075b88e4990c7b40fea --- /dev/null +++ b/tlnos/src/wExample10.cpp @@ -0,0 +1,36 @@ +#include "wExample10.h" + +#include "Epetra_SerialDenseVector.h" +#include "Epetra_SerialDenseMatrix.h" + +#include "Tpetra_Vector.hpp" + +using namespace tlnos; + +Example10::Example10() +{ +} + +int Example10::execute() +{ + + int NumRowsA = 2, NumColsA = 2; + int NumRowsB = 2, NumColsB = 1; + Epetra_SerialDenseMatrix A, B; + A.Shape(NumRowsA, NumColsA); + B.Shape(NumRowsB, NumColsB); + A(0, 0) = 1.; + A(1, 1) = 2.; + + B(0, 0) = 2.5; + B(1, 0) = 2.; + Epetra_SerialDenseMatrix AtimesB; + + AtimesB.Shape(NumRowsA, NumColsB); + double alpha = 1.0, beta = 1.0; + AtimesB.Multiply('N', 'N', alpha, A, B, beta); + std::cout << A; + std::cout << B; + std::cout << AtimesB; + return 0; +} diff --git a/tlnos/src/wExample10.h b/tlnos/src/wExample10.h new file mode 100644 index 0000000000000000000000000000000000000000..0f8a7c189875ee76f6e281e8172e38f97346a111 --- /dev/null +++ b/tlnos/src/wExample10.h @@ -0,0 +1,30 @@ +#ifndef WEXAMPLE10_H +#define WEXAMPLE10_H + +#include "tlnos.h" +#include "wObject.h" +#include <iostream> +#include <vector> +#include <string> +#ifndef SWIG +#include "Teuchos_Comm.hpp" +#include "Teuchos_XMLParameterListHelpers.hpp" +#endif + +namespace tlnos +{ + +/** + * @brief a class containing the "build-against-trilinos" example of trilinos + */ + +class TLNOS_API Example10 : public fwk::wObject +{ +public: + Example10(); + int execute(); +}; + +} // namespace tlnos + +#endif //WEXAMPLE10_H diff --git a/tlnos/src/wExample2.cpp b/tlnos/src/wExample2.cpp new file mode 100644 index 0000000000000000000000000000000000000000..eb0287047ab27cbc849845acb5c04de8f1dbaa4f --- /dev/null +++ b/tlnos/src/wExample2.cpp @@ -0,0 +1,36 @@ +#include "wExample2.h" + +#include "Epetra_SerialDenseVector.h" +#include "Epetra_SerialDenseMatrix.h" + +#include "Tpetra_Vector.hpp" + +using namespace tlnos; + +Example2::Example2() +{ +} + +int Example2::execute() +{ + + int NumRowsA = 2, NumColsA = 2; + int NumRowsB = 2, NumColsB = 1; + Epetra_SerialDenseMatrix A, B; + A.Shape(NumRowsA, NumColsA); + B.Shape(NumRowsB, NumColsB); + A(0, 0) = 1.; + A(1, 1) = 2.; + + B(0, 0) = 2.5; + B(1, 0) = 2.; + Epetra_SerialDenseMatrix AtimesB; + + AtimesB.Shape(NumRowsA, NumColsB); + double alpha = 1.0, beta = 1.0; + AtimesB.Multiply('N', 'N', alpha, A, B, beta); + std::cout << A; + std::cout << B; + std::cout << AtimesB; + return 0; +} diff --git a/tlnos/src/wExample2.h b/tlnos/src/wExample2.h new file mode 100644 index 0000000000000000000000000000000000000000..e12584cadf7a79cb9a07f1a0c4b4d9e0765f8330 --- /dev/null +++ b/tlnos/src/wExample2.h @@ -0,0 +1,30 @@ +#ifndef WEXAMPLE2_H +#define WEXAMPLE2_H + +#include "tlnos.h" +#include "wObject.h" +#include <iostream> +#include <vector> +#include <string> +#ifndef SWIG +#include "Teuchos_Comm.hpp" +#include "Teuchos_XMLParameterListHelpers.hpp" +#endif + +namespace tlnos +{ + +/** + * @brief a class containing the "build-against-trilinos" example of trilinos + */ + +class TLNOS_API Example2 : public fwk::wObject +{ +public: + Example2(); + int execute(); +}; + +} // namespace tlnos + +#endif //WEXAMPLE2_H diff --git a/tlnos/src/wExample3.cpp.disabled b/tlnos/src/wExample3.cpp.disabled new file mode 100644 index 0000000000000000000000000000000000000000..344f9a925ce4afd86f4ba190113a330c669bf4fc --- /dev/null +++ b/tlnos/src/wExample3.cpp.disabled @@ -0,0 +1,373 @@ +#include "wExample3.h" + +// +// Simple example of solving the following nonlinear system of +// equations +// +// x(0)^2 + x(1)^2 -1 = 0 +// x(1) - x(0)^2 = 0 +// +// using NOX (Trilinos' Nonlinear Object-Oriented Solutions package). +// For more details and documentation, see the NOX web site: +// +// http://trilinos.sandia.gov/packages/nox/ +// +// NOTE: Due to the very small dimension of the problem, it should be +// run with only one MPI process. We enforce this below by creating a +// subcommunicator containing only MPI Proc 0, and running the problem +// on that communicator, quieting all the others. +// +#include <iostream> + +#include "Epetra_ConfigDefs.h" +#ifdef HAVE_MPI +# include "mpi.h" +# include "Epetra_MpiComm.h" +#else +# include "Epetra_SerialComm.h" +#endif + + + +#include "Epetra_Map.h" +#include "Epetra_Vector.h" +#include "Epetra_RowMatrix.h" +#include "Epetra_CrsMatrix.h" + + +#include "NOX.H" +#include "NOX_Epetra_Interface_Required.H" +#include "NOX_Epetra_Interface_Jacobian.H" +#include "NOX_Epetra_LinearSystem_AztecOO.H" +#include "NOX_Epetra_Group.H" + +// ========================================================================== +// SimpleProblemInterface, the problem interface in this example, +// defines the interface between NOX and our nonlinear problem to +// solve. +// ========================================================================== +class SimpleProblemInterface : + public NOX::Epetra::Interface::Required, + public NOX::Epetra::Interface::Jacobian +{ +public: + + // The constructor accepts an initial guess and the exact solution + // vector (which we know because we created the example). We make + // deep copies of each. + SimpleProblemInterface (Epetra_Vector& InitialGuess, + Epetra_Vector& ExactSolution) : + InitialGuess_ (new Epetra_Vector (InitialGuess)), + ExactSolution_ (new Epetra_Vector (ExactSolution)) + {} + + // Destructor. + ~SimpleProblemInterface() {} + + // Compute f := F(x), where x is the input vector and f the output + // vector. + bool + computeF (const Epetra_Vector & x, + Epetra_Vector & f, + NOX::Epetra::Interface::Required::FillType F) + { + f[0] = x[0]*x[0] + x[1]*x[1] - 1.0; + f[1] = x[1] - x[0]*x[0]; + + return true; + }; + + bool + computeJacobian(const Epetra_Vector & x, Epetra_Operator & Jac) + { + Epetra_CrsMatrix* J = dynamic_cast<Epetra_CrsMatrix*>(&Jac); + + if (J == NULL) { + std::ostringstream os; + os << "*** Problem_Interface::computeJacobian() - The supplied " + << "Epetra_Operator object is NOT an Epetra_CrsMatrix! ***"; + throw std::runtime_error (os.str()); + } + + std::vector<int> indices(2); + std::vector<double> values(2); + + indices[0] = 0; + indices[1] = 1; + + // Row 0 + values[0] = 2.0 * x[0]; + values[1] = 2.0 * x[1]; + J->ReplaceGlobalValues (0, 2, &values[0], &indices[0]); + + // Row 1 + values[0] = - 2.0 * x[0]; + values[1] = 1.0; + J->ReplaceGlobalValues (1, 2, &values[0], &indices[0]); + + return true; + } + + bool + computePrecMatrix (const Epetra_Vector & x, + Epetra_RowMatrix & M) + { + throw std::runtime_error ("*** SimpleProblemInterface does not implement " + "computing an explicit preconditioner from an " + "Epetra_RowMatrix ***"); + } + + bool + computePreconditioner (const Epetra_Vector & x, + Epetra_Operator & O) + { + throw std::runtime_error ("*** SimpleProblemInterface does not implement " + "computing an explicit preconditioner from an " + "Epetra_Operator ***"); + } + +private: + Teuchos::RCP<Epetra_Vector> InitialGuess_; + Teuchos::RCP<Epetra_Vector> ExactSolution_; +}; + +// =========== // +// main driver // +// =========== // + +using namespace tlnos; + +Example3::Example3() +{ +} + + +int +Example3::execute() +{ + using Teuchos::ParameterList; + using Teuchos::parameterList; + using Teuchos::RCP; + using Teuchos::rcp; + using std::cout; + using std::endl; + + +#ifdef HAVE_MPI + int argc = 1; + MPI_Init(&argc, NULL); + Epetra_MpiComm CommWorld (MPI_COMM_WORLD); +#else + Epetra_SerialComm CommWorld; +#endif + + + // The example problem is so small that we must run it on only one + // process. However, people might run this example code in MPI with + // any number of processes. We handle this by using a communicator + // containing only one MPI process, and quieting all processes but + // Proc 0 (with respect to MPI_COMM_WORLD). + if (CommWorld.MyPID() == 0) + { +#ifdef HAVE_MPI + Epetra_MpiComm Comm (MPI_COMM_SELF); +#else + Epetra_SerialComm Comm; +#endif + + // Linear map for the 2 global elements. + Epetra_Map Map (2, 0, Comm); + + // Build up initial guess and exact solution vectors. + Epetra_Vector ExactSolution (Map); + ExactSolution[0] = sqrt (0.5 * (sqrt (5.0) - 1)); + ExactSolution[1] = 0.5 * (sqrt (5.0) - 1); + + Epetra_Vector InitialGuess (Map); + InitialGuess[0] = 0.5; + InitialGuess[1] = 0.5; + + // Set up the problem interface. Your application will define + // its own problem interface. SimpleProblemInterface is our + // example interface, which you can use as a model. + // + // Our SimpleProblemInterface makes a deep copy of the initial + // guess and exact solution vectors. + RCP<SimpleProblemInterface> interface = + rcp (new SimpleProblemInterface (InitialGuess, ExactSolution)); + + // Create the top-level parameter list to control NOX. + // + // "parameterList" (lowercase initial "p") is a "nonmember + // constructor" that returns an RCP<ParameterList> with the + // given name. + RCP<ParameterList> params = parameterList ("NOX"); + + // Tell the nonlinear solver to use line search. + params->set ("Nonlinear Solver", "Line Search Based"); + + // + // Set the printing parameters in the "Printing" sublist. + // + ParameterList& printParams = params->sublist ("Printing"); + printParams.set ("MyPID", Comm.MyPID ()); + printParams.set ("Output Precision", 3); + printParams.set ("Output Processor", 0); + + // Set verbose=true to see a whole lot of intermediate status + // output, during both linear and nonlinear iterations. + const bool verbose = false; + if (verbose) { + printParams.set ("Output Information", + NOX::Utils::OuterIteration + + NOX::Utils::OuterIterationStatusTest + + NOX::Utils::InnerIteration + + NOX::Utils::Parameters + + NOX::Utils::Details + + NOX::Utils::Warning); + } else { + printParams.set ("Output Information", NOX::Utils::Warning); + } + + // + // Set the nonlinear solver parameters. + // + + // Line search parameters. + ParameterList& searchParams = params->sublist ("Line Search"); + searchParams.set ("Method", "Full Step"); + + // Parameters for picking the search direction. + ParameterList& dirParams = params->sublist ("Direction"); + // Use Newton's method to pick the search direction. + dirParams.set ("Method", "Newton"); + + // Parameters for Newton's method. + ParameterList& newtonParams = dirParams.sublist ("Newton"); + newtonParams.set ("Forcing Term Method", "Constant"); + + // + // Newton's method invokes a linear solver repeatedly. + // Set the parameters for the linear solver. + // + ParameterList& lsParams = newtonParams.sublist ("Linear Solver"); + + // Use Aztec's implementation of GMRES, with at most 800 + // iterations, a residual tolerance of 1.0e-4, with output every + // 50 iterations, and Aztec's native ILU preconditioner. + lsParams.set ("Aztec Solver", "GMRES"); + lsParams.set ("Max Iterations", 800); + lsParams.set ("Tolerance", 1e-4); + lsParams.set ("Output Frequency", 50); + lsParams.set ("Aztec Preconditioner", "ilu"); + + // + // Build the Jacobian matrix. + // + RCP<Epetra_CrsMatrix> A = rcp (new Epetra_CrsMatrix (Copy, Map, 2)); + { + std::vector<int> indices(2); + std::vector<double> values(2); + + indices[0]=0; + indices[1]=1; + + values[0] = 2.0 * InitialGuess[0]; + values[1] = 2.0 * InitialGuess[1]; + A.get()->InsertGlobalValues (0, 2, &values[0], &indices[0]); + + values[0] = -2.0 * InitialGuess[0]; + values[1] = 1.0; + A.get()->InsertGlobalValues (1, 2, &values[0], &indices[0]); + + A.get()->FillComplete(); + } + + // Our SimpleProblemInterface implements both Required and + // Jacobian, so we can use the same object for each. + RCP<NOX::Epetra::Interface::Required> iReq = interface; + RCP<NOX::Epetra::Interface::Jacobian> iJac = interface; + + RCP<NOX::Epetra::LinearSystemAztecOO> linSys = + rcp (new NOX::Epetra::LinearSystemAztecOO (printParams, lsParams, + iReq, iJac, A, InitialGuess)); + + // Need a NOX::Epetra::Vector for constructor. + NOX::Epetra::Vector noxInitGuess (InitialGuess, NOX::DeepCopy); + RCP<NOX::Epetra::Group> group = + rcp (new NOX::Epetra::Group (printParams, iReq, noxInitGuess, linSys)); + + // + // Set up NOX's iteration stopping criteria ("status tests"). + // + + // ||F(X)||_2 / N < 1.0e-4, where N is the length of F(X). + // + // NormF has many options for setting up absolute vs. relative + // (scaled by the norm of the initial guess) tolerances, scaling + // or not scaling by the length of F(X), and choosing a + // different norm (we use the 2-norm here). + RCP<NOX::StatusTest::NormF> testNormF = + rcp (new NOX::StatusTest::NormF (1.0e-4)); + + // At most 20 (nonlinear) iterations. + RCP<NOX::StatusTest::MaxIters> testMaxIters = + rcp (new NOX::StatusTest::MaxIters (20)); + + // Combine the above two stopping criteria (normwise + // convergence, and maximum number of nonlinear iterations). + // The result tells NOX to stop if at least one of them is + // satisfied. + RCP<NOX::StatusTest::Combo> combo = + rcp (new NOX::StatusTest::Combo (NOX::StatusTest::Combo::OR, + testNormF, testMaxIters)); + + // Create the NOX nonlinear solver. + RCP<NOX::Solver::Generic> solver = + NOX::Solver::buildSolver (group, combo, params); + + // Solve the nonlinear system. + NOX::StatusTest::StatusType status = solver->solve(); + + // Print the result. + // + // For this particular example, Comm contains only one MPI + // process. However, we check for Comm.MyPID() == 0 here just + // so that the example is fully general. (If you're solving a + // larger nonlinear problem, you could safely use the code + // below.) + if (Comm.MyPID() == 0) { + cout << endl << "-- Parameter List From Solver --" << endl; + solver->getList ().print (cout); + } + + // Get the Epetra_Vector with the final solution from the solver. + const NOX::Epetra::Group& finalGroup = + dynamic_cast<const NOX::Epetra::Group&>(solver->getSolutionGroup()); + + const Epetra_Vector& finalSolution = + dynamic_cast<const NOX::Epetra::Vector&> (finalGroup.getX ()).getEpetraVector (); + + if (Comm.MyPID() == 0) { + cout << "Computed solution: " << endl; + } + // Epetra objects know how to print themselves politely when + // their operator<<(std::ostream&) is invoked on all MPI + // process(es) in the communicator to which they are associated. + cout << finalSolution; + + if (Comm.MyPID() == 0) { + cout << "Exact solution: " << endl; + } + cout << ExactSolution; + } + + // Remember how we quieted all MPI processes but Proc 0 above? + // Now we're back in MPI_COMM_WORLD again. +#ifdef HAVE_MPI + // Make sure that everybody is done before calling MPI_Finalize(). + MPI_Barrier (MPI_COMM_WORLD); + MPI_Finalize(); +#endif + return EXIT_SUCCESS; +} diff --git a/tlnos/src/wExample3.h.disabled b/tlnos/src/wExample3.h.disabled new file mode 100644 index 0000000000000000000000000000000000000000..8129728db244657bef2ca86649e5283111b7899f --- /dev/null +++ b/tlnos/src/wExample3.h.disabled @@ -0,0 +1,30 @@ +#ifndef WEXAMPLE3_H +#define WEXAMPLE3_H + +#include "tlnos.h" +#include "wObject.h" +#include <iostream> +#include <vector> +#include <string> +#ifndef SWIG +#include "Teuchos_Comm.hpp" +#include "Teuchos_XMLParameterListHelpers.hpp" +#endif + +namespace tlnos { + +/** + * @brief a class containing the "build-against-trilinos" example of trilinos + */ + +class TLNOS_API Example3 : public fwk::wObject +{ +public: + Example3(); + int execute(); + +}; + +} + +#endif //WEXAMPLE3_H diff --git a/tlnos/src/wExample4.cpp b/tlnos/src/wExample4.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b5daac2acb1e3ca9c126f44c43002f134343c6a5 --- /dev/null +++ b/tlnos/src/wExample4.cpp @@ -0,0 +1,266 @@ +#include "wExample4.h" + +// @HEADER +// ************************************************************************ +// +// Galeri: Finite Element and Matrix Generation Package +// Copyright (2006) ETHZ/Sandia Corporation +// +// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +// license for use of this work by or on behalf of the U.S. Government. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the Corporation nor the names of the +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Questions about Galeri? Contact Marzio Sala (marzio.sala _AT_ gmail.com) +// +// ************************************************************************ +// @HEADER + +#include "Galeri_ConfigDefs.h" +#include "Galeri_Utils.h" +#include "Galeri_FiniteElements.h" +#ifdef HAVE_MPI +#include "mpi.h" +#include "Epetra_MpiComm.h" +#else +#include "Epetra_SerialComm.h" +#endif + +#ifdef MOERTEL_HAVE_EXODUS +#include "ExodusInterface.h" // NOT COMPILED BY KIM! +#endif + +// ========================================================== +// This file solves the scalar elliptic problem +// +// - \mu \nabla u + \sigma u = f on \Omega +// u = g on \partial \Omega +// +// where \Omega is a 3D cube, divided into hexahedra. +// `f' is specified by function `Force()', the Dirichlet boundary condition +// by function `BoundaryValue()', and the value of \mu and +// \sigma can be changed in the functions Diffusion() and +// Source(). The code solves the corresponding linear system +// using AztecOO with ML preconditioner, and writes the +// solution into a MEDIT-compatible format. Then, it computes +// the L2 and H1 norms of the solution and the error. +// +// \author Marzio Sala, ETHZ/COLAB +// +// \date Last updated on 15-Sep-05 +// ========================================================== + +double Diffusion4(const double &x, const double &y, const double &z) +{ + return (1.0); +} + +double Source4(const double &x, const double &y, const double &z) +{ + return (0.0); +} + +double Force4(const double &x, const double &y, const double &z) +{ + return (-6.0); +} + +// Specifies the boundary condition. +double BoundaryValue4(const double &x, const double &y, + const double &z, const int &PatchID) +{ + return (x * x + y * y + z * z); +} + +// Specifies the boundary condition. +int BoundaryType4(const int &PatchID) +{ + return (Galeri::FiniteElements::GALERI_DIRICHLET); +} + +// Returns the value of the exact solution and its first +// derivatives with respect to x, y and z. +int ExactSolution(double x, double y, double z, double *res) +{ + res[0] = x * x + y * y + z * z; + res[1] = 2 * x; + res[2] = 2 * y; + res[3] = 2 * z; + + return (0); +} + +using namespace Galeri; +using namespace Galeri::FiniteElements; + +// =========== // +// main driver // +// =========== // + +using namespace std; +using namespace tlnos; + +Example4::Example4() +{ +} + +int Example4::execute() +{ +#ifdef HAVE_MPI + //int argc = 1; + //MPI_Init(&argc, NULL); // [RB] already initialised + Epetra_MpiComm Comm(MPI_COMM_WORLD); +#else + Epetra_SerialComm Comm; +#endif + + try + { + + // ============================================================ // + // Prepares the computational domain. For simplicity, // + // the computation domain has (nx * NumProcs, ny, nz) elements, // + // and it is partitioned into (NumProcs, 1, 1) subdomains. // + // If you want to change the grid element, remember to modify // + // the quadrature in GalerkinVariational<T>. Now T is set to // + // HexQuadrature. // + // ============================================================ // + + int nx = 4 * Comm.NumProc(); + int ny = 4; + int nz = 4; + int mx = Comm.NumProc(), my = 1, mz = 1; + + HexCubeGrid Grid(Comm, nx, ny, nz, mx, my, mz); + + cout << "------------------------" << endl; + // Extracts the information from the Grid using AbstractGrid + // methods. First, some general information. + + cout << "Number of dimensions = " << Grid.NumDimensions() << endl; + cout << "Number of vertices per element = " << Grid.NumVerticesPerElement() << endl; + cout << "Number of faces per element = " << Grid.NumFacesPerElement() << endl; + cout << "Number of vertices per face = " << Grid.NumVerticesPerFace() << endl; + cout << "Element type = " << Grid.ElementType() << endl; + + cout << "Number of elements: global = " << Grid.NumGlobalElements(); + cout << ", on proc 0 = " << Grid.NumMyElements() << endl; + cout << "Number of vertices: global = " << Grid.NumGlobalVertices(); + cout << ", on proc 0 = " << Grid.NumMyVertices() << endl; + cout << "Number of boundary faces: " + "on proc 0 = " + << Grid.NumMyBoundaryFaces() << endl; + + cout << "------------------------" << endl; + + // ======================================================== // + // Prepares the linear system. This requires the definition // + // of a quadrature formula compatible with the grid, a // + // variational formulation, and a problem object which take // + // care of filling matrix and right-hand side. // + // ======================================================== // + + Epetra_CrsMatrix A(Copy, Grid.RowMap(), 0); + Epetra_Vector LHS(Grid.RowMap()); + Epetra_Vector RHS(Grid.RowMap()); + + int NumQuadratureNodes = 1; + + GalerkinVariational<HexQuadrature> + Laplacian(NumQuadratureNodes, Diffusion4, Source4, Force4, + BoundaryValue4, BoundaryType4); + + LinearProblem FiniteElementProblem(Grid, Laplacian, A, LHS, RHS); + FiniteElementProblem.Compute(); + + // =================================================== // + // The solution must be computed here by solving the // + // linear system A * LHS = RHS. // + // + // NOTE: Solve() IS A SIMPLE FUNCTION BASED ON LAPACK, // + // THEREFORE THE MATRIX IS CONVERTED TO DENSE FORMAT. // + // IT WORKS IN SERIAL ONLY. // + // EVEN MEDIUM-SIZED MATRICES MAY REQUIRE A LOT OF // + // MEMORY AND CPU-TIME! USERS SHOULD CONSIDER INSTEAD // + // AZTECOO, ML, IFPACK OR OTHER SOLVERS. // + // =================================================== // + + Solve(&A, &LHS, &RHS); + + cout << "----------------------" << endl; + cout << A << endl; + cout << "----------------------" << endl; + cout << LHS << endl; + cout << "----------------------" << endl; + cout << RHS << endl; + cout << "----------------------" << endl; + + // ========================= // + // After the solution: // + // - computation of the norm // + // - output using MEDIT // + // ========================= // + + FiniteElementProblem.ComputeNorms(LHS, ExactSolution); + +//MEDITInterface MEDIT(Comm); +//MEDIT.Write(Grid, "Laplacian3D", LHS); + +// ================== // +// Output using ExodusII // +// ================== // +#ifdef MOERTEL_HAVE_EXODUS + // NOT COMPILED BY KIM + ExodusInterface exodus(Comm); + exodus.Write(Grid, "Laplacian3D", LHS); +#endif + + // We need to define a vector to plot, in this case constant + //Epetra_Vector Vector(Grid.RowMap()); + //MEDIT.Write(Grid, "grid", Vector); + } + catch (Exception &rhs) + { + if (Comm.MyPID() == 0) + rhs.Print(); + } + catch (int e) + { + cerr << "Caught exception, value = " << e << endl; + } + catch (...) + { + cerr << "Caught generic exception" << endl; + } + +#ifdef HAVE_MPI + MPI_Finalize(); +#endif + + return (0); +} diff --git a/tlnos/src/wExample4.h b/tlnos/src/wExample4.h new file mode 100644 index 0000000000000000000000000000000000000000..531107944f8adf0b50a49a18d4d4393f755186ac --- /dev/null +++ b/tlnos/src/wExample4.h @@ -0,0 +1,30 @@ +#ifndef WEXAMPLE4_H +#define WEXAMPLE4_H + +#include "tlnos.h" +#include "wObject.h" +#include <iostream> +#include <vector> +#include <string> +#ifndef SWIG +#include "Teuchos_Comm.hpp" +#include "Teuchos_XMLParameterListHelpers.hpp" +#endif + +namespace tlnos +{ + +/** + * @brief a class containing the "build-against-trilinos" example of trilinos + */ + +class TLNOS_API Example4 : public fwk::wObject +{ +public: + Example4(); + int execute(); +}; + +} // namespace tlnos + +#endif //WEXAMPLE4_H diff --git a/tlnos/src/wExample5.cpp b/tlnos/src/wExample5.cpp new file mode 100644 index 0000000000000000000000000000000000000000..22eebbf34e18e3100d1c7aa2eb89faf9c70b5e86 --- /dev/null +++ b/tlnos/src/wExample5.cpp @@ -0,0 +1,535 @@ +#include "wExample5.h" +/* + #@HEADER + # ************************************************************************ + # + # Moertel FE Package + # Copyright (2006) Sandia Corporation + # + # Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive + # license for use of this work by or on behalf of the U.S. Government. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions are + # met: + # + # 1. Redistributions of source code must retain the above copyright + # notice, this list of conditions and the following disclaimer. + # + # 2. Redistributions in binary form must reproduce the above copyright + # notice, this list of conditions and the following disclaimer in the + # documentation and/or other materials provided with the distribution. + # + # 3. Neither the name of the Corporation nor the names of the + # contributors may be used to endorse or promote products derived from + # this software without specific prior written permission. + # + # THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY + # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE + # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + # + # Questions? Contact Glen Hansen (gahanse@sandia.gov) + # + # ************************************************************************ + #@HEADER + */ +/*! + * \file TwoSquares.cpp + * + * \brief Simple serial example showing Moertel usage and solver interfaces + * + * \date Last update do Doxygen: 20-March-06 + * + */ +#ifdef HAVE_MPI +#include "mpi.h" +#include "Epetra_MpiComm.h" +#else +#include "Epetra_SerialComm.h" +#endif + +// MOERTEL headers +#include "mrtr_manager.H" +#include "mrtr_segment_linear1D.H" + +// Galeri headers +#include "Galeri_Utils.h" +#include "Galeri_FiniteElements.h" + +#ifdef MOERTEL_HAVE_EXODUS +#include "ExodusInterface.h" +#endif +using namespace Galeri; +using namespace Galeri::FiniteElements; + +// ========================================================== +// This file solves the scalar problem +// +// - \mu \nabla u + \sigma u = f on \Omega +// u = g on \partial \Omega +// +// where \Omega is a 2D rectangle, divided into triangles. +// The input grid should be generated using similar +// conventions of file galeri/data/TwoSquares.m: +// - the bc ID of 10 and 20 are for the mortar interface +// - the bc ID of 0 is for the external domain. +// ========================================================== + +double Diffusion5(const double &x, const double &y, const double &z) +{ + return (1.0); +} + +double Source5(const double &x, const double &y, const double &z) +{ + return (0.0); +} + +double Force5(const double &x, const double &y, const double &z) +{ + if (y < 0.8) + return (1.0); + else + return (0.0); +} + +// Specifies the boundary condition. +int BoundaryType5(const int &Patch) +{ + if (Patch == 10 || Patch == 20) + return (GALERI_DO_NOTHING); + else + return (GALERI_DIRICHLET); +} + +// Specifies the boundary condition. +double BoundaryValue5(const double &x, const double &y, + const double &z, const int &Patch) +{ + if (x == -1.0 || x == 1.0) + return (0.0); + else if (Patch == 10 || Patch == 20) + return (1.0); + else + return (0.0); +} + +// =========== // +// main driver // +// =========== // + +using namespace tlnos; + +Example5::Example5() +{ +} + +int Example5::execute() +{ +#ifdef HAVE_MPI + /* + static int argc = 1; + char **argv = new char*[2];// mem leak volontaire + argv[0] = new char[8]; strcpy(argv[0], "myprog"); // mem leak volontaire + argv[1] = new char[1]; strcpy(argv[1], ""); // mem leak volontaire + + MPI_Init(&argc,&argv); + */ + Epetra_MpiComm Comm(MPI_COMM_WORLD); +#else + Epetra_SerialComm Comm; +#endif + + int status = 0; // return status + + try + { + + // this example is in serial only + if (Comm.NumProc() > 1) + exit(0); + + // read grid from file, see also TwoSquares.m used to generate the grids + /* + % +------+ + % | S2 | + % +------+ <- edge has tag 20 and 9 elements + % +------+ <- edge has tag 10 and 10 elements + % | S1 | + % +------+ + % + % where S1 = (-1,1) x (-1,1) and S2 = (-1, 1) x (1, 3). + */ + + FileGrid Grid(Comm, "TwoSquares.grid"); // [RB] missing file!! + + // create a list of all nodes that are linked to a face + // with tag 10 and tag 20 + map<int, int> nodes10; + map<int, int> nodes20; + for (int i = 0; i < Grid.NumMyBoundaryFaces(); ++i) + { + int tag; + int nodeids[2]; + Grid.FaceVertices(i, tag, nodeids); + if (tag == 10) + { + nodes10[nodeids[0]] = nodeids[0]; + nodes10[nodeids[1]] = nodeids[1]; + } + else if (tag == 20) + { + nodes20[nodeids[0]] = nodeids[0]; + nodes20[nodeids[1]] = nodeids[1]; + } + else + continue; + } + + // ------------------------------------------------------------- // + // create an empty MOERTEL::Interface, in this example just one + // ------------------------------------------------------------- // + int printlevel = 0; // ( moertel takes values 0 - 10 ) + //int printlevel = 9; // ( moertel takes values 0 - 10 ) + MOERTEL::Interface interface(0, true, Comm, printlevel); + + // ------------------------------------------------------------- // + // Add nodes on both sides of interface to interface + // loop all nodes in the maps nodes10 and nodes20 and add them + // to the interface with unique ids + // tag 10 will become interface side 0 + // tag 20 will become interface side 1 + // ------------------------------------------------------------- // + map<int, int>::iterator curr; + // do tag==10 or interface side 0 + for (curr = nodes10.begin(); curr != nodes10.end(); ++curr) + { + // get unique node id (here it's equal to the degree of freedom on that node) + int nodeid = curr->second; + // get node coordinates + double coord[3]; + Grid.VertexCoord(nodeid, coord); + // get dirichlet boundary conditions + double bou = BoundaryValue5(coord[0], coord[1], coord[2], 10); + bool dboundary = false; + if (bou == 0.0) + dboundary = true; + // create a moertel node + MOERTEL::Node node(nodeid, coord, 1, &nodeid, dboundary, printlevel); + // add node to the interface on side 0 + interface.AddNode(node, 0); + } + nodes10.clear(); + + // do tag==20 or interface side 1 + for (curr = nodes20.begin(); curr != nodes20.end(); ++curr) + { + // get unique node id (here it's equal to the degree of freedom on that node) + int nodeid = curr->second; + // get node coordinates + double coord[3]; + Grid.VertexCoord(nodeid, coord); + // get dirichlet boundary conditions + double bou = BoundaryValue5(coord[0], coord[1], coord[2], 20); + bool dboundary = false; + if (bou == 0.0) + dboundary = true; + // create a moertel node + MOERTEL::Node node(nodeid, coord, 1, &nodeid, dboundary, printlevel); + // add node to the interface on side 1 + interface.AddNode(node, 1); + } + nodes20.clear(); + + // ------------------------------------------------------------- // + // add segments on both sides of the interface to the interface + // ------------------------------------------------------------- // + for (int i = 0; i < Grid.NumMyBoundaryFaces(); ++i) + { + int tag; + int nodeids[2]; + Grid.FaceVertices(i, tag, nodeids); + if (tag != 10 && tag != 20) + continue; + // create a segment (galeri calls it a face) + MOERTEL::Segment_Linear1D segment(i, 2, nodeids, printlevel); + + // add it to the interface on side 0 + if (tag == 10) + interface.AddSegment(segment, 0); + // add it to the interface on side 1 + else if (tag == 20) + interface.AddSegment(segment, 1); + } + + // ------------------------------------------------------------- // + // choose the mortar side of the interface (0 or 1) + // here: let the package choose it (-2) + // ------------------------------------------------------------- // + interface.SetMortarSide(-2); + + // ------------------------------------------------------------- // + // As we do not know the mortar side yet (we decided to le the + // package choose it), we can not set a dual trace function (mortar space) + // as we don't know the side to set it to + // so we just give orders for the function type + // ------------------------------------------------------------- // + interface.SetFunctionTypes(MOERTEL::Function::func_Linear1D, // primal trace space + MOERTEL::Function::func_DualLinear1D); // dual mortar space (recommended) + //MOERTEL::Function::func_Linear1D); // mortar space (not recommended) + + // ------------------------------------------------------------- // + // complete the interface + // ------------------------------------------------------------- // + if (!interface.Complete()) + { + cout << "Interface completion returned false\n"; + exit(EXIT_FAILURE); + } + + // ------------------------------------------------------------- // + // create an empty MOERTEL::Manager for 2D problems + // It organizes everything from integration to solution + // ------------------------------------------------------------- // + MOERTEL::Manager manager(Comm, printlevel); + manager.SetDimension(MOERTEL::Manager::manager_2D); + + // ------------------------------------------------------------- // + // Add the interface to the manager + // ------------------------------------------------------------- // + manager.AddInterface(interface); + + // ------------------------------------------------------------- // + // for mortar integration, the mortar manager needs to know about + // the rowmap of the original (uncoupled) problem because it will + // create coupling matrices D and M matching that rowmap + // ------------------------------------------------------------- // + manager.SetProblemMap(&Grid.RowMap()); + + // ============================================================= // + // choose integration parameters + // ============================================================= // + Teuchos::ParameterList &moertelparams = manager.Default_Parameters(); + // this does not affect this 2D case + moertelparams.set("exact values at gauss points", true); + // 1D interface possible values are 1,2,3,4,5,6,7,8,10 (2 recommended with linear shape functions) + moertelparams.set("number gaussian points 1D", 2); + // 2D interface possible values are 3,6,12,13,16,19,27 + moertelparams.set("number gaussian points 2D", 27); + + // ============================================================= // + // Here we are done with the construction phase of the interface + // so we can integrate the mortar integrals + // (Note we have not yet evaluated the PDE at all!) + // ============================================================= // + manager.Mortar_Integrate(); + + // print interface information + // (Manager, Interface, Segment, Node implement the << operator) + if (printlevel) + cout << manager; + + // ======================================================== // + // Prepares the linear system. This requires the definition // + // of a quadrature formula compatible with the grid, a // + // variational formulation, and a problem object which take // + // care of filling matrix and right-hand side. // + // NOTE: + // we are doing this AFTER we did all the mortar stuff to + // show that the mortar integration is actually PDE-independent + // ======================================================== // + Epetra_CrsMatrix A(Copy, Grid.RowMap(), 0); + Epetra_Vector LHS(Grid.RowMap(), true); + Epetra_Vector RHS(Grid.RowMap()); + + int NumQuadratureNodes = 3; + + GalerkinVariational<TriangleQuadrature> + Laplace2D(NumQuadratureNodes, Diffusion5, Source5, Force5, + BoundaryValue5, BoundaryType5); + + LinearProblem FiniteElementProblem(Grid, Laplace2D, A, LHS, RHS); + FiniteElementProblem.Compute(); + + // ============================================================= // + // this is Galeri's dense solve method if you'd like to see how + // the uncoupled solution looks like + // ============================================================= // + Solve(&A, &LHS, &RHS); + + // ============================================================= // + // Since we now have all the pieces together, let's use the + // MOERTEL interface to other Trilinos packages to solve the + // problem + // ============================================================= // + + // ------------------------------------------------------------- // + // Create a Teuchos::ParameterList to hold solver arguments and also + // to hold arguments for connected packages AztecOO, ML and Amesos + // ------------------------------------------------------------- // + Teuchos::ParameterList list; + + // ------------------------------------------------------------- // + // Choose which type of system of equations to generate + // Note that only when using DUAL mortar spaces an spd system + // can be generated + // ------------------------------------------------------------- // + //list.set("System","SaddleSystem"); + list.set("System", "SPDSystem"); + + // ------------------------------------------------------------- // + // choose solver, currently there is a choice of Amesos and ML/AztecOO + // Note that if "SaddleSystem" was chosen as system of equations + // ML/AztecOO doesn't work + // ------------------------------------------------------------- // + list.set("Solver", "Amesos"); + //list.set("Solver","ML/Aztec"); + + // ------------------------------------------------------------- // + // create sublists for packages Amesos, ML, AztecOO. they will be + // passed on to the individual package that is used + // ------------------------------------------------------------- // + + // Amesos parameters: + Teuchos::ParameterList &amesosparams = list.sublist("Amesos"); + amesosparams.set("Solver", "Amesos_Klu"); + amesosparams.set("PrintTiming", true); + amesosparams.set("PrintStatus", true); + amesosparams.set("UseTranspose", true); + + // AztecOO parameters + Teuchos::ParameterList &aztecparams = list.sublist("Aztec"); + aztecparams.set("AZ_solver", "AZ_cg"); + // This will involve ML as preconditioner + // See the AztecOO manual for other options + aztecparams.set("AZ_precond", "AZ_user_precond"); + aztecparams.set("AZ_max_iter", 1200); + aztecparams.set("AZ_output", 100); + aztecparams.set("AZ_tol", 1.0e-7); + aztecparams.set("AZ_scaling", "AZ_none"); + + // ML parameters + // As Moertel comes with his own special mortar multigrid hierachy + // based on ML's smoothed aggregation, not all ML parameters are recognized + // It basically recognizes everything that recognized by ML's MLAPI + // (ML Application Programming Interface), see MLAPI documentation + Teuchos::ParameterList &mlparams = list.sublist("ML"); + ML_Epetra::SetDefaults("SA", mlparams); + mlparams.set("output", 10); + mlparams.set("print unused", 1 - 2); + mlparams.set("increasing or decreasing", "increasing"); + mlparams.set("PDE equations", 1); + mlparams.set("max levels", 10); + mlparams.set("coarse: max size", 80); + mlparams.set("aggregation: type", "Uncoupled"); + mlparams.set("aggregation: damping factor", 1.33); + + // original : The unmodified ML (smoothed) aggregation prolongator + // mod_simple : ( R * (I-B*W^T) )^T + // mod_middle : ( (I - R B*W^T*P) * R * (I-B*W^T) )^T + // mod_full : ( (I - R B*W^T*P) * R * (I-B*W^T) )^T + ( R B*W^T*P * R * B*W^T )^T + mlparams.set("prolongator: type", "mod_middle"); + + // solvers/smoothers currently recognized by the MLAPI_InverseOperator are + // Ifpack: + // "Jacobi" "Gauss-Seidel" "symmetric Gauss-Seidel" + // "ILU" "ILUT" "IC" "ICT" "LU" "Amesos" "Amesos-KLU" + // and accompanying parameters + // ML: + // "MLS" "ML MLS" "ML symmetric Gauss-Seidel" + // "ML Gauss-Seidel" + // and accompanying parameters + mlparams.set("coarse: type", "Amesos-KLU"); + mlparams.set("smoother: type", "symmetric Gauss-Seidel"); + mlparams.set("smoother: MLS polynomial order", 3); + mlparams.set("relaxation: min diagonal value", 0.1); + mlparams.set("smoother: damping factor", 0.67); + mlparams.set("smoother: sweeps", 1); + mlparams.set("smoother: pre or post", "both"); + // the ns for Laplace is the constant + int dimnullspace = 1; + int nummyrows = manager.ProblemMap()->NumMyElements(); + int dimnsp = dimnullspace * nummyrows; + double *nsp = new double[dimnsp]; + for (int i = 0; i < dimnsp; ++i) + nsp[i] = 1.; + mlparams.set("null space: type", "pre-computed"); + mlparams.set("null space: add default vectors", false); + mlparams.set("null space: dimension", dimnullspace); + mlparams.set("null space: vectors", nsp); + + // ------------------------------------------------------------- // + // Pass input matrix to Moertel, + // Moertel does NOT take ownership of A! + // ------------------------------------------------------------- // + manager.SetInputMatrix(&A, false); + + std::cout << list; + + // ============================================================= // + // Solve + // ============================================================= // + //manager.Solve(list,LHS,RHS); + + // ------------------------------------------------------------- // + // One can reset the solver, change parameters and/or matrix (with the + // same rowmap) and solve again if needed. + // If no ResetSolver() is called, the same matrix and preconditioner + // will be used to solve for multiple rhs + // ------------------------------------------------------------- // + //manager.ResetSolver(); + //LHS.PutScalar(0.0); + //manager.SetInputMatrix(&A,false); + //manager.Solve(list,LHS,RHS); + +#ifdef MOERTEL_HAVE_EXODUS + + // ================== // + // Output using ExodusII // + // ================== // + ExodusInterface exodus(Comm); + exodus.Write(Grid, "output", LHS); + + std::cout << "Exodus is used for output" << std::endl; + +#endif + } + catch (int e) + { + cerr << "Caught exception, value = " << e << endl; + status = 1; + } + catch (Galeri::Exception &rhs) + { + + cerr << "Caught Galeri exception: "; + rhs.Print(); + status = 1; + } + catch (...) + { + cerr << "Caught generic exception" << endl; + status = 1; + } + +#ifdef HAVE_MPI + MPI_Finalize(); +#endif + + if (status == 0) + std::cout << "\nTest passed!" << endl; + else + std::cout << "\nTest Failed!" << endl; + + // Final return value (0 = successfull, non-zero = failure) + + return status; +} diff --git a/tlnos/src/wExample5.h b/tlnos/src/wExample5.h new file mode 100644 index 0000000000000000000000000000000000000000..7c53b738555e13034d159673a02079b94e66b435 --- /dev/null +++ b/tlnos/src/wExample5.h @@ -0,0 +1,30 @@ +#ifndef WEXAMPLE5_H +#define WEXAMPLE5_H + +#include "tlnos.h" +#include "wObject.h" +#include <iostream> +#include <vector> +#include <string> +#ifndef SWIG +#include "Teuchos_Comm.hpp" +#include "Teuchos_XMLParameterListHelpers.hpp" +#endif + +namespace tlnos +{ + +/** + * @brief a class containing the "build-against-trilinos" example of trilinos + */ + +class TLNOS_API Example5 : public fwk::wObject +{ +public: + Example5(); + int execute(); +}; + +} // namespace tlnos + +#endif //WEXAMPLE5_H diff --git a/tlnos/src/wExample6.cpp b/tlnos/src/wExample6.cpp new file mode 100644 index 0000000000000000000000000000000000000000..1788410efe053b087afa122a3c29b33d047fa849 --- /dev/null +++ b/tlnos/src/wExample6.cpp @@ -0,0 +1,533 @@ +#include "wExample6.h" +/* +#@HEADER +# ************************************************************************ +# +# Moertel FE Package +# Copyright (2006) Sandia Corporation +# +# Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +# license for use of this work by or on behalf of the U.S. Government. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# 3. Neither the name of the Corporation nor the names of the +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Questions? Contact Glen Hansen (gahanse@sandia.gov) +# +# ************************************************************************ +#@HEADER +*/ +/*! + * \file TwoSquares.cpp + * + * \brief Simple serial example showing Moertel usage and solver interfaces + * + * \date Last update do Doxygen: 20-March-06 + * + */ +#ifdef HAVE_MPI +#include "mpi.h" +#include "Epetra_MpiComm.h" +#else +#include "Epetra_SerialComm.h" +#endif + +// MOERTEL headers +#include "mrtr_manager.H" +#include "mrtr_segment_linear1D.H" + +// Galeri headers +#include "Galeri_Utils.h" +#include "Galeri_FiniteElements.h" + +#ifdef MOERTEL_HAVE_EXODUS +#include "ExodusInterface.h" +#endif + +using namespace Galeri; +using namespace Galeri::FiniteElements; + +// ========================================================== +// This file solves the scalar problem +// +// - \mu \nabla u + \sigma u = f on \Omega +// u = g on \partial \Omega +// +// where \Omega is a 2D rectangle, divided into triangles. +// The input grid should be generated using similar +// conventions of file galeri/data/TwoSquares.m: +// - the bc ID of 10 and 20 are for the mortar interface +// - the bc ID of 0 is for the external domain. +// ========================================================== + +double Diffusion(const double &x, const double &y, const double &z) +{ + return (1.0); +} + +double Source(const double &x, const double &y, const double &z) +{ + return (0.0); +} + +double Force(const double &x, const double &y, const double &z) +{ + if (y < 0.8) + return (1.0); + else + return (0.0); +} + +// Specifies the boundary condition. +int BoundaryType(const int &Patch) +{ + if (Patch == 10 || Patch == 20) + return (GALERI_DO_NOTHING); + else + return (GALERI_DIRICHLET); +} + +// Specifies the boundary condition. +double BoundaryValue(const double &x, const double &y, + const double &z, const int &Patch) +{ + if (x == -1.0 || x == 1.0) + return (0.0); + else if (Patch == 10 || Patch == 20) + return (1.0); + else + return (0.0); +} + +// =========== // +// main driver // +// =========== // + +using namespace tlnos; + +Example6::Example6() +{ +} + +int Example6::execute() +{ +#ifdef HAVE_MPI + /* + static int argc = 1; + char **argv = new char*[2];// mem leak volontaire + argv[0] = new char[8]; strcpy(argv[0], "myprog"); // mem leak volontaire + argv[1] = new char[1]; strcpy(argv[1], ""); // mem leak volontaire + + MPI_Init(&argc,&argv); + */ + Epetra_MpiComm Comm(MPI_COMM_WORLD); +#else + Epetra_SerialComm Comm; +#endif + + int status = 0; // return status + + try + { + + // this example is in serial only + if (Comm.NumProc() > 1) + exit(0); + + // read grid from file, see also TwoSquares.m used to generate the grids + /* + % +------+ + % | S2 | + % +------+ <- edge has tag 20 and 9 elements + % +------+ <- edge has tag 10 and 10 elements + % | S1 | + % +------+ + % + % where S1 = (-1,1) x (-1,1) and S2 = (-1, 1) x (1, 3). + */ + + FileGrid Grid(Comm, "TwoSquares.grid"); + + // create a list of all nodes that are linked to a face + // with tag 10 and tag 20 + map<int, int> nodes10; + map<int, int> nodes20; + for (int i = 0; i < Grid.NumMyBoundaryFaces(); ++i) + { + int tag; + int nodeids[2]; + Grid.FaceVertices(i, tag, nodeids); + if (tag == 10) + { + nodes10[nodeids[0]] = nodeids[0]; + nodes10[nodeids[1]] = nodeids[1]; + } + else if (tag == 20) + { + nodes20[nodeids[0]] = nodeids[0]; + nodes20[nodeids[1]] = nodeids[1]; + } + else + continue; + } + + // ------------------------------------------------------------- // + // create an empty MOERTEL::Interface, in this example just one + // ------------------------------------------------------------- // + int printlevel = 0; // ( moertel takes values 0 - 10 ) + //int printlevel = 9; // ( moertel takes values 0 - 10 ) + MOERTEL::Interface interface(0, true, Comm, printlevel); + + // ------------------------------------------------------------- // + // Add nodes on both sides of interface to interface + // loop all nodes in the maps nodes10 and nodes20 and add them + // to the interface with unique ids + // tag 10 will become interface side 0 + // tag 20 will become interface side 1 + // ------------------------------------------------------------- // + map<int, int>::iterator curr; + // do tag==10 or interface side 0 + for (curr = nodes10.begin(); curr != nodes10.end(); ++curr) + { + // get unique node id (here it's equal to the degree of freedom on that node) + int nodeid = curr->second; + // get node coordinates + double coord[3]; + Grid.VertexCoord(nodeid, coord); + // get dirichlet boundary conditions + double bou = BoundaryValue(coord[0], coord[1], coord[2], 10); + bool dboundary = false; + if (bou == 0.0) + dboundary = true; + // create a moertel node + MOERTEL::Node node(nodeid, coord, 1, &nodeid, dboundary, printlevel); + // add node to the interface on side 0 + interface.AddNode(node, 0); + } + nodes10.clear(); + + // do tag==20 or interface side 1 + for (curr = nodes20.begin(); curr != nodes20.end(); ++curr) + { + // get unique node id (here it's equal to the degree of freedom on that node) + int nodeid = curr->second; + // get node coordinates + double coord[3]; + Grid.VertexCoord(nodeid, coord); + // get dirichlet boundary conditions + double bou = BoundaryValue(coord[0], coord[1], coord[2], 20); + bool dboundary = false; + if (bou == 0.0) + dboundary = true; + // create a moertel node + MOERTEL::Node node(nodeid, coord, 1, &nodeid, dboundary, printlevel); + // add node to the interface on side 1 + interface.AddNode(node, 1); + } + nodes20.clear(); + + // ------------------------------------------------------------- // + // add segments on both sides of the interface to the interface + // ------------------------------------------------------------- // + for (int i = 0; i < Grid.NumMyBoundaryFaces(); ++i) + { + int tag; + int nodeids[2]; + Grid.FaceVertices(i, tag, nodeids); + if (tag != 10 && tag != 20) + continue; + // create a segment (galeri calls it a face) + MOERTEL::Segment_Linear1D segment(i, 2, nodeids, printlevel); + + // add it to the interface on side 0 + if (tag == 10) + interface.AddSegment(segment, 0); + // add it to the interface on side 1 + else if (tag == 20) + interface.AddSegment(segment, 1); + } + + // ------------------------------------------------------------- // + // choose the mortar side of the interface (0 or 1) + // here: let the package choose it (-2) + // ------------------------------------------------------------- // + interface.SetMortarSide(-2); + + // ------------------------------------------------------------- // + // As we do not know the mortar side yet (we decided to le the + // package choose it), we can not set a dual trace function (mortar space) + // as we don't know the side to set it to + // so we just give orders for the function type + // ------------------------------------------------------------- // + interface.SetFunctionTypes(MOERTEL::Function::func_Linear1D, // primal trace space + MOERTEL::Function::func_DualLinear1D); // dual mortar space (recommended) + //MOERTEL::Function::func_Linear1D); // mortar space (not recommended) + + // ------------------------------------------------------------- // + // complete the interface + // ------------------------------------------------------------- // + if (!interface.Complete()) + { + cout << "Interface completion returned false\n"; + exit(EXIT_FAILURE); + } + + // ------------------------------------------------------------- // + // create an empty MOERTEL::Manager for 2D problems + // It organizes everything from integration to solution + // ------------------------------------------------------------- // + MOERTEL::Manager manager(Comm, printlevel); + manager.SetDimension(MOERTEL::Manager::manager_2D); + + // ------------------------------------------------------------- // + // Add the interface to the manager + // ------------------------------------------------------------- // + manager.AddInterface(interface); + + // ------------------------------------------------------------- // + // for mortar integration, the mortar manager needs to know about + // the rowmap of the original (uncoupled) problem because it will + // create coupling matrices D and M matching that rowmap + // ------------------------------------------------------------- // + manager.SetProblemMap(&Grid.RowMap()); + + // ============================================================= // + // choose integration parameters + // ============================================================= // + Teuchos::ParameterList &moertelparams = manager.Default_Parameters(); + // this does not affect this 2D case + moertelparams.set("exact values at gauss points", true); + // 1D interface possible values are 1,2,3,4,5,6,7,8,10 (2 recommended with linear shape functions) + moertelparams.set("number gaussian points 1D", 2); + // 2D interface possible values are 3,6,12,13,16,19,27 + moertelparams.set("number gaussian points 2D", 27); + + // ============================================================= // + // Here we are done with the construction phase of the interface + // so we can integrate the mortar integrals + // (Note we have not yet evaluated the PDE at all!) + // ============================================================= // + manager.Mortar_Integrate(); + + // print interface information + // (Manager, Interface, Segment, Node implement the << operator) + if (printlevel) + cout << manager; + + // ======================================================== // + // Prepares the linear system. This requires the definition // + // of a quadrature formula compatible with the grid, a // + // variational formulation, and a problem object which take // + // care of filling matrix and right-hand side. // + // NOTE: + // we are doing this AFTER we did all the mortar stuff to + // show that the mortar integration is actually PDE-independent + // ======================================================== // + Epetra_CrsMatrix A(Copy, Grid.RowMap(), 0); + Epetra_Vector LHS(Grid.RowMap(), true); + Epetra_Vector RHS(Grid.RowMap()); + + int NumQuadratureNodes = 3; + + GalerkinVariational<TriangleQuadrature> + Laplace2D(NumQuadratureNodes, Diffusion, Source, Force, + BoundaryValue, BoundaryType); + + LinearProblem FiniteElementProblem(Grid, Laplace2D, A, LHS, RHS); + FiniteElementProblem.Compute(); + + // ============================================================= // + // this is Galeri's dense solve method if you'd like to see how + // the uncoupled solution looks like + // ============================================================= // + //Solve(&A, &LHS, &RHS); + + // ============================================================= // + // Since we now have all the pieces together, let's use the + // MOERTEL interface to other Trilinos packages to solve the + // problem + // ============================================================= // + + // ------------------------------------------------------------- // + // Create a Teuchos::ParameterList to hold solver arguments and also + // to hold arguments for connected packages AztecOO, ML and Amesos + // ------------------------------------------------------------- // + Teuchos::ParameterList list; + + // ------------------------------------------------------------- // + // Choose which type of system of equations to generate + // Note that only when using DUAL mortar spaces an spd system + // can be generated + // ------------------------------------------------------------- // + //list.set("System","SaddleSystem"); + list.set("System", "SPDSystem"); + + // ------------------------------------------------------------- // + // choose solver, currently there is a choice of Amesos and ML/AztecOO + // Note that if "SaddleSystem" was chosen as system of equations + // ML/AztecOO doesn't work + // ------------------------------------------------------------- // + list.set("Solver", "Amesos"); + //list.set("Solver","ML/Aztec"); + + // ------------------------------------------------------------- // + // create sublists for packages Amesos, ML, AztecOO. they will be + // passed on to the individual package that is used + // ------------------------------------------------------------- // + + // Amesos parameters: + Teuchos::ParameterList &amesosparams = list.sublist("Amesos"); + amesosparams.set("Solver", "Amesos_Klu"); + amesosparams.set("PrintTiming", true); + amesosparams.set("PrintStatus", true); + amesosparams.set("UseTranspose", true); + + // AztecOO parameters + Teuchos::ParameterList &aztecparams = list.sublist("Aztec"); + aztecparams.set("AZ_solver", "AZ_cg"); + // This will involve ML as preconditioner + // See the AztecOO manual for other options + aztecparams.set("AZ_precond", "AZ_user_precond"); + aztecparams.set("AZ_max_iter", 1200); + aztecparams.set("AZ_output", 100); + aztecparams.set("AZ_tol", 1.0e-7); + aztecparams.set("AZ_scaling", "AZ_none"); + + // ML parameters + // As Moertel comes with his own special mortar multigrid hierachy + // based on ML's smoothed aggregation, not all ML parameters are recognized + // It basically recognizes everything that recognized by ML's MLAPI + // (ML Application Programming Interface), see MLAPI documentation + Teuchos::ParameterList &mlparams = list.sublist("ML"); + ML_Epetra::SetDefaults("SA", mlparams); + mlparams.set("output", 10); + mlparams.set("print unused", 1 /*-2*/); + mlparams.set("increasing or decreasing", "increasing"); + mlparams.set("PDE equations", 1); + mlparams.set("max levels", 10); + mlparams.set("coarse: max size", 80); + mlparams.set("aggregation: type", "Uncoupled"); + mlparams.set("aggregation: damping factor", 1.33); + + // original : The unmodified ML (smoothed) aggregation prolongator + // mod_simple : ( R * (I-B*W^T) )^T + // mod_middle : ( (I - R B*W^T*P) * R * (I-B*W^T) )^T + // mod_full : ( (I - R B*W^T*P) * R * (I-B*W^T) )^T + ( R B*W^T*P * R * B*W^T )^T + mlparams.set("prolongator: type", "mod_middle"); + + // solvers/smoothers currently recognized by the MLAPI_InverseOperator are + // Ifpack: + // "Jacobi" "Gauss-Seidel" "symmetric Gauss-Seidel" + // "ILU" "ILUT" "IC" "ICT" "LU" "Amesos" "Amesos-KLU" + // and accompanying parameters + // ML: + // "MLS" "ML MLS" "ML symmetric Gauss-Seidel" + // "ML Gauss-Seidel" + // and accompanying parameters + mlparams.set("coarse: type", "Amesos-KLU"); + mlparams.set("smoother: type", "symmetric Gauss-Seidel"); + mlparams.set("smoother: MLS polynomial order", 3); + mlparams.set("relaxation: min diagonal value", 0.1); + mlparams.set("smoother: damping factor", 0.67); + mlparams.set("smoother: sweeps", 1); + mlparams.set("smoother: pre or post", "both"); + // the ns for Laplace is the constant + int dimnullspace = 1; + int nummyrows = manager.ProblemMap()->NumMyElements(); + int dimnsp = dimnullspace * nummyrows; + double *nsp = new double[dimnsp]; + for (int i = 0; i < dimnsp; ++i) + nsp[i] = 1.; + mlparams.set("null space: type", "pre-computed"); + mlparams.set("null space: add default vectors", false); + mlparams.set("null space: dimension", dimnullspace); + mlparams.set("null space: vectors", nsp); + + // ------------------------------------------------------------- // + // Pass input matrix to Moertel, + // Moertel does NOT take ownership of A! + // ------------------------------------------------------------- // + manager.SetInputMatrix(&A, false); + + // ============================================================= // + // Solve + // ============================================================= // + manager.Solve(list, LHS, RHS); + + // ------------------------------------------------------------- // + // One can reset the solver, change parameters and/or matrix (with the + // same rowmap) and solve again if needed. + // If no ResetSolver() is called, the same matrix and preconditioner + // will be used to solve for multiple rhs + // ------------------------------------------------------------- // + //manager.ResetSolver(); + //LHS.PutScalar(0.0); + //manager.SetInputMatrix(&A,false); + //manager.Solve(list,LHS,RHS); + +#ifdef MOERTEL_HAVE_EXODUS + + // ================== // + // Output using ExodusII // + // ================== // + ExodusInterface exodus(Comm); + exodus.Write(Grid, "output", LHS); + + std::cout << "Exodus is used for output" << std::endl; +#endif + } + catch (int e) + { + cerr << "Caught exception, value = " << e << endl; + status = 1; + } + catch (Galeri::Exception &rhs) + { + + cerr << "Caught Galeri exception: "; + rhs.Print(); + status = 1; + } + catch (...) + { + cerr << "Caught generic exception" << endl; + status = 1; + } + +#ifdef HAVE_MPI + MPI_Finalize(); +#endif + + if (status == 0) + std::cout << "\nTest passed!" << endl; + else + std::cout << "\nTest Failed!" << endl; + + // Final return value (0 = successfull, non-zero = failure) + + return status; +} diff --git a/tlnos/src/wExample6.h b/tlnos/src/wExample6.h new file mode 100644 index 0000000000000000000000000000000000000000..827b49fef1d1ab1e0989cdafd75177abc37f641a --- /dev/null +++ b/tlnos/src/wExample6.h @@ -0,0 +1,30 @@ +#ifndef WEXAMPLE6_H +#define WEXAMPLE6_H + +#include "tlnos.h" +#include "wObject.h" +#include <iostream> +#include <vector> +#include <string> +#ifndef SWIG +#include "Teuchos_Comm.hpp" +#include "Teuchos_XMLParameterListHelpers.hpp" +#endif + +namespace tlnos +{ + +/** + * @brief a class containing the "build-against-trilinos" example of trilinos + */ + +class TLNOS_API Example6 : public fwk::wObject +{ +public: + Example6(); + int execute(); +}; + +} // namespace tlnos + +#endif //WEXAMPLE6_H diff --git a/tlnos/src/wExample7.cpp.disabled b/tlnos/src/wExample7.cpp.disabled new file mode 100644 index 0000000000000000000000000000000000000000..2f0af0ba7cce8c80f9a2e850c10347e52ab75c86 --- /dev/null +++ b/tlnos/src/wExample7.cpp.disabled @@ -0,0 +1,509 @@ +#include "wExample7.h" + +/* +#@HEADER +# ************************************************************************ +# +# Moertel FE Package +# Copyright (2006) Sandia Corporation +# +# Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +# license for use of this work by or on behalf of the U.S. Government. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# 3. Neither the name of the Corporation nor the names of the +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Questions? Contact Glen Hansen (gahanse@sandia.gov) +# +# ************************************************************************ +#@HEADER +*/ +/*! + * \file TwoSquares.cpp + * + * \brief Simple serial example showing Moertel usage and solver interfaces + * + * \date Last update do Doxygen: 20-March-06 + * + */ +#ifdef HAVE_MPI +#include "mpi.h" +#include "Epetra_MpiComm.h" +#else +#include "Epetra_SerialComm.h" +#endif + +// MOERTEL headers +#include "mrtr_manager.H" +#include "mrtr_segment_bilinearquad.H" + +// Galeri headers +#include "Galeri_Utils.h" +#include "Galeri_FiniteElements.h" +#ifdef MOERTEL_HAVE_EXODUS +#include "ExodusInterface.h" +#endif + +using namespace Galeri; +using namespace Galeri::FiniteElements; + +// ========================================================== +// This file solves the scalar problem +// +// - \mu \nabla u + \sigma u = f on \Omega +// u = g on \partial \Omega +// +// where \Omega is a 2D rectangle, divided into triangles. +// The input grid should be generated using similar +// conventions of file galeri/data/TwoSquares.m: +// - the bc ID of 10 and 20 are for the mortar interface +// - the bc ID of 0 is for the external domain. +// ========================================================== + +double Diffusion7(const double& x, const double& y, const double& z) +{ + return (3.0); +} + +double Source7(const double& x, const double& y, const double& z) +{ + return (0.0); +} + +double Force7(const double& x, const double& y, const double& z) +{ + if (x <-6. || x > 1.) + return(5.0); + else + return(0.0); +} + +// Specifies the boundary condition. +int BoundaryType7(const int& Patch) +{ + if (Patch != 0) + return(GALERI_DO_NOTHING); + else + return(GALERI_DIRICHLET); +} + +// Specifies the boundary condition. +double BoundaryValue7(const double& x, const double& y, + const double& z, const int& Patch) +{ + return 0.0; +} + +// =========== // +// main driver // +// =========== // + +using namespace tlnos; + +Example7::Example7() +{ +} + + +int +Example7::execute() +{ +#ifdef HAVE_MPI + static int argc = 1; + char **argv = new char*[2];// mem leak volontaire + argv[0] = new char[8]; strcpy(argv[0], "myprog"); // mem leak volontaire + argv[1] = new char[1]; strcpy(argv[1], ""); // mem leak volontaire + + MPI_Init(&argc,&argv); + Epetra_MpiComm Comm(MPI_COMM_WORLD); +#else + Epetra_SerialComm Comm; +#endif + + // this example is in serial only + if (Comm.NumProc()>1) exit(0); + + FileGrid Grid(Comm, "Hex_3D.grid"); + + // create a list of all nodes that are linked to a face + // we have 4 interfaces here with each 2 sides: + // with tags 1/2, 11/12, 21/22, 31/32 + const int ninter = 4; + vector<map<int,int> > nodes(ninter*2); + for (int i=0; i<Grid.NumMyBoundaryFaces(); ++i) + { + int tag; + int nodeids[4]; + Grid.FaceVertices(i,tag,nodeids); + if (tag==1) + { + for (int j=0; j<4; ++j) + nodes[0][nodeids[j]] = nodeids[j]; + } + else if (tag==2) + { + for (int j=0; j<4; ++j) + nodes[1][nodeids[j]] = nodeids[j]; + } + else if (tag==11) + { + for (int j=0; j<4; ++j) + nodes[2][nodeids[j]] = nodeids[j]; + } + else if (tag==12) + { + for (int j=0; j<4; ++j) + nodes[3][nodeids[j]] = nodeids[j]; + } + else if (tag==21) + { + for (int j=0; j<4; ++j) + nodes[4][nodeids[j]] = nodeids[j]; + } + else if (tag==22) + { + for (int j=0; j<4; ++j) + nodes[5][nodeids[j]] = nodeids[j]; + } + else if (tag==31) + { + for (int j=0; j<4; ++j) + nodes[6][nodeids[j]] = nodeids[j]; + } + else if (tag==32) + { + for (int j=0; j<4; ++j) + nodes[7][nodeids[j]] = nodeids[j]; + } + else + continue; + } + + // ------------------------------------------------------------- // + // create 4 empty MOERTEL::Interface instances + // ------------------------------------------------------------- // + int printlevel = 3; // ( moertel takes values 0 - 10 ) + //int printlevel = 8; // ( moertel takes values 0 - 10 ) // GAH gives info about intersection root finding + vector<RefCountPtr<MOERTEL::Interface> > interfaces(ninter); + for (int i=0; i<ninter; ++i) + interfaces[i] = rcp(new MOERTEL::Interface(i,false,Comm,printlevel)); + + // ------------------------------------------------------------- // + // Add nodes on both sides of interface to interfaces + // loop all nodes in the maps add them + // to the interface with unique ids + // ------------------------------------------------------------- // + for (int i=0; i<ninter; ++i) + { + map<int,int>::iterator curr; + for (int j=0; j<2; ++j) + for (curr = nodes[i*2+j].begin(); curr != nodes[i*2+j].end(); ++curr) + { + // get unique node id + int nodeid = curr->second; + // get node coordinates + double coord[3]; + Grid.VertexCoord(nodeid,coord); + // create a moertel node + MOERTEL::Node node(nodeid,coord,1,&nodeid,false,printlevel); + // add node to interface i on side j + interfaces[i]->AddNode(node,j); + } + } + + // ------------------------------------------------------------- // + // add segments on both sides of the interface to the interface + // ------------------------------------------------------------- // + for (int i=0; i<Grid.NumMyBoundaryFaces(); ++i) + { + int tag; + int nodeids[4]; + Grid.FaceVertices(i,tag,nodeids); + if (tag == 0) + continue; + // create a segment (galeri calls it a face) + MOERTEL::Segment_BiLinearQuad segment(i,4,nodeids,printlevel); + + if (tag==1) + interfaces[0]->AddSegment(segment,0); + else if (tag==2) + interfaces[0]->AddSegment(segment,1); + else if (tag==11) + interfaces[1]->AddSegment(segment,0); + else if (tag==12) + interfaces[1]->AddSegment(segment,1); + else if (tag==21) + interfaces[2]->AddSegment(segment,0); + else if (tag==22) + interfaces[2]->AddSegment(segment,1); + else if (tag==31) + interfaces[3]->AddSegment(segment,0); + else if (tag==32) + interfaces[3]->AddSegment(segment,1); + else + { + cout << "Face with unknown tag " << tag << endl; + exit(EXIT_FAILURE); + } + } + + // ------------------------------------------------------------- // + // choose the mortar side of the interface (0 or 1) + // choose the finer side here, which is 0 + // ------------------------------------------------------------- // + for (int i=0; i<ninter; ++i) + interfaces[i]->SetMortarSide(0); + + // ------------------------------------------------------------- // + // As we do not know the mortar side yet (we decided to le the + // package choose it), we can not set a dual trace function (mortar space) + // as we don't know the side to set it to + // so we just give orders for the function type + // ------------------------------------------------------------- // + for (int i=0; i<ninter; ++i) + interfaces[i]->SetFunctionTypes(MOERTEL::Function::func_BiLinearQuad, // primal trace space + MOERTEL::Function::func_DualBiLinearQuad); // dual mortar space (recommended) + //MOERTEL::Function::func_BiLinearQuad); // mortar space (not recommended) + + // ------------------------------------------------------------- // + // complete the interfaces + // ------------------------------------------------------------- // + for (int i=0; i<ninter; ++i) + if (!interfaces[i]->Complete()) + { + cout << "Interface " << i << " completion returned false\n"; + exit(EXIT_FAILURE); + } + + // ------------------------------------------------------------- // + // create an empty MOERTEL::Manager for 3D problems + // It organizes everything from integration to solution + // ------------------------------------------------------------- // + MOERTEL::Manager manager(Comm,MOERTEL::Manager::manager_3D,printlevel); + + // ------------------------------------------------------------- // + // Add the interfaces to the manager + // ------------------------------------------------------------- // + for (int i=0; i<ninter; ++i) + manager.AddInterface(*(interfaces[i])); + + // ------------------------------------------------------------- // + // for mortar integration, the mortar manager needs to know about + // the rowmap of the original (uncoupled) problem because it will + // create coupling matrices D and M matching that rowmap + // ------------------------------------------------------------- // + manager.SetProblemMap(&Grid.RowMap()); + + // ============================================================= // + // choose integration parameters + // ============================================================= // + Teuchos::ParameterList& moertelparams = manager.Default_Parameters(); + // this does affect this 3D case only + moertelparams.set("exact values at gauss points",true); + // 1D interface possible values are 1,2,3,4,5,6,7,8,10 (2 recommended with linear shape functions) + moertelparams.set("number gaussian points 1D",2); + // 2D interface possible values are 3,6,12,13,16,19,27 (12 recommended with linear functions) + moertelparams.set("number gaussian points 2D",12); + + // ============================================================= // + // Here we are done with the construction phase of the interface + // so we can integrate the mortar integrals + // (Note we have not yet evaluated the PDE at all!) + // ============================================================= // + manager.Mortar_Integrate(); + + // print interface information + // (Manager, Interface, Segment, Node implement the << operator) + if (printlevel) cout << manager; + + cout << "A" << endl; + + // ======================================================== // + // Prepares the linear system. This requires the definition // + // of a quadrature formula compatible with the grid, a // + // variational formulation, and a problem object which take // + // care of filling matrix and right-hand side. // + // NOTE: + // we are doing this AFTER we did all the mortar stuff to + // show that the mortar integration is actually PDE-independent + // ======================================================== // + Epetra_CrsMatrix A(Copy, Grid.RowMap(), 0); + Epetra_Vector LHS(Grid.RowMap(),true); + Epetra_Vector RHS(Grid.RowMap()); + + int NumQuadratureNodes = 8; + + GalerkinVariational<HexQuadrature> + Laplace3D(NumQuadratureNodes, Diffusion7, Source7, Force7, + BoundaryValue7, BoundaryType7); + + LinearProblem FiniteElementProblem(Grid, Laplace3D, A, LHS, RHS); + FiniteElementProblem.Compute(); + + // ============================================================= // + // this is Galeri's dense solve method if you'd like to see how + // the uncoupled solution looks like + // ============================================================= // + //Solve(&A, &LHS, &RHS); + + // ============================================================= // + // Since we now have all the pieces together, let's use the + // MOERTEL interface to other Trilinos packages to solve the + // problem + // ============================================================= // + + // ------------------------------------------------------------- // + // Create a Teuchos::ParameterList to hold solver arguments and also + // to hold arguments for connected packages AztecOO, ML and Amesos + // ------------------------------------------------------------- // + Teuchos::ParameterList list; + + // ------------------------------------------------------------- // + // Choose which type of system of equations to generate + // Note that only when using DUAL mortar spaces an spd system + // can be generated + // ------------------------------------------------------------- // + //list.set("System","SaddleSystem"); + list.set("System","SPDSystem"); + + // ------------------------------------------------------------- // + // choose solver, currently there is a choice of Amesos and ML/AztecOO + // Note that if "SaddleSystem" was chosen as system of equations + // ML/AztecOO doesn't work + // ------------------------------------------------------------- // + list.set("Solver","Amesos"); + //list.set("Solver","ML/Aztec"); // GAH Aztec not working FIX + + // ------------------------------------------------------------- // + // create sublists for packages Amesos, ML, AztecOO. they will be + // passed on to the individual package that is used + // ------------------------------------------------------------- // + + // Amesos parameters: + Teuchos::ParameterList& amesosparams = list.sublist("Amesos"); + amesosparams.set("Solver","Amesos_Klu"); + amesosparams.set("PrintTiming",true); + amesosparams.set("PrintStatus",true); + amesosparams.set("UseTranspose",true); + + // AztecOO parameters + Teuchos::ParameterList& aztecparams = list.sublist("Aztec"); + aztecparams.set("AZ_solver","AZ_cg"); + // This will involve ML as preconditioner + // See the AztecOO manual for other options + aztecparams.set("AZ_precond","AZ_user_precond"); + aztecparams.set("AZ_max_iter",1200); + aztecparams.set("AZ_output",100); + aztecparams.set("AZ_tol",1.0e-7); + aztecparams.set("AZ_scaling","AZ_none"); + + cout << "A" << endl; + // ML parameters + // As Moertel comes with his own special mortar multigrid hierachy + // based on ML's smoothed aggregation, not all ML parameters are recognized + // It basically recognizes everything that recognized by ML's MLAPI + // (ML Application Programming Interface), see MLAPI documentation + Teuchos::ParameterList& mlparams = list.sublist("ML"); + ML_Epetra::SetDefaults("SA",mlparams); + mlparams.set("output",10); + mlparams.set("print unused",1/*-2*/); + mlparams.set("PDE equations",1); + mlparams.set("max levels",10); + mlparams.set("coarse: max size",500); + mlparams.set("aggregation: type","Uncoupled"); + mlparams.set("aggregation: damping factor",1.33); + + // original : The unmodified ML (smoothed) aggregation prolongator + // mod_simple : ( R * (I-B*W^T) )^T + // mod_middle : ( (I - R B*W^T*P) * R * (I-B*W^T) )^T + // mod_full : ( (I - R B*W^T*P) * R * (I-B*W^T) )^T + ( R B*W^T*P * R * B*W^T )^T + mlparams.set("prolongator: type","mod_full"); + + // solvers/smoothers currently recognized by the MLAPI_InverseOperator are + // Ifpack: + // "Jacobi" "Gauss-Seidel" "symmetric Gauss-Seidel" + // "ILU" "ILUT" "IC" "ICT" "LU" "Amesos" "Amesos-KLU" + // and accompanying parameters as listed + // ML: + // "MLS" "ML MLS" "ML symmetric Gauss-Seidel" + // "ML Gauss-Seidel" "ML Jacobi" + // and accompanying parameters as listed + mlparams.set("coarse: type","Amesos-KLU"); + mlparams.set("smoother: type","symmetric Gauss-Seidel"); + mlparams.set("smoother: MLS polynomial order",3); + mlparams.set("smoother: damping factor",0.67); + mlparams.set("smoother: sweeps",1); + mlparams.set("smoother: pre or post","both"); + // the ns for Laplace is the constant + int dimnullspace = 1; + int nummyrows = manager.ProblemMap()->NumMyElements(); + int dimnsp = dimnullspace*nummyrows; + double* nsp = new double[dimnsp]; + for (int i=0; i<dimnsp; ++i) nsp[i] = 1.; + mlparams.set("null space: type","pre-computed"); + mlparams.set("null space: add default vectors",false); + mlparams.set("null space: dimension",dimnullspace); + mlparams.set("null space: vectors",nsp); + + // ------------------------------------------------------------- // + // Pass input matrix to Moertel, + // Moertel does NOT take ownership of A! + // ------------------------------------------------------------- // + manager.SetInputMatrix(&A,false); + + // ============================================================= // + // Solve + // ============================================================= // + manager.Solve(list,LHS,RHS); + + // ------------------------------------------------------------- // + // One can reset the solver, change parameters and/or matrix (with the + // same rowmap) and solve again if needed. + // If no ResetSolver() is called, the same matrix and preconditioner + // will be used to solve for multiple rhs + // ------------------------------------------------------------- // + //manager.ResetSolver(); + //LHS.PutScalar(0.0); + //manager.SetInputMatrix(&A,false); + //manager.Solve(list,LHS,RHS); + + + // ================== // + // Output using ExodusII // + // ================== // +#ifdef MOERTEL_HAVE_EXODUS + ExodusInterface exodus(Comm); + exodus.Write(Grid, "hex_output", LHS); +#endif + + +#ifdef HAVE_MPI + MPI_Finalize(); +#endif + + return(0); +} diff --git a/tlnos/src/wExample7.h.disabled b/tlnos/src/wExample7.h.disabled new file mode 100644 index 0000000000000000000000000000000000000000..a15a1198eba179248647171c4610fcc7389a6a7a --- /dev/null +++ b/tlnos/src/wExample7.h.disabled @@ -0,0 +1,30 @@ +#ifndef WEXAMPLE7_H +#define WEXAMPLE7_H + +#include "tlnos.h" +#include "wObject.h" +#include <iostream> +#include <vector> +#include <string> +#ifndef SWIG +#include "Teuchos_Comm.hpp" +#include "Teuchos_XMLParameterListHelpers.hpp" +#endif + +namespace tlnos { + +/** + * @brief a class containing the "build-against-trilinos" example of trilinos + */ + +class TLNOS_API Example7 : public fwk::wObject +{ +public: + Example7(); + int execute(); + +}; + +} + +#endif //WEXAMPLE7_H diff --git a/tlnos/src/wExample8.cpp b/tlnos/src/wExample8.cpp new file mode 100644 index 0000000000000000000000000000000000000000..00dec2fe612aa9c84d765492c386540d36cc333a --- /dev/null +++ b/tlnos/src/wExample8.cpp @@ -0,0 +1,570 @@ +#include "wExample8.h" +/* +#@HEADER +# ************************************************************************ +# +# Moertel FE Package +# Copyright (2006) Sandia Corporation +# +# Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +# license for use of this work by or on behalf of the U.S. Government. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# 3. Neither the name of the Corporation nor the names of the +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Questions? Contact Glen Hansen (gahanse@sandia.gov) +# +# ************************************************************************ +#@HEADER +*/ +/*! + * \file TwoSquares.cpp + * + * \brief Simple serial example showing Moertel usage and solver interfaces + * + * \date Last update do Doxygen: 20-March-06 + * + */ +#ifdef HAVE_MPI +#include "mpi.h" +#include "Epetra_MpiComm.h" +#else +#include "Epetra_SerialComm.h" +#endif + +// MOERTEL headers +#include "mrtr_manager.H" +#include "mrtr_segment_linear1D.H" + +// Galeri headers +#include "Galeri_Utils.h" +#include "Galeri_FiniteElements.h" + +#ifdef MOERTEL_HAVE_EXODUS +#include "ExodusInterface.h" +#endif + +using namespace Galeri; +using namespace Galeri::FiniteElements; + +// ========================================================== +// This file solves the scalar problem +// +// - \mu \nabla u + \sigma u = f on \Omega +// u = g on \partial \Omega +// +// where \Omega is a 2D rectangle, divided into triangles. +// The input grid should be generated using similar +// conventions of file galeri/data/TwoSquares.m: +// - the bc ID of 10 and 20 are for the mortar interface +// - the bc ID of 0 is for the external domain. +// ========================================================== + +double Diffusion8(const double &x, const double &y, const double &z) +{ + return (1.0); +} + +double Source8(const double &x, const double &y, const double &z) +{ + return (0.0); +} + +double Force8(const double &x, const double &y, const double &z) +{ + return (0.0); +} + +// Specifies the boundary condition. +int BoundaryType8(const int &Patch) +{ + if (Patch == 11 || Patch == 12) + return (GALERI_DIRICHLET); + else + return (GALERI_DO_NOTHING); +} + +// Specifies the boundary condition. +double BoundaryValue8(const double &x, const double &y, + const double &z, const int &Patch) +{ + if (Patch == 11 || Patch == 12) + return (-y / 4.0 + 0.75); + else + return (1.0); +} + +// =========== // +// main driver // +// =========== // + +using namespace tlnos; + +Example8::Example8() +{ +} + +int Example8::execute() +{ +#ifdef HAVE_MPI + /* + static int argc = 1; + char **argv = new char*[2];// mem leak volontaire + argv[0] = new char[8]; strcpy(argv[0], "myprog"); // mem leak volontaire + argv[1] = new char[1]; strcpy(argv[1], ""); // mem leak volontaire + + MPI_Init(&argc,&argv); + */ + Epetra_MpiComm Comm(MPI_COMM_WORLD); +#else + Epetra_SerialComm Comm; +#endif + + int status = 0; // return status + + try + { + + // this example is in serial only + if (Comm.NumProc() > 1) + exit(0); + + // read grid from file, see also TwoSquares.m used to generate the grids + /* + % +------+ + % | S2 | + % +------+ <- edge has tag 20 and 9 elements + % +------+ <- edge has tag 10 and 10 elements + % | S1 | + % +------+ + % + % where S1 = (-1,1) x (-1,1) and S2 = (-1, 1) x (1, 3). + */ + + FileGrid Grid(Comm, "TwoSquaresDirichlet.grid"); + + // create a list of all nodes that are linked to a face + // with tag 10 and tag 20 + map<int, int> nodes10; + map<int, int> nodes20; + for (int i = 0; i < Grid.NumMyBoundaryFaces(); ++i) + { + int tag; + int nodeids[2]; + Grid.FaceVertices(i, tag, nodeids); + if (tag == 10) + { + nodes10[nodeids[0]] = nodeids[0]; + nodes10[nodeids[1]] = nodeids[1]; + } + else if (tag == 20) + { + nodes20[nodeids[0]] = nodeids[0]; + nodes20[nodeids[1]] = nodeids[1]; + } + else + continue; + } + + // ------------------------------------------------------------- // + // create an empty MOERTEL::Interface, in this example just one + // ------------------------------------------------------------- // + int printlevel = 0; // ( moertel takes values 0 - 10 ) + //int printlevel = 9; // ( moertel takes values 0 - 10 ) + MOERTEL::Interface interface(0, true, Comm, printlevel); + + // ------------------------------------------------------------- // + // Add nodes on both sides of interface to interface + // loop all nodes in the maps nodes10 and nodes20 and add them + // to the interface with unique ids + // tag 10 will become interface side 0 + // tag 20 will become interface side 1 + // ------------------------------------------------------------- // + map<int, int>::iterator curr; + // do tag==10 or interface side 0 + for (curr = nodes10.begin(); curr != nodes10.end(); ++curr) + { + // get unique node id (here it's equal to the degree of freedom on that node) + int nodeid = curr->second; + // get node coordinates + double coord[3]; + Grid.VertexCoord(nodeid, coord); + // get dirichlet boundary conditions + double bou = BoundaryValue8(coord[0], coord[1], coord[2], 10); + bool dboundary = false; + if (bou == 0.0) + { + dboundary = true; + std::cout << "hi" << std::endl; + } + // create a moertel node + MOERTEL::Node node(nodeid, coord, 1, &nodeid, dboundary, printlevel); + // add node to the interface on side 0 + interface.AddNode(node, 0); + } + nodes10.clear(); + + // do tag==20 or interface side 1 + for (curr = nodes20.begin(); curr != nodes20.end(); ++curr) + { + // get unique node id (here it's equal to the degree of freedom on that node) + int nodeid = curr->second; + // get node coordinates + double coord[3]; + Grid.VertexCoord(nodeid, coord); + // get dirichlet boundary conditions + double bou = BoundaryValue8(coord[0], coord[1], coord[2], 20); + bool dboundary = false; + if (bou == 0.0) + { + dboundary = true; + std::cout << "hi" << std::endl; + } + // create a moertel node + MOERTEL::Node node(nodeid, coord, 1, &nodeid, dboundary, printlevel); + // add node to the interface on side 1 + interface.AddNode(node, 1); + } + nodes20.clear(); + + // ------------------------------------------------------------- // + // add segments on both sides of the interface to the interface + // ------------------------------------------------------------- // + for (int i = 0; i < Grid.NumMyBoundaryFaces(); ++i) + { + int tag; + int nodeids[2]; + Grid.FaceVertices(i, tag, nodeids); + if (tag != 10 && tag != 20) + continue; + // create a segment (galeri calls it a face) + MOERTEL::Segment_Linear1D segment(i, 2, nodeids, printlevel); + + // add it to the interface on side 0 + if (tag == 10) + interface.AddSegment(segment, 0); + // add it to the interface on side 1 + else if (tag == 20) + interface.AddSegment(segment, 1); + } + + // ------------------------------------------------------------- // + // choose the mortar side of the interface (0 or 1) + // here: let the package choose it (-2) + // ------------------------------------------------------------- // + interface.SetMortarSide(-2); + + // ------------------------------------------------------------- // + // As we do not know the mortar side yet (we decided to le the + // package choose it), we can not set a dual trace function (mortar space) + // as we don't know the side to set it to + // so we just give orders for the function type + // ------------------------------------------------------------- // + interface.SetFunctionTypes(MOERTEL::Function::func_Linear1D, // primal trace space + MOERTEL::Function::func_DualLinear1D); // dual mortar space (recommended) + //MOERTEL::Function::func_Linear1D); // mortar space (not recommended) + + // ------------------------------------------------------------- // + // complete the interface + // ------------------------------------------------------------- // + if (!interface.Complete()) + { + cout << "Interface completion returned false\n"; + exit(EXIT_FAILURE); + } + + // ------------------------------------------------------------- // + // create an empty MOERTEL::Manager for 2D problems + // It organizes everything from integration to solution + // ------------------------------------------------------------- // + MOERTEL::Manager manager(Comm, printlevel); + manager.SetDimension(MOERTEL::Manager::manager_2D); + + // ------------------------------------------------------------- // + // Add the interface to the manager + // ------------------------------------------------------------- // + manager.AddInterface(interface); + + // ------------------------------------------------------------- // + // for mortar integration, the mortar manager needs to know about + // the rowmap of the original (uncoupled) problem because it will + // create coupling matrices D and M matching that rowmap + // ------------------------------------------------------------- // + manager.SetProblemMap(&Grid.RowMap()); + + // ============================================================= // + // choose integration parameters + // ============================================================= // + Teuchos::ParameterList &moertelparams = manager.Default_Parameters(); + // this does not affect this 2D case + moertelparams.set("exact values at gauss points", true); + // 1D interface possible values are 1,2,3,4,5,6,7,8,10 (2 recommended with linear shape functions) + moertelparams.set("number gaussian points 1D", 2); + // 2D interface possible values are 3,6,12,13,16,19,27 + moertelparams.set("number gaussian points 2D", 27); + + // ============================================================= // + // Here we are done with the construction phase of the interface + // so we can integrate the mortar integrals + // (Note we have not yet evaluated the PDE at all!) + // ============================================================= // + manager.Mortar_Integrate(); + + // print interface information + // (Manager, Interface, Segment, Node implement the << operator) + if (printlevel) + cout << manager; + + // ======================================================== // + // Prepares the linear system. This requires the definition // + // of a quadrature formula compatible with the grid, a // + // variational formulation, and a problem object which take // + // care of filling matrix and right-hand side. // + // NOTE: + // we are doing this AFTER we did all the mortar stuff to + // show that the mortar integration is actually PDE-independent + // ======================================================== // + Epetra_CrsMatrix A(Copy, Grid.RowMap(), 0); + Epetra_Vector LHS(Grid.RowMap(), true); + Epetra_Vector RHS(Grid.RowMap()); + + int NumQuadratureNodes = 3; + + GalerkinVariational<TriangleQuadrature> + Laplace2D(NumQuadratureNodes, Diffusion8, Source8, Force8, + BoundaryValue8, BoundaryType8); + + LinearProblem FiniteElementProblem(Grid, Laplace2D, A, LHS, RHS); + FiniteElementProblem.Compute(); + + // ============================================================= // + // this is Galeri's dense solve method if you'd like to see how + // the uncoupled solution looks like + // ============================================================= // + Solve(&A, &LHS, &RHS); +#ifdef MOERTEL_HAVE_EXODUS + ExodusInterface exodus(Comm); + exodus.Write(Grid, "output", LHS); +#endif + std::cout << "Exodus is used for output" << std::endl; + + std::cout << A << std::endl; + std::cout << RHS << std::endl; + std::cout << LHS << std::endl; + // ============================================================= // + // Since we now have all the pieces together, let's use the + // MOERTEL interface to other Trilinos packages to solve the + // problem + // ============================================================= // + + // ------------------------------------------------------------- // + // Create a Teuchos::ParameterList to hold solver arguments and also + // to hold arguments for connected packages AztecOO, ML and Amesos + // ------------------------------------------------------------- // + Teuchos::ParameterList list; + + // ------------------------------------------------------------- // + // Choose which type of system of equations to generate + // Note that only when using DUAL mortar spaces an spd system + // can be generated + // ------------------------------------------------------------- // + //list.set("System","SaddleSystem"); + list.set("System", "SPDSystem"); + + // ------------------------------------------------------------- // + // choose solver, currently there is a choice of Amesos and ML/AztecOO + // Note that if "SaddleSystem" was chosen as system of equations + // ML/AztecOO doesn't work + // ------------------------------------------------------------- // + list.set("Solver", "Amesos"); + //list.set("Solver","ML/Aztec"); + + // ------------------------------------------------------------- // + // create sublists for packages Amesos, ML, AztecOO. they will be + // passed on to the individual package that is used + // ------------------------------------------------------------- // + + // Amesos parameters: + Teuchos::ParameterList &amesosparams = list.sublist("Amesos"); + amesosparams.set("Solver", "Amesos_Klu"); + amesosparams.set("PrintTiming", true); + amesosparams.set("PrintStatus", true); + amesosparams.set("UseTranspose", true); + + // AztecOO parameters + Teuchos::ParameterList &aztecparams = list.sublist("Aztec"); + aztecparams.set("AZ_solver", "AZ_cg"); + // This will involve ML as preconditioner + // See the AztecOO manual for other options + aztecparams.set("AZ_precond", "AZ_user_precond"); + aztecparams.set("AZ_max_iter", 1200); + aztecparams.set("AZ_output", 100); + aztecparams.set("AZ_tol", 1.0e-7); + aztecparams.set("AZ_scaling", "AZ_none"); + + // ML parameters + // As Moertel comes with his own special mortar multigrid hierachy + // based on ML's smoothed aggregation, not all ML parameters are recognized + // It basically recognizes everything that recognized by ML's MLAPI + // (ML Application Programming Interface), see MLAPI documentation + Teuchos::ParameterList &mlparams = list.sublist("ML"); + ML_Epetra::SetDefaults("SA", mlparams); + mlparams.set("output", 10); + mlparams.set("print unused", 1 /*-2*/); + mlparams.set("increasing or decreasing", "increasing"); + mlparams.set("PDE equations", 1); + mlparams.set("max levels", 10); + mlparams.set("coarse: max size", 80); + mlparams.set("aggregation: type", "Uncoupled"); + mlparams.set("aggregation: damping factor", 1.33); + + // original : The unmodified ML (smoothed) aggregation prolongator + // mod_simple : ( R * (I-B*W^T) )^T + // mod_middle : ( (I - R B*W^T*P) * R * (I-B*W^T) )^T + // mod_full : ( (I - R B*W^T*P) * R * (I-B*W^T) )^T + ( R B*W^T*P * R * B*W^T )^T + mlparams.set("prolongator: type", "mod_middle"); + + // solvers/smoothers currently recognized by the MLAPI_InverseOperator are + // Ifpack: + // "Jacobi" "Gauss-Seidel" "symmetric Gauss-Seidel" + // "ILU" "ILUT" "IC" "ICT" "LU" "Amesos" "Amesos-KLU" + // and accompanying parameters + // ML: + // "MLS" "ML MLS" "ML symmetric Gauss-Seidel" + // "ML Gauss-Seidel" + // and accompanying parameters + mlparams.set("coarse: type", "Amesos-KLU"); + mlparams.set("smoother: type", "symmetric Gauss-Seidel"); + mlparams.set("smoother: MLS polynomial order", 3); + mlparams.set("relaxation: min diagonal value", 0.1); + mlparams.set("smoother: damping factor", 0.67); + mlparams.set("smoother: sweeps", 1); + mlparams.set("smoother: pre or post", "both"); + // the ns for Laplace is the constant + int dimnullspace = 1; + int nummyrows = manager.ProblemMap()->NumMyElements(); + int dimnsp = dimnullspace * nummyrows; + double *nsp = new double[dimnsp]; + for (int i = 0; i < dimnsp; ++i) + nsp[i] = 1.; + mlparams.set("null space: type", "pre-computed"); + mlparams.set("null space: add default vectors", false); + mlparams.set("null space: dimension", dimnullspace); + mlparams.set("null space: vectors", nsp); + + // ------------------------------------------------------------- // + // Pass input matrix to Moertel, + // Moertel does NOT take ownership of A! + // ------------------------------------------------------------- // + manager.SetInputMatrix(&A, false); + + // ============================================================= // + // Solve + // ============================================================= // + manager.Solve(list, LHS, RHS); + + std::cout << A << std::endl; + std::cout << RHS << std::endl; + std::cout << LHS << std::endl; + + std::cout << manager << std::endl; + + Epetra_CrsMatrix *B = manager.MakeSaddleProblem(); + + std::cout << A << std::endl; + std::cout << *B << std::endl; + + std::cout << B->NumGlobalRows() << std::endl; + std::cout << B->NumGlobalCols() << std::endl; + + Epetra_Vector LHS2(B->RowMap(), true); + Epetra_Vector LHS3(A.RowMap(), true); + Epetra_Vector RHS2(B->RowMap()); + + for (size_t i = 0; i < A.NumGlobalRows(); ++i) + RHS2[i] = RHS[i]; + + Solve(B, &LHS2, &RHS2); + for (size_t i = 0; i < A.NumGlobalRows(); ++i) + LHS3[i] = LHS2[i]; +#ifdef MOERTEL_HAVE_EXODUS + exodus.Write(Grid, "output3", LHS3); +#endif + // ------------------------------------------------------------- // + // One can reset the solver, change parameters and/or matrix (with the + // same rowmap) and solve again if needed. + // If no ResetSolver() is called, the same matrix and preconditioner + // will be used to solve for multiple rhs + // ------------------------------------------------------------- // + //manager.ResetSolver(); + //LHS.PutScalar(0.0); + //manager.SetInputMatrix(&A,false); + //manager.Solve(list,LHS,RHS); + +#ifdef MOERTEL_HAVE_EXODUS + + // ================== // + // Output using ExodusII // + // ================== // + //ExodusInterface exodus(Comm); + exodus.Write(Grid, "output2", LHS); + + std::cout << "Exodus is used for output" << std::endl; + +#endif + } + catch (int e) + { + cerr << "Caught exception, value = " << e << endl; + status = 1; + } + catch (Galeri::Exception &rhs) + { + + cerr << "Caught Galeri exception: "; + rhs.Print(); + status = 1; + } + catch (...) + { + cerr << "Caught generic exception" << endl; + status = 1; + } + +#ifdef HAVE_MPI + MPI_Finalize(); +#endif + + if (status == 0) + std::cout << "\nTest passed!" << endl; + else + std::cout << "\nTest Failed!" << endl; + + // Final return value (0 = successfull, non-zero = failure) + + return status; +} diff --git a/tlnos/src/wExample8.h b/tlnos/src/wExample8.h new file mode 100644 index 0000000000000000000000000000000000000000..2bae4e6fa833bcc9f8b327bce922f81c2ad464f7 --- /dev/null +++ b/tlnos/src/wExample8.h @@ -0,0 +1,30 @@ +#ifndef WEXAMPLE8_H +#define WEXAMPLE8_H + +#include "tlnos.h" +#include "wObject.h" +#include <iostream> +#include <vector> +#include <string> +#ifndef SWIG +#include "Teuchos_Comm.hpp" +#include "Teuchos_XMLParameterListHelpers.hpp" +#endif + +namespace tlnos +{ + +/** + * @brief a class containing the "build-against-trilinos" example of trilinos + */ + +class TLNOS_API Example8 : public fwk::wObject +{ +public: + Example8(); + int execute(); +}; + +} // namespace tlnos + +#endif //WEXAMPLE8_H diff --git a/tlnos/src/wExample9.cpp b/tlnos/src/wExample9.cpp new file mode 100644 index 0000000000000000000000000000000000000000..378d809ae832b17bc76dc93f05370a8dbab0f542 --- /dev/null +++ b/tlnos/src/wExample9.cpp @@ -0,0 +1,466 @@ +#include "wExample9.h" +/* +#@HEADER +# ************************************************************************ +# +# Moertel FE Package +# Copyright (2006) Sandia Corporation +# +# Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive +# license for use of this work by or on behalf of the U.S. Government. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# 3. Neither the name of the Corporation nor the names of the +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Questions? Contact Glen Hansen (gahanse@sandia.gov) +# +# ************************************************************************ +#@HEADER +*/ +/*! + * \file TwoSquares.cpp + * + * \brief Simple serial example showing Moertel usage and solver interfaces + * + * \date Last update do Doxygen: 20-March-06 + * + */ +#ifdef HAVE_MPI +#include "mpi.h" +#include "Epetra_MpiComm.h" +#else +#include "Epetra_SerialComm.h" +#endif + +// MOERTEL headers +#include "mrtr_manager.H" +#include "mrtr_segment_linear1D.H" + +// Galeri headers +#include "Galeri_Utils.h" +#include "Galeri_FiniteElements.h" +#ifdef MOERTEL_HAVE_EXODUS +#include "ExodusInterface.h" +#endif +using namespace Galeri; +using namespace Galeri::FiniteElements; + +// ========================================================== +// This file solves the scalar problem +// +// - \mu \nabla u + \sigma u = f on \Omega +// u = g on \partial \Omega +// +// where \Omega is a 2D rectangle, divided into triangles. +// The input grid should be generated using similar +// conventions of file galeri/data/TwoSquares.m: +// - the bc ID of 10 and 20 are for the mortar interface +// - the bc ID of 0 is for the external domain. +// ========================================================== + +double Diffusion9(const double &x, const double &y, const double &z) +{ + return (1.0); +} + +double Source9(const double &x, const double &y, const double &z) +{ + return (0.0); +} + +double Force9(const double &x, const double &y, const double &z) +{ + return (0.0); +} + +// Specifies the boundary condition. +int BoundaryType9(const int &Patch) +{ + if (Patch == 11 || Patch == 12) + return (GALERI_DIRICHLET); + else + return (GALERI_DO_NOTHING); +} + +// Specifies the boundary condition. +double BoundaryValue9(const double &x, const double &y, + const double &z, const int &Patch) +{ + if (Patch == 11 || Patch == 12) + return (-y / 4.0 + 0.75); + else + return (1.0); +} + +// =========== // +// main driver // +// =========== // + +using namespace tlnos; + +Example9::Example9() +{ +} + +int Example9::execute() +{ +#ifdef HAVE_MPI + /* + static int argc = 1; + char **argv = new char*[2];// mem leak volontaire + argv[0] = new char[8]; strcpy(argv[0], "myprog"); // mem leak volontaire + argv[1] = new char[1]; strcpy(argv[1], ""); // mem leak volontaire + MPI_Init(&argc,&argv); +*/ + + Epetra_MpiComm Comm(MPI_COMM_WORLD); +#else + Epetra_SerialComm Comm; +#endif + + int status = 0; // return status + + try + { + + // this example is in serial only + if (Comm.NumProc() > 1) + exit(0); + + // read grid from file, see also TwoSquares.m used to generate the grids + /* + % +------+ + % | S2 | + % +------+ <- edge has tag 20 and 9 elements + % +------+ <- edge has tag 10 and 10 elements + % | S1 | + % +------+ + % + % where S1 = (-1,1) x (-1,1) and S2 = (-1, 1) x (1, 3). + */ + + FileGrid Grid(Comm, "TwoSquaresDirichlet.grid"); + + // create a list of all nodes that are linked to a face + // with tag 10 and tag 20 + map<int, int> nodes10; + map<int, int> nodes20; + for (int i = 0; i < Grid.NumMyBoundaryFaces(); ++i) + { + int tag; + int nodeids[2]; + Grid.FaceVertices(i, tag, nodeids); + if (tag == 10) + { + nodes10[nodeids[0]] = nodeids[0]; + nodes10[nodeids[1]] = nodeids[1]; + } + else if (tag == 20) + { + nodes20[nodeids[0]] = nodeids[0]; + nodes20[nodeids[1]] = nodeids[1]; + } + else + continue; + } + + // ------------------------------------------------------------- // + // create an empty MOERTEL::Interface, in this example just one + // ------------------------------------------------------------- // + int printlevel = 0; // ( moertel takes values 0 - 10 ) + //int printlevel = 9; // ( moertel takes values 0 - 10 ) + MOERTEL::Interface interface(0, true, Comm, printlevel); + + // ------------------------------------------------------------- // + // Add nodes on both sides of interface to interface + // loop all nodes in the maps nodes10 and nodes20 and add them + // to the interface with unique ids + // tag 10 will become interface side 0 + // tag 20 will become interface side 1 + // ------------------------------------------------------------- // + map<int, int>::iterator curr; + // do tag==10 or interface side 0 + for (curr = nodes10.begin(); curr != nodes10.end(); ++curr) + { + // get unique node id (here it's equal to the degree of freedom on that node) + int nodeid = curr->second; + // get node coordinates + double coord[3]; + Grid.VertexCoord(nodeid, coord); + // get dirichlet boundary conditions + double bou = BoundaryValue9(coord[0], coord[1], coord[2], 10); + bool dboundary = false; + if (bou == 0.0) + { + dboundary = true; + std::cout << "hi" << std::endl; + } + // create a moertel node + MOERTEL::Node node(nodeid, coord, 1, &nodeid, dboundary, printlevel); + // add node to the interface on side 0 + interface.AddNode(node, 0); + } + nodes10.clear(); + + // do tag==20 or interface side 1 + for (curr = nodes20.begin(); curr != nodes20.end(); ++curr) + { + // get unique node id (here it's equal to the degree of freedom on that node) + int nodeid = curr->second; + // get node coordinates + double coord[3]; + Grid.VertexCoord(nodeid, coord); + // get dirichlet boundary conditions + double bou = BoundaryValue9(coord[0], coord[1], coord[2], 20); + bool dboundary = false; + if (bou == 0.0) + { + dboundary = true; + std::cout << "hi" << std::endl; + } + // create a moertel node + MOERTEL::Node node(nodeid, coord, 1, &nodeid, dboundary, printlevel); + // add node to the interface on side 1 + interface.AddNode(node, 1); + } + nodes20.clear(); + + // ------------------------------------------------------------- // + // add segments on both sides of the interface to the interface + // ------------------------------------------------------------- // + for (int i = 0; i < Grid.NumMyBoundaryFaces(); ++i) + { + int tag; + int nodeids[2]; + Grid.FaceVertices(i, tag, nodeids); + if (tag != 10 && tag != 20) + continue; + // create a segment (galeri calls it a face) + MOERTEL::Segment_Linear1D segment(i, 2, nodeids, printlevel); + + // add it to the interface on side 0 + if (tag == 10) + interface.AddSegment(segment, 0); + // add it to the interface on side 1 + else if (tag == 20) + interface.AddSegment(segment, 1); + } + + // ------------------------------------------------------------- // + // choose the mortar side of the interface (0 or 1) + // here: let the package choose it (-2) + // ------------------------------------------------------------- // + interface.SetMortarSide(-2); + + // ------------------------------------------------------------- // + // As we do not know the mortar side yet (we decided to le the + // package choose it), we can not set a dual trace function (mortar space) + // as we don't know the side to set it to + // so we just give orders for the function type + // ------------------------------------------------------------- // + interface.SetFunctionTypes(MOERTEL::Function::func_Linear1D, // primal trace space + //MOERTEL::Function::func_DualLinear1D); // dual mortar space (recommended) + MOERTEL::Function::func_Linear1D); // mortar space (not recommended) + + // ------------------------------------------------------------- // + // complete the interface + // ------------------------------------------------------------- // + if (!interface.Complete()) + { + cout << "Interface completion returned false\n"; + exit(EXIT_FAILURE); + } + + // ------------------------------------------------------------- // + // create an empty MOERTEL::Manager for 2D problems + // It organizes everything from integration to solution + // ------------------------------------------------------------- // + MOERTEL::Manager manager(Comm, printlevel); + manager.SetDimension(MOERTEL::Manager::manager_2D); + + // ------------------------------------------------------------- // + // Add the interface to the manager + // ------------------------------------------------------------- // + manager.AddInterface(interface); + + // ------------------------------------------------------------- // + // for mortar integration, the mortar manager needs to know about + // the rowmap of the original (uncoupled) problem because it will + // create coupling matrices D and M matching that rowmap + // ------------------------------------------------------------- // + manager.SetProblemMap(&Grid.RowMap()); + + // ============================================================= // + // choose integration parameters + // ============================================================= // + Teuchos::ParameterList &moertelparams = manager.Default_Parameters(); + // this does not affect this 2D case + moertelparams.set("exact values at gauss points", true); + // 1D interface possible values are 1,2,3,4,5,6,7,8,10 (2 recommended with linear shape functions) + moertelparams.set("number gaussian points 1D", 2); + // 2D interface possible values are 3,6,12,13,16,19,27 + moertelparams.set("number gaussian points 2D", 27); + + // ============================================================= // + // Here we are done with the construction phase of the interface + // so we can integrate the mortar integrals + // (Note we have not yet evaluated the PDE at all!) + // ============================================================= // + manager.Mortar_Integrate(); + + // print interface information + // (Manager, Interface, Segment, Node implement the << operator) + if (printlevel) + cout << manager; + + // ======================================================== // + // Prepares the linear system. This requires the definition // + // of a quadrature formula compatible with the grid, a // + // variational formulation, and a problem object which take // + // care of filling matrix and right-hand side. // + // NOTE: + // we are doing this AFTER we did all the mortar stuff to + // show that the mortar integration is actually PDE-independent + // ======================================================== // + Epetra_CrsMatrix A(Copy, Grid.RowMap(), 0); + Epetra_Vector LHS(Grid.RowMap(), true); + Epetra_Vector RHS(Grid.RowMap()); + + int NumQuadratureNodes = 3; + + GalerkinVariational<TriangleQuadrature> + Laplace2D(NumQuadratureNodes, Diffusion9, Source9, Force9, + BoundaryValue9, BoundaryType9); + + LinearProblem FiniteElementProblem(Grid, Laplace2D, A, LHS, RHS); + FiniteElementProblem.Compute(); + + // ============================================================= // + // this is Galeri's dense solve method if you'd like to see how + // the uncoupled solution looks like + // ============================================================= // + Solve(&A, &LHS, &RHS); +#ifdef MOERTEL_HAVE_EXODUS + ExodusInterface exodus(Comm); + exodus.Write(Grid, "uncoupled_output", LHS); +#endif + // ============================================================= // + // Pass input matrix to Moertel, + // Moertel does NOT take ownership of A! + // ============================================================= // + manager.SetInputMatrix(&A, false); + + // ============================================================= // + // Solve + // ============================================================= // + + Epetra_CrsMatrix *B = manager.MakeSaddleProblem(); + + Epetra_CrsMatrix B1(*B); + Epetra_CrsMatrix B2(Copy, (*B).RowMap(), 0); + Epetra_Vector LHS2(B2.RowMap(), true); + Epetra_Vector LHS3(A.RowMap(), true); + Epetra_Vector RHS2(B2.RowMap()); + + for (size_t i = 0; i < A.NumGlobalRows(); ++i) + RHS2[i] = RHS[i]; + + int B1NumMyRow = B1.NumMyRows(); + int B1MaxNumIndices = B1.MaxNumEntries(); + double *values = new double[B1MaxNumIndices]; + int B1NumIndices; + int *Indices_int = 0; + Indices_int = new int[B1MaxNumIndices]; + + for (size_t i = 0; i < B1NumMyRow; ++i) + { + B1.ExtractGlobalRowCopy(i, B1MaxNumIndices, B1NumIndices, values, Indices_int); + B2.InsertGlobalValues(i, B1NumIndices, values, Indices_int); + } + + double U; + int i_treshold = (B2.NumGlobalRows() + A.NumGlobalRows()) / 2; + for (int i = A.NumGlobalRows(); i < B2.NumGlobalRows(); ++i) + { + if (i < i_treshold) + U = 0.; + else + U = 10000.; + B2.InsertGlobalValues(i, 1, &U, &i); + } + + B2.FillComplete(); + + Solve(&B2, &LHS2, &RHS2); + + for (size_t i = 0; i < A.NumGlobalRows(); ++i) + LHS3[i] = LHS2[i]; +#ifdef MOERTEL_HAVE_EXODUS + exodus.Write(Grid, "coupled_output", LHS3); +#endif + std::cout << "Lambda" << std::endl + << "-----" << std::endl; + + for (size_t i = A.NumGlobalRows(); i < B2.NumGlobalRows(); ++i) + std::cout << LHS2[i] << std::endl; + + std::cout << *(manager.M()) << std::endl + << "-----" << std::endl; + std::cout << *(manager.D()) << std::endl + << "-----" << std::endl; + } + catch (int e) + { + cerr << "Caught exception, value = " << e << endl; + status = 1; + } + catch (Galeri::Exception &rhs) + { + + cerr << "Caught Galeri exception: "; + rhs.Print(); + status = 1; + } + catch (...) + { + cerr << "Caught generic exception" << endl; + status = 1; + } + +#ifdef HAVE_MPI + MPI_Finalize(); +#endif + + if (status == 0) + std::cout << "\nTest passed!" << endl; + else + std::cout << "\nTest Failed!" << endl; + + // Final return value (0 = successfull, non-zero = failure) + + return status; +} diff --git a/tlnos/src/wExample9.h b/tlnos/src/wExample9.h new file mode 100644 index 0000000000000000000000000000000000000000..00b890b15f625c7b438164e02ec1e25467d8cd6a --- /dev/null +++ b/tlnos/src/wExample9.h @@ -0,0 +1,30 @@ +#ifndef WEXAMPLE9_H +#define WEXAMPLE9_H + +#include "tlnos.h" +#include "wObject.h" +#include <iostream> +#include <vector> +#include <string> +#ifndef SWIG +#include "Teuchos_Comm.hpp" +#include "Teuchos_XMLParameterListHelpers.hpp" +#endif + +namespace tlnos +{ + +/** + * @brief a class containing the "build-against-trilinos" example of trilinos + */ + +class TLNOS_API Example9 : public fwk::wObject +{ +public: + Example9(); + int execute(); +}; + +} // namespace tlnos + +#endif //WEXAMPL98_H diff --git a/tlnos/tests/example1.py b/tlnos/tests/example1.py new file mode 100644 index 0000000000000000000000000000000000000000..3e6907c3fbce4ed03bb4dfb30028373ceba2bb35 --- /dev/null +++ b/tlnos/tests/example1.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# runs the basic demo of Trilinos +# trilinos-12.6.1-Source/demos/buildAgainstTrilinos + + +import fwk.wutils as wu +import tlnos + +def main(**d): + print("main!") + expl = tlnos.Example1() + expl.execute(wu.pth("input.xml",__file__)) + +if __name__ == "__main__": + main() + diff --git a/tlnos/tests/example10.py b/tlnos/tests/example10.py new file mode 100644 index 0000000000000000000000000000000000000000..de58b7ae197f0491b72d6e9700248551d07374de --- /dev/null +++ b/tlnos/tests/example10.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- +# runs the basic demo of Trilinos +# trilinos-12.6.1-Source/demos/buildAgainstTrilinos + +import fwk.wutils as wu +import tlnos + +def main(**d): + expl = tlnos.Example10() + expl.execute() + +if __name__ == "__main__": + main() + diff --git a/tlnos/tests/example2.py b/tlnos/tests/example2.py new file mode 100644 index 0000000000000000000000000000000000000000..5a2eedfd338b219b53b2ce1d1d959427bd1e8d67 --- /dev/null +++ b/tlnos/tests/example2.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- +# runs the basic demo of Trilinos +# trilinos-12.6.1-Source/demos/buildAgainstTrilinos + +import fwk.wutils as wu +import tlnos + +def main(**d): + expl = tlnos.Example2() + expl.execute() + +if __name__ == "__main__": + main() + diff --git a/tlnos/tests/example4.py b/tlnos/tests/example4.py new file mode 100644 index 0000000000000000000000000000000000000000..fdd0728e82aaf40188933322278f5ee525190fe3 --- /dev/null +++ b/tlnos/tests/example4.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8; -*- +# runs the basic demo of Trilinos +# trilinos-12.6.1-Source/demos/buildAgainstTrilinos + +import fwk.wutils as wu +import tlnos + +def main(**d): + expl = tlnos.Example4() + expl.execute() + +if __name__ == "__main__": + main() + diff --git a/tlnos/tests/input.xml b/tlnos/tests/input.xml new file mode 100644 index 0000000000000000000000000000000000000000..feeab544d5b78e77f9d4dc71d2dc1424b8c7fd9c --- /dev/null +++ b/tlnos/tests/input.xml @@ -0,0 +1,7 @@ +<ParameterList> + <ParameterList name="Application"> + <Parameter name="Name" type="string" value="Cold Fusion"/> + </ParameterList> +</ParameterList> + +